rails-boilerplate 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. data/.gitignore +9 -0
  2. data/.gitmodules +3 -0
  3. data/Gemfile +11 -0
  4. data/Guardfile +14 -0
  5. data/LICENSE +19 -0
  6. data/README.md +37 -0
  7. data/Rakefile +73 -0
  8. data/html5-boilerplate/.gitattributes +1 -0
  9. data/html5-boilerplate/.gitignore +41 -0
  10. data/html5-boilerplate/.htaccess +506 -0
  11. data/html5-boilerplate/404.html +38 -0
  12. data/html5-boilerplate/README.md +387 -0
  13. data/html5-boilerplate/apple-touch-icon-114x114-precomposed.png +0 -0
  14. data/html5-boilerplate/apple-touch-icon-57x57-precomposed.png +0 -0
  15. data/html5-boilerplate/apple-touch-icon-72x72-precomposed.png +0 -0
  16. data/html5-boilerplate/apple-touch-icon-precomposed.png +0 -0
  17. data/html5-boilerplate/apple-touch-icon.png +0 -0
  18. data/html5-boilerplate/build/build.xml +1051 -0
  19. data/html5-boilerplate/build/config/default.properties +116 -0
  20. data/html5-boilerplate/build/config/manifest.appcache +20 -0
  21. data/html5-boilerplate/build/config/project.properties +96 -0
  22. data/html5-boilerplate/build/createproject.sh +50 -0
  23. data/html5-boilerplate/build/project.xml +7 -0
  24. data/html5-boilerplate/build/runbuildscript.bat +6 -0
  25. data/html5-boilerplate/build/tools/ant-contrib-1.0b3.jar +0 -0
  26. data/html5-boilerplate/build/tools/closure-compiler-v1346.jar +0 -0
  27. data/html5-boilerplate/build/tools/csslint-rhino.js +11138 -0
  28. data/html5-boilerplate/build/tools/fulljshint.js +5904 -0
  29. data/html5-boilerplate/build/tools/fulljslint.js +6651 -0
  30. data/html5-boilerplate/build/tools/htmlcompressor-1.4.3.jar +0 -0
  31. data/html5-boilerplate/build/tools/jpegtran.exe +0 -0
  32. data/html5-boilerplate/build/tools/optipng-0.6.4-exe/LICENSE.txt +21 -0
  33. data/html5-boilerplate/build/tools/optipng-0.6.4-exe/optipng.exe +0 -0
  34. data/html5-boilerplate/build/tools/rhino.jar +0 -0
  35. data/html5-boilerplate/build/tools/yuicompressor-2.4.5.jar +0 -0
  36. data/html5-boilerplate/crossdomain.xml +25 -0
  37. data/html5-boilerplate/css/style.css +293 -0
  38. data/html5-boilerplate/demo/elements.html +493 -0
  39. data/html5-boilerplate/demo/hack.css +84 -0
  40. data/html5-boilerplate/demo/hack2.css +41 -0
  41. data/html5-boilerplate/demo/internet_explorer.png +0 -0
  42. data/html5-boilerplate/demo/test_tubes.png +0 -0
  43. data/html5-boilerplate/demo/tests.html +300 -0
  44. data/html5-boilerplate/favicon.ico +0 -0
  45. data/html5-boilerplate/humans.txt +43 -0
  46. data/html5-boilerplate/img/.gitignore +2 -0
  47. data/html5-boilerplate/index.html +79 -0
  48. data/html5-boilerplate/js/libs/jquery-1.6.3.js +9044 -0
  49. data/html5-boilerplate/js/libs/jquery-1.6.3.min.js +4 -0
  50. data/html5-boilerplate/js/libs/modernizr-2.0.6.min.js +4 -0
  51. data/html5-boilerplate/js/mylibs/.gitignore +2 -0
  52. data/html5-boilerplate/js/plugins.js +20 -0
  53. data/html5-boilerplate/js/script.js +8 -0
  54. data/html5-boilerplate/robots.txt +5 -0
  55. data/html5-boilerplate/test/index.html +31 -0
  56. data/html5-boilerplate/test/qunit/qunit.css +148 -0
  57. data/html5-boilerplate/test/qunit/qunit.js +1265 -0
  58. data/html5-boilerplate/test/tests.js +24 -0
  59. data/index.html.patch +62 -0
  60. data/lib/generators/boilerplate/install/install_generator.rb +33 -0
  61. data/lib/generators/boilerplate/install/templates/apple-touch-icon-114x114-precomposed.png +0 -0
  62. data/lib/generators/boilerplate/install/templates/apple-touch-icon-57x57-precomposed.png +0 -0
  63. data/lib/generators/boilerplate/install/templates/apple-touch-icon-72x72-precomposed.png +0 -0
  64. data/lib/generators/boilerplate/install/templates/apple-touch-icon-precomposed.png +0 -0
  65. data/lib/generators/boilerplate/install/templates/apple-touch-icon.png +0 -0
  66. data/lib/generators/boilerplate/install/templates/crossdomain.xml +25 -0
  67. data/lib/generators/boilerplate/install/templates/favicon.ico +0 -0
  68. data/lib/generators/boilerplate/install/templates/humans.txt +43 -0
  69. data/lib/generators/boilerplate/install/templates/index.html +60 -0
  70. data/lib/generators/boilerplate/install/templates/robots.txt +5 -0
  71. data/lib/generators/boilerplate/resource_helpers.rb +13 -0
  72. data/lib/rails_boilerplate.rb +7 -0
  73. data/lib/rails_boilerplate/version.rb +3 -0
  74. data/rails-boilerplate.gemspec +24 -0
  75. data/test/dummy/Rakefile +7 -0
  76. data/test/dummy/app/controllers/application_controller.rb +3 -0
  77. data/test/dummy/app/controllers/home_controller.rb +5 -0
  78. data/test/dummy/app/helpers/application_helper.rb +2 -0
  79. data/test/dummy/app/views/home/index.html.erb +1 -0
  80. data/test/dummy/app/views/layouts/application.html.erb +68 -0
  81. data/test/dummy/config.ru +4 -0
  82. data/test/dummy/config/application.rb +43 -0
  83. data/test/dummy/config/boot.rb +10 -0
  84. data/test/dummy/config/database.yml +22 -0
  85. data/test/dummy/config/environment.rb +5 -0
  86. data/test/dummy/config/environments/development.rb +25 -0
  87. data/test/dummy/config/environments/production.rb +49 -0
  88. data/test/dummy/config/environments/test.rb +35 -0
  89. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  90. data/test/dummy/config/initializers/inflections.rb +10 -0
  91. data/test/dummy/config/initializers/mime_types.rb +5 -0
  92. data/test/dummy/config/initializers/secret_token.rb +7 -0
  93. data/test/dummy/config/initializers/session_store.rb +8 -0
  94. data/test/dummy/config/locales/en.yml +5 -0
  95. data/test/dummy/config/routes.rb +3 -0
  96. data/test/dummy/public/404.html +26 -0
  97. data/test/dummy/public/422.html +26 -0
  98. data/test/dummy/public/500.html +26 -0
  99. data/test/dummy/public/favicon.ico +0 -0
  100. data/test/dummy/public/javascripts/application.js +2 -0
  101. data/test/dummy/public/javascripts/controls.js +965 -0
  102. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  103. data/test/dummy/public/javascripts/effects.js +1123 -0
  104. data/test/dummy/public/javascripts/prototype.js +6001 -0
  105. data/test/dummy/public/javascripts/rails.js +191 -0
  106. data/test/dummy/public/stylesheets/.gitkeep +0 -0
  107. data/test/dummy/script/rails +6 -0
  108. data/test/generators/fixtures/application.css +7 -0
  109. data/test/generators/fixtures/application.js +9 -0
  110. data/test/generators/generators_test_helper.rb +8 -0
  111. data/test/generators/install_generator_test.rb +51 -0
  112. data/test/rails_boilerplate_test.rb +16 -0
  113. data/test/test_helper.rb +12 -0
  114. data/vendor/assets/javascripts/modernizr.js +4 -0
  115. data/vendor/assets/javascripts/plugins.js +20 -0
  116. data/vendor/assets/stylesheets/reset.css +293 -0
  117. metadata +167 -0
