{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/search/search.js","webpack:///./cartridges/plugin_frontend_core/cartridge/client/default/js/utils/utils_cw.js","webpack:///./cartridges/plugin_frontend_core/cartridge/client/default/js/constants.js","webpack:///./cartridges/app_clockwork_orange/cartridge/client/default/js/pages/search.js","webpack:///./cartridges/plugin_catalog/cartridge/client/default/js/search/search.js","webpack:///./node_modules/nouislider/distribute/nouislider.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack:///./cartridges/plugin_frontend_core/cartridge/client/default/scss/_exports.scss?d09d","webpack:///./cartridges/plugin_frontend_core/cartridge/client/default/scss/_exports.scss","webpack:///./node_modules/css-loader/lib/css-base.js","webpack:///./node_modules/style-loader/lib/addStyles.js","webpack:///./node_modules/style-loader/lib/urls.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","updateDom","$results","selector","$updates","find","$","empty","html","handleRefinements","each","this","removeClass","className","replace","addClass","getContent","$element","$target","showMoreUrl","data","spinner","start","ajax","url","method","success","response","append","stop","error","filter","on","show","closeRefinments","hide","resize","window","sort","e","preventDefault","trigger","selectedUrl","showMore","stopPropagation","replaceWith","options","forEach","option","id","val","updateSortOptions","applyFilter","currentTarget","href","page","specialHandlers","keys","parseResults","showContentTab","remove","CONST","require","appendParamToURL","oldUrl","queryStart","indexOf","length","encodeURIComponent","debounce","func","wait","immediate","timeout","context","args","arguments","callNow","later","apply","clearTimeout","setTimeout","doubleTapElement","element","lastTap","exists","input","getGeoLocation","callback","navigator","geolocation","getCurrentPosition","geoLocation","getWindowHeight","outerHeight","innerHeight","document","documentElement","clientHeight","isKeyInObject","isLargeScreen","outerWidth","isMediumScreen","isSmallScreen","isTouch","msMaxTouchPoints","loadJsonP","config","ref","getElementsByTagName","script","createElement","callbackScriptName","randomString","onSuccess","src","callBackFormat","parentNode","insertBefore","onload","onError","onerror","rerenderElement","orgStyling","eq","css","scrollToElement","conf","rect","getBoundingClientRect","win","ownerDocument","defaultView","top","pageYOffset","duration","speed","offset","animate","scrollTop","updateComponentConfig","elementConfig","rawElementConfig","getAttribute","JSON","parse","extend","insertParam","history","pushState","newurl","updateQueryParams","location","path","removeURLParameter","isMediaBreakpoint","breakpointKey","isUp","undefined","breakpoints","Error","concat","breakpointValue","replaceSpaceWithPeriod","slickPreventBeyondEdge","$carousel","preventBeyondEdge","slick","slickObj","variableWidth","$slickTrack","selectors","track","$nextButton","nextButton","$allSlides","slide","$lastSlide","timeoutTime","trackPosition","position","left","lastSlideWidth","width","containerWidth","listWidth","attr","attributes","disabled","classes","beforeChange","event","obj","len","str","Math","random","toString","slice","parameter","urlparts","split","newUrl","prefix","pars","lenPars","lastIndexOf","splice","join","string","sharedVariables","buffer","times","scrollToAnimation","cssTransitionTime","heartTransitionTime","xs","parseFloat","breakpoint_xs","sm","breakpoint_sm","md","breakpoint_md","lg","breakpoint_lg","xl","breakpoint_xl","pubSubEvents","hideNotification","mailChimpSuccess","showNotification","wishlist","clickAddToWishlist","addToWishlist","displayMessage","updateAmount","events","ajaxSuccess","beforeAddToCart","blur","bonusProductSelect","bsCollapseHidden","bsCollapseHide","bsCollapseShow","bsCollapseShown","bsModalHidden","bsModalHide","bsModalShow","bsModalShown","cart","change","click","focusin","focusout","idle","keydown","keypress","keyup","load","loginModalShown","minicartTriggerPopover","modalPanes","next","prev","mouseenter","mouseleave","productAfterAddToCart","productAfterAttrValuesUpdate","productAfterAttributeSelect","productAfterRemoveFromCart","productAvailabilityUpdated","productBeforeAttributeSelect","productChangeQuantity","productStatusUpdate","productTileClick","productPromotionClick","productUpdateAddToCart","checkoutOption","promotionClick","scroll","searchFilter","searchSort","setShippingMethodSelection","showQuickview","unslick","submit","tilesLoaded","toggleMobileMenu","toggleModal","touchend","touchstart","transitionEnd","update","account","notAuthenticated","backdrop","body","column","footer","form","checkbox","select","selectedOption","selectedRadio","textarea","disabledField","enabled","header","htmlBody","img","listItem","modal","notTouch","activePane","container","pane","product","addToCart","item","message","selected","availabilityMsg","jsProductContainer","detailPage","productContainer","productID","productOption","productOptionSelected","content","tile","promotion","initialized","all","slider","currentSlide","notInitialized","unOrderedListItem","row","contentSearch","active","childExpanded","collapsed","dBlock","dInlineBlock","dNone","expanded","hover","invalid","modalOpen","errorState","isInWishlist","scrollLock","selectable","unselectable","action","actionUrl","addressId","alt","ariaExpanded","ariaPopUp","attrValue","attribute","attributeValue","available","checked","class","color","dataToggle","dataUrl","storeID","outerHTML","pattern","pid","optionID","productVariationID","valueID","quantity","readyToOrder","slickConfig","srcset","style","target","dataTarget","textSelect","textSelected","title","translationResource","uuid","urlAdd","urlRemove","pipelines","cartShow","checkoutStep","states","isAnimating","cookies","queryParams","processInclude","onjQueryLoad","filterByUrl","noUiSlider","baseSearch","_require","filterBar","gridFooter","gridHeader","headerBar","modalbackground","pageTitle","productGrid","productGridFooter","productTile","productSort","productResultCount","priceRefinement","refinedValues","refinement","refinementBody","refinementButtonMobile","refinementLinks","refinementModal","refinementModalClose","refinementModalCloseButton","refinementBarContainer","refinementCategories","refinements","refinementsActive","refinementNavigationListItem","refinementNavigationListItemShowMoreButton","refinementNavigationShowMoreButton","refinementNavigationMoreButton","refinementPriceSlider","refinementPriceSliderFromValue","refinementPriceSliderToValue","refinementPriceSliderTarget","refinementPriceSliderHandlerContainer","refinementPriceSliderLowerHandler","refinementPriceSliderUpperHandler","contentSearchResults","showMoreContent","showMoreContentButton","visibleOption","resultCountVisible","resultCount","filterActive","quickRefinement","pageNumber","priceSliderMinValue","priceSliderMaxValue","priceSliderFromRange","priceSliderToRange","priceSliderUrl","refinementItem","$elements","quickRefinements","$document","$modalbackground","$refinementModal","$refinementNavigationShowMoreButton","lockScroll","isLock","$contentSearchResults","$pageContainer","updateUrl","requestedUrl","showMoreButton","handler","special","showFilterModal","hideFilterModal","showAllRefinementCategories","$getChild","closest","children","setPriceSliderHandlers","lowerHandler","upperHandler","$lowerHandlerContainer","opacity","initPriceSlider","filterTimeout","$priceSlider","min","max","from","to","parseInt","connect","margin","range","step","onSliderChange","$fromInput","$toInput","values","floor","ceil","set","$sliderTarget","$priceRefinementBody","$priceRefinementLowerHandler","$priceRefinementUpperHandler","pmin","pmax","onApplyFilters","requestUrl","dataset","$htmlBody","then","results","catch","onApplySort","$self","selectedIndex","index","el","newHtml","params","getUrlParams","srule","appendUrlParam","console","warn","complete","onSearchResize","formattedKey","paramStartPoint","substr","paramEndPoint","paramValuePart","separator","queryStringIndex","queryString","substring","part","subparts","decodeURIComponent","addEventListener","refinementUrl","currentParams","currentUrl","currentURL","documentURL","replaceState","$response","assign","showMoreRefinements","ready","initQuickRefinement","infinite","slidesToShow","is","define","VERSION","isNumeric","a","isNaN","isFinite","addClassFor","asArray","Array","isArray","countDecimals","numStr","pieces","String","classList","add","RegExp","getPageOffset","doc","supportPageOffset","pageXOffset","isCSS1Compat","compatMode","x","scrollLeft","y","subRangeRatio","pa","pb","fromPercentage","getJ","arr","j","toStepping","xVal","xPct","va","vb","abs","toPercentage","getStep","xSteps","snap","b","round","handleEntryPoint","that","percentage","push","xHighestCompleteStep","handleStepPoint","totalSteps","xNumSteps","highestStep","Number","toFixed","Spectrum","entry","singleStep","ordered","_typeof","getMargin","fromStepping","isPercentage","getNearbySteps","stepBefore","startValue","thisStep","stepAfter","countStepDecimals","stepDecimals","map","convert","defaultFormatter","validateFormat","isValidFormatter","testStep","parsed","testRange","spectrum","testStart","handles","testSnap","testAnimate","testAnimationDuration","animationDuration","testConnect","testOrientation","ort","testMargin","testLimit","limit","testPadding","padding","testDirection","dir","testBehaviour","tap","drag","fixed","testTooltips","tooltips","formatter","testAriaFormat","ariaFormat","testFormat","format","testCssPrefix","cssPrefix","testCssClasses","cssClasses","testUseRaf","useRequestAnimationFrame","testOptions","tests","defaults","base","origin","handle","handleLower","handleUpper","horizontal","vertical","background","ltr","rtl","draggable","tooltip","pips","pipsHorizontal","pipsVertical","marker","markerHorizontal","markerVertical","markerNormal","markerLarge","markerSub","valueHorizontal","valueVertical","valueNormal","valueLarge","valueSub","styles","styleOposite","closure","originalOptions","scope_Base","scope_Handles","scope_Connects","scope_Self","scope_Pips","behaviour","tips","actions","pointerEnabled","move","end","msPointerEnabled","supportsPassive","CSS","supports","opts","getSupportsPassive","scope_Target","scope_Locations","scope_HandleNumbers","scope_ActiveHandle","scope_Spectrum","scope_Values","scope_Events","scope_Listeners","scope_Document","scope_DocumentElement","scope_Body","addNodeTo","div","appendChild","addOrigin","handleNumber","setAttribute","addConnect","addTooltip","firstChild","addMarking","spread","filterFunc","valueSizeClasses","markerSizeClasses","valueOrientationClasses","markerOrientationClasses","getClasses","type","source","sizeClasses","node","innerText","addSpread","removePips","parentElement","removeChild","grid","density","group","stepped","v","getGroup","array","indexes","firstInRange","lastInRange","ignoreFirst","ignoreLast","prevPct","unshift","current","q","newPct","pctDifference","steps","realSteps","stepsize","low","high","generateSpread","baseSize","height","attachEvent","hasAttribute","contains","test","pageOffset","touch","mouse","pointer","touches","changedTouches","pageX","pageY","clientX","clientY","points","cursor","fixEvent","buttons","calcPoint","methods","eventName","passive","calcPointToPercentage","elem","orientation","docElem","proposal","userAgent","clientTop","clientLeft","moveHandles","upward","locations","handleNumbers","proposals","f","reverse","checkHandlePosition","state","setHandle","fireEvent","targetEvent","eventType","documentLeave","nodeName","relatedTarget","eventEnd","eventMove","appVersion","buttonsProperty","movement","startCalcPoint","removeEventListener","setZindex","eventStart","moveEvent","endEvent","outEvent","getComputedStyle","eventTap","pos","getClosestHandle","eventHover","reference","lookBackward","lookForward","getValue","toPct","pct","zIndex","childNodes","stateUpdate","updateConnect","requestAnimationFrame","updateHandlePosition","h","setValue","valueSet","fireSetEvent","isInit","valueGet","bindEvent","namespacedEvent","addSlider","connectOptions","addElements","destroy","nearbySteps","increment","decrement","off","namespace","tEvent","tNamespace","reset","__moveHandles","updateOptions","optionsToUpdate","updateAble","newOptions","handleBefore","handleAfter","eventHolders","eventHolder","unencoded","formattedValue","innerHTML","positions","now","text","version","api","iterator","constructor","include","transform","locals","useSourceMap","list","cssMapping","btoa","sourceMapping","sourceMap","unescape","stringify","sourceURLs","sources","sourceRoot","cssWithMappingToString","mediaQuery","alreadyImportedModules","fn","memo","stylesInDom","isOldIE","atob","getTarget","querySelector","getElement","styleTarget","HTMLIFrameElement","contentDocument","head","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","domStyle","refs","parts","addStyle","listToStyles","newStyles","media","insertStyleElement","insertInto","lastStyleElementInsertedAtTop","insertAt","nextSibling","before","removeStyleElement","idx","createStyleElement","attrs","addAttrs","result","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","updateLink","applyToTag","newObj","DEBUG","newList","mayRemove","textStore","replaceText","replacement","Boolean","styleSheet","cssText","cssNode","createTextNode","autoFixUrls","convertToAbsoluteUrls","blob","oldSrc","baseUrl","protocol","host","currentDir","pathname","fullMatch","origUrl","unquotedOrigUrl","trim","$1"],"mappings":"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","file":"app_clockwork_orange/cartridge/static/default/js/pages/search.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 362);\n","'use strict';\n\n/**\n * Update DOM elements with Ajax results\n *\n * @param {Object} $results - jQuery DOM element\n * @param {string} selector - DOM element to look up in the $results\n * @return {undefined}\n */\nfunction updateDom($results, selector) {\n var $updates = $results.find(selector);\n $(selector).empty().html($updates.html());\n}\n\n/**\n * Keep refinement panes expanded/collapsed after Ajax refresh\n *\n * @param {Object} $results - jQuery DOM element\n * @return {undefined}\n */\nfunction handleRefinements($results) {\n $('.refinement.active').each(function () {\n $(this).removeClass('active');\n\n $results\n .find('.' + $(this)[0].className.replace(/ /g, '.'))\n .addClass('active');\n });\n\n updateDom($results, '.refinements');\n}\n\n/**\n * Parse Ajax results and updated select DOM elements\n *\n * @param {string} response - Ajax response HTML code\n * @return {undefined}\n */\nfunction parseResults(response) {\n var $results = $(response);\n var specialHandlers = {\n '.refinements': handleRefinements\n };\n\n // Update DOM elements that do not require special handling\n [\n '.grid-header',\n '.header-bar',\n '.header.page-title',\n '.product-grid',\n '.show-more',\n '.filter-bar'\n ].forEach(function (selector) {\n updateDom($results, selector);\n });\n\n Object.keys(specialHandlers).forEach(function (selector) {\n specialHandlers[selector]($results);\n });\n}\n\n/**\n * This function retrieves another page of content to display in the content search grid\n * @param {JQuery} $element - the jquery element that has the click event attached\n * @param {JQuery} $target - the jquery element that will receive the response\n * @return {undefined}\n */\nfunction getContent($element, $target) {\n var showMoreUrl = $element.data('url');\n $.spinner().start();\n $.ajax({\n url: showMoreUrl,\n method: 'GET',\n success: function (response) {\n $target.append(response);\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * Update sort option URLs from Ajax response\n *\n * @param {string} response - Ajax response HTML code\n * @return {undefined}\n */\nfunction updateSortOptions(response) {\n var $tempDom = $('
').append($(response));\n var sortOptions = $tempDom.find('.grid-footer').data('sort-options').options;\n sortOptions.forEach(function (option) {\n $('option.' + option.id).val(option.url);\n });\n}\n\nmodule.exports = {\n filter: function () {\n // Display refinements bar when Menu icon clicked\n $('.container').on('click', 'button.filter-results', function () {\n $('.refinement-bar, .modal-background').show();\n });\n },\n\n closeRefinments: function () {\n // Refinements close button\n $('.container').on('click', '.refinement-bar button.close, .modal-background', function () {\n $('.refinement-bar, .modal-background').hide();\n });\n },\n\n resize: function () {\n // Close refinement bar and hide modal background if user resizes browser\n $(window).resize(function () {\n $('.refinement-bar, .modal-background').hide();\n });\n },\n\n sort: function () {\n // Handle sort order menu selection\n $('.container').on('change', '[name=sort-order]', function (e) {\n e.preventDefault();\n\n $.spinner().start();\n $(this).trigger('search:sort', this.value);\n $.ajax({\n url: this.value,\n data: { selectedUrl: this.value },\n method: 'GET',\n success: function (response) {\n $('.product-grid').empty().html(response);\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n\n showMore: function () {\n // Show more products\n $('.container').on('click', '.show-more button', function (e) {\n e.stopPropagation();\n var showMoreUrl = $(this).data('url');\n\n e.preventDefault();\n\n $.spinner().start();\n $(this).trigger('search:showMore', e);\n $.ajax({\n url: showMoreUrl,\n data: { selectedUrl: showMoreUrl },\n method: 'GET',\n success: function (response) {\n $('.grid-footer').replaceWith(response);\n updateSortOptions(response);\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n\n applyFilter: function () {\n // Handle refinement value selection and reset click\n $('.container').on(\n 'click',\n '.refinements li a, .refinement-bar a.reset, .filter-value a, .swatch-filter a',\n function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n $.spinner().start();\n $(this).trigger('search:filter', e);\n $.ajax({\n url: e.currentTarget.href,\n data: {\n page: $('.grid-footer').data('page-number'),\n selectedUrl: e.currentTarget.href\n },\n method: 'GET',\n success: function (response) {\n parseResults(response);\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n\n showContentTab: function () {\n // Display content results from the search\n $('.container').on('click', '.content-search', function () {\n if ($('#content-search-results').html() === '') {\n getContent($(this), $('#content-search-results'));\n }\n });\n\n // Display the next page of content results from the search\n $('.container').on('click', '.show-more-content button', function () {\n getContent($(this), $('#content-search-results .result-count'));\n $('.show-more-content').remove();\n });\n }\n};\n","'use strict';\n\nconst CONST = require('../constants');\n\n/**\n * @namespace cwUtil\n * - keep functions in order as exported\n * - group functions by type of adjustments, e.g. device and screen size detection, ajax, typechecks.\n * - think similar setup as lodash.\n * - keep functions and exports in alphabetical order.\n */\n\n/* eslint-disable no-use-before-define */\nmodule.exports = {\n appendParamToURL,\n debounce,\n doubleTapElement,\n exists,\n getGeoLocation,\n getWindowHeight,\n isKeyInObject,\n isLargeScreen,\n isMediumScreen,\n isSmallScreen,\n isTouch,\n loadJsonP,\n randomString,\n rerenderElement,\n scrollToElement,\n updateComponentConfig,\n insertParam,\n removeURLParameter,\n updateQueryParams,\n isMediaBreakpoint,\n replaceSpaceWithPeriod,\n slickPreventBeyondEdge\n};\n/* eslint-enable */\n\n/**\n * Appends paramaters to a new url\n * @param {*} oldUrl string\n * @param {*} name value\n * @param {*} value value\n * @returns {string} new url\n */\nfunction appendParamToURL(oldUrl, name, value) {\n var queryStart = '?';\n if (oldUrl.indexOf(queryStart) !== -1 && oldUrl.indexOf(queryStart) !== oldUrl.length - 1) {\n queryStart = '&';\n }\n\n if (queryStart === '?' && oldUrl.indexOf(queryStart) !== -1) {\n queryStart = '';\n }\n\n return oldUrl + queryStart + name + '=' + encodeURIComponent(value);\n}\n\n/**\n * @LROS TODO: refactor during architecture sprint - https://clockworkjira.atlassian.net/browse/CWO-244\n * Debounce util\n * @memberof cwUtil\n * @param {Function} func callback to debounce\n * @param {*} wait in ms for settimeout\n * @param {boolean} immediate ovverride to call callback immediately\n * @returns {function} context to call callback in\n */\nfunction debounce(func, wait, immediate) {\n var timeout;\n\n return function () {\n var context = this,\n args = arguments,\n callNow = immediate && !timeout;\n\n var later = function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n}\n\n/**\n * @LROS TODO: refactor during architecture sprint - https://clockworkjira.atlassian.net/browse/CWO-244\n * Checks if device screen width is larger than md screen\n * @memberof cwUtil\n * @param {HtmlElement} element to check tap event against\n * @returns {boolean} yes if less than md constant\n */\nfunction doubleTapElement(element) {\n if (window.lastTap === element) {\n return true;\n }\n\n window.lastTap = element;\n return false;\n}\n\n/**\n* getGeoLocation - Gets the current GPS location of the user\n@param {function} callback - The function to call after getGeoLocation is done\n@returns {function} callback - The callback function in which the location is passed\n*/\nfunction getGeoLocation(callback) {\n navigator.geolocation.getCurrentPosition(function geoLocationCallback(geoLocation) {\n return callback(geoLocation);\n });\n}\n\n/**\n * @public exists\n * @param {*} input - The input to verify its existance\n * @returns {boolean} - Boolean value stating the existance of the input\n * @description\n * Verifies existance of a certain element by checking for type, null and length\n * Usage: use with either querySelector() or querySelectorAll()\n * querySelector will not have a 'length', e.g. this would return true if other conditions are true\n * querySelectorAll will have a 'length', e.g. this would return true if all conditions are true\n */\nfunction exists(input) {\n return typeof input !== 'undefined' && input !== null && ('length' in input ? input.length > 0 : true);\n}\n\n/**\n * @LROS TODO: refactor during architecture sprint - https://clockworkjira.atlassian.net/browse/CWO-244\n * @returns {number} browser window height\n */\nfunction getWindowHeight() {\n return window.outerHeight\n || window.innerHeight\n || document.documentElement.clientHeight;\n}\n\n/**\n* isKeyInObject\n*/\nconst isKeyInObject = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key);\n\n/**\n * @deprecated in favor of using isMediaBreakpoint\n * @memberof cwUtil\n * @improvement: share screen size context with scss\n * @returns {boolean} yes if less than md constant\n */\nfunction isLargeScreen() {\n return $(window).outerWidth() >= 992;\n}\n/**\n * @memberof cwUtil\n * @param {string} breakpointKey from constants that should match css breakpoint\n * @param {boolean} [isUp] by default is true since mobile first, reverses condition\n * @return {boolean} whether window is larger than specified breakpoint\n */\nfunction isMediaBreakpoint(breakpointKey, isUp = true) {\n if (!isKeyInObject(CONST.breakpoints, breakpointKey)) {\n throw new Error(`cwUtil.isMediaBreakpoint: ${breakpointKey} -- does not exist in constants breakpoints object`);\n }\n\n const outerWidth = $(window).outerWidth();\n const breakpointValue = CONST.breakpoints[breakpointKey];\n return isUp ? (outerWidth > breakpointValue) : (outerWidth < (breakpointValue - 1));\n}\n\n/**\n * @deprecated in favor of using isMediaBreakpoint\n * @memberof cwUtil\n * @improvement: share screen size context with scss\n * @returns {boolean} yes if less than md constant\n */\nfunction isMediumScreen() {\n return $(window).outerWidth() < 992;\n}\n\n/**\n * Checks if device is small screen\n * @deprecated in favor of using isMediaBreakpoint\n * @memberof cwUtil\n * @improvement: share screen size context with scss\n * @returns {boolean} yes if less than sm constant\n */\nfunction isSmallScreen() {\n return $(window).outerWidth() < 520;\n}\n\n/**\n * Checks if browser context is a touch device\n * @memberof cwUtil\n * @returns {boolean} yes if is touch device\n */\nfunction isTouch() {\n return (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0));\n}\n\n/**\n * @typedef {Object} loadJsonPConfig\n * @param {string} url to execute jsonp call against\n * @param {string} callBackFormat\n * @param {function} onError callback to handle error events\n * @param {function} onSuccess callback to handle success events\n */\n\n/**\n * Util for executing a jsonp call, for use with apis that have CORS issues or don't have ajax available\n * @memberof cwUtil\n * @param {loadJsonPConfig} config for jsonp execution\n * @returns {void}\n */\nfunction loadJsonP(config) {\n // Create script with url and callback (if specified)\n var ref = window.document.getElementsByTagName('script')[0];\n var script = window.document.createElement('script');\n var callbackScriptName = 'jsonp_' + randomString(10);\n\n window[callbackScriptName] = config.onSuccess;\n script.src = config.url + config.callBackFormat + callbackScriptName;\n\n // Insert script tag into the DOM (append to )\n ref.parentNode.insertBefore(script, ref);\n\n // After the script is loaded (and executed), remove it\n script.onload = function () {\n this.remove();\n };\n\n if (config && config.onError) {\n script.onerror = config.onError;\n }\n}\n\n/**\n * Generate a random string for jsonP callback function assignment\n * Helper for loadJsonP function\n * reference: https://github.com/larryosborn/JSONP/blob/master/src/jsonp.coffee\n * @private\n * @param {number} length of string to generate\n * @returns {string} random string for jsonp_callback\n */\nfunction randomString(length) {\n var len = length || 10;\n var str = '';\n\n while (str.length < len) {\n str += Math.random().toString(36).slice(2, 3);\n }\n\n return str;\n}\n\n/**\n* util to remove query params form a url\n* @param {string} url to remove param from\n* @param {string} parameter to remove\n* @returns {string} new url\n*/\nfunction removeURLParameter(url, parameter) {\n // prefer to use l.search if you have a location/link object\n var urlparts = url && url.split('?');\n var newUrl = url;\n if (urlparts && urlparts.length >= 2) {\n var prefix = encodeURIComponent(parameter) + '=';\n var pars = urlparts[1].split(/[&;]/g);\n\n // reverse iteration as may be destructive\n\n var lenPars = pars.length;\n for (var i = lenPars; i-- > 0;) {\n // idiom for string.startsWith\n if (pars[i].lastIndexOf(prefix, 0) !== -1) {\n pars.splice(i, 1);\n }\n }\n\n newUrl = urlparts[0] + (lenPars > 0 ? '?' + pars.join('&') : '');\n return newUrl;\n }\n\n return newUrl;\n}\n\n/**\n* replaceSpaceWithPeriod\n*/\nconst replaceSpaceWithPeriod = (string) => string.replace(/ /g, '.');\n\n/**\n * Util to rerender an element applying the same styles it had\n * @memberof cwUtil\n * @param {HTMLElement} element to rerender\n * @returns {void}\n */\nfunction rerenderElement(element) {\n var cssProperty = 'transform';\n var $element = $(element);\n var orgStyling = $element.eq(0).css(cssProperty);\n\n $(element).eq(0).css(cssProperty, 'rotateZ(0deg)');\n\n setTimeout(function () {\n $(element).eq(0).css(cssProperty, orgStyling);\n }, 10);\n}\n\n/**\n * @public scrollToElement\n * @param {HTMLElement} element - the element to scroll to\n * @param {Object} [config] - A configiguration Object\n * @param {number} [config.speed=300] - The scroll speed\n * @param {number} [config.offset=0] - an offset where to scroll to\n */\nfunction scrollToElement(element, config) {\n if (!element) {\n return;\n }\n var conf = config || {};\n var rect = element.getBoundingClientRect();\n var win = element.ownerDocument.defaultView;\n var top = rect.top + win.pageYOffset;\n\n var duration = conf.speed || 300;\n\n if (conf.offset) top -= conf.offset;\n\n $('html, body').animate({\n scrollTop: top\n }, duration);\n}\n\n/**\n * Retrieves data-component-config attribute from a node if it exists and updates the module configuration with it\n * @memberof cwUtil\n * @param {HtmlElement} element to retrieve configuration from\n * @param {Object} config to mutate and update\n * @returns {Object} updated config if applicable, default if not\n */\nfunction updateComponentConfig(element, config) {\n var configAttribute = 'data-component-settings';\n var rawElementConfig = element.getAttribute(configAttribute);\n var elementConfig;\n\n if (!rawElementConfig) {\n return config;\n }\n\n try {\n elementConfig = JSON.parse(rawElementConfig);\n } catch (e) {\n return config;\n }\n\n return $.extend(true, config, elementConfig);\n}\n/**\n * Removes query params from url and passes new ones\n * @param {string} url value\n * @param {string} key value\n * @param {*} value value\n * @returns {string} new url\n */\nfunction updateQueryParams(url, key, value) {\n var removedCurrentParamUrl = removeURLParameter(url, key);\n var newurl = appendParamToURL(removedCurrentParamUrl, key, value);\n\n return newurl;\n}\n\n/**\n * Push state supports ie10+ https://caniuse.com/#search=pushstate\n * will use graceful degradation here\n * @param {string} key to add as a param\n * @param {*} value to set the pareter to\n * @returns {void}\n */\nfunction insertParam(key, value) {\n if (history.pushState) {\n var currentUrl = window.location.href;\n // remove any param for the same key\n var newurl = updateQueryParams(currentUrl, key, value);\n window.history.pushState({ path: newurl }, '', newurl);\n }\n}\n\n/**\n* slickPreventBeyondEdge\n* This custom function will make sure that, if 'variableWidth' is true, it's not possible to\n* continue going right even when the last slide is already fully in view.\n* @param {JQuery|HTMLElement} $carousel - The slick carousel\n*/\nfunction slickPreventBeyondEdge($carousel) {\n function preventBeyondEdge(slick) {\n var slickObj = slick || $carousel[0].slick;\n\n // Stop if 'variableWidth' is not set to true and use slick's default UI\n if (!slickObj.options || !slickObj.options.variableWidth) {\n return;\n }\n\n const $slickTrack = $carousel.find(CONST.selectors.slick.track);\n const $nextButton = $carousel.find(CONST.selectors.slick.nextButton);\n const $allSlides = $carousel.find(CONST.selectors.slick.slide);\n if (!$allSlides && $allSlides.length === 0) {\n return;\n }\n const $lastSlide = $allSlides.eq($allSlides.length - 1);\n\n // Wait for slick animation to be done before doing calculations\n const timeoutTime = slick && slickObj.options ? slickObj.options.speed : 0;\n\n setTimeout(() => {\n const trackPosition = $slickTrack.position().left;\n const lastSlideWidth = $lastSlide.width();\n const containerWidth = slickObj.listWidth;\n\n // $lastSlide.position().left returns a static position because it's relative to .slick-track.\n // This is why we add the position of .slick-track to determine the position of the last slide\n // relative to the slick-carousel.\n const lastSlideVisualPosition = $lastSlide.position().left + trackPosition;\n const lastSlideFullyInView = (lastSlideVisualPosition + lastSlideWidth) < containerWidth;\n\n if (lastSlideFullyInView) {\n $nextButton.attr(CONST.attributes.disabled, true).addClass(CONST.classes.slick.disabled);\n } else {\n $nextButton.attr(CONST.attributes.disabled, false).removeClass(CONST.classes.slick.disabled);\n }\n }, timeoutTime);\n }\n\n $carousel.on({\n beforeChange: (event, slick) => {\n preventBeyondEdge(slick);\n }\n });\n\n preventBeyondEdge(false);\n}\n","'use strict';\n\n// shared variables are defined in SCSS\nconst sharedVariables = require('../scss/_exports.scss');\n\n/**\n * Events for use with pubsub\n * This way events that are used in the application can be tracked\n * When adding a new subscription, make sure to add them here.\n */\nconst pubSubEvents = {\n hideNotification: 'notification.hide',\n mailChimpSuccess: 'mailchimp.success',\n showNotification: 'notification.show',\n wishlist: {\n clickAddToWishlist: 'wishlist.clickAddToWishlist',\n addToWishlist: 'wishlist.addToWishlist',\n displayMessage: 'wishlist.displayMessage',\n updateAmount: 'wishlist.updateAmount'\n }\n};\n\nconst events = {\n ajaxSuccess: 'ajaxSuccess',\n beforeAddToCart: 'product:beforeAddToCart',\n blur: 'blur',\n bonusProductSelect: 'bonusproduct:updateSelectButton',\n bsCollapseHidden: 'hidden.bs.collapse',\n bsCollapseHide: 'hise.bs.collapse',\n bsCollapseShow: 'show.bs.collapse',\n bsCollapseShown: 'shown.bs.collapse',\n bsModalHidden: 'hidden.bs.modal',\n bsModalHide: 'hide.bs.modal',\n bsModalShow: 'show.bs.modal',\n bsModalShown: 'shown.bs.modal',\n cart: 'cart:chequeAdded',\n change: 'change',\n click: 'click',\n focusin: 'focusin',\n focusout: 'focusout',\n hide: 'hide',\n idle: 'idle',\n keydown: 'keydown',\n keypress: 'keypress',\n keyup: 'keyup',\n load: 'load',\n loginModalShown: 'loginModal:shown',\n minicartTriggerPopover: 'minicart:triggerPopover',\n modalPanes: {\n next: 'modal-pane:next',\n prev: 'modal-pane:prev'\n },\n mouseenter: 'mouseenter',\n mouseleave: 'mouseleave',\n productAfterAddToCart: 'product:afterAddToCart',\n productAfterAttrValuesUpdate: 'product:updateAttrValues',\n productAfterAttributeSelect: 'product:afterAttributeSelect',\n productAfterRemoveFromCart: 'product:afterRemoveFromCart',\n productAvailabilityUpdated: 'product:updateAvailability',\n productBeforeAttributeSelect: 'product:beforeAttributeSelect',\n productChangeQuantity: 'product:changeQuantity',\n productStatusUpdate: 'product:statusUpdate',\n productTileClick: 'productTileClick',\n productPromotionClick: 'productPromotionClick',\n productUpdateAddToCart: 'product:updateAddToCart',\n checkoutOption: 'checkoutOption',\n promotionClick: 'promotionClick',\n resize: 'resize',\n scroll: 'scroll',\n searchFilter: 'search:filter',\n searchSort: 'search:sort',\n setShippingMethodSelection: 'setShippingMethodSelection',\n show: 'show',\n showQuickview: 'quickview:show',\n slick: {\n unslick: 'unslick'\n },\n start: 'start',\n submit: 'submit',\n tilesLoaded: 'tilesloaded',\n toggleMobileMenu: 'menu:toggleMobileMenu',\n toggleModal: 'toggleModal',\n touchend: 'touchend',\n touchstart: 'touchstart',\n transitionEnd: 'transitionend',\n update: 'update'\n};\n\nconst selectors = {\n account: {\n notAuthenticated: '.js-not-authenticated'\n },\n backdrop: '.modal-backdrop',\n body: 'body',\n column: '[class*=\"col-\"]',\n footer: 'footer',\n form: {\n checkbox: 'checkbox',\n form: 'form',\n input: 'input',\n select: 'select',\n selectedOption: 'option:selected',\n selectedRadio: 'input:checked',\n textarea: 'textarea',\n disabledField: {\n enabled: 'input.enabled',\n disabled: 'input.disabled'\n }\n },\n header: 'header',\n html: 'html',\n htmlBody: 'html, body',\n img: 'img',\n input: 'input',\n listItem: 'li',\n modal: '.modal',\n notTouch: 'html:not(.touch)',\n modalPanes: {\n activePane: '.modal-pane--active',\n container: '.js-modal-pane-container',\n pane: '.js-modal-pane'\n },\n page: '.js-page',\n product: {\n addToCart: '.js-add-to-cart',\n addToWishlist: '.js-add-to-wishlist',\n attributes: {\n container: '.product-attributes',\n item: '.product-attributes__item',\n message: '.product-attribute__message',\n selected: '.product-attributes__item.selected'\n },\n availabilityMsg: '.js-availability-msg',\n jsProductContainer: '.js-product',\n detailPage: '.product-detail-page',\n productContainer: '.product-detail',\n productID: '.product-id',\n productOption: '.product-option',\n productOptionSelected: '.options-select option:selected'\n },\n content: {\n tile: '[data-js=content-tile]'\n },\n promotion: {\n tile: '[data-js-content=promotion-tile]'\n },\n script: 'script',\n slick: {\n initialized: '.slick-initialized',\n all: '[data-slick-regular]',\n slider: '.slick-slider',\n track: '.slick-track',\n nextButton: '.slick-next',\n slide: '.slick-slide',\n currentSlide: '.slick-current',\n notInitialized: ':not(.slick-initialized)'\n },\n unOrderedListItem: 'ul',\n row: '.row',\n contentSearch: '.content-search'\n};\n\nconst classes = {\n active: 'active',\n childExpanded: 'child-expanded',\n collapsed: 'collapsed',\n disabled: 'disabled',\n dBlock: 'd-block',\n dInlineBlock: 'd-inline-block',\n dNone: 'd-none',\n expanded: 'expanded',\n hide: 'hide',\n hover: 'hover',\n invalid: 'is-invalid',\n modalOpen: 'modal-open',\n product: {\n attributes: {\n errorState: 'product-attributes--error'\n },\n isInWishlist: 'is-in-wishlist'\n },\n modalPanes: {\n activePane: 'modal-pane--active'\n },\n scrollLock: 'scroll-lock',\n selectable: 'selectable',\n selected: 'selected',\n show: 'show',\n slick: {\n initialized: 'slick-initialized',\n currentSlide: 'slick-current',\n disabled: 'slick-disabled'\n },\n unselectable: 'unselectable'\n};\n\nconst attributes = {\n action: 'action',\n actionUrl: 'action-url',\n addressId: 'address-id',\n alt: 'alt',\n ariaExpanded: 'aria-expanded',\n ariaPopUp: 'aria-haspopup',\n attrValue: 'data-attr-value',\n attribute: 'data-attr',\n attributeValue: 'data-attr-value',\n available: 'available',\n checked: 'checked',\n class: 'class',\n color: 'color',\n dataToggle: 'data-toggle',\n dataUrl: 'data-url',\n storeID: 'storeid',\n disabled: 'disabled',\n href: 'href',\n id: 'id',\n name: 'name',\n outerHTML: 'outerHTML',\n pattern: 'pattern',\n pid: 'pid',\n product: {\n isInWishlist: 'data-isinwishlist',\n optionID: 'data-option-id',\n productID: 'data-pid',\n productVariationID: 'data-pvid',\n valueID: 'data-value-id'\n },\n quantity: 'data-qty',\n readyToOrder: 'ready-to-order',\n selected: 'selected',\n slick: 'slick',\n slickConfig: 'slick-config',\n src: 'src',\n srcset: 'srcset',\n style: 'style',\n target: 'target',\n dataTarget: 'data-target',\n textSelect: 'text-select',\n textSelected: 'text-selected',\n title: 'title',\n translationResource: 'resource',\n uuid: 'uuid',\n url: 'url',\n urlAdd: 'data-href-add',\n urlRemove: 'data-href-remove',\n value: 'value'\n};\n\nconst pipelines = {\n cartShow: 'Cart-Show',\n checkoutStep: 'Checkout-Step'\n};\n\nconst states = {\n isAnimating: 'animating'\n};\n\nconst buffer = {\n cssTransitionTime: 50\n};\n\nconst times = {\n scrollToAnimation: 500,\n cssTransitionTime: 300 + buffer.cssTransitionTime,\n heartTransitionTime: 700 + buffer.cssTransitionTime\n};\n\nconst breakpoints = {\n xs: parseFloat(sharedVariables.breakpoint_xs),\n sm: parseFloat(sharedVariables.breakpoint_sm),\n md: parseFloat(sharedVariables.breakpoint_md),\n lg: parseFloat(sharedVariables.breakpoint_lg),\n xl: parseFloat(sharedVariables.breakpoint_xl)\n};\n\nconst cookies = {};\nconst queryParams = {};\n\nmodule.exports = {\n pubSubEvents: pubSubEvents,\n events: events,\n selectors: selectors,\n classes: classes,\n attributes: attributes,\n pipelines: pipelines,\n states: states,\n times: times,\n breakpoints: breakpoints,\n cookies: cookies,\n queryParams: queryParams\n};\n","const processInclude = require('app_storefront_base/util');\n\nwindow.onjQueryLoad(function () {\n processInclude(require('plugin_catalog/search/search'));\n}, true);\n","const CONST = require('plugin_frontend_core/constants');\nconst noUiSlider = require('nouislider');\n\nconst baseSearch = require('app_storefront_base/search/search');\nconst { replaceSpaceWithPeriod, debounce, isMediaBreakpoint } = require('plugin_frontend_core/utils/utils_cw');\n\nconst selectors = {\n container: '.container',\n filterBar: '.filter-bar',\n gridFooter: '.grid-footer',\n gridHeader: '.grid-header',\n headerBar: '.header-bar',\n modalbackground: '.modal-background',\n pageTitle: '.header.page-title',\n productGrid: '.js-product-grid',\n productGridFooter: '.js-product-grid-footer',\n productTile: '.js-product-tile',\n productSort: '.js-product-sort',\n productResultCount: '.js-result-count',\n priceRefinement: '.js-price-refinement',\n refinedValues: '.js-refined-values',\n refinement: '.js-refinement',\n refinementBody: '.js-refinement-body',\n refinementButtonMobile: 'button.filter-results',\n refinementLinks: '.refinements li:not(.js-refinement-navigation-list-item-show-more-button), .refinement-bar .js-reset, .filter-value a, .swatch-filter a, .refinement-item, .js-quickrefinement-item',\n refinementModal: '.js-mobile-refinement-modal',\n refinementModalClose: '.js-refinement-modal-close',\n refinementModalCloseButton: 'button.close',\n refinementBarContainer: '.js-refinement-bar-container',\n refinementCategories: '.js-refinements-navigation',\n refinements: '.refinements',\n refinementsActive: '.refinement.active',\n refinementNavigationListItem: '.js-refinement-navigation-list-item',\n refinementNavigationListItemShowMoreButton: '.js-refinement-navigation-list-item-show-more-button',\n refinementNavigationShowMoreButton: '.js-refinement-navigation-show-more-button',\n refinementNavigationMoreButton: '.js-refinement-navigation-show-more-button',\n refinementPriceSlider: '.js-price-slider',\n refinementPriceSliderFromValue: '.js-price-slider-from-value',\n refinementPriceSliderToValue: '.js-price-slider-to-value',\n refinementPriceSliderTarget: '.noUI-target',\n refinementPriceSliderHandlerContainer: '.noUi-origin',\n refinementPriceSliderLowerHandler: '.noUi-handle-lower',\n refinementPriceSliderUpperHandler: '.noUi-handle-upper',\n contentSearchResults: '.js-content-search-results',\n showMoreContent: '.show-more-content',\n showMoreContentButton: '.show-more-content button',\n contentSearch: '.content-search',\n visibleOption: ':visible',\n resultCountVisible: '.result-count-visible',\n resultCount: '.result-count',\n filterActive: 'filter-active',\n quickRefinement: '.js-quickrefinement'\n};\n\nconst attributes = {\n pageNumber: 'page-number',\n priceSliderMinValue: 'min',\n priceSliderMaxValue: 'max',\n priceSliderFromRange: 'from',\n priceSliderToRange: 'to',\n priceSliderUrl: 'url',\n refinementItem: 'data-refinement-item'\n};\n\nconst $elements = {\n container: $(selectors.container),\n win: $(window),\n htmlBody: $(CONST.selectors.htmlBody),\n quickRefinements: $(selectors.quickRefinement)\n};\n\nconst classes = {\n hidden: 'hidden'\n};\n\nconst $document = $(document);\n\nconst $modalbackground = $(selectors.modalbackground);\nconst $refinementModal = $(selectors.refinementModal);\n\nconst $refinementNavigationShowMoreButton = $(selectors.refinementNavigationShowMoreButton);\n\nconst lockScroll = (isLock = false) => $elements.htmlBody[isLock ? 'addClass' : 'removeClass'](CONST.classes.scrollLock);\n\nvar $contentSearchResults = $(selectors.contentSearchResults);\nvar $pageContainer = $(selectors.container);\n\n/**\n * Update DOM elements with Ajax results\n *\n * @param {Object} $results - jQuery DOM element\n * @param {string} selector - DOM element to look up in the $results\n * @return {undefined}\n */\nfunction updateDom($results, selector) {\n const $updates = $results.find(selector);\n $(selector).empty().html($updates.html());\n}\n\n/**\n * Update filter options on request url\n * @param {string} requestedUrl -\n */\nfunction updateUrl(requestedUrl) {\n if (!history.pushState) {\n return;\n }\n history.pushState({}, '', requestedUrl);\n}\n\n/**\n * Reset filters on popstate change\n */\nwindow.addEventListener('popstate', () => {\n filterByUrl(location.href);\n});\n\n/**\n * Keep refinement panes expanded/collapsed after Ajax refresh\n *\n * @param {Object} $results - jQuery DOM element\n * @return {undefined}\n */\nfunction handleRefinements($results) {\n $(selectors.refinementsActive).each((refinement) => {\n $(refinement).removeClass(CONST.classes.active);\n $results\n .find(`.${replaceSpaceWithPeriod($(refinement)[0].className)}`)\n .addClass(CONST.classes.active);\n });\n\n updateDom($results, selectors.refinements);\n}\n\n/**\n * Parse Ajax results and updated select DOM elements\n *\n * @param {string} response - Ajax response HTML code\n * @return {undefined}\n */\nfunction parseResults(response) {\n const $results = $(response);\n\n // Update DOM elements that do not require special handling\n const updateDomWithResults = (selector) => updateDom($results, selector);\n [\n selectors.gridHeader,\n selectors.headerBar,\n selectors.pageTitle,\n selectors.productGrid,\n selectors.showMoreButton,\n selectors.filterBar,\n selectors.refinementBarContainer,\n selectors.refinementCategories,\n selectors.refinementModalClose,\n selectors.productResultCount,\n selectors.refinedValues\n ].forEach(updateDomWithResults);\n\n // handle edge cases\n [\n {\n selector: selectors.refinements,\n handler: handleRefinements\n }\n ].forEach((special) => {\n special.handler($results);\n });\n}\n\n/**\n * Shows filter Modal\n */\nfunction showFilterModal() {\n $modalbackground.show();\n $refinementModal.addClass(CONST.classes.show);\n $(CONST.selectors.body).addClass(selectors.filterActive);\n lockScroll(true);\n}\n\n/**\n * Hides filter Modal\n */\nfunction hideFilterModal() {\n $modalbackground.hide();\n $refinementModal.removeClass(CONST.classes.show);\n $(CONST.selectors.body).removeClass(selectors.filterActive);\n lockScroll(false);\n}\n\n/**\n * Shows all hidden categories\n * @param {HTMLEvent} event - event\n */\nfunction showAllRefinementCategories(event) {\n event.preventDefault();\n\n const $self = $(this);\n const $getChild = $self.closest(CONST.selectors.unOrderedListItem).children(CONST.selectors.listItem);\n\n if ($refinementNavigationShowMoreButton.length > 0) {\n $getChild.removeClass(classes.hidden);\n $getChild.children(selectors.refinementNavigationMoreButton).remove();\n }\n}\n\n/**\n * Renders the price slider handlers\n */\nfunction setPriceSliderHandlers(lowerHandler, upperHandler) {\n const $lowerHandlerContainer = lowerHandler.closest(selectors.refinementPriceSliderHandlerContainer);\n lowerHandler.css({\n left: $lowerHandlerContainer.width(),\n opacity: 1\n });\n\n upperHandler.css({\n opacity: 1\n });\n}\n\nvar filterByUrl; // Because es-lint\n\n/**\n * Initialize sliders for prices\n */\nfunction initPriceSlider() {\n var filterTimeout;\n\n $(`${selectors.refinementPriceSlider}:not(${selectors.refinementPriceSliderTarget})`).each(function () {\n const $priceSlider = $(this);\n let min = $priceSlider.data(attributes.priceSliderMinValue);\n let max = $priceSlider.data(attributes.priceSliderMaxValue);\n const from = $priceSlider.data(attributes.priceSliderFromRange);\n const to = $priceSlider.data(attributes.priceSliderToRange);\n const url = $priceSlider.data(attributes.priceSliderUrl);\n\n if (typeof min === 'string') {\n min = parseInt(min, 10);\n }\n if (typeof max === 'string') {\n max = parseInt(max, 10);\n }\n\n if (typeof min !== 'number' || typeof max !== 'number') {\n return;\n }\n\n const slider = noUiSlider.create($priceSlider[0], {\n connect: true,\n margin: 10,\n range: {\n min: min,\n max: max\n },\n start: [from, to],\n step: 1\n });\n\n function onSliderChange(values) {\n clearTimeout(filterTimeout);\n filterTimeout = setTimeout(function () {\n const pmin = values[0];\n const pmax = values[1];\n filterByUrl(url.replace('_PMIN_', Math.floor(pmin)).replace('_PMAX_', Math.ceil(pmax)));\n }, 1000);\n }\n slider.on(CONST.events.change, onSliderChange);\n\n slider.on(CONST.events.start, function () {\n clearTimeout(filterTimeout);\n });\n\n const $fromInput = $(selectors.refinementPriceSliderFromValue);\n const $toInput = $(selectors.refinementPriceSliderToValue);\n\n slider.on(CONST.events.update, function (values) {\n $fromInput.val(Math.floor(values[0]));\n $toInput.val(Math.ceil(values[1]));\n });\n\n $fromInput.on(CONST.events.change, function () {\n const parentSlider = $(this).closest('.js-refinement-body').find('.js-price-slider');\n parentSlider[0].noUiSlider.set([this.value, $toInput.val()]);\n onSliderChange([this.value, $toInput.val()]);\n });\n $toInput.on(CONST.events.change, function () {\n const parentSlider = $(this).closest('.js-refinement-body').find('.js-price-slider');\n parentSlider[0].noUiSlider.set([$fromInput.val(), this.value]);\n onSliderChange([$fromInput.val(), this.value]);\n });\n\n const $sliderTarget = $(slider.target);\n const $priceRefinement = $sliderTarget.closest(selectors.refinement);\n const $priceRefinementBody = $priceRefinement.find(selectors.refinementBody);\n const $priceRefinementLowerHandler = $sliderTarget.find(selectors.refinementPriceSliderLowerHandler);\n const $priceRefinementUpperHandler = $sliderTarget.find(selectors.refinementPriceSliderUpperHandler);\n\n if (min !== from || max !== to) {\n setPriceSliderHandlers(\n $priceRefinementLowerHandler,\n $priceRefinementUpperHandler\n );\n }\n\n $priceRefinementBody.on(CONST.events.bsCollapseShown, function () {\n setPriceSliderHandlers(\n $priceRefinementLowerHandler,\n $priceRefinementUpperHandler\n );\n });\n\n $refinementModal.on(CONST.events.bsModalShown, function () {\n $priceRefinementBody.on(CONST.events.bsCollapseShown, function () {\n setPriceSliderHandlers(\n $priceRefinementLowerHandler,\n $priceRefinementUpperHandler\n );\n });\n });\n });\n}\n\n\n/**\n * Starts spinner, updates dom with HTML returned from server\n * @todo update to async await once babel-pollyfill is added\n * @param {HTMLEvent} event -\n * @return {Promise} tends to call Search-UpdateGrid and return a block of html, this gets processed by parseResults\n */\nfunction onApplyFilters(event) {\n event.preventDefault();\n event.stopPropagation();\n\n $.spinner().start();\n\n const { currentTarget } = event;\n const requestUrl = currentTarget.dataset[CONST.attributes.href];\n const page = $(selectors.gridFooter).data(attributes.pageNumber);\n const $htmlBody = $(CONST.selectors.htmlBody);\n\n $(currentTarget).trigger(CONST.events.searchFilter, event);\n\n // update to async await once babel-pollyfill is added\n return $.ajax({\n url: requestUrl,\n data: {\n page,\n selectedUrl: requestUrl\n },\n method: 'GET'\n }).then((results) => {\n parseResults(results);\n updateUrl(requestUrl);\n initPriceSlider();\n $htmlBody.animate({\n scrollTop: $htmlBody.offset().top\n }, CONST.times.scrollToAnimation);\n $('body').trigger(\"calculateWaardechequePrices\");\n $.spinner().stop();\n return results;\n }).catch(() => {\n $.spinner().stop();\n });\n}\n\n/**\n * Starts spinner, updates dom with HTML returned from server\n * @param {*} event -\n */\nfunction onApplySort(event) {\n event.preventDefault();\n const $self = $(this);\n const selectedIndex = $self.find('option:selected').index();\n $(selectors.productSort).each(function (i, el) {\n const option = $(el).children().eq(selectedIndex);\n if (option && option[0]) {\n option[0].selected = true;\n }\n });\n\n $.spinner().start();\n $self.trigger(CONST.events.searchSort, this.value);\n $.ajax({\n url: this.value,\n data: {\n selectedUrl: this.value\n },\n method: 'GET',\n success: function (response) {\n var newHtml = response;\n\n if ($(response).find(selectors.productGrid).length) {\n newHtml = $(response).find(selectors.productGrid)[0];\n }\n\n $(selectors.productGrid).empty().html(newHtml);\n\n var params = getUrlParams(this.url);\n if (params.srule) {\n var url = appendUrlParam(window.location.href, 'srule', params.srule);\n updateUrl(url);\n }\n $.spinner().stop();\n },\n error: function (error) {\n console.warn(`An error occured during sorting. Error: ${error}`); // eslint-disable-line\n $.spinner().stop();\n },\n complete: function () {\n $('body').trigger(\"calculateWaardechequePrices\");\n }\n });\n}\n\n/**\n * This function retrieves another page of content to display in the content search grid\n * @param {JQuery} $element - the jquery element that has the click event attached\n * @param {JQuery} $target - the jquery element that will receive the response\n * @return {undefined}\n */\nfunction getContent($element, $target) {\n var showMoreUrl = $element.attr('data-url');\n if (typeof showMoreUrl !== 'undefined') {\n $.spinner().start();\n $.ajax({\n url: showMoreUrl,\n method: 'GET',\n success: function (response) {\n $target.append(response);\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n },\n complete: function () {\n $('body').trigger(\"calculateWaardechequePrices\");\n }\n });\n }\n}\n\n/**\n * Handles plp resize events\n */\nfunction onSearchResize() {\n if (!isMediaBreakpoint('md')) {\n return;\n }\n\n hideFilterModal();\n}\n\n/**\n * @private appendUrlParam\n * @param {string} url - The URL that needs an parameter assigned to\n * @param {string} key - The key of the parameter\n * @param {string} value - The value of the parameter\n *\n * @returns {string} url - A new url with the key & value appended.\n */\nfunction appendUrlParam(url, key, value) {\n // return old URL if no key or value is passed\n if (!key || !value) {\n return url;\n }\n\n const formattedKey = `${key}=`;\n\n // Check if the new kew is already present in old url\n if (url.indexOf(formattedKey) !== -1) {\n var paramStartPoint = url.substr(url.indexOf(formattedKey), url.length);\n var paramEndPoint = '';\n\n if (paramStartPoint.indexOf('&') !== -1) {\n paramEndPoint = paramStartPoint.indexOf('&');\n } else {\n paramEndPoint = paramStartPoint.length;\n }\n\n // replace existing key with new value and return that url\n var paramValuePart = paramStartPoint.substr(0, paramEndPoint);\n return url.replace(paramValuePart, formattedKey + value);\n }\n\n // append the new parameter to the url\n var separator = url.indexOf('?') !== -1 ? '&' : '?';\n return url + separator + formattedKey + encodeURIComponent(value);\n}\n\n/**\n * Extracts query string params from URL\n * @param {string} url - URL to get params of\n * @return {Object} params\n */\nfunction getUrlParams(url) {\n var queryStringIndex = url.indexOf('?');\n if (queryStringIndex === -1) return {};\n\n var queryString = url.substring(queryStringIndex + 1);\n var params = {};\n queryString.split('&').forEach(function (part) {\n var subparts = part.split('=');\n var attr = decodeURIComponent(subparts[0]);\n var val = decodeURIComponent(subparts[1]);\n params[attr] = val;\n });\n return params;\n}\n\n/**\n * Apply filter by URL\n * @param {string} refinementUrl - Url of refinement filter\n */\nfilterByUrl = function (refinementUrl) {\n $.spinner().start();\n\n var url = refinementUrl;\n var currentParams = getUrlParams(window.location.href);\n if (currentParams.srule) {\n url = appendUrlParam(url, 'srule', currentParams.srule);\n }\n\n $.ajax({\n url: url,\n data: {\n page: $(selectors.productGridFooter).data(attributes.pageNumber),\n selectedUrl: url\n },\n method: 'GET',\n success: function (response) {\n $.spinner().stop();\n var currentUrl = $(response).find(selectors.currentURL);\n\n if (currentUrl.length > 0 && currentUrl.data(attributes.documentURL).length > 0) {\n url = currentUrl.data(attributes.documentURL);\n }\n\n history.replaceState({}, document.title, url);\n\n var $response = $(response);\n if ($response.find(selectors.productTile).length > 0) {\n parseResults(response);\n\n initPriceSlider();\n } else {\n updateDom($response, selectors.productGrid);\n updateDom($response, selectors.resultCountVisible);\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n};\n\nmodule.exports = Object.assign(baseSearch, {\n resize() {\n $elements.win.on(CONST.events.resize, debounce(onSearchResize, 200));\n },\n filter() {\n $elements.container.on(CONST.events.click, selectors.refinementButtonMobile, showFilterModal);\n $elements.container.on(CONST.events.click, selectors.refinementModalClose, hideFilterModal);\n },\n closeRefinments() {\n $elements.container.on(CONST.events.click, selectors.refinementModalCloseButton, hideFilterModal);\n },\n applyFilter() {\n $elements.container.on(CONST.events.click, selectors.refinementLinks, onApplyFilters);\n },\n showMoreRefinements() {\n $document.on(CONST.events.click, selectors.refinementNavigationShowMoreButton, showAllRefinementCategories);\n },\n initPriceSlider() {\n $document.ready(initPriceSlider);\n },\n initQuickRefinement() {\n $document.ready(function () {\n $elements.quickRefinements.slick({\n infinite: false,\n slidesToShow: 5,\n variableWidth: true\n });\n });\n },\n showContentTab: function () {\n // If there are no product results, only the content results are visible on page load\n if ($contentSearchResults.is(selectors.visibleOption) && $contentSearchResults.html() === '') {\n getContent($contentSearchResults, $contentSearchResults);\n }\n\n // Display content results from the search\n $pageContainer.on(CONST.events.click, selectors.contentSearch, function () {\n if ($contentSearchResults.html() === '') {\n getContent($contentSearchResults, $contentSearchResults);\n }\n });\n\n // Display the next page of content results from the search\n $pageContainer.on(CONST.events.click, selectors.showMoreContentButton, function () {\n const $self = $(this);\n getContent($self, $contentSearchResults.find(selectors.resultCount));\n $(selectors.showMoreContent).remove();\n });\n },\n sort: function () {\n $document.on(CONST.events.change, selectors.productSort, onApplySort);\n }\n});\n","/*! nouislider - 10.0.0 - 2017-05-28 14:52:48 */\r\n\r\n(function (factory) {\r\n\r\n if ( typeof define === 'function' && define.amd ) {\r\n\r\n // AMD. Register as an anonymous module.\r\n define([], factory);\r\n\r\n } else if ( typeof exports === 'object' ) {\r\n\r\n // Node/CommonJS\r\n module.exports = factory();\r\n\r\n } else {\r\n\r\n // Browser globals\r\n window.noUiSlider = factory();\r\n }\r\n\r\n}(function( ){\r\n\r\n\t'use strict';\r\n\r\n\tvar VERSION = '10.0.0';\r\n\r\n\r\n\tfunction isValidFormatter ( entry ) {\r\n\t\treturn typeof entry === 'object' && typeof entry.to === 'function' && typeof entry.from === 'function';\r\n\t}\r\n\r\n\tfunction removeElement ( el ) {\r\n\t\tel.parentElement.removeChild(el);\r\n\t}\r\n\r\n\t// Bindable version\r\n\tfunction preventDefault ( e ) {\r\n\t\te.preventDefault();\r\n\t}\r\n\r\n\t// Removes duplicates from an array.\r\n\tfunction unique ( array ) {\r\n\t\treturn array.filter(function(a){\r\n\t\t\treturn !this[a] ? this[a] = true : false;\r\n\t\t}, {});\r\n\t}\r\n\r\n\t// Round a value to the closest 'to'.\r\n\tfunction closest ( value, to ) {\r\n\t\treturn Math.round(value / to) * to;\r\n\t}\r\n\r\n\t// Current position of an element relative to the document.\r\n\tfunction offset ( elem, orientation ) {\r\n\r\n\t\tvar rect = elem.getBoundingClientRect();\r\n\t\tvar doc = elem.ownerDocument;\r\n\t\tvar docElem = doc.documentElement;\r\n\t\tvar pageOffset = getPageOffset(doc);\r\n\r\n\t\t// getBoundingClientRect contains left scroll in Chrome on Android.\r\n\t\t// I haven't found a feature detection that proves this. Worst case\r\n\t\t// scenario on mis-match: the 'tap' feature on horizontal sliders breaks.\r\n\t\tif ( /webkit.*Chrome.*Mobile/i.test(navigator.userAgent) ) {\r\n\t\t\tpageOffset.x = 0;\r\n\t\t}\r\n\r\n\t\treturn orientation ? (rect.top + pageOffset.y - docElem.clientTop) : (rect.left + pageOffset.x - docElem.clientLeft);\r\n\t}\r\n\r\n\t// Checks whether a value is numerical.\r\n\tfunction isNumeric ( a ) {\r\n\t\treturn typeof a === 'number' && !isNaN( a ) && isFinite( a );\r\n\t}\r\n\r\n\t// Sets a class and removes it after [duration] ms.\r\n\tfunction addClassFor ( element, className, duration ) {\r\n\t\tif (duration > 0) {\r\n\t\taddClass(element, className);\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tremoveClass(element, className);\r\n\t\t\t}, duration);\r\n\t\t}\r\n\t}\r\n\r\n\t// Limits a value to 0 - 100\r\n\tfunction limit ( a ) {\r\n\t\treturn Math.max(Math.min(a, 100), 0);\r\n\t}\r\n\r\n\t// Wraps a variable as an array, if it isn't one yet.\r\n\t// Note that an input array is returned by reference!\r\n\tfunction asArray ( a ) {\r\n\t\treturn Array.isArray(a) ? a : [a];\r\n\t}\r\n\r\n\t// Counts decimals\r\n\tfunction countDecimals ( numStr ) {\r\n\t\tnumStr = String(numStr);\r\n\t\tvar pieces = numStr.split(\".\");\r\n\t\treturn pieces.length > 1 ? pieces[1].length : 0;\r\n\t}\r\n\r\n\t// http://youmightnotneedjquery.com/#add_class\r\n\tfunction addClass ( el, className ) {\r\n\t\tif ( el.classList ) {\r\n\t\t\tel.classList.add(className);\r\n\t\t} else {\r\n\t\t\tel.className += ' ' + className;\r\n\t\t}\r\n\t}\r\n\r\n\t// http://youmightnotneedjquery.com/#remove_class\r\n\tfunction removeClass ( el, className ) {\r\n\t\tif ( el.classList ) {\r\n\t\t\tel.classList.remove(className);\r\n\t\t} else {\r\n\t\t\tel.className = el.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\r\n\t\t}\r\n\t}\r\n\r\n\t// https://plainjs.com/javascript/attributes/adding-removing-and-testing-for-classes-9/\r\n\tfunction hasClass ( el, className ) {\r\n\t\treturn el.classList ? el.classList.contains(className) : new RegExp('\\\\b' + className + '\\\\b').test(el.className);\r\n\t}\r\n\r\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY#Notes\r\n\tfunction getPageOffset ( doc ) {\r\n\r\n\t\tvar supportPageOffset = window.pageXOffset !== undefined;\r\n\t\tvar isCSS1Compat = ((doc.compatMode || \"\") === \"CSS1Compat\");\r\n\t\tvar x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? doc.documentElement.scrollLeft : doc.body.scrollLeft;\r\n\t\tvar y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? doc.documentElement.scrollTop : doc.body.scrollTop;\r\n\r\n\t\treturn {\r\n\t\t\tx: x,\r\n\t\t\ty: y\r\n\t\t};\r\n\t}\r\n\r\n\t// we provide a function to compute constants instead\r\n\t// of accessing window.* as soon as the module needs it\r\n\t// so that we do not compute anything if not needed\r\n\tfunction getActions ( ) {\r\n\r\n\t\t// Determine the events to bind. IE11 implements pointerEvents without\r\n\t\t// a prefix, which breaks compatibility with the IE10 implementation.\r\n\t\treturn window.navigator.pointerEnabled ? {\r\n\t\t\tstart: 'pointerdown',\r\n\t\t\tmove: 'pointermove',\r\n\t\t\tend: 'pointerup'\r\n\t\t} : window.navigator.msPointerEnabled ? {\r\n\t\t\tstart: 'MSPointerDown',\r\n\t\t\tmove: 'MSPointerMove',\r\n\t\t\tend: 'MSPointerUp'\r\n\t\t} : {\r\n\t\t\tstart: 'mousedown touchstart',\r\n\t\t\tmove: 'mousemove touchmove',\r\n\t\t\tend: 'mouseup touchend'\r\n\t\t};\r\n\t}\r\n\r\n\t// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\r\n\t// Issue #785\r\n\tfunction getSupportsPassive ( ) {\r\n\r\n\t\tvar supportsPassive = false;\r\n\r\n\t\ttry {\r\n\r\n\t\t\tvar opts = Object.defineProperty({}, 'passive', {\r\n\t\t\t\tget: function() {\r\n\t\t\t\t\tsupportsPassive = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\twindow.addEventListener('test', null, opts);\r\n\r\n\t\t} catch (e) {}\r\n\r\n\t\treturn supportsPassive;\r\n\t}\r\n\r\n\tfunction getSupportsTouchActionNone ( ) {\r\n\t\treturn window.CSS && CSS.supports && CSS.supports('touch-action', 'none');\r\n\t}\r\n\r\n\r\n// Value calculation\r\n\r\n\t// Determine the size of a sub-range in relation to a full range.\r\n\tfunction subRangeRatio ( pa, pb ) {\r\n\t\treturn (100 / (pb - pa));\r\n\t}\r\n\r\n\t// (percentage) How many percent is this value of this range?\r\n\tfunction fromPercentage ( range, value ) {\r\n\t\treturn (value * 100) / ( range[1] - range[0] );\r\n\t}\r\n\r\n\t// (percentage) Where is this value on this range?\r\n\tfunction toPercentage ( range, value ) {\r\n\t\treturn fromPercentage( range, range[0] < 0 ?\r\n\t\t\tvalue + Math.abs(range[0]) :\r\n\t\t\t\tvalue - range[0] );\r\n\t}\r\n\r\n\t// (value) How much is this percentage on this range?\r\n\tfunction isPercentage ( range, value ) {\r\n\t\treturn ((value * ( range[1] - range[0] )) / 100) + range[0];\r\n\t}\r\n\r\n\r\n// Range conversion\r\n\r\n\tfunction getJ ( value, arr ) {\r\n\r\n\t\tvar j = 1;\r\n\r\n\t\twhile ( value >= arr[j] ){\r\n\t\t\tj += 1;\r\n\t\t}\r\n\r\n\t\treturn j;\r\n\t}\r\n\r\n\t// (percentage) Input a value, find where, on a scale of 0-100, it applies.\r\n\tfunction toStepping ( xVal, xPct, value ) {\r\n\r\n\t\tif ( value >= xVal.slice(-1)[0] ){\r\n\t\t\treturn 100;\r\n\t\t}\r\n\r\n\t\tvar j = getJ( value, xVal ), va, vb, pa, pb;\r\n\r\n\t\tva = xVal[j-1];\r\n\t\tvb = xVal[j];\r\n\t\tpa = xPct[j-1];\r\n\t\tpb = xPct[j];\r\n\r\n\t\treturn pa + (toPercentage([va, vb], value) / subRangeRatio (pa, pb));\r\n\t}\r\n\r\n\t// (value) Input a percentage, find where it is on the specified range.\r\n\tfunction fromStepping ( xVal, xPct, value ) {\r\n\r\n\t\t// There is no range group that fits 100\r\n\t\tif ( value >= 100 ){\r\n\t\t\treturn xVal.slice(-1)[0];\r\n\t\t}\r\n\r\n\t\tvar j = getJ( value, xPct ), va, vb, pa, pb;\r\n\r\n\t\tva = xVal[j-1];\r\n\t\tvb = xVal[j];\r\n\t\tpa = xPct[j-1];\r\n\t\tpb = xPct[j];\r\n\r\n\t\treturn isPercentage([va, vb], (value - pa) * subRangeRatio (pa, pb));\r\n\t}\r\n\r\n\t// (percentage) Get the step that applies at a certain value.\r\n\tfunction getStep ( xPct, xSteps, snap, value ) {\r\n\r\n\t\tif ( value === 100 ) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\r\n\t\tvar j = getJ( value, xPct ), a, b;\r\n\r\n\t\t// If 'snap' is set, steps are used as fixed points on the slider.\r\n\t\tif ( snap ) {\r\n\r\n\t\t\ta = xPct[j-1];\r\n\t\t\tb = xPct[j];\r\n\r\n\t\t\t// Find the closest position, a or b.\r\n\t\t\tif ((value - a) > ((b-a)/2)){\r\n\t\t\t\treturn b;\r\n\t\t\t}\r\n\r\n\t\t\treturn a;\r\n\t\t}\r\n\r\n\t\tif ( !xSteps[j-1] ){\r\n\t\t\treturn value;\r\n\t\t}\r\n\r\n\t\treturn xPct[j-1] + closest(\r\n\t\t\tvalue - xPct[j-1],\r\n\t\t\txSteps[j-1]\r\n\t\t);\r\n\t}\r\n\r\n\r\n// Entry parsing\r\n\r\n\tfunction handleEntryPoint ( index, value, that ) {\r\n\r\n\t\tvar percentage;\r\n\r\n\t\t// Wrap numerical input in an array.\r\n\t\tif ( typeof value === \"number\" ) {\r\n\t\t\tvalue = [value];\r\n\t\t}\r\n\r\n\t\t// Reject any invalid input, by testing whether value is an array.\r\n\t\tif ( Object.prototype.toString.call( value ) !== '[object Array]' ){\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'range' contains invalid value.\");\r\n\t\t}\r\n\r\n\t\t// Covert min/max syntax to 0 and 100.\r\n\t\tif ( index === 'min' ) {\r\n\t\t\tpercentage = 0;\r\n\t\t} else if ( index === 'max' ) {\r\n\t\t\tpercentage = 100;\r\n\t\t} else {\r\n\t\t\tpercentage = parseFloat( index );\r\n\t\t}\r\n\r\n\t\t// Check for correct input.\r\n\t\tif ( !isNumeric( percentage ) || !isNumeric( value[0] ) ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'range' value isn't numeric.\");\r\n\t\t}\r\n\r\n\t\t// Store values.\r\n\t\tthat.xPct.push( percentage );\r\n\t\tthat.xVal.push( value[0] );\r\n\r\n\t\t// NaN will evaluate to false too, but to keep\r\n\t\t// logging clear, set step explicitly. Make sure\r\n\t\t// not to override the 'step' setting with false.\r\n\t\tif ( !percentage ) {\r\n\t\t\tif ( !isNaN( value[1] ) ) {\r\n\t\t\t\tthat.xSteps[0] = value[1];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthat.xSteps.push( isNaN(value[1]) ? false : value[1] );\r\n\t\t}\r\n\r\n\t\tthat.xHighestCompleteStep.push(0);\r\n\t}\r\n\r\n\tfunction handleStepPoint ( i, n, that ) {\r\n\r\n\t\t// Ignore 'false' stepping.\r\n\t\tif ( !n ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// Factor to range ratio\r\n\t\tthat.xSteps[i] = fromPercentage([\r\n\t\t\t that.xVal[i]\r\n\t\t\t,that.xVal[i+1]\r\n\t\t], n) / subRangeRatio (\r\n\t\t\tthat.xPct[i],\r\n\t\t\tthat.xPct[i+1] );\r\n\r\n\t\tvar totalSteps = (that.xVal[i+1] - that.xVal[i]) / that.xNumSteps[i];\r\n\t\tvar highestStep = Math.ceil(Number(totalSteps.toFixed(3)) - 1);\r\n\t\tvar step = that.xVal[i] + (that.xNumSteps[i] * highestStep);\r\n\r\n\t\tthat.xHighestCompleteStep[i] = step;\r\n\t}\r\n\r\n\r\n// Interface\r\n\r\n\tfunction Spectrum ( entry, snap, singleStep ) {\r\n\r\n\t\tthis.xPct = [];\r\n\t\tthis.xVal = [];\r\n\t\tthis.xSteps = [ singleStep || false ];\r\n\t\tthis.xNumSteps = [ false ];\r\n\t\tthis.xHighestCompleteStep = [];\r\n\r\n\t\tthis.snap = snap;\r\n\r\n\t\tvar index, ordered = [ /* [0, 'min'], [1, '50%'], [2, 'max'] */ ];\r\n\r\n\t\t// Map the object keys to an array.\r\n\t\tfor ( index in entry ) {\r\n\t\t\tif ( entry.hasOwnProperty(index) ) {\r\n\t\t\t\tordered.push([entry[index], index]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Sort all entries by value (numeric sort).\r\n\t\tif ( ordered.length && typeof ordered[0][0] === \"object\" ) {\r\n\t\t\tordered.sort(function(a, b) { return a[0][0] - b[0][0]; });\r\n\t\t} else {\r\n\t\t\tordered.sort(function(a, b) { return a[0] - b[0]; });\r\n\t\t}\r\n\r\n\r\n\t\t// Convert all entries to subranges.\r\n\t\tfor ( index = 0; index < ordered.length; index++ ) {\r\n\t\t\thandleEntryPoint(ordered[index][1], ordered[index][0], this);\r\n\t\t}\r\n\r\n\t\t// Store the actual step values.\r\n\t\t// xSteps is sorted in the same order as xPct and xVal.\r\n\t\tthis.xNumSteps = this.xSteps.slice(0);\r\n\r\n\t\t// Convert all numeric steps to the percentage of the subrange they represent.\r\n\t\tfor ( index = 0; index < this.xNumSteps.length; index++ ) {\r\n\t\t\thandleStepPoint(index, this.xNumSteps[index], this);\r\n\t\t}\r\n\t}\r\n\r\n\tSpectrum.prototype.getMargin = function ( value ) {\r\n\r\n\t\tvar step = this.xNumSteps[0];\r\n\r\n\t\tif ( step && ((value / step) % 1) !== 0 ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'limit', 'margin' and 'padding' must be divisible by step.\");\r\n\t\t}\r\n\r\n\t\treturn this.xPct.length === 2 ? fromPercentage(this.xVal, value) : false;\r\n\t};\r\n\r\n\tSpectrum.prototype.toStepping = function ( value ) {\r\n\r\n\t\tvalue = toStepping( this.xVal, this.xPct, value );\r\n\r\n\t\treturn value;\r\n\t};\r\n\r\n\tSpectrum.prototype.fromStepping = function ( value ) {\r\n\r\n\t\treturn fromStepping( this.xVal, this.xPct, value );\r\n\t};\r\n\r\n\tSpectrum.prototype.getStep = function ( value ) {\r\n\r\n\t\tvalue = getStep(this.xPct, this.xSteps, this.snap, value );\r\n\r\n\t\treturn value;\r\n\t};\r\n\r\n\tSpectrum.prototype.getNearbySteps = function ( value ) {\r\n\r\n\t\tvar j = getJ(value, this.xPct);\r\n\r\n\t\treturn {\r\n\t\t\tstepBefore: { startValue: this.xVal[j-2], step: this.xNumSteps[j-2], highestStep: this.xHighestCompleteStep[j-2] },\r\n\t\t\tthisStep: { startValue: this.xVal[j-1], step: this.xNumSteps[j-1], highestStep: this.xHighestCompleteStep[j-1] },\r\n\t\t\tstepAfter: { startValue: this.xVal[j-0], step: this.xNumSteps[j-0], highestStep: this.xHighestCompleteStep[j-0] }\r\n\t\t};\r\n\t};\r\n\r\n\tSpectrum.prototype.countStepDecimals = function () {\r\n\t\tvar stepDecimals = this.xNumSteps.map(countDecimals);\r\n\t\treturn Math.max.apply(null, stepDecimals);\r\n \t};\r\n\r\n\t// Outside testing\r\n\tSpectrum.prototype.convert = function ( value ) {\r\n\t\treturn this.getStep(this.toStepping(value));\r\n\t};\r\n\r\n/*\tEvery input option is tested and parsed. This'll prevent\r\n\tendless validation in internal methods. These tests are\r\n\tstructured with an item for every option available. An\r\n\toption can be marked as required by setting the 'r' flag.\r\n\tThe testing function is provided with three arguments:\r\n\t\t- The provided value for the option;\r\n\t\t- A reference to the options object;\r\n\t\t- The name for the option;\r\n\r\n\tThe testing function returns false when an error is detected,\r\n\tor true when everything is OK. It can also modify the option\r\n\tobject, to make sure all values can be correctly looped elsewhere. */\r\n\r\n\tvar defaultFormatter = { 'to': function( value ){\r\n\t\treturn value !== undefined && value.toFixed(2);\r\n\t}, 'from': Number };\r\n\r\n\tfunction validateFormat ( entry ) {\r\n\r\n\t\t// Any object with a to and from method is supported.\r\n\t\tif ( isValidFormatter(entry) ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'format' requires 'to' and 'from' methods.\");\r\n\t}\r\n\r\n\tfunction testStep ( parsed, entry ) {\r\n\r\n\t\tif ( !isNumeric( entry ) ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'step' is not numeric.\");\r\n\t\t}\r\n\r\n\t\t// The step option can still be used to set stepping\r\n\t\t// for linear sliders. Overwritten if set in 'range'.\r\n\t\tparsed.singleStep = entry;\r\n\t}\r\n\r\n\tfunction testRange ( parsed, entry ) {\r\n\r\n\t\t// Filter incorrect input.\r\n\t\tif ( typeof entry !== 'object' || Array.isArray(entry) ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'range' is not an object.\");\r\n\t\t}\r\n\r\n\t\t// Catch missing start or end.\r\n\t\tif ( entry.min === undefined || entry.max === undefined ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): Missing 'min' or 'max' in 'range'.\");\r\n\t\t}\r\n\r\n\t\t// Catch equal start or end.\r\n\t\tif ( entry.min === entry.max ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'range' 'min' and 'max' cannot be equal.\");\r\n\t\t}\r\n\r\n\t\tparsed.spectrum = new Spectrum(entry, parsed.snap, parsed.singleStep);\r\n\t}\r\n\r\n\tfunction testStart ( parsed, entry ) {\r\n\r\n\t\tentry = asArray(entry);\r\n\r\n\t\t// Validate input. Values aren't tested, as the public .val method\r\n\t\t// will always provide a valid location.\r\n\t\tif ( !Array.isArray( entry ) || !entry.length ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'start' option is incorrect.\");\r\n\t\t}\r\n\r\n\t\t// Store the number of handles.\r\n\t\tparsed.handles = entry.length;\r\n\r\n\t\t// When the slider is initialized, the .val method will\r\n\t\t// be called with the start options.\r\n\t\tparsed.start = entry;\r\n\t}\r\n\r\n\tfunction testSnap ( parsed, entry ) {\r\n\r\n\t\t// Enforce 100% stepping within subranges.\r\n\t\tparsed.snap = entry;\r\n\r\n\t\tif ( typeof entry !== 'boolean' ){\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'snap' option must be a boolean.\");\r\n\t\t}\r\n\t}\r\n\r\n\tfunction testAnimate ( parsed, entry ) {\r\n\r\n\t\t// Enforce 100% stepping within subranges.\r\n\t\tparsed.animate = entry;\r\n\r\n\t\tif ( typeof entry !== 'boolean' ){\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'animate' option must be a boolean.\");\r\n\t\t}\r\n\t}\r\n\r\n\tfunction testAnimationDuration ( parsed, entry ) {\r\n\r\n\t\tparsed.animationDuration = entry;\r\n\r\n\t\tif ( typeof entry !== 'number' ){\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'animationDuration' option must be a number.\");\r\n\t\t}\r\n\t}\r\n\r\n\tfunction testConnect ( parsed, entry ) {\r\n\r\n\t\tvar connect = [false];\r\n\t\tvar i;\r\n\r\n\t\t// Map legacy options\r\n\t\tif ( entry === 'lower' ) {\r\n\t\t\tentry = [true, false];\r\n\t\t}\r\n\r\n\t\telse if ( entry === 'upper' ) {\r\n\t\t\tentry = [false, true];\r\n\t\t}\r\n\r\n\t\t// Handle boolean options\r\n\t\tif ( entry === true || entry === false ) {\r\n\r\n\t\t\tfor ( i = 1; i < parsed.handles; i++ ) {\r\n\t\t\t\tconnect.push(entry);\r\n\t\t\t}\r\n\r\n\t\t\tconnect.push(false);\r\n\t\t}\r\n\r\n\t\t// Reject invalid input\r\n\t\telse if ( !Array.isArray( entry ) || !entry.length || entry.length !== parsed.handles + 1 ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'connect' option doesn't match handle count.\");\r\n\t\t}\r\n\r\n\t\telse {\r\n\t\t\tconnect = entry;\r\n\t\t}\r\n\r\n\t\tparsed.connect = connect;\r\n\t}\r\n\r\n\tfunction testOrientation ( parsed, entry ) {\r\n\r\n\t\t// Set orientation to an a numerical value for easy\r\n\t\t// array selection.\r\n\t\tswitch ( entry ){\r\n\t\t case 'horizontal':\r\n\t\t\tparsed.ort = 0;\r\n\t\t\tbreak;\r\n\t\t case 'vertical':\r\n\t\t\tparsed.ort = 1;\r\n\t\t\tbreak;\r\n\t\t default:\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'orientation' option is invalid.\");\r\n\t\t}\r\n\t}\r\n\r\n\tfunction testMargin ( parsed, entry ) {\r\n\r\n\t\tif ( !isNumeric(entry) ){\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'margin' option must be numeric.\");\r\n\t\t}\r\n\r\n\t\t// Issue #582\r\n\t\tif ( entry === 0 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tparsed.margin = parsed.spectrum.getMargin(entry);\r\n\r\n\t\tif ( !parsed.margin ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'margin' option is only supported on linear sliders.\");\r\n\t\t}\r\n\t}\r\n\r\n\tfunction testLimit ( parsed, entry ) {\r\n\r\n\t\tif ( !isNumeric(entry) ){\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'limit' option must be numeric.\");\r\n\t\t}\r\n\r\n\t\tparsed.limit = parsed.spectrum.getMargin(entry);\r\n\r\n\t\tif ( !parsed.limit || parsed.handles < 2 ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'limit' option is only supported on linear sliders with 2 or more handles.\");\r\n\t\t}\r\n\t}\r\n\r\n\tfunction testPadding ( parsed, entry ) {\r\n\r\n\t\tif ( !isNumeric(entry) ){\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option must be numeric.\");\r\n\t\t}\r\n\r\n\t\tif ( entry === 0 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tparsed.padding = parsed.spectrum.getMargin(entry);\r\n\r\n\t\tif ( !parsed.padding ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option is only supported on linear sliders.\");\r\n\t\t}\r\n\r\n\t\tif ( parsed.padding < 0 ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option must be a positive number.\");\r\n\t\t}\r\n\r\n\t\tif ( parsed.padding >= 50 ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option must be less than half the range.\");\r\n\t\t}\r\n\t}\r\n\r\n\tfunction testDirection ( parsed, entry ) {\r\n\r\n\t\t// Set direction as a numerical value for easy parsing.\r\n\t\t// Invert connection for RTL sliders, so that the proper\r\n\t\t// handles get the connect/background classes.\r\n\t\tswitch ( entry ) {\r\n\t\t case 'ltr':\r\n\t\t\tparsed.dir = 0;\r\n\t\t\tbreak;\r\n\t\t case 'rtl':\r\n\t\t\tparsed.dir = 1;\r\n\t\t\tbreak;\r\n\t\t default:\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'direction' option was not recognized.\");\r\n\t\t}\r\n\t}\r\n\r\n\tfunction testBehaviour ( parsed, entry ) {\r\n\r\n\t\t// Make sure the input is a string.\r\n\t\tif ( typeof entry !== 'string' ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'behaviour' must be a string containing options.\");\r\n\t\t}\r\n\r\n\t\t// Check if the string contains any keywords.\r\n\t\t// None are required.\r\n\t\tvar tap = entry.indexOf('tap') >= 0;\r\n\t\tvar drag = entry.indexOf('drag') >= 0;\r\n\t\tvar fixed = entry.indexOf('fixed') >= 0;\r\n\t\tvar snap = entry.indexOf('snap') >= 0;\r\n\t\tvar hover = entry.indexOf('hover') >= 0;\r\n\r\n\t\tif ( fixed ) {\r\n\r\n\t\t\tif ( parsed.handles !== 2 ) {\r\n\t\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'fixed' behaviour must be used with 2 handles\");\r\n\t\t\t}\r\n\r\n\t\t\t// Use margin to enforce fixed state\r\n\t\t\ttestMargin(parsed, parsed.start[1] - parsed.start[0]);\r\n\t\t}\r\n\r\n\t\tparsed.events = {\r\n\t\t\ttap: tap || snap,\r\n\t\t\tdrag: drag,\r\n\t\t\tfixed: fixed,\r\n\t\t\tsnap: snap,\r\n\t\t\thover: hover\r\n\t\t};\r\n\t}\r\n\r\n\tfunction testTooltips ( parsed, entry ) {\r\n\r\n\t\tif ( entry === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\telse if ( entry === true ) {\r\n\r\n\t\t\tparsed.tooltips = [];\r\n\r\n\t\t\tfor ( var i = 0; i < parsed.handles; i++ ) {\r\n\t\t\t\tparsed.tooltips.push(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\telse {\r\n\r\n\t\t\tparsed.tooltips = asArray(entry);\r\n\r\n\t\t\tif ( parsed.tooltips.length !== parsed.handles ) {\r\n\t\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): must pass a formatter for all handles.\");\r\n\t\t\t}\r\n\r\n\t\t\tparsed.tooltips.forEach(function(formatter){\r\n\t\t\t\tif ( typeof formatter !== 'boolean' && (typeof formatter !== 'object' || typeof formatter.to !== 'function') ) {\r\n\t\t\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'tooltips' must be passed a formatter or 'false'.\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction testAriaFormat ( parsed, entry ) {\r\n\t\tparsed.ariaFormat = entry;\r\n\t\tvalidateFormat(entry);\r\n\t}\r\n\r\n\tfunction testFormat ( parsed, entry ) {\r\n\t\tparsed.format = entry;\r\n\t\tvalidateFormat(entry);\r\n\t}\r\n\r\n\tfunction testCssPrefix ( parsed, entry ) {\r\n\r\n\t\tif ( entry !== undefined && typeof entry !== 'string' && entry !== false ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'cssPrefix' must be a string or `false`.\");\r\n\t\t}\r\n\r\n\t\tparsed.cssPrefix = entry;\r\n\t}\r\n\r\n\tfunction testCssClasses ( parsed, entry ) {\r\n\r\n\t\tif ( entry !== undefined && typeof entry !== 'object' ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'cssClasses' must be an object.\");\r\n\t\t}\r\n\r\n\t\tif ( typeof parsed.cssPrefix === 'string' ) {\r\n\t\t\tparsed.cssClasses = {};\r\n\r\n\t\t\tfor ( var key in entry ) {\r\n\t\t\t\tif ( !entry.hasOwnProperty(key) ) { continue; }\r\n\r\n\t\t\t\tparsed.cssClasses[key] = parsed.cssPrefix + entry[key];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tparsed.cssClasses = entry;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction testUseRaf ( parsed, entry ) {\r\n\t\tif ( entry === true || entry === false ) {\r\n\t\t\tparsed.useRequestAnimationFrame = entry;\r\n\t\t} else {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'useRequestAnimationFrame' option should be true (default) or false.\");\r\n\t\t}\r\n\t}\r\n\r\n\t// Test all developer settings and parse to assumption-safe values.\r\n\tfunction testOptions ( options ) {\r\n\r\n\t\t// To prove a fix for #537, freeze options here.\r\n\t\t// If the object is modified, an error will be thrown.\r\n\t\t// Object.freeze(options);\r\n\r\n\t\tvar parsed = {\r\n\t\t\tmargin: 0,\r\n\t\t\tlimit: 0,\r\n\t\t\tpadding: 0,\r\n\t\t\tanimate: true,\r\n\t\t\tanimationDuration: 300,\r\n\t\t\tariaFormat: defaultFormatter,\r\n\t\t\tformat: defaultFormatter\r\n\t\t};\r\n\r\n\t\t// Tests are executed in the order they are presented here.\r\n\t\tvar tests = {\r\n\t\t\t'step': { r: false, t: testStep },\r\n\t\t\t'start': { r: true, t: testStart },\r\n\t\t\t'connect': { r: true, t: testConnect },\r\n\t\t\t'direction': { r: true, t: testDirection },\r\n\t\t\t'snap': { r: false, t: testSnap },\r\n\t\t\t'animate': { r: false, t: testAnimate },\r\n\t\t\t'animationDuration': { r: false, t: testAnimationDuration },\r\n\t\t\t'range': { r: true, t: testRange },\r\n\t\t\t'orientation': { r: false, t: testOrientation },\r\n\t\t\t'margin': { r: false, t: testMargin },\r\n\t\t\t'limit': { r: false, t: testLimit },\r\n\t\t\t'padding': { r: false, t: testPadding },\r\n\t\t\t'behaviour': { r: true, t: testBehaviour },\r\n\t\t\t'ariaFormat': { r: false, t: testAriaFormat },\r\n\t\t\t'format': { r: false, t: testFormat },\r\n\t\t\t'tooltips': { r: false, t: testTooltips },\r\n\t\t\t'cssPrefix': { r: false, t: testCssPrefix },\r\n\t\t\t'cssClasses': { r: false, t: testCssClasses },\r\n\t\t\t'useRequestAnimationFrame': { r: false, t: testUseRaf }\r\n\t\t};\r\n\r\n\t\tvar defaults = {\r\n\t\t\t'connect': false,\r\n\t\t\t'direction': 'ltr',\r\n\t\t\t'behaviour': 'tap',\r\n\t\t\t'orientation': 'horizontal',\r\n\t\t\t'cssPrefix' : 'noUi-',\r\n\t\t\t'cssClasses': {\r\n\t\t\t\ttarget: 'target',\r\n\t\t\t\tbase: 'base',\r\n\t\t\t\torigin: 'origin',\r\n\t\t\t\thandle: 'handle',\r\n\t\t\t\thandleLower: 'handle-lower',\r\n\t\t\t\thandleUpper: 'handle-upper',\r\n\t\t\t\thorizontal: 'horizontal',\r\n\t\t\t\tvertical: 'vertical',\r\n\t\t\t\tbackground: 'background',\r\n\t\t\t\tconnect: 'connect',\r\n\t\t\t\tltr: 'ltr',\r\n\t\t\t\trtl: 'rtl',\r\n\t\t\t\tdraggable: 'draggable',\r\n\t\t\t\tdrag: 'state-drag',\r\n\t\t\t\ttap: 'state-tap',\r\n\t\t\t\tactive: 'active',\r\n\t\t\t\ttooltip: 'tooltip',\r\n\t\t\t\tpips: 'pips',\r\n\t\t\t\tpipsHorizontal: 'pips-horizontal',\r\n\t\t\t\tpipsVertical: 'pips-vertical',\r\n\t\t\t\tmarker: 'marker',\r\n\t\t\t\tmarkerHorizontal: 'marker-horizontal',\r\n\t\t\t\tmarkerVertical: 'marker-vertical',\r\n\t\t\t\tmarkerNormal: 'marker-normal',\r\n\t\t\t\tmarkerLarge: 'marker-large',\r\n\t\t\t\tmarkerSub: 'marker-sub',\r\n\t\t\t\tvalue: 'value',\r\n\t\t\t\tvalueHorizontal: 'value-horizontal',\r\n\t\t\t\tvalueVertical: 'value-vertical',\r\n\t\t\t\tvalueNormal: 'value-normal',\r\n\t\t\t\tvalueLarge: 'value-large',\r\n\t\t\t\tvalueSub: 'value-sub'\r\n\t\t\t},\r\n\t\t\t'useRequestAnimationFrame': true\r\n\t\t};\r\n\r\n\t\t// AriaFormat defaults to regular format, if any.\r\n\t\tif ( options.format && !options.ariaFormat ) {\r\n\t\t\toptions.ariaFormat = options.format;\r\n\t\t}\r\n\r\n\t\t// Run all options through a testing mechanism to ensure correct\r\n\t\t// input. It should be noted that options might get modified to\r\n\t\t// be handled properly. E.g. wrapping integers in arrays.\r\n\t\tObject.keys(tests).forEach(function( name ){\r\n\r\n\t\t\t// If the option isn't set, but it is required, throw an error.\r\n\t\t\tif ( options[name] === undefined && defaults[name] === undefined ) {\r\n\r\n\t\t\t\tif ( tests[name].r ) {\r\n\t\t\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): '\" + name + \"' is required.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\ttests[name].t( parsed, options[name] === undefined ? defaults[name] : options[name] );\r\n\t\t});\r\n\r\n\t\t// Forward pips options\r\n\t\tparsed.pips = options.pips;\r\n\r\n\t\tvar styles = [['left', 'top'], ['right', 'bottom']];\r\n\r\n\t\t// Pre-define the styles.\r\n\t\tparsed.style = styles[parsed.dir][parsed.ort];\r\n\t\tparsed.styleOposite = styles[parsed.dir?0:1][parsed.ort];\r\n\r\n\t\treturn parsed;\r\n\t}\r\n\r\n\r\nfunction closure ( target, options, originalOptions ){\r\n\r\n\tvar actions = getActions();\r\n\tvar supportsTouchActionNone = getSupportsTouchActionNone();\r\n\tvar supportsPassive = supportsTouchActionNone && getSupportsPassive();\r\n\r\n\t// All variables local to 'closure' are prefixed with 'scope_'\r\n\tvar scope_Target = target;\r\n\tvar scope_Locations = [];\r\n\tvar scope_Base;\r\n\tvar scope_Handles;\r\n\tvar scope_HandleNumbers = [];\r\n\tvar scope_ActiveHandle = false;\r\n\tvar scope_Connects;\r\n\tvar scope_Spectrum = options.spectrum;\r\n\tvar scope_Values = [];\r\n\tvar scope_Events = {};\r\n\tvar scope_Self;\r\n\tvar scope_Pips;\r\n\tvar scope_Listeners = null;\r\n\tvar scope_Document = target.ownerDocument;\r\n\tvar scope_DocumentElement = scope_Document.documentElement;\r\n\tvar scope_Body = scope_Document.body;\r\n\r\n\r\n\t// Creates a node, adds it to target, returns the new node.\r\n\tfunction addNodeTo ( target, className ) {\r\n\r\n\t\tvar div = scope_Document.createElement('div');\r\n\r\n\t\tif ( className ) {\r\n\t\t\taddClass(div, className);\r\n\t\t}\r\n\r\n\t\ttarget.appendChild(div);\r\n\r\n\t\treturn div;\r\n\t}\r\n\r\n\t// Append a origin to the base\r\n\tfunction addOrigin ( base, handleNumber ) {\r\n\r\n\t\tvar origin = addNodeTo(base, options.cssClasses.origin);\r\n\t\tvar handle = addNodeTo(origin, options.cssClasses.handle);\r\n\r\n\t\thandle.setAttribute('data-handle', handleNumber);\r\n\r\n\t\t// https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex\r\n\t\t// 0 = focusable and reachable\r\n\t\thandle.setAttribute('tabindex', '0');\r\n\t\thandle.setAttribute('role', 'slider');\r\n\t\thandle.setAttribute('aria-orientation', options.ort ? 'vertical' : 'horizontal');\r\n\r\n\t\tif ( handleNumber === 0 ) {\r\n\t\t\taddClass(handle, options.cssClasses.handleLower);\r\n\t\t}\r\n\r\n\t\telse if ( handleNumber === options.handles - 1 ) {\r\n\t\t\taddClass(handle, options.cssClasses.handleUpper);\r\n\t\t}\r\n\r\n\t\treturn origin;\r\n\t}\r\n\r\n\t// Insert nodes for connect elements\r\n\tfunction addConnect ( base, add ) {\r\n\r\n\t\tif ( !add ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn addNodeTo(base, options.cssClasses.connect);\r\n\t}\r\n\r\n\t// Add handles to the slider base.\r\n\tfunction addElements ( connectOptions, base ) {\r\n\r\n\t\tscope_Handles = [];\r\n\t\tscope_Connects = [];\r\n\r\n\t\tscope_Connects.push(addConnect(base, connectOptions[0]));\r\n\r\n\t\t// [::::O====O====O====]\r\n\t\t// connectOptions = [0, 1, 1, 1]\r\n\r\n\t\tfor ( var i = 0; i < options.handles; i++ ) {\r\n\t\t\t// Keep a list of all added handles.\r\n\t\t\tscope_Handles.push(addOrigin(base, i));\r\n\t\t\tscope_HandleNumbers[i] = i;\r\n\t\t\tscope_Connects.push(addConnect(base, connectOptions[i + 1]));\r\n\t\t}\r\n\t}\r\n\r\n\t// Initialize a single slider.\r\n\tfunction addSlider ( target ) {\r\n\r\n\t\t// Apply classes and data to the target.\r\n\t\taddClass(target, options.cssClasses.target);\r\n\r\n\t\tif ( options.dir === 0 ) {\r\n\t\t\taddClass(target, options.cssClasses.ltr);\r\n\t\t} else {\r\n\t\t\taddClass(target, options.cssClasses.rtl);\r\n\t\t}\r\n\r\n\t\tif ( options.ort === 0 ) {\r\n\t\t\taddClass(target, options.cssClasses.horizontal);\r\n\t\t} else {\r\n\t\t\taddClass(target, options.cssClasses.vertical);\r\n\t\t}\r\n\r\n\t\tscope_Base = addNodeTo(target, options.cssClasses.base);\r\n\t}\r\n\r\n\r\n\tfunction addTooltip ( handle, handleNumber ) {\r\n\r\n\t\tif ( !options.tooltips[handleNumber] ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn addNodeTo(handle.firstChild, options.cssClasses.tooltip);\r\n\t}\r\n\r\n\t// The tooltips option is a shorthand for using the 'update' event.\r\n\tfunction tooltips ( ) {\r\n\r\n\t\t// Tooltips are added with options.tooltips in original order.\r\n\t\tvar tips = scope_Handles.map(addTooltip);\r\n\r\n\t\tbindEvent('update', function(values, handleNumber, unencoded) {\r\n\r\n\t\t\tif ( !tips[handleNumber] ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar formattedValue = values[handleNumber];\r\n\r\n\t\t\tif ( options.tooltips[handleNumber] !== true ) {\r\n\t\t\t\tformattedValue = options.tooltips[handleNumber].to(unencoded[handleNumber]);\r\n\t\t\t}\r\n\r\n\t\t\ttips[handleNumber].innerHTML = formattedValue;\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tfunction aria ( ) {\r\n\r\n\t\tbindEvent('update', function ( values, handleNumber, unencoded, tap, positions ) {\r\n\r\n\t\t\t// Update Aria Values for all handles, as a change in one changes min and max values for the next.\r\n\t\t\tscope_HandleNumbers.forEach(function( handleNumber ){\r\n\r\n\t\t\t\tvar handle = scope_Handles[handleNumber];\r\n\r\n\t\t\t\tvar min = checkHandlePosition(scope_Locations, handleNumber, 0, true, true, true);\r\n\t\t\t\tvar max = checkHandlePosition(scope_Locations, handleNumber, 100, true, true, true);\r\n\r\n\t\t\t\tvar now = positions[handleNumber];\r\n\t\t\t\tvar text = options.ariaFormat.to(unencoded[handleNumber]);\r\n\r\n\t\t\t\thandle.children[0].setAttribute('aria-valuemin', min.toFixed(1));\r\n\t\t\t\thandle.children[0].setAttribute('aria-valuemax', max.toFixed(1));\r\n\t\t\t\thandle.children[0].setAttribute('aria-valuenow', now.toFixed(1));\r\n\t\t\t\thandle.children[0].setAttribute('aria-valuetext', text);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tfunction getGroup ( mode, values, stepped ) {\r\n\r\n\t\t// Use the range.\r\n\t\tif ( mode === 'range' || mode === 'steps' ) {\r\n\t\t\treturn scope_Spectrum.xVal;\r\n\t\t}\r\n\r\n\t\tif ( mode === 'count' ) {\r\n\r\n\t\t\tif ( !values ) {\r\n\t\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): 'values' required for mode 'count'.\");\r\n\t\t\t}\r\n\r\n\t\t\t// Divide 0 - 100 in 'count' parts.\r\n\t\t\tvar spread = ( 100 / (values - 1) );\r\n\t\t\tvar v;\r\n\t\t\tvar i = 0;\r\n\r\n\t\t\tvalues = [];\r\n\r\n\t\t\t// List these parts and have them handled as 'positions'.\r\n\t\t\twhile ( (v = i++ * spread) <= 100 ) {\r\n\t\t\t\tvalues.push(v);\r\n\t\t\t}\r\n\r\n\t\t\tmode = 'positions';\r\n\t\t}\r\n\r\n\t\tif ( mode === 'positions' ) {\r\n\r\n\t\t\t// Map all percentages to on-range values.\r\n\t\t\treturn values.map(function( value ){\r\n\t\t\t\treturn scope_Spectrum.fromStepping( stepped ? scope_Spectrum.getStep( value ) : value );\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ( mode === 'values' ) {\r\n\r\n\t\t\t// If the value must be stepped, it needs to be converted to a percentage first.\r\n\t\t\tif ( stepped ) {\r\n\r\n\t\t\t\treturn values.map(function( value ){\r\n\r\n\t\t\t\t\t// Convert to percentage, apply step, return to value.\r\n\t\t\t\t\treturn scope_Spectrum.fromStepping( scope_Spectrum.getStep( scope_Spectrum.toStepping( value ) ) );\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Otherwise, we can simply use the values.\r\n\t\t\treturn values;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction generateSpread ( density, mode, group ) {\r\n\r\n\t\tfunction safeIncrement(value, increment) {\r\n\t\t\t// Avoid floating point variance by dropping the smallest decimal places.\r\n\t\t\treturn (value + increment).toFixed(7) / 1;\r\n\t\t}\r\n\r\n\t\tvar indexes = {};\r\n\t\tvar firstInRange = scope_Spectrum.xVal[0];\r\n\t\tvar lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length-1];\r\n\t\tvar ignoreFirst = false;\r\n\t\tvar ignoreLast = false;\r\n\t\tvar prevPct = 0;\r\n\r\n\t\t// Create a copy of the group, sort it and filter away all duplicates.\r\n\t\tgroup = unique(group.slice().sort(function(a, b){ return a - b; }));\r\n\r\n\t\t// Make sure the range starts with the first element.\r\n\t\tif ( group[0] !== firstInRange ) {\r\n\t\t\tgroup.unshift(firstInRange);\r\n\t\t\tignoreFirst = true;\r\n\t\t}\r\n\r\n\t\t// Likewise for the last one.\r\n\t\tif ( group[group.length - 1] !== lastInRange ) {\r\n\t\t\tgroup.push(lastInRange);\r\n\t\t\tignoreLast = true;\r\n\t\t}\r\n\r\n\t\tgroup.forEach(function ( current, index ) {\r\n\r\n\t\t\t// Get the current step and the lower + upper positions.\r\n\t\t\tvar step;\r\n\t\t\tvar i;\r\n\t\t\tvar q;\r\n\t\t\tvar low = current;\r\n\t\t\tvar high = group[index+1];\r\n\t\t\tvar newPct;\r\n\t\t\tvar pctDifference;\r\n\t\t\tvar pctPos;\r\n\t\t\tvar type;\r\n\t\t\tvar steps;\r\n\t\t\tvar realSteps;\r\n\t\t\tvar stepsize;\r\n\r\n\t\t\t// When using 'steps' mode, use the provided steps.\r\n\t\t\t// Otherwise, we'll step on to the next subrange.\r\n\t\t\tif ( mode === 'steps' ) {\r\n\t\t\t\tstep = scope_Spectrum.xNumSteps[ index ];\r\n\t\t\t}\r\n\r\n\t\t\t// Default to a 'full' step.\r\n\t\t\tif ( !step ) {\r\n\t\t\t\tstep = high-low;\r\n\t\t\t}\r\n\r\n\t\t\t// Low can be 0, so test for false. If high is undefined,\r\n\t\t\t// we are at the last subrange. Index 0 is already handled.\r\n\t\t\tif ( low === false || high === undefined ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Make sure step isn't 0, which would cause an infinite loop (#654)\r\n\t\t\tstep = Math.max(step, 0.0000001);\r\n\r\n\t\t\t// Find all steps in the subrange.\r\n\t\t\tfor ( i = low; i <= high; i = safeIncrement(i, step) ) {\r\n\r\n\t\t\t\t// Get the percentage value for the current step,\r\n\t\t\t\t// calculate the size for the subrange.\r\n\t\t\t\tnewPct = scope_Spectrum.toStepping( i );\r\n\t\t\t\tpctDifference = newPct - prevPct;\r\n\r\n\t\t\t\tsteps = pctDifference / density;\r\n\t\t\t\trealSteps = Math.round(steps);\r\n\r\n\t\t\t\t// This ratio represents the ammount of percentage-space a point indicates.\r\n\t\t\t\t// For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-devided.\r\n\t\t\t\t// Round the percentage offset to an even number, then divide by two\r\n\t\t\t\t// to spread the offset on both sides of the range.\r\n\t\t\t\tstepsize = pctDifference/realSteps;\r\n\r\n\t\t\t\t// Divide all points evenly, adding the correct number to this subrange.\r\n\t\t\t\t// Run up to <= so that 100% gets a point, event if ignoreLast is set.\r\n\t\t\t\tfor ( q = 1; q <= realSteps; q += 1 ) {\r\n\r\n\t\t\t\t\t// The ratio between the rounded value and the actual size might be ~1% off.\r\n\t\t\t\t\t// Correct the percentage offset by the number of points\r\n\t\t\t\t\t// per subrange. density = 1 will result in 100 points on the\r\n\t\t\t\t\t// full range, 2 for 50, 4 for 25, etc.\r\n\t\t\t\t\tpctPos = prevPct + ( q * stepsize );\r\n\t\t\t\t\tindexes[pctPos.toFixed(5)] = ['x', 0];\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Determine the point type.\r\n\t\t\t\ttype = (group.indexOf(i) > -1) ? 1 : ( mode === 'steps' ? 2 : 0 );\r\n\r\n\t\t\t\t// Enforce the 'ignoreFirst' option by overwriting the type for 0.\r\n\t\t\t\tif ( !index && ignoreFirst ) {\r\n\t\t\t\t\ttype = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !(i === high && ignoreLast)) {\r\n\t\t\t\t\t// Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value.\r\n\t\t\t\t\tindexes[newPct.toFixed(5)] = [i, type];\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Update the percentage count.\r\n\t\t\t\tprevPct = newPct;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn indexes;\r\n\t}\r\n\r\n\tfunction addMarking ( spread, filterFunc, formatter ) {\r\n\r\n\t\tvar element = scope_Document.createElement('div');\r\n\r\n\t\tvar valueSizeClasses = [\r\n\t\t\toptions.cssClasses.valueNormal,\r\n\t\t\toptions.cssClasses.valueLarge,\r\n\t\t\toptions.cssClasses.valueSub\r\n\t\t];\r\n\t\tvar markerSizeClasses = [\r\n\t\t\toptions.cssClasses.markerNormal,\r\n\t\t\toptions.cssClasses.markerLarge,\r\n\t\t\toptions.cssClasses.markerSub\r\n\t\t];\r\n\t\tvar valueOrientationClasses = [\r\n\t\t\toptions.cssClasses.valueHorizontal,\r\n\t\t\toptions.cssClasses.valueVertical\r\n\t\t];\r\n\t\tvar markerOrientationClasses = [\r\n\t\t\toptions.cssClasses.markerHorizontal,\r\n\t\t\toptions.cssClasses.markerVertical\r\n\t\t];\r\n\r\n\t\taddClass(element, options.cssClasses.pips);\r\n\t\taddClass(element, options.ort === 0 ? options.cssClasses.pipsHorizontal : options.cssClasses.pipsVertical);\r\n\r\n\t\tfunction getClasses( type, source ){\r\n\t\t\tvar a = source === options.cssClasses.value;\r\n\t\t\tvar orientationClasses = a ? valueOrientationClasses : markerOrientationClasses;\r\n\t\t\tvar sizeClasses = a ? valueSizeClasses : markerSizeClasses;\r\n\r\n\t\t\treturn source + ' ' + orientationClasses[options.ort] + ' ' + sizeClasses[type];\r\n\t\t}\r\n\r\n\t\tfunction addSpread ( offset, values ){\r\n\r\n\t\t\t// Apply the filter function, if it is set.\r\n\t\t\tvalues[1] = (values[1] && filterFunc) ? filterFunc(values[0], values[1]) : values[1];\r\n\r\n\t\t\t// Add a marker for every point\r\n\t\t\tvar node = addNodeTo(element, false);\r\n\t\t\t\tnode.className = getClasses(values[1], options.cssClasses.marker);\r\n\t\t\t\tnode.style[options.style] = offset + '%';\r\n\r\n\t\t\t// Values are only appended for points marked '1' or '2'.\r\n\t\t\tif ( values[1] ) {\r\n\t\t\t\tnode = addNodeTo(element, false);\r\n\t\t\t\tnode.className = getClasses(values[1], options.cssClasses.value);\r\n\t\t\t\tnode.style[options.style] = offset + '%';\r\n\t\t\t\tnode.innerText = formatter.to(values[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Append all points.\r\n\t\tObject.keys(spread).forEach(function(a){\r\n\t\t\taddSpread(a, spread[a]);\r\n\t\t});\r\n\r\n\t\treturn element;\r\n\t}\r\n\r\n\tfunction removePips ( ) {\r\n\t\tif ( scope_Pips ) {\r\n\t\t\tremoveElement(scope_Pips);\r\n\t\t\tscope_Pips = null;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction pips ( grid ) {\r\n\r\n\t\t// Fix #669\r\n\t\tremovePips();\r\n\r\n\t\tvar mode = grid.mode;\r\n\t\tvar density = grid.density || 1;\r\n\t\tvar filter = grid.filter || false;\r\n\t\tvar values = grid.values || false;\r\n\t\tvar stepped = grid.stepped || false;\r\n\t\tvar group = getGroup( mode, values, stepped );\r\n\t\tvar spread = generateSpread( density, mode, group );\r\n\t\tvar format = grid.format || {\r\n\t\t\tto: Math.round\r\n\t\t};\r\n\r\n\t\tscope_Pips = scope_Target.appendChild(addMarking(\r\n\t\t\tspread,\r\n\t\t\tfilter,\r\n\t\t\tformat\r\n\t\t));\r\n\r\n\t\treturn scope_Pips;\r\n\t}\r\n\r\n\r\n\t// Shorthand for base dimensions.\r\n\tfunction baseSize ( ) {\r\n\t\tvar rect = scope_Base.getBoundingClientRect(), alt = 'offset' + ['Width', 'Height'][options.ort];\r\n\t\treturn options.ort === 0 ? (rect.width||scope_Base[alt]) : (rect.height||scope_Base[alt]);\r\n\t}\r\n\r\n\t// Handler for attaching events trough a proxy.\r\n\tfunction attachEvent ( events, element, callback, data ) {\r\n\r\n\t\t// This function can be used to 'filter' events to the slider.\r\n\t\t// element is a node, not a nodeList\r\n\r\n\t\tvar method = function ( e ){\r\n\r\n\t\t\tif ( scope_Target.hasAttribute('disabled') ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Stop if an active 'tap' transition is taking place.\r\n\t\t\tif ( hasClass(scope_Target, options.cssClasses.tap) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\te = fixEvent(e, data.pageOffset);\r\n\r\n\t\t\t// Handle reject of multitouch\r\n\t\t\tif ( !e ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Ignore right or middle clicks on start #454\r\n\t\t\tif ( events === actions.start && e.buttons !== undefined && e.buttons > 1 ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Ignore right or middle clicks on start #454\r\n\t\t\tif ( data.hover && e.buttons ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// 'supportsPassive' is only true if a browser also supports touch-action: none in CSS.\r\n\t\t\t// iOS safari does not, so it doesn't get to benefit from passive scrolling. iOS does support\r\n\t\t\t// touch-action: manipulation, but that allows panning, which breaks\r\n\t\t\t// sliders after zooming/on non-responsive pages.\r\n\t\t\t// See: https://bugs.webkit.org/show_bug.cgi?id=133112\r\n\t\t\tif ( !supportsPassive ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\te.calcPoint = e.points[ options.ort ];\r\n\r\n\t\t\t// Call the event handler with the event [ and additional data ].\r\n\t\t\tcallback ( e, data );\r\n\t\t};\r\n\r\n\t\tvar methods = [];\r\n\r\n\t\t// Bind a closure on the target for every event type.\r\n\t\tevents.split(' ').forEach(function( eventName ){\r\n\t\t\telement.addEventListener(eventName, method, supportsPassive ? { passive: true } : false);\r\n\t\t\tmethods.push([eventName, method]);\r\n\t\t});\r\n\r\n\t\treturn methods;\r\n\t}\r\n\r\n\t// Provide a clean event with standardized offset values.\r\n\tfunction fixEvent ( e, pageOffset ) {\r\n\r\n\t\t// Filter the event to register the type, which can be\r\n\t\t// touch, mouse or pointer. Offset changes need to be\r\n\t\t// made on an event specific basis.\r\n\t\tvar touch = e.type.indexOf('touch') === 0;\r\n\t\tvar mouse = e.type.indexOf('mouse') === 0;\r\n\t\tvar pointer = e.type.indexOf('pointer') === 0;\r\n\r\n\t\tvar x;\r\n\t\tvar y;\r\n\r\n\t\t// IE10 implemented pointer events with a prefix;\r\n\t\tif ( e.type.indexOf('MSPointer') === 0 ) {\r\n\t\t\tpointer = true;\r\n\t\t}\r\n\r\n\t\tif ( touch ) {\r\n\r\n\t\t\t// Fix bug when user touches with two or more fingers on mobile devices.\r\n\t\t\t// It's useful when you have two or more sliders on one page,\r\n\t\t\t// that can be touched simultaneously.\r\n\t\t\t// #649, #663, #668\r\n\t\t\tif ( e.touches.length > 1 ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// noUiSlider supports one movement at a time,\r\n\t\t\t// so we can select the first 'changedTouch'.\r\n\t\t\tx = e.changedTouches[0].pageX;\r\n\t\t\ty = e.changedTouches[0].pageY;\r\n\t\t}\r\n\r\n\t\tpageOffset = pageOffset || getPageOffset(scope_Document);\r\n\r\n\t\tif ( mouse || pointer ) {\r\n\t\t\tx = e.clientX + pageOffset.x;\r\n\t\t\ty = e.clientY + pageOffset.y;\r\n\t\t}\r\n\r\n\t\te.pageOffset = pageOffset;\r\n\t\te.points = [x, y];\r\n\t\te.cursor = mouse || pointer; // Fix #435\r\n\r\n\t\treturn e;\r\n\t}\r\n\r\n\t// Translate a coordinate in the document to a percentage on the slider\r\n\tfunction calcPointToPercentage ( calcPoint ) {\r\n\t\tvar location = calcPoint - offset(scope_Base, options.ort);\r\n\t\tvar proposal = ( location * 100 ) / baseSize();\r\n\t\treturn options.dir ? 100 - proposal : proposal;\r\n\t}\r\n\r\n\t// Find handle closest to a certain percentage on the slider\r\n\tfunction getClosestHandle ( proposal ) {\r\n\r\n\t\tvar closest = 100;\r\n\t\tvar handleNumber = false;\r\n\r\n\t\tscope_Handles.forEach(function(handle, index){\r\n\r\n\t\t\t// Disabled handles are ignored\r\n\t\t\tif ( handle.hasAttribute('disabled') ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar pos = Math.abs(scope_Locations[index] - proposal);\r\n\r\n\t\t\tif ( pos < closest ) {\r\n\t\t\t\thandleNumber = index;\r\n\t\t\t\tclosest = pos;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn handleNumber;\r\n\t}\r\n\r\n\t// Moves handle(s) by a percentage\r\n\t// (bool, % to move, [% where handle started, ...], [index in scope_Handles, ...])\r\n\tfunction moveHandles ( upward, proposal, locations, handleNumbers ) {\r\n\r\n\t\tvar proposals = locations.slice();\r\n\r\n\t\tvar b = [!upward, upward];\r\n\t\tvar f = [upward, !upward];\r\n\r\n\t\t// Copy handleNumbers so we don't change the dataset\r\n\t\thandleNumbers = handleNumbers.slice();\r\n\r\n\t\t// Check to see which handle is 'leading'.\r\n\t\t// If that one can't move the second can't either.\r\n\t\tif ( upward ) {\r\n\t\t\thandleNumbers.reverse();\r\n\t\t}\r\n\r\n\t\t// Step 1: get the maximum percentage that any of the handles can move\r\n\t\tif ( handleNumbers.length > 1 ) {\r\n\r\n\t\t\thandleNumbers.forEach(function(handleNumber, o) {\r\n\r\n\t\t\t\tvar to = checkHandlePosition(proposals, handleNumber, proposals[handleNumber] + proposal, b[o], f[o], false);\r\n\r\n\t\t\t\t// Stop if one of the handles can't move.\r\n\t\t\t\tif ( to === false ) {\r\n\t\t\t\t\tproposal = 0;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tproposal = to - proposals[handleNumber];\r\n\t\t\t\t\tproposals[handleNumber] = to;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// If using one handle, check backward AND forward\r\n\t\telse {\r\n\t\t\tb = f = [true];\r\n\t\t}\r\n\r\n\t\tvar state = false;\r\n\r\n\t\t// Step 2: Try to set the handles with the found percentage\r\n\t\thandleNumbers.forEach(function(handleNumber, o) {\r\n\t\t\tstate = setHandle(handleNumber, locations[handleNumber] + proposal, b[o], f[o]) || state;\r\n\t\t});\r\n\r\n\t\t// Step 3: If a handle moved, fire events\r\n\t\tif ( state ) {\r\n\t\t\thandleNumbers.forEach(function(handleNumber){\r\n\t\t\t\tfireEvent('update', handleNumber);\r\n\t\t\t\tfireEvent('slide', handleNumber);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t// External event handling\r\n\tfunction fireEvent ( eventName, handleNumber, tap ) {\r\n\r\n\t\tObject.keys(scope_Events).forEach(function( targetEvent ) {\r\n\r\n\t\t\tvar eventType = targetEvent.split('.')[0];\r\n\r\n\t\t\tif ( eventName === eventType ) {\r\n\t\t\t\tscope_Events[targetEvent].forEach(function( callback ) {\r\n\r\n\t\t\t\t\tcallback.call(\r\n\t\t\t\t\t\t// Use the slider public API as the scope ('this')\r\n\t\t\t\t\t\tscope_Self,\r\n\t\t\t\t\t\t// Return values as array, so arg_1[arg_2] is always valid.\r\n\t\t\t\t\t\tscope_Values.map(options.format.to),\r\n\t\t\t\t\t\t// Handle index, 0 or 1\r\n\t\t\t\t\t\thandleNumber,\r\n\t\t\t\t\t\t// Unformatted slider values\r\n\t\t\t\t\t\tscope_Values.slice(),\r\n\t\t\t\t\t\t// Event is fired by tap, true or false\r\n\t\t\t\t\t\ttap || false,\r\n\t\t\t\t\t\t// Left offset of the handle, in relation to the slider\r\n\t\t\t\t\t\tscope_Locations.slice()\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\r\n\t// Fire 'end' when a mouse or pen leaves the document.\r\n\tfunction documentLeave ( event, data ) {\r\n\t\tif ( event.type === \"mouseout\" && event.target.nodeName === \"HTML\" && event.relatedTarget === null ){\r\n\t\t\teventEnd (event, data);\r\n\t\t}\r\n\t}\r\n\r\n\t// Handle movement on document for handle and range drag.\r\n\tfunction eventMove ( event, data ) {\r\n\r\n\t\t// Fix #498\r\n\t\t// Check value of .buttons in 'start' to work around a bug in IE10 mobile (data.buttonsProperty).\r\n\t\t// https://connect.microsoft.com/IE/feedback/details/927005/mobile-ie10-windows-phone-buttons-property-of-pointermove-event-always-zero\r\n\t\t// IE9 has .buttons and .which zero on mousemove.\r\n\t\t// Firefox breaks the spec MDN defines.\r\n\t\tif ( navigator.appVersion.indexOf(\"MSIE 9\") === -1 && event.buttons === 0 && data.buttonsProperty !== 0 ) {\r\n\t\t\treturn eventEnd(event, data);\r\n\t\t}\r\n\r\n\t\t// Check if we are moving up or down\r\n\t\tvar movement = (options.dir ? -1 : 1) * (event.calcPoint - data.startCalcPoint);\r\n\r\n\t\t// Convert the movement into a percentage of the slider width/height\r\n\t\tvar proposal = (movement * 100) / data.baseSize;\r\n\r\n\t\tmoveHandles(movement > 0, proposal, data.locations, data.handleNumbers);\r\n\t}\r\n\r\n\t// Unbind move events on document, call callbacks.\r\n\tfunction eventEnd ( event, data ) {\r\n\r\n\t\t// The handle is no longer active, so remove the class.\r\n\t\tif ( scope_ActiveHandle ) {\r\n\t\t\tremoveClass(scope_ActiveHandle, options.cssClasses.active);\r\n\t\t\tscope_ActiveHandle = false;\r\n\t\t}\r\n\r\n\t\t// Remove cursor styles and text-selection events bound to the body.\r\n\t\tif ( event.cursor ) {\r\n\t\t\tscope_Body.style.cursor = '';\r\n\t\t\tscope_Body.removeEventListener('selectstart', preventDefault);\r\n\t\t}\r\n\r\n\t\t// Unbind the move and end events, which are added on 'start'.\r\n\t\tscope_Listeners.forEach(function( c ) {\r\n\t\t\tscope_DocumentElement.removeEventListener(c[0], c[1]);\r\n\t\t});\r\n\r\n\t\t// Remove dragging class.\r\n\t\tremoveClass(scope_Target, options.cssClasses.drag);\r\n\r\n\t\tsetZindex();\r\n\r\n\t\tdata.handleNumbers.forEach(function(handleNumber){\r\n\t\t\tfireEvent('change', handleNumber);\r\n\t\t\tfireEvent('set', handleNumber);\r\n\t\t\tfireEvent('end', handleNumber);\r\n\t\t});\r\n\t}\r\n\r\n\t// Bind move events on document.\r\n\tfunction eventStart ( event, data ) {\r\n\r\n\t\tif ( data.handleNumbers.length === 1 ) {\r\n\r\n\t\t\tvar handle = scope_Handles[data.handleNumbers[0]];\r\n\r\n\t\t\t// Ignore 'disabled' handles\r\n\t\t\tif ( handle.hasAttribute('disabled') ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Mark the handle as 'active' so it can be styled.\r\n\t\t\tscope_ActiveHandle = handle.children[0];\r\n\t\t\taddClass(scope_ActiveHandle, options.cssClasses.active);\r\n\t\t}\r\n\r\n\t\t// A drag should never propagate up to the 'tap' event.\r\n\t\tevent.stopPropagation();\r\n\r\n\t\t// Attach the move and end events.\r\n\t\tvar moveEvent = attachEvent(actions.move, scope_DocumentElement, eventMove, {\r\n\t\t\tstartCalcPoint: event.calcPoint,\r\n\t\t\tbaseSize: baseSize(),\r\n\t\t\tpageOffset: event.pageOffset,\r\n\t\t\thandleNumbers: data.handleNumbers,\r\n\t\t\tbuttonsProperty: event.buttons,\r\n\t\t\tlocations: scope_Locations.slice()\r\n\t\t});\r\n\r\n\t\tvar endEvent = attachEvent(actions.end, scope_DocumentElement, eventEnd, {\r\n\t\t\thandleNumbers: data.handleNumbers\r\n\t\t});\r\n\r\n\t\tvar outEvent = attachEvent(\"mouseout\", scope_DocumentElement, documentLeave, {\r\n\t\t\thandleNumbers: data.handleNumbers\r\n\t\t});\r\n\r\n\t\tscope_Listeners = moveEvent.concat(endEvent, outEvent);\r\n\r\n\t\t// Text selection isn't an issue on touch devices,\r\n\t\t// so adding cursor styles can be skipped.\r\n\t\tif ( event.cursor ) {\r\n\r\n\t\t\t// Prevent the 'I' cursor and extend the range-drag cursor.\r\n\t\t\tscope_Body.style.cursor = getComputedStyle(event.target).cursor;\r\n\r\n\t\t\t// Mark the target with a dragging state.\r\n\t\t\tif ( scope_Handles.length > 1 ) {\r\n\t\t\t\taddClass(scope_Target, options.cssClasses.drag);\r\n\t\t\t}\r\n\r\n\t\t\t// Prevent text selection when dragging the handles.\r\n\t\t\t// In noUiSlider <= 9.2.0, this was handled by calling preventDefault on mouse/touch start/move,\r\n\t\t\t// which is scroll blocking. The selectstart event is supported by FireFox starting from version 52,\r\n\t\t\t// meaning the only holdout is iOS Safari. This doesn't matter: text selection isn't triggered there.\r\n\t\t\t// The 'cursor' flag is false.\r\n\t\t\t// See: http://caniuse.com/#search=selectstart\r\n\t\t\tscope_Body.addEventListener('selectstart', preventDefault, false);\r\n\t\t}\r\n\r\n\t\tdata.handleNumbers.forEach(function(handleNumber){\r\n\t\t\tfireEvent('start', handleNumber);\r\n\t\t});\r\n\t}\r\n\r\n\t// Move closest handle to tapped location.\r\n\tfunction eventTap ( event ) {\r\n\r\n\t\t// The tap event shouldn't propagate up\r\n\t\tevent.stopPropagation();\r\n\r\n\t\tvar proposal = calcPointToPercentage(event.calcPoint);\r\n\t\tvar handleNumber = getClosestHandle(proposal);\r\n\r\n\t\t// Tackle the case that all handles are 'disabled'.\r\n\t\tif ( handleNumber === false ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Flag the slider as it is now in a transitional state.\r\n\t\t// Transition takes a configurable amount of ms (default 300). Re-enable the slider after that.\r\n\t\tif ( !options.events.snap ) {\r\n\t\t\taddClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);\r\n\t\t}\r\n\r\n\t\tsetHandle(handleNumber, proposal, true, true);\r\n\r\n\t\tsetZindex();\r\n\r\n\t\tfireEvent('slide', handleNumber, true);\r\n\t\tfireEvent('update', handleNumber, true);\r\n\t\tfireEvent('change', handleNumber, true);\r\n\t\tfireEvent('set', handleNumber, true);\r\n\r\n\t\tif ( options.events.snap ) {\r\n\t\t\teventStart(event, { handleNumbers: [handleNumber] });\r\n\t\t}\r\n\t}\r\n\r\n\t// Fires a 'hover' event for a hovered mouse/pen position.\r\n\tfunction eventHover ( event ) {\r\n\r\n\t\tvar proposal = calcPointToPercentage(event.calcPoint);\r\n\r\n\t\tvar to = scope_Spectrum.getStep(proposal);\r\n\t\tvar value = scope_Spectrum.fromStepping(to);\r\n\r\n\t\tObject.keys(scope_Events).forEach(function( targetEvent ) {\r\n\t\t\tif ( 'hover' === targetEvent.split('.')[0] ) {\r\n\t\t\t\tscope_Events[targetEvent].forEach(function( callback ) {\r\n\t\t\t\t\tcallback.call( scope_Self, value );\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// Attach events to several slider parts.\r\n\tfunction bindSliderEvents ( behaviour ) {\r\n\r\n\t\t// Attach the standard drag event to the handles.\r\n\t\tif ( !behaviour.fixed ) {\r\n\r\n\t\t\tscope_Handles.forEach(function( handle, index ){\r\n\r\n\t\t\t\t// These events are only bound to the visual handle\r\n\t\t\t\t// element, not the 'real' origin element.\r\n\t\t\t\tattachEvent ( actions.start, handle.children[0], eventStart, {\r\n\t\t\t\t\thandleNumbers: [index]\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Attach the tap event to the slider base.\r\n\t\tif ( behaviour.tap ) {\r\n\t\t\tattachEvent (actions.start, scope_Base, eventTap, {});\r\n\t\t}\r\n\r\n\t\t// Fire hover events\r\n\t\tif ( behaviour.hover ) {\r\n\t\t\tattachEvent (actions.move, scope_Base, eventHover, { hover: true });\r\n\t\t}\r\n\r\n\t\t// Make the range draggable.\r\n\t\tif ( behaviour.drag ){\r\n\r\n\t\t\tscope_Connects.forEach(function( connect, index ){\r\n\r\n\t\t\t\tif ( connect === false || index === 0 || index === scope_Connects.length - 1 ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar handleBefore = scope_Handles[index - 1];\r\n\t\t\t\tvar handleAfter = scope_Handles[index];\r\n\t\t\t\tvar eventHolders = [connect];\r\n\r\n\t\t\t\taddClass(connect, options.cssClasses.draggable);\r\n\r\n\t\t\t\t// When the range is fixed, the entire range can\r\n\t\t\t\t// be dragged by the handles. The handle in the first\r\n\t\t\t\t// origin will propagate the start event upward,\r\n\t\t\t\t// but it needs to be bound manually on the other.\r\n\t\t\t\tif ( behaviour.fixed ) {\r\n\t\t\t\t\teventHolders.push(handleBefore.children[0]);\r\n\t\t\t\t\teventHolders.push(handleAfter.children[0]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\teventHolders.forEach(function( eventHolder ) {\r\n\t\t\t\t\tattachEvent ( actions.start, eventHolder, eventStart, {\r\n\t\t\t\t\t\thandles: [handleBefore, handleAfter],\r\n\t\t\t\t\t\thandleNumbers: [index - 1, index]\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// Split out the handle positioning logic so the Move event can use it, too\r\n\tfunction checkHandlePosition ( reference, handleNumber, to, lookBackward, lookForward, getValue ) {\r\n\r\n\t\t// For sliders with multiple handles, limit movement to the other handle.\r\n\t\t// Apply the margin option by adding it to the handle positions.\r\n\t\tif ( scope_Handles.length > 1 ) {\r\n\r\n\t\t\tif ( lookBackward && handleNumber > 0 ) {\r\n\t\t\t\tto = Math.max(to, reference[handleNumber - 1] + options.margin);\r\n\t\t\t}\r\n\r\n\t\t\tif ( lookForward && handleNumber < scope_Handles.length - 1 ) {\r\n\t\t\t\tto = Math.min(to, reference[handleNumber + 1] - options.margin);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// The limit option has the opposite effect, limiting handles to a\r\n\t\t// maximum distance from another. Limit must be > 0, as otherwise\r\n\t\t// handles would be unmoveable.\r\n\t\tif ( scope_Handles.length > 1 && options.limit ) {\r\n\r\n\t\t\tif ( lookBackward && handleNumber > 0 ) {\r\n\t\t\t\tto = Math.min(to, reference[handleNumber - 1] + options.limit);\r\n\t\t\t}\r\n\r\n\t\t\tif ( lookForward && handleNumber < scope_Handles.length - 1 ) {\r\n\t\t\t\tto = Math.max(to, reference[handleNumber + 1] - options.limit);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// The padding option keeps the handles a certain distance from the\r\n\t\t// edges of the slider. Padding must be > 0.\r\n\t\tif ( options.padding ) {\r\n\r\n\t\t\tif ( handleNumber === 0 ) {\r\n\t\t\t\tto = Math.max(to, options.padding);\r\n\t\t\t}\r\n\r\n\t\t\tif ( handleNumber === scope_Handles.length - 1 ) {\r\n\t\t\t\tto = Math.min(to, 100 - options.padding);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tto = scope_Spectrum.getStep(to);\r\n\r\n\t\t// Limit percentage to the 0 - 100 range\r\n\t\tto = limit(to);\r\n\r\n\t\t// Return false if handle can't move\r\n\t\tif ( to === reference[handleNumber] && !getValue ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn to;\r\n\t}\r\n\r\n\tfunction toPct ( pct ) {\r\n\t\treturn pct + '%';\r\n\t}\r\n\r\n\t// Updates scope_Locations and scope_Values, updates visual state\r\n\tfunction updateHandlePosition ( handleNumber, to ) {\r\n\r\n\t\t// Update locations.\r\n\t\tscope_Locations[handleNumber] = to;\r\n\r\n\t\t// Convert the value to the slider stepping/range.\r\n\t\tscope_Values[handleNumber] = scope_Spectrum.fromStepping(to);\r\n\r\n\t\t// Called synchronously or on the next animationFrame\r\n\t\tvar stateUpdate = function() {\r\n\t\t\tscope_Handles[handleNumber].style[options.style] = toPct(to);\r\n\t\t\tupdateConnect(handleNumber);\r\n\t\t\tupdateConnect(handleNumber + 1);\r\n\t\t};\r\n\r\n\t\t// Set the handle to the new position.\r\n\t\t// Use requestAnimationFrame for efficient painting.\r\n\t\t// No significant effect in Chrome, Edge sees dramatic performace improvements.\r\n\t\t// Option to disable is useful for unit tests, and single-step debugging.\r\n\t\tif ( window.requestAnimationFrame && options.useRequestAnimationFrame ) {\r\n\t\t\twindow.requestAnimationFrame(stateUpdate);\r\n\t\t} else {\r\n\t\t\tstateUpdate();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setZindex ( ) {\r\n\r\n\t\tscope_HandleNumbers.forEach(function(handleNumber){\r\n\t\t\t// Handles before the slider middle are stacked later = higher,\r\n\t\t\t// Handles after the middle later is lower\r\n\t\t\t// [[7] [8] .......... | .......... [5] [4]\r\n\t\t\tvar dir = (scope_Locations[handleNumber] > 50 ? -1 : 1);\r\n\t\t\tvar zIndex = 3 + (scope_Handles.length + (dir * handleNumber));\r\n\t\t\tscope_Handles[handleNumber].childNodes[0].style.zIndex = zIndex;\r\n\t\t});\r\n\t}\r\n\r\n\t// Test suggested values and apply margin, step.\r\n\tfunction setHandle ( handleNumber, to, lookBackward, lookForward ) {\r\n\r\n\t\tto = checkHandlePosition(scope_Locations, handleNumber, to, lookBackward, lookForward, false);\r\n\r\n\t\tif ( to === false ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tupdateHandlePosition(handleNumber, to);\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// Updates style attribute for connect nodes\r\n\tfunction updateConnect ( index ) {\r\n\r\n\t\t// Skip connects set to false\r\n\t\tif ( !scope_Connects[index] ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar l = 0;\r\n\t\tvar h = 100;\r\n\r\n\t\tif ( index !== 0 ) {\r\n\t\t\tl = scope_Locations[index - 1];\r\n\t\t}\r\n\r\n\t\tif ( index !== scope_Connects.length - 1 ) {\r\n\t\t\th = scope_Locations[index];\r\n\t\t}\r\n\r\n\t\tscope_Connects[index].style[options.style] = toPct(l);\r\n\t\tscope_Connects[index].style[options.styleOposite] = toPct(100 - h);\r\n\t}\r\n\r\n\t// ...\r\n\tfunction setValue ( to, handleNumber ) {\r\n\r\n\t\t// Setting with null indicates an 'ignore'.\r\n\t\t// Inputting 'false' is invalid.\r\n\t\tif ( to === null || to === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// If a formatted number was passed, attemt to decode it.\r\n\t\tif ( typeof to === 'number' ) {\r\n\t\t\tto = String(to);\r\n\t\t}\r\n\r\n\t\tto = options.format.from(to);\r\n\r\n\t\t// Request an update for all links if the value was invalid.\r\n\t\t// Do so too if setting the handle fails.\r\n\t\tif ( to !== false && !isNaN(to) ) {\r\n\t\t\tsetHandle(handleNumber, scope_Spectrum.toStepping(to), false, false);\r\n\t\t}\r\n\t}\r\n\r\n\t// Set the slider value.\r\n\tfunction valueSet ( input, fireSetEvent ) {\r\n\r\n\t\tvar values = asArray(input);\r\n\t\tvar isInit = scope_Locations[0] === undefined;\r\n\r\n\t\t// Event fires by default\r\n\t\tfireSetEvent = (fireSetEvent === undefined ? true : !!fireSetEvent);\r\n\r\n\t\tvalues.forEach(setValue);\r\n\r\n\t\t// Animation is optional.\r\n\t\t// Make sure the initial values were set before using animated placement.\r\n\t\tif ( options.animate && !isInit ) {\r\n\t\t\taddClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);\r\n\t\t}\r\n\r\n\t\t// Now that all base values are set, apply constraints\r\n\t\tscope_HandleNumbers.forEach(function(handleNumber){\r\n\t\t\tsetHandle(handleNumber, scope_Locations[handleNumber], true, false);\r\n\t\t});\r\n\r\n\t\tsetZindex();\r\n\r\n\t\tscope_HandleNumbers.forEach(function(handleNumber){\r\n\r\n\t\t\tfireEvent('update', handleNumber);\r\n\r\n\t\t\t// Fire the event only for handles that received a new value, as per #579\r\n\t\t\tif ( values[handleNumber] !== null && fireSetEvent ) {\r\n\t\t\t\tfireEvent('set', handleNumber);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// Reset slider to initial values\r\n\tfunction valueReset ( fireSetEvent ) {\r\n\t\tvalueSet(options.start, fireSetEvent);\r\n\t}\r\n\r\n\t// Get the slider value.\r\n\tfunction valueGet ( ) {\r\n\r\n\t\tvar values = scope_Values.map(options.format.to);\r\n\r\n\t\t// If only one handle is used, return a single value.\r\n\t\tif ( values.length === 1 ){\r\n\t\t\treturn values[0];\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t}\r\n\r\n\t// Removes classes from the root and empties it.\r\n\tfunction destroy ( ) {\r\n\r\n\t\tfor ( var key in options.cssClasses ) {\r\n\t\t\tif ( !options.cssClasses.hasOwnProperty(key) ) { continue; }\r\n\t\t\tremoveClass(scope_Target, options.cssClasses[key]);\r\n\t\t}\r\n\r\n\t\twhile (scope_Target.firstChild) {\r\n\t\t\tscope_Target.removeChild(scope_Target.firstChild);\r\n\t\t}\r\n\r\n\t\tdelete scope_Target.noUiSlider;\r\n\t}\r\n\r\n\t// Get the current step size for the slider.\r\n\tfunction getCurrentStep ( ) {\r\n\r\n\t\t// Check all locations, map them to their stepping point.\r\n\t\t// Get the step point, then find it in the input list.\r\n\t\treturn scope_Locations.map(function( location, index ){\r\n\r\n\t\t\tvar nearbySteps = scope_Spectrum.getNearbySteps( location );\r\n\t\t\tvar value = scope_Values[index];\r\n\t\t\tvar increment = nearbySteps.thisStep.step;\r\n\t\t\tvar decrement = null;\r\n\r\n\t\t\t// If the next value in this step moves into the next step,\r\n\t\t\t// the increment is the start of the next step - the current value\r\n\t\t\tif ( increment !== false ) {\r\n\t\t\t\tif ( value + increment > nearbySteps.stepAfter.startValue ) {\r\n\t\t\t\t\tincrement = nearbySteps.stepAfter.startValue - value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// If the value is beyond the starting point\r\n\t\t\tif ( value > nearbySteps.thisStep.startValue ) {\r\n\t\t\t\tdecrement = nearbySteps.thisStep.step;\r\n\t\t\t}\r\n\r\n\t\t\telse if ( nearbySteps.stepBefore.step === false ) {\r\n\t\t\t\tdecrement = false;\r\n\t\t\t}\r\n\r\n\t\t\t// If a handle is at the start of a step, it always steps back into the previous step first\r\n\t\t\telse {\r\n\t\t\t\tdecrement = value - nearbySteps.stepBefore.highestStep;\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// Now, if at the slider edges, there is not in/decrement\r\n\t\t\tif ( location === 100 ) {\r\n\t\t\t\tincrement = null;\r\n\t\t\t}\r\n\r\n\t\t\telse if ( location === 0 ) {\r\n\t\t\t\tdecrement = null;\r\n\t\t\t}\r\n\r\n\t\t\t// As per #391, the comparison for the decrement step can have some rounding issues.\r\n\t\t\tvar stepDecimals = scope_Spectrum.countStepDecimals();\r\n\r\n\t\t\t// Round per #391\r\n\t\t\tif ( increment !== null && increment !== false ) {\r\n\t\t\t\tincrement = Number(increment.toFixed(stepDecimals));\r\n\t\t\t}\r\n\r\n\t\t\tif ( decrement !== null && decrement !== false ) {\r\n\t\t\t\tdecrement = Number(decrement.toFixed(stepDecimals));\r\n\t\t\t}\r\n\r\n\t\t\treturn [decrement, increment];\r\n\t\t});\r\n\t}\r\n\r\n\t// Attach an event to this slider, possibly including a namespace\r\n\tfunction bindEvent ( namespacedEvent, callback ) {\r\n\t\tscope_Events[namespacedEvent] = scope_Events[namespacedEvent] || [];\r\n\t\tscope_Events[namespacedEvent].push(callback);\r\n\r\n\t\t// If the event bound is 'update,' fire it immediately for all handles.\r\n\t\tif ( namespacedEvent.split('.')[0] === 'update' ) {\r\n\t\t\tscope_Handles.forEach(function(a, index){\r\n\t\t\t\tfireEvent('update', index);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t// Undo attachment of event\r\n\tfunction removeEvent ( namespacedEvent ) {\r\n\r\n\t\tvar event = namespacedEvent && namespacedEvent.split('.')[0];\r\n\t\tvar namespace = event && namespacedEvent.substring(event.length);\r\n\r\n\t\tObject.keys(scope_Events).forEach(function( bind ){\r\n\r\n\t\t\tvar tEvent = bind.split('.')[0],\r\n\t\t\t\ttNamespace = bind.substring(tEvent.length);\r\n\r\n\t\t\tif ( (!event || event === tEvent) && (!namespace || namespace === tNamespace) ) {\r\n\t\t\t\tdelete scope_Events[bind];\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// Updateable: margin, limit, padding, step, range, animate, snap\r\n\tfunction updateOptions ( optionsToUpdate, fireSetEvent ) {\r\n\r\n\t\t// Spectrum is created using the range, snap, direction and step options.\r\n\t\t// 'snap' and 'step' can be updated.\r\n\t\t// If 'snap' and 'step' are not passed, they should remain unchanged.\r\n\t\tvar v = valueGet();\r\n\r\n\t\tvar updateAble = ['margin', 'limit', 'padding', 'range', 'animate', 'snap', 'step', 'format'];\r\n\r\n\t\t// Only change options that we're actually passed to update.\r\n\t\tupdateAble.forEach(function(name){\r\n\t\t\tif ( optionsToUpdate[name] !== undefined ) {\r\n\t\t\t\toriginalOptions[name] = optionsToUpdate[name];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tvar newOptions = testOptions(originalOptions);\r\n\r\n\t\t// Load new options into the slider state\r\n\t\tupdateAble.forEach(function(name){\r\n\t\t\tif ( optionsToUpdate[name] !== undefined ) {\r\n\t\t\t\toptions[name] = newOptions[name];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tscope_Spectrum = newOptions.spectrum;\r\n\r\n\t\t// Limit, margin and padding depend on the spectrum but are stored outside of it. (#677)\r\n\t\toptions.margin = newOptions.margin;\r\n\t\toptions.limit = newOptions.limit;\r\n\t\toptions.padding = newOptions.padding;\r\n\r\n\t\t// Update pips, removes existing.\r\n\t\tif ( options.pips ) {\r\n\t\t\tpips(options.pips);\r\n\t\t}\r\n\r\n\t\t// Invalidate the current positioning so valueSet forces an update.\r\n\t\tscope_Locations = [];\r\n\t\tvalueSet(optionsToUpdate.start || v, fireSetEvent);\r\n\t}\r\n\r\n\t// Throw an error if the slider was already initialized.\r\n\tif ( scope_Target.noUiSlider ) {\r\n\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): Slider was already initialized.\");\r\n\t}\r\n\r\n\t// Create the base element, initialise HTML and set classes.\r\n\t// Add handles and connect elements.\r\n\taddSlider(scope_Target);\r\n\taddElements(options.connect, scope_Base);\r\n\r\n\tscope_Self = {\r\n\t\tdestroy: destroy,\r\n\t\tsteps: getCurrentStep,\r\n\t\ton: bindEvent,\r\n\t\toff: removeEvent,\r\n\t\tget: valueGet,\r\n\t\tset: valueSet,\r\n\t\treset: valueReset,\r\n\t\t// Exposed for unit testing, don't use this in your application.\r\n\t\t__moveHandles: function(a, b, c) { moveHandles(a, b, scope_Locations, c); },\r\n\t\toptions: originalOptions, // Issue #600, #678\r\n\t\tupdateOptions: updateOptions,\r\n\t\ttarget: scope_Target, // Issue #597\r\n\t\tremovePips: removePips,\r\n\t\tpips: pips // Issue #594\r\n\t};\r\n\r\n\t// Attach user events.\r\n\tbindSliderEvents(options.events);\r\n\r\n\t// Use the public value method to set the start values.\r\n\tvalueSet(options.start);\r\n\r\n\tif ( options.pips ) {\r\n\t\tpips(options.pips);\r\n\t}\r\n\r\n\tif ( options.tooltips ) {\r\n\t\ttooltips();\r\n\t}\r\n\r\n\taria();\r\n\r\n\treturn scope_Self;\r\n\r\n}\r\n\r\n\r\n\t// Run the standard initializer\r\n\tfunction initialize ( target, originalOptions ) {\r\n\r\n\t\tif ( !target || !target.nodeName ) {\r\n\t\t\tthrow new Error(\"noUiSlider (\" + VERSION + \"): create requires a single element, got: \" + target);\r\n\t\t}\r\n\r\n\t\t// Test the options and create the slider environment;\r\n\t\tvar options = testOptions( originalOptions, target );\r\n\t\tvar api = closure( target, options, originalOptions );\r\n\r\n\t\ttarget.noUiSlider = api;\r\n\r\n\t\treturn api;\r\n\t}\r\n\r\n\t// Use an object instead of a function for future expansibility;\r\n\treturn {\r\n\t\tversion: VERSION,\r\n\t\tcreate: initialize\r\n\t};\r\n\r\n}));","'use strict';\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n","\nvar content = require(\"!!../../../../../../node_modules/css-loader/index.js!../../../../../../node_modules/sass-loader/lib/loader.js!./_exports.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../../../node_modules/css-loader/index.js!../../../../../../node_modules/sass-loader/lib/loader.js!./_exports.scss\", function() {\n\t\tvar newContent = require(\"!!../../../../../../node_modules/css-loader/index.js!../../../../../../node_modules/sass-loader/lib/loader.js!./_exports.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"/**\\n * CSS Font family names\\n *\\n * usage:\\n * font-family: font-family(primary)\\n * font: 12px/24px font-family(secondary)\\n */\\n/**\\n * Font types, define font styling, optionally combined with breakpoints\\n * retrieve font style with the mixin: font-type($name)\\n *\\n * usage:\\n * @include font-type(button)\\n */\\n\", \"\"]);\n\n// exports\nexports.locals = {\n\t\"breakpoint_xs\": \"0px\",\n\t\"breakpoint_sm\": \"520px\",\n\t\"breakpoint_md\": \"720px\",\n\t\"breakpoint_lg\": \"992px\",\n\t\"breakpoint_xl\": \"1200px\"\n};","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target) {\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of