Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
12694 anikendra 1
(function() {
2
	function n(p, m) {
3
		var q = this, r = document, o;
4
		q.wrapper = typeof p == "object" ? p : r.getElementById(p);
5
		q.wrapper.style.overflow = "hidden";
6
		q.scroller = q.wrapper.children[0];
7
		q.scroller.style.cssText += "-webkit-transition-property:-webkit-transform;-webkit-transform-origin:0 0;-webkit-transform:"
8
				+ a + "0,0" + g;
9
		q.scroller.style.cssText += "-webkit-transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);-webkit-transition-duration:0;";
10
		q.options = {
11
			hScroll : true,
12
			vScroll : true,
13
			bounce : i,
14
			bounceLock : false,
15
			momentum : i,
16
			lockDirection : true,
17
			hScrollbar : true,
18
			vScrollbar : true,
19
			fixedScrollbar : k,
20
			fadeScrollbar : (l && i) || !h,
21
			hideScrollbar : l || !h,
22
			scrollbarClass : "",
23
			onScrollStart : null,
24
			onScrollEnd : null,
25
		};
26
		for (o in m) {
27
			q.options[o] = m[o]
28
		}
29
		q.options.hScrollbar = q.options.hScroll && q.options.hScrollbar;
30
		q.options.vScrollbar = q.options.vScroll && q.options.vScrollbar;
31
		q.refresh();
32
		q._bind(j, window);
33
		q._bind(e)
34
	}
35
	n.prototype = {
36
		x : 0,
37
		y : 0,
38
		handleEvent : function(o) {
39
			var m = this;
40
			switch (o.type) {
41
			case e:
42
				m._start(o);
43
				break;
44
			case d:
45
				m._move(o);
46
				break;
47
			case f:
48
			case b:
49
				m._end(o);
50
				break;
51
			case "webkitTransitionEnd":
52
				m._transitionEnd(o);
53
				break;
54
			case j:
55
				m._resize();
56
				break
57
			}
58
		},
59
		_scrollbar : function(m) {
60
			var p = this, q = document, o;
61
			if (!p[m + "Scrollbar"]) {
62
				if (p[m + "ScrollbarWrapper"]) {
63
					p[m + "ScrollbarIndicator"].style.webkitTransform = "";
64
					p[m + "ScrollbarWrapper"].parentNode.removeChild(p[m
65
							+ "ScrollbarWrapper"]);
66
					p[m + "ScrollbarWrapper"] = null;
67
					p[m + "ScrollbarIndicator"] = null
68
				}
69
				return
70
			}
71
			if (!p[m + "ScrollbarWrapper"]) {
72
				o = q.createElement("div");
73
				if (p.options.scrollbarClass) {
74
					o.className = p.options.scrollbarClass + m.toUpperCase()
75
				} else {
76
					o.style.cssText = "position:absolute;z-index:100;"
77
							+ (m == "h" ? "height:7px;bottom:1px;left:2px;right:7px"
78
									: "width:7px;bottom:7px;top:2px;right:1px")
79
				}
80
				o.style.cssText += "pointer-events:none;-webkit-transition-property:opacity;-webkit-transition-duration:"
81
						+ (p.options.fadeScrollbar ? "350ms" : "0")
82
						+ ";overflow:hidden;opacity:"
83
						+ (p.options.hideScrollbar ? "0" : "1");
84
				p.wrapper.appendChild(o);
85
				p[m + "ScrollbarWrapper"] = o;
86
				o = q.createElement("div");
87
				if (!p.options.scrollbarClass) {
88
					o.style.cssText = "position:absolute;z-index:100;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);-webkit-background-clip:padding-box;-webkit-box-sizing:border-box;"
89
							+ (m == "h" ? "height:100%;-webkit-border-radius:4px 3px;"
90
									: "width:100%;-webkit-border-radius:3px 4px;")
91
				}
92
				o.style.cssText += "pointer-events:none;-webkit-transition-property:-webkit-transform;-webkit-transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);-webkit-transition-duration:0;-webkit-transform:"
93
						+ a + "0,0" + g;
94
				p[m + "ScrollbarWrapper"].appendChild(o);
95
				p[m + "ScrollbarIndicator"] = o
96
			}
97
			if (m == "h") {
98
				p.hScrollbarSize = p.hScrollbarWrapper.clientWidth;
99
				p.hScrollbarIndicatorSize = c.max(c.round(p.hScrollbarSize
100
						* p.hScrollbarSize / p.scrollerW), 8);
101
				p.hScrollbarIndicator.style.width = p.hScrollbarIndicatorSize
102
						+ "px";
103
				p.hScrollbarMaxScroll = p.hScrollbarSize
104
						- p.hScrollbarIndicatorSize;
105
				p.hScrollbarProp = p.hScrollbarMaxScroll / p.maxScrollX
106
			} else {
107
				p.vScrollbarSize = p.vScrollbarWrapper.clientHeight;
108
				p.vScrollbarIndicatorSize = c.max(c.round(p.vScrollbarSize
109
						* p.vScrollbarSize / p.scrollerH), 8);
110
				p.vScrollbarIndicator.style.height = p.vScrollbarIndicatorSize
111
						+ "px";
112
				p.vScrollbarMaxScroll = p.vScrollbarSize
113
						- p.vScrollbarIndicatorSize;
114
				p.vScrollbarProp = p.vScrollbarMaxScroll / p.maxScrollY
115
			}
116
			p._indicatorPos(m, true)
117
		},
118
		_resize : function() {
119
			var m = this;
120
			setTimeout(function() {
121
				m.refresh()
122
			}, 0)
123
		},
124
		_pos : function(m, p) {
125
			var o = this;
126
			o.x = o.hScroll ? m : 0;
127
			o.y = o.vScroll ? p : 0;
128
			o.scroller.style.webkitTransform = a + o.x + "px," + o.y + "px" + g;
129
			o._indicatorPos("h");
130
			o._indicatorPos("v")
131
		},
132
		_indicatorPos : function(m, p) {
133
			var o = this, q = m == "h" ? o.x : o.y;
134
			if (!o[m + "Scrollbar"]) {
135
				return
136
			}
137
			q = o[m + "ScrollbarProp"] * q;
138
			if (q < 0) {
139
				q = o.options.fixedScrollbar ? 0 : q + q * 3;
140
				if (o[m + "ScrollbarIndicatorSize"] + q < 9) {
141
					q = -o[m + "ScrollbarIndicatorSize"] + 8
142
				}
143
			} else {
144
				if (q > o[m + "ScrollbarMaxScroll"]) {
145
					q = o.options.fixedScrollbar ? o[m + "ScrollbarMaxScroll"]
146
							: q + (q - o[m + "ScrollbarMaxScroll"]) * 3;
147
					if (o[m + "ScrollbarIndicatorSize"]
148
							+ o[m + "ScrollbarMaxScroll"] - q < 9) {
149
						q = o[m + "ScrollbarIndicatorSize"]
150
								+ o[m + "ScrollbarMaxScroll"] - 8
151
					}
152
				}
153
			}
154
			o[m + "ScrollbarWrapper"].style.webkitTransitionDelay = "0";
155
			o[m + "ScrollbarWrapper"].style.opacity = p
156
					&& o.options.hideScrollbar ? "0" : "1";
157
			o[m + "ScrollbarIndicator"].style.webkitTransform = a
158
					+ (m == "h" ? q + "px,0" : "0," + q + "px") + g
159
		},
160
		_transitionTime : function(o) {
161
			var m = this;
162
			o += "ms";
163
			m.scroller.style.webkitTransitionDuration = o;
164
			if (m.hScrollbar) {
165
				m.hScrollbarIndicator.style.webkitTransitionDuration = o
166
			}
167
			if (m.vScrollbar) {
168
				m.vScrollbarIndicator.style.webkitTransitionDuration = o
169
			}
170
		},
171
		_start : function(q) {
172
			var p = this, m = h ? q.changedTouches[0] : q, o;
173
			p.moved = false;
174
			q.preventDefault();
175
			p.moved = false;
176
			p.distX = 0;
177
			p.distY = 0;
178
			p.absDistX = 0;
179
			p.absDistY = 0;
180
			p.dirX = 0;
181
			p.dirY = 0;
182
			p.returnTime = 0;
183
			p._transitionTime(0);
184
			if (p.options.momentum) {
185
				o = new WebKitCSSMatrix(window.getComputedStyle(p.scroller,
186
						null).webkitTransform);
187
				if (o.m41 != p.x || o.m42 != p.y) {
188
					p._unbind("webkitTransitionEnd");
189
					p._pos(o.m41, o.m42)
190
				}
191
			}
192
			p.scroller.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.66,0.66,1)";
193
			if (p.hScrollbar) {
194
				p.hScrollbarIndicator.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.66,0.66,1)"
195
			}
196
			if (p.vScrollbar) {
197
				p.vScrollbarIndicator.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.66,0.66,1)"
198
			}
199
			p.startX = p.x;
200
			p.startY = p.y;
201
			p.pointX = m.pageX;
202
			p.pointY = m.pageY;
203
			p.startTime = q.timeStamp;
204
			if (p.options.onScrollStart) {
205
				p.options.onScrollStart.call(p)
206
			}
207
			p._bind(d);
208
			p._bind(f);
209
			p._bind(b)
210
		},
