zurb-foundation 4.0.4 → 4.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/CHANGELOG.md +26 -2
  2. data/CONTRIBUTING.md +0 -8
  3. data/Gemfile.lock +2 -2
  4. data/docs/_sidebar-components.html.erb +1 -0
  5. data/docs/_sidebar.html.erb +1 -0
  6. data/docs/changelog.html.erb +29 -1
  7. data/docs/components/block-grid.html.erb +11 -2
  8. data/docs/components/clearing.html.erb +1 -1
  9. data/docs/components/custom-forms.html.erb +14 -13
  10. data/docs/components/dropdown.html.erb +1 -1
  11. data/docs/components/flex-video.html.erb +1 -1
  12. data/docs/components/grid.html.erb +2 -2
  13. data/docs/components/joyride.html.erb +1 -1
  14. data/docs/components/magellan.html.erb +1 -1
  15. data/docs/components/orbit.html.erb +5 -1
  16. data/docs/components/pricing-tables.html.erb +3 -3
  17. data/docs/components/progress-bars.html.erb +1 -0
  18. data/docs/components/reveal.html.erb +5 -1
  19. data/docs/components/section.html.erb +66 -4
  20. data/docs/components/split-buttons.html.erb +11 -11
  21. data/docs/components/tooltips.html.erb +1 -1
  22. data/docs/components/top-bar.html.erb +4 -2
  23. data/docs/components/type.html.erb +7 -1
  24. data/docs/components/visibility.html.erb +17 -11
  25. data/docs/javascript.html.erb +1 -1
  26. data/docs/layout.html.erb +3 -3
  27. data/docs/media-queries.html.erb +96 -0
  28. data/docs/sass.html.erb +82 -2
  29. data/foundation.gemspec +1 -1
  30. data/js/foundation/foundation.forms.js +6 -14
  31. data/js/foundation/foundation.joyride.js +12 -10
  32. data/js/foundation/foundation.orbit.js +2 -0
  33. data/js/foundation/foundation.section.js +61 -4
  34. data/js/foundation/foundation.topbar.js +9 -2
  35. data/js/vendor/zepto.js +415 -313
  36. data/lib/foundation/version.rb +1 -1
  37. data/scss/foundation/_foundation-global.scss +4 -0
  38. data/scss/foundation/components/_block-grid.scss +4 -4
  39. data/scss/foundation/components/_button-groups.scss +4 -4
  40. data/scss/foundation/components/_buttons.scss +2 -1
  41. data/scss/foundation/components/_custom-forms.scss +1 -1
  42. data/scss/foundation/components/_forms.scss +3 -4
  43. data/scss/foundation/components/_global.scss +11 -8
  44. data/scss/foundation/components/_magellan.scss +7 -2
  45. data/scss/foundation/components/_orbit.scss +6 -3
  46. data/scss/foundation/components/_progress-bars.scss +6 -4
  47. data/scss/foundation/components/_section.scss +48 -1
  48. data/scss/foundation/components/_top-bar.scss +15 -14
  49. data/scss/foundation/components/_type.scss +3 -3
  50. data/scss/foundation/components/_visibility.scss +259 -55
  51. data/templates/project/scss/_settings.scss +7 -0
  52. metadata +6 -6
  53. data/docs/_zurb-jobs.html.erb +0 -5
@@ -334,6 +334,7 @@
334
334
 
335
335
  set_next_tip : function () {
336
336
  this.settings.$next_tip = $(".joyride-tip-guide[data-index='" + this.settings.$li.index() + "']");
337
+ this.settings.$next_tip.data('closed', '');
337
338
  },
338
339
 
339
340
  set_target : function () {
@@ -485,9 +486,7 @@
485
486
  }
486
487
 
487
488
  } else if (this.settings.$li.length) {
488
-
489
489
  this.pos_modal($nub);
490
-
491
490
  }
492
491
 
493
492
  if (toggle) {
@@ -499,15 +498,16 @@
499
498
  pos_modal : function ($nub) {
500
499
  this.center();
501
500
  $nub.hide();
501
+ if (!this.settings.$next_tip.data('closed')) {
502
+ if ($('.joyride-modal-bg').length < 1) {
503
+ $('body').append('<div class="joyride-modal-bg">').show();
504
+ }
502
505
 
503
- if ($('.joyride-modal-bg').length < 1) {
504
- $('body').append('<div class="joyride-modal-bg">').show();
505
- }
506
-
507
- if (/pop/i.test(this.settings.tipAnimation)) {
508
- $('.joyride-modal-bg').show();
509
- } else {
510
- $('.joyride-modal-bg').fadeIn(this.settings.tipAnimationFadeSpeed);
506
+ if (/pop/i.test(this.settings.tipAnimation)) {
507
+ $('.joyride-modal-bg').show();
508
+ } else {
509
+ $('.joyride-modal-bg').fadeIn(this.settings.tipAnimationFadeSpeed);
510
+ }
511
511
  }
512
512
  },
513
513
 
@@ -590,6 +590,8 @@
590
590
  clearTimeout(this.settings.automate);
591
591
  }
592
592
 
593
+ this.settings.$next_tip.data('closed', true);
594
+
593
595
  $('.joyride-modal-bg').hide();
594
596
  this.settings.$current_tip.hide();
595
597
  this.settings.postStepCallback(this.settings.$li.index(), this.settings.$current_tip);
@@ -177,6 +177,7 @@
177
177
  }
