macournoyer-invisible 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. data/README +63 -0
  2. data/Rakefile +64 -0
  3. data/app_generators/flat/flat_generator.rb +40 -0
  4. data/app_generators/flat/templates/README +10 -0
  5. data/app_generators/flat/templates/app.rb +16 -0
  6. data/app_generators/flat/templates/rack.ru +17 -0
  7. data/app_generators/full/full_generator.rb +80 -0
  8. data/app_generators/full/templates/README +10 -0
  9. data/app_generators/full/templates/Rakefile +16 -0
  10. data/app_generators/full/templates/app.rb +7 -0
  11. data/app_generators/full/templates/config/boot.rb +5 -0
  12. data/app_generators/full/templates/config/env.rb +18 -0
  13. data/app_generators/full/templates/config/env/development.rb +6 -0
  14. data/app_generators/full/templates/config/env/production.rb +7 -0
  15. data/app_generators/full/templates/config/env/test.rb +1 -0
  16. data/app_generators/full/templates/config/rack.ru +6 -0
  17. data/app_generators/full/templates/gitignore +3 -0
  18. data/app_generators/full/templates/public/stylesheets/ie.css +16 -0
  19. data/app_generators/full/templates/public/stylesheets/print.css +21 -0
  20. data/app_generators/full/templates/public/stylesheets/screen.css +242 -0
  21. data/app_generators/full/templates/spec/app_spec.rb +7 -0
  22. data/app_generators/full/templates/spec/spec_helper.rb +14 -0
  23. data/app_generators/full/templates/test/app_test.rb +7 -0
  24. data/app_generators/full/templates/test/test_helper.rb +15 -0
  25. data/app_generators/full/templates/views/layout.erb +18 -0
  26. data/bin/invisible +18 -0
  27. data/invisible.gemspec +119 -0
  28. data/lib/invisible.rb +212 -0
  29. data/lib/invisible/core_ext.rb +12 -0
  30. data/lib/invisible/erb.rb +16 -0
  31. data/lib/invisible/erubis.rb +14 -0
  32. data/lib/invisible/haml.rb +14 -0
  33. data/lib/invisible/helpers.rb +5 -0
  34. data/lib/invisible/mock.rb +20 -0
  35. data/lib/invisible/reloader.rb +22 -0
  36. metadata +119 -0
