1 |
|
2 |
|
3 |
|
4 | ;(function(undefined){
|
5 | if (String.prototype.trim === undefined)
|
6 | String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g, '') }
|
7 |
|
8 |
|
9 |
|
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 |
|
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 |
|
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 |
|
138 |
|
139 |
|
140 |
|
141 |
|
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 |
|
163 |
|
164 |
|
165 |
|
166 | zepto.Z = function(dom, selector) {
|
167 | dom = dom || []
|
168 | dom.__proto__ = $.fn
|
169 | dom.selector = selector || ''
|
170 | return dom
|
171 | }
|
172 |
|
173 |
|
174 |
|
175 | zepto.isZ = function(object) {
|
176 | return object instanceof zepto.Z
|
177 | }
|
178 |
|
179 |
|
180 |
|
181 |
|
182 |
|
183 | zepto.init = function(selector, context) {
|
184 |
|
185 | if (!selector) return zepto.Z()
|
186 |
|
187 | else if (isFunction(selector)) return $(document).ready(selector)
|
188 |
|
189 | else if (zepto.isZ(selector)) return selector
|
190 | else {
|
191 | var dom
|
192 |
|
193 | if (isArray(selector)) dom = compact(selector)
|
194 |
|
195 | else if (isObject(selector))
|
196 | dom = [isPlainObject(selector) ? $.extend({}, selector) : selector], selector = null
|
197 |
|
198 | else if (fragmentRE.test(selector))
|
199 | dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null
|
200 |
|
201 |
|
202 | else if (context !== undefined) return $(context).find(selector)
|
203 |
|
204 | else dom = zepto.qsa(document, selector)
|
205 |
|
206 | return zepto.Z(dom, selector)
|
207 | }
|
208 | }
|
209 |
|
210 |
|
211 |
|
212 |
|
213 |
|
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 |
|
231 |
|
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 |
|
243 |
|
244 |
|
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 |
|
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 |
|
283 |
|
284 |
|
285 |
|
286 |
|
287 |
|
288 |
|
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 |
|
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 |
|
364 | $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
|
365 | class2type[ "[object " + name + "]" ] = name.toLowerCase()
|
366 | })
|
367 |
|
368 |
|
369 |
|
370 | $.fn = {
|
371 |
|
372 |
|
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 |
|
381 |
|
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 |
|
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 |
|
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 |
|
709 | offsetParent = this.offsetParent(),
|
710 |
|
711 | offset = this.offset(),
|
712 | parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()
|
713 |
|
714 |
|
715 |
|
716 |
|
717 | offset.top -= parseFloat( $(elem).css('margin-top') ) || 0
|
718 | offset.left -= parseFloat( $(elem).css('margin-left') ) || 0
|
719 |
|
720 |
|
721 | parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0
|
722 | parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0
|
723 |
|
724 |
|
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 |
|
741 | $.fn.detach = $.fn.remove
|
742 |
|
743 |
|
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 |
|
764 |
|
765 | adjacencyOperators.forEach(function(operator, operatorIndex) {
|
766 | var inside = operatorIndex % 2
|
767 |
|
768 | $.fn[operator] = function(){
|
769 |
|
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 |
|
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 |
|
801 |
|
802 |
|
803 |
|
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 |
|
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 |
|
842 |
|
843 |
|
844 |
|
845 |
|
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 |
|
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 |
|
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 |
|
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 |
|
1066 |
|
1067 | if('dispatchEvent' in this) this.dispatchEvent(event)
|
1068 | })
|
1069 | }
|
1070 |
|
1071 |
|
1072 |
|
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 |
|
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 |
|
1133 | function triggerAndReturn(context, eventName, data) {
|
1134 | var event = $.Event(eventName)
|
1135 | $(context).trigger(event, data)
|
1136 | return !event.defaultPrevented
|
1137 | }
|
1138 |
|
1139 |
|
1140 | function triggerGlobal(settings, context, eventName, data) {
|
1141 | if (settings.global) return triggerAndReturn(context || document, eventName, data)
|
1142 | }
|
1143 |
|
1144 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
1200 |
|
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 |
|
1230 | type: 'GET',
|
1231 |
|
1232 | beforeSend: empty,
|
1233 |
|
1234 | success: empty,
|
1235 |
|
1236 | error: empty,
|
1237 |
|
1238 | complete: empty,
|
1239 |
|
1240 | context: null,
|
1241 |
|
1242 | global: true,
|
1243 |
|
1244 | xhr: function () {
|
1245 | return new window.XMLHttpRequest()
|
1246 | },
|
1247 |
|
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 |
|
1256 | crossDomain: false,
|
1257 |
|
1258 | timeout: 0,
|
1259 |
|
1260 | processData: true,
|
1261 |
|
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 |
|
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 |
|
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 |
|
1360 | xhr.send(settings.data ? settings.data : null)
|
1361 | return xhr
|
1362 | }
|
1363 |
|
1364 |
|
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 |
|
1415 | if (!scope && array) params.add(value.name, value.value)
|
1416 |
|
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 |
|
1523 | cssValues[animationName] = properties
|
1524 | cssValues[animationDuration] = duration + 's'
|
1525 | cssValues[animationTiming] = (ease || 'linear')
|
1526 | endEvent = $.fx.animationEnd
|
1527 | } else {
|
1528 | cssProperties = []
|
1529 |
|
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
|
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 |
|
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 |
|