178
178
  })
179
179
  .on('touchstart.fndtn.orbit', function(e) {
180
+ if (!e.touches) { e = e.originalEvent; }
180
181
  var data = {
181
182
  start_page_x: e.touches[0].pageX,
182
183
  start_page_y: e.touches[0].pageY,
@@ -188,6 +189,7 @@
188
189
  e.stopPropagation();
189
190
  })
190
191
  .on('touchmove.fndtn.orbit', function(e) {
192
+ if (!e.touches) { e = e.originalEvent; }
191
193
  // Ignore pinch/zoom events
192
194
  if(e.touches.length > 1 || e.scale && e.scale !== 1) return;
193
195
 
@@ -6,7 +6,7 @@
6
6
  Foundation.libs.section = {
7
7
  name: 'section',
8
8
 
9
- version : '4.0.3',
9
+ version : '4.0.5',
10
10
 
11
11
  settings : {
12
12
  deep_linking: false,
@@ -43,6 +43,19 @@
43
43
  self.resize.call(this);
44
44
  }, 30)).trigger('resize');
45
45
 
46
+ $('[data-section] .content').on('click.fndtn.section', function (e) {
47
+ e.stopPropagation();
48
+ });
49
+
50
+ $('*, html, body').on('click.fndtn.section', function (e) {
51
+ if ($(e.target).closest('.title').length < 1) {
52
+ $('[data-section].vertical-nav, [data-section].horizontal-nav')
53
+ .find('section, .section')
54
+ .removeClass('active')
55
+ .attr('style', '');
56
+ }
57
+ });
58
+
46
59
  this.settings.init = true;
47
60
  },
48
61
 
@@ -60,6 +73,7 @@
60
73
  if (section.hasClass('active')) {
61
74
  if (self.small(parent)
62
75
  || self.is_vertical(parent)
76
+ || self.is_horizontal(parent)
63
77
  || self.is_accordion(parent)) {
64
78
  section
65
79
  .removeClass('active')
@@ -73,9 +87,14 @@
73
87
  .removeClass('active')
74
88
  .attr('style', '');
75
89
 
76
- section.css('padding-top', self.outerHeight(section.find('.title')) - 1);
90
+ section.css('padding-top', self.outerHeight(section.find('.title')));
77
91
  }
78
92
 
93
+ $('[data-section].vertical-nav, [data-section].horizontal-nav')
94
+ .find('section, .section')
95
+ .removeClass('active')
96
+ .attr('style', '');
97
+
79
98
  if (self.small(parent)) {
80
99
  section.attr('style', '');
81
100
  }
@@ -100,6 +119,7 @@
100
119
  .attr('style', '');
101
120
  } else if (active_section.length < 1
102
121
  && !self.is_vertical($this)
122
+ && !self.is_horizontal($this)
103
123
  && !self.is_accordion($this)) {
104
124
  var first = $this.find('section, .section').first();
105
125
  first.addClass('active');
@@ -107,16 +127,22 @@
107
127
  if (self.small($this)) {
108
128
  first.attr('style', '');
109
129
  } else {
110
- first.css('padding-top', self.outerHeight(first.find('.title')) - 1);
130
+ first.css('padding-top', self.outerHeight(first.find('.title')));
111
131
  }
112
132
  }
113
133
 
114
134
  if (self.small($this)) {
115
135
  active_section.attr('style', '');
116
136
  } else {
117
- active_section.css('padding-top', self.outerHeight(active_section.find('.title')) - 1);
137
+ active_section.css('padding-top', self.outerHeight(active_section.find('.title')));
118
138
  }
119
139
  self.position_titles($this);
140
+
141
+ if (self.is_horizontal($this) && !self.small($this)) {
142
+ self.position_content($this);
143
+ } else {
144
+ self.position_content($this, false);
145
+ }
120
146
  });
121
147
  },
122
148
 
@@ -124,6 +150,10 @@
124
150
  return el.hasClass('vertical-nav');
125
151
  },
126
152
 
153
+ is_horizontal : function (el) {
154
+ return el.hasClass('horizontal-nav');
155
+ },
156
+
127
157
  is_accordion : function (el) {
128
158
  return el.hasClass('accordion');
129
159
  },
@@ -153,6 +183,7 @@
153
183
 
