1 |
- {"ast":null,"code":"require(\"core-js/modules/es.array.push.js\");\n/*\n * Vuescroll v4.18.1\n * (c) 2018-2023 Yi(Yves) Wang\n * Released under the MIT License\n * Github: https://github.com/YvesCoding/vuescroll\n * Website: http://vuescrolljs.yvescoding.me/\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('vue')) : typeof define === 'function' && define.amd ? define(['vue'], factory) : (global = global || self, global.vuescroll = factory(global.Vue));\n})(this, function (Vue) {\n 'use strict';\n\n Vue = Vue && Object.prototype.hasOwnProperty.call(Vue, 'default') ? Vue['default'] : Vue;\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n var classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n var defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n };\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n var toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n return arr2;\n } else {\n return Array.from(arr);\n }\n };\n function isIE() {\n /* istanbul ignore if */\n if (isServer()) return false;\n var agent = navigator.userAgent.toLowerCase();\n return agent.indexOf('msie') !== -1 || agent.indexOf('trident') !== -1 || agent.indexOf(' edge/') !== -1;\n }\n var isIos = function isIos() {\n /* istanbul ignore if */\n if (isServer()) return false;\n var u = navigator.userAgent;\n return !!u.match(/\\(i[^;]+;( U;)? CPU.+Mac OS X/);\n };\n\n /* istanbul ignore next */\n var isServer = function isServer() {\n return Vue.prototype.$isServer;\n };\n var touchManager = function () {\n function touchManager() {\n classCallCheck(this, touchManager);\n }\n createClass(touchManager, [{\n key: 'getEventObject',\n value: function getEventObject(originEvent) {\n return this.touchObject ? this.isTouch ? originEvent.touches : [originEvent] : null;\n }\n }, {\n key: 'getTouchObject',\n value: function getTouchObject() /* istanbul ignore next */{\n if (isServer()) return null;\n this.isTouch = false;\n var agent = navigator.userAgent,\n platform = navigator.platform,\n touchObject = {};\n touchObject.touch = !!('ontouchstart' in window && !window.opera || 'msmaxtouchpoints' in window.navigator || 'maxtouchpoints' in window.navigator || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0);\n touchObject.nonDeskTouch = touchObject.touch && !/win32/i.test(platform) || touchObject.touch && /win32/i.test(platform) && /mobile/i.test(agent);\n touchObject.eventType = 'onmousedown' in window && !touchObject.nonDeskTouch ? 'mouse' : 'ontouchstart' in window ? 'touch' : 'msmaxtouchpoints' in window.navigator || navigator.msMaxTouchPoints > 0 ? 'mstouchpoints' : 'maxtouchpoints' in window.navigator || navigator.maxTouchPoints > 0 ? 'touchpoints' : 'mouse';\n switch (touchObject.eventType) {\n case 'mouse':\n touchObject.touchstart = 'mousedown';\n touchObject.touchend = 'mouseup';\n touchObject.touchmove = 'mousemove';\n touchObject.touchenter = 'mouseenter';\n touchObject.touchmove = 'mousemove';\n touchObject.touchleave = 'mouseleave';\n break;\n case 'touch':\n touchObject.touchstart = 'touchstart';\n touchObject.touchend = 'touchend';\n touchObject.touchmove = 'touchmove';\n touchObject.touchcancel = 'touchcancel';\n touchObject.touchenter = 'touchstart';\n touchObject.touchmove = 'touchmove';\n touchObject.touchleave = 'touchend';\n this.isTouch = true;\n break;\n case 'mstouchpoints':\n touchObject.touchstart = 'MSPointerDown';\n touchObject.touchend = 'MSPointerUp';\n touchObject.touchmove = 'MSPointerMove';\n touchObject.touchcancel = 'MSPointerCancel';\n touchObject.touchenter = 'MSPointerDown';\n touchObject.touchmove = 'MSPointerMove';\n touchObject.touchleave = 'MSPointerUp';\n break;\n case 'touchpoints':\n touchObject.touchstart = 'pointerdown';\n touchObject.touchend = 'pointerup';\n touchObject.touchmove = 'pointermove';\n touchObject.touchcancel = 'pointercancel';\n touchObject.touchenter = 'pointerdown';\n touchObject.touchmove = 'pointermove';\n touchObject.touchleave = 'pointerup';\n break;\n }\n return this.touchObject = touchObject;\n }\n }]);\n return touchManager;\n }();\n\n /**\r\n * ZoomManager\r\n * Get the browser zoom ratio\r\n */\n\n var ZoomManager = function () {\n function ZoomManager() {\n var _this = this;\n classCallCheck(this, ZoomManager);\n this.originPixelRatio = this.getRatio();\n this.lastPixelRatio = this.originPixelRatio;\n window.addEventListener('resize', function () {\n _this.lastPixelRatio = _this.getRatio();\n });\n }\n createClass(ZoomManager, [{\n key: 'getRatio',\n value: function getRatio() {\n var ratio = 0;\n var screen = window.screen;\n var ua = navigator.userAgent.toLowerCase();\n if (window.devicePixelRatio !== undefined) {\n ratio = window.devicePixelRatio;\n } else if (~ua.indexOf('msie')) {\n if (screen.deviceXDPI && screen.logicalXDPI) {\n ratio = screen.deviceXDPI / screen.logicalXDPI;\n }\n } else if (window.outerWidth !== undefined && window.innerWidth !== undefined) {\n ratio = window.outerWidth / window.innerWidth;\n }\n if (ratio) {\n ratio = Math.round(ratio * 100);\n }\n return ratio;\n }\n }, {\n key: 'getRatioBetweenPreAndCurrent',\n value: function getRatioBetweenPreAndCurrent() {\n return this.originPixelRatio / this.lastPixelRatio;\n }\n }]);\n return ZoomManager;\n }();\n function deepCopy(from, to, shallow) {\n if (shallow && isUndef(to)) {\n return from;\n }\n if (isArray(from)) {\n to = [];\n from.forEach(function (item, index) {\n to[index] = deepCopy(item, to[index]);\n });\n } else if (from) {\n if (!isPlainObj(from)) {\n return from;\n }\n to = {};\n for (var key in from) {\n to[key] = _typeof(from[key]) === 'object' ? deepCopy(from[key], to[key]) : from[key];\n }\n }\n return to;\n }\n function mergeObject(from, to, force, shallow) {\n if (shallow && isUndef(to)) {\n return from;\n }\n to = to || {};\n if (isArray(from)) {\n if (!isArray(to) && force) {\n to = [];\n }\n if (isArray(to)) {\n from.forEach(function (item, index) {\n to[index] = mergeObject(item, to[index], force, shallow);\n });\n }\n } else if (from) {\n if (!isPlainObj(from)) {\n if (force) {\n to = from;\n }\n } else {\n for (var key in from) {\n if (_typeof(from[key]) === 'object') {\n if (isUndef(to[key])) {\n to[key] = deepCopy(from[key], to[key], shallow);\n } else {\n mergeObject(from[key], to[key], force, shallow);\n }\n } else {\n if (isUndef(to[key]) || force) to[key] = from[key];\n }\n }\n }\n }\n return to;\n }\n function defineReactive(target, key, source, souceKey) {\n /* istanbul ignore if */\n if (!source[key] && typeof source !== 'function') {\n return;\n }\n souceKey = souceKey || key;\n Object.defineProperty(target, key, {\n get: function get() {\n return source[souceKey];\n },\n configurable: true\n });\n }\n var scrollBarWidth = void 0;\n var zoomManager = void 0;\n function getGutter() {\n /* istanbul ignore next */\n if (isServer()) return 0;\n if (!zoomManager) {\n zoomManager = new ZoomManager();\n }\n if (scrollBarWidth !== undefined) return scrollBarWidth * zoomManager.getRatioBetweenPreAndCurrent();\n var outer = document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.width = '100px';\n outer.style.position = 'absolute';\n outer.style.top = '-9999px';\n document.body.appendChild(outer);\n var widthNoScroll = outer.offsetWidth;\n outer.style.overflow = 'scroll';\n var inner = document.createElement('div');\n inner.style.width = '100%';\n outer.appendChild(inner);\n var widthWithScroll = inner.offsetWidth;\n outer.parentNode.removeChild(outer);\n scrollBarWidth = widthNoScroll - widthWithScroll;\n // multi the browser zoom\n if (!zoomManager) {\n zoomManager = new ZoomManager();\n }\n return scrollBarWidth * zoomManager.getRatioBetweenPreAndCurrent();\n }\n function eventCenter(dom, eventName, hander) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var type = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'on';\n type == 'on' ? dom.addEventListener(eventName, hander, capture) : dom.removeEventListener(eventName, hander, capture);\n }\n var error = function error(msg) {\n console.error('[vuescroll] ' + msg);\n };\n var warn = function warn(msg) {\n console.warn('[vuescroll] ' + msg);\n };\n function isChildInParent(child, parent) {\n var flag = false;\n if (!child || !parent) {\n return flag;\n }\n while (child.parentNode !== parent && child.parentNode.nodeType !== 9 && !child.parentNode._isVuescroll) {\n child = child.parentNode;\n }\n if (child.parentNode == parent) {\n flag = true;\n }\n return flag;\n }\n function getPrefix(global) {\n var docStyle = document.documentElement.style;\n var engine;\n /* istanbul ignore if */\n if (global.opera && Object.prototype.toString.call(opera) === '[object Opera]') {\n engine = 'presto';\n } /* istanbul ignore next */else if ('MozAppearance' in docStyle) {\n engine = 'gecko';\n } else if ('WebkitAppearance' in docStyle) {\n engine = 'webkit';\n } /* istanbul ignore next */else if (typeof navigator.cpuClass === 'string') {\n engine = 'trident';\n }\n var vendorPrefix = {\n trident: 'ms',\n gecko: 'moz',\n webkit: 'webkit',\n presto: 'O'\n }[engine];\n return vendorPrefix;\n }\n function getComplitableStyle(property, value) {\n /* istanbul ignore if */\n if (isServer()) return false;\n var compatibleValue = '-' + getPrefix(window) + '-' + value;\n var testElm = document.createElement('div');\n testElm.style[property] = compatibleValue;\n if (testElm.style[property] == compatibleValue) {\n return compatibleValue;\n }\n /* istanbul ignore next */\n return false;\n }\n\n /**\r\n * Insert children into user-passed slot at vnode level\r\n */\n function insertChildrenIntoSlot(h) {\n var parentVnode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var childVNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var data = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var swapChildren = arguments[4];\n\n /* istanbul ignore if */\n if (parentVnode && parentVnode.length > 1) {\n return swapChildren ? [].concat(toConsumableArray(childVNode), toConsumableArray(parentVnode)) : [].concat(toConsumableArray(parentVnode), toConsumableArray(childVNode));\n }\n parentVnode = parentVnode[0];\n var _getVnodeInfo = getVnodeInfo(parentVnode),\n ch = _getVnodeInfo.ch,\n tag = _getVnodeInfo.tag,\n isComponent = _getVnodeInfo.isComponent;\n if (isComponent) {\n parentVnode.data = mergeObject({\n attrs: parentVnode.componentOptions.propsData\n }, parentVnode.data, false,\n // force: false\n true // shallow: true\n );\n }\n\n ch = swapChildren ? [].concat(toConsumableArray(childVNode), toConsumableArray(ch)) : [].concat(toConsumableArray(ch), toConsumableArray(childVNode));\n delete parentVnode.data.slot;\n return h(tag, mergeObject(data, parentVnode.data, false, true), ch);\n }\n\n /**\r\n * Get the info of a vnode,\r\n * vnode must be parentVnode\r\n */\n function getVnodeInfo(vnode) {\n if (!vnode || vnode.length > 1) return {};\n vnode = vnode[0] ? vnode[0] : vnode;\n var isComponent = !!vnode.componentOptions;\n var ch = void 0;\n var tag = void 0;\n if (isComponent) {\n ch = vnode.componentOptions.children || [];\n tag = vnode.componentOptions.tag;\n } else {\n ch = vnode.children || [];\n tag = vnode.tag;\n }\n return {\n isComponent: isComponent,\n ch: ch,\n tag: tag\n };\n }\n\n /**\r\n * Get the vuescroll instance instead of\r\n * user pass component like slot.\r\n */\n function getRealParent(ctx) {\n var parent = ctx.$parent;\n if (!parent._isVuescrollRoot && parent) {\n parent = parent.$parent;\n }\n return parent;\n }\n var isArray = function isArray(_) {\n return Array.isArray(_);\n };\n var isPlainObj = function isPlainObj(_) {\n return Object.prototype.toString.call(_) == '[object Object]';\n };\n var isUndef = function isUndef(_) {\n return typeof _ === 'undefined';\n };\n function getNumericValue(distance, size) {\n var number = void 0;\n if (!(number = /(-?\\d+(?:\\.\\d+?)?)%$/.exec(distance))) {\n number = distance - 0;\n } else {\n number = number[1] - 0;\n number = size * number / 100;\n }\n return number;\n }\n function createStyle(styleId, cssText) {\n /* istanbul ignore if */\n if (isServer() || document.getElementById(styleId)) {\n return;\n }\n var head = document.head || doc.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.id = styleId;\n style.type = 'text/css';\n\n /* istanbul ignore if */\n if (style.styleSheet) {\n style.styleSheet.cssText = cssText;\n } else {\n style.appendChild(document.createTextNode(cssText));\n }\n head.appendChild(style);\n }\n\n // Hide the ios native scrollbar.\n function createHideBarStyle() {\n /* istanbul ignore next */\n {\n var cssText = '.__hidebar::-webkit-scrollbar {\\n width: 0;\\n height: 0;\\n }';\n createStyle('vuescroll-hide-ios-bar', cssText);\n }\n }\n\n // create slide mode style\n function createSlideModeStyle() {\n var cssText = '\\n @-webkit-keyframes loading-rotate {\\n to {\\n -webkit-transform: rotate(1turn);\\n transform: rotate(1turn);\\n }\\n }\\n\\n @keyframes loading-rotate {\\n to {\\n -webkit-transform: rotate(1turn);\\n transform: rotate(1turn);\\n }\\n }\\n\\n @-webkit-keyframes loading-wipe {\\n 0% {\\n stroke-dasharray: 1, 200;\\n stroke-dashoffset: 0;\\n }\\n 50% {\\n stroke-dasharray: 90, 150;\\n stroke-dashoffset: -40px;\\n }\\n to {\\n stroke-dasharray: 90, 150;\\n stroke-dashoffset: -120px;\\n }\\n }\\n\\n @keyframes loading-wipe {\\n 0% {\\n stroke-dasharray: 1, 200;\\n stroke-dashoffset: 0;\\n }\\n 50% {\\n stroke-dasharray: 90, 150;\\n stroke-dashoffset: -40px;\\n }\\n to {\\n stroke-dasharray: 90, 150;\\n stroke-dashoffset: -120px;\\n }\\n }\\n\\n .__vuescroll .__refresh,\\n .__vuescroll .__load {\\n position: absolute;\\n width: 100%;\\n color: black;\\n height: 50px;\\n line-height: 50px;\\n text-align: center;\\n font-size: 16px;\\n }\\n .__vuescroll .__refresh svg,\\n .__vuescroll .__load svg {\\n margin-right: 10px;\\n width: 25px;\\n height: 25px;\\n vertical-align: sub;\\n }\\n .__vuescroll .__refresh svg.active,\\n .__vuescroll .__load svg.active {\\n transition: all 0.2s;\\n }\\n .__vuescroll .__refresh svg.active.deactive,\\n .__vuescroll .__load svg.active.deactive {\\n transform: rotateZ(180deg);\\n }\\n .__vuescroll .__refresh svg path,\\n .__vuescroll .__refresh svg rect,\\n .__vuescroll .__load svg path,\\n .__vuescroll .__load svg rect {\\n fill: #20a0ff;\\n }\\n .__vuescroll .__refresh svg.start,\\n .__vuescroll .__load svg.start {\\n stroke: #343640;\\n stroke-width: 4;\\n stroke-linecap: round;\\n -webkit-animation: loading-rotate 2s linear infinite;\\n animation: loading-rotate 2s linear infinite;\\n }\\n .__vuescroll .__refresh svg.start .bg-path,\\n .__vuescroll .__load svg.start .bg-path {\\n stroke: #f2f2f2;\\n fill: none;\\n }\\n .__vuescroll .__refresh svg.start .active-path,\\n .__vuescroll .__load svg.start .active-path {\\n stroke: #20a0ff;\\n fill: none;\\n stroke-dasharray: 90, 150;\\n stroke-dashoffset: 0;\\n -webkit-animation: loading-wipe 1.5s ease-in-out infinite;\\n animation: loading-wipe 1.5s ease-in-out infinite;\\n }\\n ';\n createStyle('vuescroll-silde-mode-style', cssText);\n }\n var api = {\n mounted: function mounted() {\n vsInstances[this._uid] = this;\n },\n beforeDestroy: function beforeDestroy() {\n delete vsInstances[this._uid];\n },\n methods: {\n // public api\n scrollTo: function scrollTo(_ref, speed, easing) {\n var x = _ref.x,\n y = _ref.y;\n\n // istanbul ignore if\n if (speed === true || typeof speed == 'undefined') {\n speed = this.mergedOptions.scrollPanel.speed;\n }\n this.internalScrollTo(x, y, speed, easing);\n },\n scrollBy: function scrollBy(_ref2, speed, easing) {\n var _ref2$dx = _ref2.dx,\n dx = _ref2$dx === undefined ? 0 : _ref2$dx,\n _ref2$dy = _ref2.dy,\n dy = _ref2$dy === undefined ? 0 : _ref2$dy;\n var _getPosition = this.getPosition(),\n _getPosition$scrollLe = _getPosition.scrollLeft,\n scrollLeft = _getPosition$scrollLe === undefined ? 0 : _getPosition$scrollLe,\n _getPosition$scrollTo = _getPosition.scrollTop,\n scrollTop = _getPosition$scrollTo === undefined ? 0 : _getPosition$scrollTo;\n if (dx) {\n scrollLeft += getNumericValue(dx, this.scrollPanelElm.scrollWidth - this.$el.clientWidth);\n }\n if (dy) {\n scrollTop += getNumericValue(dy, this.scrollPanelElm.scrollHeight - this.$el.clientHeight);\n }\n this.internalScrollTo(scrollLeft, scrollTop, speed, easing);\n },\n scrollIntoView: function scrollIntoView(elm) {\n var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var parentElm = this.$el;\n if (typeof elm === 'string') {\n elm = parentElm.querySelector(elm);\n }\n if (!isChildInParent(elm, parentElm)) {\n warn('The element or selector you passed is not the element of Vuescroll, please pass the element that is in Vuescroll to scrollIntoView API. ');\n return;\n }\n\n // parent elm left, top\n\n var _$el$getBoundingClien = this.$el.getBoundingClientRect(),\n left = _$el$getBoundingClien.left,\n top = _$el$getBoundingClien.top;\n // child elm left, top\n\n var _elm$getBoundingClien = elm.getBoundingClientRect(),\n childLeft = _elm$getBoundingClien.left,\n childTop = _elm$getBoundingClien.top;\n var diffX = left - childLeft;\n var diffY = top - childTop;\n this.scrollBy({\n dx: -diffX,\n dy: -diffY\n }, animate);\n },\n refresh: function refresh() {\n this.refreshInternalStatus();\n // refresh again to keep status is correct\n this.$nextTick(this.refreshInternalStatus);\n }\n }\n };\n\n /** Public Api */\n\n /**\r\n * Refresh all\r\n */\n var vsInstances = {};\n function refreshAll() {\n for (var vs in vsInstances) {\n vsInstances[vs].refresh();\n }\n }\n var baseConfig = {\n // vuescroll\n vuescroll: {\n // vuescroll's size(height/width) should be a percent(100%)\n // or be a number that is equal to its parentNode's width or\n // height ?\n sizeStrategy: 'percent',\n /** Whether to detect dom resize or not */\n detectResize: true,\n /** Enable locking to the main axis if user moves only slightly on one of them at start */\n locking: true\n },\n scrollPanel: {\n // when component mounted.. it will automatically scrolls.\n initialScrollY: false,\n initialScrollX: false,\n // feat: #11\n scrollingX: true,\n scrollingY: true,\n speed: 300,\n easing: undefined,\n // Sometimes, the nativebar maybe on the left,\n // See https://github.com/YvesCoding/vuescroll/issues/64\n verticalNativeBarPos: 'right',\n maxHeight: undefined,\n maxWidth: undefined\n },\n //\n rail: {\n background: '#01a99a',\n opacity: 0,\n border: 'none',\n /** Rail's size(Height/Width) , default -> 6px */\n size: '6px',\n /** Specify rail's border-radius, or the border-radius of rail and bar will be equal to the rail's size. default -> false **/\n specifyBorderRadius: false,\n /** Rail the distance from the two ends of the X axis and Y axis. **/\n gutterOfEnds: null,\n /** Rail the distance from the side of container. **/\n gutterOfSide: '2px',\n /** Whether to keep rail show or not, default -> false, event content height is not enough */\n keepShow: false\n },\n bar: {\n /** How long to hide bar after mouseleave, default -> 500 */\n showDelay: 500,\n /** Specify bar's border-radius, or the border-radius of rail and bar will be equal to the rail's size. default -> false **/\n specifyBorderRadius: false,\n /** Whether to show bar on scrolling, default -> true */\n onlyShowBarOnScroll: true,\n /** Whether to keep show or not, default -> false */\n keepShow: false,\n /** Bar's background , default -> #00a650 */\n background: 'rgb(3, 185, 118)',\n /** Bar's opacity, default -> 1 */\n opacity: 1,\n /** bar's size(Height/Width) , default -> 6px */\n\n size: '6px',\n minSize: 0,\n disable: false\n },\n scrollButton: {\n enable: false,\n background: 'rgb(3, 185, 118)',\n opacity: 1,\n step: 180,\n mousedownStep: 30\n }\n };\n\n /**\r\n * validate the options\r\n * @export\r\n * @param {any} ops\r\n */\n function validateOps(ops) {\n var renderError = false;\n var scrollPanel = ops.scrollPanel;\n var _ops$bar = ops.bar,\n vBar = _ops$bar.vBar,\n hBar = _ops$bar.hBar;\n var _ops$rail = ops.rail,\n vRail = _ops$rail.vRail,\n hRail = _ops$rail.hRail;\n\n // validate scrollPanel\n\n var initialScrollY = scrollPanel['initialScrollY'];\n var initialScrollX = scrollPanel['initialScrollX'];\n if (initialScrollY && !String(initialScrollY).match(/^\\d+(\\.\\d+)?(%)?$/)) {\n warn('The prop `initialScrollY` or `initialScrollX` should be a percent number like `10%` or an exact number that greater than or equal to 0 like `100`.');\n }\n if (initialScrollX && !String(initialScrollX).match(/^\\d+(\\.\\d+)?(%)?$/)) {\n warn('The prop `initialScrollY` or `initialScrollX` should be a percent number like `10%` or an exact number that greater than or equal to 0 like `100`.');\n }\n\n // validate deprecated vBar/hBar vRail/hRail\n if (vBar || hBar || vRail || hRail) {\n warn('The options: vRail, hRail, vBar, hBar have been deprecated since v4.7.0,' + 'please use corresponing rail/bar instead!');\n }\n if (_extraValidate) {\n _extraValidate = [].concat(_extraValidate);\n _extraValidate.forEach(function (hasError) {\n if (hasError(ops)) {\n renderError = true;\n }\n });\n }\n return renderError;\n }\n var _extraValidate = null;\n var extendOpts = function extendOpts(extraOpts, extraValidate) {\n extraOpts = [].concat(extraOpts);\n extraOpts.forEach(function (opts) {\n mergeObject(opts, baseConfig);\n });\n _extraValidate = extraValidate;\n };\n\n // all modes\n var modes = ['slide', 'native'];\n // do nothing\n var NOOP = function NOOP() {};\n // some small changes.\n var smallChangeArray = ['mergedOptions.vuescroll.pullRefresh.tips', 'mergedOptions.vuescroll.pushLoad.tips', 'mergedOptions.vuescroll.scroller.disable', 'mergedOptions.rail', 'mergedOptions.bar'];\n // refresh/load dom ref/key...\n var __REFRESH_DOM_NAME = 'refreshDom';\n var __LOAD_DOM_NAME = 'loadDom';\n var scrollMap = {\n vertical: {\n size: 'height',\n opsSize: 'width',\n posName: 'top',\n opposName: 'bottom',\n sidePosName: 'right',\n page: 'pageY',\n scroll: 'scrollTop',\n scrollSize: 'scrollHeight',\n offset: 'offsetHeight',\n client: 'clientY',\n axis: 'Y',\n scrollButton: {\n start: 'top',\n end: 'bottom'\n }\n },\n horizontal: {\n size: 'width',\n opsSize: 'height',\n posName: 'left',\n opposName: 'right',\n sidePosName: 'bottom',\n page: 'pageX',\n scroll: 'scrollLeft',\n scrollSize: 'scrollWidth',\n offset: 'offsetWidth',\n client: 'clientX',\n axis: 'X',\n scrollButton: {\n start: 'left',\n end: 'right'\n }\n }\n };\n function requestAnimationFrame(global) {\n // Check for request animation Frame support\n var requestFrame = global.requestAnimationFrame || global.webkitRequestAnimationFrame || global.mozRequestAnimationFrame || global.oRequestAnimationFrame;\n var isNative = !!requestFrame;\n if (requestFrame && !/requestAnimationFrame\\(\\)\\s*\\{\\s*\\[native code\\]\\s*\\}/i.test(requestFrame.toString())) {\n isNative = false;\n }\n if (isNative) {\n return function (callback, root) {\n requestFrame(callback, root);\n };\n }\n var TARGET_FPS = 60;\n var requests = {};\n var rafHandle = 1;\n var intervalHandle = null;\n var lastActive = +new Date();\n return function (callback) {\n var callbackHandle = rafHandle++;\n\n // Store callback\n requests[callbackHandle] = callback;\n\n // Create timeout at first request\n if (intervalHandle === null) {\n intervalHandle = setInterval(function () {\n var time = +new Date();\n var currentRequests = requests;\n\n // Reset data structure before executing callbacks\n requests = {};\n for (var key in currentRequests) {\n if (currentRequests.hasOwnProperty(key)) {\n currentRequests[key](time);\n lastActive = time;\n }\n }\n\n // Disable the timeout when nothing happens for a certain\n // period of time\n if (time - lastActive > 2500) {\n clearInterval(intervalHandle);\n intervalHandle = null;\n }\n }, 1000 / TARGET_FPS);\n }\n return callbackHandle;\n };\n }\n var colorCache = {};\n var rgbReg = /rgb\\(/;\n var extractRgbColor = /rgb\\((.*)\\)/;\n\n // Transform a common color int oa `rgbA` color\n function getRgbAColor(color, opacity) {\n var id = color + '&' + opacity;\n if (colorCache[id]) {\n return colorCache[id];\n }\n var div = document.createElement('div');\n div.style.background = color;\n document.body.appendChild(div);\n var computedColor = window.getComputedStyle(div).backgroundColor;\n document.body.removeChild(div);\n\n /* istanbul ignore if */\n if (!rgbReg.test(computedColor)) {\n return color;\n }\n return colorCache[id] = 'rgba(' + extractRgbColor.exec(computedColor)[1] + ', ' + opacity + ')';\n }\n var bar = {\n name: 'bar',\n props: {\n ops: Object,\n state: Object,\n hideBar: Boolean,\n otherBarHide: Boolean,\n type: String\n },\n computed: {\n bar: function bar() {\n return scrollMap[this.type];\n },\n barSize: function barSize() {\n return Math.max(this.state.size, this.ops.bar.minSize);\n },\n barRatio: function barRatio() {\n return (1 - this.barSize) / (1 - this.state.size);\n }\n },\n render: function render(h) {\n var _style, _style2, _barStyle;\n var vm = this;\n /** Get rgbA format background color */\n var railBackgroundColor = getRgbAColor(vm.ops.rail.background, vm.ops.rail.opacity);\n if (!this.touchManager) {\n this.touchManager = new touchManager();\n }\n\n /** Rail Data */\n var railSize = vm.ops.rail.size;\n var endPos = vm.otherBarHide ? 0 : railSize;\n var touchObj = vm.touchManager.getTouchObject();\n var rail = {\n class: '__rail-is-' + vm.type,\n style: (_style = {\n position: 'absolute',\n 'z-index': '1',\n borderRadius: vm.ops.rail.specifyBorderRadius || railSize,\n background: railBackgroundColor,\n border: vm.ops.rail.border\n }, defineProperty(_style, vm.bar.opsSize, railSize), defineProperty(_style, vm.bar.posName, vm.ops.rail['gutterOfEnds'] || 0), defineProperty(_style, vm.bar.opposName, vm.ops.rail['gutterOfEnds'] || endPos), defineProperty(_style, vm.bar.sidePosName, vm.ops.rail['gutterOfSide']), _style)\n };\n if (touchObj) {\n var _rail$on;\n rail.on = (_rail$on = {}, defineProperty(_rail$on, touchObj.touchenter, function () {\n vm.setRailHover();\n }), defineProperty(_rail$on, touchObj.touchleave, function () {\n vm.setRailLeave();\n }), _rail$on);\n }\n\n // left space for scroll button\n var buttonSize = vm.ops.scrollButton.enable ? railSize : 0;\n var barWrapper = {\n class: '__bar-wrap-is-' + vm.type,\n style: (_style2 = {\n position: 'absolute',\n borderRadius: vm.ops.rail.specifyBorderRadius || railSize\n }, defineProperty(_style2, vm.bar.posName, buttonSize), defineProperty(_style2, vm.bar.opposName, buttonSize), _style2),\n on: {}\n };\n var scrollDistance = vm.state.posValue * vm.state.size;\n var pos = scrollDistance * vm.barRatio / vm.barSize;\n var opacity = vm.state.opacity;\n var parent = getRealParent(this);\n\n // set class hook\n parent.setClassHook(this.type == 'vertical' ? 'vBarVisible' : 'hBarVisible', !!opacity);\n\n /** Scrollbar style */\n var barStyle = (_barStyle = {\n cursor: 'pointer',\n position: 'absolute',\n margin: 'auto',\n transition: 'opacity 0.5s',\n 'user-select': 'none',\n 'border-radius': 'inherit'\n }, defineProperty(_barStyle, vm.bar.size, vm.barSize * 100 + '%'), defineProperty(_barStyle, 'background', vm.ops.bar.background), defineProperty(_barStyle, vm.bar.opsSize, vm.ops.bar.size), defineProperty(_barStyle, 'opacity', opacity), defineProperty(_barStyle, 'transform', 'translate' + scrollMap[vm.type].axis + '(' + pos + '%)'), _barStyle);\n var bar = {\n style: barStyle,\n class: '__bar-is-' + vm.type,\n ref: 'thumb',\n on: {}\n };\n if (vm.type == 'vertical') {\n barWrapper.style.width = '100%';\n // Let bar to be on the center.\n bar.style.left = 0;\n bar.style.right = 0;\n } else {\n barWrapper.style.height = '100%';\n bar.style.top = 0;\n bar.style.bottom = 0;\n }\n\n /* istanbul ignore next */\n {\n var _touchObj = this.touchManager.getTouchObject();\n bar.on[_touchObj.touchstart] = this.createBarEvent();\n barWrapper.on[_touchObj.touchstart] = this.createTrackEvent();\n }\n return h('div', rail, [this.createScrollbarButton(h, 'start'), this.hideBar ? null : h('div', barWrapper, [h('div', bar)]), this.createScrollbarButton(h, 'end')]);\n },\n data: function data() {\n return {\n isBarDragging: false\n };\n },\n methods: {\n setRailHover: function setRailHover() {\n var parent = getRealParent(this);\n var state = parent.vuescroll.state;\n if (!state.isRailHover) {\n state.isRailHover = true;\n parent.showBar();\n }\n },\n setRailLeave: function setRailLeave() {\n var parent = getRealParent(this);\n var state = parent.vuescroll.state;\n state.isRailHover = false;\n parent.hideBar();\n },\n setBarDrag: function setBarDrag(val) /* istanbul ignore next */{\n this.$emit('setBarDrag', this.isBarDragging = val);\n var parent = getRealParent(this);\n // set class hook\n parent.setClassHook(this.type == 'vertical' ? 'vBarDragging' : 'hBarDragging', !!val);\n },\n createBarEvent: function createBarEvent() {\n var ctx = this;\n var parent = getRealParent(ctx);\n var touchObj = ctx.touchManager.getTouchObject();\n function mousedown(e) /* istanbul ignore next */{\n var event = ctx.touchManager.getEventObject(e);\n if (!event) return;\n e.stopImmediatePropagation();\n e.preventDefault();\n event = event[0];\n document.onselectstart = function () {\n return false;\n };\n ctx.axisStartPos = event[ctx.bar.client] - ctx.$refs['thumb'].getBoundingClientRect()[ctx.bar.posName];\n\n // Tell parent that the mouse has been down.\n ctx.setBarDrag(true);\n eventCenter(document, touchObj.touchmove, mousemove);\n eventCenter(document, touchObj.touchend, mouseup);\n }\n function mousemove(e) /* istanbul ignore next */{\n if (!ctx.axisStartPos) {\n return;\n }\n var event = ctx.touchManager.getEventObject(e);\n if (!event) return;\n event = event[0];\n var thubmParent = ctx.$refs.thumb.parentNode;\n var delta = event[ctx.bar.client] - thubmParent.getBoundingClientRect()[ctx.bar.posName];\n delta = delta / ctx.barRatio;\n var percent = (delta - ctx.axisStartPos) / thubmParent[ctx.bar.offset];\n parent.scrollTo(defineProperty({}, ctx.bar.axis.toLowerCase(), parent.scrollPanelElm[ctx.bar.scrollSize] * percent), false);\n }\n function mouseup() /* istanbul ignore next */{\n ctx.setBarDrag(false);\n parent.hideBar();\n document.onselectstart = null;\n ctx.axisStartPos = 0;\n eventCenter(document, touchObj.touchmove, mousemove, false, 'off');\n eventCenter(document, touchObj.touchend, mouseup, false, 'off');\n }\n return mousedown;\n },\n createTrackEvent: function createTrackEvent() {\n var ctx = this;\n return function handleClickTrack(e) {\n var parent = getRealParent(ctx);\n var _ctx$bar = ctx.bar,\n client = _ctx$bar.client,\n offset = _ctx$bar.offset,\n posName = _ctx$bar.posName,\n axis = _ctx$bar.axis;\n var thumb = ctx.$refs['thumb'];\n e.preventDefault();\n e.stopImmediatePropagation();\n\n /* istanbul ignore if */\n if (!thumb) return;\n var barOffset = thumb[offset];\n var event = ctx.touchManager.getEventObject(e)[0];\n var percent = (event[client] - e.currentTarget.getBoundingClientRect()[posName] - barOffset / 2) / (e.currentTarget[offset] - barOffset);\n parent.scrollTo(defineProperty({}, axis.toLowerCase(), percent * 100 + '%'));\n };\n },\n // Scrollbuton relative things...\n createScrollbarButton: function createScrollbarButton(h, type /* start or end */) {\n var _style3;\n var barContext = this;\n if (!barContext.ops.scrollButton.enable) {\n return null;\n }\n var size = barContext.ops.rail.size;\n var _barContext$ops$scrol = barContext.ops.scrollButton,\n opacity = _barContext$ops$scrol.opacity,\n background = _barContext$ops$scrol.background;\n var borderColor = getRgbAColor(background, opacity);\n var wrapperProps = {\n class: ['__bar-button', '__bar-button-is-' + barContext.type + '-' + type],\n style: (_style3 = {}, defineProperty(_style3, barContext.bar.scrollButton[type], 0), defineProperty(_style3, 'width', size), defineProperty(_style3, 'height', size), defineProperty(_style3, 'position', 'absolute'), defineProperty(_style3, 'cursor', 'pointer'), defineProperty(_style3, 'display', 'table'), _style3),\n ref: type\n };\n var innerProps = {\n class: '__bar-button-inner',\n style: {\n border: 'calc(' + size + ' / 2.5) solid transparent',\n width: '0',\n height: '0',\n margin: 'auto',\n position: 'absolute',\n top: '0',\n bottom: '0',\n right: '0',\n left: '0'\n },\n on: {}\n };\n if (barContext.type == 'vertical') {\n if (type == 'start') {\n innerProps.style['border-bottom-color'] = borderColor;\n innerProps.style['transform'] = 'translateY(-25%)';\n } else {\n innerProps.style['border-top-color'] = borderColor;\n innerProps.style['transform'] = 'translateY(25%)';\n }\n } else {\n if (type == 'start') {\n innerProps.style['border-right-color'] = borderColor;\n innerProps.style['transform'] = 'translateX(-25%)';\n } else {\n innerProps.style['border-left-color'] = borderColor;\n innerProps.style['transform'] = 'translateX(25%)';\n }\n }\n\n /* istanbul ignore next */\n {\n var touchObj = this.touchManager.getTouchObject();\n innerProps.on[touchObj.touchstart] = this.createScrollButtonEvent(type, touchObj);\n }\n return h('div', wrapperProps, [h('div', innerProps)]);\n },\n createScrollButtonEvent: function createScrollButtonEvent(type, touchObj) {\n var ctx = this;\n var parent = getRealParent(ctx);\n var _ctx$ops$scrollButton = ctx.ops.scrollButton,\n step = _ctx$ops$scrollButton.step,\n mousedownStep = _ctx$ops$scrollButton.mousedownStep;\n var stepWithDirection = type == 'start' ? -step : step;\n var mousedownStepWithDirection = type == 'start' ? -mousedownStep : mousedownStep;\n var ref = requestAnimationFrame(window);\n\n // bar props: type\n var barType = ctx.type;\n var isMouseDown = false;\n var isMouseout = true;\n var timeoutId = void 0;\n function start(e) {\n /* istanbul ignore if */\n\n if (3 == e.which) {\n return;\n }\n\n // set class hook\n parent.setClassHook('cliking' + barType + type + 'Button', true);\n e.stopImmediatePropagation();\n e.preventDefault();\n isMouseout = false;\n parent.scrollBy(defineProperty({}, 'd' + ctx.bar.axis.toLowerCase(), stepWithDirection));\n eventCenter(document, touchObj.touchend, endPress, false);\n if (touchObj.touchstart == 'mousedown') {\n var elm = ctx.$refs[type];\n eventCenter(elm, 'mouseenter', enter, false);\n eventCenter(elm, 'mouseleave', leave, false);\n }\n clearTimeout(timeoutId);\n timeoutId = setTimeout(function () /* istanbul ignore next */{\n isMouseDown = true;\n ref(pressing, window);\n }, 500);\n }\n function pressing() /* istanbul ignore next */{\n if (isMouseDown && !isMouseout) {\n parent.scrollBy(defineProperty({}, 'd' + ctx.bar.axis.toLowerCase(), mousedownStepWithDirection), false);\n ref(pressing, window);\n }\n }\n function endPress() {\n clearTimeout(timeoutId);\n isMouseDown = false;\n eventCenter(document, touchObj.touchend, endPress, false, 'off');\n if (touchObj.touchstart == 'mousedown') {\n var elm = ctx.$refs[type];\n eventCenter(elm, 'mouseenter', enter, false, 'off');\n eventCenter(elm, 'mouseleave', leave, false, 'off');\n }\n parent.setClassHook('cliking' + barType + type + 'Button', false);\n }\n function enter() /* istanbul ignore next */{\n isMouseout = false;\n pressing();\n }\n function leave() /* istanbul ignore next */{\n isMouseout = true;\n }\n return start;\n }\n }\n };\n function getBarData(vm, type) {\n var axis = scrollMap[type].axis;\n /** type.charAt(0) = vBar/hBar */\n var barType = type.charAt(0) + 'Bar';\n var hideBar = !vm.bar[barType].state.size || !vm.mergedOptions.scrollPanel['scrolling' + axis] || vm.refreshLoad && type !== 'vertical' || vm.mergedOptions.bar.disable;\n var keepShowRail = vm.mergedOptions.rail.keepShow;\n if (hideBar && !keepShowRail) {\n return null;\n }\n return {\n hideBar: hideBar,\n props: {\n type: type,\n ops: {\n bar: vm.mergedOptions.bar,\n rail: vm.mergedOptions.rail,\n scrollButton: vm.mergedOptions.scrollButton\n },\n state: vm.bar[barType].state,\n hideBar: hideBar\n },\n on: {\n setBarDrag: vm.setBarDrag\n },\n ref: type + 'Bar',\n key: type\n };\n }\n\n /**\r\n * create bars\r\n *\r\n * @param {any} size\r\n * @param {any} type\r\n */\n function createBar(h, vm) {\n var verticalBarProps = getBarData(vm, 'vertical');\n var horizontalBarProps = getBarData(vm, 'horizontal');\n\n // set class hooks\n vm.setClassHook('hasVBar', !!(verticalBarProps && !verticalBarProps.hideBar));\n vm.setClassHook('hasHBar', !!(horizontalBarProps && !horizontalBarProps.hideBar));\n return [verticalBarProps ? h('bar', _extends({}, verticalBarProps, {\n props: _extends({\n otherBarHide: !horizontalBarProps\n }, verticalBarProps.props)\n })) : null, horizontalBarProps ? h('bar', _extends({}, horizontalBarProps, {\n props: _extends({\n otherBarHide: !verticalBarProps\n }, horizontalBarProps.props)\n })) : null];\n }\n\n /**\r\n * This is like a HOC, It extracts the common parts of the\r\n * native-mode, slide-mode and mix-mode.\r\n * Each mode must implement the following methods:\r\n * 1. refreshInternalStatus : use to refresh the component\r\n * 2. destroy : Destroy some registryed events before component destroy.\r\n * 3. updateBarStateAndEmitEvent: use to update bar states and emit events.\r\n */\n\n var createComponent = function createComponent(_ref) {\n var _render = _ref.render,\n components = _ref.components,\n mixins = _ref.mixins;\n return {\n name: 'vueScroll',\n props: {\n ops: {\n type: Object\n }\n },\n components: components,\n mixins: [api].concat(toConsumableArray([].concat(mixins))),\n created: function created() {\n var _this = this;\n\n /**\r\n * Begin to merge options\r\n */\n\n var _gfc = mergeObject(this.$vuescrollConfig || {}, {});\n var ops = mergeObject(baseConfig, _gfc);\n this.$options.propsData.ops = this.$options.propsData.ops || {};\n Object.keys(this.$options.propsData.ops).forEach(function (key) {\n {\n defineReactive(_this.mergedOptions, key, _this.$options.propsData.ops);\n }\n });\n // from ops to mergedOptions\n mergeObject(ops, this.mergedOptions);\n this._isVuescrollRoot = true;\n this.renderError = validateOps(this.mergedOptions);\n },\n render: function render(h) {\n var vm = this;\n if (vm.renderError) {\n return h('div', [[vm.$slots['default']]]);\n }\n if (!vm.touchManager) vm.touchManager = new touchManager();\n\n // vuescroll data\n var data = {\n style: {\n height: vm.vuescroll.state.height,\n width: vm.vuescroll.state.width,\n padding: 0,\n position: 'relative',\n overflow: 'hidden'\n },\n class: _extends({\n __vuescroll: true\n }, vm.classHooks)\n };\n var touchObj = vm.touchManager.getTouchObject();\n if (touchObj) {\n var _data$on;\n data.on = (_data$on = {}, defineProperty(_data$on, touchObj.touchenter, function () {\n vm.vuescroll.state.pointerLeave = false;\n vm.updateBarStateAndEmitEvent();\n vm.setClassHook('mouseEnter', true);\n }), defineProperty(_data$on, touchObj.touchleave, function () {\n vm.vuescroll.state.pointerLeave = true;\n vm.hideBar();\n vm.setClassHook('mouseEnter', false);\n }), defineProperty(_data$on, touchObj.touchmove, function () /* istanbul ignore next */{\n vm.vuescroll.state.pointerLeave = false;\n vm.updateBarStateAndEmitEvent();\n }), _data$on);\n }\n var ch = [_render(h, vm)].concat(toConsumableArray(createBar(h, vm)));\n var _customContainer = this.$slots['scroll-container'];\n if (_customContainer) {\n return insertChildrenIntoSlot(h, _customContainer, ch, data);\n }\n return h('div', data, [ch]);\n },\n mounted: function mounted() {\n var _this2 = this;\n if (!this.renderError) {\n this.initVariables();\n this.initWatchOpsChange();\n // Call external merged Api\n this.refreshInternalStatus();\n this.updatedCbs.push(function () {\n _this2.scrollToAnchor();\n // need to reflow to deal with the\n // latest thing.\n _this2.updateBarStateAndEmitEvent();\n });\n }\n },\n updated: function updated() {\n var _this3 = this;\n this.updatedCbs.forEach(function (cb) {\n cb.call(_this3);\n });\n // Clear\n this.updatedCbs = [];\n },\n beforeDestroy: function beforeDestroy() {\n if (this.destroy) {\n this.destroy();\n }\n },\n /** ------------------------------- Computed ----------------------------- */\n computed: {\n scrollPanelElm: function scrollPanelElm() {\n return this.$refs['scrollPanel']._isVue ? this.$refs['scrollPanel'].$el : this.$refs['scrollPanel'];\n }\n },\n data: function data() {\n return {\n vuescroll: {\n state: {\n isDragging: false,\n pointerLeave: true,\n isRailHover: false,\n /** Default sizeStrategies */\n height: '100%',\n width: '100%',\n // current size strategy\n currentSizeStrategy: 'percent',\n currentScrollState: null,\n currentScrollInfo: null\n }\n },\n bar: {\n vBar: {\n state: {\n posValue: 0,\n size: 0,\n opacity: 0\n }\n },\n hBar: {\n state: {\n posValue: 0,\n size: 0,\n opacity: 0\n }\n }\n },\n mergedOptions: {\n vuescroll: {},\n scrollPanel: {},\n scrollContent: {},\n rail: {},\n bar: {}\n },\n updatedCbs: [],\n renderError: false,\n classHooks: {\n hasVBar: false,\n hasHBar: false,\n vBarVisible: false,\n hBarVisible: false,\n vBarDragging: false,\n hBarDragging: false,\n clikingVerticalStartButton: false,\n clikingVerticalEndButton: false,\n clikingHorizontalStartButton: false,\n clikingHorizontalEndButton: false,\n mouseEnter: false\n }\n };\n },\n /** ------------------------------- Methods -------------------------------- */\n methods: {\n /** ------------------------ Handlers --------------------------- */\n\n scrollingComplete: function scrollingComplete() {\n this.updateBarStateAndEmitEvent('handle-scroll-complete');\n },\n setBarDrag: function setBarDrag(val) {\n /* istanbul ignore next */\n this.vuescroll.state.isDragging = val;\n },\n setClassHook: function setClassHook(name, value) {\n this.classHooks[name] = value;\n },\n /** ------------------------ Some Helpers --------------------------- */\n\n /*\r\n * To have a good ux, instead of hiding bar immediately, we hide bar\r\n * after some seconds by using this simple debounce-hidebar method.\r\n */\n showAndDefferedHideBar: function showAndDefferedHideBar(forceHideBar) {\n var _this4 = this;\n this.showBar();\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = 0;\n }\n this.timeoutId = setTimeout(function () {\n _this4.timeoutId = 0;\n _this4.hideBar(forceHideBar);\n }, this.mergedOptions.bar.showDelay);\n },\n showBar: function showBar() {\n var opacity = this.mergedOptions.bar.opacity;\n this.bar.vBar.state.opacity = opacity;\n this.bar.hBar.state.opacity = opacity;\n },\n hideBar: function hideBar(forceHideBar) {\n var _vuescroll$state = this.vuescroll.state,\n isDragging = _vuescroll$state.isDragging,\n isRailHover = _vuescroll$state.isRailHover;\n /* istanbul ignore next */\n\n if (isDragging || isRailHover) {\n return;\n }\n if (forceHideBar && !this.mergedOptions.bar.keepShow) {\n this.bar.hBar.state.opacity = 0;\n this.bar.vBar.state.opacity = 0;\n }\n\n // add isDragging condition\n // to prevent from hiding bar while dragging the bar\n if (!this.mergedOptions.bar.keepShow && !this.vuescroll.state.isDragging) {\n this.bar.vBar.state.opacity = 0;\n this.bar.hBar.state.opacity = 0;\n }\n },\n useNumbericSize: function useNumbericSize() {\n this.vuescroll.state.currentSizeStrategy = 'number';\n var _mergedOptions$scroll = this.mergedOptions.scrollPanel,\n maxHeight = _mergedOptions$scroll.maxHeight,\n maxWidth = _mergedOptions$scroll.maxWidth;\n var _$el$parentNode = this.$el.parentNode,\n parentClientHeight = _$el$parentNode.clientHeight,\n parentClientWidth = _$el$parentNode.clientWidth;\n var _scrollPanelElm = this.scrollPanelElm,\n scrollHeight = _scrollPanelElm.scrollHeight,\n scrollWidth = _scrollPanelElm.scrollWidth;\n var width = void 0;\n var height = void 0;\n if (maxHeight || maxWidth) {\n height = scrollHeight <= maxHeight ? undefined : maxHeight;\n width = scrollWidth <= maxWidth ? undefined : maxWidth;\n } else {\n height = parentClientHeight;\n width = parentClientWidth;\n }\n this.vuescroll.state.height = height ? height + 'px' : undefined;\n this.vuescroll.state.width = width ? width + 'px' : undefined;\n },\n usePercentSize: function usePercentSize() {\n this.vuescroll.state.currentSizeStrategy = 'percent';\n this.vuescroll.state.height = '100%';\n this.vuescroll.state.width = '100%';\n },\n // Set its size to be equal to its parentNode\n setVsSize: function setVsSize() {\n var sizeStrategy = this.mergedOptions.vuescroll.sizeStrategy;\n var _mergedOptions$scroll2 = this.mergedOptions.scrollPanel,\n maxHeight = _mergedOptions$scroll2.maxHeight,\n maxWidth = _mergedOptions$scroll2.maxWidth;\n var _scrollPanelElm2 = this.scrollPanelElm,\n clientHeight = _scrollPanelElm2.clientHeight,\n clientWidth = _scrollPanelElm2.clientWidth;\n if (sizeStrategy == 'number' || maxHeight && clientHeight > maxHeight || maxWidth && clientWidth > maxWidth) {\n this.useNumbericSize();\n } else if (sizeStrategy == 'percent' && clientHeight != maxHeight && clientWidth != maxWidth) {\n this.usePercentSize();\n }\n },\n /** ------------------------ Init --------------------------- */\n initWatchOpsChange: function initWatchOpsChange() {\n var _this5 = this;\n var watchOpts = {\n deep: true,\n sync: true\n };\n this.$watch('mergedOptions', function () {\n setTimeout(function () {\n if (_this5.isSmallChangeThisTick) {\n _this5.isSmallChangeThisTick = false;\n _this5.updateBarStateAndEmitEvent('options-change');\n return;\n }\n _this5.refreshInternalStatus();\n }, 0);\n }, watchOpts);\n\n /**\r\n * We also watch `small` changes, and when small changes happen, we send\r\n * a signal to vuescroll, to tell it:\r\n * 1. we don't need to registry resize\r\n * 2. we don't need to registry scroller.\r\n */\n smallChangeArray.forEach(function (opts) {\n _this5.$watch(opts, function () {\n _this5.isSmallChangeThisTick = true;\n }, watchOpts);\n });\n },\n // scrollTo hash-anchor while mounted component have mounted.\n scrollToAnchor: function scrollToAnchor() /* istanbul ignore next */{\n var validateHashSelector = function validateHashSelector(hash) {\n return /^#[a-zA-Z_]\\d*$/.test(hash);\n };\n var hash = window.location.hash;\n if (!hash || (hash = hash.slice(hash.lastIndexOf('#'))) && !validateHashSelector(hash)) {\n return;\n }\n var elm = document.querySelector(hash);\n if (!isChildInParent(elm, this.$el) || this.mergedOptions.scrollPanel.initialScrollY || this.mergedOptions.scrollPanel.initialScrollX) {\n return;\n }\n this.scrollIntoView(elm);\n }\n\n /** ------------------------ Registry Resize --------------------------- */\n }\n };\n };\n\n // begin importing\n\n var scrollPanel = {\n name: 'scrollPanel',\n props: {\n ops: {\n type: Object,\n required: true\n }\n },\n methods: {\n // trigger scrollPanel options initialScrollX,\n // initialScrollY\n updateInitialScroll: function updateInitialScroll() {\n var x = 0;\n var y = 0;\n var parent = getRealParent(this);\n if (this.ops.initialScrollX) {\n x = this.ops.initialScrollX;\n }\n if (this.ops.initialScrollY) {\n y = this.ops.initialScrollY;\n }\n if (x || y) {\n parent.scrollTo({\n x: x,\n y: y\n });\n }\n }\n },\n mounted: function mounted() {\n var _this = this;\n setTimeout(function () {\n if (!_this._isDestroyed) {\n _this.updateInitialScroll();\n }\n }, 0);\n },\n render: function render(h) {\n // eslint-disable-line\n var data = {\n class: ['__panel'],\n style: {\n position: 'relative',\n boxSizing: 'border-box'\n }\n };\n var parent = getRealParent(this);\n var _customPanel = parent.$slots['scroll-panel'];\n if (_customPanel) {\n return insertChildrenIntoSlot(h, _customPanel, this.$slots.default, data);\n }\n return h('div', data, [[this.$slots.default]]);\n }\n };\n\n /**\r\n * Init following things\r\n * 1. Component\r\n * 2. Render\r\n * 3. Config\r\n */\n function _install(core, render) {\n var _components;\n var extraConfigs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var extraValidators = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n var components = (_components = {}, defineProperty(_components, scrollPanel.name, scrollPanel), defineProperty(_components, bar.name, bar), _components);\n var opts = {};\n opts.components = components;\n opts.render = render;\n opts.mixins = core;\n var comp = createComponent(opts);\n\n // Init Config\n extendOpts(extraConfigs, extraValidators);\n return comp;\n }\n\n /**\r\n * Get the children of parent those are in viewport\r\n */\n function getCurrentViewportDom(parent, container) {\n var children = parent.children;\n var domFragment = [];\n var isCurrentview = function isCurrentview(dom) {\n var _dom$getBoundingClien = dom.getBoundingClientRect(),\n left = _dom$getBoundingClien.left,\n top = _dom$getBoundingClien.top,\n width = _dom$getBoundingClien.width,\n height = _dom$getBoundingClien.height;\n var _container$getBoundin = container.getBoundingClientRect(),\n parentLeft = _container$getBoundin.left,\n parentTop = _container$getBoundin.top,\n parentHeight = _container$getBoundin.height,\n parentWidth = _container$getBoundin.width;\n if (left - parentLeft + width > 0 && left - parentLeft < parentWidth && top - parentTop + height > 0 && top - parentTop < parentHeight) {\n return true;\n }\n return false;\n };\n for (var i = 0; i < children.length; i++) {\n var dom = children.item(i);\n if (isCurrentview(dom) && !dom.isResizeElm) {\n domFragment.push(dom);\n }\n }\n return domFragment;\n }\n\n /**\r\n * Compatible to scroller's animation function\r\n */\n function createEasingFunction(easing, easingPattern) {\n return function (time) {\n return easingPattern(easing, time);\n };\n }\n\n /**\r\n * Calculate the easing pattern\r\n * @link https://github.com/cferdinandi/smooth-scroll/blob/master/src/js/smooth-scroll.js\r\n * modified by wangyi7099\r\n * @param {String} type Easing pattern\r\n * @param {Number} time Time animation should take to complete\r\n * @returns {Number}\r\n */\n function easingPattern(easing, time) {\n var pattern = null;\n /* istanbul ignore next */\n {\n // Default Easing Patterns\n if (easing === 'easeInQuad') pattern = time * time; // accelerating from zero velocity\n if (easing === 'easeOutQuad') pattern = time * (2 - time); // decelerating to zero velocity\n if (easing === 'easeInOutQuad') pattern = time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time; // acceleration until halfway, then deceleration\n if (easing === 'easeInCubic') pattern = time * time * time; // accelerating from zero velocity\n if (easing === 'easeOutCubic') pattern = --time * time * time + 1; // decelerating to zero velocity\n if (easing === 'easeInOutCubic') pattern = time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1; // acceleration until halfway, then deceleration\n if (easing === 'easeInQuart') pattern = time * time * time * time; // accelerating from zero velocity\n if (easing === 'easeOutQuart') pattern = 1 - --time * time * time * time; // decelerating to zero velocity\n if (easing === 'easeInOutQuart') pattern = time < 0.5 ? 8 * time * time * time * time : 1 - 8 * --time * time * time * time; // acceleration until halfway, then deceleration\n if (easing === 'easeInQuint') pattern = time * time * time * time * time; // accelerating from zero velocity\n if (easing === 'easeOutQuint') pattern = 1 + --time * time * time * time * time; // decelerating to zero velocity\n if (easing === 'easeInOutQuint') pattern = time < 0.5 ? 16 * time * time * time * time * time : 1 + 16 * --time * time * time * time * time; // acceleration until halfway, then deceleration\n }\n\n return pattern || time; // no easing, no acceleration\n }\n\n function noop() {\n return true;\n }\n\n /* istanbul ignore next */\n var now = Date.now || function () {\n return new Date().getTime();\n };\n var ScrollControl = function () {\n function ScrollControl() {\n classCallCheck(this, ScrollControl);\n this.init();\n this.isRunning = false;\n }\n createClass(ScrollControl, [{\n key: 'pause',\n value: function pause() {\n /* istanbul ignore if */\n if (!this.isRunning) return;\n this.isPaused = true;\n }\n }, {\n key: 'stop',\n value: function stop() {\n this.isStopped = true;\n }\n }, {\n key: 'continue',\n value: function _continue() {\n /* istanbul ignore if */\n if (!this.isPaused) return;\n this.isPaused = false;\n this.ts = now() - this.percent * this.spd;\n this.execScroll();\n }\n }, {\n key: 'startScroll',\n value: function startScroll(st, ed, spd) {\n var stepCb = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;\n var completeCb = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : noop;\n var vertifyCb = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : noop;\n var easingMethod = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : noop;\n var df = ed - st;\n var dir = df > 0 ? -1 : 1;\n var nt = now();\n if (!this.isRunning) {\n this.init();\n }\n if (dir != this.dir || nt - this.ts > 200) {\n this.ts = nt;\n this.dir = dir;\n this.st = st;\n this.ed = ed;\n this.df = df;\n } /* istanbul ignore next */else {\n this.df += df;\n }\n this.spd = spd;\n this.completeCb = completeCb;\n this.vertifyCb = vertifyCb;\n this.stepCb = stepCb;\n this.easingMethod = easingMethod;\n if (!this.isRunning) this.execScroll();\n }\n }, {\n key: 'execScroll',\n value: function execScroll() {\n var _this = this;\n if (!this.df) return;\n var percent = this.percent || 0;\n this.percent = 0;\n this.isRunning = true;\n var loop = function loop() {\n /* istanbul ignore if */\n if (!_this.isRunning || !_this.vertifyCb(percent) || _this.isStopped) {\n _this.isRunning = false;\n return;\n }\n percent = (now() - _this.ts) / _this.spd;\n if (_this.isPaused) {\n _this.percent = percent;\n _this.isRunning = false;\n return;\n }\n if (percent < 1) {\n var value = _this.st + _this.df * _this.easingMethod(percent);\n _this.stepCb(value);\n _this.ref(loop);\n } else {\n // trigger complete\n _this.stepCb(_this.st + _this.df);\n _this.completeCb();\n _this.isRunning = false;\n }\n };\n this.ref(loop);\n }\n }, {\n key: 'init',\n value: function init() {\n this.st = 0;\n this.ed = 0;\n this.df = 0;\n this.spd = 0;\n this.ts = 0;\n this.dir = 0;\n this.ref = requestAnimationFrame(window);\n this.isPaused = false;\n this.isStopped = false;\n }\n }]);\n return ScrollControl;\n }();\n function scrollTo(elm, x, y) {\n var speed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 300;\n var easing = arguments[4];\n var scrollingComplete = arguments[5];\n var scrollLeft = void 0,\n scrollTop = void 0,\n scrollHeight = void 0,\n scrollWidth = void 0,\n clientWidth = void 0,\n clientHeight = void 0;\n var _elm = elm,\n nodeType = _elm.nodeType;\n var scrollX = new ScrollControl();\n var scrollY = new ScrollControl();\n if (!nodeType) {\n warn('You must pass a dom for the first param, ' + 'for window scrolling, ' + 'you can pass document as the first param.');\n return;\n }\n if (nodeType == 9) {\n // document\n elm = elm.scrollingElement;\n }\n var _elm2 = elm;\n scrollLeft = _elm2.scrollLeft;\n scrollTop = _elm2.scrollTop;\n scrollHeight = _elm2.scrollHeight;\n scrollWidth = _elm2.scrollWidth;\n clientWidth = _elm2.clientWidth;\n clientHeight = _elm2.clientHeight;\n if (typeof x === 'undefined') {\n x = scrollLeft;\n } else {\n x = getNumericValue(x, scrollWidth - clientWidth);\n }\n if (typeof y === 'undefined') {\n y = scrollTop;\n } else {\n y = getNumericValue(y, scrollHeight - clientHeight);\n }\n var easingMethod = createEasingFunction(easing, easingPattern);\n scrollX.startScroll(scrollLeft, x, speed, function (dx) {\n elm.scrollLeft = dx;\n }, scrollingComplete, undefined, easingMethod);\n scrollY.startScroll(scrollTop, y, speed, function (dy) {\n elm.scrollTop = dy;\n }, scrollingComplete, undefined, easingMethod);\n }\n var nativeApi = {\n mounted: function mounted() {\n // registry scroll\n this.scrollX = new ScrollControl();\n this.scrollY = new ScrollControl();\n },\n methods: {\n nativeStop: function nativeStop() {\n this.scrollX.stop();\n this.scrollY.stop();\n },\n nativePause: function nativePause() {\n this.scrollX.pause();\n this.scrollY.pause();\n },\n nativeContinue: function nativeContinue() {\n this.scrollX.continue();\n this.scrollY.continue();\n },\n nativeScrollTo: function nativeScrollTo(x, y, speed, easing) {\n if (speed === false) ;else if (typeof speed === 'undefined') {\n speed = this.mergedOptions.scrollPanel.speed;\n }\n var elm = this.scrollPanelElm;\n var scrollTop = elm.scrollTop,\n scrollLeft = elm.scrollLeft,\n scrollWidth = elm.scrollWidth,\n clientWidth = elm.clientWidth,\n scrollHeight = elm.scrollHeight,\n clientHeight = elm.clientHeight;\n if (typeof x === 'undefined') {\n x = scrollLeft;\n } else {\n x = getNumericValue(x, scrollWidth - clientWidth);\n }\n if (typeof y === 'undefined') {\n y = scrollTop;\n } else {\n y = getNumericValue(y, scrollHeight - clientHeight);\n }\n if (speed) {\n easing = easing || this.mergedOptions.scrollPanel.easing;\n var easingMethod = createEasingFunction(easing, easingPattern);\n if (x != scrollLeft) {\n this.scrollX.startScroll(scrollLeft, x, speed, function (x) {\n elm.scrollLeft = x;\n }, this.scrollingComplete.bind(this), undefined, easingMethod);\n }\n if (y != scrollTop) {\n this.scrollY.startScroll(scrollTop, y, speed, function (y) {\n elm.scrollTop = y;\n }, this.scrollingComplete.bind(this), undefined, easingMethod);\n }\n } else {\n elm.scrollTop = y;\n elm.scrollLeft = x;\n }\n },\n getCurrentviewDomNative: function getCurrentviewDomNative() {\n var parent = this.scrollContentElm;\n var domFragment = getCurrentViewportDom(parent, this.$el);\n return domFragment;\n }\n }\n };\n function getPanelData(context) {\n // scrollPanel data start\n var data = {\n ref: 'scrollPanel',\n style: {\n height: '100%',\n overflowY: 'scroll',\n overflowX: 'scroll'\n },\n class: [],\n nativeOn: {\n '&scroll': context.handleScroll\n },\n props: {\n ops: context.mergedOptions.scrollPanel\n }\n };\n context.scrollYEnable = true;\n context.scrollXEnable = true;\n data.nativeOn.DOMMouseScroll = data.nativeOn.mousewheel = context.onMouseWheel;\n var _context$mergedOption = context.mergedOptions.scrollPanel,\n scrollingY = _context$mergedOption.scrollingY,\n scrollingX = _context$mergedOption.scrollingX;\n if (!context.bar.hBar.state.size || !scrollingX) {\n context.scrollXEnable = false;\n data.style.overflowX = 'hidden';\n }\n if (!context.bar.vBar.state.size || !scrollingY) {\n context.scrollYEnable = false;\n data.style.overflowY = 'hidden';\n }\n var gutter = getGutter();\n /* istanbul ignore if */\n if (!gutter) {\n createHideBarStyle();\n data.class.push('__hidebar');\n if (isIos()) {\n data.style['-webkit-overflow-scrolling'] = 'touch';\n }\n } else {\n // hide system bar by use a negative value px\n // gutter should be 0 when manually disable scrollingX #14\n if (context.bar.vBar.state.size && context.mergedOptions.scrollPanel.scrollingY) {\n if (context.mergedOptions.scrollPanel.verticalNativeBarPos == 'right') {\n data.style.marginRight = '-' + gutter + 'px';\n } /* istanbul ignore next */else {\n data.style.marginLeft = '-' + gutter + 'px';\n }\n }\n if (context.bar.hBar.state.size && context.mergedOptions.scrollPanel.scrollingX) {\n data.style.height = 'calc(100% + ' + gutter + 'px)';\n }\n }\n\n // clear legency styles of slide mode...\n data.style.transformOrigin = '';\n data.style.transform = '';\n return data;\n }\n\n /**\r\n * create a scrollPanel\r\n *\r\n * @param {any} size\r\n * @param {any} context\r\n * @returns\r\n */\n function createPanel(h, context) {\n var data = {};\n data = getPanelData(context);\n return h('scrollPanel', data, [getPanelChildren(h, context)]);\n }\n function getPanelChildren(h, context) {\n var viewStyle = {\n position: 'relative',\n 'box-sizing': 'border-box',\n 'min-width': '100%',\n 'min-height': '100%'\n };\n var data = {\n style: viewStyle,\n ref: 'scrollContent',\n class: '__view'\n };\n var _customContent = context.$slots['scroll-content'];\n if (context.mergedOptions.scrollPanel.scrollingX) {\n viewStyle.width = getComplitableStyle('width', 'fit-content');\n } else {\n data.style['width'] = '100%';\n }\n if (context.mergedOptions.scrollPanel.padding) {\n data.style.paddingRight = context.mergedOptions.rail.size;\n }\n if (_customContent) {\n return insertChildrenIntoSlot(h, _customContent, context.$slots.default, data);\n }\n return h('div', data, [context.$slots.default]);\n }\n function getPanelData$1(context) {\n // scrollPanel data start\n var data = {\n ref: 'scrollPanel',\n style: {\n 'user-select': 'none',\n '-webkit-user-select': 'none',\n 'min-width': '100%',\n 'min-height': '100%'\n },\n class: [],\n props: {\n ops: context.mergedOptions.scrollPanel\n }\n };\n data.class.push('__slide');\n /* istanbul ignore if */\n if (isIos()) {\n data.style = defineProperty({}, '-webkit-overflow-scrolling', 'touch');\n }\n if (context.mergedOptions.vuescroll.renderMethod == 'transform') {\n data.style['transform-origin'] = 'left top 0px';\n }\n var _context$mergedOption = context.mergedOptions.scrollPanel,\n scrollingX = _context$mergedOption.scrollingX,\n scrollingY = _context$mergedOption.scrollingY,\n padding = _context$mergedOption.padding;\n if (scrollingX && !context.refreshLoad) {\n var width = getComplitableStyle('width', 'fit-content');\n if (width) {\n data.style['width'] = width;\n } /* istanbul ignore next */else {\n data['display'] = 'inline-block';\n }\n }\n\n /* istanbul ignore if */\n if (!scrollingX) {\n data.class.push('x-hidden');\n }\n /* istanbul ignore if */\n if (!scrollingY) {\n data.class.push('y-hidden');\n }\n if (padding) {\n data.style.paddingRight = context.mergedOptions.rail.size;\n }\n return data;\n }\n function getPanelChildren$1(h, context) {\n var renderChildren = getVnodeInfo(context.$slots['scroll-panel']).ch || context.$slots.default;\n var finalChildren = [];\n\n /* istanbul ignore if */\n if (!renderChildren) {\n context.$slots.default = renderChildren = [];\n }\n\n // handle refresh\n if (context.mergedOptions.vuescroll.pullRefresh.enable) {\n finalChildren.push(h('div', {\n 'class': '__refresh',\n style: {\n visibility: context.refrehDomVisiable ? '' : 'hidden'\n },\n ref: __REFRESH_DOM_NAME,\n key: __REFRESH_DOM_NAME\n }, [createTipDom(h, context, 'refresh', context.pullRefreshTip)]));\n }\n finalChildren.push(renderChildren);\n\n // handle load\n if (context.mergedOptions.vuescroll.pushLoad.enable) {\n finalChildren.push(h('div', {\n ref: __LOAD_DOM_NAME,\n key: __LOAD_DOM_NAME,\n 'class': '__load',\n style: {\n visibility: context.loadDomVisiable ? '' : 'hidden'\n }\n }, [createTipDom(h, context, 'load', context.pushLoadTip)]));\n }\n return finalChildren;\n }\n\n // Create load or refresh tip dom of each stages\n function createTipDom(h, context, type, tip) {\n var stage = context.vuescroll.state[type + 'Stage'];\n var dom = null;\n // Return user specified animation dom\n /* istanbul ignore if */\n if (dom = context.$slots[type + '-' + stage]) {\n return dom;\n }\n switch (stage) {\n // The dom will show at deactive stage\n case 'deactive':\n case 'active':\n {\n var className = 'active';\n if (stage == 'deactive') {\n className += ' deactive';\n }\n dom = h('svg', {\n 'class': className,\n attrs: {\n version: '1.1',\n xmlns: 'http://www.w3.org/2000/svg',\n xmlnsXlink: 'http://www.w3.org/1999/xlink',\n x: '0px',\n y: '0px',\n viewBox: '0 0 1000 1000',\n 'enable-background': 'new 0 0 1000 1000',\n xmlSpace: 'preserve'\n }\n }, [h('metadata', [' Svg Vector Icons : http://www.sfont.cn ']), h('g', [h('g', {\n attrs: {\n transform: 'matrix(1 0 0 -1 0 1008)'\n }\n }, [h('path', {\n attrs: {\n d: 'M10,543l490,455l490-455L885,438L570,735.5V18H430v717.5L115,438L10,543z'\n }\n })])])]);\n }\n break;\n case 'start':\n dom = h('svg', {\n attrs: {\n viewBox: '0 0 50 50'\n },\n 'class': 'start'\n }, [h('circle', {\n attrs: {\n stroke: 'true',\n cx: '25',\n cy: '25',\n r: '20'\n },\n 'class': 'bg-path'\n }), h('circle', {\n attrs: {\n cx: '25',\n cy: '25',\n r: '20'\n },\n 'class': 'active-path'\n })]);\n break;\n case 'beforeDeactive':\n dom = h('svg', {\n attrs: {\n viewBox: '0 0 1024 1024',\n version: '1.1',\n xmlns: 'http://www.w3.org/2000/svg',\n 'p-id': '3562'\n }\n }, [h('path', {\n attrs: {\n d: 'M512 0C229.706831 0 0 229.667446 0 512s229.667446 512 512 512c282.293169 0 512-229.667446 512-512S794.332554 0 512 0z m282.994215 353.406031L433.2544 715.145846a31.484062 31.484062 0 0 1-22.275938 9.231754h-0.4096a31.586462 31.586462 0 0 1-22.449231-9.814646L228.430769 546.327631a31.507692 31.507692 0 0 1 45.701908-43.386093l137.4208 144.785724L750.442338 308.854154a31.507692 31.507692 0 1 1 44.551877 44.551877z',\n fill: '',\n 'p-id': '3563'\n }\n })]);\n break;\n }\n return [dom, tip];\n }\n\n /**\r\n * create a scrollPanel\r\n *\r\n * @param {any} size\r\n * @param {any} context\r\n * @returns\r\n */\n function createPanel$1(h, context) {\n var data = getPanelData$1(context);\n return h('scrollPanel', data, [getPanelChildren$1(h, context)]);\n }\n\n // begin importing\n /**\r\n * create a scrollPanel\r\n *\r\n * @param {any} size\r\n * @param {any} vm\r\n * @returns\r\n */\n function createPanel$2(h, vm) {\n if (vm.mode == 'native') {\n return createPanel(h, vm);\n } else if (vm.mode == 'slide') {\n return createPanel$1(h, vm);\n }\n }\n\n // detect content size change\n function installResizeDetection(element, callback) {\n return injectObject(element, callback);\n }\n function injectObject(element, callback) {\n if (element.hasResized) {\n return;\n }\n var OBJECT_STYLE = 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none; padding: 0; margin: 0; opacity: 0; z-index: -1000; pointer-events: none;';\n // define a wrap due to ie's zIndex bug\n var objWrap = document.createElement('div');\n objWrap.style.cssText = OBJECT_STYLE;\n var object = document.createElement('object');\n object.style.cssText = OBJECT_STYLE;\n object.type = 'text/html';\n object.tabIndex = -1;\n object.onload = function () {\n eventCenter(object.contentDocument.defaultView, 'resize', callback);\n };\n // https://github.com/wnr/element-resize-detector/blob/aafe9f7ea11d1eebdab722c7c5b86634e734b9b8/src/detection-strategy/object.js#L159\n if (!isIE()) {\n object.data = 'about:blank';\n }\n objWrap.isResizeElm = true;\n objWrap.appendChild(object);\n element.appendChild(objWrap);\n if (isIE()) {\n object.data = 'about:blank';\n }\n return function destroy() {\n if (object.contentDocument) {\n eventCenter(object.contentDocument.defaultView, 'resize', callback, 'off');\n }\n element.removeChild(objWrap);\n element.hasResized = false;\n };\n }\n var slideApi = {\n methods: {\n slideScrollTo: function slideScrollTo(x, y, speed, easing) {\n var _getPosition = this.getPosition(),\n scrollLeft = _getPosition.scrollLeft,\n scrollTop = _getPosition.scrollTop;\n x = getNumericValue(x || scrollLeft, this.scroller.__maxScrollLeft);\n y = getNumericValue(y || scrollTop, this.scroller.__maxScrollTop);\n this.scroller.scrollTo(x, y, speed > 0, undefined, false, speed, easing);\n },\n zoomBy: function zoomBy(factor, animate, originLeft, originTop, callback) {\n if (!this.scroller) {\n warn('zoomBy and zoomTo are only for slide mode!');\n return;\n }\n this.scroller.zoomBy(factor, animate, originLeft, originTop, callback);\n },\n zoomTo: function zoomTo(level) {\n var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var originLeft = arguments[2];\n var originTop = arguments[3];\n var callback = arguments[4];\n if (!this.scroller) {\n warn('zoomBy and zoomTo are only for slide mode!');\n return;\n }\n this.scroller.zoomTo(level, animate, originLeft, originTop, callback);\n },\n getCurrentPage: function getCurrentPage() {\n if (!this.scroller || !this.mergedOptions.vuescroll.paging) {\n warn('getCurrentPage and goToPage are only for slide mode and paging is enble!');\n return;\n }\n return this.scroller.getCurrentPage();\n },\n goToPage: function goToPage(dest) {\n var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.scroller || !this.mergedOptions.vuescroll.paging) {\n warn('getCurrentPage and goToPage are only for slide mode and paging is enble!');\n return;\n }\n this.scroller.goToPage(dest, animate);\n },\n triggerRefreshOrLoad: function triggerRefreshOrLoad(type) {\n if (!this.scroller) {\n warn('You can only use triggerRefreshOrLoad in slide mode!');\n return;\n }\n var isRefresh = this.mergedOptions.vuescroll.pullRefresh.enable;\n var isLoad = this.mergedOptions.vuescroll.pushLoad.enable;\n if (type == 'refresh' && !isRefresh) {\n warn('refresh must be enabled!');\n return;\n } else if (type == 'load' && !isLoad) {\n warn('load must be enabled and content\\'s height > container\\'s height!');\n return;\n } else if (type !== 'refresh' && type !== 'load') {\n warn('param must be one of load and refresh!');\n return;\n }\n\n /* istanbul ignore if */\n if (this.vuescroll.state[type + 'Stage'] == 'start') {\n return;\n }\n this.scroller.triggerRefreshOrLoad(type);\n return true;\n },\n getCurrentviewDomSlide: function getCurrentviewDomSlide() {\n var parent = this.scrollPanelElm;\n var domFragment = getCurrentViewportDom(parent, this.$el);\n return domFragment;\n }\n }\n };\n var api$1 = {\n // mix slide and nitive modes apis.\n mixins: [slideApi, nativeApi],\n methods: {\n // private api\n internalScrollTo: function internalScrollTo(destX, destY, speed, easing) {\n if (this.mode == 'native') {\n this.nativeScrollTo(destX, destY, speed, easing);\n }\n // for non-native we use scroller's scorllTo\n else if (this.mode == 'slide') {\n this.slideScrollTo(destX, destY, speed, easing);\n }\n },\n stop: function stop() {\n this.nativeStop();\n },\n pause: function pause() {\n this.nativePause();\n },\n continue: function _continue() {\n this.nativeContinue();\n },\n getCurrentviewDom: function getCurrentviewDom() {\n return this.mode == 'slide' ? this.getCurrentviewDomSlide() : this.getCurrentviewDomNative();\n }\n }\n };\n\n /*\r\n * Scroller\r\n * http://github.com/zynga/scroller\r\n *\r\n * Copyright 2011, Zynga Inc.\r\n * Licensed under the MIT License.\r\n * https://raw.github.com/zynga/scroller/master/MIT-LICENSE.txt\r\n *\r\n * Based on the work of: Unify Project (unify-project.org)\r\n * http://unify-project.org\r\n * Copyright 2011, Deutsche Telekom AG\r\n * License: MIT + Apache (V2)\r\n */\n\n var time = Date.now || function () {\n return +new Date();\n };\n var desiredFrames = 60;\n var millisecondsPerSecond = 1000;\n var running = {};\n var counter = 1;\n var core = {\n effect: {}\n };\n var global = null;\n if (typeof window !== 'undefined') {\n global = window;\n } else {\n global = {};\n }\n core.effect.Animate = {\n /**\r\n * A requestAnimationFrame wrapper / polyfill.\r\n *\r\n * @param callback {Function} The callback to be invoked before the next repaint.\r\n * @param root {HTMLElement} The root element for the repaint\r\n */\n requestAnimationFrame: requestAnimationFrame(global),\n /**\r\n * Stops the given animation.\r\n *\r\n * @param id {Integer} Unique animation ID\r\n * @return {Boolean} Whether the animation was stopped (aka, was running before)\r\n */\n stop: function stop(id) {\n var cleared = running[id] != null;\n if (cleared) {\n running[id] = null;\n }\n return cleared;\n },\n /**\r\n * Whether the given animation is still running.\r\n *\r\n * @param id {Integer} Unique animation ID\r\n * @return {Boolean} Whether the animation is still running\r\n */\n isRunning: function isRunning(id) {\n return running[id] != null;\n },\n /**\r\n * Start the animation.\r\n *\r\n * @param stepCallback {Function} Pointer to function which is executed on every step.\r\n * Signature of the method should be `function(percent, now, virtual) { return continueWithAnimation; }`\r\n * @param verifyCallback {Function} Executed before every animation step.\r\n * Signature of the method should be `function() { return continueWithAnimation; }`\r\n * @param completedCallback {Function}\r\n * Signature of the method should be `function(droppedFrames, finishedAnimation) {}`\r\n * @param duration {Integer} Milliseconds to run the animation\r\n * @param easingMethod {Function} Pointer to easing function\r\n * Signature of the method should be `function(percent) { return modifiedValue; }`\r\n * @param root {Element ? document.body} Render root, when available. Used for internal\r\n * usage of requestAnimationFrame.\r\n * @return {Integer} Identifier of animation. Can be used to stop it any time.\r\n */\n start: function start(stepCallback, verifyCallback, completedCallback, duration, easingMethod, root) {\n var start = time();\n var lastFrame = start;\n var percent = 0;\n var dropCounter = 0;\n var id = counter++;\n if (!root) {\n root = document.body;\n }\n\n // Compacting running db automatically every few new animations\n if (id % 20 === 0) {\n var newRunning = {};\n for (var usedId in running) {\n newRunning[usedId] = true;\n }\n running = newRunning;\n }\n\n // This is the internal step method which is called every few milliseconds\n var step = function step(virtual) {\n // Normalize virtual value\n var render = virtual !== true;\n\n // Get current time\n var now = time();\n\n // Verification is executed before next animation step\n if (!running[id] || verifyCallback && !verifyCallback(id)) {\n running[id] = null;\n completedCallback && completedCallback(desiredFrames - dropCounter / ((now - start) / millisecondsPerSecond), id, false);\n return;\n }\n\n // For the current rendering to apply let's update omitted steps in memory.\n // This is important to bring internal state variables up-to-date with progress in time.\n if (render) {\n var droppedFrames = Math.round((now - lastFrame) / (millisecondsPerSecond / desiredFrames)) - 1;\n for (var j = 0; j < Math.min(droppedFrames, 4); j++) {\n step(true);\n dropCounter++;\n }\n }\n if (!running[id]) {\n return;\n }\n\n // Compute percent value\n if (duration) {\n percent = (now - start) / duration;\n if (percent > 1) {\n percent = 1;\n }\n }\n\n // Execute step callback, then...\n var value = easingMethod ? easingMethod(percent) : percent;\n if ((stepCallback(value, now, render) === false || percent === 1) && render) {\n running[id] = null;\n completedCallback && completedCallback(desiredFrames - dropCounter / ((now - start) / millisecondsPerSecond), id, percent === 1 || duration == null);\n } else if (render) {\n lastFrame = now;\n core.effect.Animate.requestAnimationFrame(step, root);\n }\n };\n\n // Mark as running\n running[id] = true;\n\n // Init first step\n core.effect.Animate.requestAnimationFrame(step, root);\n\n // Return unique animation ID\n return id;\n }\n };\n\n /*\r\n * Scroller\r\n * http://github.com/zynga/scroller\r\n *\r\n * modified by wangyi7099\r\n *\r\n * Copyright 2011, Zynga Inc.\r\n * Licensed under the MIT License.\r\n * https://raw.github.com/zynga/scroller/master/MIT-LICENSE.txt\r\n *\r\n * Based on the work of: Unify Project (unify-project.org)\r\n * http://unify-project.org\r\n * Copyright 2011, Deutsche Telekom AG\r\n * License: MIT + Apache (V2)\r\n */\n\n var animatingMethod = null;\n var noAnimatingMethod = null;\n function Scroller(callback, options) {\n this.__callback = callback;\n this.options = {\n /** Enable scrolling on x-axis */\n scrollingX: true,\n /** Enable scrolling on y-axis */\n scrollingY: true,\n /** Enable animations for deceleration, snap back, zooming and scrolling */\n animating: true,\n /** duration for animations triggered by scrollTo/zoomTo */\n animationDuration: 250,\n /** Enable bouncing (content can be slowly moved outside and jumps back after releasing) */\n bouncing: {\n top: 100,\n bottom: 100,\n left: 100,\n right: 100\n },\n /** Enable locking to the main axis if user moves only slightly on one of them at start */\n locking: true,\n /** Enable pagination mode (switching between full page content panes) */\n paging: false,\n /** Enable snapping of content to a configured pixel grid */\n snapping: false,\n /** Enable zooming of content via API, fingers and mouse wheel */\n zooming: false,\n /** Minimum zoom level */\n minZoom: 0.5,\n /** Maximum zoom level */\n maxZoom: 3,\n /** Multiply or decrease scrolling speed **/\n speedMultiplier: 1,\n /** Callback that is fired on the later of touch end or deceleration end,\r\n provided that another scrolling action has not begun. Used to know\r\n when to fade out a scrollbar. */\n scrollingComplete: NOOP,\n animatingEasing: 'easeOutCubic',\n noAnimatingEasing: 'easeInOutCubic',\n /** This configures the amount of change applied to deceleration when reaching boundaries **/\n penetrationDeceleration: 0.03,\n /** This configures the amount of change applied to acceleration when reaching boundaries **/\n penetrationAcceleration: 0.08\n };\n for (var key in options) {\n this.options[key] = options[key];\n }\n animatingMethod = createEasingFunction(this.options.animatingEasing, easingPattern);\n noAnimatingMethod = createEasingFunction(this.options.noAnimatingEasing, easingPattern);\n }\n var members = {\n /*\r\n ---------------------------------------------------------------------------\r\n INTERNAL FIELDS :: STATUS\r\n ---------------------------------------------------------------------------\r\n */\n\n /** {Boolean} Whether only a single finger is used in touch handling */\n __isSingleTouch: false,\n /** {Boolean} Whether a touch event sequence is in progress */\n __isTracking: false,\n /** {Boolean} Whether a deceleration animation went to completion. */\n __didDecelerationComplete: false,\n /**\r\n * {Boolean} Whether a gesture zoom/rotate event is in progress. Activates when\r\n * a gesturestart event happens. This has higher priority than dragging.\r\n */\n __isGesturing: false,\n /**\r\n * {Boolean} Whether the user has moved by such a distance that we have enabled\r\n * dragging mode. Hint: It's only enabled after some pixels of movement to\r\n * not interrupt with clicks etc.\r\n */\n __isDragging: false,\n /**\r\n * {Boolean} Not touching and dragging anymore, and smoothly animating the\r\n * touch sequence using deceleration.\r\n */\n __isDecelerating: false,\n /**\r\n * {Boolean} Smoothly animating the currently configured change\r\n */\n __isAnimating: false,\n /*\r\n ---------------------------------------------------------------------------\r\n INTERNAL FIELDS :: DIMENSIONS\r\n ---------------------------------------------------------------------------\r\n */\n\n /** {Integer} Available outer left position (from document perspective) */\n __clientLeft: 0,\n /** {Integer} Available outer top position (from document perspective) */\n __clientTop: 0,\n /** {Integer} Available outer width */\n __clientWidth: 0,\n /** {Integer} Available outer height */\n __clientHeight: 0,\n /** {Integer} Outer width of content */\n __contentWidth: 0,\n /** {Integer} Outer height of content */\n __contentHeight: 0,\n /** {Integer} Snapping width for content */\n __snapWidth: 100,\n /** {Integer} Snapping height for content */\n __snapHeight: 100,\n /** {Integer} Height to assign to refresh area */\n __refreshHeight: null,\n /** {Integer} Height to assign to refresh area */\n __loadHeight: null,\n /** {Boolean} Whether the refresh process is enabled when the event is released now */\n __refreshActive: false,\n /** {Function} Callback to execute on activation. This is for signalling the user about a refresh is about to happen when he release */\n __refreshActivate: null,\n __refreshBeforeDeactivate: null,\n /** {Function} Callback to execute on deactivation. This is for signalling the user about the refresh being cancelled */\n __refreshDeactivate: null,\n /** {Function} Callback to execute to start the actual refresh. Call {@link #refreshFinish} when done */\n __refreshStart: null,\n __loadActive: null,\n __loadActivate: null,\n __loadBeforeDeactivate: null,\n __loadDeactivate: null,\n __loadStart: null,\n /** {Number} Zoom level */\n __zoomLevel: 1,\n /** {Number} Scroll position on x-axis */\n __scrollLeft: 0,\n /** {Number} Scroll position on y-axis */\n __scrollTop: 0,\n /** {Integer} Maximum allowed scroll position on x-axis */\n __maxScrollLeft: 0,\n /** {Integer} Maximum allowed scroll position on y-axis */\n __maxScrollTop: 0,\n /* {Number} Scheduled left position (final position when animating) */\n __scheduledLeft: 0,\n /* {Number} Scheduled top position (final position when animating) */\n __scheduledTop: 0,\n /* {Number} Scheduled zoom level (final scale when animating) */\n __scheduledZoom: 0,\n /**\r\n * current page\r\n */\n __currentPageX: null,\n __currentPageY: null,\n /**\r\n * total page\r\n */\n __totalXPage: null,\n __totalYPage: null,\n /*\r\n ---------------------------------------------------------------------------\r\n INTERNAL FIELDS :: LAST POSITIONS\r\n ---------------------------------------------------------------------------\r\n */\n /** whether the scroller is disabled or not */\n __disable: false,\n /** {Number} Left position of finger at start */\n __lastTouchLeft: null,\n /** {Number} Top position of finger at start */\n __lastTouchTop: null,\n /** {Date} Timestamp of last move of finger. Used to limit tracking range for deceleration speed. */\n __lastTouchMove: null,\n /** {Array} List of positions, uses three indexes for each state: left, top, timestamp */\n __positions: null,\n /*\r\n ---------------------------------------------------------------------------\r\n INTERNAL FIELDS :: DECELERATION SUPPORT\r\n ---------------------------------------------------------------------------\r\n */\n\n /** {Integer} Minimum left scroll position during deceleration */\n __minDecelerationScrollLeft: null,\n /** {Integer} Minimum top scroll position during deceleration */\n __minDecelerationScrollTop: null,\n /** {Integer} Maximum left scroll position during deceleration */\n __maxDecelerationScrollLeft: null,\n /** {Integer} Maximum top scroll position during deceleration */\n __maxDecelerationScrollTop: null,\n /** {Number} Current factor to modify horizontal scroll position with on every step */\n __decelerationVelocityX: null,\n /** {Number} Current factor to modify vertical scroll position with on every step */\n __decelerationVelocityY: null,\n /*\r\n ---------------------------------------------------------------------------\r\n PUBLIC API\r\n ---------------------------------------------------------------------------\r\n */\n\n /**\r\n * Configures the dimensions of the client (outer) and content (inner) elements.\r\n * Requires the available space for the outer element and the outer size of the inner element.\r\n * All values which are falsy (null or zero etc.) are ignored and the old value is kept.\r\n *\r\n * @param clientWidth {Integer ? null} Inner width of outer element\r\n * @param clientHeight {Integer ? null} Inner height of outer element\r\n * @param contentWidth {Integer ? null} Outer width of inner element\r\n * @param contentHeight {Integer ? null} Outer height of inner element\r\n */\n setDimensions: function setDimensions(clientWidth, clientHeight, contentWidth, contentHeight, animate) {\n var noScroll = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n var self = this;\n\n // Only update values which are defined\n if (clientWidth === +clientWidth) {\n self.__clientWidth = clientWidth;\n }\n if (clientHeight === +clientHeight) {\n self.__clientHeight = clientHeight;\n }\n if (contentWidth === +contentWidth) {\n self.__contentWidth = contentWidth;\n }\n if (contentHeight === +contentHeight) {\n self.__contentHeight = contentHeight;\n }\n\n // Refresh maximums\n self.__computeScrollMax();\n if (!noScroll) {\n // Refresh scroll position\n self.scrollTo(self.__scrollLeft, self.__scrollTop, animate);\n }\n },\n /**\r\n * Sets the client coordinates in relation to the document.\r\n *\r\n * @param left {Integer ? 0} Left position of outer element\r\n * @param top {Integer ? 0} Top position of outer element\r\n */\n setPosition: function setPosition(left, top) {\n var self = this;\n self.__clientLeft = left || 0;\n self.__clientTop = top || 0;\n },\n /**\r\n * Configures the snapping (when snapping is active)\r\n *\r\n * @param width {Integer} Snapping width\r\n * @param height {Integer} Snapping height\r\n */\n setSnapSize: function setSnapSize(width, height) {\n var self = this;\n self.__snapWidth = width;\n self.__snapHeight = height;\n },\n /**\r\n * Activates pull-to-refresh. A special zone on the top of the list to start a list refresh whenever\r\n * the user event is released during visibility of this zone. This was introduced by some apps on iOS like\r\n * the official Twitter client.\r\n *\r\n * @param height {Integer} Height of pull-to-refresh zone on top of rendered list\r\n * @param activateCallback {Function} Callback to execute on activation. This is for signalling the user about a refresh is about to happen when he release.\r\n * @param deactivateCallback {Function} Callback to execute on deactivation. This is for signalling the user about the refresh being cancelled.\r\n * @param startCallback {Function} Callback to execute to start the real async refresh action. Call {@link #finishPullToRefresh} after finish of refresh.\r\n */\n activatePullToRefresh: function activatePullToRefresh(height, _ref) {\n var activateCallback = _ref.activateCallback,\n deactivateCallback = _ref.deactivateCallback,\n startCallback = _ref.startCallback,\n beforeDeactivateCallback = _ref.beforeDeactivateCallback,\n beforeDeactiveEnd = _ref.beforeDeactiveEnd;\n var self = this;\n self.__refreshHeight = height;\n self.__refreshActivate = activateCallback;\n self.__refreshBeforeDeactivate = beforeDeactivateCallback;\n self.__refreshBeforeDeactiveEnd = beforeDeactiveEnd;\n self.__refreshDeactivate = deactivateCallback;\n self.__refreshStart = startCallback;\n },\n activatePushToLoad: function activatePushToLoad(height, _ref2) {\n var activateCallback = _ref2.activateCallback,\n deactivateCallback = _ref2.deactivateCallback,\n startCallback = _ref2.startCallback,\n beforeDeactivateCallback = _ref2.beforeDeactivateCallback,\n beforeDeactiveEnd = _ref2.beforeDeactiveEnd;\n var self = this;\n self.__loadHeight = height;\n self.__loadActivate = activateCallback;\n self.__loadBeforeDeactivate = beforeDeactivateCallback;\n self.__loadBeforeDeactiveEnd = beforeDeactiveEnd;\n self.__loadDeactivate = deactivateCallback;\n self.__loadStart = startCallback;\n },\n /**\r\n * Starts pull-to-refresh manually.\r\n */\n triggerRefreshOrLoad: function triggerRefreshOrLoad() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'refresh';\n var wasDecelerating = this.__isDecelerating;\n if (wasDecelerating) {\n core.effect.Animate.stop(wasDecelerating);\n this.__isDecelerating = false;\n }\n // Use publish instead of scrollTo to allow scrolling to out of boundary position\n // We don't need to normalize scrollLeft, zoomLevel, etc. here because we only y-scrolling when pull-to-refresh is enabled\n if (type == 'refresh') {\n if (this.__refreshActive || this.__refreshBeforeDeactiveStarted) return;\n this.__publish(this.__scrollLeft, -this.__refreshHeight, this.__zoomLevel, true);\n if (this.__refreshStart) {\n this.__refreshStart();\n this.__refreshActive = true;\n }\n } else if (type == 'load') {\n if (this.__loadActive || this.__loadBeforeDeactiveStarted) return;\n this.__publish(this.__scrollLeft, this.__maxScrollTop + this.__loadHeight, this.__zoomLevel, true);\n if (this.__loadStart) {\n this.__loadStart();\n this.__loadActive = true;\n }\n }\n },\n /**\r\n * Signalizes that pull-to-refresh is finished.\r\n */\n finishRefreshOrLoad: function finishRefreshOrLoad() {\n var self = this;\n if (self.__refreshActive) {\n self.__refreshActive = false;\n var endRefreshActive = function endRefreshActive() {\n if (self.__refreshBeforeDeactiveEnd) {\n self.__refreshBeforeDeactiveEnd();\n }\n self.__refreshBeforeDeactiveStarted = true;\n self.scrollTo(self.__scrollLeft, self.__scrollTop, true);\n };\n if (self.__refreshBeforeDeactivate) {\n self.__refreshBeforeDeactivate(endRefreshActive);\n } else {\n endRefreshActive();\n }\n }\n if (self.__loadActive) {\n self.__loadActive = false;\n var endLoadActive = function endLoadActive() {\n if (self.__loadBeforeDeactiveEnd) {\n self.__loadBeforeDeactiveEnd();\n }\n self.__loadBeforeDeactiveStarted = true;\n self.scrollTo(self.__scrollLeft, self.__scrollTop, true);\n };\n if (self.__loadBeforeDeactivate) {\n self.__loadBeforeDeactivate(endLoadActive);\n } else {\n endLoadActive();\n }\n }\n },\n /**\r\n * Returns the scroll position and zooming values\r\n *\r\n * @return {Map} `left` and `top` scroll position and `zoom` level\r\n */\n getValues: function getValues() {\n var self = this;\n return {\n left: self.__scrollLeft,\n top: self.__scrollTop,\n zoom: self.__zoomLevel\n };\n },\n /**\r\n * Returns the maximum scroll values\r\n *\r\n * @return {Map} `left` and `top` maximum scroll values\r\n */\n getScrollMax: function getScrollMax() {\n var self = this;\n return {\n left: self.__maxScrollLeft,\n top: self.__maxScrollTop\n };\n },\n /**\r\n * Zooms to the given level. Supports optional animation. Zooms\r\n * the center when no coordinates are given.\r\n *\r\n * @param level {Number} Level to zoom to\r\n * @param animate {Boolean ? false} Whether to use animation\r\n * @param originLeft {Number ? null} Zoom in at given left coordinate\r\n * @param originTop {Number ? null} Zoom in at given top coordinate\r\n * @param callback {Function ? null} A callback that gets fired when the zoom is complete.\r\n */\n zoomTo: function zoomTo(level, animate, originLeft, originTop, callback) {\n var self = this;\n if (!self.options.zooming) {\n throw new Error('Zooming is not enabled!');\n }\n\n // Add callback if exists\n if (callback) {\n self.__zoomComplete = callback;\n }\n\n // Stop deceleration\n if (self.__isDecelerating) {\n core.effect.Animate.stop(self.__isDecelerating);\n self.__isDecelerating = false;\n }\n var oldLevel = self.__zoomLevel;\n\n // Normalize input origin to center of viewport if not defined\n if (originLeft == null) {\n originLeft = self.__clientWidth / 2;\n }\n if (originTop == null) {\n originTop = self.__clientHeight / 2;\n }\n\n // Limit level according to configuration\n level = Math.max(Math.min(level, self.options.maxZoom), self.options.minZoom);\n\n // Recompute maximum values while temporary tweaking maximum scroll ranges\n self.__computeScrollMax(level);\n\n // Recompute left and top coordinates based on new zoom level\n var left = (originLeft + self.__scrollLeft) * level / oldLevel - originLeft;\n var top = (originTop + self.__scrollTop) * level / oldLevel - originTop;\n\n // Limit x-axis\n if (left > self.__maxScrollLeft) {\n left = self.__maxScrollLeft;\n } else if (left < 0) {\n left = 0;\n }\n\n // Limit y-axis\n if (top > self.__maxScrollTop) {\n top = self.__maxScrollTop;\n } else if (top < 0) {\n top = 0;\n }\n\n // Push values out\n self.__publish(left, top, level, animate);\n },\n /**\r\n * Zooms the content by the given factor.\r\n *\r\n * @param factor {Number} Zoom by given factor\r\n * @param animate {Boolean ? false} Whether to use animation\r\n * @param originLeft {Number ? 0} Zoom in at given left coordinate\r\n * @param originTop {Number ? 0} Zoom in at given top coordinate\r\n * @param callback {Function ? null} A callback that gets fired when the zoom is complete.\r\n */\n zoomBy: function zoomBy(factor, animate, originLeft, originTop, callback) {\n var self = this;\n self.zoomTo(self.__zoomLevel * factor, animate, originLeft, originTop, callback);\n },\n /**\r\n * Scrolls to the given position. Respect limitations and snapping automatically.\r\n *\r\n * @param left {Number?null} Horizontal scroll position, keeps current if value is <code>null</code>\r\n * @param top {Number?null} Vertical scroll position, keeps current if value is <code>null</code>\r\n * @param animate {Boolean?false} Whether the scrolling should happen using an animation\r\n * @param zoom {Number?null} Zoom level to go to\r\n */\n scrollTo: function scrollTo(left, top, animate, zoom, force, speed, easing) {\n var self = this;\n\n // Stop deceleration\n if (self.__isDecelerating) {\n core.effect.Animate.stop(self.__isDecelerating);\n self.__isDecelerating = false;\n }\n\n // Correct coordinates based on new zoom level\n if (zoom != null && zoom !== self.__zoomLevel) {\n if (!self.options.zooming) {\n throw new Error('Zooming is not enabled!');\n }\n left *= zoom;\n top *= zoom;\n\n // Recompute maximum values while temporary tweaking maximum scroll ranges\n self.__computeScrollMax(zoom);\n } else {\n // Keep zoom when not defined\n zoom = self.__zoomLevel;\n }\n if (!self.options.scrollingX && !force) {\n left = self.__scrollLeft;\n } else {\n if (self.options.paging) {\n left = Math.round(left / self.__clientWidth) * self.__clientWidth;\n } else if (self.options.snapping) {\n left = Math.round(left / self.__snapWidth) * self.__snapWidth;\n }\n }\n if (!self.options.scrollingY && !force) {\n top = self.__scrollTop;\n } else {\n if (self.options.paging) {\n top = Math.round(top / self.__clientHeight) * self.__clientHeight;\n } else if (self.options.snapping) {\n top = Math.round(top / self.__snapHeight) * self.__snapHeight;\n }\n }\n if (!force) {\n // Limit for allowed ranges\n left = Math.max(Math.min(self.__maxScrollLeft, left), 0);\n top = Math.max(Math.min(self.__maxScrollTop, top), 0);\n }\n\n // Don't animate when no change detected, still call publish to make sure\n // that rendered position is really in-sync with internal data\n if (left === self.__scrollLeft && top === self.__scrollTop) {\n animate = false;\n }\n\n // Publish new values\n if (!self.__isTracking) {\n self.__publish(left, top, zoom, animate, speed, easing);\n }\n },\n /**\r\n * Scroll by the given offset\r\n *\r\n * @param left {Number ? 0} Scroll x-axis by given offset\r\n * @param top {Number ? 0} Scroll x-axis by given offset\r\n * @param animate {Boolean ? false} Whether to animate the given change\r\n */\n scrollBy: function scrollBy(left, top, animate) {\n var self = this;\n var startLeft = self.__isAnimating ? self.__scheduledLeft : self.__scrollLeft;\n var startTop = self.__isAnimating ? self.__scheduledTop : self.__scrollTop;\n self.scrollTo(startLeft + (left || 0), startTop + (top || 0), animate);\n },\n getCurrentPage: function getCurrentPage() {\n this.__computePage();\n return {\n x: this.__currentPageX,\n y: this.__currentPageY\n };\n },\n goToPage: function goToPage(_ref3, animate) {\n var x = _ref3.x,\n y = _ref3.y;\n if (isNaN(x)) {\n x = 1;\n }\n if (isNaN(y)) {\n y = 1;\n }\n this.scrollTo((x - 1) * this.__clientWidth, (y - 1) * this.__clientHeight, animate);\n },\n /*\r\n ---------------------------------------------------------------------------\r\n EVENT CALLBACKS\r\n ---------------------------------------------------------------------------\r\n */\n\n /**\r\n * Mouse wheel handler for zooming support\r\n */\n doMouseZoom: function doMouseZoom(wheelDelta, timeStamp, pageX, pageY) {\n var self = this;\n var change = wheelDelta > 0 ? 0.97 : 1.03;\n return self.zoomTo(self.__zoomLevel * change, false, pageX - self.__clientLeft, pageY - self.__clientTop);\n },\n /**\r\n * Touch start handler for scrolling support\r\n */\n doTouchStart: function doTouchStart(touches, timeStamp) {\n // Array-like check is enough here\n if (touches.length == null) {\n throw new Error('Invalid touch list: ' + touches);\n }\n if (timeStamp instanceof Date) {\n timeStamp = timeStamp.valueOf();\n }\n if (typeof timeStamp !== 'number') {\n throw new Error('Invalid timestamp value: ' + timeStamp);\n }\n var self = this;\n\n // Reset interruptedAnimation flag\n self.__interruptedAnimation = true;\n\n // Stop deceleration\n if (self.__isDecelerating) {\n core.effect.Animate.stop(self.__isDecelerating);\n self.__isDecelerating = false;\n self.__interruptedAnimation = true;\n }\n\n // Stop animation\n if (self.__isAnimating) {\n core.effect.Animate.stop(self.__isAnimating);\n self.__isAnimating = false;\n self.__interruptedAnimation = true;\n }\n\n // Use center point when dealing with two fingers\n var currentTouchLeft, currentTouchTop;\n var isSingleTouch = touches.length === 1;\n if (isSingleTouch) {\n currentTouchLeft = touches[0].pageX;\n currentTouchTop = touches[0].pageY;\n } else {\n currentTouchLeft = Math.abs(touches[0].pageX + touches[1].pageX) / 2;\n currentTouchTop = Math.abs(touches[0].pageY + touches[1].pageY) / 2;\n }\n\n // Store initial positions\n self.__initialTouchLeft = currentTouchLeft;\n self.__initialTouchTop = currentTouchTop;\n\n // Store current zoom level\n self.__zoomLevelStart = self.__zoomLevel;\n\n // Store initial touch positions\n self.__lastTouchLeft = currentTouchLeft;\n self.__lastTouchTop = currentTouchTop;\n\n // Store initial move time stamp\n self.__lastTouchMove = timeStamp;\n\n // Reset initial scale\n self.__lastScale = 1;\n\n // Reset locking flags\n self.__enableScrollX = !isSingleTouch && self.options.scrollingX;\n self.__enableScrollY = !isSingleTouch && self.options.scrollingY;\n\n // Reset tracking flag\n self.__isTracking = true;\n\n // Reset deceleration complete flag\n self.__didDecelerationComplete = false;\n\n // Dragging starts directly with two fingers, otherwise lazy with an offset\n self.__isDragging = !isSingleTouch;\n\n // Some features are in multi touch scenarios\n self.__isSingleTouch = isSingleTouch;\n\n // Clearing data structure\n self.__positions = [];\n },\n /**\r\n * Touch move handler for scrolling support\r\n */\n doTouchMove: function doTouchMove(touches, timeStamp, scale) {\n // Array-like check is enough here\n if (touches.length == null) {\n throw new Error('Invalid touch list: ' + touches);\n }\n if (timeStamp instanceof Date) {\n timeStamp = timeStamp.valueOf();\n }\n if (typeof timeStamp !== 'number') {\n throw new Error('Invalid timestamp value: ' + timeStamp);\n }\n var self = this;\n\n // Ignore event when tracking is not enabled (event might be outside of element)\n if (!self.__isTracking) {\n return;\n }\n var currentTouchLeft, currentTouchTop;\n\n // Compute move based around of center of fingers\n if (touches.length === 2) {\n currentTouchLeft = Math.abs(touches[0].pageX + touches[1].pageX) / 2;\n currentTouchTop = Math.abs(touches[0].pageY + touches[1].pageY) / 2;\n } else {\n currentTouchLeft = touches[0].pageX;\n currentTouchTop = touches[0].pageY;\n }\n var positions = self.__positions;\n\n // Are we already is dragging mode?\n if (self.__isDragging) {\n // Compute move distance\n var moveX = currentTouchLeft - self.__lastTouchLeft;\n var moveY = currentTouchTop - self.__lastTouchTop;\n\n // Read previous scroll position and zooming\n var scrollLeft = self.__scrollLeft;\n var scrollTop = self.__scrollTop;\n var level = self.__zoomLevel;\n\n // Work with scaling\n if (scale != null && self.options.zooming) {\n var oldLevel = level;\n\n // Recompute level based on previous scale and new scale\n level = level / self.__lastScale * scale;\n\n // Limit level according to configuration\n level = Math.max(Math.min(level, self.options.maxZoom), self.options.minZoom);\n\n // Only do further compution when change happened\n if (oldLevel !== level) {\n // Compute relative event position to container\n var currentTouchLeftRel = currentTouchLeft - self.__clientLeft;\n var currentTouchTopRel = currentTouchTop - self.__clientTop;\n\n // Recompute left and top coordinates based on new zoom level\n scrollLeft = (currentTouchLeftRel + scrollLeft) * level / oldLevel - currentTouchLeftRel;\n scrollTop = (currentTouchTopRel + scrollTop) * level / oldLevel - currentTouchTopRel;\n\n // Recompute max scroll values\n self.__computeScrollMax(level);\n }\n }\n var bouncing = self.options.bouncing;\n if (self.__enableScrollX) {\n scrollLeft -= moveX * this.options.speedMultiplier;\n var maxScrollLeft = self.__maxScrollLeft;\n if (scrollLeft > maxScrollLeft || scrollLeft < 0) {\n scrollLeft += moveX / 2 * this.options.speedMultiplier;\n\n // fix scrollLeft\n scrollLeft = Math.min(Math.max(-bouncing.left, scrollLeft), maxScrollLeft + bouncing.right);\n }\n }\n\n // Compute new vertical scroll position\n if (self.__enableScrollY) {\n scrollTop -= moveY * this.options.speedMultiplier;\n var maxScrollTop = self.__maxScrollTop;\n if (scrollTop > maxScrollTop || scrollTop < 0) {\n scrollTop += moveY / 2 * this.options.speedMultiplier;\n\n // fix scrollTop\n scrollTop = Math.min(Math.max(-bouncing.top, scrollTop), maxScrollTop + bouncing.bottom);\n\n // Trigger pull to refresh or push to load\n if (!self.__enableScrollX && (self.__refreshHeight != null || self.__loadHeight != null)) {\n if (!self.__refreshActive && scrollTop <= -self.__refreshHeight) {\n self.__refreshActive = true;\n if (self.__refreshActivate) {\n self.__refreshActivate();\n }\n } else if (self.__refreshActive && scrollTop > -self.__refreshHeight) {\n self.__refreshActive = false;\n if (self.__refreshDeactivate) {\n self.__refreshDeactivate();\n }\n }\n // handle for push-load\n else if (!self.__loadActive && scrollTop >= self.__maxScrollTop + self.__loadHeight && self.__loadHeight > 0) {\n self.__loadActive = true;\n if (self.__loadActivate) {\n self.__loadActivate();\n }\n } else if (self.__loadActive && scrollTop < self.__maxScrollTop + self.__loadHeight) {\n self.__loadActive = false;\n if (self.__loadDeactivate) {\n self.__loadDeactivate();\n }\n }\n }\n }\n }\n\n // Keep list from growing infinitely (holding min 10, max 20 measure points)\n if (positions.length > 60) {\n positions.splice(0, 30);\n }\n\n // Track scroll movement for decleration\n positions.push(scrollLeft, scrollTop, timeStamp);\n\n // Sync scroll position\n self.__publish(scrollLeft, scrollTop, level);\n\n // Otherwise figure out whether we are switching into dragging mode now.\n } else {\n var minimumTrackingForScroll = self.options.locking ? 3 : 0;\n var minimumTrackingForDrag = 5;\n var distanceX = Math.abs(currentTouchLeft - self.__initialTouchLeft);\n var distanceY = Math.abs(currentTouchTop - self.__initialTouchTop);\n self.__enableScrollX = self.options.scrollingX && distanceX >= minimumTrackingForScroll;\n self.__enableScrollY = self.options.scrollingY && distanceY >= minimumTrackingForScroll;\n positions.push(self.__scrollLeft, self.__scrollTop, timeStamp);\n self.__isDragging = (self.__enableScrollX || self.__enableScrollY) && (distanceX >= minimumTrackingForDrag || distanceY >= minimumTrackingForDrag);\n if (self.__isDragging) {\n self.__interruptedAnimation = false;\n }\n }\n\n // Update last touch positions and time stamp for next event\n self.__lastTouchLeft = currentTouchLeft;\n self.__lastTouchTop = currentTouchTop;\n self.__lastTouchMove = timeStamp;\n self.__lastScale = scale;\n },\n /**\r\n * Touch end handler for scrolling support\r\n */\n doTouchEnd: function doTouchEnd(timeStamp) {\n if (timeStamp instanceof Date) {\n timeStamp = timeStamp.valueOf();\n }\n if (typeof timeStamp !== 'number') {\n throw new Error('Invalid timestamp value: ' + timeStamp);\n }\n var self = this;\n\n // Ignore event when tracking is not enabled (no touchstart event on element)\n // This is required as this listener ('touchmove') sits on the document and not on the element itself.\n if (!self.__isTracking) {\n return;\n }\n\n // Not touching anymore (when two finger hit the screen there are two touch end events)\n self.__isTracking = false;\n\n // Be sure to reset the dragging flag now. Here we also detect whether\n // the finger has moved fast enough to switch into a deceleration animation.\n if (self.__isDragging) {\n // Reset dragging flag\n self.__isDragging = false;\n\n // Start deceleration\n // Verify that the last move detected was in some relevant time frame\n if (self.__isSingleTouch && self.options.animating && timeStamp - self.__lastTouchMove <= 100) {\n // Then figure out what the scroll position was about 100ms ago\n var positions = self.__positions;\n var endPos = positions.length - 1;\n var startPos = endPos;\n\n // Move pointer to position measured 100ms ago\n for (var i = endPos; i > 0 && positions[i] > self.__lastTouchMove - 100; i -= 3) {\n startPos = i;\n }\n\n // If start and stop position is identical in a 100ms timeframe,\n // we cannot compute any useful deceleration.\n if (startPos !== endPos) {\n // Compute relative movement between these two points\n var timeOffset = positions[endPos] - positions[startPos];\n var movedLeft = self.__scrollLeft - positions[startPos - 2];\n var movedTop = self.__scrollTop - positions[startPos - 1];\n\n // Based on 50ms compute the movement to apply for each render step\n self.__decelerationVelocityX = movedLeft / timeOffset * (1000 / 60);\n self.__decelerationVelocityY = movedTop / timeOffset * (1000 / 60);\n\n // How much velocity is required to start the deceleration\n var minVelocityToStartDeceleration = self.options.paging || self.options.snapping ? 4 : 1;\n\n // Verify that we have enough velocity to start deceleration\n if (Math.abs(self.__decelerationVelocityX) > minVelocityToStartDeceleration || Math.abs(self.__decelerationVelocityY) > minVelocityToStartDeceleration) {\n // Deactivate pull-to-refresh when decelerating\n if (!self.__refreshActive && !self.__loadActive) {\n self.__startDeceleration(timeStamp);\n }\n } else {\n self.__scrollComplete();\n }\n } else {\n self.__scrollComplete();\n }\n } else if (timeStamp - self.__lastTouchMove > 100) {\n self.__scrollComplete();\n }\n }\n\n // If this was a slower move it is per default non decelerated, but this\n // still means that we want snap back to the bounds which is done here.\n // This is placed outside the condition above to improve edge case stability\n // e.g. touchend fired without enabled dragging. This should normally do not\n // have modified the scroll positions or even showed the scrollbars though.\n if (!self.__isDecelerating) {\n if (self.__refreshActive && self.__refreshStart) {\n // Use publish instead of scrollTo to allow scrolling to out of boundary position\n // We don't need to normalize scrollLeft, zoomLevel, etc. here because we only y-scrolling when pull-to-refresh is enabled\n self.__publish(self.__scrollLeft, -self.__refreshHeight, self.__zoomLevel, true);\n if (self.__refreshStart) {\n self.__refreshStart();\n }\n } else if (self.__loadActive && self.__loadStart) {\n // Use publish instead of scrollTo to allow scrolling to out of boundary position\n // We don't need to normalize scrollLeft, zoomLevel, etc. here because we only y-scrolling when pull-to-refresh is enabled\n self.__publish(self.__scrollLeft, self.__maxScrollTop + self.__loadHeight, self.__zoomLevel, true);\n if (self.__loadStart) {\n self.__loadStart();\n }\n } else {\n if (self.__interruptedAnimation || self.__isDragging) {\n self.__scrollComplete();\n }\n self.scrollTo(self.__scrollLeft, self.__scrollTop, true, self.__zoomLevel);\n\n // Directly signalize deactivation (nothing todo on refresh?)\n if (self.__refreshActive) {\n self.__refreshActive = false;\n if (self.__refreshDeactivate) {\n self.__refreshDeactivate();\n }\n } else if (self.__loadActive) {\n self.__loadActive = false;\n if (self.__loadDeactivate) {\n self.__loadDeactivate();\n }\n }\n }\n }\n\n // Fully cleanup list\n self.__positions.length = 0;\n },\n /** Handle for scroll/publish */\n onScroll: NOOP,\n stop: function stop() {\n var self = this;\n self.__disable = true;\n },\n start: function start() {\n var self = this;\n self.__disable = true;\n },\n /*\r\n ---------------------------------------------------------------------------\r\n PRIVATE API\r\n ---------------------------------------------------------------------------\r\n */\n\n /**\r\n * Applies the scroll position to the content element\r\n *\r\n * @param left {Number} Left scroll position\r\n * @param top {Number} Top scroll position\r\n * @param animate {Boolean?false} Whether animation should be used to move to the new coordinates\r\n */\n __publish: function __publish(left, top, zoom, animate, speed, easing) {\n var self = this;\n if (self.__disable) {\n return;\n }\n if (isNaN(left)) {\n left = this.__scrollLeft;\n }\n if (isNaN(top)) {\n top = this.__scrollTop;\n }\n // Remember whether we had an animation, then we try to continue based on the current \"drive\" of the animation\n var wasAnimating = self.__isAnimating;\n if (wasAnimating) {\n core.effect.Animate.stop(wasAnimating);\n self.__isAnimating = false;\n }\n if (animate && (self.options.animating || speed)) {\n // Keep scheduled positions for scrollBy/zoomBy functionality\n self.__scheduledLeft = left;\n self.__scheduledTop = top;\n self.__scheduledZoom = zoom;\n var oldLeft = self.__scrollLeft;\n var oldTop = self.__scrollTop;\n var oldZoom = self.__zoomLevel;\n var diffLeft = left - oldLeft;\n var diffTop = top - oldTop;\n var diffZoom = zoom - oldZoom;\n var step = function step(percent, now, render) {\n if (render) {\n self.__scrollLeft = oldLeft + diffLeft * percent;\n self.__scrollTop = oldTop + diffTop * percent;\n self.__zoomLevel = oldZoom + diffZoom * percent;\n\n // Push values out\n if (self.__callback) {\n self.__callback(self.__scrollLeft, self.__scrollTop, self.__zoomLevel);\n self.onScroll();\n }\n }\n };\n var verify = function verify(id) {\n return self.__isAnimating === id;\n };\n var completed = function completed(renderedFramesPerSecond, animationId, wasFinished) {\n if (animationId === self.__isAnimating) {\n self.__isAnimating = false;\n }\n if (self.__didDecelerationComplete || wasFinished) {\n self.__scrollComplete();\n }\n if (self.options.zooming) {\n self.__computeScrollMax();\n if (self.__zoomComplete) {\n self.__zoomComplete();\n self.__zoomComplete = null;\n }\n }\n if (self.__refreshBeforeDeactiveStarted) {\n self.__refreshBeforeDeactiveStarted = false;\n if (self.__refreshDeactivate) self.__refreshDeactivate();\n }\n if (self.__loadBeforeDeactiveStarted) {\n self.__loadBeforeDeactiveStarted = false;\n if (self.__loadDeactivate) self.__loadDeactivate();\n }\n };\n var easingFunction = animatingMethod;\n if (easing) {\n easingFunction = createEasingFunction(easing, easingPattern);\n }\n\n // When continuing based on previous animation we choose an ease-out animation instead of ease-in-out\n self.__isAnimating = core.effect.Animate.start(step, verify, completed, speed || self.options.animationDuration, wasAnimating ? easingFunction : noAnimatingMethod);\n } else {\n self.__scheduledLeft = self.__scrollLeft = left;\n self.__scheduledTop = self.__scrollTop = top;\n self.__scheduledZoom = self.__zoomLevel = zoom;\n\n // Push values out\n if (self.__callback) {\n self.__callback(left, top, zoom);\n self.onScroll();\n }\n\n // Fix max scroll ranges\n if (self.options.zooming) {\n self.__computeScrollMax();\n if (self.__zoomComplete) {\n self.__zoomComplete();\n self.__zoomComplete = null;\n }\n }\n if (self.__refreshBeforeDeactiveStarted) {\n self.__refreshBeforeDeactiveStarted = false;\n if (self.__refreshDeactivate) self.__refreshDeactivate();\n }\n if (self.__loadBeforeDeactiveStarted) {\n self.__loadBeforeDeactiveStarted = false;\n if (self.__loadDeactivate) self.__loadDeactivate();\n }\n }\n },\n /**\r\n * Recomputes scroll minimum values based on client dimensions and content dimensions.\r\n */\n __computeScrollMax: function __computeScrollMax(zoomLevel) {\n var self = this;\n if (zoomLevel == null) {\n zoomLevel = self.__zoomLevel;\n }\n self.__maxScrollLeft = Math.max(self.__contentWidth * zoomLevel - self.__clientWidth, 0);\n self.__maxScrollTop = Math.max(self.__contentHeight * zoomLevel - self.__clientHeight, 0);\n },\n /** compute current page total page */\n __computePage: function __computePage() {\n var self = this;\n var clientWidth = self.__clientWidth;\n var clientHeight = self.__clientHeight;\n var left = self.__scrollLeft;\n var top = self.__scrollTop;\n self.__totalXPage = Math.ceil(self.__contentWidth / clientWidth);\n self.__currentPageX = Math.ceil(left / clientWidth + 1);\n self.__totalYPage = Math.ceil(self.__contentHeight / clientHeight);\n self.__currentPageY = Math.ceil(top / clientHeight + 1);\n },\n /** complete scroll*/\n __scrollComplete: function __scrollComplete() {\n var self = this;\n self.options.scrollingComplete();\n },\n /*\r\n ---------------------------------------------------------------------------\r\n ANIMATION (DECELERATION) SUPPORT\r\n ---------------------------------------------------------------------------\r\n */\n\n /**\r\n * Called when a touch sequence end and the speed of the finger was high enough\r\n * to switch into deceleration mode.\r\n */\n __startDeceleration: function __startDeceleration() {\n var self = this;\n if (self.options.paging) {\n var scrollLeft = Math.max(Math.min(self.__scrollLeft, self.__maxScrollLeft), 0);\n var scrollTop = Math.max(Math.min(self.__scrollTop, self.__maxScrollTop), 0);\n var clientWidth = self.__clientWidth;\n var clientHeight = self.__clientHeight;\n\n // We limit deceleration not to the min/max values of the allowed range, but to the size of the visible client area.\n // Each page should have exactly the size of the client area.\n self.__minDecelerationScrollLeft = Math.floor(scrollLeft / clientWidth) * clientWidth;\n self.__minDecelerationScrollTop = Math.floor(scrollTop / clientHeight) * clientHeight;\n self.__maxDecelerationScrollLeft = Math.ceil(scrollLeft / clientWidth) * clientWidth;\n self.__maxDecelerationScrollTop = Math.ceil(scrollTop / clientHeight) * clientHeight;\n } else {\n self.__minDecelerationScrollLeft = 0;\n self.__minDecelerationScrollTop = 0;\n self.__maxDecelerationScrollLeft = self.__maxScrollLeft;\n self.__maxDecelerationScrollTop = self.__maxScrollTop;\n }\n\n // Wrap class method\n var step = function step(percent, now, render) {\n self.__stepThroughDeceleration(render);\n };\n\n // How much velocity is required to keep the deceleration running\n var minVelocityToKeepDecelerating = self.options.snapping ? 4 : 0.001;\n\n // Detect whether it's still worth to continue animating steps\n // If we are already slow enough to not being user perceivable anymore, we stop the whole process here.\n var verify = function verify() {\n var shouldContinue = Math.abs(self.__decelerationVelocityX) >= minVelocityToKeepDecelerating || Math.abs(self.__decelerationVelocityY) >= minVelocityToKeepDecelerating;\n if (!shouldContinue) {\n self.__didDecelerationComplete = true;\n }\n return shouldContinue;\n };\n var completed = function completed() {\n if (!self.__isDecelerating) {\n return;\n }\n self.__isDecelerating = false;\n if (self.__didDecelerationComplete) {\n self.__scrollComplete();\n }\n\n // Animate to grid when snapping is active, otherwise just fix out-of-boundary positions\n self.scrollTo(self.__scrollLeft, self.__scrollTop, self.options.snapping);\n };\n\n // Start animation and switch on flag\n self.__isDecelerating = core.effect.Animate.start(step, verify, completed);\n },\n /**\r\n * Called on every step of the animation\r\n *\r\n * @param inMemory {Boolean?false} Whether to not render the current step, but keep it in memory only. Used internally only!\r\n */\n __stepThroughDeceleration: function __stepThroughDeceleration(render) {\n var self = this;\n var bouncing = self.options.bouncing;\n var minLeft = self.__minDecelerationScrollLeft;\n var maxLeft = self.__maxDecelerationScrollLeft;\n var minTop = self.__minDecelerationScrollTop;\n var maxTop = self.__maxDecelerationScrollTop;\n // Add deceleration to scroll position\n var scrollLeft = self.__scrollLeft + self.__decelerationVelocityX;\n var scrollTop = self.__scrollTop + self.__decelerationVelocityY;\n var bounceX = scrollLeft < minLeft || scrollLeft > maxLeft;\n var bounceY = scrollTop < minTop || scrollTop > maxTop;\n\n // fix scrollLeft and scrollTop\n var fixedScrollLeft = Math.min(Math.max(minLeft - bouncing.left, scrollLeft), maxLeft + bouncing.right);\n var fixedScrollTop = Math.min(Math.max(minTop - bouncing.top, scrollTop), maxTop + bouncing.bottom);\n\n //\n // UPDATE SCROLL POSITION\n //\n if (render) {\n self.__publish(fixedScrollLeft, fixedScrollTop, self.__zoomLevel);\n } else {\n self.__scrollLeft = scrollLeft;\n self.__scrollTop = scrollTop;\n }\n\n //\n // SLOW DOWN\n //\n\n // Slow down velocity on every iteration\n if (!self.options.paging) {\n // This is the factor applied to every iteration of the animation\n // to slow down the process. This should emulate natural behavior where\n // objects slow down when the initiator of the movement is removed\n var frictionFactor = 0.95;\n self.__decelerationVelocityX *= frictionFactor;\n self.__decelerationVelocityY *= frictionFactor;\n }\n\n //\n // BOUNCING SUPPORT\n //\n\n var scrollOutsideX = 0;\n var scrollOutsideY = 0;\n\n // This configures the amount of change applied to deceleration/acceleration when reaching boundaries\n var penetrationDeceleration = self.options.penetrationDeceleration;\n var penetrationAcceleration = self.options.penetrationAcceleration;\n if (bounceX) {\n // Check limits\n if (scrollLeft < self.__minDecelerationScrollLeft) {\n scrollOutsideX = self.__minDecelerationScrollLeft - scrollLeft;\n } else if (scrollLeft > self.__maxDecelerationScrollLeft) {\n scrollOutsideX = self.__maxDecelerationScrollLeft - scrollLeft;\n }\n }\n if (bounceY) {\n if (scrollTop < self.__minDecelerationScrollTop) {\n scrollOutsideY = self.__minDecelerationScrollTop - scrollTop;\n } else if (scrollTop > self.__maxDecelerationScrollTop) {\n scrollOutsideY = self.__maxDecelerationScrollTop - scrollTop;\n }\n }\n if (scrollOutsideX !== 0) {\n if (scrollOutsideX * self.__decelerationVelocityX <= 0) {\n self.__decelerationVelocityX += scrollOutsideX * penetrationDeceleration;\n if (scrollOutsideX < 0 && -scrollOutsideX >= bouncing.right && self.__decelerationVelocityX > 0) {\n self.__decelerationVelocityX = -bouncing.right / 2;\n }\n if (scrollOutsideX > 0 && scrollOutsideX >= bouncing.left && self.__decelerationVelocityX < 0) {\n self.__decelerationVelocityX = bouncing.left / 2;\n }\n } else {\n self.__decelerationVelocityX = scrollOutsideX * penetrationAcceleration;\n }\n }\n if (scrollOutsideY !== 0) {\n if (scrollOutsideY * self.__decelerationVelocityY <= 0) {\n self.__decelerationVelocityY += scrollOutsideY * penetrationDeceleration;\n if (scrollOutsideY < 0 && -scrollOutsideY >= bouncing.bottom && self.__decelerationVelocityY > 0) {\n self.__decelerationVelocityY = -bouncing.bottom / 2;\n }\n if (scrollOutsideY > 0 && scrollOutsideY >= bouncing.top && self.__decelerationVelocityY < 0) {\n self.__decelerationVelocityY = bouncing.top / 2;\n }\n } else {\n self.__decelerationVelocityY = scrollOutsideY * penetrationAcceleration / 2;\n }\n }\n }\n };\n\n // Copy over members to prototype\n for (var key in members) {\n Scroller.prototype[key] = members[key];\n }\n\n /* DOM-based rendering (Uses 3D when available, falls back on margin when transform not available) */\n function render(content, global, suffix, type) {\n if (type == 'position') {\n return function (left, top) {\n content.style.left = -left + 'px';\n content.style.top = -top + 'px';\n };\n }\n var vendorPrefix = getPrefix(global);\n var helperElem = document.createElement('div');\n var undef;\n var perspectiveProperty = vendorPrefix + 'Perspective';\n var transformProperty = 'transform'; //vendorPrefix + 'Transform';\n\n if (helperElem.style[perspectiveProperty] !== undef) {\n return function (left, top, zoom) {\n content.style[transformProperty] = 'translate3d(' + -left + suffix + ',' + -top + suffix + ',0) scale(' + zoom + ')';\n };\n } else if (helperElem.style[transformProperty] !== undef) {\n return function (left, top, zoom) {\n content.style[transformProperty] = 'translate(' + -left + suffix + ',' + -top + suffix + ') scale(' + zoom + ')';\n };\n }\n }\n var touch = new touchManager();\n function listenContainer(container, scroller, eventCallback, zooming, preventDefault, preventDefaultOnMove) {\n var destroy = null;\n var mousedown = false;\n var touchObj = touch.getTouchObject();\n function touchstart(e) {\n var event = touch.getEventObject(e);\n // Don't react if initial down happens on a form element\n if (event[0] && event[0].target && event[0].target.tagName.match(/input|textarea|select/i) || scroller.__disable) {\n return;\n }\n eventCallback('mousedown');\n mousedown = true;\n scroller.doTouchStart(event, e.timeStamp);\n if (preventDefault) {\n e.preventDefault();\n }\n e.stopPropagation();\n\n // here , we want to manully prevent default, so we\n // set passive to false\n // see https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener\n document.addEventListener(touchObj.touchmove, touchmove, {\n passive: false\n });\n }\n function touchmove(e) {\n if (scroller.__disable || !mousedown) return;\n var event = touch.getEventObject(e);\n eventCallback('mousemove');\n scroller.doTouchMove(event, e.timeStamp, e.scale);\n if (preventDefaultOnMove) {\n e.preventDefault();\n }\n }\n function touchend(e) {\n eventCallback('mouseup');\n mousedown = false;\n scroller.doTouchEnd(e.timeStamp);\n document.removeEventListener(touchObj.touchmove, touchmove);\n }\n function touchcancel(e) {\n scroller.doTouchEnd(e.timeStamp);\n }\n function zoomHandle(e) {\n scroller.doMouseZoom(e.detail ? e.detail * -120 : e.wheelDelta, e.timeStamp, e.pageX, e.pageY);\n }\n container.addEventListener(touchObj.touchstart, touchstart, false);\n document.addEventListener(touchObj.touchend, touchend, false);\n document.addEventListener(touchObj.touchcancel, touchcancel, false);\n if (zooming && !touch.isTouch) {\n container.addEventListener(navigator.userAgent.indexOf('Firefox') > -1 ? 'DOMMouseScroll' : 'mousewheel', zoomHandle, false);\n }\n destroy = function destroy() {\n container.removeEventListener(touchObj.touchstart, touchstart, false);\n document.removeEventListener(touchObj.touchend, touchend, false);\n document.removeEventListener(touchObj.touchcancel, touchcancel, false);\n container.removeEventListener(navigator.userAgent.indexOf('Firefox') > -1 ? 'DOMMouseScroll' : 'mousewheel', zoomHandle, false);\n };\n\n // handle __publish event\n scroller.onScroll = function () {\n eventCallback('onscroll');\n };\n return destroy;\n }\n\n /**\r\n * These mixes is exclusive for slide mode\r\n */\n\n createSlideModeStyle();\n /**\r\n * @description refresh and load callback\r\n */\n function createStateCallbacks(type, stageType, vm, tipDom) {\n var listeners = vm.$listeners;\n var activateCallback = function activateCallback() {\n vm.vuescroll.state[stageType] = 'active';\n vm.$emit(type + '-activate', vm, tipDom);\n };\n var deactivateCallback = function deactivateCallback() {\n vm.vuescroll.state[stageType] = 'deactive';\n vm.$emit(type + '-deactivate', vm, tipDom);\n };\n var beforeDeactiveEnd = function beforeDeactiveEnd() {\n vm.vuescroll.state[stageType] = 'beforeDeactiveEnd';\n vm.$emit(type + '-before-deactivate-end', vm, tipDom);\n };\n var startCallback = function startCallback() {\n vm.vuescroll.state[stageType] = 'start';\n setTimeout(function () {\n vm.scroller.finishRefreshOrLoad();\n }, 2000); // Default start stage duration\n };\n\n // let beforeDeactivateCallback = done => {\n // vm.vuescroll.state[stageType] = 'beforeDeactive';\n // setTimeout(function() {\n // done();\n // }, 500); // Default before-deactivated stage duration\n // };\n var beforeDeactivateCallback = void 0;\n\n /* istanbul ignore if */\n if (listeners[type + '-before-deactivate']) {\n beforeDeactivateCallback = function beforeDeactivateCallback(done) {\n vm.vuescroll.state[stageType] = 'beforeDeactive';\n vm.$emit(type + '-before-deactivate', vm, tipDom, done.bind(vm.scroller));\n };\n }\n\n /* istanbul ignore if */\n if (listeners[type + '-start']) {\n startCallback = function startCallback() {\n vm.vuescroll.state[stageType] = 'start';\n vm.$emit(type + '-start', vm, tipDom, vm.scroller.finishRefreshOrLoad.bind(vm.scroller));\n };\n }\n return {\n activateCallback: activateCallback,\n deactivateCallback: deactivateCallback,\n startCallback: startCallback,\n beforeDeactivateCallback: beforeDeactivateCallback,\n beforeDeactiveEnd: beforeDeactiveEnd\n };\n }\n var slideMix = {\n mounted: function mounted() {\n this.vsMounted = true;\n },\n computed: {\n pullRefreshTip: function pullRefreshTip() {\n return this.mergedOptions.vuescroll.pullRefresh.tips[this.vuescroll.state.refreshStage];\n },\n pushLoadTip: function pushLoadTip() {\n return this.mergedOptions.vuescroll.pushLoad.tips[this.vuescroll.state.loadStage];\n },\n refreshLoad: function refreshLoad() {\n return this.mergedOptions.vuescroll.pullRefresh.enable || this.mergedOptions.vuescroll.pushLoad.enable;\n },\n refrehDomVisiable: function refrehDomVisiable() {\n return this.vsMounted && this.outTheTopBoundary;\n },\n loadDomVisiable: function loadDomVisiable() {\n return this.vsMounted && this.outTheBottomBoundary;\n }\n },\n data: function data() {\n return {\n vuescroll: {\n state: {\n /** Default tips of refresh and load */\n refreshStage: 'deactive',\n loadStage: 'deactive'\n }\n },\n vsMounted: false,\n outTheTopBoundary: false,\n outTheBottomBoundary: false\n };\n },\n methods: {\n // Update:\n // 1. update height/width\n // 2. update refresh or load\n updateScroller: function updateScroller() {\n this.updateDimesion();\n this.registryRefreshLoad();\n },\n updateDimesion: function updateDimesion() {\n var clientWidth = this.$el.clientWidth;\n var clientHeight = this.$el.clientHeight;\n var contentWidth = this.scrollPanelElm.scrollWidth;\n var contentHeight = this.scrollPanelElm.scrollHeight;\n var refreshHeight = 0;\n var loadHeight = 0;\n // If the refresh option is true,let's give a \"margin-top\" style to\n // the refresh-tip dom. let it to be invisible when doesn't trigger\n // refresh.\n if (this.mergedOptions.vuescroll.pullRefresh.enable) {\n if (this.vsMounted) {\n var refreshDom = this.$refs[__REFRESH_DOM_NAME].elm || this.$refs[__REFRESH_DOM_NAME];\n refreshHeight = refreshDom.offsetHeight;\n refreshDom.style.marginTop = -refreshHeight + 'px';\n }\n }\n if (this.mergedOptions.vuescroll.pushLoad.enable) {\n if (this.vsMounted) {\n var loadDom = this.$refs[__LOAD_DOM_NAME].elm || this.$refs[__LOAD_DOM_NAME];\n loadHeight = loadDom.offsetHeight;\n contentHeight -= loadHeight;\n loadDom.style.bottom = '-' + loadHeight + 'px';\n }\n }\n if (this.scroller) {\n this.scroller.setDimensions(clientWidth, clientHeight, contentWidth, contentHeight, false);\n }\n },\n registryRefreshLoad: function registryRefreshLoad() {\n // registry refresh\n if (this.mergedOptions.vuescroll.pullRefresh.enable) {\n this.registryEvent('refresh');\n }\n // registry load\n if (this.mergedOptions.vuescroll.pushLoad.enable) {\n this.registryEvent('load');\n }\n },\n registryScroller: function registryScroller() {\n var _this = this;\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$left = _ref.left,\n left = _ref$left === undefined ? 0 : _ref$left,\n _ref$top = _ref.top,\n top = _ref$top === undefined ? 0 : _ref$top,\n _ref$zoom = _ref.zoom,\n zoom = _ref$zoom === undefined ? 1 : _ref$zoom;\n var _mergedOptions$vuescr = this.mergedOptions.vuescroll.scroller,\n preventDefault = _mergedOptions$vuescr.preventDefault,\n preventDefaultOnMove = _mergedOptions$vuescr.preventDefaultOnMove;\n var _mergedOptions$vuescr2 = this.mergedOptions.vuescroll,\n paging = _mergedOptions$vuescr2.paging,\n snapping = _mergedOptions$vuescr2.snapping.enable,\n renderMethod = _mergedOptions$vuescr2.renderMethod,\n zooming = _mergedOptions$vuescr2.zooming,\n locking = _mergedOptions$vuescr2.locking;\n // disale zooming when refresh or load enabled\n\n zooming = !this.refreshLoad && !paging && !snapping && zooming;\n var _mergedOptions$scroll = this.mergedOptions.scrollPanel,\n scrollingY = _mergedOptions$scroll.scrollingY,\n scrollingX = _mergedOptions$scroll.scrollingX;\n var scrollingComplete = this.scrollingComplete.bind(this);\n\n // Initialize Scroller\n this.scroller = new Scroller(render(this.scrollPanelElm, window, 'px', renderMethod), _extends({}, this.mergedOptions.vuescroll.scroller, {\n zooming: zooming,\n scrollingY: scrollingY,\n scrollingX: scrollingX && !this.refreshLoad,\n animationDuration: this.mergedOptions.scrollPanel.speed,\n paging: paging,\n snapping: snapping,\n scrollingComplete: scrollingComplete,\n locking: locking\n }));\n this.scroller.__disable = this.mergedOptions.vuescroll.scroller.disable;\n this.scroller.__scrollLeft = left;\n this.scroller.__scrollTop = top;\n this.scroller.__zoomLevel = zoom;\n\n // Set snap\n if (snapping) {\n this.scroller.setSnapSize(this.mergedOptions.vuescroll.snapping.width, this.mergedOptions.vuescroll.snapping.height);\n }\n var rect = this.$el.getBoundingClientRect();\n this.scroller.setPosition(rect.left + this.$el.clientLeft, rect.top + this.$el.clientTop);\n\n // Get destroy callback\n var cb = listenContainer(this.$el, this.scroller, function (eventType) {\n // Thie is to dispatch the event from the scroller.\n // to let vuescroll refresh the dom\n switch (eventType) {\n case 'mousedown':\n _this.vuescroll.state.isDragging = true;\n break;\n case 'onscroll':\n {\n /**\r\n * Trigger auto load\r\n */\n var stage = _this.vuescroll.state['loadStage'];\n var _mergedOptions$vuescr3 = _this.mergedOptions.vuescroll.pushLoad,\n enable = _mergedOptions$vuescr3.enable,\n auto = _mergedOptions$vuescr3.auto,\n autoLoadDistance = _mergedOptions$vuescr3.autoLoadDistance;\n var _scroller = _this.scroller,\n __scrollTop = _scroller.__scrollTop,\n __maxScrollTop = _scroller.__maxScrollTop;\n if (stage != 'start' && enable && auto && !_this.lockAutoLoad &&\n // auto load debounce\n autoLoadDistance >= __maxScrollTop - __scrollTop && __scrollTop > 0) {\n _this.lockAutoLoad = true;\n _this.triggerRefreshOrLoad('load');\n }\n if (autoLoadDistance < __maxScrollTop - __scrollTop) {\n _this.lockAutoLoad = false;\n }\n _this.handleScroll(false);\n }\n break;\n case 'mouseup':\n _this.vuescroll.state.isDragging = false;\n break;\n }\n }, zooming, preventDefault, preventDefaultOnMove);\n this.updateScroller();\n return cb;\n },\n updateSlideModeBarState: function updateSlideModeBarState() {\n // update slide mode scrollbars' state\n var heightPercentage = void 0,\n widthPercentage = void 0;\n var vuescroll = this.$el;\n var scroller = this.scroller;\n var outerLeft = 0;\n var outerTop = 0;\n var _$el = this.$el,\n clientWidth = _$el.clientWidth,\n clientHeight = _$el.clientHeight;\n var contentWidth = clientWidth + this.scroller.__maxScrollLeft;\n var contentHeight = clientHeight + this.scroller.__maxScrollTop;\n\n // We should add the the height or width that is\n // out of horizontal bountry to the total length\n\n /* istanbul ignore if */\n if (scroller.__scrollLeft < 0) {\n outerLeft = -scroller.__scrollLeft;\n } /* istanbul ignore next */else if (scroller.__scrollLeft > scroller.__maxScrollLeft) {\n outerLeft = scroller.__scrollLeft - scroller.__maxScrollLeft;\n }\n\n // out of vertical bountry\n if (scroller.__scrollTop < 0) {\n outerTop = -scroller.__scrollTop;\n this.outTheBottomBoundary = false;\n this.outTheTopBoundary = true;\n } else if (scroller.__scrollTop > scroller.__maxScrollTop) {\n outerTop = scroller.__scrollTop - scroller.__maxScrollTop;\n this.outTheTopBoundary = false;\n this.outTheBottomBoundary = true;\n } else {\n this.outTheTopBoundary = this.outTheBottomBoundary = false;\n }\n heightPercentage = clientHeight / (contentHeight + outerTop);\n widthPercentage = clientWidth / (contentWidth + outerLeft);\n var scrollTop = Math.min(Math.max(0, scroller.__scrollTop), scroller.__maxScrollTop);\n var scrollLeft = Math.min(Math.max(0, scroller.__scrollLeft), scroller.__maxScrollLeft);\n this.bar.vBar.state.posValue = (scrollTop + outerTop) * 100 / vuescroll.clientHeight;\n this.bar.hBar.state.posValue = (scrollLeft + outerLeft) * 100 / vuescroll.clientWidth;\n\n /* istanbul ignore if */\n if (scroller.__scrollLeft < 0) {\n this.bar.hBar.state.posValue = 0;\n }\n if (scroller.__scrollTop < 0) {\n this.bar.vBar.state.posValue = 0;\n }\n this.bar.vBar.state.size = heightPercentage < 1 ? heightPercentage : 0;\n this.bar.hBar.state.size = widthPercentage < 1 ? widthPercentage : 0;\n },\n registryEvent: function registryEvent(type) {\n var domName = type == 'refresh' ? __REFRESH_DOM_NAME : __LOAD_DOM_NAME;\n var activateFunc = type == 'refresh' ? this.scroller.activatePullToRefresh : this.scroller.activatePushToLoad;\n var stageType = type == 'refresh' ? 'refreshStage' : 'loadStage';\n var tipDom = this.$refs[domName].elm || this.$refs[domName];\n var cbs = createStateCallbacks(type, stageType, this, tipDom);\n var height = tipDom.offsetHeight;\n activateFunc.bind(this.scroller)(height, cbs);\n },\n getSlidePosition: function getSlidePosition() {\n return {\n scrollLeft: this.scroller.__scrollLeft,\n scrollTop: this.scroller.__scrollTop\n };\n }\n }\n };\n\n /**\r\n * These mixes is exclusive for native mode\r\n */\n\n var nativeMix = {\n methods: {\n updateNativeModeBarState: function updateNativeModeBarState() {\n var container = this.scrollPanelElm;\n var isPercent = this.vuescroll.state.currentSizeStrategy == 'percent';\n var _vuescroll$state = this.vuescroll.state,\n width = _vuescroll$state.width,\n height = _vuescroll$state.height;\n var clientWidth = isPercent || !width ? container.clientWidth : width.slice(0, -2); // xxxpx ==> xxx\n var clientHeight = isPercent || !height ? container.clientHeight : height.slice(0, -2);\n var heightPercentage = clientHeight / container.scrollHeight;\n var widthPercentage = clientWidth / container.scrollWidth;\n this.bar.vBar.state.posValue = container.scrollTop * 100 / clientHeight;\n this.bar.hBar.state.posValue = container.scrollLeft * 100 / clientWidth;\n this.bar.vBar.state.size = heightPercentage < 1 ? heightPercentage : 0;\n this.bar.hBar.state.size = widthPercentage < 1 ? widthPercentage : 0;\n },\n getNativePosition: function getNativePosition() {\n return {\n scrollTop: this.scrollPanelElm.scrollTop,\n scrollLeft: this.scrollPanelElm.scrollLeft\n };\n },\n css: function css(dom, style) /* istanbul ignore next */{\n return window.getComputedStyle(dom)[style];\n },\n checkScrollable: function checkScrollable(e, deltaX, deltaY) /* istanbul ignore next */{\n var scrollable = false;\n\n // check mouse point scrollable.\n var dom = e.target ? e.target : e;\n while (dom && dom.nodeType == 1 && dom !== this.scrollPanelElm.parentNode && !/^BODY|HTML/.test(dom.nodeName)) {\n var ov = this.css(dom, 'overflow') || '';\n if (/scroll|auto/.test(ov)) {\n var _getScrollProcess = this.getScrollProcess(dom),\n v = _getScrollProcess.v,\n h = _getScrollProcess.h;\n var isScrollX = this.css(dom, 'overflowX') !== 'hidden';\n var isScrollY = this.css(dom, 'overflowY') !== 'hidden';\n if (isScrollX && (deltaX < 0 && h > 0 || deltaX > 0 && h < 1) || isScrollY && (deltaY < 0 && v > 0 || deltaY > 0 && v < 1)) {\n scrollable = dom == this.scrollPanelElm;\n break;\n }\n }\n dom = dom.parentNode ? dom.parentNode : false;\n }\n return scrollable;\n },\n onMouseWheel: function onMouseWheel(event) /* istanbul ignore next */{\n var _mergedOptions$vuescr = this.mergedOptions.vuescroll,\n isReverse = _mergedOptions$vuescr.wheelDirectionReverse,\n duration = _mergedOptions$vuescr.wheelScrollDuration,\n checkShiftKey = _mergedOptions$vuescr.checkShiftKey,\n locking = _mergedOptions$vuescr.locking,\n deltaPercent = _mergedOptions$vuescr.deltaPercent;\n var deltaX = void 0;\n var deltaY = void 0;\n if (event.wheelDelta) {\n if (event.deltaY || event.deltaX) {\n deltaX = event.deltaX * deltaPercent;\n deltaY = event.deltaY * deltaPercent;\n if (locking) {\n if (Math.abs(event.deltaX) > Math.abs(event.deltaY)) {\n deltaY = 0;\n } else {\n deltaX = 0;\n }\n }\n } else {\n deltaX = 0;\n deltaY = -1 * event.wheelDelta / 2;\n }\n } else if (event.detail) {\n deltaY = deltaX = event.detail * 16;\n // horizontal scroll\n if (event.axis == 1) {\n deltaY = 0;\n } else if (event.axis == 2) {\n // vertical scroll\n deltaX = 0;\n }\n }\n if (checkShiftKey && event.shiftKey) {\n // swap value\n deltaX ^= deltaY;\n deltaY ^= deltaX;\n deltaX ^= deltaY;\n }\n if (isReverse) {\n deltaX ^= deltaY;\n deltaY ^= deltaX;\n deltaX ^= deltaY;\n }\n if (this.checkScrollable(event, deltaX, deltaY)) {\n event.stopPropagation();\n event.preventDefault();\n this.scrollBy({\n dx: deltaX,\n dy: deltaY\n }, duration);\n }\n }\n },\n computed: {\n scrollContentElm: function scrollContentElm() {\n return this.$refs['scrollContent']._isVue ? this.$refs['scrollContent'].$el : this.$refs['scrollContent'];\n }\n }\n };\n var update = [slideMix, nativeMix];\n var mixins = [api$1].concat(toConsumableArray(update));\n var core$1 = {\n mixins: mixins,\n mounted: function mounted() {\n if (!this._isDestroyed && !this.renderError) {\n if (this.mode == 'slide') {\n this.updatedCbs.push(this.updateScroller);\n }\n this.$watch('mergedOptions.vuescroll.scroller.disable', {\n sync: true,\n handler: function handler(newVal) {\n if (this.scroller) {\n this.scroller.__disable = newVal;\n }\n }\n });\n }\n },\n computed: {\n mode: function mode() {\n return this.mergedOptions.vuescroll.mode;\n }\n },\n methods: {\n destroy: function destroy() {\n if (this.destroyScroller) {\n this.scroller.stop();\n this.destroyScroller();\n this.destroyScroller = null;\n }\n\n /* istanbul ignore next */\n if (this.destroyResize) {\n this.destroyResize();\n }\n },\n handleScroll: function handleScroll(nativeEvent) {\n this.updateBarStateAndEmitEvent('handle-scroll', nativeEvent);\n },\n updateBarStateAndEmitEvent: function updateBarStateAndEmitEvent(eventType) {\n var nativeEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (this.mode == 'native') {\n this.updateNativeModeBarState();\n } else if (this.mode == 'slide') {\n /* istanbul ignore if */\n if (!this.scroller) {\n return;\n }\n this.updateSlideModeBarState();\n }\n if (eventType) {\n this.emitEvent(eventType, nativeEvent);\n }\n if (this.mergedOptions.bar.onlyShowBarOnScroll) {\n if (eventType == 'handle-scroll' || eventType == 'handle-resize' || eventType == 'refresh-status' || eventType == 'window-resize' || eventType == 'options-change') {\n this.showAndDefferedHideBar(true /* forceHideBar: true */);\n }\n } else {\n this.showAndDefferedHideBar();\n }\n },\n getScrollProcess: function getScrollProcess() {\n var _scrollPanelElm = this.scrollPanelElm,\n scrollHeight = _scrollPanelElm.scrollHeight,\n scrollWidth = _scrollPanelElm.scrollWidth,\n clientHeight = _scrollPanelElm.clientHeight,\n clientWidth = _scrollPanelElm.clientWidth,\n scrollTop = _scrollPanelElm.scrollTop,\n scrollLeft = _scrollPanelElm.scrollLeft;\n if (this.mode == 'slide') {\n scrollHeight = this.scroller.__contentHeight;\n scrollWidth = this.scroller.__contentWidth;\n scrollTop = this.scroller.__scrollTop;\n scrollLeft = this.scroller.__scrollLeft;\n clientHeight = this.$el.clientHeight;\n clientWidth = this.$el.clientWidth;\n }\n var v = Math.min(scrollTop / (scrollHeight - clientHeight || 1), 1);\n var h = Math.min(scrollLeft / (scrollWidth - clientWidth || 1), 1);\n return {\n v: v,\n h: h\n };\n },\n emitEvent: function emitEvent(eventType) {\n var nativeEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var _scrollPanelElm2 = this.scrollPanelElm,\n scrollTop = _scrollPanelElm2.scrollTop,\n scrollLeft = _scrollPanelElm2.scrollLeft;\n var vertical = {\n type: 'vertical'\n };\n var horizontal = {\n type: 'horizontal'\n };\n var _getScrollProcess = this.getScrollProcess(),\n v = _getScrollProcess.v,\n h = _getScrollProcess.h;\n vertical['process'] = v;\n horizontal['process'] = h;\n vertical['barSize'] = this.bar.vBar.state.size;\n horizontal['barSize'] = this.bar.hBar.state.size;\n vertical['scrollTop'] = scrollTop;\n horizontal['scrollLeft'] = scrollLeft;\n this.$emit(eventType, vertical, horizontal, nativeEvent);\n },\n initVariables: function initVariables() {\n this.lastMode = this.mode;\n this.$el._isVuescroll = true;\n },\n refreshMode: function refreshMode() {\n var initPos = void 0;\n if (this.scroller) {\n initPos = this.scroller.getValues();\n }\n if (this.destroyScroller) {\n this.scroller.stop();\n this.destroyScroller();\n this.destroyScroller = null;\n }\n if (this.mode == 'slide') {\n this.destroyScroller = this.registryScroller(initPos);\n } else if (this.mode == 'native') {\n // remove the legacy transform style attribute\n this.scrollPanelElm.style.transform = '';\n this.scrollPanelElm.style.transformOrigin = '';\n }\n },\n refreshInternalStatus: function refreshInternalStatus() {\n // 1.set vuescroll height or width according to\n // sizeStrategy\n this.setVsSize();\n // 2. registry resize event\n this.registryResize();\n // 3. registry scroller if mode is 'slide'\n // or remove 'transform origin' is the mode is not `slide`\n this.refreshMode();\n // 4. update scrollbar's height/width\n this.updateBarStateAndEmitEvent('refresh-status');\n },\n registryResize: function registryResize() {\n var _this = this;\n var resizeEnable = this.mergedOptions.vuescroll.detectResize;\n var modeChanged = false;\n if (this.lastMode != this.mode) {\n modeChanged = true;\n this.lastMode = this.mode;\n }\n\n /* istanbul ignore next */\n if (this.destroyResize && resizeEnable && !modeChanged) {\n return;\n }\n if (this.destroyResize) {\n this.destroyResize();\n }\n if (!resizeEnable) {\n return;\n }\n var contentElm = null;\n if (this.mode == 'slide') {\n contentElm = this.scrollPanelElm;\n } else if (this.mode == 'native') {\n // scrollContent maybe a vue-component or a pure-dom\n contentElm = this.scrollContentElm;\n }\n var vm = this;\n var handleWindowResize = function handleWindowResize() /* istanbul ignore next */{\n vm.updateBarStateAndEmitEvent('window-resize');\n if (vm.mode == 'slide') {\n vm.updatedCbs.push(vm.updateScroller);\n vm.$forceUpdate();\n }\n };\n var handleDomResize = function handleDomResize() {\n var currentSize = {};\n if (_this.mode == 'slide') {\n currentSize['width'] = _this.scroller.__contentWidth;\n currentSize['height'] = _this.scroller.__contentHeight;\n _this.updateBarStateAndEmitEvent('handle-resize', currentSize);\n // update scroller should after rendering\n _this.updatedCbs.push(_this.updateScroller);\n _this.$forceUpdate();\n } else if (_this.mode == 'native') {\n currentSize['width'] = _this.scrollPanelElm.scrollWidth;\n currentSize['height'] = _this.scrollPanelElm.scrollHeight;\n _this.updateBarStateAndEmitEvent('handle-resize', currentSize);\n }\n\n // Since content sie changes, we should tell parent to set\n // correct size to fit content's size\n _this.setVsSize();\n };\n window.addEventListener('resize', handleWindowResize, false);\n var destroyDomResize = installResizeDetection(contentElm, handleDomResize);\n var destroyWindowResize = function destroyWindowResize() {\n window.removeEventListener('resize', handleWindowResize, false);\n };\n this.destroyResize = function () {\n destroyWindowResize();\n destroyDomResize();\n _this.destroyResize = null;\n };\n },\n getPosition: function getPosition() {\n if (this.mode == 'slide') {\n return this.getSlidePosition();\n } else if (this.mode == 'native') {\n return this.getNativePosition();\n }\n }\n }\n };\n\n /**\r\n * The slide mode config\r\n */\n\n var config = {\n // vuescroll\n vuescroll: {\n // position or transform\n renderMethod: 'transform',\n // pullRefresh or pushLoad is only for the slide mode...\n pullRefresh: {\n enable: false,\n tips: {\n deactive: 'Pull to Refresh',\n active: 'Release to Refresh',\n start: 'Refreshing...',\n beforeDeactive: 'Refresh Successfully!'\n }\n },\n pushLoad: {\n enable: false,\n tips: {\n deactive: 'Push to Load',\n active: 'Release to Load',\n start: 'Loading...',\n beforeDeactive: 'Load Successfully!'\n },\n auto: false,\n autoLoadDistance: 0\n },\n paging: false,\n zooming: true,\n snapping: {\n enable: false,\n width: 100,\n height: 100\n },\n /* some scroller options */\n scroller: {\n /** Enable bouncing (content can be slowly moved outside and jumps back after releasing) */\n bouncing: {\n top: 100,\n bottom: 100,\n left: 100,\n right: 100\n },\n /** Minimum zoom level */\n minZoom: 0.5,\n /** Maximum zoom level */\n maxZoom: 3,\n /** Multiply or decrease scrolling speed **/\n speedMultiplier: 1,\n /** This configures the amount of change applied to deceleration when reaching boundaries **/\n penetrationDeceleration: 0.03,\n /** This configures the amount of change applied to acceleration when reaching boundaries **/\n penetrationAcceleration: 0.08,\n /** Whether call e.preventDefault event when sliding the content or not */\n preventDefault: false,\n /** Whether call preventDefault when (mouse/touch)move*/\n preventDefaultOnMove: true,\n disable: false\n }\n }\n };\n /**\r\n * validate the options\r\n * @export\r\n * @param {any} ops\r\n */\n function configValidator(ops) {\n var renderError = false;\n var vuescroll = ops.vuescroll;\n\n // validate pushLoad, pullReresh, snapping\n\n if (vuescroll.paging == vuescroll.snapping.enable && vuescroll.paging && (vuescroll.pullRefresh || vuescroll.pushLoad)) {\n error('paging, snapping, (pullRefresh with pushLoad) can only one of them to be true.');\n }\n return renderError;\n }\n var config$1 = {\n vuescroll: {\n wheelScrollDuration: 0,\n wheelDirectionReverse: false,\n checkShiftKey: true,\n deltaPercent: 1\n }\n };\n var config$2 = {\n // vuescroll\n vuescroll: {\n mode: 'native'\n }\n };\n /**\r\n * validate the options\r\n * @export\r\n * @param {any} ops\r\n */\n function configValidator$1(ops) {\n var renderError = false;\n var vuescroll = ops.vuescroll;\n\n // validate modes\n\n if (!~modes.indexOf(vuescroll.mode)) {\n error('Unknown mode: ' + vuescroll.mode + ',the vuescroll\\'s option \"mode\" should be one of the ' + modes);\n renderError = true;\n }\n return renderError;\n }\n var configs = [config$2, config, config$1];\n var configValidators = [configValidator$1, configValidator];\n var component = _install(core$1, createPanel$2, configs, configValidators);\n function install(Vue) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n Vue.component(opts.name || component.name, component);\n Vue.prototype.$vuescrollConfig = opts.ops || {};\n }\n var Vuescroll = _extends({\n install: install,\n version: '4.18.1',\n refreshAll: refreshAll,\n scrollTo: scrollTo\n }, component);\n\n /* istanbul ignore if */\n if (typeof window !== 'undefined' && window.Vue) {\n window.Vue.use(Vuescroll);\n }\n return Vuescroll;\n});","map":{"version":3,"names":["global","factory","exports","module","require","define","amd","self","vuescroll","Vue","Object","prototype","hasOwnProperty","call","_typeof","Symbol","iterator","obj","constructor","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","defineProperty","key","protoProps","staticProps","value","_extends","assign","arguments","source","toConsumableArray","arr","Array","isArray","arr2","from","isIE","isServer","agent","navigator","userAgent","toLowerCase","indexOf","isIos","u","match","$isServer","touchManager","getEventObject","originEvent","touchObject","isTouch","touches","getTouchObject","platform","touch","window","opera","maxTouchPoints","msMaxTouchPoints","nonDeskTouch","test","eventType","touchstart","touchend","touchmove","touchenter","touchleave","touchcancel","ZoomManager","_this","originPixelRatio","getRatio","lastPixelRatio","addEventListener","ratio","screen","ua","devicePixelRatio","undefined","deviceXDPI","logicalXDPI","outerWidth","innerWidth","Math","round","getRatioBetweenPreAndCurrent","deepCopy","to","shallow","isUndef","forEach","item","index","isPlainObj","mergeObject","force","defineReactive","souceKey","get","scrollBarWidth","zoomManager","getGutter","outer","document","createElement","style","visibility","width","position","top","body","appendChild","widthNoScroll","offsetWidth","overflow","inner","widthWithScroll","parentNode","removeChild","eventCenter","dom","eventName","hander","capture","type","removeEventListener","error","msg","console","warn","isChildInParent","child","parent","flag","nodeType","_isVuescroll","getPrefix","docStyle","documentElement","engine","toString","cpuClass","vendorPrefix","trident","gecko","webkit","presto","getComplitableStyle","property","compatibleValue","testElm","insertChildrenIntoSlot","h","parentVnode","childVNode","data","swapChildren","concat","_getVnodeInfo","getVnodeInfo","ch","tag","isComponent","attrs","componentOptions","propsData","slot","vnode","children","getRealParent","ctx","$parent","_isVuescrollRoot","_","getNumericValue","distance","size","number","exec","createStyle","styleId","cssText","getElementById","head","doc","getElementsByTagName","id","styleSheet","createTextNode","createHideBarStyle","createSlideModeStyle","api","mounted","vsInstances","_uid","beforeDestroy","methods","scrollTo","_ref","speed","easing","x","y","mergedOptions","scrollPanel","internalScrollTo","scrollBy","_ref2","_ref2$dx","dx","_ref2$dy","dy","_getPosition","getPosition","_getPosition$scrollLe","scrollLeft","_getPosition$scrollTo","scrollTop","scrollPanelElm","scrollWidth","$el","clientWidth","scrollHeight","clientHeight","scrollIntoView","elm","animate","parentElm","querySelector","_$el$getBoundingClien","getBoundingClientRect","left","_elm$getBoundingClien","childLeft","childTop","diffX","diffY","refresh","refreshInternalStatus","$nextTick","refreshAll","vs","baseConfig","sizeStrategy","detectResize","locking","initialScrollY","initialScrollX","scrollingX","scrollingY","verticalNativeBarPos","maxHeight","maxWidth","rail","background","opacity","border","specifyBorderRadius","gutterOfEnds","gutterOfSide","keepShow","bar","showDelay","onlyShowBarOnScroll","minSize","disable","scrollButton","enable","step","mousedownStep","validateOps","ops","renderError","_ops$bar","vBar","hBar","_ops$rail","vRail","hRail","String","_extraValidate","hasError","extendOpts","extraOpts","extraValidate","opts","modes","NOOP","smallChangeArray","__REFRESH_DOM_NAME","__LOAD_DOM_NAME","scrollMap","vertical","opsSize","posName","opposName","sidePosName","page","scroll","scrollSize","offset","client","axis","start","end","horizontal","requestAnimationFrame","requestFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","isNative","callback","root","TARGET_FPS","requests","rafHandle","intervalHandle","lastActive","Date","callbackHandle","setInterval","time","currentRequests","clearInterval","colorCache","rgbReg","extractRgbColor","getRgbAColor","color","div","computedColor","getComputedStyle","backgroundColor","name","state","hideBar","Boolean","otherBarHide","computed","barSize","max","barRatio","render","_style","_style2","_barStyle","vm","railBackgroundColor","railSize","endPos","touchObj","class","borderRadius","_rail$on","on","setRailHover","setRailLeave","buttonSize","barWrapper","scrollDistance","posValue","pos","setClassHook","barStyle","cursor","margin","transition","ref","right","height","bottom","_touchObj","createBarEvent","createTrackEvent","createScrollbarButton","isBarDragging","isRailHover","showBar","setBarDrag","val","$emit","mousedown","e","event","stopImmediatePropagation","preventDefault","onselectstart","axisStartPos","$refs","mousemove","mouseup","thubmParent","thumb","delta","percent","handleClickTrack","_ctx$bar","barOffset","currentTarget","_style3","barContext","_barContext$ops$scrol","borderColor","wrapperProps","innerProps","createScrollButtonEvent","_ctx$ops$scrollButton","stepWithDirection","mousedownStepWithDirection","barType","isMouseDown","isMouseout","timeoutId","which","endPress","enter","leave","clearTimeout","setTimeout","pressing","getBarData","charAt","refreshLoad","keepShowRail","createBar","verticalBarProps","horizontalBarProps","createComponent","_render","components","mixins","created","_gfc","$vuescrollConfig","$options","keys","$slots","padding","__vuescroll","classHooks","_data$on","pointerLeave","updateBarStateAndEmitEvent","_customContainer","_this2","initVariables","initWatchOpsChange","updatedCbs","push","scrollToAnchor","updated","_this3","cb","destroy","_isVue","isDragging","currentSizeStrategy","currentScrollState","currentScrollInfo","scrollContent","hasVBar","hasHBar","vBarVisible","hBarVisible","vBarDragging","hBarDragging","clikingVerticalStartButton","clikingVerticalEndButton","clikingHorizontalStartButton","clikingHorizontalEndButton","mouseEnter","scrollingComplete","showAndDefferedHideBar","forceHideBar","_this4","_vuescroll$state","useNumbericSize","_mergedOptions$scroll","_$el$parentNode","parentClientHeight","parentClientWidth","_scrollPanelElm","usePercentSize","setVsSize","_mergedOptions$scroll2","_scrollPanelElm2","_this5","watchOpts","deep","sync","$watch","isSmallChangeThisTick","validateHashSelector","hash","location","slice","lastIndexOf","required","updateInitialScroll","_isDestroyed","boxSizing","_customPanel","default","_install","core","_components","extraConfigs","extraValidators","comp","getCurrentViewportDom","container","domFragment","isCurrentview","_dom$getBoundingClien","_container$getBoundin","parentLeft","parentTop","parentHeight","parentWidth","isResizeElm","createEasingFunction","easingPattern","pattern","noop","now","getTime","ScrollControl","init","isRunning","pause","isPaused","stop","isStopped","_continue","ts","spd","execScroll","startScroll","st","ed","stepCb","completeCb","vertifyCb","easingMethod","df","dir","nt","loop","_elm","scrollX","scrollY","scrollingElement","_elm2","nativeApi","nativeStop","nativePause","nativeContinue","continue","nativeScrollTo","bind","getCurrentviewDomNative","scrollContentElm","getPanelData","context","overflowY","overflowX","nativeOn","handleScroll","scrollYEnable","scrollXEnable","DOMMouseScroll","mousewheel","onMouseWheel","_context$mergedOption","gutter","marginRight","marginLeft","transformOrigin","transform","createPanel","getPanelChildren","viewStyle","_customContent","paddingRight","getPanelData$1","renderMethod","getPanelChildren$1","renderChildren","finalChildren","pullRefresh","refrehDomVisiable","createTipDom","pullRefreshTip","pushLoad","loadDomVisiable","pushLoadTip","tip","stage","className","version","xmlns","xmlnsXlink","viewBox","xmlSpace","d","stroke","cx","cy","r","fill","createPanel$1","createPanel$2","mode","installResizeDetection","element","injectObject","hasResized","OBJECT_STYLE","objWrap","object","tabIndex","onload","contentDocument","defaultView","slideApi","slideScrollTo","scroller","__maxScrollLeft","__maxScrollTop","zoomBy","factor","originLeft","originTop","zoomTo","level","getCurrentPage","paging","goToPage","dest","triggerRefreshOrLoad","isRefresh","isLoad","getCurrentviewDomSlide","api$1","destX","destY","getCurrentviewDom","desiredFrames","millisecondsPerSecond","running","counter","effect","Animate","cleared","stepCallback","verifyCallback","completedCallback","duration","lastFrame","dropCounter","newRunning","usedId","virtual","droppedFrames","j","min","animatingMethod","noAnimatingMethod","Scroller","options","__callback","animating","animationDuration","bouncing","snapping","zooming","minZoom","maxZoom","speedMultiplier","animatingEasing","noAnimatingEasing","penetrationDeceleration","penetrationAcceleration","members","__isSingleTouch","__isTracking","__didDecelerationComplete","__isGesturing","__isDragging","__isDecelerating","__isAnimating","__clientLeft","__clientTop","__clientWidth","__clientHeight","__contentWidth","__contentHeight","__snapWidth","__snapHeight","__refreshHeight","__loadHeight","__refreshActive","__refreshActivate","__refreshBeforeDeactivate","__refreshDeactivate","__refreshStart","__loadActive","__loadActivate","__loadBeforeDeactivate","__loadDeactivate","__loadStart","__zoomLevel","__scrollLeft","__scrollTop","__scheduledLeft","__scheduledTop","__scheduledZoom","__currentPageX","__currentPageY","__totalXPage","__totalYPage","__disable","__lastTouchLeft","__lastTouchTop","__lastTouchMove","__positions","__minDecelerationScrollLeft","__minDecelerationScrollTop","__maxDecelerationScrollLeft","__maxDecelerationScrollTop","__decelerationVelocityX","__decelerationVelocityY","setDimensions","contentWidth","contentHeight","noScroll","__computeScrollMax","setPosition","setSnapSize","activatePullToRefresh","activateCallback","deactivateCallback","startCallback","beforeDeactivateCallback","beforeDeactiveEnd","__refreshBeforeDeactiveEnd","activatePushToLoad","__loadBeforeDeactiveEnd","wasDecelerating","__refreshBeforeDeactiveStarted","__publish","__loadBeforeDeactiveStarted","finishRefreshOrLoad","endRefreshActive","endLoadActive","getValues","zoom","getScrollMax","Error","__zoomComplete","oldLevel","startLeft","startTop","__computePage","_ref3","isNaN","doMouseZoom","wheelDelta","timeStamp","pageX","pageY","change","doTouchStart","valueOf","__interruptedAnimation","currentTouchLeft","currentTouchTop","isSingleTouch","abs","__initialTouchLeft","__initialTouchTop","__zoomLevelStart","__lastScale","__enableScrollX","__enableScrollY","doTouchMove","scale","positions","moveX","moveY","currentTouchLeftRel","currentTouchTopRel","maxScrollLeft","maxScrollTop","splice","minimumTrackingForScroll","minimumTrackingForDrag","distanceX","distanceY","doTouchEnd","startPos","timeOffset","movedLeft","movedTop","minVelocityToStartDeceleration","__startDeceleration","__scrollComplete","onScroll","wasAnimating","oldLeft","oldTop","oldZoom","diffLeft","diffTop","diffZoom","verify","completed","renderedFramesPerSecond","animationId","wasFinished","easingFunction","zoomLevel","ceil","floor","__stepThroughDeceleration","minVelocityToKeepDecelerating","shouldContinue","minLeft","maxLeft","minTop","maxTop","bounceX","bounceY","fixedScrollLeft","fixedScrollTop","frictionFactor","scrollOutsideX","scrollOutsideY","content","suffix","helperElem","undef","perspectiveProperty","transformProperty","listenContainer","eventCallback","preventDefaultOnMove","tagName","stopPropagation","passive","zoomHandle","detail","createStateCallbacks","stageType","tipDom","listeners","$listeners","done","slideMix","vsMounted","tips","refreshStage","loadStage","outTheTopBoundary","outTheBottomBoundary","updateScroller","updateDimesion","registryRefreshLoad","refreshHeight","loadHeight","refreshDom","offsetHeight","marginTop","loadDom","registryEvent","registryScroller","_ref$left","_ref$top","_ref$zoom","_mergedOptions$vuescr","_mergedOptions$vuescr2","rect","clientLeft","clientTop","_mergedOptions$vuescr3","auto","autoLoadDistance","_scroller","lockAutoLoad","updateSlideModeBarState","heightPercentage","widthPercentage","outerLeft","outerTop","_$el","domName","activateFunc","cbs","getSlidePosition","nativeMix","updateNativeModeBarState","isPercent","getNativePosition","css","checkScrollable","deltaX","deltaY","scrollable","nodeName","ov","_getScrollProcess","getScrollProcess","v","isScrollX","isScrollY","isReverse","wheelDirectionReverse","wheelScrollDuration","checkShiftKey","deltaPercent","shiftKey","update","core$1","handler","newVal","destroyScroller","destroyResize","nativeEvent","emitEvent","lastMode","refreshMode","initPos","registryResize","resizeEnable","modeChanged","contentElm","handleWindowResize","$forceUpdate","handleDomResize","currentSize","destroyDomResize","destroyWindowResize","config","deactive","active","beforeDeactive","configValidator","config$1","config$2","configValidator$1","configs","configValidators","component","install","Vuescroll","use"],"sources":["/Users/mac/projects/mime/mine/node_modules/vuescroll/dist/vuescroll.js"],"sourcesContent":["/*\n * Vuescroll v4.18.1\n * (c) 2018-2023 Yi(Yves) Wang\n * Released under the MIT License\n * Github: https://github.com/YvesCoding/vuescroll\n * Website: http://vuescrolljs.yvescoding.me/\n */\n \n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('vue')) :\n typeof define === 'function' && define.amd ? define(['vue'], factory) :\n (global = global || self, global.vuescroll = factory(global.Vue));\n}(this, (function (Vue) { 'use strict';\n\n Vue = Vue && Object.prototype.hasOwnProperty.call(Vue, 'default') ? Vue['default'] : Vue;\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n var classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n\n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n };\n\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n var toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n };\n\n function isIE() {\n /* istanbul ignore if */\n if (isServer()) return false;\n\n var agent = navigator.userAgent.toLowerCase();\n return agent.indexOf('msie') !== -1 || agent.indexOf('trident') !== -1 || agent.indexOf(' edge/') !== -1;\n }\n\n var isIos = function isIos() {\n /* istanbul ignore if */\n if (isServer()) return false;\n\n var u = navigator.userAgent;\n return !!u.match(/\\(i[^;]+;( U;)? CPU.+Mac OS X/);\n };\n\n /* istanbul ignore next */\n var isServer = function isServer() {\n return Vue.prototype.$isServer;\n };\n\n var touchManager = function () {\n function touchManager() {\n classCallCheck(this, touchManager);\n }\n\n createClass(touchManager, [{\n key: 'getEventObject',\n value: function getEventObject(originEvent) {\n return this.touchObject ? this.isTouch ? originEvent.touches : [originEvent] : null;\n }\n }, {\n key: 'getTouchObject',\n value: function getTouchObject() /* istanbul ignore next */{\n if (isServer()) return null;\n\n this.isTouch = false;\n var agent = navigator.userAgent,\n platform = navigator.platform,\n touchObject = {};\n touchObject.touch = !!('ontouchstart' in window && !window.opera || 'msmaxtouchpoints' in window.navigator || 'maxtouchpoints' in window.navigator || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0);\n touchObject.nonDeskTouch = touchObject.touch && !/win32/i.test(platform) || touchObject.touch && /win32/i.test(platform) && /mobile/i.test(agent);\n\n touchObject.eventType = 'onmousedown' in window && !touchObject.nonDeskTouch ? 'mouse' : 'ontouchstart' in window ? 'touch' : 'msmaxtouchpoints' in window.navigator || navigator.msMaxTouchPoints > 0 ? 'mstouchpoints' : 'maxtouchpoints' in window.navigator || navigator.maxTouchPoints > 0 ? 'touchpoints' : 'mouse';\n switch (touchObject.eventType) {\n case 'mouse':\n touchObject.touchstart = 'mousedown';\n touchObject.touchend = 'mouseup';\n touchObject.touchmove = 'mousemove';\n\n touchObject.touchenter = 'mouseenter';\n touchObject.touchmove = 'mousemove';\n touchObject.touchleave = 'mouseleave';\n break;\n case 'touch':\n touchObject.touchstart = 'touchstart';\n touchObject.touchend = 'touchend';\n touchObject.touchmove = 'touchmove';\n touchObject.touchcancel = 'touchcancel';\n\n touchObject.touchenter = 'touchstart';\n touchObject.touchmove = 'touchmove';\n touchObject.touchleave = 'touchend';\n this.isTouch = true;\n break;\n case 'mstouchpoints':\n touchObject.touchstart = 'MSPointerDown';\n touchObject.touchend = 'MSPointerUp';\n touchObject.touchmove = 'MSPointerMove';\n touchObject.touchcancel = 'MSPointerCancel';\n\n touchObject.touchenter = 'MSPointerDown';\n touchObject.touchmove = 'MSPointerMove';\n touchObject.touchleave = 'MSPointerUp';\n break;\n case 'touchpoints':\n touchObject.touchstart = 'pointerdown';\n touchObject.touchend = 'pointerup';\n touchObject.touchmove = 'pointermove';\n touchObject.touchcancel = 'pointercancel';\n\n touchObject.touchenter = 'pointerdown';\n touchObject.touchmove = 'pointermove';\n touchObject.touchleave = 'pointerup';\n break;\n }\n\n return this.touchObject = touchObject;\n }\n }]);\n return touchManager;\n }();\n\n /**\r\n * ZoomManager\r\n * Get the browser zoom ratio\r\n */\n\n var ZoomManager = function () {\n function ZoomManager() {\n var _this = this;\n\n classCallCheck(this, ZoomManager);\n\n this.originPixelRatio = this.getRatio();\n this.lastPixelRatio = this.originPixelRatio;\n window.addEventListener('resize', function () {\n _this.lastPixelRatio = _this.getRatio();\n });\n }\n\n createClass(ZoomManager, [{\n key: 'getRatio',\n value: function getRatio() {\n var ratio = 0;\n var screen = window.screen;\n var ua = navigator.userAgent.toLowerCase();\n\n if (window.devicePixelRatio !== undefined) {\n ratio = window.devicePixelRatio;\n } else if (~ua.indexOf('msie')) {\n if (screen.deviceXDPI && screen.logicalXDPI) {\n ratio = screen.deviceXDPI / screen.logicalXDPI;\n }\n } else if (window.outerWidth !== undefined && window.innerWidth !== undefined) {\n ratio = window.outerWidth / window.innerWidth;\n }\n\n if (ratio) {\n ratio = Math.round(ratio * 100);\n }\n\n return ratio;\n }\n }, {\n key: 'getRatioBetweenPreAndCurrent',\n value: function getRatioBetweenPreAndCurrent() {\n return this.originPixelRatio / this.lastPixelRatio;\n }\n }]);\n return ZoomManager;\n }();\n\n function deepCopy(from, to, shallow) {\n if (shallow && isUndef(to)) {\n return from;\n }\n\n if (isArray(from)) {\n to = [];\n from.forEach(function (item, index) {\n to[index] = deepCopy(item, to[index]);\n });\n } else if (from) {\n if (!isPlainObj(from)) {\n return from;\n }\n to = {};\n for (var key in from) {\n to[key] = _typeof(from[key]) === 'object' ? deepCopy(from[key], to[key]) : from[key];\n }\n }\n return to;\n }\n\n function mergeObject(from, to, force, shallow) {\n if (shallow && isUndef(to)) {\n return from;\n }\n\n to = to || {};\n\n if (isArray(from)) {\n if (!isArray(to) && force) {\n to = [];\n }\n if (isArray(to)) {\n from.forEach(function (item, index) {\n to[index] = mergeObject(item, to[index], force, shallow);\n });\n }\n } else if (from) {\n if (!isPlainObj(from)) {\n if (force) {\n to = from;\n }\n } else {\n for (var key in from) {\n if (_typeof(from[key]) === 'object') {\n if (isUndef(to[key])) {\n to[key] = deepCopy(from[key], to[key], shallow);\n } else {\n mergeObject(from[key], to[key], force, shallow);\n }\n } else {\n if (isUndef(to[key]) || force) to[key] = from[key];\n }\n }\n }\n }\n\n return to;\n }\n\n function defineReactive(target, key, source, souceKey) {\n /* istanbul ignore if */\n if (!source[key] && typeof source !== 'function') {\n return;\n }\n souceKey = souceKey || key;\n Object.defineProperty(target, key, {\n get: function get() {\n return source[souceKey];\n },\n\n configurable: true\n });\n }\n\n var scrollBarWidth = void 0;\n var zoomManager = void 0;\n function getGutter() {\n /* istanbul ignore next */\n if (isServer()) return 0;\n if (!zoomManager) {\n zoomManager = new ZoomManager();\n }\n if (scrollBarWidth !== undefined) return scrollBarWidth * zoomManager.getRatioBetweenPreAndCurrent();\n var outer = document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.width = '100px';\n outer.style.position = 'absolute';\n outer.style.top = '-9999px';\n document.body.appendChild(outer);\n\n var widthNoScroll = outer.offsetWidth;\n outer.style.overflow = 'scroll';\n\n var inner = document.createElement('div');\n inner.style.width = '100%';\n outer.appendChild(inner);\n\n var widthWithScroll = inner.offsetWidth;\n outer.parentNode.removeChild(outer);\n scrollBarWidth = widthNoScroll - widthWithScroll;\n // multi the browser zoom\n if (!zoomManager) {\n zoomManager = new ZoomManager();\n }\n return scrollBarWidth * zoomManager.getRatioBetweenPreAndCurrent();\n }\n\n function eventCenter(dom, eventName, hander) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var type = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'on';\n\n type == 'on' ? dom.addEventListener(eventName, hander, capture) : dom.removeEventListener(eventName, hander, capture);\n }\n\n var error = function error(msg) {\n console.error('[vuescroll] ' + msg);\n };\n var warn = function warn(msg) {\n console.warn('[vuescroll] ' + msg);\n };\n\n function isChildInParent(child, parent) {\n var flag = false;\n if (!child || !parent) {\n return flag;\n }\n while (child.parentNode !== parent && child.parentNode.nodeType !== 9 && !child.parentNode._isVuescroll) {\n child = child.parentNode;\n }\n if (child.parentNode == parent) {\n flag = true;\n }\n return flag;\n }\n\n function getPrefix(global) {\n var docStyle = document.documentElement.style;\n var engine;\n /* istanbul ignore if */\n if (global.opera && Object.prototype.toString.call(opera) === '[object Opera]') {\n engine = 'presto';\n } /* istanbul ignore next */else if ('MozAppearance' in docStyle) {\n engine = 'gecko';\n } else if ('WebkitAppearance' in docStyle) {\n engine = 'webkit';\n } /* istanbul ignore next */else if (typeof navigator.cpuClass === 'string') {\n engine = 'trident';\n }\n var vendorPrefix = {\n trident: 'ms',\n gecko: 'moz',\n webkit: 'webkit',\n presto: 'O'\n }[engine];\n return vendorPrefix;\n }\n\n function getComplitableStyle(property, value) {\n /* istanbul ignore if */\n if (isServer()) return false;\n\n var compatibleValue = '-' + getPrefix(window) + '-' + value;\n var testElm = document.createElement('div');\n testElm.style[property] = compatibleValue;\n if (testElm.style[property] == compatibleValue) {\n return compatibleValue;\n }\n /* istanbul ignore next */\n return false;\n }\n\n /**\r\n * Insert children into user-passed slot at vnode level\r\n */\n function insertChildrenIntoSlot(h) {\n var parentVnode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var childVNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var data = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var swapChildren = arguments[4];\n\n /* istanbul ignore if */\n if (parentVnode && parentVnode.length > 1) {\n return swapChildren ? [].concat(toConsumableArray(childVNode), toConsumableArray(parentVnode)) : [].concat(toConsumableArray(parentVnode), toConsumableArray(childVNode));\n }\n\n parentVnode = parentVnode[0];\n\n var _getVnodeInfo = getVnodeInfo(parentVnode),\n ch = _getVnodeInfo.ch,\n tag = _getVnodeInfo.tag,\n isComponent = _getVnodeInfo.isComponent;\n\n if (isComponent) {\n parentVnode.data = mergeObject({ attrs: parentVnode.componentOptions.propsData }, parentVnode.data, false, // force: false\n true // shallow: true\n );\n }\n ch = swapChildren ? [].concat(toConsumableArray(childVNode), toConsumableArray(ch)) : [].concat(toConsumableArray(ch), toConsumableArray(childVNode));\n delete parentVnode.data.slot;\n\n return h(tag, mergeObject(data, parentVnode.data, false, true), ch);\n }\n\n /**\r\n * Get the info of a vnode,\r\n * vnode must be parentVnode\r\n */\n function getVnodeInfo(vnode) {\n if (!vnode || vnode.length > 1) return {};\n\n vnode = vnode[0] ? vnode[0] : vnode;\n var isComponent = !!vnode.componentOptions;\n var ch = void 0;\n var tag = void 0;\n\n if (isComponent) {\n ch = vnode.componentOptions.children || [];\n tag = vnode.componentOptions.tag;\n } else {\n ch = vnode.children || [];\n tag = vnode.tag;\n }\n\n return {\n isComponent: isComponent,\n ch: ch,\n tag: tag\n };\n }\n\n /**\r\n * Get the vuescroll instance instead of\r\n * user pass component like slot.\r\n */\n function getRealParent(ctx) {\n var parent = ctx.$parent;\n if (!parent._isVuescrollRoot && parent) {\n parent = parent.$parent;\n }\n return parent;\n }\n\n var isArray = function isArray(_) {\n return Array.isArray(_);\n };\n var isPlainObj = function isPlainObj(_) {\n return Object.prototype.toString.call(_) == '[object Object]';\n };\n var isUndef = function isUndef(_) {\n return typeof _ === 'undefined';\n };\n\n function getNumericValue(distance, size) {\n var number = void 0;\n if (!(number = /(-?\\d+(?:\\.\\d+?)?)%$/.exec(distance))) {\n number = distance - 0;\n } else {\n number = number[1] - 0;\n number = size * number / 100;\n }\n return number;\n }\n\n function createStyle(styleId, cssText) {\n /* istanbul ignore if */\n if (isServer() || document.getElementById(styleId)) {\n return;\n }\n\n var head = document.head || doc.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n\n style.id = styleId;\n style.type = 'text/css';\n\n /* istanbul ignore if */\n if (style.styleSheet) {\n style.styleSheet.cssText = cssText;\n } else {\n style.appendChild(document.createTextNode(cssText));\n }\n\n head.appendChild(style);\n }\n\n // Hide the ios native scrollbar.\n function createHideBarStyle() {\n /* istanbul ignore next */\n {\n var cssText = '.__hidebar::-webkit-scrollbar {\\n width: 0;\\n height: 0;\\n }';\n\n createStyle('vuescroll-hide-ios-bar', cssText);\n }\n }\n\n // create slide mode style\n function createSlideModeStyle() {\n var cssText = '\\n @-webkit-keyframes loading-rotate {\\n to {\\n -webkit-transform: rotate(1turn);\\n transform: rotate(1turn);\\n }\\n }\\n\\n @keyframes loading-rotate {\\n to {\\n -webkit-transform: rotate(1turn);\\n transform: rotate(1turn);\\n }\\n }\\n\\n @-webkit-keyframes loading-wipe {\\n 0% {\\n stroke-dasharray: 1, 200;\\n stroke-dashoffset: 0;\\n }\\n 50% {\\n stroke-dasharray: 90, 150;\\n stroke-dashoffset: -40px;\\n }\\n to {\\n stroke-dasharray: 90, 150;\\n stroke-dashoffset: -120px;\\n }\\n }\\n\\n @keyframes loading-wipe {\\n 0% {\\n stroke-dasharray: 1, 200;\\n stroke-dashoffset: 0;\\n }\\n 50% {\\n stroke-dasharray: 90, 150;\\n stroke-dashoffset: -40px;\\n }\\n to {\\n stroke-dasharray: 90, 150;\\n stroke-dashoffset: -120px;\\n }\\n }\\n\\n .__vuescroll .__refresh,\\n .__vuescroll .__load {\\n position: absolute;\\n width: 100%;\\n color: black;\\n height: 50px;\\n line-height: 50px;\\n text-align: center;\\n font-size: 16px;\\n }\\n .__vuescroll .__refresh svg,\\n .__vuescroll .__load svg {\\n margin-right: 10px;\\n width: 25px;\\n height: 25px;\\n vertical-align: sub;\\n }\\n .__vuescroll .__refresh svg.active,\\n .__vuescroll .__load svg.active {\\n transition: all 0.2s;\\n }\\n .__vuescroll .__refresh svg.active.deactive,\\n .__vuescroll .__load svg.active.deactive {\\n transform: rotateZ(180deg);\\n }\\n .__vuescroll .__refresh svg path,\\n .__vuescroll .__refresh svg rect,\\n .__vuescroll .__load svg path,\\n .__vuescroll .__load svg rect {\\n fill: #20a0ff;\\n }\\n .__vuescroll .__refresh svg.start,\\n .__vuescroll .__load svg.start {\\n stroke: #343640;\\n stroke-width: 4;\\n stroke-linecap: round;\\n -webkit-animation: loading-rotate 2s linear infinite;\\n animation: loading-rotate 2s linear infinite;\\n }\\n .__vuescroll .__refresh svg.start .bg-path,\\n .__vuescroll .__load svg.start .bg-path {\\n stroke: #f2f2f2;\\n fill: none;\\n }\\n .__vuescroll .__refresh svg.start .active-path,\\n .__vuescroll .__load svg.start .active-path {\\n stroke: #20a0ff;\\n fill: none;\\n stroke-dasharray: 90, 150;\\n stroke-dashoffset: 0;\\n -webkit-animation: loading-wipe 1.5s ease-in-out infinite;\\n animation: loading-wipe 1.5s ease-in-out infinite;\\n }\\n ';\n\n createStyle('vuescroll-silde-mode-style', cssText);\n }\n\n var api = {\n mounted: function mounted() {\n vsInstances[this._uid] = this;\n },\n beforeDestroy: function beforeDestroy() {\n delete vsInstances[this._uid];\n },\n\n methods: {\n // public api\n scrollTo: function scrollTo(_ref, speed, easing) {\n var x = _ref.x,\n y = _ref.y;\n\n // istanbul ignore if\n if (speed === true || typeof speed == 'undefined') {\n speed = this.mergedOptions.scrollPanel.speed;\n }\n this.internalScrollTo(x, y, speed, easing);\n },\n scrollBy: function scrollBy(_ref2, speed, easing) {\n var _ref2$dx = _ref2.dx,\n dx = _ref2$dx === undefined ? 0 : _ref2$dx,\n _ref2$dy = _ref2.dy,\n dy = _ref2$dy === undefined ? 0 : _ref2$dy;\n\n var _getPosition = this.getPosition(),\n _getPosition$scrollLe = _getPosition.scrollLeft,\n scrollLeft = _getPosition$scrollLe === undefined ? 0 : _getPosition$scrollLe,\n _getPosition$scrollTo = _getPosition.scrollTop,\n scrollTop = _getPosition$scrollTo === undefined ? 0 : _getPosition$scrollTo;\n\n if (dx) {\n scrollLeft += getNumericValue(dx, this.scrollPanelElm.scrollWidth - this.$el.clientWidth);\n }\n if (dy) {\n scrollTop += getNumericValue(dy, this.scrollPanelElm.scrollHeight - this.$el.clientHeight);\n }\n this.internalScrollTo(scrollLeft, scrollTop, speed, easing);\n },\n scrollIntoView: function scrollIntoView(elm) {\n var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var parentElm = this.$el;\n\n if (typeof elm === 'string') {\n elm = parentElm.querySelector(elm);\n }\n\n if (!isChildInParent(elm, parentElm)) {\n warn('The element or selector you passed is not the element of Vuescroll, please pass the element that is in Vuescroll to scrollIntoView API. ');\n return;\n }\n\n // parent elm left, top\n\n var _$el$getBoundingClien = this.$el.getBoundingClientRect(),\n left = _$el$getBoundingClien.left,\n top = _$el$getBoundingClien.top;\n // child elm left, top\n\n\n var _elm$getBoundingClien = elm.getBoundingClientRect(),\n childLeft = _elm$getBoundingClien.left,\n childTop = _elm$getBoundingClien.top;\n\n var diffX = left - childLeft;\n var diffY = top - childTop;\n\n this.scrollBy({\n dx: -diffX,\n dy: -diffY\n }, animate);\n },\n refresh: function refresh() {\n this.refreshInternalStatus();\n // refresh again to keep status is correct\n this.$nextTick(this.refreshInternalStatus);\n }\n }\n };\n\n /** Public Api */\n\n /**\r\n * Refresh all\r\n */\n var vsInstances = {};\n function refreshAll() {\n for (var vs in vsInstances) {\n vsInstances[vs].refresh();\n }\n }\n\n var baseConfig = {\n // vuescroll\n vuescroll: {\n // vuescroll's size(height/width) should be a percent(100%)\n // or be a number that is equal to its parentNode's width or\n // height ?\n sizeStrategy: 'percent',\n /** Whether to detect dom resize or not */\n detectResize: true,\n /** Enable locking to the main axis if user moves only slightly on one of them at start */\n locking: true\n },\n scrollPanel: {\n // when component mounted.. it will automatically scrolls.\n initialScrollY: false,\n initialScrollX: false,\n // feat: #11\n scrollingX: true,\n scrollingY: true,\n speed: 300,\n easing: undefined,\n // Sometimes, the nativebar maybe on the left,\n // See https://github.com/YvesCoding/vuescroll/issues/64\n verticalNativeBarPos: 'right',\n maxHeight: undefined,\n maxWidth: undefined\n },\n\n //\n rail: {\n background: '#01a99a',\n opacity: 0,\n border: 'none',\n /** Rail's size(Height/Width) , default -> 6px */\n size: '6px',\n /** Specify rail's border-radius, or the border-radius of rail and bar will be equal to the rail's size. default -> false **/\n specifyBorderRadius: false,\n /** Rail the distance from the two ends of the X axis and Y axis. **/\n gutterOfEnds: null,\n /** Rail the distance from the side of container. **/\n gutterOfSide: '2px',\n /** Whether to keep rail show or not, default -> false, event content height is not enough */\n keepShow: false\n },\n bar: {\n /** How long to hide bar after mouseleave, default -> 500 */\n showDelay: 500,\n /** Specify bar's border-radius, or the border-radius of rail and bar will be equal to the rail's size. default -> false **/\n specifyBorderRadius: false,\n /** Whether to show bar on scrolling, default -> true */\n onlyShowBarOnScroll: true,\n /** Whether to keep show or not, default -> false */\n keepShow: false,\n /** Bar's background , default -> #00a650 */\n background: 'rgb(3, 185, 118)',\n /** Bar's opacity, default -> 1 */\n opacity: 1,\n /** bar's size(Height/Width) , default -> 6px */\n\n size: '6px',\n minSize: 0,\n disable: false\n },\n scrollButton: {\n enable: false,\n background: 'rgb(3, 185, 118)',\n opacity: 1,\n step: 180,\n mousedownStep: 30\n }\n };\n\n /**\r\n * validate the options\r\n * @export\r\n * @param {any} ops\r\n */\n function validateOps(ops) {\n var renderError = false;\n var scrollPanel = ops.scrollPanel;\n var _ops$bar = ops.bar,\n vBar = _ops$bar.vBar,\n hBar = _ops$bar.hBar;\n var _ops$rail = ops.rail,\n vRail = _ops$rail.vRail,\n hRail = _ops$rail.hRail;\n\n // validate scrollPanel\n\n var initialScrollY = scrollPanel['initialScrollY'];\n var initialScrollX = scrollPanel['initialScrollX'];\n\n if (initialScrollY && !String(initialScrollY).match(/^\\d+(\\.\\d+)?(%)?$/)) {\n warn('The prop `initialScrollY` or `initialScrollX` should be a percent number like `10%` or an exact number that greater than or equal to 0 like `100`.');\n }\n if (initialScrollX && !String(initialScrollX).match(/^\\d+(\\.\\d+)?(%)?$/)) {\n warn('The prop `initialScrollY` or `initialScrollX` should be a percent number like `10%` or an exact number that greater than or equal to 0 like `100`.');\n }\n\n // validate deprecated vBar/hBar vRail/hRail\n if (vBar || hBar || vRail || hRail) {\n warn('The options: vRail, hRail, vBar, hBar have been deprecated since v4.7.0,' + 'please use corresponing rail/bar instead!');\n }\n\n if (_extraValidate) {\n _extraValidate = [].concat(_extraValidate);\n _extraValidate.forEach(function (hasError) {\n if (hasError(ops)) {\n renderError = true;\n }\n });\n }\n return renderError;\n }\n\n var _extraValidate = null;\n var extendOpts = function extendOpts(extraOpts, extraValidate) {\n extraOpts = [].concat(extraOpts);\n extraOpts.forEach(function (opts) {\n mergeObject(opts, baseConfig);\n });\n\n _extraValidate = extraValidate;\n };\n\n // all modes\n var modes = ['slide', 'native'];\n // do nothing\n var NOOP = function NOOP() {};\n // some small changes.\n var smallChangeArray = ['mergedOptions.vuescroll.pullRefresh.tips', 'mergedOptions.vuescroll.pushLoad.tips', 'mergedOptions.vuescroll.scroller.disable', 'mergedOptions.rail', 'mergedOptions.bar'];\n // refresh/load dom ref/key...\n var __REFRESH_DOM_NAME = 'refreshDom';\n var __LOAD_DOM_NAME = 'loadDom';\n\n var scrollMap = {\n vertical: {\n size: 'height',\n opsSize: 'width',\n posName: 'top',\n opposName: 'bottom',\n sidePosName: 'right',\n page: 'pageY',\n scroll: 'scrollTop',\n scrollSize: 'scrollHeight',\n offset: 'offsetHeight',\n client: 'clientY',\n axis: 'Y',\n scrollButton: {\n start: 'top',\n end: 'bottom'\n }\n },\n horizontal: {\n size: 'width',\n opsSize: 'height',\n posName: 'left',\n opposName: 'right',\n sidePosName: 'bottom',\n page: 'pageX',\n scroll: 'scrollLeft',\n scrollSize: 'scrollWidth',\n offset: 'offsetWidth',\n client: 'clientX',\n axis: 'X',\n scrollButton: {\n start: 'left',\n end: 'right'\n }\n }\n };\n\n function requestAnimationFrame(global) {\n // Check for request animation Frame support\n var requestFrame = global.requestAnimationFrame || global.webkitRequestAnimationFrame || global.mozRequestAnimationFrame || global.oRequestAnimationFrame;\n var isNative = !!requestFrame;\n\n if (requestFrame && !/requestAnimationFrame\\(\\)\\s*\\{\\s*\\[native code\\]\\s*\\}/i.test(requestFrame.toString())) {\n isNative = false;\n }\n\n if (isNative) {\n return function (callback, root) {\n requestFrame(callback, root);\n };\n }\n\n var TARGET_FPS = 60;\n var requests = {};\n var rafHandle = 1;\n var intervalHandle = null;\n var lastActive = +new Date();\n\n return function (callback) {\n var callbackHandle = rafHandle++;\n\n // Store callback\n requests[callbackHandle] = callback;\n\n // Create timeout at first request\n if (intervalHandle === null) {\n intervalHandle = setInterval(function () {\n var time = +new Date();\n var currentRequests = requests;\n\n // Reset data structure before executing callbacks\n requests = {};\n\n for (var key in currentRequests) {\n if (currentRequests.hasOwnProperty(key)) {\n currentRequests[key](time);\n lastActive = time;\n }\n }\n\n // Disable the timeout when nothing happens for a certain\n // period of time\n if (time - lastActive > 2500) {\n clearInterval(intervalHandle);\n intervalHandle = null;\n }\n }, 1000 / TARGET_FPS);\n }\n\n return callbackHandle;\n };\n }\n\n var colorCache = {};\n var rgbReg = /rgb\\(/;\n var extractRgbColor = /rgb\\((.*)\\)/;\n\n // Transform a common color int oa `rgbA` color\n function getRgbAColor(color, opacity) {\n var id = color + '&' + opacity;\n if (colorCache[id]) {\n return colorCache[id];\n }\n\n var div = document.createElement('div');\n div.style.background = color;\n document.body.appendChild(div);\n var computedColor = window.getComputedStyle(div).backgroundColor;\n document.body.removeChild(div);\n\n /* istanbul ignore if */\n if (!rgbReg.test(computedColor)) {\n return color;\n }\n\n return colorCache[id] = 'rgba(' + extractRgbColor.exec(computedColor)[1] + ', ' + opacity + ')';\n }\n\n var bar = {\n name: 'bar',\n props: {\n ops: Object,\n state: Object,\n hideBar: Boolean,\n otherBarHide: Boolean,\n type: String\n },\n computed: {\n bar: function bar() {\n return scrollMap[this.type];\n },\n barSize: function barSize() {\n return Math.max(this.state.size, this.ops.bar.minSize);\n },\n barRatio: function barRatio() {\n return (1 - this.barSize) / (1 - this.state.size);\n }\n },\n render: function render(h) {\n var _style, _style2, _barStyle;\n\n var vm = this;\n /** Get rgbA format background color */\n var railBackgroundColor = getRgbAColor(vm.ops.rail.background, vm.ops.rail.opacity);\n\n if (!this.touchManager) {\n this.touchManager = new touchManager();\n }\n\n /** Rail Data */\n var railSize = vm.ops.rail.size;\n var endPos = vm.otherBarHide ? 0 : railSize;\n var touchObj = vm.touchManager.getTouchObject();\n var rail = {\n class: '__rail-is-' + vm.type,\n style: (_style = {\n position: 'absolute',\n 'z-index': '1',\n\n borderRadius: vm.ops.rail.specifyBorderRadius || railSize,\n background: railBackgroundColor,\n border: vm.ops.rail.border\n }, defineProperty(_style, vm.bar.opsSize, railSize), defineProperty(_style, vm.bar.posName, vm.ops.rail['gutterOfEnds'] || 0), defineProperty(_style, vm.bar.opposName, vm.ops.rail['gutterOfEnds'] || endPos), defineProperty(_style, vm.bar.sidePosName, vm.ops.rail['gutterOfSide']), _style)\n };\n\n if (touchObj) {\n var _rail$on;\n\n rail.on = (_rail$on = {}, defineProperty(_rail$on, touchObj.touchenter, function () {\n vm.setRailHover();\n }), defineProperty(_rail$on, touchObj.touchleave, function () {\n vm.setRailLeave();\n }), _rail$on);\n }\n\n // left space for scroll button\n var buttonSize = vm.ops.scrollButton.enable ? railSize : 0;\n var barWrapper = {\n class: '__bar-wrap-is-' + vm.type,\n style: (_style2 = {\n position: 'absolute',\n borderRadius: vm.ops.rail.specifyBorderRadius || railSize\n }, defineProperty(_style2, vm.bar.posName, buttonSize), defineProperty(_style2, vm.bar.opposName, buttonSize), _style2),\n on: {}\n };\n\n var scrollDistance = vm.state.posValue * vm.state.size;\n var pos = scrollDistance * vm.barRatio / vm.barSize;\n var opacity = vm.state.opacity;\n var parent = getRealParent(this);\n\n // set class hook\n parent.setClassHook(this.type == 'vertical' ? 'vBarVisible' : 'hBarVisible', !!opacity);\n\n /** Scrollbar style */\n var barStyle = (_barStyle = {\n cursor: 'pointer',\n position: 'absolute',\n margin: 'auto',\n transition: 'opacity 0.5s',\n 'user-select': 'none',\n 'border-radius': 'inherit'\n\n }, defineProperty(_barStyle, vm.bar.size, vm.barSize * 100 + '%'), defineProperty(_barStyle, 'background', vm.ops.bar.background), defineProperty(_barStyle, vm.bar.opsSize, vm.ops.bar.size), defineProperty(_barStyle, 'opacity', opacity), defineProperty(_barStyle, 'transform', 'translate' + scrollMap[vm.type].axis + '(' + pos + '%)'), _barStyle);\n var bar = {\n style: barStyle,\n class: '__bar-is-' + vm.type,\n ref: 'thumb',\n on: {}\n };\n\n if (vm.type == 'vertical') {\n barWrapper.style.width = '100%';\n // Let bar to be on the center.\n bar.style.left = 0;\n bar.style.right = 0;\n } else {\n barWrapper.style.height = '100%';\n bar.style.top = 0;\n bar.style.bottom = 0;\n }\n\n /* istanbul ignore next */\n {\n var _touchObj = this.touchManager.getTouchObject();\n bar.on[_touchObj.touchstart] = this.createBarEvent();\n barWrapper.on[_touchObj.touchstart] = this.createTrackEvent();\n }\n\n return h(\n 'div',\n rail,\n [this.createScrollbarButton(h, 'start'), this.hideBar ? null : h(\n 'div',\n barWrapper,\n [h('div', bar)]\n ), this.createScrollbarButton(h, 'end')]\n );\n },\n data: function data() {\n return {\n isBarDragging: false\n };\n },\n\n methods: {\n setRailHover: function setRailHover() {\n var parent = getRealParent(this);\n var state = parent.vuescroll.state;\n\n if (!state.isRailHover) {\n state.isRailHover = true;\n parent.showBar();\n }\n },\n setRailLeave: function setRailLeave() {\n var parent = getRealParent(this);\n var state = parent.vuescroll.state;\n\n state.isRailHover = false;\n parent.hideBar();\n },\n setBarDrag: function setBarDrag(val) /* istanbul ignore next */{\n this.$emit('setBarDrag', this.isBarDragging = val);\n\n var parent = getRealParent(this);\n // set class hook\n parent.setClassHook(this.type == 'vertical' ? 'vBarDragging' : 'hBarDragging', !!val);\n },\n createBarEvent: function createBarEvent() {\n var ctx = this;\n\n var parent = getRealParent(ctx);\n var touchObj = ctx.touchManager.getTouchObject();\n\n function mousedown(e) /* istanbul ignore next */{\n var event = ctx.touchManager.getEventObject(e);\n if (!event) return;\n\n e.stopImmediatePropagation();\n e.preventDefault();\n event = event[0];\n\n document.onselectstart = function () {\n return false;\n };\n ctx.axisStartPos = event[ctx.bar.client] - ctx.$refs['thumb'].getBoundingClientRect()[ctx.bar.posName];\n\n // Tell parent that the mouse has been down.\n ctx.setBarDrag(true);\n eventCenter(document, touchObj.touchmove, mousemove);\n eventCenter(document, touchObj.touchend, mouseup);\n }\n\n function mousemove(e) /* istanbul ignore next */{\n if (!ctx.axisStartPos) {\n return;\n }\n\n var event = ctx.touchManager.getEventObject(e);\n if (!event) return;\n\n event = event[0];\n\n var thubmParent = ctx.$refs.thumb.parentNode;\n\n var delta = event[ctx.bar.client] - thubmParent.getBoundingClientRect()[ctx.bar.posName];\n delta = delta / ctx.barRatio;\n\n var percent = (delta - ctx.axisStartPos) / thubmParent[ctx.bar.offset];\n parent.scrollTo(defineProperty({}, ctx.bar.axis.toLowerCase(), parent.scrollPanelElm[ctx.bar.scrollSize] * percent), false);\n }\n\n function mouseup() /* istanbul ignore next */{\n ctx.setBarDrag(false);\n parent.hideBar();\n\n document.onselectstart = null;\n ctx.axisStartPos = 0;\n\n eventCenter(document, touchObj.touchmove, mousemove, false, 'off');\n eventCenter(document, touchObj.touchend, mouseup, false, 'off');\n }\n\n return mousedown;\n },\n createTrackEvent: function createTrackEvent() {\n var ctx = this;\n\n return function handleClickTrack(e) {\n var parent = getRealParent(ctx);\n\n var _ctx$bar = ctx.bar,\n client = _ctx$bar.client,\n offset = _ctx$bar.offset,\n posName = _ctx$bar.posName,\n axis = _ctx$bar.axis;\n\n var thumb = ctx.$refs['thumb'];\n\n e.preventDefault();\n e.stopImmediatePropagation();\n\n /* istanbul ignore if */\n if (!thumb) return;\n\n var barOffset = thumb[offset];\n var event = ctx.touchManager.getEventObject(e)[0];\n\n var percent = (event[client] - e.currentTarget.getBoundingClientRect()[posName] - barOffset / 2) / (e.currentTarget[offset] - barOffset);\n\n parent.scrollTo(defineProperty({}, axis.toLowerCase(), percent * 100 + '%'));\n };\n },\n\n\n // Scrollbuton relative things...\n createScrollbarButton: function createScrollbarButton(h, type /* start or end */) {\n var _style3;\n\n var barContext = this;\n\n if (!barContext.ops.scrollButton.enable) {\n return null;\n }\n\n var size = barContext.ops.rail.size;\n var _barContext$ops$scrol = barContext.ops.scrollButton,\n opacity = _barContext$ops$scrol.opacity,\n background = _barContext$ops$scrol.background;\n\n var borderColor = getRgbAColor(background, opacity);\n\n var wrapperProps = {\n class: ['__bar-button', '__bar-button-is-' + barContext.type + '-' + type],\n style: (_style3 = {}, defineProperty(_style3, barContext.bar.scrollButton[type], 0), defineProperty(_style3, 'width', size), defineProperty(_style3, 'height', size), defineProperty(_style3, 'position', 'absolute'), defineProperty(_style3, 'cursor', 'pointer'), defineProperty(_style3, 'display', 'table'), _style3),\n ref: type\n };\n\n var innerProps = {\n class: '__bar-button-inner',\n style: {\n border: 'calc(' + size + ' / 2.5) solid transparent',\n width: '0',\n height: '0',\n margin: 'auto',\n position: 'absolute',\n top: '0',\n bottom: '0',\n right: '0',\n left: '0'\n },\n on: {}\n };\n\n if (barContext.type == 'vertical') {\n if (type == 'start') {\n innerProps.style['border-bottom-color'] = borderColor;\n innerProps.style['transform'] = 'translateY(-25%)';\n } else {\n innerProps.style['border-top-color'] = borderColor;\n innerProps.style['transform'] = 'translateY(25%)';\n }\n } else {\n if (type == 'start') {\n innerProps.style['border-right-color'] = borderColor;\n innerProps.style['transform'] = 'translateX(-25%)';\n } else {\n innerProps.style['border-left-color'] = borderColor;\n innerProps.style['transform'] = 'translateX(25%)';\n }\n }\n\n /* istanbul ignore next */\n {\n var touchObj = this.touchManager.getTouchObject();\n innerProps.on[touchObj.touchstart] = this.createScrollButtonEvent(type, touchObj);\n }\n\n return h(\n 'div',\n wrapperProps,\n [h('div', innerProps)]\n );\n },\n createScrollButtonEvent: function createScrollButtonEvent(type, touchObj) {\n var ctx = this;\n var parent = getRealParent(ctx);\n\n var _ctx$ops$scrollButton = ctx.ops.scrollButton,\n step = _ctx$ops$scrollButton.step,\n mousedownStep = _ctx$ops$scrollButton.mousedownStep;\n\n\n var stepWithDirection = type == 'start' ? -step : step;\n var mousedownStepWithDirection = type == 'start' ? -mousedownStep : mousedownStep;\n var ref = requestAnimationFrame(window);\n\n // bar props: type\n var barType = ctx.type;\n\n var isMouseDown = false;\n var isMouseout = true;\n var timeoutId = void 0;\n\n function start(e) {\n /* istanbul ignore if */\n\n if (3 == e.which) {\n return;\n }\n\n // set class hook\n parent.setClassHook('cliking' + barType + type + 'Button', true);\n\n e.stopImmediatePropagation();\n e.preventDefault();\n\n isMouseout = false;\n\n parent.scrollBy(defineProperty({}, 'd' + ctx.bar.axis.toLowerCase(), stepWithDirection));\n\n eventCenter(document, touchObj.touchend, endPress, false);\n\n if (touchObj.touchstart == 'mousedown') {\n var elm = ctx.$refs[type];\n eventCenter(elm, 'mouseenter', enter, false);\n eventCenter(elm, 'mouseleave', leave, false);\n }\n\n clearTimeout(timeoutId);\n timeoutId = setTimeout(function () /* istanbul ignore next */{\n isMouseDown = true;\n ref(pressing, window);\n }, 500);\n }\n\n function pressing() /* istanbul ignore next */{\n if (isMouseDown && !isMouseout) {\n parent.scrollBy(defineProperty({}, 'd' + ctx.bar.axis.toLowerCase(), mousedownStepWithDirection), false);\n ref(pressing, window);\n }\n }\n\n function endPress() {\n clearTimeout(timeoutId);\n isMouseDown = false;\n eventCenter(document, touchObj.touchend, endPress, false, 'off');\n\n if (touchObj.touchstart == 'mousedown') {\n var elm = ctx.$refs[type];\n eventCenter(elm, 'mouseenter', enter, false, 'off');\n eventCenter(elm, 'mouseleave', leave, false, 'off');\n }\n\n parent.setClassHook('cliking' + barType + type + 'Button', false);\n }\n\n function enter() /* istanbul ignore next */{\n isMouseout = false;\n pressing();\n }\n\n function leave() /* istanbul ignore next */{\n isMouseout = true;\n }\n\n return start;\n }\n }\n };\n\n function getBarData(vm, type) {\n var axis = scrollMap[type].axis;\n /** type.charAt(0) = vBar/hBar */\n var barType = type.charAt(0) + 'Bar';\n\n var hideBar = !vm.bar[barType].state.size || !vm.mergedOptions.scrollPanel['scrolling' + axis] || vm.refreshLoad && type !== 'vertical' || vm.mergedOptions.bar.disable;\n\n var keepShowRail = vm.mergedOptions.rail.keepShow;\n\n if (hideBar && !keepShowRail) {\n return null;\n }\n\n return {\n hideBar: hideBar,\n props: {\n type: type,\n ops: {\n bar: vm.mergedOptions.bar,\n rail: vm.mergedOptions.rail,\n scrollButton: vm.mergedOptions.scrollButton\n },\n state: vm.bar[barType].state,\n hideBar: hideBar\n },\n on: {\n setBarDrag: vm.setBarDrag\n },\n ref: type + 'Bar',\n key: type\n };\n }\n\n /**\r\n * create bars\r\n *\r\n * @param {any} size\r\n * @param {any} type\r\n */\n function createBar(h, vm) {\n var verticalBarProps = getBarData(vm, 'vertical');\n var horizontalBarProps = getBarData(vm, 'horizontal');\n\n // set class hooks\n vm.setClassHook('hasVBar', !!(verticalBarProps && !verticalBarProps.hideBar));\n vm.setClassHook('hasHBar', !!(horizontalBarProps && !horizontalBarProps.hideBar));\n\n return [verticalBarProps ? h('bar', _extends({}, verticalBarProps, {\n props: _extends({ otherBarHide: !horizontalBarProps }, verticalBarProps.props)\n })) : null, horizontalBarProps ? h('bar', _extends({}, horizontalBarProps, {\n props: _extends({ otherBarHide: !verticalBarProps }, horizontalBarProps.props)\n })) : null];\n }\n\n /**\r\n * This is like a HOC, It extracts the common parts of the\r\n * native-mode, slide-mode and mix-mode.\r\n * Each mode must implement the following methods:\r\n * 1. refreshInternalStatus : use to refresh the component\r\n * 2. destroy : Destroy some registryed events before component destroy.\r\n * 3. updateBarStateAndEmitEvent: use to update bar states and emit events.\r\n */\n\n var createComponent = function createComponent(_ref) {\n var _render = _ref.render,\n components = _ref.components,\n mixins = _ref.mixins;\n return {\n name: 'vueScroll',\n props: {\n ops: { type: Object }\n },\n components: components,\n mixins: [api].concat(toConsumableArray([].concat(mixins))),\n created: function created() {\n var _this = this;\n\n /**\r\n * Begin to merge options\r\n */\n\n var _gfc = mergeObject(this.$vuescrollConfig || {}, {});\n var ops = mergeObject(baseConfig, _gfc);\n\n this.$options.propsData.ops = this.$options.propsData.ops || {};\n Object.keys(this.$options.propsData.ops).forEach(function (key) {\n {\n defineReactive(_this.mergedOptions, key, _this.$options.propsData.ops);\n }\n });\n // from ops to mergedOptions\n mergeObject(ops, this.mergedOptions);\n\n this._isVuescrollRoot = true;\n this.renderError = validateOps(this.mergedOptions);\n },\n render: function render(h) {\n var vm = this;\n if (vm.renderError) {\n return h('div', [[vm.$slots['default']]]);\n }\n\n if (!vm.touchManager) vm.touchManager = new touchManager();\n\n // vuescroll data\n var data = {\n style: {\n height: vm.vuescroll.state.height,\n width: vm.vuescroll.state.width,\n padding: 0,\n position: 'relative',\n overflow: 'hidden'\n },\n class: _extends({ __vuescroll: true }, vm.classHooks)\n };\n\n var touchObj = vm.touchManager.getTouchObject();\n if (touchObj) {\n var _data$on;\n\n data.on = (_data$on = {}, defineProperty(_data$on, touchObj.touchenter, function () {\n vm.vuescroll.state.pointerLeave = false;\n vm.updateBarStateAndEmitEvent();\n\n vm.setClassHook('mouseEnter', true);\n }), defineProperty(_data$on, touchObj.touchleave, function () {\n vm.vuescroll.state.pointerLeave = true;\n vm.hideBar();\n\n vm.setClassHook('mouseEnter', false);\n }), defineProperty(_data$on, touchObj.touchmove, function () /* istanbul ignore next */{\n vm.vuescroll.state.pointerLeave = false;\n vm.updateBarStateAndEmitEvent();\n }), _data$on);\n }\n\n var ch = [_render(h, vm)].concat(toConsumableArray(createBar(h, vm)));\n\n var _customContainer = this.$slots['scroll-container'];\n if (_customContainer) {\n return insertChildrenIntoSlot(h, _customContainer, ch, data);\n }\n\n return h(\n 'div',\n data,\n [ch]\n );\n },\n mounted: function mounted() {\n var _this2 = this;\n\n if (!this.renderError) {\n this.initVariables();\n this.initWatchOpsChange();\n // Call external merged Api\n this.refreshInternalStatus();\n\n this.updatedCbs.push(function () {\n _this2.scrollToAnchor();\n // need to reflow to deal with the\n // latest thing.\n _this2.updateBarStateAndEmitEvent();\n });\n }\n },\n updated: function updated() {\n var _this3 = this;\n\n this.updatedCbs.forEach(function (cb) {\n cb.call(_this3);\n });\n // Clear\n this.updatedCbs = [];\n },\n beforeDestroy: function beforeDestroy() {\n if (this.destroy) {\n this.destroy();\n }\n },\n\n\n /** ------------------------------- Computed ----------------------------- */\n computed: {\n scrollPanelElm: function scrollPanelElm() {\n return this.$refs['scrollPanel']._isVue ? this.$refs['scrollPanel'].$el : this.$refs['scrollPanel'];\n }\n },\n data: function data() {\n return {\n vuescroll: {\n state: {\n isDragging: false,\n pointerLeave: true,\n isRailHover: false,\n /** Default sizeStrategies */\n height: '100%',\n width: '100%',\n // current size strategy\n currentSizeStrategy: 'percent',\n currentScrollState: null,\n currentScrollInfo: null\n }\n },\n bar: {\n vBar: {\n state: {\n posValue: 0,\n size: 0,\n opacity: 0\n }\n },\n hBar: {\n state: {\n posValue: 0,\n size: 0,\n opacity: 0\n }\n }\n },\n mergedOptions: {\n vuescroll: {},\n scrollPanel: {},\n scrollContent: {},\n rail: {},\n bar: {}\n },\n updatedCbs: [],\n renderError: false,\n\n classHooks: {\n hasVBar: false,\n hasHBar: false,\n\n vBarVisible: false,\n hBarVisible: false,\n\n vBarDragging: false,\n hBarDragging: false,\n\n clikingVerticalStartButton: false,\n clikingVerticalEndButton: false,\n clikingHorizontalStartButton: false,\n clikingHorizontalEndButton: false,\n\n mouseEnter: false\n }\n };\n },\n\n /** ------------------------------- Methods -------------------------------- */\n methods: {\n /** ------------------------ Handlers --------------------------- */\n\n scrollingComplete: function scrollingComplete() {\n this.updateBarStateAndEmitEvent('handle-scroll-complete');\n },\n setBarDrag: function setBarDrag(val) {\n /* istanbul ignore next */\n this.vuescroll.state.isDragging = val;\n },\n setClassHook: function setClassHook(name, value) {\n this.classHooks[name] = value;\n },\n\n\n /** ------------------------ Some Helpers --------------------------- */\n\n /*\r\n * To have a good ux, instead of hiding bar immediately, we hide bar\r\n * after some seconds by using this simple debounce-hidebar method.\r\n */\n showAndDefferedHideBar: function showAndDefferedHideBar(forceHideBar) {\n var _this4 = this;\n\n this.showBar();\n\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = 0;\n }\n\n this.timeoutId = setTimeout(function () {\n _this4.timeoutId = 0;\n _this4.hideBar(forceHideBar);\n }, this.mergedOptions.bar.showDelay);\n },\n showBar: function showBar() {\n var opacity = this.mergedOptions.bar.opacity;\n this.bar.vBar.state.opacity = opacity;\n this.bar.hBar.state.opacity = opacity;\n },\n hideBar: function hideBar(forceHideBar) {\n var _vuescroll$state = this.vuescroll.state,\n isDragging = _vuescroll$state.isDragging,\n isRailHover = _vuescroll$state.isRailHover;\n /* istanbul ignore next */\n\n if (isDragging || isRailHover) {\n return;\n }\n\n if (forceHideBar && !this.mergedOptions.bar.keepShow) {\n this.bar.hBar.state.opacity = 0;\n this.bar.vBar.state.opacity = 0;\n }\n\n // add isDragging condition\n // to prevent from hiding bar while dragging the bar\n if (!this.mergedOptions.bar.keepShow && !this.vuescroll.state.isDragging) {\n this.bar.vBar.state.opacity = 0;\n this.bar.hBar.state.opacity = 0;\n }\n },\n useNumbericSize: function useNumbericSize() {\n this.vuescroll.state.currentSizeStrategy = 'number';\n var _mergedOptions$scroll = this.mergedOptions.scrollPanel,\n maxHeight = _mergedOptions$scroll.maxHeight,\n maxWidth = _mergedOptions$scroll.maxWidth;\n var _$el$parentNode = this.$el.parentNode,\n parentClientHeight = _$el$parentNode.clientHeight,\n parentClientWidth = _$el$parentNode.clientWidth;\n var _scrollPanelElm = this.scrollPanelElm,\n scrollHeight = _scrollPanelElm.scrollHeight,\n scrollWidth = _scrollPanelElm.scrollWidth;\n\n var width = void 0;\n var height = void 0;\n\n if (maxHeight || maxWidth) {\n height = scrollHeight <= maxHeight ? undefined : maxHeight;\n width = scrollWidth <= maxWidth ? undefined : maxWidth;\n } else {\n height = parentClientHeight;\n width = parentClientWidth;\n }\n\n this.vuescroll.state.height = height ? height + 'px' : undefined;\n this.vuescroll.state.width = width ? width + 'px' : undefined;\n },\n usePercentSize: function usePercentSize() {\n this.vuescroll.state.currentSizeStrategy = 'percent';\n\n this.vuescroll.state.height = '100%';\n this.vuescroll.state.width = '100%';\n },\n\n // Set its size to be equal to its parentNode\n setVsSize: function setVsSize() {\n var sizeStrategy = this.mergedOptions.vuescroll.sizeStrategy;\n var _mergedOptions$scroll2 = this.mergedOptions.scrollPanel,\n maxHeight = _mergedOptions$scroll2.maxHeight,\n maxWidth = _mergedOptions$scroll2.maxWidth;\n var _scrollPanelElm2 = this.scrollPanelElm,\n clientHeight = _scrollPanelElm2.clientHeight,\n clientWidth = _scrollPanelElm2.clientWidth;\n\n if (sizeStrategy == 'number' || maxHeight && clientHeight > maxHeight || maxWidth && clientWidth > maxWidth) {\n this.useNumbericSize();\n } else if (sizeStrategy == 'percent' && clientHeight != maxHeight && clientWidth != maxWidth) {\n this.usePercentSize();\n }\n },\n\n\n /** ------------------------ Init --------------------------- */\n initWatchOpsChange: function initWatchOpsChange() {\n var _this5 = this;\n\n var watchOpts = {\n deep: true,\n sync: true\n };\n this.$watch('mergedOptions', function () {\n setTimeout(function () {\n if (_this5.isSmallChangeThisTick) {\n _this5.isSmallChangeThisTick = false;\n _this5.updateBarStateAndEmitEvent('options-change');\n return;\n }\n _this5.refreshInternalStatus();\n }, 0);\n }, watchOpts);\n\n /**\r\n * We also watch `small` changes, and when small changes happen, we send\r\n * a signal to vuescroll, to tell it:\r\n * 1. we don't need to registry resize\r\n * 2. we don't need to registry scroller.\r\n */\n smallChangeArray.forEach(function (opts) {\n _this5.$watch(opts, function () {\n _this5.isSmallChangeThisTick = true;\n }, watchOpts);\n });\n },\n\n // scrollTo hash-anchor while mounted component have mounted.\n scrollToAnchor: function scrollToAnchor() /* istanbul ignore next */{\n var validateHashSelector = function validateHashSelector(hash) {\n return (/^#[a-zA-Z_]\\d*$/.test(hash)\n );\n };\n\n var hash = window.location.hash;\n if (!hash || (hash = hash.slice(hash.lastIndexOf('#'))) && !validateHashSelector(hash)) {\n return;\n }\n\n var elm = document.querySelector(hash);\n if (!isChildInParent(elm, this.$el) || this.mergedOptions.scrollPanel.initialScrollY || this.mergedOptions.scrollPanel.initialScrollX) {\n return;\n }\n\n this.scrollIntoView(elm);\n }\n\n /** ------------------------ Registry Resize --------------------------- */\n\n }\n };\n };\n\n // begin importing\n\n var scrollPanel = {\n name: 'scrollPanel',\n props: { ops: { type: Object, required: true } },\n methods: {\n // trigger scrollPanel options initialScrollX,\n // initialScrollY\n updateInitialScroll: function updateInitialScroll() {\n var x = 0;\n var y = 0;\n\n var parent = getRealParent(this);\n\n if (this.ops.initialScrollX) {\n x = this.ops.initialScrollX;\n }\n if (this.ops.initialScrollY) {\n y = this.ops.initialScrollY;\n }\n if (x || y) {\n parent.scrollTo({ x: x, y: y });\n }\n }\n },\n mounted: function mounted() {\n var _this = this;\n\n setTimeout(function () {\n if (!_this._isDestroyed) {\n _this.updateInitialScroll();\n }\n }, 0);\n },\n render: function render(h) {\n // eslint-disable-line\n var data = {\n class: ['__panel'],\n style: {\n position: 'relative',\n boxSizing: 'border-box'\n }\n };\n\n var parent = getRealParent(this);\n\n var _customPanel = parent.$slots['scroll-panel'];\n if (_customPanel) {\n return insertChildrenIntoSlot(h, _customPanel, this.$slots.default, data);\n }\n\n return h(\n 'div',\n data,\n [[this.$slots.default]]\n );\n }\n };\n\n /**\r\n * Init following things\r\n * 1. Component\r\n * 2. Render\r\n * 3. Config\r\n */\n function _install(core, render) {\n var _components;\n\n var extraConfigs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var extraValidators = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n var components = (_components = {}, defineProperty(_components, scrollPanel.name, scrollPanel), defineProperty(_components, bar.name, bar), _components);\n\n var opts = {};\n opts.components = components;\n opts.render = render;\n opts.mixins = core;\n\n var comp = createComponent(opts);\n\n // Init Config\n extendOpts(extraConfigs, extraValidators);\n\n return comp;\n }\n\n /**\r\n * Get the children of parent those are in viewport\r\n */\n function getCurrentViewportDom(parent, container) {\n var children = parent.children;\n var domFragment = [];\n\n var isCurrentview = function isCurrentview(dom) {\n var _dom$getBoundingClien = dom.getBoundingClientRect(),\n left = _dom$getBoundingClien.left,\n top = _dom$getBoundingClien.top,\n width = _dom$getBoundingClien.width,\n height = _dom$getBoundingClien.height;\n\n var _container$getBoundin = container.getBoundingClientRect(),\n parentLeft = _container$getBoundin.left,\n parentTop = _container$getBoundin.top,\n parentHeight = _container$getBoundin.height,\n parentWidth = _container$getBoundin.width;\n\n if (left - parentLeft + width > 0 && left - parentLeft < parentWidth && top - parentTop + height > 0 && top - parentTop < parentHeight) {\n return true;\n }\n return false;\n };\n\n for (var i = 0; i < children.length; i++) {\n var dom = children.item(i);\n if (isCurrentview(dom) && !dom.isResizeElm) {\n domFragment.push(dom);\n }\n }\n return domFragment;\n }\n\n /**\r\n * Compatible to scroller's animation function\r\n */\n function createEasingFunction(easing, easingPattern) {\n return function (time) {\n return easingPattern(easing, time);\n };\n }\n\n /**\r\n * Calculate the easing pattern\r\n * @link https://github.com/cferdinandi/smooth-scroll/blob/master/src/js/smooth-scroll.js\r\n * modified by wangyi7099\r\n * @param {String} type Easing pattern\r\n * @param {Number} time Time animation should take to complete\r\n * @returns {Number}\r\n */\n function easingPattern(easing, time) {\n var pattern = null;\n /* istanbul ignore next */\n {\n // Default Easing Patterns\n if (easing === 'easeInQuad') pattern = time * time; // accelerating from zero velocity\n if (easing === 'easeOutQuad') pattern = time * (2 - time); // decelerating to zero velocity\n if (easing === 'easeInOutQuad') pattern = time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time; // acceleration until halfway, then deceleration\n if (easing === 'easeInCubic') pattern = time * time * time; // accelerating from zero velocity\n if (easing === 'easeOutCubic') pattern = --time * time * time + 1; // decelerating to zero velocity\n if (easing === 'easeInOutCubic') pattern = time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1; // acceleration until halfway, then deceleration\n if (easing === 'easeInQuart') pattern = time * time * time * time; // accelerating from zero velocity\n if (easing === 'easeOutQuart') pattern = 1 - --time * time * time * time; // decelerating to zero velocity\n if (easing === 'easeInOutQuart') pattern = time < 0.5 ? 8 * time * time * time * time : 1 - 8 * --time * time * time * time; // acceleration until halfway, then deceleration\n if (easing === 'easeInQuint') pattern = time * time * time * time * time; // accelerating from zero velocity\n if (easing === 'easeOutQuint') pattern = 1 + --time * time * time * time * time; // decelerating to zero velocity\n if (easing === 'easeInOutQuint') pattern = time < 0.5 ? 16 * time * time * time * time * time : 1 + 16 * --time * time * time * time * time; // acceleration until halfway, then deceleration\n }\n return pattern || time; // no easing, no acceleration\n }\n\n function noop() {\n return true;\n }\n\n /* istanbul ignore next */\n var now = Date.now || function () {\n return new Date().getTime();\n };\n\n var ScrollControl = function () {\n function ScrollControl() {\n classCallCheck(this, ScrollControl);\n\n this.init();\n\n this.isRunning = false;\n }\n\n createClass(ScrollControl, [{\n key: 'pause',\n value: function pause() {\n /* istanbul ignore if */\n if (!this.isRunning) return;\n\n this.isPaused = true;\n }\n }, {\n key: 'stop',\n value: function stop() {\n this.isStopped = true;\n }\n }, {\n key: 'continue',\n value: function _continue() {\n /* istanbul ignore if */\n if (!this.isPaused) return;\n\n this.isPaused = false;\n this.ts = now() - this.percent * this.spd;\n this.execScroll();\n }\n }, {\n key: 'startScroll',\n value: function startScroll(st, ed, spd) {\n var stepCb = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;\n var completeCb = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : noop;\n var vertifyCb = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : noop;\n var easingMethod = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : noop;\n\n var df = ed - st;\n var dir = df > 0 ? -1 : 1;\n var nt = now();\n\n if (!this.isRunning) {\n this.init();\n }\n\n if (dir != this.dir || nt - this.ts > 200) {\n this.ts = nt;\n\n this.dir = dir;\n this.st = st;\n this.ed = ed;\n this.df = df;\n } /* istanbul ignore next */else {\n this.df += df;\n }\n\n this.spd = spd;\n\n this.completeCb = completeCb;\n this.vertifyCb = vertifyCb;\n this.stepCb = stepCb;\n this.easingMethod = easingMethod;\n\n if (!this.isRunning) this.execScroll();\n }\n }, {\n key: 'execScroll',\n value: function execScroll() {\n var _this = this;\n\n if (!this.df) return;\n\n var percent = this.percent || 0;\n this.percent = 0;\n this.isRunning = true;\n\n var loop = function loop() {\n /* istanbul ignore if */\n if (!_this.isRunning || !_this.vertifyCb(percent) || _this.isStopped) {\n _this.isRunning = false;\n return;\n }\n\n percent = (now() - _this.ts) / _this.spd;\n\n if (_this.isPaused) {\n _this.percent = percent;\n _this.isRunning = false;\n return;\n }\n\n if (percent < 1) {\n var value = _this.st + _this.df * _this.easingMethod(percent);\n _this.stepCb(value);\n _this.ref(loop);\n } else {\n // trigger complete\n _this.stepCb(_this.st + _this.df);\n _this.completeCb();\n\n _this.isRunning = false;\n }\n };\n\n this.ref(loop);\n }\n }, {\n key: 'init',\n value: function init() {\n this.st = 0;\n this.ed = 0;\n this.df = 0;\n this.spd = 0;\n this.ts = 0;\n this.dir = 0;\n this.ref = requestAnimationFrame(window);\n\n this.isPaused = false;\n this.isStopped = false;\n }\n }]);\n return ScrollControl;\n }();\n\n function scrollTo(elm, x, y) {\n var speed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 300;\n var easing = arguments[4];\n var scrollingComplete = arguments[5];\n\n var scrollLeft = void 0,\n scrollTop = void 0,\n scrollHeight = void 0,\n scrollWidth = void 0,\n clientWidth = void 0,\n clientHeight = void 0;\n\n var _elm = elm,\n nodeType = _elm.nodeType;\n\n var scrollX = new ScrollControl();\n var scrollY = new ScrollControl();\n\n if (!nodeType) {\n warn('You must pass a dom for the first param, ' + 'for window scrolling, ' + 'you can pass document as the first param.');\n\n return;\n }\n\n if (nodeType == 9) {\n // document\n elm = elm.scrollingElement;\n }\n\n var _elm2 = elm;\n scrollLeft = _elm2.scrollLeft;\n scrollTop = _elm2.scrollTop;\n scrollHeight = _elm2.scrollHeight;\n scrollWidth = _elm2.scrollWidth;\n clientWidth = _elm2.clientWidth;\n clientHeight = _elm2.clientHeight;\n\n\n if (typeof x === 'undefined') {\n x = scrollLeft;\n } else {\n x = getNumericValue(x, scrollWidth - clientWidth);\n }\n if (typeof y === 'undefined') {\n y = scrollTop;\n } else {\n y = getNumericValue(y, scrollHeight - clientHeight);\n }\n\n var easingMethod = createEasingFunction(easing, easingPattern);\n scrollX.startScroll(scrollLeft, x, speed, function (dx) {\n elm.scrollLeft = dx;\n }, scrollingComplete, undefined, easingMethod);\n scrollY.startScroll(scrollTop, y, speed, function (dy) {\n elm.scrollTop = dy;\n }, scrollingComplete, undefined, easingMethod);\n }\n\n var nativeApi = {\n mounted: function mounted() {\n // registry scroll\n this.scrollX = new ScrollControl();\n this.scrollY = new ScrollControl();\n },\n\n methods: {\n nativeStop: function nativeStop() {\n this.scrollX.stop();\n this.scrollY.stop();\n },\n nativePause: function nativePause() {\n this.scrollX.pause();\n this.scrollY.pause();\n },\n nativeContinue: function nativeContinue() {\n this.scrollX.continue();\n this.scrollY.continue();\n },\n nativeScrollTo: function nativeScrollTo(x, y, speed, easing) {\n if (speed === false) ; else if (typeof speed === 'undefined') {\n speed = this.mergedOptions.scrollPanel.speed;\n }\n var elm = this.scrollPanelElm;\n var scrollTop = elm.scrollTop,\n scrollLeft = elm.scrollLeft,\n scrollWidth = elm.scrollWidth,\n clientWidth = elm.clientWidth,\n scrollHeight = elm.scrollHeight,\n clientHeight = elm.clientHeight;\n\n if (typeof x === 'undefined') {\n x = scrollLeft;\n } else {\n x = getNumericValue(x, scrollWidth - clientWidth);\n }\n if (typeof y === 'undefined') {\n y = scrollTop;\n } else {\n y = getNumericValue(y, scrollHeight - clientHeight);\n }\n\n if (speed) {\n easing = easing || this.mergedOptions.scrollPanel.easing;\n var easingMethod = createEasingFunction(easing, easingPattern);\n\n if (x != scrollLeft) {\n this.scrollX.startScroll(scrollLeft, x, speed, function (x) {\n elm.scrollLeft = x;\n }, this.scrollingComplete.bind(this), undefined, easingMethod);\n }\n\n if (y != scrollTop) {\n this.scrollY.startScroll(scrollTop, y, speed, function (y) {\n elm.scrollTop = y;\n }, this.scrollingComplete.bind(this), undefined, easingMethod);\n }\n } else {\n elm.scrollTop = y;\n elm.scrollLeft = x;\n }\n },\n getCurrentviewDomNative: function getCurrentviewDomNative() {\n var parent = this.scrollContentElm;\n var domFragment = getCurrentViewportDom(parent, this.$el);\n return domFragment;\n }\n }\n };\n\n function getPanelData(context) {\n // scrollPanel data start\n var data = {\n ref: 'scrollPanel',\n style: {\n height: '100%',\n overflowY: 'scroll',\n overflowX: 'scroll'\n },\n class: [],\n nativeOn: {\n '&scroll': context.handleScroll\n },\n props: {\n ops: context.mergedOptions.scrollPanel\n }\n };\n\n context.scrollYEnable = true;\n context.scrollXEnable = true;\n\n data.nativeOn.DOMMouseScroll = data.nativeOn.mousewheel = context.onMouseWheel;\n\n var _context$mergedOption = context.mergedOptions.scrollPanel,\n scrollingY = _context$mergedOption.scrollingY,\n scrollingX = _context$mergedOption.scrollingX;\n\n\n if (!context.bar.hBar.state.size || !scrollingX) {\n context.scrollXEnable = false;\n data.style.overflowX = 'hidden';\n }\n\n if (!context.bar.vBar.state.size || !scrollingY) {\n context.scrollYEnable = false;\n data.style.overflowY = 'hidden';\n }\n\n var gutter = getGutter();\n /* istanbul ignore if */\n if (!gutter) {\n createHideBarStyle();\n data.class.push('__hidebar');\n if (isIos()) {\n data.style['-webkit-overflow-scrolling'] = 'touch';\n }\n } else {\n // hide system bar by use a negative value px\n // gutter should be 0 when manually disable scrollingX #14\n if (context.bar.vBar.state.size && context.mergedOptions.scrollPanel.scrollingY) {\n if (context.mergedOptions.scrollPanel.verticalNativeBarPos == 'right') {\n data.style.marginRight = '-' + gutter + 'px';\n } /* istanbul ignore next */else {\n data.style.marginLeft = '-' + gutter + 'px';\n }\n }\n if (context.bar.hBar.state.size && context.mergedOptions.scrollPanel.scrollingX) {\n data.style.height = 'calc(100% + ' + gutter + 'px)';\n }\n }\n\n // clear legency styles of slide mode...\n data.style.transformOrigin = '';\n data.style.transform = '';\n\n return data;\n }\n\n /**\r\n * create a scrollPanel\r\n *\r\n * @param {any} size\r\n * @param {any} context\r\n * @returns\r\n */\n function createPanel(h, context) {\n var data = {};\n\n data = getPanelData(context);\n\n return h(\n 'scrollPanel',\n data,\n [getPanelChildren(h, context)]\n );\n }\n\n function getPanelChildren(h, context) {\n var viewStyle = {\n position: 'relative',\n 'box-sizing': 'border-box',\n 'min-width': '100%',\n 'min-height': '100%'\n };\n var data = {\n style: viewStyle,\n ref: 'scrollContent',\n class: '__view'\n };\n var _customContent = context.$slots['scroll-content'];\n\n if (context.mergedOptions.scrollPanel.scrollingX) {\n viewStyle.width = getComplitableStyle('width', 'fit-content');\n } else {\n data.style['width'] = '100%';\n }\n\n if (context.mergedOptions.scrollPanel.padding) {\n data.style.paddingRight = context.mergedOptions.rail.size;\n }\n\n if (_customContent) {\n return insertChildrenIntoSlot(h, _customContent, context.$slots.default, data);\n }\n\n return h(\n 'div',\n data,\n [context.$slots.default]\n );\n }\n\n function getPanelData$1(context) {\n // scrollPanel data start\n var data = {\n ref: 'scrollPanel',\n style: {\n 'user-select': 'none',\n '-webkit-user-select': 'none',\n 'min-width': '100%',\n 'min-height': '100%'\n },\n class: [],\n props: {\n ops: context.mergedOptions.scrollPanel\n }\n };\n\n data.class.push('__slide');\n /* istanbul ignore if */\n if (isIos()) {\n data.style = defineProperty({}, '-webkit-overflow-scrolling', 'touch');\n }\n\n if (context.mergedOptions.vuescroll.renderMethod == 'transform') {\n data.style['transform-origin'] = 'left top 0px';\n }\n\n var _context$mergedOption = context.mergedOptions.scrollPanel,\n scrollingX = _context$mergedOption.scrollingX,\n scrollingY = _context$mergedOption.scrollingY,\n padding = _context$mergedOption.padding;\n\n\n if (scrollingX && !context.refreshLoad) {\n var width = getComplitableStyle('width', 'fit-content');\n if (width) {\n data.style['width'] = width;\n } /* istanbul ignore next */else {\n data['display'] = 'inline-block';\n }\n }\n\n /* istanbul ignore if */\n if (!scrollingX) {\n data.class.push('x-hidden');\n }\n /* istanbul ignore if */\n if (!scrollingY) {\n data.class.push('y-hidden');\n }\n\n if (padding) {\n data.style.paddingRight = context.mergedOptions.rail.size;\n }\n\n return data;\n }\n\n function getPanelChildren$1(h, context) {\n var renderChildren = getVnodeInfo(context.$slots['scroll-panel']).ch || context.$slots.default;\n var finalChildren = [];\n\n /* istanbul ignore if */\n if (!renderChildren) {\n context.$slots.default = renderChildren = [];\n }\n\n // handle refresh\n if (context.mergedOptions.vuescroll.pullRefresh.enable) {\n finalChildren.push(h(\n 'div',\n {\n 'class': '__refresh',\n style: { visibility: context.refrehDomVisiable ? '' : 'hidden' },\n ref: __REFRESH_DOM_NAME,\n key: __REFRESH_DOM_NAME\n },\n [createTipDom(h, context, 'refresh', context.pullRefreshTip)]\n ));\n }\n\n finalChildren.push(renderChildren);\n\n // handle load\n if (context.mergedOptions.vuescroll.pushLoad.enable) {\n finalChildren.push(h(\n 'div',\n {\n ref: __LOAD_DOM_NAME,\n key: __LOAD_DOM_NAME,\n 'class': '__load',\n style: { visibility: context.loadDomVisiable ? '' : 'hidden' }\n },\n [createTipDom(h, context, 'load', context.pushLoadTip)]\n ));\n }\n\n return finalChildren;\n }\n\n // Create load or refresh tip dom of each stages\n function createTipDom(h, context, type, tip) {\n var stage = context.vuescroll.state[type + 'Stage'];\n var dom = null;\n // Return user specified animation dom\n /* istanbul ignore if */\n if (dom = context.$slots[type + '-' + stage]) {\n return dom;\n }\n\n switch (stage) {\n // The dom will show at deactive stage\n case 'deactive':\n case 'active':\n {\n var className = 'active';\n if (stage == 'deactive') {\n className += ' deactive';\n }\n\n dom = h(\n 'svg',\n {\n 'class': className,\n attrs: { version: '1.1',\n xmlns: 'http://www.w3.org/2000/svg',\n xmlnsXlink: 'http://www.w3.org/1999/xlink',\n x: '0px',\n y: '0px',\n viewBox: '0 0 1000 1000',\n 'enable-background': 'new 0 0 1000 1000',\n xmlSpace: 'preserve'\n }\n },\n [h('metadata', [' Svg Vector Icons : http://www.sfont.cn ']), h('g', [h(\n 'g',\n {\n attrs: { transform: 'matrix(1 0 0 -1 0 1008)' }\n },\n [h('path', {\n attrs: { d: 'M10,543l490,455l490-455L885,438L570,735.5V18H430v717.5L115,438L10,543z' }\n })]\n )])]\n );\n }\n break;\n case 'start':\n dom = h(\n 'svg',\n {\n attrs: { viewBox: '0 0 50 50' },\n 'class': 'start' },\n [h('circle', {\n attrs: { stroke: 'true', cx: '25', cy: '25', r: '20' },\n 'class': 'bg-path' }), h('circle', {\n attrs: { cx: '25', cy: '25', r: '20' },\n 'class': 'active-path' })]\n );\n break;\n case 'beforeDeactive':\n dom = h(\n 'svg',\n {\n attrs: {\n viewBox: '0 0 1024 1024',\n version: '1.1',\n xmlns: 'http://www.w3.org/2000/svg',\n 'p-id': '3562'\n }\n },\n [h('path', {\n attrs: {\n d: 'M512 0C229.706831 0 0 229.667446 0 512s229.667446 512 512 512c282.293169 0 512-229.667446 512-512S794.332554 0 512 0z m282.994215 353.406031L433.2544 715.145846a31.484062 31.484062 0 0 1-22.275938 9.231754h-0.4096a31.586462 31.586462 0 0 1-22.449231-9.814646L228.430769 546.327631a31.507692 31.507692 0 0 1 45.701908-43.386093l137.4208 144.785724L750.442338 308.854154a31.507692 31.507692 0 1 1 44.551877 44.551877z',\n fill: '',\n 'p-id': '3563'\n }\n })]\n );\n break;\n }\n return [dom, tip];\n }\n\n /**\r\n * create a scrollPanel\r\n *\r\n * @param {any} size\r\n * @param {any} context\r\n * @returns\r\n */\n function createPanel$1(h, context) {\n var data = getPanelData$1(context);\n\n return h(\n 'scrollPanel',\n data,\n [getPanelChildren$1(h, context)]\n );\n }\n\n // begin importing\n /**\r\n * create a scrollPanel\r\n *\r\n * @param {any} size\r\n * @param {any} vm\r\n * @returns\r\n */\n function createPanel$2(h, vm) {\n if (vm.mode == 'native') {\n return createPanel(h, vm);\n } else if (vm.mode == 'slide') {\n return createPanel$1(h, vm);\n }\n }\n\n // detect content size change\n function installResizeDetection(element, callback) {\n return injectObject(element, callback);\n }\n\n function injectObject(element, callback) {\n if (element.hasResized) {\n return;\n }\n\n var OBJECT_STYLE = 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none; padding: 0; margin: 0; opacity: 0; z-index: -1000; pointer-events: none;';\n // define a wrap due to ie's zIndex bug\n var objWrap = document.createElement('div');\n objWrap.style.cssText = OBJECT_STYLE;\n var object = document.createElement('object');\n object.style.cssText = OBJECT_STYLE;\n object.type = 'text/html';\n object.tabIndex = -1;\n\n object.onload = function () {\n eventCenter(object.contentDocument.defaultView, 'resize', callback);\n };\n // https://github.com/wnr/element-resize-detector/blob/aafe9f7ea11d1eebdab722c7c5b86634e734b9b8/src/detection-strategy/object.js#L159\n if (!isIE()) {\n object.data = 'about:blank';\n }\n objWrap.isResizeElm = true;\n objWrap.appendChild(object);\n element.appendChild(objWrap);\n if (isIE()) {\n object.data = 'about:blank';\n }\n return function destroy() {\n if (object.contentDocument) {\n eventCenter(object.contentDocument.defaultView, 'resize', callback, 'off');\n }\n element.removeChild(objWrap);\n element.hasResized = false;\n };\n }\n\n var slideApi = {\n methods: {\n slideScrollTo: function slideScrollTo(x, y, speed, easing) {\n var _getPosition = this.getPosition(),\n scrollLeft = _getPosition.scrollLeft,\n scrollTop = _getPosition.scrollTop;\n\n x = getNumericValue(x || scrollLeft, this.scroller.__maxScrollLeft);\n y = getNumericValue(y || scrollTop, this.scroller.__maxScrollTop);\n\n this.scroller.scrollTo(x, y, speed > 0, undefined, false, speed, easing);\n },\n zoomBy: function zoomBy(factor, animate, originLeft, originTop, callback) {\n if (!this.scroller) {\n warn('zoomBy and zoomTo are only for slide mode!');\n return;\n }\n this.scroller.zoomBy(factor, animate, originLeft, originTop, callback);\n },\n zoomTo: function zoomTo(level) {\n var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var originLeft = arguments[2];\n var originTop = arguments[3];\n var callback = arguments[4];\n\n if (!this.scroller) {\n warn('zoomBy and zoomTo are only for slide mode!');\n return;\n }\n this.scroller.zoomTo(level, animate, originLeft, originTop, callback);\n },\n getCurrentPage: function getCurrentPage() {\n if (!this.scroller || !this.mergedOptions.vuescroll.paging) {\n warn('getCurrentPage and goToPage are only for slide mode and paging is enble!');\n return;\n }\n return this.scroller.getCurrentPage();\n },\n goToPage: function goToPage(dest) {\n var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!this.scroller || !this.mergedOptions.vuescroll.paging) {\n warn('getCurrentPage and goToPage are only for slide mode and paging is enble!');\n return;\n }\n this.scroller.goToPage(dest, animate);\n },\n triggerRefreshOrLoad: function triggerRefreshOrLoad(type) {\n if (!this.scroller) {\n warn('You can only use triggerRefreshOrLoad in slide mode!');\n return;\n }\n\n var isRefresh = this.mergedOptions.vuescroll.pullRefresh.enable;\n var isLoad = this.mergedOptions.vuescroll.pushLoad.enable;\n\n if (type == 'refresh' && !isRefresh) {\n warn('refresh must be enabled!');\n return;\n } else if (type == 'load' && !isLoad) {\n warn('load must be enabled and content\\'s height > container\\'s height!');\n return;\n } else if (type !== 'refresh' && type !== 'load') {\n warn('param must be one of load and refresh!');\n return;\n }\n\n /* istanbul ignore if */\n if (this.vuescroll.state[type + 'Stage'] == 'start') {\n return;\n }\n\n this.scroller.triggerRefreshOrLoad(type);\n return true;\n },\n getCurrentviewDomSlide: function getCurrentviewDomSlide() {\n var parent = this.scrollPanelElm;\n var domFragment = getCurrentViewportDom(parent, this.$el);\n return domFragment;\n }\n }\n };\n\n var api$1 = {\n // mix slide and nitive modes apis.\n mixins: [slideApi, nativeApi],\n methods: {\n // private api\n internalScrollTo: function internalScrollTo(destX, destY, speed, easing) {\n if (this.mode == 'native') {\n this.nativeScrollTo(destX, destY, speed, easing);\n }\n // for non-native we use scroller's scorllTo\n else if (this.mode == 'slide') {\n this.slideScrollTo(destX, destY, speed, easing);\n }\n },\n stop: function stop() {\n this.nativeStop();\n },\n pause: function pause() {\n this.nativePause();\n },\n continue: function _continue() {\n this.nativeContinue();\n },\n getCurrentviewDom: function getCurrentviewDom() {\n return this.mode == 'slide' ? this.getCurrentviewDomSlide() : this.getCurrentviewDomNative();\n }\n }\n };\n\n /*\r\n * Scroller\r\n * http://github.com/zynga/scroller\r\n *\r\n * Copyright 2011, Zynga Inc.\r\n * Licensed under the MIT License.\r\n * https://raw.github.com/zynga/scroller/master/MIT-LICENSE.txt\r\n *\r\n * Based on the work of: Unify Project (unify-project.org)\r\n * http://unify-project.org\r\n * Copyright 2011, Deutsche Telekom AG\r\n * License: MIT + Apache (V2)\r\n */\n\n var time = Date.now || function () {\n return +new Date();\n };\n var desiredFrames = 60;\n var millisecondsPerSecond = 1000;\n var running = {};\n var counter = 1;\n\n var core = { effect: {} };\n var global = null;\n\n if (typeof window !== 'undefined') {\n global = window;\n } else {\n global = {};\n }\n\n core.effect.Animate = {\n /**\r\n * A requestAnimationFrame wrapper / polyfill.\r\n *\r\n * @param callback {Function} The callback to be invoked before the next repaint.\r\n * @param root {HTMLElement} The root element for the repaint\r\n */\n requestAnimationFrame: requestAnimationFrame(global),\n /**\r\n * Stops the given animation.\r\n *\r\n * @param id {Integer} Unique animation ID\r\n * @return {Boolean} Whether the animation was stopped (aka, was running before)\r\n */\n stop: function stop(id) {\n var cleared = running[id] != null;\n if (cleared) {\n running[id] = null;\n }\n\n return cleared;\n },\n\n /**\r\n * Whether the given animation is still running.\r\n *\r\n * @param id {Integer} Unique animation ID\r\n * @return {Boolean} Whether the animation is still running\r\n */\n isRunning: function isRunning(id) {\n return running[id] != null;\n },\n\n /**\r\n * Start the animation.\r\n *\r\n * @param stepCallback {Function} Pointer to function which is executed on every step.\r\n * Signature of the method should be `function(percent, now, virtual) { return continueWithAnimation; }`\r\n * @param verifyCallback {Function} Executed before every animation step.\r\n * Signature of the method should be `function() { return continueWithAnimation; }`\r\n * @param completedCallback {Function}\r\n * Signature of the method should be `function(droppedFrames, finishedAnimation) {}`\r\n * @param duration {Integer} Milliseconds to run the animation\r\n * @param easingMethod {Function} Pointer to easing function\r\n * Signature of the method should be `function(percent) { return modifiedValue; }`\r\n * @param root {Element ? document.body} Render root, when available. Used for internal\r\n * usage of requestAnimationFrame.\r\n * @return {Integer} Identifier of animation. Can be used to stop it any time.\r\n */\n start: function start(stepCallback, verifyCallback, completedCallback, duration, easingMethod, root) {\n var start = time();\n var lastFrame = start;\n var percent = 0;\n var dropCounter = 0;\n var id = counter++;\n\n if (!root) {\n root = document.body;\n }\n\n // Compacting running db automatically every few new animations\n if (id % 20 === 0) {\n var newRunning = {};\n for (var usedId in running) {\n newRunning[usedId] = true;\n }\n running = newRunning;\n }\n\n // This is the internal step method which is called every few milliseconds\n var step = function step(virtual) {\n // Normalize virtual value\n var render = virtual !== true;\n\n // Get current time\n var now = time();\n\n // Verification is executed before next animation step\n if (!running[id] || verifyCallback && !verifyCallback(id)) {\n running[id] = null;\n completedCallback && completedCallback(desiredFrames - dropCounter / ((now - start) / millisecondsPerSecond), id, false);\n return;\n }\n\n // For the current rendering to apply let's update omitted steps in memory.\n // This is important to bring internal state variables up-to-date with progress in time.\n if (render) {\n var droppedFrames = Math.round((now - lastFrame) / (millisecondsPerSecond / desiredFrames)) - 1;\n for (var j = 0; j < Math.min(droppedFrames, 4); j++) {\n step(true);\n dropCounter++;\n }\n }\n\n if (!running[id]) {\n return;\n }\n\n // Compute percent value\n if (duration) {\n percent = (now - start) / duration;\n if (percent > 1) {\n percent = 1;\n }\n }\n\n // Execute step callback, then...\n var value = easingMethod ? easingMethod(percent) : percent;\n if ((stepCallback(value, now, render) === false || percent === 1) && render) {\n running[id] = null;\n completedCallback && completedCallback(desiredFrames - dropCounter / ((now - start) / millisecondsPerSecond), id, percent === 1 || duration == null);\n } else if (render) {\n lastFrame = now;\n core.effect.Animate.requestAnimationFrame(step, root);\n }\n };\n\n // Mark as running\n running[id] = true;\n\n // Init first step\n core.effect.Animate.requestAnimationFrame(step, root);\n\n // Return unique animation ID\n return id;\n }\n };\n\n /*\r\n * Scroller\r\n * http://github.com/zynga/scroller\r\n *\r\n * modified by wangyi7099\r\n *\r\n * Copyright 2011, Zynga Inc.\r\n * Licensed under the MIT License.\r\n * https://raw.github.com/zynga/scroller/master/MIT-LICENSE.txt\r\n *\r\n * Based on the work of: Unify Project (unify-project.org)\r\n * http://unify-project.org\r\n * Copyright 2011, Deutsche Telekom AG\r\n * License: MIT + Apache (V2)\r\n */\n\n var animatingMethod = null;\n\n var noAnimatingMethod = null;\n\n function Scroller(callback, options) {\n this.__callback = callback;\n\n this.options = {\n /** Enable scrolling on x-axis */\n scrollingX: true,\n\n /** Enable scrolling on y-axis */\n scrollingY: true,\n\n /** Enable animations for deceleration, snap back, zooming and scrolling */\n animating: true,\n\n /** duration for animations triggered by scrollTo/zoomTo */\n animationDuration: 250,\n\n /** Enable bouncing (content can be slowly moved outside and jumps back after releasing) */\n bouncing: {\n top: 100,\n bottom: 100,\n left: 100,\n right: 100\n },\n\n /** Enable locking to the main axis if user moves only slightly on one of them at start */\n locking: true,\n\n /** Enable pagination mode (switching between full page content panes) */\n paging: false,\n\n /** Enable snapping of content to a configured pixel grid */\n snapping: false,\n\n /** Enable zooming of content via API, fingers and mouse wheel */\n zooming: false,\n\n /** Minimum zoom level */\n minZoom: 0.5,\n\n /** Maximum zoom level */\n maxZoom: 3,\n\n /** Multiply or decrease scrolling speed **/\n speedMultiplier: 1,\n\n /** Callback that is fired on the later of touch end or deceleration end,\r\n provided that another scrolling action has not begun. Used to know\r\n when to fade out a scrollbar. */\n scrollingComplete: NOOP,\n\n animatingEasing: 'easeOutCubic',\n\n noAnimatingEasing: 'easeInOutCubic',\n\n /** This configures the amount of change applied to deceleration when reaching boundaries **/\n penetrationDeceleration: 0.03,\n\n /** This configures the amount of change applied to acceleration when reaching boundaries **/\n penetrationAcceleration: 0.08\n };\n\n for (var key in options) {\n this.options[key] = options[key];\n }\n\n animatingMethod = createEasingFunction(this.options.animatingEasing, easingPattern);\n noAnimatingMethod = createEasingFunction(this.options.noAnimatingEasing, easingPattern);\n }\n\n var members = {\n /*\r\n ---------------------------------------------------------------------------\r\n INTERNAL FIELDS :: STATUS\r\n ---------------------------------------------------------------------------\r\n */\n\n /** {Boolean} Whether only a single finger is used in touch handling */\n __isSingleTouch: false,\n\n /** {Boolean} Whether a touch event sequence is in progress */\n __isTracking: false,\n\n /** {Boolean} Whether a deceleration animation went to completion. */\n __didDecelerationComplete: false,\n\n /**\r\n * {Boolean} Whether a gesture zoom/rotate event is in progress. Activates when\r\n * a gesturestart event happens. This has higher priority than dragging.\r\n */\n __isGesturing: false,\n\n /**\r\n * {Boolean} Whether the user has moved by such a distance that we have enabled\r\n * dragging mode. Hint: It's only enabled after some pixels of movement to\r\n * not interrupt with clicks etc.\r\n */\n __isDragging: false,\n\n /**\r\n * {Boolean} Not touching and dragging anymore, and smoothly animating the\r\n * touch sequence using deceleration.\r\n */\n __isDecelerating: false,\n\n /**\r\n * {Boolean} Smoothly animating the currently configured change\r\n */\n __isAnimating: false,\n\n /*\r\n ---------------------------------------------------------------------------\r\n INTERNAL FIELDS :: DIMENSIONS\r\n ---------------------------------------------------------------------------\r\n */\n\n /** {Integer} Available outer left position (from document perspective) */\n __clientLeft: 0,\n\n /** {Integer} Available outer top position (from document perspective) */\n __clientTop: 0,\n\n /** {Integer} Available outer width */\n __clientWidth: 0,\n\n /** {Integer} Available outer height */\n __clientHeight: 0,\n\n /** {Integer} Outer width of content */\n __contentWidth: 0,\n\n /** {Integer} Outer height of content */\n __contentHeight: 0,\n\n /** {Integer} Snapping width for content */\n __snapWidth: 100,\n\n /** {Integer} Snapping height for content */\n __snapHeight: 100,\n\n /** {Integer} Height to assign to refresh area */\n __refreshHeight: null,\n /** {Integer} Height to assign to refresh area */\n __loadHeight: null,\n /** {Boolean} Whether the refresh process is enabled when the event is released now */\n __refreshActive: false,\n\n /** {Function} Callback to execute on activation. This is for signalling the user about a refresh is about to happen when he release */\n __refreshActivate: null,\n\n __refreshBeforeDeactivate: null,\n\n /** {Function} Callback to execute on deactivation. This is for signalling the user about the refresh being cancelled */\n __refreshDeactivate: null,\n\n /** {Function} Callback to execute to start the actual refresh. Call {@link #refreshFinish} when done */\n __refreshStart: null,\n\n __loadActive: null,\n\n __loadActivate: null,\n\n __loadBeforeDeactivate: null,\n\n __loadDeactivate: null,\n\n __loadStart: null,\n /** {Number} Zoom level */\n __zoomLevel: 1,\n\n /** {Number} Scroll position on x-axis */\n __scrollLeft: 0,\n\n /** {Number} Scroll position on y-axis */\n __scrollTop: 0,\n\n /** {Integer} Maximum allowed scroll position on x-axis */\n __maxScrollLeft: 0,\n\n /** {Integer} Maximum allowed scroll position on y-axis */\n __maxScrollTop: 0,\n\n /* {Number} Scheduled left position (final position when animating) */\n __scheduledLeft: 0,\n\n /* {Number} Scheduled top position (final position when animating) */\n __scheduledTop: 0,\n\n /* {Number} Scheduled zoom level (final scale when animating) */\n __scheduledZoom: 0,\n\n /**\r\n * current page\r\n */\n __currentPageX: null,\n\n __currentPageY: null,\n\n /**\r\n * total page\r\n */\n __totalXPage: null,\n\n __totalYPage: null,\n /*\r\n ---------------------------------------------------------------------------\r\n INTERNAL FIELDS :: LAST POSITIONS\r\n ---------------------------------------------------------------------------\r\n */\n /** whether the scroller is disabled or not */\n __disable: false,\n /** {Number} Left position of finger at start */\n __lastTouchLeft: null,\n\n /** {Number} Top position of finger at start */\n __lastTouchTop: null,\n\n /** {Date} Timestamp of last move of finger. Used to limit tracking range for deceleration speed. */\n __lastTouchMove: null,\n\n /** {Array} List of positions, uses three indexes for each state: left, top, timestamp */\n __positions: null,\n\n /*\r\n ---------------------------------------------------------------------------\r\n INTERNAL FIELDS :: DECELERATION SUPPORT\r\n ---------------------------------------------------------------------------\r\n */\n\n /** {Integer} Minimum left scroll position during deceleration */\n __minDecelerationScrollLeft: null,\n\n /** {Integer} Minimum top scroll position during deceleration */\n __minDecelerationScrollTop: null,\n\n /** {Integer} Maximum left scroll position during deceleration */\n __maxDecelerationScrollLeft: null,\n\n /** {Integer} Maximum top scroll position during deceleration */\n __maxDecelerationScrollTop: null,\n\n /** {Number} Current factor to modify horizontal scroll position with on every step */\n __decelerationVelocityX: null,\n\n /** {Number} Current factor to modify vertical scroll position with on every step */\n __decelerationVelocityY: null,\n\n /*\r\n ---------------------------------------------------------------------------\r\n PUBLIC API\r\n ---------------------------------------------------------------------------\r\n */\n\n /**\r\n * Configures the dimensions of the client (outer) and content (inner) elements.\r\n * Requires the available space for the outer element and the outer size of the inner element.\r\n * All values which are falsy (null or zero etc.) are ignored and the old value is kept.\r\n *\r\n * @param clientWidth {Integer ? null} Inner width of outer element\r\n * @param clientHeight {Integer ? null} Inner height of outer element\r\n * @param contentWidth {Integer ? null} Outer width of inner element\r\n * @param contentHeight {Integer ? null} Outer height of inner element\r\n */\n setDimensions: function setDimensions(clientWidth, clientHeight, contentWidth, contentHeight, animate) {\n var noScroll = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n\n var self = this;\n\n // Only update values which are defined\n if (clientWidth === +clientWidth) {\n self.__clientWidth = clientWidth;\n }\n\n if (clientHeight === +clientHeight) {\n self.__clientHeight = clientHeight;\n }\n\n if (contentWidth === +contentWidth) {\n self.__contentWidth = contentWidth;\n }\n\n if (contentHeight === +contentHeight) {\n self.__contentHeight = contentHeight;\n }\n\n // Refresh maximums\n self.__computeScrollMax();\n\n if (!noScroll) {\n // Refresh scroll position\n self.scrollTo(self.__scrollLeft, self.__scrollTop, animate);\n }\n },\n\n /**\r\n * Sets the client coordinates in relation to the document.\r\n *\r\n * @param left {Integer ? 0} Left position of outer element\r\n * @param top {Integer ? 0} Top position of outer element\r\n */\n setPosition: function setPosition(left, top) {\n var self = this;\n\n self.__clientLeft = left || 0;\n self.__clientTop = top || 0;\n },\n\n /**\r\n * Configures the snapping (when snapping is active)\r\n *\r\n * @param width {Integer} Snapping width\r\n * @param height {Integer} Snapping height\r\n */\n setSnapSize: function setSnapSize(width, height) {\n var self = this;\n\n self.__snapWidth = width;\n self.__snapHeight = height;\n },\n\n /**\r\n * Activates pull-to-refresh. A special zone on the top of the list to start a list refresh whenever\r\n * the user event is released during visibility of this zone. This was introduced by some apps on iOS like\r\n * the official Twitter client.\r\n *\r\n * @param height {Integer} Height of pull-to-refresh zone on top of rendered list\r\n * @param activateCallback {Function} Callback to execute on activation. This is for signalling the user about a refresh is about to happen when he release.\r\n * @param deactivateCallback {Function} Callback to execute on deactivation. This is for signalling the user about the refresh being cancelled.\r\n * @param startCallback {Function} Callback to execute to start the real async refresh action. Call {@link #finishPullToRefresh} after finish of refresh.\r\n */\n activatePullToRefresh: function activatePullToRefresh(height, _ref) {\n var activateCallback = _ref.activateCallback,\n deactivateCallback = _ref.deactivateCallback,\n startCallback = _ref.startCallback,\n beforeDeactivateCallback = _ref.beforeDeactivateCallback,\n beforeDeactiveEnd = _ref.beforeDeactiveEnd;\n\n var self = this;\n\n self.__refreshHeight = height;\n self.__refreshActivate = activateCallback;\n self.__refreshBeforeDeactivate = beforeDeactivateCallback;\n self.__refreshBeforeDeactiveEnd = beforeDeactiveEnd;\n self.__refreshDeactivate = deactivateCallback;\n self.__refreshStart = startCallback;\n },\n activatePushToLoad: function activatePushToLoad(height, _ref2) {\n var activateCallback = _ref2.activateCallback,\n deactivateCallback = _ref2.deactivateCallback,\n startCallback = _ref2.startCallback,\n beforeDeactivateCallback = _ref2.beforeDeactivateCallback,\n beforeDeactiveEnd = _ref2.beforeDeactiveEnd;\n\n var self = this;\n\n self.__loadHeight = height;\n self.__loadActivate = activateCallback;\n self.__loadBeforeDeactivate = beforeDeactivateCallback;\n self.__loadBeforeDeactiveEnd = beforeDeactiveEnd;\n self.__loadDeactivate = deactivateCallback;\n self.__loadStart = startCallback;\n },\n\n /**\r\n * Starts pull-to-refresh manually.\r\n */\n triggerRefreshOrLoad: function triggerRefreshOrLoad() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'refresh';\n\n var wasDecelerating = this.__isDecelerating;\n if (wasDecelerating) {\n core.effect.Animate.stop(wasDecelerating);\n this.__isDecelerating = false;\n }\n // Use publish instead of scrollTo to allow scrolling to out of boundary position\n // We don't need to normalize scrollLeft, zoomLevel, etc. here because we only y-scrolling when pull-to-refresh is enabled\n if (type == 'refresh') {\n if (this.__refreshActive || this.__refreshBeforeDeactiveStarted) return;\n\n this.__publish(this.__scrollLeft, -this.__refreshHeight, this.__zoomLevel, true);\n if (this.__refreshStart) {\n this.__refreshStart();\n this.__refreshActive = true;\n }\n } else if (type == 'load') {\n if (this.__loadActive || this.__loadBeforeDeactiveStarted) return;\n\n this.__publish(this.__scrollLeft, this.__maxScrollTop + this.__loadHeight, this.__zoomLevel, true);\n if (this.__loadStart) {\n this.__loadStart();\n this.__loadActive = true;\n }\n }\n },\n\n /**\r\n * Signalizes that pull-to-refresh is finished.\r\n */\n finishRefreshOrLoad: function finishRefreshOrLoad() {\n var self = this;\n\n if (self.__refreshActive) {\n self.__refreshActive = false;\n var endRefreshActive = function endRefreshActive() {\n if (self.__refreshBeforeDeactiveEnd) {\n self.__refreshBeforeDeactiveEnd();\n }\n self.__refreshBeforeDeactiveStarted = true;\n self.scrollTo(self.__scrollLeft, self.__scrollTop, true);\n };\n\n if (self.__refreshBeforeDeactivate) {\n self.__refreshBeforeDeactivate(endRefreshActive);\n } else {\n endRefreshActive();\n }\n }\n\n if (self.__loadActive) {\n self.__loadActive = false;\n var endLoadActive = function endLoadActive() {\n if (self.__loadBeforeDeactiveEnd) {\n self.__loadBeforeDeactiveEnd();\n }\n self.__loadBeforeDeactiveStarted = true;\n self.scrollTo(self.__scrollLeft, self.__scrollTop, true);\n };\n\n if (self.__loadBeforeDeactivate) {\n self.__loadBeforeDeactivate(endLoadActive);\n } else {\n endLoadActive();\n }\n }\n },\n\n /**\r\n * Returns the scroll position and zooming values\r\n *\r\n * @return {Map} `left` and `top` scroll position and `zoom` level\r\n */\n getValues: function getValues() {\n var self = this;\n\n return {\n left: self.__scrollLeft,\n top: self.__scrollTop,\n zoom: self.__zoomLevel\n };\n },\n\n /**\r\n * Returns the maximum scroll values\r\n *\r\n * @return {Map} `left` and `top` maximum scroll values\r\n */\n getScrollMax: function getScrollMax() {\n var self = this;\n\n return {\n left: self.__maxScrollLeft,\n top: self.__maxScrollTop\n };\n },\n\n /**\r\n * Zooms to the given level. Supports optional animation. Zooms\r\n * the center when no coordinates are given.\r\n *\r\n * @param level {Number} Level to zoom to\r\n * @param animate {Boolean ? false} Whether to use animation\r\n * @param originLeft {Number ? null} Zoom in at given left coordinate\r\n * @param originTop {Number ? null} Zoom in at given top coordinate\r\n * @param callback {Function ? null} A callback that gets fired when the zoom is complete.\r\n */\n zoomTo: function zoomTo(level, animate, originLeft, originTop, callback) {\n var self = this;\n\n if (!self.options.zooming) {\n throw new Error('Zooming is not enabled!');\n }\n\n // Add callback if exists\n if (callback) {\n self.__zoomComplete = callback;\n }\n\n // Stop deceleration\n if (self.__isDecelerating) {\n core.effect.Animate.stop(self.__isDecelerating);\n self.__isDecelerating = false;\n }\n\n var oldLevel = self.__zoomLevel;\n\n // Normalize input origin to center of viewport if not defined\n if (originLeft == null) {\n originLeft = self.__clientWidth / 2;\n }\n\n if (originTop == null) {\n originTop = self.__clientHeight / 2;\n }\n\n // Limit level according to configuration\n level = Math.max(Math.min(level, self.options.maxZoom), self.options.minZoom);\n\n // Recompute maximum values while temporary tweaking maximum scroll ranges\n self.__computeScrollMax(level);\n\n // Recompute left and top coordinates based on new zoom level\n var left = (originLeft + self.__scrollLeft) * level / oldLevel - originLeft;\n var top = (originTop + self.__scrollTop) * level / oldLevel - originTop;\n\n // Limit x-axis\n if (left > self.__maxScrollLeft) {\n left = self.__maxScrollLeft;\n } else if (left < 0) {\n left = 0;\n }\n\n // Limit y-axis\n if (top > self.__maxScrollTop) {\n top = self.__maxScrollTop;\n } else if (top < 0) {\n top = 0;\n }\n\n // Push values out\n self.__publish(left, top, level, animate);\n },\n\n /**\r\n * Zooms the content by the given factor.\r\n *\r\n * @param factor {Number} Zoom by given factor\r\n * @param animate {Boolean ? false} Whether to use animation\r\n * @param originLeft {Number ? 0} Zoom in at given left coordinate\r\n * @param originTop {Number ? 0} Zoom in at given top coordinate\r\n * @param callback {Function ? null} A callback that gets fired when the zoom is complete.\r\n */\n zoomBy: function zoomBy(factor, animate, originLeft, originTop, callback) {\n var self = this;\n\n self.zoomTo(self.__zoomLevel * factor, animate, originLeft, originTop, callback);\n },\n\n /**\r\n * Scrolls to the given position. Respect limitations and snapping automatically.\r\n *\r\n * @param left {Number?null} Horizontal scroll position, keeps current if value is <code>null</code>\r\n * @param top {Number?null} Vertical scroll position, keeps current if value is <code>null</code>\r\n * @param animate {Boolean?false} Whether the scrolling should happen using an animation\r\n * @param zoom {Number?null} Zoom level to go to\r\n */\n scrollTo: function scrollTo(left, top, animate, zoom, force, speed, easing) {\n var self = this;\n\n // Stop deceleration\n if (self.__isDecelerating) {\n core.effect.Animate.stop(self.__isDecelerating);\n self.__isDecelerating = false;\n }\n\n // Correct coordinates based on new zoom level\n if (zoom != null && zoom !== self.__zoomLevel) {\n if (!self.options.zooming) {\n throw new Error('Zooming is not enabled!');\n }\n\n left *= zoom;\n top *= zoom;\n\n // Recompute maximum values while temporary tweaking maximum scroll ranges\n self.__computeScrollMax(zoom);\n } else {\n // Keep zoom when not defined\n zoom = self.__zoomLevel;\n }\n\n if (!self.options.scrollingX && !force) {\n left = self.__scrollLeft;\n } else {\n if (self.options.paging) {\n left = Math.round(left / self.__clientWidth) * self.__clientWidth;\n } else if (self.options.snapping) {\n left = Math.round(left / self.__snapWidth) * self.__snapWidth;\n }\n }\n\n if (!self.options.scrollingY && !force) {\n top = self.__scrollTop;\n } else {\n if (self.options.paging) {\n top = Math.round(top / self.__clientHeight) * self.__clientHeight;\n } else if (self.options.snapping) {\n top = Math.round(top / self.__snapHeight) * self.__snapHeight;\n }\n }\n\n if (!force) {\n // Limit for allowed ranges\n left = Math.max(Math.min(self.__maxScrollLeft, left), 0);\n top = Math.max(Math.min(self.__maxScrollTop, top), 0);\n }\n\n // Don't animate when no change detected, still call publish to make sure\n // that rendered position is really in-sync with internal data\n if (left === self.__scrollLeft && top === self.__scrollTop) {\n animate = false;\n }\n\n // Publish new values\n if (!self.__isTracking) {\n self.__publish(left, top, zoom, animate, speed, easing);\n }\n },\n\n /**\r\n * Scroll by the given offset\r\n *\r\n * @param left {Number ? 0} Scroll x-axis by given offset\r\n * @param top {Number ? 0} Scroll x-axis by given offset\r\n * @param animate {Boolean ? false} Whether to animate the given change\r\n */\n scrollBy: function scrollBy(left, top, animate) {\n var self = this;\n\n var startLeft = self.__isAnimating ? self.__scheduledLeft : self.__scrollLeft;\n var startTop = self.__isAnimating ? self.__scheduledTop : self.__scrollTop;\n\n self.scrollTo(startLeft + (left || 0), startTop + (top || 0), animate);\n },\n getCurrentPage: function getCurrentPage() {\n this.__computePage();\n return {\n x: this.__currentPageX,\n y: this.__currentPageY\n };\n },\n goToPage: function goToPage(_ref3, animate) {\n var x = _ref3.x,\n y = _ref3.y;\n\n if (isNaN(x)) {\n x = 1;\n }\n if (isNaN(y)) {\n y = 1;\n }\n this.scrollTo((x - 1) * this.__clientWidth, (y - 1) * this.__clientHeight, animate);\n },\n\n\n /*\r\n ---------------------------------------------------------------------------\r\n EVENT CALLBACKS\r\n ---------------------------------------------------------------------------\r\n */\n\n /**\r\n * Mouse wheel handler for zooming support\r\n */\n doMouseZoom: function doMouseZoom(wheelDelta, timeStamp, pageX, pageY) {\n var self = this;\n var change = wheelDelta > 0 ? 0.97 : 1.03;\n\n return self.zoomTo(self.__zoomLevel * change, false, pageX - self.__clientLeft, pageY - self.__clientTop);\n },\n\n /**\r\n * Touch start handler for scrolling support\r\n */\n doTouchStart: function doTouchStart(touches, timeStamp) {\n // Array-like check is enough here\n if (touches.length == null) {\n throw new Error('Invalid touch list: ' + touches);\n }\n\n if (timeStamp instanceof Date) {\n timeStamp = timeStamp.valueOf();\n }\n if (typeof timeStamp !== 'number') {\n throw new Error('Invalid timestamp value: ' + timeStamp);\n }\n\n var self = this;\n\n // Reset interruptedAnimation flag\n self.__interruptedAnimation = true;\n\n // Stop deceleration\n if (self.__isDecelerating) {\n core.effect.Animate.stop(self.__isDecelerating);\n self.__isDecelerating = false;\n self.__interruptedAnimation = true;\n }\n\n // Stop animation\n if (self.__isAnimating) {\n core.effect.Animate.stop(self.__isAnimating);\n self.__isAnimating = false;\n self.__interruptedAnimation = true;\n }\n\n // Use center point when dealing with two fingers\n var currentTouchLeft, currentTouchTop;\n var isSingleTouch = touches.length === 1;\n if (isSingleTouch) {\n currentTouchLeft = touches[0].pageX;\n currentTouchTop = touches[0].pageY;\n } else {\n currentTouchLeft = Math.abs(touches[0].pageX + touches[1].pageX) / 2;\n currentTouchTop = Math.abs(touches[0].pageY + touches[1].pageY) / 2;\n }\n\n // Store initial positions\n self.__initialTouchLeft = currentTouchLeft;\n self.__initialTouchTop = currentTouchTop;\n\n // Store current zoom level\n self.__zoomLevelStart = self.__zoomLevel;\n\n // Store initial touch positions\n self.__lastTouchLeft = currentTouchLeft;\n self.__lastTouchTop = currentTouchTop;\n\n // Store initial move time stamp\n self.__lastTouchMove = timeStamp;\n\n // Reset initial scale\n self.__lastScale = 1;\n\n // Reset locking flags\n self.__enableScrollX = !isSingleTouch && self.options.scrollingX;\n self.__enableScrollY = !isSingleTouch && self.options.scrollingY;\n\n // Reset tracking flag\n self.__isTracking = true;\n\n // Reset deceleration complete flag\n self.__didDecelerationComplete = false;\n\n // Dragging starts directly with two fingers, otherwise lazy with an offset\n self.__isDragging = !isSingleTouch;\n\n // Some features are in multi touch scenarios\n self.__isSingleTouch = isSingleTouch;\n\n // Clearing data structure\n self.__positions = [];\n },\n\n /**\r\n * Touch move handler for scrolling support\r\n */\n doTouchMove: function doTouchMove(touches, timeStamp, scale) {\n // Array-like check is enough here\n if (touches.length == null) {\n throw new Error('Invalid touch list: ' + touches);\n }\n\n if (timeStamp instanceof Date) {\n timeStamp = timeStamp.valueOf();\n }\n if (typeof timeStamp !== 'number') {\n throw new Error('Invalid timestamp value: ' + timeStamp);\n }\n\n var self = this;\n\n // Ignore event when tracking is not enabled (event might be outside of element)\n if (!self.__isTracking) {\n return;\n }\n\n var currentTouchLeft, currentTouchTop;\n\n // Compute move based around of center of fingers\n if (touches.length === 2) {\n currentTouchLeft = Math.abs(touches[0].pageX + touches[1].pageX) / 2;\n currentTouchTop = Math.abs(touches[0].pageY + touches[1].pageY) / 2;\n } else {\n currentTouchLeft = touches[0].pageX;\n currentTouchTop = touches[0].pageY;\n }\n\n var positions = self.__positions;\n\n // Are we already is dragging mode?\n if (self.__isDragging) {\n // Compute move distance\n var moveX = currentTouchLeft - self.__lastTouchLeft;\n var moveY = currentTouchTop - self.__lastTouchTop;\n\n // Read previous scroll position and zooming\n var scrollLeft = self.__scrollLeft;\n var scrollTop = self.__scrollTop;\n var level = self.__zoomLevel;\n\n // Work with scaling\n if (scale != null && self.options.zooming) {\n var oldLevel = level;\n\n // Recompute level based on previous scale and new scale\n level = level / self.__lastScale * scale;\n\n // Limit level according to configuration\n level = Math.max(Math.min(level, self.options.maxZoom), self.options.minZoom);\n\n // Only do further compution when change happened\n if (oldLevel !== level) {\n // Compute relative event position to container\n var currentTouchLeftRel = currentTouchLeft - self.__clientLeft;\n var currentTouchTopRel = currentTouchTop - self.__clientTop;\n\n // Recompute left and top coordinates based on new zoom level\n scrollLeft = (currentTouchLeftRel + scrollLeft) * level / oldLevel - currentTouchLeftRel;\n scrollTop = (currentTouchTopRel + scrollTop) * level / oldLevel - currentTouchTopRel;\n\n // Recompute max scroll values\n self.__computeScrollMax(level);\n }\n }\n\n var bouncing = self.options.bouncing;\n\n if (self.__enableScrollX) {\n scrollLeft -= moveX * this.options.speedMultiplier;\n var maxScrollLeft = self.__maxScrollLeft;\n\n if (scrollLeft > maxScrollLeft || scrollLeft < 0) {\n scrollLeft += moveX / 2 * this.options.speedMultiplier;\n\n // fix scrollLeft\n scrollLeft = Math.min(Math.max(-bouncing.left, scrollLeft), maxScrollLeft + bouncing.right);\n }\n }\n\n // Compute new vertical scroll position\n if (self.__enableScrollY) {\n scrollTop -= moveY * this.options.speedMultiplier;\n var maxScrollTop = self.__maxScrollTop;\n\n if (scrollTop > maxScrollTop || scrollTop < 0) {\n scrollTop += moveY / 2 * this.options.speedMultiplier;\n\n // fix scrollTop\n scrollTop = Math.min(Math.max(-bouncing.top, scrollTop), maxScrollTop + bouncing.bottom);\n\n // Trigger pull to refresh or push to load\n if (!self.__enableScrollX && (self.__refreshHeight != null || self.__loadHeight != null)) {\n if (!self.__refreshActive && scrollTop <= -self.__refreshHeight) {\n self.__refreshActive = true;\n if (self.__refreshActivate) {\n self.__refreshActivate();\n }\n } else if (self.__refreshActive && scrollTop > -self.__refreshHeight) {\n self.__refreshActive = false;\n if (self.__refreshDeactivate) {\n self.__refreshDeactivate();\n }\n }\n // handle for push-load\n else if (!self.__loadActive && scrollTop >= self.__maxScrollTop + self.__loadHeight && self.__loadHeight > 0) {\n self.__loadActive = true;\n if (self.__loadActivate) {\n self.__loadActivate();\n }\n } else if (self.__loadActive && scrollTop < self.__maxScrollTop + self.__loadHeight) {\n self.__loadActive = false;\n if (self.__loadDeactivate) {\n self.__loadDeactivate();\n }\n }\n }\n }\n }\n\n // Keep list from growing infinitely (holding min 10, max 20 measure points)\n if (positions.length > 60) {\n positions.splice(0, 30);\n }\n\n // Track scroll movement for decleration\n positions.push(scrollLeft, scrollTop, timeStamp);\n\n // Sync scroll position\n self.__publish(scrollLeft, scrollTop, level);\n\n // Otherwise figure out whether we are switching into dragging mode now.\n } else {\n var minimumTrackingForScroll = self.options.locking ? 3 : 0;\n var minimumTrackingForDrag = 5;\n\n var distanceX = Math.abs(currentTouchLeft - self.__initialTouchLeft);\n var distanceY = Math.abs(currentTouchTop - self.__initialTouchTop);\n\n self.__enableScrollX = self.options.scrollingX && distanceX >= minimumTrackingForScroll;\n self.__enableScrollY = self.options.scrollingY && distanceY >= minimumTrackingForScroll;\n\n positions.push(self.__scrollLeft, self.__scrollTop, timeStamp);\n\n self.__isDragging = (self.__enableScrollX || self.__enableScrollY) && (distanceX >= minimumTrackingForDrag || distanceY >= minimumTrackingForDrag);\n if (self.__isDragging) {\n self.__interruptedAnimation = false;\n }\n }\n\n // Update last touch positions and time stamp for next event\n self.__lastTouchLeft = currentTouchLeft;\n self.__lastTouchTop = currentTouchTop;\n self.__lastTouchMove = timeStamp;\n self.__lastScale = scale;\n },\n\n /**\r\n * Touch end handler for scrolling support\r\n */\n doTouchEnd: function doTouchEnd(timeStamp) {\n if (timeStamp instanceof Date) {\n timeStamp = timeStamp.valueOf();\n }\n if (typeof timeStamp !== 'number') {\n throw new Error('Invalid timestamp value: ' + timeStamp);\n }\n\n var self = this;\n\n // Ignore event when tracking is not enabled (no touchstart event on element)\n // This is required as this listener ('touchmove') sits on the document and not on the element itself.\n if (!self.__isTracking) {\n return;\n }\n\n // Not touching anymore (when two finger hit the screen there are two touch end events)\n self.__isTracking = false;\n\n // Be sure to reset the dragging flag now. Here we also detect whether\n // the finger has moved fast enough to switch into a deceleration animation.\n if (self.__isDragging) {\n // Reset dragging flag\n self.__isDragging = false;\n\n // Start deceleration\n // Verify that the last move detected was in some relevant time frame\n if (self.__isSingleTouch && self.options.animating && timeStamp - self.__lastTouchMove <= 100) {\n // Then figure out what the scroll position was about 100ms ago\n var positions = self.__positions;\n var endPos = positions.length - 1;\n var startPos = endPos;\n\n // Move pointer to position measured 100ms ago\n for (var i = endPos; i > 0 && positions[i] > self.__lastTouchMove - 100; i -= 3) {\n startPos = i;\n }\n\n // If start and stop position is identical in a 100ms timeframe,\n // we cannot compute any useful deceleration.\n if (startPos !== endPos) {\n // Compute relative movement between these two points\n var timeOffset = positions[endPos] - positions[startPos];\n var movedLeft = self.__scrollLeft - positions[startPos - 2];\n var movedTop = self.__scrollTop - positions[startPos - 1];\n\n // Based on 50ms compute the movement to apply for each render step\n self.__decelerationVelocityX = movedLeft / timeOffset * (1000 / 60);\n self.__decelerationVelocityY = movedTop / timeOffset * (1000 / 60);\n\n // How much velocity is required to start the deceleration\n var minVelocityToStartDeceleration = self.options.paging || self.options.snapping ? 4 : 1;\n\n // Verify that we have enough velocity to start deceleration\n if (Math.abs(self.__decelerationVelocityX) > minVelocityToStartDeceleration || Math.abs(self.__decelerationVelocityY) > minVelocityToStartDeceleration) {\n // Deactivate pull-to-refresh when decelerating\n if (!self.__refreshActive && !self.__loadActive) {\n self.__startDeceleration(timeStamp);\n }\n } else {\n self.__scrollComplete();\n }\n } else {\n self.__scrollComplete();\n }\n } else if (timeStamp - self.__lastTouchMove > 100) {\n self.__scrollComplete();\n }\n }\n\n // If this was a slower move it is per default non decelerated, but this\n // still means that we want snap back to the bounds which is done here.\n // This is placed outside the condition above to improve edge case stability\n // e.g. touchend fired without enabled dragging. This should normally do not\n // have modified the scroll positions or even showed the scrollbars though.\n if (!self.__isDecelerating) {\n if (self.__refreshActive && self.__refreshStart) {\n // Use publish instead of scrollTo to allow scrolling to out of boundary position\n // We don't need to normalize scrollLeft, zoomLevel, etc. here because we only y-scrolling when pull-to-refresh is enabled\n self.__publish(self.__scrollLeft, -self.__refreshHeight, self.__zoomLevel, true);\n\n if (self.__refreshStart) {\n self.__refreshStart();\n }\n } else if (self.__loadActive && self.__loadStart) {\n // Use publish instead of scrollTo to allow scrolling to out of boundary position\n // We don't need to normalize scrollLeft, zoomLevel, etc. here because we only y-scrolling when pull-to-refresh is enabled\n self.__publish(self.__scrollLeft, self.__maxScrollTop + self.__loadHeight, self.__zoomLevel, true);\n\n if (self.__loadStart) {\n self.__loadStart();\n }\n } else {\n if (self.__interruptedAnimation || self.__isDragging) {\n self.__scrollComplete();\n }\n self.scrollTo(self.__scrollLeft, self.__scrollTop, true, self.__zoomLevel);\n\n // Directly signalize deactivation (nothing todo on refresh?)\n if (self.__refreshActive) {\n self.__refreshActive = false;\n if (self.__refreshDeactivate) {\n self.__refreshDeactivate();\n }\n } else if (self.__loadActive) {\n self.__loadActive = false;\n if (self.__loadDeactivate) {\n self.__loadDeactivate();\n }\n }\n }\n }\n\n // Fully cleanup list\n self.__positions.length = 0;\n },\n\n /** Handle for scroll/publish */\n onScroll: NOOP,\n\n stop: function stop() {\n var self = this;\n\n self.__disable = true;\n },\n start: function start() {\n var self = this;\n\n self.__disable = true;\n },\n /*\r\n ---------------------------------------------------------------------------\r\n PRIVATE API\r\n ---------------------------------------------------------------------------\r\n */\n\n /**\r\n * Applies the scroll position to the content element\r\n *\r\n * @param left {Number} Left scroll position\r\n * @param top {Number} Top scroll position\r\n * @param animate {Boolean?false} Whether animation should be used to move to the new coordinates\r\n */\n __publish: function __publish(left, top, zoom, animate, speed, easing) {\n var self = this;\n if (self.__disable) {\n return;\n }\n if (isNaN(left)) {\n left = this.__scrollLeft;\n }\n if (isNaN(top)) {\n top = this.__scrollTop;\n }\n // Remember whether we had an animation, then we try to continue based on the current \"drive\" of the animation\n var wasAnimating = self.__isAnimating;\n if (wasAnimating) {\n core.effect.Animate.stop(wasAnimating);\n self.__isAnimating = false;\n }\n\n if (animate && (self.options.animating || speed)) {\n // Keep scheduled positions for scrollBy/zoomBy functionality\n self.__scheduledLeft = left;\n self.__scheduledTop = top;\n self.__scheduledZoom = zoom;\n\n var oldLeft = self.__scrollLeft;\n var oldTop = self.__scrollTop;\n var oldZoom = self.__zoomLevel;\n\n var diffLeft = left - oldLeft;\n var diffTop = top - oldTop;\n var diffZoom = zoom - oldZoom;\n\n var step = function step(percent, now, render) {\n if (render) {\n self.__scrollLeft = oldLeft + diffLeft * percent;\n self.__scrollTop = oldTop + diffTop * percent;\n self.__zoomLevel = oldZoom + diffZoom * percent;\n\n // Push values out\n if (self.__callback) {\n self.__callback(self.__scrollLeft, self.__scrollTop, self.__zoomLevel);\n self.onScroll();\n }\n }\n };\n\n var verify = function verify(id) {\n return self.__isAnimating === id;\n };\n\n var completed = function completed(renderedFramesPerSecond, animationId, wasFinished) {\n if (animationId === self.__isAnimating) {\n self.__isAnimating = false;\n }\n if (self.__didDecelerationComplete || wasFinished) {\n self.__scrollComplete();\n }\n\n if (self.options.zooming) {\n self.__computeScrollMax();\n if (self.__zoomComplete) {\n self.__zoomComplete();\n self.__zoomComplete = null;\n }\n }\n\n if (self.__refreshBeforeDeactiveStarted) {\n self.__refreshBeforeDeactiveStarted = false;\n if (self.__refreshDeactivate) self.__refreshDeactivate();\n }\n\n if (self.__loadBeforeDeactiveStarted) {\n self.__loadBeforeDeactiveStarted = false;\n if (self.__loadDeactivate) self.__loadDeactivate();\n }\n };\n\n var easingFunction = animatingMethod;\n if (easing) {\n easingFunction = createEasingFunction(easing, easingPattern);\n }\n\n // When continuing based on previous animation we choose an ease-out animation instead of ease-in-out\n self.__isAnimating = core.effect.Animate.start(step, verify, completed, speed || self.options.animationDuration, wasAnimating ? easingFunction : noAnimatingMethod);\n } else {\n self.__scheduledLeft = self.__scrollLeft = left;\n self.__scheduledTop = self.__scrollTop = top;\n self.__scheduledZoom = self.__zoomLevel = zoom;\n\n // Push values out\n if (self.__callback) {\n self.__callback(left, top, zoom);\n self.onScroll();\n }\n\n // Fix max scroll ranges\n if (self.options.zooming) {\n self.__computeScrollMax();\n if (self.__zoomComplete) {\n self.__zoomComplete();\n self.__zoomComplete = null;\n }\n }\n\n if (self.__refreshBeforeDeactiveStarted) {\n self.__refreshBeforeDeactiveStarted = false;\n if (self.__refreshDeactivate) self.__refreshDeactivate();\n }\n\n if (self.__loadBeforeDeactiveStarted) {\n self.__loadBeforeDeactiveStarted = false;\n if (self.__loadDeactivate) self.__loadDeactivate();\n }\n }\n },\n\n /**\r\n * Recomputes scroll minimum values based on client dimensions and content dimensions.\r\n */\n __computeScrollMax: function __computeScrollMax(zoomLevel) {\n var self = this;\n\n if (zoomLevel == null) {\n zoomLevel = self.__zoomLevel;\n }\n\n self.__maxScrollLeft = Math.max(self.__contentWidth * zoomLevel - self.__clientWidth, 0);\n self.__maxScrollTop = Math.max(self.__contentHeight * zoomLevel - self.__clientHeight, 0);\n },\n /** compute current page total page */\n __computePage: function __computePage() {\n var self = this;\n var clientWidth = self.__clientWidth;\n var clientHeight = self.__clientHeight;\n var left = self.__scrollLeft;\n var top = self.__scrollTop;\n self.__totalXPage = Math.ceil(self.__contentWidth / clientWidth);\n self.__currentPageX = Math.ceil(left / clientWidth + 1);\n self.__totalYPage = Math.ceil(self.__contentHeight / clientHeight);\n self.__currentPageY = Math.ceil(top / clientHeight + 1);\n },\n /** complete scroll*/\n __scrollComplete: function __scrollComplete() {\n var self = this;\n self.options.scrollingComplete();\n },\n /*\r\n ---------------------------------------------------------------------------\r\n ANIMATION (DECELERATION) SUPPORT\r\n ---------------------------------------------------------------------------\r\n */\n\n /**\r\n * Called when a touch sequence end and the speed of the finger was high enough\r\n * to switch into deceleration mode.\r\n */\n __startDeceleration: function __startDeceleration() {\n var self = this;\n\n if (self.options.paging) {\n var scrollLeft = Math.max(Math.min(self.__scrollLeft, self.__maxScrollLeft), 0);\n var scrollTop = Math.max(Math.min(self.__scrollTop, self.__maxScrollTop), 0);\n var clientWidth = self.__clientWidth;\n var clientHeight = self.__clientHeight;\n\n // We limit deceleration not to the min/max values of the allowed range, but to the size of the visible client area.\n // Each page should have exactly the size of the client area.\n self.__minDecelerationScrollLeft = Math.floor(scrollLeft / clientWidth) * clientWidth;\n self.__minDecelerationScrollTop = Math.floor(scrollTop / clientHeight) * clientHeight;\n self.__maxDecelerationScrollLeft = Math.ceil(scrollLeft / clientWidth) * clientWidth;\n self.__maxDecelerationScrollTop = Math.ceil(scrollTop / clientHeight) * clientHeight;\n } else {\n self.__minDecelerationScrollLeft = 0;\n self.__minDecelerationScrollTop = 0;\n self.__maxDecelerationScrollLeft = self.__maxScrollLeft;\n self.__maxDecelerationScrollTop = self.__maxScrollTop;\n }\n\n // Wrap class method\n var step = function step(percent, now, render) {\n self.__stepThroughDeceleration(render);\n };\n\n // How much velocity is required to keep the deceleration running\n var minVelocityToKeepDecelerating = self.options.snapping ? 4 : 0.001;\n\n // Detect whether it's still worth to continue animating steps\n // If we are already slow enough to not being user perceivable anymore, we stop the whole process here.\n var verify = function verify() {\n var shouldContinue = Math.abs(self.__decelerationVelocityX) >= minVelocityToKeepDecelerating || Math.abs(self.__decelerationVelocityY) >= minVelocityToKeepDecelerating;\n if (!shouldContinue) {\n self.__didDecelerationComplete = true;\n }\n return shouldContinue;\n };\n\n var completed = function completed() {\n if (!self.__isDecelerating) {\n return;\n }\n self.__isDecelerating = false;\n if (self.__didDecelerationComplete) {\n self.__scrollComplete();\n }\n\n // Animate to grid when snapping is active, otherwise just fix out-of-boundary positions\n self.scrollTo(self.__scrollLeft, self.__scrollTop, self.options.snapping);\n };\n\n // Start animation and switch on flag\n self.__isDecelerating = core.effect.Animate.start(step, verify, completed);\n },\n\n /**\r\n * Called on every step of the animation\r\n *\r\n * @param inMemory {Boolean?false} Whether to not render the current step, but keep it in memory only. Used internally only!\r\n */\n __stepThroughDeceleration: function __stepThroughDeceleration(render) {\n var self = this;\n var bouncing = self.options.bouncing;\n var minLeft = self.__minDecelerationScrollLeft;\n var maxLeft = self.__maxDecelerationScrollLeft;\n var minTop = self.__minDecelerationScrollTop;\n var maxTop = self.__maxDecelerationScrollTop;\n // Add deceleration to scroll position\n var scrollLeft = self.__scrollLeft + self.__decelerationVelocityX;\n var scrollTop = self.__scrollTop + self.__decelerationVelocityY;\n\n var bounceX = scrollLeft < minLeft || scrollLeft > maxLeft;\n var bounceY = scrollTop < minTop || scrollTop > maxTop;\n\n // fix scrollLeft and scrollTop\n var fixedScrollLeft = Math.min(Math.max(minLeft - bouncing.left, scrollLeft), maxLeft + bouncing.right);\n\n var fixedScrollTop = Math.min(Math.max(minTop - bouncing.top, scrollTop), maxTop + bouncing.bottom);\n\n //\n // UPDATE SCROLL POSITION\n //\n if (render) {\n self.__publish(fixedScrollLeft, fixedScrollTop, self.__zoomLevel);\n } else {\n self.__scrollLeft = scrollLeft;\n self.__scrollTop = scrollTop;\n }\n\n //\n // SLOW DOWN\n //\n\n // Slow down velocity on every iteration\n if (!self.options.paging) {\n // This is the factor applied to every iteration of the animation\n // to slow down the process. This should emulate natural behavior where\n // objects slow down when the initiator of the movement is removed\n var frictionFactor = 0.95;\n\n self.__decelerationVelocityX *= frictionFactor;\n self.__decelerationVelocityY *= frictionFactor;\n }\n\n //\n // BOUNCING SUPPORT\n //\n\n var scrollOutsideX = 0;\n var scrollOutsideY = 0;\n\n // This configures the amount of change applied to deceleration/acceleration when reaching boundaries\n var penetrationDeceleration = self.options.penetrationDeceleration;\n var penetrationAcceleration = self.options.penetrationAcceleration;\n\n if (bounceX) {\n // Check limits\n if (scrollLeft < self.__minDecelerationScrollLeft) {\n scrollOutsideX = self.__minDecelerationScrollLeft - scrollLeft;\n } else if (scrollLeft > self.__maxDecelerationScrollLeft) {\n scrollOutsideX = self.__maxDecelerationScrollLeft - scrollLeft;\n }\n }\n\n if (bounceY) {\n if (scrollTop < self.__minDecelerationScrollTop) {\n scrollOutsideY = self.__minDecelerationScrollTop - scrollTop;\n } else if (scrollTop > self.__maxDecelerationScrollTop) {\n scrollOutsideY = self.__maxDecelerationScrollTop - scrollTop;\n }\n }\n\n if (scrollOutsideX !== 0) {\n if (scrollOutsideX * self.__decelerationVelocityX <= 0) {\n self.__decelerationVelocityX += scrollOutsideX * penetrationDeceleration;\n if (scrollOutsideX < 0 && -scrollOutsideX >= bouncing.right && self.__decelerationVelocityX > 0) {\n self.__decelerationVelocityX = -bouncing.right / 2;\n }\n if (scrollOutsideX > 0 && scrollOutsideX >= bouncing.left && self.__decelerationVelocityX < 0) {\n self.__decelerationVelocityX = bouncing.left / 2;\n }\n } else {\n self.__decelerationVelocityX = scrollOutsideX * penetrationAcceleration;\n }\n }\n\n if (scrollOutsideY !== 0) {\n if (scrollOutsideY * self.__decelerationVelocityY <= 0) {\n self.__decelerationVelocityY += scrollOutsideY * penetrationDeceleration;\n if (scrollOutsideY < 0 && -scrollOutsideY >= bouncing.bottom && self.__decelerationVelocityY > 0) {\n self.__decelerationVelocityY = -bouncing.bottom / 2;\n }\n if (scrollOutsideY > 0 && scrollOutsideY >= bouncing.top && self.__decelerationVelocityY < 0) {\n self.__decelerationVelocityY = bouncing.top / 2;\n }\n } else {\n self.__decelerationVelocityY = scrollOutsideY * penetrationAcceleration / 2;\n }\n }\n }\n };\n\n // Copy over members to prototype\n for (var key in members) {\n Scroller.prototype[key] = members[key];\n }\n\n /* DOM-based rendering (Uses 3D when available, falls back on margin when transform not available) */\n function render(content, global, suffix, type) {\n if (type == 'position') {\n return function (left, top) {\n content.style.left = -left + 'px';\n content.style.top = -top + 'px';\n };\n }\n\n var vendorPrefix = getPrefix(global);\n\n var helperElem = document.createElement('div');\n var undef;\n\n var perspectiveProperty = vendorPrefix + 'Perspective';\n var transformProperty = 'transform'; //vendorPrefix + 'Transform';\n\n if (helperElem.style[perspectiveProperty] !== undef) {\n return function (left, top, zoom) {\n content.style[transformProperty] = 'translate3d(' + -left + suffix + ',' + -top + suffix + ',0) scale(' + zoom + ')';\n };\n } else if (helperElem.style[transformProperty] !== undef) {\n return function (left, top, zoom) {\n content.style[transformProperty] = 'translate(' + -left + suffix + ',' + -top + suffix + ') scale(' + zoom + ')';\n };\n }\n }\n\n var touch = new touchManager();\n function listenContainer(container, scroller, eventCallback, zooming, preventDefault, preventDefaultOnMove) {\n var destroy = null;\n var mousedown = false;\n var touchObj = touch.getTouchObject();\n\n function touchstart(e) {\n var event = touch.getEventObject(e);\n // Don't react if initial down happens on a form element\n if (event[0] && event[0].target && event[0].target.tagName.match(/input|textarea|select/i) || scroller.__disable) {\n return;\n }\n eventCallback('mousedown');\n mousedown = true;\n scroller.doTouchStart(event, e.timeStamp);\n\n if (preventDefault) {\n e.preventDefault();\n }\n e.stopPropagation();\n\n // here , we want to manully prevent default, so we\n // set passive to false\n // see https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener\n document.addEventListener(touchObj.touchmove, touchmove, {\n passive: false\n });\n }\n\n function touchmove(e) {\n if (scroller.__disable || !mousedown) return;\n\n var event = touch.getEventObject(e);\n eventCallback('mousemove');\n scroller.doTouchMove(event, e.timeStamp, e.scale);\n if (preventDefaultOnMove) {\n e.preventDefault();\n }\n }\n\n function touchend(e) {\n eventCallback('mouseup');\n mousedown = false;\n scroller.doTouchEnd(e.timeStamp);\n document.removeEventListener(touchObj.touchmove, touchmove);\n }\n function touchcancel(e) {\n scroller.doTouchEnd(e.timeStamp);\n }\n\n function zoomHandle(e) {\n scroller.doMouseZoom(e.detail ? e.detail * -120 : e.wheelDelta, e.timeStamp, e.pageX, e.pageY);\n }\n\n container.addEventListener(touchObj.touchstart, touchstart, false);\n\n document.addEventListener(touchObj.touchend, touchend, false);\n document.addEventListener(touchObj.touchcancel, touchcancel, false);\n\n if (zooming && !touch.isTouch) {\n container.addEventListener(navigator.userAgent.indexOf('Firefox') > -1 ? 'DOMMouseScroll' : 'mousewheel', zoomHandle, false);\n }\n\n destroy = function destroy() {\n container.removeEventListener(touchObj.touchstart, touchstart, false);\n\n document.removeEventListener(touchObj.touchend, touchend, false);\n document.removeEventListener(touchObj.touchcancel, touchcancel, false);\n\n container.removeEventListener(navigator.userAgent.indexOf('Firefox') > -1 ? 'DOMMouseScroll' : 'mousewheel', zoomHandle, false);\n };\n\n // handle __publish event\n scroller.onScroll = function () {\n eventCallback('onscroll');\n };\n return destroy;\n }\n\n /**\r\n * These mixes is exclusive for slide mode\r\n */\n\n createSlideModeStyle();\n /**\r\n * @description refresh and load callback\r\n */\n function createStateCallbacks(type, stageType, vm, tipDom) {\n var listeners = vm.$listeners;\n\n var activateCallback = function activateCallback() {\n vm.vuescroll.state[stageType] = 'active';\n vm.$emit(type + '-activate', vm, tipDom);\n };\n\n var deactivateCallback = function deactivateCallback() {\n vm.vuescroll.state[stageType] = 'deactive';\n vm.$emit(type + '-deactivate', vm, tipDom);\n };\n\n var beforeDeactiveEnd = function beforeDeactiveEnd() {\n vm.vuescroll.state[stageType] = 'beforeDeactiveEnd';\n vm.$emit(type + '-before-deactivate-end', vm, tipDom);\n };\n\n var startCallback = function startCallback() {\n vm.vuescroll.state[stageType] = 'start';\n setTimeout(function () {\n vm.scroller.finishRefreshOrLoad();\n }, 2000); // Default start stage duration\n };\n\n // let beforeDeactivateCallback = done => {\n // vm.vuescroll.state[stageType] = 'beforeDeactive';\n // setTimeout(function() {\n // done();\n // }, 500); // Default before-deactivated stage duration\n // };\n var beforeDeactivateCallback = void 0;\n\n /* istanbul ignore if */\n if (listeners[type + '-before-deactivate']) {\n beforeDeactivateCallback = function beforeDeactivateCallback(done) {\n vm.vuescroll.state[stageType] = 'beforeDeactive';\n vm.$emit(type + '-before-deactivate', vm, tipDom, done.bind(vm.scroller));\n };\n }\n\n /* istanbul ignore if */\n if (listeners[type + '-start']) {\n startCallback = function startCallback() {\n vm.vuescroll.state[stageType] = 'start';\n vm.$emit(type + '-start', vm, tipDom, vm.scroller.finishRefreshOrLoad.bind(vm.scroller));\n };\n }\n\n return {\n activateCallback: activateCallback,\n deactivateCallback: deactivateCallback,\n startCallback: startCallback,\n beforeDeactivateCallback: beforeDeactivateCallback,\n beforeDeactiveEnd: beforeDeactiveEnd\n };\n }\n\n var slideMix = {\n mounted: function mounted() {\n this.vsMounted = true;\n },\n\n computed: {\n pullRefreshTip: function pullRefreshTip() {\n return this.mergedOptions.vuescroll.pullRefresh.tips[this.vuescroll.state.refreshStage];\n },\n pushLoadTip: function pushLoadTip() {\n return this.mergedOptions.vuescroll.pushLoad.tips[this.vuescroll.state.loadStage];\n },\n refreshLoad: function refreshLoad() {\n return this.mergedOptions.vuescroll.pullRefresh.enable || this.mergedOptions.vuescroll.pushLoad.enable;\n },\n refrehDomVisiable: function refrehDomVisiable() {\n return this.vsMounted && this.outTheTopBoundary;\n },\n loadDomVisiable: function loadDomVisiable() {\n return this.vsMounted && this.outTheBottomBoundary;\n }\n },\n data: function data() {\n return {\n vuescroll: {\n state: {\n /** Default tips of refresh and load */\n refreshStage: 'deactive',\n loadStage: 'deactive'\n }\n },\n vsMounted: false,\n outTheTopBoundary: false,\n outTheBottomBoundary: false\n };\n },\n\n methods: {\n // Update:\n // 1. update height/width\n // 2. update refresh or load\n updateScroller: function updateScroller() {\n this.updateDimesion();\n this.registryRefreshLoad();\n },\n updateDimesion: function updateDimesion() {\n var clientWidth = this.$el.clientWidth;\n var clientHeight = this.$el.clientHeight;\n var contentWidth = this.scrollPanelElm.scrollWidth;\n var contentHeight = this.scrollPanelElm.scrollHeight;\n var refreshHeight = 0;\n var loadHeight = 0;\n // If the refresh option is true,let's give a \"margin-top\" style to\n // the refresh-tip dom. let it to be invisible when doesn't trigger\n // refresh.\n if (this.mergedOptions.vuescroll.pullRefresh.enable) {\n if (this.vsMounted) {\n var refreshDom = this.$refs[__REFRESH_DOM_NAME].elm || this.$refs[__REFRESH_DOM_NAME];\n refreshHeight = refreshDom.offsetHeight;\n refreshDom.style.marginTop = -refreshHeight + 'px';\n }\n }\n if (this.mergedOptions.vuescroll.pushLoad.enable) {\n if (this.vsMounted) {\n var loadDom = this.$refs[__LOAD_DOM_NAME].elm || this.$refs[__LOAD_DOM_NAME];\n loadHeight = loadDom.offsetHeight;\n contentHeight -= loadHeight;\n loadDom.style.bottom = '-' + loadHeight + 'px';\n }\n }\n if (this.scroller) {\n this.scroller.setDimensions(clientWidth, clientHeight, contentWidth, contentHeight, false);\n }\n },\n registryRefreshLoad: function registryRefreshLoad() {\n // registry refresh\n if (this.mergedOptions.vuescroll.pullRefresh.enable) {\n this.registryEvent('refresh');\n }\n // registry load\n if (this.mergedOptions.vuescroll.pushLoad.enable) {\n this.registryEvent('load');\n }\n },\n registryScroller: function registryScroller() {\n var _this = this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$left = _ref.left,\n left = _ref$left === undefined ? 0 : _ref$left,\n _ref$top = _ref.top,\n top = _ref$top === undefined ? 0 : _ref$top,\n _ref$zoom = _ref.zoom,\n zoom = _ref$zoom === undefined ? 1 : _ref$zoom;\n\n var _mergedOptions$vuescr = this.mergedOptions.vuescroll.scroller,\n preventDefault = _mergedOptions$vuescr.preventDefault,\n preventDefaultOnMove = _mergedOptions$vuescr.preventDefaultOnMove;\n var _mergedOptions$vuescr2 = this.mergedOptions.vuescroll,\n paging = _mergedOptions$vuescr2.paging,\n snapping = _mergedOptions$vuescr2.snapping.enable,\n renderMethod = _mergedOptions$vuescr2.renderMethod,\n zooming = _mergedOptions$vuescr2.zooming,\n locking = _mergedOptions$vuescr2.locking;\n // disale zooming when refresh or load enabled\n\n zooming = !this.refreshLoad && !paging && !snapping && zooming;\n var _mergedOptions$scroll = this.mergedOptions.scrollPanel,\n scrollingY = _mergedOptions$scroll.scrollingY,\n scrollingX = _mergedOptions$scroll.scrollingX;\n\n\n var scrollingComplete = this.scrollingComplete.bind(this);\n\n // Initialize Scroller\n this.scroller = new Scroller(render(this.scrollPanelElm, window, 'px', renderMethod), _extends({}, this.mergedOptions.vuescroll.scroller, {\n zooming: zooming,\n scrollingY: scrollingY,\n scrollingX: scrollingX && !this.refreshLoad,\n animationDuration: this.mergedOptions.scrollPanel.speed,\n paging: paging,\n snapping: snapping,\n scrollingComplete: scrollingComplete,\n locking: locking\n }));\n\n this.scroller.__disable = this.mergedOptions.vuescroll.scroller.disable;\n this.scroller.__scrollLeft = left;\n this.scroller.__scrollTop = top;\n this.scroller.__zoomLevel = zoom;\n\n // Set snap\n if (snapping) {\n this.scroller.setSnapSize(this.mergedOptions.vuescroll.snapping.width, this.mergedOptions.vuescroll.snapping.height);\n }\n var rect = this.$el.getBoundingClientRect();\n this.scroller.setPosition(rect.left + this.$el.clientLeft, rect.top + this.$el.clientTop);\n\n // Get destroy callback\n var cb = listenContainer(this.$el, this.scroller, function (eventType) {\n // Thie is to dispatch the event from the scroller.\n // to let vuescroll refresh the dom\n switch (eventType) {\n case 'mousedown':\n _this.vuescroll.state.isDragging = true;\n break;\n case 'onscroll':\n {\n /**\r\n * Trigger auto load\r\n */\n var stage = _this.vuescroll.state['loadStage'];\n var _mergedOptions$vuescr3 = _this.mergedOptions.vuescroll.pushLoad,\n enable = _mergedOptions$vuescr3.enable,\n auto = _mergedOptions$vuescr3.auto,\n autoLoadDistance = _mergedOptions$vuescr3.autoLoadDistance;\n var _scroller = _this.scroller,\n __scrollTop = _scroller.__scrollTop,\n __maxScrollTop = _scroller.__maxScrollTop;\n\n if (stage != 'start' && enable && auto && !_this.lockAutoLoad && // auto load debounce\n autoLoadDistance >= __maxScrollTop - __scrollTop && __scrollTop > 0) {\n _this.lockAutoLoad = true;\n _this.triggerRefreshOrLoad('load');\n }\n\n if (autoLoadDistance < __maxScrollTop - __scrollTop) {\n _this.lockAutoLoad = false;\n }\n\n _this.handleScroll(false);\n }\n\n break;\n case 'mouseup':\n _this.vuescroll.state.isDragging = false;\n break;\n }\n }, zooming, preventDefault, preventDefaultOnMove);\n\n this.updateScroller();\n\n return cb;\n },\n updateSlideModeBarState: function updateSlideModeBarState() {\n // update slide mode scrollbars' state\n var heightPercentage = void 0,\n widthPercentage = void 0;\n var vuescroll = this.$el;\n var scroller = this.scroller;\n\n var outerLeft = 0;\n var outerTop = 0;\n\n var _$el = this.$el,\n clientWidth = _$el.clientWidth,\n clientHeight = _$el.clientHeight;\n\n\n var contentWidth = clientWidth + this.scroller.__maxScrollLeft;\n var contentHeight = clientHeight + this.scroller.__maxScrollTop;\n\n // We should add the the height or width that is\n // out of horizontal bountry to the total length\n\n /* istanbul ignore if */\n if (scroller.__scrollLeft < 0) {\n outerLeft = -scroller.__scrollLeft;\n } /* istanbul ignore next */else if (scroller.__scrollLeft > scroller.__maxScrollLeft) {\n outerLeft = scroller.__scrollLeft - scroller.__maxScrollLeft;\n }\n\n // out of vertical bountry\n if (scroller.__scrollTop < 0) {\n outerTop = -scroller.__scrollTop;\n this.outTheBottomBoundary = false;\n this.outTheTopBoundary = true;\n } else if (scroller.__scrollTop > scroller.__maxScrollTop) {\n outerTop = scroller.__scrollTop - scroller.__maxScrollTop;\n this.outTheTopBoundary = false;\n this.outTheBottomBoundary = true;\n } else {\n this.outTheTopBoundary = this.outTheBottomBoundary = false;\n }\n\n heightPercentage = clientHeight / (contentHeight + outerTop);\n widthPercentage = clientWidth / (contentWidth + outerLeft);\n\n var scrollTop = Math.min(Math.max(0, scroller.__scrollTop), scroller.__maxScrollTop);\n var scrollLeft = Math.min(Math.max(0, scroller.__scrollLeft), scroller.__maxScrollLeft);\n\n this.bar.vBar.state.posValue = (scrollTop + outerTop) * 100 / vuescroll.clientHeight;\n this.bar.hBar.state.posValue = (scrollLeft + outerLeft) * 100 / vuescroll.clientWidth;\n\n /* istanbul ignore if */\n if (scroller.__scrollLeft < 0) {\n this.bar.hBar.state.posValue = 0;\n }\n if (scroller.__scrollTop < 0) {\n this.bar.vBar.state.posValue = 0;\n }\n\n this.bar.vBar.state.size = heightPercentage < 1 ? heightPercentage : 0;\n this.bar.hBar.state.size = widthPercentage < 1 ? widthPercentage : 0;\n },\n registryEvent: function registryEvent(type) {\n var domName = type == 'refresh' ? __REFRESH_DOM_NAME : __LOAD_DOM_NAME;\n var activateFunc = type == 'refresh' ? this.scroller.activatePullToRefresh : this.scroller.activatePushToLoad;\n var stageType = type == 'refresh' ? 'refreshStage' : 'loadStage';\n var tipDom = this.$refs[domName].elm || this.$refs[domName];\n var cbs = createStateCallbacks(type, stageType, this, tipDom);\n var height = tipDom.offsetHeight;\n\n activateFunc.bind(this.scroller)(height, cbs);\n },\n getSlidePosition: function getSlidePosition() {\n return {\n scrollLeft: this.scroller.__scrollLeft,\n scrollTop: this.scroller.__scrollTop\n };\n }\n }\n };\n\n /**\r\n * These mixes is exclusive for native mode\r\n */\n\n var nativeMix = {\n methods: {\n updateNativeModeBarState: function updateNativeModeBarState() {\n var container = this.scrollPanelElm;\n var isPercent = this.vuescroll.state.currentSizeStrategy == 'percent';\n var _vuescroll$state = this.vuescroll.state,\n width = _vuescroll$state.width,\n height = _vuescroll$state.height;\n\n var clientWidth = isPercent || !width ? container.clientWidth : width.slice(0, -2); // xxxpx ==> xxx\n var clientHeight = isPercent || !height ? container.clientHeight : height.slice(0, -2);\n\n var heightPercentage = clientHeight / container.scrollHeight;\n var widthPercentage = clientWidth / container.scrollWidth;\n\n this.bar.vBar.state.posValue = container.scrollTop * 100 / clientHeight;\n this.bar.hBar.state.posValue = container.scrollLeft * 100 / clientWidth;\n\n this.bar.vBar.state.size = heightPercentage < 1 ? heightPercentage : 0;\n this.bar.hBar.state.size = widthPercentage < 1 ? widthPercentage : 0;\n },\n getNativePosition: function getNativePosition() {\n return {\n scrollTop: this.scrollPanelElm.scrollTop,\n scrollLeft: this.scrollPanelElm.scrollLeft\n };\n },\n css: function css(dom, style) /* istanbul ignore next */{\n return window.getComputedStyle(dom)[style];\n },\n checkScrollable: function checkScrollable(e, deltaX, deltaY) /* istanbul ignore next */{\n var scrollable = false;\n\n // check mouse point scrollable.\n var dom = e.target ? e.target : e;\n while (dom && dom.nodeType == 1 && dom !== this.scrollPanelElm.parentNode && !/^BODY|HTML/.test(dom.nodeName)) {\n var ov = this.css(dom, 'overflow') || '';\n if (/scroll|auto/.test(ov)) {\n var _getScrollProcess = this.getScrollProcess(dom),\n v = _getScrollProcess.v,\n h = _getScrollProcess.h;\n\n var isScrollX = this.css(dom, 'overflowX') !== 'hidden';\n var isScrollY = this.css(dom, 'overflowY') !== 'hidden';\n if (isScrollX && (deltaX < 0 && h > 0 || deltaX > 0 && h < 1) || isScrollY && (deltaY < 0 && v > 0 || deltaY > 0 && v < 1)) {\n scrollable = dom == this.scrollPanelElm;\n break;\n }\n }\n dom = dom.parentNode ? dom.parentNode : false;\n }\n\n return scrollable;\n },\n onMouseWheel: function onMouseWheel(event) /* istanbul ignore next */{\n var _mergedOptions$vuescr = this.mergedOptions.vuescroll,\n isReverse = _mergedOptions$vuescr.wheelDirectionReverse,\n duration = _mergedOptions$vuescr.wheelScrollDuration,\n checkShiftKey = _mergedOptions$vuescr.checkShiftKey,\n locking = _mergedOptions$vuescr.locking,\n deltaPercent = _mergedOptions$vuescr.deltaPercent;\n\n\n var deltaX = void 0;\n var deltaY = void 0;\n if (event.wheelDelta) {\n if (event.deltaY || event.deltaX) {\n deltaX = event.deltaX * deltaPercent;\n deltaY = event.deltaY * deltaPercent;\n if (locking) {\n if (Math.abs(event.deltaX) > Math.abs(event.deltaY)) {\n deltaY = 0;\n } else {\n deltaX = 0;\n }\n }\n } else {\n deltaX = 0;\n deltaY = -1 * event.wheelDelta / 2;\n }\n } else if (event.detail) {\n deltaY = deltaX = event.detail * 16;\n // horizontal scroll\n if (event.axis == 1) {\n deltaY = 0;\n } else if (event.axis == 2) {\n // vertical scroll\n deltaX = 0;\n }\n }\n\n if (checkShiftKey && event.shiftKey) {\n // swap value\n deltaX ^= deltaY;\n deltaY ^= deltaX;\n deltaX ^= deltaY;\n }\n\n if (isReverse) {\n deltaX ^= deltaY;\n deltaY ^= deltaX;\n deltaX ^= deltaY;\n }\n\n if (this.checkScrollable(event, deltaX, deltaY)) {\n event.stopPropagation();\n event.preventDefault();\n this.scrollBy({ dx: deltaX, dy: deltaY }, duration);\n }\n }\n },\n computed: {\n scrollContentElm: function scrollContentElm() {\n return this.$refs['scrollContent']._isVue ? this.$refs['scrollContent'].$el : this.$refs['scrollContent'];\n }\n }\n };\n\n var update = [slideMix, nativeMix];\n\n var mixins = [api$1].concat(toConsumableArray(update));\n\n var core$1 = {\n mixins: mixins,\n mounted: function mounted() {\n if (!this._isDestroyed && !this.renderError) {\n if (this.mode == 'slide') {\n this.updatedCbs.push(this.updateScroller);\n }\n\n this.$watch('mergedOptions.vuescroll.scroller.disable', {\n sync: true,\n handler: function handler(newVal) {\n if (this.scroller) {\n this.scroller.__disable = newVal;\n }\n }\n });\n }\n },\n\n computed: {\n mode: function mode() {\n return this.mergedOptions.vuescroll.mode;\n }\n },\n methods: {\n destroy: function destroy() {\n if (this.destroyScroller) {\n this.scroller.stop();\n this.destroyScroller();\n this.destroyScroller = null;\n }\n\n /* istanbul ignore next */\n if (this.destroyResize) {\n this.destroyResize();\n }\n },\n handleScroll: function handleScroll(nativeEvent) {\n this.updateBarStateAndEmitEvent('handle-scroll', nativeEvent);\n },\n updateBarStateAndEmitEvent: function updateBarStateAndEmitEvent(eventType) {\n var nativeEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n if (this.mode == 'native') {\n this.updateNativeModeBarState();\n } else if (this.mode == 'slide') {\n /* istanbul ignore if */\n if (!this.scroller) {\n return;\n }\n\n this.updateSlideModeBarState();\n }\n if (eventType) {\n this.emitEvent(eventType, nativeEvent);\n }\n if (this.mergedOptions.bar.onlyShowBarOnScroll) {\n if (eventType == 'handle-scroll' || eventType == 'handle-resize' || eventType == 'refresh-status' || eventType == 'window-resize' || eventType == 'options-change') {\n this.showAndDefferedHideBar(true /* forceHideBar: true */);\n }\n } else {\n this.showAndDefferedHideBar();\n }\n },\n getScrollProcess: function getScrollProcess() {\n var _scrollPanelElm = this.scrollPanelElm,\n scrollHeight = _scrollPanelElm.scrollHeight,\n scrollWidth = _scrollPanelElm.scrollWidth,\n clientHeight = _scrollPanelElm.clientHeight,\n clientWidth = _scrollPanelElm.clientWidth,\n scrollTop = _scrollPanelElm.scrollTop,\n scrollLeft = _scrollPanelElm.scrollLeft;\n\n\n if (this.mode == 'slide') {\n scrollHeight = this.scroller.__contentHeight;\n scrollWidth = this.scroller.__contentWidth;\n scrollTop = this.scroller.__scrollTop;\n scrollLeft = this.scroller.__scrollLeft;\n clientHeight = this.$el.clientHeight;\n clientWidth = this.$el.clientWidth;\n }\n\n var v = Math.min(scrollTop / (scrollHeight - clientHeight || 1), 1);\n var h = Math.min(scrollLeft / (scrollWidth - clientWidth || 1), 1);\n\n return {\n v: v,\n h: h\n };\n },\n emitEvent: function emitEvent(eventType) {\n var nativeEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var _scrollPanelElm2 = this.scrollPanelElm,\n scrollTop = _scrollPanelElm2.scrollTop,\n scrollLeft = _scrollPanelElm2.scrollLeft;\n\n\n var vertical = {\n type: 'vertical'\n };\n var horizontal = {\n type: 'horizontal'\n };\n\n var _getScrollProcess = this.getScrollProcess(),\n v = _getScrollProcess.v,\n h = _getScrollProcess.h;\n\n vertical['process'] = v;\n horizontal['process'] = h;\n\n vertical['barSize'] = this.bar.vBar.state.size;\n horizontal['barSize'] = this.bar.hBar.state.size;\n vertical['scrollTop'] = scrollTop;\n horizontal['scrollLeft'] = scrollLeft;\n\n this.$emit(eventType, vertical, horizontal, nativeEvent);\n },\n initVariables: function initVariables() {\n this.lastMode = this.mode;\n this.$el._isVuescroll = true;\n },\n refreshMode: function refreshMode() {\n var initPos = void 0;\n if (this.scroller) {\n initPos = this.scroller.getValues();\n }\n\n if (this.destroyScroller) {\n this.scroller.stop();\n this.destroyScroller();\n this.destroyScroller = null;\n }\n\n if (this.mode == 'slide') {\n this.destroyScroller = this.registryScroller(initPos);\n } else if (this.mode == 'native') {\n // remove the legacy transform style attribute\n this.scrollPanelElm.style.transform = '';\n this.scrollPanelElm.style.transformOrigin = '';\n }\n },\n refreshInternalStatus: function refreshInternalStatus() {\n // 1.set vuescroll height or width according to\n // sizeStrategy\n this.setVsSize();\n // 2. registry resize event\n this.registryResize();\n // 3. registry scroller if mode is 'slide'\n // or remove 'transform origin' is the mode is not `slide`\n this.refreshMode();\n // 4. update scrollbar's height/width\n this.updateBarStateAndEmitEvent('refresh-status');\n },\n registryResize: function registryResize() {\n var _this = this;\n\n var resizeEnable = this.mergedOptions.vuescroll.detectResize;\n var modeChanged = false;\n\n if (this.lastMode != this.mode) {\n modeChanged = true;\n this.lastMode = this.mode;\n }\n\n /* istanbul ignore next */\n if (this.destroyResize && resizeEnable && !modeChanged) {\n return;\n }\n\n if (this.destroyResize) {\n this.destroyResize();\n }\n\n if (!resizeEnable) {\n return;\n }\n\n var contentElm = null;\n if (this.mode == 'slide') {\n contentElm = this.scrollPanelElm;\n } else if (this.mode == 'native') {\n // scrollContent maybe a vue-component or a pure-dom\n contentElm = this.scrollContentElm;\n }\n\n var vm = this;\n var handleWindowResize = function handleWindowResize() /* istanbul ignore next */{\n vm.updateBarStateAndEmitEvent('window-resize');\n if (vm.mode == 'slide') {\n vm.updatedCbs.push(vm.updateScroller);\n vm.$forceUpdate();\n }\n };\n\n var handleDomResize = function handleDomResize() {\n var currentSize = {};\n if (_this.mode == 'slide') {\n currentSize['width'] = _this.scroller.__contentWidth;\n currentSize['height'] = _this.scroller.__contentHeight;\n _this.updateBarStateAndEmitEvent('handle-resize', currentSize);\n // update scroller should after rendering\n _this.updatedCbs.push(_this.updateScroller);\n _this.$forceUpdate();\n } else if (_this.mode == 'native') {\n currentSize['width'] = _this.scrollPanelElm.scrollWidth;\n currentSize['height'] = _this.scrollPanelElm.scrollHeight;\n _this.updateBarStateAndEmitEvent('handle-resize', currentSize);\n }\n\n // Since content sie changes, we should tell parent to set\n // correct size to fit content's size\n _this.setVsSize();\n };\n window.addEventListener('resize', handleWindowResize, false);\n\n var destroyDomResize = installResizeDetection(contentElm, handleDomResize);\n\n var destroyWindowResize = function destroyWindowResize() {\n window.removeEventListener('resize', handleWindowResize, false);\n };\n\n this.destroyResize = function () {\n destroyWindowResize();\n destroyDomResize();\n\n _this.destroyResize = null;\n };\n },\n getPosition: function getPosition() {\n if (this.mode == 'slide') {\n return this.getSlidePosition();\n } else if (this.mode == 'native') {\n return this.getNativePosition();\n }\n }\n }\n };\n\n /**\r\n * The slide mode config\r\n */\n\n var config = {\n // vuescroll\n vuescroll: {\n // position or transform\n renderMethod: 'transform',\n // pullRefresh or pushLoad is only for the slide mode...\n pullRefresh: {\n enable: false,\n tips: {\n deactive: 'Pull to Refresh',\n active: 'Release to Refresh',\n start: 'Refreshing...',\n beforeDeactive: 'Refresh Successfully!'\n }\n },\n pushLoad: {\n enable: false,\n tips: {\n deactive: 'Push to Load',\n active: 'Release to Load',\n start: 'Loading...',\n beforeDeactive: 'Load Successfully!'\n },\n auto: false,\n autoLoadDistance: 0\n },\n paging: false,\n zooming: true,\n snapping: {\n enable: false,\n width: 100,\n height: 100\n },\n /* some scroller options */\n scroller: {\n /** Enable bouncing (content can be slowly moved outside and jumps back after releasing) */\n bouncing: {\n top: 100,\n bottom: 100,\n left: 100,\n right: 100\n },\n /** Minimum zoom level */\n minZoom: 0.5,\n /** Maximum zoom level */\n maxZoom: 3,\n /** Multiply or decrease scrolling speed **/\n speedMultiplier: 1,\n /** This configures the amount of change applied to deceleration when reaching boundaries **/\n penetrationDeceleration: 0.03,\n /** This configures the amount of change applied to acceleration when reaching boundaries **/\n penetrationAcceleration: 0.08,\n /** Whether call e.preventDefault event when sliding the content or not */\n preventDefault: false,\n /** Whether call preventDefault when (mouse/touch)move*/\n preventDefaultOnMove: true,\n disable: false\n }\n }\n };\n /**\r\n * validate the options\r\n * @export\r\n * @param {any} ops\r\n */\n function configValidator(ops) {\n var renderError = false;\n var vuescroll = ops.vuescroll;\n\n // validate pushLoad, pullReresh, snapping\n\n if (vuescroll.paging == vuescroll.snapping.enable && vuescroll.paging && (vuescroll.pullRefresh || vuescroll.pushLoad)) {\n error('paging, snapping, (pullRefresh with pushLoad) can only one of them to be true.');\n }\n\n return renderError;\n }\n\n var config$1 = {\n vuescroll: {\n wheelScrollDuration: 0,\n wheelDirectionReverse: false,\n checkShiftKey: true,\n deltaPercent: 1\n }\n };\n\n var config$2 = {\n // vuescroll\n vuescroll: {\n mode: 'native'\n }\n };\n /**\r\n * validate the options\r\n * @export\r\n * @param {any} ops\r\n */\n function configValidator$1(ops) {\n var renderError = false;\n var vuescroll = ops.vuescroll;\n\n // validate modes\n\n if (!~modes.indexOf(vuescroll.mode)) {\n error('Unknown mode: ' + vuescroll.mode + ',the vuescroll\\'s option \"mode\" should be one of the ' + modes);\n renderError = true;\n }\n\n return renderError;\n }\n\n var configs = [config$2, config, config$1];\n var configValidators = [configValidator$1, configValidator];\n\n var component = _install(core$1, createPanel$2, configs, configValidators);\n\n function install(Vue) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n Vue.component(opts.name || component.name, component);\n Vue.prototype.$vuescrollConfig = opts.ops || {};\n }\n\n var Vuescroll = _extends({\n install: install,\n version: '4.18.1',\n refreshAll: refreshAll,\n scrollTo: scrollTo\n }, component);\n\n /* istanbul ignore if */\n if (typeof window !== 'undefined' && window.Vue) {\n window.Vue.use(Vuescroll);\n }\n\n return Vuescroll;\n\n})));\n"],"mappings":"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"},"metadata":{},"sourceType":"script","externalDependencies":[]}
|