jabe 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. data/Gemfile +35 -0
  2. data/Gemfile.lock +217 -0
  3. data/LICENSE.txt +20 -0
  4. data/README.textile +12 -0
  5. data/Rakefile +55 -0
  6. data/VERSION +1 -0
  7. data/app/controllers/admin/base_controller.rb +3 -0
  8. data/app/controllers/admin/entries_controller.rb +42 -0
  9. data/app/controllers/admin/settings_controller.rb +11 -0
  10. data/app/controllers/comments_controller.rb +25 -0
  11. data/app/controllers/entries_controller.rb +26 -0
  12. data/app/helpers/application_helper.rb +9 -0
  13. data/app/models/admin.rb +9 -0
  14. data/app/models/comment.rb +17 -0
  15. data/app/models/entry.rb +17 -0
  16. data/app/models/settings.rb +2 -0
  17. data/app/stylesheets/_will_paginate.scss +102 -0
  18. data/app/stylesheets/application.scss +247 -0
  19. data/app/stylesheets/grid.scss +336 -0
  20. data/app/stylesheets/handheld.scss +7 -0
  21. data/app/stylesheets/style.scss +273 -0
  22. data/app/views/admin/entries/_form.html.haml +6 -0
  23. data/app/views/admin/entries/edit.html.haml +1 -0
  24. data/app/views/admin/entries/index.html.haml +43 -0
  25. data/app/views/admin/entries/new.html.haml +1 -0
  26. data/app/views/admin/settings/edit.html.haml +9 -0
  27. data/app/views/entries/_comment.html.haml +0 -0
  28. data/app/views/entries/_comment_form.html.haml +3 -0
  29. data/app/views/entries/index.html.haml +13 -0
  30. data/app/views/entries/show.html.haml +36 -0
  31. data/app/views/layouts/_footer.html.haml +2 -0
  32. data/app/views/layouts/_header.html.haml +4 -0
  33. data/app/views/layouts/_sidebar.html.haml +0 -0
  34. data/app/views/layouts/application.html.haml +59 -0
  35. data/config/initializers/sass.rb +5 -0
  36. data/config/initializers/settings.rb +5 -0
  37. data/config/initializers/time_formats.rb +4 -0
  38. data/config/routes.rb +26 -0
  39. data/features/admin.feature +30 -0
  40. data/features/entries.feature +24 -0
  41. data/features/step_definitions/admin_steps.rb +14 -0
  42. data/features/step_definitions/entry_steps.rb +35 -0
  43. data/features/step_definitions/support_steps.rb +3 -0
  44. data/features/step_definitions/web_steps.rb +219 -0
  45. data/features/support/blueprints.rb +31 -0
  46. data/features/support/env.rb +59 -0
  47. data/features/support/paths.rb +37 -0
  48. data/lib/generators/jabe/migrations/migrations_generator.rb +42 -0
  49. data/lib/generators/jabe/templates/migrations/create_comments.rb +20 -0
  50. data/lib/generators/jabe/templates/migrations/create_entries.rb +16 -0
  51. data/lib/generators/jabe/templates/migrations/create_settings.rb +21 -0
  52. data/lib/generators/jabe/templates/migrations/create_slugs.rb +18 -0
  53. data/lib/generators/jabe/templates/migrations/devise_create_admins.rb +26 -0
  54. data/lib/jabe.rb +9 -0
  55. data/public/.htaccess +220 -0
  56. data/public/apple-touch-icon.png +0 -0
  57. data/public/blackbird/blackbird.css +80 -0
  58. data/public/blackbird/blackbird.js +365 -0
  59. data/public/blackbird/blackbird.png +0 -0
  60. data/public/crossdomain.xml +25 -0
  61. data/public/images/delete_page.png +0 -0
  62. data/public/images/full_page.png +0 -0
  63. data/public/javascripts/application.js +34 -0
  64. data/public/javascripts/jquery-ui.js +11511 -0
  65. data/public/javascripts/jquery-ui.min.js +404 -0
  66. data/public/javascripts/jquery.js +7179 -0
  67. data/public/javascripts/jquery.min.js +167 -0
  68. data/public/javascripts/libs/dd_belatedpng.js +13 -0
  69. data/public/javascripts/libs/modernizr-1.6.min.js +30 -0
  70. data/public/javascripts/libs/profiling/charts.swf +0 -0
  71. data/public/javascripts/libs/profiling/config.js +59 -0
  72. data/public/javascripts/libs/profiling/yahoo-profiling.css +7 -0
  73. data/public/javascripts/libs/profiling/yahoo-profiling.min.js +39 -0
  74. data/public/javascripts/plugins.js +40 -0
  75. data/public/javascripts/rails.js +154 -0
  76. data/public/nginx.conf +108 -0
  77. data/public/robots.txt +5 -0
  78. data/spec/support/blueprints.rb +31 -0
  79. data/test/dummy/app/controllers/application_controller.rb +3 -0
  80. data/test/dummy/app/helpers/application_helper.rb +2 -0
  81. data/test/dummy/config/application.rb +45 -0
  82. data/test/dummy/config/boot.rb +10 -0
  83. data/test/dummy/config/environment.rb +5 -0
  84. data/test/dummy/config/environments/development.rb +26 -0
  85. data/test/dummy/config/environments/production.rb +49 -0
  86. data/test/dummy/config/environments/test.rb +35 -0
  87. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  88. data/test/dummy/config/initializers/devise.rb +142 -0
  89. data/test/dummy/config/initializers/inflections.rb +10 -0
  90. data/test/dummy/config/initializers/mime_types.rb +5 -0
  91. data/test/dummy/config/initializers/secret_token.rb +7 -0
  92. data/test/dummy/config/initializers/session_store.rb +8 -0
  93. data/test/dummy/config/routes.rb +58 -0
  94. data/test/dummy/db/migrate/20101229224027_create_settings.rb +21 -0
  95. data/test/dummy/db/migrate/20101229224028_create_slugs.rb +18 -0
  96. data/test/dummy/db/migrate/20101229224029_devise_create_admins.rb +26 -0
  97. data/test/dummy/db/migrate/20101229224030_create_entries.rb +16 -0
  98. data/test/dummy/db/migrate/20101229224031_create_comments.rb +20 -0
  99. data/test/dummy/db/schema.rb +82 -0
  100. data/test/dummy/vendor/plugins/acts_as_textiled/init.rb +8 -0
  101. data/test/dummy/vendor/plugins/acts_as_textiled/lib/acts_as_textiled.rb +108 -0
  102. data/test/dummy/vendor/plugins/acts_as_textiled/test/fixtures/author.rb +4 -0
  103. data/test/dummy/vendor/plugins/acts_as_textiled/test/fixtures/story.rb +4 -0
  104. data/test/dummy/vendor/plugins/acts_as_textiled/test/helper.rb +87 -0
  105. data/test/dummy/vendor/plugins/acts_as_textiled/test/textiled_test.rb +145 -0
  106. 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
@@ -0,0 +1,9 @@
1
+ require "rails/all"
2
+
3
+ module Jabe
4
+ class Engine < Rails::Engine
5
+ initializer "static assets" do |app|
6
+ app.middleware.use ::ActionDispatch::Static, "#{root}/public"
7
+ end
8
+ end
9
+ end
@@ -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
+
@@ -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; }