154
184
  if (typeof off === 'boolean') {
155
185
  titles.attr('style', '');
186
+
156
187
  } else {
157
188
  titles.each(function () {
158
189
  $(this).css('left', previous_width);
@@ -161,6 +192,32 @@
161
192
  }
162
193
  },
163
194
 
195
+ position_content : function (section, off) {
196
+ var titles = section.find('.title'),
197
+ content = section.find('.content'),
198
+ self = this;
199
+
200
+ if (typeof off === 'boolean') {
201
+ content.attr('style', '');
202
+ section.attr('style', '');
203
+ } else {
204
+ section.find('section, .section').each(function () {
205
+ var title = $(this).find('.title'),
206
+ content = $(this).find('.content');
207
+
208
+ content.css({left: title.position().left - 1, top: self.outerHeight(title) - 2});
209
+ });
210
+
211
+ // temporary work around for Zepto outerheight calculation issues.
212
+ if (typeof Zepto === 'function') {
213
+ section.height(this.outerHeight(titles.first()));
214
+ } else {
215
+ section.height(this.outerHeight(titles.first()) - 2);
216
+ }
217
+ }
218
+
219
+ },
220
+
164
221
  small : function (el) {
165
222
  if (el && this.is_accordion(el)) {
166
223
  return true;
@@ -11,7 +11,8 @@
11
11
  settings : {
12
12
  index : 0,
13
13
  stickyClass : 'sticky',
14
- back_text: '&laquo; Back',
14
+ custom_back_text: true,
15
+ back_text: 'Back',
15
16
  init : false
16
17
  },
17
18
 
@@ -150,8 +151,14 @@
150
151
  this.settings.$section.find('.has-dropdown>a').each(function () {
151
152
  var $link = $(this),
152
153
  $dropdown = $link.siblings('.dropdown'),
153
- $titleLi = $('<li class="title back js-generated"><h5><a href="#">' + self.settings.back_text + '</a></h5></li>');
154
+ $titleLi = $('<li class="title back js-generated"><h5><a href="#"></a></h5></li>');
155
+
154
156
  // Copy link to subnav
157
+ if (self.settings.custom_back_text == true) {
158
+ $titleLi.find('h5>a').html('&laquo; ' + self.settings.back_text);
159
+ } else {
160
+ $titleLi.find('h5>a').html('&laquo; ' + $link.html());
161
+ }
155
162
  $dropdown.prepend($titleLi);
156
163
  });
157
164
 
data/js/vendor/zepto.js CHANGED
@@ -1,10 +1,9 @@
1
- // Zepto.js
2
- // (c) 2010-2012 Thomas Fuchs
3
- // Zepto.js may be freely distributed under the MIT license.
1
+ /* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */
2
+
4
3
 
5
4
  ;(function(undefined){
6
5
  if (String.prototype.trim === undefined) // fix for iOS 3.2
7
- String.prototype.trim = function(){ return this.replace(/^\s+/, '').replace(/\s+$/, '') }
6
+ String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g, '') }
8
7
 
9
8
  // For iOS 3.x
10
9
  // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce
@@ -33,7 +32,7 @@
33
32
  return accumulator
34
33
  }
35
34
 
36
- })();
35
+ })()
37
36
 
