{"version":3,"sources":["webpack:///./node_modules/js-cookie/src/js.cookie.js","webpack:///./node_modules/iscroll/build/iscroll.js"],"names":["_typeof","Symbol","iterator","obj","constructor","prototype","factory","registeredInModuleLoader","exports","module","OldCookies","window","Cookies","api","noConflict","extend","i","result","arguments","length","attributes","key","decode","s","replace","decodeURIComponent","init","converter","set","value","document","path","defaults","expires","Date","toUTCString","JSON","stringify","test","e","write","encodeURIComponent","String","escape","stringifiedAttributes","attributeName","split","cookie","get","json","jar","cookies","parts","slice","join","charAt","name","read","parse","getJSON","remove","withConverter","Math","rAF","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","callback","setTimeout","utils","me","_elementStyle","createElement","style","_vendor","vendors","l","substr","_prefixStyle","toUpperCase","getTime","now","target","addEvent","el","type","fn","capture","addEventListener","removeEvent","removeEventListener","prefixPointerEvent","pointerEvent","MSPointerEvent","momentum","current","start","time","lowerMargin","wrapperSize","deceleration","destination","duration","distance","speed","abs","undefined","round","_transform","hasTransform","hasPerspective","hasTouch","hasPointer","PointerEvent","hasTransition","isBadAndroid","appVersion","navigator","safariVersion","match","parseFloat","transform","transitionTimingFunction","transitionDuration","transitionDelay","transformOrigin","hasClass","c","RegExp","className","addClass","newclass","push","removeClass","re","offset","left","offsetLeft","top","offsetTop","offsetParent","preventDefaultException","exceptions","eventType","touchstart","touchmove","touchend","mousedown","mousemove","mouseup","pointerdown","pointermove","pointerup","MSPointerDown","MSPointerMove","MSPointerUp","ease","quadratic","k","circular","sqrt","back","bounce","elastic","pow","sin","f","PI","tap","eventName","ev","createEvent","initEvent","pageX","pageY","dispatchEvent","click","tagName","initMouseEvent","view","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","_constructed","IScroll","options","this","wrapper","querySelector","scroller","children","scrollerStyle","resizeScrollbars","mouseWheelSpeed","snapThreshold","disablePointer","disableTouch","disableMouse","startX","startY","scrollY","directionLockThreshold","bounceTime","bounceEasing","preventDefault","HWCompositing","useTransition","useTransform","bindToWrapper","onmousedown","translateZ","eventPassthrough","scrollX","freeScroll","resizePolling","shrinkScrollbars","invertWheelDirection","x","y","directionX","directionY","_events","_init","refresh","scrollTo","enable","createDefaultScrollbar","direction","interactive","scrollbar","indicator","cssText","height","width","pointerEvents","appendChild","Indicator","wrapperStyle","indicatorStyle","listenX","listenY","resize","defaultScrollbars","shrink","fade","speedRatioX","speedRatioY","sizeRatioX","sizeRatioY","maxPosX","maxPosY","durationProp","self","opacity","version","_initEvents","scrollbars","indicators","_initIndicators","mouseWheel","_initWheel","snap","_initSnap","keyBindings","_initKeys","destroy","clearTimeout","resizeTimeout","_execEvent","_transitionEnd","isInTransition","_transitionTime","resetPosition","_start","which","button","enabled","initiated","pos","point","touches","moved","distX","distY","directionLocked","startTime","getComputedPosition","_translate","isAnimating","absStartX","absStartY","pointX","pointY","_move","newX","newY","absDistX","absDistY","deltaX","deltaY","timestamp","endTime","hasHorizontalScroll","hasVerticalScroll","maxScrollX","maxScrollY","_end","changedTouches","momentumX","momentumY","distanceX","distanceY","easing","flick","wrapperWidth","wrapperHeight","max","_nearestSnap","currentPage","snapSpeed","min","_resize","that","disable","offsetHeight","clientWidth","clientHeight","scrollerWidth","offsetWidth","scrollerHeight","wrapperOffset","on","off","index","indexOf","splice","apply","call","scrollBy","transitionType","_transitionTimingFunction","_animate","scrollToElement","offsetX","offsetY","nodeType","transitionTime","updatePosition","matrix","getComputedStyle","interactiveScrollbars","customStyle","fadeScrollbars","concat","_indicatorsMap","wheelTimeout","_wheel","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","detail","goToPage","querySelectorAll","n","cx","cy","m","stepX","snapStepX","stepY","snapStepY","pages","snapThresholdX","snapThresholdY","posX","posY","next","prev","keys","pageUp","pageDown","end","home","up","right","down","charCodeAt","_key","prevTime","keyTime","keyAcceleration","keyCode","destX","destY","easingFn","destTime","step","handleEvent","stopPropagation","fadeTimeout","parentNode","removeChild","lastPointX","lastPointY","_pos","display","bottom","indicatorWidth","minBoundaryX","maxBoundaryX","indicatorHeight","minBoundaryY","maxBoundaryY","ignoreBoundaries","val","hold","visible","delay","bind"],"mappings":"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","file":"js/application~7d359b94-efdf34405754b1fd63e2.chunk.js","sourcesContent":["function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;\n\n(function (factory) {\n var registeredInModuleLoader;\n\n if (typeof define === 'function' && define.amd) {\n define(factory);\n registeredInModuleLoader = true;\n }\n\n if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object') {\n module.exports = factory();\n registeredInModuleLoader = true;\n }\n\n if (!registeredInModuleLoader) {\n var OldCookies = window.Cookies;\n var api = window.Cookies = factory();\n\n api.noConflict = function () {\n window.Cookies = OldCookies;\n return api;\n };\n }\n})(function () {\n function extend() {\n var i = 0;\n var result = {};\n\n for (; i < arguments.length; i++) {\n var attributes = arguments[i];\n\n for (var key in attributes) {\n result[key] = attributes[key];\n }\n }\n\n return result;\n }\n\n function decode(s) {\n return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n }\n\n function init(converter) {\n function api() {}\n\n function set(key, value, attributes) {\n if (typeof document === 'undefined') {\n return;\n }\n\n attributes = extend({\n path: '/'\n }, api.defaults, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n } // We're using \"expires\" because \"max-age\" is not supported by IE\n\n\n attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n try {\n var result = JSON.stringify(value);\n\n if (/^[\\{\\[]/.test(result)) {\n value = result;\n }\n } catch (e) {}\n\n value = converter.write ? converter.write(value, key) : encodeURIComponent(String(value)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n key = encodeURIComponent(String(key)).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent).replace(/[\\(\\)]/g, escape);\n var stringifiedAttributes = '';\n\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue;\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue;\n } // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n\n\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return document.cookie = key + '=' + value + stringifiedAttributes;\n }\n\n function get(key, json) {\n if (typeof document === 'undefined') {\n return;\n }\n\n var jar = {}; // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var i = 0;\n\n for (; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var cookie = parts.slice(1).join('=');\n\n if (!json && cookie.charAt(0) === '\"') {\n cookie = cookie.slice(1, -1);\n }\n\n try {\n var name = decode(parts[0]);\n cookie = (converter.read || converter)(cookie, name) || decode(cookie);\n\n if (json) {\n try {\n cookie = JSON.parse(cookie);\n } catch (e) {}\n }\n\n jar[name] = cookie;\n\n if (key === name) {\n break;\n }\n } catch (e) {}\n }\n\n return key ? jar[key] : jar;\n }\n\n api.set = set;\n\n api.get = function (key) {\n return get(key, false\n /* read as raw */\n );\n };\n\n api.getJSON = function (key) {\n return get(key, true\n /* read as json */\n );\n };\n\n api.remove = function (key, attributes) {\n set(key, '', extend(attributes, {\n expires: -1\n }));\n };\n\n api.defaults = {};\n api.withConverter = init;\n return api;\n }\n\n return init(function () {});\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/*! iScroll v5.2.0 ~ (c) 2008-2016 Matteo Spinelli ~ http://cubiq.org/license */\n(function (window, document, Math) {\n var rAF = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n\n var utils = function () {\n var me = {};\n var _elementStyle = document.createElement('div').style;\n\n var _vendor = function () {\n var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'],\n transform,\n i = 0,\n l = vendors.length;\n\n for (; i < l; i++) {\n transform = vendors[i] + 'ransform';\n if (transform in _elementStyle) return vendors[i].substr(0, vendors[i].length - 1);\n }\n\n return false;\n }();\n\n function _prefixStyle(style) {\n if (_vendor === false) return false;\n if (_vendor === '') return style;\n return _vendor + style.charAt(0).toUpperCase() + style.substr(1);\n }\n\n me.getTime = Date.now || function getTime() {\n return new Date().getTime();\n };\n\n me.extend = function (target, obj) {\n for (var i in obj) {\n target[i] = obj[i];\n }\n };\n\n me.addEvent = function (el, type, fn, capture) {\n el.addEventListener(type, fn, !!capture);\n };\n\n me.removeEvent = function (el, type, fn, capture) {\n el.removeEventListener(type, fn, !!capture);\n };\n\n me.prefixPointerEvent = function (pointerEvent) {\n return window.MSPointerEvent ? 'MSPointer' + pointerEvent.charAt(7).toUpperCase() + pointerEvent.substr(8) : pointerEvent;\n };\n\n me.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) {\n var distance = current - start,\n speed = Math.abs(distance) / time,\n destination,\n duration;\n deceleration = deceleration === undefined ? 0.0006 : deceleration;\n destination = current + speed * speed / (2 * deceleration) * (distance < 0 ? -1 : 1);\n duration = speed / deceleration;\n\n if (destination < lowerMargin) {\n destination = wrapperSize ? lowerMargin - wrapperSize / 2.5 * (speed / 8) : lowerMargin;\n distance = Math.abs(destination - current);\n duration = distance / speed;\n } else if (destination > 0) {\n destination = wrapperSize ? wrapperSize / 2.5 * (speed / 8) : 0;\n distance = Math.abs(current) + destination;\n duration = distance / speed;\n }\n\n return {\n destination: Math.round(destination),\n duration: duration\n };\n };\n\n var _transform = _prefixStyle('transform');\n\n me.extend(me, {\n hasTransform: _transform !== false,\n hasPerspective: _prefixStyle('perspective') in _elementStyle,\n hasTouch: 'ontouchstart' in window,\n hasPointer: !!(window.PointerEvent || window.MSPointerEvent),\n // IE10 is prefixed\n hasTransition: _prefixStyle('transition') in _elementStyle\n });\n /*\n This should find all Android browsers lower than build 535.19 (both stock browser and webview)\n - galaxy S2 is ok\n - 2.3.6 : `AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1`\n - 4.0.4 : `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n - galaxy S3 is badAndroid (stock brower, webview)\n `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n - galaxy S4 is badAndroid (stock brower, webview)\n `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n - galaxy S5 is OK\n `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`\n - galaxy S6 is OK\n `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`\n */\n\n me.isBadAndroid = function () {\n var appVersion = window.navigator.appVersion; // Android browser is not a chrome browser.\n\n if (/Android/.test(appVersion) && !/Chrome\\/\\d/.test(appVersion)) {\n var safariVersion = appVersion.match(/Safari\\/(\\d+.\\d)/);\n\n if (safariVersion && _typeof(safariVersion) === \"object\" && safariVersion.length >= 2) {\n return parseFloat(safariVersion[1]) < 535.19;\n } else {\n return true;\n }\n } else {\n return false;\n }\n }();\n\n me.extend(me.style = {}, {\n transform: _transform,\n transitionTimingFunction: _prefixStyle('transitionTimingFunction'),\n transitionDuration: _prefixStyle('transitionDuration'),\n transitionDelay: _prefixStyle('transitionDelay'),\n transformOrigin: _prefixStyle('transformOrigin')\n });\n\n me.hasClass = function (e, c) {\n var re = new RegExp(\"(^|\\\\s)\" + c + \"(\\\\s|$)\");\n return re.test(e.className);\n };\n\n me.addClass = function (e, c) {\n if (me.hasClass(e, c)) {\n return;\n }\n\n var newclass = e.className.split(' ');\n newclass.push(c);\n e.className = newclass.join(' ');\n };\n\n me.removeClass = function (e, c) {\n if (!me.hasClass(e, c)) {\n return;\n }\n\n var re = new RegExp(\"(^|\\\\s)\" + c + \"(\\\\s|$)\", 'g');\n e.className = e.className.replace(re, ' ');\n };\n\n me.offset = function (el) {\n var left = -el.offsetLeft,\n top = -el.offsetTop; // jshint -W084\n\n while (el = el.offsetParent) {\n left -= el.offsetLeft;\n top -= el.offsetTop;\n } // jshint +W084\n\n\n return {\n left: left,\n top: top\n };\n };\n\n me.preventDefaultException = function (el, exceptions) {\n for (var i in exceptions) {\n if (exceptions[i].test(el[i])) {\n return true;\n }\n }\n\n return false;\n };\n\n me.extend(me.eventType = {}, {\n touchstart: 1,\n touchmove: 1,\n touchend: 1,\n mousedown: 2,\n mousemove: 2,\n mouseup: 2,\n pointerdown: 3,\n pointermove: 3,\n pointerup: 3,\n MSPointerDown: 3,\n MSPointerMove: 3,\n MSPointerUp: 3\n });\n me.extend(me.ease = {}, {\n quadratic: {\n style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n fn: function fn(k) {\n return k * (2 - k);\n }\n },\n circular: {\n style: 'cubic-bezier(0.1, 0.57, 0.1, 1)',\n // Not properly \"circular\" but this looks better, it should be (0.075, 0.82, 0.165, 1)\n fn: function fn(k) {\n return Math.sqrt(1 - --k * k);\n }\n },\n back: {\n style: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n fn: function fn(k) {\n var b = 4;\n return (k = k - 1) * k * ((b + 1) * k + b) + 1;\n }\n },\n bounce: {\n style: '',\n fn: function fn(k) {\n if ((k /= 1) < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n return 7.5625 * (k -= 1.5 / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n return 7.5625 * (k -= 2.25 / 2.75) * k + 0.9375;\n } else {\n return 7.5625 * (k -= 2.625 / 2.75) * k + 0.984375;\n }\n }\n },\n elastic: {\n style: '',\n fn: function fn(k) {\n var f = 0.22,\n e = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k == 1) {\n return 1;\n }\n\n return e * Math.pow(2, -10 * k) * Math.sin((k - f / 4) * (2 * Math.PI) / f) + 1;\n }\n }\n });\n\n me.tap = function (e, eventName) {\n var ev = document.createEvent('Event');\n ev.initEvent(eventName, true, true);\n ev.pageX = e.pageX;\n ev.pageY = e.pageY;\n e.target.dispatchEvent(ev);\n };\n\n me.click = function (e) {\n var target = e.target,\n ev;\n\n if (!/(SELECT|INPUT|TEXTAREA)/i.test(target.tagName)) {\n ev = document.createEvent('MouseEvents');\n ev.initMouseEvent('click', true, true, e.view, 1, target.screenX, target.screenY, target.clientX, target.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, 0, null);\n ev._constructed = true;\n target.dispatchEvent(ev);\n }\n };\n\n return me;\n }();\n\n function IScroll(el, options) {\n this.wrapper = typeof el == 'string' ? document.querySelector(el) : el;\n this.scroller = this.wrapper.children[0];\n this.scrollerStyle = this.scroller.style; // cache style for better performance\n\n this.options = {\n resizeScrollbars: true,\n mouseWheelSpeed: 20,\n snapThreshold: 0.334,\n // INSERT POINT: OPTIONS\n disablePointer: !utils.hasPointer,\n disableTouch: utils.hasPointer || !utils.hasTouch,\n disableMouse: utils.hasPointer || utils.hasTouch,\n startX: 0,\n startY: 0,\n scrollY: true,\n directionLockThreshold: 5,\n momentum: true,\n bounce: true,\n bounceTime: 600,\n bounceEasing: '',\n preventDefault: true,\n preventDefaultException: {\n tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/\n },\n HWCompositing: true,\n useTransition: true,\n useTransform: true,\n bindToWrapper: typeof window.onmousedown === \"undefined\"\n };\n\n for (var i in options) {\n this.options[i] = options[i];\n } // Normalize options\n\n\n this.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : '';\n this.options.useTransition = utils.hasTransition && this.options.useTransition;\n this.options.useTransform = utils.hasTransform && this.options.useTransform;\n this.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough;\n this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault; // If you want eventPassthrough I have to lock one of the axes\n\n this.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY;\n this.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX; // With eventPassthrough we also need lockDirection mechanism\n\n this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;\n this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;\n this.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing;\n this.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling;\n\n if (this.options.tap === true) {\n this.options.tap = 'tap';\n }\n\n if (this.options.shrinkScrollbars == 'scale') {\n this.options.useTransition = false;\n }\n\n this.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1; // INSERT POINT: NORMALIZATION\n // Some defaults\n\n this.x = 0;\n this.y = 0;\n this.directionX = 0;\n this.directionY = 0;\n this._events = {}; // INSERT POINT: DEFAULTS\n\n this._init();\n\n this.refresh();\n this.scrollTo(this.options.startX, this.options.startY);\n this.enable();\n }\n\n IScroll.prototype = {\n version: '5.2.0',\n _init: function _init() {\n this._initEvents();\n\n if (this.options.scrollbars || this.options.indicators) {\n this._initIndicators();\n }\n\n if (this.options.mouseWheel) {\n this._initWheel();\n }\n\n if (this.options.snap) {\n this._initSnap();\n }\n\n if (this.options.keyBindings) {\n this._initKeys();\n } // INSERT POINT: _init\n\n },\n destroy: function destroy() {\n this._initEvents(true);\n\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = null;\n\n this._execEvent('destroy');\n },\n _transitionEnd: function _transitionEnd(e) {\n if (e.target != this.scroller || !this.isInTransition) {\n return;\n }\n\n this._transitionTime();\n\n if (!this.resetPosition(this.options.bounceTime)) {\n this.isInTransition = false;\n\n this._execEvent('scrollEnd');\n }\n },\n _start: function _start(e) {\n // React to left mouse button only\n if (utils.eventType[e.type] != 1) {\n // for button property\n // http://unixpapa.com/js/mouse.html\n var button;\n\n if (!e.which) {\n /* IE case */\n button = e.button < 2 ? 0 : e.button == 4 ? 1 : 2;\n } else {\n /* All others */\n button = e.button;\n }\n\n if (button !== 0) {\n return;\n }\n }\n\n if (!this.enabled || this.initiated && utils.eventType[e.type] !== this.initiated) {\n return;\n }\n\n if (this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException)) {\n e.preventDefault();\n }\n\n var point = e.touches ? e.touches[0] : e,\n pos;\n this.initiated = utils.eventType[e.type];\n this.moved = false;\n this.distX = 0;\n this.distY = 0;\n this.directionX = 0;\n this.directionY = 0;\n this.directionLocked = 0;\n this.startTime = utils.getTime();\n\n if (this.options.useTransition && this.isInTransition) {\n this._transitionTime();\n\n this.isInTransition = false;\n pos = this.getComputedPosition();\n\n this._translate(Math.round(pos.x), Math.round(pos.y));\n\n this._execEvent('scrollEnd');\n } else if (!this.options.useTransition && this.isAnimating) {\n this.isAnimating = false;\n\n this._execEvent('scrollEnd');\n }\n\n this.startX = this.x;\n this.startY = this.y;\n this.absStartX = this.x;\n this.absStartY = this.y;\n this.pointX = point.pageX;\n this.pointY = point.pageY;\n\n this._execEvent('beforeScrollStart');\n },\n _move: function _move(e) {\n if (!this.enabled || utils.eventType[e.type] !== this.initiated) {\n return;\n }\n\n if (this.options.preventDefault) {\n // increases performance on Android? TODO: check!\n e.preventDefault();\n }\n\n var point = e.touches ? e.touches[0] : e,\n deltaX = point.pageX - this.pointX,\n deltaY = point.pageY - this.pointY,\n timestamp = utils.getTime(),\n newX,\n newY,\n absDistX,\n absDistY;\n this.pointX = point.pageX;\n this.pointY = point.pageY;\n this.distX += deltaX;\n this.distY += deltaY;\n absDistX = Math.abs(this.distX);\n absDistY = Math.abs(this.distY); // We need to move at least 10 pixels for the scrolling to initiate\n\n if (timestamp - this.endTime > 300 && absDistX < 10 && absDistY < 10) {\n return;\n } // If you are scrolling in one direction lock the other\n\n\n if (!this.directionLocked && !this.options.freeScroll) {\n if (absDistX > absDistY + this.options.directionLockThreshold) {\n this.directionLocked = 'h'; // lock horizontally\n } else if (absDistY >= absDistX + this.options.directionLockThreshold) {\n this.directionLocked = 'v'; // lock vertically\n } else {\n this.directionLocked = 'n'; // no lock\n }\n }\n\n if (this.directionLocked == 'h') {\n if (this.options.eventPassthrough == 'vertical') {\n e.preventDefault();\n } else if (this.options.eventPassthrough == 'horizontal') {\n this.initiated = false;\n return;\n }\n\n deltaY = 0;\n } else if (this.directionLocked == 'v') {\n if (this.options.eventPassthrough == 'horizontal') {\n e.preventDefault();\n } else if (this.options.eventPassthrough == 'vertical') {\n this.initiated = false;\n return;\n }\n\n deltaX = 0;\n }\n\n deltaX = this.hasHorizontalScroll ? deltaX : 0;\n deltaY = this.hasVerticalScroll ? deltaY : 0;\n newX = this.x + deltaX;\n newY = this.y + deltaY; // Slow down if outside of the boundaries\n\n if (newX > 0 || newX < this.maxScrollX) {\n newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX;\n }\n\n if (newY > 0 || newY < this.maxScrollY) {\n newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY;\n }\n\n this.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;\n this.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;\n\n if (!this.moved) {\n this._execEvent('scrollStart');\n }\n\n this.moved = true;\n\n this._translate(newX, newY);\n /* REPLACE START: _move */\n\n\n if (timestamp - this.startTime > 300) {\n this.startTime = timestamp;\n this.startX = this.x;\n this.startY = this.y;\n }\n /* REPLACE END: _move */\n\n },\n _end: function _end(e) {\n if (!this.enabled || utils.eventType[e.type] !== this.initiated) {\n return;\n }\n\n if (this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException)) {\n e.preventDefault();\n }\n\n var point = e.changedTouches ? e.changedTouches[0] : e,\n momentumX,\n momentumY,\n duration = utils.getTime() - this.startTime,\n newX = Math.round(this.x),\n newY = Math.round(this.y),\n distanceX = Math.abs(newX - this.startX),\n distanceY = Math.abs(newY - this.startY),\n time = 0,\n easing = '';\n this.isInTransition = 0;\n this.initiated = 0;\n this.endTime = utils.getTime(); // reset if we are outside of the boundaries\n\n if (this.resetPosition(this.options.bounceTime)) {\n return;\n }\n\n this.scrollTo(newX, newY); // ensures that the last position is rounded\n // we scrolled less than 10 pixels\n\n if (!this.moved) {\n if (this.options.tap) {\n utils.tap(e, this.options.tap);\n }\n\n if (this.options.click) {\n utils.click(e);\n }\n\n this._execEvent('scrollCancel');\n\n return;\n }\n\n if (this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100) {\n this._execEvent('flick');\n\n return;\n } // start momentum animation if needed\n\n\n if (this.options.momentum && duration < 300) {\n momentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : {\n destination: newX,\n duration: 0\n };\n momentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : {\n destination: newY,\n duration: 0\n };\n newX = momentumX.destination;\n newY = momentumY.destination;\n time = Math.max(momentumX.duration, momentumY.duration);\n this.isInTransition = 1;\n }\n\n if (this.options.snap) {\n var snap = this._nearestSnap(newX, newY);\n\n this.currentPage = snap;\n time = this.options.snapSpeed || Math.max(Math.max(Math.min(Math.abs(newX - snap.x), 1000), Math.min(Math.abs(newY - snap.y), 1000)), 300);\n newX = snap.x;\n newY = snap.y;\n this.directionX = 0;\n this.directionY = 0;\n easing = this.options.bounceEasing;\n } // INSERT POINT: _end\n\n\n if (newX != this.x || newY != this.y) {\n // change easing function when scroller goes out of the boundaries\n if (newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY) {\n easing = utils.ease.quadratic;\n }\n\n this.scrollTo(newX, newY, time, easing);\n return;\n }\n\n this._execEvent('scrollEnd');\n },\n _resize: function _resize() {\n var that = this;\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(function () {\n that.refresh();\n }, this.options.resizePolling);\n },\n resetPosition: function resetPosition(time) {\n var x = this.x,\n y = this.y;\n time = time || 0;\n\n if (!this.hasHorizontalScroll || this.x > 0) {\n x = 0;\n } else if (this.x < this.maxScrollX) {\n x = this.maxScrollX;\n }\n\n if (!this.hasVerticalScroll || this.y > 0) {\n y = 0;\n } else if (this.y < this.maxScrollY) {\n y = this.maxScrollY;\n }\n\n if (x == this.x && y == this.y) {\n return false;\n }\n\n this.scrollTo(x, y, time, this.options.bounceEasing);\n return true;\n },\n disable: function disable() {\n this.enabled = false;\n },\n enable: function enable() {\n this.enabled = true;\n },\n refresh: function refresh() {\n var rf = this.wrapper.offsetHeight; // Force reflow\n\n this.wrapperWidth = this.wrapper.clientWidth;\n this.wrapperHeight = this.wrapper.clientHeight;\n /* REPLACE START: refresh */\n\n this.scrollerWidth = this.scroller.offsetWidth;\n this.scrollerHeight = this.scroller.offsetHeight;\n this.maxScrollX = this.wrapperWidth - this.scrollerWidth;\n this.maxScrollY = this.wrapperHeight - this.scrollerHeight;\n /* REPLACE END: refresh */\n\n this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;\n this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;\n\n if (!this.hasHorizontalScroll) {\n this.maxScrollX = 0;\n this.scrollerWidth = this.wrapperWidth;\n }\n\n if (!this.hasVerticalScroll) {\n this.maxScrollY = 0;\n this.scrollerHeight = this.wrapperHeight;\n }\n\n this.endTime = 0;\n this.directionX = 0;\n this.directionY = 0;\n this.wrapperOffset = utils.offset(this.wrapper);\n\n this._execEvent('refresh');\n\n this.resetPosition(); // INSERT POINT: _refresh\n },\n on: function on(type, fn) {\n if (!this._events[type]) {\n this._events[type] = [];\n }\n\n this._events[type].push(fn);\n },\n off: function off(type, fn) {\n if (!this._events[type]) {\n return;\n }\n\n var index = this._events[type].indexOf(fn);\n\n if (index > -1) {\n this._events[type].splice(index, 1);\n }\n },\n _execEvent: function _execEvent(type) {\n if (!this._events[type]) {\n return;\n }\n\n var i = 0,\n l = this._events[type].length;\n\n if (!l) {\n return;\n }\n\n for (; i < l; i++) {\n this._events[type][i].apply(this, [].slice.call(arguments, 1));\n }\n },\n scrollBy: function scrollBy(x, y, time, easing) {\n x = this.x + x;\n y = this.y + y;\n time = time || 0;\n this.scrollTo(x, y, time, easing);\n },\n scrollTo: function scrollTo(x, y, time, easing) {\n easing = easing || utils.ease.circular;\n this.isInTransition = this.options.useTransition && time > 0;\n var transitionType = this.options.useTransition && easing.style;\n\n if (!time || transitionType) {\n if (transitionType) {\n this._transitionTimingFunction(easing.style);\n\n this._transitionTime(time);\n }\n\n this._translate(x, y);\n } else {\n this._animate(x, y, time, easing.fn);\n }\n },\n scrollToElement: function scrollToElement(el, time, offsetX, offsetY, easing) {\n el = el.nodeType ? el : this.scroller.querySelector(el);\n\n if (!el) {\n return;\n }\n\n var pos = utils.offset(el);\n pos.left -= this.wrapperOffset.left;\n pos.top -= this.wrapperOffset.top; // if offsetX/Y are true we center the element to the screen\n\n if (offsetX === true) {\n offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);\n }\n\n if (offsetY === true) {\n offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);\n }\n\n pos.left -= offsetX || 0;\n pos.top -= offsetY || 0;\n pos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;\n pos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;\n time = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x - pos.left), Math.abs(this.y - pos.top)) : time;\n this.scrollTo(pos.left, pos.top, time, easing);\n },\n _transitionTime: function _transitionTime(time) {\n time = time || 0;\n var durationProp = utils.style.transitionDuration;\n this.scrollerStyle[durationProp] = time + 'ms';\n\n if (!time && utils.isBadAndroid) {\n this.scrollerStyle[durationProp] = '0.0001ms'; // remove 0.0001ms\n\n var self = this;\n rAF(function () {\n if (self.scrollerStyle[durationProp] === '0.0001ms') {\n self.scrollerStyle[durationProp] = '0s';\n }\n });\n }\n\n if (this.indicators) {\n for (var i = this.indicators.length; i--;) {\n this.indicators[i].transitionTime(time);\n }\n } // INSERT POINT: _transitionTime\n\n },\n _transitionTimingFunction: function _transitionTimingFunction(easing) {\n this.scrollerStyle[utils.style.transitionTimingFunction] = easing;\n\n if (this.indicators) {\n for (var i = this.indicators.length; i--;) {\n this.indicators[i].transitionTimingFunction(easing);\n }\n } // INSERT POINT: _transitionTimingFunction\n\n },\n _translate: function _translate(x, y) {\n if (this.options.useTransform) {\n /* REPLACE START: _translate */\n this.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.translateZ;\n /* REPLACE END: _translate */\n } else {\n x = Math.round(x);\n y = Math.round(y);\n this.scrollerStyle.left = x + 'px';\n this.scrollerStyle.top = y + 'px';\n }\n\n this.x = x;\n this.y = y;\n\n if (this.indicators) {\n for (var i = this.indicators.length; i--;) {\n this.indicators[i].updatePosition();\n }\n } // INSERT POINT: _translate\n\n },\n _initEvents: function _initEvents(remove) {\n var eventType = remove ? utils.removeEvent : utils.addEvent,\n target = this.options.bindToWrapper ? this.wrapper : window;\n eventType(window, 'orientationchange', this);\n eventType(window, 'resize', this);\n\n if (this.options.click) {\n eventType(this.wrapper, 'click', this, true);\n }\n\n if (!this.options.disableMouse) {\n eventType(this.wrapper, 'mousedown', this);\n eventType(target, 'mousemove', this);\n eventType(target, 'mousecancel', this);\n eventType(target, 'mouseup', this);\n }\n\n if (utils.hasPointer && !this.options.disablePointer) {\n eventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this);\n eventType(target, utils.prefixPointerEvent('pointermove'), this);\n eventType(target, utils.prefixPointerEvent('pointercancel'), this);\n eventType(target, utils.prefixPointerEvent('pointerup'), this);\n }\n\n if (utils.hasTouch && !this.options.disableTouch) {\n eventType(this.wrapper, 'touchstart', this);\n eventType(target, 'touchmove', this);\n eventType(target, 'touchcancel', this);\n eventType(target, 'touchend', this);\n }\n\n eventType(this.scroller, 'transitionend', this);\n eventType(this.scroller, 'webkitTransitionEnd', this);\n eventType(this.scroller, 'oTransitionEnd', this);\n eventType(this.scroller, 'MSTransitionEnd', this);\n },\n getComputedPosition: function getComputedPosition() {\n var matrix = window.getComputedStyle(this.scroller, null),\n x,\n y;\n\n if (this.options.useTransform) {\n matrix = matrix[utils.style.transform].split(')')[0].split(', ');\n x = +(matrix[12] || matrix[4]);\n y = +(matrix[13] || matrix[5]);\n } else {\n x = +matrix.left.replace(/[^-\\d.]/g, '');\n y = +matrix.top.replace(/[^-\\d.]/g, '');\n }\n\n return {\n x: x,\n y: y\n };\n },\n _initIndicators: function _initIndicators() {\n var interactive = this.options.interactiveScrollbars,\n customStyle = typeof this.options.scrollbars != 'string',\n indicators = [],\n indicator;\n var that = this;\n this.indicators = [];\n\n if (this.options.scrollbars) {\n // Vertical scrollbar\n if (this.options.scrollY) {\n indicator = {\n el: createDefaultScrollbar('v', interactive, this.options.scrollbars),\n interactive: interactive,\n defaultScrollbars: true,\n customStyle: customStyle,\n resize: this.options.resizeScrollbars,\n shrink: this.options.shrinkScrollbars,\n fade: this.options.fadeScrollbars,\n listenX: false\n };\n this.wrapper.appendChild(indicator.el);\n indicators.push(indicator);\n } // Horizontal scrollbar\n\n\n if (this.options.scrollX) {\n indicator = {\n el: createDefaultScrollbar('h', interactive, this.options.scrollbars),\n interactive: interactive,\n defaultScrollbars: true,\n customStyle: customStyle,\n resize: this.options.resizeScrollbars,\n shrink: this.options.shrinkScrollbars,\n fade: this.options.fadeScrollbars,\n listenY: false\n };\n this.wrapper.appendChild(indicator.el);\n indicators.push(indicator);\n }\n }\n\n if (this.options.indicators) {\n // TODO: check concat compatibility\n indicators = indicators.concat(this.options.indicators);\n }\n\n for (var i = indicators.length; i--;) {\n this.indicators.push(new Indicator(this, indicators[i]));\n } // TODO: check if we can use array.map (wide compatibility and performance issues)\n\n\n function _indicatorsMap(fn) {\n if (that.indicators) {\n for (var i = that.indicators.length; i--;) {\n fn.call(that.indicators[i]);\n }\n }\n }\n\n if (this.options.fadeScrollbars) {\n this.on('scrollEnd', function () {\n _indicatorsMap(function () {\n this.fade();\n });\n });\n this.on('scrollCancel', function () {\n _indicatorsMap(function () {\n this.fade();\n });\n });\n this.on('scrollStart', function () {\n _indicatorsMap(function () {\n this.fade(1);\n });\n });\n this.on('beforeScrollStart', function () {\n _indicatorsMap(function () {\n this.fade(1, true);\n });\n });\n }\n\n this.on('refresh', function () {\n _indicatorsMap(function () {\n this.refresh();\n });\n });\n this.on('destroy', function () {\n _indicatorsMap(function () {\n this.destroy();\n });\n\n delete this.indicators;\n });\n },\n _initWheel: function _initWheel() {\n utils.addEvent(this.wrapper, 'wheel', this);\n utils.addEvent(this.wrapper, 'mousewheel', this);\n utils.addEvent(this.wrapper, 'DOMMouseScroll', this);\n this.on('destroy', function () {\n clearTimeout(this.wheelTimeout);\n this.wheelTimeout = null;\n utils.removeEvent(this.wrapper, 'wheel', this);\n utils.removeEvent(this.wrapper, 'mousewheel', this);\n utils.removeEvent(this.wrapper, 'DOMMouseScroll', this);\n });\n },\n _wheel: function _wheel(e) {\n if (!this.enabled) {\n return;\n }\n\n e.preventDefault();\n var wheelDeltaX,\n wheelDeltaY,\n newX,\n newY,\n that = this;\n\n if (this.wheelTimeout === undefined) {\n that._execEvent('scrollStart');\n } // Execute the scrollEnd event after 400ms the wheel stopped scrolling\n\n\n clearTimeout(this.wheelTimeout);\n this.wheelTimeout = setTimeout(function () {\n if (!that.options.snap) {\n that._execEvent('scrollEnd');\n }\n\n that.wheelTimeout = undefined;\n }, 400);\n\n if ('deltaX' in e) {\n if (e.deltaMode === 1) {\n wheelDeltaX = -e.deltaX * this.options.mouseWheelSpeed;\n wheelDeltaY = -e.deltaY * this.options.mouseWheelSpeed;\n } else {\n wheelDeltaX = -e.deltaX;\n wheelDeltaY = -e.deltaY;\n }\n } else if ('wheelDeltaX' in e) {\n wheelDeltaX = e.wheelDeltaX / 120 * this.options.mouseWheelSpeed;\n wheelDeltaY = e.wheelDeltaY / 120 * this.options.mouseWheelSpeed;\n } else if ('wheelDelta' in e) {\n wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * this.options.mouseWheelSpeed;\n } else if ('detail' in e) {\n wheelDeltaX = wheelDeltaY = -e.detail / 3 * this.options.mouseWheelSpeed;\n } else {\n return;\n }\n\n wheelDeltaX *= this.options.invertWheelDirection;\n wheelDeltaY *= this.options.invertWheelDirection;\n\n if (!this.hasVerticalScroll) {\n wheelDeltaX = wheelDeltaY;\n wheelDeltaY = 0;\n }\n\n if (this.options.snap) {\n newX = this.currentPage.pageX;\n newY = this.currentPage.pageY;\n\n if (wheelDeltaX > 0) {\n newX--;\n } else if (wheelDeltaX < 0) {\n newX++;\n }\n\n if (wheelDeltaY > 0) {\n newY--;\n } else if (wheelDeltaY < 0) {\n newY++;\n }\n\n this.goToPage(newX, newY);\n return;\n }\n\n newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);\n newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);\n this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;\n this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;\n\n if (newX > 0) {\n newX = 0;\n } else if (newX < this.maxScrollX) {\n newX = this.maxScrollX;\n }\n\n if (newY > 0) {\n newY = 0;\n } else if (newY < this.maxScrollY) {\n newY = this.maxScrollY;\n }\n\n this.scrollTo(newX, newY, 0); // INSERT POINT: _wheel\n },\n _initSnap: function _initSnap() {\n this.currentPage = {};\n\n if (typeof this.options.snap == 'string') {\n this.options.snap = this.scroller.querySelectorAll(this.options.snap);\n }\n\n this.on('refresh', function () {\n var i = 0,\n l,\n m = 0,\n n,\n cx,\n cy,\n x = 0,\n y,\n stepX = this.options.snapStepX || this.wrapperWidth,\n stepY = this.options.snapStepY || this.wrapperHeight,\n el;\n this.pages = [];\n\n if (!this.wrapperWidth || !this.wrapperHeight || !this.scrollerWidth || !this.scrollerHeight) {\n return;\n }\n\n if (this.options.snap === true) {\n cx = Math.round(stepX / 2);\n cy = Math.round(stepY / 2);\n\n while (x > -this.scrollerWidth) {\n this.pages[i] = [];\n l = 0;\n y = 0;\n\n while (y > -this.scrollerHeight) {\n this.pages[i][l] = {\n x: Math.max(x, this.maxScrollX),\n y: Math.max(y, this.maxScrollY),\n width: stepX,\n height: stepY,\n cx: x - cx,\n cy: y - cy\n };\n y -= stepY;\n l++;\n }\n\n x -= stepX;\n i++;\n }\n } else {\n el = this.options.snap;\n l = el.length;\n n = -1;\n\n for (; i < l; i++) {\n if (i === 0 || el[i].offsetLeft <= el[i - 1].offsetLeft) {\n m = 0;\n n++;\n }\n\n if (!this.pages[m]) {\n this.pages[m] = [];\n }\n\n x = Math.max(-el[i].offsetLeft, this.maxScrollX);\n y = Math.max(-el[i].offsetTop, this.maxScrollY);\n cx = x - Math.round(el[i].offsetWidth / 2);\n cy = y - Math.round(el[i].offsetHeight / 2);\n this.pages[m][n] = {\n x: x,\n y: y,\n width: el[i].offsetWidth,\n height: el[i].offsetHeight,\n cx: cx,\n cy: cy\n };\n\n if (x > this.maxScrollX) {\n m++;\n }\n }\n }\n\n this.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0); // Update snap threshold if needed\n\n if (this.options.snapThreshold % 1 === 0) {\n this.snapThresholdX = this.options.snapThreshold;\n this.snapThresholdY = this.options.snapThreshold;\n } else {\n this.snapThresholdX = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold);\n this.snapThresholdY = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold);\n }\n });\n this.on('flick', function () {\n var time = this.options.snapSpeed || Math.max(Math.max(Math.min(Math.abs(this.x - this.startX), 1000), Math.min(Math.abs(this.y - this.startY), 1000)), 300);\n this.goToPage(this.currentPage.pageX + this.directionX, this.currentPage.pageY + this.directionY, time);\n });\n },\n _nearestSnap: function _nearestSnap(x, y) {\n if (!this.pages.length) {\n return {\n x: 0,\n y: 0,\n pageX: 0,\n pageY: 0\n };\n }\n\n var i = 0,\n l = this.pages.length,\n m = 0; // Check if we exceeded the snap threshold\n\n if (Math.abs(x - this.absStartX) < this.snapThresholdX && Math.abs(y - this.absStartY) < this.snapThresholdY) {\n return this.currentPage;\n }\n\n if (x > 0) {\n x = 0;\n } else if (x < this.maxScrollX) {\n x = this.maxScrollX;\n }\n\n if (y > 0) {\n y = 0;\n } else if (y < this.maxScrollY) {\n y = this.maxScrollY;\n }\n\n for (; i < l; i++) {\n if (x >= this.pages[i][0].cx) {\n x = this.pages[i][0].x;\n break;\n }\n }\n\n l = this.pages[i].length;\n\n for (; m < l; m++) {\n if (y >= this.pages[0][m].cy) {\n y = this.pages[0][m].y;\n break;\n }\n }\n\n if (i == this.currentPage.pageX) {\n i += this.directionX;\n\n if (i < 0) {\n i = 0;\n } else if (i >= this.pages.length) {\n i = this.pages.length - 1;\n }\n\n x = this.pages[i][0].x;\n }\n\n if (m == this.currentPage.pageY) {\n m += this.directionY;\n\n if (m < 0) {\n m = 0;\n } else if (m >= this.pages[0].length) {\n m = this.pages[0].length - 1;\n }\n\n y = this.pages[0][m].y;\n }\n\n return {\n x: x,\n y: y,\n pageX: i,\n pageY: m\n };\n },\n goToPage: function goToPage(x, y, time, easing) {\n easing = easing || this.options.bounceEasing;\n\n if (x >= this.pages.length) {\n x = this.pages.length - 1;\n } else if (x < 0) {\n x = 0;\n }\n\n if (y >= this.pages[x].length) {\n y = this.pages[x].length - 1;\n } else if (y < 0) {\n y = 0;\n }\n\n var posX = this.pages[x][y].x,\n posY = this.pages[x][y].y;\n time = time === undefined ? this.options.snapSpeed || Math.max(Math.max(Math.min(Math.abs(posX - this.x), 1000), Math.min(Math.abs(posY - this.y), 1000)), 300) : time;\n this.currentPage = {\n x: posX,\n y: posY,\n pageX: x,\n pageY: y\n };\n this.scrollTo(posX, posY, time, easing);\n },\n next: function next(time, easing) {\n var x = this.currentPage.pageX,\n y = this.currentPage.pageY;\n x++;\n\n if (x >= this.pages.length && this.hasVerticalScroll) {\n x = 0;\n y++;\n }\n\n this.goToPage(x, y, time, easing);\n },\n prev: function prev(time, easing) {\n var x = this.currentPage.pageX,\n y = this.currentPage.pageY;\n x--;\n\n if (x < 0 && this.hasVerticalScroll) {\n x = 0;\n y--;\n }\n\n this.goToPage(x, y, time, easing);\n },\n _initKeys: function _initKeys(e) {\n // default key bindings\n var keys = {\n pageUp: 33,\n pageDown: 34,\n end: 35,\n home: 36,\n left: 37,\n up: 38,\n right: 39,\n down: 40\n };\n var i; // if you give me characters I give you keycode\n\n if (_typeof(this.options.keyBindings) == 'object') {\n for (i in this.options.keyBindings) {\n if (typeof this.options.keyBindings[i] == 'string') {\n this.options.keyBindings[i] = this.options.keyBindings[i].toUpperCase().charCodeAt(0);\n }\n }\n } else {\n this.options.keyBindings = {};\n }\n\n for (i in keys) {\n this.options.keyBindings[i] = this.options.keyBindings[i] || keys[i];\n }\n\n utils.addEvent(window, 'keydown', this);\n this.on('destroy', function () {\n utils.removeEvent(window, 'keydown', this);\n });\n },\n _key: function _key(e) {\n if (!this.enabled) {\n return;\n }\n\n var snap = this.options.snap,\n // we are using this alot, better to cache it\n newX = snap ? this.currentPage.pageX : this.x,\n newY = snap ? this.currentPage.pageY : this.y,\n now = utils.getTime(),\n prevTime = this.keyTime || 0,\n acceleration = 0.250,\n pos;\n\n if (this.options.useTransition && this.isInTransition) {\n pos = this.getComputedPosition();\n\n this._translate(Math.round(pos.x), Math.round(pos.y));\n\n this.isInTransition = false;\n }\n\n this.keyAcceleration = now - prevTime < 200 ? Math.min(this.keyAcceleration + acceleration, 50) : 0;\n\n switch (e.keyCode) {\n case this.options.keyBindings.pageUp:\n if (this.hasHorizontalScroll && !this.hasVerticalScroll) {\n newX += snap ? 1 : this.wrapperWidth;\n } else {\n newY += snap ? 1 : this.wrapperHeight;\n }\n\n break;\n\n case this.options.keyBindings.pageDown:\n if (this.hasHorizontalScroll && !this.hasVerticalScroll) {\n newX -= snap ? 1 : this.wrapperWidth;\n } else {\n newY -= snap ? 1 : this.wrapperHeight;\n }\n\n break;\n\n case this.options.keyBindings.end:\n newX = snap ? this.pages.length - 1 : this.maxScrollX;\n newY = snap ? this.pages[0].length - 1 : this.maxScrollY;\n break;\n\n case this.options.keyBindings.home:\n newX = 0;\n newY = 0;\n break;\n\n case this.options.keyBindings.left:\n newX += snap ? -1 : 5 + this.keyAcceleration >> 0;\n break;\n\n case this.options.keyBindings.up:\n newY += snap ? 1 : 5 + this.keyAcceleration >> 0;\n break;\n\n case this.options.keyBindings.right:\n newX -= snap ? -1 : 5 + this.keyAcceleration >> 0;\n break;\n\n case this.options.keyBindings.down:\n newY -= snap ? 1 : 5 + this.keyAcceleration >> 0;\n break;\n\n default:\n return;\n }\n\n if (snap) {\n this.goToPage(newX, newY);\n return;\n }\n\n if (newX > 0) {\n newX = 0;\n this.keyAcceleration = 0;\n } else if (newX < this.maxScrollX) {\n newX = this.maxScrollX;\n this.keyAcceleration = 0;\n }\n\n if (newY > 0) {\n newY = 0;\n this.keyAcceleration = 0;\n } else if (newY < this.maxScrollY) {\n newY = this.maxScrollY;\n this.keyAcceleration = 0;\n }\n\n this.scrollTo(newX, newY, 0);\n this.keyTime = now;\n },\n _animate: function _animate(destX, destY, duration, easingFn) {\n var that = this,\n startX = this.x,\n startY = this.y,\n startTime = utils.getTime(),\n destTime = startTime + duration;\n\n function step() {\n var now = utils.getTime(),\n newX,\n newY,\n easing;\n\n if (now >= destTime) {\n that.isAnimating = false;\n\n that._translate(destX, destY);\n\n if (!that.resetPosition(that.options.bounceTime)) {\n that._execEvent('scrollEnd');\n }\n\n return;\n }\n\n now = (now - startTime) / duration;\n easing = easingFn(now);\n newX = (destX - startX) * easing + startX;\n newY = (destY - startY) * easing + startY;\n\n that._translate(newX, newY);\n\n if (that.isAnimating) {\n rAF(step);\n }\n }\n\n this.isAnimating = true;\n step();\n },\n handleEvent: function handleEvent(e) {\n switch (e.type) {\n case 'touchstart':\n case 'pointerdown':\n case 'MSPointerDown':\n case 'mousedown':\n this._start(e);\n\n break;\n\n case 'touchmove':\n case 'pointermove':\n case 'MSPointerMove':\n case 'mousemove':\n this._move(e);\n\n break;\n\n case 'touchend':\n case 'pointerup':\n case 'MSPointerUp':\n case 'mouseup':\n case 'touchcancel':\n case 'pointercancel':\n case 'MSPointerCancel':\n case 'mousecancel':\n this._end(e);\n\n break;\n\n case 'orientationchange':\n case 'resize':\n this._resize();\n\n break;\n\n case 'transitionend':\n case 'webkitTransitionEnd':\n case 'oTransitionEnd':\n case 'MSTransitionEnd':\n this._transitionEnd(e);\n\n break;\n\n case 'wheel':\n case 'DOMMouseScroll':\n case 'mousewheel':\n this._wheel(e);\n\n break;\n\n case 'keydown':\n this._key(e);\n\n break;\n\n case 'click':\n if (this.enabled && !e._constructed) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n break;\n }\n }\n };\n\n function createDefaultScrollbar(direction, interactive, type) {\n var scrollbar = document.createElement('div'),\n indicator = document.createElement('div');\n\n if (type === true) {\n scrollbar.style.cssText = 'position:absolute;z-index:9999';\n indicator.style.cssText = '-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px';\n }\n\n indicator.className = 'iScrollIndicator';\n\n if (direction == 'h') {\n if (type === true) {\n scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';\n indicator.style.height = '100%';\n }\n\n scrollbar.className = 'iScrollHorizontalScrollbar';\n } else {\n if (type === true) {\n scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';\n indicator.style.width = '100%';\n }\n\n scrollbar.className = 'iScrollVerticalScrollbar';\n }\n\n scrollbar.style.cssText += ';overflow:hidden';\n\n if (!interactive) {\n scrollbar.style.pointerEvents = 'none';\n }\n\n scrollbar.appendChild(indicator);\n return scrollbar;\n }\n\n function Indicator(scroller, options) {\n this.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el;\n this.wrapperStyle = this.wrapper.style;\n this.indicator = this.wrapper.children[0];\n this.indicatorStyle = this.indicator.style;\n this.scroller = scroller;\n this.options = {\n listenX: true,\n listenY: true,\n interactive: false,\n resize: true,\n defaultScrollbars: false,\n shrink: false,\n fade: false,\n speedRatioX: 0,\n speedRatioY: 0\n };\n\n for (var i in options) {\n this.options[i] = options[i];\n }\n\n this.sizeRatioX = 1;\n this.sizeRatioY = 1;\n this.maxPosX = 0;\n this.maxPosY = 0;\n\n if (this.options.interactive) {\n if (!this.options.disableTouch) {\n utils.addEvent(this.indicator, 'touchstart', this);\n utils.addEvent(window, 'touchend', this);\n }\n\n if (!this.options.disablePointer) {\n utils.addEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);\n utils.addEvent(window, utils.prefixPointerEvent('pointerup'), this);\n }\n\n if (!this.options.disableMouse) {\n utils.addEvent(this.indicator, 'mousedown', this);\n utils.addEvent(window, 'mouseup', this);\n }\n }\n\n if (this.options.fade) {\n this.wrapperStyle[utils.style.transform] = this.scroller.translateZ;\n var durationProp = utils.style.transitionDuration;\n this.wrapperStyle[durationProp] = utils.isBadAndroid ? '0.0001ms' : '0ms'; // remove 0.0001ms\n\n var self = this;\n\n if (utils.isBadAndroid) {\n rAF(function () {\n if (self.wrapperStyle[durationProp] === '0.0001ms') {\n self.wrapperStyle[durationProp] = '0s';\n }\n });\n }\n\n this.wrapperStyle.opacity = '0';\n }\n }\n\n Indicator.prototype = {\n handleEvent: function handleEvent(e) {\n switch (e.type) {\n case 'touchstart':\n case 'pointerdown':\n case 'MSPointerDown':\n case 'mousedown':\n this._start(e);\n\n break;\n\n case 'touchmove':\n case 'pointermove':\n case 'MSPointerMove':\n case 'mousemove':\n this._move(e);\n\n break;\n\n case 'touchend':\n case 'pointerup':\n case 'MSPointerUp':\n case 'mouseup':\n case 'touchcancel':\n case 'pointercancel':\n case 'MSPointerCancel':\n case 'mousecancel':\n this._end(e);\n\n break;\n }\n },\n destroy: function destroy() {\n if (this.options.fadeScrollbars) {\n clearTimeout(this.fadeTimeout);\n this.fadeTimeout = null;\n }\n\n if (this.options.interactive) {\n utils.removeEvent(this.indicator, 'touchstart', this);\n utils.removeEvent(this.indicator, utils.prefixPointerEvent('pointerdown'), this);\n utils.removeEvent(this.indicator, 'mousedown', this);\n utils.removeEvent(window, 'touchmove', this);\n utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);\n utils.removeEvent(window, 'mousemove', this);\n utils.removeEvent(window, 'touchend', this);\n utils.removeEvent(window, utils.prefixPointerEvent('pointerup'), this);\n utils.removeEvent(window, 'mouseup', this);\n }\n\n if (this.options.defaultScrollbars) {\n this.wrapper.parentNode.removeChild(this.wrapper);\n }\n },\n _start: function _start(e) {\n var point = e.touches ? e.touches[0] : e;\n e.preventDefault();\n e.stopPropagation();\n this.transitionTime();\n this.initiated = true;\n this.moved = false;\n this.lastPointX = point.pageX;\n this.lastPointY = point.pageY;\n this.startTime = utils.getTime();\n\n if (!this.options.disableTouch) {\n utils.addEvent(window, 'touchmove', this);\n }\n\n if (!this.options.disablePointer) {\n utils.addEvent(window, utils.prefixPointerEvent('pointermove'), this);\n }\n\n if (!this.options.disableMouse) {\n utils.addEvent(window, 'mousemove', this);\n }\n\n this.scroller._execEvent('beforeScrollStart');\n },\n _move: function _move(e) {\n var point = e.touches ? e.touches[0] : e,\n deltaX,\n deltaY,\n newX,\n newY,\n timestamp = utils.getTime();\n\n if (!this.moved) {\n this.scroller._execEvent('scrollStart');\n }\n\n this.moved = true;\n deltaX = point.pageX - this.lastPointX;\n this.lastPointX = point.pageX;\n deltaY = point.pageY - this.lastPointY;\n this.lastPointY = point.pageY;\n newX = this.x + deltaX;\n newY = this.y + deltaY;\n\n this._pos(newX, newY); // INSERT POINT: indicator._move\n\n\n e.preventDefault();\n e.stopPropagation();\n },\n _end: function _end(e) {\n if (!this.initiated) {\n return;\n }\n\n this.initiated = false;\n e.preventDefault();\n e.stopPropagation();\n utils.removeEvent(window, 'touchmove', this);\n utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this);\n utils.removeEvent(window, 'mousemove', this);\n\n if (this.scroller.options.snap) {\n var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);\n\n var time = this.options.snapSpeed || Math.max(Math.max(Math.min(Math.abs(this.scroller.x - snap.x), 1000), Math.min(Math.abs(this.scroller.y - snap.y), 1000)), 300);\n\n if (this.scroller.x != snap.x || this.scroller.y != snap.y) {\n this.scroller.directionX = 0;\n this.scroller.directionY = 0;\n this.scroller.currentPage = snap;\n this.scroller.scrollTo(snap.x, snap.y, time, this.scroller.options.bounceEasing);\n }\n }\n\n if (this.moved) {\n this.scroller._execEvent('scrollEnd');\n }\n },\n transitionTime: function transitionTime(time) {\n time = time || 0;\n var durationProp = utils.style.transitionDuration;\n this.indicatorStyle[durationProp] = time + 'ms';\n\n if (!time && utils.isBadAndroid) {\n this.indicatorStyle[durationProp] = '0.0001ms'; // remove 0.0001ms\n\n var self = this;\n rAF(function () {\n if (self.indicatorStyle[durationProp] === '0.0001ms') {\n self.indicatorStyle[durationProp] = '0s';\n }\n });\n }\n },\n transitionTimingFunction: function transitionTimingFunction(easing) {\n this.indicatorStyle[utils.style.transitionTimingFunction] = easing;\n },\n refresh: function refresh() {\n this.transitionTime();\n\n if (this.options.listenX && !this.options.listenY) {\n this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';\n } else if (this.options.listenY && !this.options.listenX) {\n this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';\n } else {\n this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';\n }\n\n if (this.scroller.hasHorizontalScroll && this.scroller.hasVerticalScroll) {\n utils.addClass(this.wrapper, 'iScrollBothScrollbars');\n utils.removeClass(this.wrapper, 'iScrollLoneScrollbar');\n\n if (this.options.defaultScrollbars && this.options.customStyle) {\n if (this.options.listenX) {\n this.wrapper.style.right = '8px';\n } else {\n this.wrapper.style.bottom = '8px';\n }\n }\n } else {\n utils.removeClass(this.wrapper, 'iScrollBothScrollbars');\n utils.addClass(this.wrapper, 'iScrollLoneScrollbar');\n\n if (this.options.defaultScrollbars && this.options.customStyle) {\n if (this.options.listenX) {\n this.wrapper.style.right = '2px';\n } else {\n this.wrapper.style.bottom = '2px';\n }\n }\n }\n\n var r = this.wrapper.offsetHeight; // force refresh\n\n if (this.options.listenX) {\n this.wrapperWidth = this.wrapper.clientWidth;\n\n if (this.options.resize) {\n this.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8);\n this.indicatorStyle.width = this.indicatorWidth + 'px';\n } else {\n this.indicatorWidth = this.indicator.clientWidth;\n }\n\n this.maxPosX = this.wrapperWidth - this.indicatorWidth;\n\n if (this.options.shrink == 'clip') {\n this.minBoundaryX = -this.indicatorWidth + 8;\n this.maxBoundaryX = this.wrapperWidth - 8;\n } else {\n this.minBoundaryX = 0;\n this.maxBoundaryX = this.maxPosX;\n }\n\n this.sizeRatioX = this.options.speedRatioX || this.scroller.maxScrollX && this.maxPosX / this.scroller.maxScrollX;\n }\n\n if (this.options.listenY) {\n this.wrapperHeight = this.wrapper.clientHeight;\n\n if (this.options.resize) {\n this.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8);\n this.indicatorStyle.height = this.indicatorHeight + 'px';\n } else {\n this.indicatorHeight = this.indicator.clientHeight;\n }\n\n this.maxPosY = this.wrapperHeight - this.indicatorHeight;\n\n if (this.options.shrink == 'clip') {\n this.minBoundaryY = -this.indicatorHeight + 8;\n this.maxBoundaryY = this.wrapperHeight - 8;\n } else {\n this.minBoundaryY = 0;\n this.maxBoundaryY = this.maxPosY;\n }\n\n this.maxPosY = this.wrapperHeight - this.indicatorHeight;\n this.sizeRatioY = this.options.speedRatioY || this.scroller.maxScrollY && this.maxPosY / this.scroller.maxScrollY;\n }\n\n this.updatePosition();\n },\n updatePosition: function updatePosition() {\n var x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0,\n y = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0;\n\n if (!this.options.ignoreBoundaries) {\n if (x < this.minBoundaryX) {\n if (this.options.shrink == 'scale') {\n this.width = Math.max(this.indicatorWidth + x, 8);\n this.indicatorStyle.width = this.width + 'px';\n }\n\n x = this.minBoundaryX;\n } else if (x > this.maxBoundaryX) {\n if (this.options.shrink == 'scale') {\n this.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8);\n this.indicatorStyle.width = this.width + 'px';\n x = this.maxPosX + this.indicatorWidth - this.width;\n } else {\n x = this.maxBoundaryX;\n }\n } else if (this.options.shrink == 'scale' && this.width != this.indicatorWidth) {\n this.width = this.indicatorWidth;\n this.indicatorStyle.width = this.width + 'px';\n }\n\n if (y < this.minBoundaryY) {\n if (this.options.shrink == 'scale') {\n this.height = Math.max(this.indicatorHeight + y * 3, 8);\n this.indicatorStyle.height = this.height + 'px';\n }\n\n y = this.minBoundaryY;\n } else if (y > this.maxBoundaryY) {\n if (this.options.shrink == 'scale') {\n this.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8);\n this.indicatorStyle.height = this.height + 'px';\n y = this.maxPosY + this.indicatorHeight - this.height;\n } else {\n y = this.maxBoundaryY;\n }\n } else if (this.options.shrink == 'scale' && this.height != this.indicatorHeight) {\n this.height = this.indicatorHeight;\n this.indicatorStyle.height = this.height + 'px';\n }\n }\n\n this.x = x;\n this.y = y;\n\n if (this.scroller.options.useTransform) {\n this.indicatorStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.scroller.translateZ;\n } else {\n this.indicatorStyle.left = x + 'px';\n this.indicatorStyle.top = y + 'px';\n }\n },\n _pos: function _pos(x, y) {\n if (x < 0) {\n x = 0;\n } else if (x > this.maxPosX) {\n x = this.maxPosX;\n }\n\n if (y < 0) {\n y = 0;\n } else if (y > this.maxPosY) {\n y = this.maxPosY;\n }\n\n x = this.options.listenX ? Math.round(x / this.sizeRatioX) : this.scroller.x;\n y = this.options.listenY ? Math.round(y / this.sizeRatioY) : this.scroller.y;\n this.scroller.scrollTo(x, y);\n },\n fade: function fade(val, hold) {\n if (hold && !this.visible) {\n return;\n }\n\n clearTimeout(this.fadeTimeout);\n this.fadeTimeout = null;\n var time = val ? 250 : 500,\n delay = val ? 0 : 300;\n val = val ? '1' : '0';\n this.wrapperStyle[utils.style.transitionDuration] = time + 'ms';\n this.fadeTimeout = setTimeout(function (val) {\n this.wrapperStyle.opacity = val;\n this.visible = +val;\n }.bind(this, val), delay);\n }\n };\n IScroll.utils = utils;\n\n if (typeof module != 'undefined' && module.exports) {\n module.exports = IScroll;\n } else if (typeof define == 'function' && define.amd) {\n define(function () {\n return IScroll;\n });\n } else {\n window.IScroll = IScroll;\n }\n})(window, document, Math);"],"sourceRoot":""}