{"version":3,"file":"kendo.mobile.scroller.js","names":["__meta__","id","name","category","description","depends","$","undefined$1","kendo","window","mobile","fx","effects","ui","extend","Widget","Class","Movable","Pane","PaneDimensions","Transition","Animation","abs","Math","RELEASECLASS","REFRESHCLASS","CHANGE","SCROLL","ZoomSnapBack","init","options","that","this","fn","call","userEvents","bind","start","tapCapture","cancel","enabled","movable","scale","dimensions","minScale","done","tick","scaleWith","rescale","onEnd","scaleTo","DragInertia","transition","axis","_end","onCancel","freeze","location","_moveTo","paneAxis","outOfBounds","_snapBack","velocity","e","dimension","_started","min","touch","velocityMultiplier","max","captureNext","friction","delta","elastic","moveAxis","cancelCapture","end","snapBack","moveTo","duration","ease","easeOutExpo","AnimatedScroller","origin","destination","offset","_updateCoordinates","y","x","callback","setCoordinates","from","to","setCallback","isFunction","ScrollBar","horizontal","element","controlsId","attr","elementSize","scrollMovable","alwaysVisible","size","refresh","container","append","show","paneSize","sizeRatio","total","position","round","css","_ariaValue","opacity","visibility","hide","current","Scroller","_native","useNative","support","hasNativeScrolling","addClass","prepend","scrollElement","fixedContainer","children","first","wrapInner","inner","eq","TapCapture","forcedEnabled","zoom","avoidScrolling","UserEvents","touchAction","fastTap","allowSelection","preventDragEvent","captureUpIfMoved","multiTouch","supportDoubleTap","velocityX","velocityY","horizontalSwipe","verticalSwipe","contains","event","target","capture","pane","zoomSnapBack","animatedScroller","coordinates","scrollTo","scrollTop","scrollLeft","trigger","mousewheelScrolling","on","_wheelScroll","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","ctrlKey","press","clearTimeout","_wheelTimeout","setTimeout","wheelDeltaY","move","preventDefault","makeVirtual","virtualSize","height","scrollHeight","scrollWidth","pullOffset","visibleScrollHints","messages","pullTemplate","releaseTemplate","refreshTemplate","events","_resize","contentResized","setOptions","reset","_scale","zoomOut","fitScale","centerCoordinates","enable","disable","animatedScrollTo","pullHandled","refreshHint","removeClass","hintContainer","html","yinertia","xinertia","destroy","forceEnabled","template","_paneChange","_dragEnd","scrollBar","elementId","guid","plugin","jQuery","kendo$1"],"sources":["kendo.mobile.scroller.js"],"mappings":"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","sourcesContent":["import './kendo.fx.js';\nimport './kendo.draganddrop.js';\n\nvar __meta__ = {\n    id: \"mobile.scroller\",\n    name: \"Scroller\",\n    category: \"mobile\",\n    description: \"The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.\",\n    depends: [ \"fx\", \"draganddrop\" ]\n};\n\n(function($, undefined$1) {\n    var kendo = window.kendo,\n        mobile = kendo.mobile,\n        fx = kendo.effects,\n        ui = mobile.ui,\n        extend = $.extend,\n        Widget = ui.Widget,\n        Class = kendo.Class,\n        Movable = kendo.ui.Movable,\n        Pane = kendo.ui.Pane,\n        PaneDimensions = kendo.ui.PaneDimensions,\n        Transition = fx.Transition,\n        Animation = fx.Animation,\n        abs = Math.abs,\n        SNAPBACK_DURATION = 500,\n        SCROLLBAR_OPACITY = 0.7,\n        FRICTION = 0.96,\n        VELOCITY_MULTIPLIER = 10,\n        MAX_VELOCITY = 55,\n        OUT_OF_BOUNDS_FRICTION = 0.5,\n        ANIMATED_SCROLLER_PRECISION = 5,\n        RELEASECLASS = \"km-scroller-release\",\n        REFRESHCLASS = \"km-scroller-refresh\",\n        PULL = \"pull\",\n        CHANGE = \"change\",\n        RESIZE = \"resize\",\n        SCROLL = \"scroll\",\n        MOUSE_WHEEL_ID = 2;\n\n    var ZoomSnapBack = Animation.extend({\n        init: function(options) {\n            var that = this;\n            Animation.fn.init.call(that);\n            extend(that, options);\n\n            that.userEvents.bind(\"gestureend\", that.start.bind(that));\n            that.tapCapture.bind(\"press\", that.cancel.bind(that));\n        },\n\n        enabled: function() {\n          return this.movable.scale < this.dimensions.minScale;\n        },\n\n        done: function() {\n            return this.dimensions.minScale - this.movable.scale < 0.01;\n        },\n\n        tick: function() {\n            var movable = this.movable;\n            movable.scaleWith(1.1);\n            this.dimensions.rescale(movable.scale);\n        },\n\n        onEnd: function() {\n            var movable = this.movable;\n            movable.scaleTo(this.dimensions.minScale);\n            this.dimensions.rescale(movable.scale);\n        }\n    });\n\n    var DragInertia = Animation.extend({\n        init: function(options) {\n            var that = this;\n\n            Animation.fn.init.call(that);\n\n            extend(that, options, {\n                transition: new Transition({\n                    axis: options.axis,\n                    movable: options.movable,\n                    onEnd: function() { that._end(); }\n                })\n            });\n\n            that.tapCapture.bind(\"press\", function() { that.cancel(); });\n            that.userEvents.bind(\"end\", that.start.bind(that));\n            that.userEvents.bind(\"gestureend\", that.start.bind(that));\n            that.userEvents.bind(\"tap\", that.onEnd.bind(that));\n        },\n\n        onCancel: function() {\n            this.transition.cancel();\n        },\n\n        freeze: function(location) {\n            var that = this;\n            that.cancel();\n            that._moveTo(location);\n        },\n\n        onEnd: function() {\n            var that = this;\n            if (that.paneAxis.outOfBounds()) {\n                that._snapBack();\n            } else {\n                that._end();\n            }\n        },\n\n        done: function() {\n            return abs(this.velocity) < 1;\n        },\n\n        start: function(e) {\n            var that = this,\n                velocity;\n\n            if (!that.dimension.enabled) { return; }\n\n            if (that.paneAxis.outOfBounds()) {\n                if (that.transition._started) {\n                    that.transition.cancel();\n                    that.velocity = Math.min(e.touch[that.axis].velocity * that.velocityMultiplier, MAX_VELOCITY);\n\n                    Animation.fn.start.call(that);\n                } else {\n                    that._snapBack();\n                }\n            } else {\n                velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n                that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n\n                that.tapCapture.captureNext();\n                Animation.fn.start.call(that);\n            }\n        },\n\n        tick: function() {\n            var that = this,\n                dimension = that.dimension,\n                friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction,\n                delta = (that.velocity *= friction),\n                location = that.movable[that.axis] + delta;\n\n                if (!that.elastic && dimension.outOfBounds(location)) {\n                    location = Math.max(Math.min(location, dimension.max), dimension.min);\n                    that.velocity = 0;\n                }\n\n            that.movable.moveAxis(that.axis, location);\n        },\n\n        _end: function() {\n            this.tapCapture.cancelCapture();\n            this.end();\n        },\n\n        _snapBack: function() {\n            var that = this,\n                dimension = that.dimension,\n                snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n            that._moveTo(snapBack);\n        },\n\n        _moveTo: function(location) {\n            this.transition.moveTo({ location: location, duration: SNAPBACK_DURATION, ease: Transition.easeOutExpo });\n        }\n    });\n\n    var AnimatedScroller = Animation.extend({\n        init: function(options) {\n            var that = this;\n\n            kendo.effects.Animation.fn.init.call(this);\n\n            extend(that, options, {\n                origin: {},\n                destination: {},\n                offset: {}\n            });\n        },\n\n        tick: function() {\n            this._updateCoordinates();\n            this.moveTo(this.origin);\n        },\n\n        done: function() {\n            return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n        },\n\n        onEnd: function() {\n            this.moveTo(this.destination);\n            if (this.callback) {\n                this.callback.call();\n            }\n        },\n\n        setCoordinates: function(from, to) {\n            this.offset = {};\n            this.origin = from;\n            this.destination = to;\n        },\n\n        setCallback: function(callback) {\n            if (callback && kendo.isFunction(callback)) {\n                this.callback = callback;\n            } else {\n                callback = undefined$1;\n            }\n        },\n\n        _updateCoordinates: function() {\n            this.offset = {\n                x: (this.destination.x - this.origin.x) / 4,\n                y: (this.destination.y - this.origin.y) / 4\n            };\n\n            this.origin = {\n                y: this.origin.y + this.offset.y,\n                x: this.origin.x + this.offset.x\n            };\n        }\n    });\n\n    var ScrollBar = Class.extend({\n        init: function(options) {\n            var that = this,\n                horizontal = options.axis === \"x\",\n                element = $('<div role=\"scrollbar\" aria-controls=\"' + options.controlsId + '\" class=\"km-touch-scrollbar km-' + (horizontal ? \"horizontal\" : \"vertical\") + '-scrollbar\" />');\n\n            if (horizontal) {\n                element.attr(\"aria-orientation\", \"horizontal\");\n            }\n\n            extend(that, options, {\n                element: element,\n                elementSize: 0,\n                movable: new Movable(element),\n                scrollMovable: options.movable,\n                alwaysVisible: options.alwaysVisible,\n                size: horizontal ? \"width\" : \"height\"\n            });\n\n            that.scrollMovable.bind(CHANGE, that.refresh.bind(that));\n            that.container.append(element);\n            if (options.alwaysVisible) {\n                that.show();\n            }\n        },\n\n        refresh: function() {\n            var that = this,\n                axis = that.axis,\n                dimension = that.dimension,\n                paneSize = dimension.size,\n                scrollMovable = that.scrollMovable,\n                sizeRatio = paneSize / dimension.total,\n                position = Math.round(-scrollMovable[axis] * sizeRatio),\n                size = Math.round(paneSize * sizeRatio);\n\n                if (sizeRatio >= 1) {\n                    this.element.css(\"display\", \"none\");\n                } else {\n                    this.element.css(\"display\", \"\");\n                }\n\n                if (position + size > paneSize) {\n                    size = paneSize - position;\n                } else if (position < 0) {\n                    size += position;\n                    position = 0;\n                }\n\n            if (that.elementSize != size) {\n                that.element.css(that.size, size + \"px\");\n                that.elementSize = size;\n            }\n\n            that._ariaValue(position, dimension.size - that.elementSize);\n\n            that.movable.moveAxis(axis, position);\n        },\n\n        show: function() {\n            this.element.css({ opacity: SCROLLBAR_OPACITY, visibility: \"visible\" });\n        },\n\n        hide: function() {\n            if (!this.alwaysVisible) {\n                this.element.css({ opacity: 0 });\n            }\n        },\n\n        _ariaValue: function(current, total) {\n            var element = this.element;\n\n            if (current > total) {\n                current = total;\n            }\n\n            element.attr(\"aria-valuemax\", total);\n            element.attr(\"aria-valuenow\", current);\n        }\n    });\n\n    var Scroller = Widget.extend({\n        init: function(element, options) {\n            var that = this;\n            Widget.fn.init.call(that, element, options);\n\n            element = that.element;\n\n            that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n            if (that._native) {\n                element.addClass(\"km-native-scroller\")\n                    .prepend('<div class=\"km-scroll-header\"/>');\n\n                extend(that, {\n                    scrollElement: element,\n                    fixedContainer: element.children().first()\n                });\n\n                return;\n            }\n\n            element\n                .css(\"overflow\", \"hidden\")\n                .addClass(\"km-scroll-wrapper\")\n                .wrapInner('<div class=\"km-scroll-container\"/>')\n                .prepend('<div class=\"km-scroll-header\"/>');\n\n            var inner = element.children().eq(1),\n\n                tapCapture = new kendo.TapCapture(element),\n\n                movable = new Movable(inner),\n\n                dimensions = new PaneDimensions({\n                    element: inner,\n                    container: element,\n                    forcedEnabled: that.options.zoom\n                }),\n\n                avoidScrolling = this.options.avoidScrolling,\n\n                userEvents = new kendo.UserEvents(element, {\n                    touchAction: \"pan-y\",\n                    fastTap: true,\n                    allowSelection: true,\n                    preventDragEvent: true,\n                    captureUpIfMoved: true,\n                    multiTouch: that.options.zoom,\n                    supportDoubleTap: that.options.supportDoubleTap,\n                    start: function(e) {\n                        dimensions.refresh();\n\n                        var velocityX = abs(e.x.velocity),\n                            velocityY = abs(e.y.velocity),\n                            horizontalSwipe = velocityX * 2 >= velocityY,\n                            originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target),\n                            verticalSwipe = velocityY * 2 >= velocityX;\n\n\n                        if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n                            userEvents.capture();\n                        } else {\n                            userEvents.cancel();\n                        }\n                    }\n                }),\n\n                pane = new Pane({\n                    movable: movable,\n                    dimensions: dimensions,\n                    userEvents: userEvents,\n                    elastic: that.options.elastic\n                }),\n\n                zoomSnapBack = new ZoomSnapBack({\n                    movable: movable,\n                    dimensions: dimensions,\n                    userEvents: userEvents,\n                    tapCapture: tapCapture\n                }),\n\n                animatedScroller = new AnimatedScroller({\n                    moveTo: function(coordinates) {\n                        that.scrollTo(coordinates.x, coordinates.y);\n                    }\n                });\n\n            movable.bind(CHANGE, function() {\n                that.scrollTop = - movable.y;\n                that.scrollLeft = - movable.x;\n\n                that.trigger(SCROLL, {\n                    scrollTop: that.scrollTop,\n                    scrollLeft: that.scrollLeft\n                });\n            });\n\n            if (that.options.mousewheelScrolling) {\n                element.on(\"DOMMouseScroll mousewheel\", this._wheelScroll.bind(this));\n            }\n\n            extend(that, {\n                movable: movable,\n                dimensions: dimensions,\n                zoomSnapBack: zoomSnapBack,\n                animatedScroller: animatedScroller,\n                userEvents: userEvents,\n                pane: pane,\n                tapCapture: tapCapture,\n                pulled: false,\n                enabled: true,\n                scrollElement: inner,\n                scrollTop: 0,\n                scrollLeft: 0,\n                fixedContainer: element.children().first()\n            });\n\n            that._initAxis(\"x\");\n            that._initAxis(\"y\");\n\n            // build closure\n            that._wheelEnd = function() {\n                that._wheel = false;\n                that.userEvents.end(0, that._wheelY);\n            };\n\n            dimensions.refresh();\n\n            if (that.options.pullToRefresh) {\n                that._initPullToRefresh();\n            }\n        },\n\n        _wheelScroll: function(e) {\n            if (e.ctrlKey) {\n                return;\n            }\n\n            if (!this._wheel) {\n                this._wheel = true;\n                this._wheelY = 0;\n                this.userEvents.press(0, this._wheelY);\n            }\n\n            clearTimeout(this._wheelTimeout);\n            this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n\n            var delta = kendo.wheelDeltaY(e);\n\n            if (delta) {\n                this._wheelY += delta;\n                this.userEvents.move(0, this._wheelY);\n            }\n\n            e.preventDefault();\n        },\n\n        makeVirtual: function() {\n            this.dimensions.y.makeVirtual();\n        },\n\n        virtualSize: function(min, max) {\n            this.dimensions.y.virtualSize(min, max);\n        },\n\n        height: function() {\n            return this.dimensions.y.size;\n        },\n\n        scrollHeight: function() {\n            return this.scrollElement[0].scrollHeight;\n        },\n\n        scrollWidth: function() {\n            return this.scrollElement[0].scrollWidth;\n        },\n\n        options: {\n            name: \"Scroller\",\n            zoom: false,\n            pullOffset: 140,\n            visibleScrollHints: false,\n            elastic: true,\n            useNative: false,\n            mousewheelScrolling: true,\n            avoidScrolling: function() { return false; },\n            pullToRefresh: false,\n            messages: {\n                pullTemplate: \"Pull to refresh\",\n                releaseTemplate: \"Release to refresh\",\n                refreshTemplate: \"Refreshing\"\n            }\n        },\n\n        events: [\n            PULL,\n            SCROLL,\n            RESIZE\n        ],\n\n        _resize: function() {\n            if (!this._native) {\n                this.contentResized();\n            }\n        },\n\n        setOptions: function(options) {\n            var that = this;\n            Widget.fn.setOptions.call(that, options);\n            if (options.pullToRefresh) {\n                that._initPullToRefresh();\n            }\n        },\n\n        reset: function() {\n            if (this._native) {\n                this.scrollElement.scrollTop(0);\n            } else {\n                this.movable.moveTo({ x: 0, y: 0 });\n                this._scale(1);\n            }\n        },\n\n        contentResized: function() {\n            this.dimensions.refresh();\n            if (this.pane.x.outOfBounds()) {\n                this.movable.moveAxis(\"x\", this.dimensions.x.min);\n            }\n\n            if (this.pane.y.outOfBounds()) {\n                this.movable.moveAxis(\"y\", this.dimensions.y.min);\n            }\n        },\n\n        zoomOut: function() {\n            var dimensions = this.dimensions;\n            dimensions.refresh();\n            this._scale(dimensions.fitScale);\n            this.movable.moveTo(dimensions.centerCoordinates());\n        },\n\n        enable: function() {\n            this.enabled = true;\n        },\n\n        disable: function() {\n            this.enabled = false;\n        },\n\n        scrollTo: function(x, y) {\n            if (this._native) {\n                kendo.scrollLeft(this.scrollElement, abs(x));\n                this.scrollElement.scrollTop(abs(y));\n            } else {\n                this.dimensions.refresh();\n                this.movable.moveTo({ x: x, y: y });\n            }\n        },\n\n        animatedScrollTo: function(x, y, callback) {\n            var from,\n                to;\n\n            if (this._native) {\n                this.scrollTo(x, y);\n            } else {\n                from = { x: this.movable.x, y: this.movable.y };\n                to = { x: x, y: y };\n\n                this.animatedScroller.setCoordinates(from, to);\n                this.animatedScroller.setCallback(callback);\n                this.animatedScroller.start();\n            }\n        },\n\n        pullHandled: function() {\n            var that = this;\n            that.refreshHint.removeClass(REFRESHCLASS);\n            that.hintContainer.html(that.pullTemplate({}));\n            that.yinertia.onEnd();\n            that.xinertia.onEnd();\n            that.userEvents.cancel();\n        },\n\n        destroy: function() {\n            Widget.fn.destroy.call(this);\n            if (this.userEvents) {\n                this.userEvents.destroy();\n            }\n        },\n\n        _scale: function(scale) {\n            this.dimensions.rescale(scale);\n            this.movable.scaleTo(scale);\n        },\n\n        _initPullToRefresh: function() {\n            var that = this;\n\n            that.dimensions.y.forceEnabled();\n            that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n            that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n            that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n\n            that.scrollElement.prepend('<span class=\"km-scroller-pull\"><span class=\"km-icon\"></span><span class=\"km-loading-left\"></span><span class=\"km-loading-right\"></span><span class=\"km-template\">' + that.pullTemplate({}) + '</span></span>');\n            that.refreshHint = that.scrollElement.children().first();\n            that.hintContainer = that.refreshHint.children(\".km-template\");\n\n            that.pane.y.bind(\"change\", that._paneChange.bind(that));\n            that.userEvents.bind(\"end\", that._dragEnd.bind(that));\n        },\n\n        _dragEnd: function() {\n            var that = this;\n\n            if (!that.pulled) {\n                return;\n            }\n\n            that.pulled = false;\n            that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n            that.hintContainer.html(that.refreshTemplate({}));\n            that.yinertia.freeze(that.options.pullOffset / 2);\n            that.trigger(\"pull\");\n        },\n\n        _paneChange: function() {\n            var that = this;\n\n            if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n                if (!that.pulled) {\n                    that.pulled = true;\n                    that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n                    that.hintContainer.html(that.releaseTemplate({}));\n                }\n            } else if (that.pulled) {\n                that.pulled = false;\n                that.refreshHint.removeClass(RELEASECLASS);\n                that.hintContainer.html(that.pullTemplate({}));\n            }\n        },\n\n        _initAxis: function(axis) {\n            var that = this,\n                elementId = that.element.attr(\"id\"),\n                movable = that.movable,\n                dimension = that.dimensions[axis],\n                tapCapture = that.tapCapture,\n                paneAxis = that.pane[axis],\n                scrollBar;\n\n            if (!elementId) {\n                elementId = kendo.guid();\n                that.element.attr(\"id\", elementId);\n            }\n\n            scrollBar = new ScrollBar({\n                axis: axis,\n                movable: movable,\n                dimension: dimension,\n                container: that.element,\n                alwaysVisible: that.options.visibleScrollHints,\n                controlsId: elementId\n            });\n\n            dimension.bind(CHANGE, function() {\n                scrollBar.refresh();\n            });\n\n            paneAxis.bind(CHANGE, function() {\n                scrollBar.show();\n            });\n\n            that[axis + \"inertia\"] = new DragInertia({\n                axis: axis,\n                paneAxis: paneAxis,\n                movable: movable,\n                tapCapture: tapCapture,\n                userEvents: that.userEvents,\n                dimension: dimension,\n                elastic: that.options.elastic,\n                friction: that.options.friction || FRICTION,\n                velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n                end: function() {\n                    scrollBar.hide();\n                    that.trigger(\"scrollEnd\", {\n                        axis: axis,\n                        scrollTop: that.scrollTop,\n                        scrollLeft: that.scrollLeft\n                    });\n                }\n            });\n        }\n    });\n\n    ui.plugin(Scroller);\n})(window.kendo.jQuery);\nvar kendo$1 = kendo;\n\nexport { kendo$1 as default };\n"]}