38
37
  var Zepto = (function() {
39
38
  var undefined, key, $, classList, emptyArray = [], slice = emptyArray.slice, filter = emptyArray.filter,
@@ -61,7 +60,8 @@ var Zepto = (function() {
61
60
  classSelectorRE = /^\.([\w-]+)$/,
62
61
  idSelectorRE = /^#([\w-]*)$/,
63
62
  tagSelectorRE = /^[\w-]+$/,
64
- toString = {}.toString,
63
+ class2type = {},
64
+ toString = class2type.toString,
65
65
  zepto = {},
66
66
  camelize, uniq,
67
67
  tempParent = document.createElement('div')
@@ -79,10 +79,17 @@ var Zepto = (function() {
79
79
  return match
80
80
  }
81
81
 
82
- function isFunction(value) { return toString.call(value) == "[object Function]" }
83
- function isObject(value) { return value instanceof Object }
84
- function isPlainObject(value) {
85
- return isObject(value) && value != window && value.__proto__ == Object.prototype
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
86
93
  }
87
94
  function isArray(value) { return value instanceof Array }
88
95
  function likeArray(obj) { return typeof obj.length == 'number' }
@@ -158,7 +165,7 @@ var Zepto = (function() {
158
165
  // Explorer. This method can be overriden in plugins.
159
166
  zepto.Z = function(dom, selector) {
160
167
  dom = dom || []
161
- dom.__proto__ = arguments.callee.prototype
168
+ dom.__proto__ = $.fn
162
169
  dom.selector = selector || ''
163
170
  return dom
164
171
  }
@@ -210,8 +217,11 @@ var Zepto = (function() {
210
217
 
211
218
  function extend(target, source, deep) {
212
219
  for (key in source)
213
- if (deep && isPlainObject(source[key])) {
214
- if (!isPlainObject(target[key])) target[key] = {}
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] = []
215
225
  extend(target[key], source[key], deep)
216
226
  }
217
227
  else if (source[key] !== undefined) target[key] = source[key]
@@ -234,7 +244,7 @@ var Zepto = (function() {
234
244
  // This method can be overriden in plugins.
235
245
  zepto.qsa = function(element, selector){
236
246
  var found
237
- return (element === document && idSelectorRE.test(selector)) ?
247
+ return (isDocument(element) && idSelectorRE.test(selector)) ?
238
248
  ( (found = element.getElementById(RegExp.$1)) ? [found] : [] ) :
239
249
  (element.nodeType !== 1 && element.nodeType !== 9) ? [] :
240
250
  slice.call(
@@ -292,11 +302,18 @@ var Zepto = (function() {
292
302
  }
293
303
  }
294
304
 
305
+ $.type = type
295
306
  $.isFunction = isFunction
296
- $.isObject = isObject
307
+ $.isWindow = isWindow
297
308
  $.isArray = isArray
298
309
  $.isPlainObject = isPlainObject
299
310
 
311
+ $.isEmptyObject = function(obj) {
312
+ var name
313
+ for (name in obj) return false
314
+ return true
315
+ }
316
+
300
317
  $.inArray = function(elem, array, i){
301
318
  return emptyArray.indexOf.call(array, elem, i)
302
319
  }
@@ -343,6 +360,11 @@ var Zepto = (function() {
343
360
 
344
361
  if (window.JSON) $.parseJSON = JSON.parse
345
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
+
346
368
  // Define methods that will be available on all
347
369
  // Zepto collections
348
370
  $.fn = {
@@ -434,22 +456,30 @@ var Zepto = (function() {
434
456
  return el && !isObject(el) ? el : $(el)
435
457
  },
436
458
  find: function(selector){
437
- var result
438
- if (this.length == 1) result = $(zepto.qsa(this[0], 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))
439
468
  else result = this.map(function(){ return zepto.qsa(this, selector) })
440
469
  return result
441
470
  },
442
471
  closest: function(selector, context){
443
- var node = this[0]
444
- while (node && !zepto.matches(node, selector))
445
- node = node !== context && node !== document && node.parentNode
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
446
476
  return $(node)
447
477
  },
448
478
  parents: function(selector){
449
479
  var ancestors = [], nodes = this
450
480
  while (nodes.length > 0)
451
481
  nodes = $.map(nodes, function(node){
452
- if ((node = node.parentNode) && node !== document && ancestors.indexOf(node) < 0) {
482
+ if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {
453
483
  ancestors.push(node)
454
484
  return node
455
485
  }
@@ -606,8 +636,8 @@ var Zepto = (function() {
606
636
  return {
607
637
  left: obj.left + window.pageXOffset,
608
638
  top: obj.top + window.pageYOffset,
609
- width: obj.width,
610
- height: obj.height
639
+ width: Math.round(obj.width),
640
+ height: Math.round(obj.height)
611
641
  }
612
642
  },
613
643
  css: function(property, value){
@@ -615,17 +645,18 @@ var Zepto = (function() {
615
645
  return this[0] && (this[0].style[camelize(property)] || getComputedStyle(this[0], '').getPropertyValue(property))
616
646
 
617
647
  var css = ''
618
- for (key in property)
619
- if (!property[key] && property[key] !== 0)
620
- this.each(function(){ this.style.removeProperty(dasherize(key)) })
621
- else
622
- css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'
623
-
624
- if (typeof property == 'string')
648
+ if (type(property) == 'string') {
625
649
  if (!value && value !== 0)
626
650
  this.each(function(){ this.style.removeProperty(dasherize(property)) })
627
651
  else
628
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
+ }
629
660
 
630
661
  return this.each(function(){ this.style.cssText += ';' + css })
631
662
  },
@@ -712,12 +743,13 @@ var Zepto = (function() {
712
743
  // Generate the `width` and `height` functions
713
744
  ;['width', 'height'].forEach(function(dimension){
714
745
  $.fn[dimension] = function(value){
715
- var offset, Dimension = dimension.replace(/./, function(m){ return m[0].toUpperCase() })
716
- if (value === undefined) return this[0] == window ? window['inner' + Dimension] :
717
- this[0] == document ? document.documentElement['offset' + Dimension] :
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] :
718
750
  (offset = this.offset()) && offset[dimension]
719
751
  else return this.each(function(idx){
720
- var el = $(this)
752
+ el = $(this)
721
753
  el.css(dimension, funcArg(this, value, idx, el[dimension]()))
722
754
  })
723
755
  }
@@ -735,7 +767,11 @@ var Zepto = (function() {
735
767
 
736
768
  $.fn[operator] = function(){
737
769
  // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings
738
- var nodes = $.map(arguments, function(n){ return isObject(n) ? n : zepto.fragment(n) }),
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
+ }),
739
775
  parent, copyByClone = this.length > 1
740
776
  if (nodes.length < 1) return this
741
777
 
@@ -781,13 +817,60 @@ var Zepto = (function() {
781
817
  return $
782
818
  })()
783
819
 
784
- // If `$` is not yet defined, point it to `Zepto`
785
820
  window.Zepto = Zepto
786
- '$' in window || (window.$ = Zepto);
821
+ '$' in window || (window.$ = Zepto)
787
822
 
788
- // Zepto.js
789
- // (c) 2010-2012 Thomas Fuchs
790
- // Zepto.js may be freely distributed under the MIT license.
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)
791
874
 
792
875
  ;(function($){
793
876
  var $$ = $.zepto.qsa, handlers = {}, _zid = 1, specialEvents={},
@@ -818,7 +901,7 @@ window.Zepto = Zepto
818
901
  }
819
902
 
820
903
  function eachEvent(events, fn, iterator){
821
- if ($.isObject(events)) $.each(events, iterator)
904
+ if ($.type(events) != "string") $.each(events, iterator)
822
905
  else events.split(/\s/).forEach(function(type){ iterator(type, fn) })
823
906
  }
824
907
 
@@ -1032,163 +1115,10 @@ window.Zepto = Zepto
1032
1115
  return event
1033
1116
  }
1034
1117
 
1035
- })(Zepto);
1036
-
1037
- // Zepto.js
1038
- // (c) 2010-2012 Thomas Fuchs
1039
- // Zepto.js may be freely distributed under the MIT license.
1040
-
1041
- ;(function($){
1042
- function detect(ua){
1043
- var os = this.os = {}, browser = this.browser = {},
1044
- webkit = ua.match(/WebKit\/([\d.]+)/),
1045
- android = ua.match(/(Android)\s+([\d.]+)/),
1046
- ipad = ua.match(/(iPad).*OS\s([\d_]+)/),
1047
- iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/),
1048
- webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),
1049
- touchpad = webos && ua.match(/TouchPad/),
1050
- kindle = ua.match(/Kindle\/([\d.]+)/),
1051
- silk = ua.match(/Silk\/([\d._]+)/),
1052
- blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/),
1053
- chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/)
1054
-
1055
- // todo clean this up with a better OS/browser
1056
- // separation. we need to discern between multiple
1057
- // browsers on android, and decide if kindle fire in
1058
- // silk mode is android or not
1059
-
1060
- if (browser.webkit = !!webkit) browser.version = webkit[1]
1061
-
1062
- if (android) os.android = true, os.version = android[2]
1063
- if (iphone) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.')
1064
- if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.')
1065
- if (webos) os.webos = true, os.version = webos[2]
1066
- if (touchpad) os.touchpad = true
1067
- if (blackberry) os.blackberry = true, os.version = blackberry[2]
1068
- if (kindle) os.kindle = true, os.version = kindle[1]
1069
- if (silk) browser.silk = true, browser.version = silk[1]
1070
- if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true
1071
- if (chrome) browser.chrome = true, browser.version = chrome[1]
1072
- }
1073
-
1074
- detect.call($, navigator.userAgent)
1075
- // make available to unit tests
1076
- $.__detect = detect
1077
-
1078
- })(Zepto);
1079
-
1080
-
1081
- // Zepto.js
1082
- // (c) 2010-2012 Thomas Fuchs
1083
- // Zepto.js may be freely distributed under the MIT license.
1084
-
1085
- ;(function($, undefined){
1086
- var prefix = '', eventPrefix, endEventName, endAnimationName,
1087
- vendors = { Webkit: 'webkit', Moz: '', O: 'o', ms: 'MS' },
1088
- document = window.document, testEl = document.createElement('div'),
1089
- supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
1090
- transform,
1091
- transitionProperty, transitionDuration, transitionTiming,
1092
- animationName, animationDuration, animationTiming,
1093
- cssReset = {}
1094
-
1095
- function dasherize(str) { return downcase(str.replace(/([a-z])([A-Z])/, '$1-$2')) }
1096
- function downcase(str) { return str.toLowerCase() }
1097
- function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : downcase(name) }
1098
-
1099
- $.each(vendors, function(vendor, event){
1100
- if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {
1101
- prefix = '-' + downcase(vendor) + '-'
1102
- eventPrefix = event
1103
- return false
1104
- }
1105
- })
1106
-
1107
- transform = prefix + 'transform'
1108
- cssReset[transitionProperty = prefix + 'transition-property'] =
1109
- cssReset[transitionDuration = prefix + 'transition-duration'] =
1110
- cssReset[transitionTiming = prefix + 'transition-timing-function'] =
1111
- cssReset[animationName = prefix + 'animation-name'] =
1112
- cssReset[animationDuration = prefix + 'animation-duration'] =
1113
- cssReset[animationTiming = prefix + 'animation-timing-function'] = ''
1114
-
1115
- $.fx = {
1116
- off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),
1117
- speeds: { _default: 400, fast: 200, slow: 600 },
1118
- cssPrefix: prefix,
1119
- transitionEnd: normalizeEvent('TransitionEnd'),
1120
- animationEnd: normalizeEvent('AnimationEnd')
1121
- }
1122
-
1123
- $.fn.animate = function(properties, duration, ease, callback){
1124
- if ($.isObject(duration))
1125
- ease = duration.easing, callback = duration.complete, duration = duration.duration
1126
- if (duration) duration = (typeof duration == 'number' ? duration :
1127
- ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000
1128
- return this.anim(properties, duration, ease, callback)
1129
- }
1130
-
1131
- $.fn.anim = function(properties, duration, ease, callback){
1132
- var key, cssValues = {}, cssProperties, transforms = '',
1133
- that = this, wrappedCallback, endEvent = $.fx.transitionEnd
1134
-
1135
- if (duration === undefined) duration = 0.4
1136
- if ($.fx.off) duration = 0
1137
-
1138
- if (typeof properties == 'string') {
1139
- // keyframe animation
1140
- cssValues[animationName] = properties
1141
- cssValues[animationDuration] = duration + 's'
1142
- cssValues[animationTiming] = (ease || 'linear')
1143
- endEvent = $.fx.animationEnd
1144
- } else {
1145
- cssProperties = []
1146
- // CSS transitions
1147
- for (key in properties)
1148
- if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '
1149
- else cssValues[key] = properties[key], cssProperties.push(dasherize(key))
1150
-
1151
- if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)
1152
- if (duration > 0 && typeof properties === 'object') {
1153
- cssValues[transitionProperty] = cssProperties.join(', ')
1154
- cssValues[transitionDuration] = duration + 's'
1155
- cssValues[transitionTiming] = (ease || 'linear')
1156
- }
1157
- }
1158
-
1159
- wrappedCallback = function(event){
1160
- if (typeof event !== 'undefined') {
1161
- if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"
1162
- $(event.target).unbind(endEvent, arguments.callee)
1163
- }
1164
- $(this).css(cssReset)
1165
- callback && callback.call(this)
1166
- }
1167
- if (duration > 0) this.bind(endEvent, wrappedCallback)
1168
-
1169
- // trigger page reflow so new elements can animate
1170
- this.size() && this.get(0).clientLeft
1171
-
1172
- this.css(cssValues)
1173
-
1174
- if (duration <= 0) setTimeout(function() {
1175
- that.each(function(){ wrappedCallback.call(this) })
1176
- }, 0)
1177
-
1178
- return this
1179
- }
1180
-
1181
- testEl = null
1182
- })(Zepto);
1183
-
1184
-
1185
- // Zepto.js
1186
- // (c) 2010-2012 Thomas Fuchs
1187
- // Zepto.js may be freely distributed under the MIT license.
1118
+ })(Zepto)
1188
1119
 
1189
1120
  ;(function($){
1190
1121
  var jsonpID = 0,
1191
- isObject = $.isObject,
1192
1122
  document = window.document,
1193
1123
  key,
1194
1124
  name,
@@ -1259,33 +1189,38 @@ window.Zepto = Zepto
1259
1189
 
1260
1190
  var callbackName = 'jsonp' + (++jsonpID),
1261
1191
  script = document.createElement('script'),
1262
- abort = function(){
1192
+ cleanup = function() {
1193
+ clearTimeout(abortTimeout)
1263
1194
  $(script).remove()
1264
- if (callbackName in window) window[callbackName] = empty
1265
- ajaxComplete('abort', xhr, options)
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)
1266
1203
  },
1267
1204
  xhr = { abort: abort }, abortTimeout
1268
1205
 
1269
- if (options.error) script.onerror = function() {
1270
- xhr.abort()
1271
- options.error()
1206
+ if (ajaxBeforeSend(xhr, options) === false) {
1207
+ abort('abort')
1208
+ return false
1272
1209
  }
1273
1210
 
1274
1211
  window[callbackName] = function(data){
1275
- clearTimeout(abortTimeout)
1276
- $(script).remove()
1277
- delete window[callbackName]
1212
+ cleanup()
1278
1213
  ajaxSuccess(data, xhr, options)
1279
1214
  }
1280
1215
 
1281
- serializeData(options)
1216
+ script.onerror = function() { abort('error') }
1217
+
1282
1218
  script.src = options.url.replace(/=\?/, '=' + callbackName)
1283
1219
  $('head').append(script)
1284
1220
 
1285
1221
  if (options.timeout > 0) abortTimeout = setTimeout(function(){
1286
- xhr.abort()
1287
- ajaxComplete('timeout', xhr, options)
1288
- }, options.timeout)
1222
+ abort('timeout')
1223
+ }, options.timeout)
1289
1224
 
1290
1225
  return xhr
1291
1226
  }
@@ -1322,10 +1257,13 @@ window.Zepto = Zepto
1322
1257
  // Default timeout
1323
1258
  timeout: 0,
1324
1259
  // Whether data should be serialized to string
1325
- processData: true
1260
+ processData: true,
1261
+ // Whether the browser should be allowed to cache GET responses
1262
+ cache: true,
1326
1263
  }
1327
1264
 
1328
1265
  function mimeToDataType(mime) {
1266
+ if (mime) mime = mime.split(';', 2)[0]
1329
1267
  return mime && ( mime == htmlType ? 'html' :
1330
1268
  mime == jsonType ? 'json' :
1331
1269
  scriptTypeRE.test(mime) ? 'script' :
@@ -1338,7 +1276,7 @@ window.Zepto = Zepto
1338
1276
 
1339
1277
  // serialize payload and append it to the URL for GET requests
1340
1278
  function serializeData(options) {
1341
- if (options.processData && isObject(options.data))
1279
+ if (options.processData && options.data && $.type(options.data) != "string")
1342
1280
  options.data = $.param(options.data, options.traditional)
1343
1281
  if (options.data && (!options.type || options.type.toUpperCase() == 'GET'))
1344
1282
  options.url = appendQuery(options.url, options.data)
@@ -1353,15 +1291,16 @@ window.Zepto = Zepto
1353
1291
  if (!settings.crossDomain) settings.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(settings.url) &&
1354
1292
  RegExp.$2 != window.location.host
1355
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
+
1356
1298
  var dataType = settings.dataType, hasPlaceholder = /=\?/.test(settings.url)
1357
1299
  if (dataType == 'jsonp' || hasPlaceholder) {
1358
1300
  if (!hasPlaceholder) settings.url = appendQuery(settings.url, 'callback=?')
1359
1301
  return $.ajaxJSONP(settings)
1360
1302
  }
1361
1303
 
1362
- if (!settings.url) settings.url = window.location.toString()
1363
- serializeData(settings)
1364
-
1365
1304
  var mime = settings.accepts[dataType],
1366
1305
  baseHeaders = { },
1367
1306
  protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol,
@@ -1387,6 +1326,7 @@ window.Zepto = Zepto
1387
1326
  result = xhr.responseText
1388
1327
 
1389
1328
  try {
1329
+ // http://perfectionkills.com/global-eval-what-are-the-options/
1390
1330
  if (dataType == 'script') (1,eval)(result)
1391
1331
  else if (dataType == 'xml') result = xhr.responseXML
1392
1332
  else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)
@@ -1421,40 +1361,60 @@ window.Zepto = Zepto
1421
1361
  return xhr
1422
1362
  }
1423
1363
 
1424
- $.get = function(url, success){ return $.ajax({ url: url, success: success }) }
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
+ }
1425
1378
 
1426
1379
  $.post = function(url, data, success, dataType){
1427
- if ($.isFunction(data)) dataType = dataType || success, success = data, data = null
1428
- return $.ajax({ type: 'POST', url: url, data: data, success: success, dataType: dataType })
1380
+ var options = parseArguments.apply(null, arguments)
1381
+ options.type = 'POST'
1382
+ return $.ajax(options)
1429
1383
  }
1430
1384
 
1431
- $.getJSON = function(url, success){
1432
- return $.ajax({ url: url, success: success, dataType: 'json' })
1385
+ $.getJSON = function(url, data, success){
1386
+ var options = parseArguments.apply(null, arguments)
1387
+ options.dataType = 'json'
1388
+ return $.ajax(options)
1433
1389
  }
1434
1390
 
1435
- $.fn.load = function(url, success){
1391
+ $.fn.load = function(url, data, success){
1436
1392
  if (!this.length) return this
1437
- var self = this, parts = url.split(/\s/), selector
1438
- if (parts.length > 1) url = parts[0], selector = parts[1]
1439
- $.get(url, function(response){
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){
1440
1398
  self.html(selector ?
1441
1399
  $('<div>').html(response.replace(rscript, "")).find(selector)
1442
1400
  : response)
1443
- success && success.apply(self, arguments)
1444
- })
1401
+ callback && callback.apply(self, arguments)
1402
+ }
1403
+ $.ajax(options)
1445
1404
  return this
1446
1405
  }
1447
1406
 
1448
1407
  var escape = encodeURIComponent
1449
1408
 
1450
1409
  function serialize(params, obj, traditional, scope){
1451
- var array = $.isArray(obj)
1410
+ var type, array = $.isArray(obj)
1452
1411
  $.each(obj, function(key, value) {
1412
+ type = $.type(value)
1453
1413
  if (scope) key = traditional ? scope : scope + '[' + (array ? '' : key) + ']'
1454
1414
  // handle data in serializeArray() format
1455
1415
  if (!scope && array) params.add(value.name, value.value)
1456
1416
  // recurse into nested objects
1457
- else if (traditional ? $.isArray(value) : isObject(value))
1417
+ else if (type == "array" || (!traditional && type == "object"))
1458
1418
  serialize(params, value, traditional, key)
1459
1419
  else params.add(key, value)
1460
1420
  })
@@ -1466,12 +1426,7 @@ window.Zepto = Zepto
1466
1426
  serialize(params, obj, traditional)
1467
1427
  return params.join('&').replace(/%20/g, '+')
1468
1428
  }
1469
- })(Zepto);
1470
-
1471
-
1472
- // Zepto.js
1473
- // (c) 2010-2012 Thomas Fuchs
1474
- // Zepto.js may be freely distributed under the MIT license.
1429
+ })(Zepto)
1475
1430
 
1476
1431
  ;(function ($) {
1477
1432
  $.fn.serializeArray = function () {
@@ -1508,8 +1463,178 @@ window.Zepto = Zepto
1508
1463
  return this
1509
1464
  }
1510
1465
 
1511
- })(Zepto);
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 = {}
1512
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)
1513
1638
 
1514
1639
  // Zepto.js
1515
1640
  // (c) 2010-2012 Thomas Fuchs
@@ -1531,8 +1656,7 @@ window.Zepto = Zepto
1531
1656
  }
1532
1657
  })
1533
1658
  }
1534
- })(Zepto);
1535
-
1659
+ })(Zepto)
1536
1660
 
1537
1661
  // Zepto.js
1538
1662
  // (c) 2010-2012 Thomas Fuchs
@@ -1600,8 +1724,7 @@ window.Zepto = Zepto
1600
1724
  if (store) $.each(names, function(){ delete store[camelize(this)] })
1601
1725
  })
1602
1726
  }
1603
- })(Zepto);
1604
-
1727
+ })(Zepto)
1605
1728
 
