diff --git a/.gitignore b/.gitignore index 57426ca..cecd3e7 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,7 @@ # Ignore bundler config /.bundle - +*~ # Ignore the default SQLite database. /db/*.sqlite3 diff --git a/Gemfile b/Gemfile index af9ff23..04bccb8 100644 --- a/Gemfile +++ b/Gemfile @@ -5,13 +5,14 @@ gem 'rails' # Bundle edge Rails instead: # gem 'rails', :git => 'git://github.com/rails/rails.git' -gem 'sqlite3' +#gem 'sqlite3' gem 'sorcery' -gem 'therubyracer' +gem 'therubyracer', :platforms => [:ruby] gem 'sorcery' gem 'carrierwave' gem 'rmagick' - +gem 'thin' +gem 'eventmachine', '~> 1.0.0.beta', :platforms => [:mswin, :mingw] # Gems used only for assets and not required # in production environments by default. group :assets do @@ -41,3 +42,8 @@ group :development do gem 'thin' gem 'daemons' end + +group :test do + gem 'cucumber' + gem 'rspec' +end diff --git a/Gemfile.lock b/Gemfile.lock index e1fcd0a..f18d8d4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -31,6 +31,7 @@ GEM addressable (2.2.6) arel (3.0.0) bcrypt-ruby (3.0.1) + bcrypt-ruby (3.0.1-x86-mingw32) builder (3.0.0) cancan (1.6.7) carrierwave (0.5.8) @@ -44,7 +45,7 @@ GEM coffee-script-source (1.2.0) daemons (1.1.6) erubis (2.7.0) - eventmachine (0.12.10) + eventmachine (1.0.0.beta.4.1-x86-mingw32) execjs (1.3.0) multi_json (~> 1.0) faraday (0.7.6) @@ -71,6 +72,7 @@ GEM faraday (~> 0.7) multi_json (~> 1.0) pg (0.12.2) + pg (0.12.2-x86-mingw32) polyglot (0.3.3) rack (1.4.0) rack-cache (1.1) @@ -113,7 +115,6 @@ GEM hike (~> 1.2) rack (~> 1.0) tilt (~> 1.1, != 1.3.0) - sqlite3 (1.3.5) therubyracer (0.9.9) libv8 (~> 3.3.10) thin (1.3.1) @@ -132,19 +133,20 @@ GEM PLATFORMS ruby + x86-mingw32 DEPENDENCIES cancan carrierwave coffee-rails (~> 3.2.1) daemons + eventmachine (~> 1.0.0.beta) jquery-rails pg rails rmagick sass-rails (~> 3.2.3) sorcery - sqlite3 therubyracer thin uglifier (>= 1.0.3) diff --git a/Gemfile~ b/Gemfile~ deleted file mode 100644 index ebb5f9e..0000000 --- a/Gemfile~ +++ /dev/null @@ -1,37 +0,0 @@ -source 'http://rubygems.org' - -gem 'rails', '3.1.3' - -# Bundle edge Rails instead: -# gem 'rails', :git => 'git://github.com/rails/rails.git' - -gem 'sqlite3' -gem 'sorcery' - - -# Gems used only for assets and not required -# in production environments by default. -group :assets do - gem 'sass-rails', '~> 3.1.5' - gem 'coffee-rails', '~> 3.1.1' - gem 'uglifier', '>= 1.0.3' -end - -gem 'jquery-rails' - -# To use ActiveModel has_secure_password -# gem 'bcrypt-ruby', '~> 3.0.0' - -# Use unicorn as the web server -# gem 'unicorn' - -# Deploy with Capistrano -# gem 'capistrano' - -# To use debugger -# gem 'ruby-debug19', :require => 'ruby-debug' - -group :test do - # Pretty printed test output - gem 'turn', '0.8.2', :require => false -end diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..b41d8da --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: bundle exec rails server thin -p $PORT diff --git a/README~ b/README~ deleted file mode 100644 index 7c36f23..0000000 --- a/README~ +++ /dev/null @@ -1,261 +0,0 @@ -== Welcome to Rails - -Rails is a web-application framework that includes everything needed to create -database-backed web applications according to the Model-View-Control pattern. - -This pattern splits the view (also called the presentation) into "dumb" -templates that are primarily responsible for inserting pre-built data in between -HTML tags. The model contains the "smart" domain objects (such as Account, -Product, Person, Post) that holds all the business logic and knows how to -persist themselves to a database. The controller handles the incoming requests -(such as Save New Account, Update Product, Show Post) by manipulating the model -and directing data to the view. - -In Rails, the model is handled by what's called an object-relational mapping -layer entitled Active Record. This layer allows you to present the data from -database rows as objects and embellish these data objects with business logic -methods. You can read more about Active Record in -link:files/vendor/rails/activerecord/README.html. - -The controller and view are handled by the Action Pack, which handles both -layers by its two parts: Action View and Action Controller. These two layers -are bundled in a single package due to their heavy interdependence. This is -unlike the relationship between the Active Record and Action Pack that is much -more separate. Each of these packages can be used independently outside of -Rails. You can read more about Action Pack in -link:files/vendor/rails/actionpack/README.html. - - -== Getting Started - -1. At the command prompt, create a new Rails application: - rails new myapp (where myapp is the application name) - -2. Change directory to myapp and start the web server: - cd myapp; rails server (run with --help for options) - -3. Go to http://localhost:3000/ and you'll see: - "Welcome aboard: You're riding Ruby on Rails!" - -4. Follow the guidelines to start developing your application. You can find -the following resources handy: - -* The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html -* Ruby on Rails Tutorial Book: http://www.railstutorial.org/ - - -== Debugging Rails - -Sometimes your application goes wrong. Fortunately there are a lot of tools that -will help you debug it and get it back on the rails. - -First area to check is the application log files. Have "tail -f" commands -running on the server.log and development.log. Rails will automatically display -debugging and runtime information to these files. Debugging info will also be -shown in the browser on requests from 127.0.0.1. - -You can also log your own messages directly into the log file from your code -using the Ruby logger class from inside your controllers. Example: - - class WeblogController < ActionController::Base - def destroy - @weblog = Weblog.find(params[:id]) - @weblog.destroy - logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!") - end - end - -The result will be a message in your log file along the lines of: - - Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1! - -More information on how to use the logger is at http://www.ruby-doc.org/core/ - -Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are -several books available online as well: - -* Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe) -* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide) - -These two books will bring you up to speed on the Ruby language and also on -programming in general. - - -== Debugger - -Debugger support is available through the debugger command when you start your -Mongrel or WEBrick server with --debugger. This means that you can break out of -execution at any point in the code, investigate and change the model, and then, -resume execution! You need to install ruby-debug to run the server in debugging -mode. With gems, use sudo gem install ruby-debug. Example: - - class WeblogController < ActionController::Base - def index - @posts = Post.all - debugger - end - end - -So the controller will accept the action, run the first line, then present you -with a IRB prompt in the server window. Here you can do things like: - - >> @posts.inspect - => "[#nil, "body"=>nil, "id"=>"1"}>, - #"Rails", "body"=>"Only ten..", "id"=>"2"}>]" - >> @posts.first.title = "hello from a debugger" - => "hello from a debugger" - -...and even better, you can examine how your runtime objects actually work: - - >> f = @posts.first - => #nil, "body"=>nil, "id"=>"1"}> - >> f. - Display all 152 possibilities? (y or n) - -Finally, when you're ready to resume execution, you can enter "cont". - - -== Console - -The console is a Ruby shell, which allows you to interact with your -application's domain model. Here you'll have all parts of the application -configured, just like it is when the application is running. You can inspect -domain models, change values, and save to the database. Starting the script -without arguments will launch it in the development environment. - -To start the console, run rails console from the application -directory. - -Options: - -* Passing the -s, --sandbox argument will rollback any modifications - made to the database. -* Passing an environment name as an argument will load the corresponding - environment. Example: rails console production. - -To reload your controllers and models after launching the console run -reload! - -More information about irb can be found at: -link:http://www.rubycentral.org/pickaxe/irb.html - - -== dbconsole - -You can go to the command line of your database directly through rails -dbconsole. You would be connected to the database with the credentials -defined in database.yml. Starting the script without arguments will connect you -to the development database. Passing an argument will connect you to a different -database, like rails dbconsole production. Currently works for MySQL, -PostgreSQL and SQLite 3. - -== Description of Contents - -The default directory structure of a generated Ruby on Rails application: - - |-- app - | |-- assets - | |-- images - | |-- javascripts - | `-- stylesheets - | |-- controllers - | |-- helpers - | |-- mailers - | |-- models - | `-- views - | `-- layouts - |-- config - | |-- environments - | |-- initializers - | `-- locales - |-- db - |-- doc - |-- lib - | `-- tasks - |-- log - |-- public - |-- script - |-- test - | |-- fixtures - | |-- functional - | |-- integration - | |-- performance - | `-- unit - |-- tmp - | |-- cache - | |-- pids - | |-- sessions - | `-- sockets - `-- vendor - |-- assets - `-- stylesheets - `-- plugins - -app - Holds all the code that's specific to this particular application. - -app/assets - Contains subdirectories for images, stylesheets, and JavaScript files. - -app/controllers - Holds controllers that should be named like weblogs_controller.rb for - automated URL mapping. All controllers should descend from - ApplicationController which itself descends from ActionController::Base. - -app/models - Holds models that should be named like post.rb. Models descend from - ActiveRecord::Base by default. - -app/views - Holds the template files for the view that should be named like - weblogs/index.html.erb for the WeblogsController#index action. All views use - eRuby syntax by default. - -app/views/layouts - Holds the template files for layouts to be used with views. This models the - common header/footer method of wrapping views. In your views, define a layout - using the layout :default and create a file named default.html.erb. - Inside default.html.erb, call <% yield %> to render the view using this - layout. - -app/helpers - Holds view helpers that should be named like weblogs_helper.rb. These are - generated for you automatically when using generators for controllers. - Helpers can be used to wrap functionality for your views into methods. - -config - Configuration files for the Rails environment, the routing map, the database, - and other dependencies. - -db - Contains the database schema in schema.rb. db/migrate contains all the - sequence of Migrations for your schema. - -doc - This directory is where your application documentation will be stored when - generated using rake doc:app - -lib - Application specific libraries. Basically, any kind of custom code that - doesn't belong under controllers, models, or helpers. This directory is in - the load path. - -public - The directory available for the web server. Also contains the dispatchers and the - default HTML files. This should be set as the DOCUMENT_ROOT of your web - server. - -script - Helper scripts for automation and generation. - -test - Unit and functional tests along with fixtures. When using the rails generate - command, template test files will be generated for you and placed in this - directory. - -vendor - External libraries that the application depends on. Also includes the plugins - subdirectory. If the app has frozen rails, those gems also go here, under - vendor/rails/. This directory is in the load path. diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png new file mode 100644 index 0000000..15bbba0 Binary files /dev/null and b/app/assets/images/logo.png differ diff --git a/app/assets/stylesheets/AUTHORS.textile b/app/assets/stylesheets/AUTHORS.textile new file mode 100644 index 0000000..a94b75a --- /dev/null +++ b/app/assets/stylesheets/AUTHORS.textile @@ -0,0 +1,43 @@ +h1. Blueprint CSS Framework Authors and Contributors + +Blueprint is based on the work of many talented people. It is +through their good intentions we are allowed to use many of the +techniques found in the framework. + +h2. Current Team + +Blueprint was realized and maintained through version 0.7.1 by +"Olav Bjorkoy":http://bjorkoy.com who has sinced passed the torch +to the current team. They are: + +Admins: +* "Christian Montoya":http://christianmontoya.net +* "Josh Clayton":http://jdclayton.com + +Contributors: +* "Franz Josef Kaiser":http://github.com/franz-josef-kaiser +* "Glenn Rempe":http://www.rempe.us/ +* "Chris Eppstein":http://chriseppstein.github.com/ +* "Sean K. Stewart":http://seankstewart.com/ + +h2. Original CSS authors + +The first iteration of Blueprint was built upon many conventions +and ideas that were developed by true CSS experts. + +The grid and typography is based on work by: +* "Jeff Croft":http://jeffcroft.com +* "Nathan Borror":http://nathanborror.com/ +* "Christian Metts":http://mintchaos.com +* "Wilson Miner":http://www.wilsonminer.com + +The CSS reset is based on work by: +* "Eric Meyer":http://www.meyerweb.com/eric + +The Fancy Type plugin is based on work by: +* "Mark Boulton":http://www.markboulton.co.uk +* "Typogrify":http://typogrify.googlecode.com + +(However, remember that these people are not involved with the +framework, so please don't waste their time or yours by asking +them for support.) \ No newline at end of file diff --git a/app/assets/stylesheets/CHANGELOG b/app/assets/stylesheets/CHANGELOG new file mode 100644 index 0000000..e62eb1a --- /dev/null +++ b/app/assets/stylesheets/CHANGELOG @@ -0,0 +1,168 @@ +Blueprint CSS Framework Change Log +---------------------------------------------------------------- + +Version 1.0 - Date September 29, 2010 +-- + New features: + * Added detailed explanations to core uncompressed CSS files [CMM] + * Added .info and .alert classes to forms.css [CMM] + * Fixed numerous bugs in forms, including the fieldset padding bug in IE6-8 [CMM] + * Fixed specificity problems in typography.css and grid.css [CMM] + * See Lighthouse for more bug fixes + +Version 0.9 - Date May 29, 2009 +-- + New features: + * Changed all conditional comments to [if lt IE 8] for IE 8 compatibility [CMM] + * Updated forms code to align inline form elements, with additions for IE 6 [CMM] + * Use
for inline forms + * Use classes "text", "button", "radio" and "checkbox" on inputs for IE 6 compatibility + + +Version 0.8 - Date November 11, 2008 +-- + New features: + * Much of the flexibility of 0.6 has been pushed back into the core [CMM] + * Plugins from 0.6 are now back in the core [CMM] + + Bug fixes: + * Lots. See http://blueprintcss.lighthouseapp.com/projects/15318-blueprint-css + + +Version 0.7.1 - Date February 21, 2008 +-- + New features: + * Rubydoc for compressor [JC] + + Bug fixes: + * Fixed bug in the compressor related to Rubygems. [JC] + * should be inline, not block. [OFB] + + +Version 0.7 - February 19, 2008 +-- + New features: + * New directory structure. [OFB] + * New compressor script. [JC] + * Ability to set custom namespace for BP classes. [JC] + * Optional custom column count and widths. [JC] + * Ability to add your own CSS files. [JC] + * Custom output paths. [JC] + * Support for multiple projects. [JC] + * Semantic class naming from CSS rules. [JC] + * Automatic compression for plugins. [JC] + * Compressed version of ie.css. [OFB] + * Alternating table row colors. [OFB] + * Added class .showgrid to see the grid of any column or container. [OFB] + * No need for .column! You now have to use divs for columns, + but you can still use span/prepend/append for other elements as well. + In other words, div.span-x now implies that the element is a .column. [OFB] + + Bug fixes: + * Sidebar alignment in tests/sample.html. [OFB] + * Line-height on sub/sup. [OFB] + * Clearfix not properly applied to container. [OFB] + * Misc validation errors in tests. [OFB] + * Proper margin on address. [OFB] + * Unwanted bottom margin on nested lists. [OFB] + * Form labels with unwanted fancy-type indentation. [OFB] + * Proper margin on all form elements. [OFB] + * No margins for images in headings. [OFB] + * Push-x bottom margin. [OFB] + * Vertical align set to middle on tables. [OFB] + * Improved .notice, .error and .success color contrast. [OFB] + * Size of input[text]. [OFB] + * Baseline alignment of

. [OFB] + + Misc: + * Improved structure in print.css. [OFB] + * Dual-licensed under MIT and GPL licenses. [OFB] + * Changed name of .clear to .clearfix, and added .clear (clear:both;). [OFB] + + +Version 0.6 - September 21, 2007 +-- + * Created a new plugin, "iepngfix", that adds support for PNG transparency in IE5.5+ [OFB] + * Added an IE stylesheet, updated the test files and the readme accordingly [OFB] + * Re-added improved support for em units [OFB] + * Lots of minor changes to typography.css and reset.css, provided by Christian Montoya [OFB] + * Extracted the fancy typography section in typography.css to a new plugin [OFB] + * Extracted the support for CSS buttons into a new plugin. [OFB] + * Added new plugin structure. [OFB] + * Changed some default fonts so that BP works better with ClearType in XP [OFB] + * Re-added the hack for clearing floats without extra markup. [OFB] + * Added Changelog.txt to track changes in each release. [GR] + * Cleaned up and rationalized SVN dir structure. [GR, OFB] + * print.css : removed reference to 'baseline.png' as it no longer exists. [GR] + * grid.css : removed reference to '.first' css class as it no longer exists. [GR] + * Added append-13 to append-23 and prepend-13 to prepend-23 to allow pushing elements + to both extreme sides of the grid. Added test cases to tests/grid.css [GR] + * Moved test sample files to blueprint/tests sub-directory so tests stay with the code. [GR] + * Consolidated all references to release version number to screen.css [OFB] + * Added ruby script (generate_compressed_css.rb) to scripts dir, and 'csstidy' binary (OS X Universal) + for generating tidied version of Blueprint (lib/compressed.css). + * Consolidated test pages into one single page (test.html). Uses compressed stylesheet by default. This ensures test of + the chain of generation. (todo) Intention is to delete other test files if single file works well. (todo) ensure singular + test file contains latest changes to other test files. [GR] + * Moved the blueprint framework to its own folder in the package, so that the tests, script, + license and readme don't clutter up our BP folder. [OFB] + * Re-saved grid.png with Photoshop to remove Fireworks data which was bloating it. + Now its about 3KB instead of 40+KB. Resolves Issue 22. [GR] + * Moved compressed files to new compressed dir [OFB] + * print.css is now also being generated by the compressor ruby script and is available for use. + * Added new script 'validate_css.rb' which will validate all css files and present a report with + a local java binary of the W3C validator. + * Created an experimental CSS classes plugin, by popular demand. [OFB] + * Improved handling of multi-line headings. [OFB] + * Improved styling of s, you may now use .span classes on ",""],legend:[1,"
","
"],thead:[1,"
s to create tables that follow the grid. [OFB] + * Added support for indented paragraphs to the Fancy-type plugin. [OFB] + * Added a new plugin: link-icons. [OFB] + * Seperated the plugins tests into their own file. [OFB] + * Re-structured some of the tests.html sections. [OFB] + * Added class ".colborder" to grid.css. [OFB] + * Added .error, .notice and .success classes to typography.css. [OFB] + * Added tests for more elements which gets reset in reset.css [OFB, GR] + * Added forms.css, awaiting implementation. Moved form styling from typography.css [OFB] + * Updated compressor script to include forms.css [OFB] + * Improved forms.html tests for upcoming forms.css implementation. This will change based on the + markup that forms.css will use. [OFB] + * Fixed clearing image in button element bug in buttons.css [OFB] + * Fixed bug where IE6 clips pushed/pulled elements. [OFB] + * Fixed typo in grid.css formula. [OFB] + * Fixed varying formatting across core files. [OFB] + * Fixed legend element in IE6. [OFB] + * Fixed indentation in test files. [OFB] + * Removed tests for plugins not bundled with the next release. [OFB] + * Improved styling of

. [OFB] + * Fixed indentation bug in ul/ol, removed some redundant styling. [OFB] + * Fixed validation errors in tests. [OFB] + * Changed IE stylesheet condition comment to include all versions of IE. [OFB] + * Started on a new approach for the PNG plugin. Will not be included in this release. [OFB] + * Fixed incorrect rendering of ol in IE6/7. [OFB] + * Created a new, spiffier sample page. [OFB] + + +Version 0.5 - August 28, 2007 +-- + * Changed grid width from 14 to 24 columns [OFB] + * Removed 'first' CSS class and the need to apply it to the first column in a row of columns. [OFB] + * Reverted to using pixels instead of em units to specify vertical spacing due to baseline issues with + all browsers except Firefox. [OFB] + * New set of default fonts. (Experimental) [OFB] + * Added test files [OFB] + + +Version 0.4 - August 11, 2007 +-- + * All font sizes and vertical margins are now elastic, through the use of em units. + Resizing works great in every tested browser. [OFB] + * Comes with a new, compressed version of BP, which reduces the size of the core files by 60 percent. [OFB] + * Support for incremental leading, contributed by Mark Boulton. [OFB] + * Adds perfected CSS buttons, by Kevin Hale of Particletree fame. [OFB] + * Fixes all known IE bugs. [OFB] + * Loads of minor fixes and additions. [OFB] + + +Version 0.3 - March 8, 2007 +-- + * Initial release of Blueprint (versions 0.1 and 0.2 were internal only). diff --git a/app/assets/stylesheets/Gemfile b/app/assets/stylesheets/Gemfile new file mode 100644 index 0000000..96161fe --- /dev/null +++ b/app/assets/stylesheets/Gemfile @@ -0,0 +1,12 @@ +source "http://rubygems.org" + +gem "colored" +gem "chunky_png" + +group :test do + gem "cucumber", "0.10.2" + gem "aruba", "0.3.6" + gem "rspec", "2.6.0" + gem "capybara", "0.4.1.2" + gem "capybara-webkit", "0.3.0" +end diff --git a/app/assets/stylesheets/Gemfile.lock b/app/assets/stylesheets/Gemfile.lock new file mode 100644 index 0000000..3909338 --- /dev/null +++ b/app/assets/stylesheets/Gemfile.lock @@ -0,0 +1,71 @@ +GEM + remote: http://rubygems.org/ + specs: + aruba (0.3.6) + childprocess (>= 0.1.7) + cucumber (>= 0.10.0) + rspec (>= 2.5.0) + builder (3.0.0) + capybara (0.4.1.2) + celerity (>= 0.7.9) + culerity (>= 0.2.4) + mime-types (>= 1.16) + nokogiri (>= 1.3.3) + rack (>= 1.0.0) + rack-test (>= 0.5.4) + selenium-webdriver (>= 0.0.27) + xpath (~> 0.1.3) + capybara-webkit (0.3.0) + capybara (~> 0.4.1) + celerity (0.8.9) + childprocess (0.1.9) + ffi (~> 1.0.6) + chunky_png (1.2.0) + colored (1.2) + cucumber (0.10.2) + builder (>= 2.1.2) + diff-lcs (>= 1.1.2) + gherkin (>= 2.3.5) + json (>= 1.4.6) + term-ansicolor (>= 1.0.5) + culerity (0.2.15) + diff-lcs (1.1.2) + ffi (1.0.8) + gherkin (2.3.7) + json (>= 1.4.6) + json (1.5.1) + json_pure (1.5.1) + mime-types (1.16) + nokogiri (1.4.4) + rack (1.2.2) + rack-test (0.6.0) + rack (>= 1.0) + rspec (2.6.0) + rspec-core (~> 2.6.0) + rspec-expectations (~> 2.6.0) + rspec-mocks (~> 2.6.0) + rspec-core (2.6.0) + rspec-expectations (2.6.0) + diff-lcs (~> 1.1.2) + rspec-mocks (2.6.0) + rubyzip (0.9.4) + selenium-webdriver (0.2.0) + childprocess (>= 0.1.7) + ffi (>= 1.0.7) + json_pure + rubyzip + term-ansicolor (1.0.5) + xpath (0.1.4) + nokogiri (~> 1.3) + +PLATFORMS + ruby + +DEPENDENCIES + aruba (= 0.3.6) + capybara (= 0.4.1.2) + capybara-webkit (= 0.3.0) + chunky_png + colored + cucumber (= 0.10.2) + rspec (= 2.6.0) diff --git a/app/assets/stylesheets/LICENSE b/app/assets/stylesheets/LICENSE new file mode 100644 index 0000000..13076fb --- /dev/null +++ b/app/assets/stylesheets/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2007 - 2010 blueprintcss.org + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/app/assets/stylesheets/README.textile b/app/assets/stylesheets/README.textile new file mode 100644 index 0000000..f4be0a8 --- /dev/null +++ b/app/assets/stylesheets/README.textile @@ -0,0 +1,83 @@ +h1. Blueprint CSS Framework Readme + +Welcome to Blueprint! This is a CSS framework designed to cut down on your CSS development time. It gives you a solid foundation to build your own CSS on. Here are some of the features BP provides out-of-the-box: + +* An easily customizable grid +* Sensible default typography +* A typographic baseline +* Perfected browser CSS reset +* A stylesheet for printing +* Powerful scripts for customization +* Absolutely no bloat! + +h2. Project Info + +* *Web*: "http://blueprintcss.org":http://blueprintcss.org +* *Source*: "http://github.com/joshuaclayton/blueprint-css":http://github.com/joshuaclayton/blueprint-css +* *Wiki*: "http://github.com/joshuaclayton/blueprint-css/wikis/home":http://github.com/joshuaclayton/blueprint-css/wikis/home +* *Bug/Feature Tracking*: "http://blueprintcss.lighthouseapp.com":http://blueprintcss.lighthouseapp.com + +h2. Setup Instructions + +Here's how you set up Blueprint on your site. + +# Upload the "blueprint" folder in this folder to your server, and place it in whatever folder you'd like. A good choice would be your CSS folder. +# Add the following three lines to every @@ of your site. Make sure the three @href@ paths are correct (here, BP is in my CSS folder):

+
+
+
+Remember to include trailing slashes (" />") in these lines if you're using XHTML. +# For development, add the .showgrid class to any container or column to see the underlying grid. Check out the @plugins@ directory for more advanced functionality. + + +h2. Tutorials + +* "How to customize BP with the compressor script":http://jdclayton.com/blueprints_compress_a_walkthrough.html +* "How to use a grid in a layout":http://subtraction.com/2007/03/18/oh-yeeaahh +* "How to use a baseline in your typography":http://alistapart.com/articles/settingtypeontheweb + +h2. Files in Blueprint + +The framework has a few files you should check out. Every file in the @src@ directory contains lots of (hopefully) clarifying comments. + +Compressed files (these go in the HTML): + +* @blueprint/screen.css@ +* @blueprint/print.css@ +* @blueprint/ie.css@ + +Source files: +* @blueprint/src/reset.css@
+This file resets CSS values that browsers tend to set for you. +* @blueprint/src/grid.css@
+This file sets up the grid (it's true). It has a lot of classes you apply to @
@ elements to set up any sort of column-based grid. +* @blueprint/lib/blueprint/grid.css.erb@
+This file is used by the compressor (see below) when generating grids. All changes to grid.css are mirrored in this file, manually. +* @blueprint/src/typography.css@
+This file sets some default typography. It also has a few methods for some really fancy stuff to do with your text. +* @blueprint/src/forms.css@
+Includes some minimal styling of forms. +* @blueprint/src/print.css@
+This file sets some default print rules, so that printed versions of your site looks better than they usually would. It should be included on every page. +* @blueprint/src/ie.css@
+Includes every hack for our beloved IE6 and 7. + +Scripts: +* @lib/compress.rb@
+A Ruby script for compressing and customizing your CSS. Set a custom namespace, column count, widths, output paths, multiple projects, and semantic class names. See commenting in @compress.rb@ or run @$ruby compress.rb -h@ for more information. +* @lib/validate.rb@
+Validates the Blueprint core files with the W3C CSS validator. + +Other: +* @blueprint/plugins/@
+Contains additional functionality in the form of simple plugins for Blueprint. See individual readme files in the directory of each plugin for further instructions. +* @tests/@
+Contains html files which tests most aspects of Blueprint. Open @tests/index.html@ for further instructions. + +h2. Extra Information + +* For credits and origins, see AUTHORS. +* For license instructions, see LICENSE. +* For the latest updates, see CHANGELOG. diff --git a/app/assets/stylesheets/Rakefile b/app/assets/stylesheets/Rakefile new file mode 100644 index 0000000..6eb4e02 --- /dev/null +++ b/app/assets/stylesheets/Rakefile @@ -0,0 +1,8 @@ +require "bundler/setup" +require "cucumber/rake/task" + +Cucumber::Rake::Task.new(:features) do |t| + t.cucumber_opts = "features --format pretty" +end + +task :default => :features diff --git a/app/assets/stylesheets/TUTORIAL.textile b/app/assets/stylesheets/TUTORIAL.textile new file mode 100644 index 0000000..5429004 --- /dev/null +++ b/app/assets/stylesheets/TUTORIAL.textile @@ -0,0 +1,206 @@ +h1. Blueprint CSS Framework Tutorial + +Welcome to this tutorial on Blueprint. It will give you a thorough intro to what you can do with the framework, and a few notes on what you shouldn't do with it. Let's get started. + +h2. About Blueprint + +Blueprint is a CSS framework, designed to cut down on your development time. It gives you a solid foundation to build your CSS on top of, including some sensible default typography, a customizable grid, a print stylesheet and much more. + +However, BP is not a silver bullet, and it's best suited for websites where each page may require its own design. Take a look at existing BP pages before deciding if the framework is right for you. You may also check out the test files in the @tests@ directory, which demonstrates most of the features in Blueprint. + +The word "framework" may be a bit misleading in this context, since BP does not make suggestions on how you should organize or write your CSS. It's more like a "css toolbox" with helpful bits and pieces, from which you may pick and choose based on your needs. + +h2. Structural Overview + +From the bottom up, here are the CSS layers in Blueprint: + +# *CSS reset*: Removes any default CSS rules set by each browser. +# *Typography*: Gives you some nice default typography and colors. +# *Grid*: Provides a set of CSS classes for making grid layouts. + +The second part of Blueprint are the scripts, which let you customize most +aspects of the framework, from column count and widths, to output paths and +CSS class namespaces. We have two scripts: + +# *Compressor*: For compressing and customizing the source files. +# *Validator*: For validating the Blueprint core files. + +That's the quick overview, so now we can finally get into the details. First, we'll take +a look at the CSS in Blueprint. We'll then move on to the scripts, where I'll show you +how to customize the framework. + +h2. Setting Up Blueprint + +To use Blueprint, you must include three files in your HTML: + +* @blueprint/screen.css@: All CSS for screen, projection viewing. +* @blueprint/print.css@: A basic stylesheet for printing. +* @blueprint/ie.css@: A few needed corrections for Internet Explorer + +To include them, use the following HTML (make sure the href paths are correct): +

+  
+   
+  
+
+Remember to add trailing slashes if you're using XHTML (" />"). + +h2. Using the CSS in Blueprint + +As mentioned before, there's basically three layers of CSS in Blueprint. The first two layers, the browser CSS reset and the default typography, apply themselves by changing the CSS of standard HTML elements. In other words, you don't need to change anything in these files. If you, for instance, want to change the font size, do this in your own stylesheet, so that it's easy to upgrade Blueprint when new versions arrive. + +h3. Classes for Typography + +While the typography of Blueprint mainly applies itself, there's a few classes +provided. Here's a list of their names and what they do: + +
+
@.small@
Makes the text of this element smaller.
+
@.large@
Makes the text of this element larger.
+
@.hide@
Hides an element.
+
@.quiet@
Tones down the font color for this element.
+
@.loud@
Makes this elements text black.
+
@.highlight@
Adds a yellow background to the text.
+
@.added@
Adds green background to the text.
+
@.removed@
Adds red background to the text.
+
@.first@
Removes any left sided margin/padding from the element.
+
@.last@
Removes any right sided margin/padding from the element.
+
@.top@
Removes any top margin/padding from the element.
+
@.bottom@
Removes any bottom margin/padding from the element.
+
+ +h3. Styling Forms + +To make Blueprint style your input elements, each text input element should +have the class @.text@, or @.title@, where @.text@ is the normal size, +and @.title@ gives you an input field with larger text. + +There's also a few classes you may use for success and error messages: + +
+
@div.error@
Creates an error box (red).
+
@div.notice@
Creates a box for notices (yellow).
+
@div.success@
Creates a box for success messages (green).
+
+ +h3. Creating a Grid + +The third layer is the grid CSS classes, which is the tool Blueprint gives you to create almost any kind of grid layout for your site. Keep in mind that most of the CSS behind the grid can be customized (explained below). In this section however, I'm using the default settings. + +The default grid is made up of 24 columns, each spanning 30px, with a 10px margin between each column. The total width comes to 950px, which is a good width for 1024x768 resolution displays. If you're interested in a narrower design, see the section on customizing the grid, below. + +So how do you set up a grid? By using classes provided by Blueprint. To create a column, make a new @
@, and apply one of the @.span-x@ classes to it. For instance, if you want a 3-column setup, with two narrow and one wide column, a header and a footer here's how you do it: + +
			
+  
+
+ The header +
+ +
+ The first column +
+
+ The center column +
+
+ The last column +
+ +
+ The footer +
+
+
+ +In addition to the spans, there are two important classes you need to know about. First of all, every Blueprint site needs to be wrapped in a div with the class @.container@, which is usually placed right after the body tag. + +Second, the last column in a row (which by default has 24 columns), needs the class @.last@ to remove its left hand margin. Note, however, that each @.span-24@ don't need the @.last@ class, since these always span the entire width of the page. + +To create basic grids, this is all you need to know. The grid CSS however, provides many more classes for more intricate designs. To see some of them in action, check out the files in @tests/parts/@. These files demonstrate what's possible with the grid in Blueprint. + +Here's a quick overview of the other classes you can use in to make your grid: + +
+
@.append-x@
Appends x number of empty columns after a column.
+
@.prepend-x@
Preppends x number of empty columns before a column.
+
@.push-x@
Pushes a column x columns to the left. Can be used to swap columns.
+
@.pull-x@
Pulls a column x columns to the right. Can be used to swap columns.
+
@.border@
Applies a border to the right side of the column.
+
@.colborder@
Appends one empty column, with a border down the middle.
+
@.clear@
Makes a column drop below a row, regardless of space.
+
@.showgrid@
Add to container or column to see the grid and baseline.
+
+ +In this list, @x@ is a number from 1 through 23 for append/prepend and 1 through 24 for push/pull. These numbers will of course change if you set a new number of columns in the settings file. + +Here's another example where we have four columns of equal width, with a border between the two first and the two last columns, as well as a four column gap in the middle: + +
				
+	
+
+ The first column +
+
+ The second column +
+
+ The third column +
+
+ The fourth (last) column +
+
+
+ +You may also nest columns to achieve the desired layout. Here's a setup where we want four rectangles with two on top and two below on the first half of the page, and one single column spanning the second half of the page: + +
				
+	
+
+
+ Top left +
+
+ Top right +
+
+ Bottom left +
+
+ Bottom right +
+
+
+ Second half of page +
+
+
+ +Try this code in your browser it it's difficult to understand what it would look like. To see more examples on how to use these classes, check out @/tests/parts/grid.html@. + +h2. The Scripts + +Blueprint comes with two scripts: one for compressing and customizing the CSS, and one for validating the core CSS files, which is handy if you're making changes to these files. + +h3. The Validator + +The validator has a fairly simple job - validate the CSS in the core BP files. The script uses a bundled version of the W3C CSS validator to accomplish this. To run it, you'll need to have Ruby installed on your machine. You can then run the script like so: @$ ruby validate.rb@. + +Note that there are a few validation errors shipping with Blueprint. These are known, and comes from a few CSS hacks needed to ensure consistent rendering across the vast browser field. + +h3. The Compressor + +As the files you'll include in your HTML are the compressed versions of the core CSS files, you'll have to recompress the core if you've made any changes. This is what the compressor script is for. + +In addition this is where you customize the grid. To customize the grid, a special settings file is used, and the new CSS is generated once you run the compressor. The new compressed files will then reflect your settings file. + +To recompress, you just have to run the script. This will parse the core CSS files and output new compressed files in the blueprint folder. As with the validator, Ruby has to be installed to use this script. In the @lib@ directory, run: @$ruby compress.rb@ + +Calling this file by itself will pull files from @blueprint/src@ and concatenate them into three files; @ie.css@, @print.css@, and @screen.css@. However, argument variables can be set to change how this works. Calling @$ruby compress.rb -h@ will reveal basic arguments you can pass to the script. + +h3. Custom Settings + +To learn how to use custom settings, read through the documentation within @lib/compress.rb@ diff --git a/app/assets/stylesheets/blueprint/ie.css b/app/assets/stylesheets/blueprint/ie.css new file mode 100644 index 0000000..f015399 --- /dev/null +++ b/app/assets/stylesheets/blueprint/ie.css @@ -0,0 +1,36 @@ +/* ----------------------------------------------------------------------- + + + Blueprint CSS Framework 1.0.1 + http://blueprintcss.org + + * Copyright (c) 2007-Present. See LICENSE for more info. + * See README for instructions on how to use Blueprint. + * For credits and origins, see AUTHORS. + * This is a compressed file. See the sources in the 'src' directory. + +----------------------------------------------------------------------- */ + +/* ie.css */ +body {text-align:center;} +.container {text-align:left;} +* html .column, * html .span-1, * html .span-2, * html .span-3, * html .span-4, * html .span-5, * html .span-6, * html .span-7, * html .span-8, * html .span-9, * html .span-10, * html .span-11, * html .span-12, * html .span-13, * html .span-14, * html .span-15, * html .span-16, * html .span-17, * html .span-18, * html .span-19, * html .span-20, * html .span-21, * html .span-22, * html .span-23, * html .span-24 {display:inline;overflow-x:hidden;} +* html legend {margin:0px -8px 16px 0;padding:0;} +sup {vertical-align:text-top;} +sub {vertical-align:text-bottom;} +html>body p code {*white-space:normal;} +hr {margin:-8px auto 11px;} +img {-ms-interpolation-mode:bicubic;} +.clearfix, .container {display:inline-block;} +* html .clearfix, * html .container {height:1%;} +fieldset {padding-top:0;} +legend {margin-top:-0.2em;margin-bottom:1em;margin-left:-0.5em;} +textarea {overflow:auto;} +label {vertical-align:middle;position:relative;top:-0.25em;} +input.text, input.title, textarea {background-color:#fff;border:1px solid #bbb;} +input.text:focus, input.title:focus {border-color:#666;} +input.text, input.title, textarea, select {margin:0.5em 0;} +input.checkbox, input.radio {position:relative;top:.25em;} +form.inline div, form.inline p {vertical-align:middle;} +form.inline input.checkbox, form.inline input.radio, form.inline input.button, form.inline button {margin:0.5em 0;} +button, input.button {position:relative;top:0.25em;} \ No newline at end of file diff --git a/app/assets/stylesheets/blueprint/plugins/buttons/icons/cross.png b/app/assets/stylesheets/blueprint/plugins/buttons/icons/cross.png new file mode 100755 index 0000000..1514d51 Binary files /dev/null and b/app/assets/stylesheets/blueprint/plugins/buttons/icons/cross.png differ diff --git a/app/assets/stylesheets/blueprint/plugins/buttons/icons/key.png b/app/assets/stylesheets/blueprint/plugins/buttons/icons/key.png new file mode 100755 index 0000000..a9d5e4f Binary files /dev/null and b/app/assets/stylesheets/blueprint/plugins/buttons/icons/key.png differ diff --git a/app/assets/stylesheets/blueprint/plugins/buttons/icons/tick.png b/app/assets/stylesheets/blueprint/plugins/buttons/icons/tick.png new file mode 100755 index 0000000..a9925a0 Binary files /dev/null and b/app/assets/stylesheets/blueprint/plugins/buttons/icons/tick.png differ diff --git a/app/assets/stylesheets/blueprint/plugins/buttons/readme.txt b/app/assets/stylesheets/blueprint/plugins/buttons/readme.txt new file mode 100644 index 0000000..aa9fe26 --- /dev/null +++ b/app/assets/stylesheets/blueprint/plugins/buttons/readme.txt @@ -0,0 +1,32 @@ +Buttons + +* Gives you great looking CSS buttons, for both and + + + Change Password + + + + Cancel + diff --git a/app/assets/stylesheets/blueprint/plugins/buttons/screen.css b/app/assets/stylesheets/blueprint/plugins/buttons/screen.css new file mode 100644 index 0000000..bb66b21 --- /dev/null +++ b/app/assets/stylesheets/blueprint/plugins/buttons/screen.css @@ -0,0 +1,97 @@ +/* -------------------------------------------------------------- + + buttons.css + * Gives you some great CSS-only buttons. + + Created by Kevin Hale [particletree.com] + * particletree.com/features/rediscovering-the-button-element + + See Readme.txt in this folder for instructions. + +-------------------------------------------------------------- */ + +a.button, button { + display:block; + float:left; + margin: 0.7em 0.5em 0.7em 0; + padding:5px 10px 5px 7px; /* Links */ + + border:1px solid #dedede; + border-top:1px solid #eee; + border-left:1px solid #eee; + + background-color:#f5f5f5; + font-family:"Lucida Grande", Tahoma, Arial, Verdana, sans-serif; + font-size:100%; + line-height:130%; + text-decoration:none; + font-weight:bold; + color:#565656; + cursor:pointer; +} +button { + width:auto; + overflow:visible; + padding:4px 10px 3px 7px; /* IE6 */ +} +button[type] { + padding:4px 10px 4px 7px; /* Firefox */ + line-height:17px; /* Safari */ +} +*:first-child+html button[type] { + padding:4px 10px 3px 7px; /* IE7 */ +} +button img, a.button img{ + margin:0 3px -3px 0 !important; + padding:0; + border:none; + width:16px; + height:16px; + float:none; +} + + +/* Button colors +-------------------------------------------------------------- */ + +/* Standard */ +button:hover, a.button:hover{ + background-color:#dff4ff; + border:1px solid #c2e1ef; + color:#336699; +} +a.button:active{ + background-color:#6299c5; + border:1px solid #6299c5; + color:#fff; +} + +/* Positive */ +body .positive { + color:#529214; +} +a.positive:hover, button.positive:hover { + background-color:#E6EFC2; + border:1px solid #C6D880; + color:#529214; +} +a.positive:active { + background-color:#529214; + border:1px solid #529214; + color:#fff; +} + +/* Negative */ +body .negative { + color:#d12f19; +} +a.negative:hover, button.negative:hover { + background-color:#fbe3e4; + border:1px solid #fbc2c4; + color:#d12f19; +} +a.negative:active { + background-color:#d12f19; + border:1px solid #d12f19; + color:#fff; +} diff --git a/app/assets/stylesheets/blueprint/plugins/fancy-type/readme.txt b/app/assets/stylesheets/blueprint/plugins/fancy-type/readme.txt new file mode 100644 index 0000000..85f2491 --- /dev/null +++ b/app/assets/stylesheets/blueprint/plugins/fancy-type/readme.txt @@ -0,0 +1,14 @@ +Fancy Type + +* Gives you classes to use if you'd like some + extra fancy typography. + +Credits and instructions are specified above each class +in the fancy-type.css file in this directory. + + +Usage +---------------------------------------------------------------- + +1) Add this plugin to lib/settings.yml. + See compress.rb for instructions. diff --git a/app/assets/stylesheets/blueprint/plugins/fancy-type/screen.css b/app/assets/stylesheets/blueprint/plugins/fancy-type/screen.css new file mode 100644 index 0000000..127cf25 --- /dev/null +++ b/app/assets/stylesheets/blueprint/plugins/fancy-type/screen.css @@ -0,0 +1,71 @@ +/* -------------------------------------------------------------- + + fancy-type.css + * Lots of pretty advanced classes for manipulating text. + + See the Readme file in this folder for additional instructions. + +-------------------------------------------------------------- */ + +/* Indentation instead of line shifts for sibling paragraphs. */ + p + p { text-indent:2em; margin-top:-1.5em; } + form p + p { text-indent: 0; } /* Don't want this in forms. */ + + +/* For great looking type, use this code instead of asdf: + asdf + Best used on prepositions and ampersands. */ + +.alt { + color: #666; + font-family: "Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua", Georgia, serif; + font-style: italic; + font-weight: normal; +} + + +/* For great looking quote marks in titles, replace "asdf" with: + asdf” + (That is, when the title starts with a quote mark). + (You may have to change this value depending on your font size). */ + +.dquo { margin-left: -.5em; } + + +/* Reduced size type with incremental leading + (http://www.markboulton.co.uk/journal/comments/incremental_leading/) + + This could be used for side notes. For smaller type, you don't necessarily want to + follow the 1.5x vertical rhythm -- the line-height is too much. + + Using this class, it reduces your font size and line-height so that for + every four lines of normal sized type, there is five lines of the sidenote. eg: + + New type size in em's: + 10px (wanted side note size) / 12px (existing base size) = 0.8333 (new type size in ems) + + New line-height value: + 12px x 1.5 = 18px (old line-height) + 18px x 4 = 72px + 72px / 5 = 14.4px (new line height) + 14.4px / 10px = 1.44 (new line height in em's) */ + +p.incr, .incr p { + font-size: 10px; + line-height: 1.44em; + margin-bottom: 1.5em; +} + + +/* Surround uppercase words and abbreviations with this class. + Based on work by Jørgen Arnor GÃ¥rdsø Lom [http://twistedintellect.com/] */ + +.caps { + font-variant: small-caps; + letter-spacing: 1px; + text-transform: lowercase; + font-size:1.2em; + line-height:1%; + font-weight:bold; + padding:0 2px; +} diff --git a/app/assets/stylesheets/blueprint/plugins/link-icons/icons/doc.png b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/doc.png new file mode 100644 index 0000000..834cdfa Binary files /dev/null and b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/doc.png differ diff --git a/app/assets/stylesheets/blueprint/plugins/link-icons/icons/email.png b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/email.png new file mode 100644 index 0000000..7348aed Binary files /dev/null and b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/email.png differ diff --git a/app/assets/stylesheets/blueprint/plugins/link-icons/icons/external.png b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/external.png new file mode 100644 index 0000000..cf1cfb4 Binary files /dev/null and b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/external.png differ diff --git a/app/assets/stylesheets/blueprint/plugins/link-icons/icons/feed.png b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/feed.png new file mode 100644 index 0000000..315c4f4 Binary files /dev/null and b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/feed.png differ diff --git a/app/assets/stylesheets/blueprint/plugins/link-icons/icons/im.png b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/im.png new file mode 100644 index 0000000..79f35cc Binary files /dev/null and b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/im.png differ diff --git a/app/assets/stylesheets/blueprint/plugins/link-icons/icons/lock.png b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/lock.png new file mode 100644 index 0000000..2ebc4f6 Binary files /dev/null and b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/lock.png differ diff --git a/app/assets/stylesheets/blueprint/plugins/link-icons/icons/pdf.png b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/pdf.png new file mode 100644 index 0000000..8f8095e Binary files /dev/null and b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/pdf.png differ diff --git a/app/assets/stylesheets/blueprint/plugins/link-icons/icons/visited.png b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/visited.png new file mode 100644 index 0000000..ebf206d Binary files /dev/null and b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/visited.png differ diff --git a/app/assets/stylesheets/blueprint/plugins/link-icons/icons/xls.png b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/xls.png new file mode 100644 index 0000000..b977d7e Binary files /dev/null and b/app/assets/stylesheets/blueprint/plugins/link-icons/icons/xls.png differ diff --git a/app/assets/stylesheets/blueprint/plugins/link-icons/readme.txt b/app/assets/stylesheets/blueprint/plugins/link-icons/readme.txt new file mode 100644 index 0000000..fc4dc64 --- /dev/null +++ b/app/assets/stylesheets/blueprint/plugins/link-icons/readme.txt @@ -0,0 +1,18 @@ +Link Icons +* Icons for links based on protocol or file type. + +This is not supported in IE versions < 7. + + +Credits +---------------------------------------------------------------- + +* Marc Morgan +* Olav Bjorkoy [bjorkoy.com] + + +Usage +---------------------------------------------------------------- + +1) Add this line to your HTML: + diff --git a/app/assets/stylesheets/blueprint/plugins/link-icons/screen.css b/app/assets/stylesheets/blueprint/plugins/link-icons/screen.css new file mode 100644 index 0000000..0cefc77 --- /dev/null +++ b/app/assets/stylesheets/blueprint/plugins/link-icons/screen.css @@ -0,0 +1,42 @@ +/* -------------------------------------------------------------- + + link-icons.css + * Icons for links based on protocol or file type. + + See the Readme file in this folder for additional instructions. + +-------------------------------------------------------------- */ + +/* Use this class if a link gets an icon when it shouldn't. */ +body a.noicon { + background:transparent none !important; + padding:0 !important; + margin:0 !important; +} + +/* Make sure the icons are not cut */ +a[href^="http:"], a[href^="https:"], +a[href^="http:"]:visited, a[href^="https:"]:visited, +a[href^="mailto:"], a[href$=".pdf"], a[href$=".doc"], a[href$=".xls"], +a[href$=".rss"], a[href$=".rdf"], a[href^="aim:"] { + padding:2px 22px 2px 0; + margin:-2px 0; + background-repeat: no-repeat; + background-position: right center; +} + +/* External links */ +a[href^="http:"] { background-image: url(icons/external.png); } +a[href^="https:"] { background-image: url(icons/lock.png); } +a[href^="mailto:"] { background-image: url(icons/email.png); } +a[href^="http:"]:visited { background-image: url(icons/visited.png); } + +/* Files */ +a[href$=".pdf"] { background-image: url(icons/pdf.png); } +a[href$=".doc"] { background-image: url(icons/doc.png); } +a[href$=".xls"] { background-image: url(icons/xls.png); } + +/* Misc */ +a[href$=".rss"], +a[href$=".rdf"] { background-image: url(icons/feed.png); } +a[href^="aim:"] { background-image: url(icons/im.png); } diff --git a/app/assets/stylesheets/blueprint/plugins/rtl/readme.txt b/app/assets/stylesheets/blueprint/plugins/rtl/readme.txt new file mode 100644 index 0000000..5564c40 --- /dev/null +++ b/app/assets/stylesheets/blueprint/plugins/rtl/readme.txt @@ -0,0 +1,10 @@ +RTL +* Mirrors Blueprint, so it can be used with Right-to-Left languages. + +By Ran Yaniv Hartstein, ranh.co.il + +Usage +---------------------------------------------------------------- + +1) Add this line to your HTML: + diff --git a/app/assets/stylesheets/blueprint/plugins/rtl/screen.css b/app/assets/stylesheets/blueprint/plugins/rtl/screen.css new file mode 100644 index 0000000..7db7eb5 --- /dev/null +++ b/app/assets/stylesheets/blueprint/plugins/rtl/screen.css @@ -0,0 +1,110 @@ +/* -------------------------------------------------------------- + + rtl.css + * Mirrors Blueprint for left-to-right languages + + By Ran Yaniv Hartstein [ranh.co.il] + +-------------------------------------------------------------- */ + +body .container { direction: rtl; } +body .column, body .span-1, body .span-2, body .span-3, body .span-4, body .span-5, body .span-6, body .span-7, body .span-8, body .span-9, body .span-10, body .span-11, body .span-12, body .span-13, body .span-14, body .span-15, body .span-16, body .span-17, body .span-18, body .span-19, body .span-20, body .span-21, body .span-22, body .span-23, body .span-24 { + float: right; + margin-right: 0; + margin-left: 10px; + text-align:right; +} + +body div.last { margin-left: 0; } +body table .last { padding-left: 0; } + +body .append-1 { padding-right: 0; padding-left: 40px; } +body .append-2 { padding-right: 0; padding-left: 80px; } +body .append-3 { padding-right: 0; padding-left: 120px; } +body .append-4 { padding-right: 0; padding-left: 160px; } +body .append-5 { padding-right: 0; padding-left: 200px; } +body .append-6 { padding-right: 0; padding-left: 240px; } +body .append-7 { padding-right: 0; padding-left: 280px; } +body .append-8 { padding-right: 0; padding-left: 320px; } +body .append-9 { padding-right: 0; padding-left: 360px; } +body .append-10 { padding-right: 0; padding-left: 400px; } +body .append-11 { padding-right: 0; padding-left: 440px; } +body .append-12 { padding-right: 0; padding-left: 480px; } +body .append-13 { padding-right: 0; padding-left: 520px; } +body .append-14 { padding-right: 0; padding-left: 560px; } +body .append-15 { padding-right: 0; padding-left: 600px; } +body .append-16 { padding-right: 0; padding-left: 640px; } +body .append-17 { padding-right: 0; padding-left: 680px; } +body .append-18 { padding-right: 0; padding-left: 720px; } +body .append-19 { padding-right: 0; padding-left: 760px; } +body .append-20 { padding-right: 0; padding-left: 800px; } +body .append-21 { padding-right: 0; padding-left: 840px; } +body .append-22 { padding-right: 0; padding-left: 880px; } +body .append-23 { padding-right: 0; padding-left: 920px; } + +body .prepend-1 { padding-left: 0; padding-right: 40px; } +body .prepend-2 { padding-left: 0; padding-right: 80px; } +body .prepend-3 { padding-left: 0; padding-right: 120px; } +body .prepend-4 { padding-left: 0; padding-right: 160px; } +body .prepend-5 { padding-left: 0; padding-right: 200px; } +body .prepend-6 { padding-left: 0; padding-right: 240px; } +body .prepend-7 { padding-left: 0; padding-right: 280px; } +body .prepend-8 { padding-left: 0; padding-right: 320px; } +body .prepend-9 { padding-left: 0; padding-right: 360px; } +body .prepend-10 { padding-left: 0; padding-right: 400px; } +body .prepend-11 { padding-left: 0; padding-right: 440px; } +body .prepend-12 { padding-left: 0; padding-right: 480px; } +body .prepend-13 { padding-left: 0; padding-right: 520px; } +body .prepend-14 { padding-left: 0; padding-right: 560px; } +body .prepend-15 { padding-left: 0; padding-right: 600px; } +body .prepend-16 { padding-left: 0; padding-right: 640px; } +body .prepend-17 { padding-left: 0; padding-right: 680px; } +body .prepend-18 { padding-left: 0; padding-right: 720px; } +body .prepend-19 { padding-left: 0; padding-right: 760px; } +body .prepend-20 { padding-left: 0; padding-right: 800px; } +body .prepend-21 { padding-left: 0; padding-right: 840px; } +body .prepend-22 { padding-left: 0; padding-right: 880px; } +body .prepend-23 { padding-left: 0; padding-right: 920px; } + +body .border { + padding-right: 0; + padding-left: 4px; + margin-right: 0; + margin-left: 5px; + border-right: none; + border-left: 1px solid #eee; +} + +body .colborder { + padding-right: 0; + padding-left: 24px; + margin-right: 0; + margin-left: 25px; + border-right: none; + border-left: 1px solid #eee; +} + +body .pull-1 { margin-left: 0; margin-right: -40px; } +body .pull-2 { margin-left: 0; margin-right: -80px; } +body .pull-3 { margin-left: 0; margin-right: -120px; } +body .pull-4 { margin-left: 0; margin-right: -160px; } + +body .push-0 { margin: 0 18px 0 0; } +body .push-1 { margin: 0 18px 0 -40px; } +body .push-2 { margin: 0 18px 0 -80px; } +body .push-3 { margin: 0 18px 0 -120px; } +body .push-4 { margin: 0 18px 0 -160px; } +body .push-0, body .push-1, body .push-2, +body .push-3, body .push-4 { float: left; } + + +/* Typography with RTL support */ +body h1,body h2,body h3, +body h4,body h5,body h6 { font-family: Arial, sans-serif; } +html body { font-family: Arial, sans-serif; } +body pre,body code,body tt { font-family: monospace; } + +/* Mirror floats and margins on typographic elements */ +body p img { float: right; margin: 1.5em 0 1.5em 1.5em; } +body dd, body ul, body ol { margin-left: 0; margin-right: 1.5em;} +body td, body th { text-align:right; } diff --git a/app/assets/stylesheets/blueprint/print.css b/app/assets/stylesheets/blueprint/print.css new file mode 100644 index 0000000..bd79afd --- /dev/null +++ b/app/assets/stylesheets/blueprint/print.css @@ -0,0 +1,29 @@ +/* ----------------------------------------------------------------------- + + + Blueprint CSS Framework 1.0.1 + http://blueprintcss.org + + * Copyright (c) 2007-Present. See LICENSE for more info. + * See README for instructions on how to use Blueprint. + * For credits and origins, see AUTHORS. + * This is a compressed file. See the sources in the 'src' directory. + +----------------------------------------------------------------------- */ + +/* print.css */ +body {line-height:1.5;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;color:#000;background:none;font-size:10pt;} +.container {background:none;} +hr {background:#ccc;color:#ccc;width:100%;height:2px;margin:2em 0;padding:0;border:none;} +hr.space {background:#fff;color:#fff;visibility:hidden;} +h1, h2, h3, h4, h5, h6 {font-family:"Helvetica Neue", Arial, "Lucida Grande", sans-serif;} +code {font:.9em "Courier New", Monaco, Courier, monospace;} +a img {border:none;} +p img.top {margin-top:0;} +blockquote {margin:1.5em;padding:1em;font-style:italic;font-size:.9em;} +.small {font-size:.9em;} +.large {font-size:1.1em;} +.quiet {color:#999;} +.hide {display:none;} +a:link, a:visited {background:transparent;font-weight:700;text-decoration:underline;} +a:link:after, a:visited:after {content:" (" attr(href) ")";font-size:90%;} \ No newline at end of file diff --git a/app/assets/stylesheets/blueprint/screen.css b/app/assets/stylesheets/blueprint/screen.css new file mode 100644 index 0000000..fe68de6 --- /dev/null +++ b/app/assets/stylesheets/blueprint/screen.css @@ -0,0 +1,265 @@ +/* ----------------------------------------------------------------------- + + + Blueprint CSS Framework 1.0.1 + http://blueprintcss.org + + * Copyright (c) 2007-Present. See LICENSE for more info. + * See README for instructions on how to use Blueprint. + * For credits and origins, see AUTHORS. + * This is a compressed file. See the sources in the 'src' directory. + +----------------------------------------------------------------------- */ + +/* reset.css */ +html {margin:0;padding:0;border:0;} +body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;} +article, aside, details, figcaption, figure, dialog, footer, header, hgroup, menu, nav, section {display:block;} +body {line-height:1.5;background:white;} +table {border-collapse:separate;border-spacing:0;} +caption, th, td {text-align:left;font-weight:normal;float:none !important;} +table, th, td {vertical-align:middle;} +blockquote:before, blockquote:after, q:before, q:after {content:'';} +blockquote, q {quotes:"" "";} +a img {border:none;} +:focus {outline:0;} + +/* typography.css */ +html {font-size:100.01%;} +body {font-size:75%;color:#222;background:#fff;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;} +h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;} +h1 {font-size:3em;line-height:1;margin-bottom:0.5em;} +h2 {font-size:2em;margin-bottom:0.75em;} +h3 {font-size:1.5em;line-height:1;margin-bottom:1em;} +h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;} +h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;} +h6 {font-size:1em;font-weight:bold;} +h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;} +p {margin:0 0 1.5em;} +.left {float:left !important;} +p .left {margin:1.5em 1.5em 1.5em 0;padding:0;} +.right {float:right !important;} +p .right {margin:1.5em 0 1.5em 1.5em;padding:0;} +a:focus, a:hover {color:#09f;} +a {color:#06c;text-decoration:underline;} +blockquote {margin:1.5em;color:#666;font-style:italic;} +strong, dfn {font-weight:bold;} +em, dfn {font-style:italic;} +sup, sub {line-height:0;} +abbr, acronym {border-bottom:1px dotted #666;} +address {margin:0 0 1.5em;font-style:italic;} +del {color:#666;} +pre {margin:1.5em 0;white-space:pre;} +pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;} +li ul, li ol {margin:0;} +ul, ol {margin:0 1.5em 1.5em 0;padding-left:1.5em;} +ul {list-style-type:disc;} +ol {list-style-type:decimal;} +dl {margin:0 0 1.5em 0;} +dl dt {font-weight:bold;} +dd {margin-left:1.5em;} +table {margin-bottom:1.4em;width:100%;} +th {font-weight:bold;} +thead th {background:#c3d9ff;} +th, td, caption {padding:4px 10px 4px 5px;} +tbody tr:nth-child(even) td, tbody tr.even td {background:#e5ecf9;} +tfoot {font-style:italic;} +caption {background:#eee;} +.small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;} +.large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;} +.hide {display:none;} +.quiet {color:#666;} +.loud {color:#000;} +.highlight {background:#ff0;} +.added {background:#060;color:#fff;} +.removed {background:#900;color:#fff;} +.first {margin-left:0;padding-left:0;} +.last {margin-right:0;padding-right:0;} +.top {margin-top:0;padding-top:0;} +.bottom {margin-bottom:0;padding-bottom:0;} + +/* forms.css */ +label {font-weight:bold;} +fieldset {padding:0 1.4em 1.4em 1.4em;margin:0 0 1.5em 0;border:1px solid #ccc;} +legend {font-weight:bold;font-size:1.2em;margin-top:-0.2em;margin-bottom:1em;} +fieldset, #IE8#HACK {padding-top:1.4em;} +legend, #IE8#HACK {margin-top:0;margin-bottom:0;} +input[type=text], input[type=password], input[type=url], input[type=email], input.text, input.title, textarea {background-color:#fff;border:1px solid #bbb;color:#000;} +input[type=text]:focus, input[type=password]:focus, input[type=url]:focus, input[type=email]:focus, input.text:focus, input.title:focus, textarea:focus {border-color:#666;} +select {background-color:#fff;border-width:1px;border-style:solid;} +input[type=text], input[type=password], input[type=url], input[type=email], input.text, input.title, textarea, select {margin:0.5em 0;} +input.text, input.title {width:300px;padding:5px;} +input.title {font-size:1.5em;} +textarea {width:390px;height:250px;padding:5px;} +form.inline {line-height:3;} +form.inline p {margin-bottom:0;} +.error, .alert, .notice, .success, .info {padding:0.8em;margin-bottom:1em;border:2px solid #ddd;} +.error, .alert {background:#fbe3e4;color:#8a1f11;border-color:#fbc2c4;} +.notice {background:#fff6bf;color:#514721;border-color:#ffd324;} +.success {background:#e6efc2;color:#264409;border-color:#c6d880;} +.info {background:#d5edf8;color:#205791;border-color:#92cae4;} +.error a, .alert a {color:#8a1f11;} +.notice a {color:#514721;} +.success a {color:#264409;} +.info a {color:#205791;} + +/* grid.css */ +.container {width:950px;margin:0 auto;} +.showgrid {background:url(src/grid.png);} +.column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 {float:left;margin-right:10px;} +.last {margin-right:0;} +.span-1 {width:30px;} +.span-2 {width:70px;} +.span-3 {width:110px;} +.span-4 {width:150px;} +.span-5 {width:190px;} +.span-6 {width:230px;} +.span-7 {width:270px;} +.span-8 {width:310px;} +.span-9 {width:350px;} +.span-10 {width:390px;} +.span-11 {width:430px;} +.span-12 {width:470px;} +.span-13 {width:510px;} +.span-14 {width:550px;} +.span-15 {width:590px;} +.span-16 {width:630px;} +.span-17 {width:670px;} +.span-18 {width:710px;} +.span-19 {width:750px;} +.span-20 {width:790px;} +.span-21 {width:830px;} +.span-22 {width:870px;} +.span-23 {width:910px;} +.span-24 {width:950px;margin-right:0;} +input.span-1, textarea.span-1, input.span-2, textarea.span-2, input.span-3, textarea.span-3, input.span-4, textarea.span-4, input.span-5, textarea.span-5, input.span-6, textarea.span-6, input.span-7, textarea.span-7, input.span-8, textarea.span-8, input.span-9, textarea.span-9, input.span-10, textarea.span-10, input.span-11, textarea.span-11, input.span-12, textarea.span-12, input.span-13, textarea.span-13, input.span-14, textarea.span-14, input.span-15, textarea.span-15, input.span-16, textarea.span-16, input.span-17, textarea.span-17, input.span-18, textarea.span-18, input.span-19, textarea.span-19, input.span-20, textarea.span-20, input.span-21, textarea.span-21, input.span-22, textarea.span-22, input.span-23, textarea.span-23, input.span-24, textarea.span-24 {border-left-width:1px;border-right-width:1px;padding-left:5px;padding-right:5px;} +input.span-1, textarea.span-1 {width:18px;} +input.span-2, textarea.span-2 {width:58px;} +input.span-3, textarea.span-3 {width:98px;} +input.span-4, textarea.span-4 {width:138px;} +input.span-5, textarea.span-5 {width:178px;} +input.span-6, textarea.span-6 {width:218px;} +input.span-7, textarea.span-7 {width:258px;} +input.span-8, textarea.span-8 {width:298px;} +input.span-9, textarea.span-9 {width:338px;} +input.span-10, textarea.span-10 {width:378px;} +input.span-11, textarea.span-11 {width:418px;} +input.span-12, textarea.span-12 {width:458px;} +input.span-13, textarea.span-13 {width:498px;} +input.span-14, textarea.span-14 {width:538px;} +input.span-15, textarea.span-15 {width:578px;} +input.span-16, textarea.span-16 {width:618px;} +input.span-17, textarea.span-17 {width:658px;} +input.span-18, textarea.span-18 {width:698px;} +input.span-19, textarea.span-19 {width:738px;} +input.span-20, textarea.span-20 {width:778px;} +input.span-21, textarea.span-21 {width:818px;} +input.span-22, textarea.span-22 {width:858px;} +input.span-23, textarea.span-23 {width:898px;} +input.span-24, textarea.span-24 {width:938px;} +.append-1 {padding-right:40px;} +.append-2 {padding-right:80px;} +.append-3 {padding-right:120px;} +.append-4 {padding-right:160px;} +.append-5 {padding-right:200px;} +.append-6 {padding-right:240px;} +.append-7 {padding-right:280px;} +.append-8 {padding-right:320px;} +.append-9 {padding-right:360px;} +.append-10 {padding-right:400px;} +.append-11 {padding-right:440px;} +.append-12 {padding-right:480px;} +.append-13 {padding-right:520px;} +.append-14 {padding-right:560px;} +.append-15 {padding-right:600px;} +.append-16 {padding-right:640px;} +.append-17 {padding-right:680px;} +.append-18 {padding-right:720px;} +.append-19 {padding-right:760px;} +.append-20 {padding-right:800px;} +.append-21 {padding-right:840px;} +.append-22 {padding-right:880px;} +.append-23 {padding-right:920px;} +.prepend-1 {padding-left:40px;} +.prepend-2 {padding-left:80px;} +.prepend-3 {padding-left:120px;} +.prepend-4 {padding-left:160px;} +.prepend-5 {padding-left:200px;} +.prepend-6 {padding-left:240px;} +.prepend-7 {padding-left:280px;} +.prepend-8 {padding-left:320px;} +.prepend-9 {padding-left:360px;} +.prepend-10 {padding-left:400px;} +.prepend-11 {padding-left:440px;} +.prepend-12 {padding-left:480px;} +.prepend-13 {padding-left:520px;} +.prepend-14 {padding-left:560px;} +.prepend-15 {padding-left:600px;} +.prepend-16 {padding-left:640px;} +.prepend-17 {padding-left:680px;} +.prepend-18 {padding-left:720px;} +.prepend-19 {padding-left:760px;} +.prepend-20 {padding-left:800px;} +.prepend-21 {padding-left:840px;} +.prepend-22 {padding-left:880px;} +.prepend-23 {padding-left:920px;} +.border {padding-right:4px;margin-right:5px;border-right:1px solid #ddd;} +.colborder {padding-right:24px;margin-right:25px;border-right:1px solid #ddd;} +.pull-1 {margin-left:-40px;} +.pull-2 {margin-left:-80px;} +.pull-3 {margin-left:-120px;} +.pull-4 {margin-left:-160px;} +.pull-5 {margin-left:-200px;} +.pull-6 {margin-left:-240px;} +.pull-7 {margin-left:-280px;} +.pull-8 {margin-left:-320px;} +.pull-9 {margin-left:-360px;} +.pull-10 {margin-left:-400px;} +.pull-11 {margin-left:-440px;} +.pull-12 {margin-left:-480px;} +.pull-13 {margin-left:-520px;} +.pull-14 {margin-left:-560px;} +.pull-15 {margin-left:-600px;} +.pull-16 {margin-left:-640px;} +.pull-17 {margin-left:-680px;} +.pull-18 {margin-left:-720px;} +.pull-19 {margin-left:-760px;} +.pull-20 {margin-left:-800px;} +.pull-21 {margin-left:-840px;} +.pull-22 {margin-left:-880px;} +.pull-23 {margin-left:-920px;} +.pull-24 {margin-left:-960px;} +.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 {float:left;position:relative;} +.push-1 {margin:0 -40px 1.5em 40px;} +.push-2 {margin:0 -80px 1.5em 80px;} +.push-3 {margin:0 -120px 1.5em 120px;} +.push-4 {margin:0 -160px 1.5em 160px;} +.push-5 {margin:0 -200px 1.5em 200px;} +.push-6 {margin:0 -240px 1.5em 240px;} +.push-7 {margin:0 -280px 1.5em 280px;} +.push-8 {margin:0 -320px 1.5em 320px;} +.push-9 {margin:0 -360px 1.5em 360px;} +.push-10 {margin:0 -400px 1.5em 400px;} +.push-11 {margin:0 -440px 1.5em 440px;} +.push-12 {margin:0 -480px 1.5em 480px;} +.push-13 {margin:0 -520px 1.5em 520px;} +.push-14 {margin:0 -560px 1.5em 560px;} +.push-15 {margin:0 -600px 1.5em 600px;} +.push-16 {margin:0 -640px 1.5em 640px;} +.push-17 {margin:0 -680px 1.5em 680px;} +.push-18 {margin:0 -720px 1.5em 720px;} +.push-19 {margin:0 -760px 1.5em 760px;} +.push-20 {margin:0 -800px 1.5em 800px;} +.push-21 {margin:0 -840px 1.5em 840px;} +.push-22 {margin:0 -880px 1.5em 880px;} +.push-23 {margin:0 -920px 1.5em 920px;} +.push-24 {margin:0 -960px 1.5em 960px;} +.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 {float:left;position:relative;} +div.prepend-top, .prepend-top {margin-top:1.5em;} +div.append-bottom, .append-bottom {margin-bottom:1.5em;} +.box {padding:1.5em;margin-bottom:1.5em;background:#e5eCf9;} +hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:1px;margin:0 0 17px;border:none;} +hr.space {background:#fff;color:#fff;visibility:hidden;} +.clearfix:after, .container:after {content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden;} +.clearfix, .container {display:block;} +.clear {clear:both;} \ No newline at end of file diff --git a/app/assets/stylesheets/blueprint/src/forms.css b/app/assets/stylesheets/blueprint/src/forms.css new file mode 100644 index 0000000..7ceb966 --- /dev/null +++ b/app/assets/stylesheets/blueprint/src/forms.css @@ -0,0 +1,82 @@ +/* -------------------------------------------------------------- + + forms.css + * Sets up some default styling for forms + * Gives you classes to enhance your forms + + Usage: + * For text fields, use class .title or .text + * For inline forms, use .inline (even when using columns) + +-------------------------------------------------------------- */ + +/* + A special hack is included for IE8 since it does not apply padding + correctly on fieldsets + */ +label { font-weight: bold; } +fieldset { padding:0 1.4em 1.4em 1.4em; margin: 0 0 1.5em 0; border: 1px solid #ccc; } +legend { font-weight: bold; font-size:1.2em; margin-top:-0.2em; margin-bottom:1em; } + +fieldset, #IE8#HACK { padding-top:1.4em; } +legend, #IE8#HACK { margin-top:0; margin-bottom:0; } + +/* Form fields +-------------------------------------------------------------- */ + +/* + Attribute selectors are used to differentiate the different types + of input elements, but to support old browsers, you will have to + add classes for each one. ".title" simply creates a large text + field, this is purely for looks. + */ +input[type=text], input[type=password], input[type=url], input[type=email], +input.text, input.title, +textarea { + background-color:#fff; + border:1px solid #bbb; + color:#000; +} +input[type=text]:focus, input[type=password]:focus, input[type=url]:focus, input[type=email]:focus, +input.text:focus, input.title:focus, +textarea:focus { + border-color:#666; +} +select { background-color:#fff; border-width:1px; border-style:solid; } + +input[type=text], input[type=password], input[type=url], input[type=email], +input.text, input.title, +textarea, select { + margin:0.5em 0; +} + +input.text, +input.title { width: 300px; padding:5px; } +input.title { font-size:1.5em; } +textarea { width: 390px; height: 250px; padding:5px; } + +/* + This is to be used on forms where a variety of elements are + placed side-by-side. Use the p tag to denote a line. + */ +form.inline { line-height:3; } +form.inline p { margin-bottom:0; } + + +/* Success, info, notice and error/alert boxes +-------------------------------------------------------------- */ + +.error, +.alert, +.notice, +.success, +.info { padding: 0.8em; margin-bottom: 1em; border: 2px solid #ddd; } + +.error, .alert { background: #fbe3e4; color: #8a1f11; border-color: #fbc2c4; } +.notice { background: #fff6bf; color: #514721; border-color: #ffd324; } +.success { background: #e6efc2; color: #264409; border-color: #c6d880; } +.info { background: #d5edf8; color: #205791; border-color: #92cae4; } +.error a, .alert a { color: #8a1f11; } +.notice a { color: #514721; } +.success a { color: #264409; } +.info a { color: #205791; } diff --git a/app/assets/stylesheets/blueprint/src/grid.css b/app/assets/stylesheets/blueprint/src/grid.css new file mode 100755 index 0000000..dbd5738 --- /dev/null +++ b/app/assets/stylesheets/blueprint/src/grid.css @@ -0,0 +1,280 @@ +/* -------------------------------------------------------------- + + grid.css + * Sets up an easy-to-use grid of 24 columns. + + By default, the grid is 950px wide, with 24 columns + spanning 30px, and a 10px margin between columns. + + If you need fewer or more columns, namespaces or semantic + element names, use the compressor script (lib/compress.rb) + +-------------------------------------------------------------- */ + +/* A container should group all your columns. */ +.container { + width: 950px; + margin: 0 auto; +} + +/* Use this class on any .span / container to see the grid. */ +.showgrid { + background: url(src/grid.png); +} + + +/* Columns +-------------------------------------------------------------- */ + +/* Sets up basic grid floating and margin. */ +.column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 { + float: left; + margin-right: 10px; +} + +/* The last column in a row needs this class. */ +.last { margin-right: 0; } + +/* Use these classes to set the width of a column. */ +.span-1 {width: 30px;} + +.span-2 {width: 70px;} +.span-3 {width: 110px;} +.span-4 {width: 150px;} +.span-5 {width: 190px;} +.span-6 {width: 230px;} +.span-7 {width: 270px;} +.span-8 {width: 310px;} +.span-9 {width: 350px;} +.span-10 {width: 390px;} +.span-11 {width: 430px;} +.span-12 {width: 470px;} +.span-13 {width: 510px;} +.span-14 {width: 550px;} +.span-15 {width: 590px;} +.span-16 {width: 630px;} +.span-17 {width: 670px;} +.span-18 {width: 710px;} +.span-19 {width: 750px;} +.span-20 {width: 790px;} +.span-21 {width: 830px;} +.span-22 {width: 870px;} +.span-23 {width: 910px;} +.span-24 {width:950px; margin-right:0;} + +/* Use these classes to set the width of an input. */ +input.span-1, textarea.span-1, input.span-2, textarea.span-2, input.span-3, textarea.span-3, input.span-4, textarea.span-4, input.span-5, textarea.span-5, input.span-6, textarea.span-6, input.span-7, textarea.span-7, input.span-8, textarea.span-8, input.span-9, textarea.span-9, input.span-10, textarea.span-10, input.span-11, textarea.span-11, input.span-12, textarea.span-12, input.span-13, textarea.span-13, input.span-14, textarea.span-14, input.span-15, textarea.span-15, input.span-16, textarea.span-16, input.span-17, textarea.span-17, input.span-18, textarea.span-18, input.span-19, textarea.span-19, input.span-20, textarea.span-20, input.span-21, textarea.span-21, input.span-22, textarea.span-22, input.span-23, textarea.span-23, input.span-24, textarea.span-24 { + border-left-width: 1px; + border-right-width: 1px; + padding-left: 5px; + padding-right: 5px; +} + +input.span-1, textarea.span-1 { width: 18px; } +input.span-2, textarea.span-2 { width: 58px; } +input.span-3, textarea.span-3 { width: 98px; } +input.span-4, textarea.span-4 { width: 138px; } +input.span-5, textarea.span-5 { width: 178px; } +input.span-6, textarea.span-6 { width: 218px; } +input.span-7, textarea.span-7 { width: 258px; } +input.span-8, textarea.span-8 { width: 298px; } +input.span-9, textarea.span-9 { width: 338px; } +input.span-10, textarea.span-10 { width: 378px; } +input.span-11, textarea.span-11 { width: 418px; } +input.span-12, textarea.span-12 { width: 458px; } +input.span-13, textarea.span-13 { width: 498px; } +input.span-14, textarea.span-14 { width: 538px; } +input.span-15, textarea.span-15 { width: 578px; } +input.span-16, textarea.span-16 { width: 618px; } +input.span-17, textarea.span-17 { width: 658px; } +input.span-18, textarea.span-18 { width: 698px; } +input.span-19, textarea.span-19 { width: 738px; } +input.span-20, textarea.span-20 { width: 778px; } +input.span-21, textarea.span-21 { width: 818px; } +input.span-22, textarea.span-22 { width: 858px; } +input.span-23, textarea.span-23 { width: 898px; } +input.span-24, textarea.span-24 { width: 938px; } + +/* Add these to a column to append empty cols. */ + +.append-1 { padding-right: 40px;} +.append-2 { padding-right: 80px;} +.append-3 { padding-right: 120px;} +.append-4 { padding-right: 160px;} +.append-5 { padding-right: 200px;} +.append-6 { padding-right: 240px;} +.append-7 { padding-right: 280px;} +.append-8 { padding-right: 320px;} +.append-9 { padding-right: 360px;} +.append-10 { padding-right: 400px;} +.append-11 { padding-right: 440px;} +.append-12 { padding-right: 480px;} +.append-13 { padding-right: 520px;} +.append-14 { padding-right: 560px;} +.append-15 { padding-right: 600px;} +.append-16 { padding-right: 640px;} +.append-17 { padding-right: 680px;} +.append-18 { padding-right: 720px;} +.append-19 { padding-right: 760px;} +.append-20 { padding-right: 800px;} +.append-21 { padding-right: 840px;} +.append-22 { padding-right: 880px;} +.append-23 { padding-right: 920px;} + +/* Add these to a column to prepend empty cols. */ + +.prepend-1 { padding-left: 40px;} +.prepend-2 { padding-left: 80px;} +.prepend-3 { padding-left: 120px;} +.prepend-4 { padding-left: 160px;} +.prepend-5 { padding-left: 200px;} +.prepend-6 { padding-left: 240px;} +.prepend-7 { padding-left: 280px;} +.prepend-8 { padding-left: 320px;} +.prepend-9 { padding-left: 360px;} +.prepend-10 { padding-left: 400px;} +.prepend-11 { padding-left: 440px;} +.prepend-12 { padding-left: 480px;} +.prepend-13 { padding-left: 520px;} +.prepend-14 { padding-left: 560px;} +.prepend-15 { padding-left: 600px;} +.prepend-16 { padding-left: 640px;} +.prepend-17 { padding-left: 680px;} +.prepend-18 { padding-left: 720px;} +.prepend-19 { padding-left: 760px;} +.prepend-20 { padding-left: 800px;} +.prepend-21 { padding-left: 840px;} +.prepend-22 { padding-left: 880px;} +.prepend-23 { padding-left: 920px;} + + +/* Border on right hand side of a column. */ +.border { + padding-right: 4px; + margin-right: 5px; + border-right: 1px solid #ddd; +} + +/* Border with more whitespace, spans one column. */ +.colborder { + padding-right: 24px; + margin-right: 25px; + border-right: 1px solid #ddd; +} + + +/* Use these classes on an element to push it into the +next column, or to pull it into the previous column. */ + + +.pull-1 { margin-left: -40px; } +.pull-2 { margin-left: -80px; } +.pull-3 { margin-left: -120px; } +.pull-4 { margin-left: -160px; } +.pull-5 { margin-left: -200px; } +.pull-6 { margin-left: -240px; } +.pull-7 { margin-left: -280px; } +.pull-8 { margin-left: -320px; } +.pull-9 { margin-left: -360px; } +.pull-10 { margin-left: -400px; } +.pull-11 { margin-left: -440px; } +.pull-12 { margin-left: -480px; } +.pull-13 { margin-left: -520px; } +.pull-14 { margin-left: -560px; } +.pull-15 { margin-left: -600px; } +.pull-16 { margin-left: -640px; } +.pull-17 { margin-left: -680px; } +.pull-18 { margin-left: -720px; } +.pull-19 { margin-left: -760px; } +.pull-20 { margin-left: -800px; } +.pull-21 { margin-left: -840px; } +.pull-22 { margin-left: -880px; } +.pull-23 { margin-left: -920px; } +.pull-24 { margin-left: -960px; } + +.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 {float: left; position:relative;} + + +.push-1 { margin: 0 -40px 1.5em 40px; } +.push-2 { margin: 0 -80px 1.5em 80px; } +.push-3 { margin: 0 -120px 1.5em 120px; } +.push-4 { margin: 0 -160px 1.5em 160px; } +.push-5 { margin: 0 -200px 1.5em 200px; } +.push-6 { margin: 0 -240px 1.5em 240px; } +.push-7 { margin: 0 -280px 1.5em 280px; } +.push-8 { margin: 0 -320px 1.5em 320px; } +.push-9 { margin: 0 -360px 1.5em 360px; } +.push-10 { margin: 0 -400px 1.5em 400px; } +.push-11 { margin: 0 -440px 1.5em 440px; } +.push-12 { margin: 0 -480px 1.5em 480px; } +.push-13 { margin: 0 -520px 1.5em 520px; } +.push-14 { margin: 0 -560px 1.5em 560px; } +.push-15 { margin: 0 -600px 1.5em 600px; } +.push-16 { margin: 0 -640px 1.5em 640px; } +.push-17 { margin: 0 -680px 1.5em 680px; } +.push-18 { margin: 0 -720px 1.5em 720px; } +.push-19 { margin: 0 -760px 1.5em 760px; } +.push-20 { margin: 0 -800px 1.5em 800px; } +.push-21 { margin: 0 -840px 1.5em 840px; } +.push-22 { margin: 0 -880px 1.5em 880px; } +.push-23 { margin: 0 -920px 1.5em 920px; } +.push-24 { margin: 0 -960px 1.5em 960px; } + +.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 {float: left; position:relative;} + + +/* Misc classes and elements +-------------------------------------------------------------- */ + +/* In case you need to add a gutter above/below an element */ +div.prepend-top, .prepend-top { + margin-top:1.5em; +} +div.append-bottom, .append-bottom { + margin-bottom:1.5em; +} + +/* Use a .box to create a padded box inside a column. */ +.box { + padding: 1.5em; + margin-bottom: 1.5em; + background: #e5eCf9; +} + +/* Use this to create a horizontal ruler across a column. */ +hr { + background: #ddd; + color: #ddd; + clear: both; + float: none; + width: 100%; + height: 1px; + margin: 0 0 17px; + border: none; +} + +hr.space { + background: #fff; + color: #fff; + visibility: hidden; +} + + +/* Clearing floats without extra markup + Based on How To Clear Floats Without Structural Markup by PiE + [http://www.positioniseverything.net/easyclearing.html] */ + +.clearfix:after, .container:after { + content: "\0020"; + display: block; + height: 0; + clear: both; + visibility: hidden; + overflow:hidden; +} +.clearfix, .container {display: block;} + +/* Regular clearing + apply to column that should drop below previous ones. */ + +.clear { clear:both; } diff --git a/app/assets/stylesheets/blueprint/src/grid.png b/app/assets/stylesheets/blueprint/src/grid.png new file mode 100644 index 0000000..4ceb110 Binary files /dev/null and b/app/assets/stylesheets/blueprint/src/grid.png differ diff --git a/app/assets/stylesheets/blueprint/src/ie.css b/app/assets/stylesheets/blueprint/src/ie.css new file mode 100644 index 0000000..111a2ea --- /dev/null +++ b/app/assets/stylesheets/blueprint/src/ie.css @@ -0,0 +1,79 @@ +/* -------------------------------------------------------------- + + ie.css + + Contains every hack for Internet Explorer, + so that our core files stay sweet and nimble. + +-------------------------------------------------------------- */ + +/* Make sure the layout is centered in IE5 */ +body { text-align: center; } +.container { text-align: left; } + +/* Fixes IE margin bugs */ +* html .column, * html .span-1, * html .span-2, +* html .span-3, * html .span-4, * html .span-5, +* html .span-6, * html .span-7, * html .span-8, +* html .span-9, * html .span-10, * html .span-11, +* html .span-12, * html .span-13, * html .span-14, +* html .span-15, * html .span-16, * html .span-17, +* html .span-18, * html .span-19, * html .span-20, +* html .span-21, * html .span-22, * html .span-23, +* html .span-24 { display:inline; overflow-x: hidden; } + + +/* Elements +-------------------------------------------------------------- */ + +/* Fixes incorrect styling of legend in IE6. */ +* html legend { margin:0px -8px 16px 0; padding:0; } + +/* Fixes wrong line-height on sup/sub in IE. */ +sup { vertical-align:text-top; } +sub { vertical-align:text-bottom; } + +/* Fixes IE7 missing wrapping of code elements. */ +html>body p code { *white-space: normal; } + +/* IE 6&7 has problems with setting proper
margins. */ +hr { margin:-8px auto 11px; } + +/* Explicitly set interpolation, allowing dynamically resized images to not look horrible */ +img { -ms-interpolation-mode:bicubic; } + +/* Clearing +-------------------------------------------------------------- */ + +/* Makes clearfix actually work in IE */ +.clearfix, .container { display:inline-block; } +* html .clearfix, +* html .container { height:1%; } + + +/* Forms +-------------------------------------------------------------- */ + +/* Fixes padding on fieldset */ +fieldset { padding-top:0; } +legend { margin-top:-0.2em; margin-bottom:1em; margin-left:-0.5em; } + +/* Makes classic textareas in IE 6 resemble other browsers */ +textarea { overflow:auto; } + +/* Makes labels behave correctly in IE 6 and 7 */ +label { vertical-align:middle; position:relative; top:-0.25em; } + +/* Fixes rule that IE 6 ignores */ +input.text, input.title, textarea { background-color:#fff; border:1px solid #bbb; } +input.text:focus, input.title:focus { border-color:#666; } +input.text, input.title, textarea, select { margin:0.5em 0; } +input.checkbox, input.radio { position:relative; top:.25em; } + +/* Fixes alignment of inline form elements */ +form.inline div, form.inline p { vertical-align:middle; } +form.inline input.checkbox, form.inline input.radio, +form.inline input.button, form.inline button { + margin:0.5em 0; +} +button, input.button { position:relative;top:0.25em; } diff --git a/app/assets/stylesheets/blueprint/src/print.css b/app/assets/stylesheets/blueprint/src/print.css new file mode 100755 index 0000000..b230b84 --- /dev/null +++ b/app/assets/stylesheets/blueprint/src/print.css @@ -0,0 +1,92 @@ +/* -------------------------------------------------------------- + + print.css + * Gives you some sensible styles for printing pages. + * See Readme file in this directory for further instructions. + + Some additions you'll want to make, customized to your markup: + #header, #footer, #navigation { display:none; } + +-------------------------------------------------------------- */ + +body { + line-height: 1.5; + font-family: "Helvetica Neue", Arial, Helvetica, sans-serif; + color:#000; + background: none; + font-size: 10pt; +} + + +/* Layout +-------------------------------------------------------------- */ + +.container { + background: none; +} + +hr { + background:#ccc; + color:#ccc; + width:100%; + height:2px; + margin:2em 0; + padding:0; + border:none; +} +hr.space { + background: #fff; + color: #fff; + visibility: hidden; +} + + +/* Text +-------------------------------------------------------------- */ + +h1,h2,h3,h4,h5,h6 { font-family: "Helvetica Neue", Arial, "Lucida Grande", sans-serif; } +code { font:.9em "Courier New", Monaco, Courier, monospace; } + +a img { border:none; } +p img.top { margin-top: 0; } + +blockquote { + margin:1.5em; + padding:1em; + font-style:italic; + font-size:.9em; +} + +.small { font-size: .9em; } +.large { font-size: 1.1em; } +.quiet { color: #999; } +.hide { display:none; } + + +/* Links +-------------------------------------------------------------- */ + +a:link, a:visited { + background: transparent; + font-weight:700; + text-decoration: underline; +} + +/* + This has been the source of many questions in the past. This + snippet of CSS appends the URL of each link within the text. + The idea is that users printing your webpage will want to know + the URLs they go to. If you want to remove this functionality, + comment out this snippet and make sure to re-compress your files. + */ +a:link:after, a:visited:after { + content: " (" attr(href) ")"; + font-size: 90%; +} + +/* If you're having trouble printing relative links, uncomment and customize this: + (note: This is valid CSS3, but it still won't go through the W3C CSS Validator) */ + +/* a[href^="/"]:after { + content: " (http://www.yourdomain.com" attr(href) ") "; +} */ diff --git a/app/assets/stylesheets/blueprint/src/reset.css b/app/assets/stylesheets/blueprint/src/reset.css new file mode 100755 index 0000000..b26168f --- /dev/null +++ b/app/assets/stylesheets/blueprint/src/reset.css @@ -0,0 +1,65 @@ +/* -------------------------------------------------------------- + + reset.css + * Resets default browser CSS. + +-------------------------------------------------------------- */ + +html { + margin:0; + padding:0; + border:0; +} + +body, div, span, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, code, +del, dfn, em, img, q, dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, dialog, figure, footer, header, +hgroup, nav, section { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} + +/* This helps to make newer HTML5 elements behave like DIVs in older browers */ +article, aside, details, figcaption, figure, dialog, +footer, header, hgroup, menu, nav, section { + display:block; +} + +/* Line-height should always be unitless! */ +body { + line-height: 1.5; + background: white; +} + +/* Tables still need 'cellspacing="0"' in the markup. */ +table { + border-collapse: separate; + border-spacing: 0; +} +/* float:none prevents the span-x classes from breaking table-cell display */ +caption, th, td { + text-align: left; + font-weight: normal; + float:none !important; +} +table, th, td { + vertical-align: middle; +} + +/* Remove possible quote marks (") from ,
. */ +blockquote:before, blockquote:after, q:before, q:after { content: ''; } +blockquote, q { quotes: "" ""; } + +/* Remove annoying border on linked images. */ +a img { border: none; } + +/* Remember to define your own focus styles! */ +:focus { outline: 0; } diff --git a/app/assets/stylesheets/blueprint/src/typography.css b/app/assets/stylesheets/blueprint/src/typography.css new file mode 100644 index 0000000..adef712 --- /dev/null +++ b/app/assets/stylesheets/blueprint/src/typography.css @@ -0,0 +1,123 @@ +/* -------------------------------------------------------------- + + typography.css + * Sets up some sensible default typography. + +-------------------------------------------------------------- */ + +/* Default font settings. + The font-size percentage is of 16px. (0.75 * 16px = 12px) */ +html { font-size:100.01%; } +body { + font-size: 75%; + color: #222; + background: #fff; + font-family: "Helvetica Neue", Arial, Helvetica, sans-serif; +} + + +/* Headings +-------------------------------------------------------------- */ + +h1,h2,h3,h4,h5,h6 { font-weight: normal; color: #111; } + +h1 { font-size: 3em; line-height: 1; margin-bottom: 0.5em; } +h2 { font-size: 2em; margin-bottom: 0.75em; } +h3 { font-size: 1.5em; line-height: 1; margin-bottom: 1em; } +h4 { font-size: 1.2em; line-height: 1.25; margin-bottom: 1.25em; } +h5 { font-size: 1em; font-weight: bold; margin-bottom: 1.5em; } +h6 { font-size: 1em; font-weight: bold; } + +h1 img, h2 img, h3 img, +h4 img, h5 img, h6 img { + margin: 0; +} + + +/* Text elements +-------------------------------------------------------------- */ + +p { margin: 0 0 1.5em; } +/* + These can be used to pull an image at the start of a paragraph, so + that the text flows around it (usage:

Text

) + */ +.left { float: left !important; } +p .left { margin: 1.5em 1.5em 1.5em 0; padding: 0; } +.right { float: right !important; } +p .right { margin: 1.5em 0 1.5em 1.5em; padding: 0; } + +a:focus, +a:hover { color: #09f; } +a { color: #06c; text-decoration: underline; } + +blockquote { margin: 1.5em; color: #666; font-style: italic; } +strong,dfn { font-weight: bold; } +em,dfn { font-style: italic; } +sup, sub { line-height: 0; } + +abbr, +acronym { border-bottom: 1px dotted #666; } +address { margin: 0 0 1.5em; font-style: italic; } +del { color:#666; } + +pre { margin: 1.5em 0; white-space: pre; } +pre,code,tt { font: 1em 'andale mono', 'lucida console', monospace; line-height: 1.5; } + + +/* Lists +-------------------------------------------------------------- */ + +li ul, +li ol { margin: 0; } +ul, ol { margin: 0 1.5em 1.5em 0; padding-left: 1.5em; } + +ul { list-style-type: disc; } +ol { list-style-type: decimal; } + +dl { margin: 0 0 1.5em 0; } +dl dt { font-weight: bold; } +dd { margin-left: 1.5em;} + + +/* Tables +-------------------------------------------------------------- */ + +/* + Because of the need for padding on TH and TD, the vertical rhythm + on table cells has to be 27px, instead of the standard 18px or 36px + of other elements. + */ +table { margin-bottom: 1.4em; width:100%; } +th { font-weight: bold; } +thead th { background: #c3d9ff; } +th,td,caption { padding: 4px 10px 4px 5px; } +/* + You can zebra-stripe your tables in outdated browsers by adding + the class "even" to every other table row. + */ +tbody tr:nth-child(even) td, +tbody tr.even td { + background: #e5ecf9; +} +tfoot { font-style: italic; } +caption { background: #eee; } + + +/* Misc classes +-------------------------------------------------------------- */ + +.small { font-size: .8em; margin-bottom: 1.875em; line-height: 1.875em; } +.large { font-size: 1.2em; line-height: 2.5em; margin-bottom: 1.25em; } +.hide { display: none; } + +.quiet { color: #666; } +.loud { color: #000; } +.highlight { background:#ff0; } +.added { background:#060; color: #fff; } +.removed { background:#900; color: #fff; } + +.first { margin-left:0; padding-left:0; } +.last { margin-right:0; padding-right:0; } +.top { margin-top:0; padding-top:0; } +.bottom { margin-bottom:0; padding-bottom:0; } diff --git a/app/assets/stylesheets/custom.css b/app/assets/stylesheets/custom.css new file mode 100644 index 0000000..99bf49f --- /dev/null +++ b/app/assets/stylesheets/custom.css @@ -0,0 +1,102 @@ +.container { + width: 710px; +} + +body { + background: #cff; +} + +header { + padding-top: 20px; +} + +header img { + padding: 1em; + background: #fff; +} + +section { + margin-top: 1em; + font-size: 120%; + padding: 20px; + background: #fff; +} + +section h1 { + font-size: 200%; +} + +/* Links */ + +a { + color: #09c; + text-decoration: none; +} + +a:hover { + color: #069; + text-decoration: underline; +} + +a:visited { + color: #069; +} + +/* Navigation */ + +nav { + float: right; +} + +nav { + background-color: white; + padding: 0 0.7em; + white-space: nowrap; +} + +nav ul { + margin: 0; + padding: 0; +} + +nav ul li { + list-style-type: none; + display: inline-block; + padding: 0.2em 0; +} + +nav ul li a { + padding: 0 5px; + font-weight: bold; +} + +nav ul li a:visited { + color: #09c; +} + +nav ul li a:hover { + text-decoration: underline; +} + +/* Sign up button */ + +a.signup_button { + margin-left: auto; + margin-right: auto; + display: block; + text-align: center; + width: 190px; + color: #fff; + background: #006400; + font-size: 150%; + font-weight: bold; + padding: 20px; +} + +/* Round corners */ + +.round { + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + border-radius: 10px; +} diff --git a/app/assets/stylesheets/debug/README.textile b/app/assets/stylesheets/debug/README.textile new file mode 100755 index 0000000..7e97831 --- /dev/null +++ b/app/assets/stylesheets/debug/README.textile @@ -0,0 +1,61 @@ +h2. Debugger + +version: _v0.1.3_ ^(beta)^ + +* Gives you a safe rapid prototyping environment +* Helps you avoid misuse of Blueprint classes + +Guaranteed to work in the following browsers... +* Firefox 1.0+ +* Opera 7.0+ +* Konquerer 3.4+ +* Safari 1.2+ +...and won't work in IE due to missing support for +outline+ + + +---------------------------------------------------------------- +h3. Credits + +_author:_ Created by Franz Josef Kaiser "say hello code!":http://say-hello-code.com + + +---------------------------------------------------------------- +h3. Usage + +* Make a copy of debug.html and give it a unique name for your test (for example, debug-test1.html) +* Adjust the of this debug environment page to your needs: +* Uncomment the plugins you want to use in your page. +** _optional_ only needed for the mailing list: describe your goals, trials & errors in the head container. +* Add your basic html structure (div, h1-h6, p, span, a). +* Add some "lorem ipsum" dummy text and sample IMGs to your html (search for lorem ipsum, there are lots of resources). +* Add your Blueprint classes to the structure. +* Uncomment the css/html debugger stylesheet in the head. +* Open the sample in your browser. +** _optional_ if you see elements outlined, you've forgotten declarations or added bad classes. In this case take a look at the head of the debugger plugin to check color codes & find out what exactly went wrong (it's easy). +* Basic structure: _*done*_ +* Now you can add your own styles in a separate stylesheet to the section and develop further. + + +---------------------------------------------------------------- +h4. Changelog + +_v0.1 (alpha)_ +* first version +** a basic html page structure +** debugger offers outlining of classical misstakes + +_v0.1 (beta)_ +* debugger now offers help for missing declarations +** dev page reworked to split between description & content + +_v01.1 (beta)_ +* bugfix: colborder & border were missing dot in front of class + +_v01.2 (beta)_ +* switched to textile mark-up file for readme to inherit bp core + +_v01.2.1 (beta)_ +* tried to fix textile mark-up for readme + +_v01.3 (beta)_ +* switched pathes for all style-links in the head of blueprint.html to work out of the box from the debug plugin directory. diff --git a/app/assets/stylesheets/debug/debug.css b/app/assets/stylesheets/debug/debug.css new file mode 100755 index 0000000..92df864 --- /dev/null +++ b/app/assets/stylesheets/debug/debug.css @@ -0,0 +1,307 @@ +/* =========================================================================== + + debug.css + * Helps you finding classes, that are not necessary. + * Extends with basic html element, attribute & definition help. + + Created by Franz Josef Kaiser 2011 [http://example.com] + + @license: inherited from blueprint source (MIT) + @version: 0.1 - alpha + + See the Readme file in this folder for additional instructions. + Note: This plugin will be of no use in in *Internet Explorer*, or any + browser versions prior to the following, as they doesn't support outline. + * Firefox 1.0 + * Opera 7.0 + * Konquerer 3.4 + * Safari 1.2 + +=========================================================================== */ + +/* ---------------------------------------------------- + Unnecassary classes + doubled definitions + Should not harm the layout +---------------------------------------------------- */ + + /* + Both got... + float: left; + margin-right: 10px; + */ + .column.span-1.column.span-2,.column.span-3,.column.span-4,.column.span-5,.column.span-6,.column.span-7,.column.span-8,.column.span-9,.column.span-10,.column.span-11,.column.span-12,.column.span-13,.column.span-14,.column.span-15,.column.span-16,.column.span-17,.column.span-18,.column.span-19,.column.span-20,.column.span-21,.column.span-22,.column.span-23,.column.span-24 + { outline: 1px dashed green; } + + /* + Both got... + margin-right: 0; + */ + .span-24.last + { outline: 1px dashed green; } + + /* + Both got... + margin-bottom: 1.5em; + */ + div.append-bottom.push-1,.append-bottom.push-1,div.append-bottom.push-2,.append-bottom.push-2,div.append-bottom.push-3,.append-bottom.push-3,div.append-bottom.push-4,.append-bottom.push-4,div.append-bottom.push-5,.append-bottom.push-5,div.append-bottom.push-6,.append-bottom.push-6,div.append-bottom.push-7,.append-bottom.push-7,div.append-bottom.push-8,.append-bottom.push-8,div.append-bottom.push-9,.append-bottom.push-9,div.append-bottom.push-10,.append-bottom.push-10,div.append-bottom.push-11,.append-bottom.push-11,div.append-bottom.push-12,.append-bottom.push-12,div.append-bottom.push-13,.append-bottom.push-13,div.append-bottom.push-14,.append-bottom.push-14,div.append-bottom.push-15,.append-bottom.push-15,div.append-bottom.push-16,.append-bottom.push-16,div.append-bottom.push-17,.append-bottom.push-17,div.append-bottom.push-18,.append-bottom.push-18,div.append-bottom.push-19,.append-bottom.push-19,div.append-bottom.push-20,.append-bottom.push-20,div.append-bottom.push-21,.append-bottom.push-21,div.append-bottom.push-22,.append-bottom.push-22,div.append-bottom.push-23,.append-bottom.push-23,div.append-bottom.push-24,.append-bottom.push-24 + { outline: 1px dashed green; } + + /* + Both got... + margin-bottom: 1.5em; + */ + .box.push-1,.box.push-2,.box.push-3,.box.push-4,.box.push-5,.box.push-6,.box.push-7,.box.push-8,.box.push-9,.box.push-10,.box.push-11,.box.push-12,.box.push-13,.box.push-14,.box.push-15,.box.push-16,.box.push-17,.box.push-18,.box.push-19,.box.push-20,.box.push-21,.box.push-22,.box.push-23,.box.push-24 + { outline: 1px dashed green; } + +/* ---------------------------------------------------- + Maybe Critical classes + outlined dashed red + Conflict depends on the layout. + Some definitions maybe altered and lead to unexpected results. + ex. conflicting margins, paddings, etc. +---------------------------------------------------- */ + + /* + Maybe unexpected result due to conflict with margin-top + prepend-top -> margin-top: 1.5em; + push-X -> margin-top: 0; + */ + div.prepend-top.push-1,.prepend-top.push-1,div.prepend-top.push-2,.prepend-top.push-2,div.prepend-top.push-3,.prepend-top.push-3,div.prepend-top.push-4,.prepend-top.push-4,div.prepend-top.push-5,.prepend-top.push-5,div.prepend-top.push-6,.prepend-top.push-6,div.prepend-top.push-7,.prepend-top.push-7,div.prepend-top.push-8,.prepend-top.push-8,div.prepend-top.push-9,.prepend-top.push-9,div.prepend-top.push-10,.prepend-top.push-10,div.prepend-top.push-11,.prepend-top.push-11,div.prepend-top.push-12,.prepend-top.push-12,div.prepend-top.push-13,.prepend-top.push-13,div.prepend-top.push-14,.prepend-top.push-14,div.prepend-top.push-15,.prepend-top.push-15,div.prepend-top.push-16,.prepend-top.push-16,div.prepend-top.push-17,.prepend-top.push-17,div.prepend-top.push-18,.prepend-top.push-18,div.prepend-top.push-19,.prepend-top.push-19,div.prepend-top.push-20,.prepend-top.push-20,div.prepend-top.push-21,.prepend-top.push-21,div.prepend-top.push-22,.prepend-top.push-22,div.prepend-top.push-23,.prepend-top.push-23,div.prepend-top.push-24,.prepend-top.push-24 + { outline: 1px dashed blue; } + + /* + Conflict with display + .clearfix, .container -> display: block; + .hide -> display: hide; + */ + article.hide,aside.hide,dialog.hide,figure.hide,footer.hide,header.hide,hgroup.hide,nav.hide,section.hide,.container.hide,.clearfix.hide + { outline: 1px dashed blue; display: block !important; } + + /* + Conflict with line-height + .small -> line-height: 1.875; + .large -> line-height: 2.5em; + + form.inline -> line-height: 3; + h1 -> line-height: 1; + h3 -> line-height: 1; + h4 -> line-height: 1.25; + h2, h5, h6 -> line-height: 1.5; (inherited from body) + sub, sup -> line-height: 0; + */ + form.inline.small,form.inline.large,h1.small,h1.large,h2.small,h2.large,h3.small,h3.large,h4.small,h4.large,h5.small,h5.large,h6.small,h6.large,sub.small,sub.large,sup.small,sup.large + { outline: 1px dashed blue; } + +/* ---------------------------------------------------- + Critical classes + outlined red + ex. conflicting margins, paddings, etc. + Can destroy the layout +---------------------------------------------------- */ + + /* + Conflicting with margin-left + */ + .pull-1.push-1,.pull-1.push-2,.pull-1.push-3,.pull-1.push-4,.pull-1.push-5,.pull-1.push-6,.pull-1.push-7,.pull-1.push-8,.pull-1.push-9,.pull-1.push-10,.pull-1.push-11,.pull-1.push-12,.pull-1.push-13,.pull-1.push-14,.pull-1.push-15,.pull-1.push-16,.pull-1.push-17,.pull-1.push-18,.pull-1.push-19,.pull-1.push-20,.pull-1.push-21,.pull-1.push-22,.pull-1.push-23,.pull-1.push-24, + .pull-2.push-1,.pull-2.push-2,.pull-2.push-3,.pull-2.push-4,.pull-2.push-5,.pull-2.push-6,.pull-2.push-7,.pull-2.push-8,.pull-2.push-9,.pull-2.push-10,.pull-2.push-11,.pull-2.push-12,.pull-2.push-13,.pull-2.push-14,.pull-2.push-15,.pull-2.push-16,.pull-2.push-17,.pull-2.push-18,.pull-2.push-19,.pull-2.push-20,.pull-2.push-21,.pull-2.push-22,.pull-2.push-23,.pull-2.push-24, + .pull-3.push-1,.pull-3.push-2,.pull-3.push-3,.pull-3.push-4,.pull-3.push-5,.pull-3.push-6,.pull-3.push-7,.pull-3.push-8,.pull-3.push-9,.pull-3.push-10,.pull-3.push-11,.pull-3.push-12,.pull-3.push-13,.pull-3.push-14,.pull-3.push-15,.pull-3.push-16,.pull-3.push-17,.pull-3.push-18,.pull-3.push-19,.pull-3.push-20,.pull-3.push-21,.pull-3.push-22,.pull-3.push-23,.pull-3.push-24, + .pull-4.push-1,.pull-4.push-2,.pull-4.push-3,.pull-4.push-4,.pull-4.push-5,.pull-4.push-6,.pull-4.push-7,.pull-4.push-8,.pull-4.push-9,.pull-4.push-10,.pull-4.push-11,.pull-4.push-12,.pull-4.push-13,.pull-4.push-14,.pull-4.push-15,.pull-4.push-16,.pull-4.push-17,.pull-4.push-18,.pull-4.push-19,.pull-4.push-20,.pull-4.push-21,.pull-4.push-22,.pull-4.push-23,.pull-4.push-24, + .pull-5.push-1,.pull-5.push-2,.pull-5.push-3,.pull-5.push-4,.pull-5.push-5,.pull-5.push-6,.pull-5.push-7,.pull-5.push-8,.pull-5.push-9,.pull-5.push-10,.pull-5.push-11,.pull-5.push-12,.pull-5.push-13,.pull-5.push-14,.pull-5.push-15,.pull-5.push-16,.pull-5.push-17,.pull-5.push-18,.pull-5.push-19,.pull-5.push-20,.pull-5.push-21,.pull-5.push-22,.pull-5.push-23,.pull-5.push-24, + .pull-6.push-1,.pull-6.push-2,.pull-6.push-3,.pull-6.push-4,.pull-6.push-5,.pull-6.push-6,.pull-6.push-7,.pull-6.push-8,.pull-6.push-9,.pull-6.push-10,.pull-6.push-11,.pull-6.push-12,.pull-6.push-13,.pull-6.push-14,.pull-6.push-15,.pull-6.push-16,.pull-6.push-17,.pull-6.push-18,.pull-6.push-19,.pull-6.push-20,.pull-6.push-21,.pull-6.push-22,.pull-6.push-23,.pull-6.push-24, + .pull-7.push-1,.pull-7.push-2,.pull-7.push-3,.pull-7.push-4,.pull-7.push-5,.pull-7.push-6,.pull-7.push-7,.pull-7.push-8,.pull-7.push-9,.pull-7.push-10,.pull-7.push-11,.pull-7.push-12,.pull-7.push-13,.pull-7.push-14,.pull-7.push-15,.pull-7.push-16,.pull-7.push-17,.pull-7.push-18,.pull-7.push-19,.pull-7.push-20,.pull-7.push-21,.pull-7.push-22,.pull-7.push-23,.pull-7.push-24, + .pull-8.push-1,.pull-8.push-2,.pull-8.push-3,.pull-8.push-4,.pull-8.push-5,.pull-8.push-6,.pull-8.push-7,.pull-8.push-8,.pull-8.push-9,.pull-8.push-10,.pull-8.push-11,.pull-8.push-12,.pull-8.push-13,.pull-8.push-14,.pull-8.push-15,.pull-8.push-16,.pull-8.push-17,.pull-8.push-18,.pull-8.push-19,.pull-8.push-20,.pull-8.push-21,.pull-8.push-22,.pull-8.push-23,.pull-8.push-24, + .pull-9.push-1,.pull-9.push-2,.pull-9.push-3,.pull-9.push-4,.pull-9.push-5,.pull-9.push-6,.pull-9.push-7,.pull-9.push-8,.pull-9.push-9,.pull-9.push-10,.pull-9.push-11,.pull-9.push-12,.pull-9.push-13,.pull-9.push-14,.pull-9.push-15,.pull-9.push-16,.pull-9.push-17,.pull-9.push-18,.pull-9.push-19,.pull-9.push-20,.pull-9.push-21,.pull-9.push-22,.pull-9.push-23,.pull-9.push-24, + .pull-11.push-1,.pull-11.push-2,.pull-11.push-3,.pull-11.push-4,.pull-11.push-5,.pull-11.push-6,.pull-11.push-7,.pull-11.push-8,.pull-11.push-9,.pull-11.push-10,.pull-11.push-11,.pull-11.push-12,.pull-11.push-13,.pull-11.push-14,.pull-11.push-15,.pull-11.push-16,.pull-11.push-17,.pull-11.push-18,.pull-11.push-19,.pull-11.push-20,.pull-11.push-21,.pull-11.push-22,.pull-11.push-23,.pull-11.push-24 + .pull-12.push-1,.pull-12.push-2,.pull-12.push-3,.pull-12.push-4,.pull-12.push-5,.pull-12.push-6,.pull-12.push-7,.pull-12.push-8,.pull-12.push-9,.pull-12.push-10,.pull-12.push-11,.pull-12.push-12,.pull-12.push-13,.pull-12.push-14,.pull-12.push-15,.pull-12.push-16,.pull-12.push-17,.pull-12.push-18,.pull-12.push-19,.pull-12.push-20,.pull-12.push-21,.pull-12.push-22,.pull-12.push-23,.pull-12.push-24 + .pull-13.push-1,.pull-13.push-2,.pull-13.push-3,.pull-13.push-4,.pull-13.push-5,.pull-13.push-6,.pull-13.push-7,.pull-13.push-8,.pull-13.push-9,.pull-13.push-10,.pull-13.push-11,.pull-13.push-12,.pull-13.push-13,.pull-13.push-14,.pull-13.push-15,.pull-13.push-16,.pull-13.push-17,.pull-13.push-18,.pull-13.push-19,.pull-13.push-20,.pull-13.push-21,.pull-13.push-22,.pull-13.push-23,.pull-13.push-24 + .pull-14.push-1,.pull-14.push-2,.pull-14.push-3,.pull-14.push-4,.pull-14.push-5,.pull-14.push-6,.pull-14.push-7,.pull-14.push-8,.pull-14.push-9,.pull-14.push-10,.pull-14.push-11,.pull-14.push-12,.pull-14.push-13,.pull-14.push-14,.pull-14.push-15,.pull-14.push-16,.pull-14.push-17,.pull-14.push-18,.pull-14.push-19,.pull-14.push-20,.pull-14.push-21,.pull-14.push-22,.pull-14.push-23,.pull-14.push-24 + .pull-15.push-1,.pull-15.push-2,.pull-15.push-3,.pull-15.push-4,.pull-15.push-5,.pull-15.push-6,.pull-15.push-7,.pull-15.push-8,.pull-15.push-9,.pull-15.push-10,.pull-15.push-11,.pull-15.push-12,.pull-15.push-13,.pull-15.push-14,.pull-15.push-15,.pull-15.push-16,.pull-15.push-17,.pull-15.push-18,.pull-15.push-19,.pull-15.push-20,.pull-15.push-21,.pull-15.push-22,.pull-15.push-23,.pull-15.push-24 + .pull-16.push-1,.pull-16.push-2,.pull-16.push-3,.pull-16.push-4,.pull-16.push-5,.pull-16.push-6,.pull-16.push-7,.pull-16.push-8,.pull-16.push-9,.pull-16.push-10,.pull-16.push-11,.pull-16.push-12,.pull-16.push-13,.pull-16.push-14,.pull-16.push-15,.pull-16.push-16,.pull-16.push-17,.pull-16.push-18,.pull-16.push-19,.pull-16.push-20,.pull-16.push-21,.pull-16.push-22,.pull-16.push-23,.pull-16.push-24 + .pull-17.push-1,.pull-17.push-2,.pull-17.push-3,.pull-17.push-4,.pull-17.push-5,.pull-17.push-6,.pull-17.push-7,.pull-17.push-8,.pull-17.push-9,.pull-17.push-10,.pull-17.push-11,.pull-17.push-12,.pull-17.push-13,.pull-17.push-14,.pull-17.push-15,.pull-17.push-16,.pull-17.push-17,.pull-17.push-18,.pull-17.push-19,.pull-17.push-20,.pull-17.push-21,.pull-17.push-22,.pull-17.push-23,.pull-17.push-24 + .pull-18.push-1,.pull-18.push-2,.pull-18.push-3,.pull-18.push-4,.pull-18.push-5,.pull-18.push-6,.pull-18.push-7,.pull-18.push-8,.pull-18.push-9,.pull-18.push-10,.pull-18.push-11,.pull-18.push-12,.pull-18.push-13,.pull-18.push-14,.pull-18.push-15,.pull-18.push-16,.pull-18.push-17,.pull-18.push-18,.pull-18.push-19,.pull-18.push-20,.pull-18.push-21,.pull-18.push-22,.pull-18.push-23,.pull-18.push-24 + .pull-19.push-1,.pull-19.push-2,.pull-19.push-3,.pull-19.push-4,.pull-19.push-5,.pull-19.push-6,.pull-19.push-7,.pull-19.push-8,.pull-19.push-9,.pull-19.push-10,.pull-19.push-11,.pull-19.push-12,.pull-19.push-13,.pull-19.push-14,.pull-19.push-15,.pull-19.push-16,.pull-19.push-17,.pull-19.push-18,.pull-19.push-19,.pull-19.push-20,.pull-19.push-21,.pull-19.push-22,.pull-19.push-23,.pull-19.push-24 + .pull-20.push-1,.pull-20.push-2,.pull-20.push-3,.pull-20.push-4,.pull-20.push-5,.pull-20.push-6,.pull-20.push-7,.pull-20.push-8,.pull-20.push-9,.pull-20.push-10,.pull-20.push-11,.pull-20.push-12,.pull-20.push-13,.pull-20.push-14,.pull-20.push-15,.pull-20.push-16,.pull-20.push-17,.pull-20.push-18,.pull-20.push-19,.pull-20.push-20,.pull-20.push-21,.pull-20.push-22,.pull-20.push-23,.pull-20.push-24 + .pull-21.push-1,.pull-21.push-2,.pull-21.push-3,.pull-21.push-4,.pull-21.push-5,.pull-21.push-6,.pull-21.push-7,.pull-21.push-8,.pull-21.push-9,.pull-21.push-10,.pull-21.push-11,.pull-21.push-12,.pull-21.push-13,.pull-21.push-14,.pull-21.push-15,.pull-21.push-16,.pull-21.push-17,.pull-21.push-18,.pull-21.push-19,.pull-21.push-20,.pull-21.push-21,.pull-21.push-22,.pull-21.push-23,.pull-21.push-24 + .pull-22.push-1,.pull-22.push-2,.pull-22.push-3,.pull-22.push-4,.pull-22.push-5,.pull-22.push-6,.pull-22.push-7,.pull-22.push-8,.pull-22.push-9,.pull-22.push-10,.pull-22.push-11,.pull-22.push-12,.pull-22.push-13,.pull-22.push-14,.pull-22.push-15,.pull-22.push-16,.pull-22.push-17,.pull-22.push-18,.pull-22.push-19,.pull-22.push-20,.pull-22.push-21,.pull-22.push-22,.pull-22.push-23,.pull-22.push-24 + .pull-23.push-1,.pull-23.push-2,.pull-23.push-3,.pull-23.push-4,.pull-23.push-5,.pull-23.push-6,.pull-23.push-7,.pull-23.push-8,.pull-23.push-9,.pull-23.push-10,.pull-23.push-11,.pull-23.push-12,.pull-23.push-13,.pull-23.push-14,.pull-23.push-15,.pull-23.push-16,.pull-23.push-17,.pull-23.push-18,.pull-23.push-19,.pull-23.push-20,.pull-23.push-21,.pull-23.push-22,.pull-23.push-23,.pull-23.push-24 + .pull-24.push-1,.pull-24.push-2,.pull-24.push-3,.pull-24.push-4,.pull-24.push-5,.pull-24.push-6,.pull-24.push-7,.pull-24.push-8,.pull-24.push-9,.pull-24.push-10,.pull-24.push-11,.pull-24.push-12,.pull-24.push-13,.pull-24.push-14,.pull-24.push-15,.pull-24.push-16,.pull-24.push-17,.pull-24.push-18,.pull-24.push-19,.pull-24.push-20,.pull-24.push-21,.pull-24.push-22,.pull-24.push-23,.pull-24.push-24 + { outline: 1px solid red; } + +/* +++++++++++++++++++++++++++++ + Html Elements ++++++++++++++++++++++++++++++ */ + + /* + Conflict with margin right, bottom & left + hr -> margin: 0 0 1.45em 0; + */ + hr.push-1,hr.push-2,hr.push-3,hr.push-4,hr.push-5,hr.push-6,hr.push-7,hr.push-8,hr.push-9,hr.push-10,hr.push-11,hr.push-12,hr.push-13,hr.push-14,hr.push-15,hr.push-16,hr.push-17,hr.push-18,hr.push-19,hr.push-20,hr.push-21,hr.push-22,hr.push-23,hr.push-24 + { outline: 1px solid red; } + +/* +++++++++++++++++++++++++++++ + Form Elements ++++++++++++++++++++++++++++++ */ + + /* + Conflict with margin-right + .span-24, .last -> margin-right: 0; + */ + .span-24.push-1,.span-24.push-2,.span-24.push-3,.span-24.push-4,.span-24.push-5,.span-24.push-6,.span-24.push-7,.span-24.push-8,.span-24.push-9,.span-24.push-10,.span-24.push-11,.span-24.push-12,.span-24.push-13,.span-24.push-14,.span-24.push-15,.span-24.push-16,.span-24.push-17,.span-24.push-18,.span-24.push-19,.span-24.push-20,.span-24.push-21,.span-24.push-22,.span-24.push-23,.span-24.push-24 + { outline: 1px solid red; } + + .last.push-1,.last.push-2,.last.push-3,.last.push-4,.last.push-5,.last.push-6,.last.push-7,.last.push-8,.last.push-9,.last.push-10,.last.push-11,.last.push-12,.last.push-13,.last.push-14,.last.push-15,.last.push-16,.last.push-17,.last.push-18,.last.push-19,.last.push-20,.last.push-21,.last.push-22,.last.push-23,.last.push-24 + { outline: 1px solid red; } + + /* + Conflict with margin-right + .border -> margin-right: 5px; + .colborder -> margin-right: 25px; + */ + .border.pull-1,.border.pull-2,.border.pull-3,.border.pull-4,.border.pull-5,.border.pull-6,.border.pull-7,.border.pull-8,.border.pull-9,.border.pull-10,.border.pull-11,.border.pull-12,.border.pull-13,.border.pull-14,.border.pull-15,.border.pull-16,.border.pull-17,.border.pull-18,.border.pull-19,.border.pull-20,.border.pull-21,.border.pull-22,.border.pull-23,.border.pull-24 + { outline: 1px solid red; } + + .colborder.pull-1,.colborder.pull-2,.colborder.pull-3,.colborder.pull-4,.colborder.pull-5,.colborder.pull-6,.colborder.pull-7,.colborder.pull-8,.colborder.pull-9,.colborder.pull-10,.colborder.pull-11,.colborder.pull-12,.colborder.pull-13,.colborder.pull-14,.colborder.pull-15,.colborder.pull-16,.colborder.pull-17,.colborder.pull-18,.colborder.pull-19,.colborder.pull-20,.colborder.pull-21,.colborder.pull-22,.colborder.pull-23,.colborder.pull-24 + { outline: 1px solid red; } + + /* + Conflict with margin-right + address -> margin: 0 0 1.5em; | (right: 0) + p .right -> margin: 1.5em 0 1.5em 1.5em; | (left: 1.5em) + p .left -> margin: 1.5em 1.5em 1.5em 0; | (right: 0) + pre -> margin: 1.5em; + blockquote -> margin: 1.5em; + .border -> margin-right: 5px; + .colborder -> margin-right: 25px; + */ + address.border,address.colborder,p .left.right,p .right.border,p .right.colborder,pre.border,pre.colborder,blockquote.border,blockquote.colborder + { outline: 1px solid red; } + + /* + Conflict with padding-left + input.span-X, textarea.span-X -> padding-left: 5px; + */ + input.span-1.append-1,textarea.span-1.append-1,input.span-2.append-1,textarea.span-2.append-1,input.span-3.append-1,textarea.span-3.append-1,input.span-4.append-1,textarea.span-4.append-1,input.span-5.append-1,textarea.span-5.append-1,input.span-6.append-1,textarea.span-6.append-1,input.span-7.append-1,textarea.span-7.append-1,input.span-8.append-1,textarea.span-8.append-1,input.span-9.append-1,textarea.span-9.append-1,input.span-10.append-1,textarea.span-10.append-1,input.span-11.append-1,textarea.span-11.append-1,input.span-12.append-1,textarea.span-12.append-1,input.span-13.append-1,textarea.span-13.append-1,input.span-14.append-1,textarea.span-14.append-1,input.span-15.append-1,textarea.span-15.append-1,input.span-16.append-1,textarea.span-16.append-1,input.span-17.append-1,textarea.span-17.append-1,input.span-18.append-1,textarea.span-18.append-1,input.span-19.append-1,textarea.span-19.append-1,input.span-20.append-1,textarea.span-20.append-1,input.span-21.append-1,textarea.span-21.append-1,input.span-22.append-1,textarea.span-22.append-1,input.span-23.append-1,textarea.span-23.append-1,input.span-24.append-1,textarea.span-24.append-1 + input.span-1.append-2,textarea.span-1.append-2,input.span-2.append-2,textarea.span-2.append-2,input.span-3.append-2,textarea.span-3.append-2,input.span-4.append-2,textarea.span-4.append-2,input.span-5.append-2,textarea.span-5.append-2,input.span-6.append-2,textarea.span-6.append-2,input.span-7.append-2,textarea.span-7.append-2,input.span-8.append-2,textarea.span-8.append-2,input.span-9.append-2,textarea.span-9.append-2,input.span-10.append-2,textarea.span-10.append-2,input.span-11.append-2,textarea.span-11.append-2,input.span-12.append-2,textarea.span-12.append-2,input.span-13.append-2,textarea.span-13.append-2,input.span-14.append-2,textarea.span-14.append-2,input.span-15.append-2,textarea.span-15.append-2,input.span-16.append-2,textarea.span-16.append-2,input.span-17.append-2,textarea.span-17.append-2,input.span-18.append-2,textarea.span-18.append-2,input.span-19.append-2,textarea.span-19.append-2,input.span-20.append-2,textarea.span-20.append-2,input.span-21.append-2,textarea.span-21.append-2,input.span-22.append-2,textarea.span-22.append-2,input.span-23.append-2,textarea.span-23.append-2,input.span-24.append-2,textarea.span-24.append-2 + input.span-1.append-3,textarea.span-1.append-3,input.span-2.append-3,textarea.span-2.append-3,input.span-3.append-3,textarea.span-3.append-3,input.span-4.append-3,textarea.span-4.append-3,input.span-5.append-3,textarea.span-5.append-3,input.span-6.append-3,textarea.span-6.append-3,input.span-7.append-3,textarea.span-7.append-3,input.span-8.append-3,textarea.span-8.append-3,input.span-9.append-3,textarea.span-9.append-3,input.span-10.append-3,textarea.span-10.append-3,input.span-11.append-3,textarea.span-11.append-3,input.span-12.append-3,textarea.span-12.append-3,input.span-13.append-3,textarea.span-13.append-3,input.span-14.append-3,textarea.span-14.append-3,input.span-15.append-3,textarea.span-15.append-3,input.span-16.append-3,textarea.span-16.append-3,input.span-17.append-3,textarea.span-17.append-3,input.span-18.append-3,textarea.span-18.append-3,input.span-19.append-3,textarea.span-19.append-3,input.span-20.append-3,textarea.span-20.append-3,input.span-21.append-3,textarea.span-21.append-3,input.span-22.append-3,textarea.span-22.append-3,input.span-23.append-3,textarea.span-23.append-3,input.span-24.append-3,textarea.span-24.append- + input.span-1.append-4,textarea.span-1.append-4,input.span-2.append-4,textarea.span-2.append-4,input.span-3.append-4,textarea.span-3.append-4,input.span-4.append-4,textarea.span-4.append-4,input.span-5.append-4,textarea.span-5.append-4,input.span-6.append-4,textarea.span-6.append-4,input.span-7.append-4,textarea.span-7.append-4,input.span-8.append-4,textarea.span-8.append-4,input.span-9.append-4,textarea.span-9.append-4,input.span-10.append-4,textarea.span-10.append-4,input.span-11.append-4,textarea.span-11.append-4,input.span-12.append-4,textarea.span-12.append-4,input.span-13.append-4,textarea.span-13.append-4,input.span-14.append-4,textarea.span-14.append-4,input.span-15.append-4,textarea.span-15.append-4,input.span-16.append-4,textarea.span-16.append-4,input.span-17.append-4,textarea.span-17.append-4,input.span-18.append-4,textarea.span-18.append-4,input.span-19.append-4,textarea.span-19.append-4,input.span-20.append-4,textarea.span-20.append-4,input.span-21.append-4,textarea.span-21.append-4,input.span-22.append-4,textarea.span-22.append-4,input.span-23.append-4,textarea.span-23.append-4,input.span-24.append-4,textarea.span-24.append- + input.span-1.append-5,textarea.span-1.append-5,input.span-2.append-5,textarea.span-2.append-5,input.span-3.append-5,textarea.span-3.append-5,input.span-4.append-5,textarea.span-4.append-5,input.span-5.append-5,textarea.span-5.append-5,input.span-6.append-5,textarea.span-6.append-5,input.span-7.append-5,textarea.span-7.append-5,input.span-8.append-5,textarea.span-8.append-5,input.span-9.append-5,textarea.span-9.append-5,input.span-10.append-5,textarea.span-10.append-5,input.span-11.append-5,textarea.span-11.append-5,input.span-12.append-5,textarea.span-12.append-5,input.span-13.append-5,textarea.span-13.append-5,input.span-14.append-5,textarea.span-14.append-5,input.span-15.append-5,textarea.span-15.append-5,input.span-16.append-5,textarea.span-16.append-5,input.span-17.append-5,textarea.span-17.append-5,input.span-18.append-5,textarea.span-18.append-5,input.span-19.append-5,textarea.span-19.append-5,input.span-20.append-5,textarea.span-20.append-5,input.span-21.append-5,textarea.span-21.append-5,input.span-22.append-5,textarea.span-22.append-5,input.span-23.append-5,textarea.span-23.append-5,input.span-24.append-5,textarea.span-24.append- + input.span-1.append-6,textarea.span-1.append-6,input.span-2.append-6,textarea.span-2.append-6,input.span-3.append-6,textarea.span-3.append-6,input.span-4.append-6,textarea.span-4.append-6,input.span-5.append-6,textarea.span-5.append-6,input.span-6.append-6,textarea.span-6.append-6,input.span-7.append-6,textarea.span-7.append-6,input.span-8.append-6,textarea.span-8.append-6,input.span-9.append-6,textarea.span-9.append-6,input.span-10.append-6,textarea.span-10.append-6,input.span-11.append-6,textarea.span-11.append-6,input.span-12.append-6,textarea.span-12.append-6,input.span-13.append-6,textarea.span-13.append-6,input.span-14.append-6,textarea.span-14.append-6,input.span-15.append-6,textarea.span-15.append-6,input.span-16.append-6,textarea.span-16.append-6,input.span-17.append-6,textarea.span-17.append-6,input.span-18.append-6,textarea.span-18.append-6,input.span-19.append-6,textarea.span-19.append-6,input.span-20.append-6,textarea.span-20.append-6,input.span-21.append-6,textarea.span-21.append-6,input.span-22.append-6,textarea.span-22.append-6,input.span-23.append-6,textarea.span-23.append-6,input.span-24.append-6,textarea.span-24.append- + input.span-1.append-7,textarea.span-1.append-7,input.span-2.append-7,textarea.span-2.append-7,input.span-3.append-7,textarea.span-3.append-7,input.span-4.append-7,textarea.span-4.append-7,input.span-5.append-7,textarea.span-5.append-7,input.span-6.append-7,textarea.span-6.append-7,input.span-7.append-7,textarea.span-7.append-7,input.span-8.append-7,textarea.span-8.append-7,input.span-9.append-7,textarea.span-9.append-7,input.span-10.append-7,textarea.span-10.append-7,input.span-11.append-7,textarea.span-11.append-7,input.span-12.append-7,textarea.span-12.append-7,input.span-13.append-7,textarea.span-13.append-7,input.span-14.append-7,textarea.span-14.append-7,input.span-15.append-7,textarea.span-15.append-7,input.span-16.append-7,textarea.span-16.append-7,input.span-17.append-7,textarea.span-17.append-7,input.span-18.append-7,textarea.span-18.append-7,input.span-19.append-7,textarea.span-19.append-7,input.span-20.append-7,textarea.span-20.append-7,input.span-21.append-7,textarea.span-21.append-7,input.span-22.append-7,textarea.span-22.append-7,input.span-23.append-7,textarea.span-23.append-7,input.span-24.append-7,textarea.span-24.append- + input.span-1.append-8,textarea.span-1.append-8,input.span-2.append-8,textarea.span-2.append-8,input.span-3.append-8,textarea.span-3.append-8,input.span-4.append-8,textarea.span-4.append-8,input.span-5.append-8,textarea.span-5.append-8,input.span-6.append-8,textarea.span-6.append-8,input.span-7.append-8,textarea.span-7.append-8,input.span-8.append-8,textarea.span-8.append-8,input.span-9.append-8,textarea.span-9.append-8,input.span-10.append-8,textarea.span-10.append-8,input.span-11.append-8,textarea.span-11.append-8,input.span-12.append-8,textarea.span-12.append-8,input.span-13.append-8,textarea.span-13.append-8,input.span-14.append-8,textarea.span-14.append-8,input.span-15.append-8,textarea.span-15.append-8,input.span-16.append-8,textarea.span-16.append-8,input.span-17.append-8,textarea.span-17.append-8,input.span-18.append-8,textarea.span-18.append-8,input.span-19.append-8,textarea.span-19.append-8,input.span-20.append-8,textarea.span-20.append-8,input.span-21.append-8,textarea.span-21.append-8,input.span-22.append-8,textarea.span-22.append-8,input.span-23.append-8,textarea.span-23.append-8,input.span-24.append-8,textarea.span-24.append- + input.span-1.append-9,textarea.span-1.append-9,input.span-2.append-9,textarea.span-2.append-9,input.span-3.append-9,textarea.span-3.append-9,input.span-4.append-9,textarea.span-4.append-9,input.span-5.append-9,textarea.span-5.append-9,input.span-6.append-9,textarea.span-6.append-9,input.span-7.append-9,textarea.span-7.append-9,input.span-8.append-9,textarea.span-8.append-9,input.span-9.append-9,textarea.span-9.append-9,input.span-10.append-9,textarea.span-10.append-9,input.span-11.append-9,textarea.span-11.append-9,input.span-12.append-9,textarea.span-12.append-9,input.span-13.append-9,textarea.span-13.append-9,input.span-14.append-9,textarea.span-14.append-9,input.span-15.append-9,textarea.span-15.append-9,input.span-16.append-9,textarea.span-16.append-9,input.span-17.append-9,textarea.span-17.append-9,input.span-18.append-9,textarea.span-18.append-9,input.span-19.append-9,textarea.span-19.append-9,input.span-20.append-9,textarea.span-20.append-9,input.span-21.append-9,textarea.span-21.append-9,input.span-22.append-9,textarea.span-22.append-9,input.span-23.append-9,textarea.span-23.append-9,input.span-24.append-9,textarea.span-24.append- + input.span-1.append-10,textarea.span-1.append-10,input.span-2.append-10,textarea.span-2.append-10,input.span-3.append-10,textarea.span-3.append-10,input.span-4.append-10,textarea.span-4.append-10,input.span-5.append-10,textarea.span-5.append-10,input.span-6.append-10,textarea.span-6.append-10,input.span-7.append-10,textarea.span-7.append-10,input.span-8.append-10,textarea.span-8.append-10,input.span-9.append-10,textarea.span-9.append-10,input.span-10.append-10,textarea.span-10.append-10,input.span-11.append-10,textarea.span-11.append-10,input.span-12.append-10,textarea.span-12.append-10,input.span-13.append-10,textarea.span-13.append-10,input.span-14.append-10,textarea.span-14.append-10,input.span-15.append-10,textarea.span-15.append-10,input.span-16.append-10,textarea.span-16.append-10,input.span-17.append-10,textarea.span-17.append-10,input.span-18.append-10,textarea.span-18.append-10,input.span-19.append-10,textarea.span-19.append-10,input.span-20.append-10,textarea.span-20.append-10,input.span-21.append-10,textarea.span-21.append-10,input.span-22.append-10,textarea.span-22.append-10,input.span-23.append-10,textarea.span-23.append-10,input.span-24.append-10,textarea.span-24.append- + input.span-1.append-11,textarea.span-1.append-11,input.span-2.append-11,textarea.span-2.append-11,input.span-3.append-11,textarea.span-3.append-11,input.span-4.append-11,textarea.span-4.append-11,input.span-5.append-11,textarea.span-5.append-11,input.span-6.append-11,textarea.span-6.append-11,input.span-7.append-11,textarea.span-7.append-11,input.span-8.append-11,textarea.span-8.append-11,input.span-9.append-11,textarea.span-9.append-11,input.span-10.append-11,textarea.span-10.append-11,input.span-11.append-11,textarea.span-11.append-11,input.span-12.append-11,textarea.span-12.append-11,input.span-13.append-11,textarea.span-13.append-11,input.span-14.append-11,textarea.span-14.append-11,input.span-15.append-11,textarea.span-15.append-11,input.span-16.append-11,textarea.span-16.append-11,input.span-17.append-11,textarea.span-17.append-11,input.span-18.append-11,textarea.span-18.append-11,input.span-19.append-11,textarea.span-19.append-11,input.span-20.append-11,textarea.span-20.append-11,input.span-21.append-11,textarea.span-21.append-11,input.span-22.append-11,textarea.span-22.append-11,input.span-23.append-11,textarea.span-23.append-11,input.span-24.append-11,textarea.span-24.append- + input.span-1.append-12,textarea.span-1.append-12,input.span-2.append-12,textarea.span-2.append-12,input.span-3.append-12,textarea.span-3.append-12,input.span-4.append-12,textarea.span-4.append-12,input.span-5.append-12,textarea.span-5.append-12,input.span-6.append-12,textarea.span-6.append-12,input.span-7.append-12,textarea.span-7.append-12,input.span-8.append-12,textarea.span-8.append-12,input.span-9.append-12,textarea.span-9.append-12,input.span-10.append-12,textarea.span-10.append-12,input.span-11.append-12,textarea.span-11.append-12,input.span-12.append-12,textarea.span-12.append-12,input.span-13.append-12,textarea.span-13.append-12,input.span-14.append-12,textarea.span-14.append-12,input.span-15.append-12,textarea.span-15.append-12,input.span-16.append-12,textarea.span-16.append-12,input.span-17.append-12,textarea.span-17.append-12,input.span-18.append-12,textarea.span-18.append-12,input.span-19.append-12,textarea.span-19.append-12,input.span-20.append-12,textarea.span-20.append-12,input.span-21.append-12,textarea.span-21.append-12,input.span-22.append-12,textarea.span-22.append-12,input.span-23.append-12,textarea.span-23.append-12,input.span-24.append-12,textarea.span-24.append- + input.span-1.append-13,textarea.span-1.append-13,input.span-2.append-13,textarea.span-2.append-13,input.span-3.append-13,textarea.span-3.append-13,input.span-4.append-13,textarea.span-4.append-13,input.span-5.append-13,textarea.span-5.append-13,input.span-6.append-13,textarea.span-6.append-13,input.span-7.append-13,textarea.span-7.append-13,input.span-8.append-13,textarea.span-8.append-13,input.span-9.append-13,textarea.span-9.append-13,input.span-10.append-13,textarea.span-10.append-13,input.span-11.append-13,textarea.span-11.append-13,input.span-12.append-13,textarea.span-12.append-13,input.span-13.append-13,textarea.span-13.append-13,input.span-14.append-13,textarea.span-14.append-13,input.span-15.append-13,textarea.span-15.append-13,input.span-16.append-13,textarea.span-16.append-13,input.span-17.append-13,textarea.span-17.append-13,input.span-18.append-13,textarea.span-18.append-13,input.span-19.append-13,textarea.span-19.append-13,input.span-20.append-13,textarea.span-20.append-13,input.span-21.append-13,textarea.span-21.append-13,input.span-22.append-13,textarea.span-22.append-13,input.span-23.append-13,textarea.span-23.append-13,input.span-24.append-13,textarea.span-24.append- + input.span-1.append-14,textarea.span-1.append-14,input.span-2.append-14,textarea.span-2.append-14,input.span-3.append-14,textarea.span-3.append-14,input.span-4.append-14,textarea.span-4.append-14,input.span-5.append-14,textarea.span-5.append-14,input.span-6.append-14,textarea.span-6.append-14,input.span-7.append-14,textarea.span-7.append-14,input.span-8.append-14,textarea.span-8.append-14,input.span-9.append-14,textarea.span-9.append-14,input.span-10.append-14,textarea.span-10.append-14,input.span-11.append-14,textarea.span-11.append-14,input.span-12.append-14,textarea.span-12.append-14,input.span-13.append-14,textarea.span-13.append-14,input.span-14.append-14,textarea.span-14.append-14,input.span-15.append-14,textarea.span-15.append-14,input.span-16.append-14,textarea.span-16.append-14,input.span-17.append-14,textarea.span-17.append-14,input.span-18.append-14,textarea.span-18.append-14,input.span-19.append-14,textarea.span-19.append-14,input.span-20.append-14,textarea.span-20.append-14,input.span-21.append-14,textarea.span-21.append-14,input.span-22.append-14,textarea.span-22.append-14,input.span-23.append-14,textarea.span-23.append-14,input.span-24.append-14,textarea.span-24.append- + input.span-1.append-15,textarea.span-1.append-15,input.span-2.append-15,textarea.span-2.append-15,input.span-3.append-15,textarea.span-3.append-15,input.span-4.append-15,textarea.span-4.append-15,input.span-5.append-15,textarea.span-5.append-15,input.span-6.append-15,textarea.span-6.append-15,input.span-7.append-15,textarea.span-7.append-15,input.span-8.append-15,textarea.span-8.append-15,input.span-9.append-15,textarea.span-9.append-15,input.span-10.append-15,textarea.span-10.append-15,input.span-11.append-15,textarea.span-11.append-15,input.span-12.append-15,textarea.span-12.append-15,input.span-13.append-15,textarea.span-13.append-15,input.span-14.append-15,textarea.span-14.append-15,input.span-15.append-15,textarea.span-15.append-15,input.span-16.append-15,textarea.span-16.append-15,input.span-17.append-15,textarea.span-17.append-15,input.span-18.append-15,textarea.span-18.append-15,input.span-19.append-15,textarea.span-19.append-15,input.span-20.append-15,textarea.span-20.append-15,input.span-21.append-15,textarea.span-21.append-15,input.span-22.append-15,textarea.span-22.append-15,input.span-23.append-15,textarea.span-23.append-15,input.span-24.append-15,textarea.span-24.append- + input.span-1.append-16,textarea.span-1.append-16,input.span-2.append-16,textarea.span-2.append-16,input.span-3.append-16,textarea.span-3.append-16,input.span-4.append-16,textarea.span-4.append-16,input.span-5.append-16,textarea.span-5.append-16,input.span-6.append-16,textarea.span-6.append-16,input.span-7.append-16,textarea.span-7.append-16,input.span-8.append-16,textarea.span-8.append-16,input.span-9.append-16,textarea.span-9.append-16,input.span-10.append-16,textarea.span-10.append-16,input.span-11.append-16,textarea.span-11.append-16,input.span-12.append-16,textarea.span-12.append-16,input.span-13.append-16,textarea.span-13.append-16,input.span-14.append-16,textarea.span-14.append-16,input.span-15.append-16,textarea.span-15.append-16,input.span-16.append-16,textarea.span-16.append-16,input.span-17.append-16,textarea.span-17.append-16,input.span-18.append-16,textarea.span-18.append-16,input.span-19.append-16,textarea.span-19.append-16,input.span-20.append-16,textarea.span-20.append-16,input.span-21.append-16,textarea.span-21.append-16,input.span-22.append-16,textarea.span-22.append-16,input.span-23.append-16,textarea.span-23.append-16,input.span-24.append-16,textarea.span-24.append- + input.span-1.append-17,textarea.span-1.append-17,input.span-2.append-17,textarea.span-2.append-17,input.span-3.append-17,textarea.span-3.append-17,input.span-4.append-17,textarea.span-4.append-17,input.span-5.append-17,textarea.span-5.append-17,input.span-6.append-17,textarea.span-6.append-17,input.span-7.append-17,textarea.span-7.append-17,input.span-8.append-17,textarea.span-8.append-17,input.span-9.append-17,textarea.span-9.append-17,input.span-10.append-17,textarea.span-10.append-17,input.span-11.append-17,textarea.span-11.append-17,input.span-12.append-17,textarea.span-12.append-17,input.span-13.append-17,textarea.span-13.append-17,input.span-14.append-17,textarea.span-14.append-17,input.span-15.append-17,textarea.span-15.append-17,input.span-16.append-17,textarea.span-16.append-17,input.span-17.append-17,textarea.span-17.append-17,input.span-18.append-17,textarea.span-18.append-17,input.span-19.append-17,textarea.span-19.append-17,input.span-20.append-17,textarea.span-20.append-17,input.span-21.append-17,textarea.span-21.append-17,input.span-22.append-17,textarea.span-22.append-17,input.span-23.append-17,textarea.span-23.append-17,input.span-24.append-17,textarea.span-24.append- + input.span-1.append-18,textarea.span-1.append-18,input.span-2.append-18,textarea.span-2.append-18,input.span-3.append-18,textarea.span-3.append-18,input.span-4.append-18,textarea.span-4.append-18,input.span-5.append-18,textarea.span-5.append-18,input.span-6.append-18,textarea.span-6.append-18,input.span-7.append-18,textarea.span-7.append-18,input.span-8.append-18,textarea.span-8.append-18,input.span-9.append-18,textarea.span-9.append-18,input.span-10.append-18,textarea.span-10.append-18,input.span-11.append-18,textarea.span-11.append-18,input.span-12.append-18,textarea.span-12.append-18,input.span-13.append-18,textarea.span-13.append-18,input.span-14.append-18,textarea.span-14.append-18,input.span-15.append-18,textarea.span-15.append-18,input.span-16.append-18,textarea.span-16.append-18,input.span-17.append-18,textarea.span-17.append-18,input.span-18.append-18,textarea.span-18.append-18,input.span-19.append-18,textarea.span-19.append-18,input.span-20.append-18,textarea.span-20.append-18,input.span-21.append-18,textarea.span-21.append-18,input.span-22.append-18,textarea.span-22.append-18,input.span-23.append-18,textarea.span-23.append-18,input.span-24.append-18,textarea.span-24.append- + input.span-1.append-19,textarea.span-1.append-19,input.span-2.append-19,textarea.span-2.append-19,input.span-3.append-19,textarea.span-3.append-19,input.span-4.append-19,textarea.span-4.append-19,input.span-5.append-19,textarea.span-5.append-19,input.span-6.append-19,textarea.span-6.append-19,input.span-7.append-19,textarea.span-7.append-19,input.span-8.append-19,textarea.span-8.append-19,input.span-9.append-19,textarea.span-9.append-19,input.span-10.append-19,textarea.span-10.append-19,input.span-11.append-19,textarea.span-11.append-19,input.span-12.append-19,textarea.span-12.append-19,input.span-13.append-19,textarea.span-13.append-19,input.span-14.append-19,textarea.span-14.append-19,input.span-15.append-19,textarea.span-15.append-19,input.span-16.append-19,textarea.span-16.append-19,input.span-17.append-19,textarea.span-17.append-19,input.span-18.append-19,textarea.span-18.append-19,input.span-19.append-19,textarea.span-19.append-19,input.span-20.append-19,textarea.span-20.append-19,input.span-21.append-19,textarea.span-21.append-19,input.span-22.append-19,textarea.span-22.append-19,input.span-23.append-19,textarea.span-23.append-19,input.span-24.append-19,textarea.span-24.append- + input.span-1.append-20,textarea.span-1.append-20,input.span-2.append-20,textarea.span-2.append-20,input.span-3.append-20,textarea.span-3.append-20,input.span-4.append-20,textarea.span-4.append-20,input.span-5.append-20,textarea.span-5.append-20,input.span-6.append-20,textarea.span-6.append-20,input.span-7.append-20,textarea.span-7.append-20,input.span-8.append-20,textarea.span-8.append-20,input.span-9.append-20,textarea.span-9.append-20,input.span-10.append-20,textarea.span-10.append-20,input.span-11.append-20,textarea.span-11.append-20,input.span-12.append-20,textarea.span-12.append-20,input.span-13.append-20,textarea.span-13.append-20,input.span-14.append-20,textarea.span-14.append-20,input.span-15.append-20,textarea.span-15.append-20,input.span-16.append-20,textarea.span-16.append-20,input.span-17.append-20,textarea.span-17.append-20,input.span-18.append-20,textarea.span-18.append-20,input.span-19.append-20,textarea.span-19.append-20,input.span-20.append-20,textarea.span-20.append-20,input.span-21.append-20,textarea.span-21.append-20,input.span-22.append-20,textarea.span-22.append-20,input.span-23.append-20,textarea.span-23.append-20,input.span-24.append-20,textarea.span-24.append- + input.span-1.append-21,textarea.span-1.append-21,input.span-2.append-21,textarea.span-2.append-21,input.span-3.append-21,textarea.span-3.append-21,input.span-4.append-21,textarea.span-4.append-21,input.span-5.append-21,textarea.span-5.append-21,input.span-6.append-21,textarea.span-6.append-21,input.span-7.append-21,textarea.span-7.append-21,input.span-8.append-21,textarea.span-8.append-21,input.span-9.append-21,textarea.span-9.append-21,input.span-10.append-21,textarea.span-10.append-21,input.span-11.append-21,textarea.span-11.append-21,input.span-12.append-21,textarea.span-12.append-21,input.span-13.append-21,textarea.span-13.append-21,input.span-14.append-21,textarea.span-14.append-21,input.span-15.append-21,textarea.span-15.append-21,input.span-16.append-21,textarea.span-16.append-21,input.span-17.append-21,textarea.span-17.append-21,input.span-18.append-21,textarea.span-18.append-21,input.span-19.append-21,textarea.span-19.append-21,input.span-20.append-21,textarea.span-20.append-21,input.span-21.append-21,textarea.span-21.append-21,input.span-22.append-21,textarea.span-22.append-21,input.span-23.append-21,textarea.span-23.append-21,input.span-24.append-21,textarea.span-24.append- + input.span-1.append-22,textarea.span-1.append-22,input.span-2.append-22,textarea.span-2.append-22,input.span-3.append-22,textarea.span-3.append-22,input.span-4.append-22,textarea.span-4.append-22,input.span-5.append-22,textarea.span-5.append-22,input.span-6.append-22,textarea.span-6.append-22,input.span-7.append-22,textarea.span-7.append-22,input.span-8.append-22,textarea.span-8.append-22,input.span-9.append-22,textarea.span-9.append-22,input.span-10.append-22,textarea.span-10.append-22,input.span-11.append-22,textarea.span-11.append-22,input.span-12.append-22,textarea.span-12.append-22,input.span-13.append-22,textarea.span-13.append-22,input.span-14.append-22,textarea.span-14.append-22,input.span-15.append-22,textarea.span-15.append-22,input.span-16.append-22,textarea.span-16.append-22,input.span-17.append-22,textarea.span-17.append-22,input.span-18.append-22,textarea.span-18.append-22,input.span-19.append-22,textarea.span-19.append-22,input.span-20.append-22,textarea.span-20.append-22,input.span-21.append-22,textarea.span-21.append-22,input.span-22.append-22,textarea.span-22.append-22,input.span-23.append-22,textarea.span-23.append-22,input.span-24.append-22,textarea.span-24.append- + input.span-1.append-23,textarea.span-1.append-23,input.span-2.append-23,textarea.span-2.append-23,input.span-3.append-23,textarea.span-3.append-23,input.span-4.append-23,textarea.span-4.append-23,input.span-5.append-23,textarea.span-5.append-23,input.span-6.append-23,textarea.span-6.append-23,input.span-7.append-23,textarea.span-7.append-23,input.span-8.append-23,textarea.span-8.append-23,input.span-9.append-23,textarea.span-9.append-23,input.span-10.append-23,textarea.span-10.append-23,input.span-11.append-23,textarea.span-11.append-23,input.span-12.append-23,textarea.span-12.append-23,input.span-13.append-23,textarea.span-13.append-23,input.span-14.append-23,textarea.span-14.append-23,input.span-15.append-23,textarea.span-15.append-23,input.span-16.append-23,textarea.span-16.append-23,input.span-17.append-23,textarea.span-17.append-23,input.span-18.append-23,textarea.span-18.append-23,input.span-19.append-23,textarea.span-19.append-23,input.span-20.append-23,textarea.span-20.append-23,input.span-21.append-23,textarea.span-21.append-23,input.span-22.append-23,textarea.span-22.append-23,input.span-23.append-23,textarea.span-23.append-23,input.span-24.append-23,textarea.span-24.append- + input.span-1.append-24,textarea.span-1.append-24,input.span-2.append-24,textarea.span-2.append-24,input.span-3.append-24,textarea.span-3.append-24,input.span-4.append-24,textarea.span-4.append-24,input.span-5.append-24,textarea.span-5.append-24,input.span-6.append-24,textarea.span-6.append-24,input.span-7.append-24,textarea.span-7.append-24,input.span-8.append-24,textarea.span-8.append-24,input.span-9.append-24,textarea.span-9.append-24,input.span-10.append-24,textarea.span-10.append-24,input.span-11.append-24,textarea.span-11.append-24,input.span-12.append-24,textarea.span-12.append-24,input.span-13.append-24,textarea.span-13.append-24,input.span-14.append-24,textarea.span-14.append-24,input.span-15.append-24,textarea.span-15.append-24,input.span-16.append-24,textarea.span-16.append-24,input.span-17.append-24,textarea.span-17.append-24,input.span-18.append-24,textarea.span-18.append-24,input.span-19.append-24,textarea.span-19.append-24,input.span-20.append-24,textarea.span-20.append-24,input.span-21.append-24,textarea.span-21.append-24,input.span-22.append-24,textarea.span-22.append-24,input.span-23.append-24,textarea.span-23.append-24,input.span-24.append-24,textarea.span-24.append- + { outline: 1px solid red; } + + /* + Conflict with padding-right + input.span-X, textarea.span-X -> padding-right: 5px; + */ + input.span-1.prepend-1,textarea.span-1.prepend-1,input.span-2.prepend-1,textarea.span-2.prepend-1,input.span-3.prepend-1,textarea.span-3.prepend-1,input.span-4.prepend-1,textarea.span-4.prepend-1,input.span-5.prepend-1,textarea.span-5.prepend-1,input.span-6.prepend-1,textarea.span-6.prepend-1,input.span-7.prepend-1,textarea.span-7.prepend-1,input.span-8.prepend-1,textarea.span-8.prepend-1,input.span-9.prepend-1,textarea.span-9.prepend-1,input.span-10.prepend-1,textarea.span-10.prepend-1,input.span-11.prepend-1,textarea.span-11.prepend-1,input.span-12.prepend-1,textarea.span-12.prepend-1,input.span-13.prepend-1,textarea.span-13.prepend-1,input.span-14.prepend-1,textarea.span-14.prepend-1,input.span-15.prepend-1,textarea.span-15.prepend-1,input.span-16.prepend-1,textarea.span-16.prepend-1,input.span-17.prepend-1,textarea.span-17.prepend-1,input.span-18.prepend-1,textarea.span-18.prepend-1,input.span-19.prepend-1,textarea.span-19.prepend-1,input.span-20.prepend-1,textarea.span-20.prepend-1,input.span-21.prepend-1,textarea.span-21.prepend-1,input.span-22.prepend-1,textarea.span-22.prepend-1,input.span-23.prepend-1,textarea.span-23.prepend-1,input.span-24.prepend-1,textarea.span-24.prepend-1 + input.span-1.prepend-2,textarea.span-1.prepend-2,input.span-2.prepend-2,textarea.span-2.prepend-2,input.span-3.prepend-2,textarea.span-3.prepend-2,input.span-4.prepend-2,textarea.span-4.prepend-2,input.span-5.prepend-2,textarea.span-5.prepend-2,input.span-6.prepend-2,textarea.span-6.prepend-2,input.span-7.prepend-2,textarea.span-7.prepend-2,input.span-8.prepend-2,textarea.span-8.prepend-2,input.span-9.prepend-2,textarea.span-9.prepend-2,input.span-10.prepend-2,textarea.span-10.prepend-2,input.span-11.prepend-2,textarea.span-11.prepend-2,input.span-12.prepend-2,textarea.span-12.prepend-2,input.span-13.prepend-2,textarea.span-13.prepend-2,input.span-14.prepend-2,textarea.span-14.prepend-2,input.span-15.prepend-2,textarea.span-15.prepend-2,input.span-16.prepend-2,textarea.span-16.prepend-2,input.span-17.prepend-2,textarea.span-17.prepend-2,input.span-18.prepend-2,textarea.span-18.prepend-2,input.span-19.prepend-2,textarea.span-19.prepend-2,input.span-20.prepend-2,textarea.span-20.prepend-2,input.span-21.prepend-2,textarea.span-21.prepend-2,input.span-22.prepend-2,textarea.span-22.prepend-2,input.span-23.prepend-2,textarea.span-23.prepend-2,input.span-24.prepend-2,textarea.span-24.prepend- + input.span-1.prepend-3,textarea.span-1.prepend-3,input.span-2.prepend-3,textarea.span-2.prepend-3,input.span-3.prepend-3,textarea.span-3.prepend-3,input.span-4.prepend-3,textarea.span-4.prepend-3,input.span-5.prepend-3,textarea.span-5.prepend-3,input.span-6.prepend-3,textarea.span-6.prepend-3,input.span-7.prepend-3,textarea.span-7.prepend-3,input.span-8.prepend-3,textarea.span-8.prepend-3,input.span-9.prepend-3,textarea.span-9.prepend-3,input.span-10.prepend-3,textarea.span-10.prepend-3,input.span-11.prepend-3,textarea.span-11.prepend-3,input.span-12.prepend-3,textarea.span-12.prepend-3,input.span-13.prepend-3,textarea.span-13.prepend-3,input.span-14.prepend-3,textarea.span-14.prepend-3,input.span-15.prepend-3,textarea.span-15.prepend-3,input.span-16.prepend-3,textarea.span-16.prepend-3,input.span-17.prepend-3,textarea.span-17.prepend-3,input.span-18.prepend-3,textarea.span-18.prepend-3,input.span-19.prepend-3,textarea.span-19.prepend-3,input.span-20.prepend-3,textarea.span-20.prepend-3,input.span-21.prepend-3,textarea.span-21.prepend-3,input.span-22.prepend-3,textarea.span-22.prepend-3,input.span-23.prepend-3,textarea.span-23.prepend-3,input.span-24.prepend-3,textarea.span-24.prepend- + input.span-1.prepend-4,textarea.span-1.prepend-4,input.span-2.prepend-4,textarea.span-2.prepend-4,input.span-3.prepend-4,textarea.span-3.prepend-4,input.span-4.prepend-4,textarea.span-4.prepend-4,input.span-5.prepend-4,textarea.span-5.prepend-4,input.span-6.prepend-4,textarea.span-6.prepend-4,input.span-7.prepend-4,textarea.span-7.prepend-4,input.span-8.prepend-4,textarea.span-8.prepend-4,input.span-9.prepend-4,textarea.span-9.prepend-4,input.span-10.prepend-4,textarea.span-10.prepend-4,input.span-11.prepend-4,textarea.span-11.prepend-4,input.span-12.prepend-4,textarea.span-12.prepend-4,input.span-13.prepend-4,textarea.span-13.prepend-4,input.span-14.prepend-4,textarea.span-14.prepend-4,input.span-15.prepend-4,textarea.span-15.prepend-4,input.span-16.prepend-4,textarea.span-16.prepend-4,input.span-17.prepend-4,textarea.span-17.prepend-4,input.span-18.prepend-4,textarea.span-18.prepend-4,input.span-19.prepend-4,textarea.span-19.prepend-4,input.span-20.prepend-4,textarea.span-20.prepend-4,input.span-21.prepend-4,textarea.span-21.prepend-4,input.span-22.prepend-4,textarea.span-22.prepend-4,input.span-23.prepend-4,textarea.span-23.prepend-4,input.span-24.prepend-4,textarea.span-24.prepend- + input.span-1.prepend-5,textarea.span-1.prepend-5,input.span-2.prepend-5,textarea.span-2.prepend-5,input.span-3.prepend-5,textarea.span-3.prepend-5,input.span-4.prepend-5,textarea.span-4.prepend-5,input.span-5.prepend-5,textarea.span-5.prepend-5,input.span-6.prepend-5,textarea.span-6.prepend-5,input.span-7.prepend-5,textarea.span-7.prepend-5,input.span-8.prepend-5,textarea.span-8.prepend-5,input.span-9.prepend-5,textarea.span-9.prepend-5,input.span-10.prepend-5,textarea.span-10.prepend-5,input.span-11.prepend-5,textarea.span-11.prepend-5,input.span-12.prepend-5,textarea.span-12.prepend-5,input.span-13.prepend-5,textarea.span-13.prepend-5,input.span-14.prepend-5,textarea.span-14.prepend-5,input.span-15.prepend-5,textarea.span-15.prepend-5,input.span-16.prepend-5,textarea.span-16.prepend-5,input.span-17.prepend-5,textarea.span-17.prepend-5,input.span-18.prepend-5,textarea.span-18.prepend-5,input.span-19.prepend-5,textarea.span-19.prepend-5,input.span-20.prepend-5,textarea.span-20.prepend-5,input.span-21.prepend-5,textarea.span-21.prepend-5,input.span-22.prepend-5,textarea.span-22.prepend-5,input.span-23.prepend-5,textarea.span-23.prepend-5,input.span-24.prepend-5,textarea.span-24.prepend- + input.span-1.prepend-6,textarea.span-1.prepend-6,input.span-2.prepend-6,textarea.span-2.prepend-6,input.span-3.prepend-6,textarea.span-3.prepend-6,input.span-4.prepend-6,textarea.span-4.prepend-6,input.span-5.prepend-6,textarea.span-5.prepend-6,input.span-6.prepend-6,textarea.span-6.prepend-6,input.span-7.prepend-6,textarea.span-7.prepend-6,input.span-8.prepend-6,textarea.span-8.prepend-6,input.span-9.prepend-6,textarea.span-9.prepend-6,input.span-10.prepend-6,textarea.span-10.prepend-6,input.span-11.prepend-6,textarea.span-11.prepend-6,input.span-12.prepend-6,textarea.span-12.prepend-6,input.span-13.prepend-6,textarea.span-13.prepend-6,input.span-14.prepend-6,textarea.span-14.prepend-6,input.span-15.prepend-6,textarea.span-15.prepend-6,input.span-16.prepend-6,textarea.span-16.prepend-6,input.span-17.prepend-6,textarea.span-17.prepend-6,input.span-18.prepend-6,textarea.span-18.prepend-6,input.span-19.prepend-6,textarea.span-19.prepend-6,input.span-20.prepend-6,textarea.span-20.prepend-6,input.span-21.prepend-6,textarea.span-21.prepend-6,input.span-22.prepend-6,textarea.span-22.prepend-6,input.span-23.prepend-6,textarea.span-23.prepend-6,input.span-24.prepend-6,textarea.span-24.prepend- + input.span-1.prepend-7,textarea.span-1.prepend-7,input.span-2.prepend-7,textarea.span-2.prepend-7,input.span-3.prepend-7,textarea.span-3.prepend-7,input.span-4.prepend-7,textarea.span-4.prepend-7,input.span-5.prepend-7,textarea.span-5.prepend-7,input.span-6.prepend-7,textarea.span-6.prepend-7,input.span-7.prepend-7,textarea.span-7.prepend-7,input.span-8.prepend-7,textarea.span-8.prepend-7,input.span-9.prepend-7,textarea.span-9.prepend-7,input.span-10.prepend-7,textarea.span-10.prepend-7,input.span-11.prepend-7,textarea.span-11.prepend-7,input.span-12.prepend-7,textarea.span-12.prepend-7,input.span-13.prepend-7,textarea.span-13.prepend-7,input.span-14.prepend-7,textarea.span-14.prepend-7,input.span-15.prepend-7,textarea.span-15.prepend-7,input.span-16.prepend-7,textarea.span-16.prepend-7,input.span-17.prepend-7,textarea.span-17.prepend-7,input.span-18.prepend-7,textarea.span-18.prepend-7,input.span-19.prepend-7,textarea.span-19.prepend-7,input.span-20.prepend-7,textarea.span-20.prepend-7,input.span-21.prepend-7,textarea.span-21.prepend-7,input.span-22.prepend-7,textarea.span-22.prepend-7,input.span-23.prepend-7,textarea.span-23.prepend-7,input.span-24.prepend-7,textarea.span-24.prepend- + input.span-1.prepend-8,textarea.span-1.prepend-8,input.span-2.prepend-8,textarea.span-2.prepend-8,input.span-3.prepend-8,textarea.span-3.prepend-8,input.span-4.prepend-8,textarea.span-4.prepend-8,input.span-5.prepend-8,textarea.span-5.prepend-8,input.span-6.prepend-8,textarea.span-6.prepend-8,input.span-7.prepend-8,textarea.span-7.prepend-8,input.span-8.prepend-8,textarea.span-8.prepend-8,input.span-9.prepend-8,textarea.span-9.prepend-8,input.span-10.prepend-8,textarea.span-10.prepend-8,input.span-11.prepend-8,textarea.span-11.prepend-8,input.span-12.prepend-8,textarea.span-12.prepend-8,input.span-13.prepend-8,textarea.span-13.prepend-8,input.span-14.prepend-8,textarea.span-14.prepend-8,input.span-15.prepend-8,textarea.span-15.prepend-8,input.span-16.prepend-8,textarea.span-16.prepend-8,input.span-17.prepend-8,textarea.span-17.prepend-8,input.span-18.prepend-8,textarea.span-18.prepend-8,input.span-19.prepend-8,textarea.span-19.prepend-8,input.span-20.prepend-8,textarea.span-20.prepend-8,input.span-21.prepend-8,textarea.span-21.prepend-8,input.span-22.prepend-8,textarea.span-22.prepend-8,input.span-23.prepend-8,textarea.span-23.prepend-8,input.span-24.prepend-8,textarea.span-24.prepend- + input.span-1.prepend-9,textarea.span-1.prepend-9,input.span-2.prepend-9,textarea.span-2.prepend-9,input.span-3.prepend-9,textarea.span-3.prepend-9,input.span-4.prepend-9,textarea.span-4.prepend-9,input.span-5.prepend-9,textarea.span-5.prepend-9,input.span-6.prepend-9,textarea.span-6.prepend-9,input.span-7.prepend-9,textarea.span-7.prepend-9,input.span-8.prepend-9,textarea.span-8.prepend-9,input.span-9.prepend-9,textarea.span-9.prepend-9,input.span-10.prepend-9,textarea.span-10.prepend-9,input.span-11.prepend-9,textarea.span-11.prepend-9,input.span-12.prepend-9,textarea.span-12.prepend-9,input.span-13.prepend-9,textarea.span-13.prepend-9,input.span-14.prepend-9,textarea.span-14.prepend-9,input.span-15.prepend-9,textarea.span-15.prepend-9,input.span-16.prepend-9,textarea.span-16.prepend-9,input.span-17.prepend-9,textarea.span-17.prepend-9,input.span-18.prepend-9,textarea.span-18.prepend-9,input.span-19.prepend-9,textarea.span-19.prepend-9,input.span-20.prepend-9,textarea.span-20.prepend-9,input.span-21.prepend-9,textarea.span-21.prepend-9,input.span-22.prepend-9,textarea.span-22.prepend-9,input.span-23.prepend-9,textarea.span-23.prepend-9,input.span-24.prepend-9,textarea.span-24.prepend- + input.span-1.prepend-10,textarea.span-1.prepend-10,input.span-2.prepend-10,textarea.span-2.prepend-10,input.span-3.prepend-10,textarea.span-3.prepend-10,input.span-4.prepend-10,textarea.span-4.prepend-10,input.span-5.prepend-10,textarea.span-5.prepend-10,input.span-6.prepend-10,textarea.span-6.prepend-10,input.span-7.prepend-10,textarea.span-7.prepend-10,input.span-8.prepend-10,textarea.span-8.prepend-10,input.span-9.prepend-10,textarea.span-9.prepend-10,input.span-10.prepend-10,textarea.span-10.prepend-10,input.span-11.prepend-10,textarea.span-11.prepend-10,input.span-12.prepend-10,textarea.span-12.prepend-10,input.span-13.prepend-10,textarea.span-13.prepend-10,input.span-14.prepend-10,textarea.span-14.prepend-10,input.span-15.prepend-10,textarea.span-15.prepend-10,input.span-16.prepend-10,textarea.span-16.prepend-10,input.span-17.prepend-10,textarea.span-17.prepend-10,input.span-18.prepend-10,textarea.span-18.prepend-10,input.span-19.prepend-10,textarea.span-19.prepend-10,input.span-20.prepend-10,textarea.span-20.prepend-10,input.span-21.prepend-10,textarea.span-21.prepend-10,input.span-22.prepend-10,textarea.span-22.prepend-10,input.span-23.prepend-10,textarea.span-23.prepend-10,input.span-24.prepend-10,textarea.span-24.prepend- + input.span-1.prepend-11,textarea.span-1.prepend-11,input.span-2.prepend-11,textarea.span-2.prepend-11,input.span-3.prepend-11,textarea.span-3.prepend-11,input.span-4.prepend-11,textarea.span-4.prepend-11,input.span-5.prepend-11,textarea.span-5.prepend-11,input.span-6.prepend-11,textarea.span-6.prepend-11,input.span-7.prepend-11,textarea.span-7.prepend-11,input.span-8.prepend-11,textarea.span-8.prepend-11,input.span-9.prepend-11,textarea.span-9.prepend-11,input.span-10.prepend-11,textarea.span-10.prepend-11,input.span-11.prepend-11,textarea.span-11.prepend-11,input.span-12.prepend-11,textarea.span-12.prepend-11,input.span-13.prepend-11,textarea.span-13.prepend-11,input.span-14.prepend-11,textarea.span-14.prepend-11,input.span-15.prepend-11,textarea.span-15.prepend-11,input.span-16.prepend-11,textarea.span-16.prepend-11,input.span-17.prepend-11,textarea.span-17.prepend-11,input.span-18.prepend-11,textarea.span-18.prepend-11,input.span-19.prepend-11,textarea.span-19.prepend-11,input.span-20.prepend-11,textarea.span-20.prepend-11,input.span-21.prepend-11,textarea.span-21.prepend-11,input.span-22.prepend-11,textarea.span-22.prepend-11,input.span-23.prepend-11,textarea.span-23.prepend-11,input.span-24.prepend-11,textarea.span-24.prepend- + input.span-1.prepend-12,textarea.span-1.prepend-12,input.span-2.prepend-12,textarea.span-2.prepend-12,input.span-3.prepend-12,textarea.span-3.prepend-12,input.span-4.prepend-12,textarea.span-4.prepend-12,input.span-5.prepend-12,textarea.span-5.prepend-12,input.span-6.prepend-12,textarea.span-6.prepend-12,input.span-7.prepend-12,textarea.span-7.prepend-12,input.span-8.prepend-12,textarea.span-8.prepend-12,input.span-9.prepend-12,textarea.span-9.prepend-12,input.span-10.prepend-12,textarea.span-10.prepend-12,input.span-11.prepend-12,textarea.span-11.prepend-12,input.span-12.prepend-12,textarea.span-12.prepend-12,input.span-13.prepend-12,textarea.span-13.prepend-12,input.span-14.prepend-12,textarea.span-14.prepend-12,input.span-15.prepend-12,textarea.span-15.prepend-12,input.span-16.prepend-12,textarea.span-16.prepend-12,input.span-17.prepend-12,textarea.span-17.prepend-12,input.span-18.prepend-12,textarea.span-18.prepend-12,input.span-19.prepend-12,textarea.span-19.prepend-12,input.span-20.prepend-12,textarea.span-20.prepend-12,input.span-21.prepend-12,textarea.span-21.prepend-12,input.span-22.prepend-12,textarea.span-22.prepend-12,input.span-23.prepend-12,textarea.span-23.prepend-12,input.span-24.prepend-12,textarea.span-24.prepend- + input.span-1.prepend-13,textarea.span-1.prepend-13,input.span-2.prepend-13,textarea.span-2.prepend-13,input.span-3.prepend-13,textarea.span-3.prepend-13,input.span-4.prepend-13,textarea.span-4.prepend-13,input.span-5.prepend-13,textarea.span-5.prepend-13,input.span-6.prepend-13,textarea.span-6.prepend-13,input.span-7.prepend-13,textarea.span-7.prepend-13,input.span-8.prepend-13,textarea.span-8.prepend-13,input.span-9.prepend-13,textarea.span-9.prepend-13,input.span-10.prepend-13,textarea.span-10.prepend-13,input.span-11.prepend-13,textarea.span-11.prepend-13,input.span-12.prepend-13,textarea.span-12.prepend-13,input.span-13.prepend-13,textarea.span-13.prepend-13,input.span-14.prepend-13,textarea.span-14.prepend-13,input.span-15.prepend-13,textarea.span-15.prepend-13,input.span-16.prepend-13,textarea.span-16.prepend-13,input.span-17.prepend-13,textarea.span-17.prepend-13,input.span-18.prepend-13,textarea.span-18.prepend-13,input.span-19.prepend-13,textarea.span-19.prepend-13,input.span-20.prepend-13,textarea.span-20.prepend-13,input.span-21.prepend-13,textarea.span-21.prepend-13,input.span-22.prepend-13,textarea.span-22.prepend-13,input.span-23.prepend-13,textarea.span-23.prepend-13,input.span-24.prepend-13,textarea.span-24.prepend- + input.span-1.prepend-14,textarea.span-1.prepend-14,input.span-2.prepend-14,textarea.span-2.prepend-14,input.span-3.prepend-14,textarea.span-3.prepend-14,input.span-4.prepend-14,textarea.span-4.prepend-14,input.span-5.prepend-14,textarea.span-5.prepend-14,input.span-6.prepend-14,textarea.span-6.prepend-14,input.span-7.prepend-14,textarea.span-7.prepend-14,input.span-8.prepend-14,textarea.span-8.prepend-14,input.span-9.prepend-14,textarea.span-9.prepend-14,input.span-10.prepend-14,textarea.span-10.prepend-14,input.span-11.prepend-14,textarea.span-11.prepend-14,input.span-12.prepend-14,textarea.span-12.prepend-14,input.span-13.prepend-14,textarea.span-13.prepend-14,input.span-14.prepend-14,textarea.span-14.prepend-14,input.span-15.prepend-14,textarea.span-15.prepend-14,input.span-16.prepend-14,textarea.span-16.prepend-14,input.span-17.prepend-14,textarea.span-17.prepend-14,input.span-18.prepend-14,textarea.span-18.prepend-14,input.span-19.prepend-14,textarea.span-19.prepend-14,input.span-20.prepend-14,textarea.span-20.prepend-14,input.span-21.prepend-14,textarea.span-21.prepend-14,input.span-22.prepend-14,textarea.span-22.prepend-14,input.span-23.prepend-14,textarea.span-23.prepend-14,input.span-24.prepend-14,textarea.span-24.prepend- + input.span-1.prepend-15,textarea.span-1.prepend-15,input.span-2.prepend-15,textarea.span-2.prepend-15,input.span-3.prepend-15,textarea.span-3.prepend-15,input.span-4.prepend-15,textarea.span-4.prepend-15,input.span-5.prepend-15,textarea.span-5.prepend-15,input.span-6.prepend-15,textarea.span-6.prepend-15,input.span-7.prepend-15,textarea.span-7.prepend-15,input.span-8.prepend-15,textarea.span-8.prepend-15,input.span-9.prepend-15,textarea.span-9.prepend-15,input.span-10.prepend-15,textarea.span-10.prepend-15,input.span-11.prepend-15,textarea.span-11.prepend-15,input.span-12.prepend-15,textarea.span-12.prepend-15,input.span-13.prepend-15,textarea.span-13.prepend-15,input.span-14.prepend-15,textarea.span-14.prepend-15,input.span-15.prepend-15,textarea.span-15.prepend-15,input.span-16.prepend-15,textarea.span-16.prepend-15,input.span-17.prepend-15,textarea.span-17.prepend-15,input.span-18.prepend-15,textarea.span-18.prepend-15,input.span-19.prepend-15,textarea.span-19.prepend-15,input.span-20.prepend-15,textarea.span-20.prepend-15,input.span-21.prepend-15,textarea.span-21.prepend-15,input.span-22.prepend-15,textarea.span-22.prepend-15,input.span-23.prepend-15,textarea.span-23.prepend-15,input.span-24.prepend-15,textarea.span-24.prepend- + input.span-1.prepend-16,textarea.span-1.prepend-16,input.span-2.prepend-16,textarea.span-2.prepend-16,input.span-3.prepend-16,textarea.span-3.prepend-16,input.span-4.prepend-16,textarea.span-4.prepend-16,input.span-5.prepend-16,textarea.span-5.prepend-16,input.span-6.prepend-16,textarea.span-6.prepend-16,input.span-7.prepend-16,textarea.span-7.prepend-16,input.span-8.prepend-16,textarea.span-8.prepend-16,input.span-9.prepend-16,textarea.span-9.prepend-16,input.span-10.prepend-16,textarea.span-10.prepend-16,input.span-11.prepend-16,textarea.span-11.prepend-16,input.span-12.prepend-16,textarea.span-12.prepend-16,input.span-13.prepend-16,textarea.span-13.prepend-16,input.span-14.prepend-16,textarea.span-14.prepend-16,input.span-15.prepend-16,textarea.span-15.prepend-16,input.span-16.prepend-16,textarea.span-16.prepend-16,input.span-17.prepend-16,textarea.span-17.prepend-16,input.span-18.prepend-16,textarea.span-18.prepend-16,input.span-19.prepend-16,textarea.span-19.prepend-16,input.span-20.prepend-16,textarea.span-20.prepend-16,input.span-21.prepend-16,textarea.span-21.prepend-16,input.span-22.prepend-16,textarea.span-22.prepend-16,input.span-23.prepend-16,textarea.span-23.prepend-16,input.span-24.prepend-16,textarea.span-24.prepend- + input.span-1.prepend-17,textarea.span-1.prepend-17,input.span-2.prepend-17,textarea.span-2.prepend-17,input.span-3.prepend-17,textarea.span-3.prepend-17,input.span-4.prepend-17,textarea.span-4.prepend-17,input.span-5.prepend-17,textarea.span-5.prepend-17,input.span-6.prepend-17,textarea.span-6.prepend-17,input.span-7.prepend-17,textarea.span-7.prepend-17,input.span-8.prepend-17,textarea.span-8.prepend-17,input.span-9.prepend-17,textarea.span-9.prepend-17,input.span-10.prepend-17,textarea.span-10.prepend-17,input.span-11.prepend-17,textarea.span-11.prepend-17,input.span-12.prepend-17,textarea.span-12.prepend-17,input.span-13.prepend-17,textarea.span-13.prepend-17,input.span-14.prepend-17,textarea.span-14.prepend-17,input.span-15.prepend-17,textarea.span-15.prepend-17,input.span-16.prepend-17,textarea.span-16.prepend-17,input.span-17.prepend-17,textarea.span-17.prepend-17,input.span-18.prepend-17,textarea.span-18.prepend-17,input.span-19.prepend-17,textarea.span-19.prepend-17,input.span-20.prepend-17,textarea.span-20.prepend-17,input.span-21.prepend-17,textarea.span-21.prepend-17,input.span-22.prepend-17,textarea.span-22.prepend-17,input.span-23.prepend-17,textarea.span-23.prepend-17,input.span-24.prepend-17,textarea.span-24.prepend- + input.span-1.prepend-18,textarea.span-1.prepend-18,input.span-2.prepend-18,textarea.span-2.prepend-18,input.span-3.prepend-18,textarea.span-3.prepend-18,input.span-4.prepend-18,textarea.span-4.prepend-18,input.span-5.prepend-18,textarea.span-5.prepend-18,input.span-6.prepend-18,textarea.span-6.prepend-18,input.span-7.prepend-18,textarea.span-7.prepend-18,input.span-8.prepend-18,textarea.span-8.prepend-18,input.span-9.prepend-18,textarea.span-9.prepend-18,input.span-10.prepend-18,textarea.span-10.prepend-18,input.span-11.prepend-18,textarea.span-11.prepend-18,input.span-12.prepend-18,textarea.span-12.prepend-18,input.span-13.prepend-18,textarea.span-13.prepend-18,input.span-14.prepend-18,textarea.span-14.prepend-18,input.span-15.prepend-18,textarea.span-15.prepend-18,input.span-16.prepend-18,textarea.span-16.prepend-18,input.span-17.prepend-18,textarea.span-17.prepend-18,input.span-18.prepend-18,textarea.span-18.prepend-18,input.span-19.prepend-18,textarea.span-19.prepend-18,input.span-20.prepend-18,textarea.span-20.prepend-18,input.span-21.prepend-18,textarea.span-21.prepend-18,input.span-22.prepend-18,textarea.span-22.prepend-18,input.span-23.prepend-18,textarea.span-23.prepend-18,input.span-24.prepend-18,textarea.span-24.prepend- + input.span-1.prepend-19,textarea.span-1.prepend-19,input.span-2.prepend-19,textarea.span-2.prepend-19,input.span-3.prepend-19,textarea.span-3.prepend-19,input.span-4.prepend-19,textarea.span-4.prepend-19,input.span-5.prepend-19,textarea.span-5.prepend-19,input.span-6.prepend-19,textarea.span-6.prepend-19,input.span-7.prepend-19,textarea.span-7.prepend-19,input.span-8.prepend-19,textarea.span-8.prepend-19,input.span-9.prepend-19,textarea.span-9.prepend-19,input.span-10.prepend-19,textarea.span-10.prepend-19,input.span-11.prepend-19,textarea.span-11.prepend-19,input.span-12.prepend-19,textarea.span-12.prepend-19,input.span-13.prepend-19,textarea.span-13.prepend-19,input.span-14.prepend-19,textarea.span-14.prepend-19,input.span-15.prepend-19,textarea.span-15.prepend-19,input.span-16.prepend-19,textarea.span-16.prepend-19,input.span-17.prepend-19,textarea.span-17.prepend-19,input.span-18.prepend-19,textarea.span-18.prepend-19,input.span-19.prepend-19,textarea.span-19.prepend-19,input.span-20.prepend-19,textarea.span-20.prepend-19,input.span-21.prepend-19,textarea.span-21.prepend-19,input.span-22.prepend-19,textarea.span-22.prepend-19,input.span-23.prepend-19,textarea.span-23.prepend-19,input.span-24.prepend-19,textarea.span-24.prepend- + input.span-1.prepend-20,textarea.span-1.prepend-20,input.span-2.prepend-20,textarea.span-2.prepend-20,input.span-3.prepend-20,textarea.span-3.prepend-20,input.span-4.prepend-20,textarea.span-4.prepend-20,input.span-5.prepend-20,textarea.span-5.prepend-20,input.span-6.prepend-20,textarea.span-6.prepend-20,input.span-7.prepend-20,textarea.span-7.prepend-20,input.span-8.prepend-20,textarea.span-8.prepend-20,input.span-9.prepend-20,textarea.span-9.prepend-20,input.span-10.prepend-20,textarea.span-10.prepend-20,input.span-11.prepend-20,textarea.span-11.prepend-20,input.span-12.prepend-20,textarea.span-12.prepend-20,input.span-13.prepend-20,textarea.span-13.prepend-20,input.span-14.prepend-20,textarea.span-14.prepend-20,input.span-15.prepend-20,textarea.span-15.prepend-20,input.span-16.prepend-20,textarea.span-16.prepend-20,input.span-17.prepend-20,textarea.span-17.prepend-20,input.span-18.prepend-20,textarea.span-18.prepend-20,input.span-19.prepend-20,textarea.span-19.prepend-20,input.span-20.prepend-20,textarea.span-20.prepend-20,input.span-21.prepend-20,textarea.span-21.prepend-20,input.span-22.prepend-20,textarea.span-22.prepend-20,input.span-23.prepend-20,textarea.span-23.prepend-20,input.span-24.prepend-20,textarea.span-24.prepend- + input.span-1.prepend-21,textarea.span-1.prepend-21,input.span-2.prepend-21,textarea.span-2.prepend-21,input.span-3.prepend-21,textarea.span-3.prepend-21,input.span-4.prepend-21,textarea.span-4.prepend-21,input.span-5.prepend-21,textarea.span-5.prepend-21,input.span-6.prepend-21,textarea.span-6.prepend-21,input.span-7.prepend-21,textarea.span-7.prepend-21,input.span-8.prepend-21,textarea.span-8.prepend-21,input.span-9.prepend-21,textarea.span-9.prepend-21,input.span-10.prepend-21,textarea.span-10.prepend-21,input.span-11.prepend-21,textarea.span-11.prepend-21,input.span-12.prepend-21,textarea.span-12.prepend-21,input.span-13.prepend-21,textarea.span-13.prepend-21,input.span-14.prepend-21,textarea.span-14.prepend-21,input.span-15.prepend-21,textarea.span-15.prepend-21,input.span-16.prepend-21,textarea.span-16.prepend-21,input.span-17.prepend-21,textarea.span-17.prepend-21,input.span-18.prepend-21,textarea.span-18.prepend-21,input.span-19.prepend-21,textarea.span-19.prepend-21,input.span-20.prepend-21,textarea.span-20.prepend-21,input.span-21.prepend-21,textarea.span-21.prepend-21,input.span-22.prepend-21,textarea.span-22.prepend-21,input.span-23.prepend-21,textarea.span-23.prepend-21,input.span-24.prepend-21,textarea.span-24.prepend- + input.span-1.prepend-22,textarea.span-1.prepend-22,input.span-2.prepend-22,textarea.span-2.prepend-22,input.span-3.prepend-22,textarea.span-3.prepend-22,input.span-4.prepend-22,textarea.span-4.prepend-22,input.span-5.prepend-22,textarea.span-5.prepend-22,input.span-6.prepend-22,textarea.span-6.prepend-22,input.span-7.prepend-22,textarea.span-7.prepend-22,input.span-8.prepend-22,textarea.span-8.prepend-22,input.span-9.prepend-22,textarea.span-9.prepend-22,input.span-10.prepend-22,textarea.span-10.prepend-22,input.span-11.prepend-22,textarea.span-11.prepend-22,input.span-12.prepend-22,textarea.span-12.prepend-22,input.span-13.prepend-22,textarea.span-13.prepend-22,input.span-14.prepend-22,textarea.span-14.prepend-22,input.span-15.prepend-22,textarea.span-15.prepend-22,input.span-16.prepend-22,textarea.span-16.prepend-22,input.span-17.prepend-22,textarea.span-17.prepend-22,input.span-18.prepend-22,textarea.span-18.prepend-22,input.span-19.prepend-22,textarea.span-19.prepend-22,input.span-20.prepend-22,textarea.span-20.prepend-22,input.span-21.prepend-22,textarea.span-21.prepend-22,input.span-22.prepend-22,textarea.span-22.prepend-22,input.span-23.prepend-22,textarea.span-23.prepend-22,input.span-24.prepend-22,textarea.span-24.prepend- + input.span-1.prepend-23,textarea.span-1.prepend-23,input.span-2.prepend-23,textarea.span-2.prepend-23,input.span-3.prepend-23,textarea.span-3.prepend-23,input.span-4.prepend-23,textarea.span-4.prepend-23,input.span-5.prepend-23,textarea.span-5.prepend-23,input.span-6.prepend-23,textarea.span-6.prepend-23,input.span-7.prepend-23,textarea.span-7.prepend-23,input.span-8.prepend-23,textarea.span-8.prepend-23,input.span-9.prepend-23,textarea.span-9.prepend-23,input.span-10.prepend-23,textarea.span-10.prepend-23,input.span-11.prepend-23,textarea.span-11.prepend-23,input.span-12.prepend-23,textarea.span-12.prepend-23,input.span-13.prepend-23,textarea.span-13.prepend-23,input.span-14.prepend-23,textarea.span-14.prepend-23,input.span-15.prepend-23,textarea.span-15.prepend-23,input.span-16.prepend-23,textarea.span-16.prepend-23,input.span-17.prepend-23,textarea.span-17.prepend-23,input.span-18.prepend-23,textarea.span-18.prepend-23,input.span-19.prepend-23,textarea.span-19.prepend-23,input.span-20.prepend-23,textarea.span-20.prepend-23,input.span-21.prepend-23,textarea.span-21.prepend-23,input.span-22.prepend-23,textarea.span-22.prepend-23,input.span-23.prepend-23,textarea.span-23.prepend-23,input.span-24.prepend-23,textarea.span-24.prepend- + input.span-1.prepend-24,textarea.span-1.prepend-24,input.span-2.prepend-24,textarea.span-2.prepend-24,input.span-3.prepend-24,textarea.span-3.prepend-24,input.span-4.prepend-24,textarea.span-4.prepend-24,input.span-5.prepend-24,textarea.span-5.prepend-24,input.span-6.prepend-24,textarea.span-6.prepend-24,input.span-7.prepend-24,textarea.span-7.prepend-24,input.span-8.prepend-24,textarea.span-8.prepend-24,input.span-9.prepend-24,textarea.span-9.prepend-24,input.span-10.prepend-24,textarea.span-10.prepend-24,input.span-11.prepend-24,textarea.span-11.prepend-24,input.span-12.prepend-24,textarea.span-12.prepend-24,input.span-13.prepend-24,textarea.span-13.prepend-24,input.span-14.prepend-24,textarea.span-14.prepend-24,input.span-15.prepend-24,textarea.span-15.prepend-24,input.span-16.prepend-24,textarea.span-16.prepend-24,input.span-17.prepend-24,textarea.span-17.prepend-24,input.span-18.prepend-24,textarea.span-18.prepend-24,input.span-19.prepend-24,textarea.span-19.prepend-24,input.span-20.prepend-24,textarea.span-20.prepend-24,input.span-21.prepend-24,textarea.span-21.prepend-24,input.span-22.prepend-24,textarea.span-22.prepend-24,input.span-23.prepend-24,textarea.span-23.prepend-24,input.span-24.prepend-24,textarea.span-24.prepend- + { outline: 1px solid red; } + + /* + Conflict with padding-right + .border -> padding-right: 5px; + .colborder -> padding-right: 24px; + */ + .border.append-1,.border.append-2,.border.append-3,.border.append-4,.border.append-5,.border.append-6,.border.append-7,.border.append-8,.border.append-9,.border.append-10,.border.append-11,.border.append-12,.border.append-13,.border.append-14,.border.append-15,.border.append-16,.border.append-17,.border.append-18,.border.append-19,.border.append-20,.border.append-21,.border.append-22,.border.append-23 + { outline: 1px solid red; } + + .colborder.append-1,.colborder.append-2,.colborder.append-3,.colborder.append-4,.colborder.append-5,.colborder.append-6,.colborder.append-7,.colborder.append-8,.colborder.append-9,.colborder.append-10,.colborder.append-11,.colborder.append-12,.colborder.append-13,.colborder.append-14,.colborder.append-15,.colborder.append-16,.colborder.append-17,.colborder.append-18,.colborder.append-19,.colborder.append-20,.colborder.append-21,.colborder.append-22,.colborder.append-23 + { outline: 1px solid red; } + + /* + Conflict with display + .clearfix, .container -> display: block; + .hide -> display: hide; + */ + article.hide,aside.hide,dialog.hide,figure.hide,footer.hide,header.hide,hgroup.hide,nav.hide,section.hide,.container.hide,.clearfix.hide + { outline: 1px solid red; } + +/* ---------------------------------------------------- + Critical Elements + outlined cyan + not valid or empty +---------------------------------------------------- */ + + /* + Invalid nesting of block level elements + */ + p ul,p ol,p li,p address,p blockquote,p center,p dir,p div,p dl,p fieldset,p form,p h1,p h2,p h3,p h4,p h5,p h6,p isindex,p menu,p noframes,p p,p pre,p table + { outline: 1px solid cyan; } + + /* + Invalid usage of universal attributes + */ + base[class],basefont[class],head[class],html[class],meta[class],param[class],script[class],style[class],title[class], + base[id],head[id],html[id],meta[id],script[id],style[id],title[id], + base[style],basefont[style],head[style],html[style],meta[style],param[style],script[style],style[style],title[style], + base[title],basefont[title],head[title],html[title],meta[title],param[title],script[title],style[title],title[title], + /* Int. handlers */ + applet[dir],base[dir],basefont[dir],br[dir],frame[dir],frameset[dir],hr[dir],iframe[dir],param[dir],script, + applet[lang],base[lang],basefont[lang],br[lang],frame[lang],frameset[lang],hr[lang],iframe[lang],meta[lang],param[lang],script[lang], + /* Even handlers */ + applet[onclick],base[onclick],basefont[onclick],bdo[onclick],br[onclick],font[onclick],frame[onclick],frameset[onclick],head[onclick],html[onclick],iframe[onclick],isindex[onclick],param[onclick],script style[onclick],title[onlick], + applet[ondblclick],base[ondblclick],basefont[ondblclick],bdo[ondblclick],br[ondblclick],font[ondblclick],frame[ondblclick],frameset[ondblclick],head[ondblclick],html[ondblclick],iframe[ondblclick],isindex[ondblclick],param[ondblclick],script style[ondblclick],title[ondblclick], + applet[onmousedown],base[onmousedown],basefont[onmousedown],bdo[onmousedown],br[onmousedown],font[onmousedown],frame[onmousedown],frameset[onmousedown],head[onmousedown],html[onmousedown],iframe[onmousedown],isindex[onmousedown],param[onmousedown],script style[onmousedown],title[onmousedown], + applet[onmouseup],base[onmouseup],basefont[onmouseup],bdo[onmouseup],br[onmouseup],font[onmouseup],frame[onmouseup],frameset[onmouseup],head[onmouseup],html[onmouseup],iframe[onmouseup],isindex[onmouseup],param[onmouseup],script style[onmouseup],title[onmouseup], + applet[onmouseover],base[onmouseover],basefont[onmouseover],bdo[onmouseover],br[onmouseover],font[onmouseover],frame[onmouseover],frameset[onmouseover],head[onmouseover],html[onmouseover],iframe[onmouseover],isindex[onmouseover],param[onmouseover],script style[onmouseover],title[onmouseover], + applet[onmousemove],base[onmousemove],basefont[onmousemove],bdo[onmousemove],br[onmousemove],font[onmousemove],frame[onmousemove],frameset[onmousemove],head[onmousemove],html[onmousemove],iframe[onmousemove],isindex[onmousemove],param[onmousemove],script style[onmousemove],title[onmousemove], + applet[onmouseout],base[onmouseout],basefont[onmouseout],bdo[onmouseout],br[onmouseout],font[onmouseout],frame[onmouseout],frameset[onmouseout],head[onmouseout],html[onmouseout],iframe[onmouseout],isindex[onmouseout],param[onmouseout],script style[onmouseout],title[onmouseout], + applet[onkeypress],base[onkeypress],basefont[onkeypress],bdo[onkeypress],br[onkeypress],font[onkeypress],frame[onkeypress],frameset[onkeypress],head[onkeypress],html[onkeypress],iframe[onkeypress],isindex[onkeypress],param[onkeypress],script style[onkeypress],title[onkeypress], + applet[onkeydown],base[onkeydown],basefont[onkeydown],bdo[onkeydown],br[onkeydown],font[onkeydown],frame[onkeydown],frameset[onkeydown],head[onkeydown],html[onkeydown],iframe[onkeydown],isindex[onkeydown],param[onkeydown],script style[onkeydown],title[onkeydown], + applet[onkeyup],base[onkeyup],basefont[onkeyup],bdo[onkeyup],br[onkeyup],font[onkeyup],frame[onkeyup],frameset[onkeyup],head[onkeyup],html[onkeyup],iframe[onkeyup],isindex[onkeyup],param[onkeyup],script style[onkeyup],title[onkeyup] + { outline: 1px solid cyan; } + + /* + Missing Attributes + */ + img[alt][title],img[alt],img[alt],img[title],img[alt=""][title],img[alt][title=""],img[alt=""][title=""] + { outline: 1px dashed cyan; } + + a[title],a[title=""],a[href="#"],a[href=""] + { outline: 1px dashed cyan; } + + /* + Empty Elements + */ + div:empty,span:empty,li:empty,p:empty,td:empty,th:empty + { outline: 1px dashed cyan; } \ No newline at end of file diff --git a/app/assets/stylesheets/debug/debug.html b/app/assets/stylesheets/debug/debug.html new file mode 100755 index 0000000..65f36e5 --- /dev/null +++ b/app/assets/stylesheets/debug/debug.html @@ -0,0 +1,122 @@ + + + + + Insert title here + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

DEBUG ENVIRONMENT

+

Use this page for developing or testing Blueprint & posting problems on the Blueprint mailing list.

+
+ + +
+
+

Testcase below: ___YOUR CASE___

+
+
+

Enter the result you want to achieve here.

+
+
+

Enter your problem & what you already tried here.

+
+
+ +
+ + + + +
+ + +
+

+ You should rename this file to a specific testcase, like debug-test1.html +
+ You can then add your mark-up to this container. +
+ Then post this testcase to + Github Gist or make a + Pastebin and share it on + the list. +
+ Remember to change the doctype if you are not using HTML 4.01 Strict! +

+

+ + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/app/assets/stylesheets/features/generate_stylesheets.feature b/app/assets/stylesheets/features/generate_stylesheets.feature new file mode 100644 index 0000000..a5f6598 --- /dev/null +++ b/app/assets/stylesheets/features/generate_stylesheets.feature @@ -0,0 +1,217 @@ +Feature: Generate default Blueprint stylesheets from the command line + In order to use Blueprint on a project + As a developer + I should be able to generate Blueprint stylesheets from the command line + + Scenario: Prints out helpful information + When I generate Blueprint stylesheets + Then the output should contain "Grid Settings" + And the output should contain "Column Count: 24" + And the output should contain "Column Width: 30px" + And the output should contain "Gutter Width: 10px" + And the output should contain "Total Width : 950px" + And the output should not contain "Loaded from settings.yml" + And the output should not contain "Namespace:" + + Scenario: Prints out helpful information with custom settings + Given a file named "custom_settings.yml" with: + """ + my_awesome_project: + custom_layout: + column_count: 12 + column_width: 50 + gutter_width: 20 + """ + When I generate Blueprint stylesheets with the options "-s custom_settings.yml -p my_awesome_project" + Then the output should contain "Column Count: 12" + And the output should contain "Column Width: 50px" + And the output should contain "Gutter Width: 20px" + And the output should contain "Total Width : 820px" + And the output should contain "Loaded from settings.yml" + + @javascript + Scenario: Generates the correct default styles + When I generate Blueprint stylesheets + And I open the HTML page using the styles with the content: + """ +
+
+
+
+
+
+
+
+
+
+ """ + Then the ".overflowed .span-12:last" should be below ".overflowed .span-12:first" + And the ".overflowed .span-12:last" should have a right margin of 10px + And the ".standard .span-12:first" should have a width of 470px + And the ".standard .span-12:first" should have a right margin of 10px + And the ".standard .span-12:last" should have a right margin of 0px + + @javascript + Scenario: Generates the correct custom styles + Given a file named "custom_settings.yml" with: + """ + my_awesome_project: + custom_layout: + column_count: 12 + column_width: 50 + gutter_width: 10 + """ + When I generate Blueprint stylesheets with the options "-s custom_settings.yml -p my_awesome_project" + And I open the HTML page using the styles with the content: + """ +
+
+
+
+
+
+
+
+
+
+ """ + Then the ".overflowed .span-6:last" should be below ".overflowed .span-6:first" + And the ".overflowed .span-6:last" should have a right margin of 10px + And the ".standard .span-6:first" should have a width of 350px + And the ".standard .span-6:first" should have a right margin of 10px + And the ".standard .span-6:last" should have a right margin of 0px + + @javascript + Scenario: Generates the custom styles with a namespace + Given a file named "custom_settings.yml" with: + """ + my_awesome_project: + namespace: custom-namespace- + """ + When I generate Blueprint stylesheets with the options "-s custom_settings.yml -p my_awesome_project" + And I open the HTML page using the styles with the content: + """ +
+
+
+
+
+
+
+
+
+
+ """ + Then the ".non-namespaced .span-12:first" should have a width of 0px + And the ".non-namespaced .span-12:last" should have a width of 0px + And the ".namespaced .custom-namespace-span-12:first" should have a width of 470px + And the ".namespaced .custom-namespace-span-12:first" should have a right margin of 10px + And the ".namespaced .custom-namespace-span-12:last" should have a right margin of 0px + + @javascript + Scenario: Includes plugins when generating custom styles + Given a file named "custom_settings.yml" with: + """ + my_awesome_project: + plugins: + - link-icons + """ + When I generate Blueprint stylesheets with the options "-s custom_settings.yml -p my_awesome_project" + And I open the HTML page using the styles with the content: + """ + + """ + Then the ".container a:first" should have a background image matching "email.png" + + @javascript + Scenario: Includes custom CSS when generating custom styles + Given a file named "custom_path/my-custom-css.css" with: + """ + .awesome { background-color: #000; } + """ + And a file named "custom_settings.yml" with: + """ + my_awesome_project: + custom_css: + screen.css: + - my-custom-css.css + """ + When I generate Blueprint stylesheets with the options "-s custom_settings.yml -p my_awesome_project" + And I open the HTML page using the styles with the content: + """ +
+
+
+ """ + Then the ".awesome:first" should have a background color of "rgb(0, 0, 0)" + + @javascript + Scenario: Includes default-named custom CSS when generating custom styles + Given a file named "custom_path/my-screen.css" with: + """ + .awesome { background-color: #000; } + """ + When I generate Blueprint stylesheets + And I open the HTML page using the styles with the content: + """ +
+
+
+ """ + Then the ".awesome:first" should have a background color of "rgb(0, 0, 0)" + + @javascript + Scenario: Includes default-named custom CSS and additional custom CSS when generating custom styles + Given a file named "custom_path/my-screen.css" with: + """ + .awesome { background-color: #000; } + """ + And a file named "custom_path/my-custom-css.css" with: + """ + .lame { background-color: #fff; } + """ + And a file named "custom_settings.yml" with: + """ + my_awesome_project: + custom_css: + screen.css: + - my-custom-css.css + """ + When I generate Blueprint stylesheets with the options "-s custom_settings.yml -p my_awesome_project" + And I open the HTML page using the styles with the content: + """ +
+
+
+
+ """ + Then the ".awesome:first" should have a background color of "rgb(0, 0, 0)" + And the ".lame:first" should have a background color of "rgb(255, 255, 255)" + + @javascript + Scenario: Generate semantic selectors + Given a file named "custom_settings.yml" with: + """ + my_awesome_project: + semantic_classes: + "#footer, #header": ".span-24" + ".primary-content": ".span-18" + ".secondary-content": ".span-6 .last" + """ + When I generate Blueprint stylesheets with the options "-s custom_settings.yml -p my_awesome_project" + And I open the HTML page using the styles with the content: + """ +
+ +
+
+ +
+ """ + Then the "#header" should have a width of 950px + And the "#footer" should have a width of 950px + And the ".primary-content:first" should have a width of 710px + And the ".secondary-content:first" should have a width of 230px + And the ".primary-content:first" should be next to ".secondary-content:first" diff --git a/app/assets/stylesheets/features/step_definitions/blueprint_steps.rb b/app/assets/stylesheets/features/step_definitions/blueprint_steps.rb new file mode 100644 index 0000000..5092880 --- /dev/null +++ b/app/assets/stylesheets/features/step_definitions/blueprint_steps.rb @@ -0,0 +1,37 @@ +When /^I generate Blueprint stylesheets$/ do + When %{I run `#{blueprint_command}`} +end + +When /^I generate Blueprint stylesheets with the options "([^"]*)"$/ do |options| + When %{I run `#{blueprint_command(options)}`} +end + +When /^I open the HTML page using the styles with the content:$/ do |string| + BlueprintApp.current_response = html_page_content { string } + visit("/") +end + +Then /^the "([^"]*)" should be below "([^"]*)"$/ do |selector_1, selector_2| + element(selector_1).height.should >= element(selector_2).top +end + +Then /^the "([^"]*)" should be next to "([^"]*)"$/ do |selector_1, selector_2| + element(selector_1).top.should >= element(selector_2).top && + element(selector_1).top.should <= element(selector_2).bottom +end + +Then /^the "([^"]*)" should have a width of (\d+)px$/ do |selector, width| + element(selector).width.should == width.to_i +end + +Then /^the "([^"]*)" should have a right margin of (\d+)px$/ do |selector, margin| + element(selector).margin.right.should == margin.to_i +end + +Then /^the "([^"]*)" should have a background image matching "([^"]*)"$/ do |selector, image| + element(selector).background.image.should =~ %r{#{image}} +end + +Then /^the "([^"]*)" should have a background color of "([^"]*)"$/ do |selector, rgb| + element(selector).background.color.should == rgb +end diff --git a/app/assets/stylesheets/features/support/blueprint_app.rb b/app/assets/stylesheets/features/support/blueprint_app.rb new file mode 100644 index 0000000..7ca472e --- /dev/null +++ b/app/assets/stylesheets/features/support/blueprint_app.rb @@ -0,0 +1,13 @@ +class BlueprintApp + def self.current_response=(resp) + @@current_response = resp + end + + def self.current_response + @@current_response || "" + end + + def call(env) + [200, { "Content-Type" => "text/html" }, self.class.current_response] + end +end diff --git a/app/assets/stylesheets/features/support/blueprint_helpers.rb b/app/assets/stylesheets/features/support/blueprint_helpers.rb new file mode 100644 index 0000000..dac1ad2 --- /dev/null +++ b/app/assets/stylesheets/features/support/blueprint_helpers.rb @@ -0,0 +1,44 @@ +require "./lib/blueprint/blueprint" + +module BlueprintHelpers + def blueprint_command(options = nil) + %{ruby #{compress_path} -o custom_path --custom_tests_path custom_tests_path #{options}} + end + + def html_page_content + %{ + + + + + Blueprint Test HTML + + + + + #{yield} + + + } + end + + private + + def compress_path + File.join(Blueprint::ROOT_PATH, "lib", "compress.rb") + end + + def jquery + File.open("features/support/jquery.js", "r").read + end + + def blueprint + File.open("tmp/aruba/custom_path/screen.css", "r").read + end +end + +World(BlueprintHelpers) diff --git a/app/assets/stylesheets/features/support/document_element.rb b/app/assets/stylesheets/features/support/document_element.rb new file mode 100644 index 0000000..85a0da4 --- /dev/null +++ b/app/assets/stylesheets/features/support/document_element.rb @@ -0,0 +1,44 @@ +class DocumentElement + class Dimension < Struct.new(:top, :right, :bottom, :left); end + class Background < Struct.new(:color, :image, :repeat, :position); end + + def initialize(page, selector) + @page = page + @selector = selector + end + + def height + @page.evaluate_script(%{$("#{@selector}").height()}).to_i + end + + def width + @page.evaluate_script(%{$("#{@selector}").width()}).to_i + end + + def top + @page.evaluate_script(%{$("#{@selector}").offset().top}).to_i + end + + def bottom + top + height + end + + def margin + margins = Dimension.new + margins.top = @page.evaluate_script(%{$("#{@selector}").css("marginTop")}).to_i + margins.right = @page.evaluate_script(%{$("#{@selector}").css("marginRight")}).to_i + margins.bottom = @page.evaluate_script(%{$("#{@selector}").css("marginBottom")}).to_i + margins.left = @page.evaluate_script(%{$("#{@selector}").css("marginLeft")}).to_i + + margins + end + + def background + background = Background.new + background.color = @page.evaluate_script(%{$("#{@selector}").css("backgroundColor")}) + background.image = @page.evaluate_script(%{$("#{@selector}").css("backgroundImage")}) + background.repeat = @page.evaluate_script(%{$("#{@selector}").css("backgroundRepeat")}) + background.position = @page.evaluate_script(%{$("#{@selector}").css("backgroundPosition")}) + background + end +end diff --git a/app/assets/stylesheets/features/support/element_helpers.rb b/app/assets/stylesheets/features/support/element_helpers.rb new file mode 100644 index 0000000..c3d2566 --- /dev/null +++ b/app/assets/stylesheets/features/support/element_helpers.rb @@ -0,0 +1,7 @@ +module ElementHelpers + def element(selector) + DocumentElement.new(page, selector) + end +end + +World(ElementHelpers) diff --git a/app/assets/stylesheets/features/support/env.rb b/app/assets/stylesheets/features/support/env.rb new file mode 100644 index 0000000..e3353f8 --- /dev/null +++ b/app/assets/stylesheets/features/support/env.rb @@ -0,0 +1,9 @@ +Bundler.require(:test) + +require "aruba/cucumber" +require "capybara/cucumber" + +require "./features/support/blueprint_app" + +Capybara.app = BlueprintApp.new +Capybara.javascript_driver = :webkit diff --git a/app/assets/stylesheets/features/support/jquery.js b/app/assets/stylesheets/features/support/jquery.js new file mode 100644 index 0000000..3a8cd46 --- /dev/null +++ b/app/assets/stylesheets/features/support/jquery.js @@ -0,0 +1,18 @@ +/*! + * jQuery JavaScript Library v1.6.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu May 12 15:04:36 2011 -0400 + */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!cj[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write("");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!=="*"?a+".":"")+b.replace(A,"`").replace(B,"&")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.1",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};f=c.createElement("select"),g=f.appendChild(c.createElement("option")),h=a.getElementsByTagName("input")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function b(){j.noCloneEvent=!1,a.detachEvent("onclick",b)}),a.cloneNode(!0).fireEvent("onclick")),h=c.createElement("input"),h.value="t",h.setAttribute("type","radio"),j.radioValue=h.value==="t",h.setAttribute("checked","checked"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",l=c.createElement("body"),m={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
t
",n=a.getElementsByTagName("td"),r=n[0].offsetHeight===0,n[0].style.display="",n[1].style.display="none",j.reliableHiddenOffsets=r&&n[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(i=c.createElement("div"),i.style.width="0",i.style.marginRight="0",a.appendChild(i),j.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(i,null)||{marginRight:0}).marginRight,10)||0)===0),l.innerHTML="",b.removeChild(l);if(a.attachEvent)for(q in{submit:1,change:1,focusin:1})p="on"+q,r=p in a,r||(a.setAttribute(p,"return;"),r=typeof a[p]=="function"),j[q+"Bubbles"]=r;return j}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c],i||(!t.test(c)||typeof d!="boolean"&&d!==b&&d.toLowerCase()!==c.toLowerCase()?v&&(f.nodeName(a,"form")||u.test(c))&&(i=v):i=w);if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return a[f.propFix[c]||c]?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=b),a.setAttribute(c,c.toLowerCase()));return c}},f.attrHooks.value={get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return a.value},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=Object.prototype.hasOwnProperty,y=/\.(.*)$/,z=/^(?:textarea|input|select)$/i,A=/\./g,B=/ /g,C=/[^\w\s.|`]/g,D=function(a){return a.replace(C,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=E;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=E);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),D).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem +)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},K=function(c){var d=c.target,e,g;if(!!z.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=J(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:K,beforedeactivate:K,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&K.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&K.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",J(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in I)f.event.add(this,c+".specialChange",I[c]);return z.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return z.test(this.nodeName)}},I=f.event.special.change.filters,I.focus=I.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=U.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(W(c[0])||W(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=T.call(arguments);P.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!V[a]?f.unique(e):e,(this.length>1||R.test(d))&&Q.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y=/ jQuery\d+="(?:\d+|null)"/g,Z=/^\s+/,$=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,_=/<([\w:]+)/,ba=/

","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Y,""):null;if(typeof a=="string"&&!bc.test(a)&&(f.support.leadingWhitespace||!Z.test(a))&&!bg[(_.exec(a)||["",""])[1].toLowerCase()]){a=a.replace($,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bj(a,d),e=bk(a),g=bk(d);for(h=0;e[h];++h)bj(e[h],g[h])}if(b){bi(a,d);if(c){e=bk(a),g=bk(d);for(h=0;e[h];++h)bi(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument|| +b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bb.test(k))k=b.createTextNode(k);else{k=k.replace($,"<$1>");var l=(_.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=ba.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Z.test(k)&&o.insertBefore(b.createTextNode(Z.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bp.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bo.test(g)?g.replace(bo,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,c){var d,e,g;c=c.replace(br,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bs.test(d)&&bt.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bE=/%20/g,bF=/\[\]$/,bG=/\r?\n/g,bH=/#.*$/,bI=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bJ=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bK=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bL=/^(?:GET|HEAD)$/,bM=/^\/\//,bN=/\?/,bO=/)<[^<]*)*<\/script>/gi,bP=/^(?:select|textarea)/i,bQ=/\s+/,bR=/([?&])_=[^&]*/,bS=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bT=f.fn.load,bU={},bV={},bW,bX;try{bW=e.href}catch(bY){bW=c.createElement("a"),bW.href="",bW=bW.href}bX=bS.exec(bW.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bT)return bT.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bO,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bP.test(this.nodeName)||bJ.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bG,"\r\n")}}):{name:b.name,value:c.replace(bG,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bW,isLocal:bK.test(bX[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bZ(bU),ajaxTransport:bZ(bV),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?ca(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=cb(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bI.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bH,"").replace(bM,bX[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bQ),d.crossDomain==null&&(r=bS.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bX[1]&&r[2]==bX[2]&&(r[3]||(r[1]==="http:"?80:443))==(bX[3]||(bX[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bU,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bL.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bN.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bR,"$1_="+x);d.url=y+(y===d.url?(bN.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bV,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bE,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq,cr=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); diff --git a/app/assets/stylesheets/lib/blueprint/blueprint.rb b/app/assets/stylesheets/lib/blueprint/blueprint.rb new file mode 100644 index 0000000..cba0e3c --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/blueprint.rb @@ -0,0 +1,54 @@ +require "rubygems" + +begin + require "bundler" + Bundler.require(:default) +rescue LoadError + puts "Bundler is required to run the compression script\n\n" + puts " gem install bundler" + exit(1) +rescue Bundler::GemNotFound + puts "You need to bundle in order to run the compression script\n\n" + puts " bundle install --without test\n\n" + exit(1) +end + +require 'fileutils' +module Blueprint + # path to the root Blueprint directory + ROOT_PATH = File.join(File.expand_path(File.dirname(__FILE__)), "..", "..") + # path to where the Blueprint CSS files are stored + BLUEPRINT_ROOT_PATH = File.join(Blueprint::ROOT_PATH, "blueprint") + # path to where the Blueprint CSS raw CSS files are stored + SOURCE_PATH = File.join(Blueprint::BLUEPRINT_ROOT_PATH, "src") + # path to where the Blueprint CSS generated test files are stored + TEST_PATH = File.join(Blueprint::ROOT_PATH, "tests") + # path to the root of the Blueprint scripts + LIB_PATH = File.join(Blueprint::ROOT_PATH, "lib", "blueprint") + # path to where Blueprint plugins are stored + PLUGINS_PATH = File.join(Blueprint::BLUEPRINT_ROOT_PATH, "plugins") + # settings YAML file where custom user settings are saved + SETTINGS_FILE = File.join(Blueprint::ROOT_PATH, "lib", "settings.yml") + # path to validator jar file to validate generated CSS files + VALIDATOR_FILE = File.join(Blueprint::LIB_PATH, "validate", "css-validator.jar") + # hash of compressed and source CSS files + CSS_FILES = { + "screen.css" => ["reset.css", "typography.css", "forms.css", "grid.css"], + "print.css" => ["print.css"], + "ie.css" => ["ie.css"] + } + + # default number of columns for Blueprint layout + COLUMN_COUNT = 24 + # default column width (in pixels) for Blueprint layout + COLUMN_WIDTH = 30 + # default gutter width (in pixels) for Blueprint layout + GUTTER_WIDTH = 10 + + INPUT_PADDING = 5 + INPUT_BORDER = 1 +end + +Dir["#{File.join(Blueprint::LIB_PATH)}/*"].each do |file| + require file if file =~ /\.rb$/ && file !~ /blueprint\.rb/ +end diff --git a/app/assets/stylesheets/lib/blueprint/compressor.rb b/app/assets/stylesheets/lib/blueprint/compressor.rb new file mode 100644 index 0000000..7273460 --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/compressor.rb @@ -0,0 +1,295 @@ +require "yaml" +require "optparse" +module Blueprint + class Compressor + TEST_FILES = ["index.html", + "parts/elements.html", + "parts/forms.html", + "parts/grid.html", + "parts/sample.html"] + + attr_accessor :namespace, :custom_css, :custom_layout, :semantic_classes, :project_name, :plugins, :custom_tests_path + attr_reader :custom_path, :loaded_from_settings, :destination_path, :script_name + + # overridden setter method for destination_path + # also sets custom_path flag on Blueprint::Compressor instance + def destination_path=(path) + @destination_path = path + @custom_path = @destination_path != Blueprint::BLUEPRINT_ROOT_PATH + end + + # constructor + def initialize + # set up defaults + @script_name = File.basename($0) + @loaded_from_settings = false + @settings_file = Blueprint::SETTINGS_FILE + self.namespace = "" + self.destination_path = Blueprint::BLUEPRINT_ROOT_PATH + self.custom_layout = CustomLayout.new + self.custom_css = {} + self.semantic_classes = {} + self.plugins = [] + + self.options.parse!(ARGV) + initialize_project_from_yaml(self.project_name) + end + + # generates output CSS based on any args passed in + # overwrites any existing CSS, as well as grid.png and tests + def generate! + output_header # information to the user (in the console) describing custom settings + generate_css_files # loops through Blueprint::CSS_FILES to generate output CSS + generate_tests # updates HTML with custom namespaces in order to test the generated library. TODO: have tests kick out to custom location + output_footer # informs the user that the CSS generation process is complete + end + + def options #:nodoc:# + OptionParser.new do |o| + o.set_summary_indent(" ") + o.banner = "Usage: #{@script_name} [options]" + o.define_head "Blueprint Compressor" + o.separator "" + o.separator "options" + o.on( "-fSETTINGS_FILE", "--settings_file=SETTINGS_FILE", String, + "Specify a non-default settings file path.") { |file| @settings_file = file } + o.on( "-oOUTPUT_PATH", "--output_path=OUTPUT_PATH", String, + "Define a different path to output generated CSS files to.") { |path| self.destination_path = path } + o.on( "-nBP_NAMESPACE", "--namespace=BP_NAMESPACE", String, + "Define a namespace prepended to all Blueprint classes (e.g. .your-ns-span-24)") { |ns| self.namespace = ns } + o.on( "-pPROJECT_NAME", "--project=PROJECT_NAME", String, + "If using the settings.yml file, PROJECT_NAME is the project name you want to export") {|project| @project_name = project } + o.on( "--column_width=COLUMN_WIDTH", Integer, + "Set a new column width (in pixels) for the output grid") {|cw| self.custom_layout.column_width = cw } + o.on( "--gutter_width=GUTTER_WIDTH", Integer, + "Set a new gutter width (in pixels) for the output grid") {|gw| self.custom_layout.gutter_width = gw } + o.on( "--column_count=COLUMN_COUNT", Integer, + "Set a new column count for the output grid") {|cc| self.custom_layout.column_count = cc } + o.on( "--custom_tests_path=TESTS_OUTPUT_PATH", String, + "Define a different path to output generated test files to") {|test_path| self.custom_tests_path = test_path } + #o.on("-v", "--verbose", "Turn on verbose output.") { |$verbose| } + o.on("-h", "--help", "Show this help message.") { puts o; exit } + end + end + + private + + # attempts to load output settings from settings.yml + def initialize_project_from_yaml(project_name = nil) + # ensures project_name is set and settings.yml is present + return unless (project_name && File.exist?(@settings_file)) + + # loads yaml into hash + projects = YAML::load(File.path_to_string(@settings_file)) + + if (project = projects[project_name]) # checks to see if project info is present + self.destination_path = if self.destination_path == Blueprint::BLUEPRINT_ROOT_PATH + project["path"] + else + self.destination_path + end + self.destination_path ||= Blueprint::BLUEPRINT_ROOT_PATH + self.namespace = project["namespace"] || "" + self.custom_css = project["custom_css"] || {} + self.semantic_classes = project["semantic_classes"] || {} + self.plugins = project["plugins"] || [] + + if (layout = project["custom_layout"]) + self.custom_layout = CustomLayout.new(:column_count => layout["column_count"], + :column_width => layout["column_width"], + :gutter_width => layout["gutter_width"], + :input_padding => layout["input_padding"], + :input_border => layout["input_border"]) + end + @loaded_from_settings = true + end + end + + def generate_css_files + Blueprint::CSS_FILES.each do |output_file_name, css_source_file_names| + css_output_path = File.join(destination_path, output_file_name) + puts "\n Assembling to #{custom_path ? css_output_path : "default blueprint path"}" + + # CSS file generation + css_output = css_file_header # header included on all three Blueprint-generated files + css_output += "\n\n" + + # Iterate through src/ .css files and compile to individual core compressed file + css_source_file_names.each do |css_source_file| + puts " + src/#{css_source_file}" + css_output += "/* #{css_source_file} */\n" if css_source_file_names.any? + + source_options = if self.custom_layout && css_source_file == "grid.css" + self.custom_layout.generate_grid_css + else + File.path_to_string File.join(Blueprint::SOURCE_PATH, css_source_file) + end + + css_output += Blueprint::CSSParser.new(source_options, + :namespace => namespace).to_s + css_output += "\n" + end + + #append CSS from plugins + css_output = append_plugin_css(css_output, output_file_name) + + # append CSS from custom files + css_output = append_custom_css(css_output, output_file_name) + + #save CSS to correct path, stripping out any extra whitespace at the end of the file + File.string_to_file(css_output.rstrip, css_output_path) + end + + # append semantic class names if set + append_semantic_classes + + generate_grid_png + end + + def append_custom_css(css, current_file_name) + # check to see if a custom (non-default) location was used for output files + # if custom path is used, handle custom CSS, if any + default_custom_css_exists = File.exist?(File.join(destination_path, "my-#{current_file_name}")) + return css unless self.custom_path && (default_custom_css_exists || self.custom_css[current_file_name]) + + custom_css_files = self.custom_css[current_file_name] || [] + custom_css_files << "my-#{current_file_name}" + + custom_css_files.each do |custom_css| + overwrite_path = File.join(destination_path, custom_css) + overwrite_css = if File.exists?(overwrite_path) + File.path_to_string(overwrite_path) + else + "" + end + + # if there's CSS present, add it to the CSS output + unless overwrite_css.blank? + puts " + custom styles (#{custom_css})\n" + css += "/* #{custom_css} */\n" + css += CSSParser.new(overwrite_css).to_s + "\n" + end + end + + css + end + + def append_plugin_css(css, current_file_name) + return css unless self.plugins.any? + + plugin_css = "" + + self.plugins.each do |plugin| + plugin_file_specific = File.join(Blueprint::PLUGINS_PATH, plugin, current_file_name) + plugin_file_generic = File.join(Blueprint::PLUGINS_PATH, plugin, "#{plugin}.css") + + file = if File.exists?(plugin_file_specific) + plugin_file_specific + elsif File.exists?(plugin_file_generic) && current_file_name =~ /^screen|print/ + plugin_file_generic + end + + if file + puts " + #{plugin} plugin\n" + plugin_css += "/* #{plugin} */\n" + plugin_css += CSSParser.new(File.path_to_string(file)).to_s + "\n" + + Dir.glob(File.join(File.dirname(file), "**", "**")).each do |cp| + short_path = cp.gsub(/#{File.dirname(file)}./ , "") + # make directory if it doesn't exist + directory = File.dirname(short_path) + if directory != "." + FileUtils.mkdir_p(File.join(destination_path, directory)) + end + + unless File.directory?(File.join(File.dirname(file), short_path)) || cp == file + FileUtils.cp(cp, File.join(destination_path, short_path)) + end + end + end + end + + css += plugin_css + end + + def append_semantic_classes + screen_output_path = File.join(self.destination_path, "screen.css") + semantic_classes = SemanticClassNames.new(:namespace => self.namespace, + :source_file => screen_output_path) + semantic_styles = semantic_classes.css_from_assignments(self.semantic_classes) + return if semantic_styles.blank? + + css = File.path_to_string(screen_output_path) + css += "\n\n/* semantic class names */\n" + css += semantic_styles + File.string_to_file(css.rstrip, screen_output_path) + end + + def generate_tests + puts "\n Updating namespace to \"#{namespace}\" in test files:" + test_files = Compressor::TEST_FILES.map do |file| + File.join(self.custom_tests_path || Blueprint::TEST_PATH, *file.split(/\//)) + end + + test_files.each do |file| + puts " + #{file}" + Namespace.new(file, namespace) + end + end + + def generate_grid_png + GridBuilder.new(:column_width => self.custom_layout.column_width, + :gutter_width => self.custom_layout.gutter_width, + :output_path => File.join(self.destination_path, "src")).generate! + end + + def output_header + puts "\n" + puts " #{"*" * 100}" + puts " **" + puts " ** Blueprint CSS Compressor" + puts " **" + puts " ** Builds compressed files from the source directory." + puts " **" + puts " ** Loaded from settings.yml" if loaded_from_settings + puts " ** Namespace: '#{namespace}'" unless namespace.blank? + puts " ** Output to: #{destination_path}" + puts " ** Grid Settings:" + puts " ** - Column Count: #{self.custom_layout.column_count}" + puts " ** - Column Width: #{self.custom_layout.column_width}px" + puts " ** - Gutter Width: #{self.custom_layout.gutter_width}px" + puts " ** - Total Width : #{self.custom_layout.page_width}px" + puts " **" + puts " #{"*" * 100}" + end + + def output_footer + puts "\n\n" + puts " #{"*" * 100}" + puts " **" + puts " ** Done!" + puts " ** Your compressed files and test files are now up-to-date." + puts " **" + puts " #{"*" * 100}\n\n" + end + + def css_file_header +%(/* ----------------------------------------------------------------------- + + + Blueprint CSS Framework 1.0.1 + http://blueprintcss.org + + * Copyright (c) 2007-Present. See LICENSE for more info. + * See README for instructions on how to use Blueprint. + * For credits and origins, see AUTHORS. + * This is a compressed file. See the sources in the 'src' directory. + +----------------------------------------------------------------------- */) + end + + def putsv(str) + puts str if $verbose + end + end +end diff --git a/app/assets/stylesheets/lib/blueprint/core_ext.rb b/app/assets/stylesheets/lib/blueprint/core_ext.rb new file mode 100644 index 0000000..ecc7544 --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/core_ext.rb @@ -0,0 +1,39 @@ +class String + # see if string has any content + def blank?; self.length.zero?; end + + # strip space after :, remove newlines, replace multiple spaces with only one space, remove comments + def strip_space! + replace self.gsub(/:\s*/, ":").gsub(/\n/, "").gsub(/\s+/, " ").gsub(/(\/\*).*?(\*\/)/, "") + end + + # remove newlines, insert space after comma, replace two spaces with one space after comma + def strip_selector_space! + replace self.gsub(/\n/, "").gsub(",", ", ").gsub(", ", ", ") + end + + # remove leading whitespace, remove end whitespace + def strip_side_space! + replace self.gsub(/^\s+/, "").gsub(/\s+$/, $/) + end +end + +class NilClass + def blank? + true + end +end + +class File + # string output from file + def self.path_to_string(path) + File.new(path).read + end + + # saves a string to a specified file path + def self.string_to_file(string, path) + directory = File.dirname(path) + FileUtils.mkdir_p directory unless File.directory?(directory) + File.open(path, "w") { |f| f << string } + end +end diff --git a/app/assets/stylesheets/lib/blueprint/css_parser.rb b/app/assets/stylesheets/lib/blueprint/css_parser.rb new file mode 100644 index 0000000..1af72e5 --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/css_parser.rb @@ -0,0 +1,72 @@ +module Blueprint + # Strips out most whitespace and can return a hash or string of parsed data + class CSSParser + attr_accessor :namespace + attr_reader :css_output, :raw_data + + # ==== Options + # * css_string String of CSS data + # * options + # * :namespace -- Namespace to use when generating output + def initialize(css_string = "", options = {}) + @raw_data = css_string + @namespace = options[:namespace] || "" + compress(@raw_data) + end + + # returns string of CSS which can be saved to a file or otherwise + def to_s + @css_output + end + + # returns a hash of all CSS data passed + # + # ==== Options + # * data -- CSS string; defaults to string passed into the constructor + def parse(data = nil) + data ||= @raw_data + + # wrapper array holding hashes of css tags/rules + css_out = [] + # clear initial spaces + data.strip_side_space!.strip_space! + + # split on end of assignments + data.split('}').each_with_index do |assignments, index| + # split again to separate tags from rules + tags, styles = assignments.split('{').map{|a| a.strip_side_space!} + unless styles.blank? + # clean up tags and apply namespaces as needed + tags.strip_selector_space! + tags.gsub!(/\./, ".#{namespace}") unless namespace.blank? + + # split on semicolon to iterate through each rule + rules = [] + styles.split(";").each do |key_val_pair| + unless key_val_pair.nil? + # split by property/val and append to rules array with correct declaration + property, value = key_val_pair.split(":", 2).map {|kv| kv.strip_side_space! } + break unless property && value + rules << "#{property}:#{value};" + end + end + # now keeps track of index as hashes don't keep track of position + # (which will be fixed in Ruby 1.9) + unless tags.blank? || rules.to_s.blank? + css_out << {:tags => tags, :rules => rules.join, :idx => index} + end + end + end + css_out + end + + private + + def compress(data) + @css_output = "" + parse(data).flatten.sort_by {|i| i[:idx]}.each do |line| + @css_output += "#{line[:tags]} {#{line[:rules]}}\n" + end + end + end +end diff --git a/app/assets/stylesheets/lib/blueprint/custom_layout.rb b/app/assets/stylesheets/lib/blueprint/custom_layout.rb new file mode 100644 index 0000000..ccef91d --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/custom_layout.rb @@ -0,0 +1,72 @@ +require 'erb' +module Blueprint + # Generates a custom grid file, using ERB to evaluate custom settings + class CustomLayout + # path to ERB file used for CSS template + CSS_ERB_FILE = File.join(Blueprint::LIB_PATH, 'grid.css.erb') + + attr_writer :column_count, :column_width, :gutter_width, :input_padding, + :input_border + + # Column count of generated CSS. Returns itself or Blueprint's default + def column_count + (@column_count || Blueprint::COLUMN_COUNT).to_i + end + + # Column width (in pixels) of generated CSS. Returns itself or Blueprint's default + def column_width + (@column_width || Blueprint::COLUMN_WIDTH).to_i + end + + # Gutter width (in pixels) of generated CSS. Returns itself or Blueprint's default + def gutter_width + (@gutter_width || Blueprint::GUTTER_WIDTH).to_i + end + + def input_padding + (@input_padding || Blueprint::INPUT_PADDING).to_i + end + + def input_border + (@input_border || Blueprint::INPUT_BORDER).to_i + end + + # Returns page width (in pixels) + def page_width + column_count * (column_width + gutter_width) - gutter_width + end + + # ==== Options + # * options + # * :column_count -- Sets the column count of generated CSS + # * :column_width -- Sets the column width (in pixels) of generated CSS + # * :gutter_width -- Sets the gutter width (in pixels) of generated CSS + # * :input_padding -- Sets the input padding width (in pixels) of generated CSS + # * :input_border -- Sets the border width (in pixels) of generated CSS + def initialize(options = {}) + @column_count = options[:column_count] + @column_width = options[:column_width] + @gutter_width = options[:gutter_width] + @input_padding = options[:input_padding] + @input_border = options[:input_border] + end + + # Boolean value if current settings are Blueprint's defaults + def default? + self.column_width == Blueprint::COLUMN_WIDTH && + self.column_count == Blueprint::COLUMN_COUNT && + self.gutter_width == Blueprint::GUTTER_WIDTH && + self.input_padding == Blueprint::INPUT_PADDING && + self.input_border == Blueprint::INPUT_BORDER + end + + # Loads grid.css.erb file, binds it to current instance, and returns output + def generate_grid_css + # loads up erb template to evaluate custom widths + css = ERB::new(File.path_to_string(CustomLayout::CSS_ERB_FILE)) + + # bind it to this instance + css.result(binding) + end + end +end diff --git a/app/assets/stylesheets/lib/blueprint/grid.css.erb b/app/assets/stylesheets/lib/blueprint/grid.css.erb new file mode 100644 index 0000000..135a09f --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/grid.css.erb @@ -0,0 +1,146 @@ +/* -------------------------------------------------------------- + + grid.css + * Sets up an easy-to-use grid of 24 columns. + + By default, the grid is 950px wide, with 24 columns + spanning 30px, and a 10px margin between columns. + + If you need fewer or more columns, namespaces or semantic + element names, use the compressor script (lib/compress.rb) + +-------------------------------------------------------------- */ + +/* A container should group all your columns. */ +.container { + width: <%= page_width %>px; + margin: 0 auto; +} + +/* Use this class on any .span-# / .container to see the grid. */ +.showgrid { + background: url(src/grid.png); +} + + +/* Columns +-------------------------------------------------------------- */ + +/* Sets up basic grid floating and margin. */ +.column, <%= (1..column_count).map {|c| ".span-#{c}" }.join(", ") %> { + float: left; + margin-right: <%= gutter_width %>px; +} + +/* The last column in a row needs this class. */ +.last { margin-right: 0; } + +/* Use these classes to set the width of a column. */ +.span-1 {width: <%= column_width %>px;} +<% (2..column_count-1).each do |column| %> +.span-<%= column %> {width: <%= (column_width + ((column - 1) * (column_width + gutter_width))).to_i %>px;<%= "margin-right: 0;" if column == column_count %>}<% end %> +.span-<%= column_count %> {width:<%= page_width %>px; margin-right:0;} + +/* Use these classes to set the width of an input. */ +<%= (1..column_count).map {|column| "input.span-#{column}, textarea.span-#{column}"}.join(", ") %> { + border-left-width: <%= input_border %>px; + border-right-width: <%= input_border %>px; + padding-left: <%= input_padding %>px; + padding-right: <%= input_padding %>px; +} +<% (1..column_count).each do |column| %> +input.span-<%= column %>, textarea.span-<%= column %> { width: <%= ((column_width + gutter_width) * (column - 1) + column_width - 2*(input_padding + input_border))%>px; }<% end %> + +/* Add these to a column to append empty cols. */ +<% (1..(column_count-1)).each do |column| %> +.append-<%= column %> { padding-right: <%= (column * (column_width + gutter_width)).to_i %>px;}<% end %> + +/* Add these to a column to prepend empty cols. */ +<% (1..(column_count-1)).each do |column| %> +.prepend-<%= column %> { padding-left: <%= (column * (column_width + gutter_width)).to_i %>px;}<% end %> + + +/* Border on right hand side of a column. */ +.border { + padding-right: <%= (gutter_width * 0.5 - 1).to_i %>px; + margin-right: <%= (gutter_width * 0.5).to_i %>px; + border-right: 1px solid #ddd; +} + +/* Border with more whitespace, spans one column. */ +.colborder { + padding-right: <%= (column_width + 2*gutter_width - 1)/2.to_i %>px; + margin-right: <%= (column_width + 2 * gutter_width)/2.to_i %>px; + border-right: 1px solid #ddd; +} + + +/* Use these classes on an element to push it into the +next column, or to pull it into the previous column. */ + +<% (1..column_count).each do |column| %> +.pull-<%= column %> { margin-left: -<%= (column * (column_width + gutter_width)).to_i %>px; }<% end %> + +<%= (1..column_count).map {|c| ".pull-#{c}" }.join(", ") %> {float: left; position:relative;} + +<% (1..(column_count)).each do |column| %> +.push-<%= column %> { margin: 0 -<%= (column * (column_width + gutter_width)).to_i %>px 1.5em <%= (column * (column_width + gutter_width)).to_i %>px; }<% end %> + +<%= (1..column_count).map {|c| ".push-#{c}" }.join(", ") %> {float: left; position:relative;} + + +/* Misc classes and elements +-------------------------------------------------------------- */ + +/* In case you need to add a gutter above/below an element */ +div.prepend-top, .prepend-top { + margin-top:1.5em; +} +div.append-bottom, .append-bottom { + margin-bottom:1.5em; +} + +/* Use a .box to create a padded box inside a column. */ +.box { + padding: 1.5em; + margin-bottom: 1.5em; + background: #e5eCf9; +} + +/* Use this to create a horizontal ruler across a column. */ +hr { + background: #ddd; + color: #ddd; + clear: both; + float: none; + width: 100%; + height: 1px; + margin: 0 0 17px; + border: none; +} + +hr.space { + background: #fff; + color: #fff; + visibility: hidden; +} + + +/* Clearing floats without extra markup + Based on How To Clear Floats Without Structural Markup by PiE + [http://www.positioniseverything.net/easyclearing.html] */ + +.clearfix:after, .container:after { + content: "\0020"; + display: block; + height: 0; + clear: both; + visibility: hidden; + overflow:hidden; +} +.clearfix, .container {display: block;} + +/* Regular clearing + apply to column that should drop below previous ones. */ + +.clear { clear:both; } diff --git a/app/assets/stylesheets/lib/blueprint/grid_builder.rb b/app/assets/stylesheets/lib/blueprint/grid_builder.rb new file mode 100644 index 0000000..33b6732 --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/grid_builder.rb @@ -0,0 +1,33 @@ +module Blueprint + class GridBuilder + attr_reader :column_width, :gutter_width, :output_path, :able_to_generate + + # ==== Options + # * options + # * :column_width -- Width (in pixels) of current grid column + # * :gutter_width -- Width (in pixels) of current grid gutter + # * :output_path -- Output path of grid.png file + def initialize(options={}) + @column_width = options[:column_width] || Blueprint::COLUMN_WIDTH + @gutter_width = options[:gutter_width] || Blueprint::GUTTER_WIDTH + @output_path = options[:output_path] || Blueprint::SOURCE_PATH + end + + # generates (overwriting if necessary) grid.png image to be tiled in background + def generate! + total_width = self.column_width + self.gutter_width + height = 18 + + white = ChunkyPNG::Color.from_hex("ffffff") + background = ChunkyPNG::Color.from_hex("e8effb") + line = ChunkyPNG::Color.from_hex("e9e9e9") + + png = ChunkyPNG::Image.new(total_width, height, white) + png.rect(0, 0, column_width - 1, height, background, background) + png.rect(0, height - 1, total_width, height - 1, line, line) + + FileUtils.mkdir(self.output_path) unless File.exists?(self.output_path) + png.save(File.join(self.output_path, "grid.png")) + end + end +end diff --git a/app/assets/stylesheets/lib/blueprint/namespace.rb b/app/assets/stylesheets/lib/blueprint/namespace.rb new file mode 100644 index 0000000..7f35d39 --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/namespace.rb @@ -0,0 +1,38 @@ +module Blueprint + class Namespace + + # Read html to string, remove namespace if any, + # set the new namespace, and update the test file. + def initialize(path, namespace) + html = File.path_to_string(path) + remove_current_namespace(html) + add_namespace(html, namespace) + File.string_to_file(html, path) + end + + # adds namespace to BP classes in a html file + def add_namespace(html, namespace) + html.gsub!(/(class=")([a-zA-Z0-9\-_ ]*)(")/) do |m| + classes = m.to_s.split('"')[1].split(" ") + classes.map! { |c| c = namespace + c } + 'class="' + classes.join(' ') + '"' + end + html + end + + # removes a namespace from a string of html + def remove_current_namespace(html) + current = current_namespace(html) + html.gsub!(current, "") + html + end + + # returns current namespace in test files + # based on container class + def current_namespace(html) + html =~ /class="([\S]+)container/ + current_namespace = $1 if $1 + current_namespace || "" + end + end +end diff --git a/app/assets/stylesheets/lib/blueprint/semantic_class_names.rb b/app/assets/stylesheets/lib/blueprint/semantic_class_names.rb new file mode 100644 index 0000000..d561e33 --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/semantic_class_names.rb @@ -0,0 +1,64 @@ +module Blueprint + # parses a hash of key/value pairs, key being output CSS selectors, value + # being a list of CSS selectors to draw from + class SemanticClassNames + attr_accessor :class_assignments + attr_reader :namespace, :source_file + + # ==== Options + # * options + # * :namespace -- Namespace to be used when matching CSS selectors to draw from + # * :source_file -- Source file to use as reference of CSS selectors. Defaults to Blueprint's generated screen.css + # * :class_assignments -- Hash of key/value pairs, key being output CSS selectors, value being a list of CSS selectors to draw from + def initialize(options = {}) + @namespace = options[:namespace] || "" + @source_file = options[:source_file] || File.join(Blueprint::BLUEPRINT_ROOT_PATH, "screen.css") + self.class_assignments = options[:class_assignments] || {} + end + + # Returns a CSS string of semantic selectors and associated styles + # ==== Options + # * assignments -- Hash of key/value pairs, key being output CSS selectors, value being a list of CSS selectors to draw from; defaults to what was passed in constructor or empty hash + def css_from_assignments(assignments = {}) + assignments ||= self.class_assignments + + # define a wrapper hash to hold all the new CSS assignments + output_css = {} + + #loads full stylesheet into an array of hashes + blueprint_assignments = CSSParser.new(File.path_to_string(self.source_file)).parse + + # iterates through each class assignment ('#footer' => '.span-24', '#header' => '.span-24') + assignments.each do |semantic_class, blueprint_classes| + # gathers all BP classes we're going to be mimicing + blueprint_classes = blueprint_classes.split(/,|\s/).select {|c| !c.blank? }.flatten.map {|c| c.strip } + classes = [] + # loop through each BP class, grabbing the full hash (containing tags, index, and CSS rules) + blueprint_classes.each do |bp_class| + match = if bp_class.include?(".") + bp_class.gsub(".", ".#{self.namespace}") + else + ".#{self.namespace}#{bp_class}" + end + classes << blueprint_assignments.select do |line| + line[:tags] =~ Regexp.new(/^([\w\.\-\:]+, ?)*#{match}(, ?[\w\.\-\:]+)*$/) + end.uniq + end + + # clean up the array + classes = classes.flatten.uniq + + # set the semantic class to the rules gathered in classes, sorted by index + # this way, the styles will be applied in the correct order from top of file to bottom + output_css[semantic_class] = "#{classes.sort_by {|i| i[:idx] }.map {|i| i[:rules] }}" + end + + # return the css in proper format + css = "" + output_css.each do |tags, rules| + css += "#{tags} {#{rules}}\n" + end + css + end + end +end diff --git a/app/assets/stylesheets/lib/blueprint/validate/COPYRIGHT.html b/app/assets/stylesheets/lib/blueprint/validate/COPYRIGHT.html new file mode 100644 index 0000000..f9d0b6f --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/validate/COPYRIGHT.html @@ -0,0 +1,93 @@ + + + + + +W3C IPR SOFTWARE NOTICE + + +

W3C® SOFTWARE NOTICE AND LICENSE

+ +

Copyright © 1997-2002 World +Wide Web Consortium, (Massachusetts Institute of +Technology, Institut National de +Recherche en Informatique et en Automatique, Keio University). All Rights +Reserved. http://www.w3.org/Consortium/Legal/

+ +

This W3C work (including software, documents, or other related +items) is being provided by the copyright holders under the +following license. By obtaining, using and/or copying this work, +you (the licensee) agree that you have read, understood, and will +comply with the following terms and conditions:

+ +

Permission to use, copy, modify, and distribute this software +and its documentation, with or without modification,  for any +purpose and without fee or royalty is hereby granted, provided that +you include the following on ALL copies of the software and +documentation or portions thereof, including modifications, that +you make:

+ +
    +
  1. The full text of this NOTICE in a location viewable to users of +the redistributed or derivative work.
  2. + +
  3. Any pre-existing intellectual property disclaimers, notices, or +terms and conditions. If none exist, a short notice of the +following form (hypertext is preferred, text is permitted) should +be used within the body of any redistributed or derivative code: +"Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of +Technology, Institut National de +Recherche en Informatique et en Automatique, Keio University). All Rights +Reserved. http://www.w3.org/Consortium/Legal/"
  4. + +
  5. Notice of any changes or modifications to the W3C files, +including the date changes were made. (We recommend you provide +URIs to the location from which the code is derived.)
  6. +
+ +

THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND +COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF +MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE +USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD +PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.

+ +

COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, +SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE +SOFTWARE OR DOCUMENTATION.

+ +

The name and trademarks of copyright holders may NOT be used in +advertising or publicity pertaining to the software without +specific, written prior permission. Title to copyright in this +software and any associated documentation will at all times remain +with copyright holders.

+ +

____________________________________

+ +

This formulation of W3C's notice and license became active on +August 14 1998 so as to improve compatibility with GPL. This +version ensures that W3C software licensing terms are no more +restrictive than GPL and consequently W3C software may be +distributed in GPL packages. See the older formulation for +the policy prior to this date. Please see our Copyright FAQ for common questions about +using materials from our site, including specific terms and +conditions for packages like libwww, Amaya, and Jigsaw. Other +questions about this notice can be directed to site-policy@w3.org.

+ +

 

+ +
webmaster
+ (last updated $Date: 2004/05/29 04:04:36 $)
+ + + \ No newline at end of file diff --git a/app/assets/stylesheets/lib/blueprint/validate/JIGSAW_COPYRIGHT b/app/assets/stylesheets/lib/blueprint/validate/JIGSAW_COPYRIGHT new file mode 100644 index 0000000..9108b47 --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/validate/JIGSAW_COPYRIGHT @@ -0,0 +1,64 @@ +W3C IPR SOFTWARE NOTICE + +Copyright © 1995-1998 World Wide Web Consortium, (Massachusetts Institute of +Technology, Institut National de Recherche en Informatique et en +Automatique, Keio University). All Rights Reserved. +http://www.w3.org/Consortium/Legal/ + +This W3C work (including software, documents, or other related items) is +being provided by the copyright holders under the following license. By +obtaining, using and/or copying this work, you (the licensee) agree that you +have read, understood, and will comply with the following terms and +conditions: + +Permission to use, copy, and modify this software and its documentation, +with or without modification, for any purpose and without fee or royalty is +hereby granted, provided that you include the following on ALL copies of the +software and documentation or portions thereof, including modifications, +that you make: + + 1. The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work. + 2. Any pre-existing intellectual property disclaimers, notices, or terms + and conditions. If none exist, a short notice of the following form + (hypertext is preferred, text is permitted) should be used within the + body of any redistributed or derivative code: "Copyright © World Wide + Web Consortium, (Massachusetts Institute of Technology, Institut + National de Recherche en Informatique et en Automatique, Keio + University). All Rights Reserved. http://www.w3.org/Consortium/Legal/" + 3. Notice of any changes or modifications to the W3C files, including the + date changes were made. (We recommend you provide URIs to the location + from which the code is derived). + +In addition, creators of derivitive works must include the full text of this +NOTICE in a location viewable to users of the derivitive work. + +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS +MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR +PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE +ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR +DOCUMENTATION. + +The name and trademarks of copyright holders may NOT be used in advertising +or publicity pertaining to the software without specific, written prior +permission. Title to copyright in this software and any associated +documentation will at all times remain with copyright holders. + +____________________________________ + +This formulation of W3C's notice and license became active on August 14 +1998. See the older formulation for the policy prior to this date. Please +see our Copyright FAQ for common questions about using materials from our +site, including specific terms and conditions for packages like libwww, +Amaya, and Jigsaw. Other questions about this notice can be directed to +site-policy@w3.org . + + + + +webmaster +(last updated 14-Aug-1998) diff --git a/app/assets/stylesheets/lib/blueprint/validate/README.html b/app/assets/stylesheets/lib/blueprint/validate/README.html new file mode 100644 index 0000000..4071e58 --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/validate/README.html @@ -0,0 +1,83 @@ + + + + CSS Validator Binary Distribution - Illumit + + + +

CSS Validator Binary Distribution

+

This a binary distribution of W3C CSS Validator. + It was built from the source on June 25, 2006. + No modifications were made.

+ +

This distribution is provided as is to make testing a large number of CSS files easier.

+ + +

Requirements

+

A Java 2 Virtual Machine is required to use the validator. + You can download one from Sun if you do not have one installed.

+ +

Usage

+

Summary

+

java -jar ~/css-validator/css-validator.jar [-options] files URLs

+

Sample

+
+    java -jar ~/css-validator/css-validator.jar f1.css http://illumit.com/
+    
+

Options

+
+
-e
Show errors only.
+
-html
Output HTML.
+
-css1 | -css2 | -css21 | -css3 | -svg | -svgbasic | -svgtiny
+
Specify CSS version. CSS2 is the default.
+
+ +

Support

+ +

If you have questions about how this distribution is built or packaged, + mailto:contact@illumit.com.

+ +

Use the CSS Validator Feedback + page if you have any questions or problems with the validator itself.

+ +

Updates are announced on via + RSS

+ + + +

Download

+ +

Download the css validator binary distribution css-validator.zip. Extract the files (OS X and *ix users can use unzip).

+ + +

License Agreement

+ +

This is a binary distribution of W3C CSS Validator Version 2.0 + It was built from the source on June 25, 2006. + No modifications were made to the source.

+ +

THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND +ILLUMIT L.L.C AND THE COPYRIGHT HOLDERS (W3C) MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF +MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE +USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD +PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.

+ +

ILLUMIT L.L.C AND THE COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, +SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE +SOFTWARE OR DOCUMENTATION.

+ + + diff --git a/app/assets/stylesheets/lib/blueprint/validate/XERCES_COPYING.txt b/app/assets/stylesheets/lib/blueprint/validate/XERCES_COPYING.txt new file mode 100644 index 0000000..183b52c --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/validate/XERCES_COPYING.txt @@ -0,0 +1,56 @@ +/* + * The Apache Software License, Version 1.1 + * + * + * Copyright (c) 1999 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Xerces" and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation and was + * originally based on software copyright (c) 1999, International + * Business Machines, Inc., http://www.ibm.com. For more + * information on the Apache Software Foundation, please see + * . + */ diff --git a/app/assets/stylesheets/lib/blueprint/validate/css-validator-javadoc.jar b/app/assets/stylesheets/lib/blueprint/validate/css-validator-javadoc.jar new file mode 100644 index 0000000..ed3d030 Binary files /dev/null and b/app/assets/stylesheets/lib/blueprint/validate/css-validator-javadoc.jar differ diff --git a/app/assets/stylesheets/lib/blueprint/validate/css-validator.jar b/app/assets/stylesheets/lib/blueprint/validate/css-validator.jar new file mode 100644 index 0000000..592b040 Binary files /dev/null and b/app/assets/stylesheets/lib/blueprint/validate/css-validator.jar differ diff --git a/app/assets/stylesheets/lib/blueprint/validate/jigsaw.jar b/app/assets/stylesheets/lib/blueprint/validate/jigsaw.jar new file mode 100644 index 0000000..53419d6 Binary files /dev/null and b/app/assets/stylesheets/lib/blueprint/validate/jigsaw.jar differ diff --git a/app/assets/stylesheets/lib/blueprint/validate/xerces.jar b/app/assets/stylesheets/lib/blueprint/validate/xerces.jar new file mode 100644 index 0000000..f470895 Binary files /dev/null and b/app/assets/stylesheets/lib/blueprint/validate/xerces.jar differ diff --git a/app/assets/stylesheets/lib/blueprint/validator.rb b/app/assets/stylesheets/lib/blueprint/validator.rb new file mode 100644 index 0000000..bc68718 --- /dev/null +++ b/app/assets/stylesheets/lib/blueprint/validator.rb @@ -0,0 +1,49 @@ +module Blueprint + # Validates generated CSS against the W3 using Java + class Validator + attr_reader :error_count + + def initialize + @error_count = 0 + end + + # Validates all three CSS files + def validate + java_path = `which java`.rstrip + raise "You do not have a Java installed, but it is required." if java_path.blank? + + output_header + + Blueprint::CSS_FILES.keys.each do |file_name| + css_output_path = File.join(Blueprint::BLUEPRINT_ROOT_PATH, file_name) + puts "\n\n Testing #{css_output_path}" + puts " Output ============================================================\n\n" + @error_count += 1 if !system("#{java_path} -jar '#{Blueprint::VALIDATOR_FILE}' -e '#{css_output_path}'") + end + + output_footer + end + + private + + def output_header + puts "\n\n" + puts " ************************************************************" + puts " **" + puts " ** Blueprint CSS Validator" + puts " ** Validates output CSS files" + puts " **" + puts " ************************************************************" + end + + def output_footer + puts "\n\n" + puts " ************************************************************" + puts " **" + puts " ** Done!" + puts " ** Your CSS files are#{" not" if error_count > 0} valid.#{" You had #{error_count} error(s) within your files" if error_count > 0}" + puts " **" + puts " ************************************************************" + end + end +end diff --git a/app/assets/stylesheets/lib/compress.rb b/app/assets/stylesheets/lib/compress.rb new file mode 100644 index 0000000..34a6c16 --- /dev/null +++ b/app/assets/stylesheets/lib/compress.rb @@ -0,0 +1,167 @@ +#!/usr/bin/env ruby +require File.join(File.dirname(__FILE__), "blueprint", "blueprint") + +# **Basic +# +# Calling this file by itself will pull files from blueprint/src and +# concatenate them into three files; ie.css, print.css, and screen.css. +# +# ruby compress.rb +# +# However, argument variables can be set to change how this works. +# +# Calling +# +# ruby compress.rb -h +# +# will reveal basic arguments you can pass to the compress.rb file. +# +# **Custom Settings +# +# To use custom settings, the file need to be stored in settings.yml within +# this directory. An example YAML file has been included. +# +# Another ability is to use YAML (spec is at http://www.yaml.org/spec/1.1/) +# for project settings in a predefined structure and store all pertinent +# information there. The YAML file has multiple keys (usually a named +# project) with a set of data that defines that project. A sample structure +# can be found in settings.example.yml. +# +# The basic structure is this: +# +# Root nodes are project names. You use these when calling compress.rb as such: +# +# ruby compress.rb -p PROJECTNAME +# +# A sample YAML with only roots and output paths would look like this: +# +# project1: +# path: /path/to/my/project/stylesheets +# project2: +# path: /path/to/different/stylesheets +# project3: +# path: /path/to/another/projects/styles +# +# You can then call +# +# ruby compress.rb -p project1 +# +# or +# +# ruby compress.rb -p project3 +# +# This would compress and export Blueprints CSS to the respective directory, +# checking for my-(ie|print|screen).css and appending it if present +# +# A more advanced structure would look like this: +# +# project1: +# path: /path/to/my/project/stylesheets +# namespace: custom-namespace-1- +# custom_css: +# ie.css: +# - custom-ie.css +# print.css: +# - docs.css +# - my-print-styles.css +# screen.css: +# - subfolder-of-stylesheets/sub_css.css +# custom_layout: +# column_count: 12 +# column_width: 70 +# gutter_width: 10 +# project2: +# path: /path/to/different/stylesheets +# namespace: different-namespace- +# custom_css: +# screen.css: +# - custom_screen.css +# semantic_classes: +# "#footer, #header": column span-24 last +# "#content": column span-18 border +# "#extra-content": last span-6 column +# "div#navigation": last span-24 column +# "div.section, div.entry, .feeds": span-6 column +# plugins: +# - fancy-type +# - buttons +# - validations +# project3: +# path: /path/to/another/projects/styles +# +# In a structure like this, a lot more assignment is occurring. Custom +# namespaces are being set for two projects, while the third (project3) +# is just a simple path setting. +# +# Also, custom CSS is being used that is appended at the end of its respective +# file. So, in project1, print.css will have docs.css and my-print-styles.css +# instead of the default my-print.css. Note that these files are relative +# to the path that you defined above; you can use subdirectories from the +# default path if you would like. +# +# Another thing to note here is the custom_layout; if not defined, your +# generated CSS will default to the 24 column, 950px wide grid that has been +# standard with Blueprint for quite some time. However, you can specify a +# custom grid setup if you would like. The three options are column_count +# (the number of columns you want your grid to have), column width (the +# width in pixels that you want your columns to be), and gutter_width (the +# width in pixels you want your gutters - space between columns - to be). +# To use the Blueprint default, do not define this in your settings file. +# +# Semantic classes are still in the works within Blueprint, but a simple +# implementation has been created. +# +# Defining semantic_classes, with nodes underneath, will generate a class +# for each node which has rules of each class assigned to it. For example, +# in project2 above, for '#footer, #header', elements with id's of footer +# and header will be assigned all the rules from the classes 'span-24, +# column, and last', while divs with classes either entry or section, as +# well as any element with class of feed, is assigned all the rules from +# 'span-6 and column'. Although it is a crude way do accomplish this, it +# keeps the generated CSS separate from the core BP CSS. +# +# Also supported is plugins. The compressor looks withinBLUEPRINT_DIR/blueprint/plugins +# to match against what's passed. If the plugin name matches, it will append +# PLUGIN/(screen|print|ie).css to the corresponding CSS file. It will append +# the plugin CSS to all three CSS files if there is a CSS file present named +# as the plugin (e.g. the fancy-type plugin with a fancy-type.css file found +# within the plugin directory) +# +# In Ruby, the structure would look like this: +# +# { +# 'project1' => { +# 'path' => '/path/to/my/project/stylesheets', +# 'namespace' => 'custom-namespace-1-', +# 'custom_css' => { +# 'ie.css' => ['custom-ie.css'], +# 'print.css' => ['docs.css', 'my-print-styles.css'], +# 'screen.css' => ['subfolder-of-stylesheets/sub_css.css'] +# }, +# 'custom_layout' => { +# 'column_count' => 12, +# 'column_width' => 70, +# 'gutter_width' => 10 +# } +# }, +# 'project2' => { +# 'path' => '/path/to/different/stylesheets', +# 'namespace' => 'different-namespace-', +# 'custom_css' => { +# 'screen.css' => ['custom_screen.css'] +# }, +# 'semantic_classes' => { +# '#footer, #header' => 'column span-24 last', +# '#content' => 'column span-18 border', +# '#extra-content' => 'last span-6 column', +# 'div#navigation' => 'last span-24 column', +# 'div.section, div.entry, .feeds' => 'span-6 column' +# }, +# 'plugins' => ['fancy-type', 'buttons', 'validations'] +# }, +# 'project3' => { +# 'path' => '/path/to/another/projects/styles' +# } +# } + +Blueprint::Compressor.new.generate! diff --git a/app/assets/stylesheets/lib/settings.example.yml b/app/assets/stylesheets/lib/settings.example.yml new file mode 100644 index 0000000..6cb2028 --- /dev/null +++ b/app/assets/stylesheets/lib/settings.example.yml @@ -0,0 +1,33 @@ +# refer to http://www.yaml.org/spec/1.1/ for clarification on YAML collections +project1: + path: /path/to/my/project/stylesheets + namespace: custom-namespace-1- + custom_css: + ie.css: + - custom-ie.css + print.css: + - docs.css + - my-print-styles.css + screen.css: + - subfolder-of-stylesheets/sub_css.css + custom_layout: + column_count: 12 + column_width: 70 + gutter_width: 10 + plugins: + - fancy-type + - buttons +project2: + path: /path/to/different/stylesheets + namespace: different-namespace- + custom_css: + screen.css: + - custom_screen.css + semantic_classes: + "#footer, #header": ".span-24" + "#content": ".span-17, .colborder" + "#extra-content": ".span-6" + "div#navigation": ".span_24" + "div.section, div.entry, .feeds": ".span-6" +project3: + path: /path/to/another/projects/styles diff --git a/app/assets/stylesheets/lib/validate.rb b/app/assets/stylesheets/lib/validate.rb new file mode 100644 index 0000000..bb1ae08 --- /dev/null +++ b/app/assets/stylesheets/lib/validate.rb @@ -0,0 +1,15 @@ +#!/usr/bin/env ruby + +require "blueprint/blueprint" +require "blueprint/validator" + +# This script will validate the core Blueprint files. +# +# The files are not completely valid. This has to do +# with a small number of CSS hacks needed to ensure +# consistent rendering across browsers. +# +# To add your own CSS files for validation, see +# /lib/blueprint/validator.rb + +Blueprint::Validator.new.validate diff --git a/app/assets/stylesheets/templates/psd/fixed-width.psd b/app/assets/stylesheets/templates/psd/fixed-width.psd new file mode 100644 index 0000000..57e4445 Binary files /dev/null and b/app/assets/stylesheets/templates/psd/fixed-width.psd differ diff --git a/app/assets/stylesheets/tests/index.html b/app/assets/stylesheets/tests/index.html new file mode 100644 index 0000000..8cb4151 --- /dev/null +++ b/app/assets/stylesheets/tests/index.html @@ -0,0 +1,106 @@ + + + + + + Blueprint test pages + + + + + + + + + +
+

Blueprint test pages

+
+ +

Welcome to the Blueprint test pages. The HTML files below test most HTML elements, as well as most classes provided by Blueprint.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Blueprint core tests
Test pageMain files testedDescription
Sample page + grid.css, + typography.css + A simple sample page, with common elements.
Grid + grid.css + Tests classes provided by grid.css.
Typography + typography.css + Tests HTML elements which gets set in typography.css.
Forms + forms.css + Tests classes and default look provided by forms.css.
+ + + + + + + + + + + + + + + + + +
Blueprint plugin tests
Test pageMain files testedDescription
Link icons + link-icons/screen.css + Shows the different links the link-icons plugin supports.
+ +

Note about the compressed versions: + These test files utilize the compressed files. In other words, if you change any of the source files, + you'll have to re-compress them with the ruby script in the scripts folder to see any changes.

+ +
+

For more information and help, try these resources:

+ +
+ +

+ Valid HTML 4.01 Strict

+ +
+ + diff --git a/app/assets/stylesheets/tests/parts/elements.html b/app/assets/stylesheets/tests/parts/elements.html new file mode 100644 index 0000000..28202d0 --- /dev/null +++ b/app/assets/stylesheets/tests/parts/elements.html @@ -0,0 +1,247 @@ + + + + + + Blueprint HTML Elements Tests + + + + + + + + + +
+

Tests for common HTML elements

+
+
PARAGRAPHS & BOXES
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor sub text ut labore et sup text magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+
+ +
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+ +
+ +
+

Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

+
+ +
+
+ +
LISTS
+ +
+
    +
  • Unordered list test
  • +
  • Another list element. Lorem ipsum dolor sit amet, consectetur adipisicing elit.
  • +
  • Yet another element in the list
  • +
  • Some long text. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Lorem ipsum dolor sit amet, consectetur adipisicing elit.
  • +
+
    +
  1. Ordered list test
  2. +
  3. Another list element
  4. +
  5. Yet another element in the list
  6. +
+
+ +
+
    +
  1. Ordered list
  2. +
  3. Here's a nested unordered list +
      +
    • Nested Unordered list
    • +
    • Nested ordered list +
        +
      1. The first
      2. +
      3. And the second
      4. +
      +
    • +
    +
  4. +
  5. Ordered List item
  6. +
  7. Nested Ordered list +
      +
    1. Some point
    2. +
    3. Nested Unordered list +
        +
      • The first
      • +
      • And the second
      • +
      +
    4. +
    +
  8. +
+
+ +
+
+
definition list dt
+
definition list dd
+
definition list dt
+
definition list dd
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit adipisicing elit adipisicing elit
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit adipisicing elit adipisicing elit
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit adipisicing elit adipisicing elit
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit adipisicing elit adipisicing elit
+
+
+
+ +
HEADINGS
+ +
+

H1: Lorem ipsum dolor sit amet

+

H2: Lorem ipsum dolor sit amet, consectetur elit

+

H3: Lorem ipsum dolor sit amet, consectetur adipisicing elit

+

H4: Lorem ipsum dolor sit amet, consectetur adipisicing elit adipis

+
H5: Lorem ipsum dolor sit amet, consectetur adipisicing elit adipisicing elit adipisicing elit
+
H6: Lorem ipsum dolor sit amet, consectetur adipisicing elit adipisicing elit adipisicing elit
+
+ +
+

Heading 1


+

Heading 2


+

Heading 3


+

Heading 4


+
Heading 5

+
Heading 6
+
+ +
+

Heading 1

+

Heading 2

+

Heading 3

+

Heading 4

+
Heading 5
+
Heading 6
+
+
+ +
MISC ELEMENTS
+ +
+

+ <strong>
+ <del> deleted
+ <dfn> dfn
+ <em> emphasis +

+

+ <a> anchor
+ <a> a + href +

+

+ <abbr> abbr - extended text when mouseover.
+ <acronym> acronym - extended text when mouseover. +

+
+ <address>
+ Donald Duck
+ Box 555
+ Disneyland +
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore dolore.

+
+ +
+ + + + + + + + + + + + + +
A standard test table with a caption, tr, td elements
Table Header OneTable Header Two
TD OneTD Two
TD colspan 2
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
A test table with a thead, tfoot, and tbody elements
Table Header OneTable Header Two
tfoot footer
TD OneTD Two
TD OneTD Two
TD OneTD Two
TD OneTD Two
+
+ +
+ +
<pre>
+pre  space1
+pre  space1
+pre    space2
+pre    space2
+pre tab
+pre tab
+ + <code> + Not indented + indent1 + indent1 + indent2 + indent3 + + <tt> + This tt text should be monospaced + and + wrap as if + one line of text + even though the code has newlines, spaces, and tabs. + It should be the same size as <p> text. + +
+
+ +

+ + Valid HTML 4.01 Strict + +

+ +
+ + diff --git a/app/assets/stylesheets/tests/parts/forms.html b/app/assets/stylesheets/tests/parts/forms.html new file mode 100644 index 0000000..48726ab --- /dev/null +++ b/app/assets/stylesheets/tests/parts/forms.html @@ -0,0 +1,204 @@ + + + + + + Blueprint Forms Tests + + + + + + + +
+

Forms

+
+ +
+ + + +
+ Simple sample form +

+
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+ + +

+ +
+ + +
+
+ +
+ This is a <div> with the class .error. Link. +
+
+ This is a <div> with the class .notice. Link. +
+
+ This is a <div> with the class .info. Link. +
+
+ This is a <div> with the class .success. Link. +
+ +
+ Select, checkboxes, lists + +

+
+ +

+ +

+
+ +

+ +


+ Radio one
+ Radio two
+ Radio three
+

+ +


+ Check one
+ Check two
+ Check three
+

+ +
+ +
+ +
+ +
+ Alignment + +

+ + +

+ +

+ + +

+ +

+ + + + +

+ +
+ +
+ +
+
+
+ A form with class "inline" +
+ + +
+
+ some text +
+
+ checkbox one +
+
+ + +
+ +
+ +
+
+ +
+
+ +
+ +
+ +
+ +

+ + Valid HTML 4.01 Strict +

+ +
+ + diff --git a/app/assets/stylesheets/tests/parts/grid.html b/app/assets/stylesheets/tests/parts/grid.html new file mode 100644 index 0000000..a0c9a7d --- /dev/null +++ b/app/assets/stylesheets/tests/parts/grid.html @@ -0,0 +1,163 @@ + + + + + + Blueprint Grid Tests + + + + + + + + +
+

Blueprint Tests: grid.css

+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+
+
+

1

+

2

+

3

+

4

+

5

+

3

+

1

+

2

+

3

+

4

+

5

+

3

+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

1

+

2

+

3

+

4

+

5

+

6

+

24

+

2

+

23

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+
+
+
TESTING .PUSH-1 TO .PUSH-5
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+
+
TESTING .PULL-1 TO .PULL-5
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+
+
+
+

+ + Valid HTML 4.01 Strict + +

+
+
+ + diff --git a/app/assets/stylesheets/tests/parts/plugins/link-icons.html b/app/assets/stylesheets/tests/parts/plugins/link-icons.html new file mode 100644 index 0000000..dc6c8d7 --- /dev/null +++ b/app/assets/stylesheets/tests/parts/plugins/link-icons.html @@ -0,0 +1,89 @@ + + + + + + Blueprint Sample Page + + + + + + + + + + +
+

link-icons examples

+
+

This sample page demonstrates the link-icons plugin.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Sample linkDescriptionRegular expression of href anchor attribute
An external linkLinks that starts with http://.http://.*
A secure external linkLinks that starts with https://.https://.*
Mail someoneLinks that starts with mailto:.mailto:.*
A PDF documentLinks that ends with .pdf..*\.pdf
A word documentLinks that ends with .doc..*\.doc
A Microsoft Excel workbookLinks that ends with .xls..*\.xls
An RSS feedLinks that ends with .rss..*\.rss
An RDF feedLinks that ends with .rdf..*\.rdf
An AIM instant messaging linkLinks that starts with aim:.aim:.*
+
+
+

+ + Valid HTML 4.01 Strict + +

+
+ + diff --git a/app/assets/stylesheets/tests/parts/sample.html b/app/assets/stylesheets/tests/parts/sample.html new file mode 100644 index 0000000..d1d0f39 --- /dev/null +++ b/app/assets/stylesheets/tests/parts/sample.html @@ -0,0 +1,75 @@ + + + + + + Blueprint Sample Page + + + + + + + + + + +
+

A simple sample page

+
+

This sample page demonstrates a tiny fraction of what you get with Blueprint.

+
+
+
Here's a box
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip.

+
+
+
And another box
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat laboris nisi ut aliquip.

+
+
+
This box is aligned with the sidebar
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip.

+
+
+
+
+

testLorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc congue ipsum vestibulum libero. Aenean vitae justo. Nam eget tellus. Etiam convallis, est eu lobortis mattis, lectus tellus tempus felis, a ultricies erat ipsum at metus.

+

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi et risus. Aliquam nisl. Nulla facilisi. Cras accumsan vestibulum ante. Vestibulum sed tortor. Praesent SMALL CAPS tempus fringilla elit. Ut elit diam, sagittis in, nonummy in, gravida non, nunc. Ut orci. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nam egestas, orci eu imperdiet malesuada, nisl purus fringilla odio, quis commodo est orci vitae justo. Aliquam placerat odio tincidunt nulla. Cras in libero. Aenean rutrum, magna non tristique posuere, erat odio eleifend nisl, non convallis est tortor blandit ligula. Nulla id augue.

+

Nullam mattis, odio ut tempus facilisis, metus nisl facilisis metus, auctor consectetuer felis ligula nec mauris. Vestibulum odio erat, fermentum at, commodo vitae, ultrices et, urna. Mauris vulputate, mi pulvinar sagittis condimentum, sem nulla aliquam velit, sed imperdiet mi purus eu magna. Nulla varius metus ut eros. Aenean aliquet magna eget orci. Class aptent taciti sociosqu ad litora.

+

Vivamus euismod. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse vel nibh ut turpis dictum sagittis. Aliquam vel velit a elit auctor sollicitudin. Nam vel dui vel neque lacinia pretium. Quisque nunc erat, venenatis id, volutpat ut, scelerisque sed, diam. Mauris ante. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec mattis. Morbi dignissim sollicitudin libero. Nulla lorem.

+
+

Integer cursus ornare mauris. Praesent nisl arcu, imperdiet eu, ornare id, scelerisque ut, nunc. Praesent sagittis erat sed velit tempus imperdiet. Ut tristique, ante in interdum hendrerit, erat enim faucibus felis, quis rutrum mauris lorem quis sem. Vestibulum ligula nisi, mattis nec, posuere et, blandit eu, ligula. Nam suscipit placerat odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque tortor libero, venenatis vitae, rhoncus eu, placerat ut, mi. Nulla nulla.

+
+

Maecenas vel metus quis magna pharetra fermentum. Integer sit amet tortor. Maecenas porttitor, pede sed gravida auctor, nulla augue aliquet elit, at pretium urna orci ut metus. Aliquam in dolor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, tellus id ornare posuere, quam nunc accumsan turpis, at convallis tellus orci et nisl. Phasellus congue neque a lorem.

+
+
+
This is a nested column
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

+
+
+
This is another nested column
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

+
+
+
+

A Simple Sidebar

+

Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue.

+

Mauris a lectus. Aliquam erat volutpat. Phasellus ultrices mi a sapien. Nunc rutrum egestas lorem. Duis ac sem sagittis elit tincidunt gravida. Mauris a lectus. Aliquam erat volutpat. Phasellus ultrices mi a sapien. Nunc rutrum egestas lorem. Duis ac sem sagittis elit tincidunt gravida.

+

Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue.

+
Incremental leading
+

Vestibulum ante ipsum primis in faucibus orci luctus vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue. sed aliquet vehicula, lectus tellus.

+

Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue. sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue. ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ornare mattis nunc. Mauris venenatis, pede sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue. sed aliquet vehicula, lectus tellus pulvinar neque, non cursus sem nisi vel augue.

+
+
+

You may pick and choose amongst these and many more features, so be bold.

+
+

+ + Valid HTML 4.01 Strict + +

+
+ + diff --git a/app/assets/stylesheets/tests/parts/test-small.jpg b/app/assets/stylesheets/tests/parts/test-small.jpg new file mode 100644 index 0000000..aa599d9 Binary files /dev/null and b/app/assets/stylesheets/tests/parts/test-small.jpg differ diff --git a/app/assets/stylesheets/tests/parts/test.jpg b/app/assets/stylesheets/tests/parts/test.jpg new file mode 100644 index 0000000..0107be2 Binary files /dev/null and b/app/assets/stylesheets/tests/parts/test.jpg differ diff --git a/app/assets/stylesheets/tests/parts/valid.png b/app/assets/stylesheets/tests/parts/valid.png new file mode 100644 index 0000000..dd20e49 Binary files /dev/null and b/app/assets/stylesheets/tests/parts/valid.png differ diff --git a/app/controllers/application_controller.rb~ b/app/controllers/application_controller.rb~ deleted file mode 100644 index a16e3c0..0000000 --- a/app/controllers/application_controller.rb~ +++ /dev/null @@ -1,9 +0,0 @@ -class ApplicationController < ActionController::Base - protect_from_forgery - before_filter :require_login - - def not_authenticated - redirect_to root_path, :alert => "Please login first." - end - -end diff --git a/app/controllers/upload_controller.rb~ b/app/controllers/upload_controller.rb~ deleted file mode 100644 index 8686c9b..0000000 --- a/app/controllers/upload_controller.rb~ +++ /dev/null @@ -1,16 +0,0 @@ -class UploadController < ApplicationController - -skip_before_filter :require_login - -#Page where all uploads are available -def index -end - -#Shows only one chosen file? with description. -def show -end - -def edit -end - -end diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index 96644b9..04b9e14 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -5,7 +5,7 @@ class UploadsController < ApplicationController #Page where all Uploads are available def index @files = Upload.all - + @title = "Downloads" respond_to do |format| format.html # index.html.erb format.json { render json: @files } diff --git a/app/controllers/uploads_controller.rb~ b/app/controllers/uploads_controller.rb~ deleted file mode 100644 index 96644b9..0000000 --- a/app/controllers/uploads_controller.rb~ +++ /dev/null @@ -1,82 +0,0 @@ -class UploadsController < ApplicationController - -skip_before_filter :require_login - -#Page where all Uploads are available -def index -@files = Upload.all - - respond_to do |format| - format.html # index.html.erb - format.json { render json: @files } - end -end - -#Shows only one chosen file? with description. -def show - @file = Upload.find(params[:id]) - respond_to do |format| - format.html # show.html.erb - format.json { render json: @file } - end -end - -def new - @file = Upload.new - - respond_to do |format| - format.html # new.html.erb - format.json { render json: @file } - end - end - - # GET /files/1/edit - def edit - @file = Upload.find(params[:id]) - end - - # POST /files - # POST /files.json - def create - @file = Upload.new(params[:upload]) - - respond_to do |format| - if @file.save - format.html { redirect_to(:uploads, :notice => 'file was successfully created.') } - format.json { render json: @file, status: :created, location: @file } - else - format.html { render action: "new" } - format.json { render json: @file.errors, status: :unprocessable_entity } - end - end - end - - # PUT /files/1 - # PUT /files/1.json - def update - @file = Upload.find(params[:id]) - - respond_to do |format| - if @file.update_attributes(params[:file]) - format.html { redirect_to @file, notice: 'file was successfully updated.' } - format.json { head :ok } - else - format.html { render action: "edit" } - format.json { render json: @file.errors, status: :unprocessable_entity } - end - end - end - - # DELETE /files/1 - # DELETE /files/1.json - def destroy - @file = Upload.find(params[:id]) - @file.destroy - - respond_to do |format| - format.html { redirect_to uploads_url } - format.json { head :ok } - end - end - -end diff --git a/app/controllers/user_sessions_controller.rb b/app/controllers/user_sessions_controller.rb index fb8f992..498c4d0 100644 --- a/app/controllers/user_sessions_controller.rb +++ b/app/controllers/user_sessions_controller.rb @@ -4,6 +4,10 @@ def new @user = User.new end +def index + redirect_to(:users) +end + def create respond_to do |format| if @user = login(params[:username],params[:password]) diff --git a/app/controllers/user_sessions_controller.rb~ b/app/controllers/user_sessions_controller.rb~ deleted file mode 100644 index fb8f992..0000000 --- a/app/controllers/user_sessions_controller.rb~ +++ /dev/null @@ -1,23 +0,0 @@ -class UserSessionsController < ApplicationController - skip_before_filter :require_login, :except => [:destroy] - def new - @user = User.new - end - - def create - respond_to do |format| - if @user = login(params[:username],params[:password]) - format.html { redirect_back_or_to(:users, :notice => 'Login successful.') } - format.xml { render :xml => @user, :status => :created, :location => @user } - else - format.html { flash.now[:alert] = "Login failed."; render :action => "new" } - format.xml { render :xml => @user.errors, :status => :unprocessable_entity } - end - end - end - - def destroy - logout - redirect_to(:users, :notice => 'Logged out!') - end -end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index d0ca339..212c1db 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -6,7 +6,7 @@ class UsersController < ApplicationController def index @users = User.all - + @title = "Main page" respond_to do |format| format.html # index.html.erb format.json { render json: @users } @@ -17,7 +17,7 @@ def index # GET /users/1.json def show @user = User.find(params[:id]) - + @title = @user.username respond_to do |format| format.html # show.html.erb format.json { render json: @user } @@ -28,7 +28,7 @@ def show # GET /users/new.json def new @user = User.new - + @title = "New user" respond_to do |format| format.html # new.html.erb format.json { render json: @user } @@ -37,6 +37,7 @@ def new # GET /users/1/edit def edit + @title = "Edit user profile" @user = User.find(params[:id]) end @@ -44,7 +45,7 @@ def edit # POST /users.json def create @user = User.new(params[:user]) - + @title = "Edit user profile1" respond_to do |format| if @user.save format.html { redirect_to(:users, :notice => 'User was successfully created.') } diff --git a/app/controllers/users_controller.rb~ b/app/controllers/users_controller.rb~ index d0ca339..d27aba9 100644 --- a/app/controllers/users_controller.rb~ +++ b/app/controllers/users_controller.rb~ @@ -6,7 +6,7 @@ class UsersController < ApplicationController def index @users = User.all - + @title = "Main page" respond_to do |format| format.html # index.html.erb format.json { render json: @users } @@ -17,7 +17,7 @@ class UsersController < ApplicationController # GET /users/1.json def show @user = User.find(params[:id]) - + @title = "@user.username" respond_to do |format| format.html # show.html.erb format.json { render json: @user } @@ -28,7 +28,7 @@ class UsersController < ApplicationController # GET /users/new.json def new @user = User.new - + @title = "New user" respond_to do |format| format.html # new.html.erb format.json { render json: @user } @@ -37,6 +37,7 @@ class UsersController < ApplicationController # GET /users/1/edit def edit + @title = "Edit user profile" @user = User.find(params[:id]) end @@ -44,7 +45,7 @@ class UsersController < ApplicationController # POST /users.json def create @user = User.new(params[:user]) - + @title = "Edit user profile1" respond_to do |format| if @user.save format.html { redirect_to(:users, :notice => 'User was successfully created.') } diff --git a/app/models/upload.rb~ b/app/models/upload.rb~ deleted file mode 100644 index a9e8f3b..0000000 --- a/app/models/upload.rb~ +++ /dev/null @@ -1,3 +0,0 @@ -class Upload < ActiveRecord::Base - attr_accessible :name, :description -end diff --git a/app/models/uploads.rb~ b/app/models/uploads.rb~ deleted file mode 100644 index e854aab..0000000 --- a/app/models/uploads.rb~ +++ /dev/null @@ -1,5 +0,0 @@ -class Uploads < ActiveRecord::Base - mount_uploader :file, FileUploader - attr_accessible :name, :description, :file - -end diff --git a/app/models/user.rb~ b/app/models/user.rb~ deleted file mode 100644 index afee0b9..0000000 --- a/app/models/user.rb~ +++ /dev/null @@ -1,22 +0,0 @@ -class User < ActiveRecord::Base - attr_accessible :email, :password, :password_confirmation, :image, :username - authenticates_with_sorcery! - - email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i - - validates_length_of :password, :within => 3..25, - :message => "password must be at least 3 and no more than 25 characters long", - :if => :password - validates_confirmation_of :password, - :message => "should match confirmation", - :if => :password - validates :email, - :presence => true, - :format => { :with => email_regex }, - :uniqueness => { :case_sensetive => false } - validates :name, - :presence => true, - :length => { :maximum => 50 } - - mount_uploader :image, ImageUploader -end diff --git a/app/uploaders/avatar_uploader.rb~ b/app/uploaders/avatar_uploader.rb~ deleted file mode 100644 index 41c4655..0000000 --- a/app/uploaders/avatar_uploader.rb~ +++ /dev/null @@ -1,48 +0,0 @@ -# encoding: utf-8 - -class AvatarUploader < CarrierWave::Uploader::Base - - # Include RMagick or MiniMagick support: - include CarrierWave::RMagick - # include CarrierWave::MiniMagick - - # Choose what kind of storage to use for this uploader: - storage :file - # storage :fog - - # Override the directory where uploaded files will be stored. - # This is a sensible default for uploaders that are meant to be mounted: - def store_dir - "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" - end - - # Provide a default URL as a default if there hasn't been a file uploaded: - # def default_url - # "/images/fallback/" + [version_name, "default.png"].compact.join('_') - # end - - # Process files as they are uploaded: - # process :scale => [200, 300] - # - # def scale(width, height) - # # do something - # end - - # Create different versions of your uploaded files: - # version :thumb do - # process :scale => [50, 50] - # end - - # Add a white list of extensions which are allowed to be uploaded. - # For images you might use something like this: - # def extension_white_list - # %w(jpg jpeg gif png) - # end - - # Override the filename of the uploaded files: - # Avoid using model.id or version_name here, see uploader/store.rb for details. - # def filename - # "something.jpg" if original_filename - # end - -end diff --git a/app/uploaders/image_uploader.rb~ b/app/uploaders/image_uploader.rb~ deleted file mode 100644 index 6c12e7c..0000000 --- a/app/uploaders/image_uploader.rb~ +++ /dev/null @@ -1,48 +0,0 @@ -# encoding: utf-8 - -class ImageUploader < CarrierWave::Uploader::Base - - # Include RMagick or MiniMagick support: - include CarrierWave::RMagick - # include CarrierWave::MiniMagick - - # Choose what kind of storage to use for this uploader: - storage :file - # storage :fog - - # Override the directory where uploaded files will be stored. - # This is a sensible default for uploaders that are meant to be mounted: - def store_dir - "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" - end - - # Provide a default URL as a default if there hasn't been a file uploaded: - # def default_url - # "/images/fallback/" + [version_name, "default.png"].compact.join('_') - # end - - # Process files as they are uploaded: - # process :scale => [200, 300] - # - # def scale(width, height) - # # do something - # end - - # Create different versions of your uploaded files: - version :thumb do - process :resize_to_fit => [200, 75] - end - - # Add a white list of extensions which are allowed to be uploaded. - # For images you might use something like this: - # def extension_white_list - # %w(jpg jpeg gif png) - # end - - # Override the filename of the uploaded files: - # Avoid using model.id or version_name here, see uploader/store.rb for details. - # def filename - # "something.jpg" if original_filename - # end - -end diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb new file mode 100644 index 0000000..16961b7 --- /dev/null +++ b/app/views/layouts/_header.html.erb @@ -0,0 +1,15 @@ +
+ <%= image_tag("logo.png", :alt => "Ruby School", :class => "round") %> + +
\ No newline at end of file diff --git a/app/views/layouts/_stylesheets.html.erb b/app/views/layouts/_stylesheets.html.erb new file mode 100644 index 0000000..5582ed1 --- /dev/null +++ b/app/views/layouts/_stylesheets.html.erb @@ -0,0 +1,7 @@ + + <%= stylesheet_link_tag 'blueprint/screen', :media => 'screen' %> + <%= stylesheet_link_tag 'blueprint/print', :media => 'print' %> + + <%= stylesheet_link_tag 'custom', :media => 'screen' %> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 2e5d423..a519701 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -1,29 +1,53 @@ - Tutorial - <%= stylesheet_link_tag "application" %> - <%= javascript_include_tag "application" %> + Social Network | <%= @title %> + + + <%= stylesheet_link_tag 'blueprint/screen', :media => 'screen' %> + <%= stylesheet_link_tag 'blueprint/print', :media => 'print' %> + + <%= stylesheet_link_tag 'custom', :media => 'screen' %> + + + <%= javascript_include_tag "application" %> <%= csrf_meta_tags %> +
- -
-

<%= notice %>

-

<%= alert %>

-
- <%= yield %> +
+ <%= image_tag("logo.png", :alt => "Ruby School", :class => "round") %> + +
+ +
+

<%= notice %>

+

<%= alert %>

+
+ +
+ <%= yield %> +
+
- +
+ +
+ diff --git a/app/views/layouts/application.html.erb~ b/app/views/layouts/application.html.erb~ index f51e119..a519701 100644 --- a/app/views/layouts/application.html.erb~ +++ b/app/views/layouts/application.html.erb~ @@ -1,29 +1,53 @@ - Tutorial - <%= stylesheet_link_tag "application" %> - <%= javascript_include_tag "application" %> + Social Network | <%= @title %> + + + <%= stylesheet_link_tag 'blueprint/screen', :media => 'screen' %> + <%= stylesheet_link_tag 'blueprint/print', :media => 'print' %> + + <%= stylesheet_link_tag 'custom', :media => 'screen' %> + + + <%= javascript_include_tag "application" %> <%= csrf_meta_tags %> +
- -
-

<%= notice %>

-

<%= alert %>

-
- <%= yield %> +
+ <%= image_tag("logo.png", :alt => "Ruby School", :class => "round") %> + +
+ +
+

<%= notice %>

+

<%= alert %>

+
+ +
+ <%= yield %> +
+
- +
+ +
+ diff --git a/app/views/uploads/_form.html.erb~ b/app/views/uploads/_form.html.erb~ deleted file mode 100644 index 4a84b7e..0000000 --- a/app/views/uploads/_form.html.erb~ +++ /dev/null @@ -1,38 +0,0 @@ -<%= form_for(@user) do |f| %> - <% if @user.errors.any? %> -
-

<%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:

- -
    - <% @user.errors.full_messages.each do |msg| %> -
  • <%= msg %>
  • - <% end %> -
-
- <% end %> - -
- <%= f.file_field :image %>
-
- -
- <%= f.label :username %>
- <%= f.text_field :username %> -
-
- <%= f.label :email %>
- <%= f.text_field :email %> -
-
- <%= f.label :password %>
- <%= f.password_field :password %> -
-
- <%= f.label :password_confirmation %>
- <%= f.password_field :password_confirmation %> -
- -
- <%= f.submit %> -
-<% end %> diff --git a/app/views/uploads/edit.html.erb~ b/app/views/uploads/edit.html.erb~ deleted file mode 100644 index 33b81b5..0000000 --- a/app/views/uploads/edit.html.erb~ +++ /dev/null @@ -1,6 +0,0 @@ -

Editing user

- -<%= render 'form' %> - -<%= link_to 'Show', @file %> | -<%= link_to 'Back', files_path %> diff --git a/app/views/uploads/index.html.erb~ b/app/views/uploads/index.html.erb~ deleted file mode 100644 index e978bf1..0000000 --- a/app/views/uploads/index.html.erb~ +++ /dev/null @@ -1,24 +0,0 @@ -

Listing Uploads

- - - - - - - - - - -<% @files.each do |file| %> - - - - - - - -<% end %> -
FilenameDescription
<%= file.name %><%= file.description %><%= link_to 'Show', file %><%= link_to 'Edit', edit_upload_path(file) %><%= link_to 'Destroy', file, confirm: 'Are you sure?', method: :delete %>
- -
- <%= link_to 'New', new_upload_path %> diff --git a/app/views/uploads/new.html.erb~ b/app/views/uploads/new.html.erb~ deleted file mode 100644 index 9310bfb..0000000 --- a/app/views/uploads/new.html.erb~ +++ /dev/null @@ -1,5 +0,0 @@ -

New user

- -<%= render 'form' %> - -<%= link_to 'Back', files_path %> diff --git a/app/views/uploads/show.html.erb~ b/app/views/uploads/show.html.erb~ deleted file mode 100644 index 9407c67..0000000 --- a/app/views/uploads/show.html.erb~ +++ /dev/null @@ -1,19 +0,0 @@ -

<%= notice %>

- -

- File: - <%= link_to "#{@file.name}",file_url(@file) %> -

- -

- Name: - <%= @file.name %> -

- -

- Description: - <%= @file.description %> -

- -<%= link_to 'Edit', edit_upload_path(@file) %> | -<%= link_to 'Back', uploads_path %> diff --git a/app/views/user_sessions/_form.htm.erb~ b/app/views/user_sessions/_form.htm.erb~ deleted file mode 100644 index e69de29..0000000 diff --git a/app/views/user_sessions/_form.html.erb~ b/app/views/user_sessions/_form.html.erb~ deleted file mode 100644 index dc3e4de..0000000 --- a/app/views/user_sessions/_form.html.erb~ +++ /dev/null @@ -1,13 +0,0 @@ -<%= form_tag user_sessions_path, :method => :post do %> -
- <%= label_tag :username %>
- <%= text_field_tag :username %> -
-
- <%= label_tag :password %>
- <%= password_field_tag :password %> -
-
- <%= submit_tag "Login" %> -
-<% end %> diff --git a/app/views/user_sessions/create.html.erb~ b/app/views/user_sessions/create.html.erb~ deleted file mode 100644 index b25f738..0000000 --- a/app/views/user_sessions/create.html.erb~ +++ /dev/null @@ -1,2 +0,0 @@ -

UserSessions#create

-

Find me in app/views/user_sessions/create.html.erb

diff --git a/app/views/user_sessions/destroy.html.erb~ b/app/views/user_sessions/destroy.html.erb~ deleted file mode 100644 index 50ebdef..0000000 --- a/app/views/user_sessions/destroy.html.erb~ +++ /dev/null @@ -1,2 +0,0 @@ -

UserSessions#destroy

-

Find me in app/views/user_sessions/destroy.html.erb

diff --git a/app/views/user_sessions/new.html.erb~ b/app/views/user_sessions/new.html.erb~ deleted file mode 100644 index a55994d..0000000 --- a/app/views/user_sessions/new.html.erb~ +++ /dev/null @@ -1,5 +0,0 @@ -

Login

- -<%= render 'form' %> - -<%= link_to 'Back', user_sessions_path %> diff --git a/app/views/users/_form.html.erb b/app/views/users/_form.html.erb index 4a84b7e..7212941 100644 --- a/app/views/users/_form.html.erb +++ b/app/views/users/_form.html.erb @@ -1,38 +1,44 @@ <%= form_for(@user) do |f| %> - <% if @user.errors.any? %> -
-

<%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:

- -
    - <% @user.errors.full_messages.each do |msg| %> -
  • <%= msg %>
  • - <% end %> -
-
- <% end %> - -
+ <% if @user.errors.any? %> +
+

<%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:

+ +
    + <% @user.errors.full_messages.each do |msg| %> +
  • <%= msg %>
  • + <% end %> +
+
+<% end %> + +
<%= f.file_field :image %>
-
+
-
+
<%= f.label :username %>
<%= f.text_field :username %> -
-
+
+ +
<%= f.label :email %>
<%= f.text_field :email %> -
-
+
+ +
<%= f.label :password %>
<%= f.password_field :password %> -
-
+
+ +
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation %> -
-
-
+
+ + + +
<%= f.submit %> -
+ + <% end %> diff --git a/app/views/users/_form.html.erb~ b/app/views/users/_form.html.erb~ index fbd0370..4a84b7e 100644 --- a/app/views/users/_form.html.erb~ +++ b/app/views/users/_form.html.erb~ @@ -11,6 +11,10 @@ <% end %> +
+ <%= f.file_field :image %>
+
+
<%= f.label :username %>
<%= f.text_field :username %> @@ -25,7 +29,7 @@
<%= f.label :password_confirmation %>
- <%= f.password_field :password_confirmation %> + <%= f.password_field :password_confirmation %>
diff --git a/app/views/users/edit.html.erb~ b/app/views/users/edit.html.erb~ new file mode 100644 index 0000000..b84cbb1 --- /dev/null +++ b/app/views/users/edit.html.erb~ @@ -0,0 +1,6 @@ +

Editing user

+ +

<%= render 'form' %>

+ +<%= link_to 'Show', @user %> | +<%= link_to 'Back', users_path %> diff --git a/app/views/users/index.html.erb~ b/app/views/users/index.html.erb~ deleted file mode 100644 index b2416c5..0000000 --- a/app/views/users/index.html.erb~ +++ /dev/null @@ -1,29 +0,0 @@ -

Listing users

- - - - - - - - - - - - -<% @users.each do |user| %> - - - - - - - - - -<% end %> -
UsernameEmailCrypted passwordSalt
<%= user.username %><%= user.email %><%= user.crypted_password %><%= user.salt %><%= link_to 'Show', user %><%= link_to 'Edit', edit_user_path(user) %><%= link_to 'Destroy', user, confirm: 'Are you sure?', method: :delete %>
- -
- -<%= link_to 'New User', new_user_path %> diff --git a/app/views/users/show.html.erb~ b/app/views/users/show.html.erb~ deleted file mode 100644 index 02db21b..0000000 --- a/app/views/users/show.html.erb~ +++ /dev/null @@ -1,19 +0,0 @@ -

<%= notice %>

- -

- Image: - <%= image_tag @user.image_url(:thumb)%> -

- -

- Username: - <%= @user.username %> -

- -

- Email: - <%= @user.email %> -

- -<%= link_to 'Edit', edit_user_path(@user) %> | -<%= link_to 'Back', users_path %> diff --git a/config/application.rb b/config/application.rb index cacb652..a58197a 100644 --- a/config/application.rb +++ b/config/application.rb @@ -2,6 +2,8 @@ require 'rails/all' + + if defined?(Bundler) # If you precompile assets before deploying to production, use this line Bundler.require(*Rails.groups(:assets => %w(development test))) @@ -11,6 +13,7 @@ module SocialNetwork class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. diff --git a/config/application.rb~ b/config/application.rb~ new file mode 100644 index 0000000..4d36428 --- /dev/null +++ b/config/application.rb~ @@ -0,0 +1,52 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + + + +if defined?(Bundler) + # If you precompile assets before deploying to production, use this line + Bundler.require(*Rails.groups(:assets => %w(development test))) + # If you want your assets lazily compiled in production, use this line + # Bundler.require(:default, :assets, Rails.env) +end + +module SocialNetwork + class Application < Rails::Application + +config.assets.initialize_on_precompile = false + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Custom directories with classes and modules you want to be autoloadable. + # config.autoload_paths += %W(#{config.root}/extras) + + # Only load the plugins named here, in the order given (default is alphabetical). + # :all can be used as a placeholder for all plugins not explicitly named. + # config.plugins = [ :exception_notification, :ssl_requirement, :all ] + + # Activate observers that should always be running. + # config.active_record.observers = :cacher, :garbage_collector, :forum_observer + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Configure the default encoding used in templates for Ruby 1.9. + config.encoding = "utf-8" + + # Configure sensitive parameters which will be filtered from the log file. + config.filter_parameters += [:password] + + # Enable the asset pipeline + config.assets.enabled = true + + # Version of your assets, change this if you want to expire all your assets + config.assets.version = '1.0' + end +end diff --git a/config/database.yml~ b/config/database.yml~ deleted file mode 100644 index 90ab791..0000000 --- a/config/database.yml~ +++ /dev/null @@ -1,29 +0,0 @@ -# SQLite version 3.x -# gem install sqlite3 -# -# Ensure the SQLite 3 gem is defined in your Gemfile -# gem 'sqlite3' - -development: - adapter: postgresql - encoding: unicode - host: localhost - database: social_dev - pool: 5 - username: social - password: social - -# Warning: The database defined as "test" will be erased and -# re-generated from your development database when you run "rake". -# Do not set this db to the same as development or production. -test: - adapter: sqlite3 - database: db/test.sqlite3 - pool: 5 - timeout: 5000 - -production: - adapter: sqlite3 - database: db/production.sqlite3 - pool: 5 - timeout: 5000 diff --git a/config/routes.rb~ b/config/routes.rb~ deleted file mode 100644 index 8bef027..0000000 --- a/config/routes.rb~ +++ /dev/null @@ -1,68 +0,0 @@ -SocialNetwork::Application.routes.draw do - - root :to => 'users#index' - resources :user_sessions - resources :users - resources :upload - - match 'login' => 'user_sessions#new', :as => :login - match 'logout' => 'user_sessions#destroy', :as => :logout - match 'downloads' => 'uploads#index',:as => :downloads - - # The priority is based upon order of creation: - # first created -> highest priority. - - # Sample of regular route: - # match 'products/:id' => 'catalog#view' - # Keep in mind you can assign values other than :controller and :action - - # Sample of named route: - # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase - # This route can be invoked with purchase_url(:id => product.id) - - # Sample resource route (maps HTTP verbs to controller actions automatically): - # resources :products - - # Sample resource route with options: - # resources :products do - # member do - # get 'short' - # post 'toggle' - # end - # - # collection do - # get 'sold' - # end - # end - - # Sample resource route with sub-resources: - # resources :products do - # resources :comments, :sales - # resource :seller - # end - - # Sample resource route with more complex sub-resources - # resources :products do - # resources :comments - # resources :sales do - # get 'recent', :on => :collection - # end - # end - - # Sample resource route within a namespace: - # namespace :admin do - # # Directs /admin/products/* to Admin::ProductsController - # # (app/controllers/admin/products_controller.rb) - # resources :products - # end - - # You can have the root of your site routed with "root" - # just remember to delete public/index.html. - # root :to => 'welcome#index' - - # See how all your routes lay out with "rake routes" - - # This is a legacy wild controller route that's not recommended for RESTful applications. - # Note: This route will make all actions in every controller accessible via GET requests. - # match ':controller(/:action(/:id(.:format)))' -end diff --git a/db/migrate/20120213192439_create_uploads.rb~ b/db/migrate/20120213192439_create_uploads.rb~ deleted file mode 100644 index fd5b10a..0000000 --- a/db/migrate/20120213192439_create_uploads.rb~ +++ /dev/null @@ -1,10 +0,0 @@ -class CreateUploads < ActiveRecord::Migration - def change - create_table :uploads do |t| - t.string :name - t.text :description - t.string :file - t.timestamps - end - end -end diff --git a/public/assets/AUTHORS-d1c86f618341e690c55be3ca6604c471.textile b/public/assets/AUTHORS-d1c86f618341e690c55be3ca6604c471.textile new file mode 100644 index 0000000..a94b75a --- /dev/null +++ b/public/assets/AUTHORS-d1c86f618341e690c55be3ca6604c471.textile @@ -0,0 +1,43 @@ +h1. Blueprint CSS Framework Authors and Contributors + +Blueprint is based on the work of many talented people. It is +through their good intentions we are allowed to use many of the +techniques found in the framework. + +h2. Current Team + +Blueprint was realized and maintained through version 0.7.1 by +"Olav Bjorkoy":http://bjorkoy.com who has sinced passed the torch +to the current team. They are: + +Admins: +* "Christian Montoya":http://christianmontoya.net +* "Josh Clayton":http://jdclayton.com + +Contributors: +* "Franz Josef Kaiser":http://github.com/franz-josef-kaiser +* "Glenn Rempe":http://www.rempe.us/ +* "Chris Eppstein":http://chriseppstein.github.com/ +* "Sean K. Stewart":http://seankstewart.com/ + +h2. Original CSS authors + +The first iteration of Blueprint was built upon many conventions +and ideas that were developed by true CSS experts. + +The grid and typography is based on work by: +* "Jeff Croft":http://jeffcroft.com +* "Nathan Borror":http://nathanborror.com/ +* "Christian Metts":http://mintchaos.com +* "Wilson Miner":http://www.wilsonminer.com + +The CSS reset is based on work by: +* "Eric Meyer":http://www.meyerweb.com/eric + +The Fancy Type plugin is based on work by: +* "Mark Boulton":http://www.markboulton.co.uk +* "Typogrify":http://typogrify.googlecode.com + +(However, remember that these people are not involved with the +framework, so please don't waste their time or yours by asking +them for support.) \ No newline at end of file diff --git a/public/assets/CHANGELOG b/public/assets/CHANGELOG new file mode 100644 index 0000000..e62eb1a --- /dev/null +++ b/public/assets/CHANGELOG @@ -0,0 +1,168 @@ +Blueprint CSS Framework Change Log +---------------------------------------------------------------- + +Version 1.0 - Date September 29, 2010 +-- + New features: + * Added detailed explanations to core uncompressed CSS files [CMM] + * Added .info and .alert classes to forms.css [CMM] + * Fixed numerous bugs in forms, including the fieldset padding bug in IE6-8 [CMM] + * Fixed specificity problems in typography.css and grid.css [CMM] + * See Lighthouse for more bug fixes + +Version 0.9 - Date May 29, 2009 +-- + New features: + * Changed all conditional comments to [if lt IE 8] for IE 8 compatibility [CMM] + * Updated forms code to align inline form elements, with additions for IE 6 [CMM] + * Use
for inline forms + * Use classes "text", "button", "radio" and "checkbox" on inputs for IE 6 compatibility + + +Version 0.8 - Date November 11, 2008 +-- + New features: + * Much of the flexibility of 0.6 has been pushed back into the core [CMM] + * Plugins from 0.6 are now back in the core [CMM] + + Bug fixes: + * Lots. See http://blueprintcss.lighthouseapp.com/projects/15318-blueprint-css + + +Version 0.7.1 - Date February 21, 2008 +-- + New features: + * Rubydoc for compressor [JC] + + Bug fixes: + * Fixed bug in the compressor related to Rubygems. [JC] + * should be inline, not block. [OFB] + + +Version 0.7 - February 19, 2008 +-- + New features: + * New directory structure. [OFB] + * New compressor script. [JC] + * Ability to set custom namespace for BP classes. [JC] + * Optional custom column count and widths. [JC] + * Ability to add your own CSS files. [JC] + * Custom output paths. [JC] + * Support for multiple projects. [JC] + * Semantic class naming from CSS rules. [JC] + * Automatic compression for plugins. [JC] + * Compressed version of ie.css. [OFB] + * Alternating table row colors. [OFB] + * Added class .showgrid to see the grid of any column or container. [OFB] + * No need for .column! You now have to use divs for columns, + but you can still use span/prepend/append for other elements as well. + In other words, div.span-x now implies that the element is a .column. [OFB] + + Bug fixes: + * Sidebar alignment in tests/sample.html. [OFB] + * Line-height on sub/sup. [OFB] + * Clearfix not properly applied to container. [OFB] + * Misc validation errors in tests. [OFB] + * Proper margin on address. [OFB] + * Unwanted bottom margin on nested lists. [OFB] + * Form labels with unwanted fancy-type indentation. [OFB] + * Proper margin on all form elements. [OFB] + * No margins for images in headings. [OFB] + * Push-x bottom margin. [OFB] + * Vertical align set to middle on tables. [OFB] + * Improved .notice, .error and .success color contrast. [OFB] + * Size of input[text]. [OFB] + * Baseline alignment of

. [OFB] + + Misc: + * Improved structure in print.css. [OFB] + * Dual-licensed under MIT and GPL licenses. [OFB] + * Changed name of .clear to .clearfix, and added .clear (clear:both;). [OFB] + + +Version 0.6 - September 21, 2007 +-- + * Created a new plugin, "iepngfix", that adds support for PNG transparency in IE5.5+ [OFB] + * Added an IE stylesheet, updated the test files and the readme accordingly [OFB] + * Re-added improved support for em units [OFB] + * Lots of minor changes to typography.css and reset.css, provided by Christian Montoya [OFB] + * Extracted the fancy typography section in typography.css to a new plugin [OFB] + * Extracted the support for CSS buttons into a new plugin. [OFB] + * Added new plugin structure. [OFB] + * Changed some default fonts so that BP works better with ClearType in XP [OFB] + * Re-added the hack for clearing floats without extra markup. [OFB] + * Added Changelog.txt to track changes in each release. [GR] + * Cleaned up and rationalized SVN dir structure. [GR, OFB] + * print.css : removed reference to 'baseline.png' as it no longer exists. [GR] + * grid.css : removed reference to '.first' css class as it no longer exists. [GR] + * Added append-13 to append-23 and prepend-13 to prepend-23 to allow pushing elements + to both extreme sides of the grid. Added test cases to tests/grid.css [GR] + * Moved test sample files to blueprint/tests sub-directory so tests stay with the code. [GR] + * Consolidated all references to release version number to screen.css [OFB] + * Added ruby script (generate_compressed_css.rb) to scripts dir, and 'csstidy' binary (OS X Universal) + for generating tidied version of Blueprint (lib/compressed.css). + * Consolidated test pages into one single page (test.html). Uses compressed stylesheet by default. This ensures test of + the chain of generation. (todo) Intention is to delete other test files if single file works well. (todo) ensure singular + test file contains latest changes to other test files. [GR] + * Moved the blueprint framework to its own folder in the package, so that the tests, script, + license and readme don't clutter up our BP folder. [OFB] + * Re-saved grid.png with Photoshop to remove Fireworks data which was bloating it. + Now its about 3KB instead of 40+KB. Resolves Issue 22. [GR] + * Moved compressed files to new compressed dir [OFB] + * print.css is now also being generated by the compressor ruby script and is available for use. + * Added new script 'validate_css.rb' which will validate all css files and present a report with + a local java binary of the W3C validator. + * Created an experimental CSS classes plugin, by popular demand. [OFB] + * Improved handling of multi-line headings. [OFB] + * Improved styling of s, you may now use .span classes on ",""],legend:[1,"
","
"],thead:[1,"
s to create tables that follow the grid. [OFB] + * Added support for indented paragraphs to the Fancy-type plugin. [OFB] + * Added a new plugin: link-icons. [OFB] + * Seperated the plugins tests into their own file. [OFB] + * Re-structured some of the tests.html sections. [OFB] + * Added class ".colborder" to grid.css. [OFB] + * Added .error, .notice and .success classes to typography.css. [OFB] + * Added tests for more elements which gets reset in reset.css [OFB, GR] + * Added forms.css, awaiting implementation. Moved form styling from typography.css [OFB] + * Updated compressor script to include forms.css [OFB] + * Improved forms.html tests for upcoming forms.css implementation. This will change based on the + markup that forms.css will use. [OFB] + * Fixed clearing image in button element bug in buttons.css [OFB] + * Fixed bug where IE6 clips pushed/pulled elements. [OFB] + * Fixed typo in grid.css formula. [OFB] + * Fixed varying formatting across core files. [OFB] + * Fixed legend element in IE6. [OFB] + * Fixed indentation in test files. [OFB] + * Removed tests for plugins not bundled with the next release. [OFB] + * Improved styling of

. [OFB] + * Fixed indentation bug in ul/ol, removed some redundant styling. [OFB] + * Fixed validation errors in tests. [OFB] + * Changed IE stylesheet condition comment to include all versions of IE. [OFB] + * Started on a new approach for the PNG plugin. Will not be included in this release. [OFB] + * Fixed incorrect rendering of ol in IE6/7. [OFB] + * Created a new, spiffier sample page. [OFB] + + +Version 0.5 - August 28, 2007 +-- + * Changed grid width from 14 to 24 columns [OFB] + * Removed 'first' CSS class and the need to apply it to the first column in a row of columns. [OFB] + * Reverted to using pixels instead of em units to specify vertical spacing due to baseline issues with + all browsers except Firefox. [OFB] + * New set of default fonts. (Experimental) [OFB] + * Added test files [OFB] + + +Version 0.4 - August 11, 2007 +-- + * All font sizes and vertical margins are now elastic, through the use of em units. + Resizing works great in every tested browser. [OFB] + * Comes with a new, compressed version of BP, which reduces the size of the core files by 60 percent. [OFB] + * Support for incremental leading, contributed by Mark Boulton. [OFB] + * Adds perfected CSS buttons, by Kevin Hale of Particletree fame. [OFB] + * Fixes all known IE bugs. [OFB] + * Loads of minor fixes and additions. [OFB] + + +Version 0.3 - March 8, 2007 +-- + * Initial release of Blueprint (versions 0.1 and 0.2 were internal only). diff --git a/public/assets/Gemfile b/public/assets/Gemfile new file mode 100644 index 0000000..96161fe --- /dev/null +++ b/public/assets/Gemfile @@ -0,0 +1,12 @@ +source "http://rubygems.org" + +gem "colored" +gem "chunky_png" + +group :test do + gem "cucumber", "0.10.2" + gem "aruba", "0.3.6" + gem "rspec", "2.6.0" + gem "capybara", "0.4.1.2" + gem "capybara-webkit", "0.3.0" +end diff --git a/public/assets/Gemfile-4edc0ff13c73681d20c9d0e21091c5ca.lock b/public/assets/Gemfile-4edc0ff13c73681d20c9d0e21091c5ca.lock new file mode 100644 index 0000000..3909338 --- /dev/null +++ b/public/assets/Gemfile-4edc0ff13c73681d20c9d0e21091c5ca.lock @@ -0,0 +1,71 @@ +GEM + remote: http://rubygems.org/ + specs: + aruba (0.3.6) + childprocess (>= 0.1.7) + cucumber (>= 0.10.0) + rspec (>= 2.5.0) + builder (3.0.0) + capybara (0.4.1.2) + celerity (>= 0.7.9) + culerity (>= 0.2.4) + mime-types (>= 1.16) + nokogiri (>= 1.3.3) + rack (>= 1.0.0) + rack-test (>= 0.5.4) + selenium-webdriver (>= 0.0.27) + xpath (~> 0.1.3) + capybara-webkit (0.3.0) + capybara (~> 0.4.1) + celerity (0.8.9) + childprocess (0.1.9) + ffi (~> 1.0.6) + chunky_png (1.2.0) + colored (1.2) + cucumber (0.10.2) + builder (>= 2.1.2) + diff-lcs (>= 1.1.2) + gherkin (>= 2.3.5) + json (>= 1.4.6) + term-ansicolor (>= 1.0.5) + culerity (0.2.15) + diff-lcs (1.1.2) + ffi (1.0.8) + gherkin (2.3.7) + json (>= 1.4.6) + json (1.5.1) + json_pure (1.5.1) + mime-types (1.16) + nokogiri (1.4.4) + rack (1.2.2) + rack-test (0.6.0) + rack (>= 1.0) + rspec (2.6.0) + rspec-core (~> 2.6.0) + rspec-expectations (~> 2.6.0) + rspec-mocks (~> 2.6.0) + rspec-core (2.6.0) + rspec-expectations (2.6.0) + diff-lcs (~> 1.1.2) + rspec-mocks (2.6.0) + rubyzip (0.9.4) + selenium-webdriver (0.2.0) + childprocess (>= 0.1.7) + ffi (>= 1.0.7) + json_pure + rubyzip + term-ansicolor (1.0.5) + xpath (0.1.4) + nokogiri (~> 1.3) + +PLATFORMS + ruby + +DEPENDENCIES + aruba (= 0.3.6) + capybara (= 0.4.1.2) + capybara-webkit (= 0.3.0) + chunky_png + colored + cucumber (= 0.10.2) + rspec (= 2.6.0) diff --git a/public/assets/LICENSE b/public/assets/LICENSE new file mode 100644 index 0000000..13076fb --- /dev/null +++ b/public/assets/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2007 - 2010 blueprintcss.org + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/public/assets/README-e925e24e9129f5413354d6198c209a45.textile b/public/assets/README-e925e24e9129f5413354d6198c209a45.textile new file mode 100644 index 0000000..f4be0a8 --- /dev/null +++ b/public/assets/README-e925e24e9129f5413354d6198c209a45.textile @@ -0,0 +1,83 @@ +h1. Blueprint CSS Framework Readme + +Welcome to Blueprint! This is a CSS framework designed to cut down on your CSS development time. It gives you a solid foundation to build your own CSS on. Here are some of the features BP provides out-of-the-box: + +* An easily customizable grid +* Sensible default typography +* A typographic baseline +* Perfected browser CSS reset +* A stylesheet for printing +* Powerful scripts for customization +* Absolutely no bloat! + +h2. Project Info + +* *Web*: "http://blueprintcss.org":http://blueprintcss.org +* *Source*: "http://github.com/joshuaclayton/blueprint-css":http://github.com/joshuaclayton/blueprint-css +* *Wiki*: "http://github.com/joshuaclayton/blueprint-css/wikis/home":http://github.com/joshuaclayton/blueprint-css/wikis/home +* *Bug/Feature Tracking*: "http://blueprintcss.lighthouseapp.com":http://blueprintcss.lighthouseapp.com + +h2. Setup Instructions + +Here's how you set up Blueprint on your site. + +# Upload the "blueprint" folder in this folder to your server, and place it in whatever folder you'd like. A good choice would be your CSS folder. +# Add the following three lines to every @@ of your site. Make sure the three @href@ paths are correct (here, BP is in my CSS folder):

+
+
+
+Remember to include trailing slashes (" />") in these lines if you're using XHTML. +# For development, add the .showgrid class to any container or column to see the underlying grid. Check out the @plugins@ directory for more advanced functionality. + + +h2. Tutorials + +* "How to customize BP with the compressor script":http://jdclayton.com/blueprints_compress_a_walkthrough.html +* "How to use a grid in a layout":http://subtraction.com/2007/03/18/oh-yeeaahh +* "How to use a baseline in your typography":http://alistapart.com/articles/settingtypeontheweb + +h2. Files in Blueprint + +The framework has a few files you should check out. Every file in the @src@ directory contains lots of (hopefully) clarifying comments. + +Compressed files (these go in the HTML): + +* @blueprint/screen.css@ +* @blueprint/print.css@ +* @blueprint/ie.css@ + +Source files: +* @blueprint/src/reset.css@
+This file resets CSS values that browsers tend to set for you. +* @blueprint/src/grid.css@
+This file sets up the grid (it's true). It has a lot of classes you apply to @
@ elements to set up any sort of column-based grid. +* @blueprint/lib/blueprint/grid.css.erb@
+This file is used by the compressor (see below) when generating grids. All changes to grid.css are mirrored in this file, manually. +* @blueprint/src/typography.css@
+This file sets some default typography. It also has a few methods for some really fancy stuff to do with your text. +* @blueprint/src/forms.css@
+Includes some minimal styling of forms. +* @blueprint/src/print.css@
+This file sets some default print rules, so that printed versions of your site looks better than they usually would. It should be included on every page. +* @blueprint/src/ie.css@
+Includes every hack for our beloved IE6 and 7. + +Scripts: +* @lib/compress.rb@
+A Ruby script for compressing and customizing your CSS. Set a custom namespace, column count, widths, output paths, multiple projects, and semantic class names. See commenting in @compress.rb@ or run @$ruby compress.rb -h@ for more information. +* @lib/validate.rb@
+Validates the Blueprint core files with the W3C CSS validator. + +Other: +* @blueprint/plugins/@
+Contains additional functionality in the form of simple plugins for Blueprint. See individual readme files in the directory of each plugin for further instructions. +* @tests/@
+Contains html files which tests most aspects of Blueprint. Open @tests/index.html@ for further instructions. + +h2. Extra Information + +* For credits and origins, see AUTHORS. +* For license instructions, see LICENSE. +* For the latest updates, see CHANGELOG. diff --git a/public/assets/Rakefile b/public/assets/Rakefile new file mode 100644 index 0000000..6eb4e02 --- /dev/null +++ b/public/assets/Rakefile @@ -0,0 +1,8 @@ +require "bundler/setup" +require "cucumber/rake/task" + +Cucumber::Rake::Task.new(:features) do |t| + t.cucumber_opts = "features --format pretty" +end + +task :default => :features diff --git a/public/assets/TUTORIAL-b0c67b1fdddf2336f48c27919ab3e0a4.textile b/public/assets/TUTORIAL-b0c67b1fdddf2336f48c27919ab3e0a4.textile new file mode 100644 index 0000000..5429004 --- /dev/null +++ b/public/assets/TUTORIAL-b0c67b1fdddf2336f48c27919ab3e0a4.textile @@ -0,0 +1,206 @@ +h1. Blueprint CSS Framework Tutorial + +Welcome to this tutorial on Blueprint. It will give you a thorough intro to what you can do with the framework, and a few notes on what you shouldn't do with it. Let's get started. + +h2. About Blueprint + +Blueprint is a CSS framework, designed to cut down on your development time. It gives you a solid foundation to build your CSS on top of, including some sensible default typography, a customizable grid, a print stylesheet and much more. + +However, BP is not a silver bullet, and it's best suited for websites where each page may require its own design. Take a look at existing BP pages before deciding if the framework is right for you. You may also check out the test files in the @tests@ directory, which demonstrates most of the features in Blueprint. + +The word "framework" may be a bit misleading in this context, since BP does not make suggestions on how you should organize or write your CSS. It's more like a "css toolbox" with helpful bits and pieces, from which you may pick and choose based on your needs. + +h2. Structural Overview + +From the bottom up, here are the CSS layers in Blueprint: + +# *CSS reset*: Removes any default CSS rules set by each browser. +# *Typography*: Gives you some nice default typography and colors. +# *Grid*: Provides a set of CSS classes for making grid layouts. + +The second part of Blueprint are the scripts, which let you customize most +aspects of the framework, from column count and widths, to output paths and +CSS class namespaces. We have two scripts: + +# *Compressor*: For compressing and customizing the source files. +# *Validator*: For validating the Blueprint core files. + +That's the quick overview, so now we can finally get into the details. First, we'll take +a look at the CSS in Blueprint. We'll then move on to the scripts, where I'll show you +how to customize the framework. + +h2. Setting Up Blueprint + +To use Blueprint, you must include three files in your HTML: + +* @blueprint/screen.css@: All CSS for screen, projection viewing. +* @blueprint/print.css@: A basic stylesheet for printing. +* @blueprint/ie.css@: A few needed corrections for Internet Explorer + +To include them, use the following HTML (make sure the href paths are correct): +

+  
+   
+  
+
+Remember to add trailing slashes if you're using XHTML (" />"). + +h2. Using the CSS in Blueprint + +As mentioned before, there's basically three layers of CSS in Blueprint. The first two layers, the browser CSS reset and the default typography, apply themselves by changing the CSS of standard HTML elements. In other words, you don't need to change anything in these files. If you, for instance, want to change the font size, do this in your own stylesheet, so that it's easy to upgrade Blueprint when new versions arrive. + +h3. Classes for Typography + +While the typography of Blueprint mainly applies itself, there's a few classes +provided. Here's a list of their names and what they do: + +
+
@.small@
Makes the text of this element smaller.
+
@.large@
Makes the text of this element larger.
+
@.hide@
Hides an element.
+
@.quiet@
Tones down the font color for this element.
+
@.loud@
Makes this elements text black.
+
@.highlight@
Adds a yellow background to the text.
+
@.added@
Adds green background to the text.
+
@.removed@
Adds red background to the text.
+
@.first@
Removes any left sided margin/padding from the element.
+
@.last@
Removes any right sided margin/padding from the element.
+
@.top@
Removes any top margin/padding from the element.
+
@.bottom@
Removes any bottom margin/padding from the element.
+
+ +h3. Styling Forms + +To make Blueprint style your input elements, each text input element should +have the class @.text@, or @.title@, where @.text@ is the normal size, +and @.title@ gives you an input field with larger text. + +There's also a few classes you may use for success and error messages: + +
+
@div.error@
Creates an error box (red).
+
@div.notice@
Creates a box for notices (yellow).
+
@div.success@
Creates a box for success messages (green).
+
+ +h3. Creating a Grid + +The third layer is the grid CSS classes, which is the tool Blueprint gives you to create almost any kind of grid layout for your site. Keep in mind that most of the CSS behind the grid can be customized (explained below). In this section however, I'm using the default settings. + +The default grid is made up of 24 columns, each spanning 30px, with a 10px margin between each column. The total width comes to 950px, which is a good width for 1024x768 resolution displays. If you're interested in a narrower design, see the section on customizing the grid, below. + +So how do you set up a grid? By using classes provided by Blueprint. To create a column, make a new @
@, and apply one of the @.span-x@ classes to it. For instance, if you want a 3-column setup, with two narrow and one wide column, a header and a footer here's how you do it: + +
			
+  
+
+ The header +
+ +
+ The first column +
+
+ The center column +
+
+ The last column +
+ +
+ The footer +
+
+
+ +In addition to the spans, there are two important classes you need to know about. First of all, every Blueprint site needs to be wrapped in a div with the class @.container@, which is usually placed right after the body tag. + +Second, the last column in a row (which by default has 24 columns), needs the class @.last@ to remove its left hand margin. Note, however, that each @.span-24@ don't need the @.last@ class, since these always span the entire width of the page. + +To create basic grids, this is all you need to know. The grid CSS however, provides many more classes for more intricate designs. To see some of them in action, check out the files in @tests/parts/@. These files demonstrate what's possible with the grid in Blueprint. + +Here's a quick overview of the other classes you can use in to make your grid: + +
+
@.append-x@
Appends x number of empty columns after a column.
+
@.prepend-x@
Preppends x number of empty columns before a column.
+
@.push-x@
Pushes a column x columns to the left. Can be used to swap columns.
+
@.pull-x@
Pulls a column x columns to the right. Can be used to swap columns.
+
@.border@
Applies a border to the right side of the column.
+
@.colborder@
Appends one empty column, with a border down the middle.
+
@.clear@
Makes a column drop below a row, regardless of space.
+
@.showgrid@
Add to container or column to see the grid and baseline.
+
+ +In this list, @x@ is a number from 1 through 23 for append/prepend and 1 through 24 for push/pull. These numbers will of course change if you set a new number of columns in the settings file. + +Here's another example where we have four columns of equal width, with a border between the two first and the two last columns, as well as a four column gap in the middle: + +
				
+	
+
+ The first column +
+
+ The second column +
+
+ The third column +
+
+ The fourth (last) column +
+
+
+ +You may also nest columns to achieve the desired layout. Here's a setup where we want four rectangles with two on top and two below on the first half of the page, and one single column spanning the second half of the page: + +
				
+	
+
+
+ Top left +
+
+ Top right +
+
+ Bottom left +
+
+ Bottom right +
+
+
+ Second half of page +
+
+
+ +Try this code in your browser it it's difficult to understand what it would look like. To see more examples on how to use these classes, check out @/tests/parts/grid.html@. + +h2. The Scripts + +Blueprint comes with two scripts: one for compressing and customizing the CSS, and one for validating the core CSS files, which is handy if you're making changes to these files. + +h3. The Validator + +The validator has a fairly simple job - validate the CSS in the core BP files. The script uses a bundled version of the W3C CSS validator to accomplish this. To run it, you'll need to have Ruby installed on your machine. You can then run the script like so: @$ ruby validate.rb@. + +Note that there are a few validation errors shipping with Blueprint. These are known, and comes from a few CSS hacks needed to ensure consistent rendering across the vast browser field. + +h3. The Compressor + +As the files you'll include in your HTML are the compressed versions of the core CSS files, you'll have to recompress the core if you've made any changes. This is what the compressor script is for. + +In addition this is where you customize the grid. To customize the grid, a special settings file is used, and the new CSS is generated once you run the compressor. The new compressed files will then reflect your settings file. + +To recompress, you just have to run the script. This will parse the core CSS files and output new compressed files in the blueprint folder. As with the validator, Ruby has to be installed to use this script. In the @lib@ directory, run: @$ruby compress.rb@ + +Calling this file by itself will pull files from @blueprint/src@ and concatenate them into three files; @ie.css@, @print.css@, and @screen.css@. However, argument variables can be set to change how this works. Calling @$ruby compress.rb -h@ will reveal basic arguments you can pass to the script. + +h3. Custom Settings + +To learn how to use custom settings, read through the documentation within @lib/compress.rb@ diff --git a/public/assets/application-5a1906f1c83ad9b9b4300709b63186ba.js b/public/assets/application-5a1906f1c83ad9b9b4300709b63186ba.js new file mode 100644 index 0000000..840987e --- /dev/null +++ b/public/assets/application-5a1906f1c83ad9b9b4300709b63186ba.js @@ -0,0 +1,19 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(a,b){function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c=0===c})}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function bj(a,b){if(b.nodeType!==1||!f.hasData(a))return;var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d0){if(c!=="border")for(;g").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(e.isReady)return;try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};return e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(a==="body"&&!d&&c.body)return this.context=c,this[0]=c.body,this.selector=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?g=[null,a,null]:g=i.exec(a);if(g&&(g[1]||!d)){if(g[1])return d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes),e.merge(this,a);h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}return this.context=c,this.selector=a,this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}return e.isFunction(a)?f.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),e.makeArray(a,this))},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();return e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return e.each(this,a,b)},ready:function(a){return e.bindReady(),A.add(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(A)return;A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}var b=i.call(arguments,0),c=0,d=b.length,e=new Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;return k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];if(!r)return;j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i)}),b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?f.cache[a[f.expando]]:a[f.expando],!!a&&!m(a)},data:function(a,c,d,e){if(!f.acceptData(a))return;var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);return g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d),o&&!h[c]?g.events:(k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h,i)},removeData:function(a,b,c){if(!f.acceptData(a))return;var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g)return c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type],c&&"get"in c&&(d=c.get(g,"value"))!==b?d:(d=g.value,typeof d=="string"?d.replace(q,""):d==null?"":d);return}return e=f.isFunction(a),this.each(function(d){var g=f(this),h;if(this.nodeType!==1)return;e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return;if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}return h&&"set"in h&&i&&(g=h.set(a,d,c))!==b?g:(a.setAttribute(c,""+d),d)}return h&&"get"in h&&i&&(g=h.get(a,c))!==null?g:(g=a.getAttribute(c),g===null?b:g)},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);return b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)")),b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m +,n,o,p,q,r,s;if(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))return;d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f=="undefined"||!!a&&f.event.triggered===a.type?b:f.event.dispatch.apply(i.elem,arguments)},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function w(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){return i=!1,0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length!==1||w[0]!=="~"&&w[0]!=="+"||!d.parentNode?d:d.parentNode,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);return l&&(m(l,h,e,f),m.uniqueSort(e)),e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);return a[0]=e++,a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");return!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" "),a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not"){if(!((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))){var g=m.filter(b[3],c,d,!0^f);return d||e.push.apply(e,g),!1}b[3]=m(b[3],null,null,c)}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){return a.unshift(!0),a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){return a=Array.prototype.slice.call(a,0),b?(b.push.apply(b,a),b):a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(b.querySelectorAll&&b.querySelectorAll(".TEST").length===0)return;m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!a.getElementsByClassName||a.getElementsByClassName("e").length===0)return;a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}return c=c.length>1?f.unique(c):c,this.pushStack(c,"closest",a)},index:function(a){return a?typeof a=="string"?f.inArray(this[0],f(a)):f.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);return L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse()),this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/

","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){return f.isFunction(a)?this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))}):typeof a!="object"&&a!==b?this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a)):f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return f.isFunction(a)?this.each(function(b){f(this).wrapInner(a.call(this,b))}):this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);return a.push.apply(a,this.toArray()),this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);return a.push.apply(a,f.clean(arguments)),a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while( +b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}return d=e=null,h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;return f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight}),c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;return b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;return f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d)),f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;return f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}}),this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){return f.isFunction(d)&&(g=g||e,e=d,d=b),f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b),a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s===2)return;s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return s||(d.mimeType=a),this},abort:function(a){return a=a||"abort",p&&p.abort(a),w(0,a),this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(!d.beforeSend||d.beforeSend.call(e,v,d)!==!1&&s!==2){for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(!(s<2))throw z;w(-1,z)}}return v}return v.abort(),!1},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";return b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){return g||f.error(h+" was not called"),g[0]},b.dataTypes[0]="json","script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return f.globalEval(a),a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}return i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update(),!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;return c===b?(e=this[0],e?(g=cy(e),g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]):null):this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window),function(a,b){var c;a.rails=c={linkClickSelector:"a[data-confirm], a[data-method], a[data-remote], a[data-disable-with]",inputChangeSelector:"select[data-remote], input[data-remote], textarea[data-remote]",formSubmitSelector:"form",formInputClickSelector:"form input[type=submit], form input[type=image], form button[type=submit], form button:not(button[type])",disableSelector:"input[data-disable-with], button[data-disable-with], textarea[data-disable-with]",enableSelector:"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled",requiredInputSelector:"input[name][required]:not([disabled]),textarea[name][required]:not([disabled])",fileInputSelector:"input:file",linkDisableSelector:"a[data-disable-with]",CSRFProtection:function(b){var c=a('meta[name="csrf-token"]').attr("content");c&&b.setRequestHeader("X-CSRF-Token",c)},fire:function(b,c,d){var e=a.Event(c);return b.trigger(e,d),e.result!==!1},confirm:function(a){return confirm(a)},ajax:function(b){return a.ajax(b)},handleRemote:function(d){var e,f,g,h=d.data("cross-domain")||null,i=d.data("type")||a.ajaxSettings&&a.ajaxSettings.dataType,j;if(c.fire(d,"ajax:before")){if(d.is("form")){e=d.attr("method"),f=d.attr("action"),g=d.serializeArray();var k=d.data("ujs:submit-button");k&&(g.push(k),d.data("ujs:submit-button",null))}else d.is(c.inputChangeSelector)?(e=d.data("method"),f=d.data("url"),g=d.serialize(),d.data("params")&&(g=g+"&"+d.data("params"))):(e=d.data("method"),f=d.attr("href"),g=d.data("params")||null);return j={type:e||"GET",data:g,dataType:i,crossDomain:h,beforeSend:function(a,e){return e.dataType===b&&a.setRequestHeader("accept","*/*;q=0.5, "+e.accepts.script),c.fire(d,"ajax:beforeSend",[a,e])},success:function(a,b,c){d.trigger("ajax:success",[a,b,c])},complete:function(a,b){d.trigger("ajax:complete",[a,b])},error:function(a,b,c){d.trigger("ajax:error",[a,b,c])}},f&&(j.url=f),c.ajax(j)}return!1},handleMethod:function(c){var d=c.attr("href"),e=c.data("method"),f=c.attr("target"),g=a("meta[name=csrf-token]").attr("content"),h=a("meta[name=csrf-param]").attr("content"),i=a(''),j='';h!==b&&g!==b&&(j+=''),f&&i.attr("target",f),i.hide().append(j).appendTo("body"),i.submit()},disableFormElements:function(b){b.find(c.disableSelector).each(function(){var b=a(this),c=b.is("button")?"html":"val";b.data("ujs:enable-with",b[c]()),b[c](b.data("disable-with")),b.prop("disabled",!0)})},enableFormElements:function(b){b.find(c.enableSelector).each(function(){var b=a(this),c=b.is("button")?"html":"val";b.data("ujs:enable-with")&&b[c](b.data("ujs:enable-with")),b.prop("disabled",!1)})},allowAction:function(a){var b=a.data("confirm"),d=!1,e;return b?(c.fire(a,"confirm")&&(d=c.confirm(b),e=c.fire(a,"confirm:complete",[d])),d&&e):!0},blankInputs:function(b,c,d){var e=a(),f,g=c||"input,textarea";return b.find(g).each(function(){f=a(this);if(d?f.val():!f.val())e=e.add(f)}),e.length?e:!1},nonBlankInputs:function(a,b){return c.blankInputs(a,b,!0)},stopEverything:function(b){return a(b.target).trigger("ujs:everythingStopped"),b.stopImmediatePropagation(),!1},callFormSubmitBindings:function(c,d){var e=c.data("events"),f=!0;return e!==b&&e.submit!==b&&a.each(e.submit,function(a,b){if(typeof b.handler=="function")return f=b.handler(d)}),f},disableElement:function(a){a.data("ujs:enable-with",a.html()),a.html(a.data("disable-with")),a.bind("click.railsDisable",function(a){return c.stopEverything(a)})},enableElement:function(a){a.data("ujs:enable-with")!==b&&(a.html(a.data("ujs:enable-with")),a.data("ujs:enable-with",!1)),a.unbind("click.railsDisable")}},a.ajaxPrefilter(function(a,b,d){a.crossDomain||c.CSRFProtection(d)}),a(document).delegate(c.linkDisableSelector,"ajax:complete",function(){c.enableElement(a(this))}),a(document).delegate(c.linkClickSelector,"click.rails",function(d){var e=a(this),f=e.data("method"),g=e.data("params");if(!c.allowAction(e))return c.stopEverything(d);e.is(c.linkDisableSelector)&&c.disableElement(e);if(e.data("remote")!==b)return(d.metaKey||d.ctrlKey)&&(!f||f==="GET")&&!g?!0:(c.handleRemote(e)===!1&&c.enableElement(e),!1);if(e.data("method"))return c.handleMethod(e),!1 +}),a(document).delegate(c.inputChangeSelector,"change.rails",function(b){var d=a(this);return c.allowAction(d)?(c.handleRemote(d),!1):c.stopEverything(b)}),a(document).delegate(c.formSubmitSelector,"submit.rails",function(d){var e=a(this),f=e.data("remote")!==b,g=c.blankInputs(e,c.requiredInputSelector),h=c.nonBlankInputs(e,c.fileInputSelector);if(!c.allowAction(e))return c.stopEverything(d);if(g&&e.attr("novalidate")==b&&c.fire(e,"ajax:aborted:required",[g]))return c.stopEverything(d);if(f)return h?c.fire(e,"ajax:aborted:file",[h]):!a.support.submitBubbles&&a().jquery<"1.7"&&c.callFormSubmitBindings(e,d)===!1?c.stopEverything(d):(c.handleRemote(e),!1);setTimeout(function(){c.disableFormElements(e)},13)}),a(document).delegate(c.formInputClickSelector,"click.rails",function(b){var d=a(this);if(!c.allowAction(d))return c.stopEverything(b);var e=d.attr("name"),f=e?{name:e,value:d.val()}:null;d.closest("form").data("ujs:submit-button",f)}),a(document).delegate(c.formSubmitSelector,"ajax:beforeSend.rails",function(b){this==b.target&&c.disableFormElements(a(this))}),a(document).delegate(c.formSubmitSelector,"ajax:complete.rails",function(b){this==b.target&&c.enableFormElements(a(this))})}(jQuery),function(){}.call(this),function(){}.call(this),function(){}.call(this) \ No newline at end of file diff --git a/public/assets/application-5a1906f1c83ad9b9b4300709b63186ba.js.gz b/public/assets/application-5a1906f1c83ad9b9b4300709b63186ba.js.gz new file mode 100644 index 0000000..f7d0ead Binary files /dev/null and b/public/assets/application-5a1906f1c83ad9b9b4300709b63186ba.js.gz differ diff --git a/public/assets/logo-98e8223e0cd072d064b5783a2e225530.png b/public/assets/logo-98e8223e0cd072d064b5783a2e225530.png new file mode 100644 index 0000000..15bbba0 Binary files /dev/null and b/public/assets/logo-98e8223e0cd072d064b5783a2e225530.png differ diff --git a/public/assets/rails-782b548cc1ba7f898cdad2d9eb8420d2.png b/public/assets/rails-782b548cc1ba7f898cdad2d9eb8420d2.png new file mode 100644 index 0000000..d5edc04 Binary files /dev/null and b/public/assets/rails-782b548cc1ba7f898cdad2d9eb8420d2.png differ