sumatra-rails 0.0.3.1 → 0.0.4
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.
- checksums.yaml +8 -8
- data/Gemfile.lock +32 -32
- data/lib/sumatra/rails/version.rb +1 -1
- data/sumatra-rails.gemspec +1 -1
- data/vendor/assets/javascripts/sumatra.js.coffee +1 -121
- data/vendor/assets/javascripts/sumatra/.env.example +1 -0
- data/vendor/assets/javascripts/sumatra/.gitignore +2 -0
- data/vendor/assets/javascripts/sumatra/Cakefile +27 -0
- data/vendor/assets/javascripts/sumatra/LICENSE.md +20 -0
- data/vendor/assets/javascripts/sumatra/README.md +183 -0
- data/vendor/assets/javascripts/sumatra/component.json +30 -0
- data/vendor/assets/javascripts/sumatra/docs/docco.css +500 -0
- data/vendor/assets/javascripts/sumatra/docs/index.html +177 -0
- data/vendor/assets/javascripts/sumatra/docs/index.md +0 -0
- data/vendor/assets/javascripts/sumatra/docs/plugin.js.html +207 -0
- data/vendor/assets/javascripts/sumatra/docs/public/fonts/aller-bold.eot +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/fonts/aller-bold.ttf +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/fonts/aller-bold.woff +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/fonts/aller-light.eot +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/fonts/aller-light.ttf +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/fonts/aller-light.woff +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/fonts/fleurons.eot +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/fonts/fleurons.ttf +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/fonts/fleurons.woff +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/fonts/novecento-bold.eot +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/fonts/novecento-bold.ttf +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/fonts/novecento-bold.woff +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/images/gray.png +0 -0
- data/vendor/assets/javascripts/sumatra/docs/public/stylesheets/normalize.css +375 -0
- data/vendor/assets/javascripts/sumatra/docs/runtime.js.html +111 -0
- metadata +29 -4
@@ -0,0 +1,177 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<title>Sumatra</title>
|
6
|
+
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
7
|
+
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
|
8
|
+
<link rel="stylesheet" media="all" href="docco.css" />
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<div id="container">
|
12
|
+
<div id="background"></div>
|
13
|
+
|
14
|
+
<ul class="sections">
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
<li id="section-1">
|
19
|
+
<div class="annotation">
|
20
|
+
|
21
|
+
<div class="pilwrap for-h1">
|
22
|
+
<a class="pilcrow" href="#section-1">¶</a>
|
23
|
+
</div>
|
24
|
+
<h1>Sumatra</h1>
|
25
|
+
<p>Sumatra is a CoffeeScript framework for writing jQuery plugins harder,
|
26
|
+
better, faster, stronger.</p>
|
27
|
+
<p>You should use Sumatra if you...</p>
|
28
|
+
<ul>
|
29
|
+
<li>Encapsulate complex jQuery plugins in a service object and call an
|
30
|
+
instance of that service object for each DOM element the plugin
|
31
|
+
selector is passed</li>
|
32
|
+
<li>Enjoy test-driven development, clear code, and convention over
|
33
|
+
configuration</li>
|
34
|
+
<li>Believe unicorns are real</li>
|
35
|
+
</ul>
|
36
|
+
<h2>Why?</h2>
|
37
|
+
<p>A lot of jQuery plugins are written to encapsulate a simple bit of
|
38
|
+
functionality used throughout the application. But jQuery's syntax was
|
39
|
+
designed to improve the way people write JavaScript. CoffeeScript has a
|
40
|
+
similar goal, but approaches it from a different angle, it compiles its
|
41
|
+
syntax into JavaScript but does so in a safe, syntactically correct and
|
42
|
+
(mostly) readable way. This framework unites the two, and finally allows
|
43
|
+
jQuery developers to build plugins in CoffeeScript without making their
|
44
|
+
code look, well, downright ugly!</p>
|
45
|
+
<h2>The Goods</h2>
|
46
|
+
<p>
|
47
|
+
You came here for docs, right?
|
48
|
+
|
49
|
+
<ul>
|
50
|
+
<li><a href="plugin.js.html">SumatraPlugin</a></li>
|
51
|
+
<li><a href="runtime.js.html">sumatra()</a></li>
|
52
|
+
</ul>
|
53
|
+
</p>
|
54
|
+
<h2>Installation</h2>
|
55
|
+
<h3>Requirements</h3>
|
56
|
+
<ul>
|
57
|
+
<li>jQuery</li>
|
58
|
+
<li>CoffeeScript if you want to develop it..</li>
|
59
|
+
</ul>
|
60
|
+
<p>We recommend Bower for installing Sumatra as a component:</p>
|
61
|
+
<pre><code class="lang-bash">$ bower install sumatra</code></pre>
|
62
|
+
<p>However, you can also install Sumatra manually by just including the
|
63
|
+
<code>pkg/sumatra.js</code> file in your javascripts directory.</p>
|
64
|
+
<h2>Usage</h2>
|
65
|
+
<p>Sumatra values convention over configuration, and its usage revolves
|
66
|
+
around an established pattern that hopefully others will find useful.</p>
|
67
|
+
<h3>Defining a Basic Plugin</h3>
|
68
|
+
<p>After loading Sumatra, you can build jQuery plugins that are both clear
|
69
|
+
and superbly terse:</p>
|
70
|
+
<pre><code class="lang-coffeescript">sumatra 'clickMe', ->
|
71
|
+
class ClickMe extends SumatraPlugin
|
72
|
+
action: 'click'
|
73
|
+
perform: (event) =>
|
74
|
+
element_id = @element.attr('id') || '<div>'
|
75
|
+
alert "You just clicked #{element_id}!"</code></pre>
|
76
|
+
<p>All this plugin does is show an <code>alert()</code> when the element is clicked.
|
77
|
+
You can define a single action with <code>action:</code> and then define the
|
78
|
+
<code>perform()</code> event handler that binds to whatever action you've set
|
79
|
+
on the element.</p>
|
80
|
+
<p>To bind an element to this event, just call it like any normal
|
81
|
+
jQuery plugin:</p>
|
82
|
+
<pre><code class="lang-coffeescript">$('#my_element').clickMe();</code></pre>
|
83
|
+
<h3>Parameters</h3>
|
84
|
+
<p>You can also make plugins that pass in options. All Sumatra plugins
|
85
|
+
take an <code>options</code> hash as their only argument, regardless of whether
|
86
|
+
the service object uses them or not.</p>
|
87
|
+
<pre><code class="lang-coffeescript">sumatra 'ajaxSubmit', ->
|
88
|
+
class AjaxSubmit extends SumatraPlugin
|
89
|
+
action: 'submit'
|
90
|
+
mergeOptions: ->
|
91
|
+
@defaults = @_getFormDefaults()
|
92
|
+
_.extend(@options, @defaults)
|
93
|
+
|
94
|
+
perform: (event) =>
|
95
|
+
event.preventDefault()
|
96
|
+
event.stopPropagation()
|
97
|
+
$.ajax @options
|
98
|
+
|
99
|
+
_getFormDefaults: ->
|
100
|
+
{
|
101
|
+
url: @element.attr('action')
|
102
|
+
type: @element.attr('method')
|
103
|
+
error: (message, status, xhr) ->
|
104
|
+
console.log status, message, xhr
|
105
|
+
alert "#{status}: #{message}"
|
106
|
+
}</code></pre>
|
107
|
+
<p>This is an example of <a href="http://jquery.malsup.com/form">ajaxSubmit from the jQuery.form plugin</a>,
|
108
|
+
implemented using Sumatra. It would especially be useful when rendering
|
109
|
+
an inline response with JSON, using something such as Handlebars to
|
110
|
+
compile the JSON data into a logic-less client-side template...</p>
|
111
|
+
<pre><code class="lang-coffeescript">$('form').ajaxSubmit \
|
112
|
+
dataType: 'json'
|
113
|
+
success: (context) =>
|
114
|
+
template = Handlebars.compile $('#response_template')
|
115
|
+
response = template(context)
|
116
|
+
@element.html response</code></pre>
|
117
|
+
<h3>Basic Properties</h3>
|
118
|
+
<p>As a by-product of the jQuery instantation process, each <code>SumatraPlugin</code>
|
119
|
+
comes with the following three properties, for free:</p>
|
120
|
+
<ul>
|
121
|
+
<li><strong>element:</strong> References a single jQuery DOM Object, which can perform
|
122
|
+
basic functionality on the page. It is obtained from the collection of
|
123
|
+
objects which matched the plugin's selector upon instantiation.</li>
|
124
|
+
<li><strong>index:</strong> The index of the jQuery DOM Object in the collection of
|
125
|
+
objects which matched the plugin's selector upon instantiation.</li>
|
126
|
+
<li><strong>options:</strong> A Hash-notated Object obtained as the only argument in
|
127
|
+
the jQuery plugin when instantiated. This object is then merged with
|
128
|
+
the <code>defaults</code> hash, which are default params in the plugin's
|
129
|
+
definition, before initialization occurs.</li>
|
130
|
+
</ul>
|
131
|
+
<h3>Workflow</h3>
|
132
|
+
<p>Each SumatraPlugin has a "workflow" that is expressed as a series of
|
133
|
+
methods, all run in the <code>constructor</code> of the object. The constructor
|
134
|
+
is responsible for setup of the object's basic properties. This method
|
135
|
+
should never be overridden, instead, each step of the instantiation
|
136
|
+
process can be controlled by overriding one of the following methods:</p>
|
137
|
+
<ul>
|
138
|
+
<li><strong>mergeOptions:</strong> Merge the options with the defaults hash. You can
|
139
|
+
override this to use attributes from <code>@element</code> as defaults instead.</li>
|
140
|
+
<li><strong>initialize:</strong> The main override of the constructor method, this is
|
141
|
+
where one would actually "construct" the objects they are going to be
|
142
|
+
using in this plugin instance, bind events, and call helper methods.</li>
|
143
|
+
<li><strong>bindEvents:</strong> This is where the <code>action:</code> event should be bound in
|
144
|
+
some way. In many cases, this is overridden to bind other events as
|
145
|
+
well as the <code>action:</code>, or binding the event as a <code>$(document).on</code>.</li>
|
146
|
+
<li><strong>perform:</strong> The event handler of the plugin, this is normally called
|
147
|
+
when the <code>action:</code> event is fired, but it must be defined if it is
|
148
|
+
called or it will throw an error.</li>
|
149
|
+
</ul>
|
150
|
+
<p>You can define more methods, but these are the only public methods that
|
151
|
+
should be overridden. Any method beginning with <code>_</code> is considered
|
152
|
+
"private" and should not be overridden. Please carry this convention
|
153
|
+
to your own code as well.</p>
|
154
|
+
<h2>Development</h2>
|
155
|
+
<p>You can build this code into JavaScript by running the following
|
156
|
+
command at the root dir:</p>
|
157
|
+
<pre><code class="lang-bash">$ npm install && cake build</code></pre>
|
158
|
+
<h3>Contributions</h3>
|
159
|
+
<p>Contributions will be accepted via Git/GitHub pull requests, as long as
|
160
|
+
you write tests that prove your contributions work. We use Jasmine to
|
161
|
+
write tests in CoffeeScript (you know, for the actual framework?) and
|
162
|
+
RSpec to write tests for the Rails helpers.</p>
|
163
|
+
<h3>Releases</h3>
|
164
|
+
<p>All releases will be made in both CoffeeScript and JavaScript, and
|
165
|
+
available simultaneously on the Bower and RubyGems package managers.
|
166
|
+
We use Bower to manage the standalone JavaScript code which has no
|
167
|
+
dependency on Sprockets, Rails, or anything Ruby.</p>
|
168
|
+
<p>This code is released under the <a href="https://github.com/tubbo/sumatra/blob/master/LICENSE.md">MIT License</a>.</p>
|
169
|
+
|
170
|
+
</div>
|
171
|
+
|
172
|
+
</li>
|
173
|
+
|
174
|
+
</ul>
|
175
|
+
</div>
|
176
|
+
</body>
|
177
|
+
</html>
|
File without changes
|
@@ -0,0 +1,207 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<title>plugin.js.coffee</title>
|
6
|
+
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
7
|
+
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
|
8
|
+
<link rel="stylesheet" media="all" href="docco.css" />
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<div id="container">
|
12
|
+
<div id="background"></div>
|
13
|
+
|
14
|
+
<ul class="sections">
|
15
|
+
|
16
|
+
<li id="title">
|
17
|
+
<div class="annotation">
|
18
|
+
<h1>plugin.js.coffee</h1>
|
19
|
+
</div>
|
20
|
+
</li>
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
<li id="section-1">
|
25
|
+
<div class="annotation">
|
26
|
+
|
27
|
+
<div class="pilwrap for-h2">
|
28
|
+
<a class="pilcrow" href="#section-1">¶</a>
|
29
|
+
</div>
|
30
|
+
<h2>SumatraPlugin</h2>
|
31
|
+
|
32
|
+
</div>
|
33
|
+
|
34
|
+
</li>
|
35
|
+
|
36
|
+
|
37
|
+
<li id="section-2">
|
38
|
+
<div class="annotation">
|
39
|
+
|
40
|
+
<div class="pilwrap ">
|
41
|
+
<a class="pilcrow" href="#section-2">¶</a>
|
42
|
+
</div>
|
43
|
+
<p>A prototype object for common actions when defining jQuery plugins
|
44
|
+
in the Sumatra framework. It is designed so that you never have to
|
45
|
+
override the constructor. Instead, the constructor sets up a common
|
46
|
+
method interface for both initialization (which would happen after
|
47
|
+
construction) and the binding of events, a common task in jQuery
|
48
|
+
plugins. This prototype even handles some of that for you, with
|
49
|
+
the default <code>bindEvents()</code> being bound to call the <code>perform()</code>
|
50
|
+
method (which must be defined by the object extending <code>SumatraPlugin</code>)
|
51
|
+
whenever the element it was constructed with triggers the event
|
52
|
+
defined by <code>action</code>.</p>
|
53
|
+
<p>So essentially, you can define almost any jQuery plugin using this
|
54
|
+
interface, even though the only thing binding it to the <code>sumatra</code>
|
55
|
+
function is its constructor that takes 3 parameters.</p>
|
56
|
+
<p><code>SumatraPlugin</code> also has facilities for dealing with an options hash
|
57
|
+
and merging said options with defaults. You can define the default
|
58
|
+
options for your plugin like so:</p>
|
59
|
+
<pre><code>sumatra 'clickToGo', ->
|
60
|
+
class ClickToGo extends SumatraPlugin
|
61
|
+
action: 'click'
|
62
|
+
defaults: { to: 'http://google.com' }
|
63
|
+
perform: (event) =>
|
64
|
+
if confirm "Are you sure you want to go to #{@options.goTo}?"
|
65
|
+
window.location = @options.goTo</code></pre>
|
66
|
+
<p>Then, when instantiating, just override them.</p>
|
67
|
+
<pre><code>$('a').clickToGo(to: 'http://yahoo.com');</code></pre>
|
68
|
+
<p>This removes the need for writing that boilerplate options hash extend
|
69
|
+
code every time you write a jQuery plugin that takes options. All
|
70
|
+
plugins defined with <code>sumatra()</code> take an optional options hash, which is
|
71
|
+
<code>{}</code> by default, in case your plugin doesn't require options.</p>
|
72
|
+
|
73
|
+
</div>
|
74
|
+
|
75
|
+
<div class="content"><div class="highlight"><pre><span class="class"><span class="keyword">class</span> @<span class="title">SumatraPlugin</span></span></pre></div></div>
|
76
|
+
|
77
|
+
</li>
|
78
|
+
|
79
|
+
|
80
|
+
<li id="section-3">
|
81
|
+
<div class="annotation">
|
82
|
+
|
83
|
+
<div class="pilwrap ">
|
84
|
+
<a class="pilcrow" href="#section-3">¶</a>
|
85
|
+
</div>
|
86
|
+
<p>The event to bind to if <code>perform()</code> is defined.</p>
|
87
|
+
|
88
|
+
</div>
|
89
|
+
|
90
|
+
<div class="content"><div class="highlight"><pre>action: <span class="string">'one'</span></pre></div></div>
|
91
|
+
|
92
|
+
</li>
|
93
|
+
|
94
|
+
|
95
|
+
<li id="section-4">
|
96
|
+
<div class="annotation">
|
97
|
+
|
98
|
+
<div class="pilwrap ">
|
99
|
+
<a class="pilcrow" href="#section-4">¶</a>
|
100
|
+
</div>
|
101
|
+
<p>A hash of attributes that are extended with an options hash passed
|
102
|
+
into the jQuery plugin upon instantiation. Useful for setting up
|
103
|
+
data that is required.</p>
|
104
|
+
|
105
|
+
</div>
|
106
|
+
|
107
|
+
<div class="content"><div class="highlight"><pre>defaults: {}</pre></div></div>
|
108
|
+
|
109
|
+
</li>
|
110
|
+
|
111
|
+
|
112
|
+
<li id="section-5">
|
113
|
+
<div class="annotation">
|
114
|
+
|
115
|
+
<div class="pilwrap ">
|
116
|
+
<a class="pilcrow" href="#section-5">¶</a>
|
117
|
+
</div>
|
118
|
+
<p>Instantiate a <code>SumatraPlugin</code> and bind it to the current element
|
119
|
+
with options. This also initiates the workflow.</p>
|
120
|
+
<p><strong>DO NOT OVERRIDE!!</strong></p>
|
121
|
+
|
122
|
+
</div>
|
123
|
+
|
124
|
+
<div class="content"><div class="highlight"><pre>constructor: (current_element, index_of_query, init_options) ->
|
125
|
+
<span class="property">@element</span> = $(current_element)
|
126
|
+
<span class="property">@index</span> = index_of_query
|
127
|
+
<span class="property">@options</span> = <span class="property">@mergeDefaultsWith</span> init_options
|
128
|
+
<span class="property">@initialize</span>() <span class="keyword">and</span> <span class="property">@bindEvents</span>()</pre></div></div>
|
129
|
+
|
130
|
+
</li>
|
131
|
+
|
132
|
+
|
133
|
+
<li id="section-6">
|
134
|
+
<div class="annotation">
|
135
|
+
|
136
|
+
<div class="pilwrap ">
|
137
|
+
<a class="pilcrow" href="#section-6">¶</a>
|
138
|
+
</div>
|
139
|
+
<p>Merge <code>options</code> hash with the <code>defaults</code> as set in the definition
|
140
|
+
of this object.</p>
|
141
|
+
|
142
|
+
</div>
|
143
|
+
|
144
|
+
<div class="content"><div class="highlight"><pre>mergeDefaultsWith: (options) ->
|
145
|
+
_.extend <span class="property">@defaults</span>, <span class="property">@options</span></pre></div></div>
|
146
|
+
|
147
|
+
</li>
|
148
|
+
|
149
|
+
|
150
|
+
<li id="section-7">
|
151
|
+
<div class="annotation">
|
152
|
+
|
153
|
+
<div class="pilwrap ">
|
154
|
+
<a class="pilcrow" href="#section-7">¶</a>
|
155
|
+
</div>
|
156
|
+
<p>Run custom constructor code, but blocks instantiation if this method
|
157
|
+
returns <code>false</code>. This method was pretty much designed to be overridden.</p>
|
158
|
+
|
159
|
+
</div>
|
160
|
+
|
161
|
+
<div class="content"><div class="highlight"><pre>initialize: ->
|
162
|
+
<span class="literal">true</span></pre></div></div>
|
163
|
+
|
164
|
+
</li>
|
165
|
+
|
166
|
+
|
167
|
+
<li id="section-8">
|
168
|
+
<div class="annotation">
|
169
|
+
|
170
|
+
<div class="pilwrap ">
|
171
|
+
<a class="pilcrow" href="#section-8">¶</a>
|
172
|
+
</div>
|
173
|
+
<p>Bind the <code>perform()</code> method to the <code>action</code> as set in the definition
|
174
|
+
of this plugin. Overriding this method removes the guarantee that
|
175
|
+
perform() will be called at all...</p>
|
176
|
+
|
177
|
+
</div>
|
178
|
+
|
179
|
+
<div class="content"><div class="highlight"><pre>bindEvents: ->
|
180
|
+
<span class="keyword">if</span> <span class="property">@action</span>?
|
181
|
+
<span class="property">@element</span>.<span class="literal">on</span> <span class="property">@action</span>, <span class="property">@perform</span></pre></div></div>
|
182
|
+
|
183
|
+
</li>
|
184
|
+
|
185
|
+
|
186
|
+
<li id="section-9">
|
187
|
+
<div class="annotation">
|
188
|
+
|
189
|
+
<div class="pilwrap ">
|
190
|
+
<a class="pilcrow" href="#section-9">¶</a>
|
191
|
+
</div>
|
192
|
+
<p>The event binding that handles <code>action</code>. Override this with your own
|
193
|
+
method. You must override this method or the <code>bindEvents</code> method to
|
194
|
+
get this plugin to do anything. It takes a single argument, <code>event</code>,
|
195
|
+
which represents the given DOMEvent represented by <code>action</code> as passed
|
196
|
+
in by <code>jQuery.on</code>.</p>
|
197
|
+
|
198
|
+
</div>
|
199
|
+
|
200
|
+
<div class="content"><div class="highlight"><pre>perform: <span class="literal">null</span></pre></div></div>
|
201
|
+
|
202
|
+
</li>
|
203
|
+
|
204
|
+
</ul>
|
205
|
+
</div>
|
206
|
+
</body>
|
207
|
+
</html>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,375 @@
|
|
1
|
+
/*! normalize.css v2.0.1 | MIT License | git.io/normalize */
|
2
|
+
|
3
|
+
/* ==========================================================================
|
4
|
+
HTML5 display definitions
|
5
|
+
========================================================================== */
|
6
|
+
|
7
|
+
/*
|
8
|
+
* Corrects `block` display not defined in IE 8/9.
|
9
|
+
*/
|
10
|
+
|
11
|
+
article,
|
12
|
+
aside,
|
13
|
+
details,
|
14
|
+
figcaption,
|
15
|
+
figure,
|
16
|
+
footer,
|
17
|
+
header,
|
18
|
+
hgroup,
|
19
|
+
nav,
|
20
|
+
section,
|
21
|
+
summary {
|
22
|
+
display: block;
|
23
|
+
}
|
24
|
+
|
25
|
+
/*
|
26
|
+
* Corrects `inline-block` display not defined in IE 8/9.
|
27
|
+
*/
|
28
|
+
|
29
|
+
audio,
|
30
|
+
canvas,
|
31
|
+
video {
|
32
|
+
display: inline-block;
|
33
|
+
}
|
34
|
+
|
35
|
+
/*
|
36
|
+
* Prevents modern browsers from displaying `audio` without controls.
|
37
|
+
* Remove excess height in iOS 5 devices.
|
38
|
+
*/
|
39
|
+
|
40
|
+
audio:not([controls]) {
|
41
|
+
display: none;
|
42
|
+
height: 0;
|
43
|
+
}
|
44
|
+
|
45
|
+
/*
|
46
|
+
* Addresses styling for `hidden` attribute not present in IE 8/9.
|
47
|
+
*/
|
48
|
+
|
49
|
+
[hidden] {
|
50
|
+
display: none;
|
51
|
+
}
|
52
|
+
|
53
|
+
/* ==========================================================================
|
54
|
+
Base
|
55
|
+
========================================================================== */
|
56
|
+
|
57
|
+
/*
|
58
|
+
* 1. Sets default font family to sans-serif.
|
59
|
+
* 2. Prevents iOS text size adjust after orientation change, without disabling
|
60
|
+
* user zoom.
|
61
|
+
*/
|
62
|
+
|
63
|
+
html {
|
64
|
+
font-family: sans-serif; /* 1 */
|
65
|
+
-webkit-text-size-adjust: 100%; /* 2 */
|
66
|
+
-ms-text-size-adjust: 100%; /* 2 */
|
67
|
+
}
|
68
|
+
|
69
|
+
/*
|
70
|
+
* Removes default margin.
|
71
|
+
*/
|
72
|
+
|
73
|
+
body {
|
74
|
+
margin: 0;
|
75
|
+
}
|
76
|
+
|
77
|
+
/* ==========================================================================
|
78
|
+
Links
|
79
|
+
========================================================================== */
|
80
|
+
|
81
|
+
/*
|
82
|
+
* Addresses `outline` inconsistency between Chrome and other browsers.
|
83
|
+
*/
|
84
|
+
|
85
|
+
a:focus {
|
86
|
+
outline: thin dotted;
|
87
|
+
}
|
88
|
+
|
89
|
+
/*
|
90
|
+
* Improves readability when focused and also mouse hovered in all browsers.
|
91
|
+
*/
|
92
|
+
|
93
|
+
a:active,
|
94
|
+
a:hover {
|
95
|
+
outline: 0;
|
96
|
+
}
|
97
|
+
|
98
|
+
/* ==========================================================================
|
99
|
+
Typography
|
100
|
+
========================================================================== */
|
101
|
+
|
102
|
+
/*
|
103
|
+
* Addresses `h1` font sizes within `section` and `article` in Firefox 4+,
|
104
|
+
* Safari 5, and Chrome.
|
105
|
+
*/
|
106
|
+
|
107
|
+
h1 {
|
108
|
+
font-size: 2em;
|
109
|
+
}
|
110
|
+
|
111
|
+
/*
|
112
|
+
* Addresses styling not present in IE 8/9, Safari 5, and Chrome.
|
113
|
+
*/
|
114
|
+
|
115
|
+
abbr[title] {
|
116
|
+
border-bottom: 1px dotted;
|
117
|
+
}
|
118
|
+
|
119
|
+
/*
|
120
|
+
* Addresses style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
|
121
|
+
*/
|
122
|
+
|
123
|
+
b,
|
124
|
+
strong {
|
125
|
+
font-weight: bold;
|
126
|
+
}
|
127
|
+
|
128
|
+
/*
|
129
|
+
* Addresses styling not present in Safari 5 and Chrome.
|
130
|
+
*/
|
131
|
+
|
132
|
+
dfn {
|
133
|
+
font-style: italic;
|
134
|
+
}
|
135
|
+
|
136
|
+
/*
|
137
|
+
* Addresses styling not present in IE 8/9.
|
138
|
+
*/
|
139
|
+
|
140
|
+
mark {
|
141
|
+
background: #ff0;
|
142
|
+
color: #000;
|
143
|
+
}
|
144
|
+
|
145
|
+
|
146
|
+
/*
|
147
|
+
* Corrects font family set oddly in Safari 5 and Chrome.
|
148
|
+
*/
|
149
|
+
|
150
|
+
code,
|
151
|
+
kbd,
|
152
|
+
pre,
|
153
|
+
samp {
|
154
|
+
font-family: monospace, serif;
|
155
|
+
font-size: 1em;
|
156
|
+
}
|
157
|
+
|
158
|
+
/*
|
159
|
+
* Improves readability of pre-formatted text in all browsers.
|
160
|
+
*/
|
161
|
+
|
162
|
+
pre {
|
163
|
+
white-space: pre;
|
164
|
+
white-space: pre-wrap;
|
165
|
+
word-wrap: break-word;
|
166
|
+
}
|
167
|
+
|
168
|
+
/*
|
169
|
+
* Sets consistent quote types.
|
170
|
+
*/
|
171
|
+
|
172
|
+
q {
|
173
|
+
quotes: "\201C" "\201D" "\2018" "\2019";
|
174
|
+
}
|
175
|
+
|
176
|
+
/*
|
177
|
+
* Addresses inconsistent and variable font size in all browsers.
|
178
|
+
*/
|
179
|
+
|
180
|
+
small {
|
181
|
+
font-size: 80%;
|
182
|
+
}
|
183
|
+
|
184
|
+
/*
|
185
|
+
* Prevents `sub` and `sup` affecting `line-height` in all browsers.
|
186
|
+
*/
|
187
|
+
|
188
|
+
sub,
|
189
|
+
sup {
|
190
|
+
font-size: 75%;
|
191
|
+
line-height: 0;
|
192
|
+
position: relative;
|
193
|
+
vertical-align: baseline;
|
194
|
+
}
|
195
|
+
|
196
|
+
sup {
|
197
|
+
top: -0.5em;
|
198
|
+
}
|
199
|
+
|
200
|
+
sub {
|
201
|
+
bottom: -0.25em;
|
202
|
+
}
|
203
|
+
|
204
|
+
/* ==========================================================================
|
205
|
+
Embedded content
|
206
|
+
========================================================================== */
|
207
|
+
|
208
|
+
/*
|
209
|
+
* Removes border when inside `a` element in IE 8/9.
|
210
|
+
*/
|
211
|
+
|
212
|
+
img {
|
213
|
+
border: 0;
|
214
|
+
}
|
215
|
+
|
216
|
+
/*
|
217
|
+
* Corrects overflow displayed oddly in IE 9.
|
218
|
+
*/
|
219
|
+
|
220
|
+
svg:not(:root) {
|
221
|
+
overflow: hidden;
|
222
|
+
}
|
223
|
+
|
224
|
+
/* ==========================================================================
|
225
|
+
Figures
|
226
|
+
========================================================================== */
|
227
|
+
|
228
|
+
/*
|
229
|
+
* Addresses margin not present in IE 8/9 and Safari 5.
|
230
|
+
*/
|
231
|
+
|
232
|
+
figure {
|
233
|
+
margin: 0;
|
234
|
+
}
|
235
|
+
|
236
|
+
/* ==========================================================================
|
237
|
+
Forms
|
238
|
+
========================================================================== */
|
239
|
+
|
240
|
+
/*
|
241
|
+
* Define consistent border, margin, and padding.
|
242
|
+
*/
|
243
|
+
|
244
|
+
fieldset {
|
245
|
+
border: 1px solid #c0c0c0;
|
246
|
+
margin: 0 2px;
|
247
|
+
padding: 0.35em 0.625em 0.75em;
|
248
|
+
}
|
249
|
+
|
250
|
+
/*
|
251
|
+
* 1. Corrects color not being inherited in IE 8/9.
|
252
|
+
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
253
|
+
*/
|
254
|
+
|
255
|
+
legend {
|
256
|
+
border: 0; /* 1 */
|
257
|
+
padding: 0; /* 2 */
|
258
|
+
}
|
259
|
+
|
260
|
+
/*
|
261
|
+
* 1. Corrects font family not being inherited in all browsers.
|
262
|
+
* 2. Corrects font size not being inherited in all browsers.
|
263
|
+
* 3. Addresses margins set differently in Firefox 4+, Safari 5, and Chrome
|
264
|
+
*/
|
265
|
+
|
266
|
+
button,
|
267
|
+
input,
|
268
|
+
select,
|
269
|
+
textarea {
|
270
|
+
font-family: inherit; /* 1 */
|
271
|
+
font-size: 100%; /* 2 */
|
272
|
+
margin: 0; /* 3 */
|
273
|
+
}
|
274
|
+
|
275
|
+
/*
|
276
|
+
* Addresses Firefox 4+ setting `line-height` on `input` using `!important` in
|
277
|
+
* the UA stylesheet.
|
278
|
+
*/
|
279
|
+
|
280
|
+
button,
|
281
|
+
input {
|
282
|
+
line-height: normal;
|
283
|
+
}
|
284
|
+
|
285
|
+
/*
|
286
|
+
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
287
|
+
* and `video` controls.
|
288
|
+
* 2. Corrects inability to style clickable `input` types in iOS.
|
289
|
+
* 3. Improves usability and consistency of cursor style between image-type
|
290
|
+
* `input` and others.
|
291
|
+
*/
|
292
|
+
|
293
|
+
button,
|
294
|
+
html input[type="button"], /* 1 */
|
295
|
+
input[type="reset"],
|
296
|
+
input[type="submit"] {
|
297
|
+
-webkit-appearance: button; /* 2 */
|
298
|
+
cursor: pointer; /* 3 */
|
299
|
+
}
|
300
|
+
|
301
|
+
/*
|
302
|
+
* Re-set default cursor for disabled elements.
|
303
|
+
*/
|
304
|
+
|
305
|
+
button[disabled],
|
306
|
+
input[disabled] {
|
307
|
+
cursor: default;
|
308
|
+
}
|
309
|
+
|
310
|
+
/*
|
311
|
+
* 1. Addresses box sizing set to `content-box` in IE 8/9.
|
312
|
+
* 2. Removes excess padding in IE 8/9.
|
313
|
+
*/
|
314
|
+
|
315
|
+
input[type="checkbox"],
|
316
|
+
input[type="radio"] {
|
317
|
+
box-sizing: border-box; /* 1 */
|
318
|
+
padding: 0; /* 2 */
|
319
|
+
}
|
320
|
+
|
321
|
+
/*
|
322
|
+
* 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome.
|
323
|
+
* 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome
|
324
|
+
* (include `-moz` to future-proof).
|
325
|
+
*/
|
326
|
+
|
327
|
+
input[type="search"] {
|
328
|
+
-webkit-appearance: textfield; /* 1 */
|
329
|
+
-moz-box-sizing: content-box;
|
330
|
+
-webkit-box-sizing: content-box; /* 2 */
|
331
|
+
box-sizing: content-box;
|
332
|
+
}
|
333
|
+
|
334
|
+
/*
|
335
|
+
* Removes inner padding and search cancel button in Safari 5 and Chrome
|
336
|
+
* on OS X.
|
337
|
+
*/
|
338
|
+
|
339
|
+
input[type="search"]::-webkit-search-cancel-button,
|
340
|
+
input[type="search"]::-webkit-search-decoration {
|
341
|
+
-webkit-appearance: none;
|
342
|
+
}
|
343
|
+
|
344
|
+
/*
|
345
|
+
* Removes inner padding and border in Firefox 4+.
|
346
|
+
*/
|
347
|
+
|
348
|
+
button::-moz-focus-inner,
|
349
|
+
input::-moz-focus-inner {
|
350
|
+
border: 0;
|
351
|
+
padding: 0;
|
352
|
+
}
|
353
|
+
|
354
|
+
/*
|
355
|
+
* 1. Removes default vertical scrollbar in IE 8/9.
|
356
|
+
* 2. Improves readability and alignment in all browsers.
|
357
|
+
*/
|
358
|
+
|
359
|
+
textarea {
|
360
|
+
overflow: auto; /* 1 */
|
361
|
+
vertical-align: top; /* 2 */
|
362
|
+
}
|
363
|
+
|
364
|
+
/* ==========================================================================
|
365
|
+
Tables
|
366
|
+
========================================================================== */
|
367
|
+
|
368
|
+
/*
|
369
|
+
* Remove most spacing between table cells.
|
370
|
+
*/
|
371
|
+
|
372
|
+
table {
|
373
|
+
border-collapse: collapse;
|
374
|
+
border-spacing: 0;
|
375
|
+
}
|