211
		_move : function(s) {
212
			if (h && s.touches.length > 1) {
213
				return
214
			}
215
			var q = this, o = h ? s.changedTouches[0] : s, p = o.pageX
216
					- q.pointX, m = o.pageY - q.pointY, t = q.x + p, r = q.y
217
					+ m;
218
			s.preventDefault();
219
			q.pointX = o.pageX;
220
			q.pointY = o.pageY;
221
			if (t > 0 || t < q.maxScrollX) {
222
				t = q.options.bounce ? q.x + (p / 2.4) : t >= 0
223
						|| q.maxScrollX >= 0 ? 0 : q.maxScrollX
224
			}
225
			if (r > 0 || r < q.maxScrollY) {
226
				r = q.options.bounce ? q.y + (m / 2.4) : r >= 0
227
						|| q.maxScrollY >= 0 ? 0 : q.maxScrollY
228
			}
229
			if (q.absDistX < 4 && q.absDistY < 4) {
230
				q.distX += p;
231
				q.distY += m;
232
				q.absDistX = c.abs(q.distX);
233
				q.absDistY = c.abs(q.distY);
234
				return
235
			}
236
			if (q.options.lockDirection) {
237
				if (q.absDistX > q.absDistY + 3) {
238
					r = q.y;
239
					m = 0
240
				} else {
241
					if (q.absDistY > q.absDistX + 3) {
242
						t = q.x;
243
						p = 0
244
					}
245
				}
246
			}
247
			q.moved = true;
248
			q._pos(t, r);
249
			q.dirX = p > 0 ? -1 : p < 0 ? 1 : 0;
250
			q.dirY = m > 0 ? -1 : m < 0 ? 1 : 0;
251
			if (s.timeStamp - q.startTime > 300) {
252
				q.startTime = s.timeStamp;
253
				q.startX = q.x;
254
				q.startY = q.y
255
			}
256
		},
