rails-boilerplate 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +9 -0
- data/.gitmodules +3 -0
- data/Gemfile +11 -0
- data/Guardfile +14 -0
- data/LICENSE +19 -0
- data/README.md +37 -0
- data/Rakefile +73 -0
- data/html5-boilerplate/.gitattributes +1 -0
- data/html5-boilerplate/.gitignore +41 -0
- data/html5-boilerplate/.htaccess +506 -0
- data/html5-boilerplate/404.html +38 -0
- data/html5-boilerplate/README.md +387 -0
- data/html5-boilerplate/apple-touch-icon-114x114-precomposed.png +0 -0
- data/html5-boilerplate/apple-touch-icon-57x57-precomposed.png +0 -0
- data/html5-boilerplate/apple-touch-icon-72x72-precomposed.png +0 -0
- data/html5-boilerplate/apple-touch-icon-precomposed.png +0 -0
- data/html5-boilerplate/apple-touch-icon.png +0 -0
- data/html5-boilerplate/build/build.xml +1051 -0
- data/html5-boilerplate/build/config/default.properties +116 -0
- data/html5-boilerplate/build/config/manifest.appcache +20 -0
- data/html5-boilerplate/build/config/project.properties +96 -0
- data/html5-boilerplate/build/createproject.sh +50 -0
- data/html5-boilerplate/build/project.xml +7 -0
- data/html5-boilerplate/build/runbuildscript.bat +6 -0
- data/html5-boilerplate/build/tools/ant-contrib-1.0b3.jar +0 -0
- data/html5-boilerplate/build/tools/closure-compiler-v1346.jar +0 -0
- data/html5-boilerplate/build/tools/csslint-rhino.js +11138 -0
- data/html5-boilerplate/build/tools/fulljshint.js +5904 -0
- data/html5-boilerplate/build/tools/fulljslint.js +6651 -0
- data/html5-boilerplate/build/tools/htmlcompressor-1.4.3.jar +0 -0
- data/html5-boilerplate/build/tools/jpegtran.exe +0 -0
- data/html5-boilerplate/build/tools/optipng-0.6.4-exe/LICENSE.txt +21 -0
- data/html5-boilerplate/build/tools/optipng-0.6.4-exe/optipng.exe +0 -0
- data/html5-boilerplate/build/tools/rhino.jar +0 -0
- data/html5-boilerplate/build/tools/yuicompressor-2.4.5.jar +0 -0
- data/html5-boilerplate/crossdomain.xml +25 -0
- data/html5-boilerplate/css/style.css +293 -0
- data/html5-boilerplate/demo/elements.html +493 -0
- data/html5-boilerplate/demo/hack.css +84 -0
- data/html5-boilerplate/demo/hack2.css +41 -0
- data/html5-boilerplate/demo/internet_explorer.png +0 -0
- data/html5-boilerplate/demo/test_tubes.png +0 -0
- data/html5-boilerplate/demo/tests.html +300 -0
- data/html5-boilerplate/favicon.ico +0 -0
- data/html5-boilerplate/humans.txt +43 -0
- data/html5-boilerplate/img/.gitignore +2 -0
- data/html5-boilerplate/index.html +79 -0
- data/html5-boilerplate/js/libs/jquery-1.6.3.js +9044 -0
- data/html5-boilerplate/js/libs/jquery-1.6.3.min.js +4 -0
- data/html5-boilerplate/js/libs/modernizr-2.0.6.min.js +4 -0
- data/html5-boilerplate/js/mylibs/.gitignore +2 -0
- data/html5-boilerplate/js/plugins.js +20 -0
- data/html5-boilerplate/js/script.js +8 -0
- data/html5-boilerplate/robots.txt +5 -0
- data/html5-boilerplate/test/index.html +31 -0
- data/html5-boilerplate/test/qunit/qunit.css +148 -0
- data/html5-boilerplate/test/qunit/qunit.js +1265 -0
- data/html5-boilerplate/test/tests.js +24 -0
- data/index.html.patch +62 -0
- data/lib/generators/boilerplate/install/install_generator.rb +33 -0
- data/lib/generators/boilerplate/install/templates/apple-touch-icon-114x114-precomposed.png +0 -0
- data/lib/generators/boilerplate/install/templates/apple-touch-icon-57x57-precomposed.png +0 -0
- data/lib/generators/boilerplate/install/templates/apple-touch-icon-72x72-precomposed.png +0 -0
- data/lib/generators/boilerplate/install/templates/apple-touch-icon-precomposed.png +0 -0
- data/lib/generators/boilerplate/install/templates/apple-touch-icon.png +0 -0
- data/lib/generators/boilerplate/install/templates/crossdomain.xml +25 -0
- data/lib/generators/boilerplate/install/templates/favicon.ico +0 -0
- data/lib/generators/boilerplate/install/templates/humans.txt +43 -0
- data/lib/generators/boilerplate/install/templates/index.html +60 -0
- data/lib/generators/boilerplate/install/templates/robots.txt +5 -0
- data/lib/generators/boilerplate/resource_helpers.rb +13 -0
- data/lib/rails_boilerplate.rb +7 -0
- data/lib/rails_boilerplate/version.rb +3 -0
- data/rails-boilerplate.gemspec +24 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/home_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/home/index.html.erb +1 -0
- data/test/dummy/app/views/layouts/application.html.erb +68 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +43 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +22 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +25 -0
- data/test/dummy/config/environments/production.rb +49 -0
- data/test/dummy/config/environments/test.rb +35 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +10 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +26 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/public/javascripts/application.js +2 -0
- data/test/dummy/public/javascripts/controls.js +965 -0
- data/test/dummy/public/javascripts/dragdrop.js +974 -0
- data/test/dummy/public/javascripts/effects.js +1123 -0
- data/test/dummy/public/javascripts/prototype.js +6001 -0
- data/test/dummy/public/javascripts/rails.js +191 -0
- data/test/dummy/public/stylesheets/.gitkeep +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/generators/fixtures/application.css +7 -0
- data/test/generators/fixtures/application.js +9 -0
- data/test/generators/generators_test_helper.rb +8 -0
- data/test/generators/install_generator_test.rb +51 -0
- data/test/rails_boilerplate_test.rb +16 -0
- data/test/test_helper.rb +12 -0
- data/vendor/assets/javascripts/modernizr.js +4 -0
- data/vendor/assets/javascripts/plugins.js +20 -0
- data/vendor/assets/stylesheets/reset.css +293 -0
- 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,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
|
data/test/test_helper.rb
ADDED
@@ -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=["­","<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
|
+
}
|