1606
1729
  ;(function($){
1607
1730
  var zepto = $.zepto, oldQsa = zepto.qsa, oldMatches = zepto.matches
@@ -1644,7 +1767,7 @@ window.Zepto = Zepto
1644
1767
  sel = sel.replace(/=#\]/g, '="#"]')
1645
1768
  var filter, arg, match = filterRe.exec(sel)
1646
1769
  if (match && match[2] in filters) {
1647
- var filter = filters[match[2]], arg = match[3]
1770
+ filter = filters[match[2]], arg = match[3]
1648
1771
  sel = match[1]
1649
1772
  if (arg) {
1650
1773
  var num = Number(arg)
@@ -1683,8 +1806,7 @@ window.Zepto = Zepto
1683
1806
  (!filter || filter.call(node, null, arg) === node)
1684
1807
  })
1685
1808
  }
1686
- })(Zepto);
1687
-
1809
+ })(Zepto)
1688
1810
 
1689
1811
  // Zepto.js
1690
1812
  // (c) 2010-2012 Thomas Fuchs
@@ -1707,76 +1829,56 @@ window.Zepto = Zepto
1707
1829
  return ret
1708
1830
  }
1709
1831
  })
1710
- })(Zepto);
1711
-
1712
- // Zepto.js
1713
- // (c) 2010-2012 Thomas Fuchs
1714
- // Zepto.js may be freely distributed under the MIT license.
1715
-
1716
- ;(function($, undefined){
1717
- var document = window.document, docElem = document.documentElement,
1718
- origShow = $.fn.show, origHide = $.fn.hide, origToggle = $.fn.toggle
1719
-
1720
- function anim(el, speed, opacity, scale, callback) {
1721
- if (typeof speed == 'function' && !callback) callback = speed, speed = undefined
1722
- var props = { opacity: opacity }
1723
- if (scale) {
1724
- props.scale = scale
1725
- el.css($.fx.cssPrefix + 'transform-origin', '0 0')
1726
- }
1727
- return el.animate(props, speed, null, callback)
1728
- }
1729
-
1730
- function hide(el, speed, scale, callback) {
1731
- return anim(el, speed, 0, scale, function(){
1732
- origHide.call($(this))
1733
- callback && callback.call(this)
1734
- })
1735
- }
1736
-
1737
- $.fn.show = function(speed, callback) {
1738
- origShow.call(this)
1739
- if (speed === undefined) speed = 0
1740
- else this.css('opacity', 0)
1741
- return anim(this, speed, 1, '1,1', callback)
1742
- }
1743
-
1744
- $.fn.hide = function(speed, callback) {
1745
- if (speed === undefined) return origHide.call(this)
1746
- else return hide(this, speed, '0,0', callback)
1747
- }
1748
-
1749
- $.fn.toggle = function(speed, callback) {
1750
- if (speed === undefined || typeof speed == 'boolean')
1751
- return origToggle.call(this, speed)
1752
- else return this.each(function(){
1753
- var el = $(this)
1754
- el[el.css('display') == 'none' ? 'show' : 'hide'](speed, callback)
1755
- })
1756
- }
1757
-
1758
- $.fn.fadeTo = function(speed, opacity, callback) {
1759
- return anim(this, speed, opacity, null, callback)
1760
- }
1761
-
1762
- $.fn.fadeIn = function(speed, callback) {
1763
- var target = this.css('opacity')
1764
- if (target > 0) this.css('opacity', 0)
1765
- else target = 1
1766
- return origShow.call(this).fadeTo(speed, target, callback)
1767
- }
1768
-
1769
- $.fn.fadeOut = function(speed, callback) {
1770
- return hide(this, speed, null, callback)
1771
- }
1772
-
1773
- $.fn.fadeToggle = function(speed, callback) {
1774
- return this.each(function(){
1775
- var el = $(this)
1776
- el[
1777
- (el.css('opacity') == 0 || el.css('display') == 'none') ? 'fadeIn' : 'fadeOut'
1778
- ](speed, callback)
1779
- })
1780
- }
1781
-
1782
- })(Zepto)
1832
+ })(Zepto)
1833
+
1834
+
1835
+ // outer and inner height/width support
1836
+ if (this.Zepto) {
1837
+ (function($) {
1838
+ var ioDim, _base;
1839
+ ioDim = function(elem, Dimension, dimension, includeBorder, includeMargin) {
1840
+ var sides, size;
1841
+ if (elem) {
1842
+ size = elem[dimension]();
1843
+ sides = {
1844
+ width: ["left", "right"],
1845
+ height: ["top", "bottom"]
1846
+ };
1847
+ sides[dimension].forEach(function(side) {
1848
+ size += parseInt(elem.css("padding-" + side), 10);
1849
+ if (includeBorder) {
1850
+ size += parseInt(elem.css("border-" + side + "-width"), 10);
1851
+ }
1852
+ if (includeMargin) {
1853
+ return size += parseInt(elem.css("margin-" + side), 10);
1854
+ }
1855
+ });
1856
+ return size;
1857
+ } else {
1858
+ return null;
1859
+ }
1860
+ };
1861
+ ["width", "height"].forEach(function(dimension) {
1862
+ var Dimension, _base, _base1, _name, _name1;
1863
+ Dimension = dimension.replace(/./, function(m) {
1864
+ return m[0].toUpperCase();
1865
+ });
1866
+ (_base = $.fn)[_name = "inner" + Dimension] || (_base[_name] = function(includeMargin) {
1867
+ return ioDim(this, Dimension, dimension, false, includeMargin);
1868
+ });
1869
+ return (_base1 = $.fn)[_name1 = "outer" + Dimension] || (_base1[_name1] = function(includeMargin) {
1870
+ return ioDim(this, Dimension, dimension, true, includeMargin);
1871
+ });
1872
+ });
1873
+ return (_base = $.fn).detach || (_base.detach = function(selector) {
1874
+ var cloned, set;
1875
+ set = this;
1876
+ if (selector != null) {
1877
+ set = set.filter(selector);
1878
+ }
1879
+ cloned = set.clone(true);
1880
+ set.remove();
1881
+ return cloned;
1882
+ });
1883
+ })(Zepto);
1884
+ }