data/README ADDED
@@ -0,0 +1,63 @@
1
+ = THE INVISIBLE FRAMEWORK
2
+ Invisible is like a giant robot combining the
3
+ awesomeness of Rails, Merb, Camping and Sinatra.
4
+ Except, it's tiny (100 sloc).
5
+
6
+ It's easy to deploy and get started with using the
7
+ friendly generator.
8
+
9
+ Get started today!
10
+
11
+ invisible my_lil_app
12
+ cd my_lil_app
13
+ thin start config/rack.ru
14
+ edit app.rb
15
+
16
+ Or, if you're really into tiny things:
17
+
18
+ invisible my_very_lil_app --flat
19
+
20
+ == Build web apps in just a few lines
21
+ The app syntax looks a lot like Sinatra:
22
+
23
+ get "/session/:value" do
24
+ session[:invisible] = params[:value]
25
+ render do
26
+ h2 "I added this to the session for you:"
27
+ pre params[:value].inspect
28
+ p { a "Go back", :href => "/" }
29
+ end
30
+ end
31
+
32
+ You can also render ERB, eRubis and Haml templates.
33
+
34
+ == TATFT (aka Test all the fucking time)
35
+ Invisible also comes with support for easy
36
+ testing, using Test::Unit or RSpec.
37
+
38
+ def test_should_get_root
39
+ assert get("/").ok?
40
+ end
41
+
42
+ it "should get /" do
43
+ get("/").should be_ok
44
+ end
45
+
46
+ == The extras you were missing in a micro-framework
47
+ Invisible has:
48
+ * reloading
49
+ * configurable multi-environment support
50
+ * multi-app in the same VM
51
+ * session support (Cookie, Memcache, etc.)
52
+ * a love affair with Rack middlewares
53
+ * another love affair with testing
54
+ * load just what you need approach (low mem)
55
+ * awesomeness builtin, twice!
56
+ * all that under 100 LOC (+ taxes)
57
+
58
+ I'm like, WOW! What are you waiting for?
59
+ Go build the next Twitter now, mkay?
60
+
61
+ Ruby License, http://ruby-lang.org/en/LICENSE.txt
62
+ Invisible is copyright Marc-Andre Cournoyer
63
+ macournoyer@gmail.com
@@ -0,0 +1,64 @@
1
+ require "spec/rake/spectask"
2
+ require "yaml"
3
+
4
+ Spec::Rake::SpecTask.new do |t|
5
+ t.spec_opts = %w(-fs -c)
6
+ end
7
+ task :default => :spec
8
+
9
+ desc "Compute LOC in invisible.rb"
10
+ task :size do
11
+ loc = File.read("lib/invisible.rb").split("\n").reject { |l| l =~ /^\s*\#/ || l =~ /^\s*$/ }.size
12
+ puts "#{loc} LOC"
13
+ end
14
+
15
+ namespace :site do
16
+ task :build do
17
+ mkdir_p 'tmp/site/images'
18
+ cd 'tmp/site' do
19
+ sh "SITE_ROOT='/invisible' ruby ../../site/thin.rb --dump"
20
+ end
21
+ cp 'site/style.css', 'tmp/site'
22
+ cp_r Dir['site/images/*'], 'tmp/site/images'
23
+ end
24
+
25
+ desc 'Upload website to code.macournoyer.com'
26
+ task :upload => :build do
27
+ sh %{scp -rq tmp/site/* macournoyer@code.macournoyer.com:code.macournoyer.com/invisible}
28
+ upload 'tmp/site/*', 'invisible'
29
+ end
30
+ end
31
+
32
+
33
+ gemspec = Gem::Specification.new do |s|
34
+ s.name = "invisible"
35
+ s.version = "0.0.1"
36
+ s.date = Time.today.strftime("%Y-%m-%d")
37
+ s.summary = "The Invisible Web Framework"
38
+ s.email = "macournoyer@gmail.com"
39
+ s.homepage = "http://github.com/macournoyer/invisible"
40
+ s.description = "Invisible is like a giant robot combining the awesomeness of Rails, Merb, Camping and Sinatra. Except, it's tiny (100 sloc)."
41
+ s.authors = ["Marc-Andre Cournoyer"]
42
+ s.files = %w(README Rakefile invisible.gemspec) + Dir["{bin,lib,app_generators}/**/*"]
43
+
44
+ # RDoc
45
+ s.has_rdoc = true
46
+ s.rdoc_options = ["--main", "README"]
47
+ s.extra_rdoc_files = ["README"]
48
+
49
+ # Dependencies
50
+ s.add_dependency "rack", ">= 0.4.0"
51
+ s.add_dependency "markaby", ">= 0.5"
52
+
53
+ # Binary
54
+ s.bindir = "bin"
55
+ s.default_executable = "invisible"
56
+ s.executables = "invisible"
57
+ end
58
+
59
+ namespace :gem do
60
+ desc "Update the gemspec for GitHub's gem server"
61
+ task :github do
62
+ File.open("invisible.gemspec", 'w') { |f| f << YAML.dump(gemspec) }
63
+ end
64
+ end
@@ -0,0 +1,40 @@
1
+ class FlatGenerator < RubiGen::Base
2
+ attr_reader :name
3
+
4
+ def initialize(runtime_args, runtime_options = {})
5
+ super
6
+ usage if args.empty?
7
+ @destination_root = File.expand_path(args.shift)
8
+ @name = base_name
9
+ extract_options
10
+ end
11
+
12
+ def manifest
13
+ record do |m|
14
+ # Root directory and all subdirectories.
15
+ m.directory ''
16
+
17
+ # Templates
18
+ m.template_copy_each %w( README )
19
+
20
+ # Static files
21
+ m.file_copy_each %w( app.rb
22
+ rack.ru )
23
+ end
24
+ end
25
+
26
+ protected
27
+ def banner
28
+ <<-EOS
29
+ Creates a new Invisible app with just the minimum.
30
+
31
+ USAGE: invisible my_app --flat [options]
32
+ EOS
33
+ end
34
+
35
+ def add_options!(opts)
36
+ end
37
+
38
+ def extract_options
39
+ end
40
+ end
@@ -0,0 +1,10 @@
1
+ <%= name.titleize %>
2
+ <%= "=" * name.titleize.size %>
3
+
4
+ Run with Thin:
5
+
6
+ thin start -R rack.ru
7
+
8
+ Or Rack rackup command, using Mongrel (by default):
9
+
10
+ rackup rack.ru
@@ -0,0 +1,16 @@
1
+ layout do
2
+ html do
3
+ head do
4
+ title 'Invisible'
5
+ end
6
+ body do
7
+ self << @content
8
+ end
9
+ end
10
+ end
11
+
12
+ get "/" do
13
+ render do
14
+ h1 "This is Invisible"
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ require "rubygems"
2
+ require "invisible"
3
+
4
+ RACK_ENV = ENV["RACK_ENV"] ||= "development"
5
+
6
+ Invisible.run do
7
+ if RACK_ENV == "development"
8
+ require "invisible/reloader"
9
+
10
+ use Invisible::Reloader, self
11
+ use Rack::ShowExceptions
12
+ use Rack::CommonLogger
13
+ use Rack::Lint
14
+ end
15
+
16
+ load "app"
17
+ end
@@ -0,0 +1,80 @@
1
+ class FullGenerator < RubiGen::Base
2
+ attr_reader :name
3
+
4
+ def initialize(runtime_args, runtime_options = {})
5
+ super
6
+ usage if args.empty?
7
+ @destination_root = File.expand_path(args.shift)
8
+ @name = base_name
9
+ extract_options
10
+ end
11
+
12
+ def manifest
13
+ record do |m|
14
+ # Root directory and all subdirectories.
15
+ m.directory ''
16
+ m.directory 'config'
17
+ m.directory 'config/env'
18
+ m.directory 'lib'
19
+ m.directory 'public'
20
+ m.directory 'public/stylesheets'
21
+ m.directory 'public/javascripts'
22
+ m.directory 'public/images'
23
+ m.directory 'views'
24
+
25
+ # Templates
26
+ m.template_copy_each %w( README Rakefile )
27
+
28
+ # Static files
29
+ m.file_copy_each %w( app.rb
30
+ config/boot.rb
31
+ config/env/production.rb
32
+ config/env/development.rb
33
+ config/env/test.rb
34
+ config/env.rb
35
+ config/rack.ru
36
+ public/stylesheets/ie.css
37
+ public/stylesheets/print.css
38
+ public/stylesheets/screen.css
39
+ views/layout.erb )
40
+
41
+ if options[:rspec]
42
+ m.directory 'spec'
43
+ m.file_copy_each %w( spec/spec_helper.rb
44
+ spec/app_spec.rb )
45
+ else # Test::Unit
46
+ m.directory 'test'
47
+ m.file_copy_each %w( test/test_helper.rb
48
+ test/app_test.rb )
49
+ end
50
+
51
+ if options[:git]
52
+ m.file "gitignore", ".gitignore"
53
+ end
54
+ end
55
+ end
56
+
57
+ protected
58
+ def banner
59
+ <<-EOS
60
+ Creates a new Invisible app.
61
+
62
+ USAGE: invisible my_app [options]
63
+ EOS
64
+ end
65
+
66
+ def add_options!(opts)
67
+ opts.separator ''
68
+ opts.separator 'Options:'
69
+ opts.on("-S", "--rspec", "Use RSpec for testing (default to Test::Unit)") { |options[:rspec]| }
70
+ opts.on("-g", "--git", "Add Git stuff (default: true)") { |options[:git]| }
71
+ opts.on( "--flat", "Generate just the bare minimum files to run")
72
+ end
73
+
74
+ def extract_options
75
+ # for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
76
+ # Templates can access these value via the attr_reader-generated methods, but not the
77
+ # raw instance variable value.
78
+ # @author = options[:author]
79
+ end
80
+ end
@@ -0,0 +1,10 @@
1
+ <%= name.titleize %>
2
+ <%= "=" * name.titleize.size %>
3
+
4
+ Run with Thin:
5
+
6
+ thin start -R config/rack.ru
7
+
8
+ Or Rack rackup command, using Mongrel (by default):
9
+
10
+ rackup config/rack.ru
@@ -0,0 +1,16 @@
1
+ <% if options[:rspec] %>
2
+ require 'spec/rake/spectask'
3
+
4
+ Spec::Rake::SpecTask.new do |t|
5
+ t.spec_opts = %w(-fs -c)
6
+ end
7
+ task :default => :spec
8
+ <% else %>
9
+ require 'rake/testtask'
10
+
11
+ Rake::TestTask.new do |t|
12
+ t.pattern = "test/**/*_test.rb"
13
+ t.verbose = true
14
+ end
15
+ task :default => :test
16
+ <% end %>
@@ -0,0 +1,7 @@
1
+ layout { erb(:layout) }
2
+
3
+ get "/" do
4
+ render do
5
+ h1 "This is Invisible"
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ require "rubygems"
2
+ require "invisible"
3
+ $:.unshift File.dirname(__FILE__) + "/../lib"
4
+
5
+ RACK_ENV = ENV["RACK_ENV"] ||= "development"
@@ -0,0 +1,18 @@
1
+ # Optional Invisible libs
2
+ require "invisible/erb"
3
+ # require "invisible/erubis" Remove previous if you uncomment this
4
+ # require "invisible/haml"
5
+
6
+ load "config/env/#{RACK_ENV}", :reload => false
7
+
8
+ # If you want to split your app in several files,
9
+ # load all the files here.
10
+ load "app"
11
+
12
+ # Install middleware for session support.
13
+ # See http://rack.rubyforge.org/doc/classes/Rack/Session.html
14
+ use Rack::Session::Cookie
15
+
16
+ # To serve static files
17
+ use Rack::Static, :urls => %w(/stylesheets /javascripts /images),
18
+ :root => root + "/public"
@@ -0,0 +1,6 @@
1
+ require "invisible/reloader"
2
+
3
+ use Invisible::Reloader, self
4
+ use Rack::ShowExceptions
5
+ use Rack::CommonLogger
6
+ use Rack::Lint
@@ -0,0 +1,7 @@
1
+ # Setup caching.
2
+ # See http://tomayko.com/src/rack-cache/
3
+ # require 'rack/cache'
4
+ # use Rack::Cache,
5
+ # :verbose => true,
6
+ # :metastore => "file:/#{root}/tmp/cache/meta"
7
+ # :entitystore => "file:/#{root}/tmp/cache/body"
@@ -0,0 +1 @@
1
+ use Rack::Lint
@@ -0,0 +1,6 @@
1
+ require File.dirname(__FILE__) + "/boot"
2
+
3
+ Invisible.run do
4
+ root File.dirname(__FILE__) + "/.."
5
+ load "config/env", :reload => false
6
+ end
@@ -0,0 +1,3 @@
1
+ *.cache
2
+ tmp
3
+ log
@@ -0,0 +1,16 @@
1
+ /* Blueprint CSS Framework 0.7.1
2
+ * http://blueprintcss.googlecode.com
3
+ * Copyright (c) 2007-2008 Olav Bjorkoy (olav at bjorkoy.com) */
4
+
5
+ /* ie.css */
6
+ body {text-align:center;}
7
+ .container {text-align:left;}
8
+ * html .column {overflow-x:hidden;}
9
+ * html legend {margin:-18px -8px 16px 0;padding:0;}
10
+ ol {margin-left:2em;}
11
+ sup {vertical-align:text-top;}
12
+ sub {vertical-align:text-bottom;}
13
+ html>body p code {*white-space:normal;}
14
+ hr {margin:-8px auto 11px;}
15
+ .clearfix, .container {display:inline-block;}
16
+ * html .clearfix, * html .container {height:1%;}
@@ -0,0 +1,21 @@
1
+ /* Blueprint CSS Framework 0.7.1
2
+ * http://blueprintcss.googlecode.com
3
+ * Copyright (c) 2007-2008 Olav Bjorkoy (olav at bjorkoy.com) */
4
+
5
+ /* print.css */
6
+ body {line-height:1.5;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;color:#000;background:none;font-size:10pt;}
7
+ .container {background:none;}
8
+ hr {background:#ccc;color:#ccc;width:100%;height:2px;margin:2em 0;padding:0;border:none;}
9
+ hr.space {background:#fff;color:#fff;}
10
+ h1, h2, h3, h4, h5, h6 {font-family:"Helvetica Neue", Arial, "Lucida Grande", sans-serif;}
11
+ code {font:.9em "Courier New", Monaco, Courier, monospace;}
12
+ img {float:left;margin:1.5em 1.5em 1.5em 0;}
13
+ a img {border:none;}
14
+ p img.top {margin-top:0;}
15
+ blockquote {margin:1.5em;padding:1em;font-style:italic;font-size:.9em;}
16
+ .small {font-size:.9em;}
17
+ .large {font-size:1.1em;}
18
+ .quiet {color:#999;}
19
+ .hide {display:none;}
20
+ a:link, a:visited {background:transparent;font-weight:700;text-decoration:underline;}
21
+ a:link:after, a:visited:after {content:" (" attr(href) ") ";font-size:90%;}
@@ -0,0 +1,242 @@
1
+ /* Blueprint CSS Framework 0.7.1
2
+ * http://blueprintcss.googlecode.com
3
+ * Copyright (c) 2007-2008 Olav Bjorkoy (olav at bjorkoy.com) */
4
+
5
+ /* reset.css */
6
+ html, 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 {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
7
+ body {line-height:1.5;}
8
+ table {border-collapse:separate;border-spacing:0;}
9
+ caption, th, td {text-align:left;font-weight:normal;}
10
+ table, td, th {vertical-align:middle;}
11
+ blockquote:before, blockquote:after, q:before, q:after {content:"";}
12
+ blockquote, q {quotes:"" "";}
13
+ a img {border:none;}
14
+
15
+ /* typography.css */
16
+ body {font-size:75%;color:#222;background:#fff;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;}
17
+ h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;}
18
+ h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
19
+ h2 {font-size:2em;margin-bottom:0.75em;}
20
+ h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
21
+ h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;}
22
+ h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
23
+ h6 {font-size:1em;font-weight:bold;}
24
+ h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
25
+ p {margin:0 0 1.5em;}
26
+ p img {float:left;margin:1.5em 1.5em 1.5em 0;padding:0;}
27
+ p img.right {float:right;margin:1.5em 0 1.5em 1.5em;}
28
+ a:focus, a:hover {color:#000;}
29
+ a {color:#009;text-decoration:underline;}
30
+ blockquote {margin:1.5em;color:#666;font-style:italic;}
31
+ strong {font-weight:bold;}
32
+ em, dfn {font-style:italic;}
33
+ dfn {font-weight:bold;}
34
+ sup, sub {line-height:0;}
35
+ abbr, acronym {border-bottom:1px dotted #666;}
36
+ address {margin:0 0 1.5em;font-style:italic;}
37
+ del {color:#666;}
38
+ pre {margin:1.5em 0;white-space:pre;}
39
+ pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;}
40
+ li ul, li ol {margin:0 1.5em;}
41
+ ul, ol {margin:0 1.5em 1.5em 1.5em;}
42
+ ul {list-style-type:disc;}
43
+ ol {list-style-type:decimal;}
44
+ dl {margin:0 0 1.5em 0;}
45
+ dl dt {font-weight:bold;}
46
+ dd {margin-left:1.5em;}
47
+ table {margin-bottom:1.4em;width:100%;}
48
+ th {font-weight:bold;background:#C3D9FF;}
49
+ th, td {padding:4px 10px 4px 5px;}
50
+ tr.even td {background:#E5ECF9;}
51
+ tfoot {font-style:italic;}
52
+ caption {background:#eee;}
53
+ .small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;}
54
+ .large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;}
55
+ .hide {display:none;}
56
+ .quiet {color:#666;}
57
+ .loud {color:#000;}
58
+ .highlight {background:#ff0;}
59
+ .added {background:#060;color:#fff;}
60
+ .removed {background:#900;color:#fff;}
61
+ .first {margin-left:0;padding-left:0;}
62
+ .last {margin-right:0;padding-right:0;}
63
+ .top {margin-top:0;padding-top:0;}
64
+ .bottom {margin-bottom:0;padding-bottom:0;}
65
+
66
+ /* grid.css */
67
+ .container {width:950px;margin:0 auto;}
68
+ .showgrid {background:url(src/grid.png);}
69
+ body {margin:1.5em 0;}
70
+ .column, div.span-1, div.span-2, div.span-3, div.span-4, div.span-5, div.span-6, div.span-7, div.span-8, div.span-9, div.span-10, div.span-11, div.span-12, div.span-13, div.span-14, div.span-15, div.span-16, div.span-17, div.span-18, div.span-19, div.span-20, div.span-21, div.span-22, div.span-23, div.span-24 {float:left;margin-right:10px;}
71
+ .last, div.last {margin-right:0;}
72
+ .span-1 {width:30px;}
73
+ .span-2 {width:70px;}
74
+ .span-3 {width:110px;}
75
+ .span-4 {width:150px;}
76
+ .span-5 {width:190px;}
77
+ .span-6 {width:230px;}
78
+ .span-7 {width:270px;}
79
+ .span-8 {width:310px;}
80
+ .span-9 {width:350px;}
81
+ .span-10 {width:390px;}
82
+ .span-11 {width:430px;}
83
+ .span-12 {width:470px;}
84
+ .span-13 {width:510px;}
85
+ .span-14 {width:550px;}
86
+ .span-15 {width:590px;}
87
+ .span-16 {width:630px;}
88
+ .span-17 {width:670px;}
89
+ .span-18 {width:710px;}
90
+ .span-19 {width:750px;}
91
+ .span-20 {width:790px;}
92
+ .span-21 {width:830px;}
93
+ .span-22 {width:870px;}
94
+ .span-23 {width:910px;}
95
+ .span-24, div.span-24 {width:950px;margin:0;}
96
+ input.span-1, textarea.span-1, select.span-1 {width:30px!important;}
97
+ input.span-2, textarea.span-2, select.span-2 {width:50px!important;}
98
+ input.span-3, textarea.span-3, select.span-3 {width:90px!important;}
99
+ input.span-4, textarea.span-4, select.span-4 {width:130px!important;}
100
+ input.span-5, textarea.span-5, select.span-5 {width:170px!important;}
101
+ input.span-6, textarea.span-6, select.span-6 {width:210px!important;}
102
+ input.span-7, textarea.span-7, select.span-7 {width:250px!important;}
103
+ input.span-8, textarea.span-8, select.span-8 {width:290px!important;}
104
+ input.span-9, textarea.span-9, select.span-9 {width:330px!important;}
105
+ input.span-10, textarea.span-10, select.span-10 {width:370px!important;}
106
+ input.span-11, textarea.span-11, select.span-11 {width:410px!important;}
107
+ input.span-12, textarea.span-12, select.span-12 {width:450px!important;}
108
+ input.span-13, textarea.span-13, select.span-13 {width:490px!important;}
109
+ input.span-14, textarea.span-14, select.span-14 {width:530px!important;}
110
+ input.span-15, textarea.span-15, select.span-15 {width:570px!important;}
111
+ input.span-16, textarea.span-16, select.span-16 {width:610px!important;}
112
+ input.span-17, textarea.span-17, select.span-17 {width:650px!important;}
113
+ input.span-18, textarea.span-18, select.span-18 {width:690px!important;}
114
+ input.span-19, textarea.span-19, select.span-19 {width:730px!important;}
115
+ input.span-20, textarea.span-20, select.span-20 {width:770px!important;}
116
+ input.span-21, textarea.span-21, select.span-21 {width:810px!important;}
117
+ input.span-22, textarea.span-22, select.span-22 {width:850px!important;}
118
+ input.span-23, textarea.span-23, select.span-23 {width:890px!important;}
119
+ input.span-24, textarea.span-24, select.span-24 {width:940px!important;}
120
+ .append-1 {padding-right:40px;}
121
+ .append-2 {padding-right:80px;}
122
+ .append-3 {padding-right:120px;}
123
+ .append-4 {padding-right:160px;}
124
+ .append-5 {padding-right:200px;}
125
+ .append-6 {padding-right:240px;}
126
+ .append-7 {padding-right:280px;}
127
+ .append-8 {padding-right:320px;}
128
+ .append-9 {padding-right:360px;}
129
+ .append-10 {padding-right:400px;}
130
+ .append-11 {padding-right:440px;}
131
+ .append-12 {padding-right:480px;}
132
+ .append-13 {padding-right:520px;}
133
+ .append-14 {padding-right:560px;}
134
+ .append-15 {padding-right:600px;}
135
+ .append-16 {padding-right:640px;}
136
+ .append-17 {padding-right:680px;}
137
+ .append-18 {padding-right:720px;}
138
+ .append-19 {padding-right:760px;}
139
+ .append-20 {padding-right:800px;}
140
+ .append-21 {padding-right:840px;}
141
+ .append-22 {padding-right:880px;}
142
+ .append-23 {padding-right:920px;}
143
+ .prepend-1 {padding-left:40px;}
144
+ .prepend-2 {padding-left:80px;}
145
+ .prepend-3 {padding-left:120px;}
146
+ .prepend-4 {padding-left:160px;}
147
+ .prepend-5 {padding-left:200px;}
148
+ .prepend-6 {padding-left:240px;}
149
+ .prepend-7 {padding-left:280px;}
150
+ .prepend-8 {padding-left:320px;}
151
+ .prepend-9 {padding-left:360px;}
152
+ .prepend-10 {padding-left:400px;}
153
+ .prepend-11 {padding-left:440px;}
154
+ .prepend-12 {padding-left:480px;}
155
+ .prepend-13 {padding-left:520px;}
156
+ .prepend-14 {padding-left:560px;}
157
+ .prepend-15 {padding-left:600px;}
158
+ .prepend-16 {padding-left:640px;}
159
+ .prepend-17 {padding-left:680px;}
160
+ .prepend-18 {padding-left:720px;}
161
+ .prepend-19 {padding-left:760px;}
162
+ .prepend-20 {padding-left:800px;}
163
+ .prepend-21 {padding-left:840px;}
164
+ .prepend-22 {padding-left:880px;}
165
+ .prepend-23 {padding-left:920px;}
166
+ div.border {padding-right:4px;margin-right:5px;border-right:1px solid #eee;}
167
+ div.colborder {padding-right:24px;margin-right:25px;border-right:1px solid #eee;}
168
+ .pull-1 {margin-left:-40px;}
169
+ .pull-2 {margin-left:-80px;}
170
+ .pull-3 {margin-left:-120px;}
171
+ .pull-4 {margin-left:-160px;}
172
+ .pull-5 {margin-left:-200px;}
173
+ .pull-6 {margin-left:-240px;}
174
+ .pull-7 {margin-left:-280px;}
175
+ .pull-8 {margin-left:-320px;}
176
+ .pull-9 {margin-left:-360px;}
177
+ .pull-10 {margin-left:-400px;}
178
+ .pull-11 {margin-left:-440px;}
179
+ .pull-12 {margin-left:-480px;}
180
+ .pull-13 {margin-left:-520px;}
181
+ .pull-14 {margin-left:-560px;}
182
+ .pull-15 {margin-left:-600px;}
183
+ .pull-16 {margin-left:-640px;}
184
+ .pull-17 {margin-left:-680px;}
185
+ .pull-18 {margin-left:-720px;}
186
+ .pull-19 {margin-left:-760px;}
187
+ .pull-20 {margin-left:-800px;}
188
+ .pull-21 {margin-left:-840px;}
189
+ .pull-22 {margin-left:-880px;}
190
+ .pull-23 {margin-left:-920px;}
191
+ .pull-24 {margin-left:-960px;}
192
+ .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;}
193
+ .push-1 {margin:0 -40px 1.5em 40px;}
194
+ .push-2 {margin:0 -80px 1.5em 80px;}
195
+ .push-3 {margin:0 -120px 1.5em 120px;}
196
+ .push-4 {margin:0 -160px 1.5em 160px;}
197
+ .push-5 {margin:0 -200px 1.5em 200px;}
198
+ .push-6 {margin:0 -240px 1.5em 240px;}
199
+ .push-7 {margin:0 -280px 1.5em 280px;}
200
+ .push-8 {margin:0 -320px 1.5em 320px;}
201
+ .push-9 {margin:0 -360px 1.5em 360px;}
202
+ .push-10 {margin:0 -400px 1.5em 400px;}
203
+ .push-11 {margin:0 -440px 1.5em 440px;}
204
+ .push-12 {margin:0 -480px 1.5em 480px;}
205
+ .push-13 {margin:0 -520px 1.5em 520px;}
206
+ .push-14 {margin:0 -560px 1.5em 560px;}
207
+ .push-15 {margin:0 -600px 1.5em 600px;}
208
+ .push-16 {margin:0 -640px 1.5em 640px;}
209
+ .push-17 {margin:0 -680px 1.5em 680px;}
210
+ .push-18 {margin:0 -720px 1.5em 720px;}
211
+ .push-19 {margin:0 -760px 1.5em 760px;}
212
+ .push-20 {margin:0 -800px 1.5em 800px;}
213
+ .push-21 {margin:0 -840px 1.5em 840px;}
214
+ .push-22 {margin:0 -880px 1.5em 880px;}
215
+ .push-23 {margin:0 -920px 1.5em 920px;}
216
+ .push-24 {margin:0 -960px 1.5em 960px;}
217
+ .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:right;position:relative;}
218
+ .prepend-top {margin-top:1.5em;}
219
+ .append-bottom {margin-bottom:1.5em;}
220
+ .box {padding:1.5em;margin-bottom:1.5em;background:#E5ECF9;}
221
+ hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:none;}
222
+ hr.space {background:#fff;color:#fff;}
223
+ .clearfix:after, .container:after {content:".";display:block;height:0;clear:both;visibility:hidden;}
224
+ .clearfix, .container {display:block;}
225
+ .clear {clear:both;}
226
+
227
+ /* forms.css */
228
+ label {font-weight:bold;}
229
+ fieldset {padding:1.4em;margin:0 0 1.5em 0;border:1px solid #ccc;}
230
+ legend {font-weight:bold;font-size:1.2em;}
231
+ input.text, input.title, textarea, select {margin:0.5em 0;border:1px solid #bbb;}
232
+ input.text:focus, input.title:focus, textarea:focus, select:focus {border:1px solid #666;}
233
+ input.text, input.title {width:300px;padding:5px;}
234
+ input.title {font-size:1.5em;}
235
+ textarea {width:390px;height:250px;padding:5px;}
236
+ .error, .notice, .success {padding:.8em;margin-bottom:1em;border:2px solid #ddd;}
237
+ .error {background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}
238
+ .notice {background:#FFF6BF;color:#514721;border-color:#FFD324;}
239
+ .success {background:#E6EFC2;color:#264409;border-color:#C6D880;}
240
+ .error a {color:#8a1f11;}
241
+ .notice a {color:#514721;}
242
+ .success a {color:#264409;}