{"version":3,"sources":["webpack:///./src/views/Detail.vue?55ba","webpack:///./node_modules/vuescroll/dist/vuescroll.js","webpack:///./src/views/Detail.vue","webpack:///src/views/Detail.vue","webpack:///./src/views/Detail.vue?a062","webpack:///./src/views/Detail.vue?4df2"],"names":["global","factory","module","exports","this","Vue","hasOwnProperty","_typeof","Symbol","iterator","obj","constructor","prototype","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","value","_extends","assign","arguments","source","call","toConsumableArray","arr","Array","isArray","arr2","from","isIE","isServer","agent","navigator","userAgent","toLowerCase","indexOf","isIos","u","match","$isServer","touchManager","originEvent","touchObject","isTouch","touches","platform","touch","window","opera","maxTouchPoints","msMaxTouchPoints","nonDeskTouch","test","eventType","touchstart","touchend","touchmove","touchenter","touchleave","touchcancel","ZoomManager","_this","originPixelRatio","getRatio","lastPixelRatio","addEventListener","ratio","screen","ua","undefined","devicePixelRatio","deviceXDPI","logicalXDPI","outerWidth","innerWidth","Math","round","deepCopy","to","shallow","isUndef","forEach","item","index","isPlainObj","mergeObject","force","defineReactive","souceKey","get","scrollBarWidth","zoomManager","getGutter","getRatioBetweenPreAndCurrent","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","engine","docStyle","documentElement","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","vuescroll","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","_rail$on","railSize","endPos","touchObj","getTouchObject","class","borderRadius","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","getEventObject","stopImmediatePropagation","preventDefault","onselectstart","axisStartPos","$refs","mousemove","mouseup","thubmParent","thumb","delta","percent","_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","_data$on","padding","__vuescroll","classHooks","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","isPaused","isStopped","ts","spd","execScroll","st","ed","stepCb","completeCb","vertifyCb","easingMethod","df","dir","nt","loop","_elm","scrollX","scrollY","scrollingElement","_elm2","startScroll","nativeApi","nativeStop","stop","nativePause","pause","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","global$1","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","self","__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","currentTouchLeft","currentTouchTop","__interruptedAnimation","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","undef","helperElem","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","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","Vue$$1","Vuescroll","use","_vm","_c","_self","staticClass","$store","isVertical","vw","vh","picSrc","backClickHandler","staticRenderFns","hoverStyle","checkShifKey","path"],"mappings":"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","file":"js/detail.732c4989.js","sourcesContent":["export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=style&index=0&id=1c946c0c&prod&scoped=true&lang=scss&\"","/*\n * Vuescroll v4.17.4\n * (c) 2018-2022 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\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('vue')) :\n\ttypeof define === 'function' && define.amd ? define(['vue'], factory) :\n\t(global.vuescroll = factory(global.Vue));\n}(this, (function (Vue) { 'use strict';\n\nVue = Vue && Vue.hasOwnProperty('default') ? Vue['default'] : Vue;\n\nvar _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\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar 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\n\n\n\nvar 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\nvar _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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar 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\nfunction 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\nvar 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 */\nvar isServer = function isServer() {\n return Vue.prototype.$isServer;\n};\n\nvar 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/**\n * ZoomManager\n * Get the browser zoom ratio\n */\n\nvar 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\nfunction 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\nfunction 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\nfunction 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$$1() {\n return source[souceKey];\n },\n\n configurable: true\n });\n}\n\nvar scrollBarWidth = void 0;\nvar zoomManager = void 0;\nfunction 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\nfunction 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\nvar error = function error(msg) {\n console.error('[vuescroll] ' + msg);\n};\nvar warn = function warn(msg) {\n console.warn('[vuescroll] ' + msg);\n};\n\nfunction 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\nfunction 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\nfunction 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/**\n * Insert children into user-passed slot at vnode level\n */\nfunction 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/**\n * Get the info of a vnode,\n * vnode must be parentVnode\n */\nfunction 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/**\n * Get the vuescroll instance instead of\n * user pass component like slot.\n */\nfunction getRealParent(ctx) {\n var parent = ctx.$parent;\n if (!parent._isVuescrollRoot && parent) {\n parent = parent.$parent;\n }\n return parent;\n}\n\nvar isArray = function isArray(_) {\n return Array.isArray(_);\n};\nvar isPlainObj = function isPlainObj(_) {\n return Object.prototype.toString.call(_) == '[object Object]';\n};\nvar isUndef = function isUndef(_) {\n return typeof _ === 'undefined';\n};\n\nfunction 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\nfunction 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.\nfunction 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\nfunction 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\nvar 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/**\n * Refresh all\n */\nvar vsInstances = {};\nfunction refreshAll() {\n for (var vs in vsInstances) {\n vsInstances[vs].refresh();\n }\n}\n\nvar 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 * validate the options\n * @export\n * @param {any} ops\n */\nfunction 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\nvar _extraValidate = null;\nvar 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\nvar modes = ['slide', 'native'];\n// do nothing\nvar NOOP = function NOOP() {};\n// some small changes.\nvar smallChangeArray = ['mergedOptions.vuescroll.pullRefresh.tips', 'mergedOptions.vuescroll.pushLoad.tips', 'mergedOptions.vuescroll.scroller.disable', 'mergedOptions.rail', 'mergedOptions.bar'];\n// refresh/load dom ref/key...\nvar __REFRESH_DOM_NAME = 'refreshDom';\nvar __LOAD_DOM_NAME = 'loadDom';\n\nvar 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\nfunction 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\nvar colorCache = {};\nvar rgbReg = /rgb\\(/;\nvar extractRgbColor = /rgb\\((.*)\\)/;\n\n// Transform a common color int oa `rgbA` color\nfunction 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\nvar 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\nfunction 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/**\n * create bars\n *\n * @param {any} size\n * @param {any} type\n */\nfunction 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/**\n * This is like a HOC, It extracts the common parts of the\n * native-mode, slide-mode and mix-mode.\n * Each mode must implement the following methods:\n * 1. refreshInternalStatus : use to refresh the component\n * 2. destroy : Destroy some registryed events before component destroy.\n * 3. updateBarStateAndEmitEvent: use to update bar states and emit events.\n */\n\nvar 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 /**\n * Begin to merge options\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 /*\n * To have a good ux, instead of hiding bar immediately, we hide bar\n * after some seconds by using this simple debounce-hidebar method.\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 /**\n * We also watch `small` changes, and when small changes happen, we send\n * a signal to vuescroll, to tell it:\n * 1. we don't need to registry resize\n * 2. we don't need to registry scroller.\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\nvar 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/**\n * Init following things\n * 1. Component\n * 2. Render\n * 3. Config\n */\nfunction _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/**\n * Get the children of parent those are in viewport\n */\nfunction 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/**\n * Compatible to scroller's animation function\n */\nfunction createEasingFunction(easing, easingPattern) {\n return function (time) {\n return easingPattern(easing, time);\n };\n}\n\n/**\n * Calculate the easing pattern\n * @link https://github.com/cferdinandi/smooth-scroll/blob/master/src/js/smooth-scroll.js\n * modified by wangyi7099\n * @param {String} type Easing pattern\n * @param {Number} time Time animation should take to complete\n * @returns {Number}\n */\nfunction 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\nfunction noop() {\n return true;\n}\n\n/* istanbul ignore next */\nvar now = Date.now || function () {\n return new Date().getTime();\n};\n\nvar 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\nfunction 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\nvar 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) {\n \n } 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\nfunction 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/**\n * create a scrollPanel\n *\n * @param {any} size\n * @param {any} context\n * @returns\n */\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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/**\n * create a scrollPanel\n *\n * @param {any} size\n * @param {any} context\n * @returns\n */\nfunction 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/**\n * create a scrollPanel\n *\n * @param {any} size\n * @param {any} vm\n * @returns\n */\nfunction 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\nfunction installResizeDetection(element, callback) {\n return injectObject(element, callback);\n}\n\nfunction 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\nvar 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\nvar 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/*\n * Scroller\n * http://github.com/zynga/scroller\n *\n * Copyright 2011, Zynga Inc.\n * Licensed under the MIT License.\n * https://raw.github.com/zynga/scroller/master/MIT-LICENSE.txt\n *\n * Based on the work of: Unify Project (unify-project.org)\n * http://unify-project.org\n * Copyright 2011, Deutsche Telekom AG\n * License: MIT + Apache (V2)\n */\n\n/**\n * Generic animation class with support for dropped frames both optional easing and duration.\n *\n * Optional duration is useful when the lifetime is defined by another condition than time\n * e.g. speed of an animating object, etc.\n *\n * Dropped frame logic allows to keep using the same updater logic independent from the actual\n * rendering. This eases a lot of cases where it might be pretty complex to break down a state\n * based on the pure time difference.\n */\nvar time = Date.now || function () {\n return +new Date();\n};\nvar desiredFrames = 60;\nvar millisecondsPerSecond = 1000;\nvar running = {};\nvar counter = 1;\n\nvar core = { effect: {} };\nvar global$1 = null;\n\nif (typeof window !== 'undefined') {\n global$1 = window;\n} else {\n global$1 = {};\n}\n\ncore.effect.Animate = {\n /**\n * A requestAnimationFrame wrapper / polyfill.\n *\n * @param callback {Function} The callback to be invoked before the next repaint.\n * @param root {HTMLElement} The root element for the repaint\n */\n requestAnimationFrame: requestAnimationFrame(global$1),\n /**\n * Stops the given animation.\n *\n * @param id {Integer} Unique animation ID\n * @return {Boolean} Whether the animation was stopped (aka, was running before)\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 /**\n * Whether the given animation is still running.\n *\n * @param id {Integer} Unique animation ID\n * @return {Boolean} Whether the animation is still running\n */\n isRunning: function isRunning(id) {\n return running[id] != null;\n },\n\n /**\n * Start the animation.\n *\n * @param stepCallback {Function} Pointer to function which is executed on every step.\n * Signature of the method should be `function(percent, now, virtual) { return continueWithAnimation; }`\n * @param verifyCallback {Function} Executed before every animation step.\n * Signature of the method should be `function() { return continueWithAnimation; }`\n * @param completedCallback {Function}\n * Signature of the method should be `function(droppedFrames, finishedAnimation) {}`\n * @param duration {Integer} Milliseconds to run the animation\n * @param easingMethod {Function} Pointer to easing function\n * Signature of the method should be `function(percent) { return modifiedValue; }`\n * @param root {Element ? document.body} Render root, when available. Used for internal\n * usage of requestAnimationFrame.\n * @return {Integer} Identifier of animation. Can be used to stop it any time.\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/*\n * Scroller\n * http://github.com/zynga/scroller\n *\n * modified by wangyi7099\n *\n * Copyright 2011, Zynga Inc.\n * Licensed under the MIT License.\n * https://raw.github.com/zynga/scroller/master/MIT-LICENSE.txt\n *\n * Based on the work of: Unify Project (unify-project.org)\n * http://unify-project.org\n * Copyright 2011, Deutsche Telekom AG\n * License: MIT + Apache (V2)\n */\nvar animatingMethod = null;\n\nvar noAnimatingMethod = null;\n\nfunction 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,\n provided that another scrolling action has not begun. Used to know\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\nvar members = {\n /*\n ---------------------------------------------------------------------------\n INTERNAL FIELDS :: STATUS\n ---------------------------------------------------------------------------\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 /**\n * {Boolean} Whether a gesture zoom/rotate event is in progress. Activates when\n * a gesturestart event happens. This has higher priority than dragging.\n */\n __isGesturing: false,\n\n /**\n * {Boolean} Whether the user has moved by such a distance that we have enabled\n * dragging mode. Hint: It's only enabled after some pixels of movement to\n * not interrupt with clicks etc.\n */\n __isDragging: false,\n\n /**\n * {Boolean} Not touching and dragging anymore, and smoothly animating the\n * touch sequence using deceleration.\n */\n __isDecelerating: false,\n\n /**\n * {Boolean} Smoothly animating the currently configured change\n */\n __isAnimating: false,\n\n /*\n ---------------------------------------------------------------------------\n INTERNAL FIELDS :: DIMENSIONS\n ---------------------------------------------------------------------------\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 /**\n * current page\n */\n __currentPageX: null,\n\n __currentPageY: null,\n\n /**\n * total page\n */\n __totalXPage: null,\n\n __totalYPage: null,\n /*\n ---------------------------------------------------------------------------\n INTERNAL FIELDS :: LAST POSITIONS\n ---------------------------------------------------------------------------\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 /*\n ---------------------------------------------------------------------------\n INTERNAL FIELDS :: DECELERATION SUPPORT\n ---------------------------------------------------------------------------\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 /*\n ---------------------------------------------------------------------------\n PUBLIC API\n ---------------------------------------------------------------------------\n */\n\n /**\n * Configures the dimensions of the client (outer) and content (inner) elements.\n * Requires the available space for the outer element and the outer size of the inner element.\n * All values which are falsy (null or zero etc.) are ignored and the old value is kept.\n *\n * @param clientWidth {Integer ? null} Inner width of outer element\n * @param clientHeight {Integer ? null} Inner height of outer element\n * @param contentWidth {Integer ? null} Outer width of inner element\n * @param contentHeight {Integer ? null} Outer height of inner element\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 /**\n * Sets the client coordinates in relation to the document.\n *\n * @param left {Integer ? 0} Left position of outer element\n * @param top {Integer ? 0} Top position of outer element\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 /**\n * Configures the snapping (when snapping is active)\n *\n * @param width {Integer} Snapping width\n * @param height {Integer} Snapping height\n */\n setSnapSize: function setSnapSize(width, height) {\n var self = this;\n\n self.__snapWidth = width;\n self.__snapHeight = height;\n },\n\n /**\n * Activates pull-to-refresh. A special zone on the top of the list to start a list refresh whenever\n * the user event is released during visibility of this zone. This was introduced by some apps on iOS like\n * the official Twitter client.\n *\n * @param height {Integer} Height of pull-to-refresh zone on top of rendered list\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.\n * @param deactivateCallback {Function} Callback to execute on deactivation. This is for signalling the user about the refresh being cancelled.\n * @param startCallback {Function} Callback to execute to start the real async refresh action. Call {@link #finishPullToRefresh} after finish of refresh.\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 /**\n * Starts pull-to-refresh manually.\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 /**\n * Signalizes that pull-to-refresh is finished.\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 /**\n * Returns the scroll position and zooming values\n *\n * @return {Map} `left` and `top` scroll position and `zoom` level\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 /**\n * Returns the maximum scroll values\n *\n * @return {Map} `left` and `top` maximum scroll values\n */\n getScrollMax: function getScrollMax() {\n var self = this;\n\n return {\n left: self.__maxScrollLeft,\n top: self.__maxScrollTop\n };\n },\n\n /**\n * Zooms to the given level. Supports optional animation. Zooms\n * the center when no coordinates are given.\n *\n * @param level {Number} Level to zoom to\n * @param animate {Boolean ? false} Whether to use animation\n * @param originLeft {Number ? null} Zoom in at given left coordinate\n * @param originTop {Number ? null} Zoom in at given top coordinate\n * @param callback {Function ? null} A callback that gets fired when the zoom is complete.\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 /**\n * Zooms the content by the given factor.\n *\n * @param factor {Number} Zoom by given factor\n * @param animate {Boolean ? false} Whether to use animation\n * @param originLeft {Number ? 0} Zoom in at given left coordinate\n * @param originTop {Number ? 0} Zoom in at given top coordinate\n * @param callback {Function ? null} A callback that gets fired when the zoom is complete.\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 /**\n * Scrolls to the given position. Respect limitations and snapping automatically.\n *\n * @param left {Number?null} Horizontal scroll position, keeps current if value is null
\n * @param top {Number?null} Vertical scroll position, keeps current if value is null
\n * @param animate {Boolean?false} Whether the scrolling should happen using an animation\n * @param zoom {Number?null} Zoom level to go to\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 /**\n * Scroll by the given offset\n *\n * @param left {Number ? 0} Scroll x-axis by given offset\n * @param top {Number ? 0} Scroll x-axis by given offset\n * @param animate {Boolean ? false} Whether to animate the given change\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 /*\n ---------------------------------------------------------------------------\n EVENT CALLBACKS\n ---------------------------------------------------------------------------\n */\n\n /**\n * Mouse wheel handler for zooming support\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 /**\n * Touch start handler for scrolling support\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 /**\n * Touch move handler for scrolling support\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 /**\n * Touch end handler for scrolling support\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 /*\n ---------------------------------------------------------------------------\n PRIVATE API\n ---------------------------------------------------------------------------\n */\n\n /**\n * Applies the scroll position to the content element\n *\n * @param left {Number} Left scroll position\n * @param top {Number} Top scroll position\n * @param animate {Boolean?false} Whether animation should be used to move to the new coordinates\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 /**\n * Recomputes scroll minimum values based on client dimensions and content dimensions.\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 /*\n ---------------------------------------------------------------------------\n ANIMATION (DECELERATION) SUPPORT\n ---------------------------------------------------------------------------\n */\n\n /**\n * Called when a touch sequence end and the speed of the finger was high enough\n * to switch into deceleration mode.\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 /**\n * Called on every step of the animation\n *\n * @param inMemory {Boolean?false} Whether to not render the current step, but keep it in memory only. Used internally only!\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\nfor (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) */\nfunction 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\nvar touch = new touchManager();\nfunction 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/**\n * These mixes is exclusive for slide mode\n */\n\ncreateSlideModeStyle();\n/**\n * @description refresh and load callback\n */\nfunction 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\nvar 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 /**\n * Trigger auto load\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/**\n * These mixes is exclusive for native mode\n */\n\nvar 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\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;\n deltaY = event.deltaY;\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\nvar update = [slideMix, nativeMix];\n\nvar mixins = [api$1].concat(toConsumableArray(update));\n\nvar 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/**\n * The slide mode config\n */\nvar 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/**\n * validate the options\n * @export\n * @param {any} ops\n */\nfunction 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\nvar config$1 = {\n vuescroll: {\n wheelScrollDuration: 0,\n wheelDirectionReverse: false,\n checkShiftKey: true\n }\n};\n\nvar config$2 = {\n // vuescroll\n vuescroll: {\n mode: 'native'\n }\n};\n/**\n * validate the options\n * @export\n * @param {any} ops\n */\nfunction 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\nvar configs = [config$2, config, config$1];\nvar configValidators = [configValidator$1, configValidator];\n\nvar component = _install(core$1, createPanel$2, configs, configValidators);\n\nfunction install(Vue$$1) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n Vue$$1.component(opts.name || component.name, component);\n Vue$$1.prototype.$vuescrollConfig = opts.ops || {};\n}\n\nvar Vuescroll = _extends({\n install: install,\n version: '4.17.4',\n refreshAll: refreshAll,\n scrollTo: scrollTo\n}, component);\n\n/* istanbul ignore if */\nif (typeof window !== 'undefined' && window.Vue) {\n window.Vue.use(Vuescroll);\n}\n\nreturn Vuescroll;\n\n})));\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"detail\"},[(_vm.$store.state.isVertical)?[_c('div',{staticClass:\"container\",style:({\n width: _vm.$store.state.vw,\n height: _vm.$store.state.vh,\n })},[_c('div',{staticClass:\"content\"},[_c('img',{attrs:{\"src\":_vm.picSrc,\"alt\":\"\"}})])])]:[_c('vuescroll',{ref:\"scroll\",staticClass:\"container\",attrs:{\"ops\":_vm.ops}},[_c('div',{staticClass:\"content\"},[_c('img',{attrs:{\"src\":_vm.picSrc,\"alt\":\"\"}})])])],_c('div',{staticClass:\"back\",on:{\"click\":_vm.backClickHandler}})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n
\n \n
\n
![\"\"]()
\n
\n
\n \n
\n \n \n
![\"\"]()
\n
\n \n \n\n
\n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Detail.vue?vue&type=template&id=1c946c0c&scoped=true&\"\nimport script from \"./Detail.vue?vue&type=script&lang=js&\"\nexport * from \"./Detail.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Detail.vue?vue&type=style&index=0&id=1c946c0c&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1c946c0c\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}