zepto_rails 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,102 @@
1
+ // Zepto.js
2
+ // (c) 2010-2012 Thomas Fuchs
3
+ // Zepto.js may be freely distributed under the MIT license.
4
+
5
+ ;(function($, undefined){
6
+ var prefix = '', eventPrefix, endEventName, endAnimationName,
7
+ vendors = { Webkit: 'webkit', Moz: '', O: 'o', ms: 'MS' },
8
+ document = window.document, testEl = document.createElement('div'),
9
+ supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
10
+ transform,
11
+ transitionProperty, transitionDuration, transitionTiming,
12
+ animationName, animationDuration, animationTiming,
13
+ cssReset = {}
14
+
15
+ function dasherize(str) { return downcase(str.replace(/([a-z])([A-Z])/, '$1-$2')) }
16
+ function downcase(str) { return str.toLowerCase() }
17
+ function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : downcase(name) }
18
+
19
+ $.each(vendors, function(vendor, event){
20
+ if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {
21
+ prefix = '-' + downcase(vendor) + '-'
22
+ eventPrefix = event
23
+ return false
24
+ }
25
+ })
26
+
27
+ transform = prefix + 'transform'
28
+ cssReset[transitionProperty = prefix + 'transition-property'] =
29
+ cssReset[transitionDuration = prefix + 'transition-duration'] =
30
+ cssReset[transitionTiming = prefix + 'transition-timing-function'] =
31
+ cssReset[animationName = prefix + 'animation-name'] =
32
+ cssReset[animationDuration = prefix + 'animation-duration'] =
33
+ cssReset[animationTiming = prefix + 'animation-timing-function'] = ''
34
+
35
+ $.fx = {
36
+ off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),
37
+ speeds: { _default: 400, fast: 200, slow: 600 },
38
+ cssPrefix: prefix,
39
+ transitionEnd: normalizeEvent('TransitionEnd'),
40
+ animationEnd: normalizeEvent('AnimationEnd')
41
+ }
42
+
43
+ $.fn.animate = function(properties, duration, ease, callback){
44
+ if ($.isPlainObject(duration))
45
+ ease = duration.easing, callback = duration.complete, duration = duration.duration
46
+ if (duration) duration = (typeof duration == 'number' ? duration :
47
+ ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000
48
+ return this.anim(properties, duration, ease, callback)
49
+ }
50
+
51
+ $.fn.anim = function(properties, duration, ease, callback){
52
+ var key, cssValues = {}, cssProperties, transforms = '',
53
+ that = this, wrappedCallback, endEvent = $.fx.transitionEnd
54
+
55
+ if (duration === undefined) duration = 0.4
56
+ if ($.fx.off) duration = 0
57
+
58
+ if (typeof properties == 'string') {
59
+ // keyframe animation
60
+ cssValues[animationName] = properties
61
+ cssValues[animationDuration] = duration + 's'
62
+ cssValues[animationTiming] = (ease || 'linear')
63
+ endEvent = $.fx.animationEnd
64
+ } else {
65
+ cssProperties = []
66
+ // CSS transitions
67
+ for (key in properties)
68
+ if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '
69
+ else cssValues[key] = properties[key], cssProperties.push(dasherize(key))
70
+
71
+ if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)
72
+ if (duration > 0 && typeof properties === 'object') {
73
+ cssValues[transitionProperty] = cssProperties.join(', ')
74
+ cssValues[transitionDuration] = duration + 's'
75
+ cssValues[transitionTiming] = (ease || 'linear')
76
+ }
77
+ }
78
+
79
+ wrappedCallback = function(event){
80
+ if (typeof event !== 'undefined') {
81
+ if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"
82
+ $(event.target).unbind(endEvent, wrappedCallback)
83
+ }
84
+ $(this).css(cssReset)
85
+ callback && callback.call(this)
86
+ }
87
+ if (duration > 0) this.bind(endEvent, wrappedCallback)
88
+
89
+ // trigger page reflow so new elements can animate
90
+ this.size() && this.get(0).clientLeft
91
+
92
+ this.css(cssValues)
93
+
94
+ if (duration <= 0) setTimeout(function() {
95
+ that.each(function(){ wrappedCallback.call(this) })
96
+ }, 0)
97
+
98
+ return this
99
+ }
100
+
101
+ testEl = null
102
+ })(Zepto)
@@ -0,0 +1,71 @@
1
+ // Zepto.js
2
+ // (c) 2010-2012 Thomas Fuchs
3
+ // Zepto.js may be freely distributed under the MIT license.
4
+
5
+ ;(function($, undefined){
6
+ var document = window.document, docElem = document.documentElement,
7
+ origShow = $.fn.show, origHide = $.fn.hide, origToggle = $.fn.toggle
8
+
9
+ function anim(el, speed, opacity, scale, callback) {
10
+ if (typeof speed == 'function' && !callback) callback = speed, speed = undefined
11
+ var props = { opacity: opacity }
12
+ if (scale) {
13
+ props.scale = scale
14
+ el.css($.fx.cssPrefix + 'transform-origin', '0 0')
15
+ }
16
+ return el.animate(props, speed, null, callback)
17
+ }
18
+
19
+ function hide(el, speed, scale, callback) {
20
+ return anim(el, speed, 0, scale, function(){
21
+ origHide.call($(this))
22
+ callback && callback.call(this)
23
+ })
24
+ }
25
+
26
+ $.fn.show = function(speed, callback) {
27
+ origShow.call(this)
28
+ if (speed === undefined) speed = 0
29
+ else this.css('opacity', 0)
30
+ return anim(this, speed, 1, '1,1', callback)
31
+ }
32
+
33
+ $.fn.hide = function(speed, callback) {
34
+ if (speed === undefined) return origHide.call(this)
35
+ else return hide(this, speed, '0,0', callback)
36
+ }
37
+
38
+ $.fn.toggle = function(speed, callback) {
39
+ if (speed === undefined || typeof speed == 'boolean')
40
+ return origToggle.call(this, speed)
41
+ else return this.each(function(){
42
+ var el = $(this)
43
+ el[el.css('display') == 'none' ? 'show' : 'hide'](speed, callback)
44
+ })
45
+ }
46
+
47
+ $.fn.fadeTo = function(speed, opacity, callback) {
48
+ return anim(this, speed, opacity, null, callback)
49
+ }
50
+
51
+ $.fn.fadeIn = function(speed, callback) {
52
+ var target = this.css('opacity')
53
+ if (target > 0) this.css('opacity', 0)
54
+ else target = 1
55
+ return origShow.call(this).fadeTo(speed, target, callback)
56
+ }
57
+
58
+ $.fn.fadeOut = function(speed, callback) {
59
+ return hide(this, speed, null, callback)
60
+ }
61
+
62
+ $.fn.fadeToggle = function(speed, callback) {
63
+ return this.each(function(){
64
+ var el = $(this)
65
+ el[
66
+ (el.css('opacity') == 0 || el.css('display') == 'none') ? 'fadeIn' : 'fadeOut'
67
+ ](speed, callback)
68
+ })
69
+ }
70
+
71
+ })(Zepto)
@@ -0,0 +1,35 @@
1
+ // Zepto.js
2
+ // (c) 2010-2012 Thomas Fuchs
3
+ // Zepto.js may be freely distributed under the MIT license.
4
+
5
+ ;(function($){
6
+ if ($.os.ios) {
7
+ var gesture = {}, gestureTimeout
8
+
9
+ function parentIfText(node){
10
+ return 'tagName' in node ? node : node.parentNode
11
+ }
12
+
13
+ $(document).bind('gesturestart', function(e){
14
+ var now = Date.now(), delta = now - (gesture.last || now)
15
+ gesture.target = parentIfText(e.target)
16
+ gestureTimeout && clearTimeout(gestureTimeout)
17
+ gesture.e1 = e.scale
18
+ gesture.last = now
19
+ }).bind('gesturechange', function(e){
20
+ gesture.e2 = e.scale
21
+ }).bind('gestureend', function(e){
22
+ if (gesture.e2 > 0) {
23
+ Math.abs(gesture.e1 - gesture.e2) != 0 && $(gesture.target).trigger('pinch') &&
24
+ $(gesture.target).trigger('pinch' + (gesture.e1 - gesture.e2 > 0 ? 'In' : 'Out'))
25
+ gesture.e1 = gesture.e2 = gesture.last = 0
26
+ } else if ('last' in gesture) {
27
+ gesture = {}
28
+ }
29
+ })
30
+
31
+ ;['pinch', 'pinchIn', 'pinchOut'].forEach(function(m){
32
+ $.fn[m] = function(callback){ return this.bind(m, callback) }
33
+ })
34
+ }
35
+ })(Zepto)
@@ -0,0 +1,36 @@
1
+ // Zepto.js
2
+ // (c) 2010-2012 Thomas Fuchs
3
+ // Zepto.js may be freely distributed under the MIT license.
4
+
5
+ ;(function(undefined){
6
+ if (String.prototype.trim === undefined) // fix for iOS 3.2
7
+ String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g, '') }
8
+
9
+ // For iOS 3.x
10
+ // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce
11
+ if (Array.prototype.reduce === undefined)
12
+ Array.prototype.reduce = function(fun){
13
+ if(this === void 0 || this === null) throw new TypeError()
14
+ var t = Object(this), len = t.length >>> 0, k = 0, accumulator
15
+ if(typeof fun != 'function') throw new TypeError()
16
+ if(len == 0 && arguments.length == 1) throw new TypeError()
17
+
18
+ if(arguments.length >= 2)
19
+ accumulator = arguments[1]
20
+ else
21
+ do{
22
+ if(k in t){
23
+ accumulator = t[k++]
24
+ break
25
+ }
26
+ if(++k >= len) throw new TypeError()
27
+ } while (true)
28
+
29
+ while (k < len){
30
+ if(k in t) accumulator = fun.call(undefined, accumulator, t[k], k, t)
31
+ k++
32
+ }
33
+ return accumulator
34
+ }
35
+
36
+ })()
@@ -0,0 +1,81 @@
1
+ ;(function($){
2
+ var zepto = $.zepto, oldQsa = zepto.qsa, oldMatches = zepto.matches
3
+
4
+ function visible(elem){
5
+ elem = $(elem)
6
+ return !!(elem.width() || elem.height()) && elem.css("display") !== "none"
7
+ }
8
+
9
+ // Implements a subset from:
10
+ // http://api.jquery.com/category/selectors/jquery-selector-extensions/
11
+ //
12
+ // Each filter function receives the current index, all nodes in the
13
+ // considered set, and a value if there were parentheses. The value
14
+ // of `this` is the node currently being considered. The function returns the
15
+ // resulting node(s), null, or undefined.
16
+ //
17
+ // Complex selectors are not supported:
18
+ // li:has(label:contains("foo")) + li:has(label:contains("bar"))
19
+ // ul.inner:first > li
20
+ var filters = $.expr[':'] = {
21
+ visible: function(){ if (visible(this)) return this },
22
+ hidden: function(){ if (!visible(this)) return this },
23
+ selected: function(){ if (this.selected) return this },
24
+ checked: function(){ if (this.checked) return this },
25
+ parent: function(){ return this.parentNode },
26
+ first: function(idx){ if (idx === 0) return this },
27
+ last: function(idx, nodes){ if (idx === nodes.length - 1) return this },
28
+ eq: function(idx, _, value){ if (idx === value) return this },
29
+ contains: function(idx, _, text){ if ($(this).text().indexOf(text) > -1) return this },
30
+ has: function(idx, _, sel){ if (zepto.qsa(this, sel).length) return this }
31
+ }
32
+
33
+ var filterRe = new RegExp('(.*):(\\w+)(?:\\(([^)]+)\\))?$\\s*'),
34
+ childRe = /^\s*>/,
35
+ classTag = 'Zepto' + (+new Date())
36
+
37
+ function process(sel, fn) {
38
+ // quote the hash in `a[href^=#]` expression
39
+ sel = sel.replace(/=#\]/g, '="#"]')
40
+ var filter, arg, match = filterRe.exec(sel)
41
+ if (match && match[2] in filters) {
42
+ filter = filters[match[2]], arg = match[3]
43
+ sel = match[1]
44
+ if (arg) {
45
+ var num = Number(arg)
46
+ if (isNaN(num)) arg = arg.replace(/^["']|["']$/g, '')
47
+ else arg = num
48
+ }
49
+ }
50
+ return fn(sel, filter, arg)
51
+ }
52
+
53
+ zepto.qsa = function(node, selector) {
54
+ return process(selector, function(sel, filter, arg){
55
+ try {
56
+ var taggedParent
57
+ if (!sel && filter) sel = '*'
58
+ else if (childRe.test(sel))
59
+ // support "> *" child queries by tagging the parent node with a
60
+ // unique class and prepending that classname onto the selector
61
+ taggedParent = $(node).addClass(classTag), sel = '.'+classTag+' '+sel
62
+
63
+ var nodes = oldQsa(node, sel)
64
+ } catch(e) {
65
+ console.error('error performing selector: %o', selector)
66
+ throw e
67
+ } finally {
68
+ if (taggedParent) taggedParent.removeClass(classTag)
69
+ }
70
+ return !filter ? nodes :
71
+ zepto.uniq($.map(nodes, function(n, i){ return filter.call(n, i, nodes, arg) }))
72
+ })
73
+ }
74
+
75
+ zepto.matches = function(node, selector){
76
+ return process(selector, function(sel, filter, arg){
77
+ return (!sel || oldMatches(node, sel)) &&
78
+ (!filter || filter.call(node, null, arg) === node)
79
+ })
80
+ }
81
+ })(Zepto)
@@ -0,0 +1,22 @@
1
+ // Zepto.js
2
+ // (c) 2010-2012 Thomas Fuchs
3
+ // Zepto.js may be freely distributed under the MIT license.
4
+
5
+ ;(function($){
6
+ $.fn.end = function(){
7
+ return this.prevObject || $()
8
+ }
9
+
10
+ $.fn.andSelf = function(){
11
+ return this.add(this.prevObject || $())
12
+ }
13
+
14
+ 'filter,add,not,eq,first,last,find,closest,parents,parent,children,siblings'.split(',').forEach(function(property){
15
+ var fn = $.fn[property]
16
+ $.fn[property] = function(){
17
+ var ret = fn.apply(this, arguments)
18
+ ret.prevObject = this
19
+ return ret
20
+ }
21
+ })
22
+ })(Zepto)
@@ -0,0 +1,115 @@
1
+ // Zepto.js
2
+ // (c) 2010-2012 Thomas Fuchs
3
+ // Zepto.js may be freely distributed under the MIT license.
4
+
5
+ ;(function($){
6
+ var touch = {},
7
+ touchTimeout, tapTimeout, swipeTimeout,
8
+ longTapDelay = 750, longTapTimeout
9
+
10
+ function parentIfText(node) {
11
+ return 'tagName' in node ? node : node.parentNode
12
+ }
13
+
14
+ function swipeDirection(x1, x2, y1, y2) {
15
+ var xDelta = Math.abs(x1 - x2), yDelta = Math.abs(y1 - y2)
16
+ return xDelta >= yDelta ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down')
17
+ }
18
+
19
+ function longTap() {
20
+ longTapTimeout = null
21
+ if (touch.last) {
22
+ touch.el.trigger('longTap')
23
+ touch = {}
24
+ }
25
+ }
26
+
27
+ function cancelLongTap() {
28
+ if (longTapTimeout) clearTimeout(longTapTimeout)
29
+ longTapTimeout = null
30
+ }
31
+
32
+ function cancelAll() {
33
+ if (touchTimeout) clearTimeout(touchTimeout)
34
+ if (tapTimeout) clearTimeout(tapTimeout)
35
+ if (swipeTimeout) clearTimeout(swipeTimeout)
36
+ if (longTapTimeout) clearTimeout(longTapTimeout)
37
+ touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null
38
+ touch = {}
39
+ }
40
+
41
+ $(document).ready(function(){
42
+ var now, delta
43
+
44
+ $(document.body)
45
+ .bind('touchstart', function(e){
46
+ now = Date.now()
47
+ delta = now - (touch.last || now)
48
+ touch.el = $(parentIfText(e.touches[0].target))
49
+ touchTimeout && clearTimeout(touchTimeout)
50
+ touch.x1 = e.touches[0].pageX
51
+ touch.y1 = e.touches[0].pageY
52
+ if (delta > 0 && delta <= 250) touch.isDoubleTap = true
53
+ touch.last = now
54
+ longTapTimeout = setTimeout(longTap, longTapDelay)
55
+ })
56
+ .bind('touchmove', function(e){
57
+ cancelLongTap()
58
+ touch.x2 = e.touches[0].pageX
59
+ touch.y2 = e.touches[0].pageY
60
+ if (Math.abs(touch.x1 - touch.x2) > 10)
61
+ e.preventDefault()
62
+ })
63
+ .bind('touchend', function(e){
64
+ cancelLongTap()
65
+
66
+ // swipe
67
+ if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) ||
68
+ (touch.y2 && Math.abs(touch.y1 - touch.y2) > 30))
69
+
70
+ swipeTimeout = setTimeout(function() {
71
+ touch.el.trigger('swipe')
72
+ touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)))
73
+ touch = {}
74
+ }, 0)
75
+
76
+ // normal tap
77
+ else if ('last' in touch)
78
+
79
+ // delay by one tick so we can cancel the 'tap' event if 'scroll' fires
80
+ // ('tap' fires before 'scroll')
81
+ tapTimeout = setTimeout(function() {
82
+
83
+ // trigger universal 'tap' with the option to cancelTouch()
84
+ // (cancelTouch cancels processing of single vs double taps for faster 'tap' response)
85
+ var event = $.Event('tap')
86
+ event.cancelTouch = cancelAll
87
+ touch.el.trigger(event)
88
+
89
+ // trigger double tap immediately
90
+ if (touch.isDoubleTap) {
91
+ touch.el.trigger('doubleTap')
92
+ touch = {}
93
+ }
94
+
95
+ // trigger single tap after 250ms of inactivity
96
+ else {
97
+ touchTimeout = setTimeout(function(){
98
+ touchTimeout = null
99
+ touch.el.trigger('singleTap')
100
+ touch = {}
101
+ }, 250)
102
+ }
103
+
104
+ }, 0)
105
+
106
+ })
107
+ .bind('touchcancel', cancelAll)
108
+
109
+ $(window).bind('scroll', cancelAll)
110
+ })
111
+
112
+ ;['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown', 'doubleTap', 'tap', 'singleTap', 'longTap'].forEach(function(m){
113
+ $.fn[m] = function(callback){ return this.bind(m, callback) }
114
+ })
115
+ })(Zepto)