locomotivecms_wagon 2.0.0.rc3 → 2.0.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/generators/blank/Gemfile.tt +8 -5
  4. data/generators/blank/Guardfile +22 -0
  5. data/generators/bootstrap/Gemfile.tt +7 -4
  6. data/generators/bootstrap/Guardfile +22 -0
  7. data/generators/bootstrap/public/stylesheets/bootstrap.css +1 -1
  8. data/generators/bootstrap/public/stylesheets/bootstrap.scss +1 -1
  9. data/generators/cloned/Gemfile.tt +7 -4
  10. data/generators/cloned/Guardfile +22 -0
  11. data/generators/foundation5/Gemfile.tt +7 -4
  12. data/generators/foundation5/Guardfile +22 -0
  13. data/lib/locomotive/wagon/cli.rb +1 -1
  14. data/lib/locomotive/wagon/commands/pull_sub_commands/concerns/assets_concern.rb +1 -1
  15. data/lib/locomotive/wagon/commands/push_sub_commands/push_theme_assets_command.rb +23 -3
  16. data/lib/locomotive/wagon/commands/serve_command.rb +2 -2
  17. data/lib/locomotive/wagon/version.rb +1 -1
  18. data/locomotivecms_wagon.gemspec +4 -3
  19. data/spec/fixtures/cassettes/authenticate.yml +27 -27
  20. data/spec/fixtures/cassettes/push.yml +1036 -1110
  21. data/spec/unit/commands/pull_sub_commands/concerns/assets_concern_spec.rb +24 -4
  22. data/spec/unit/commands/push_sub_commands/push_theme_assets_command_spec.rb +42 -0
  23. metadata +28 -99
  24. data/generators/foundation5/favicon.ico +0 -0
  25. data/generators/line_case/Gemfile.tt +0 -21
  26. data/generators/line_case/app/content_types/categories.yml +0 -56
  27. data/generators/line_case/app/content_types/emails.yml +0 -35
  28. data/generators/line_case/app/content_types/projects.yml +0 -58
  29. data/generators/line_case/app/views/pages/404.liquid.haml +0 -11
  30. data/generators/line_case/app/views/pages/email-registered.liquid.haml +0 -13
  31. data/generators/line_case/app/views/pages/index.liquid.haml +0 -110
  32. data/generators/line_case/app/views/pages/projects/content_type_template.liquid.haml +0 -32
  33. data/generators/line_case/app/views/snippets/newsletter_form.liquid.haml +0 -14
  34. data/generators/line_case/app/views/snippets/projects.liquid.haml +0 -17
  35. data/generators/line_case/app/views/snippets/social_links.liquid.haml +0 -19
  36. data/generators/line_case/config/deploy.yml +0 -15
  37. data/generators/line_case/config/site.yml.tt +0 -33
  38. data/generators/line_case/config/translations.yml +0 -8
  39. data/generators/line_case/data/categories.yml +0 -8
  40. data/generators/line_case/data/emails.yml +0 -2
  41. data/generators/line_case/data/projects.yml +0 -39
  42. data/generators/line_case/icon.png +0 -0
  43. data/generators/line_case/public/images/banner-header.png +0 -0
  44. data/generators/line_case/public/javascripts/foundation.min.js +0 -15
  45. data/generators/line_case/public/javascripts/foundation/foundation.abide.js +0 -194
  46. data/generators/line_case/public/javascripts/foundation/foundation.alerts.js +0 -57
  47. data/generators/line_case/public/javascripts/foundation/foundation.clearing.js +0 -516
  48. data/generators/line_case/public/javascripts/foundation/foundation.cookie.js +0 -74
  49. data/generators/line_case/public/javascripts/foundation/foundation.dropdown.js +0 -183
  50. data/generators/line_case/public/javascripts/foundation/foundation.forms.js +0 -556
  51. data/generators/line_case/public/javascripts/foundation/foundation.interchange.js +0 -280
  52. data/generators/line_case/public/javascripts/foundation/foundation.joyride.js +0 -852
  53. data/generators/line_case/public/javascripts/foundation/foundation.js +0 -464
  54. data/generators/line_case/public/javascripts/foundation/foundation.magellan.js +0 -136
  55. data/generators/line_case/public/javascripts/foundation/foundation.orbit.js +0 -432
  56. data/generators/line_case/public/javascripts/foundation/foundation.placeholder.js +0 -426
  57. data/generators/line_case/public/javascripts/foundation/foundation.reveal.js +0 -353
  58. data/generators/line_case/public/javascripts/foundation/foundation.section.js +0 -430
  59. data/generators/line_case/public/javascripts/foundation/foundation.tooltips.js +0 -209
  60. data/generators/line_case/public/javascripts/foundation/foundation.topbar.js +0 -370
  61. data/generators/line_case/public/javascripts/vendor/custom.modernizr.js +0 -4
  62. data/generators/line_case/public/javascripts/vendor/jquery.js +0 -9789
  63. data/generators/line_case/public/javascripts/vendor/zepto.js +0 -2000
  64. data/generators/line_case/public/samples/projects/sample.jpeg +0 -0
  65. data/generators/line_case/public/samples/projects/sample2.jpeg +0 -0
  66. data/generators/line_case/public/samples/projects/sample3.jpeg +0 -0
  67. data/generators/line_case/public/samples/projects/sample4.jpeg +0 -0
  68. data/generators/line_case/public/samples/projects/sample5.jpeg +0 -0
  69. data/generators/line_case/public/samples/projects/sample6.jpeg +0 -0
  70. data/generators/line_case/public/samples/projects/sample7.jpeg +0 -0
  71. data/generators/line_case/public/samples/projects/sample8.jpeg +0 -0
  72. data/generators/line_case/public/stylesheets/_variables.css.sass +0 -20
  73. data/generators/line_case/public/stylesheets/foundation.css.scss +0 -43
  74. data/generators/line_case/public/stylesheets/foundation.min.css +0 -1
  75. data/generators/line_case/public/stylesheets/foundation/_variables.scss +0 -1290
  76. data/generators/line_case/public/stylesheets/foundation/components/_alert-boxes.scss +0 -107
  77. data/generators/line_case/public/stylesheets/foundation/components/_block-grid.scss +0 -71
  78. data/generators/line_case/public/stylesheets/foundation/components/_breadcrumbs.scss +0 -124
  79. data/generators/line_case/public/stylesheets/foundation/components/_button-groups.scss +0 -89
  80. data/generators/line_case/public/stylesheets/foundation/components/_buttons.scss +0 -230
  81. data/generators/line_case/public/stylesheets/foundation/components/_clearing.scss +0 -227
  82. data/generators/line_case/public/stylesheets/foundation/components/_custom-forms.scss +0 -278
  83. data/generators/line_case/public/stylesheets/foundation/components/_dropdown-buttons.scss +0 -115
  84. data/generators/line_case/public/stylesheets/foundation/components/_dropdown.scss +0 -151
  85. data/generators/line_case/public/stylesheets/foundation/components/_flex-video.scss +0 -46
  86. data/generators/line_case/public/stylesheets/foundation/components/_forms.scss +0 -411
  87. data/generators/line_case/public/stylesheets/foundation/components/_global.scss +0 -366
  88. data/generators/line_case/public/stylesheets/foundation/components/_grid-5.scss +0 -214
  89. data/generators/line_case/public/stylesheets/foundation/components/_grid.scss +0 -188
  90. data/generators/line_case/public/stylesheets/foundation/components/_inline-lists.scss +0 -53
  91. data/generators/line_case/public/stylesheets/foundation/components/_joyride.scss +0 -217
  92. data/generators/line_case/public/stylesheets/foundation/components/_keystrokes.scss +0 -57
  93. data/generators/line_case/public/stylesheets/foundation/components/_labels.scss +0 -85
  94. data/generators/line_case/public/stylesheets/foundation/components/_magellan.scss +0 -23
  95. data/generators/line_case/public/stylesheets/foundation/components/_orbit.scss +0 -340
  96. data/generators/line_case/public/stylesheets/foundation/components/_pagination.scss +0 -140
  97. data/generators/line_case/public/stylesheets/foundation/components/_panels.scss +0 -83
  98. data/generators/line_case/public/stylesheets/foundation/components/_pricing-tables.scss +0 -131
  99. data/generators/line_case/public/stylesheets/foundation/components/_progress-bars.scss +0 -71
  100. data/generators/line_case/public/stylesheets/foundation/components/_reveal.scss +0 -136
  101. data/generators/line_case/public/stylesheets/foundation/components/_section.scss +0 -391
  102. data/generators/line_case/public/stylesheets/foundation/components/_side-nav.scss +0 -69
  103. data/generators/line_case/public/stylesheets/foundation/components/_split-buttons.scss +0 -167
  104. data/generators/line_case/public/stylesheets/foundation/components/_sub-nav.scss +0 -84
  105. data/generators/line_case/public/stylesheets/foundation/components/_switch.scss +0 -266
  106. data/generators/line_case/public/stylesheets/foundation/components/_tables.scss +0 -84
  107. data/generators/line_case/public/stylesheets/foundation/components/_thumbs.scss +0 -53
  108. data/generators/line_case/public/stylesheets/foundation/components/_tooltips.scss +0 -117
  109. data/generators/line_case/public/stylesheets/foundation/components/_top-bar.scss +0 -576
  110. data/generators/line_case/public/stylesheets/foundation/components/_type.scss +0 -435
  111. data/generators/line_case/public/stylesheets/foundation/components/_visibility.scss +0 -322
  112. data/generators/line_case/public/stylesheets/normalize.css.scss +0 -410
  113. data/generators/line_case/public/stylesheets/pages.css.sass +0 -163
  114. data/lib/locomotive/wagon/tools/livereload.rb +0 -45