257
		_end : function(t) {
258
			if (h && t.touches.length != 0) {
259
				return
260
			}
261
			var r = this, x = h ? t.changedTouches[0] : t, u, w, p = {
262
				dist : 0,
263
				time : 0
264
			}, m = {
265
				dist : 0,
266
				time : 0
267
			}, q = t.timeStamp - r.startTime, v = r.x, s = r.y, o;
268
			r._unbind(d);
269
			r._unbind(f);
270
			r._unbind(b);
271
			if (!r.moved) {
272
				if (h) {
273
					r.doubleTapTimer = null;
274
					u = x.target;
275
					while (u.nodeType != 1) {
276
						u = u.parentNode
277
					}
278
					w = document.createEvent("MouseEvents");
279
					w.initMouseEvent("click", true, true, t.view, 1, x.screenX,
280
							x.screenY, x.clientX, x.clientY, t.ctrlKey,
281
							t.altKey, t.shiftKey, t.metaKey, 0, null);
282
					w._fake = true;
283
					u.dispatchEvent(w)
284
				}
285
				r._resetPos();
286
				return
287
			}
288
			if (q < 300 && r.options.momentum) {
289
				p = v ? r._momentum(v - r.startX, q, -r.x, r.scrollerW
290
						- r.wrapperW + r.x, r.options.bounce ? r.wrapperW : 0)
291
						: p;
292
				m = s ? r
293
						._momentum(s - r.startY, q, -r.y,
294
								(r.maxScrollY < 0 ? r.scrollerH - r.wrapperH
295
										+ r.y : 0),
296
								r.options.bounce ? r.wrapperH : 0) : m;
297
				v = r.x + p.dist;
298
				s = r.y + m.dist;
299
				if ((r.x > 0 && v > 0)
300
						|| (r.x < r.maxScrollX && v < r.maxScrollX)) {
301
					p = {
302
						dist : 0,
303
						time : 0
304
					}
305
				}
306
				if ((r.y > 0 && s > 0)
307
						|| (r.y < r.maxScrollY && s < r.maxScrollY)) {
308
					m = {
309
						dist : 0,
310
						time : 0
311
					}
312
				}
313
			}
314
			if (p.dist || m.dist) {
315
				o = c.max(c.max(p.time, m.time), 10);
316
				r.scrollTo(v, s, o);
317
				return
318
			}
319
			r._resetPos(200)
320
		},
