jabe 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +35 -0
- data/Gemfile.lock +217 -0
- data/LICENSE.txt +20 -0
- data/README.textile +12 -0
- data/Rakefile +55 -0
- data/VERSION +1 -0
- data/app/controllers/admin/base_controller.rb +3 -0
- data/app/controllers/admin/entries_controller.rb +42 -0
- data/app/controllers/admin/settings_controller.rb +11 -0
- data/app/controllers/comments_controller.rb +25 -0
- data/app/controllers/entries_controller.rb +26 -0
- data/app/helpers/application_helper.rb +9 -0
- data/app/models/admin.rb +9 -0
- data/app/models/comment.rb +17 -0
- data/app/models/entry.rb +17 -0
- data/app/models/settings.rb +2 -0
- data/app/stylesheets/_will_paginate.scss +102 -0
- data/app/stylesheets/application.scss +247 -0
- data/app/stylesheets/grid.scss +336 -0
- data/app/stylesheets/handheld.scss +7 -0
- data/app/stylesheets/style.scss +273 -0
- data/app/views/admin/entries/_form.html.haml +6 -0
- data/app/views/admin/entries/edit.html.haml +1 -0
- data/app/views/admin/entries/index.html.haml +43 -0
- data/app/views/admin/entries/new.html.haml +1 -0
- data/app/views/admin/settings/edit.html.haml +9 -0
- data/app/views/entries/_comment.html.haml +0 -0
- data/app/views/entries/_comment_form.html.haml +3 -0
- data/app/views/entries/index.html.haml +13 -0
- data/app/views/entries/show.html.haml +36 -0
- data/app/views/layouts/_footer.html.haml +2 -0
- data/app/views/layouts/_header.html.haml +4 -0
- data/app/views/layouts/_sidebar.html.haml +0 -0
- data/app/views/layouts/application.html.haml +59 -0
- data/config/initializers/sass.rb +5 -0
- data/config/initializers/settings.rb +5 -0
- data/config/initializers/time_formats.rb +4 -0
- data/config/routes.rb +26 -0
- data/features/admin.feature +30 -0
- data/features/entries.feature +24 -0
- data/features/step_definitions/admin_steps.rb +14 -0
- data/features/step_definitions/entry_steps.rb +35 -0
- data/features/step_definitions/support_steps.rb +3 -0
- data/features/step_definitions/web_steps.rb +219 -0
- data/features/support/blueprints.rb +31 -0
- data/features/support/env.rb +59 -0
- data/features/support/paths.rb +37 -0
- data/lib/generators/jabe/migrations/migrations_generator.rb +42 -0
- data/lib/generators/jabe/templates/migrations/create_comments.rb +20 -0
- data/lib/generators/jabe/templates/migrations/create_entries.rb +16 -0
- data/lib/generators/jabe/templates/migrations/create_settings.rb +21 -0
- data/lib/generators/jabe/templates/migrations/create_slugs.rb +18 -0
- data/lib/generators/jabe/templates/migrations/devise_create_admins.rb +26 -0
- data/lib/jabe.rb +9 -0
- data/public/.htaccess +220 -0
- data/public/apple-touch-icon.png +0 -0
- data/public/blackbird/blackbird.css +80 -0
- data/public/blackbird/blackbird.js +365 -0
- data/public/blackbird/blackbird.png +0 -0
- data/public/crossdomain.xml +25 -0
- data/public/images/delete_page.png +0 -0
- data/public/images/full_page.png +0 -0
- data/public/javascripts/application.js +34 -0
- data/public/javascripts/jquery-ui.js +11511 -0
- data/public/javascripts/jquery-ui.min.js +404 -0
- data/public/javascripts/jquery.js +7179 -0
- data/public/javascripts/jquery.min.js +167 -0
- data/public/javascripts/libs/dd_belatedpng.js +13 -0
- data/public/javascripts/libs/modernizr-1.6.min.js +30 -0
- data/public/javascripts/libs/profiling/charts.swf +0 -0
- data/public/javascripts/libs/profiling/config.js +59 -0
- data/public/javascripts/libs/profiling/yahoo-profiling.css +7 -0
- data/public/javascripts/libs/profiling/yahoo-profiling.min.js +39 -0
- data/public/javascripts/plugins.js +40 -0
- data/public/javascripts/rails.js +154 -0
- data/public/nginx.conf +108 -0
- data/public/robots.txt +5 -0
- data/spec/support/blueprints.rb +31 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/config/application.rb +45 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +26 -0
- data/test/dummy/config/environments/production.rb +49 -0
- data/test/dummy/config/environments/test.rb +35 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/devise.rb +142 -0
- data/test/dummy/config/initializers/inflections.rb +10 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/routes.rb +58 -0
- data/test/dummy/db/migrate/20101229224027_create_settings.rb +21 -0
- data/test/dummy/db/migrate/20101229224028_create_slugs.rb +18 -0
- data/test/dummy/db/migrate/20101229224029_devise_create_admins.rb +26 -0
- data/test/dummy/db/migrate/20101229224030_create_entries.rb +16 -0
- data/test/dummy/db/migrate/20101229224031_create_comments.rb +20 -0
- data/test/dummy/db/schema.rb +82 -0
- data/test/dummy/vendor/plugins/acts_as_textiled/init.rb +8 -0
- data/test/dummy/vendor/plugins/acts_as_textiled/lib/acts_as_textiled.rb +108 -0
- data/test/dummy/vendor/plugins/acts_as_textiled/test/fixtures/author.rb +4 -0
- data/test/dummy/vendor/plugins/acts_as_textiled/test/fixtures/story.rb +4 -0
- data/test/dummy/vendor/plugins/acts_as_textiled/test/helper.rb +87 -0
- data/test/dummy/vendor/plugins/acts_as_textiled/test/textiled_test.rb +145 -0
- metadata +641 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
module NavigationHelpers
|
2
|
+
# Maps a name to a path. Used by the
|
3
|
+
#
|
4
|
+
# When /^I go to (.+)$/ do |page_name|
|
5
|
+
#
|
6
|
+
# step definition in web_steps.rb
|
7
|
+
#
|
8
|
+
def path_to(page_name)
|
9
|
+
case page_name
|
10
|
+
|
11
|
+
when /the home\s?page/
|
12
|
+
'/'
|
13
|
+
when 'the admin home page'
|
14
|
+
admin_root_path
|
15
|
+
when 'the entry page'
|
16
|
+
entry_path(Entry.last)
|
17
|
+
|
18
|
+
# Add more mappings here.
|
19
|
+
# Here is an example that pulls values out of the Regexp:
|
20
|
+
#
|
21
|
+
# when /^(.*)'s profile page$/i
|
22
|
+
# user_profile_path(User.find_by_login($1))
|
23
|
+
|
24
|
+
else
|
25
|
+
begin
|
26
|
+
page_name =~ /the (.*) page/
|
27
|
+
path_components = $1.split(/\s+/)
|
28
|
+
self.send(path_components.push('path').join('_').to_sym)
|
29
|
+
rescue Object => e
|
30
|
+
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
|
31
|
+
"Now, go and add a mapping in #{__FILE__}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
World(NavigationHelpers)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
|
4
|
+
module Jabe
|
5
|
+
module Generators
|
6
|
+
class MigrationsGenerator < Rails::Generators::Base
|
7
|
+
include Rails::Generators::Migration
|
8
|
+
|
9
|
+
self.source_root(File.expand_path(
|
10
|
+
File.join(__FILE__, '..', '..', 'templates', 'migrations'))
|
11
|
+
)
|
12
|
+
|
13
|
+
desc "run this generator to create the necessary migrations"
|
14
|
+
|
15
|
+
def create_migrations
|
16
|
+
existing_migrations = Dir["db/migrate/*.rb"]
|
17
|
+
migrations = %w(
|
18
|
+
create_settings.rb
|
19
|
+
create_slugs.rb
|
20
|
+
devise_create_admins.rb
|
21
|
+
create_entries.rb
|
22
|
+
create_comments.rb
|
23
|
+
).reject { |file|
|
24
|
+
existing_migrations.any? { |migration|
|
25
|
+
match = migration.match(/#{file}$/)
|
26
|
+
puts "skipping #{file}, exists." if match
|
27
|
+
match
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
migrations.each do |migration|
|
32
|
+
migration_template migration, "db/migrate/#{migration}"
|
33
|
+
sleep 1 # timestamps...
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.next_migration_number(dirname)
|
38
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class CreateComments < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :comments do |t|
|
4
|
+
t.integer :entry_id
|
5
|
+
t.string :name
|
6
|
+
t.string :email
|
7
|
+
t.string :url
|
8
|
+
t.text :body
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
|
13
|
+
add_index :comments, :entry_id
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.down
|
17
|
+
remove_index :comments, :entry_id
|
18
|
+
drop_table :comments
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateEntries < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :entries do |t|
|
4
|
+
t.string :cached_slug
|
5
|
+
t.string :title
|
6
|
+
t.text :body
|
7
|
+
t.boolean :draft
|
8
|
+
t.datetime :published_at
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.down
|
14
|
+
drop_table :entries
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class CreateSettings < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :settings do |t|
|
4
|
+
t.string :site_url
|
5
|
+
t.string :host_name
|
6
|
+
t.string :mail_from
|
7
|
+
t.string :site_name
|
8
|
+
t.string :tagline
|
9
|
+
t.string :time_zone
|
10
|
+
t.string :google_tracker_id
|
11
|
+
t.boolean :blackbird_enabled
|
12
|
+
t.integer :entries_per_page
|
13
|
+
|
14
|
+
t.timestamps
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.down
|
19
|
+
drop_table :settings
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class CreateSlugs < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :slugs do |t|
|
4
|
+
t.string :name
|
5
|
+
t.integer :sluggable_id
|
6
|
+
t.integer :sequence, :null => false, :default => 1
|
7
|
+
t.string :sluggable_type, :limit => 40
|
8
|
+
t.string :scope
|
9
|
+
t.datetime :created_at
|
10
|
+
end
|
11
|
+
add_index :slugs, :sluggable_id
|
12
|
+
add_index :slugs, [:name, :sluggable_type, :sequence, :scope], :name => "index_slugs_on_n_s_s_and_s", :unique => true
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.down
|
16
|
+
drop_table :slugs
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class DeviseCreateAdmins < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table(:admins) do |t|
|
4
|
+
t.database_authenticatable :null => false
|
5
|
+
t.recoverable
|
6
|
+
t.rememberable
|
7
|
+
t.trackable
|
8
|
+
|
9
|
+
# t.confirmable
|
10
|
+
# t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
|
11
|
+
# t.token_authenticatable
|
12
|
+
|
13
|
+
|
14
|
+
t.timestamps
|
15
|
+
end
|
16
|
+
|
17
|
+
add_index :admins, :email, :unique => true
|
18
|
+
add_index :admins, :reset_password_token, :unique => true
|
19
|
+
# add_index :admins, :confirmation_token, :unique => true
|
20
|
+
# add_index :admins, :unlock_token, :unique => true
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.down
|
24
|
+
drop_table :admins
|
25
|
+
end
|
26
|
+
end
|
data/lib/jabe.rb
ADDED
data/public/.htaccess
ADDED
@@ -0,0 +1,220 @@
|
|
1
|
+
# Apache configuration file
|
2
|
+
# httpd.apache.org/docs/2.2/mod/quickreference.html
|
3
|
+
|
4
|
+
# Techniques in here adapted from all over, including:
|
5
|
+
# Kroc Camen: camendesign.com/.htaccess
|
6
|
+
# perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/
|
7
|
+
|
8
|
+
|
9
|
+
# Force the latest IE version, in various cases when it may fall back to IE7 mode
|
10
|
+
# github.com/rails/rails/commit/123eb25#commitcomment-118920
|
11
|
+
# Use ChromeFrame if it's installed for a better experience for the poor IE folk
|
12
|
+
<IfModule mod_setenvif.c>
|
13
|
+
<IfModule mod_headers.c>
|
14
|
+
BrowserMatch MSIE ie
|
15
|
+
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
|
16
|
+
</IfModule>
|
17
|
+
</IfModule>
|
18
|
+
|
19
|
+
<IfModule mod_headers.c>
|
20
|
+
# Because X-UA-Compatible isn't sent to non-IE (to save header bytes),
|
21
|
+
# We need to inform proxies that content changes based on UA
|
22
|
+
Header append Vary User-Agent
|
23
|
+
# Cache control is set only if mod_headers is enabled, so that's unncessary to declare
|
24
|
+
</IfModule>
|
25
|
+
|
26
|
+
# hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/
|
27
|
+
# Disabled. Uncomment to serve cross-domain ajax requests
|
28
|
+
#<IfModule mod_headers.c>
|
29
|
+
# Header set Access-Control-Allow-Origin "*"
|
30
|
+
#</IfModule>
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
# allow access from all domains for webfonts
|
36
|
+
# alternatively you could only whitelist
|
37
|
+
# your subdomains like "sub.domain.com"
|
38
|
+
|
39
|
+
<FilesMatch "\.(ttf|otf|eot|woff|font.css)$">
|
40
|
+
<IfModule mod_headers.c>
|
41
|
+
Header set Access-Control-Allow-Origin "*"
|
42
|
+
</IfModule>
|
43
|
+
</FilesMatch>
|
44
|
+
|
45
|
+
|
46
|
+
# video
|
47
|
+
AddType video/ogg ogg ogv
|
48
|
+
AddType video/mp4 mp4
|
49
|
+
AddType video/webm webm
|
50
|
+
|
51
|
+
# Proper svg serving. Required for svg webfonts on iPad
|
52
|
+
# twitter.com/FontSquirrel/status/14855840545
|
53
|
+
AddType image/svg+xml svg svgz
|
54
|
+
AddEncoding gzip svgz
|
55
|
+
|
56
|
+
# webfonts
|
57
|
+
AddType application/vnd.ms-fontobject eot
|
58
|
+
AddType font/truetype ttf
|
59
|
+
AddType font/opentype otf
|
60
|
+
AddType font/woff woff
|
61
|
+
|
62
|
+
# assorted types
|
63
|
+
AddType image/vnd.microsoft.icon ico
|
64
|
+
AddType image/webp webp
|
65
|
+
AddType text/cache-manifest manifest
|
66
|
+
AddType text/x-component htc
|
67
|
+
AddType application/x-chrome-extension crx
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
# allow concatenation from within specific js and css files
|
73
|
+
|
74
|
+
# e.g. Inside of script.combined.js you could have
|
75
|
+
# <!--#include file="jquery-1.4.2.js" -->
|
76
|
+
# <!--#include file="jquery.idletimer.js" -->
|
77
|
+
# and they would be included into this single file
|
78
|
+
|
79
|
+
# this is not in use in the boilerplate as it stands. you may
|
80
|
+
# choose to name your files in this way for this advantage
|
81
|
+
# or concatenate and minify them manually.
|
82
|
+
# Disabled by default.
|
83
|
+
|
84
|
+
# <FilesMatch "\.combined\.(js|css)$">
|
85
|
+
# Options +Includes
|
86
|
+
# SetOutputFilter INCLUDES
|
87
|
+
# </FilesMatch>
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
# gzip compression.
|
94
|
+
<IfModule mod_deflate.c>
|
95
|
+
|
96
|
+
# html, txt, css, js, json, xml, htc:
|
97
|
+
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
|
98
|
+
AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript
|
99
|
+
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
|
100
|
+
|
101
|
+
# webfonts and svg:
|
102
|
+
<FilesMatch "\.(ttf|otf|eot|svg)$" >
|
103
|
+
SetOutputFilter DEFLATE
|
104
|
+
</FilesMatch>
|
105
|
+
</IfModule>
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
# these are pretty far-future expires headers
|
110
|
+
# they assume you control versioning with cachebusting query params like
|
111
|
+
# <script src="application.js?20100608">
|
112
|
+
# additionally, consider that outdated proxies may miscache
|
113
|
+
# www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/
|
114
|
+
|
115
|
+
# if you don't use filenames to version, lower the css and js to something like
|
116
|
+
# "access plus 1 week" or so
|
117
|
+
|
118
|
+
<IfModule mod_expires.c>
|
119
|
+
Header set Cache-Control "public"
|
120
|
+
ExpiresActive on
|
121
|
+
|
122
|
+
# Perhaps better to whitelist expires rules? Perhaps.
|
123
|
+
ExpiresDefault "access plus 1 month"
|
124
|
+
|
125
|
+
# cache.manifest needs re-requests in FF 3.6 (thx Remy ~Introducing HTML5)
|
126
|
+
ExpiresByType text/cache-manifest "access plus 0 seconds"
|
127
|
+
|
128
|
+
# your document html
|
129
|
+
ExpiresByType text/html "access plus 0 seconds"
|
130
|
+
|
131
|
+
# data
|
132
|
+
ExpiresByType text/xml "access plus 0 seconds"
|
133
|
+
ExpiresByType application/xml "access plus 0 seconds"
|
134
|
+
ExpiresByType application/json "access plus 0 seconds"
|
135
|
+
|
136
|
+
|
137
|
+
# rss feed
|
138
|
+
ExpiresByType application/rss+xml "access plus 1 hour"
|
139
|
+
|
140
|
+
# favicon (cannot be renamed)
|
141
|
+
ExpiresByType image/vnd.microsoft.icon "access plus 1 week"
|
142
|
+
|
143
|
+
# media: images, video, audio
|
144
|
+
ExpiresByType image/gif "access plus 1 month"
|
145
|
+
ExpiresByType image/png "access plus 1 month"
|
146
|
+
ExpiresByType image/jpg "access plus 1 month"
|
147
|
+
ExpiresByType image/jpeg "access plus 1 month"
|
148
|
+
ExpiresByType video/ogg "access plus 1 month"
|
149
|
+
ExpiresByType audio/ogg "access plus 1 month"
|
150
|
+
ExpiresByType video/mp4 "access plus 1 month"
|
151
|
+
ExpiresByType video/webm "access plus 1 month"
|
152
|
+
|
153
|
+
# webfonts
|
154
|
+
ExpiresByType font/truetype "access plus 1 month"
|
155
|
+
ExpiresByType font/opentype "access plus 1 month"
|
156
|
+
ExpiresByType font/woff "access plus 1 month"
|
157
|
+
ExpiresByType image/svg+xml "access plus 1 month"
|
158
|
+
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
|
159
|
+
|
160
|
+
# css and javascript
|
161
|
+
ExpiresByType text/css "access plus 1 month"
|
162
|
+
ExpiresByType application/javascript "access plus 1 month"
|
163
|
+
ExpiresByType text/javascript "access plus 1 month"
|
164
|
+
</IfModule>
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
# Since we're sending far-future expires, we don't need ETags for
|
170
|
+
# static content.
|
171
|
+
# developer.yahoo.com/performance/rules.html#etags
|
172
|
+
FileETag None
|
173
|
+
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
# Allow cookies to be set from iframes (for IE only)
|
178
|
+
# If needed, uncomment and specify a path or regex in the Location directive
|
179
|
+
|
180
|
+
# <IfModule mod_headers.c>
|
181
|
+
# <Location />
|
182
|
+
# Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
|
183
|
+
# </Location>
|
184
|
+
# </IfModule>
|
185
|
+
|
186
|
+
|
187
|
+
# you probably want www.example.com to forward to example.com -- shorter URLs are sexier.
|
188
|
+
# no-www.org/faq.php?q=class_b
|
189
|
+
<IfModule mod_rewrite.c>
|
190
|
+
RewriteEngine On
|
191
|
+
RewriteCond %{HTTPS} !=on
|
192
|
+
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
|
193
|
+
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
|
194
|
+
</IfModule>
|
195
|
+
|
196
|
+
# without -MultiViews, Apache will give a 404 for a rewrite if a folder of the same name does not exist
|
197
|
+
# e.g. /blog/hello : webmasterworld.com/apache/3808792.htm
|
198
|
+
Options -MultiViews
|
199
|
+
# -Indexes will have Apache block users from browsing folders without a default document
|
200
|
+
# Options -Indexes
|
201
|
+
|
202
|
+
|
203
|
+
|
204
|
+
# custom 404 page
|
205
|
+
ErrorDocument 404 /404.html
|
206
|
+
|
207
|
+
|
208
|
+
|
209
|
+
# use utf-8 encoding for anything served text/plain or text/html
|
210
|
+
AddDefaultCharset utf-8
|
211
|
+
# force utf-8 for a number of file formats
|
212
|
+
AddCharset utf-8 .html .css .js .xml .json .rss
|
213
|
+
|
214
|
+
|
215
|
+
|
216
|
+
# We don't need to tell everyone we're apache.
|
217
|
+
ServerSignature Off
|
218
|
+
|
219
|
+
|
220
|
+
|
Binary file
|
@@ -0,0 +1,80 @@
|
|
1
|
+
/*
|
2
|
+
Blackbird - Open Source JavaScript Logging Utility
|
3
|
+
Author: G Scott Olson
|
4
|
+
Web: http://blackbirdjs.googlecode.com/
|
5
|
+
http://www.gscottolson.com/blackbirdjs/
|
6
|
+
Version: 1.0
|
7
|
+
|
8
|
+
The MIT License - Copyright (c) 2008 Blackbird Project
|
9
|
+
*/
|
10
|
+
#blackbird { margin:0; padding:0; position:fixed; _position:absolute; font:11px/1.3 Consolas, 'Lucida Console', Monaco, monospace; _border:2px solid #BBB; }
|
11
|
+
#blackbird.bb-top-left { top:0; left:0; _top:expression(eval(document.documentElement.scrollTop+8)); _left:expression(eval(document.documentElement.scrollLeft+8)); }
|
12
|
+
#blackbird.bb-top-right { top:0; right:0; }
|
13
|
+
* html .bb-top-right { right:auto; top:expression(eval(document.documentElement.scrollTop+8)); left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-document.getElementById('blackbird').offsetWidth-8)); }
|
14
|
+
#blackbird.bb-bottom-left { bottom:0; left:0; }
|
15
|
+
* html .bb-bottom-left { bottom:auto; top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-document.getElementById('blackbird').offsetHeight-8)); left:expression(eval(document.documentElement.scrollLeft+8)); }
|
16
|
+
#blackbird.bb-bottom-right { bottom:0; right:0; }
|
17
|
+
* html .bb-bottom-right { bottom:auto; right:auto; top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-document.getElementById('blackbird').offsetHeight-8)); left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-document.getElementById('blackbird').offsetWidth-8)); }
|
18
|
+
|
19
|
+
#blackbird.bb-small { width:300px; _width:272px; }
|
20
|
+
#blackbird.bb-small .bb-header { _width:272px; }
|
21
|
+
#blackbird.bb-small .bb-header div.bb-left, #blackbird.bb-small .bb-footer div.bb-left { width:150px; }
|
22
|
+
#blackbird.bb-small .bb-main { _width:272px; }
|
23
|
+
#blackbird.bb-small .bb-main div { height:200px; }
|
24
|
+
#blackbird.bb-small .bb-main div.bb-mainBody { width:272px; }
|
25
|
+
#blackbird.bb-small .bb-footer { _width:272px; }
|
26
|
+
|
27
|
+
#blackbird.bb-large { width:500px; _width:472px; }
|
28
|
+
#blackbird.bb-large .bb-header { _width:472px; }
|
29
|
+
#blackbird.bb-large .bb-header div.bb-left, #blackbird.bb-large .bb-footer div.bb-left { width:350px; }
|
30
|
+
#blackbird.bb-large .bb-main { _width:472px; }
|
31
|
+
#blackbird.bb-large .bb-main div { height:500px; }
|
32
|
+
#blackbird.bb-large .bb-main div.bb-mainBody { width:472px; }
|
33
|
+
#blackbird.bb-large .bb-footer { _width:472px; }
|
34
|
+
|
35
|
+
#blackbird .bb-header span { cursor: pointer; position:relative; width:16px; height:16px; margin:0 4px; float:left; background-image:url(blackbird.png); background-repeat:no-repeat; }
|
36
|
+
#blackbird .bb-header span.bb-error { background-position:100% -84px; }
|
37
|
+
#blackbird .bb-header span.bb-warn { background-position:100% -100px; }
|
38
|
+
#blackbird .bb-header span.bb-info { background-position:100% -116px; }
|
39
|
+
#blackbird .bb-header span.bb-debug { background-position:100% -132px; }
|
40
|
+
#blackbird .bb-header span.bb-profile { background-position:100% -148px; }
|
41
|
+
#blackbird .bb-header span.bb-close { background-position:100% -68px; }
|
42
|
+
#blackbird .bb-header span.bb-clear { background-position:100% -52px; }
|
43
|
+
#blackbird .bb-header span.bb-contract { background-position:100% -20px; }
|
44
|
+
#blackbird .bb-header span.bb-expand { background-position:100% -36px; }
|
45
|
+
#blackbird .bb-header span.bb-disabled { opacity: 0.4; *filter:alpha(opacity=40); }
|
46
|
+
|
47
|
+
#blackbird .bb-header > div, #blackbird .bb-main > div, #blackbird .bb-footer > div { background-image:url(blackbird.png); background-repeat:no-repeat; }
|
48
|
+
|
49
|
+
#blackbird .bb-header div { float:left; _background-color:#000; }
|
50
|
+
#blackbird .bb-header div.bb-left { background-position:0 0; height:40px; _height:16px; }
|
51
|
+
#blackbird #bbFilters { margin-left: -4px; padding:16px 0 0 19px; float:left; _padding:6px 8px; }
|
52
|
+
#blackbird .bb-header div.bb-right { background-position:-350px 0; height:40px; width:150px; _width:122px; _height:16px; }
|
53
|
+
#blackbird #bbControls { padding:16px 24px 0 0; float:right; _padding:6px 8px; }
|
54
|
+
#blackbird #bbControls span { margin:0 2px; }
|
55
|
+
#blackbird #bbControls span.bb-clear { margin-right:8px; }
|
56
|
+
|
57
|
+
#blackbird .bb-main div { float:left; }
|
58
|
+
#blackbird .bb-main div.bb-left { background-position:0 -30px; width:11px; _width:0; }
|
59
|
+
#blackbird .bb-main div.bb-mainBody { background-position:-11px -40px; _background-color:#000; _filter:alpha(opacity='90'); }
|
60
|
+
#blackbird .bb-main .bb-mainBody ol { line-height: 1.45; height:100%; overflow:auto; width:100%; list-style-type:none; margin:0; padding:0; }
|
61
|
+
#blackbird .bb-main .bb-mainBody ol li { padding:1px 4px 1px 24px; border-bottom: 1px solid #333; color:#CCC; margin: 2px 2px; _text-indent: -2px; }
|
62
|
+
#blackbird .bb-main .bb-mainBody ol li span { display:block; _display:inline-block; _font-size:6px; _line-height:0; height: 8px; width: 8px; background: url(blackbird.png) no-repeat 0 0; margin: 3px 0 1px -16px; }
|
63
|
+
|
64
|
+
#blackbird .bb-main .bb-mainBody ol li.bb-error span { background-position:100% -164px; }
|
65
|
+
#blackbird .bb-main .bb-mainBody ol li.bb-warn span { background-position:100% -172px; }
|
66
|
+
#blackbird .bb-main .bb-mainBody ol li.bb-info span { background-position:100% -180px; }
|
67
|
+
#blackbird .bb-main .bb-mainBody ol li.bb-debug span { background-position:100% -188px; }
|
68
|
+
#blackbird .bb-main .bb-mainBody ol li.bb-profile span { background-position:100% -196px; }
|
69
|
+
|
70
|
+
#blackbird .bb-main .bb-mainBody ol li.bb-profile { color:#DDD; font-style:italic; }
|
71
|
+
|
72
|
+
#blackbird .bb-error-hidden li.bb-error, #blackbird .bb-warn-hidden li.bb-warn, #blackbird .bb-info-hidden li.bb-info, #blackbird .bb-debug-hidden li.bb-debug, #blackbird .bb-profile-hidden li.bb-profile { display:none; }
|
73
|
+
|
74
|
+
#blackbird .bb-main div.bb-right { background-position:-483px -30px; width:17px; _width:0; }
|
75
|
+
|
76
|
+
#blackbird .bb-footer div { height:50px; float:left; _background-color:#000; _height:auto; _filter:alpha(opacity='90'); }
|
77
|
+
#blackbird .bb-footer div.bb-left { cursor: pointer; background-position:bottom left; _width:100% !important; font-family:Arial,sans-serif; color:#BBB; padding-top: 10px; height: 40px; _height:auto; _padding:4px 0 6px; }
|
78
|
+
#blackbird .bb-footer div.bb-left span { cursor: pointer; display:block; float:left; _float:none; _display:inline-block; _font-size:6px; _line-height:0; background:transparent url(blackbird.png) no-repeat -506px -10px; height:10px; width:10px; margin:2px 4px 0 20px; position:relative; _margin:4px 4px 0 8px; }
|
79
|
+
#blackbird .bb-footer div.bb-left span.checked { background-position: -506px 0; }
|
80
|
+
#blackbird .bb-footer div.bb-right { background-position:-350px -550px; width:150px; _width:0; }
|