@@ -1,2000 +0,0 @@
1
- /* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */
2
-
3
-
4
- ;(function(undefined){
5
- if (String.prototype.trim === undefined) // fix for iOS 3.2
6
- String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g, '') }
7
-
8
- // For iOS 3.x
9
- // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce
10
- if (Array.prototype.reduce === undefined)
11
- Array.prototype.reduce = function(fun){
12
- if(this === void 0 || this === null) throw new TypeError()
13
- var t = Object(this), len = t.length >>> 0, k = 0, accumulator
14
- if(typeof fun != 'function') throw new TypeError()
15
- if(len == 0 && arguments.length == 1) throw new TypeError()
16
-
17
- if(arguments.length >= 2)
18
- accumulator = arguments[1]
19
- else
20
- do{
21
- if(k in t){
22
- accumulator = t[k++]
23
- break
24
- }
25
- if(++k >= len) throw new TypeError()
26
- } while (true)
27
-
28
- while (k < len){
29
- if(k in t) accumulator = fun.call(undefined, accumulator, t[k], k, t)
30
- k++
31
- }
32
- return accumulator
33
- }
34
-
35
- })()
36
-
37
- var Zepto = (function() {
38
- var undefined, key, $, classList, emptyArray = [], slice = emptyArray.slice, filter = emptyArray.filter,
39
- document = window.document,
40
- elementDisplay = {}, classCache = {},
41
- getComputedStyle = document.defaultView.getComputedStyle,
42
- cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },
43
- fragmentRE = /^\s*<(\w+|!)[^>]*>/,
44
- tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
45
- rootNodeRE = /^(?:body|html)$/i,
46
-
47
- // special attributes that should be get/set via method calls
48
- methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],
49
-
50
- adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],
51
- table = document.createElement('table'),
52
- tableRow = document.createElement('tr'),
53
- containers = {
54
- 'tr': document.createElement('tbody'),
55
- 'tbody': table, 'thead': table, 'tfoot': table,
56
- 'td': tableRow, 'th': tableRow,
57
- '*': document.createElement('div')
58
- },
59
- readyRE = /complete|loaded|interactive/,
60
- classSelectorRE = /^\.([\w-]+)$/,
61
- idSelectorRE = /^#([\w-]*)$/,
62
- tagSelectorRE = /^[\w-]+$/,
63
- class2type = {},
64
- toString = class2type.toString,
65
- zepto = {},
66
- camelize, uniq,
67
- tempParent = document.createElement('div')
68
-
69
- zepto.matches = function(element, selector) {
70
- if (!element || element.nodeType !== 1) return false
71
- var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector ||
72
- element.oMatchesSelector || element.matchesSelector
73
- if (matchesSelector) return matchesSelector.call(element, selector)
74
- // fall back to performing a selector:
75
- var match, parent = element.parentNode, temp = !parent
76
- if (temp) (parent = tempParent).appendChild(element)
77
- match = ~zepto.qsa(parent, selector).indexOf(element)
78
- temp && tempParent.removeChild(element)
79
- return match
80
- }
81
-
82
- function type(obj) {
83
- return obj == null ? String(obj) :
84
- class2type[toString.call(obj)] || "object"
85
- }
86
-
87
- function isFunction(value) { return type(value) == "function" }
88
- function isWindow(obj) { return obj != null && obj == obj.window }
89
- function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }
90
- function isObject(obj) { return type(obj) == "object" }
91
- function isPlainObject(obj) {
92
- return isObject(obj) && !isWindow(obj) && obj.__proto__ == Object.prototype
93
- }
94
- function isArray(value) { return value instanceof Array }
95
- function likeArray(obj) { return typeof obj.length == 'number' }
96
-
97
- function compact(array) { return filter.call(array, function(item){ return item != null }) }
98
- function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }
99
- camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }
100
- function dasherize(str) {
101
- return str.replace(/::/g, '/')
102
- .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
103
- .replace(/([a-z\d])([A-Z])/g, '$1_$2')
104
- .replace(/_/g, '-')
105
- .toLowerCase()
106
- }
107
- uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }
108
-
109
- function classRE(name) {
110
- return name in classCache ?
111
- classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)'))
112
- }
113
-
114
- function maybeAddPx(name, value) {
115
- return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value
116
- }
117
-
118
- function defaultDisplay(nodeName) {
119
- var element, display
120
- if (!elementDisplay[nodeName]) {
121
- element = document.createElement(nodeName)
122
- document.body.appendChild(element)
123
- display = getComputedStyle(element, '').getPropertyValue("display")
124
- element.parentNode.removeChild(element)
125
- display == "none" && (display = "block")
126
- elementDisplay[nodeName] = display
127
- }
128
- return elementDisplay[nodeName]
129
- }
130
-
131
- function children(element) {
132
- return 'children' in element ?
133
- slice.call(element.children) :
134
- $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })
135
- }
136
-
137
- // `$.zepto.fragment` takes a html string and an optional tag name
138
- // to generate DOM nodes nodes from the given html string.
139
- // The generated DOM nodes are returned as an array.
140
- // This function can be overriden in plugins for example to make
141
- // it compatible with browsers that don't support the DOM fully.
142
- zepto.fragment = function(html, name, properties) {
143
- if (html.replace) html = html.replace(tagExpanderRE, "<$1></$2>")
144
- if (name === undefined) name = fragmentRE.test(html) && RegExp.$1
145
- if (!(name in containers)) name = '*'
146
-
147
- var nodes, dom, container = containers[name]
148
- container.innerHTML = '' + html
149
- dom = $.each(slice.call(container.childNodes), function(){
150
- container.removeChild(this)
151
- })
152
- if (isPlainObject(properties)) {
153
- nodes = $(dom)
154
- $.each(properties, function(key, value) {
155
- if (methodAttributes.indexOf(key) > -1) nodes[key](value)
156
- else nodes.attr(key, value)
157
- })
158
- }
159
- return dom
160
- }
161
-
162
- // `$.zepto.Z` swaps out the prototype of the given `dom` array
163
- // of nodes with `$.fn` and thus supplying all the Zepto functions
164
- // to the array. Note that `__proto__` is not supported on Internet
165
- // Explorer. This method can be overriden in plugins.
166
- zepto.Z = function(dom, selector) {
167
- dom = dom || []
168
- dom.__proto__ = $.fn
169
- dom.selector = selector || ''
170
- return dom
171
- }
172
-
173
- // `$.zepto.isZ` should return `true` if the given object is a Zepto
174
- // collection. This method can be overriden in plugins.
175
- zepto.isZ = function(object) {
176
- return object instanceof zepto.Z
177
- }
178
-
179
- // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and
180
- // takes a CSS selector and an optional context (and handles various
181
- // special cases).
182
- // This method can be overriden in plugins.
183
- zepto.init = function(selector, context) {
184
- // If nothing given, return an empty Zepto collection
185
- if (!selector) return zepto.Z()
186
- // If a function is given, call it when the DOM is ready
187
- else if (isFunction(selector)) return $(document).ready(selector)
188
- // If a Zepto collection is given, juts return it
189
- else if (zepto.isZ(selector)) return selector
190
- else {
191
- var dom
192
- // normalize array if an array of nodes is given
193
- if (isArray(selector)) dom = compact(selector)
194
- // Wrap DOM nodes. If a plain object is given, duplicate it.
195
- else if (isObject(selector))
196
- dom = [isPlainObject(selector) ? $.extend({}, selector) : selector], selector = null
197
- // If it's a html fragment, create nodes from it
198
- else if (fragmentRE.test(selector))
199
- dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null
200
- // If there's a context, create a collection on that context first, and select
201
- // nodes from there
202
- else if (context !== undefined) return $(context).find(selector)
203
- // And last but no least, if it's a CSS selector, use it to select nodes.
204
- else dom = zepto.qsa(document, selector)
205
- // create a new Zepto collection from the nodes found
206
- return zepto.Z(dom, selector)
207
- }
208
- }
209
-
210
- // `$` will be the base `Zepto` object. When calling this
211
- // function just call `$.zepto.init, which makes the implementation
212
- // details of selecting nodes and creating Zepto collections
213
- // patchable in plugins.
214
- $ = function(selector, context){
215
- return zepto.init(selector, context)
216
- }
217
-
218
- function extend(target, source, deep) {
219
- for (key in source)
220
- if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {
221
- if (isPlainObject(source[key]) && !isPlainObject(target[key]))
222
- target[key] = {}
223
- if (isArray(source[key]) && !isArray(target[key]))
224
- target[key] = []
225
- extend(target[key], source[key], deep)
226
- }
227
- else if (source[key] !== undefined) target[key] = source[key]
228
- }
229
-
230
- // Copy all but undefined properties from one or more
231
- // objects to the `target` object.
232
- $.extend = function(target){
233
- var deep, args = slice.call(arguments, 1)
234
- if (typeof target == 'boolean') {
235
- deep = target
236
- target = args.shift()
237
- }
238
- args.forEach(function(arg){ extend(target, arg, deep) })
239
- return target
240
- }
241
-
242
- // `$.zepto.qsa` is Zepto's CSS selector implementation which
243
- // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.
244
- // This method can be overriden in plugins.
245
- zepto.qsa = function(element, selector){
246
- var found
247
- return (isDocument(element) && idSelectorRE.test(selector)) ?
248
- ( (found = element.getElementById(RegExp.$1)) ? [found] : [] ) :
249
- (element.nodeType !== 1 && element.nodeType !== 9) ? [] :
250
- slice.call(
251
- classSelectorRE.test(selector) ? element.getElementsByClassName(RegExp.$1) :
252
- tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) :
253
- element.querySelectorAll(selector)
254
- )
255
- }
256
-
257
- function filtered(nodes, selector) {
258
- return selector === undefined ? $(nodes) : $(nodes).filter(selector)
259
- }
260
-
261
- $.contains = function(parent, node) {
262
- return parent !== node && parent.contains(node)
263
- }
264
-
265
- function funcArg(context, arg, idx, payload) {
266
- return isFunction(arg) ? arg.call(context, idx, payload) : arg
267
- }
268
-
269
- function setAttribute(node, name, value) {
270
- value == null ? node.removeAttribute(name) : node.setAttribute(name, value)
271
- }
272
-
273
- // access className property while respecting SVGAnimatedString
274
- function className(node, value){
275
- var klass = node.className,
276
- svg = klass && klass.baseVal !== undefined
277
-
278
- if (value === undefined) return svg ? klass.baseVal : klass
279
- svg ? (klass.baseVal = value) : (node.className = value)
280
- }
281
-
282
- // "true" => true
283
- // "false" => false
284
- // "null" => null
285
- // "42" => 42
286
- // "42.5" => 42.5
287
- // JSON => parse if valid
288
- // String => self
289
- function deserializeValue(value) {
290
- var num
291
- try {
292
- return value ?
293
- value == "true" ||
294
- ( value == "false" ? false :
295
- value == "null" ? null :
296
- !isNaN(num = Number(value)) ? num :
297
- /^[\[\{]/.test(value) ? $.parseJSON(value) :
298
- value )
299
- : value
300
- } catch(e) {
301
- return value
302
- }
303
- }
304
-
305
- $.type = type
306
- $.isFunction = isFunction
307
- $.isWindow = isWindow
308
- $.isArray = isArray
309
- $.isPlainObject = isPlainObject
310
-
311
- $.isEmptyObject = function(obj) {
312
- var name
313
- for (name in obj) return false
314
- return true
315
- }
316
-
317
- $.inArray = function(elem, array, i){
318
- return emptyArray.indexOf.call(array, elem, i)
319
- }
320
-
321
- $.camelCase = camelize
322
- $.trim = function(str) { return str.trim() }
323
-
324
- // plugin compatibility
325
- $.uuid = 0
326
- $.support = { }
327
- $.expr = { }
328
-
329
- $.map = function(elements, callback){
330
- var value, values = [], i, key
331
- if (likeArray(elements))
332
- for (i = 0; i < elements.length; i++) {
333
- value = callback(elements[i], i)
334
- if (value != null) values.push(value)
335
- }
336
- else
337
- for (key in elements) {
338
- value = callback(elements[key], key)
339
- if (value != null) values.push(value)
340
- }
341
- return flatten(values)
342
- }
343
-
344
- $.each = function(elements, callback){
345
- var i, key
346
- if (likeArray(elements)) {
347
- for (i = 0; i < elements.length; i++)
348
- if (callback.call(elements[i], i, elements[i]) === false) return elements
349
- } else {
350
- for (key in elements)
351
- if (callback.call(elements[key], key, elements[key]) === false) return elements
352
- }
353
-
354
- return elements
355
- }
356
-
357
- $.grep = function(elements, callback){
358
- return filter.call(elements, callback)
359
- }
360
-
361
- if (window.JSON) $.parseJSON = JSON.parse
362
-
363
- // Populate the class2type map
364
- $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
365
- class2type[ "[object " + name + "]" ] = name.toLowerCase()
366
- })
367
-
368
- // Define methods that will be available on all
369
- // Zepto collections
370
- $.fn = {
371
- // Because a collection acts like an array
372
- // copy over these useful array functions.
373
- forEach: emptyArray.forEach,
374
- reduce: emptyArray.reduce,
375
- push: emptyArray.push,
376
- sort: emptyArray.sort,
377
- indexOf: emptyArray.indexOf,
378
- concat: emptyArray.concat,
379
-
380
- // `map` and `slice` in the jQuery API work differently
381
- // from their array counterparts
382
- map: function(fn){
383
- return $($.map(this, function(el, i){ return fn.call(el, i, el) }))
384
- },
385
- slice: function(){
386
- return $(slice.apply(this, arguments))
387
- },
388
-
389
- ready: function(callback){
390
- if (readyRE.test(document.readyState)) callback($)
391
- else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)
392
- return this
393
- },
394
- get: function(idx){
395
- return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]
396
- },
397
- toArray: function(){ return this.get() },
398
- size: function(){
399
- return this.length
400
- },
401
- remove: function(){
402
- return this.each(function(){
403
- if (this.parentNode != null)
404
- this.parentNode.removeChild(this)
405
- })
406
- },
407
- each: function(callback){
408
- emptyArray.every.call(this, function(el, idx){
409
- return callback.call(el, idx, el) !== false
410
- })
411
- return this
412
- },
413
- filter: function(selector){
414
- if (isFunction(selector)) return this.not(this.not(selector))
415
- return $(filter.call(this, function(element){
416
- return zepto.matches(element, selector)
417
- }))
418
- },
419
- add: function(selector,context){
420
- return $(uniq(this.concat($(selector,context))))
421
- },
422
- is: function(selector){
423
- return this.length > 0 && zepto.matches(this[0], selector)
424
- },
425
- not: function(selector){
426
- var nodes=[]
427
- if (isFunction(selector) && selector.call !== undefined)
428
- this.each(function(idx){
429
- if (!selector.call(this,idx)) nodes.push(this)
430
- })
431
- else {
432
- var excludes = typeof selector == 'string' ? this.filter(selector) :
433
- (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)
434
- this.forEach(function(el){
435
- if (excludes.indexOf(el) < 0) nodes.push(el)
436
- })
437
- }
438
- return $(nodes)
439
- },
440
- has: function(selector){
441
- return this.filter(function(){
442
- return isObject(selector) ?
443
- $.contains(this, selector) :
444
- $(this).find(selector).size()
445
- })
446
- },
447
- eq: function(idx){
448
- return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)
449
- },
450
- first: function(){
451
- var el = this[0]
452
- return el && !isObject(el) ? el : $(el)
453
- },
454
- last: function(){
455
- var el = this[this.length - 1]
456
- return el && !isObject(el) ? el : $(el)
457
- },
458
- find: function(selector){
459
- var result, $this = this
460
- if (typeof selector == 'object')
461
- result = $(selector).filter(function(){
462
- var node = this
463
- return emptyArray.some.call($this, function(parent){
464
- return $.contains(parent, node)
465
- })
466
- })
467
- else if (this.length == 1) result = $(zepto.qsa(this[0], selector))
468
- else result = this.map(function(){ return zepto.qsa(this, selector) })
469
- return result
470
- },
471
- closest: function(selector, context){
472
- var node = this[0], collection = false
473
- if (typeof selector == 'object') collection = $(selector)
474
- while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))
475
- node = node !== context && !isDocument(node) && node.parentNode
476
- return $(node)
477
- },
478
- parents: function(selector){
479
- var ancestors = [], nodes = this
480
- while (nodes.length > 0)
481
- nodes = $.map(nodes, function(node){
482
- if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {
483
- ancestors.push(node)
484
- return node
485
- }
486
- })
487
- return filtered(ancestors, selector)
488
- },
489
- parent: function(selector){
490
- return filtered(uniq(this.pluck('parentNode')), selector)
491
- },
492
- children: function(selector){
493
- return filtered(this.map(function(){ return children(this) }), selector)
494
- },
495
- contents: function() {
496
- return this.map(function() { return slice.call(this.childNodes) })
497
- },
498
- siblings: function(selector){
499
- return filtered(this.map(function(i, el){
500
- return filter.call(children(el.parentNode), function(child){ return child!==el })
501
- }), selector)
502
- },
503
- empty: function(){
504
- return this.each(function(){ this.innerHTML = '' })
505
- },
506
- // `pluck` is borrowed from Prototype.js
507
- pluck: function(property){
508
- return $.map(this, function(el){ return el[property] })
509
- },
510
- show: function(){
511
- return this.each(function(){
512
- this.style.display == "none" && (this.style.display = null)
513
- if (getComputedStyle(this, '').getPropertyValue("display") == "none")
514
- this.style.display = defaultDisplay(this.nodeName)
515
- })
516
- },
517
- replaceWith: function(newContent){
518
- return this.before(newContent).remove()
519
- },
520
- wrap: function(structure){
521
- var func = isFunction(structure)
522
- if (this[0] && !func)
523
- var dom = $(structure).get(0),
524
- clone = dom.parentNode || this.length > 1
525
-
526
- return this.each(function(index){
527
- $(this).wrapAll(
528
- func ? structure.call(this, index) :
529
- clone ? dom.cloneNode(true) : dom
530
- )
531
- })
532
- },
533
- wrapAll: function(structure){
534
- if (this[0]) {
535
- $(this[0]).before(structure = $(structure))
536
- var children
537
- // drill down to the inmost element
538
- while ((children = structure.children()).length) structure = children.first()
539
- $(structure).append(this)
540
- }
541
- return this
542
- },
543
- wrapInner: function(structure){
544
- var func = isFunction(structure)
545
- return this.each(function(index){
546
- var self = $(this), contents = self.contents(),
547
- dom = func ? structure.call(this, index) : structure
548
- contents.length ? contents.wrapAll(dom) : self.append(dom)
549
- })
550
- },
551
- unwrap: function(){
552
- this.parent().each(function(){
553
- $(this).replaceWith($(this).children())
554
- })
555
- return this
556
- },
557
- clone: function(){
558
- return this.map(function(){ return this.cloneNode(true) })
559
- },
560
- hide: function(){
561
- return this.css("display", "none")
562
- },
563
- toggle: function(setting){
564
- return this.each(function(){
565
- var el = $(this)
566
- ;(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide()
567
- })
568
- },
569
- prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },
570
- next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },
571
- html: function(html){
572
- return html === undefined ?
573
- (this.length > 0 ? this[0].innerHTML : null) :
574
- this.each(function(idx){
575
- var originHtml = this.innerHTML
576
- $(this).empty().append( funcArg(this, html, idx, originHtml) )
577
- })
578
- },
579
- text: function(text){
580
- return text === undefined ?
581
- (this.length > 0 ? this[0].textContent : null) :
582
- this.each(function(){ this.textContent = text })
583
- },
584
- attr: function(name, value){
585
- var result
586
- return (typeof name == 'string' && value === undefined) ?
587
- (this.length == 0 || this[0].nodeType !== 1 ? undefined :
588
- (name == 'value' && this[0].nodeName == 'INPUT') ? this.val() :
589
- (!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result
590
- ) :
591
- this.each(function(idx){
592
- if (this.nodeType !== 1) return
593
- if (isObject(name)) for (key in name) setAttribute(this, key, name[key])
594
- else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))
595
- })
596
- },
597
- removeAttr: function(name){
598
- return this.each(function(){ this.nodeType === 1 && setAttribute(this, name) })
599
- },
600
- prop: function(name, value){
601
- return (value === undefined) ?
602
- (this[0] && this[0][name]) :
603
- this.each(function(idx){
604
- this[name] = funcArg(this, value, idx, this[name])
605
- })
606
- },
607
- data: function(name, value){
608
- var data = this.attr('data-' + dasherize(name), value)
609
- return data !== null ? deserializeValue(data) : undefined
610
- },
611
- val: function(value){
612
- return (value === undefined) ?
613
- (this[0] && (this[0].multiple ?
614
- $(this[0]).find('option').filter(function(o){ return this.selected }).pluck('value') :
615
- this[0].value)
616
- ) :
617
- this.each(function(idx){
618
- this.value = funcArg(this, value, idx, this.value)
619
- })
620
- },
621
- offset: function(coordinates){
622
- if (coordinates) return this.each(function(index){
623
- var $this = $(this),
624
- coords = funcArg(this, coordinates, index, $this.offset()),
625
- parentOffset = $this.offsetParent().offset(),
626
- props = {
627
- top: coords.top - parentOffset.top,
628
- left: coords.left - parentOffset.left
629
- }
630
-
631
- if ($this.css('position') == 'static') props['position'] = 'relative'
632
- $this.css(props)
633
- })
634
- if (this.length==0) return null
635
- var obj = this[0].getBoundingClientRect()
636
- return {
637
- left: obj.left + window.pageXOffset,
638
- top: obj.top + window.pageYOffset,
639
- width: Math.round(obj.width),
640
- height: Math.round(obj.height)
641
- }
642
- },
643
- css: function(property, value){
644
- if (arguments.length < 2 && typeof property == 'string')
645
- return this[0] && (this[0].style[camelize(property)] || getComputedStyle(this[0], '').getPropertyValue(property))
646
-
647
- var css = ''
648
- if (type(property) == 'string') {
649
- if (!value && value !== 0)
650
- this.each(function(){ this.style.removeProperty(dasherize(property)) })
651
- else
652
- css = dasherize(property) + ":" + maybeAddPx(property, value)
653
- } else {
654
- for (key in property)
655
- if (!property[key] && property[key] !== 0)
656
- this.each(function(){ this.style.removeProperty(dasherize(key)) })
657
- else
658
- css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'
659
- }
660
-
661
- return this.each(function(){ this.style.cssText += ';' + css })
662
- },
663
- index: function(element){
664
- return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])
665
- },
666
- hasClass: function(name){
667
- return emptyArray.some.call(this, function(el){
668
- return this.test(className(el))
669
- }, classRE(name))
670
- },
671
- addClass: function(name){
672
- return this.each(function(idx){
673
- classList = []
674
- var cls = className(this), newName = funcArg(this, name, idx, cls)
675
- newName.split(/\s+/g).forEach(function(klass){
676
- if (!$(this).hasClass(klass)) classList.push(klass)
677
- }, this)
678
- classList.length && className(this, cls + (cls ? " " : "") + classList.join(" "))
679
- })
680
- },
681
- removeClass: function(name){
682
- return this.each(function(idx){
683
- if (name === undefined) return className(this, '')
684
- classList = className(this)
685
- funcArg(this, name, idx, classList).split(/\s+/g).forEach(function(klass){
686
- classList = classList.replace(classRE(klass), " ")
687
- })
688
- className(this, classList.trim())
689
- })
690
- },
691
- toggleClass: function(name, when){
692
- return this.each(function(idx){
693
- var $this = $(this), names = funcArg(this, name, idx, className(this))
694
- names.split(/\s+/g).forEach(function(klass){
695
- (when === undefined ? !$this.hasClass(klass) : when) ?
696
- $this.addClass(klass) : $this.removeClass(klass)
697
- })
698
- })
699
- },
700
- scrollTop: function(){
701
- if (!this.length) return
702
- return ('scrollTop' in this[0]) ? this[0].scrollTop : this[0].scrollY
703
- },
704
- position: function() {
705
- if (!this.length) return
706
-
707
- var elem = this[0],
708
- // Get *real* offsetParent
709
- offsetParent = this.offsetParent(),
710
- // Get correct offsets
711
- offset = this.offset(),
712
- parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()
713
-
714
- // Subtract element margins
715
- // note: when an element has margin: auto the offsetLeft and marginLeft
716
- // are the same in Safari causing offset.left to incorrectly be 0
717
- offset.top -= parseFloat( $(elem).css('margin-top') ) || 0
718
- offset.left -= parseFloat( $(elem).css('margin-left') ) || 0
719
-
720
- // Add offsetParent borders
721
- parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0
722
- parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0
723
-
724
- // Subtract the two offsets
725
- return {
726
- top: offset.top - parentOffset.top,
727
- left: offset.left - parentOffset.left
728
- }
729
- },
730
- offsetParent: function() {
731
- return this.map(function(){
732
- var parent = this.offsetParent || document.body
733
- while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static")
734
- parent = parent.offsetParent
735
- return parent
736
- })
737
- }
738
- }
739
-
740
- // for now
741
- $.fn.detach = $.fn.remove
742
-
743
- // Generate the `width` and `height` functions
744
- ;['width', 'height'].forEach(function(dimension){
745
- $.fn[dimension] = function(value){
746
- var offset, el = this[0],
747
- Dimension = dimension.replace(/./, function(m){ return m[0].toUpperCase() })
748
- if (value === undefined) return isWindow(el) ? el['inner' + Dimension] :
749
- isDocument(el) ? el.documentElement['offset' + Dimension] :
750
- (offset = this.offset()) && offset[dimension]
751
- else return this.each(function(idx){
752
- el = $(this)
753
- el.css(dimension, funcArg(this, value, idx, el[dimension]()))
754
- })
755
- }
756
- })
757
-
758
- function traverseNode(node, fun) {
759
- fun(node)
760
- for (var key in node.childNodes) traverseNode(node.childNodes[key], fun)
761
- }
762
-
763
- // Generate the `after`, `prepend`, `before`, `append`,
764
- // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.
765
- adjacencyOperators.forEach(function(operator, operatorIndex) {
766
- var inside = operatorIndex % 2 //=> prepend, append
767
-
768
- $.fn[operator] = function(){
769
- // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings
770
- var argType, nodes = $.map(arguments, function(arg) {
771
- argType = type(arg)
772
- return argType == "object" || argType == "array" || arg == null ?
773
- arg : zepto.fragment(arg)
774
- }),
775
- parent, copyByClone = this.length > 1
776
- if (nodes.length < 1) return this
777
-
778
- return this.each(function(_, target){
779
- parent = inside ? target : target.parentNode
780
-
781
- // convert all methods to a "before" operation
782
- target = operatorIndex == 0 ? target.nextSibling :
783
- operatorIndex == 1 ? target.firstChild :
784
- operatorIndex == 2 ? target :
785
- null
786
-
787
- nodes.forEach(function(node){
788
- if (copyByClone) node = node.cloneNode(true)
789
- else if (!parent) return $(node).remove()
790
-
791
- traverseNode(parent.insertBefore(node, target), function(el){
792
- if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&
793
- (!el.type || el.type === 'text/javascript') && !el.src)
794
- window['eval'].call(window, el.innerHTML)
795
- })
796
- })
797
- })
798
- }
799
-
800
- // after => insertAfter
801
- // prepend => prependTo
802
- // before => insertBefore
803
- // append => appendTo
804
- $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){
805
- $(html)[operator](this)
806
- return this
807
- }
808
- })
809
-
810
- zepto.Z.prototype = $.fn
811
-
812
- // Export internal API functions in the `$.zepto` namespace
813
- zepto.uniq = uniq
814
- zepto.deserializeValue = deserializeValue
815
- $.zepto = zepto
816
-
817
- return $
818
- })()
819
-
820
- window.Zepto = Zepto
821
- '$' in window || (window.$ = Zepto)
822
-
823
- ;(function($){
824
- function detect(ua){
825
- var os = this.os = {}, browser = this.browser = {},
826
- webkit = ua.match(/WebKit\/([\d.]+)/),
827
- android = ua.match(/(Android)\s+([\d.]+)/),
828
- ipad = ua.match(/(iPad).*OS\s([\d_]+)/),
829
- iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/),
830
- webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),
831
- touchpad = webos && ua.match(/TouchPad/),
832
- kindle = ua.match(/Kindle\/([\d.]+)/),
833
- silk = ua.match(/Silk\/([\d._]+)/),
834
- blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/),
835
- bb10 = ua.match(/(BB10).*Version\/([\d.]+)/),
836
- rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/),
837
- playbook = ua.match(/PlayBook/),
838
- chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/),
839
- firefox = ua.match(/Firefox\/([\d.]+)/)
840
-
841
- // Todo: clean this up with a better OS/browser seperation:
842
- // - discern (more) between multiple browsers on android
843
- // - decide if kindle fire in silk mode is android or not
844
- // - Firefox on Android doesn't specify the Android version
845
- // - possibly devide in os, device and browser hashes
846
-
847
- if (browser.webkit = !!webkit) browser.version = webkit[1]
848
-
849
- if (android) os.android = true, os.version = android[2]
850
- if (iphone) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.')
851
- if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.')
852
- if (webos) os.webos = true, os.version = webos[2]
853
- if (touchpad) os.touchpad = true
854
- if (blackberry) os.blackberry = true, os.version = blackberry[2]
855
- if (bb10) os.bb10 = true, os.version = bb10[2]
856
- if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2]
857
- if (playbook) browser.playbook = true
858
- if (kindle) os.kindle = true, os.version = kindle[1]
859
- if (silk) browser.silk = true, browser.version = silk[1]
860
- if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true
861
- if (chrome) browser.chrome = true, browser.version = chrome[1]
862
- if (firefox) browser.firefox = true, browser.version = firefox[1]
863
-
864
- os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) || (firefox && ua.match(/Tablet/)))
865
- os.phone = !!(!os.tablet && (android || iphone || webos || blackberry || bb10 ||
866
- (chrome && ua.match(/Android/)) || (chrome && ua.match(/CriOS\/([\d.]+)/)) || (firefox && ua.match(/Mobile/))))
867
- }
868
-
869
- detect.call($, navigator.userAgent)
870
- // make available to unit tests
871
- $.__detect = detect
872
-
873
- })(Zepto)
874
-
875
- ;(function($){
876
- var $$ = $.zepto.qsa, handlers = {}, _zid = 1, specialEvents={},
877
- hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }
878
-
879
- specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'
880
-
881
- function zid(element) {
882
- return element._zid || (element._zid = _zid++)
883
- }
884
- function findHandlers(element, event, fn, selector) {
885
- event = parse(event)
886
- if (event.ns) var matcher = matcherFor(event.ns)
887
- return (handlers[zid(element)] || []).filter(function(handler) {
888
- return handler
889
- && (!event.e || handler.e == event.e)
890
- && (!event.ns || matcher.test(handler.ns))
891
- && (!fn || zid(handler.fn) === zid(fn))
892
- && (!selector || handler.sel == selector)
893
- })
894
- }
895
- function parse(event) {
896
- var parts = ('' + event).split('.')
897
- return {e: parts[0], ns: parts.slice(1).sort().join(' ')}
898
- }
899
- function matcherFor(ns) {
900
- return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')
901
- }
902
-
903
- function eachEvent(events, fn, iterator){
904
- if ($.type(events) != "string") $.each(events, iterator)
905
- else events.split(/\s/).forEach(function(type){ iterator(type, fn) })
906
- }
907
-
908
- function eventCapture(handler, captureSetting) {
909
- return handler.del &&
910
- (handler.e == 'focus' || handler.e == 'blur') ||
911
- !!captureSetting
912
- }
913
-
914
- function realEvent(type) {
915
- return hover[type] || type
916
- }
917
-
918
- function add(element, events, fn, selector, getDelegate, capture){
919
- var id = zid(element), set = (handlers[id] || (handlers[id] = []))
920
- eachEvent(events, fn, function(event, fn){
921
- var handler = parse(event)
922
- handler.fn = fn
923
- handler.sel = selector
924
- // emulate mouseenter, mouseleave
925
- if (handler.e in hover) fn = function(e){
926
- var related = e.relatedTarget
927
- if (!related || (related !== this && !$.contains(this, related)))
928
- return handler.fn.apply(this, arguments)
929
- }
930
- handler.del = getDelegate && getDelegate(fn, event)
931
- var callback = handler.del || fn
932
- handler.proxy = function (e) {
933
- var result = callback.apply(element, [e].concat(e.data))
934
- if (result === false) e.preventDefault(), e.stopPropagation()
935
- return result
936
- }
937
- handler.i = set.length
938
- set.push(handler)
939
- element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
940
- })
941
- }
942
- function remove(element, events, fn, selector, capture){
943
- var id = zid(element)
944
- eachEvent(events || '', fn, function(event, fn){
945
- findHandlers(element, event, fn, selector).forEach(function(handler){
946
- delete handlers[id][handler.i]
947
- element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
948
- })
949
- })
950
- }
951
-
952
- $.event = { add: add, remove: remove }
953
-
954
- $.proxy = function(fn, context) {
955
- if ($.isFunction(fn)) {
956
- var proxyFn = function(){ return fn.apply(context, arguments) }
957
- proxyFn._zid = zid(fn)
958
- return proxyFn
959
- } else if (typeof context == 'string') {
960
- return $.proxy(fn[context], fn)
961
- } else {
962
- throw new TypeError("expected function")
963
- }
964
- }
965
-
966
- $.fn.bind = function(event, callback){
967
- return this.each(function(){
968
- add(this, event, callback)
969
- })
970
- }
971
- $.fn.unbind = function(event, callback){
972
- return this.each(function(){
973
- remove(this, event, callback)
974
- })
975
- }
976
- $.fn.one = function(event, callback){
977
- return this.each(function(i, element){
978
- add(this, event, callback, null, function(fn, type){
979
- return function(){
980
- var result = fn.apply(element, arguments)
981
- remove(element, type, fn)
982
- return result
983
- }
984
- })
985
- })
986
- }
987
-
988
- var returnTrue = function(){return true},
989
- returnFalse = function(){return false},
990
- ignoreProperties = /^([A-Z]|layer[XY]$)/,
991
- eventMethods = {
992
- preventDefault: 'isDefaultPrevented',
993
- stopImmediatePropagation: 'isImmediatePropagationStopped',
994
- stopPropagation: 'isPropagationStopped'
995
- }
996
- function createProxy(event) {
997
- var key, proxy = { originalEvent: event }
998
- for (key in event)
999
- if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]
1000
-
1001
- $.each(eventMethods, function(name, predicate) {
1002
- proxy[name] = function(){
1003
- this[predicate] = returnTrue
1004
- return event[name].apply(event, arguments)
1005
- }
1006
- proxy[predicate] = returnFalse
1007
- })
1008
- return proxy
1009
- }
1010
-
1011
- // emulates the 'defaultPrevented' property for browsers that have none
1012
- function fix(event) {
1013
- if (!('defaultPrevented' in event)) {
1014
- event.defaultPrevented = false
1015
- var prevent = event.preventDefault
1016
- event.preventDefault = function() {
1017
- this.defaultPrevented = true
1018
- prevent.call(this)
1019
- }
1020
- }
1021
- }
1022
-
1023
- $.fn.delegate = function(selector, event, callback){
1024
- return this.each(function(i, element){
1025
- add(element, event, callback, selector, function(fn){
1026
- return function(e){
1027
- var evt, match = $(e.target).closest(selector, element).get(0)
1028
- if (match) {
1029
- evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})
1030
- return fn.apply(match, [evt].concat([].slice.call(arguments, 1)))
1031
- }
1032
- }
1033
- })
1034
- })
1035
- }
1036
- $.fn.undelegate = function(selector, event, callback){
1037
- return this.each(function(){
1038
- remove(this, event, callback, selector)
1039
- })
1040
- }
1041
-
1042
- $.fn.live = function(event, callback){
1043
- $(document.body).delegate(this.selector, event, callback)
1044
- return this
1045
- }
1046
- $.fn.die = function(event, callback){
1047
- $(document.body).undelegate(this.selector, event, callback)
1048
- return this
1049
- }
1050
-
1051
- $.fn.on = function(event, selector, callback){
1052
- return !selector || $.isFunction(selector) ?
1053
- this.bind(event, selector || callback) : this.delegate(selector, event, callback)
1054
- }
1055
- $.fn.off = function(event, selector, callback){
1056
- return !selector || $.isFunction(selector) ?
1057
- this.unbind(event, selector || callback) : this.undelegate(selector, event, callback)
1058
- }
1059
-
1060
- $.fn.trigger = function(event, data){
1061
- if (typeof event == 'string' || $.isPlainObject(event)) event = $.Event(event)
1062
- fix(event)
1063
- event.data = data
1064
- return this.each(function(){
1065
- // items in the collection might not be DOM elements
1066
- // (todo: possibly support events on plain old objects)
1067
- if('dispatchEvent' in this) this.dispatchEvent(event)
1068
- })
1069
- }
1070
-
1071
- // triggers event handlers on current element just as if an event occurred,
1072
- // doesn't trigger an actual event, doesn't bubble
1073
- $.fn.triggerHandler = function(event, data){
1074
- var e, result
1075
- this.each(function(i, element){
1076
- e = createProxy(typeof event == 'string' ? $.Event(event) : event)
1077
- e.data = data
1078
- e.target = element
1079
- $.each(findHandlers(element, event.type || event), function(i, handler){
1080
- result = handler.proxy(e)
1081
- if (e.isImmediatePropagationStopped()) return false
1082
- })
1083
- })
1084
- return result
1085
- }
1086
-
1087
- // shortcut methods for `.bind(event, fn)` for each event type
1088
- ;('focusin focusout load resize scroll unload click dblclick '+
1089
- 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+
1090
- 'change select keydown keypress keyup error').split(' ').forEach(function(event) {
1091
- $.fn[event] = function(callback) {
1092
- return callback ?
1093
- this.bind(event, callback) :
1094
- this.trigger(event)
1095
- }
1096
- })
1097
-
1098
- ;['focus', 'blur'].forEach(function(name) {
1099
- $.fn[name] = function(callback) {
1100
- if (callback) this.bind(name, callback)
1101
- else this.each(function(){
1102
- try { this[name]() }
1103
- catch(e) {}
1104
- })
1105
- return this
1106
- }
1107
- })
1108
-
1109
- $.Event = function(type, props) {
1110
- if (typeof type != 'string') props = type, type = props.type
1111
- var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true
1112
- if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])
1113
- event.initEvent(type, bubbles, true, null, null, null, null, null, null, null, null, null, null, null, null)
1114
- event.isDefaultPrevented = function(){ return this.defaultPrevented }
1115
- return event
1116
- }
1117
-
1118
- })(Zepto)
1119
-
1120
- ;(function($){
1121
- var jsonpID = 0,
1122
- document = window.document,
1123
- key,
1124
- name,
1125
- rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
1126
- scriptTypeRE = /^(?:text|application)\/javascript/i,
1127
- xmlTypeRE = /^(?:text|application)\/xml/i,
1128
- jsonType = 'application/json',
1129
- htmlType = 'text/html',
1130
- blankRE = /^\s*$/
1131
-
1132
- // trigger a custom event and return false if it was cancelled
1133
- function triggerAndReturn(context, eventName, data) {
1134
- var event = $.Event(eventName)
1135
- $(context).trigger(event, data)
1136
- return !event.defaultPrevented
1137
- }
1138
-
1139
- // trigger an Ajax "global" event
1140
- function triggerGlobal(settings, context, eventName, data) {
1141
- if (settings.global) return triggerAndReturn(context || document, eventName, data)
1142
- }
1143
-
1144
- // Number of active Ajax requests
1145
- $.active = 0
1146
-
1147
- function ajaxStart(settings) {
1148
- if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart')
1149
- }
1150
- function ajaxStop(settings) {
1151
- if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop')
1152
- }
1153
-
1154
- // triggers an extra global event "ajaxBeforeSend" that's like "ajaxSend" but cancelable
1155
- function ajaxBeforeSend(xhr, settings) {
1156
- var context = settings.context
1157
- if (settings.beforeSend.call(context, xhr, settings) === false ||
1158
- triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)
1159
- return false
1160
-
1161
- triggerGlobal(settings, context, 'ajaxSend', [xhr, settings])
1162
- }
1163
- function ajaxSuccess(data, xhr, settings) {
1164
- var context = settings.context, status = 'success'
1165
- settings.success.call(context, data, status, xhr)
1166
- triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data])
1167
- ajaxComplete(status, xhr, settings)
1168
- }
1169
- // type: "timeout", "error", "abort", "parsererror"
1170
- function ajaxError(error, type, xhr, settings) {
1171
- var context = settings.context
1172
- settings.error.call(context, xhr, type, error)
1173
- triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error])
1174
- ajaxComplete(type, xhr, settings)
1175
- }
1176
- // status: "success", "notmodified", "error", "timeout", "abort", "parsererror"
1177
- function ajaxComplete(status, xhr, settings) {
1178
- var context = settings.context
1179
- settings.complete.call(context, xhr, status)
1180
- triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings])
1181
- ajaxStop(settings)
1182
- }
1183
-
1184
- // Empty function, used as default callback
1185
- function empty() {}
1186
-
1187
- $.ajaxJSONP = function(options){
1188
- if (!('type' in options)) return $.ajax(options)
1189
-
1190
- var callbackName = 'jsonp' + (++jsonpID),
1191
- script = document.createElement('script'),
1192
- cleanup = function() {
1193
- clearTimeout(abortTimeout)
1194
- $(script).remove()
1195
- delete window[callbackName]
1196
- },
1197
- abort = function(type){
1198
- cleanup()
1199
- // In case of manual abort or timeout, keep an empty function as callback
1200
- // so that the SCRIPT tag that eventually loads won't result in an error.
1201
- if (!type || type == 'timeout') window[callbackName] = empty
1202
- ajaxError(null, type || 'abort', xhr, options)
1203
- },
1204
- xhr = { abort: abort }, abortTimeout
1205
-
1206
- if (ajaxBeforeSend(xhr, options) === false) {
1207
- abort('abort')
1208
- return false
1209
- }
1210
-
1211
- window[callbackName] = function(data){
1212
- cleanup()
1213
- ajaxSuccess(data, xhr, options)
1214
- }
1215
-
1216
- script.onerror = function() { abort('error') }
1217
-
1218
- script.src = options.url.replace(/=\?/, '=' + callbackName)
1219
- $('head').append(script)
1220
-
1221
- if (options.timeout > 0) abortTimeout = setTimeout(function(){
1222
- abort('timeout')
1223
- }, options.timeout)
1224
-
1225
- return xhr
1226
- }
1227
-
1228
- $.ajaxSettings = {
1229
- // Default type of request
1230
- type: 'GET',
1231
- // Callback that is executed before request
1232
- beforeSend: empty,
1233
- // Callback that is executed if the request succeeds
1234
- success: empty,
1235
- // Callback that is executed the the server drops error
1236
- error: empty,
1237
- // Callback that is executed on request complete (both: error and success)
1238
- complete: empty,
1239
- // The context for the callbacks
1240
- context: null,
1241
- // Whether to trigger "global" Ajax events
1242
- global: true,
1243
- // Transport
1244
- xhr: function () {
1245
- return new window.XMLHttpRequest()
1246
- },
1247
- // MIME types mapping
1248
- accepts: {
1249
- script: 'text/javascript, application/javascript',
1250
- json: jsonType,
1251
- xml: 'application/xml, text/xml',
1252
- html: htmlType,
1253
- text: 'text/plain'
1254
- },
1255
- // Whether the request is to another domain
1256
- crossDomain: false,
1257
- // Default timeout
1258
- timeout: 0,
1259
- // Whether data should be serialized to string
1260
- processData: true,
1261
- // Whether the browser should be allowed to cache GET responses
1262
- cache: true,
1263
- }
1264
-
1265
- function mimeToDataType(mime) {
1266
- if (mime) mime = mime.split(';', 2)[0]
1267
- return mime && ( mime == htmlType ? 'html' :
1268
- mime == jsonType ? 'json' :
1269
- scriptTypeRE.test(mime) ? 'script' :
1270
- xmlTypeRE.test(mime) && 'xml' ) || 'text'
1271
- }
1272
-
1273
- function appendQuery(url, query) {
1274
- return (url + '&' + query).replace(/[&?]{1,2}/, '?')
1275
- }
1276
-
1277
- // serialize payload and append it to the URL for GET requests
1278
- function serializeData(options) {
1279
- if (options.processData && options.data && $.type(options.data) != "string")
1280
- options.data = $.param(options.data, options.traditional)
1281
- if (options.data && (!options.type || options.type.toUpperCase() == 'GET'))
1282
- options.url = appendQuery(options.url, options.data)
1283
- }
1284
-
1285
- $.ajax = function(options){
1286
- var settings = $.extend({}, options || {})
1287
- for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]
1288
-
1289
- ajaxStart(settings)
1290
-
1291
- if (!settings.crossDomain) settings.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(settings.url) &&
1292
- RegExp.$2 != window.location.host
1293
-
1294
- if (!settings.url) settings.url = window.location.toString()
1295
- serializeData(settings)
1296
- if (settings.cache === false) settings.url = appendQuery(settings.url, '_=' + Date.now())
1297
-
1298
- var dataType = settings.dataType, hasPlaceholder = /=\?/.test(settings.url)
1299
- if (dataType == 'jsonp' || hasPlaceholder) {
1300
- if (!hasPlaceholder) settings.url = appendQuery(settings.url, 'callback=?')
1301
- return $.ajaxJSONP(settings)
1302
- }
1303
-
1304
- var mime = settings.accepts[dataType],
1305
- baseHeaders = { },
1306
- protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol,
1307
- xhr = settings.xhr(), abortTimeout
1308
-
1309
- if (!settings.crossDomain) baseHeaders['X-Requested-With'] = 'XMLHttpRequest'
1310
- if (mime) {
1311
- baseHeaders['Accept'] = mime
1312
- if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0]
1313
- xhr.overrideMimeType && xhr.overrideMimeType(mime)
1314
- }
1315
- if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))
1316
- baseHeaders['Content-Type'] = (settings.contentType || 'application/x-www-form-urlencoded')
1317
- settings.headers = $.extend(baseHeaders, settings.headers || {})
1318
-
1319
- xhr.onreadystatechange = function(){
1320
- if (xhr.readyState == 4) {
1321
- xhr.onreadystatechange = empty;
1322
- clearTimeout(abortTimeout)
1323
- var result, error = false
1324
- if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {
1325
- dataType = dataType || mimeToDataType(xhr.getResponseHeader('content-type'))
1326
- result = xhr.responseText
1327
-
1328
- try {
1329
- // http://perfectionkills.com/global-eval-what-are-the-options/
1330
- if (dataType == 'script') (1,eval)(result)
1331
- else if (dataType == 'xml') result = xhr.responseXML
1332
- else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)
1333
- } catch (e) { error = e }
1334
-
1335
- if (error) ajaxError(error, 'parsererror', xhr, settings)
1336
- else ajaxSuccess(result, xhr, settings)
1337
- } else {
1338
- ajaxError(null, xhr.status ? 'error' : 'abort', xhr, settings)
1339
- }
1340
- }
1341
- }
1342
-
1343
- var async = 'async' in settings ? settings.async : true
1344
- xhr.open(settings.type, settings.url, async)
1345
-
1346
- for (name in settings.headers) xhr.setRequestHeader(name, settings.headers[name])
1347
-
1348
- if (ajaxBeforeSend(xhr, settings) === false) {
1349
- xhr.abort()
1350
- return false
1351
- }
1352
-
1353
- if (settings.timeout > 0) abortTimeout = setTimeout(function(){
1354
- xhr.onreadystatechange = empty
1355
- xhr.abort()
1356
- ajaxError(null, 'timeout', xhr, settings)
1357
- }, settings.timeout)
1358
-
1359
- // avoid sending empty string (#319)
1360
- xhr.send(settings.data ? settings.data : null)
1361
- return xhr
1362
- }
1363
-
1364
- // handle optional data/success arguments
1365
- function parseArguments(url, data, success, dataType) {
1366
- var hasData = !$.isFunction(data)
1367
- return {
1368
- url: url,
1369
- data: hasData ? data : undefined,
1370
- success: !hasData ? data : $.isFunction(success) ? success : undefined,
1371
- dataType: hasData ? dataType || success : success
1372
- }
1373
- }
1374
-
1375
- $.get = function(url, data, success, dataType){
1376
- return $.ajax(parseArguments.apply(null, arguments))
1377
- }
1378
-
1379
- $.post = function(url, data, success, dataType){
1380
- var options = parseArguments.apply(null, arguments)
1381
- options.type = 'POST'
1382
- return $.ajax(options)
1383
- }
1384
-
1385
- $.getJSON = function(url, data, success){
1386
- var options = parseArguments.apply(null, arguments)
1387
- options.dataType = 'json'
1388
- return $.ajax(options)
1389
- }
1390
-
1391
- $.fn.load = function(url, data, success){
1392
- if (!this.length) return this
1393
- var self = this, parts = url.split(/\s/), selector,
1394
- options = parseArguments(url, data, success),
1395
- callback = options.success
1396
- if (parts.length > 1) options.url = parts[0], selector = parts[1]
1397
- options.success = function(response){
1398
- self.html(selector ?
1399
- $('<div>').html(response.replace(rscript, "")).find(selector)
1400
- : response)
1401
- callback && callback.apply(self, arguments)
1402
- }
1403
- $.ajax(options)
1404
- return this
1405
- }
1406
-
1407
- var escape = encodeURIComponent
1408
-
1409
- function serialize(params, obj, traditional, scope){
1410
- var type, array = $.isArray(obj)
1411
- $.each(obj, function(key, value) {
1412
- type = $.type(value)
1413
- if (scope) key = traditional ? scope : scope + '[' + (array ? '' : key) + ']'
1414
- // handle data in serializeArray() format
1415
- if (!scope && array) params.add(value.name, value.value)
1416
- // recurse into nested objects
1417
- else if (type == "array" || (!traditional && type == "object"))
1418
- serialize(params, value, traditional, key)
1419
- else params.add(key, value)
1420
- })
1421
- }
1422
-
1423
- $.param = function(obj, traditional){
1424
- var params = []
1425
- params.add = function(k, v){ this.push(escape(k) + '=' + escape(v)) }
1426
- serialize(params, obj, traditional)
1427
- return params.join('&').replace(/%20/g, '+')
1428
- }
1429
- })(Zepto)
1430
-
1431
- ;(function ($) {
1432
- $.fn.serializeArray = function () {
1433
- var result = [], el
1434
- $( Array.prototype.slice.call(this.get(0).elements) ).each(function () {
1435
- el = $(this)
1436
- var type = el.attr('type')
1437
- if (this.nodeName.toLowerCase() != 'fieldset' &&
1438
- !this.disabled && type != 'submit' && type != 'reset' && type != 'button' &&
1439
- ((type != 'radio' && type != 'checkbox') || this.checked))
1440
- result.push({
1441
- name: el.attr('name'),
1442
- value: el.val()
1443
- })
1444
- })
1445
- return result
1446
- }
1447
-
1448
- $.fn.serialize = function () {
1449
- var result = []
1450
- this.serializeArray().forEach(function (elm) {
1451
- result.push( encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value) )
1452
- })
1453
- return result.join('&')
1454
- }
1455
-
1456
- $.fn.submit = function (callback) {
1457
- if (callback) this.bind('submit', callback)
1458
- else if (this.length) {
1459
- var event = $.Event('submit')
1460
- this.eq(0).trigger(event)
1461
- if (!event.defaultPrevented) this.get(0).submit()
1462
- }
1463
- return this
1464
- }
1465
-
1466
- })(Zepto)
1467
-
1468
- ;(function($, undefined){
1469
- var prefix = '', eventPrefix, endEventName, endAnimationName,
1470
- vendors = { Webkit: 'webkit', Moz: '', O: 'o', ms: 'MS' },
1471
- document = window.document, testEl = document.createElement('div'),
1472
- supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
1473
- transform,
1474
- transitionProperty, transitionDuration, transitionTiming,
1475
- animationName, animationDuration, animationTiming,
1476
- cssReset = {}
1477
-
1478
- function dasherize(str) { return downcase(str.replace(/([a-z])([A-Z])/, '$1-$2')) }
1479
- function downcase(str) { return str.toLowerCase() }
1480
- function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : downcase(name) }
1481
-
1482
- $.each(vendors, function(vendor, event){
1483
- if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {
1484
- prefix = '-' + downcase(vendor) + '-'
1485
- eventPrefix = event
1486
- return false
1487
- }
1488
- })
1489
-
1490
- transform = prefix + 'transform'
1491
- cssReset[transitionProperty = prefix + 'transition-property'] =
1492
- cssReset[transitionDuration = prefix + 'transition-duration'] =
1493
- cssReset[transitionTiming = prefix + 'transition-timing-function'] =
1494
- cssReset[animationName = prefix + 'animation-name'] =
1495
- cssReset[animationDuration = prefix + 'animation-duration'] =
1496
- cssReset[animationTiming = prefix + 'animation-timing-function'] = ''
1497
-
1498
- $.fx = {
1499
- off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),
1500
- speeds: { _default: 400, fast: 200, slow: 600 },
1501
- cssPrefix: prefix,
1502
- transitionEnd: normalizeEvent('TransitionEnd'),
1503
- animationEnd: normalizeEvent('AnimationEnd')
1504
- }
1505
-
1506
- $.fn.animate = function(properties, duration, ease, callback){
1507
- if ($.isPlainObject(duration))
1508
- ease = duration.easing, callback = duration.complete, duration = duration.duration
1509
- if (duration) duration = (typeof duration == 'number' ? duration :
1510
- ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000
1511
- return this.anim(properties, duration, ease, callback)
1512
- }
1513
-
1514
- $.fn.anim = function(properties, duration, ease, callback){
1515
- var key, cssValues = {}, cssProperties, transforms = '',
1516
- that = this, wrappedCallback, endEvent = $.fx.transitionEnd
1517
-
1518
- if (duration === undefined) duration = 0.4
1519
- if ($.fx.off) duration = 0
1520
-
1521
- if (typeof properties == 'string') {
1522
- // keyframe animation
1523
- cssValues[animationName] = properties
1524
- cssValues[animationDuration] = duration + 's'
1525
- cssValues[animationTiming] = (ease || 'linear')
1526
- endEvent = $.fx.animationEnd
1527
- } else {
1528
- cssProperties = []
1529
- // CSS transitions
1530
- for (key in properties)
1531
- if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '
1532
- else cssValues[key] = properties[key], cssProperties.push(dasherize(key))
1533
-
1534
- if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)
1535
- if (duration > 0 && typeof properties === 'object') {
1536
- cssValues[transitionProperty] = cssProperties.join(', ')
1537
- cssValues[transitionDuration] = duration + 's'
1538
- cssValues[transitionTiming] = (ease || 'linear')
1539
- }
1540
- }
1541
-
1542
- wrappedCallback = function(event){
1543
- if (typeof event !== 'undefined') {
1544
- if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"
1545
- $(event.target).unbind(endEvent, wrappedCallback)
1546
- }
1547
- $(this).css(cssReset)
1548
- callback && callback.call(this)
1549
- }
1550
- if (duration > 0) this.bind(endEvent, wrappedCallback)
1551
-
1552
- // trigger page reflow so new elements can animate
1553
- this.size() && this.get(0).clientLeft
1554
-
1555
- this.css(cssValues)
1556
-
1557
- if (duration <= 0) setTimeout(function() {
1558
- that.each(function(){ wrappedCallback.call(this) })
1559
- }, 0)
1560
-
1561
- return this
1562
- }
1563
-
1564
- testEl = null
1565
- })(Zepto)
1566
-
1567
- // Zepto.js
1568
- // (c) 2010-2012 Thomas Fuchs
1569
- // Zepto.js may be freely distributed under the MIT license.
1570
-
1571
- ;(function($, undefined){
1572
- var document = window.document, docElem = document.documentElement,
1573
- origShow = $.fn.show, origHide = $.fn.hide, origToggle = $.fn.toggle
1574
-
1575
- function anim(el, speed, opacity, scale, callback) {
1576
- if (typeof speed == 'function' && !callback) callback = speed, speed = undefined
1577
- var props = { opacity: opacity }
1578
- if (scale) {
1579
- props.scale = scale
1580
- el.css($.fx.cssPrefix + 'transform-origin', '0 0')
1581
- }
1582
- return el.animate(props, speed, null, callback)
1583
- }
1584
-
1585
- function hide(el, speed, scale, callback) {
1586
- return anim(el, speed, 0, scale, function(){
1587
- origHide.call($(this))
1588
- callback && callback.call(this)
1589
- })
1590
- }
1591
-
1592
- $.fn.show = function(speed, callback) {
1593
- origShow.call(this)
1594
- if (speed === undefined) speed = 0
1595
- else this.css('opacity', 0)
1596
- return anim(this, speed, 1, '1,1', callback)
1597
- }
1598
-
1599
- $.fn.hide = function(speed, callback) {
1600
- if (speed === undefined) return origHide.call(this)
1601
- else return hide(this, speed, '0,0', callback)
1602
- }
1603
-
1604
- $.fn.toggle = function(speed, callback) {
1605
- if (speed === undefined || typeof speed == 'boolean')
1606
- return origToggle.call(this, speed)
1607
- else return this.each(function(){
1608
- var el = $(this)
1609
- el[el.css('display') == 'none' ? 'show' : 'hide'](speed, callback)
1610
- })
1611
- }
1612
-
1613
- $.fn.fadeTo = function(speed, opacity, callback) {
1614
- return anim(this, speed, opacity, null, callback)
1615
- }
1616
-
1617
- $.fn.fadeIn = function(speed, callback) {
1618
- var target = this.css('opacity')
1619
- if (target > 0) this.css('opacity', 0)
1620
- else target = 1
1621
- return origShow.call(this).fadeTo(speed, target, callback)
1622
- }
1623
-
1624
- $.fn.fadeOut = function(speed, callback) {
1625
- return hide(this, speed, null, callback)
1626
- }
1627
-
1628
- $.fn.fadeToggle = function(speed, callback) {
1629
- return this.each(function(){
1630
- var el = $(this)
1631
- el[
1632
- (el.css('opacity') == 0 || el.css('display') == 'none') ? 'fadeIn' : 'fadeOut'
1633
- ](speed, callback)
1634
- })
1635
- }
1636
-
1637
- })(Zepto)
1638
-
1639
- // Zepto.js
1640
- // (c) 2010-2012 Thomas Fuchs
1641
- // Zepto.js may be freely distributed under the MIT license.
1642
-
1643
- ;(function($){
1644
- var cache = [], timeout
1645
-
1646
- $.fn.remove = function(){
1647
- return this.each(function(){
1648
- if(this.parentNode){
1649
- if(this.tagName === 'IMG'){
1650
- cache.push(this)
1651
- this.src = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='
1652
- if (timeout) clearTimeout(timeout)
1653
- timeout = setTimeout(function(){ cache = [] }, 60000)
1654
- }
1655
- this.parentNode.removeChild(this)
1656
- }
1657
- })
1658
- }
1659
- })(Zepto)
1660
-
1661
- // Zepto.js
1662
- // (c) 2010-2012 Thomas Fuchs
1663
- // Zepto.js may be freely distributed under the MIT license.
1664
-
1665
- // The following code is heavily inspired by jQuery's $.fn.data()
1666
-
1667
- ;(function($) {
1668
- var data = {}, dataAttr = $.fn.data, camelize = $.camelCase,
1669
- exp = $.expando = 'Zepto' + (+new Date())
1670
-
1671
- // Get value from node:
1672
- // 1. first try key as given,
1673
- // 2. then try camelized key,
1674
- // 3. fall back to reading "data-*" attribute.
1675
- function getData(node, name) {
1676
- var id = node[exp], store = id && data[id]
1677
- if (name === undefined) return store || setData(node)
1678
- else {
1679
- if (store) {
1680
- if (name in store) return store[name]
1681
- var camelName = camelize(name)
1682
- if (camelName in store) return store[camelName]
1683
- }
1684
- return dataAttr.call($(node), name)
1685
- }
1686
- }
1687
-
1688
- // Store value under camelized key on node
1689
- function setData(node, name, value) {
1690
- var id = node[exp] || (node[exp] = ++$.uuid),
1691
- store = data[id] || (data[id] = attributeData(node))
1692
- if (name !== undefined) store[camelize(name)] = value
1693
- return store
1694
- }
1695
-
1696
- // Read all "data-*" attributes from a node
1697
- function attributeData(node) {
1698
- var store = {}
1699
- $.each(node.attributes, function(i, attr){
1700
- if (attr.name.indexOf('data-') == 0)
1701
- store[camelize(attr.name.replace('data-', ''))] =
1702
- $.zepto.deserializeValue(attr.value)
1703
- })
1704
- return store
1705
- }
1706
-
1707
- $.fn.data = function(name, value) {
1708
- return value === undefined ?
1709
- // set multiple values via object
1710
- $.isPlainObject(name) ?
1711
- this.each(function(i, node){
1712
- $.each(name, function(key, value){ setData(node, key, value) })
1713
- }) :
1714
- // get value from first element
1715
- this.length == 0 ? undefined : getData(this[0], name) :
1716
- // set value on all elements
1717
- this.each(function(){ setData(this, name, value) })
1718
- }
1719
-
1720
- $.fn.removeData = function(names) {
1721
- if (typeof names == 'string') names = names.split(/\s+/)
1722
- return this.each(function(){
1723
- var id = this[exp], store = id && data[id]
1724
- if (store) $.each(names, function(){ delete store[camelize(this)] })
1725
- })
1726
- }
1727
- })(Zepto)
1728
-
1729
- ;(function($){
1730
- var zepto = $.zepto, oldQsa = zepto.qsa, oldMatches = zepto.matches
1731
-
1732
- function visible(elem){
1733
- elem = $(elem)
1734
- return !!(elem.width() || elem.height()) && elem.css("display") !== "none"
1735
- }
1736
-
1737
- // Implements a subset from:
1738
- // http://api.jquery.com/category/selectors/jquery-selector-extensions/
1739
- //
1740
- // Each filter function receives the current index, all nodes in the
1741
- // considered set, and a value if there were parentheses. The value
1742
- // of `this` is the node currently being considered. The function returns the
1743
- // resulting node(s), null, or undefined.
1744
- //
1745
- // Complex selectors are not supported:
1746
- // li:has(label:contains("foo")) + li:has(label:contains("bar"))
1747
- // ul.inner:first > li
1748
- var filters = $.expr[':'] = {
1749
- visible: function(){ if (visible(this)) return this },
1750
- hidden: function(){ if (!visible(this)) return this },
1751
- selected: function(){ if (this.selected) return this },
1752
- checked: function(){ if (this.checked) return this },
1753
- parent: function(){ return this.parentNode },
1754
- first: function(idx){ if (idx === 0) return this },
1755
- last: function(idx, nodes){ if (idx === nodes.length - 1) return this },
1756
- eq: function(idx, _, value){ if (idx === value) return this },
1757
- contains: function(idx, _, text){ if ($(this).text().indexOf(text) > -1) return this },
1758
- has: function(idx, _, sel){ if (zepto.qsa(this, sel).length) return this }
1759
- }
1760
-
1761
- var filterRe = new RegExp('(.*):(\\w+)(?:\\(([^)]+)\\))?$\\s*'),
1762
- childRe = /^\s*>/,
1763
- classTag = 'Zepto' + (+new Date())
1764
-
1765
- function process(sel, fn) {
1766
- // quote the hash in `a[href^=#]` expression
1767
- sel = sel.replace(/=#\]/g, '="#"]')
1768
- var filter, arg, match = filterRe.exec(sel)
1769
- if (match && match[2] in filters) {
1770
- filter = filters[match[2]], arg = match[3]
1771
- sel = match[1]
1772
- if (arg) {
1773
- var num = Number(arg)
1774
- if (isNaN(num)) arg = arg.replace(/^["']|["']$/g, '')
1775
- else arg = num
1776
- }
1777
- }
1778
- return fn(sel, filter, arg)
1779
- }
1780
-
1781
- zepto.qsa = function(node, selector) {
1782
- return process(selector, function(sel, filter, arg){
1783
- try {
1784
- var taggedParent
1785
- if (!sel && filter) sel = '*'
1786
- else if (childRe.test(sel))
1787
- // support "> *" child queries by tagging the parent node with a
1788
- // unique class and prepending that classname onto the selector
1789
- taggedParent = $(node).addClass(classTag), sel = '.'+classTag+' '+sel
1790
-
1791
- var nodes = oldQsa(node, sel)
1792
- } catch(e) {
1793
- console.error('error performing selector: %o', selector)
1794
- throw e
1795
- } finally {
1796
- if (taggedParent) taggedParent.removeClass(classTag)
1797
- }
1798
- return !filter ? nodes :
1799
- zepto.uniq($.map(nodes, function(n, i){ return filter.call(n, i, nodes, arg) }))
1800
- })
1801
- }
1802
-
1803
- zepto.matches = function(node, selector){
1804
- return process(selector, function(sel, filter, arg){
1805
- return (!sel || oldMatches(node, sel)) &&
1806
- (!filter || filter.call(node, null, arg) === node)
1807
- })
1808
- }
1809
- })(Zepto)
1810
-
1811
- // Zepto.js
1812
- // (c) 2010-2012 Thomas Fuchs
1813
- // Zepto.js may be freely distributed under the MIT license.
1814
-
1815
- ;(function($){
1816
- $.fn.end = function(){
1817
- return this.prevObject || $()
1818
- }
1819
-
1820
- $.fn.andSelf = function(){
1821
- return this.add(this.prevObject || $())
1822
- }
1823
-
1824
- 'filter,add,not,eq,first,last,find,closest,parents,parent,children,siblings'.split(',').forEach(function(property){
1825
- var fn = $.fn[property]
1826
- $.fn[property] = function(){
1827
- var ret = fn.apply(this, arguments)
1828
- ret.prevObject = this
1829
- return ret
1830
- }
1831
- })
1832
- })(Zepto)
1833
-
1834
- // Zepto.js
1835
- // (c) 2010-2012 Thomas Fuchs
1836
- // Zepto.js may be freely distributed under the MIT license.
1837
-
1838
- ;(function($){
1839
- var touch = {},
1840
- touchTimeout, tapTimeout, swipeTimeout,
1841
- longTapDelay = 750, longTapTimeout
1842
-
1843
- function parentIfText(node) {
1844
- return 'tagName' in node ? node : node.parentNode
1845
- }
1846
-
1847
- function swipeDirection(x1, x2, y1, y2) {
1848
- var xDelta = Math.abs(x1 - x2), yDelta = Math.abs(y1 - y2)
1849
- return xDelta >= yDelta ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down')
1850
- }
1851
-
1852
- function longTap() {
1853
- longTapTimeout = null
1854
- if (touch.last) {
1855
- touch.el.trigger('longTap')
1856
- touch = {}
1857
- }
1858
- }
1859
-
1860
- function cancelLongTap() {
1861
- if (longTapTimeout) clearTimeout(longTapTimeout)
1862
- longTapTimeout = null
1863
- }
1864
-
1865
- function cancelAll() {
1866
- if (touchTimeout) clearTimeout(touchTimeout)
1867
- if (tapTimeout) clearTimeout(tapTimeout)
1868
- if (swipeTimeout) clearTimeout(swipeTimeout)
1869
- if (longTapTimeout) clearTimeout(longTapTimeout)
1870
- touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null
1871
- touch = {}
1872
- }
1873
-
1874
- $(document).ready(function(){
1875
- var now, delta
1876
-
1877
- $(document.body)
1878
- .bind('touchstart', function(e){
1879
- now = Date.now()
1880
- delta = now - (touch.last || now)
1881
- touch.el = $(parentIfText(e.touches[0].target))
1882
- touchTimeout && clearTimeout(touchTimeout)
1883
- touch.x1 = e.touches[0].pageX
1884
- touch.y1 = e.touches[0].pageY
1885
- if (delta > 0 && delta <= 250) touch.isDoubleTap = true
1886
- touch.last = now
1887
- longTapTimeout = setTimeout(longTap, longTapDelay)
1888
- })
1889
- .bind('touchmove', function(e){
1890
- cancelLongTap()
1891
- touch.x2 = e.touches[0].pageX
1892
- touch.y2 = e.touches[0].pageY
1893
- if (Math.abs(touch.x1 - touch.x2) > 10)
1894
- e.preventDefault()
1895
- })
1896
- .bind('touchend', function(e){
1897
- cancelLongTap()
1898
-
1899
- // swipe
1900
- if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) ||
1901
- (touch.y2 && Math.abs(touch.y1 - touch.y2) > 30))
1902
-
1903
- swipeTimeout = setTimeout(function() {
1904
- touch.el.trigger('swipe')
1905
- touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)))
1906
- touch = {}
1907
- }, 0)
1908
-
1909
- // normal tap
1910
- else if ('last' in touch)
1911
-
1912
- // delay by one tick so we can cancel the 'tap' event if 'scroll' fires
1913
- // ('tap' fires before 'scroll')
1914
- tapTimeout = setTimeout(function() {
1915
-
1916
- // trigger universal 'tap' with the option to cancelTouch()
1917
- // (cancelTouch cancels processing of single vs double taps for faster 'tap' response)
1918
- var event = $.Event('tap')
1919
- event.cancelTouch = cancelAll
1920
- touch.el.trigger(event)
1921
-
1922
- // trigger double tap immediately
1923
- if (touch.isDoubleTap) {
1924
- touch.el.trigger('doubleTap')
1925
- touch = {}
1926
- }
1927
-
1928
- // trigger single tap after 250ms of inactivity
1929
- else {
1930
- touchTimeout = setTimeout(function(){
1931
- touchTimeout = null
1932
- touch.el.trigger('singleTap')
1933
- touch = {}
1934
- }, 250)
1935
- }
1936
-
1937
- }, 0)
1938
-
1939
- })
1940
- .bind('touchcancel', cancelAll)
1941
-
1942
- $(window).bind('scroll', cancelAll)
1943
- })
1944
-
1945
- ;['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown', 'doubleTap', 'tap', 'singleTap', 'longTap'].forEach(function(m){
1946
- $.fn[m] = function(callback){ return this.bind(m, callback) }
1947
- })
1948
- })(Zepto)
1949
-
1950
-
1951
- // outer and inner height/width support
1952
- if (this.Zepto) {
1953
- (function($) {
1954
- var ioDim, _base;
1955
- ioDim = function(elem, Dimension, dimension, includeBorder, includeMargin) {
1956
- var sides, size;
1957
- if (elem) {
1958
- size = elem[dimension]();
1959
- sides = {
1960
- width: ["left", "right"],
1961
- height: ["top", "bottom"]
1962
- };
1963
- sides[dimension].forEach(function(side) {
1964
- size += parseInt(elem.css("padding-" + side), 10);
1965
- if (includeBorder) {
1966
- size += parseInt(elem.css("border-" + side + "-width"), 10);
1967
- }
1968
- if (includeMargin) {
1969
- return size += parseInt(elem.css("margin-" + side), 10);
1970
- }
1971
- });
1972
- return size;
1973
- } else {
1974
- return null;
1975
- }
1976
- };
1977
- ["width", "height"].forEach(function(dimension) {
1978
- var Dimension, _base, _base1, _name, _name1;
1979
- Dimension = dimension.replace(/./, function(m) {
1980
- return m[0].toUpperCase();
1981
- });
1982
- (_base = $.fn)[_name = "inner" + Dimension] || (_base[_name] = function(includeMargin) {
1983
- return ioDim(this, Dimension, dimension, false, includeMargin);
1984
- });
1985
- return (_base1 = $.fn)[_name1 = "outer" + Dimension] || (_base1[_name1] = function(includeMargin) {
1986
- return ioDim(this, Dimension, dimension, true, includeMargin);
1987
- });
1988
- });
1989
- return (_base = $.fn).detach || (_base.detach = function(selector) {
1990
- var cloned, set;
1991
- set = this;
1992
- if (selector != null) {
1993
- set = set.filter(selector);
1994
- }
1995
- cloned = set.clone(true);
1996
- set.remove();
1997
- return cloned;
1998
- });
1999
- })(Zepto);
2000
- }