{"version":3,"file":"js/3456.8652c851.js","mappings":"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","sources":["webpack://@sunwebgroup/design-system/../node_modules/gopd/index.js","webpack://@sunwebgroup/design-system/../node_modules/has-dom/index.js","webpack://@sunwebgroup/design-system/../node_modules/has-property-descriptors/index.js","webpack://@sunwebgroup/design-system/../node_modules/has-proto/index.js","webpack://@sunwebgroup/design-system/../node_modules/has-symbols/index.js","webpack://@sunwebgroup/design-system/../node_modules/has-symbols/shams.js","webpack://@sunwebgroup/design-system/../node_modules/has-tostringtag/shams.js","webpack://@sunwebgroup/design-system/../node_modules/has/src/index.js","webpack://@sunwebgroup/design-system/../node_modules/inherits/inherits_browser.js","webpack://@sunwebgroup/design-system/../node_modules/intersection-observer/intersection-observer.js","webpack://@sunwebgroup/design-system/../node_modules/is-arguments/index.js","webpack://@sunwebgroup/design-system/../node_modules/is-callable/index.js","webpack://@sunwebgroup/design-system/../node_modules/is-generator-function/index.js","webpack://@sunwebgroup/design-system/../node_modules/is-nan/implementation.js","webpack://@sunwebgroup/design-system/../node_modules/is-nan/index.js","webpack://@sunwebgroup/design-system/../node_modules/is-nan/polyfill.js","webpack://@sunwebgroup/design-system/../node_modules/is-nan/shim.js","webpack://@sunwebgroup/design-system/../node_modules/is-typed-array/index.js","webpack://@sunwebgroup/design-system/../node_modules/load-script/index.js","webpack://@sunwebgroup/design-system/../node_modules/nouislider/distribute/nouislider.js","webpack://@sunwebgroup/design-system/../node_modules/object-assign/index.js","webpack://@sunwebgroup/design-system/../node_modules/object-is/implementation.js","webpack://@sunwebgroup/design-system/../node_modules/object-is/index.js","webpack://@sunwebgroup/design-system/../node_modules/object-is/polyfill.js","webpack://@sunwebgroup/design-system/../node_modules/object-is/shim.js","webpack://@sunwebgroup/design-system/../node_modules/object-keys/implementation.js","webpack://@sunwebgroup/design-system/../node_modules/object-keys/index.js","webpack://@sunwebgroup/design-system/../node_modules/object-keys/isArguments.js","webpack://@sunwebgroup/design-system/../node_modules/object.assign/implementation.js","webpack://@sunwebgroup/design-system/../node_modules/object.assign/polyfill.js","webpack://@sunwebgroup/design-system/../node_modules/process/browser.js","webpack://@sunwebgroup/design-system/../node_modules/promise-polyfill/src/index.js","webpack://@sunwebgroup/design-system/../node_modules/promise-polyfill/src/finally.js","webpack://@sunwebgroup/design-system/../node_modules/sister/src/sister.js","webpack://@sunwebgroup/design-system/../node_modules/smart-app-banner/index.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/raf.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/caf.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/extend.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/getBody.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/docElement.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/forEach.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/classListSupport.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/hasClass.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/addClass.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/removeClass.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/hasAttr.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/getAttr.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/isNodeList.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/setAttrs.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/hideElement.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/showElement.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/isVisible.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/whichProperty.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/passiveOption.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/addEvents.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/removeEvents.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/events.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/tiny-slider.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/calc.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/getSlideId.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/jsTransform.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/toDegree.js","webpack://@sunwebgroup/design-system/../node_modules/tiny-slider/src/helpers/getTouchDirection.js","webpack://@sunwebgroup/design-system/../node_modules/ua-parser-js/src/ua-parser.js","webpack://@sunwebgroup/design-system/../node_modules/url-polyfill/url-polyfill.js","webpack://@sunwebgroup/design-system/../node_modules/util/support/isBufferBrowser.js","webpack://@sunwebgroup/design-system/../node_modules/util/support/types.js","webpack://@sunwebgroup/design-system/../node_modules/util/util.js"],"sourcesContent":["'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\nmodule.exports = function () {\n\treturn typeof window !== 'undefined'\n\t\t&& typeof document !== 'undefined'\n\t\t&& typeof document.createElement === 'function';\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar test = {\n\tfoo: {}\n};\n\nvar $Object = Object;\n\nmodule.exports = function hasProto() {\n\treturn { __proto__: test }.foo === test.foo && !({ __proto__: null } instanceof $Object);\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n(function() {\n'use strict';\n\n// Exit early if we're not running in a browser.\nif (typeof window !== 'object') {\n return;\n}\n\n// Exit early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype,\n 'isIntersecting', {\n get: function () {\n return this.intersectionRatio > 0;\n }\n });\n }\n return;\n}\n\n\n/**\n * A local reference to the document.\n */\nvar document = window.document;\n\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = entry.rootBounds;\n this.boundingClientRect = entry.boundingClientRect;\n this.intersectionRect = entry.intersectionRect || getEmptyRect();\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n // Round the intersection ratio to avoid floating point math issues:\n // https://github.com/w3c/IntersectionObserver/issues/324\n this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (options.root && options.root.nodeType != 1) {\n throw new Error('root must be an Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(\n this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function(margin) {\n return margin.value + margin.unit;\n }).join(' ');\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({element: target, entry: null});\n this._monitorIntersections();\n this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n this._observationTargets =\n this._observationTargets.filter(function(item) {\n\n return item.element != target;\n });\n if (!this._observationTargets.length) {\n this._unmonitorIntersections();\n this._unregisterInstance();\n }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n this._observationTargets = [];\n this._unmonitorIntersections();\n this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function(t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array} An array of margin objects with the keys\n * value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function(margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return {value: parseFloat(parts[1]), unit: parts[2]};\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function() {\n if (!this._monitoringIntersections) {\n this._monitoringIntersections = true;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n this._monitoringInterval = setInterval(\n this._checkForIntersections, this.POLL_INTERVAL);\n }\n else {\n addEvent(window, 'resize', this._checkForIntersections, true);\n addEvent(document, 'scroll', this._checkForIntersections, true);\n\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {\n this._domObserver = new MutationObserver(this._checkForIntersections);\n this._domObserver.observe(document, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function() {\n if (this._monitoringIntersections) {\n this._monitoringIntersections = false;\n\n clearInterval(this._monitoringInterval);\n this._monitoringInterval = null;\n\n removeEvent(window, 'resize', this._checkForIntersections, true);\n removeEvent(document, 'scroll', this._checkForIntersections, true);\n\n if (this._domObserver) {\n this._domObserver.disconnect();\n this._domObserver = null;\n }\n }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function(item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget &&\n this._computeTargetAndRootIntersection(target, rootRect);\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: rootRect,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n function(target, rootRect) {\n\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var targetRect = getBoundingClientRect(target);\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ?\n window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return;\n\n if (parent == this.root || parent == document) {\n atRoot = true;\n parentRect = rootRect;\n } else {\n // If the element has a non-visible overflow, and it's not the \n // or element, update the intersection rect.\n // Note: and cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n if (parent != document.body &&\n parent != document.documentElement &&\n parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n\n if (!intersectionRect) break;\n }\n parent = getParentNode(parent);\n }\n return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {Object} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n var rootRect;\n if (this.root) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use / instead of window since scroll bars affect size.\n var html = document.documentElement;\n var body = document.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {Object} rect The rect object to expand.\n * @return {Object} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n var margins = this._rootMarginValues.map(function(margin, i) {\n return margin.unit == 'px' ? margin.value :\n margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n function(oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ?\n oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ?\n newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio ||\n threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n return containsDeep(this.root || document, target);\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function() {\n fn();\n timer = null;\n }, timeout);\n }\n };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.detatchEvent == 'function') {\n node.detatchEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object} The intersection rect or undefined if no intersection\n * is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return (width >= 0 && height >= 0) && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n };\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {Object} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {Object} The empty rect.\n */\nfunction getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n}\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n var parent = node.parentNode;\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n\n if (parent && parent.assignedSlot) {\n // If the parent is distributed in a , return the parent of a slot.\n return parent.assignedSlot.parentNode;\n }\n\n return parent;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}());\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n","'use strict';\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n","'use strict';\n\nvar callBind = require('call-bind');\nvar define = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Number);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function shimNumberIsNaN() {\n\tvar polyfill = getPolyfill();\n\tdefine(Number, { isNaN: polyfill }, {\n\t\tisNaN: function testIsNaN() {\n\t\t\treturn Number.isNaN !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar whichTypedArray = require('which-typed-array');\n\nmodule.exports = function isTypedArray(value) {\n\treturn !!whichTypedArray(value);\n};\n","\nmodule.exports = function load (src, opts, cb) {\n var head = document.head || document.getElementsByTagName('head')[0]\n var script = document.createElement('script')\n\n if (typeof opts === 'function') {\n cb = opts\n opts = {}\n }\n\n opts = opts || {}\n cb = cb || function() {}\n\n script.type = opts.type || 'text/javascript'\n script.charset = opts.charset || 'utf8';\n script.async = 'async' in opts ? !!opts.async : true\n script.src = src\n\n if (opts.attrs) {\n setAttributes(script, opts.attrs)\n }\n\n if (opts.text) {\n script.text = '' + opts.text\n }\n\n var onend = 'onload' in script ? stdOnEnd : ieOnEnd\n onend(script, cb)\n\n // some good legacy browsers (firefox) fail the 'in' detection above\n // so as a fallback we always set onload\n // old IE will ignore this and new IE will set onload\n if (!script.onload) {\n stdOnEnd(script, cb);\n }\n\n head.appendChild(script)\n}\n\nfunction setAttributes(script, attrs) {\n for (var attr in attrs) {\n script.setAttribute(attr, attrs[attr]);\n }\n}\n\nfunction stdOnEnd (script, cb) {\n script.onload = function () {\n this.onerror = this.onload = null\n cb(null, script)\n }\n script.onerror = function () {\n // this.onload = null here is necessary\n // because even IE9 works not like others\n this.onerror = this.onload = null\n cb(new Error('Failed to load ' + this.src), script)\n }\n}\n\nfunction ieOnEnd (script, cb) {\n script.onreadystatechange = function () {\n if (this.readyState != 'complete' && this.readyState != 'loaded') return\n this.onreadystatechange = null\n cb(null, script) // there is no way to catch loading errors in IE8\n }\n}\n","/*! nouislider - 12.1.0 - 10/25/2018 */\n(function(factory) {\r\n if (typeof define === \"function\" && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define([], factory);\r\n } else if (typeof exports === \"object\") {\r\n // Node/CommonJS\r\n module.exports = factory();\r\n } else {\r\n // Browser globals\r\n window.noUiSlider = factory();\r\n }\r\n})(function() {\r\n \"use strict\";\r\n\r\n var VERSION = \"12.1.0\";\r\n\r\n function isValidFormatter(entry) {\r\n return typeof entry === \"object\" && typeof entry.to === \"function\" && typeof entry.from === \"function\";\r\n }\r\n\r\n function removeElement(el) {\r\n el.parentElement.removeChild(el);\r\n }\r\n\r\n function isSet(value) {\r\n return value !== null && value !== undefined;\r\n }\r\n\r\n // Bindable version\r\n function preventDefault(e) {\r\n e.preventDefault();\r\n }\r\n\r\n // Removes duplicates from an array.\r\n function unique(array) {\r\n return array.filter(function(a) {\r\n return !this[a] ? (this[a] = true) : false;\r\n }, {});\r\n }\r\n\r\n // Round a value to the closest 'to'.\r\n function closest(value, to) {\r\n return Math.round(value / to) * to;\r\n }\r\n\r\n // Current position of an element relative to the document.\r\n function offset(elem, orientation) {\r\n var rect = elem.getBoundingClientRect();\r\n var doc = elem.ownerDocument;\r\n var docElem = doc.documentElement;\r\n var pageOffset = getPageOffset(doc);\r\n\r\n // getBoundingClientRect contains left scroll in Chrome on Android.\r\n // I haven't found a feature detection that proves this. Worst case\r\n // scenario on mis-match: the 'tap' feature on horizontal sliders breaks.\r\n if (/webkit.*Chrome.*Mobile/i.test(navigator.userAgent)) {\r\n pageOffset.x = 0;\r\n }\r\n\r\n return orientation\r\n ? rect.top + pageOffset.y - docElem.clientTop\r\n : rect.left + pageOffset.x - docElem.clientLeft;\r\n }\r\n\r\n // Checks whether a value is numerical.\r\n function isNumeric(a) {\r\n return typeof a === \"number\" && !isNaN(a) && isFinite(a);\r\n }\r\n\r\n // Sets a class and removes it after [duration] ms.\r\n function addClassFor(element, className, duration) {\r\n if (duration > 0) {\r\n addClass(element, className);\r\n setTimeout(function() {\r\n removeClass(element, className);\r\n }, duration);\r\n }\r\n }\r\n\r\n // Limits a value to 0 - 100\r\n function limit(a) {\r\n return Math.max(Math.min(a, 100), 0);\r\n }\r\n\r\n // Wraps a variable as an array, if it isn't one yet.\r\n // Note that an input array is returned by reference!\r\n function asArray(a) {\r\n return Array.isArray(a) ? a : [a];\r\n }\r\n\r\n // Counts decimals\r\n function countDecimals(numStr) {\r\n numStr = String(numStr);\r\n var pieces = numStr.split(\".\");\r\n return pieces.length > 1 ? pieces[1].length : 0;\r\n }\r\n\r\n // http://youmightnotneedjquery.com/#add_class\r\n function addClass(el, className) {\r\n if (el.classList) {\r\n el.classList.add(className);\r\n } else {\r\n el.className += \" \" + className;\r\n }\r\n }\r\n\r\n // http://youmightnotneedjquery.com/#remove_class\r\n function removeClass(el, className) {\r\n if (el.classList) {\r\n el.classList.remove(className);\r\n } else {\r\n el.className = el.className.replace(\r\n new RegExp(\"(^|\\\\b)\" + className.split(\" \").join(\"|\") + \"(\\\\b|$)\", \"gi\"),\r\n \" \"\r\n );\r\n }\r\n }\r\n\r\n // https://plainjs.com/javascript/attributes/adding-removing-and-testing-for-classes-9/\r\n function hasClass(el, className) {\r\n return el.classList\r\n ? el.classList.contains(className)\r\n : new RegExp(\"\\\\b\" + className + \"\\\\b\").test(el.className);\r\n }\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY#Notes\r\n function getPageOffset(doc) {\r\n var supportPageOffset = window.pageXOffset !== undefined;\r\n var isCSS1Compat = (doc.compatMode || \"\") === \"CSS1Compat\";\r\n var x = supportPageOffset\r\n ? window.pageXOffset\r\n : isCSS1Compat\r\n ? doc.documentElement.scrollLeft\r\n : doc.body.scrollLeft;\r\n var y = supportPageOffset\r\n ? window.pageYOffset\r\n : isCSS1Compat\r\n ? doc.documentElement.scrollTop\r\n : doc.body.scrollTop;\r\n\r\n return {\r\n x: x,\r\n y: y\r\n };\r\n }\r\n\r\n // we provide a function to compute constants instead\r\n // of accessing window.* as soon as the module needs it\r\n // so that we do not compute anything if not needed\r\n function getActions() {\r\n // Determine the events to bind. IE11 implements pointerEvents without\r\n // a prefix, which breaks compatibility with the IE10 implementation.\r\n return window.navigator.pointerEnabled\r\n ? {\r\n start: \"pointerdown\",\r\n move: \"pointermove\",\r\n end: \"pointerup\"\r\n }\r\n : window.navigator.msPointerEnabled\r\n ? {\r\n start: \"MSPointerDown\",\r\n move: \"MSPointerMove\",\r\n end: \"MSPointerUp\"\r\n }\r\n : {\r\n start: \"mousedown touchstart\",\r\n move: \"mousemove touchmove\",\r\n end: \"mouseup touchend\"\r\n };\r\n }\r\n\r\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\r\n // Issue #785\r\n function getSupportsPassive() {\r\n var supportsPassive = false;\r\n\r\n /* eslint-disable */\r\n try {\r\n var opts = Object.defineProperty({}, \"passive\", {\r\n get: function() {\r\n supportsPassive = true;\r\n }\r\n });\r\n\r\n window.addEventListener(\"test\", null, opts);\r\n } catch (e) {}\r\n /* eslint-enable */\r\n\r\n return supportsPassive;\r\n }\r\n\r\n function getSupportsTouchActionNone() {\r\n return window.CSS && CSS.supports && CSS.supports(\"touch-action\", \"none\");\r\n }\r\n\r\n // Value calculation\r\n\r\n // Determine the size of a sub-range in relation to a full range.\r\n function subRangeRatio(pa, pb) {\r\n return 100 / (pb - pa);\r\n }\r\n\r\n // (percentage) How many percent is this value of this range?\r\n function fromPercentage(range, value) {\r\n return (value * 100) / (range[1] - range[0]);\r\n }\r\n\r\n // (percentage) Where is this value on this range?\r\n function toPercentage(range, value) {\r\n return fromPercentage(range, range[0] < 0 ? value + Math.abs(range[0]) : value - range[0]);\r\n }\r\n\r\n // (value) How much is this percentage on this range?\r\n function isPercentage(range, value) {\r\n return (value * (range[1] - range[0])) / 100 + range[0];\r\n }\r\n\r\n // Range conversion\r\n\r\n function getJ(value, arr) {\r\n var j = 1;\r\n\r\n while (value >= arr[j]) {\r\n j += 1;\r\n }\r\n\r\n return j;\r\n }\r\n\r\n // (percentage) Input a value, find where, on a scale of 0-100, it applies.\r\n function toStepping(xVal, xPct, value) {\r\n if (value >= xVal.slice(-1)[0]) {\r\n return 100;\r\n }\r\n\r\n var j = getJ(value, xVal);\r\n var va = xVal[j - 1];\r\n var vb = xVal[j];\r\n var pa = xPct[j - 1];\r\n var pb = xPct[j];\r\n\r\n return pa + toPercentage([va, vb], value) / subRangeRatio(pa, pb);\r\n }\r\n\r\n // (value) Input a percentage, find where it is on the specified range.\r\n function fromStepping(xVal, xPct, value) {\r\n // There is no range group that fits 100\r\n if (value >= 100) {\r\n return xVal.slice(-1)[0];\r\n }\r\n\r\n var j = getJ(value, xPct);\r\n var va = xVal[j - 1];\r\n var vb = xVal[j];\r\n var pa = xPct[j - 1];\r\n var pb = xPct[j];\r\n\r\n return isPercentage([va, vb], (value - pa) * subRangeRatio(pa, pb));\r\n }\r\n\r\n // (percentage) Get the step that applies at a certain value.\r\n function getStep(xPct, xSteps, snap, value) {\r\n if (value === 100) {\r\n return value;\r\n }\r\n\r\n var j = getJ(value, xPct);\r\n var a = xPct[j - 1];\r\n var b = xPct[j];\r\n\r\n // If 'snap' is set, steps are used as fixed points on the slider.\r\n if (snap) {\r\n // Find the closest position, a or b.\r\n if (value - a > (b - a) / 2) {\r\n return b;\r\n }\r\n\r\n return a;\r\n }\r\n\r\n if (!xSteps[j - 1]) {\r\n return value;\r\n }\r\n\r\n return xPct[j - 1] + closest(value - xPct[j - 1], xSteps[j - 1]);\r\n }\r\n\r\n // Entry parsing\r\n\r\n function handleEntryPoint(index, value, that) {\r\n var percentage;\r\n\r\n // Wrap numerical input in an array.\r\n if (typeof value === \"number\") {\r\n value = [value];\r\n }\r\n\r\n // Reject any invalid input, by testing whether value is an array.\r\n if (!Array.isArray(value)) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'range' contains invalid value.\");\r\n }\r\n\r\n // Covert min/max syntax to 0 and 100.\r\n if (index === \"min\") {\r\n percentage = 0;\r\n } else if (index === \"max\") {\r\n percentage = 100;\r\n } else {\r\n percentage = parseFloat(index);\r\n }\r\n\r\n // Check for correct input.\r\n if (!isNumeric(percentage) || !isNumeric(value[0])) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'range' value isn't numeric.\");\r\n }\r\n\r\n // Store values.\r\n that.xPct.push(percentage);\r\n that.xVal.push(value[0]);\r\n\r\n // NaN will evaluate to false too, but to keep\r\n // logging clear, set step explicitly. Make sure\r\n // not to override the 'step' setting with false.\r\n if (!percentage) {\r\n if (!isNaN(value[1])) {\r\n that.xSteps[0] = value[1];\r\n }\r\n } else {\r\n that.xSteps.push(isNaN(value[1]) ? false : value[1]);\r\n }\r\n\r\n that.xHighestCompleteStep.push(0);\r\n }\r\n\r\n function handleStepPoint(i, n, that) {\r\n // Ignore 'false' stepping.\r\n if (!n) {\r\n return true;\r\n }\r\n\r\n // Factor to range ratio\r\n that.xSteps[i] =\r\n fromPercentage([that.xVal[i], that.xVal[i + 1]], n) / subRangeRatio(that.xPct[i], that.xPct[i + 1]);\r\n\r\n var totalSteps = (that.xVal[i + 1] - that.xVal[i]) / that.xNumSteps[i];\r\n var highestStep = Math.ceil(Number(totalSteps.toFixed(3)) - 1);\r\n var step = that.xVal[i] + that.xNumSteps[i] * highestStep;\r\n\r\n that.xHighestCompleteStep[i] = step;\r\n }\r\n\r\n // Interface\r\n\r\n function Spectrum(entry, snap, singleStep) {\r\n this.xPct = [];\r\n this.xVal = [];\r\n this.xSteps = [singleStep || false];\r\n this.xNumSteps = [false];\r\n this.xHighestCompleteStep = [];\r\n\r\n this.snap = snap;\r\n\r\n var index;\r\n var ordered = []; // [0, 'min'], [1, '50%'], [2, 'max']\r\n\r\n // Map the object keys to an array.\r\n for (index in entry) {\r\n if (entry.hasOwnProperty(index)) {\r\n ordered.push([entry[index], index]);\r\n }\r\n }\r\n\r\n // Sort all entries by value (numeric sort).\r\n if (ordered.length && typeof ordered[0][0] === \"object\") {\r\n ordered.sort(function(a, b) {\r\n return a[0][0] - b[0][0];\r\n });\r\n } else {\r\n ordered.sort(function(a, b) {\r\n return a[0] - b[0];\r\n });\r\n }\r\n\r\n // Convert all entries to subranges.\r\n for (index = 0; index < ordered.length; index++) {\r\n handleEntryPoint(ordered[index][1], ordered[index][0], this);\r\n }\r\n\r\n // Store the actual step values.\r\n // xSteps is sorted in the same order as xPct and xVal.\r\n this.xNumSteps = this.xSteps.slice(0);\r\n\r\n // Convert all numeric steps to the percentage of the subrange they represent.\r\n for (index = 0; index < this.xNumSteps.length; index++) {\r\n handleStepPoint(index, this.xNumSteps[index], this);\r\n }\r\n }\r\n\r\n Spectrum.prototype.getMargin = function(value) {\r\n var step = this.xNumSteps[0];\r\n\r\n if (step && (value / step) % 1 !== 0) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'limit', 'margin' and 'padding' must be divisible by step.\");\r\n }\r\n\r\n return this.xPct.length === 2 ? fromPercentage(this.xVal, value) : false;\r\n };\r\n\r\n Spectrum.prototype.toStepping = function(value) {\r\n value = toStepping(this.xVal, this.xPct, value);\r\n\r\n return value;\r\n };\r\n\r\n Spectrum.prototype.fromStepping = function(value) {\r\n return fromStepping(this.xVal, this.xPct, value);\r\n };\r\n\r\n Spectrum.prototype.getStep = function(value) {\r\n value = getStep(this.xPct, this.xSteps, this.snap, value);\r\n\r\n return value;\r\n };\r\n\r\n Spectrum.prototype.getNearbySteps = function(value) {\r\n var j = getJ(value, this.xPct);\r\n\r\n return {\r\n stepBefore: {\r\n startValue: this.xVal[j - 2],\r\n step: this.xNumSteps[j - 2],\r\n highestStep: this.xHighestCompleteStep[j - 2]\r\n },\r\n thisStep: {\r\n startValue: this.xVal[j - 1],\r\n step: this.xNumSteps[j - 1],\r\n highestStep: this.xHighestCompleteStep[j - 1]\r\n },\r\n stepAfter: {\r\n startValue: this.xVal[j],\r\n step: this.xNumSteps[j],\r\n highestStep: this.xHighestCompleteStep[j]\r\n }\r\n };\r\n };\r\n\r\n Spectrum.prototype.countStepDecimals = function() {\r\n var stepDecimals = this.xNumSteps.map(countDecimals);\r\n return Math.max.apply(null, stepDecimals);\r\n };\r\n\r\n // Outside testing\r\n Spectrum.prototype.convert = function(value) {\r\n return this.getStep(this.toStepping(value));\r\n };\r\n\r\n /*\tEvery input option is tested and parsed. This'll prevent\r\n endless validation in internal methods. These tests are\r\n structured with an item for every option available. An\r\n option can be marked as required by setting the 'r' flag.\r\n The testing function is provided with three arguments:\r\n - The provided value for the option;\r\n - A reference to the options object;\r\n - The name for the option;\r\n\r\n The testing function returns false when an error is detected,\r\n or true when everything is OK. It can also modify the option\r\n object, to make sure all values can be correctly looped elsewhere. */\r\n\r\n var defaultFormatter = {\r\n to: function(value) {\r\n return value !== undefined && value.toFixed(2);\r\n },\r\n from: Number\r\n };\r\n\r\n function validateFormat(entry) {\r\n // Any object with a to and from method is supported.\r\n if (isValidFormatter(entry)) {\r\n return true;\r\n }\r\n\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'format' requires 'to' and 'from' methods.\");\r\n }\r\n\r\n function testStep(parsed, entry) {\r\n if (!isNumeric(entry)) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'step' is not numeric.\");\r\n }\r\n\r\n // The step option can still be used to set stepping\r\n // for linear sliders. Overwritten if set in 'range'.\r\n parsed.singleStep = entry;\r\n }\r\n\r\n function testRange(parsed, entry) {\r\n // Filter incorrect input.\r\n if (typeof entry !== \"object\" || Array.isArray(entry)) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'range' is not an object.\");\r\n }\r\n\r\n // Catch missing start or end.\r\n if (entry.min === undefined || entry.max === undefined) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): Missing 'min' or 'max' in 'range'.\");\r\n }\r\n\r\n // Catch equal start or end.\r\n if (entry.min === entry.max) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'range' 'min' and 'max' cannot be equal.\");\r\n }\r\n\r\n parsed.spectrum = new Spectrum(entry, parsed.snap, parsed.singleStep);\r\n }\r\n\r\n function testStart(parsed, entry) {\r\n entry = asArray(entry);\r\n\r\n // Validate input. Values aren't tested, as the public .val method\r\n // will always provide a valid location.\r\n if (!Array.isArray(entry) || !entry.length) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'start' option is incorrect.\");\r\n }\r\n\r\n // Store the number of handles.\r\n parsed.handles = entry.length;\r\n\r\n // When the slider is initialized, the .val method will\r\n // be called with the start options.\r\n parsed.start = entry;\r\n }\r\n\r\n function testSnap(parsed, entry) {\r\n // Enforce 100% stepping within subranges.\r\n parsed.snap = entry;\r\n\r\n if (typeof entry !== \"boolean\") {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'snap' option must be a boolean.\");\r\n }\r\n }\r\n\r\n function testAnimate(parsed, entry) {\r\n // Enforce 100% stepping within subranges.\r\n parsed.animate = entry;\r\n\r\n if (typeof entry !== \"boolean\") {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'animate' option must be a boolean.\");\r\n }\r\n }\r\n\r\n function testAnimationDuration(parsed, entry) {\r\n parsed.animationDuration = entry;\r\n\r\n if (typeof entry !== \"number\") {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'animationDuration' option must be a number.\");\r\n }\r\n }\r\n\r\n function testConnect(parsed, entry) {\r\n var connect = [false];\r\n var i;\r\n\r\n // Map legacy options\r\n if (entry === \"lower\") {\r\n entry = [true, false];\r\n } else if (entry === \"upper\") {\r\n entry = [false, true];\r\n }\r\n\r\n // Handle boolean options\r\n if (entry === true || entry === false) {\r\n for (i = 1; i < parsed.handles; i++) {\r\n connect.push(entry);\r\n }\r\n\r\n connect.push(false);\r\n }\r\n\r\n // Reject invalid input\r\n else if (!Array.isArray(entry) || !entry.length || entry.length !== parsed.handles + 1) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'connect' option doesn't match handle count.\");\r\n } else {\r\n connect = entry;\r\n }\r\n\r\n parsed.connect = connect;\r\n }\r\n\r\n function testOrientation(parsed, entry) {\r\n // Set orientation to an a numerical value for easy\r\n // array selection.\r\n switch (entry) {\r\n case \"horizontal\":\r\n parsed.ort = 0;\r\n break;\r\n case \"vertical\":\r\n parsed.ort = 1;\r\n break;\r\n default:\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'orientation' option is invalid.\");\r\n }\r\n }\r\n\r\n function testMargin(parsed, entry) {\r\n if (!isNumeric(entry)) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'margin' option must be numeric.\");\r\n }\r\n\r\n // Issue #582\r\n if (entry === 0) {\r\n return;\r\n }\r\n\r\n parsed.margin = parsed.spectrum.getMargin(entry);\r\n\r\n if (!parsed.margin) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'margin' option is only supported on linear sliders.\");\r\n }\r\n }\r\n\r\n function testLimit(parsed, entry) {\r\n if (!isNumeric(entry)) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'limit' option must be numeric.\");\r\n }\r\n\r\n parsed.limit = parsed.spectrum.getMargin(entry);\r\n\r\n if (!parsed.limit || parsed.handles < 2) {\r\n throw new Error(\r\n \"noUiSlider (\" +\r\n VERSION +\r\n \"): 'limit' option is only supported on linear sliders with 2 or more handles.\"\r\n );\r\n }\r\n }\r\n\r\n function testPadding(parsed, entry) {\r\n if (!isNumeric(entry) && !Array.isArray(entry)) {\r\n throw new Error(\r\n \"noUiSlider (\" + VERSION + \"): 'padding' option must be numeric or array of exactly 2 numbers.\"\r\n );\r\n }\r\n\r\n if (Array.isArray(entry) && !(entry.length === 2 || isNumeric(entry[0]) || isNumeric(entry[1]))) {\r\n throw new Error(\r\n \"noUiSlider (\" + VERSION + \"): 'padding' option must be numeric or array of exactly 2 numbers.\"\r\n );\r\n }\r\n\r\n if (entry === 0) {\r\n return;\r\n }\r\n\r\n if (!Array.isArray(entry)) {\r\n entry = [entry, entry];\r\n }\r\n\r\n // 'getMargin' returns false for invalid values.\r\n parsed.padding = [parsed.spectrum.getMargin(entry[0]), parsed.spectrum.getMargin(entry[1])];\r\n\r\n if (parsed.padding[0] === false || parsed.padding[1] === false) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option is only supported on linear sliders.\");\r\n }\r\n\r\n if (parsed.padding[0] < 0 || parsed.padding[1] < 0) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option must be a positive number(s).\");\r\n }\r\n\r\n if (parsed.padding[0] + parsed.padding[1] >= 100) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option must not exceed 100% of the range.\");\r\n }\r\n }\r\n\r\n function testDirection(parsed, entry) {\r\n // Set direction as a numerical value for easy parsing.\r\n // Invert connection for RTL sliders, so that the proper\r\n // handles get the connect/background classes.\r\n switch (entry) {\r\n case \"ltr\":\r\n parsed.dir = 0;\r\n break;\r\n case \"rtl\":\r\n parsed.dir = 1;\r\n break;\r\n default:\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'direction' option was not recognized.\");\r\n }\r\n }\r\n\r\n function testBehaviour(parsed, entry) {\r\n // Make sure the input is a string.\r\n if (typeof entry !== \"string\") {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'behaviour' must be a string containing options.\");\r\n }\r\n\r\n // Check if the string contains any keywords.\r\n // None are required.\r\n var tap = entry.indexOf(\"tap\") >= 0;\r\n var drag = entry.indexOf(\"drag\") >= 0;\r\n var fixed = entry.indexOf(\"fixed\") >= 0;\r\n var snap = entry.indexOf(\"snap\") >= 0;\r\n var hover = entry.indexOf(\"hover\") >= 0;\r\n var unconstrained = entry.indexOf(\"unconstrained\") >= 0;\r\n\r\n if (fixed) {\r\n if (parsed.handles !== 2) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'fixed' behaviour must be used with 2 handles\");\r\n }\r\n\r\n // Use margin to enforce fixed state\r\n testMargin(parsed, parsed.start[1] - parsed.start[0]);\r\n }\r\n\r\n if (unconstrained && (parsed.margin || parsed.limit)) {\r\n throw new Error(\r\n \"noUiSlider (\" + VERSION + \"): 'unconstrained' behaviour cannot be used with margin or limit\"\r\n );\r\n }\r\n\r\n parsed.events = {\r\n tap: tap || snap,\r\n drag: drag,\r\n fixed: fixed,\r\n snap: snap,\r\n hover: hover,\r\n unconstrained: unconstrained\r\n };\r\n }\r\n\r\n function testTooltips(parsed, entry) {\r\n if (entry === false) {\r\n return;\r\n }\r\n\r\n if (entry === true) {\r\n parsed.tooltips = [];\r\n\r\n for (var i = 0; i < parsed.handles; i++) {\r\n parsed.tooltips.push(true);\r\n }\r\n } else {\r\n parsed.tooltips = asArray(entry);\r\n\r\n if (parsed.tooltips.length !== parsed.handles) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): must pass a formatter for all handles.\");\r\n }\r\n\r\n parsed.tooltips.forEach(function(formatter) {\r\n if (\r\n typeof formatter !== \"boolean\" &&\r\n (typeof formatter !== \"object\" || typeof formatter.to !== \"function\")\r\n ) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'tooltips' must be passed a formatter or 'false'.\");\r\n }\r\n });\r\n }\r\n }\r\n\r\n function testAriaFormat(parsed, entry) {\r\n parsed.ariaFormat = entry;\r\n validateFormat(entry);\r\n }\r\n\r\n function testFormat(parsed, entry) {\r\n parsed.format = entry;\r\n validateFormat(entry);\r\n }\r\n\r\n function testKeyboardSupport(parsed, entry) {\r\n parsed.keyboardSupport = entry;\r\n\r\n if (typeof entry !== \"boolean\") {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'keyboardSupport' option must be a boolean.\");\r\n }\r\n }\r\n\r\n function testDocumentElement(parsed, entry) {\r\n // This is an advanced option. Passed values are used without validation.\r\n parsed.documentElement = entry;\r\n }\r\n\r\n function testCssPrefix(parsed, entry) {\r\n if (typeof entry !== \"string\" && entry !== false) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'cssPrefix' must be a string or `false`.\");\r\n }\r\n\r\n parsed.cssPrefix = entry;\r\n }\r\n\r\n function testCssClasses(parsed, entry) {\r\n if (typeof entry !== \"object\") {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'cssClasses' must be an object.\");\r\n }\r\n\r\n if (typeof parsed.cssPrefix === \"string\") {\r\n parsed.cssClasses = {};\r\n\r\n for (var key in entry) {\r\n if (!entry.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n\r\n parsed.cssClasses[key] = parsed.cssPrefix + entry[key];\r\n }\r\n } else {\r\n parsed.cssClasses = entry;\r\n }\r\n }\r\n\r\n // Test all developer settings and parse to assumption-safe values.\r\n function testOptions(options) {\r\n // To prove a fix for #537, freeze options here.\r\n // If the object is modified, an error will be thrown.\r\n // Object.freeze(options);\r\n\r\n var parsed = {\r\n margin: 0,\r\n limit: 0,\r\n padding: 0,\r\n animate: true,\r\n animationDuration: 300,\r\n ariaFormat: defaultFormatter,\r\n format: defaultFormatter\r\n };\r\n\r\n // Tests are executed in the order they are presented here.\r\n var tests = {\r\n step: { r: false, t: testStep },\r\n start: { r: true, t: testStart },\r\n connect: { r: true, t: testConnect },\r\n direction: { r: true, t: testDirection },\r\n snap: { r: false, t: testSnap },\r\n animate: { r: false, t: testAnimate },\r\n animationDuration: { r: false, t: testAnimationDuration },\r\n range: { r: true, t: testRange },\r\n orientation: { r: false, t: testOrientation },\r\n margin: { r: false, t: testMargin },\r\n limit: { r: false, t: testLimit },\r\n padding: { r: false, t: testPadding },\r\n behaviour: { r: true, t: testBehaviour },\r\n ariaFormat: { r: false, t: testAriaFormat },\r\n format: { r: false, t: testFormat },\r\n tooltips: { r: false, t: testTooltips },\r\n keyboardSupport: { r: true, t: testKeyboardSupport },\r\n documentElement: { r: false, t: testDocumentElement },\r\n cssPrefix: { r: true, t: testCssPrefix },\r\n cssClasses: { r: true, t: testCssClasses }\r\n };\r\n\r\n var defaults = {\r\n connect: false,\r\n direction: \"ltr\",\r\n behaviour: \"tap\",\r\n orientation: \"horizontal\",\r\n keyboardSupport: true,\r\n cssPrefix: \"noUi-\",\r\n cssClasses: {\r\n target: \"target\",\r\n base: \"base\",\r\n origin: \"origin\",\r\n handle: \"handle\",\r\n handleLower: \"handle-lower\",\r\n handleUpper: \"handle-upper\",\r\n horizontal: \"horizontal\",\r\n vertical: \"vertical\",\r\n background: \"background\",\r\n connect: \"connect\",\r\n connects: \"connects\",\r\n ltr: \"ltr\",\r\n rtl: \"rtl\",\r\n draggable: \"draggable\",\r\n drag: \"state-drag\",\r\n tap: \"state-tap\",\r\n active: \"active\",\r\n tooltip: \"tooltip\",\r\n pips: \"pips\",\r\n pipsHorizontal: \"pips-horizontal\",\r\n pipsVertical: \"pips-vertical\",\r\n marker: \"marker\",\r\n markerHorizontal: \"marker-horizontal\",\r\n markerVertical: \"marker-vertical\",\r\n markerNormal: \"marker-normal\",\r\n markerLarge: \"marker-large\",\r\n markerSub: \"marker-sub\",\r\n value: \"value\",\r\n valueHorizontal: \"value-horizontal\",\r\n valueVertical: \"value-vertical\",\r\n valueNormal: \"value-normal\",\r\n valueLarge: \"value-large\",\r\n valueSub: \"value-sub\"\r\n }\r\n };\r\n\r\n // AriaFormat defaults to regular format, if any.\r\n if (options.format && !options.ariaFormat) {\r\n options.ariaFormat = options.format;\r\n }\r\n\r\n // Run all options through a testing mechanism to ensure correct\r\n // input. It should be noted that options might get modified to\r\n // be handled properly. E.g. wrapping integers in arrays.\r\n Object.keys(tests).forEach(function(name) {\r\n // If the option isn't set, but it is required, throw an error.\r\n if (!isSet(options[name]) && defaults[name] === undefined) {\r\n if (tests[name].r) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): '\" + name + \"' is required.\");\r\n }\r\n\r\n return true;\r\n }\r\n\r\n tests[name].t(parsed, !isSet(options[name]) ? defaults[name] : options[name]);\r\n });\r\n\r\n // Forward pips options\r\n parsed.pips = options.pips;\r\n\r\n // All recent browsers accept unprefixed transform.\r\n // We need -ms- for IE9 and -webkit- for older Android;\r\n // Assume use of -webkit- if unprefixed and -ms- are not supported.\r\n // https://caniuse.com/#feat=transforms2d\r\n var d = document.createElement(\"div\");\r\n var msPrefix = d.style.msTransform !== undefined;\r\n var noPrefix = d.style.transform !== undefined;\r\n\r\n parsed.transformRule = noPrefix ? \"transform\" : msPrefix ? \"msTransform\" : \"webkitTransform\";\r\n\r\n // Pips don't move, so we can place them using left/top.\r\n var styles = [[\"left\", \"top\"], [\"right\", \"bottom\"]];\r\n\r\n parsed.style = styles[parsed.dir][parsed.ort];\r\n\r\n return parsed;\r\n }\r\n\r\n function scope(target, options, originalOptions) {\r\n var actions = getActions();\r\n var supportsTouchActionNone = getSupportsTouchActionNone();\r\n var supportsPassive = supportsTouchActionNone && getSupportsPassive();\r\n\r\n // All variables local to 'scope' are prefixed with 'scope_'\r\n var scope_Target = target;\r\n var scope_Locations = [];\r\n var scope_Base;\r\n var scope_Handles;\r\n var scope_HandleNumbers = [];\r\n var scope_ActiveHandlesCount = 0;\r\n var scope_Connects;\r\n var scope_Spectrum = options.spectrum;\r\n var scope_Values = [];\r\n var scope_Events = {};\r\n var scope_Self;\r\n var scope_Pips;\r\n var scope_Document = target.ownerDocument;\r\n var scope_DocumentElement = options.documentElement || scope_Document.documentElement;\r\n var scope_Body = scope_Document.body;\r\n\r\n // Pips constants\r\n var PIPS_NONE = -1;\r\n var PIPS_NO_VALUE = 0;\r\n var PIPS_LARGE_VALUE = 1;\r\n var PIPS_SMALL_VALUE = 2;\r\n\r\n // For horizontal sliders in standard ltr documents,\r\n // make .noUi-origin overflow to the left so the document doesn't scroll.\r\n var scope_DirOffset = scope_Document.dir === \"rtl\" || options.ort === 1 ? 0 : 100;\r\n\r\n // Creates a node, adds it to target, returns the new node.\r\n function addNodeTo(addTarget, className) {\r\n var div = scope_Document.createElement(\"div\");\r\n\r\n if (className) {\r\n addClass(div, className);\r\n }\r\n\r\n addTarget.appendChild(div);\r\n\r\n return div;\r\n }\r\n\r\n // Append a origin to the base\r\n function addOrigin(base, handleNumber) {\r\n var origin = addNodeTo(base, options.cssClasses.origin);\r\n var handle = addNodeTo(origin, options.cssClasses.handle);\r\n\r\n handle.setAttribute(\"data-handle\", handleNumber);\r\n\r\n if (options.keyboardSupport) {\r\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex\r\n // 0 = focusable and reachable\r\n handle.setAttribute(\"tabindex\", \"0\");\r\n }\r\n\r\n handle.setAttribute(\"role\", \"slider\");\r\n handle.setAttribute(\"aria-orientation\", options.ort ? \"vertical\" : \"horizontal\");\r\n\r\n if (handleNumber === 0) {\r\n addClass(handle, options.cssClasses.handleLower);\r\n } else if (handleNumber === options.handles - 1) {\r\n addClass(handle, options.cssClasses.handleUpper);\r\n }\r\n\r\n return origin;\r\n }\r\n\r\n // Insert nodes for connect elements\r\n function addConnect(base, add) {\r\n if (!add) {\r\n return false;\r\n }\r\n\r\n return addNodeTo(base, options.cssClasses.connect);\r\n }\r\n\r\n // Add handles to the slider base.\r\n function addElements(connectOptions, base) {\r\n var connectBase = addNodeTo(base, options.cssClasses.connects);\r\n\r\n scope_Handles = [];\r\n scope_Connects = [];\r\n\r\n scope_Connects.push(addConnect(connectBase, connectOptions[0]));\r\n\r\n // [::::O====O====O====]\r\n // connectOptions = [0, 1, 1, 1]\r\n\r\n for (var i = 0; i < options.handles; i++) {\r\n // Keep a list of all added handles.\r\n scope_Handles.push(addOrigin(base, i));\r\n scope_HandleNumbers[i] = i;\r\n scope_Connects.push(addConnect(connectBase, connectOptions[i + 1]));\r\n }\r\n }\r\n\r\n // Initialize a single slider.\r\n function addSlider(addTarget) {\r\n // Apply classes and data to the target.\r\n addClass(addTarget, options.cssClasses.target);\r\n\r\n if (options.dir === 0) {\r\n addClass(addTarget, options.cssClasses.ltr);\r\n } else {\r\n addClass(addTarget, options.cssClasses.rtl);\r\n }\r\n\r\n if (options.ort === 0) {\r\n addClass(addTarget, options.cssClasses.horizontal);\r\n } else {\r\n addClass(addTarget, options.cssClasses.vertical);\r\n }\r\n\r\n return addNodeTo(addTarget, options.cssClasses.base);\r\n }\r\n\r\n function addTooltip(handle, handleNumber) {\r\n if (!options.tooltips[handleNumber]) {\r\n return false;\r\n }\r\n\r\n return addNodeTo(handle.firstChild, options.cssClasses.tooltip);\r\n }\r\n\r\n // The tooltips option is a shorthand for using the 'update' event.\r\n function tooltips() {\r\n // Tooltips are added with options.tooltips in original order.\r\n var tips = scope_Handles.map(addTooltip);\r\n\r\n bindEvent(\"update\", function(values, handleNumber, unencoded) {\r\n if (!tips[handleNumber]) {\r\n return;\r\n }\r\n\r\n var formattedValue = values[handleNumber];\r\n\r\n if (options.tooltips[handleNumber] !== true) {\r\n formattedValue = options.tooltips[handleNumber].to(unencoded[handleNumber]);\r\n }\r\n\r\n tips[handleNumber].innerHTML = formattedValue;\r\n });\r\n }\r\n\r\n function aria() {\r\n bindEvent(\"update\", function(values, handleNumber, unencoded, tap, positions) {\r\n // Update Aria Values for all handles, as a change in one changes min and max values for the next.\r\n scope_HandleNumbers.forEach(function(index) {\r\n var handle = scope_Handles[index];\r\n\r\n var min = checkHandlePosition(scope_Locations, index, 0, true, true, true);\r\n var max = checkHandlePosition(scope_Locations, index, 100, true, true, true);\r\n\r\n var now = positions[index];\r\n\r\n // Formatted value for display\r\n var text = options.ariaFormat.to(unencoded[index]);\r\n\r\n // Map to slider range values\r\n min = scope_Spectrum.fromStepping(min).toFixed(1);\r\n max = scope_Spectrum.fromStepping(max).toFixed(1);\r\n now = scope_Spectrum.fromStepping(now).toFixed(1);\r\n\r\n handle.children[0].setAttribute(\"aria-valuemin\", min);\r\n handle.children[0].setAttribute(\"aria-valuemax\", max);\r\n handle.children[0].setAttribute(\"aria-valuenow\", now);\r\n handle.children[0].setAttribute(\"aria-valuetext\", text);\r\n });\r\n });\r\n }\r\n\r\n function getGroup(mode, values, stepped) {\r\n // Use the range.\r\n if (mode === \"range\" || mode === \"steps\") {\r\n return scope_Spectrum.xVal;\r\n }\r\n\r\n if (mode === \"count\") {\r\n if (values < 2) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'values' (>= 2) required for mode 'count'.\");\r\n }\r\n\r\n // Divide 0 - 100 in 'count' parts.\r\n var interval = values - 1;\r\n var spread = 100 / interval;\r\n\r\n values = [];\r\n\r\n // List these parts and have them handled as 'positions'.\r\n while (interval--) {\r\n values[interval] = interval * spread;\r\n }\r\n\r\n values.push(100);\r\n\r\n mode = \"positions\";\r\n }\r\n\r\n if (mode === \"positions\") {\r\n // Map all percentages to on-range values.\r\n return values.map(function(value) {\r\n return scope_Spectrum.fromStepping(stepped ? scope_Spectrum.getStep(value) : value);\r\n });\r\n }\r\n\r\n if (mode === \"values\") {\r\n // If the value must be stepped, it needs to be converted to a percentage first.\r\n if (stepped) {\r\n return values.map(function(value) {\r\n // Convert to percentage, apply step, return to value.\r\n return scope_Spectrum.fromStepping(scope_Spectrum.getStep(scope_Spectrum.toStepping(value)));\r\n });\r\n }\r\n\r\n // Otherwise, we can simply use the values.\r\n return values;\r\n }\r\n }\r\n\r\n function generateSpread(density, mode, group) {\r\n function safeIncrement(value, increment) {\r\n // Avoid floating point variance by dropping the smallest decimal places.\r\n return (value + increment).toFixed(7) / 1;\r\n }\r\n\r\n var indexes = {};\r\n var firstInRange = scope_Spectrum.xVal[0];\r\n var lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length - 1];\r\n var ignoreFirst = false;\r\n var ignoreLast = false;\r\n var prevPct = 0;\r\n\r\n // Create a copy of the group, sort it and filter away all duplicates.\r\n group = unique(\r\n group.slice().sort(function(a, b) {\r\n return a - b;\r\n })\r\n );\r\n\r\n // Make sure the range starts with the first element.\r\n if (group[0] !== firstInRange) {\r\n group.unshift(firstInRange);\r\n ignoreFirst = true;\r\n }\r\n\r\n // Likewise for the last one.\r\n if (group[group.length - 1] !== lastInRange) {\r\n group.push(lastInRange);\r\n ignoreLast = true;\r\n }\r\n\r\n group.forEach(function(current, index) {\r\n // Get the current step and the lower + upper positions.\r\n var step;\r\n var i;\r\n var q;\r\n var low = current;\r\n var high = group[index + 1];\r\n var newPct;\r\n var pctDifference;\r\n var pctPos;\r\n var type;\r\n var steps;\r\n var realSteps;\r\n var stepSize;\r\n var isSteps = mode === \"steps\";\r\n\r\n // When using 'steps' mode, use the provided steps.\r\n // Otherwise, we'll step on to the next subrange.\r\n if (isSteps) {\r\n step = scope_Spectrum.xNumSteps[index];\r\n }\r\n\r\n // Default to a 'full' step.\r\n if (!step) {\r\n step = high - low;\r\n }\r\n\r\n // Low can be 0, so test for false. If high is undefined,\r\n // we are at the last subrange. Index 0 is already handled.\r\n if (low === false || high === undefined) {\r\n return;\r\n }\r\n\r\n // Make sure step isn't 0, which would cause an infinite loop (#654)\r\n step = Math.max(step, 0.0000001);\r\n\r\n // Find all steps in the subrange.\r\n for (i = low; i <= high; i = safeIncrement(i, step)) {\r\n // Get the percentage value for the current step,\r\n // calculate the size for the subrange.\r\n newPct = scope_Spectrum.toStepping(i);\r\n pctDifference = newPct - prevPct;\r\n\r\n steps = pctDifference / density;\r\n realSteps = Math.round(steps);\r\n\r\n // This ratio represents the amount of percentage-space a point indicates.\r\n // For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-divided.\r\n // Round the percentage offset to an even number, then divide by two\r\n // to spread the offset on both sides of the range.\r\n stepSize = pctDifference / realSteps;\r\n\r\n // Divide all points evenly, adding the correct number to this subrange.\r\n // Run up to <= so that 100% gets a point, event if ignoreLast is set.\r\n for (q = 1; q <= realSteps; q += 1) {\r\n // The ratio between the rounded value and the actual size might be ~1% off.\r\n // Correct the percentage offset by the number of points\r\n // per subrange. density = 1 will result in 100 points on the\r\n // full range, 2 for 50, 4 for 25, etc.\r\n pctPos = prevPct + q * stepSize;\r\n indexes[pctPos.toFixed(5)] = [scope_Spectrum.fromStepping(pctPos), 0];\r\n }\r\n\r\n // Determine the point type.\r\n type = group.indexOf(i) > -1 ? PIPS_LARGE_VALUE : isSteps ? PIPS_SMALL_VALUE : PIPS_NO_VALUE;\r\n\r\n // Enforce the 'ignoreFirst' option by overwriting the type for 0.\r\n if (!index && ignoreFirst) {\r\n type = 0;\r\n }\r\n\r\n if (!(i === high && ignoreLast)) {\r\n // Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value.\r\n indexes[newPct.toFixed(5)] = [i, type];\r\n }\r\n\r\n // Update the percentage count.\r\n prevPct = newPct;\r\n }\r\n });\r\n\r\n return indexes;\r\n }\r\n\r\n function addMarking(spread, filterFunc, formatter) {\r\n var element = scope_Document.createElement(\"div\");\r\n\r\n var valueSizeClasses = [];\r\n valueSizeClasses[PIPS_NO_VALUE] = options.cssClasses.valueNormal;\r\n valueSizeClasses[PIPS_LARGE_VALUE] = options.cssClasses.valueLarge;\r\n valueSizeClasses[PIPS_SMALL_VALUE] = options.cssClasses.valueSub;\r\n\r\n var markerSizeClasses = [];\r\n markerSizeClasses[PIPS_NO_VALUE] = options.cssClasses.markerNormal;\r\n markerSizeClasses[PIPS_LARGE_VALUE] = options.cssClasses.markerLarge;\r\n markerSizeClasses[PIPS_SMALL_VALUE] = options.cssClasses.markerSub;\r\n\r\n var valueOrientationClasses = [options.cssClasses.valueHorizontal, options.cssClasses.valueVertical];\r\n var markerOrientationClasses = [options.cssClasses.markerHorizontal, options.cssClasses.markerVertical];\r\n\r\n addClass(element, options.cssClasses.pips);\r\n addClass(element, options.ort === 0 ? options.cssClasses.pipsHorizontal : options.cssClasses.pipsVertical);\r\n\r\n function getClasses(type, source) {\r\n var a = source === options.cssClasses.value;\r\n var orientationClasses = a ? valueOrientationClasses : markerOrientationClasses;\r\n var sizeClasses = a ? valueSizeClasses : markerSizeClasses;\r\n\r\n return source + \" \" + orientationClasses[options.ort] + \" \" + sizeClasses[type];\r\n }\r\n\r\n function addSpread(offset, value, type) {\r\n // Apply the filter function, if it is set.\r\n type = filterFunc ? filterFunc(value, type) : type;\r\n\r\n if (type === PIPS_NONE) {\r\n return;\r\n }\r\n\r\n // Add a marker for every point\r\n var node = addNodeTo(element, false);\r\n node.className = getClasses(type, options.cssClasses.marker);\r\n node.style[options.style] = offset + \"%\";\r\n\r\n // Values are only appended for points marked '1' or '2'.\r\n if (type > PIPS_NO_VALUE) {\r\n node = addNodeTo(element, false);\r\n node.className = getClasses(type, options.cssClasses.value);\r\n node.setAttribute(\"data-value\", value);\r\n node.style[options.style] = offset + \"%\";\r\n node.innerHTML = formatter.to(value);\r\n }\r\n }\r\n\r\n // Append all points.\r\n Object.keys(spread).forEach(function(offset) {\r\n addSpread(offset, spread[offset][0], spread[offset][1]);\r\n });\r\n\r\n return element;\r\n }\r\n\r\n function removePips() {\r\n if (scope_Pips) {\r\n removeElement(scope_Pips);\r\n scope_Pips = null;\r\n }\r\n }\r\n\r\n function pips(grid) {\r\n // Fix #669\r\n removePips();\r\n\r\n var mode = grid.mode;\r\n var density = grid.density || 1;\r\n var filter = grid.filter || false;\r\n var values = grid.values || false;\r\n var stepped = grid.stepped || false;\r\n var group = getGroup(mode, values, stepped);\r\n var spread = generateSpread(density, mode, group);\r\n var format = grid.format || {\r\n to: Math.round\r\n };\r\n\r\n scope_Pips = scope_Target.appendChild(addMarking(spread, filter, format));\r\n\r\n return scope_Pips;\r\n }\r\n\r\n // Shorthand for base dimensions.\r\n function baseSize() {\r\n var rect = scope_Base.getBoundingClientRect();\r\n var alt = \"offset\" + [\"Width\", \"Height\"][options.ort];\r\n return options.ort === 0 ? rect.width || scope_Base[alt] : rect.height || scope_Base[alt];\r\n }\r\n\r\n // Handler for attaching events trough a proxy.\r\n function attachEvent(events, element, callback, data) {\r\n // This function can be used to 'filter' events to the slider.\r\n // element is a node, not a nodeList\r\n\r\n var method = function(e) {\r\n e = fixEvent(e, data.pageOffset, data.target || element);\r\n\r\n // fixEvent returns false if this event has a different target\r\n // when handling (multi-) touch events;\r\n if (!e) {\r\n return false;\r\n }\r\n\r\n // doNotReject is passed by all end events to make sure released touches\r\n // are not rejected, leaving the slider \"stuck\" to the cursor;\r\n if (scope_Target.hasAttribute(\"disabled\") && !data.doNotReject) {\r\n return false;\r\n }\r\n\r\n // Stop if an active 'tap' transition is taking place.\r\n if (hasClass(scope_Target, options.cssClasses.tap) && !data.doNotReject) {\r\n return false;\r\n }\r\n\r\n // Ignore right or middle clicks on start #454\r\n if (events === actions.start && e.buttons !== undefined && e.buttons > 1) {\r\n return false;\r\n }\r\n\r\n // Ignore right or middle clicks on start #454\r\n if (data.hover && e.buttons) {\r\n return false;\r\n }\r\n\r\n // 'supportsPassive' is only true if a browser also supports touch-action: none in CSS.\r\n // iOS safari does not, so it doesn't get to benefit from passive scrolling. iOS does support\r\n // touch-action: manipulation, but that allows panning, which breaks\r\n // sliders after zooming/on non-responsive pages.\r\n // See: https://bugs.webkit.org/show_bug.cgi?id=133112\r\n if (!supportsPassive) {\r\n e.preventDefault();\r\n }\r\n\r\n e.calcPoint = e.points[options.ort];\r\n\r\n // Call the event handler with the event [ and additional data ].\r\n callback(e, data);\r\n };\r\n\r\n var methods = [];\r\n\r\n // Bind a closure on the target for every event type.\r\n events.split(\" \").forEach(function(eventName) {\r\n element.addEventListener(eventName, method, supportsPassive ? { passive: true } : false);\r\n methods.push([eventName, method]);\r\n });\r\n\r\n return methods;\r\n }\r\n\r\n // Provide a clean event with standardized offset values.\r\n function fixEvent(e, pageOffset, eventTarget) {\r\n // Filter the event to register the type, which can be\r\n // touch, mouse or pointer. Offset changes need to be\r\n // made on an event specific basis.\r\n var touch = e.type.indexOf(\"touch\") === 0;\r\n var mouse = e.type.indexOf(\"mouse\") === 0;\r\n var pointer = e.type.indexOf(\"pointer\") === 0;\r\n\r\n var x;\r\n var y;\r\n\r\n // IE10 implemented pointer events with a prefix;\r\n if (e.type.indexOf(\"MSPointer\") === 0) {\r\n pointer = true;\r\n }\r\n\r\n // The only thing one handle should be concerned about is the touches that originated on top of it.\r\n if (touch) {\r\n // Returns true if a touch originated on the target.\r\n var isTouchOnTarget = function(checkTouch) {\r\n return checkTouch.target === eventTarget || eventTarget.contains(checkTouch.target);\r\n };\r\n\r\n // In the case of touchstart events, we need to make sure there is still no more than one\r\n // touch on the target so we look amongst all touches.\r\n if (e.type === \"touchstart\") {\r\n var targetTouches = Array.prototype.filter.call(e.touches, isTouchOnTarget);\r\n\r\n // Do not support more than one touch per handle.\r\n if (targetTouches.length > 1) {\r\n return false;\r\n }\r\n\r\n x = targetTouches[0].pageX;\r\n y = targetTouches[0].pageY;\r\n } else {\r\n // In the other cases, find on changedTouches is enough.\r\n var targetTouch = Array.prototype.find.call(e.changedTouches, isTouchOnTarget);\r\n\r\n // Cancel if the target touch has not moved.\r\n if (!targetTouch) {\r\n return false;\r\n }\r\n\r\n x = targetTouch.pageX;\r\n y = targetTouch.pageY;\r\n }\r\n }\r\n\r\n pageOffset = pageOffset || getPageOffset(scope_Document);\r\n\r\n if (mouse || pointer) {\r\n x = e.clientX + pageOffset.x;\r\n y = e.clientY + pageOffset.y;\r\n }\r\n\r\n e.pageOffset = pageOffset;\r\n e.points = [x, y];\r\n e.cursor = mouse || pointer; // Fix #435\r\n\r\n return e;\r\n }\r\n\r\n // Translate a coordinate in the document to a percentage on the slider\r\n function calcPointToPercentage(calcPoint) {\r\n var location = calcPoint - offset(scope_Base, options.ort);\r\n var proposal = (location * 100) / baseSize();\r\n\r\n // Clamp proposal between 0% and 100%\r\n // Out-of-bound coordinates may occur when .noUi-base pseudo-elements\r\n // are used (e.g. contained handles feature)\r\n proposal = limit(proposal);\r\n\r\n return options.dir ? 100 - proposal : proposal;\r\n }\r\n\r\n // Find handle closest to a certain percentage on the slider\r\n function getClosestHandle(proposal) {\r\n var closest = 100;\r\n var handleNumber = false;\r\n\r\n scope_Handles.forEach(function(handle, index) {\r\n // Disabled handles are ignored\r\n if (handle.hasAttribute(\"disabled\")) {\r\n return;\r\n }\r\n\r\n var pos = Math.abs(scope_Locations[index] - proposal);\r\n\r\n if (pos < closest || (pos === 100 && closest === 100)) {\r\n handleNumber = index;\r\n closest = pos;\r\n }\r\n });\r\n\r\n return handleNumber;\r\n }\r\n\r\n // Fire 'end' when a mouse or pen leaves the document.\r\n function documentLeave(event, data) {\r\n if (event.type === \"mouseout\" && event.target.nodeName === \"HTML\" && event.relatedTarget === null) {\r\n eventEnd(event, data);\r\n }\r\n }\r\n\r\n // Handle movement on document for handle and range drag.\r\n function eventMove(event, data) {\r\n // Fix #498\r\n // Check value of .buttons in 'start' to work around a bug in IE10 mobile (data.buttonsProperty).\r\n // https://connect.microsoft.com/IE/feedback/details/927005/mobile-ie10-windows-phone-buttons-property-of-pointermove-event-always-zero\r\n // IE9 has .buttons and .which zero on mousemove.\r\n // Firefox breaks the spec MDN defines.\r\n if (navigator.appVersion.indexOf(\"MSIE 9\") === -1 && event.buttons === 0 && data.buttonsProperty !== 0) {\r\n return eventEnd(event, data);\r\n }\r\n\r\n // Check if we are moving up or down\r\n var movement = (options.dir ? -1 : 1) * (event.calcPoint - data.startCalcPoint);\r\n\r\n // Convert the movement into a percentage of the slider width/height\r\n var proposal = (movement * 100) / data.baseSize;\r\n\r\n moveHandles(movement > 0, proposal, data.locations, data.handleNumbers);\r\n }\r\n\r\n // Unbind move events on document, call callbacks.\r\n function eventEnd(event, data) {\r\n // The handle is no longer active, so remove the class.\r\n if (data.handle) {\r\n removeClass(data.handle, options.cssClasses.active);\r\n scope_ActiveHandlesCount -= 1;\r\n }\r\n\r\n // Unbind the move and end events, which are added on 'start'.\r\n data.listeners.forEach(function(c) {\r\n scope_DocumentElement.removeEventListener(c[0], c[1]);\r\n });\r\n\r\n if (scope_ActiveHandlesCount === 0) {\r\n // Remove dragging class.\r\n removeClass(scope_Target, options.cssClasses.drag);\r\n setZindex();\r\n\r\n // Remove cursor styles and text-selection events bound to the body.\r\n if (event.cursor) {\r\n scope_Body.style.cursor = \"\";\r\n scope_Body.removeEventListener(\"selectstart\", preventDefault);\r\n }\r\n }\r\n\r\n data.handleNumbers.forEach(function(handleNumber) {\r\n fireEvent(\"change\", handleNumber);\r\n fireEvent(\"set\", handleNumber);\r\n fireEvent(\"end\", handleNumber);\r\n });\r\n }\r\n\r\n // Bind move events on document.\r\n function eventStart(event, data) {\r\n var handle;\r\n if (data.handleNumbers.length === 1) {\r\n var handleOrigin = scope_Handles[data.handleNumbers[0]];\r\n\r\n // Ignore 'disabled' handles\r\n if (handleOrigin.hasAttribute(\"disabled\")) {\r\n return false;\r\n }\r\n\r\n handle = handleOrigin.children[0];\r\n scope_ActiveHandlesCount += 1;\r\n\r\n // Mark the handle as 'active' so it can be styled.\r\n addClass(handle, options.cssClasses.active);\r\n }\r\n\r\n // A drag should never propagate up to the 'tap' event.\r\n event.stopPropagation();\r\n\r\n // Record the event listeners.\r\n var listeners = [];\r\n\r\n // Attach the move and end events.\r\n var moveEvent = attachEvent(actions.move, scope_DocumentElement, eventMove, {\r\n // The event target has changed so we need to propagate the original one so that we keep\r\n // relying on it to extract target touches.\r\n target: event.target,\r\n handle: handle,\r\n listeners: listeners,\r\n startCalcPoint: event.calcPoint,\r\n baseSize: baseSize(),\r\n pageOffset: event.pageOffset,\r\n handleNumbers: data.handleNumbers,\r\n buttonsProperty: event.buttons,\r\n locations: scope_Locations.slice()\r\n });\r\n\r\n var endEvent = attachEvent(actions.end, scope_DocumentElement, eventEnd, {\r\n target: event.target,\r\n handle: handle,\r\n listeners: listeners,\r\n doNotReject: true,\r\n handleNumbers: data.handleNumbers\r\n });\r\n\r\n var outEvent = attachEvent(\"mouseout\", scope_DocumentElement, documentLeave, {\r\n target: event.target,\r\n handle: handle,\r\n listeners: listeners,\r\n doNotReject: true,\r\n handleNumbers: data.handleNumbers\r\n });\r\n\r\n // We want to make sure we pushed the listeners in the listener list rather than creating\r\n // a new one as it has already been passed to the event handlers.\r\n listeners.push.apply(listeners, moveEvent.concat(endEvent, outEvent));\r\n\r\n // Text selection isn't an issue on touch devices,\r\n // so adding cursor styles can be skipped.\r\n if (event.cursor) {\r\n // Prevent the 'I' cursor and extend the range-drag cursor.\r\n scope_Body.style.cursor = getComputedStyle(event.target).cursor;\r\n\r\n // Mark the target with a dragging state.\r\n if (scope_Handles.length > 1) {\r\n addClass(scope_Target, options.cssClasses.drag);\r\n }\r\n\r\n // Prevent text selection when dragging the handles.\r\n // In noUiSlider <= 9.2.0, this was handled by calling preventDefault on mouse/touch start/move,\r\n // which is scroll blocking. The selectstart event is supported by FireFox starting from version 52,\r\n // meaning the only holdout is iOS Safari. This doesn't matter: text selection isn't triggered there.\r\n // The 'cursor' flag is false.\r\n // See: http://caniuse.com/#search=selectstart\r\n scope_Body.addEventListener(\"selectstart\", preventDefault, false);\r\n }\r\n\r\n data.handleNumbers.forEach(function(handleNumber) {\r\n fireEvent(\"start\", handleNumber);\r\n });\r\n }\r\n\r\n // Move closest handle to tapped location.\r\n function eventTap(event) {\r\n // The tap event shouldn't propagate up\r\n event.stopPropagation();\r\n\r\n var proposal = calcPointToPercentage(event.calcPoint);\r\n var handleNumber = getClosestHandle(proposal);\r\n\r\n // Tackle the case that all handles are 'disabled'.\r\n if (handleNumber === false) {\r\n return false;\r\n }\r\n\r\n // Flag the slider as it is now in a transitional state.\r\n // Transition takes a configurable amount of ms (default 300). Re-enable the slider after that.\r\n if (!options.events.snap) {\r\n addClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);\r\n }\r\n\r\n setHandle(handleNumber, proposal, true, true);\r\n\r\n setZindex();\r\n\r\n fireEvent(\"slide\", handleNumber, true);\r\n fireEvent(\"update\", handleNumber, true);\r\n fireEvent(\"change\", handleNumber, true);\r\n fireEvent(\"set\", handleNumber, true);\r\n\r\n if (options.events.snap) {\r\n eventStart(event, { handleNumbers: [handleNumber] });\r\n }\r\n }\r\n\r\n // Fires a 'hover' event for a hovered mouse/pen position.\r\n function eventHover(event) {\r\n var proposal = calcPointToPercentage(event.calcPoint);\r\n\r\n var to = scope_Spectrum.getStep(proposal);\r\n var value = scope_Spectrum.fromStepping(to);\r\n\r\n Object.keys(scope_Events).forEach(function(targetEvent) {\r\n if (\"hover\" === targetEvent.split(\".\")[0]) {\r\n scope_Events[targetEvent].forEach(function(callback) {\r\n callback.call(scope_Self, value);\r\n });\r\n }\r\n });\r\n }\r\n\r\n // Attach events to several slider parts.\r\n function bindSliderEvents(behaviour) {\r\n // Attach the standard drag event to the handles.\r\n if (!behaviour.fixed) {\r\n scope_Handles.forEach(function(handle, index) {\r\n // These events are only bound to the visual handle\r\n // element, not the 'real' origin element.\r\n attachEvent(actions.start, handle.children[0], eventStart, {\r\n handleNumbers: [index]\r\n });\r\n });\r\n }\r\n\r\n // Attach the tap event to the slider base.\r\n if (behaviour.tap) {\r\n attachEvent(actions.start, scope_Base, eventTap, {});\r\n }\r\n\r\n // Fire hover events\r\n if (behaviour.hover) {\r\n attachEvent(actions.move, scope_Base, eventHover, {\r\n hover: true\r\n });\r\n }\r\n\r\n // Make the range draggable.\r\n if (behaviour.drag) {\r\n scope_Connects.forEach(function(connect, index) {\r\n if (connect === false || index === 0 || index === scope_Connects.length - 1) {\r\n return;\r\n }\r\n\r\n var handleBefore = scope_Handles[index - 1];\r\n var handleAfter = scope_Handles[index];\r\n var eventHolders = [connect];\r\n\r\n addClass(connect, options.cssClasses.draggable);\r\n\r\n // When the range is fixed, the entire range can\r\n // be dragged by the handles. The handle in the first\r\n // origin will propagate the start event upward,\r\n // but it needs to be bound manually on the other.\r\n if (behaviour.fixed) {\r\n eventHolders.push(handleBefore.children[0]);\r\n eventHolders.push(handleAfter.children[0]);\r\n }\r\n\r\n eventHolders.forEach(function(eventHolder) {\r\n attachEvent(actions.start, eventHolder, eventStart, {\r\n handles: [handleBefore, handleAfter],\r\n handleNumbers: [index - 1, index]\r\n });\r\n });\r\n });\r\n }\r\n }\r\n\r\n // Attach an event to this slider, possibly including a namespace\r\n function bindEvent(namespacedEvent, callback) {\r\n scope_Events[namespacedEvent] = scope_Events[namespacedEvent] || [];\r\n scope_Events[namespacedEvent].push(callback);\r\n\r\n // If the event bound is 'update,' fire it immediately for all handles.\r\n if (namespacedEvent.split(\".\")[0] === \"update\") {\r\n scope_Handles.forEach(function(a, index) {\r\n fireEvent(\"update\", index);\r\n });\r\n }\r\n }\r\n\r\n // Undo attachment of event\r\n function removeEvent(namespacedEvent) {\r\n var event = namespacedEvent && namespacedEvent.split(\".\")[0];\r\n var namespace = event && namespacedEvent.substring(event.length);\r\n\r\n Object.keys(scope_Events).forEach(function(bind) {\r\n var tEvent = bind.split(\".\")[0];\r\n var tNamespace = bind.substring(tEvent.length);\r\n\r\n if ((!event || event === tEvent) && (!namespace || namespace === tNamespace)) {\r\n delete scope_Events[bind];\r\n }\r\n });\r\n }\r\n\r\n // External event handling\r\n function fireEvent(eventName, handleNumber, tap) {\r\n Object.keys(scope_Events).forEach(function(targetEvent) {\r\n var eventType = targetEvent.split(\".\")[0];\r\n\r\n if (eventName === eventType) {\r\n scope_Events[targetEvent].forEach(function(callback) {\r\n callback.call(\r\n // Use the slider public API as the scope ('this')\r\n scope_Self,\r\n // Return values as array, so arg_1[arg_2] is always valid.\r\n scope_Values.map(options.format.to),\r\n // Handle index, 0 or 1\r\n handleNumber,\r\n // Un-formatted slider values\r\n scope_Values.slice(),\r\n // Event is fired by tap, true or false\r\n tap || false,\r\n // Left offset of the handle, in relation to the slider\r\n scope_Locations.slice()\r\n );\r\n });\r\n }\r\n });\r\n }\r\n\r\n function toPct(pct) {\r\n return pct + \"%\";\r\n }\r\n\r\n // Split out the handle positioning logic so the Move event can use it, too\r\n function checkHandlePosition(reference, handleNumber, to, lookBackward, lookForward, getValue) {\r\n // For sliders with multiple handles, limit movement to the other handle.\r\n // Apply the margin option by adding it to the handle positions.\r\n if (scope_Handles.length > 1 && !options.events.unconstrained) {\r\n if (lookBackward && handleNumber > 0) {\r\n to = Math.max(to, reference[handleNumber - 1] + options.margin);\r\n }\r\n\r\n if (lookForward && handleNumber < scope_Handles.length - 1) {\r\n to = Math.min(to, reference[handleNumber + 1] - options.margin);\r\n }\r\n }\r\n\r\n // The limit option has the opposite effect, limiting handles to a\r\n // maximum distance from another. Limit must be > 0, as otherwise\r\n // handles would be unmovable.\r\n if (scope_Handles.length > 1 && options.limit) {\r\n if (lookBackward && handleNumber > 0) {\r\n to = Math.min(to, reference[handleNumber - 1] + options.limit);\r\n }\r\n\r\n if (lookForward && handleNumber < scope_Handles.length - 1) {\r\n to = Math.max(to, reference[handleNumber + 1] - options.limit);\r\n }\r\n }\r\n\r\n // The padding option keeps the handles a certain distance from the\r\n // edges of the slider. Padding must be > 0.\r\n if (options.padding) {\r\n if (handleNumber === 0) {\r\n to = Math.max(to, options.padding[0]);\r\n }\r\n\r\n if (handleNumber === scope_Handles.length - 1) {\r\n to = Math.min(to, 100 - options.padding[1]);\r\n }\r\n }\r\n\r\n to = scope_Spectrum.getStep(to);\r\n\r\n // Limit percentage to the 0 - 100 range\r\n to = limit(to);\r\n\r\n // Return false if handle can't move\r\n if (to === reference[handleNumber] && !getValue) {\r\n return false;\r\n }\r\n\r\n return to;\r\n }\r\n\r\n // Uses slider orientation to create CSS rules. a = base value;\r\n function inRuleOrder(v, a) {\r\n var o = options.ort;\r\n return (o ? a : v) + \", \" + (o ? v : a);\r\n }\r\n\r\n // Moves handle(s) by a percentage\r\n // (bool, % to move, [% where handle started, ...], [index in scope_Handles, ...])\r\n function moveHandles(upward, proposal, locations, handleNumbers) {\r\n var proposals = locations.slice();\r\n\r\n var b = [!upward, upward];\r\n var f = [upward, !upward];\r\n\r\n // Copy handleNumbers so we don't change the dataset\r\n handleNumbers = handleNumbers.slice();\r\n\r\n // Check to see which handle is 'leading'.\r\n // If that one can't move the second can't either.\r\n if (upward) {\r\n handleNumbers.reverse();\r\n }\r\n\r\n // Step 1: get the maximum percentage that any of the handles can move\r\n if (handleNumbers.length > 1) {\r\n handleNumbers.forEach(function(handleNumber, o) {\r\n var to = checkHandlePosition(\r\n proposals,\r\n handleNumber,\r\n proposals[handleNumber] + proposal,\r\n b[o],\r\n f[o],\r\n false\r\n );\r\n\r\n // Stop if one of the handles can't move.\r\n if (to === false) {\r\n proposal = 0;\r\n } else {\r\n proposal = to - proposals[handleNumber];\r\n proposals[handleNumber] = to;\r\n }\r\n });\r\n }\r\n\r\n // If using one handle, check backward AND forward\r\n else {\r\n b = f = [true];\r\n }\r\n\r\n var state = false;\r\n\r\n // Step 2: Try to set the handles with the found percentage\r\n handleNumbers.forEach(function(handleNumber, o) {\r\n state = setHandle(handleNumber, locations[handleNumber] + proposal, b[o], f[o]) || state;\r\n });\r\n\r\n // Step 3: If a handle moved, fire events\r\n if (state) {\r\n handleNumbers.forEach(function(handleNumber) {\r\n fireEvent(\"update\", handleNumber);\r\n fireEvent(\"slide\", handleNumber);\r\n });\r\n }\r\n }\r\n\r\n // Takes a base value and an offset. This offset is used for the connect bar size.\r\n // In the initial design for this feature, the origin element was 1% wide.\r\n // Unfortunately, a rounding bug in Chrome makes it impossible to implement this feature\r\n // in this manner: https://bugs.chromium.org/p/chromium/issues/detail?id=798223\r\n function transformDirection(a, b) {\r\n return options.dir ? 100 - a - b : a;\r\n }\r\n\r\n // Updates scope_Locations and scope_Values, updates visual state\r\n function updateHandlePosition(handleNumber, to) {\r\n // Update locations.\r\n scope_Locations[handleNumber] = to;\r\n\r\n // Convert the value to the slider stepping/range.\r\n scope_Values[handleNumber] = scope_Spectrum.fromStepping(to);\r\n\r\n var rule = \"translate(\" + inRuleOrder(toPct(transformDirection(to, 0) - scope_DirOffset), \"0\") + \")\";\r\n scope_Handles[handleNumber].style[options.transformRule] = rule;\r\n\r\n updateConnect(handleNumber);\r\n updateConnect(handleNumber + 1);\r\n }\r\n\r\n // Handles before the slider middle are stacked later = higher,\r\n // Handles after the middle later is lower\r\n // [[7] [8] .......... | .......... [5] [4]\r\n function setZindex() {\r\n scope_HandleNumbers.forEach(function(handleNumber) {\r\n var dir = scope_Locations[handleNumber] > 50 ? -1 : 1;\r\n var zIndex = 3 + (scope_Handles.length + dir * handleNumber);\r\n scope_Handles[handleNumber].style.zIndex = zIndex;\r\n });\r\n }\r\n\r\n // Test suggested values and apply margin, step.\r\n function setHandle(handleNumber, to, lookBackward, lookForward) {\r\n to = checkHandlePosition(scope_Locations, handleNumber, to, lookBackward, lookForward, false);\r\n\r\n if (to === false) {\r\n return false;\r\n }\r\n\r\n updateHandlePosition(handleNumber, to);\r\n\r\n return true;\r\n }\r\n\r\n // Updates style attribute for connect nodes\r\n function updateConnect(index) {\r\n // Skip connects set to false\r\n if (!scope_Connects[index]) {\r\n return;\r\n }\r\n\r\n var l = 0;\r\n var h = 100;\r\n\r\n if (index !== 0) {\r\n l = scope_Locations[index - 1];\r\n }\r\n\r\n if (index !== scope_Connects.length - 1) {\r\n h = scope_Locations[index];\r\n }\r\n\r\n // We use two rules:\r\n // 'translate' to change the left/top offset;\r\n // 'scale' to change the width of the element;\r\n // As the element has a width of 100%, a translation of 100% is equal to 100% of the parent (.noUi-base)\r\n var connectWidth = h - l;\r\n var translateRule = \"translate(\" + inRuleOrder(toPct(transformDirection(l, connectWidth)), \"0\") + \")\";\r\n var scaleRule = \"scale(\" + inRuleOrder(connectWidth / 100, \"1\") + \")\";\r\n\r\n scope_Connects[index].style[options.transformRule] = translateRule + \" \" + scaleRule;\r\n }\r\n\r\n // Parses value passed to .set method. Returns current value if not parse-able.\r\n function resolveToValue(to, handleNumber) {\r\n // Setting with null indicates an 'ignore'.\r\n // Inputting 'false' is invalid.\r\n if (to === null || to === false || to === undefined) {\r\n return scope_Locations[handleNumber];\r\n }\r\n\r\n // If a formatted number was passed, attempt to decode it.\r\n if (typeof to === \"number\") {\r\n to = String(to);\r\n }\r\n\r\n to = options.format.from(to);\r\n to = scope_Spectrum.toStepping(to);\r\n\r\n // If parsing the number failed, use the current value.\r\n if (to === false || isNaN(to)) {\r\n return scope_Locations[handleNumber];\r\n }\r\n\r\n return to;\r\n }\r\n\r\n // Set the slider value.\r\n function valueSet(input, fireSetEvent) {\r\n var values = asArray(input);\r\n var isInit = scope_Locations[0] === undefined;\r\n\r\n // Event fires by default\r\n fireSetEvent = fireSetEvent === undefined ? true : !!fireSetEvent;\r\n\r\n // Animation is optional.\r\n // Make sure the initial values were set before using animated placement.\r\n if (options.animate && !isInit) {\r\n addClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);\r\n }\r\n\r\n // First pass, without lookAhead but with lookBackward. Values are set from left to right.\r\n scope_HandleNumbers.forEach(function(handleNumber) {\r\n setHandle(handleNumber, resolveToValue(values[handleNumber], handleNumber), true, false);\r\n });\r\n\r\n // Second pass. Now that all base values are set, apply constraints\r\n scope_HandleNumbers.forEach(function(handleNumber) {\r\n setHandle(handleNumber, scope_Locations[handleNumber], true, true);\r\n });\r\n\r\n setZindex();\r\n\r\n scope_HandleNumbers.forEach(function(handleNumber) {\r\n fireEvent(\"update\", handleNumber);\r\n\r\n // Fire the event only for handles that received a new value, as per #579\r\n if (values[handleNumber] !== null && fireSetEvent) {\r\n fireEvent(\"set\", handleNumber);\r\n }\r\n });\r\n }\r\n\r\n // Reset slider to initial values\r\n function valueReset(fireSetEvent) {\r\n valueSet(options.start, fireSetEvent);\r\n }\r\n\r\n // Set value for a single handle\r\n function valueSetHandle(handleNumber, value, fireSetEvent) {\r\n var values = [];\r\n\r\n // Ensure numeric input\r\n handleNumber = Number(handleNumber);\r\n\r\n if (!(handleNumber >= 0 && handleNumber < scope_HandleNumbers.length)) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): invalid handle number, got: \" + handleNumber);\r\n }\r\n\r\n for (var i = 0; i < scope_HandleNumbers.length; i++) {\r\n values[i] = null;\r\n }\r\n\r\n values[handleNumber] = value;\r\n\r\n valueSet(values, fireSetEvent);\r\n }\r\n\r\n // Get the slider value.\r\n function valueGet() {\r\n var values = scope_Values.map(options.format.to);\r\n\r\n // If only one handle is used, return a single value.\r\n if (values.length === 1) {\r\n return values[0];\r\n }\r\n\r\n return values;\r\n }\r\n\r\n // Removes classes from the root and empties it.\r\n function destroy() {\r\n for (var key in options.cssClasses) {\r\n if (!options.cssClasses.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n removeClass(scope_Target, options.cssClasses[key]);\r\n }\r\n\r\n while (scope_Target.firstChild) {\r\n scope_Target.removeChild(scope_Target.firstChild);\r\n }\r\n\r\n delete scope_Target.noUiSlider;\r\n }\r\n\r\n // Get the current step size for the slider.\r\n function getCurrentStep() {\r\n // Check all locations, map them to their stepping point.\r\n // Get the step point, then find it in the input list.\r\n return scope_Locations.map(function(location, index) {\r\n var nearbySteps = scope_Spectrum.getNearbySteps(location);\r\n var value = scope_Values[index];\r\n var increment = nearbySteps.thisStep.step;\r\n var decrement = null;\r\n\r\n // If the next value in this step moves into the next step,\r\n // the increment is the start of the next step - the current value\r\n if (increment !== false) {\r\n if (value + increment > nearbySteps.stepAfter.startValue) {\r\n increment = nearbySteps.stepAfter.startValue - value;\r\n }\r\n }\r\n\r\n // If the value is beyond the starting point\r\n if (value > nearbySteps.thisStep.startValue) {\r\n decrement = nearbySteps.thisStep.step;\r\n } else if (nearbySteps.stepBefore.step === false) {\r\n decrement = false;\r\n }\r\n\r\n // If a handle is at the start of a step, it always steps back into the previous step first\r\n else {\r\n decrement = value - nearbySteps.stepBefore.highestStep;\r\n }\r\n\r\n // Now, if at the slider edges, there is not in/decrement\r\n if (location === 100) {\r\n increment = null;\r\n } else if (location === 0) {\r\n decrement = null;\r\n }\r\n\r\n // As per #391, the comparison for the decrement step can have some rounding issues.\r\n var stepDecimals = scope_Spectrum.countStepDecimals();\r\n\r\n // Round per #391\r\n if (increment !== null && increment !== false) {\r\n increment = Number(increment.toFixed(stepDecimals));\r\n }\r\n\r\n if (decrement !== null && decrement !== false) {\r\n decrement = Number(decrement.toFixed(stepDecimals));\r\n }\r\n\r\n return [decrement, increment];\r\n });\r\n }\r\n\r\n // Updateable: margin, limit, padding, step, range, animate, snap\r\n function updateOptions(optionsToUpdate, fireSetEvent) {\r\n // Spectrum is created using the range, snap, direction and step options.\r\n // 'snap' and 'step' can be updated.\r\n // If 'snap' and 'step' are not passed, they should remain unchanged.\r\n var v = valueGet();\r\n\r\n var updateAble = [\"margin\", \"limit\", \"padding\", \"range\", \"animate\", \"snap\", \"step\", \"format\"];\r\n\r\n // Only change options that we're actually passed to update.\r\n updateAble.forEach(function(name) {\r\n if (optionsToUpdate[name] !== undefined) {\r\n originalOptions[name] = optionsToUpdate[name];\r\n }\r\n });\r\n\r\n var newOptions = testOptions(originalOptions);\r\n\r\n // Load new options into the slider state\r\n updateAble.forEach(function(name) {\r\n if (optionsToUpdate[name] !== undefined) {\r\n options[name] = newOptions[name];\r\n }\r\n });\r\n\r\n scope_Spectrum = newOptions.spectrum;\r\n\r\n // Limit, margin and padding depend on the spectrum but are stored outside of it. (#677)\r\n options.margin = newOptions.margin;\r\n options.limit = newOptions.limit;\r\n options.padding = newOptions.padding;\r\n\r\n // Update pips, removes existing.\r\n if (options.pips) {\r\n pips(options.pips);\r\n }\r\n\r\n // Invalidate the current positioning so valueSet forces an update.\r\n scope_Locations = [];\r\n valueSet(optionsToUpdate.start || v, fireSetEvent);\r\n }\r\n\r\n // Create the base element, initialize HTML and set classes.\r\n // Add handles and connect elements.\r\n scope_Base = addSlider(scope_Target);\r\n addElements(options.connect, scope_Base);\r\n\r\n // Attach user events.\r\n bindSliderEvents(options.events);\r\n\r\n // Use the public value method to set the start values.\r\n valueSet(options.start);\r\n\r\n // noinspection JSUnusedGlobalSymbols\r\n scope_Self = {\r\n destroy: destroy,\r\n steps: getCurrentStep,\r\n on: bindEvent,\r\n off: removeEvent,\r\n get: valueGet,\r\n set: valueSet,\r\n setHandle: valueSetHandle,\r\n reset: valueReset,\r\n // Exposed for unit testing, don't use this in your application.\r\n __moveHandles: function(a, b, c) {\r\n moveHandles(a, b, scope_Locations, c);\r\n },\r\n options: originalOptions, // Issue #600, #678\r\n updateOptions: updateOptions,\r\n target: scope_Target, // Issue #597\r\n removePips: removePips,\r\n pips: pips // Issue #594\r\n };\r\n\r\n if (options.pips) {\r\n pips(options.pips);\r\n }\r\n\r\n if (options.tooltips) {\r\n tooltips();\r\n }\r\n\r\n aria();\r\n\r\n return scope_Self;\r\n }\r\n\r\n // Run the standard initializer\r\n function initialize(target, originalOptions) {\r\n if (!target || !target.nodeName) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): create requires a single element, got: \" + target);\r\n }\r\n\r\n // Throw an error if the slider was already initialized.\r\n if (target.noUiSlider) {\r\n throw new Error(\"noUiSlider (\" + VERSION + \"): Slider was already initialized.\");\r\n }\r\n\r\n // Test the options and create the slider environment;\r\n var options = testOptions(originalOptions, target);\r\n var api = scope(target, options, originalOptions);\r\n\r\n target.noUiSlider = api;\r\n\r\n return api;\r\n }\r\n\r\n // Use an object instead of a function for future expandability;\r\n return {\r\n // Exposed for unit testing, don't use this in your application.\r\n __spectrum: Spectrum,\r\n version: VERSION,\r\n create: initialize\r\n };\r\n});\r\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar objectKeys = require('object-keys');\nvar hasSymbols = require('has-symbols/shams')();\nvar callBound = require('call-bind/callBound');\nvar toObject = Object;\nvar $push = callBound('Array.prototype.push');\nvar $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');\nvar originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null;\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function assign(target, source1) {\n\tif (target == null) { throw new TypeError('target must be an object'); }\n\tvar to = toObject(target); // step 1\n\tif (arguments.length === 1) {\n\t\treturn to; // step 2\n\t}\n\tfor (var s = 1; s < arguments.length; ++s) {\n\t\tvar from = toObject(arguments[s]); // step 3.a.i\n\n\t\t// step 3.a.ii:\n\t\tvar keys = objectKeys(from);\n\t\tvar getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);\n\t\tif (getSymbols) {\n\t\t\tvar syms = getSymbols(from);\n\t\t\tfor (var j = 0; j < syms.length; ++j) {\n\t\t\t\tvar key = syms[j];\n\t\t\t\tif ($propIsEnumerable(from, key)) {\n\t\t\t\t\t$push(keys, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// step 3.a.iii:\n\t\tfor (var i = 0; i < keys.length; ++i) {\n\t\t\tvar nextKey = keys[i];\n\t\t\tif ($propIsEnumerable(from, nextKey)) { // step 3.a.iii.2\n\t\t\t\tvar propValue = from[nextKey]; // step 3.a.iii.2.a\n\t\t\t\tto[nextKey] = propValue; // step 3.a.iii.2.b\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to; // step 4\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar lacksProperEnumerationOrder = function () {\n\tif (!Object.assign) {\n\t\treturn false;\n\t}\n\t/*\n\t * v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n\t * note: this does not detect the bug unless there's 20 characters\n\t */\n\tvar str = 'abcdefghijklmnopqrst';\n\tvar letters = str.split('');\n\tvar map = {};\n\tfor (var i = 0; i < letters.length; ++i) {\n\t\tmap[letters[i]] = letters[i];\n\t}\n\tvar obj = Object.assign({}, map);\n\tvar actual = '';\n\tfor (var k in obj) {\n\t\tactual += k;\n\t}\n\treturn str !== actual;\n};\n\nvar assignHasPendingExceptions = function () {\n\tif (!Object.assign || !Object.preventExtensions) {\n\t\treturn false;\n\t}\n\t/*\n\t * Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t * which is 72% slower than our shim, and Firefox 40's native implementation.\n\t */\n\tvar thrower = Object.preventExtensions({ 1: 2 });\n\ttry {\n\t\tObject.assign(thrower, 'xy');\n\t} catch (e) {\n\t\treturn thrower[1] === 'y';\n\t}\n\treturn false;\n};\n\nmodule.exports = function getPolyfill() {\n\tif (!Object.assign) {\n\t\treturn implementation;\n\t}\n\tif (lacksProperEnumerationOrder()) {\n\t\treturn implementation;\n\t}\n\tif (assignHasPendingExceptions()) {\n\t\treturn implementation;\n\t}\n\treturn Object.assign;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","import promiseFinally from './finally';\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction isArray(x) {\n return Boolean(x && typeof x.length !== 'undefined');\n}\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n}\n\n/**\n * @constructor\n * @param {Function} fn\n */\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n /** @type {!number} */\n this._state = 0;\n /** @type {!boolean} */\n this._handled = false;\n /** @type {Promise|undefined} */\n this._value = undefined;\n /** @type {!Array} */\n this._deferreds = [];\n\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\n\n/**\n * @constructor\n */\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n // @ts-ignore\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.prototype['finally'] = promiseFinally;\n\nPromise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!isArray(arr)) {\n return reject(new TypeError('Promise.all accepts an array'));\n }\n\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!isArray(arr)) {\n return reject(new TypeError('Promise.race accepts an array'));\n }\n\n for (var i = 0, len = arr.length; i < len; i++) {\n Promise.resolve(arr[i]).then(resolve, reject);\n }\n });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n // @ts-ignore\n (typeof setImmediate === 'function' &&\n function(fn) {\n // @ts-ignore\n setImmediate(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\nexport default Promise;\n","/**\n * @this {Promise}\n */\nfunction finallyConstructor(callback) {\n var constructor = this.constructor;\n return this.then(\n function(value) {\n // @ts-ignore\n return constructor.resolve(callback()).then(function() {\n return value;\n });\n },\n function(reason) {\n // @ts-ignore\n return constructor.resolve(callback()).then(function() {\n // @ts-ignore\n return constructor.reject(reason);\n });\n }\n );\n}\n\nexport default finallyConstructor;\n","'use strict';\n\nvar Sister;\n\n/**\n* @link https://github.com/gajus/sister for the canonical source repository\n* @license https://github.com/gajus/sister/blob/master/LICENSE BSD 3-Clause\n*/\nSister = function () {\n var sister = {},\n events = {};\n\n /**\n * @name handler\n * @function\n * @param {Object} data Event data.\n */\n\n /**\n * @param {String} name Event name.\n * @param {handler} handler\n * @return {listener}\n */\n sister.on = function (name, handler) {\n var listener = {name: name, handler: handler};\n events[name] = events[name] || [];\n events[name].unshift(listener);\n return listener;\n };\n\n /**\n * @param {listener}\n */\n sister.off = function (listener) {\n var index = events[listener.name].indexOf(listener);\n\n if (index !== -1) {\n events[listener.name].splice(index, 1);\n }\n };\n\n /**\n * @param {String} name Event name.\n * @param {Object} data Event data.\n */\n sister.trigger = function (name, data) {\n var listeners = events[name],\n i;\n\n if (listeners) {\n i = listeners.length;\n while (i--) {\n listeners[i].handler(data);\n }\n }\n };\n\n return sister;\n};\n\nmodule.exports = Sister;\n","'use strict';\r\n\r\nvar extend = require('object-assign');\r\nvar q = require('component-query');\r\nvar doc = require('get-doc');\r\nvar cookie = require('cookie-cutter');\r\nvar ua = require('ua-parser-js');\r\n\r\n// IE < 11 doesn't support navigator language property.\r\n/* global navigator */\r\nvar userLangAttribute = navigator.language || navigator.userLanguage || navigator.browserLanguage;\r\nvar userLang = userLangAttribute.slice(-2) || 'us';\r\nvar root = doc && doc.documentElement;\r\n\r\n// platform dependent functionality\r\nvar mixins = {\r\n\tios: {\r\n\t\tappMeta: 'apple-itunes-app',\r\n\t\ticonRels: ['apple-touch-icon-precomposed', 'apple-touch-icon'],\r\n\t\tgetStoreLink: function () {\r\n\t\t\treturn 'https://itunes.apple.com/' + this.options.appStoreLanguage + '/app/id' + this.appId + \"?mt=8\";\r\n\t\t}\r\n\t},\r\n\tandroid: {\r\n\t\tappMeta: 'google-play-app',\r\n\t\ticonRels: ['android-touch-icon', 'apple-touch-icon-precomposed', 'apple-touch-icon'],\r\n\t\tgetStoreLink: function () {\r\n\t\t\treturn 'http://play.google.com/store/apps/details?id=' + this.appId;\r\n\t\t}\r\n\t},\r\n\twindows: {\r\n\t\tappMeta: 'msApplication-ID',\r\n\t\ticonRels: ['windows-touch-icon', 'apple-touch-icon-precomposed', 'apple-touch-icon'],\r\n\t\tgetStoreLink: function () {\r\n\t\t\treturn 'http://www.windowsphone.com/s?appid=' + this.appId;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nvar SmartBanner = function (options) {\r\n\tvar agent = ua(navigator.userAgent);\r\n\tthis.options = extend({}, {\r\n\t\tdaysHidden: 15,\r\n\t\tdaysReminder: 90,\r\n\t\tappStoreLanguage: userLang, // Language code for App Store\r\n\t\tbutton: 'OPEN', // Text for the install button\r\n\t\tstore: {\r\n\t\t\tios: 'On the App Store',\r\n\t\t\tandroid: 'In Google Play',\r\n\t\t\twindows: 'In the Windows Store'\r\n\t\t},\r\n\t\tprice: {\r\n\t\t\tios: 'FREE',\r\n\t\t\tandroid: 'FREE',\r\n\t\t\twindows: 'FREE'\r\n\t\t},\r\n\t\ttheme: '', // put platform type ('ios', 'android', etc.) here to force single theme on all device\r\n\t\ticon: '', // full path to icon image if not using website icon image\r\n\t\tforce: '', // put platform type ('ios', 'android', etc.) here for emulation\r\n\r\n\t}, options || {});\r\n\r\n\tif (this.options.force) {\r\n\t\tthis.type = this.options.force;\r\n\t} else if (agent.os.name === 'Windows Phone' || agent.os.name === 'Windows Mobile') {\r\n\t\tthis.type = 'windows';\r\n\t} else if (agent.os.name === 'iOS') {\r\n\t\tthis.type = 'ios';\r\n\t} else if (agent.os.name === 'Android') {\r\n\t\tthis.type = 'android';\r\n\t}\r\n\r\n\t// Don't show banner on ANY of the following conditions:\r\n\t// - device os is not supported,\r\n\t// - user is on mobile safari for ios 6 or greater (iOS >= 6 has native support for SmartAppBanner)\r\n\t// - running on standalone mode\r\n\t// - user dismissed banner\r\n\tvar unsupported = !this.type || !this.options.store[this.type];\r\n\tif (unsupported) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tthis.appMeta = mixins[this.type].appMeta;\r\n\tthis.parseAppId();\r\n\r\n\tvar isMobileSafari = (this.type === 'ios' && agent.browser.name === 'Mobile Safari' && parseInt(agent.os.version, 10) >= 6);\r\n\r\n\tvar runningStandAlone = navigator.standalone;\r\n\tvar userDismissed = cookie.get(this.appId + '-smartbanner-closed');\r\n\tvar userInstalled = cookie.get(this.appId + '-smartbanner-installed');\r\n\r\n\tif (isMobileSafari || runningStandAlone || userDismissed || userInstalled) {\r\n\t\treturn;\r\n\t}\r\n\r\n\textend(this, mixins[this.type]);\r\n\r\n\t// - If we dont have app id in meta, dont display the banner\r\n\t// - If opened in safari IOS, dont display the banner\r\n\tif (!this.appId && agent.os.name === 'IOS' && agent.browser.name === 'Safari') {\r\n\t\treturn;\r\n\t}\r\n\r\n\tthis.create();\r\n\tthis.show();\r\n};\r\n\r\nSmartBanner.prototype = {\r\n\tconstructor: SmartBanner,\r\n\r\n\tcreate: function () {\r\n\t\tvar link = this.getStoreLink();\r\n\t\tvar inStore = this.options.price[this.type] + ' - ' + this.options.store[this.type];\r\n\t\tvar icon;\r\n\r\n\t\tif (this.options.icon) {\r\n\t\t\ticon = this.options.icon;\r\n\t\t} else {\r\n\t\t\tfor (var i = 0; i < this.iconRels.length; i++) {\r\n\t\t\t\tvar rel = q('link[rel=\"' + this.iconRels[i] + '\"]');\r\n\r\n\t\t\t\tif (rel) {\r\n\t\t\t\t\ticon = rel.getAttribute('href');\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar sb = doc.createElement('div');\r\n\t\tvar theme = this.options.theme || this.type;\r\n\r\n\t\tsb.className = 'smartbanner smartbanner-' + theme;\r\n\t\tsb.innerHTML = '
' +\r\n\t\t\t\t\t\t\t'×' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'
' +\r\n\t\t\t\t\t\t\t\t'
' + this.options.title + '
' +\r\n\t\t\t\t\t\t\t\t'
' + this.options.author + '
' +\r\n\t\t\t\t\t\t\t\t'' + inStore + '' +\r\n\t\t\t\t\t\t\t'
' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t\t'' + this.options.button + '' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'
';\r\n\r\n\t\t// there isn’t neccessary a body\r\n\t\tif (doc.body) {\r\n\t\t\tdoc.body.appendChild(sb);\r\n\t\t}\t\telse if (doc) {\r\n\t\t\tdoc.addEventListener('DOMContentLoaded', function () {\r\n\t\t\t\tdoc.body.appendChild(sb);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tq('.smartbanner-button', sb).addEventListener('click', this.install.bind(this), false);\r\n\t\tq('.smartbanner-close', sb).addEventListener('click', this.close.bind(this), false);\r\n\t},\r\n\thide: function () {\r\n\t\troot.classList.remove('smartbanner-show');\r\n\r\n\t\tif (typeof this.options.close === 'function') {\r\n\t\t\treturn this.options.close();\r\n\t\t}\r\n\t},\r\n\tshow: function () {\r\n\t\troot.classList.add('smartbanner-show');\r\n\t\tif (typeof this.options.show === 'function') {\r\n\t\t\treturn this.options.show();\r\n\t\t}\r\n\t},\r\n\tclose: function () {\r\n\t\tthis.hide();\r\n\t\tcookie.set(this.appId + '-smartbanner-closed', 'true', {\r\n\t\t\tpath: '/',\r\n\t\t\texpires: new Date(Number(new Date()) + (this.options.daysHidden * 1000 * 60 * 60 * 24))\r\n\t\t});\r\n\t\tif (typeof this.options.close === 'function') {\r\n\t\t\treturn this.options.close();\r\n\t\t}\r\n\t},\r\n\tinstall: function () {\r\n\t\tthis.hide();\r\n\t\tcookie.set(this.appId + '-smartbanner-installed', 'true', {\r\n\t\t\tpath: '/',\r\n\t\t\texpires: new Date(Number(new Date()) + (this.options.daysReminder * 1000 * 60 * 60 * 24))\r\n\t\t});\r\n\t\tif (typeof this.options.close === 'function') {\r\n\t\t\treturn this.options.close();\r\n\t\t}\r\n\t},\r\n\tparseAppId: function () {\r\n\t\tvar meta = q('meta[name=\"' + this.appMeta + '\"]');\r\n\t\tif (!meta) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.type === 'windows') {\r\n\t\t\tthis.appId = meta.getAttribute('content');\r\n\t\t} else {\r\n\t\t\tthis.appId = /app-id=([^\\s,]+)/.exec(meta.getAttribute('content'))[1];\r\n\t\t}\r\n\r\n\t\treturn this.appId;\r\n\t}\r\n};\r\n\r\nmodule.exports = SmartBanner;\r\n","var win = window;\n\nexport var raf = win.requestAnimationFrame\n || win.webkitRequestAnimationFrame\n || win.mozRequestAnimationFrame\n || win.msRequestAnimationFrame\n || function(cb) { return setTimeout(cb, 16); };\n","var win = window;\n\nexport var caf = win.cancelAnimationFrame\n || win.mozCancelAnimationFrame\n || function(id){ clearTimeout(id); };\n","export function extend() {\n var obj, name, copy,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length;\n\n for (; i < length; i++) {\n if ((obj = arguments[i]) !== null) {\n for (name in obj) {\n copy = obj[name];\n\n if (target === copy) {\n continue;\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n}","export function checkStorageValue (value) {\n return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\n}","export function setLocalStorage(storage, key, value, access) {\n if (access) {\n try { storage.setItem(key, value); } catch (e) {}\n }\n return value;\n}","export function getBody () {\n var doc = document,\n body = doc.body;\n\n if (!body) {\n body = doc.createElement('body');\n body.fake = true;\n }\n\n return body;\n}","export var docElement = document.documentElement;","import { docElement } from './docElement.js';\n\nexport function setFakeBody (body) {\n var docOverflow = '';\n if (body.fake) {\n docOverflow = docElement.style.overflow;\n //avoid crashing IE8, if background image is used\n body.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n body.style.overflow = docElement.style.overflow = 'hidden';\n docElement.appendChild(body);\n }\n\n return docOverflow;\n}","import { docElement } from './docElement.js';\n\nexport function resetFakeBody (body, docOverflow) {\n if (body.fake) {\n body.remove();\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n // eslint-disable-next-line\n docElement.offsetHeight;\n }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function addCSSRule(sheet, selector, rules, index) {\n // return raf(function() {\n 'insertRule' in sheet ?\n sheet.insertRule(selector + '{' + rules + '}', index) :\n sheet.addRule(selector, rules, index);\n // });\n}","export function getCssRulesLength(sheet) {\n var rule = ('insertRule' in sheet) ? sheet.cssRules : sheet.rules;\n return rule.length;\n}","// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\nexport function forEach (arr, callback, scope) {\n for (var i = 0, l = arr.length; i < l; i++) {\n callback.call(scope, arr[i], i);\n }\n}","export var classListSupport = 'classList' in document.createElement('_');","import { classListSupport } from './classListSupport.js';\n\nvar hasClass = classListSupport ?\n function (el, str) { return el.classList.contains(str); } :\n function (el, str) { return el.className.indexOf(str) >= 0; };\n\nexport { classListSupport, hasClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar addClass = classListSupport ?\n function (el, str) {\n if (!hasClass(el, str)) { el.classList.add(str); }\n } :\n function (el, str) {\n if (!hasClass(el, str)) { el.className += ' ' + str; }\n };\n\nexport { addClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar removeClass = classListSupport ?\n function (el, str) {\n if (hasClass(el, str)) { el.classList.remove(str); }\n } :\n function (el, str) {\n if (hasClass(el, str)) { el.className = el.className.replace(str, ''); }\n };\n\nexport { removeClass };","export function hasAttr(el, attr) {\n return el.hasAttribute(attr);\n}","export function getAttr(el, attr) {\n return el.getAttribute(attr);\n}","export function isNodeList(el) {\n // Only NodeList has the \"item()\" function\n return typeof el.item !== \"undefined\"; \n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function setAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n if (Object.prototype.toString.call(attrs) !== '[object Object]') { return; }\n\n for (var i = els.length; i--;) {\n for(var key in attrs) {\n els[i].setAttribute(key, attrs[key]);\n }\n }\n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function removeAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n attrs = (attrs instanceof Array) ? attrs : [attrs];\n\n var attrLength = attrs.length;\n for (var i = els.length; i--;) {\n for (var j = attrLength; j--;) {\n els[i].removeAttribute(attrs[j]);\n }\n }\n}","export function arrayFromNodeList (nl) {\n var arr = [];\n for (var i = 0, l = nl.length; i < l; i++) {\n arr.push(nl[i]);\n }\n return arr;\n}","export function hideElement(el, forceHide) {\n if (el.style.display !== 'none') { el.style.display = 'none'; }\n}","export function showElement(el, forceHide) {\n if (el.style.display === 'none') { el.style.display = ''; }\n}","export function isVisible(el) {\n return window.getComputedStyle(el).display !== 'none';\n}","export function whichProperty(props){\n if (typeof props === 'string') {\n var arr = [props],\n Props = props.charAt(0).toUpperCase() + props.substr(1),\n prefixes = ['Webkit', 'Moz', 'ms', 'O'];\n \n prefixes.forEach(function(prefix) {\n if (prefix !== 'ms' || props === 'transform') {\n arr.push(prefix + Props);\n }\n });\n\n props = arr;\n }\n\n var el = document.createElement('fakeelement'),\n len = props.length;\n for(var i = 0; i < props.length; i++){\n var prop = props[i];\n if( el.style[prop] !== undefined ){ return prop; }\n }\n\n return false; // explicit for ie9-\n}\n","// get transitionend, animationend based on transitionDuration\n// @propin: string\n// @propOut: string, first-letter uppercase\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\nexport function getEndProperty(propIn, propOut) {\n var endProp = false;\n if (/^Webkit/.test(propIn)) {\n endProp = 'webkit' + propOut + 'End';\n } else if (/^O/.test(propIn)) {\n endProp = 'o' + propOut + 'End';\n } else if (propIn) {\n endProp = propOut.toLowerCase() + 'end';\n }\n return endProp;\n}","// Test via a getter in the options object to see if the passive property is accessed\nvar supportsPassive = false;\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n} catch (e) {}\nexport var passiveOption = supportsPassive ? { passive: true } : false;","import { passiveOption } from './passiveOption.js';\n\nexport function addEvents(el, obj, preventScrolling) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\n el.addEventListener(prop, obj[prop], option);\n }\n}","import { passiveOption } from './passiveOption.js';\n\nexport function removeEvents(el, obj) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\n el.removeEventListener(prop, obj[prop], option);\n }\n}","export function Events() {\n return {\n topics: {},\n on: function (eventName, fn) {\n this.topics[eventName] = this.topics[eventName] || [];\n this.topics[eventName].push(fn);\n },\n off: function(eventName, fn) {\n if (this.topics[eventName]) {\n for (var i = 0; i < this.topics[eventName].length; i++) {\n if (this.topics[eventName][i] === fn) {\n this.topics[eventName].splice(i, 1);\n break;\n }\n }\n }\n },\n emit: function (eventName, data) {\n data.type = eventName;\n if (this.topics[eventName]) {\n this.topics[eventName].forEach(function(fn) {\n fn(data, eventName);\n });\n }\n }\n };\n};","// Object.keys\nif (!Object.keys) {\n Object.keys = function(object) {\n var keys = [];\n for (var name in object) {\n if (Object.prototype.hasOwnProperty.call(object, name)) {\n keys.push(name);\n }\n }\n return keys;\n };\n}\n\n// ChildNode.remove\nif(!(\"remove\" in Element.prototype)){\n Element.prototype.remove = function(){\n if(this.parentNode) {\n this.parentNode.removeChild(this);\n }\n };\n}\n\nimport { raf } from './helpers/raf.js';\nimport { caf } from './helpers/caf.js';\nimport { extend } from './helpers/extend.js';\nimport { checkStorageValue } from './helpers/checkStorageValue.js';\nimport { setLocalStorage } from './helpers/setLocalStorage.js';\nimport { getSlideId } from './helpers/getSlideId.js';\nimport { calc } from './helpers/calc.js';\nimport { percentageLayout } from './helpers/percentageLayout.js';\nimport { mediaquerySupport } from './helpers/mediaquerySupport.js';\nimport { createStyleSheet } from './helpers/createStyleSheet.js';\nimport { addCSSRule } from './helpers/addCSSRule.js';\nimport { removeCSSRule } from './helpers/removeCSSRule.js';\nimport { getCssRulesLength } from './helpers/getCssRulesLength.js';\nimport { toDegree } from './helpers/toDegree.js';\nimport { getTouchDirection } from './helpers/getTouchDirection.js';\nimport { forEach } from './helpers/forEach.js';\nimport { hasClass } from './helpers/hasClass.js';\nimport { addClass } from './helpers/addClass.js';\nimport { removeClass } from './helpers/removeClass.js';\nimport { hasAttr } from './helpers/hasAttr.js';\nimport { getAttr } from './helpers/getAttr.js';\nimport { setAttrs } from './helpers/setAttrs.js';\nimport { removeAttrs } from './helpers/removeAttrs.js';\nimport { arrayFromNodeList } from './helpers/arrayFromNodeList.js';\nimport { hideElement } from './helpers/hideElement.js';\nimport { showElement } from './helpers/showElement.js';\nimport { isVisible } from './helpers/isVisible.js';\nimport { whichProperty } from './helpers/whichProperty.js';\nimport { has3DTransforms } from './helpers/has3DTransforms.js';\nimport { getEndProperty } from './helpers/getEndProperty.js';\nimport { addEvents } from './helpers/addEvents.js';\nimport { removeEvents } from './helpers/removeEvents.js';\nimport { Events } from './helpers/events.js';\nimport { jsTransform } from './helpers/jsTransform.js';\n\nexport var tns = function(options) {\n options = extend({\n container: '.slider',\n mode: 'carousel',\n axis: 'horizontal',\n items: 1,\n gutter: 0,\n edgePadding: 0,\n fixedWidth: false,\n autoWidth: false,\n viewportMax: false,\n slideBy: 1,\n center: false,\n controls: true,\n controlsPosition: 'top',\n controlsText: ['prev', 'next'],\n controlsContainer: false,\n prevButton: false,\n nextButton: false,\n nav: true,\n navPosition: 'top',\n navContainer: false,\n navAsThumbnails: false,\n arrowKeys: false,\n speed: 300,\n autoplay: false,\n autoplayPosition: 'top',\n autoplayTimeout: 5000,\n autoplayDirection: 'forward',\n autoplayText: ['start', 'stop'],\n autoplayHoverPause: false,\n autoplayButton: false,\n autoplayButtonOutput: true,\n autoplayResetOnVisibility: true,\n animateIn: 'tns-fadeIn',\n animateOut: 'tns-fadeOut',\n animateNormal: 'tns-normal',\n animateDelay: false,\n loop: true,\n rewind: false,\n autoHeight: false,\n responsive: false,\n lazyload: false,\n lazyloadSelector: '.tns-lazy-img',\n touch: true,\n mouseDrag: false,\n swipeAngle: 15,\n nested: false,\n preventActionWhenRunning: false,\n preventScrollOnTouch: false,\n freezable: true,\n onInit: false,\n useLocalStorage: true,\n nonce: false\n }, options || {});\n\n var doc = document,\n win = window,\n KEYS = {\n ENTER: 13,\n SPACE: 32,\n LEFT: 37,\n RIGHT: 39\n },\n tnsStorage = {},\n localStorageAccess = options.useLocalStorage;\n\n if (localStorageAccess) {\n // check browser version and local storage access\n var browserInfo = navigator.userAgent;\n var uid = new Date;\n\n try {\n tnsStorage = win.localStorage;\n if (tnsStorage) {\n tnsStorage.setItem(uid, uid);\n localStorageAccess = tnsStorage.getItem(uid) == uid;\n tnsStorage.removeItem(uid);\n } else {\n localStorageAccess = false;\n }\n if (!localStorageAccess) { tnsStorage = {}; }\n } catch(e) {\n localStorageAccess = false;\n }\n\n if (localStorageAccess) {\n // remove storage when browser version changes\n if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\n ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function(item) { tnsStorage.removeItem(item); });\n }\n // update browserInfo\n localStorage['tnsApp'] = browserInfo;\n }\n }\n\n var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\n PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\n CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\n TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\n HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\n TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\n TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\n ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\n ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\n TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\n ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess);\n\n // get element nodes from selectors\n var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\n tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'],\n optionsElements = {};\n\n tnsList.forEach(function(item) {\n if (typeof options[item] === 'string') {\n var str = options[item],\n el = doc.querySelector(str);\n optionsElements[item] = str;\n\n if (el && el.nodeName) {\n options[item] = el;\n } else {\n if (supportConsoleWarn) { console.warn('Can\\'t find', options[item]); }\n return;\n }\n }\n });\n\n // make sure at least 1 slide\n if (options.container.children.length < 1) {\n if (supportConsoleWarn) { console.warn('No slides found in', options.container); }\n return;\n }\n\n // update options\n var responsive = options.responsive,\n nested = options.nested,\n carousel = options.mode === 'carousel' ? true : false;\n\n if (responsive) {\n // apply responsive[0] to options and remove it\n if (0 in responsive) {\n options = extend(options, responsive[0]);\n delete responsive[0];\n }\n\n var responsiveTem = {};\n for (var key in responsive) {\n var val = responsive[key];\n // update responsive\n // from: 300: 2\n // to:\n // 300: {\n // items: 2\n // }\n val = typeof val === 'number' ? {items: val} : val;\n responsiveTem[key] = val;\n }\n responsive = responsiveTem;\n responsiveTem = null;\n }\n\n // update options\n function updateOptions (obj) {\n for (var key in obj) {\n if (!carousel) {\n if (key === 'slideBy') { obj[key] = 'page'; }\n if (key === 'edgePadding') { obj[key] = false; }\n if (key === 'autoHeight') { obj[key] = false; }\n }\n\n // update responsive options\n if (key === 'responsive') { updateOptions(obj[key]); }\n }\n }\n if (!carousel) { updateOptions(options); }\n\n\n // === define and set variables ===\n if (!carousel) {\n options.axis = 'horizontal';\n options.slideBy = 'page';\n options.edgePadding = false;\n\n var animateIn = options.animateIn,\n animateOut = options.animateOut,\n animateDelay = options.animateDelay,\n animateNormal = options.animateNormal;\n }\n\n var horizontal = options.axis === 'horizontal' ? true : false,\n outerWrapper = doc.createElement('div'),\n innerWrapper = doc.createElement('div'),\n middleWrapper,\n container = options.container,\n containerParent = container.parentNode,\n containerHTML = container.outerHTML,\n slideItems = container.children,\n slideCount = slideItems.length,\n breakpointZone,\n windowWidth = getWindowWidth(),\n isOn = false;\n if (responsive) { setBreakpointZone(); }\n if (carousel) { container.className += ' tns-vpfix'; }\n\n // fixedWidth: viewport > rightBoundary > indexMax\n var autoWidth = options.autoWidth,\n fixedWidth = getOption('fixedWidth'),\n edgePadding = getOption('edgePadding'),\n gutter = getOption('gutter'),\n viewport = getViewportWidth(),\n center = getOption('center'),\n items = !autoWidth ? Math.floor(getOption('items')) : 1,\n slideBy = getOption('slideBy'),\n viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\n arrowKeys = getOption('arrowKeys'),\n speed = getOption('speed'),\n rewind = options.rewind,\n loop = rewind ? false : options.loop,\n autoHeight = getOption('autoHeight'),\n controls = getOption('controls'),\n controlsText = getOption('controlsText'),\n nav = getOption('nav'),\n touch = getOption('touch'),\n mouseDrag = getOption('mouseDrag'),\n autoplay = getOption('autoplay'),\n autoplayTimeout = getOption('autoplayTimeout'),\n autoplayText = getOption('autoplayText'),\n autoplayHoverPause = getOption('autoplayHoverPause'),\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\n sheet = createStyleSheet(null, getOption('nonce')),\n lazyload = options.lazyload,\n lazyloadSelector = options.lazyloadSelector,\n slidePositions, // collection of slide positions\n slideItemsOut = [],\n cloneCount = loop ? getCloneCountForLoop() : 0,\n slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\n hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\n rightBoundary = fixedWidth ? getRightBoundary() : null,\n updateIndexBeforeTransform = (!carousel || !loop) ? true : false,\n // transform\n transformAttr = horizontal ? 'left' : 'top',\n transformPrefix = '',\n transformPostfix = '',\n // index\n getIndexMax = (function () {\n if (fixedWidth) {\n return function() { return center && !loop ? slideCount - 1 : Math.ceil(- rightBoundary / (fixedWidth + gutter)); };\n } else if (autoWidth) {\n return function() {\n for (var i = 0; i < slideCountNew; i++) {\n if (slidePositions[i] >= - rightBoundary) { return i; }\n }\n };\n } else {\n return function() {\n if (center && carousel && !loop) {\n return slideCount - 1;\n } else {\n return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\n }\n };\n }\n })(),\n index = getStartIndex(getOption('startIndex')),\n indexCached = index,\n displayIndex = getCurrentSlide(),\n indexMin = 0,\n indexMax = !autoWidth ? getIndexMax() : null,\n // resize\n resizeTimer,\n preventActionWhenRunning = options.preventActionWhenRunning,\n swipeAngle = options.swipeAngle,\n moveDirectionExpected = swipeAngle ? '?' : true,\n running = false,\n onInit = options.onInit,\n events = new Events(),\n // id, class\n newContainerClasses = ' tns-slider tns-' + options.mode,\n slideId = container.id || getSlideId(),\n disable = getOption('disable'),\n disabled = false,\n freezable = options.freezable,\n freeze = freezable && !autoWidth ? getFreeze() : false,\n frozen = false,\n controlsEvents = {\n 'click': onControlsClick,\n 'keydown': onControlsKeydown\n },\n navEvents = {\n 'click': onNavClick,\n 'keydown': onNavKeydown\n },\n hoverEvents = {\n 'mouseover': mouseoverPause,\n 'mouseout': mouseoutRestart\n },\n visibilityEvent = {'visibilitychange': onVisibilityChange},\n docmentKeydownEvent = {'keydown': onDocumentKeydown},\n touchEvents = {\n 'touchstart': onPanStart,\n 'touchmove': onPanMove,\n 'touchend': onPanEnd,\n 'touchcancel': onPanEnd\n }, dragEvents = {\n 'mousedown': onPanStart,\n 'mousemove': onPanMove,\n 'mouseup': onPanEnd,\n 'mouseleave': onPanEnd\n },\n hasControls = hasOption('controls'),\n hasNav = hasOption('nav'),\n navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\n hasAutoplay = hasOption('autoplay'),\n hasTouch = hasOption('touch'),\n hasMouseDrag = hasOption('mouseDrag'),\n slideActiveClass = 'tns-slide-active',\n slideClonedClass = 'tns-slide-cloned',\n imgCompleteClass = 'tns-complete',\n imgEvents = {\n 'load': onImgLoaded,\n 'error': onImgFailed\n },\n imgsComplete,\n liveregionCurrent,\n preventScroll = options.preventScrollOnTouch === 'force' ? true : false;\n\n // controls\n if (hasControls) {\n var controlsContainer = options.controlsContainer,\n controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\n prevButton = options.prevButton,\n nextButton = options.nextButton,\n prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\n nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\n prevIsButton,\n nextIsButton;\n }\n\n // nav\n if (hasNav) {\n var navContainer = options.navContainer,\n navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\n navItems,\n pages = autoWidth ? slideCount : getPages(),\n pagesCached = 0,\n navClicked = -1,\n navCurrentIndex = getCurrentNavIndex(),\n navCurrentIndexCached = navCurrentIndex,\n navActiveClass = 'tns-nav-active',\n navStr = 'Carousel Page ',\n navStrCurrent = ' (Current Slide)';\n }\n\n // autoplay\n if (hasAutoplay) {\n var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\n autoplayButton = options.autoplayButton,\n autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\n autoplayHtmlStrings = ['', ' animation'],\n autoplayTimer,\n animating,\n autoplayHoverPaused,\n autoplayUserPaused,\n autoplayVisibilityPaused;\n }\n\n if (hasTouch || hasMouseDrag) {\n var initPosition = {},\n lastPosition = {},\n translateInit,\n disX,\n disY,\n panStart = false,\n rafIndex,\n getDist = horizontal ?\n function(a, b) { return a.x - b.x; } :\n function(a, b) { return a.y - b.y; };\n }\n\n // disable slider when slidecount <= items\n if (!autoWidth) { resetVariblesWhenDisable(disable || freeze); }\n\n if (TRANSFORM) {\n transformAttr = TRANSFORM;\n transformPrefix = 'translate';\n\n if (HAS3DTRANSFORMS) {\n transformPrefix += horizontal ? '3d(' : '3d(0px, ';\n transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\n } else {\n transformPrefix += horizontal ? 'X(' : 'Y(';\n transformPostfix = ')';\n }\n\n }\n\n if (carousel) { container.className = container.className.replace('tns-vpfix', ''); }\n initStructure();\n initSheet();\n initSliderTransform();\n\n // === COMMON FUNCTIONS === //\n function resetVariblesWhenDisable (condition) {\n if (condition) {\n controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\n }\n }\n\n function getCurrentSlide () {\n var tem = carousel ? index - cloneCount : index;\n while (tem < 0) { tem += slideCount; }\n return tem%slideCount + 1;\n }\n\n function getStartIndex (ind) {\n ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\n return carousel ? ind + cloneCount : ind;\n }\n\n function getAbsIndex (i) {\n if (i == null) { i = index; }\n\n if (carousel) { i -= cloneCount; }\n while (i < 0) { i += slideCount; }\n\n return Math.floor(i%slideCount);\n }\n\n function getCurrentNavIndex () {\n var absIndex = getAbsIndex(),\n result;\n\n result = navAsThumbnails ? absIndex :\n fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) :\n Math.floor(absIndex / items);\n\n // set active nav to the last one when reaches the right edge\n if (!loop && carousel && index === indexMax) { result = pages - 1; }\n\n return result;\n }\n\n function getItemsMax () {\n // fixedWidth or autoWidth while viewportMax is not available\n if (autoWidth || (fixedWidth && !viewportMax)) {\n return slideCount - 1;\n // most cases\n } else {\n var str = fixedWidth ? 'fixedWidth' : 'items',\n arr = [];\n\n if (fixedWidth || options[str] < slideCount) { arr.push(options[str]); }\n\n if (responsive) {\n for (var bp in responsive) {\n var tem = responsive[bp][str];\n if (tem && (fixedWidth || tem < slideCount)) { arr.push(tem); }\n }\n }\n\n if (!arr.length) { arr.push(0); }\n\n return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\n }\n }\n\n function getCloneCountForLoop () {\n var itemsMax = getItemsMax(),\n result = carousel ? Math.ceil((itemsMax * 5 - slideCount)/2) : (itemsMax * 4 - slideCount);\n result = Math.max(itemsMax, result);\n\n return hasOption('edgePadding') ? result + 1 : result;\n }\n\n function getWindowWidth () {\n return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\n }\n\n function getInsertPosition (pos) {\n return pos === 'top' ? 'afterbegin' : 'beforeend';\n }\n\n function getClientWidth (el) {\n if (el == null) { return; }\n var div = doc.createElement('div'), rect, width;\n el.appendChild(div);\n rect = div.getBoundingClientRect();\n width = rect.right - rect.left;\n div.remove();\n return width || getClientWidth(el.parentNode);\n }\n\n function getViewportWidth () {\n var gap = edgePadding ? edgePadding * 2 - gutter : 0;\n return getClientWidth(containerParent) - gap;\n }\n\n function hasOption (item) {\n if (options[item]) {\n return true;\n } else {\n if (responsive) {\n for (var bp in responsive) {\n if (responsive[bp][item]) { return true; }\n }\n }\n return false;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n function getOption (item, ww) {\n if (ww == null) { ww = windowWidth; }\n\n if (item === 'items' && fixedWidth) {\n return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\n\n } else {\n var result = options[item];\n\n if (responsive) {\n for (var bp in responsive) {\n // bp: convert string to number\n if (ww >= parseInt(bp)) {\n if (item in responsive[bp]) { result = responsive[bp][item]; }\n }\n }\n }\n\n if (item === 'slideBy' && result === 'page') { result = getOption('items'); }\n if (!carousel && (item === 'slideBy' || item === 'items')) { result = Math.floor(result); }\n\n return result;\n }\n }\n\n function getSlideMarginLeft (i) {\n return CALC ?\n CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' :\n i * 100 / slideCountNew + '%';\n }\n\n function getInnerWrapperStyles (edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\n var str = '';\n\n if (edgePaddingTem !== undefined) {\n var gap = edgePaddingTem;\n if (gutterTem) { gap -= gutterTem; }\n str = horizontal ?\n 'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' :\n 'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\n } else if (gutterTem && !fixedWidthTem) {\n var gutterTemUnit = '-' + gutterTem + 'px',\n dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\n str = 'margin: 0 ' + dir + ';'\n }\n\n if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) { str += getTransitionDurationStyle(speedTem); }\n return str;\n }\n\n function getContainerWidth (fixedWidthTem, gutterTem, itemsTem) {\n if (fixedWidthTem) {\n return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\n } else {\n return CALC ?\n CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' :\n slideCountNew * 100 / itemsTem + '%';\n }\n }\n\n function getSlideWidthStyle (fixedWidthTem, gutterTem, itemsTem) {\n var width;\n\n if (fixedWidthTem) {\n width = (fixedWidthTem + gutterTem) + 'px';\n } else {\n if (!carousel) { itemsTem = Math.floor(itemsTem); }\n var dividend = carousel ? slideCountNew : itemsTem;\n width = CALC ?\n CALC + '(100% / ' + dividend + ')' :\n 100 / dividend + '%';\n }\n\n width = 'width:' + width;\n\n // inner slider: overwrite outer slider styles\n return nested !== 'inner' ? width + ';' : width + ' !important;';\n }\n\n function getSlideGutterStyle (gutterTem) {\n var str = '';\n\n // gutter maybe interger || 0\n // so can't use 'if (gutter)'\n if (gutterTem !== false) {\n var prop = horizontal ? 'padding-' : 'margin-',\n dir = horizontal ? 'right' : 'bottom';\n str = prop + dir + ': ' + gutterTem + 'px;';\n }\n\n return str;\n }\n\n function getCSSPrefix (name, num) {\n var prefix = name.substring(0, name.length - num).toLowerCase();\n if (prefix) { prefix = '-' + prefix + '-'; }\n\n return prefix;\n }\n\n function getTransitionDurationStyle (speed) {\n return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\n }\n\n function getAnimationDurationStyle (speed) {\n return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\n }\n\n function initStructure () {\n var classOuter = 'tns-outer',\n classInner = 'tns-inner',\n hasGutter = hasOption('gutter');\n\n outerWrapper.className = classOuter;\n innerWrapper.className = classInner;\n outerWrapper.id = slideId + '-ow';\n innerWrapper.id = slideId + '-iw';\n\n // set container properties\n if (container.id === '') { container.id = slideId; }\n newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\n newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\n if (autoWidth) { newContainerClasses += ' tns-autowidth'; }\n newContainerClasses += ' tns-' + options.axis;\n container.className += newContainerClasses;\n\n // add constrain layer for carousel\n if (carousel) {\n middleWrapper = doc.createElement('div');\n middleWrapper.id = slideId + '-mw';\n middleWrapper.className = 'tns-ovh';\n\n outerWrapper.appendChild(middleWrapper);\n middleWrapper.appendChild(innerWrapper);\n } else {\n outerWrapper.appendChild(innerWrapper);\n }\n\n if (autoHeight) {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.className += ' tns-ah';\n }\n\n containerParent.insertBefore(outerWrapper, container);\n innerWrapper.appendChild(container);\n\n // add id, class, aria attributes\n // before clone slides\n forEach(slideItems, function(item, i) {\n addClass(item, 'tns-item');\n if (!item.id) { item.id = slideId + '-item' + i; }\n if (!carousel && animateNormal) { addClass(item, animateNormal); }\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n });\n\n // ## clone slides\n // carousel: n + slides + n\n // gallery: slides + n\n if (cloneCount) {\n var fragmentBefore = doc.createDocumentFragment(),\n fragmentAfter = doc.createDocumentFragment();\n\n for (var j = cloneCount; j--;) {\n var num = j%slideCount,\n cloneFirst = slideItems[num].cloneNode(true);\n addClass(cloneFirst, slideClonedClass);\n removeAttrs(cloneFirst, 'id');\n fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\n\n if (carousel) {\n var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\n addClass(cloneLast, slideClonedClass);\n removeAttrs(cloneLast, 'id');\n fragmentBefore.appendChild(cloneLast);\n }\n }\n\n container.insertBefore(fragmentBefore, container.firstChild);\n container.appendChild(fragmentAfter);\n slideItems = container.children;\n }\n\n }\n\n function initSliderTransform () {\n // ## images loaded/failed\n if (hasOption('autoHeight') || autoWidth || !horizontal) {\n var imgs = container.querySelectorAll('img');\n\n // add img load event listener\n forEach(imgs, function(img) {\n var src = img.src;\n\n if (!lazyload) {\n // not data img\n if (src && src.indexOf('data:image') < 0) {\n img.src = '';\n addEvents(img, imgEvents);\n addClass(img, 'loading');\n\n img.src = src;\n // data img\n } else {\n imgLoaded(img);\n }\n }\n });\n\n // set imgsComplete\n raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), function() { imgsComplete = true; }); });\n\n // reset imgs for auto height: check visible imgs only\n if (hasOption('autoHeight')) { imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1)); }\n\n lazyload ? initSliderTransformStyleCheck() : raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck); });\n\n } else {\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n }\n\n function initSliderTransformStyleCheck () {\n if (autoWidth && slideCount > 1) {\n // check styles application\n var num = loop ? index : slideCount - 1;\n\n (function stylesApplicationCheck() {\n var left = slideItems[num].getBoundingClientRect().left;\n var right = slideItems[num - 1].getBoundingClientRect().right;\n\n (Math.abs(left - right) <= 1) ?\n initSliderTransformCore() :\n setTimeout(function(){ stylesApplicationCheck() }, 16);\n })();\n\n } else {\n initSliderTransformCore();\n }\n }\n\n\n function initSliderTransformCore () {\n // run Fn()s which are rely on image loading\n if (!horizontal || autoWidth) {\n setSlidePositions();\n\n if (autoWidth) {\n rightBoundary = getRightBoundary();\n if (freezable) { freeze = getFreeze(); }\n indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\n resetVariblesWhenDisable(disable || freeze);\n } else {\n updateContentWrapperHeight();\n }\n }\n\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n\n function initSheet () {\n // gallery:\n // set animation classes and left value for gallery slider\n if (!carousel) {\n for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\n var item = slideItems[i];\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // #### LAYOUT\n\n // ## INLINE-BLOCK VS FLOAT\n\n // ## PercentageLayout:\n // slides: inline-block\n // remove blank space between slides by set font-size: 0\n\n // ## Non PercentageLayout:\n // slides: float\n // margin-right: -100%\n // margin-left: ~\n\n // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\n if (horizontal) {\n if (PERCENTAGELAYOUT || autoWidth) {\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\n addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\n } else if (carousel) {\n forEach(slideItems, function (slide, i) {\n slide.style.marginLeft = getSlideMarginLeft(i);\n });\n }\n }\n\n\n // ## BASIC STYLES\n if (CSSMQ) {\n // middle wrapper style\n if (TRANSITIONDURATION) {\n var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\n addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\n }\n\n // inner wrapper styles\n str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\n addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet));\n\n // container styles\n if (carousel) {\n str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\n }\n\n // slide styles\n str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\n if (options.gutter) { str += getSlideGutterStyle(options.gutter); }\n // set gallery items transition-duration\n if (!carousel) {\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n if (ANIMATIONDURATION) { str += getAnimationDurationStyle(speed); }\n }\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n\n // non CSS mediaqueries: IE8\n // ## update inner wrapper, container, slides if needed\n // set inline styles for inner wrapper & container\n // insert stylesheet (one line) for slides only (since slides are many)\n } else {\n // middle wrapper styles\n update_carousel_transition_duration();\n\n // inner wrapper styles\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight);\n\n // container styles\n if (carousel && horizontal && !autoWidth) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\n if (gutter) { str += getSlideGutterStyle(gutter); }\n\n // append to the last line\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n }\n\n // ## MEDIAQUERIES\n if (responsive && CSSMQ) {\n for (var bp in responsive) {\n // bp: convert string to number\n bp = parseInt(bp);\n\n var opts = responsive[bp],\n str = '',\n middleWrapperStr = '',\n innerWrapperStr = '',\n containerStr = '',\n slideStr = '',\n itemsBP = !autoWidth ? getOption('items', bp) : null,\n fixedWidthBP = getOption('fixedWidth', bp),\n speedBP = getOption('speed', bp),\n edgePaddingBP = getOption('edgePadding', bp),\n autoHeightBP = getOption('autoHeight', bp),\n gutterBP = getOption('gutter', bp);\n\n // middle wrapper string\n if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\n middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\n }\n\n // inner wrapper string\n if ('edgePadding' in opts || 'gutter' in opts) {\n innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\n }\n\n // container string\n if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || (fixedWidth && 'gutter' in opts))) {\n containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\n }\n if (TRANSITIONDURATION && 'speed' in opts) {\n containerStr += getTransitionDurationStyle(speedBP);\n }\n if (containerStr) {\n containerStr = '#' + slideId + '{' + containerStr + '}';\n }\n\n // slide string\n if ('fixedWidth' in opts || (fixedWidth && 'gutter' in opts) || !carousel && 'items' in opts) {\n slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\n }\n if ('gutter' in opts) {\n slideStr += getSlideGutterStyle(gutterBP);\n }\n // set gallery items transition-duration\n if (!carousel && 'speed' in opts) {\n if (TRANSITIONDURATION) { slideStr += getTransitionDurationStyle(speedBP); }\n if (ANIMATIONDURATION) { slideStr += getAnimationDurationStyle(speedBP); }\n }\n if (slideStr) { slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}'; }\n\n // add up\n str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\n\n if (str) {\n sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\n }\n }\n }\n }\n\n function initTools () {\n // == slides ==\n updateSlideStatus();\n\n // == live region ==\n outerWrapper.insertAdjacentHTML('afterbegin', '
slide ' + getLiveRegionStr() + ' of ' + slideCount + '
');\n liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current');\n\n // == autoplayInit ==\n if (hasAutoplay) {\n var txt = autoplay ? 'stop' : 'start';\n if (autoplayButton) {\n setAttrs(autoplayButton, {'data-action': txt});\n } else if (options.autoplayButtonOutput) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '');\n autoplayButton = outerWrapper.querySelector('[data-action]');\n }\n\n // add event\n if (autoplayButton) {\n addEvents(autoplayButton, {'click': toggleAutoplay});\n }\n\n if (autoplay) {\n startAutoplay();\n if (autoplayHoverPause) { addEvents(container, hoverEvents); }\n if (autoplayResetOnVisibility) { addEvents(container, visibilityEvent); }\n }\n }\n\n // == navInit ==\n if (hasNav) {\n var initIndex = !carousel ? 0 : cloneCount;\n // customized nav\n // will not hide the navs in case they're thumbnails\n if (navContainer) {\n setAttrs(navContainer, {'aria-label': 'Carousel Pagination'});\n navItems = navContainer.children;\n forEach(navItems, function(item, i) {\n setAttrs(item, {\n 'data-nav': i,\n 'tabindex': '-1',\n 'aria-label': navStr + (i + 1),\n 'aria-controls': slideId,\n });\n });\n\n // generated nav\n } else {\n var navHtml = '',\n hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\n for (var i = 0; i < slideCount; i++) {\n // hide nav items by default\n navHtml += '';\n }\n navHtml = '
' + navHtml + '
';\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\n\n navContainer = outerWrapper.querySelector('.tns-nav');\n navItems = navContainer.children;\n }\n\n updateNavVisibility();\n\n // add transition\n if (TRANSITIONDURATION) {\n var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\n str = 'transition: all ' + speed / 1000 + 's';\n\n if (prefix) {\n str = '-' + prefix + '-' + str;\n }\n\n addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\n }\n\n setAttrs(navItems[navCurrentIndex], {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navItems[navCurrentIndex], 'tabindex');\n addClass(navItems[navCurrentIndex], navActiveClass);\n\n // add events\n addEvents(navContainer, navEvents);\n }\n\n\n\n // == controlsInit ==\n if (hasControls) {\n if (!controlsContainer && (!prevButton || !nextButton)) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '
');\n\n controlsContainer = outerWrapper.querySelector('.tns-controls');\n }\n\n if (!prevButton || !nextButton) {\n prevButton = controlsContainer.children[0];\n nextButton = controlsContainer.children[1];\n }\n\n if (options.controlsContainer) {\n setAttrs(controlsContainer, {\n 'aria-label': 'Carousel Navigation',\n 'tabindex': '0'\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs([prevButton, nextButton], {\n 'aria-controls': slideId,\n 'tabindex': '-1',\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs(prevButton, {'data-controls' : 'prev'});\n setAttrs(nextButton, {'data-controls' : 'next'});\n }\n\n prevIsButton = isButton(prevButton);\n nextIsButton = isButton(nextButton);\n\n updateControlsStatus();\n\n // add events\n if (controlsContainer) {\n addEvents(controlsContainer, controlsEvents);\n } else {\n addEvents(prevButton, controlsEvents);\n addEvents(nextButton, controlsEvents);\n }\n }\n\n // hide tools if needed\n disableUI();\n }\n\n function initEvents () {\n // add events\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n addEvents(container, eve);\n }\n\n if (touch) { addEvents(container, touchEvents, options.preventScrollOnTouch); }\n if (mouseDrag) { addEvents(container, dragEvents); }\n if (arrowKeys) { addEvents(doc, docmentKeydownEvent); }\n\n if (nested === 'inner') {\n events.on('outerResized', function () {\n resizeTasks();\n events.emit('innerLoaded', info());\n });\n } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\n addEvents(win, {'resize': onResize});\n }\n\n if (autoHeight) {\n if (nested === 'outer') {\n events.on('innerLoaded', doAutoHeight);\n } else if (!disable) { doAutoHeight(); }\n }\n\n doLazyLoad();\n if (disable) { disableSlider(); } else if (freeze) { freezeSlider(); }\n\n events.on('indexChanged', additionalUpdates);\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n if (typeof onInit === 'function') { onInit(info()); }\n isOn = true;\n }\n\n function destroy () {\n // sheet\n sheet.disabled = true;\n if (sheet.ownerNode) { sheet.ownerNode.remove(); }\n\n // remove win event listeners\n removeEvents(win, {'resize': onResize});\n\n // arrowKeys, controls, nav\n if (arrowKeys) { removeEvents(doc, docmentKeydownEvent); }\n if (controlsContainer) { removeEvents(controlsContainer, controlsEvents); }\n if (navContainer) { removeEvents(navContainer, navEvents); }\n\n // autoplay\n removeEvents(container, hoverEvents);\n removeEvents(container, visibilityEvent);\n if (autoplayButton) { removeEvents(autoplayButton, {'click': toggleAutoplay}); }\n if (autoplay) { clearInterval(autoplayTimer); }\n\n // container\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n removeEvents(container, eve);\n }\n if (touch) { removeEvents(container, touchEvents); }\n if (mouseDrag) { removeEvents(container, dragEvents); }\n\n // cache Object values in options && reset HTML\n var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\n\n tnsList.forEach(function(item, i) {\n var el = item === 'container' ? outerWrapper : options[item];\n\n if (typeof el === 'object' && el) {\n var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\n parentEl = el.parentNode;\n el.outerHTML = htmlList[i];\n options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\n }\n });\n\n\n // reset variables\n tnsList = animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = resizeTimer = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = pages = pagesCached = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initPosition = lastPosition = translateInit = disX = disY = panStart = rafIndex = getDist = touch = mouseDrag = null;\n // check variables\n // [animateIn, animateOut, animateDelay, animateNormal, horizontal, outerWrapper, innerWrapper, container, containerParent, containerHTML, slideItems, slideCount, breakpointZone, windowWidth, autoWidth, fixedWidth, edgePadding, gutter, viewport, items, slideBy, viewportMax, arrowKeys, speed, rewind, loop, autoHeight, sheet, lazyload, slidePositions, slideItemsOut, cloneCount, slideCountNew, hasRightDeadZone, rightBoundary, updateIndexBeforeTransform, transformAttr, transformPrefix, transformPostfix, getIndexMax, index, indexCached, indexMin, indexMax, resizeTimer, swipeAngle, moveDirectionExpected, running, onInit, events, newContainerClasses, slideId, disable, disabled, freezable, freeze, frozen, controlsEvents, navEvents, hoverEvents, visibilityEvent, docmentKeydownEvent, touchEvents, dragEvents, hasControls, hasNav, navAsThumbnails, hasAutoplay, hasTouch, hasMouseDrag, slideActiveClass, imgCompleteClass, imgEvents, imgsComplete, controls, controlsText, controlsContainer, controlsContainerHTML, prevButton, nextButton, prevIsButton, nextIsButton, nav, navContainer, navContainerHTML, navItems, pages, pagesCached, navClicked, navCurrentIndex, navCurrentIndexCached, navActiveClass, navStr, navStrCurrent, autoplay, autoplayTimeout, autoplayDirection, autoplayText, autoplayHoverPause, autoplayButton, autoplayButtonHTML, autoplayResetOnVisibility, autoplayHtmlStrings, autoplayTimer, animating, autoplayHoverPaused, autoplayUserPaused, autoplayVisibilityPaused, initPosition, lastPosition, translateInit, disX, disY, panStart, rafIndex, getDist, touch, mouseDrag ].forEach(function(item) { if (item !== null) { console.log(item); } });\n\n for (var a in this) {\n if (a !== 'rebuild') { this[a] = null; }\n }\n isOn = false;\n }\n\n// === ON RESIZE ===\n // responsive || fixedWidth || autoWidth || !horizontal\n function onResize (e) {\n raf(function(){ resizeTasks(getEvent(e)); });\n }\n\n function resizeTasks (e) {\n if (!isOn) { return; }\n if (nested === 'outer') { events.emit('outerResized', info(e)); }\n windowWidth = getWindowWidth();\n var bpChanged,\n breakpointZoneTem = breakpointZone,\n needContainerTransform = false;\n\n if (responsive) {\n setBreakpointZone();\n bpChanged = breakpointZoneTem !== breakpointZone;\n // if (hasRightDeadZone) { needContainerTransform = true; } // *?\n if (bpChanged) { events.emit('newBreakpointStart', info(e)); }\n }\n\n var indChanged,\n itemsChanged,\n itemsTem = items,\n disableTem = disable,\n freezeTem = freeze,\n arrowKeysTem = arrowKeys,\n controlsTem = controls,\n navTem = nav,\n touchTem = touch,\n mouseDragTem = mouseDrag,\n autoplayTem = autoplay,\n autoplayHoverPauseTem = autoplayHoverPause,\n autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\n indexTem = index;\n\n if (bpChanged) {\n var fixedWidthTem = fixedWidth,\n autoHeightTem = autoHeight,\n controlsTextTem = controlsText,\n centerTem = center,\n autoplayTextTem = autoplayText;\n\n if (!CSSMQ) {\n var gutterTem = gutter,\n edgePaddingTem = edgePadding;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n arrowKeys = getOption('arrowKeys');\n controls = getOption('controls');\n nav = getOption('nav');\n touch = getOption('touch');\n center = getOption('center');\n mouseDrag = getOption('mouseDrag');\n autoplay = getOption('autoplay');\n autoplayHoverPause = getOption('autoplayHoverPause');\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\n\n if (bpChanged) {\n disable = getOption('disable');\n fixedWidth = getOption('fixedWidth');\n speed = getOption('speed');\n autoHeight = getOption('autoHeight');\n controlsText = getOption('controlsText');\n autoplayText = getOption('autoplayText');\n autoplayTimeout = getOption('autoplayTimeout');\n\n if (!CSSMQ) {\n edgePadding = getOption('edgePadding');\n gutter = getOption('gutter');\n }\n }\n // update options\n resetVariblesWhenDisable(disable);\n\n viewport = getViewportWidth(); // <= edgePadding, gutter\n if ((!horizontal || autoWidth) && !disable) {\n setSlidePositions();\n if (!horizontal) {\n updateContentWrapperHeight(); // <= setSlidePositions\n needContainerTransform = true;\n }\n }\n if (fixedWidth || autoWidth) {\n rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\n // fixedWidth: <= viewport, fixedWidth, gutter\n indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\n // fixedWidth: <= rightBoundary, fixedWidth, gutter\n }\n\n if (bpChanged || fixedWidth) {\n items = getOption('items');\n slideBy = getOption('slideBy');\n itemsChanged = items !== itemsTem;\n\n if (itemsChanged) {\n if (!fixedWidth && !autoWidth) { indexMax = getIndexMax(); } // <= items\n // check index before transform in case\n // slider reach the right edge then items become bigger\n updateIndex();\n }\n }\n\n if (bpChanged) {\n if (disable !== disableTem) {\n if (disable) {\n disableSlider();\n } else {\n enableSlider(); // <= slidePositions, rightBoundary, indexMax\n }\n }\n }\n\n if (freezable && (bpChanged || fixedWidth || autoWidth)) {\n freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\n // <= fixedWidth: fixedWidth, gutter, rightBoundary\n // <= others: items\n\n if (freeze !== freezeTem) {\n if (freeze) {\n doContainerTransform(getContainerTransformValue(getStartIndex(0)));\n freezeSlider();\n } else {\n unfreezeSlider();\n needContainerTransform = true;\n }\n }\n }\n\n resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\n if (!autoplay) { autoplayHoverPause = autoplayResetOnVisibility = false; }\n\n if (arrowKeys !== arrowKeysTem) {\n arrowKeys ?\n addEvents(doc, docmentKeydownEvent) :\n removeEvents(doc, docmentKeydownEvent);\n }\n if (controls !== controlsTem) {\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n } else {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n if (nav !== navTem) {\n if (nav) {\n showElement(navContainer);\n updateNavVisibility();\n } else {\n hideElement(navContainer)\n }\n }\n if (touch !== touchTem) {\n touch ?\n addEvents(container, touchEvents, options.preventScrollOnTouch) :\n removeEvents(container, touchEvents);\n }\n if (mouseDrag !== mouseDragTem) {\n mouseDrag ?\n addEvents(container, dragEvents) :\n removeEvents(container, dragEvents);\n }\n if (autoplay !== autoplayTem) {\n if (autoplay) {\n if (autoplayButton) { showElement(autoplayButton); }\n if (!animating && !autoplayUserPaused) { startAutoplay(); }\n } else {\n if (autoplayButton) { hideElement(autoplayButton); }\n if (animating) { stopAutoplay(); }\n }\n }\n if (autoplayHoverPause !== autoplayHoverPauseTem) {\n autoplayHoverPause ?\n addEvents(container, hoverEvents) :\n removeEvents(container, hoverEvents);\n }\n if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\n autoplayResetOnVisibility ?\n addEvents(doc, visibilityEvent) :\n removeEvents(doc, visibilityEvent);\n }\n\n if (bpChanged) {\n if (fixedWidth !== fixedWidthTem || center !== centerTem) { needContainerTransform = true; }\n\n if (autoHeight !== autoHeightTem) {\n if (!autoHeight) { innerWrapper.style.height = ''; }\n }\n\n if (controls && controlsText !== controlsTextTem) {\n prevButton.innerHTML = controlsText[0];\n nextButton.innerHTML = controlsText[1];\n }\n\n if (autoplayButton && autoplayText !== autoplayTextTem) {\n var i = autoplay ? 1 : 0,\n html = autoplayButton.innerHTML,\n len = html.length - autoplayTextTem[i].length;\n if (html.substring(len) === autoplayTextTem[i]) {\n autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\n }\n }\n } else {\n if (center && (fixedWidth || autoWidth)) { needContainerTransform = true; }\n }\n\n if (itemsChanged || fixedWidth && !autoWidth) {\n pages = getPages();\n updateNavVisibility();\n }\n\n indChanged = index !== indexTem;\n if (indChanged) {\n events.emit('indexChanged', info());\n needContainerTransform = true;\n } else if (itemsChanged) {\n if (!indChanged) { additionalUpdates(); }\n } else if (fixedWidth || autoWidth) {\n doLazyLoad();\n updateSlideStatus();\n updateLiveRegion();\n }\n\n if (itemsChanged && !carousel) { updateGallerySlidePositions(); }\n\n if (!disable && !freeze) {\n // non-mediaqueries: IE8\n if (bpChanged && !CSSMQ) {\n // middle wrapper styles\n\n // inner wrapper styles\n if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\n }\n\n if (horizontal) {\n // container styles\n if (carousel) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = getSlideWidthStyle(fixedWidth, gutter, items) +\n getSlideGutterStyle(gutter);\n\n // remove the last line and\n // add new styles\n removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\n }\n }\n\n // auto height\n if (autoHeight) { doAutoHeight(); }\n\n if (needContainerTransform) {\n doContainerTransformSilent();\n indexCached = index;\n }\n }\n\n if (bpChanged) { events.emit('newBreakpointEnd', info(e)); }\n }\n\n\n\n\n\n // === INITIALIZATION FUNCTIONS === //\n function getFreeze () {\n if (!fixedWidth && !autoWidth) {\n var a = center ? items - (items - 1) / 2 : items;\n return slideCount <= a;\n }\n\n var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\n vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\n\n if (center) {\n vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\n }\n\n return width <= vp;\n }\n\n function setBreakpointZone () {\n breakpointZone = 0;\n for (var bp in responsive) {\n bp = parseInt(bp); // convert string to number\n if (windowWidth >= bp) { breakpointZone = bp; }\n }\n }\n\n // (slideBy, indexMin, indexMax) => index\n var updateIndex = (function () {\n return loop ?\n carousel ?\n // loop + carousel\n function () {\n var leftEdge = indexMin,\n rightEdge = indexMax;\n\n leftEdge += slideBy;\n rightEdge -= slideBy;\n\n // adjust edges when has edge paddings\n // or fixed-width slider with extra space on the right side\n if (edgePadding) {\n leftEdge += 1;\n rightEdge -= 1;\n } else if (fixedWidth) {\n if ((viewport + gutter)%(fixedWidth + gutter)) { rightEdge -= 1; }\n }\n\n if (cloneCount) {\n if (index > rightEdge) {\n index -= slideCount;\n } else if (index < leftEdge) {\n index += slideCount;\n }\n }\n } :\n // loop + gallery\n function() {\n if (index > indexMax) {\n while (index >= indexMin + slideCount) { index -= slideCount; }\n } else if (index < indexMin) {\n while (index <= indexMax - slideCount) { index += slideCount; }\n }\n } :\n // non-loop\n function() {\n index = Math.max(indexMin, Math.min(indexMax, index));\n };\n })();\n\n function disableUI () {\n if (!autoplay && autoplayButton) { hideElement(autoplayButton); }\n if (!nav && navContainer) { hideElement(navContainer); }\n if (!controls) {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n\n function enableUI () {\n if (autoplay && autoplayButton) { showElement(autoplayButton); }\n if (nav && navContainer) { showElement(navContainer); }\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n }\n }\n\n function freezeSlider () {\n if (frozen) { return; }\n\n // remove edge padding from inner wrapper\n if (edgePadding) { innerWrapper.style.margin = '0px'; }\n\n // add class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { addClass(slideItems[i], str); }\n addClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n disableUI();\n\n frozen = true;\n }\n\n function unfreezeSlider () {\n if (!frozen) { return; }\n\n // restore edge padding for inner wrapper\n // for mordern browsers\n if (edgePadding && CSSMQ) { innerWrapper.style.margin = ''; }\n\n // remove class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { removeClass(slideItems[i], str); }\n removeClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n enableUI();\n\n frozen = false;\n }\n\n function disableSlider () {\n if (disabled) { return; }\n\n sheet.disabled = true;\n container.className = container.className.replace(newContainerClasses.substring(1), '');\n removeAttrs(container, ['style']);\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { hideElement(slideItems[j]); }\n hideElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // vertical slider\n if (!horizontal || !carousel) { removeAttrs(innerWrapper, ['style']); }\n\n // gallery\n if (!carousel) {\n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i];\n removeAttrs(item, ['style']);\n removeClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // update tools\n disableUI();\n\n disabled = true;\n }\n\n function enableSlider () {\n if (!disabled) { return; }\n\n sheet.disabled = false;\n container.className += newContainerClasses;\n doContainerTransformSilent();\n\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { showElement(slideItems[j]); }\n showElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // gallery\n if (!carousel) {\n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i],\n classN = i < index + items ? animateIn : animateNormal;\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, classN);\n }\n }\n\n // update tools\n enableUI();\n\n disabled = false;\n }\n\n function updateLiveRegion () {\n var str = getLiveRegionStr();\n if (liveregionCurrent.innerHTML !== str) { liveregionCurrent.innerHTML = str; }\n }\n\n function getLiveRegionStr () {\n var arr = getVisibleSlideRange(),\n start = arr[0] + 1,\n end = arr[1] + 1;\n return start === end ? start + '' : start + ' to ' + end;\n }\n\n function getVisibleSlideRange (val) {\n if (val == null) { val = getContainerTransformValue(); }\n var start = index, end, rangestart, rangeend;\n\n // get range start, range end for autoWidth and fixedWidth\n if (center || edgePadding) {\n if (autoWidth || fixedWidth) {\n rangestart = - (parseFloat(val) + edgePadding);\n rangeend = rangestart + viewport + edgePadding * 2;\n }\n } else {\n if (autoWidth) {\n rangestart = slidePositions[index];\n rangeend = rangestart + viewport;\n }\n }\n\n // get start, end\n // - check auto width\n if (autoWidth) {\n slidePositions.forEach(function(point, i) {\n if (i < slideCountNew) {\n if ((center || edgePadding) && point <= rangestart + 0.5) { start = i; }\n if (rangeend - point >= 0.5) { end = i; }\n }\n });\n\n // - check percentage width, fixed width\n } else {\n\n if (fixedWidth) {\n var cell = fixedWidth + gutter;\n if (center || edgePadding) {\n start = Math.floor(rangestart/cell);\n end = Math.ceil(rangeend/cell - 1);\n } else {\n end = start + Math.ceil(viewport/cell) - 1;\n }\n\n } else {\n if (center || edgePadding) {\n var a = items - 1;\n if (center) {\n start -= a / 2;\n end = index + a / 2;\n } else {\n end = index + a;\n }\n\n if (edgePadding) {\n var b = edgePadding * items / viewport;\n start -= b;\n end += b;\n }\n\n start = Math.floor(start);\n end = Math.ceil(end);\n } else {\n end = start + items - 1;\n }\n }\n\n start = Math.max(start, 0);\n end = Math.min(end, slideCountNew - 1);\n }\n\n return [start, end];\n }\n\n function doLazyLoad () {\n if (lazyload && !disable) {\n var arg = getVisibleSlideRange();\n arg.push(lazyloadSelector);\n\n getImageArray.apply(null, arg).forEach(function (img) {\n if (!hasClass(img, imgCompleteClass)) {\n // stop propagation transitionend event to container\n var eve = {};\n eve[TRANSITIONEND] = function (e) { e.stopPropagation(); };\n addEvents(img, eve);\n\n addEvents(img, imgEvents);\n\n // update src\n img.src = getAttr(img, 'data-src');\n\n // update srcset\n var srcset = getAttr(img, 'data-srcset');\n if (srcset) { img.srcset = srcset; }\n\n addClass(img, 'loading');\n }\n });\n }\n }\n\n function onImgLoaded (e) {\n imgLoaded(getTarget(e));\n }\n\n function onImgFailed (e) {\n imgFailed(getTarget(e));\n }\n\n function imgLoaded (img) {\n addClass(img, 'loaded');\n imgCompleted(img);\n }\n\n function imgFailed (img) {\n addClass(img, 'failed');\n imgCompleted(img);\n }\n\n function imgCompleted (img) {\n addClass(img, imgCompleteClass);\n removeClass(img, 'loading');\n removeEvents(img, imgEvents);\n }\n\n function getImageArray (start, end, imgSelector) {\n var imgs = [];\n if (!imgSelector) { imgSelector = 'img'; }\n\n while (start <= end) {\n forEach(slideItems[start].querySelectorAll(imgSelector), function (img) { imgs.push(img); });\n start++;\n }\n\n return imgs;\n }\n\n // check if all visible images are loaded\n // and update container height if it's done\n function doAutoHeight () {\n var imgs = getImageArray.apply(null, getVisibleSlideRange());\n raf(function(){ imgsLoadedCheck(imgs, updateInnerWrapperHeight); });\n }\n\n function imgsLoadedCheck (imgs, cb) {\n // execute callback function if all images are complete\n if (imgsComplete) { return cb(); }\n\n // check image classes\n imgs.forEach(function (img, index) {\n if (!lazyload && img.complete) { imgCompleted(img); } // Check image.complete\n if (hasClass(img, imgCompleteClass)) { imgs.splice(index, 1); }\n });\n\n // execute callback function if selected images are all complete\n if (!imgs.length) { return cb(); }\n\n // otherwise execute this functiona again\n raf(function(){ imgsLoadedCheck(imgs, cb); });\n }\n\n function additionalUpdates () {\n doLazyLoad();\n updateSlideStatus();\n updateLiveRegion();\n updateControlsStatus();\n updateNavStatus();\n }\n\n\n function update_carousel_transition_duration () {\n if (carousel && autoHeight) {\n middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\n }\n }\n\n function getMaxSlideHeight (slideStart, slideRange) {\n var heights = [];\n for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\n heights.push(slideItems[i].offsetHeight);\n }\n\n return Math.max.apply(null, heights);\n }\n\n // update inner wrapper height\n // 1. get the max-height of the visible slides\n // 2. set transitionDuration to speed\n // 3. update inner wrapper height to max-height\n // 4. set transitionDuration to 0s after transition done\n function updateInnerWrapperHeight () {\n var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\n wp = middleWrapper ? middleWrapper : innerWrapper;\n\n if (wp.style.height !== maxHeight) { wp.style.height = maxHeight + 'px'; }\n }\n\n // get the distance from the top edge of the first slide to each slide\n // (init) => slidePositions\n function setSlidePositions () {\n slidePositions = [0];\n var attr = horizontal ? 'left' : 'top',\n attr2 = horizontal ? 'right' : 'bottom',\n base = slideItems[0].getBoundingClientRect()[attr];\n\n forEach(slideItems, function(item, i) {\n // skip the first slide\n if (i) { slidePositions.push(item.getBoundingClientRect()[attr] - base); }\n // add the end edge\n if (i === slideCountNew - 1) { slidePositions.push(item.getBoundingClientRect()[attr2] - base); }\n });\n }\n\n // update slide\n function updateSlideStatus () {\n var range = getVisibleSlideRange(),\n start = range[0],\n end = range[1];\n\n forEach(slideItems, function(item, i) {\n // show slides\n if (i >= start && i <= end) {\n if (hasAttr(item, 'aria-hidden')) {\n removeAttrs(item, ['aria-hidden', 'tabindex']);\n addClass(item, slideActiveClass);\n }\n // hide slides\n } else {\n if (!hasAttr(item, 'aria-hidden')) {\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n removeClass(item, slideActiveClass);\n }\n }\n });\n }\n\n // gallery: update slide position\n function updateGallerySlidePositions () {\n var l = index + Math.min(slideCount, items);\n for (var i = slideCountNew; i--;) {\n var item = slideItems[i];\n\n if (i >= index && i < l) {\n // add transitions to visible slides when adjusting their positions\n addClass(item, 'tns-moving');\n\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n } else if (item.style.left) {\n item.style.left = '';\n addClass(item, animateNormal);\n removeClass(item, animateIn);\n }\n\n // remove outlet animation\n removeClass(item, animateOut);\n }\n\n // removing '.tns-moving'\n setTimeout(function() {\n forEach(slideItems, function(el) {\n removeClass(el, 'tns-moving');\n });\n }, 300);\n }\n\n // set tabindex on Nav\n function updateNavStatus () {\n // get current nav\n if (nav) {\n navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\n navClicked = -1;\n\n if (navCurrentIndex !== navCurrentIndexCached) {\n var navPrev = navItems[navCurrentIndexCached],\n navCurrent = navItems[navCurrentIndex];\n\n setAttrs(navPrev, {\n 'tabindex': '-1',\n 'aria-label': navStr + (navCurrentIndexCached + 1)\n });\n removeClass(navPrev, navActiveClass);\n\n setAttrs(navCurrent, {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navCurrent, 'tabindex');\n addClass(navCurrent, navActiveClass);\n\n navCurrentIndexCached = navCurrentIndex;\n }\n }\n }\n\n function getLowerCaseNodeName (el) {\n return el.nodeName.toLowerCase();\n }\n\n function isButton (el) {\n return getLowerCaseNodeName(el) === 'button';\n }\n\n function isAriaDisabled (el) {\n return el.getAttribute('aria-disabled') === 'true';\n }\n\n function disEnableElement (isButton, el, val) {\n if (isButton) {\n el.disabled = val;\n } else {\n el.setAttribute('aria-disabled', val.toString());\n }\n }\n\n // set 'disabled' to true on controls when reach the edges\n function updateControlsStatus () {\n if (!controls || rewind || loop) { return; }\n\n var prevDisabled = (prevIsButton) ? prevButton.disabled : isAriaDisabled(prevButton),\n nextDisabled = (nextIsButton) ? nextButton.disabled : isAriaDisabled(nextButton),\n disablePrev = (index <= indexMin) ? true : false,\n disableNext = (!rewind && index >= indexMax) ? true : false;\n\n if (disablePrev && !prevDisabled) {\n disEnableElement(prevIsButton, prevButton, true);\n }\n if (!disablePrev && prevDisabled) {\n disEnableElement(prevIsButton, prevButton, false);\n }\n if (disableNext && !nextDisabled) {\n disEnableElement(nextIsButton, nextButton, true);\n }\n if (!disableNext && nextDisabled) {\n disEnableElement(nextIsButton, nextButton, false);\n }\n }\n\n // set duration\n function resetDuration (el, str) {\n if (TRANSITIONDURATION) { el.style[TRANSITIONDURATION] = str; }\n }\n\n function getSliderWidth () {\n return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\n }\n\n function getCenterGap (num) {\n if (num == null) { num = index; }\n\n var gap = edgePadding ? gutter : 0;\n return autoWidth ? ((viewport - gap) - (slidePositions[num + 1] - slidePositions[num] - gutter))/2 :\n fixedWidth ? (viewport - fixedWidth) / 2 :\n (items - 1) / 2;\n }\n\n function getRightBoundary () {\n var gap = edgePadding ? gutter : 0,\n result = (viewport + gap) - getSliderWidth();\n\n if (center && !loop) {\n result = fixedWidth ? - (fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() :\n getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\n }\n if (result > 0) { result = 0; }\n\n return result;\n }\n\n function getContainerTransformValue (num) {\n if (num == null) { num = index; }\n\n var val;\n if (horizontal && !autoWidth) {\n if (fixedWidth) {\n val = - (fixedWidth + gutter) * num;\n if (center) { val += getCenterGap(); }\n } else {\n var denominator = TRANSFORM ? slideCountNew : items;\n if (center) { num -= getCenterGap(); }\n val = - num * 100 / denominator;\n }\n } else {\n val = - slidePositions[num];\n if (center && autoWidth) {\n val += getCenterGap();\n }\n }\n\n if (hasRightDeadZone) { val = Math.max(val, rightBoundary); }\n\n val += (horizontal && !autoWidth && !fixedWidth) ? '%' : 'px';\n\n return val;\n }\n\n function doContainerTransformSilent (val) {\n resetDuration(container, '0s');\n doContainerTransform(val);\n }\n\n function doContainerTransform (val) {\n if (val == null) { val = getContainerTransformValue(); }\n container.style[transformAttr] = transformPrefix + val + transformPostfix;\n }\n\n function animateSlide (number, classOut, classIn, isOut) {\n var l = number + items;\n if (!loop) { l = Math.min(l, slideCountNew); }\n\n for (var i = number; i < l; i++) {\n var item = slideItems[i];\n\n // set item positions\n if (!isOut) { item.style.left = (i - index) * 100 / items + '%'; }\n\n if (animateDelay && TRANSITIONDELAY) {\n item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\n }\n removeClass(item, classOut);\n addClass(item, classIn);\n\n if (isOut) { slideItemsOut.push(item); }\n }\n }\n\n // make transfer after click/drag:\n // 1. change 'transform' property for mordern browsers\n // 2. change 'left' property for legacy browsers\n var transformCore = (function () {\n return carousel ?\n function () {\n resetDuration(container, '');\n if (TRANSITIONDURATION || !speed) {\n // for morden browsers with non-zero duration or\n // zero duration for all browsers\n doContainerTransform();\n // run fallback function manually\n // when duration is 0 / container is hidden\n if (!speed || !isVisible(container)) { onTransitionEnd(); }\n\n } else {\n // for old browser with non-zero duration\n jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\n }\n\n if (!horizontal) { updateContentWrapperHeight(); }\n } :\n function () {\n slideItemsOut = [];\n\n var eve = {};\n eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\n removeEvents(slideItems[indexCached], eve);\n addEvents(slideItems[index], eve);\n\n animateSlide(indexCached, animateIn, animateOut, true);\n animateSlide(index, animateNormal, animateIn);\n\n // run fallback function manually\n // when transition or animation not supported / duration is 0\n if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) { onTransitionEnd(); }\n };\n })();\n\n function render (e, sliderMoved) {\n if (updateIndexBeforeTransform) { updateIndex(); }\n\n // render when slider was moved (touch or drag) even though index may not change\n if (index !== indexCached || sliderMoved) {\n // events\n events.emit('indexChanged', info());\n events.emit('transitionStart', info());\n if (autoHeight) { doAutoHeight(); }\n\n // pause autoplay when click or keydown from user\n if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) { stopAutoplay(); }\n\n running = true;\n transformCore();\n }\n }\n\n /*\n * Transfer prefixed properties to the same format\n * CSS: -Webkit-Transform => webkittransform\n * JS: WebkitTransform => webkittransform\n * @param {string} str - property\n *\n */\n function strTrans (str) {\n return str.toLowerCase().replace(/-/g, '');\n }\n\n // AFTER TRANSFORM\n // Things need to be done after a transfer:\n // 1. check index\n // 2. add classes to visible slide\n // 3. disable controls buttons when reach the first/last slide in non-loop slider\n // 4. update nav status\n // 5. lazyload images\n // 6. update container height\n function onTransitionEnd (event) {\n // check running on gallery mode\n // make sure trantionend/animationend events run only once\n if (carousel || running) {\n events.emit('transitionEnd', info(event));\n\n if (!carousel && slideItemsOut.length > 0) {\n for (var i = 0; i < slideItemsOut.length; i++) {\n var item = slideItemsOut[i];\n // set item positions\n item.style.left = '';\n\n if (ANIMATIONDELAY && TRANSITIONDELAY) {\n item.style[ANIMATIONDELAY] = '';\n item.style[TRANSITIONDELAY] = '';\n }\n removeClass(item, animateOut);\n addClass(item, animateNormal);\n }\n }\n\n /* update slides, nav, controls after checking ...\n * => legacy browsers who don't support 'event'\n * have to check event first, otherwise event.target will cause an error\n * => or 'gallery' mode:\n * + event target is slide item\n * => or 'carousel' mode:\n * + event target is container,\n * + event.property is the same with transform attribute\n */\n if (!event ||\n !carousel && event.target.parentNode === container ||\n event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\n\n if (!updateIndexBeforeTransform) {\n var indexTem = index;\n updateIndex();\n if (index !== indexTem) {\n events.emit('indexChanged', info());\n\n doContainerTransformSilent();\n }\n }\n\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n running = false;\n indexCached = index;\n }\n }\n\n }\n\n // # ACTIONS\n function goTo (targetIndex, e) {\n if (freeze) { return; }\n\n // prev slideBy\n if (targetIndex === 'prev') {\n onControlsClick(e, -1);\n\n // next slideBy\n } else if (targetIndex === 'next') {\n onControlsClick(e, 1);\n\n // go to exact slide\n } else {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n var absIndex = getAbsIndex(),\n indexGap = 0;\n\n if (targetIndex === 'first') {\n indexGap = - absIndex;\n } else if (targetIndex === 'last') {\n indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\n } else {\n if (typeof targetIndex !== 'number') { targetIndex = parseInt(targetIndex); }\n\n if (!isNaN(targetIndex)) {\n // from directly called goTo function\n if (!e) { targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex)); }\n\n indexGap = targetIndex - absIndex;\n }\n }\n\n // gallery: make sure new page won't overlap with current page\n if (!carousel && indexGap && Math.abs(indexGap) < items) {\n var factor = indexGap > 0 ? 1 : -1;\n indexGap += (index + indexGap - slideCount) >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\n }\n\n index += indexGap;\n\n // make sure index is in range\n if (carousel && loop) {\n if (index < indexMin) { index += slideCount; }\n if (index > indexMax) { index -= slideCount; }\n }\n\n // if index is changed, start rendering\n if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\n render(e);\n }\n\n }\n }\n\n // on controls click\n function onControlsClick (e, dir) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n var passEventObject;\n\n if (!dir) {\n e = getEvent(e);\n var target = getTarget(e);\n\n while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) { target = target.parentNode; }\n\n var targetIn = [prevButton, nextButton].indexOf(target);\n if (targetIn >= 0) {\n passEventObject = true;\n dir = targetIn === 0 ? -1 : 1;\n }\n }\n\n if (rewind) {\n if (index === indexMin && dir === -1) {\n goTo('last', e);\n return;\n } else if (index === indexMax && dir === 1) {\n goTo('first', e);\n return;\n }\n }\n\n if (dir) {\n index += slideBy * dir;\n if (autoWidth) { index = Math.floor(index); }\n // pass e when click control buttons or keydown\n render((passEventObject || (e && e.type === 'keydown')) ? e : null);\n }\n }\n\n // on nav click\n function onNavClick (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n e = getEvent(e);\n var target = getTarget(e), navIndex;\n\n // find the clicked nav item\n while (target !== navContainer && !hasAttr(target, 'data-nav')) { target = target.parentNode; }\n if (hasAttr(target, 'data-nav')) {\n var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\n targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\n targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\n goTo(targetIndex, e);\n\n if (navCurrentIndex === navIndex) {\n if (animating) { stopAutoplay(); }\n navClicked = -1; // reset navClicked\n }\n }\n }\n\n // autoplay functions\n function setAutoplayTimer () {\n autoplayTimer = setInterval(function () {\n onControlsClick(null, autoplayDirection);\n }, autoplayTimeout);\n\n animating = true;\n }\n\n function stopAutoplayTimer () {\n clearInterval(autoplayTimer);\n animating = false;\n }\n\n function updateAutoplayButton (action, txt) {\n setAttrs(autoplayButton, {'data-action': action});\n autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\n }\n\n function startAutoplay () {\n setAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('stop', autoplayText[1]); }\n }\n\n function stopAutoplay () {\n stopAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('start', autoplayText[0]); }\n }\n\n // programaitcally play/pause the slider\n function play () {\n if (autoplay && !animating) {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n function pause () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n }\n }\n\n function toggleAutoplay () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n } else {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n\n function onVisibilityChange () {\n if (doc.hidden) {\n if (animating) {\n stopAutoplayTimer();\n autoplayVisibilityPaused = true;\n }\n } else if (autoplayVisibilityPaused) {\n setAutoplayTimer();\n autoplayVisibilityPaused = false;\n }\n }\n\n function mouseoverPause () {\n if (animating) {\n stopAutoplayTimer();\n autoplayHoverPaused = true;\n }\n }\n\n function mouseoutRestart () {\n if (autoplayHoverPaused) {\n setAutoplayTimer();\n autoplayHoverPaused = false;\n }\n }\n\n // keydown events on document\n function onDocumentKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n onControlsClick(e, keyIndex === 0 ? -1 : 1);\n }\n }\n\n // on key control\n function onControlsKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (!prevButton.disabled) { onControlsClick(e, -1); }\n } else if (!nextButton.disabled) {\n onControlsClick(e, 1);\n }\n }\n }\n\n // set focus\n function setFocus (el) {\n el.focus();\n }\n\n // on key nav\n function onNavKeydown (e) {\n e = getEvent(e);\n var curElement = doc.activeElement;\n if (!hasAttr(curElement, 'data-nav')) { return; }\n\n // var code = e.keyCode,\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\n navIndex = Number(getAttr(curElement, 'data-nav'));\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (navIndex > 0) { setFocus(navItems[navIndex - 1]); }\n } else if (keyIndex === 1) {\n if (navIndex < pages - 1) { setFocus(navItems[navIndex + 1]); }\n } else {\n navClicked = navIndex;\n goTo(navIndex, e);\n }\n }\n }\n\n function getEvent (e) {\n e = e || win.event;\n return isTouchEvent(e) ? e.changedTouches[0] : e;\n }\n function getTarget (e) {\n return e.target || win.event.srcElement;\n }\n\n function isTouchEvent (e) {\n return e.type.indexOf('touch') >= 0;\n }\n\n function preventDefaultBehavior (e) {\n e.preventDefault ? e.preventDefault() : e.returnValue = false;\n }\n\n function getMoveDirectionExpected () {\n return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\n }\n\n function onPanStart (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n if (autoplay && animating) { stopAutoplayTimer(); }\n\n panStart = true;\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n\n var $ = getEvent(e);\n events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\n\n if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\n preventDefaultBehavior(e);\n }\n\n lastPosition.x = initPosition.x = $.clientX;\n lastPosition.y = initPosition.y = $.clientY;\n if (carousel) {\n translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\n resetDuration(container, '0s');\n }\n }\n\n function onPanMove (e) {\n if (panStart) {\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n\n if (carousel) {\n if (!rafIndex) { rafIndex = raf(function(){ panUpdate(e); }); }\n } else {\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) { preventScroll = true; }\n }\n\n if ((typeof e.cancelable !== 'boolean' || e.cancelable) && preventScroll) {\n e.preventDefault();\n }\n }\n }\n\n function panUpdate (e) {\n if (!moveDirectionExpected) {\n panStart = false;\n return;\n }\n caf(rafIndex);\n if (panStart) { rafIndex = raf(function(){ panUpdate(e); }); }\n\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) {\n if (!preventScroll && isTouchEvent(e)) { preventScroll = true; }\n\n try {\n if (e.type) { events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e)); }\n } catch(err) {}\n\n var x = translateInit,\n dist = getDist(lastPosition, initPosition);\n if (!horizontal || fixedWidth || autoWidth) {\n x += dist;\n x += 'px';\n } else {\n var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew): dist * 100 / (viewport + gutter);\n x += percentageX;\n x += '%';\n }\n\n container.style[transformAttr] = transformPrefix + x + transformPostfix;\n }\n }\n\n function onPanEnd (e) {\n if (panStart) {\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n if (carousel) { resetDuration(container, ''); }\n panStart = false;\n\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n var dist = getDist(lastPosition, initPosition);\n\n if (Math.abs(dist)) {\n // drag vs click\n if (!isTouchEvent(e)) {\n // prevent \"click\"\n var target = getTarget(e);\n addEvents(target, {'click': function preventClick (e) {\n preventDefaultBehavior(e);\n removeEvents(target, {'click': preventClick});\n }});\n }\n\n if (carousel) {\n rafIndex = raf(function() {\n if (horizontal && !autoWidth) {\n var indexMoved = - dist * items / (viewport + gutter);\n indexMoved = dist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\n index += indexMoved;\n } else {\n var moved = - (translateInit + dist);\n if (moved <= 0) {\n index = indexMin;\n } else if (moved >= slidePositions[slideCountNew - 1]) {\n index = indexMax;\n } else {\n var i = 0;\n while (i < slideCountNew && moved >= slidePositions[i]) {\n index = i;\n if (moved > slidePositions[i] && dist < 0) { index += 1; }\n i++;\n }\n }\n }\n\n render(e, dist);\n events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\n });\n } else {\n if (moveDirectionExpected) {\n onControlsClick(e, dist > 0 ? -1 : 1);\n }\n }\n }\n }\n\n // reset\n if (options.preventScrollOnTouch === 'auto') { preventScroll = false; }\n if (swipeAngle) { moveDirectionExpected = '?'; }\n if (autoplay && !animating) { setAutoplayTimer(); }\n }\n\n // === RESIZE FUNCTIONS === //\n // (slidePositions, index, items) => vertical_conentWrapper.height\n function updateContentWrapperHeight () {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\n }\n\n function getPages () {\n var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\n return Math.min(Math.ceil(rough), slideCount);\n }\n\n /*\n * 1. update visible nav items list\n * 2. add \"hidden\" attributes to previous visible nav items\n * 3. remove \"hidden\" attrubutes to new visible nav items\n */\n function updateNavVisibility () {\n if (!nav || navAsThumbnails) { return; }\n\n if (pages !== pagesCached) {\n var min = pagesCached,\n max = pages,\n fn = showElement;\n\n if (pagesCached > pages) {\n min = pages;\n max = pagesCached;\n fn = hideElement;\n }\n\n while (min < max) {\n fn(navItems[min]);\n min++;\n }\n\n // cache pages\n pagesCached = pages;\n }\n }\n\n function info (e) {\n return {\n container: container,\n slideItems: slideItems,\n navContainer: navContainer,\n navItems: navItems,\n controlsContainer: controlsContainer,\n hasControls: hasControls,\n prevButton: prevButton,\n nextButton: nextButton,\n items: items,\n slideBy: slideBy,\n cloneCount: cloneCount,\n slideCount: slideCount,\n slideCountNew: slideCountNew,\n index: index,\n indexCached: indexCached,\n displayIndex: getCurrentSlide(),\n navCurrentIndex: navCurrentIndex,\n navCurrentIndexCached: navCurrentIndexCached,\n pages: pages,\n pagesCached: pagesCached,\n sheet: sheet,\n isOn: isOn,\n event: e || {},\n };\n }\n\n return {\n version: '2.9.4',\n getInfo: info,\n events: events,\n goTo: goTo,\n play: play,\n pause: pause,\n isOn: isOn,\n updateSliderHeight: updateInnerWrapperHeight,\n refresh: initSliderTransform,\n destroy: destroy,\n rebuild: function() {\n return tns(extend(options, optionsElements));\n }\n };\n};\n","// get css-calc \n// @return - false | calc | -webkit-calc | -moz-calc\n// @usage - var calc = getCalc(); \nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function calc() {\n var doc = document, \n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'), \n result = false;\n\n body.appendChild(div);\n try {\n var str = '(10px * 10)',\n vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\n val;\n for (var i = 0; i < 3; i++) {\n val = vals[i];\n div.style.width = val;\n if (div.offsetWidth === 100) { \n result = val.replace(str, ''); \n break;\n }\n }\n } catch (e) {}\n \n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return result;\n}","// get subpixel support value\n// @return - boolean\nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function percentageLayout() {\n // check subpixel layout supporting\n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n wrapper = doc.createElement('div'),\n outer = doc.createElement('div'),\n str = '',\n count = 70,\n perPage = 3,\n supported = false;\n\n wrapper.className = \"tns-t-subp2\";\n outer.className = \"tns-t-ct\";\n\n for (var i = 0; i < count; i++) {\n str += '
';\n }\n\n outer.innerHTML = str;\n wrapper.appendChild(outer);\n body.appendChild(wrapper);\n\n supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\n\n body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\n\n return supported;\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function mediaquerySupport () {\n if (window.matchMedia || window.msMatchMedia) {\n return true;\n }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'),\n style = doc.createElement('style'),\n rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\n position;\n\n style.type = 'text/css';\n div.className = 'tns-mq-test';\n\n body.appendChild(style);\n body.appendChild(div);\n\n if (style.styleSheet) {\n style.styleSheet.cssText = rule;\n } else {\n style.appendChild(doc.createTextNode(rule));\n }\n\n position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\n\n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return position === \"absolute\";\n}\n","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function has3DTransforms(tf){\n if (!tf) { return false; }\n if (!window.getComputedStyle) { return false; }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n el = doc.createElement('p'),\n has3d,\n cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\n\n cssTF += 'transform';\n\n // Add it to the body to get the computed style\n body.insertBefore(el, null);\n\n el.style[tf] = 'translate3d(1px,1px,1px)';\n has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\n\n body.fake ? resetFakeBody(body, docOverflow) : el.remove();\n\n return (has3d !== undefined && has3d.length > 0 && has3d !== \"none\");\n}\n","export function getSlideId() {\n var id = window.tnsId;\n window.tnsId = !id ? 1 : id + 1;\n \n return 'tns' + window.tnsId;\n}","// create and append style sheet\nexport function createStyleSheet (media, nonce) {\n // Create the