@@ -0,0 +1,191 @@
1
+ (function() {
2
+ // Technique from Juriy Zaytsev
3
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
4
+ function isEventSupported(eventName) {
5
+ var el = document.createElement('div');
6
+ eventName = 'on' + eventName;
7
+ var isSupported = (eventName in el);
8
+ if (!isSupported) {
9
+ el.setAttribute(eventName, 'return;');
10
+ isSupported = typeof el[eventName] == 'function';
11
+ }
12
+ el = null;
13
+ return isSupported;
14
+ }
15
+
16
+ function isForm(element) {
17
+ return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM'
18
+ }
19
+
20
+ function isInput(element) {
21
+ if (Object.isElement(element)) {
22
+ var name = element.nodeName.toUpperCase()
23
+ return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
24
+ }
25
+ else return false
26
+ }
27
+
28
+ var submitBubbles = isEventSupported('submit'),
29
+ changeBubbles = isEventSupported('change')
30
+
31
+ if (!submitBubbles || !changeBubbles) {
32
+ // augment the Event.Handler class to observe custom events when needed
33
+ Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
34
+ function(init, element, eventName, selector, callback) {
35
+ init(element, eventName, selector, callback)
36
+ // is the handler being attached to an element that doesn't support this event?
37
+ if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
38
+ (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
39
+ // "submit" => "emulated:submit"
40
+ this.eventName = 'emulated:' + this.eventName
41
+ }
42
+ }
43
+ )
44
+ }
45
+
46
+ if (!submitBubbles) {
47
+ // discover forms on the page by observing focus events which always bubble
48
+ document.on('focusin', 'form', function(focusEvent, form) {
49
+ // special handler for the real "submit" event (one-time operation)
50
+ if (!form.retrieve('emulated:submit')) {
51
+ form.on('submit', function(submitEvent) {
52
+ var emulated = form.fire('emulated:submit', submitEvent, true)
53
+ // if custom event received preventDefault, cancel the real one too
54
+ if (emulated.returnValue === false) submitEvent.preventDefault()
55
+ })
56
+ form.store('emulated:submit', true)
57
+ }
58
+ })
59
+ }
60
+
61
+ if (!changeBubbles) {
62
+ // discover form inputs on the page
63
+ document.on('focusin', 'input, select, texarea', function(focusEvent, input) {
64
+ // special handler for real "change" events
65
+ if (!input.retrieve('emulated:change')) {
66
+ input.on('change', function(changeEvent) {
67
+ input.fire('emulated:change', changeEvent, true)
68
+ })
69
+ input.store('emulated:change', true)
70
+ }
71
+ })
72
+ }
73
+
74
+ function handleRemote(element) {
75
+ var method, url, params;
76
+
77
+ var event = element.fire("ajax:before");
78
+ if (event.stopped) return false;
79
+
80
+ if (element.tagName.toLowerCase() === 'form') {
81
+ method = element.readAttribute('method') || 'post';
82
+ url = element.readAttribute('action');
83
+ params = element.serialize();
84
+ } else {
85
+ method = element.readAttribute('data-method') || 'get';
86
+ url = element.readAttribute('href');
87
+ params = {};
88
+ }
89
+
90
+ new Ajax.Request(url, {
91
+ method: method,
92
+ parameters: params,
93
+ evalScripts: true,
94
+
95
+ onComplete: function(request) { element.fire("ajax:complete", request); },
96
+ onSuccess: function(request) { element.fire("ajax:success", request); },
97
+ onFailure: function(request) { element.fire("ajax:failure", request); }
98
+ });
99
+
100
+ element.fire("ajax:after");
101
+ }
102
+
103
+ function handleMethod(element) {
104
+ var method = element.readAttribute('data-method'),
105
+ url = element.readAttribute('href'),
106
+ csrf_param = $$('meta[name=csrf-param]')[0],
107
+ csrf_token = $$('meta[name=csrf-token]')[0];
108
+
109
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
110
+ element.parentNode.insert(form);
111
+
112
+ if (method !== 'post') {
113
+ var field = new Element('input', { type: 'hidden', name: '_method', value: method });
114
+ form.insert(field);
115
+ }
116
+
117
+ if (csrf_param) {
118
+ var param = csrf_param.readAttribute('content'),
119
+ token = csrf_token.readAttribute('content'),
120
+ field = new Element('input', { type: 'hidden', name: param, value: token });
121
+ form.insert(field);
122
+ }
123
+
124
+ form.submit();
125
+ }
126
+
127
+
128
+ document.on("click", "*[data-confirm]", function(event, element) {
129
+ var message = element.readAttribute('data-confirm');
130
+ if (!confirm(message)) event.stop();
131
+ });
132
+
133
+ document.on("click", "a[data-remote]", function(event, element) {
134
+ if (event.stopped) return;
135
+ handleRemote(element);
136
+ event.stop();
137
+ });
138
+
139
+ document.on("click", "a[data-method]", function(event, element) {
140
+ if (event.stopped) return;
141
+ handleMethod(element);
142
+ event.stop();
143
+ });
144
+
145
+ document.on("submit", function(event) {
146
+ var element = event.findElement(),
147
+ message = element.readAttribute('data-confirm');
148
+ if (message && !confirm(message)) {
149
+ event.stop();
150
+ return false;
151
+ }
152
+
153
+ var inputs = element.select("input[type=submit][data-disable-with]");
154
+ inputs.each(function(input) {
155
+ input.disabled = true;
156
+ input.writeAttribute('data-original-value', input.value);
157
+ input.value = input.readAttribute('data-disable-with');
158
+ });
159
+
160
+ var element = event.findElement("form[data-remote]");
161
+ if (element) {
162
+ handleRemote(element);
163
+ event.stop();
164
+ }
165
+ });
166
+
167
+ document.on("ajax:after", "form", function(event, element) {
168
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
169
+ inputs.each(function(input) {
170
+ input.value = input.readAttribute('data-original-value');
171
+ input.removeAttribute('data-original-value');
172
+ input.disabled = false;
173
+ });
174
+ });
175
+
176
+ Ajax.Responders.register({
177
+ onCreate: function(request) {
178
+ var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
179
+
180
+ if (csrf_meta_tag) {
181
+ var header = 'X-CSRF-Token',
182
+ token = csrf_meta_tag.readAttribute('content');
183
+
184
+ if (!request.options.requestHeaders) {
185
+ request.options.requestHeaders = {};
186
+ }
187
+ request.options.requestHeaders[header] = token;
188
+ }
189
+ }
190
+ });
191
+ })();
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,7 @@
1
+ /*
2
+ * This is a manifest file that'll automatically include all the stylesheets available in this directory
3
+ * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
4
+ * the top of the compiled file, but it's generally better to create a new file per style scope.
5
+ *= require_self
6
+ *= require_tree .
7
+ */
@@ -0,0 +1,9 @@
1
+ // This is a manifest file that'll be compiled into including all the files listed below.
2
+ // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
3
+ // be included in the compiled file accessible from http://example.com/assets/application.js
4
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
+ // the compiled file.
6
+ //
7
+ //= require jquery
8
+ //= require jquery_ujs
9
+ //= require_tree .
@@ -0,0 +1,8 @@
1
+ module GeneratorsTestHelper
2
+ def self.included(base)
3
+ base.class_eval do
4
+ destination File.expand_path("../tmp", File.dirname(__FILE__))
5
+ setup :prepare_destination
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,51 @@
1
+ require 'test_helper'
2
+ require 'generators/generators_test_helper'
3
+ require 'generators/boilerplate/install/install_generator'
4
+
5
+ class InstallGeneratorTest < Rails::Generators::TestCase
6
+ include GeneratorsTestHelper
7
+ tests Boilerplate::Generators::InstallGenerator
8
+
9
+ def setup
10
+ mkdir_p "#{destination_root}/app/assets/stylesheets"
11
+ mkdir_p "#{destination_root}/app/assets/javascripts"
12
+ cp fixture("application.css"), "#{destination_root}/app/assets/stylesheets"
13
+ cp fixture("application.js"), "#{destination_root}/app/assets/javascripts"
14
+ super
15
+ end
16
+
17
+ test "copies index.html to app/views/layouts/application.html.erb" do
18
+ run_generator
19
+
20
+ assert_file 'app/views/layouts/application.html.erb'
21
+ end
22
+
23
+ test "adds reset.css to the top of the application.css" do
24
+ run_generator
25
+
26
+ assert_file 'app/assets/stylesheets/application.css' do |application|
27
+ assert_match /require reset.*require_self/m, application
28
+ end
29
+ end
30
+
31
+ test "adds plugins.js to the top of the application.js" do
32
+ run_generator
33
+
34
+ assert_file "app/assets/javascripts/application.js" do |application|
35
+ assert_match /\/\/= require plugins[^\/]+\/\/= require jquery/m, application
36
+ end
37
+
38
+ end
39
+
40
+ test "copies public files" do
41
+ run_generator
42
+
43
+ %w{robots.txt crossdomain.xml humans.txt favicon.ico apple-touch-icon-114x114-precomposed.png apple-touch-icon-57x57-precomposed.png apple-touch-icon-72x72-precomposed.png apple-touch-icon-precomposed.png apple-touch-icon.png}.each do |f|
44
+ assert_file "public/#{f}"
45
+ end
46
+ end
47
+
48
+ def fixture(file)
49
+ File.expand_path("fixtures/#{file}", File.dirname(__FILE__))
50
+ end
51
+ end
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+
3
+ class RailsBoilerplateTest < ActiveSupport::TestCase
4
+ def setup
5
+ @app = Dummy::Application
6
+ end
7
+ test 'modernizr is an asset' do
8
+ assert_not_nil @app.assets["modernizr"]
9
+ end
10
+ test 'reset is an asset' do
11
+ assert_not_nil @app.assets["reset"]
12
+ end
13
+ test 'plugins is an js asset' do
14
+ assert_not_nil @app.assets["plugins"]
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ ENV["RAILS_ENV"] = 'test'
2
+
3
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
4
+ require 'rails/test_help'
5
+
6
+ Rails.backtrace_cleaner.remove_silencers!
7
+
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
9
+
10
+ # For Generators
11
+ require 'rails/generators/test_case'
12
+
@@ -0,0 +1,4 @@
1
+ /* Modernizr 2.0.6 | MIT & BSD
2
+ * Contains: All core tests, html5shiv, yepnope, respond.js. Get your own custom build at www.modernizr.com/download/
3
+ */
4
+ ;window.Modernizr=function(a,b,c){function I(){e.input=function(a){for(var b=0,c=a.length;b<c;b++)t[a[b]]=a[b]in l;return t}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)l.setAttribute("type",f=a[d]),e=l.type!=="text",e&&(l.value=m,l.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&l.style.WebkitAppearance!==c?(g.appendChild(l),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(l,null).WebkitAppearance!=="textfield"&&l.offsetHeight!==0,g.removeChild(l)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=l.checkValidity&&l.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(l),g.offsetWidth,e=l.value!=m,g.removeChild(l)):e=l.value!=m)),s[a[d]]=!!e;return s}("search tel url email datetime date month week time datetime-local number range color".split(" "))}function G(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return F(d,b)}function F(a,b){for(var d in a)if(k[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function E(a,b){return!!~(""+a).indexOf(b)}function D(a,b){return typeof a===b}function C(a,b){return B(o.join(a+";")+(b||""))}function B(a){k.cssText=a}var d="2.0.6",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l=b.createElement("input"),m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={svg:"http://www.w3.org/2000/svg"},r={},s={},t={},u=[],v=function(a,c,d,e){var f,h,j,k=b.createElement("div");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:i+(d+1),k.appendChild(j);f=["&shy;","<style>",a,"</style>"].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},w=function(b){if(a.matchMedia)return matchMedia(b).matches;var c;v("@media "+b+" { #"+i+" { position: absolute; } }",function(b){c=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position=="absolute"});return c},x=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=D(e[d],"function"),D(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),y,z={}.hasOwnProperty,A;!D(z,c)&&!D(z.call,c)?A=function(a,b){return z.call(a,b)}:A=function(a,b){return b in a&&D(a.constructor.prototype[b],c)};var H=function(c,d){var f=c.join(""),g=d.length;v(f,function(c,d){var f=b.styleSheets[b.styleSheets.length-1],h=f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"",i=c.childNodes,j={};while(g--)j[i[g].id]=i[g];e.touch="ontouchstart"in a||j.touch.offsetTop===9,e.csstransforms3d=j.csstransforms3d.offsetLeft===9,e.generatedcontent=j.generatedcontent.offsetHeight>=1,e.fontface=/src/i.test(h)&&h.indexOf(d.split(" ")[0])===0},g,d)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",o.join("touch-enabled),("),i,")","{#touch{top:9px;position:absolute}}"].join(""),["@media (",o.join("transform-3d),("),i,")","{#csstransforms3d{left:9px;position:absolute}}"].join(""),['#generatedcontent:after{content:"',m,'";visibility:hidden}'].join("")],["fontface","touch","csstransforms3d","generatedcontent"]);r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},r.canvastext=function(){return!!e.canvas&&!!D(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return e.touch},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b<c;)if(a[p[b].toLowerCase()+"IndexedDB"])return!0;return!!a.indexedDB},r.hashchange=function(){return x("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return!!a.history&&!!history.pushState},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){for(var b=-1,c=p.length;++b<c;)if(a[p[b]+"WebSocket"])return!0;return"WebSocket"in a},r.rgba=function(){B("background-color:rgba(150,255,150,.5)");return E(k.backgroundColor,"rgba")},r.hsla=function(){B("background-color:hsla(120,40%,100%,.5)");return E(k.backgroundColor,"rgba")||E(k.backgroundColor,"hsla")},r.multiplebgs=function(){B("background:url(https://),url(https://),red url(https://)");return/(url\s*\(.*?){3}/.test(k.background)},r.backgroundsize=function(){return G("backgroundSize")},r.borderimage=function(){return G("borderImage")},r.borderradius=function(){return G("borderRadius")},r.boxshadow=function(){return G("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){C("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return G("animationName")},r.csscolumns=function(){return G("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";B((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return E(k.backgroundImage,"gradient")},r.cssreflections=function(){return G("boxReflect")},r.csstransforms=function(){return!!F(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!F(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=e.csstransforms3d);return a},r.csstransitions=function(){return G("transitionProperty")},r.fontface=function(){return e.fontface},r.generatedcontent=function(){return e.generatedcontent},r.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}}catch(e){}return c},r.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")}catch(d){}return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webworkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="<svg/>";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var J in r)A(r,J)&&(y=J.toLowerCase(),e[y]=r[J](),u.push((e[y]?"":"no-")+y));e.input||I(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)A(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return;b=typeof b=="boolean"?b:!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b}return e},B(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b<g)a.createElement(f[b])}a.iepp=a.iepp||{};var d=a.iepp,e=d.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",f=e.split("|"),g=f.length,h=new RegExp("(^|\\s)("+e+")","gi"),i=new RegExp("<(/*)("+e+")","gi"),j=/^\s*[\{\}]\s*$/,k=new RegExp("(^|[^\\n]*?\\s)("+e+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),l=b.createDocumentFragment(),m=b.documentElement,n=m.firstChild,o=b.createElement("body"),p=b.createElement("style"),q=/print|all/,r;d.getCSS=function(a,b){if(a+""===c)return"";var e=-1,f=a.length,g,h=[];while(++e<f){g=a[e];if(g.disabled)continue;b=g.media||b,q.test(b)&&h.push(d.getCSS(g.imports,b),g.cssText),b="all"}return h.join("")},d.parseCSS=function(a){var b=[],c;while((c=k.exec(a))!=null)b.push(((j.exec(c[1])?"\n":c[1])+c[2]+c[3]).replace(h,"$1.iepp_$2")+c[4]);return b.join("\n")},d.writeHTML=function(){var a=-1;r=r||b.body;while(++a<g){var c=b.getElementsByTagName(f[a]),d=c.length,e=-1;while(++e<d)c[e].className.indexOf("iepp_")<0&&(c[e].className+=" iepp_"+f[a])}l.appendChild(r),m.appendChild(o),o.className=r.className,o.id=r.id,o.innerHTML=r.innerHTML.replace(i,"<$1font")},d._beforePrint=function(){p.styleSheet.cssText=d.parseCSS(d.getCSS(b.styleSheets,"all")),d.writeHTML()},d.restoreHTML=function(){o.innerHTML="",m.removeChild(o),m.appendChild(r)},d._afterPrint=function(){d.restoreHTML(),p.styleSheet.cssText=""},s(b),s(l);d.disablePP||(n.insertBefore(p,n.firstChild),p.media="print",p.className="iepp-printshim",a.attachEvent("onbeforeprint",d._beforePrint),a.attachEvent("onafterprint",d._afterPrint))}(a,b),e._version=d,e._prefixes=o,e._domPrefixes=p,e.mq=w,e.hasEvent=x,e.testProp=function(a){return F([a])},e.testAllProps=G,e.testStyles=v,e.prefixed=function(a){return G(a,"pfx")},g.className=g.className.replace(/\bno-js\b/,"")+(f?" js "+u.join(" "):"");return e}(this,this.document),function(a,b){function u(){r(!0)}a.respond={},respond.update=function(){},respond.mediaQueriesSupported=b;if(!b){var c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=j.getElementsByTagName("link"),l=[],m=function(){var b=k,c=b.length,d=0,e,f,g,i;for(;d<c;d++)e=b[d],f=e.href,g=e.media,i=e.rel&&e.rel.toLowerCase()==="stylesheet",!!f&&i&&!h[f]&&(!/^([a-zA-Z]+?:(\/\/)?(www\.)?)/.test(f)||f.replace(RegExp.$1,"").split("/")[0]===a.location.host?l.push({href:f,media:g}):h[f]=!0);n()},n=function(){if(l.length){var a=l.shift();s(a.href,function(b){o(b,a.href,a.media),h[a.href]=!0,n()})}},o=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]+\{[^\}\{]+\})+/gi),g=d&&d.length||0,b=b.substring(0,b.lastIndexOf("/")),h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c,j=0,k,l,m,n,o;b.length&&(b+="/"),i&&(g=1);for(;j<g;j++){k=0,i?(l=c,f.push(h(a))):(l=d[j].match(/@media ([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),n=l.split(","),o=n.length;for(;k<o;k++)m=n[k],e.push({media:m.match(/(only\s+)?([a-zA-Z]+)(\sand)?/)&&RegExp.$2,rules:f.length-1,minw:m.match(/\(min\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1),maxw:m.match(/\(max\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1)})}r()},p,q,r=function(a){var b="clientWidth",h=d[b],l=c.compatMode==="CSS1Compat"&&h||c.body[b]||h,m={},n=c.createDocumentFragment(),o=k[k.length-1],s=(new Date).getTime();if(a&&p&&s-p<i)clearTimeout(q),q=setTimeout(r,i);else{p=s;for(var t in e){var u=e[t];if(!u.minw&&!u.maxw||(!u.minw||u.minw&&l>=u.minw)&&(!u.maxw||u.maxw&&l<=u.maxw))m[u.media]||(m[u.media]=[]),m[u.media].push(f[u.rules])}for(var t in g)g[t]&&g[t].parentNode===j&&j.removeChild(g[t]);for(var t in m){var v=c.createElement("style"),w=m[t].join("\n");v.type="text/css",v.media=t,v.styleSheet?v.styleSheet.cssText=w:v.appendChild(c.createTextNode(w)),n.appendChild(v),g.push(v)}j.insertBefore(n,o.nextSibling)}},s=function(a,b){var c=t();if(!!c){c.open("GET",a,!0),c.onreadystatechange=function(){c.readyState==4&&(c.status==200||c.status==304)&&b(c.responseText)};if(c.readyState==4)return;c.send()}},t=function(){var a=!1,b=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new XMLHttpRequest}],c=b.length;while(c--){try{a=b[c]()}catch(d){continue}break}return function(){return a}}();m(),respond.update=m,a.addEventListener?a.addEventListener("resize",u,!1):a.attachEvent&&a.attachEvent("onresize",u)}}(this,Modernizr.mq("only all")),function(a,b,c){function k(a){return!a||a=="loaded"||a=="complete"}function j(){var a=1,b=-1;while(p.length- ++b)if(p[b].s&&!(a=p[b].r))break;a&&g()}function i(a){var c=b.createElement("script"),d;c.src=a.s,c.onreadystatechange=c.onload=function(){!d&&k(c.readyState)&&(d=1,j(),c.onload=c.onreadystatechange=null)},m(function(){d||(d=1,j())},H.errorTimeout),a.e?c.onload():n.parentNode.insertBefore(c,n)}function h(a){var c=b.createElement("link"),d;c.href=a.s,c.rel="stylesheet",c.type="text/css";if(!a.e&&(w||r)){var e=function(a){m(function(){if(!d)try{a.sheet.cssRules.length?(d=1,j()):e(a)}catch(b){b.code==1e3||b.message=="security"||b.message=="denied"?(d=1,m(function(){j()},0)):e(a)}},0)};e(c)}else c.onload=function(){d||(d=1,m(function(){j()},0))},a.e&&c.onload();m(function(){d||(d=1,j())},H.errorTimeout),!a.e&&n.parentNode.insertBefore(c,n)}function g(){var a=p.shift();q=1,a?a.t?m(function(){a.t=="c"?h(a):i(a)},0):(a(),j()):q=0}function f(a,c,d,e,f,h){function i(){!o&&k(l.readyState)&&(r.r=o=1,!q&&j(),l.onload=l.onreadystatechange=null,m(function(){u.removeChild(l)},0))}var l=b.createElement(a),o=0,r={t:d,s:c,e:h};l.src=l.data=c,!s&&(l.style.display="none"),l.width=l.height="0",a!="object"&&(l.type=d),l.onload=l.onreadystatechange=i,a=="img"?l.onerror=i:a=="script"&&(l.onerror=function(){r.e=r.r=1,g()}),p.splice(e,0,r),u.insertBefore(l,s?null:n),m(function(){o||(u.removeChild(l),r.r=r.e=o=1,j())},H.errorTimeout)}function e(a,b,c){var d=b=="c"?z:y;q=0,b=b||"j",C(a)?f(d,a,b,this.i++,l,c):(p.splice(this.i++,0,a),p.length==1&&g());return this}function d(){var a=H;a.loader={load:e,i:0};return a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=r&&!s,u=s?l:n.parentNode,v=a.opera&&o.call(a.opera)=="[object Opera]",w="webkitAppearance"in l.style,x=w&&"async"in b.createElement("script"),y=r?"object":v||x?"img":"script",z=w?"img":y,A=Array.isArray||function(a){return o.call(a)=="[object Array]"},B=function(a){return Object(a)===a},C=function(a){return typeof a=="string"},D=function(a){return o.call(a)=="[object Function]"},E=[],F={},G,H;H=function(a){function f(a){var b=a.split("!"),c=E.length,d=b.pop(),e=b.length,f={url:d,origUrl:d,prefixes:b},g,h;for(h=0;h<e;h++)g=F[b[h]],g&&(f=g(f));for(h=0;h<c;h++)f=E[h](f);return f}function e(a,b,e,g,h){var i=f(a),j=i.autoCallback;if(!i.bypass){b&&(b=D(b)?b:b[a]||b[g]||b[a.split("/").pop().split("?")[0]]);if(i.instead)return i.instead(a,b,e,g,h);e.load(i.url,i.forceCSS||!i.forceJS&&/css$/.test(i.url)?"c":c,i.noexec),(D(b)||D(j))&&e.load(function(){d(),b&&b(i.origUrl,h,g),j&&j(i.origUrl,h,g)})}}function b(a,b){function c(a){if(C(a))e(a,h,b,0,d);else if(B(a))for(i in a)a.hasOwnProperty(i)&&e(a[i],h,b,i,d)}var d=!!a.test,f=d?a.yep:a.nope,g=a.load||a.both,h=a.callback,i;c(f),c(g),a.complete&&b.load(a.complete)}var g,h,i=this.yepnope.loader;if(C(a))e(a,0,i,0);else if(A(a))for(g=0;g<a.length;g++)h=a[g],C(h)?e(h,0,i,0):A(h)?H(h):B(h)&&b(h,i);else B(a)&&b(a,i)},H.addPrefix=function(a,b){F[a]=b},H.addFilter=function(a){E.push(a)},H.errorTimeout=1e4,b.readyState==null&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",G=function(){b.removeEventListener("DOMContentLoaded",G,0),b.readyState="complete"},0)),a.yepnope=d()}(this,this.document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
@@ -0,0 +1,20 @@
1
+
2
+ // usage: log('inside coolFunc', this, arguments);
3
+ // paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
4
+ window.log = function(){
5
+ log.history = log.history || []; // store logs to an array for reference
6
+ log.history.push(arguments);
7
+ if(this.console) {
8
+ arguments.callee = arguments.callee.caller;
9
+ var newarr = [].slice.call(arguments);
10
+ (typeof console.log === 'object' ? log.apply.call(console.log, console, newarr) : console.log.apply(console, newarr));
11
+ }
12
+ };
13
+
14
+ // make it safe to use console.log always
15
+ (function(b){function c(){}for(var d="assert,clear,count,debug,dir,dirxml,error,exception,firebug,group,groupCollapsed,groupEnd,info,log,memoryProfile,memoryProfileEnd,profile,profileEnd,table,time,timeEnd,timeStamp,trace,warn".split(","),a;a=d.pop();){b[a]=b[a]||c}})((function(){try
16
+ {console.log();return window.console;}catch(err){return window.console={};}})());
17
+
18
+
19
+ // place any jQuery/helper plugins in here, instead of separate, slower script files.
20
+
@@ -0,0 +1,293 @@
1
+ /*
2
+ * HTML5 ✰ Boilerplate
3
+ *
4
+ * What follows is the result of much research on cross-browser styling.
5
+ * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal,
6
+ * Kroc Camen, and the H5BP dev community and team.
7
+ *
8
+ * Detailed information about this CSS: h5bp.com/css
9
+ *
10
+ * ==|== normalize ==========================================================
11
+ */
12
+
13
+
14
+ /* =============================================================================
15
+ HTML5 display definitions
16
+ ========================================================================== */
17
+
18
+ article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
19
+ audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
20
+ audio:not([controls]) { display: none; }
21
+ [hidden] { display: none; }
22
+
23
+
24
+ /* =============================================================================
25
+ Base
26
+ ========================================================================== */
27
+
28
+ /*
29
+ * 1. Correct text resizing oddly in IE6/7 when body font-size is set using em units
30
+ * 2. Force vertical scrollbar in non-IE
31
+ * 3. Prevent iOS text size adjust on device orientation change, without disabling user zoom: h5bp.com/g
32
+ */
33
+
34
+ html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
35
+
36
+ body { margin: 0; font-size: 13px; line-height: 1.231; }
37
+
38
+ body, button, input, select, textarea { font-family: sans-serif; color: #222; }
39
+
40
+ /*
41
+ * Remove text-shadow in selection highlight: h5bp.com/i
42
+ * These selection declarations have to be separate
43
+ * Also: hot pink! (or customize the background color to match your design)
44
+ */
45
+
46
+ ::-moz-selection { background: #fe57a1; color: #fff; text-shadow: none; }
47
+ ::selection { background: #fe57a1; color: #fff; text-shadow: none; }
48
+
49
+
50
+ /* =============================================================================
51
+ Links
52
+ ========================================================================== */
53
+
54
+ a { color: #00e; }
55
+ a:visited { color: #551a8b; }
56
+ a:hover { color: #06e; }
57
+ a:focus { outline: thin dotted; }
58
+
59
+ /* Improve readability when focused and hovered in all browsers: h5bp.com/h */
60
+ a:hover, a:active { outline: 0; }
61
+
62
+
63
+ /* =============================================================================
64
+ Typography
65
+ ========================================================================== */
66
+
67
+ abbr[title] { border-bottom: 1px dotted; }
68
+
69
+ b, strong { font-weight: bold; }
70
+
71
+ blockquote { margin: 1em 40px; }
72
+
73
+ dfn { font-style: italic; }
74
+
75
+ hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
76
+
77
+ ins { background: #ff9; color: #000; text-decoration: none; }
78
+
79
+ mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
80
+
81
+ /* Redeclare monospace font family: h5bp.com/j */
82
+ pre, code, kbd, samp { font-family: monospace, serif; _font-family: 'courier new', monospace; font-size: 1em; }
83
+
84
+ /* Improve readability of pre-formatted text in all browsers */
85
+ pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
86
+
87
+ q { quotes: none; }
88
+ q:before, q:after { content: ""; content: none; }
89
+
90
+ small { font-size: 85%; }
91
+
92
+ /* Position subscript and superscript content without affecting line-height: h5bp.com/k */
93
+ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
94
+ sup { top: -0.5em; }
95
+ sub { bottom: -0.25em; }
96
+
97
+
98
+ /* =============================================================================
99
+ Lists
100
+ ========================================================================== */
101
+
102
+ ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
103
+ dd { margin: 0 0 0 40px; }
104
+ nav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }
105
+
106
+
107
+ /* =============================================================================
108
+ Embedded content
109
+ ========================================================================== */
110
+
111
+ /*
112
+ * 1. Improve image quality when scaled in IE7: h5bp.com/d
113
+ * 2. Remove the gap between images and borders on image containers: h5bp.com/e
114
+ */
115
+
116
+ img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
117
+
118
+ /*
119
+ * Correct overflow not hidden in IE9
120
+ */
121
+
122
+ svg:not(:root) { overflow: hidden; }
123
+
124
+
125
+ /* =============================================================================
126
+ Figures
127
+ ========================================================================== */
128
+
129
+ figure { margin: 0; }
130
+
131
+
132
+ /* =============================================================================
133
+ Forms
134
+ ========================================================================== */
135
+
136
+ form { margin: 0; }
137
+ fieldset { border: 0; margin: 0; padding: 0; }
138
+
139
+ /* Indicate that 'label' will shift focus to the associated form element */
140
+ label { cursor: pointer; }
141
+
142
+ /*
143
+ * 1. Correct color not inheriting in IE6/7/8/9
144
+ * 2. Correct alignment displayed oddly in IE6/7
145
+ */
146
+
147
+ legend { border: 0; *margin-left: -7px; padding: 0; }
148
+
149
+ /*
150
+ * 1. Correct font-size not inheriting in all browsers
151
+ * 2. Remove margins in FF3/4 S5 Chrome
152
+ * 3. Define consistent vertical alignment display in all browsers
153
+ */
154
+
155
+ button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
156
+
157
+ /*
158
+ * 1. Define line-height as normal to match FF3/4 (set using !important in the UA stylesheet)
159
+ * 2. Correct inner spacing displayed oddly in IE6/7
160
+ */
161
+
162
+ button, input { line-height: normal; *overflow: visible; }
163
+
164
+ /*
165
+ * Reintroduce inner spacing in 'table' to avoid overlap and whitespace issues in IE6/7
166
+ */
167
+
168
+ table button, table input { *overflow: auto; }
169
+
170
+ /*
171
+ * 1. Display hand cursor for clickable form elements
172
+ * 2. Allow styling of clickable form elements in iOS
173
+ */
174
+
175
+ button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; }
176
+
177
+ /*
178
+ * Consistent box sizing and appearance
179
+ */
180
+
181
+ input[type="checkbox"], input[type="radio"] { box-sizing: border-box; padding: 0; }
182
+ input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
183
+ input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
184
+
185
+ /*
186
+ * Remove inner padding and border in FF3/4: h5bp.com/l
187
+ */
188
+
189
+ button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
190
+
191
+ /*
192
+ * 1. Remove default vertical scrollbar in IE6/7/8/9
193
+ * 2. Allow only vertical resizing
194
+ */
195
+
196
+ textarea { overflow: auto; vertical-align: top; resize: vertical; }
197
+
198
+ /* Colors for form validity */
199
+ input:valid, textarea:valid { }
200
+ input:invalid, textarea:invalid { background-color: #f0dddd; }
201
+
202
+
203
+ /* =============================================================================
204
+ Tables
205
+ ========================================================================== */
206
+
207
+ table { border-collapse: collapse; border-spacing: 0; }
208
+ td { vertical-align: top; }
209
+
210
+
211
+ /* ==|== primary styles =====================================================
212
+ Author:
213
+ ========================================================================== */
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+ /* ==|== media queries ======================================================
231
+ PLACEHOLDER Media Queries for Responsive Design.
232
+ These override the primary ('mobile first') styles
233
+ Modify as content requires.
234
+ ========================================================================== */
235
+
236
+ @media only screen and (min-width: 480px) {
237
+ /* Style adjustments for viewports 480px and over go here */
238
+
239
+ }
240
+
241
+ @media only screen and (min-width: 768px) {
242
+ /* Style adjustments for viewports 768px and over go here */
243
+
244
+ }
245
+
246
+
247
+
248
+ /* ==|== non-semantic helper classes ========================================
249
+ Please define your styles before this section.
250
+ ========================================================================== */
251
+
252
+ /* For image replacement */
253
+ .ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; }
254
+ .ir br { display: none; }
255
+
256
+ /* Hide from both screenreaders and browsers: h5bp.com/u */
257
+ .hidden { display: none !important; visibility: hidden; }
258
+
259
+ /* Hide only visually, but have it available for screenreaders: h5bp.com/v */
260
+ .visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
261
+
262
+ /* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: h5bp.com/p */
263
+ .visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
264
+
265
+ /* Hide visually and from screenreaders, but maintain layout */
266
+ .invisible { visibility: hidden; }
267
+
268
+ /* Contain floats: h5bp.com/q */
269
+ .clearfix:before, .clearfix:after { content: ""; display: table; }
270
+ .clearfix:after { clear: both; }
271
+ .clearfix { *zoom: 1; }
272
+
273
+
274
+
275
+ /* ==|== print styles =======================================================
276
+ Print styles.
277
+ Inlined to avoid required HTTP connection: h5bp.com/r
278
+ ========================================================================== */
279
+
280
+ @media print {
281
+ * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: h5bp.com/s */
282
+ a, a:visited { text-decoration: underline; }
283
+ a[href]:after { content: " (" attr(href) ")"; }
284
+ abbr[title]:after { content: " (" attr(title) ")"; }
285
+ .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */
286
+ pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
287
+ thead { display: table-header-group; } /* h5bp.com/t */
288
+ tr, img { page-break-inside: avoid; }
289
+ img { max-width: 100% !important; }
290
+ @page { margin: 0.5cm; }
291
+ p, h2, h3 { orphans: 3; widows: 3; }
292
+ h2, h3 { page-break-after: avoid; }
293
+ }