Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

(function() {
        function n(p, m) {
                var q = this, r = document, o;
                q.wrapper = typeof p == "object" ? p : r.getElementById(p);
                q.wrapper.style.overflow = "hidden";
                q.scroller = q.wrapper.children[0];
                q.scroller.style.cssText += "-webkit-transition-property:-webkit-transform;-webkit-transform-origin:0 0;-webkit-transform:"
                                + a + "0,0" + g;
                q.scroller.style.cssText += "-webkit-transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);-webkit-transition-duration:0;";
                q.options = {
                        hScroll : true,
                        vScroll : true,
                        bounce : i,
                        bounceLock : false,
                        momentum : i,
                        lockDirection : true,
                        hScrollbar : true,
                        vScrollbar : true,
                        fixedScrollbar : k,
                        fadeScrollbar : (l && i) || !h,
                        hideScrollbar : l || !h,
                        scrollbarClass : "",
                        onScrollStart : null,
                        onScrollEnd : null,
                };
                for (o in m) {
                        q.options[o] = m[o]
                }
                q.options.hScrollbar = q.options.hScroll && q.options.hScrollbar;
                q.options.vScrollbar = q.options.vScroll && q.options.vScrollbar;
                q.refresh();
                q._bind(j, window);
                q._bind(e)
        }
        n.prototype = {
                x : 0,
                y : 0,
                handleEvent : function(o) {
                        var m = this;
                        switch (o.type) {
                        case e:
                                m._start(o);
                                break;
                        case d:
                                m._move(o);
                                break;
                        case f:
                        case b:
                                m._end(o);
                                break;
                        case "webkitTransitionEnd":
                                m._transitionEnd(o);
                                break;
                        case j:
                                m._resize();
                                break
                        }
                },
                _scrollbar : function(m) {
                        var p = this, q = document, o;
                        if (!p[m + "Scrollbar"]) {
                                if (p[m + "ScrollbarWrapper"]) {
                                        p[m + "ScrollbarIndicator"].style.webkitTransform = "";
                                        p[m + "ScrollbarWrapper"].parentNode.removeChild(p[m
                                                        + "ScrollbarWrapper"]);
                                        p[m + "ScrollbarWrapper"] = null;
                                        p[m + "ScrollbarIndicator"] = null
                                }
                                return
                        }
                        if (!p[m + "ScrollbarWrapper"]) {
                                o = q.createElement("div");
                                if (p.options.scrollbarClass) {
                                        o.className = p.options.scrollbarClass + m.toUpperCase()
                                } else {
                                        o.style.cssText = "position:absolute;z-index:100;"
                                                        + (m == "h" ? "height:7px;bottom:1px;left:2px;right:7px"
                                                                        : "width:7px;bottom:7px;top:2px;right:1px")
                                }
                                o.style.cssText += "pointer-events:none;-webkit-transition-property:opacity;-webkit-transition-duration:"
                                                + (p.options.fadeScrollbar ? "350ms" : "0")
                                                + ";overflow:hidden;opacity:"
                                                + (p.options.hideScrollbar ? "0" : "1");
                                p.wrapper.appendChild(o);
                                p[m + "ScrollbarWrapper"] = o;
                                o = q.createElement("div");
                                if (!p.options.scrollbarClass) {
                                        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;"
                                                        + (m == "h" ? "height:100%;-webkit-border-radius:4px 3px;"
                                                                        : "width:100%;-webkit-border-radius:3px 4px;")
                                }
                                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:"
                                                + a + "0,0" + g;
                                p[m + "ScrollbarWrapper"].appendChild(o);
                                p[m + "ScrollbarIndicator"] = o
                        }
                        if (m == "h") {
                                p.hScrollbarSize = p.hScrollbarWrapper.clientWidth;
                                p.hScrollbarIndicatorSize = c.max(c.round(p.hScrollbarSize
                                                * p.hScrollbarSize / p.scrollerW), 8);
                                p.hScrollbarIndicator.style.width = p.hScrollbarIndicatorSize
                                                + "px";
                                p.hScrollbarMaxScroll = p.hScrollbarSize
                                                - p.hScrollbarIndicatorSize;
                                p.hScrollbarProp = p.hScrollbarMaxScroll / p.maxScrollX
                        } else {
                                p.vScrollbarSize = p.vScrollbarWrapper.clientHeight;
                                p.vScrollbarIndicatorSize = c.max(c.round(p.vScrollbarSize
                                                * p.vScrollbarSize / p.scrollerH), 8);
                                p.vScrollbarIndicator.style.height = p.vScrollbarIndicatorSize
                                                + "px";
                                p.vScrollbarMaxScroll = p.vScrollbarSize
                                                - p.vScrollbarIndicatorSize;
                                p.vScrollbarProp = p.vScrollbarMaxScroll / p.maxScrollY
                        }
                        p._indicatorPos(m, true)
                },
                _resize : function() {
                        var m = this;
                        setTimeout(function() {
                                m.refresh()
                        }, 0)
                },
                _pos : function(m, p) {
                        var o = this;
                        o.x = o.hScroll ? m : 0;
                        o.y = o.vScroll ? p : 0;
                        o.scroller.style.webkitTransform = a + o.x + "px," + o.y + "px" + g;
                        o._indicatorPos("h");
                        o._indicatorPos("v")
                },
                _indicatorPos : function(m, p) {
                        var o = this, q = m == "h" ? o.x : o.y;
                        if (!o[m + "Scrollbar"]) {
                                return
                        }
                        q = o[m + "ScrollbarProp"] * q;
                        if (q < 0) {
                                q = o.options.fixedScrollbar ? 0 : q + q * 3;
                                if (o[m + "ScrollbarIndicatorSize"] + q < 9) {
                                        q = -o[m + "ScrollbarIndicatorSize"] + 8
                                }
                        } else {
                                if (q > o[m + "ScrollbarMaxScroll"]) {
                                        q = o.options.fixedScrollbar ? o[m + "ScrollbarMaxScroll"]
                                                        : q + (q - o[m + "ScrollbarMaxScroll"]) * 3;
                                        if (o[m + "ScrollbarIndicatorSize"]
                                                        + o[m + "ScrollbarMaxScroll"] - q < 9) {
                                                q = o[m + "ScrollbarIndicatorSize"]
                                                                + o[m + "ScrollbarMaxScroll"] - 8
                                        }
                                }
                        }
                        o[m + "ScrollbarWrapper"].style.webkitTransitionDelay = "0";
                        o[m + "ScrollbarWrapper"].style.opacity = p
                                        && o.options.hideScrollbar ? "0" : "1";
                        o[m + "ScrollbarIndicator"].style.webkitTransform = a
                                        + (m == "h" ? q + "px,0" : "0," + q + "px") + g
                },
                _transitionTime : function(o) {
                        var m = this;
                        o += "ms";
                        m.scroller.style.webkitTransitionDuration = o;
                        if (m.hScrollbar) {
                                m.hScrollbarIndicator.style.webkitTransitionDuration = o
                        }
                        if (m.vScrollbar) {
                                m.vScrollbarIndicator.style.webkitTransitionDuration = o
                        }
                },
                _start : function(q) {
                        var p = this, m = h ? q.changedTouches[0] : q, o;
                        p.moved = false;
                        q.preventDefault();
                        p.moved = false;
                        p.distX = 0;
                        p.distY = 0;
                        p.absDistX = 0;
                        p.absDistY = 0;
                        p.dirX = 0;
                        p.dirY = 0;
                        p.returnTime = 0;
                        p._transitionTime(0);
                        if (p.options.momentum) {
                                o = new WebKitCSSMatrix(window.getComputedStyle(p.scroller,
                                                null).webkitTransform);
                                if (o.m41 != p.x || o.m42 != p.y) {
                                        p._unbind("webkitTransitionEnd");
                                        p._pos(o.m41, o.m42)
                                }
                        }
                        p.scroller.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.66,0.66,1)";
                        if (p.hScrollbar) {
                                p.hScrollbarIndicator.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.66,0.66,1)"
                        }
                        if (p.vScrollbar) {
                                p.vScrollbarIndicator.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.66,0.66,1)"
                        }
                        p.startX = p.x;
                        p.startY = p.y;
                        p.pointX = m.pageX;
                        p.pointY = m.pageY;
                        p.startTime = q.timeStamp;
                        if (p.options.onScrollStart) {
                                p.options.onScrollStart.call(p)
                        }
                        p._bind(d);
                        p._bind(f);
                        p._bind(b)
                },
                _move : function(s) {
                        if (h && s.touches.length > 1) {
                                return
                        }
                        var q = this, o = h ? s.changedTouches[0] : s, p = o.pageX
                                        - q.pointX, m = o.pageY - q.pointY, t = q.x + p, r = q.y
                                        + m;
                        s.preventDefault();
                        q.pointX = o.pageX;
                        q.pointY = o.pageY;
                        if (t > 0 || t < q.maxScrollX) {
                                t = q.options.bounce ? q.x + (p / 2.4) : t >= 0
                                                || q.maxScrollX >= 0 ? 0 : q.maxScrollX
                        }
                        if (r > 0 || r < q.maxScrollY) {
                                r = q.options.bounce ? q.y + (m / 2.4) : r >= 0
                                                || q.maxScrollY >= 0 ? 0 : q.maxScrollY
                        }
                        if (q.absDistX < 4 && q.absDistY < 4) {
                                q.distX += p;
                                q.distY += m;
                                q.absDistX = c.abs(q.distX);
                                q.absDistY = c.abs(q.distY);
                                return
                        }
                        if (q.options.lockDirection) {
                                if (q.absDistX > q.absDistY + 3) {
                                        r = q.y;
                                        m = 0
                                } else {
                                        if (q.absDistY > q.absDistX + 3) {
                                                t = q.x;
                                                p = 0
                                        }
                                }
                        }
                        q.moved = true;
                        q._pos(t, r);
                        q.dirX = p > 0 ? -1 : p < 0 ? 1 : 0;
                        q.dirY = m > 0 ? -1 : m < 0 ? 1 : 0;
                        if (s.timeStamp - q.startTime > 300) {
                                q.startTime = s.timeStamp;
                                q.startX = q.x;
                                q.startY = q.y
                        }
                },
                _end : function(t) {
                        if (h && t.touches.length != 0) {
                                return
                        }
                        var r = this, x = h ? t.changedTouches[0] : t, u, w, p = {
                                dist : 0,
                                time : 0
                        }, m = {
                                dist : 0,
                                time : 0
                        }, q = t.timeStamp - r.startTime, v = r.x, s = r.y, o;
                        r._unbind(d);
                        r._unbind(f);
                        r._unbind(b);
                        if (!r.moved) {
                                if (h) {
                                        r.doubleTapTimer = null;
                                        u = x.target;
                                        while (u.nodeType != 1) {
                                                u = u.parentNode
                                        }
                                        w = document.createEvent("MouseEvents");
                                        w.initMouseEvent("click", true, true, t.view, 1, x.screenX,
                                                        x.screenY, x.clientX, x.clientY, t.ctrlKey,
                                                        t.altKey, t.shiftKey, t.metaKey, 0, null);
                                        w._fake = true;
                                        u.dispatchEvent(w)
                                }
                                r._resetPos();
                                return
                        }
                        if (q < 300 && r.options.momentum) {
                                p = v ? r._momentum(v - r.startX, q, -r.x, r.scrollerW
                                                - r.wrapperW + r.x, r.options.bounce ? r.wrapperW : 0)
                                                : p;
                                m = s ? r
                                                ._momentum(s - r.startY, q, -r.y,
                                                                (r.maxScrollY < 0 ? r.scrollerH - r.wrapperH
                                                                                + r.y : 0),
                                                                r.options.bounce ? r.wrapperH : 0) : m;
                                v = r.x + p.dist;
                                s = r.y + m.dist;
                                if ((r.x > 0 && v > 0)
                                                || (r.x < r.maxScrollX && v < r.maxScrollX)) {
                                        p = {
                                                dist : 0,
                                                time : 0
                                        }
                                }
                                if ((r.y > 0 && s > 0)
                                                || (r.y < r.maxScrollY && s < r.maxScrollY)) {
                                        m = {
                                                dist : 0,
                                                time : 0
                                        }
                                }
                        }
                        if (p.dist || m.dist) {
                                o = c.max(c.max(p.time, m.time), 10);
                                r.scrollTo(v, s, o);
                                return
                        }
                        r._resetPos(200)
                },
                _resetPos : function(p) {
                        var m = this, q = m.x, o = m.y;
                        if (m.x >= 0) {
                                q = 0
                        } else {
                                if (m.x < m.maxScrollX) {
                                        q = m.maxScrollX
                                }
                        }
                        if (m.y >= 0 || m.maxScrollY > 0) {
                                o = 0
                        } else {
                                if (m.y < m.maxScrollY) {
                                        o = m.maxScrollY
                                }
                        }
                        if (q == m.x && o == m.y) {
                                if (m.moved) {
                                        if (m.options.onScrollEnd) {
                                                m.options.onScrollEnd.call(m)
                                        }
                                        m.moved = false
                                }
                                if (m.hScrollbar && m.options.hideScrollbar) {
                                        m.hScrollbarWrapper.style.webkitTransitionDelay = "300ms";
                                        m.hScrollbarWrapper.style.opacity = "0"
                                }
                                if (m.vScrollbar && m.options.hideScrollbar) {
                                        m.vScrollbarWrapper.style.webkitTransitionDelay = "300ms";
                                        m.vScrollbarWrapper.style.opacity = "0"
                                }
                                return
                        }
                        if (p) {
                                m.scroller.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.0,0.33,1)";
                                if (m.hScrollbar) {
                                        m.hScrollbarIndicator.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.0,0.33,1)"
                                }
                                if (m.vScrollbar) {
                                        m.vScrollbarIndicator.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.0,0.33,1)"
                                }
                        }
                        m.scrollTo(q, o, p || 0)
                },
                _transitionEnd : function(o) {
                        var m = this;
                        if (o) {
                                o.stopPropagation()
                        }
                        m._unbind("webkitTransitionEnd");
                        m._resetPos(m.returnTime);
                        m.returnTime = 0
                },
                _momentum : function(v, p, t, m, x) {
                        var s = this, u = 0.0006, q = c.abs(v) / p, o = (q * q) / (2 * u), w = 0, r = 0;
                        if (v > 0 && o > t) {
                                r = x / (6 / (o / q * u));
                                t = t + r;
                                s.returnTime = 800 / x * r + 100;
                                q = q * t / o;
                                o = t
                        } else {
                                if (v < 0 && o > m) {
                                        r = x / (6 / (o / q * u));
                                        m = m + r;
                                        s.returnTime = 800 / x * r + 100;
                                        q = q * m / o;
                                        o = m
                                }
                        }
                        o = o * (v < 0 ? -1 : 1);
                        w = q / u;
                        return {
                                dist : o,
                                time : c.round(w)
                        }
                },
                _offset : function(o, m) {
                        var q = -o.offsetLeft, p = -o.offsetTop;
                        if (!m) {
                                return {
                                        x : q,
                                        y : p
                                }
                        }
                        while (o = o.offsetParent) {
                                q -= o.offsetLeft;
                                p -= o.offsetTop
                        }
                        return {
                                x : q,
                                y : p
                        }
                },
                _bind : function(o, m) {
                        (m || this.scroller).addEventListener(o, this, false)
                },
                _unbind : function(o, m) {
                        (m || this.scroller).removeEventListener(o, this, false)
                },
                destroy : function() {
                        var m = this;
                        m.hScrollbar = false;
                        m.vScrollbar = false;
                        m._scrollbar("h");
                        m._scrollbar("v");
                        m.scroller.style.webkitTransform = "";
                        m._unbind("webkitTransitionEnd");
                        m._unbind(j);
                        m._unbind(e);
                        m._unbind(d);
                        m._unbind(f);
                        m._unbind(b)
                },
                refresh : function() {
                        var m = this;
                        m.wrapperW = m.wrapper.clientWidth;
                        m.wrapperH = m.wrapper.clientHeight;
                        m.scrollerW = m.scroller.offsetWidth;
                        m.scrollerH = m.scroller.offsetHeight;
                        m.maxScrollX = m.wrapperW - m.scrollerW;
                        m.maxScrollY = m.wrapperH - m.scrollerH;
                        m.dirX = 0;
                        m.dirY = 0;
                        m._transitionTime(0);
                        m.hScroll = m.options.hScroll && m.maxScrollX < 0;
                        m.vScroll = m.options.vScroll
                                        && (!m.options.bounceLock && !m.hScroll || m.scrollerH > m.wrapperH);
                        m.hScrollbar = m.hScroll && m.options.hScrollbar;
                        m.vScrollbar = m.vScroll && m.options.vScrollbar
                                        && m.scrollerH > m.wrapperH;
                        m._scrollbar("h");
                        m._scrollbar("v");
                        m._resetPos()
                },
                scrollTo : function(m, r, q, p) {
                        var o = this;
                        if (p) {
                                m = o.x - m;
                                r = o.y - r
                        }
                        q = !q
                                        || (c.round(o.x) == c.round(m) && c.round(o.y) == c
                                                        .round(r)) ? 0 : q;
                        o.moved = true;
                        if (q) {
                                o._bind("webkitTransitionEnd")
                        }
                        o._transitionTime(q);
                        o._pos(m, r);
                        if (!q) {
                                setTimeout(function() {
                                        o._transitionEnd()
                                }, 0)
                        }
                },
                scrollToElement : function(m, p) {
                        var o = this, q;
                        m = m.nodeType ? m : o.scroller.querySelector(m);
                        if (!m) {
                                return
                        }
                        q = o._offset(m);
                        q.x = q.x > 0 ? 0 : q.x < o.maxScrollX ? o.maxScrollX : q.x;
                        q.y = q.y > 0 ? 0 : q.y < o.maxScrollY ? o.maxScrollY : q.y;
                        p = p === undefined ? c.max(c.abs(q.x) * 2, c.abs(q.y) * 2) : p;
                        o.scrollTo(q.x, q.y, p)
                }
        };
        var i = "WebKitCSSMatrix" in window && "m11" in new WebKitCSSMatrix(), h = "ontouchstart" in window, l = (/iphone|ipad/gi)
                        .test(navigator.appVersion), k = (/android/gi)
                        .test(navigator.appVersion), j = "onorientationchange" in window ? "orientationchange"
                        : "resize", e = h ? "touchstart" : "mousedown", d = h ? "touchmove"
                        : "mousemove", f = h ? "touchend" : "mouseup", b = h ? "touchcancel"
                        : "mouseup", a = "translate" + (i ? "3d(" : "("), g = i ? ",0)"
                        : ")", c = Math;
        if (typeof exports !== "undefined") {
                exports.iScroll = n
        } else {
                window.iScroll = n
        }
})();