321
		_resetPos : function(p) {
322
			var m = this, q = m.x, o = m.y;
323
			if (m.x >= 0) {
324
				q = 0
325
			} else {
326
				if (m.x < m.maxScrollX) {
327
					q = m.maxScrollX
328
				}
329
			}
330
			if (m.y >= 0 || m.maxScrollY > 0) {
331
				o = 0
332
			} else {
333
				if (m.y < m.maxScrollY) {
334
					o = m.maxScrollY
335
				}
336
			}
337
			if (q == m.x && o == m.y) {
338
				if (m.moved) {
339
					if (m.options.onScrollEnd) {
340
						m.options.onScrollEnd.call(m)
341
					}
342
					m.moved = false
343
				}
344
				if (m.hScrollbar && m.options.hideScrollbar) {
345
					m.hScrollbarWrapper.style.webkitTransitionDelay = "300ms";
346
					m.hScrollbarWrapper.style.opacity = "0"
347
				}
348
				if (m.vScrollbar && m.options.hideScrollbar) {
349
					m.vScrollbarWrapper.style.webkitTransitionDelay = "300ms";
350
					m.vScrollbarWrapper.style.opacity = "0"
351
				}
352
				return
353
			}
354
			if (p) {
355
				m.scroller.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.0,0.33,1)";
356
				if (m.hScrollbar) {
357
					m.hScrollbarIndicator.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.0,0.33,1)"
358
				}
359
				if (m.vScrollbar) {
360
					m.vScrollbarIndicator.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.0,0.33,1)"
361
				}
362
			}
363
			m.scrollTo(q, o, p || 0)
364
		},
365
		_transitionEnd : function(o) {
366
			var m = this;
367
			if (o) {
368
				o.stopPropagation()
369
			}
370
			m._unbind("webkitTransitionEnd");
371
			m._resetPos(m.returnTime);
372
			m.returnTime = 0
373
		},
374
		_momentum : function(v, p, t, m, x) {
375
			var s = this, u = 0.0006, q = c.abs(v) / p, o = (q * q) / (2 * u), w = 0, r = 0;
376
			if (v > 0 && o > t) {
377
				r = x / (6 / (o / q * u));
378
				t = t + r;
379
				s.returnTime = 800 / x * r + 100;
380
				q = q * t / o;
381
				o = t
382
			} else {
383
				if (v < 0 && o > m) {
384
					r = x / (6 / (o / q * u));
385
					m = m + r;
386
					s.returnTime = 800 / x * r + 100;
387
					q = q * m / o;
388
					o = m
389
				}
390
			}
391
			o = o * (v < 0 ? -1 : 1);
392
			w = q / u;
393
			return {
394
				dist : o,
395
				time : c.round(w)
396
			}
397
		},
398
		_offset : function(o, m) {
399
			var q = -o.offsetLeft, p = -o.offsetTop;
400
			if (!m) {
401
				return {
402
					x : q,
403
					y : p
404
				}
405
			}
406
			while (o = o.offsetParent) {
407
				q -= o.offsetLeft;
408
				p -= o.offsetTop
409
			}
410
			return {
411
				x : q,
412
				y : p
413
			}
414
		},
415
		_bind : function(o, m) {
416
			(m || this.scroller).addEventListener(o, this, false)
417
		},
418
		_unbind : function(o, m) {
419
			(m || this.scroller).removeEventListener(o, this, false)
420
		},
421
		destroy : function() {
422
			var m = this;
423
			m.hScrollbar = false;
424
			m.vScrollbar = false;
425
			m._scrollbar("h");
426
			m._scrollbar("v");
427
			m.scroller.style.webkitTransform = "";
428
			m._unbind("webkitTransitionEnd");
429
			m._unbind(j);
430
			m._unbind(e);
431
			m._unbind(d);
432
			m._unbind(f);
433
			m._unbind(b)
434
		},
435
		refresh : function() {
436
			var m = this;
437
			m.wrapperW = m.wrapper.clientWidth;
438
			m.wrapperH = m.wrapper.clientHeight;
439
			m.scrollerW = m.scroller.offsetWidth;
440
			m.scrollerH = m.scroller.offsetHeight;
441
			m.maxScrollX = m.wrapperW - m.scrollerW;
442
			m.maxScrollY = m.wrapperH - m.scrollerH;
443
			m.dirX = 0;
444
			m.dirY = 0;
445
			m._transitionTime(0);
446
			m.hScroll = m.options.hScroll && m.maxScrollX < 0;
447
			m.vScroll = m.options.vScroll
448
					&& (!m.options.bounceLock && !m.hScroll || m.scrollerH > m.wrapperH);
449
			m.hScrollbar = m.hScroll && m.options.hScrollbar;
450
			m.vScrollbar = m.vScroll && m.options.vScrollbar
451
					&& m.scrollerH > m.wrapperH;
452
			m._scrollbar("h");
453
			m._scrollbar("v");
454
			m._resetPos()
455
		},
456
		scrollTo : function(m, r, q, p) {
457
			var o = this;
458
			if (p) {
459
				m = o.x - m;
460
				r = o.y - r
461
			}
462
			q = !q
463
					|| (c.round(o.x) == c.round(m) && c.round(o.y) == c
464
							.round(r)) ? 0 : q;
465
			o.moved = true;
466
			if (q) {
467
				o._bind("webkitTransitionEnd")
468
			}
469
			o._transitionTime(q);
470
			o._pos(m, r);
471
			if (!q) {
472
				setTimeout(function() {
473
					o._transitionEnd()
474
				}, 0)
475
			}
476
		},
477
		scrollToElement : function(m, p) {
478
			var o = this, q;
479
			m = m.nodeType ? m : o.scroller.querySelector(m);
480
			if (!m) {
481
				return
482
			}
483
			q = o._offset(m);
484
			q.x = q.x > 0 ? 0 : q.x < o.maxScrollX ? o.maxScrollX : q.x;
485
			q.y = q.y > 0 ? 0 : q.y < o.maxScrollY ? o.maxScrollY : q.y;
486
			p = p === undefined ? c.max(c.abs(q.x) * 2, c.abs(q.y) * 2) : p;
487
			o.scrollTo(q.x, q.y, p)
488
		}
489
	};
490
	var i = "WebKitCSSMatrix" in window && "m11" in new WebKitCSSMatrix(), h = "ontouchstart" in window, l = (/iphone|ipad/gi)
491
			.test(navigator.appVersion), k = (/android/gi)
492
			.test(navigator.appVersion), j = "onorientationchange" in window ? "orientationchange"
493
			: "resize", e = h ? "touchstart" : "mousedown", d = h ? "touchmove"
494
			: "mousemove", f = h ? "touchend" : "mouseup", b = h ? "touchcancel"
495
			: "mouseup", a = "translate" + (i ? "3d(" : "("), g = i ? ",0)"
496
			: ")", c = Math;
497
	if (typeof exports !== "undefined") {
498
		exports.iScroll = n
499
	} else {
500
		window.iScroll = n
501
	}
502
})();