{"version":3,"sources":["webpack:///./node_modules/query-string/index.js","webpack:///./node_modules/choices.js/public/assets/scripts/choices.min.js","webpack:///./node_modules/smoothscroll/smoothscroll.js","webpack:///./node_modules/overlayscrollbars/js/OverlayScrollbars.js","webpack:///./node_modules/fitty/dist/fitty.module.js","webpack:///./node_modules/tippy.js/esm/index.all.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/basiclightbox/dist/basicLightbox.min.js","webpack:///./node_modules/webfontloader/webfontloader.js","webpack:///./node_modules/strict-uri-encode/index.js","webpack:///./node_modules/decode-uri-component/index.js","webpack:///./node_modules/split-on-first/index.js","webpack:///./node_modules/filter-obj/index.js","webpack:///./node_modules/tiny-slider/src/helpers/raf.js","webpack:///./node_modules/tiny-slider/src/helpers/caf.js","webpack:///./node_modules/tiny-slider/src/helpers/extend.js","webpack:///./node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack:///./node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack:///./node_modules/tiny-slider/src/helpers/getBody.js","webpack:///./node_modules/tiny-slider/src/helpers/docElement.js","webpack:///./node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack:///./node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack:///./node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack:///./node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack:///./node_modules/tiny-slider/src/helpers/forEach.js","webpack:///./node_modules/tiny-slider/src/helpers/classListSupport.js","webpack:///./node_modules/tiny-slider/src/helpers/hasClass.js","webpack:///./node_modules/tiny-slider/src/helpers/addClass.js","webpack:///./node_modules/tiny-slider/src/helpers/removeClass.js","webpack:///./node_modules/tiny-slider/src/helpers/hasAttr.js","webpack:///./node_modules/tiny-slider/src/helpers/getAttr.js","webpack:///./node_modules/tiny-slider/src/helpers/isNodeList.js","webpack:///./node_modules/tiny-slider/src/helpers/setAttrs.js","webpack:///./node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack:///./node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack:///./node_modules/tiny-slider/src/helpers/hideElement.js","webpack:///./node_modules/tiny-slider/src/helpers/showElement.js","webpack:///./node_modules/tiny-slider/src/helpers/isVisible.js","webpack:///./node_modules/tiny-slider/src/helpers/whichProperty.js","webpack:///./node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack:///./node_modules/tiny-slider/src/helpers/passiveOption.js","webpack:///./node_modules/tiny-slider/src/helpers/addEvents.js","webpack:///./node_modules/tiny-slider/src/helpers/removeEvents.js","webpack:///./node_modules/tiny-slider/src/helpers/events.js","webpack:///./node_modules/tiny-slider/src/tiny-slider.js","webpack:///./node_modules/tiny-slider/src/helpers/calc.js","webpack:///./node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack:///./node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack:///./node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack:///./node_modules/tiny-slider/src/helpers/getSlideId.js","webpack:///./node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack:///./node_modules/tiny-slider/src/helpers/jsTransform.js","webpack:///./node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack:///./node_modules/tiny-slider/src/helpers/toDegree.js","webpack:///./node_modules/tiny-slider/src/helpers/getTouchDirection.js","webpack:///./node_modules/when-dom-ready/dist/index.es2015.js","webpack:///(webpack)/buildin/global.js"],"names":["strictUriEncode","require","decodeComponent","splitOnFirst","filterObject","validateArrayFormatSeparator","value","length","TypeError","encode","options","strict","encodeURIComponent","decode","removeHash","input","hashStart","indexOf","slice","extract","queryStart","parseValue","parseNumbers","Number","isNaN","trim","parseBooleans","toLowerCase","parse","query","Object","assign","sort","arrayFormat","arrayFormatSeparator","formatter","result","key","accumulator","exec","replace","undefined","concat","isArray","includes","isEncodedArray","newValue","split","map","item","parserForArrayFormat","ret","create","param","keys","k","reduce","Boolean","Array","keysSorter","a","b","exports","stringify","object","shouldFilter","skipNull","skipEmptyString","index","join","encoderForArrayFormat","objectCopy","filter","x","parseUrl","url","url_","hash","parseFragmentIdentifier","fragmentIdentifier","stringifyUrl","queryFromUrl","parsedQueryFromUrl","queryString","getHash","pick","exclude","exclusionFilter","window","module","e","t","i","n","s","l","call","m","c","d","o","defineProperty","enumerable","get","r","Symbol","toStringTag","__esModule","bind","default","prototype","hasOwnProperty","p","arguments","push","apply","toString","$$typeof","for","clone","isMergeableObject","getOwnPropertySymbols","propertyIsEnumerable","arrayMerge","cloneUnlessOtherwiseSpecified","forEach","customMerge","all","Error","h","self","this","charAt","RegExp","match","score","isMatch","matchedIndices","errors","currentLocation","expectedLocation","distance","u","Math","abs","location","threshold","findAllMatches","f","minMatchCharLength","v","g","_","y","E","S","I","min","lastIndexOf","w","C","O","A","T","L","floor","D","max","P","F","j","M","N","configurable","writable","maxPatternLength","isCaseSensitive","tokenSeparator","pattern","patternAlphabet","iterator","constructor","caseSensitive","id","shouldSort","getFn","sortFn","tokenize","matchAllTokens","includeMatches","includeScore","K","verbose","R","setCollection","list","limit","_log","_prepareSearchers","tokenSearchers","fullSearcher","_search","weights","results","_computeScore","_sort","_format","_analyze","record","resultMap","name","weight","arrayIndex","search","output","nScore","JSON","matches","indices","console","log","observable","delegateEvent","type","Map","add","has","set","document","documentElement","addEventListener","remove","splice","Function","webpackPolyfill","children","random","substring","INIT","REPLACE","PROBE_UNKNOWN_ACTION","getPrototypeOf","dispatch","subscribe","getState","replaceReducer","next","unsubscribe","String","loading","hasAttribute","parentElement","createElement","innerHTML","firstChild","removeChild","substr","items","choiceId","groupId","label","active","highlighted","customProperties","placeholder","keyCode","groups","disabled","choices","elementId","selected","activateOptions","parseInt","some","general","isLoading","state","_store","__REDUX_DEVTOOLS_EXTENSION__","getChoiceById","activeChoices","find","getGroupById","selectableChoices","reverse","element","classNames","isActive","distanceFromTopWindow","dimensions","getBoundingClientRect","position","ceil","top","pageYOffset","offsetHeight","getChild","querySelector","show","classList","activeState","setAttribute","hide","isOpen","isFlipped","isFocussed","isDisabled","_onFocus","_onBlur","addEventListeners","removeEventListeners","removeEventListener","shouldFlip","body","scrollHeight","clientHeight","setActiveDescendant","removeActiveDescendant","removeAttribute","open","openState","flippedState","close","focus","addFocusState","focusState","removeFocusState","enable","disabledState","disable","wrap","nextSibling","parentNode","insertBefore","appendChild","unwrap","addLoadingState","loadingState","removeLoadingState","placeholderValue","activeElement","_onPaste","_onInput","form","_onFormReset","blur","clear","setWidth","style","width","_placeholderValue","calcWidth","offsetWidth","padding","left","whiteSpace","contains","getComputedStyle","fontSize","fontFamily","fontWeight","fontStyle","letterSpacing","textTransform","paddingLeft","paddingRight","requestAnimationFrame","target","preventPaste","preventDefault","silent","renderChoiceLimit","maxItemCount","addItems","addItemFilterFn","removeItems","removeItemButton","editItems","duplicateItemsAllowed","delimiter","paste","searchEnabled","searchChoices","searchFloor","searchResultLimit","searchFields","resetScrollPosition","shouldSortItems","searchPlaceholderValue","prependValue","appendValue","renderSelectedChoices","loadingText","noResultsText","noChoicesText","itemSelectText","uniqueItemText","customAddItemText","addItemText","maxItemText","itemComparer","fuseOptions","callbackOnInit","callbackOnCreateTemplates","containerOuter","containerInner","inputCloned","listItems","listSingle","listDropdown","itemSelectable","itemDisabled","itemChoice","group","groupHeading","button","highlightedState","hiddenState","noResults","noChoices","U","z","de","scrollPos","scrollTop","height","hasChildren","append","scrollToTop","scrollToChoice","offsetTop","_animateScroll","_scrollDown","_scrollUp","pe","fe","Element","conceal","tabIndex","getAttribute","reveal","triggerEvent","CustomEvent","detail","bubbles","cancelable","dispatchEvent","me","ve","__proto__","ge","_e","template","appendDocFragment","from","getElementsByTagName","createDocumentFragment","be","ye","Ee","itemList","choiceList","choiceGroup","choice","dropdown","notice","option","Se","Ie","we","Ce","querySelectorAll","_generateInstances","config","userDefaults","warn","_isTextElement","_isSelectOneElement","_isSelectMultipleElement","_isSelectElement","passedElement","templates","error","initialised","render","_initialState","_currentState","_prevState","_currentValue","_canSearch","_isScrollingOnIe","_highlightPosition","_wasTap","_generatePlaceholderValue","_baseId","_direction","_idNames","_presetChoices","_presetItems","_render","_onKeyUp","_onKeyDown","_onClick","_onTouchMove","_onTouchEnd","_onMouseDown","_onMouseOver","_onAKey","_onEnterKey","_onEscapeKey","_onDirectionKey","_onDeleteKey","init","_createTemplates","_createElements","_createStructure","_addEventListeners","destroy","_removeEventListeners","clearStore","highlightItem","groupValue","unhighlightItem","highlightAll","unhighlightAll","removeActiveItemsByValue","activeItems","_removeItem","removeActiveItems","removeHighlightedItems","highlightedActiveItems","_triggerChange","showDropdown","hideDropdown","getValue","setValue","_setChoiceOrItem","setChoiceByValue","_findAndSelectChoiceByValue","setChoices","clearChoices","_setLoading","_addGroup","valueKey","labelKey","_addChoice","isSelected","clearInput","_isSearching","ajax","_handleLoadingState","_ajaxCallback","_renderChoices","_renderItems","activeGroups","_createChoicesFragment","_createGroupsFragment","childNodes","_canAddItem","response","_highlightChoice","_getTemplate","_createItemsFragment","placeholderChoices","normalChoices","_selectPlaceholderChoice","placeholderChoice","_addItem","_handleButtonAction","_handleItemAction","_handleChoiceAction","_handleBackspace","_handleSearch","_searchChoices","resultCount","searchableChoices","ctrlKey","metaKey","fromCharCode","test","event","hasFocusedInput","hasActiveDropdown","hasItems","hasCtrlDownKeyPressed","outerHTML","pop","touches","stopPropagation","shiftKey","navigator","userAgent","text","el","Date","valueOf","_addPredefinedChoices","_addPredefinedItems","optionGroups","placeholderOption","tagName","string","history","pushState","start","end","elapsed","duration","smoothScroll","callback","context","nodeName","getTop","clock","now","mozRequestAnimationFrame","webkitRequestAnimationFrame","fn","setTimeout","step","scroll","linkHandler","ev","defaultPrevented","node","getElementById","internal","global","_targets","_easingsMath","TYPES","LEXICON","ti","oH","cH","sH","oW","cW","sW","hOP","bCR","VENDORS","jsCache","cssCache","cssPrefixes","jsPrefixes","firstLetterToUpper","str","toUpperCase","_cssPrefixes","_jsPrefixes","_cssProperty","resultPossibilities","currVendorWithoutDashes","uppercasedName","elmStyle","_cssPropertyValue","property","values","suffix","prop","dummyStyle","possbleValues","preparedSuffix","cssText","_jsAPI","isInterface","fallback","COMPATIBILITY","windowSize","innerWidth","innerHeight","func","thisObj","proto","aArgs","fNOP","fBound","wW","wH","mO","rO","rAF","cAF","clearTimeout","getTime","stpP","cancelBubble","prvD","returnValue","page","eventDoc","originalEvent","srcElement","ownerDocument","doc","touch","scrollLeft","clientLeft","clientTop","mBtn","which","inA","arr","isA","def","obj","MATH","JQUERY","jQuery","EASING","PI","cos","sin","pow","sqrt","asin","swing","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","FRAMEWORK","_rnothtmlwhite","_animations","_type","_cssNumber","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","opacity","order","orphans","widows","zIndex","zoom","extend","src","copyIsArray","copy","deep","FakejQuery","isPlainObject","inArray","fromIndex","isFunction","isEmptyObject","hasOwnConstructor","hasIsPrototypeOf","each","isArrayLike","stripAndCollapse","elem","selector","nodeList","insertAdjacentElement","strategy","child","insertAdjacentHTML","nodeType","setCSSVal","val","parseCSSVal","startNextAnimationInQ","animObj","removeFromQ","nextAnim","q","animate","props","easing","complete","setAnimationValue","guaranteedNext","progress","specialEasing","hasOptions","to","css","timeNow","percent","fromVal","toVal","easedVal","timeStart","frame","qPos","qObj","stop","parseFloat","pos","speacialEasing","startTime","elementIsVisible","getClientRects","elms","base","elements","on","eventName","handler","eventNameLength","detachEvent","attachEvent","off","one","oneEventName","oneHandler","trigger","createEvent","initEvent","fireEvent","prepend","before","after","parent","parents","wrapAll","wrapperHTML","wrapper","deepest","previousSibling","wrapInner","contents","styles","cptStyle","getCptStyle","currentStyle","getPropertyValue","hasClass","className","classNamePrepared","addClass","classes","cur","curValue","clazz","finalValue","supportClassList","elmClassList","removeClass","display","attr","attrName","removeAttr","offset","rect","pageXOffset","offsetLeft","first","eq","last","ch","is","childs","clearQ","jump","jumpToEnd","INSTANCES","instance","argLen","PLUGIN","_plugin","_pluginsGlobals","_pluginsAutoUpdateLoop","possibleTemplateTypes","booleanTrueTemplate","booleanFalseTemplate","callbackTemplate","optionsDefaultsAndTemplate","convert","_pluginsExtensions","_pluginsOptions","resize","sizeAutoCapable","clipAlways","normalizeRTL","paddingAbsolute","autoUpdate","autoUpdateInterval","updateOnLoad","nativeScrollbarsOverlaid","showNativeScrollbars","initialize","overflowBehavior","scrollbars","visibility","autoHide","autoHideDelay","dragScrolling","clickScrolling","touchSupport","snapHandle","textarea","dynWidth","dynHeight","inheritedAttrs","callbacks","onInitialized","onInitializationWithdrawn","onDestroyed","onScrollStart","onScroll","onScrollStop","onOverflowChanged","onOverflowAmountChanged","onDirectionChanged","onContentSizeChanged","onHostSizeChanged","onUpdated","_defaults","recursive","valType","_template","_validate","writeErrors","diffObj","validatedOptions","validatedOptionsPrepared","isEmptyObj","checkObjectProps","data","diffData","prevPropName","restrictedStringValuesSplit","restrictedStringValuesPossibilitiesSplit","isRestrictedValue","mainPossibility","currType","isValid","isDiff","templateValue","templateValueType","templateIsComplex","templateTypes","dataDiffValue","dataValue","dataValueType","propPrefix","errorPossibleTypes","errorRestrictedStrings","_default","_prepared","initOverlayScrollbarsStatics","OverlayScrollbarsGlobals","OverlayScrollbarsAutoUpdateLoop","defaultOptions","_base","bodyElement","scrollbarDummyElement","scrollbarDummyElement0","dummyContainerChild","nativeScrollbarSize","calcNativeScrollbarSize","nativeScrollbarIsOverlaid","msie","ua","trident","edge","rv","parseIntFunc","measureElement","autoUpdateLoop","autoUpdateRecommended","nativeScrollbarStyling","ex","overlayScrollbarDummySize","cssCalc","restrictedMeasuring","scrollSize","scrollSize2","rtlScrollBehavior","dummyContainerOffset","dummyContainerChildOffset","dummyContainerChildOffsetAfterScroll","supportTransform","supportTransition","supportPassiveEvents","supportsPassive","supportResizeObserver","supportMutationObserver","windowWidth","windowHeight","windowDpr","getWindowDPR","newW","newH","deltaW","deltaH","newScrollbarSize","deltaWRatio","round","deltaHRatio","absDeltaW","absDeltaH","absDeltaWRatio","absDeltaHRatio","newDPR","deltaIsBigger","difference","valTwo","absValOne","absValTwo","isZoom","oldScrollbarSize","update","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","globals","_loopID","_inArray","_getNow","_strLength","_loopingInstances","_loopingInstancesIntervalCache","_loopIsActive","_loopInterval","_loopTimeOld","loop","lowestInterval","instanceOptions","instanceAutoUpdateAllowed","instanceAutoUpdateInterval","timeNew","timeDelta","OverlayScrollbarsInstance","pluginTargetElement","extensions","_frameworkProto","isHTMLElement","inst","_nativeScrollbarIsOverlaid","_overlayScrollbarDummySize","_rtlScrollBehavior","_autoUpdateRecommended","_msieVersion","_nativeScrollbarStyling","_cssCalc","_nativeScrollbarSize","_supportTransition","_supportTransform","_supportPassiveEvents","_supportResizeObserver","_supportMutationObserver","_initialized","_destroyed","_isTextarea","_isBody","_documentMixed","_domExists","_isBorderBox","_sizeAutoObserverAdded","_paddingX","_paddingY","_borderX","_borderY","_marginX","_marginY","_isRTL","_sleeping","_defaultOptions","_currentOptions","_currentPreparedOptions","_lastUpdateTime","_swallowedUpdateTimeout","_windowElement","_documentElement","_htmlElement","_bodyElement","_targetElement","_hostElement","_sizeAutoObserverElement","_sizeObserverElement","_paddingElement","_viewportElement","_contentElement","_contentArrangeElement","_contentGlueElement","_textareaCoverElement","_scrollbarCornerElement","_scrollbarHorizontalElement","_scrollbarHorizontalTrackElement","_scrollbarHorizontalHandleElement","_scrollbarVerticalElement","_scrollbarVerticalTrackElement","_scrollbarVerticalHandleElement","_windowElementNative","_documentElementNative","_targetElementNative","_hostElementNative","_sizeAutoObserverElementNative","_sizeObserverElementNative","_paddingElementNative","_viewportElementNative","_contentElementNative","_hostSizeCache","_contentScrollSizeCache","_arrangeContentSizeCache","_hasOverflowCache","_hideOverflowCache","_widthAutoCache","_heightAutoCache","_cssBoxSizingCache","_cssPaddingCache","_cssBorderCache","_cssMarginCache","_cssDirectionCache","_cssDirectionDetectedCache","_paddingAbsoluteCache","_clipAlwaysCache","_contentGlueSizeCache","_overflowBehaviorCache","_overflowAmountCache","_ignoreOverlayScrollbarHidingCache","_autoUpdateCache","_sizeAutoCapableCache","_contentElementScrollSizeChangeDetectedCache","_hostElementSizeChangeDetectedCache","_scrollbarsVisibilityCache","_scrollbarsAutoHideCache","_scrollbarsClickScrollingCache","_scrollbarsDragScrollingCache","_resizeCache","_normalizeRTLCache","_classNameCache","_oldClassName","_textareaAutoWrappingCache","_textareaInfoCache","_textareaSizeCache","_textareaDynHeightCache","_textareaDynWidthCache","_bodyMinSizeCache","_mutationObserverHost","_mutationObserverContent","_mutationObserverHostCallback","_mutationObserverContentCallback","_mutationObserversConnected","_textareaHasFocus","_scrollbarsAutoHideTimeoutId","_scrollbarsAutoHideMoveTimeoutId","_scrollbarsAutoHideDelay","_scrollbarsAutoHideNever","_scrollbarsAutoHideScroll","_scrollbarsAutoHideMove","_scrollbarsAutoHideLeave","_scrollbarsHandleHovered","_scrollbarsHandlesDefineScrollPos","_resizeNone","_resizeBoth","_resizeHorizontal","_resizeVertical","_contentBorderSize","_scrollHorizontalInfo","_scrollVerticalInfo","_viewportSize","_nativeScrollbarMinSize","_strTransitionEndEvent","_classNameHostElement","_cassNamesPrefix","_classNameHostElementForeign","_classNameHostTextareaElement","_classNameHostScrollbarHorizontalHidden","_classNameHostScrollbarVerticalHidden","_classNameHostTransition","_classNameHostRTL","_classNameHostResizeDisabled","_classNameHostScrolling","_classNameHostOverflow","_classNameHostOverflowX","_classNameHostOverflowY","_classNameTextareaElement","_classNameTextareaCoverElement","_classNameViewportNativeScrollbarsInvisible","_classNameViewportElement","_classNameViewportNativeScrollbarsOverlaid","_classNameTextInherit","_classNameScrollbarTrackOff","_classNameScrollbarTrack","_classNameScrollbarHandleOff","_classNameScrollbarHandle","_classNameScrollbarUnusable","_classNameScrollbar","_classNameScrollbarAutoHidden","_classNameScrollbarCornerResize","_classNameScrollbarCorner","_classNameScrollbarCornerResizeB","_classNameScrollbarCornerResizeH","_classNameScrollbarCornerResizeV","_classNameDragging","_classNameThemeNone","_classNamesDynamicDestroy","_callbacksInitQeueue","_viewportAttrsFromTarget","_extensions","_swallowedUpdateHints","_updateOnLoadElms","_updateAutoCache","_mutationObserverAttrsTextarea","_mutationObserverAttrsHost","_destroyEvents","sleep","force","attrsChanged","contentSizeC","doUpdateAuto","mutHost","mutContent","curr","cache","changedAttrs","checks","_elem","_attrs","check","checkCache","updateViewportAttrsFromTarget","meaningfulAttrsChanged","float","bodyMinSizeC","changed","contentElementScrollSize","contentMeasureElement","getContentMeasureElement","textareaValueLength","setCSS","bodyMinSizeChanged","updateAutoContentSizeChanged","_contentSizeChanged","_changedOptions","takeRecords","_hostSizeChanged","_force","updateElementsOnLoad","newOptions","changedOps","getObjectPropVal","setObjectPropVal","setOptions","extName","disconnectMutationObservers","setupResizeObserver","removeExt","setupHostMouseTouchEvents","setupScrollbarsDOM","setupScrollbarCornerDOM","setupStructureDOM","updateOnLoadCallback","dispatchCallback","coordinates","infoX","infoY","normalizeInvert","normalizeNegate","scrollX","_currentScroll","scrollXRatio","_currentScrollRatio","maxScrollX","_maxScroll","ratio","handleOffset","_handleOffset","handleLength","_handleLength","handleLengthRatio","_handleLengthRatio","trackLength","_trackLength","snappedHandleOffset","_snappedHandleOffset","isRTL","isRTLNormalized","doScrollLeft","doScrollTop","animationOptions","settingsAxis","settingsScroll","settingsBlock","settingsMargin","finalElement","coordinatesXAxisProps","coordinatesYAxisProps","coordinatesOperators","durationIsObject","completeCallback","finalScroll","strEnd","strBegin","strCenter","strNearest","strAlways","strNever","strIfNeeded","strLength","elementObjSettingsAxisValues","elementObjSettingsBlockValues","elementObjSettingsScrollValues","coordinatesIsElementObj","possibleElement","possibleElementIsJQuery","possibleElementIsHTMLElement","updateScrollbarInfos","refreshScrollbarHandleOffset","proxyCompleteCallback","checkSettingsStringValue","currValue","allowedValues","getRawScroll","isX","coordinateProps","getFinalScroll","rawScroll","operator","amount","possibleOperator","isString","scrollInfo","currScroll","maxScroll","isRTLisX","normalizeShortcuts","evalFunc","eval","parseToZeroOrNumber","toFixed","normalizeIsRTLisX","operatorCurrScroll","invert","negate","getPerAxisValue","valueInternalType","defaultValue","valueArrLength","valueArrItem","resultDefault","valueType","generateMargin","marginTopRightBottomLeftArray","currValueType","valueDirections","marginLength","margin","axis","block","marginDefault","marginType","viewportScroll","viewportOffset","elementOffset","doNotScroll","elementScrollCoordinates","measuringElm","rawElementSize","elementSize","finalizeBlock","vars","getScrollbarVars","wh","_w_h","lt","_left_top","xy","_x_y","blockIsEnd","blockIsCenter","blockIsNearest","scrollNever","scrollIfNeeded","vpSize","vpOffset","elSize","elOffset","divide","elementCenterOffset","viewportCenterOffset","isInView","scrollStop","param1","param2","param3","getElements","elementName","host","viewport","content","scrollbarHorizontal","scrollbar","track","handle","scrollbarVertical","scrollbarCorner","stateProperty","prepare","extended","extendDeep","changePropertyName","destroyed","sleeping","widthAuto","heightAuto","overflowAmount","hideOverflow","hasOverflow","contentScrollSize","viewportSize","hostSize","documentMixed","ext","privateMethods","addExt","extensionOptions","instanceAdded","instanceContract","contractResult","registeredExtensionObj","extension","contractFulfilled","extensionFactory","contract","added","instanceRemoved","removed","valid","targetElement","initBodyScroll","bodyMouseTouchDownListener","defaultView","parentWindow","findFirst","_strDot","setupResponsiveEventListener","setupStructureEvents","setupScrollbarEvents","reconnectMutationObserver","insideIFrame","mouseDownPosition","mouseDownSize","mouseDownInvertedScale","documentDragMove","onMouseTouchDownContinue","pageOffset","getCoordinates","hostElementCSS","documentMouseTouchUp","eventIsTrusted","documentOnSelectStart","releaseCapture","connectMutationObservers","isTouchEvent","screenX","screenY","addDestroyEventListener","getHostElementInvertedScale","setCapture","setupScrollbarCornerEvents","createMutationObservers","hostOnResized","construct","eventNames","listener","passiveOrOptions","collected","method","onOff","events","passiveOrOptionsIsObj","passive","capture","_capture","nativeParam","onElementResizedCallback","resizeObserver","strAnimationStartEvent","generateDiv","observe","dir","_classNameResizeObserverItemElement","isDirty","rAFId","currWidth","currHeight","observerElement","shrinkElement","expandElement","expandElementChild","widthCache","heightCache","reset","onResized","expandChildCSS","observerElementCSS","setTopRightBottomLeft","isIE","onload","wnd","contentDocument","directionChanged","scrollLeftValue","resizeObserverObj","disconnect","mutationTarget","mutationAttrName","mutationIsClass","oldMutationVal","newClassVal","hostClassNameRegex","contentTimeout","sizeAuto","action","mutationObserver","contentLastUpdate","mutations","doUpdate","mutation","attributeName","mutationType","hostClassNamesChanged","oldValue","isUnknownMutation","textareaUpdate","doUpdateForce","mutatedAttrs","createHostClassNameRegExp","attributes","attributeOldValue","attributeFilter","subtree","childList","characterData","hostOnMouseEnter","refreshScrollbarsAutoHide","hostOnMouseLeave","hostOnMouseMove","elm","eachUpdateOnLoad","updateOnLoadSelector","bodyMinSize","_strMinMinus","oldClassNames","newClassNames","regex","currClasses","diff","a1","a2","getArrayDifferences","idx","attrs","targetAttr","origWidth","origHeight","wrapAttrOff","minWidth","minHeight","doMeasure","_originalWidth","_originalHeight","_dynamicWidth","_dynamicHeight","updateHints","displayIsHidden","hostSizeChanged","contentSizeChanged","changedOptions","swallow","checkCacheAutoForce","currentPreparedOptionsScrollbars","currentPreparedOptionsTextarea","scrollbarsVisibility","scrollbarsVisibilityChanged","scrollbarsAutoHide","scrollbarsAutoHideChanged","scrollbarsClickScrolling","scrollbarsClickScrollingChanged","scrollbarsDragScrolling","scrollbarsDragScrollingChanged","classNameChanged","resizeChanged","paddingAbsoluteChanged","clipAlwaysChanged","sizeAutoCapableChanged","ignoreOverlayScrollbarHiding","ignoreOverlayScrollbarHidingChanged","autoUpdateChanged","overflowBehaviorChanged","textareaDynWidth","textareaDynWidthChanged","textareaDynHeight","textareaDynHeightChanged","oldSize","newSize","sizeAutoObserverElementBCRect","textareaAutoWrapping","textareaAutoWrappingChanged","cssDirection","cssDirectionChanged","boxSizing","boxSizingChanged","getTopRightBottomLeftHost","isRTLLeft","isRTLRight","widthAutoResizeDetection","widthAutoObserverDetection","right","tmpCurrHostWidth","tmpCurrContentGlueWidth","tmpNewHostWidth","widthAutoChanged","wasWidthAuto","bottom","heightAutoChanged","wasHeightAuto","border","contentElementCSS","contentGlueElementCSS","getHostSize","getViewportSize","paddingAbsoluteX","paddingAbsoluteY","paddingElementCSS","textareaCSS","paddingValues","textareaSize","textareaSizeChanged","textareaDynOrigSize","_strMaxMinus","viewportElementResetCSS","resetXTmp","ys","resetBottomTmp","xs","contentSize","hostAbsoluteRectSize","contentGlueSize","textareaCoverCSS","setContentGlueElementCSSfunction","horizontal","scrollbarVars","strWH","_width_height","autoSize","borderSize","paddingSize","marginSize","hideOverflowForceTextarea","previousOverflowAmount","overflowBehaviorIsVS","overflowBehaviorIsVH","overflowBehaviorIsS","canScroll","viewportRect","setOverflowVariables","xyI","widthHeight","scrollMax","_Left_Top","fractionalOverflowAmount","checkFractionalOverflowAmount","setContentElementCSS","contentArrangeElementCSS","arrangeContent","arrangeChanged","scrollbarVarsInverted","strDirection","invertedAutoSize","addRemoveClass","setViewportCSS","viewportElementCSS","XY","_X_Y","_strPaddingMinus","_strMarginMinus","strOverflow","elementStyle","webkitTransform","floatTmp","posLeftWithoutFloat","textareaInfo","textareaCursorPosition","selectionStart","rowCols","textareaValue","textareaLength","textareaRowSplit","textareaLastRow","textareaCurrentCursorRowSplit","widestRow","textareaLastCol","cursorRow","cursorCol","_cursorRow","_cursorColumn","_rows","_columns","_widestRow","_cursorPosition","_cursorMax","getTextareaInfo","textareaRowsChanged","lastRow","lastCol","cursorIsLastPosition","textareaScrollAmount","scrollbarsVisibilityVisible","scrollbarsVisibilityHidden","scrollbarsVisibilityAuto","refreshScrollbarsVisibility","showX","showY","refreshScrollbarAppearance","refreshScrollbarHandleLength","refreshScrollbarsInteractive","xScrollable","yScrollable","clipped","forced","validatedOpts","classNameTextareaElementFull","textareaClass","adoptAttrs","adoptAttrsMap","applyAdoptedAttrs","applyAdoptedAttrsElm","hostElementClassNames","selectOrGenerateDivByClass","textareaUpdateIntervalID","scrollStopTimeoutId","textareaKeyDownRestrictedKeyCodes","textareaKeyDownKeyCodesList","updateTextarea","doClearInterval","clearInterval","setInterval","strFocus","propertyName","affectingPropsX","affectingPropsXContentBox","_strBorderMinus","affectingPropsY","affectingPropsYContentBox","checkX","sizeIsAffected","checkPropertyName","isSizeAffectingCSSProperty","nativeOverlayScrollbarsAreActive","horizontalElements","verticalElements","selectOrGenerateScrollbarDOM","isHorizontal","_scrollbar","_track","_handle","resetScrollbarDOM","trackTimeout","mouseDownScroll","mouseDownOffset","scrollbarVarsInfo","_info","scrollDurationFactor","increaseDecreaseScrollAmountKeyCodes","getPointerPosition","getPreparedScrollbarsOption","increaseTrackScrollAmount","decreaseTrackScrollAmount","stopClickEventPropagation","documentKeyDown","documentKeyUp","scrollDelta","isFinite","clientX","clientY","onHandleMouseTouchDownAction","decreaseScroll","handleToViewportRatio","scrollDistance","scrollBaseDuration","scrollFirstIterationDelay","trackOffset","instantScroll","instantScrollTransition","isFirstIteration","scrollActionFinsished","transition","scrollActionInstantFinished","scrollAction","mouseOffset","scrollRange","scrollDuration","timeoutDelay","instantScrollPosition","rtlIsNormal","decreaseScrollCondition","scrollObj","animationObj","shallBeVisible","scrollbarElement","delayfree","anyActive","handleCSS","handleRatio","_Width_Height","scrollOrTransition","transformOffset","translateValue","isRTLisHorizontal","strTransform","strTransition","nativeScroll","currentScroll","handleTrackDiff","getScrollRatio","getHandleOffset","scrollRatio","strTranslateBrace","transitionStr","assembledValue","strResult","valueArray","regExpMain","regExpValidate","properties","splitCssStyleByComma","$1","getCSSTransitionString","isTrack","element2","_l_t","args","dependent","extensionOnName","targetCSSObject","prefix","zeroX","zeroY","withCurrClassNameOption","withOldClassNameOption","appendix","appendClasses","condition","toFloat","num","classesOrAttrs","selectParentOrOnlyChildren","onlyChildren","selectParent","path","splits","splitsLength","extendObj","extendObjRoot","current","doAdd","pluginTargetElements","optsIsPlainObj","newDefaultOptions","currDefaultOptions","osInstance","extensionName","extNameTypeString","overlayScrollbars","factory","_extends","source","toArray","nl","DrawState","fitties","redrawFrame","requestRedraw","cancelAnimationFrame","redraw","dirty","redrawAll","styleComputed","computeStyle","shouldPreStyle","applyStyle","fittiesToRedraw","shouldRedraw","calculateStyles","markAsClean","dispatchFitEvent","availableWidth","clientWidth","currentWidth","scrollWidth","previousFontSize","currentFontSize","minSize","maxSize","multiLine","preStyle","preStyleTestCompleted","scaleFactor","fit","observeMutations","observer","originalStyle","MutationObserver","resizeDebounce","onWindowResized","fitty","observeWindowDelay","enabled","observeWindow","fitAll","fittyCreate","fittyOptions","publicFitties","newbie","unfreeze","freeze","isBrowser","isUCBrowser","isIOS","platform","MSStream","defaultProps","a11y","allowHTML","animateFill","animation","appendTo","aria","arrow","arrowType","boundary","delay","flip","flipBehavior","flipOnUpdate","followCursor","hideOnClick","ignoreAttributes","inertia","interactive","interactiveBorder","interactiveDebounce","lazy","maxWidth","multiple","onHidden","onHide","onMount","onShow","onShown","onTrigger","placement","popperOptions","role","showOnInit","size","sticky","theme","touchHold","triggerTarget","updateDuration","wait","POPPER_INSTANCE_DEPENDENCIES","elementProto","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","arrayFrom","closest","closestCallback","PASSIVE","POPPER_SELECTOR","TOOLTIP_SELECTOR","CONTENT_SELECTOR","BACKDROP_SELECTOR","ARROW_SELECTOR","ROUND_ARROW_SELECTOR","isUsingTouch","onDocumentTouch","performance","onDocumentMouseMove","lastMouseMoveTime","onWindowBlur","_tippy","isReferenceElement","debounce","ms","arg","timeout","getModifier","modifiers","isRealElement","isSingular","invokeWithArgsOrReturn","setFlipModifierEnabled","div","setTransitionDuration","els","transitionDuration","setVisibilityState","evaluateProps","reference","out","acc","valueAsString","getDataAttributeOptions","validateOptions","setInnerHTML","html","setContent","contentEl","getChildren","popper","tooltip","backdrop","addInertia","createArrowElement","createBackdropElement","addInteractive","updateTransitionEndListener","webkitTransition","getBasicPlacement","fullPlacement","updateTheme","themeName","createPopperElement","updatePopperElement","prevProps","nextProps","_getChildren","replaceChild","removeInteractive","removeInertia","idCounter","mouseMoveListeners","createTippy","collectionProps","lastTriggerEventType","lastMouseMoveEvent","showTimeoutId","hideTimeoutId","scheduleHideAnimationFrameId","previousPlacement","currentMountCallback","currentTransitionEndListener","currentComputedPadding","isScheduledToShow","isBeingDestroyed","wasVisibleDuringPreviousUpdate","hasMountCallbackRun","listeners","debouncedOnMouseMove","onMouseMove","popperChildren","popperInstance","isEnabled","isVisible","isDestroyed","isMounted","isShown","clearDelayTimeouts","destroyTargetInstances","removeTriggersFromReference","addTriggersToReference","createPopperInstance","scheduleShow","getEventListenersTarget","removeFollowCursorListener","positionVirtualReferenceNearCursor","cleanupInteractiveMouseListeners","scheduleHide","addDocumentClickListener","onDocumentClick","removeDocumentClickListener","getTransitionableElements","getIsInLooseFollowCursorMode","makeSticky","prevRefRect","updatePosition","currentRefRect","scheduleUpdate","onTransitionedOut","onTransitionEnd","onTransitionedIn","eventType","onMouseLeave","onDelegateShow","onDelegateHide","onBlur","_ref","_lastMouseMoveEvent","isCursorOverReference","isVertical","isVerticalPlacement","isVariation","halfSize","verticalIncrease","horizontalIncrease","referenceNode","isEventListenerStopped","MouseEvent","isCursorOverPopper","popperPlacement","popperRect","exceedsTop","exceedsBottom","exceedsLeft","exceedsRight","isCursorOutsideInteractiveBorder","relatedTarget","supportsTouch","runMountCallback","reflow","_instance$popperChild","preventOverflowModifier","applyMutations","flipped","basicPlacement","isPaddingNumber","computedPadding","eventsEnabled","preventOverflow","boundariesElement","behavior","onCreate","onUpdate","mount","isInLooseFollowCursorMode","enableEventListeners","shouldAvoidCallingOnTrigger","targetEl","createDelegateChildTippy","transitionableElements","transitionDelay","disableEventListeners","globalEventListenersBound","tippy","targets","virtualReference","polyfills","isVirtual","polyfillElementPrototypeProperties","instances","NodeList","getArrayOfElements","version","defaults","setDefaults","partialDefaults","hideAll","excludedReferenceOrInstance","isExcluded","_ref$delay","_ref$duration","isAnyTippyOpen","setIsAnyTippyOpen","updateInstances","_originalProps","textContent","head","firstStyleOrLinkTag","injectCSS","timeoutDuration","longerTimeoutBrowsers","Promise","called","resolve","then","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","getScrollParent","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","subtract","modifier","getBordersSize","sideA","sideB","getSize","computedStyle","getWindowSizes","classCallCheck","Constructor","createClass","defineProperties","descriptor","protoProps","staticProps","getClientRect","offsets","sizes","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","isFixed","getFixedPositionOffsetParent","getBoundaries","boundaries","boundariesNode","_getWindowSizes","getArea","computeAutoPlacement","refRect","rects","sortedAreas","area","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","marginBottom","marginRight","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","runModifiers","ends","findIndex","arrowStyles","positionFixed","originalPlacement","isCreated","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","willChange","removeOnDestroy","getWindow","setupEventListeners","updateBound","scrollElement","attachToScrollParents","scrollParents","isBody","isNumeric","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","splitRegex","ops","op","mergeWithPrevious","toValue","index2","Defaults","shift","shiftvariation","_data$offsets","shiftOffsets","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","keepTogether","opSide","_data$offsets$arrow","arrowElement","len","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","horizontalToInteger","verticalToInteger","getRoundedOffsets","prefixedProperty","invertTop","invertLeft","onLoad","modifierOptions","Popper","_this","jquery","Utils","PopperUtils","code","1","visible","HTMLElement","cloneNode","closable","onClose","aa","ba","unshift","ca","da","FontFace","createTextNode","lastChild","rel","href","media","onerror","onreadystatechange","readyState","B","G","J","H","ga","ha","ja","Q","fonts","load","fa","race","la","serif","V","ma","W","X","na","oa","qa","xa","vendor","ra","sa","ta","ia","ka","pa","projectId","api","fontfamily","urls","families","testStrings","ya","za","latin","cyrillic","greek","khmer","Hanuman","Aa","thin","extralight","ultralight","light","regular","book","medium","semibold","demibold","bold","extrabold","ultrabold","black","heavy","Ba","italic","normal","Ca","Ea","Fa","Arimo","Cousine","Tinos","Ga","Ha","va","Da","wa","Typekit","async","__webfontfontdeckmodule__","hostname","ea","Y","custom","fontdeck","monotype","typekit","google","Z","charCodeAt","singleMatcher","multiMatcher","decodeComponents","components","decodeURIComponent","err","tokens","encodedURI","replaceMap","entries","customDecodeURIComponent","separator","separatorIndex","predicate","isArr","raf","msRequestAnimationFrame","cb","caf","mozCancelAnimationFrame","checkStorageValue","setLocalStorage","storage","access","setItem","getBody","fake","docElement","setFakeBody","docOverflow","background","resetFakeBody","addCSSRule","sheet","rules","insertRule","addRule","getCssRulesLength","cssRules","scope","classListSupport","hasAttr","getAttr","isNodeList","setAttrs","removeAttrs","attrLength","arrayFromNodeList","hideElement","forceHide","showElement","whichProperty","Props","getEndProperty","propIn","propOut","endProp","passiveOption","addEvents","preventScrolling","removeEvents","Events","topics","emit","tns","container","mode","gutter","edgePadding","fixedWidth","autoWidth","viewportMax","slideBy","controls","controlsPosition","controlsText","controlsContainer","prevButton","nextButton","nav","navPosition","navContainer","navAsThumbnails","arrowKeys","speed","autoplay","autoplayPosition","autoplayTimeout","autoplayDirection","autoplayText","autoplayHoverPause","autoplayButton","autoplayButtonOutput","autoplayResetOnVisibility","animateIn","animateOut","animateNormal","animateDelay","rewind","autoHeight","responsive","lazyload","lazyloadSelector","mouseDrag","swipeAngle","nested","preventActionWhenRunning","preventScrollOnTouch","freezable","onInit","useLocalStorage","nonce","win","KEYS","ENTER","SPACE","LEFT","RIGHT","tnsStorage","localStorageAccess","browserInfo","uid","localStorage","getItem","removeItem","CALC","vals","calc","PERCENTAGELAYOUT","supported","outer","count","percentageLayout","CSSMQ","matchMedia","msMatchMedia","rule","styleSheet","mediaquerySupport","TRANSFORM","HAS3DTRANSFORMS","tf","has3d","cssTF","has3DTransforms","TRANSITIONDURATION","TRANSITIONDELAY","ANIMATIONDURATION","ANIMATIONDELAY","TRANSITIONEND","ANIMATIONEND","supportConsoleWarn","tnsList","optionsElements","carousel","responsiveTem","updateOptions","middleWrapper","breakpointZone","outerWrapper","innerWrapper","containerParent","containerHTML","slideItems","slideCount","getWindowWidth","isOn","setBreakpointZone","slidePositions","imgsComplete","liveregionCurrent","itemsMax","getOption","getViewportWidth","fixedWidthViewportWidth","slideItemsOut","cloneCount","bp","tem","getItemsMax","hasOption","slideCountNew","hasRightDeadZone","rightBoundary","getRightBoundary","updateIndexBeforeTransform","transformAttr","transformPrefix","transformPostfix","getIndexMax","getStartIndex","indexCached","indexMin","getCurrentSlide","indexMax","moveDirectionExpected","running","newContainerClasses","slideId","tnsId","getFreeze","frozen","controlsEvents","onControlsClick","getEvent","keyIndex","navEvents","getTarget","navIndex","navClicked","targetIndexBase","pages","goTo","navCurrentIndex","animating","stopAutoplay","curElement","setFocus","navItems","hoverEvents","stopAutoplayTimer","autoplayHoverPaused","setAutoplayTimer","visibilityEvent","hidden","autoplayVisibilityPaused","docmentKeydownEvent","touchEvents","onPanStart","onPanMove","onPanEnd","dragEvents","hasControls","hasNav","hasAutoplay","hasTouch","hasMouseDrag","slideActiveClass","imgCompleteClass","imgEvents","imgLoaded","img","imgCompleted","preventScroll","prevIsButton","nextIsButton","controlsContainerHTML","prevButtonHTML","nextButtonHTML","navContainerHTML","getPages","pagesCached","getCurrentNavIndex","navCurrentIndexCached","navActiveClass","navStr","navStrCurrent","autoplayTimer","autoplayUserPaused","autoplayButtonHTML","autoplayHtmlStrings","translateInit","rafIndex","initPosition","lastPosition","panStart","getDist","resetVariblesWhenDisable","fragmentBefore","fragmentAfter","cloneFirst","cloneLast","initStructure","slide","getSlideMarginLeft","getTransitionDurationStyle","getInnerWrapperStyles","getContainerWidth","getSlideWidthStyle","getSlideGutterStyle","getAnimationDurationStyle","opts","middleWrapperStr","innerWrapperStr","containerStr","slideStr","itemsBP","fixedWidthBP","speedBP","edgePaddingBP","autoHeightBP","gutterBP","initSheet","initSliderTransform","updateIndex","leftEdge","rightEdge","transformCore","postfix","tick","positionTick","resetDuration","doContainerTransform","getContainerTransformValue","moveElement","updateContentWrapperHeight","eve","animateSlide","getInfo","info","play","startAutoplay","pause","updateSliderHeight","updateInnerWrapperHeight","refresh","ownerNode","onResize","toggleAutoplay","htmlList","prevEl","previousElementSibling","parentEl","rebuild","ind","getAbsIndex","absIndex","getInsertPosition","gap","getClientWidth","ww","edgePaddingTem","gutterTem","fixedWidthTem","speedTem","gutterTemUnit","itemsTem","dividend","getCSSPrefix","imgs","imgsLoadedCheck","getImageArray","initSliderTransformStyleCheck","doContainerTransformSilent","initTools","initEvents","stylesApplicationCheck","initSliderTransformCore","setSlidePositions","updateSlideStatus","getLiveRegionStr","txt","navHtml","hiddenStr","updateNavVisibility","isButton","updateControlsStatus","disableUI","resizeTasks","doAutoHeight","doLazyLoad","disableSlider","freezeSlider","additionalUpdates","bpChanged","breakpointZoneTem","needContainerTransform","indChanged","itemsChanged","disableTem","freezeTem","arrowKeysTem","controlsTem","navTem","touchTem","mouseDragTem","autoplayTem","autoplayHoverPauseTem","autoplayResetOnVisibilityTem","indexTem","autoHeightTem","controlsTextTem","centerTem","autoplayTextTem","classN","enableUI","enableSlider","unfreezeSlider","updateLiveRegion","updateGallerySlidePositions","deleteRule","removeRule","removeCSSRule","vp","getVisibleSlideRange","rangestart","rangeend","point","cell","srcset","imgSelector","navPrev","navCurrent","updateNavStatus","getMaxSlideHeight","slideStart","slideRange","heights","maxHeight","wp","attr2","getLowerCaseNodeName","isAriaDisabled","disEnableElement","prevDisabled","nextDisabled","disablePrev","disableNext","getCenterGap","denominator","number","classOut","classIn","isOut","sliderMoved","strTrans","targetIndex","indexGap","factor","passEventObject","targetIn","updateAutoplayButton","changedTouches","preventDefaultBehavior","getMoveDirectionExpected","angle","atan2","direction","$","panUpdate","dist","preventClick","indexMoved","moved","rough","displayIndex","loadedStates","whenDomReady","done","resume"],"mappings":"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u7B,GAAcH,GAAnB,CAIA,GAAI5K,EAAU4K,GAAsB,CAChC,IAAII,EAAOhL,EAAU4K,GAErB,OADAI,EAAK9hC,QAAQA,GACN8hC,EAIX,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAIAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAC,GACAC,GACAC,GAgHAC,GACAC,GACAC,GAOAC,GAEAC,GAMAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAGAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAIAC,GACAC,GACAC,GACAC,GACAC,GAQAC,GAGAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAGAC,GACAC,GACAC,GACAC,GArOAC,GAAqB,GACrBC,GAAwB,GACxBC,GAAsB,GACtBC,GAAgB,GAChBC,GAA0B,GAsC1BC,GAAyB,mDAMzBC,GAAwBC,UACxBC,GAA+BF,GAAwB,WACvDG,GAAgCH,GAAwB,YACxDI,GAA0CJ,kCAC1CK,GAAwCL,gCACxCM,GAA2BN,GAAwB,cACnDO,GAAoBP,GAAwB,OAC5CQ,GAA+BR,GAAwB,mBACvDS,GAA0BT,GAAwB,aAClDU,GAAyBV,GAAwB,YAEjDW,IADAD,GAAyBV,GAAwB,aACE,KACnDY,GAA0BF,GAAyB,KACnDG,GAA4BZ,cAC5Ba,GAAiCD,GAA4B,SAG7DE,GAA8CC,0CAC9CC,G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","file":"vendors~components-f28999bb7d75f02824d2.js","sourcesContent":["'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (value === null || value === undefined || value.length === 0) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${encode(object.fragmentIdentifier, options)}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\n","/*! choices.js v7.1.5 | © 2019 Josh Johnson | https://github.com/jshjohnson/Choices#readme */\n!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.Choices=t():e.Choices=t()}(window,(function(){return function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,\"a\",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p=\"/public/assets/scripts/\",i(i.s=5)}([function(e,t,i){var n;\n/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/!function(){\"use strict\";var i={}.hasOwnProperty;function s(){for(var e=[],t=0;t0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=[],n=-1,s=-1,r=0,o=e.length;r=t&&i.push([n,s]),n=-1)}return e[r-1]&&r-n>=t&&i.push([n,r-1]),i}},\"./src/bitap/bitap_pattern_alphabet.js\":\n/*!*********************************************!*\\\n !*** ./src/bitap/bitap_pattern_alphabet.js ***!\n \\*********************************************/\n/*! no static exports found */function(e,t){e.exports=function(e){for(var t={},i=e.length,n=0;n2&&void 0!==arguments[2]?arguments[2]:/ +/g,s=new RegExp(t.replace(i,\"\\\\$&\").replace(n,\"|\")),r=e.match(s),o=!!r,a=[];if(o)for(var l=0,c=r.length;l=D;j-=1){var M=j-1,N=i[e.charAt(M)];if(N&&(E[M]=1),F[j]=(F[j+1]<<1|1)&N,0!==T&&(F[j]|=(C[j+1]|C[j])<<1|1|C[j+1]),F[j]&x&&(O=n(t,{errors:T,currentLocation:M,expectedLocation:v,distance:c}))<=_){if(_=O,(b=M)<=v)break;D=Math.max(1,2*v-b)}}if(n(t,{errors:T+1,currentLocation:v,expectedLocation:v,distance:c})>_)break;C=F}return{isMatch:b>=0,score:0===O?.001:O,matchedIndices:s(E,m)}}},\"./src/bitap/index.js\":\n/*!****************************!*\\\n !*** ./src/bitap/index.js ***!\n \\****************************/\n/*! no static exports found */function(e,t,i){function n(e,t){for(var i=0;ii)return s(e,this.pattern,n);var o=this.options,a=o.location,l=o.distance,c=o.threshold,h=o.findAllMatches,u=o.minMatchCharLength;return r(e,this.pattern,this.patternAlphabet,{location:a,distance:l,threshold:c,findAllMatches:h,minMatchCharLength:u})}}])&&n(t.prototype,i),a&&n(t,a),e}();e.exports=a},\"./src/helpers/deep_value.js\":\n/*!***********************************!*\\\n !*** ./src/helpers/deep_value.js ***!\n \\***********************************/\n/*! no static exports found */function(e,t,i){var n=i(/*! ./is_array */\"./src/helpers/is_array.js\");e.exports=function(e,t){return function e(t,i,s){if(i){var r=i.indexOf(\".\"),o=i,a=null;-1!==r&&(o=i.slice(0,r),a=i.slice(r+1));var l=t[o];if(null!=l)if(a||\"string\"!=typeof l&&\"number\"!=typeof l)if(n(l))for(var c=0,h=l.length;c1&&void 0!==arguments[1]?arguments[1]:{limit:!1};this._log('---------\\nSearch pattern: \"'.concat(e,'\"'));var i=this._prepareSearchers(e),n=i.tokenSearchers,s=i.fullSearcher,r=this._search(n,s),o=r.weights,a=r.results;return this._computeScore(o,a),this.options.shouldSort&&this._sort(a),t.limit&&\"number\"==typeof t.limit&&(a=a.slice(0,t.limit)),this._format(a)}},{key:\"_prepareSearchers\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",t=[];if(this.options.tokenize)for(var i=e.split(this.options.tokenSeparator),n=0,s=i.length;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,i=this.list,n={},s=[];if(\"string\"==typeof i[0]){for(var r=0,o=i.length;r1)throw new Error(\"Key weight has to be > 0 and <= 1\");p=p.name}else a[p]={weight:1};this._analyze({key:p,value:this.options.getFn(h,p),record:h,index:l},{resultMap:n,results:s,tokenSearchers:e,fullSearcher:t})}return{weights:a,results:s}}},{key:\"_analyze\",value:function(e,t){var i=e.key,n=e.arrayIndex,s=void 0===n?-1:n,r=e.value,o=e.record,l=e.index,c=t.tokenSearchers,h=void 0===c?[]:c,u=t.fullSearcher,d=void 0===u?[]:u,p=t.resultMap,f=void 0===p?{}:p,m=t.results,v=void 0===m?[]:m;if(null!=r){var g=!1,_=-1,b=0;if(\"string\"==typeof r){this._log(\"\\nKey: \".concat(\"\"===i?\"-\":i));var y=d.search(r);if(this._log('Full text: \"'.concat(r,'\", score: ').concat(y.score)),this.options.tokenize){for(var E=r.split(this.options.tokenSeparator),S=[],I=0;I-1&&(D=(D+_)/2),this._log(\"Score average:\",D);var P=!this.options.tokenize||!this.options.matchAllTokens||b>=h.length;if(this._log(\"\\nCheck Matches: \".concat(P)),(g||y.isMatch)&&P){var F=f[l];F?F.output.push({key:i,arrayIndex:s,value:r,score:D,matchedIndices:y.matchedIndices}):(f[l]={item:o,output:[{key:i,arrayIndex:s,value:r,score:D,matchedIndices:y.matchedIndices}]},v.push(f[l]))}}else if(a(r))for(var j=0,M=r.length;j-1&&(o.arrayIndex=r.arrayIndex),t.matches.push(o)}}})),this.options.includeScore&&s.push((function(e,t){t.score=e.score}));for(var r=0,o=e.length;r/g,\"&rt;\").replace(/-1?e(t[i.substring(0,n)],i.substr(n+1)):t[i]},T=function(e){return JSON.parse(JSON.stringify(e))},L=function(e,t){var i=Object.keys(e).sort(),n=Object.keys(t).sort();return i.filter((function(e){return n.indexOf(e)<0}))},k=function(e){for(var t=Object.keys(e),i={},n=0;n-1?e.map((function(e){var i=e;return i.id===parseInt(t.choiceId,10)&&(i.selected=!0),i})):e;case\"REMOVE_ITEM\":return t.choiceId>-1?e.map((function(e){var i=e;return i.id===parseInt(t.choiceId,10)&&(i.selected=!1),i})):e;case\"FILTER_CHOICES\":return e.map((function(e){var i=e;return i.active=t.results.some((function(e){var t=e.item,n=e.score;return t.id===i.id&&(i.score=n,!0)})),i}));case\"ACTIVATE_CHOICES\":return e.map((function(e){var i=e;return i.active=t.active,i}));case\"CLEAR_CHOICES\":return m;default:return e}},general:_}),D=function(e,t){var i=e;if(\"CLEAR_ALL\"===t.type)i=void 0;else if(\"RESET_TO\"===t.type)return T(t.state);return k(i,t)};function P(e,t){for(var i=0;i=t:\"top\"===this.position&&(s=!0),s},t.setActiveDescendant=function(e){this.element.setAttribute(\"aria-activedescendant\",e)},t.removeActiveDescendant=function(){this.element.removeAttribute(\"aria-activedescendant\")},t.open=function(e){this.element.classList.add(this.classNames.openState),this.element.setAttribute(\"aria-expanded\",\"true\"),this.isOpen=!0,this.shouldFlip(e)&&(this.element.classList.add(this.classNames.flippedState),this.isFlipped=!0)},t.close=function(){this.element.classList.remove(this.classNames.openState),this.element.setAttribute(\"aria-expanded\",\"false\"),this.removeActiveDescendant(),this.isOpen=!1,this.isFlipped&&(this.element.classList.remove(this.classNames.flippedState),this.isFlipped=!1)},t.focus=function(){this.isFocussed||this.element.focus()},t.addFocusState=function(){this.element.classList.add(this.classNames.focusState)},t.removeFocusState=function(){this.element.classList.remove(this.classNames.focusState)},t.enable=function(){this.element.classList.remove(this.classNames.disabledState),this.element.removeAttribute(\"aria-disabled\"),\"select-one\"===this.type&&this.element.setAttribute(\"tabindex\",\"0\"),this.isDisabled=!1},t.disable=function(){this.element.classList.add(this.classNames.disabledState),this.element.setAttribute(\"aria-disabled\",\"true\"),\"select-one\"===this.type&&this.element.setAttribute(\"tabindex\",\"-1\"),this.isDisabled=!0},t.wrap=function(e){!function(e,t){void 0===t&&(t=document.createElement(\"div\")),e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t.appendChild(e)}(e,this.element)},t.unwrap=function(e){this.element.parentNode.insertBefore(e,this.element),this.element.parentNode.removeChild(this.element)},t.addLoadingState=function(){this.element.classList.add(this.classNames.loadingState),this.element.setAttribute(\"aria-busy\",\"true\"),this.isLoading=!0},t.removeLoadingState=function(){this.element.classList.remove(this.classNames.loadingState),this.element.removeAttribute(\"aria-busy\"),this.isLoading=!1},t._onFocus=function(){this.isFocussed=!0},t._onBlur=function(){this.isFocussed=!1},e}();function N(e,t){for(var i=0;i=this._placeholderValue.length/1.25;(this.element.value&&n||e)&&this.calcWidth(i)}else this.calcWidth(i)},s.calcWidth=function(e){return function(e,t){var i=e.value||e.placeholder,n=e.offsetWidth;if(i){var s=O(\"\"+C(i)+\"\");if(s.style.position=\"absolute\",s.style.padding=\"0\",s.style.top=\"-9999px\",s.style.left=\"-9999px\",s.style.width=\"auto\",s.style.whiteSpace=\"pre\",document.body.contains(e)&&window.getComputedStyle){var r=window.getComputedStyle(e);r&&(s.style.fontSize=r.fontSize,s.style.fontFamily=r.fontFamily,s.style.fontWeight=r.fontWeight,s.style.fontStyle=r.fontStyle,s.style.letterSpacing=r.letterSpacing,s.style.textTransform=r.textTransform,s.style.paddingLeft=r.paddingLeft,s.style.paddingRight=r.paddingRight)}document.body.appendChild(s),requestAnimationFrame((function(){i&&s.offsetWidth!==e.offsetWidth&&(n=s.offsetWidth+4),document.body.removeChild(s),t.call(void 0,n+\"px\")}))}else t.call(void 0,n+\"px\")}(this.element,e)},s.setActiveDescendant=function(e){this.element.setAttribute(\"aria-activedescendant\",e)},s.removeActiveDescendant=function(){this.element.removeAttribute(\"aria-activedescendant\")},s._onInput=function(){\"select-one\"!==this.type&&this.setWidth()},s._onPaste=function(e){e.target===this.element&&this.preventPaste&&e.preventDefault()},s._onFocus=function(){this.isFocussed=!0},s._onBlur=function(){this.isFocussed=!1},t=e,(i=[{key:\"placeholder\",set:function(e){this.element.placeholder=e}},{key:\"value\",set:function(e){this.element.value=e},get:function(){return C(this.element.value)}}])&&N(t.prototype,i),n&&N(t,n),e}(),R={items:[],choices:[],silent:!1,renderChoiceLimit:-1,maxItemCount:-1,addItems:!0,addItemFilterFn:null,removeItems:!0,removeItemButton:!1,editItems:!1,duplicateItemsAllowed:!0,delimiter:\",\",paste:!0,searchEnabled:!0,searchChoices:!0,searchFloor:1,searchResultLimit:4,searchFields:[\"label\",\"value\"],position:\"auto\",resetScrollPosition:!0,shouldSort:!0,shouldSortItems:!1,sortFn:function(e,t){var i=(\"\"+(e.label||e.value)).toLowerCase(),n=(\"\"+(t.label||t.value)).toLowerCase();return in?1:0},placeholder:!0,placeholderValue:null,searchPlaceholderValue:null,prependValue:null,appendValue:null,renderSelectedChoices:\"auto\",loadingText:\"Loading...\",noResultsText:\"No results found\",noChoicesText:\"No choices to choose from\",itemSelectText:\"Press to select\",uniqueItemText:\"Only unique values can be added\",customAddItemText:\"Only values matching specific conditions can be added\",addItemText:function(e){return'Press Enter to add \"'+C(e)+'\"'},maxItemText:function(e){return\"Only \"+e+\" values can be added\"},itemComparer:function(e,t){return e===t},fuseOptions:{includeScore:!0},callbackOnInit:null,callbackOnCreateTemplates:null,classNames:{containerOuter:\"choices\",containerInner:\"choices__inner\",input:\"choices__input\",inputCloned:\"choices__input--cloned\",list:\"choices__list\",listItems:\"choices__list--multiple\",listSingle:\"choices__list--single\",listDropdown:\"choices__list--dropdown\",item:\"choices__item\",itemSelectable:\"choices__item--selectable\",itemDisabled:\"choices__item--disabled\",itemChoice:\"choices__item--choice\",placeholder:\"choices__placeholder\",group:\"choices__group\",groupHeading:\"choices__heading\",button:\"choices__button\",activeState:\"is-active\",focusState:\"is-focused\",openState:\"is-open\",disabledState:\"is-disabled\",highlightedState:\"is-highlighted\",hiddenState:\"is-hidden\",flippedState:\"is-flipped\",loadingState:\"is-loading\",noResults:\"has-no-results\",noChoices:\"has-no-choices\"}},B=\"showDropdown\",V=\"hideDropdown\",H=\"change\",G=\"choice\",q=\"search\",W=\"addItem\",U=\"removeItem\",z=\"highlightItem\",X=\"highlightChoice\",Y=\"ADD_CHOICE\",$=\"FILTER_CHOICES\",J=\"ACTIVATE_CHOICES\",Z=\"CLEAR_CHOICES\",Q=\"ADD_GROUP\",ee=\"ADD_ITEM\",te=\"REMOVE_ITEM\",ie=\"HIGHLIGHT_ITEM\",ne=46,se=8,re=13,oe=65,ae=27,le=38,ce=40,he=33,ue=34,de=function(){function e(e){var t=e.element;Object.assign(this,{element:t}),this.scrollPos=this.element.scrollTop,this.height=this.element.offsetHeight,this.hasChildren=!!this.element.children}var t=e.prototype;return t.clear=function(){this.element.innerHTML=\"\"},t.append=function(e){this.element.appendChild(e)},t.getChild=function(e){return this.element.querySelector(e)},t.scrollToTop=function(){this.element.scrollTop=0},t.scrollToChoice=function(e,t){var i=this;if(e){var n=this.element.offsetHeight,s=e.offsetHeight,r=e.offsetTop+s,o=this.element.scrollTop+n,a=t>0?this.element.scrollTop+r-o:e.offsetTop;requestAnimationFrame((function(e){i._animateScroll(e,a,t)}))}},t._scrollDown=function(e,t,i){var n=(i-e)/t,s=n>1?n:1;this.element.scrollTop=e+s},t._scrollUp=function(e,t,i){var n=(e-i)/t,s=n>1?n:1;this.element.scrollTop=e-s},t._animateScroll=function(e,t,i){var n=this,s=this.element.scrollTop,r=!1;i>0?(this._scrollDown(s,4,t),st&&(r=!0)),r&&requestAnimationFrame((function(){n._animateScroll(e,t,i)}))},e}();function pe(e,t){for(var i=0;i\\n \\n ')},containerInner:function(e){return O('\\n
\\n ')},itemList:function(e,t){var i,n=ye()(e.list,((i={})[e.listSingle]=t,i[e.listItems]=!t,i));return O('\\n
\\n ')},placeholder:function(e,t){return O('\\n
\\n '+t+\"\\n
\\n \")},item:function(e,t,i){var n,s,r=t.active?'aria-selected=\"true\"':\"\",o=t.disabled?'aria-disabled=\"true\"':\"\",a=ye()(e.item,((n={})[e.highlightedState]=t.highlighted,n[e.itemSelectable]=!t.highlighted,n[e.placeholder]=t.placeholder,n));return i?(a=ye()(e.item,((s={})[e.highlightedState]=t.highlighted,s[e.itemSelectable]=!t.disabled,s[e.placeholder]=t.placeholder,s)),O('\\n \\n \"+t.label+'\\x3c!--\\n --\\x3e\\n Remove item\\n \\n \\n \")):O('\\n \\n \"+t.label+\"\\n \\n \")},choiceList:function(e,t){var i=t?\"\":'aria-multiselectable=\"true\"';return O('\\n \\n \\n \")},choiceGroup:function(e,t){var i,n=t.disabled?'aria-disabled=\"true\"':\"\",s=ye()(e.group,((i={})[e.itemDisabled]=t.disabled,i));return O('\\n \\n
'+t.value+\"
\\n \\n \")},choice:function(e,t,i){var n,s=t.groupId>0?'role=\"treeitem\"':'role=\"option\"',r=ye()(e.item,e.itemChoice,((n={})[e.itemDisabled]=t.disabled,n[e.itemSelectable]=!t.disabled,n[e.placeholder]=t.placeholder,n));return O('\\n \\n \"+t.label+\"\\n \\n \")},input:function(e,t){var i=ye()(e.input,e.inputCloned);return O('\\n \\n ')},dropdown:function(e){var t=ye()(e.list,e.listDropdown);return O('\\n \\n \\n ')},notice:function(e,t,i){var n;void 0===i&&(i=\"\");var s=ye()(e.item,e.itemChoice,((n={})[e.noResults]=\"no-results\"===i,n[e.noChoices]=\"no-choices\"===i,n));return O('\\n
\\n '+t+\"\\n
\\n \")},option:function(e){return O('\\n \\n \")}},Se=function(e){return void 0===e&&(e=!0),{type:J,active:e}},Ie=function(e,t){return{type:ie,id:e,highlighted:t}},we=function(e,t,i,n){return{type:Q,value:e,id:t,active:i,disabled:n}},Ce=function(){function e(t,i){var n=this;if(void 0===t&&(t=\"[data-choice]\"),void 0===i&&(i={}),S(\"String\",t)){var s=Array.from(document.querySelectorAll(t));if(s.length>1)return this._generateInstances(s,i)}this.config=o.a.all([R,e.userDefaults,i],{arrayMerge:function(e,t){return[].concat(t)}});var r=L(this.config,R);r.length&&console.warn(\"Unknown config option(s) passed\",r.join(\", \")),[\"auto\",\"always\"].includes(this.config.renderSelectedChoices)||(this.config.renderSelectedChoices=\"auto\");var a=S(\"String\",t)?document.querySelector(t):t;if(a){if(this._isTextElement=\"text\"===a.type,this._isSelectOneElement=\"select-one\"===a.type,this._isSelectMultipleElement=\"select-multiple\"===a.type,this._isSelectElement=this._isSelectOneElement||this._isSelectMultipleElement,this._isTextElement?this.passedElement=new ve({element:a,classNames:this.config.classNames,delimiter:this.config.delimiter}):this._isSelectElement&&(this.passedElement=new _e({element:a,classNames:this.config.classNames,template:function(e){return n.config.templates.option(e)}})),!this.passedElement)return console.error(\"Passed element was of an invalid type\");this.initialised=!1,this._store=new F(this.render),this._initialState={},this._currentState={},this._prevState={},this._currentValue=\"\",this._canSearch=this.config.searchEnabled,this._isScrollingOnIe=!1,this._highlightPosition=0,this._wasTap=!0,this._placeholderValue=this._generatePlaceholderValue(),this._baseId=y(this.passedElement.element,\"choices-\"),this._direction=this.passedElement.element.getAttribute(\"dir\")||\"ltr\",this._idNames={itemChoice:\"item-choice\"},this._presetChoices=this.config.choices,this._presetItems=this.config.items,this.passedElement.value&&(this._presetItems=this._presetItems.concat(this.passedElement.value.split(this.config.delimiter))),this._render=this._render.bind(this),this._onFocus=this._onFocus.bind(this),this._onBlur=this._onBlur.bind(this),this._onKeyUp=this._onKeyUp.bind(this),this._onKeyDown=this._onKeyDown.bind(this),this._onClick=this._onClick.bind(this),this._onTouchMove=this._onTouchMove.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onMouseDown=this._onMouseDown.bind(this),this._onMouseOver=this._onMouseOver.bind(this),this._onFormReset=this._onFormReset.bind(this),this._onAKey=this._onAKey.bind(this),this._onEnterKey=this._onEnterKey.bind(this),this._onEscapeKey=this._onEscapeKey.bind(this),this._onDirectionKey=this._onDirectionKey.bind(this),this._onDeleteKey=this._onDeleteKey.bind(this),this.config.silent||(!0===this.config.shouldSortItems&&this._isSelectOneElement&&console.warn(\"shouldSortElements: Type of passed element is 'select-one', falling back to false.\"),\"active\"===this.passedElement.element.getAttribute(\"data-choice\")&&console.warn(\"Trying to initialise Choices on element already initialised\")),this.init()}else this.config.silent||console.error(\"Could not find passed element or passed element was of an invalid type\")}var t=e.prototype;return t.init=function(){if(!this.initialised){this._createTemplates(),this._createElements(),this._createStructure(),this._initialState=T(this._store.state),this._store.subscribe(this._render),this._render(),this._addEventListeners(),(!this.config.addItems||this.passedElement.element.hasAttribute(\"disabled\"))&&this.disable(),this.initialised=!0;var e=this.config.callbackOnInit;e&&S(\"Function\",e)&&e.call(this)}},t.destroy=function(){this.initialised&&(this._removeEventListeners(),this.passedElement.reveal(),this.containerOuter.unwrap(this.passedElement.element),this._isSelectElement&&(this.passedElement.options=this._presetChoices),this.clearStore(),this.config.templates=null,this.initialised=!1)},t.enable=function(){return this.passedElement.isDisabled&&this.passedElement.enable(),this.containerOuter.isDisabled&&(this._addEventListeners(),this.input.enable(),this.containerOuter.enable()),this},t.disable=function(){return this.passedElement.isDisabled||this.passedElement.disable(),this.containerOuter.isDisabled||(this._removeEventListeners(),this.input.disable(),this.containerOuter.disable()),this},t.highlightItem=function(e,t){if(void 0===t&&(t=!0),!e)return this;var i=e.id,n=e.groupId,s=void 0===n?-1:n,r=e.value,o=void 0===r?\"\":r,a=e.label,l=void 0===a?\"\":a,c=s>=0?this._store.getGroupById(s):null;return this._store.dispatch(Ie(i,!0)),t&&this.passedElement.triggerEvent(z,{id:i,value:o,label:l,groupValue:c&&c.value?c.value:null}),this},t.unhighlightItem=function(e){if(!e)return this;var t=e.id,i=e.groupId,n=void 0===i?-1:i,s=e.value,r=void 0===s?\"\":s,o=e.label,a=void 0===o?\"\":o,l=n>=0?this._store.getGroupById(n):null;return this._store.dispatch(Ie(t,!1)),this.passedElement.triggerEvent(z,{id:t,value:r,label:a,groupValue:l&&l.value?l.value:null}),this},t.highlightAll=function(){var e=this;return this._store.items.forEach((function(t){return e.highlightItem(t)})),this},t.unhighlightAll=function(){var e=this;return this._store.items.forEach((function(t){return e.unhighlightItem(t)})),this},t.removeActiveItemsByValue=function(e){var t=this;return this._store.activeItems.filter((function(t){return t.value===e})).forEach((function(e){return t._removeItem(e)})),this},t.removeActiveItems=function(e){var t=this;return this._store.activeItems.filter((function(t){return t.id!==e})).forEach((function(e){return t._removeItem(e)})),this},t.removeHighlightedItems=function(e){var t=this;return void 0===e&&(e=!1),this._store.highlightedActiveItems.forEach((function(i){t._removeItem(i),e&&t._triggerChange(i.value)})),this},t.showDropdown=function(e){var t=this;return this.dropdown.isActive?this:(requestAnimationFrame((function(){t.dropdown.show(),t.containerOuter.open(t.dropdown.distanceFromTopWindow()),!e&&t._canSearch&&t.input.focus(),t.passedElement.triggerEvent(B,{})})),this)},t.hideDropdown=function(e){var t=this;return this.dropdown.isActive?(requestAnimationFrame((function(){t.dropdown.hide(),t.containerOuter.close(),!e&&t._canSearch&&(t.input.removeActiveDescendant(),t.input.blur()),t.passedElement.triggerEvent(V,{})})),this):this},t.getValue=function(e){void 0===e&&(e=!1);var t=this._store.activeItems.reduce((function(t,i){var n=e?i.value:i;return t.push(n),t}),[]);return this._isSelectOneElement?t[0]:t},t.setValue=function(e){var t=this;return this.initialised?([].concat(e).forEach((function(e){return t._setChoiceOrItem(e)})),this):this},t.setChoiceByValue=function(e){var t=this;return!this.initialised||this._isTextElement?this:((S(\"Array\",e)?e:[e]).forEach((function(e){return t._findAndSelectChoiceByValue(e)})),this)},t.setChoices=function(e,t,i,n){var s=this;if(void 0===e&&(e=[]),void 0===t&&(t=\"\"),void 0===i&&(i=\"\"),void 0===n&&(n=!1),!this._isSelectElement||!t)return this;n&&this.clearChoices(),this.containerOuter.removeLoadingState();return this._setLoading(!0),e.forEach((function(e){e.choices?s._addGroup({group:e,id:e.id||null,valueKey:t,labelKey:i}):s._addChoice({value:e[t],label:e[i],isSelected:e.selected,isDisabled:e.disabled,customProperties:e.customProperties,placeholder:e.placeholder})})),this._setLoading(!1),this},t.clearChoices=function(){this._store.dispatch({type:Z})},t.clearStore=function(){return this._store.dispatch({type:\"CLEAR_ALL\"}),this},t.clearInput=function(){var e=!this._isSelectOneElement;return this.input.clear(e),!this._isTextElement&&this._canSearch&&(this._isSearching=!1,this._store.dispatch(Se(!0))),this},t.ajax=function(e){var t=this;return this.initialised&&this._isSelectElement&&e?(requestAnimationFrame((function(){return t._handleLoadingState(!0)})),e(this._ajaxCallback()),this):this},t._render=function(){if(!this._store.isLoading()){this._currentState=this._store.state;var e=this._currentState.choices!==this._prevState.choices||this._currentState.groups!==this._prevState.groups||this._currentState.items!==this._prevState.items,t=this._isSelectElement,i=this._currentState.items!==this._prevState.items;e&&(t&&this._renderChoices(),i&&this._renderItems(),this._prevState=this._currentState)}},t._renderChoices=function(){var e=this,t=this._store,i=t.activeGroups,n=t.activeChoices,s=document.createDocumentFragment();if(this.choiceList.clear(),this.config.resetScrollPosition&&requestAnimationFrame((function(){return e.choiceList.scrollToTop()})),i.length>=1&&!this._isSearching){var r=n.filter((function(e){return!0===e.placeholder&&-1===e.groupId}));r.length>=1&&(s=this._createChoicesFragment(r,s)),s=this._createGroupsFragment(i,n,s)}else n.length>=1&&(s=this._createChoicesFragment(n,s));if(s.childNodes&&s.childNodes.length>0){var o=this._store.activeItems,a=this._canAddItem(o,this.input.value);a.response?(this.choiceList.append(s),this._highlightChoice()):this.choiceList.append(this._getTemplate(\"notice\",a.notice))}else{var l,c;this._isSearching?(c=S(\"Function\",this.config.noResultsText)?this.config.noResultsText():this.config.noResultsText,l=this._getTemplate(\"notice\",c,\"no-results\")):(c=S(\"Function\",this.config.noChoicesText)?this.config.noChoicesText():this.config.noChoicesText,l=this._getTemplate(\"notice\",c,\"no-choices\")),this.choiceList.append(l)}},t._renderItems=function(){var e=this._store.activeItems||[];this.itemList.clear();var t=this._createItemsFragment(e);t.childNodes&&this.itemList.append(t)},t._createGroupsFragment=function(e,t,i){var n=this,s=i||document.createDocumentFragment();return this.config.shouldSort&&e.sort(this.config.sortFn),e.forEach((function(e){var i=function(e){return t.filter((function(t){return n._isSelectOneElement?t.groupId===e.id:t.groupId===e.id&&(\"always\"===n.config.renderSelectedChoices||!t.selected)}))}(e);if(i.length>=1){var r=n._getTemplate(\"choiceGroup\",e);s.appendChild(r),n._createChoicesFragment(i,s,!0)}})),s},t._createChoicesFragment=function(e,t,i){var n=this;void 0===i&&(i=!1);var s=t||document.createDocumentFragment(),r=this.config,o=r.renderSelectedChoices,a=r.searchResultLimit,l=r.renderChoiceLimit,c=this._isSearching?A:this.config.sortFn,h=function(e){if(\"auto\"!==o||(n._isSelectOneElement||!e.selected)){var t=n._getTemplate(\"choice\",e,n.config.itemSelectText);s.appendChild(t)}},u=e;\"auto\"!==o||this._isSelectOneElement||(u=e.filter((function(e){return!e.selected})));var d=u.reduce((function(e,t){return t.placeholder?e.placeholderChoices.push(t):e.normalChoices.push(t),e}),{placeholderChoices:[],normalChoices:[]}),p=d.placeholderChoices,f=d.normalChoices;(this.config.shouldSort||this._isSearching)&&f.sort(c);var m=u.length,v=[].concat(p,f);this._isSearching?m=a:l>0&&!i&&(m=l);for(var g=0;g=n){var o=s?this._searchChoices(e):0;this.passedElement.triggerEvent(q,{value:e,resultCount:o})}else r&&(this._isSearching=!1,this._store.dispatch(Se(!0)))}},t._canAddItem=function(e,t){var i=!0,n=S(\"Function\",this.config.addItemText)?this.config.addItemText(t):this.config.addItemText;if(!this._isSelectOneElement){var s=function(e,t,i){return void 0===i&&(i=\"value\"),e.some((function(e){return S(\"String\",t)?e[i]===t.trim():e[i]===t}))}(e,t);this.config.maxItemCount>0&&this.config.maxItemCount<=e.length&&(i=!1,n=S(\"Function\",this.config.maxItemText)?this.config.maxItemText(this.config.maxItemCount):this.config.maxItemText),!this.config.duplicateItemsAllowed&&s&&i&&(i=!1,n=S(\"Function\",this.config.uniqueItemText)?this.config.uniqueItemText(t):this.config.uniqueItemText),this._isTextElement&&this.config.addItems&&i&&S(\"Function\",this.config.addItemFilterFn)&&!this.config.addItemFilterFn(t)&&(i=!1,n=S(\"Function\",this.config.customAddItemText)?this.config.customAddItemText(t):this.config.customAddItemText)}return{response:i,notice:n}},t._ajaxCallback=function(){var e=this;return function(t,i,n){if(t&&i){var s=S(\"Object\",t)?[t]:t;s&&S(\"Array\",s)&&s.length?(e._handleLoadingState(!1),e._setLoading(!0),s.forEach((function(t){t.choices?e._addGroup({group:t,id:t.id||null,valueKey:i,labelKey:n}):e._addChoice({value:x(t,i),label:x(t,n),isSelected:t.selected,isDisabled:t.disabled,customProperties:t.customProperties,placeholder:t.placeholder})})),e._setLoading(!1),e._isSelectOneElement&&e._selectPlaceholderChoice()):e._handleLoadingState(!1)}}},t._searchChoices=function(e){var t=S(\"String\",e)?e.trim():e,i=S(\"String\",this._currentValue)?this._currentValue.trim():this._currentValue;if(t.length<1&&t===i+\" \")return 0;var n=this._store.searchableChoices,r=t,o=[].concat(this.config.searchFields),a=Object.assign(this.config.fuseOptions,{keys:o}),l=new s.a(n,a).search(r);return this._currentValue=t,this._highlightPosition=0,this._isSearching=!0,this._store.dispatch(function(e){return{type:$,results:e}}(l)),l.length},t._addEventListeners=function(){window.delegateEvent.add(\"keyup\",this._onKeyUp),window.delegateEvent.add(\"keydown\",this._onKeyDown),window.delegateEvent.add(\"click\",this._onClick),window.delegateEvent.add(\"touchmove\",this._onTouchMove),window.delegateEvent.add(\"touchend\",this._onTouchEnd),window.delegateEvent.add(\"mousedown\",this._onMouseDown),window.delegateEvent.add(\"mouseover\",this._onMouseOver),this._isSelectOneElement&&(this.containerOuter.element.addEventListener(\"focus\",this._onFocus),this.containerOuter.element.addEventListener(\"blur\",this._onBlur)),this.input.element.addEventListener(\"focus\",this._onFocus),this.input.element.addEventListener(\"blur\",this._onBlur),this.input.element.form&&this.input.element.form.addEventListener(\"reset\",this._onFormReset),this.input.addEventListeners()},t._removeEventListeners=function(){window.delegateEvent.remove(\"keyup\",this._onKeyUp),window.delegateEvent.remove(\"keydown\",this._onKeyDown),window.delegateEvent.remove(\"click\",this._onClick),window.delegateEvent.remove(\"touchmove\",this._onTouchMove),window.delegateEvent.remove(\"touchend\",this._onTouchEnd),window.delegateEvent.remove(\"mousedown\",this._onMouseDown),window.delegateEvent.remove(\"mouseover\",this._onMouseOver),this._isSelectOneElement&&(this.containerOuter.element.removeEventListener(\"focus\",this._onFocus),this.containerOuter.element.removeEventListener(\"blur\",this._onBlur)),this.input.element.removeEventListener(\"focus\",this._onFocus),this.input.element.removeEventListener(\"blur\",this._onBlur),this.input.element.form&&this.input.element.form.removeEventListener(\"reset\",this._onFormReset),this.input.removeEventListeners()},t._onKeyDown=function(e){var t,i=e.target,n=e.keyCode,s=e.ctrlKey,r=e.metaKey;if(i===this.input.element||this.containerOuter.element.contains(i)){var o=this._store.activeItems,a=this.input.isFocussed,l=this.dropdown.isActive,c=this.itemList.hasChildren,h=String.fromCharCode(n),u=ne,d=se,p=re,f=oe,m=ae,v=le,g=ce,_=he,b=ue,y=s||r;!this._isTextElement&&/[a-zA-Z0-9-_ ]/.test(h)&&this.showDropdown();var E=((t={})[f]=this._onAKey,t[p]=this._onEnterKey,t[m]=this._onEscapeKey,t[v]=this._onDirectionKey,t[_]=this._onDirectionKey,t[g]=this._onDirectionKey,t[b]=this._onDirectionKey,t[d]=this._onDeleteKey,t[u]=this._onDeleteKey,t);E[n]&&E[n]({event:e,target:i,keyCode:n,metaKey:r,activeItems:o,hasFocusedInput:a,hasActiveDropdown:l,hasItems:c,hasCtrlDownKeyPressed:y})}},t._onKeyUp=function(e){var t=e.target,i=e.keyCode;if(t===this.input.element){var n=this.input.value,s=this._store.activeItems,r=this._canAddItem(s,n),o=ne,a=se;if(this._isTextElement){if(r.notice&&n){var l=this._getTemplate(\"notice\",r.notice);this.dropdown.element.innerHTML=l.outerHTML,this.showDropdown(!0)}else this.hideDropdown(!0)}else{var c=(i===o||i===a)&&!t.value,h=!this._isTextElement&&this._isSearching,u=this._canSearch&&r.response;c&&h?(this._isSearching=!1,this._store.dispatch(Se(!0))):u&&this._handleSearch(this.input.value)}this._canSearch=this.config.searchEnabled}},t._onAKey=function(e){var t=e.hasItems;e.hasCtrlDownKeyPressed&&t&&(this._canSearch=!1,this.config.removeItems&&!this.input.value&&this.input.element===document.activeElement&&this.highlightAll())},t._onEnterKey=function(e){var t=e.event,i=e.target,n=e.activeItems,s=e.hasActiveDropdown,r=re,o=i.hasAttribute(\"data-button\");if(this._isTextElement&&i.value){var a=this.input.value;this._canAddItem(n,a).response&&(this.hideDropdown(!0),this._addItem({value:a}),this._triggerChange(a),this.clearInput())}if(o&&(this._handleButtonAction(n,i),t.preventDefault()),s){var l=this.dropdown.getChild(\".\"+this.config.classNames.highlightedState);l&&(n[0]&&(n[0].keyCode=r),this._handleChoiceAction(n,l)),t.preventDefault()}else this._isSelectOneElement&&(this.showDropdown(),t.preventDefault())},t._onEscapeKey=function(e){e.hasActiveDropdown&&(this.hideDropdown(!0),this.containerOuter.focus())},t._onDirectionKey=function(e){var t=e.event,i=e.hasActiveDropdown,n=e.keyCode,s=e.metaKey,r=ce,o=he,a=ue;if(i||this._isSelectOneElement){this.showDropdown(),this._canSearch=!1;var l,c=n===r||n===a?1:-1;if(s||n===a||n===o)l=c>0?Array.from(this.dropdown.element.querySelectorAll(\"[data-choice-selectable]\")).pop():this.dropdown.element.querySelector(\"[data-choice-selectable]\");else{var h=this.dropdown.element.querySelector(\".\"+this.config.classNames.highlightedState);l=h?function(e,t,i){if(void 0===i&&(i=1),e&&t){var n=e.parentNode.parentNode,s=Array.from(n.querySelectorAll(t)),r=s.indexOf(e);return s[r+(i>0?1:-1)]}}(h,\"[data-choice-selectable]\",c):this.dropdown.element.querySelector(\"[data-choice-selectable]\")}l&&(function(e,t,i){if(void 0===i&&(i=1),e)return i>0?t.scrollTop+t.offsetHeight>=e.offsetTop+e.offsetHeight:e.offsetTop>=t.scrollTop}(l,this.choiceList.element,c)||this.choiceList.scrollToChoice(l,c),this._highlightChoice(l)),t.preventDefault()}},t._onDeleteKey=function(e){var t=e.event,i=e.target,n=e.hasFocusedInput,s=e.activeItems;!n||i.value||this._isSelectOneElement||(this._handleBackspace(s),t.preventDefault())},t._onTouchMove=function(){this._wasTap&&(this._wasTap=!1)},t._onTouchEnd=function(e){var t=(e||e.touches[0]).target;this._wasTap&&this.containerOuter.element.contains(t)&&((t===this.containerOuter.element||t===this.containerInner.element)&&(this._isTextElement?this.input.focus():this._isSelectMultipleElement&&this.showDropdown()),e.stopPropagation());this._wasTap=!0},t._onMouseDown=function(e){var t=e.target,i=e.shiftKey;if(this.choiceList.element.contains(t)&&navigator.userAgent.match(/Trident/)&&navigator.userAgent.match(/rv[ :]11/)&&(this._isScrollingOnIe=!0),this.containerOuter.element.contains(t)&&t!==this.input.element){var n=this._store.activeItems,s=i,r=w(t,\"data-button\"),o=w(t,\"data-item\"),a=w(t,\"data-choice\");r?this._handleButtonAction(n,r):o?this._handleItemAction(n,o,s):a&&this._handleChoiceAction(n,a),e.preventDefault()}},t._onMouseOver=function(e){var t=e.target;(t===this.dropdown||this.dropdown.element.contains(t))&&t.hasAttribute(\"data-choice\")&&this._highlightChoice(t)},t._onClick=function(e){var t=e.target;this.containerOuter.element.contains(t)?this.dropdown.isActive||this.containerOuter.isDisabled?this._isSelectOneElement&&t!==this.input.element&&!this.dropdown.element.contains(t)&&this.hideDropdown():this._isTextElement?document.activeElement!==this.input.element&&this.input.focus():(this.showDropdown(),this.containerOuter.focus()):(this._store.highlightedActiveItems.length>0&&this.unhighlightAll(),this.containerOuter.removeFocusState(),this.hideDropdown(!0))},t._onFocus=function(e){var t=this,i=e.target;this.containerOuter.element.contains(i)&&{text:function(){i===t.input.element&&t.containerOuter.addFocusState()},\"select-one\":function(){t.containerOuter.addFocusState(),i===t.input.element&&t.showDropdown(!0)},\"select-multiple\":function(){i===t.input.element&&(t.showDropdown(!0),t.containerOuter.addFocusState())}}[this.passedElement.element.type]()},t._onBlur=function(e){var t=this,i=e.target;if(this.containerOuter.element.contains(i)&&!this._isScrollingOnIe){var n=this._store.activeItems.some((function(e){return e.highlighted}));({text:function(){i===t.input.element&&(t.containerOuter.removeFocusState(),n&&t.unhighlightAll(),t.hideDropdown(!0))},\"select-one\":function(){t.containerOuter.removeFocusState(),(i===t.input.element||i===t.containerOuter.element&&!t._canSearch)&&t.hideDropdown(!0)},\"select-multiple\":function(){i===t.input.element&&(t.containerOuter.removeFocusState(),t.hideDropdown(!0),n&&t.unhighlightAll())}})[this.passedElement.element.type]()}else this._isScrollingOnIe=!1,this.input.element.focus()},t._onFormReset=function(){this._store.dispatch({type:\"RESET_TO\",state:this._initialState})},t._highlightChoice=function(e){var t=this;void 0===e&&(e=null);var i=Array.from(this.dropdown.element.querySelectorAll(\"[data-choice-selectable]\"));if(i.length){var n=e;Array.from(this.dropdown.element.querySelectorAll(\".\"+this.config.classNames.highlightedState)).forEach((function(e){e.classList.remove(t.config.classNames.highlightedState),e.setAttribute(\"aria-selected\",\"false\")})),n?this._highlightPosition=i.indexOf(n):(n=i.length>this._highlightPosition?i[this._highlightPosition]:i[i.length-1])||(n=i[0]),n.classList.add(this.config.classNames.highlightedState),n.setAttribute(\"aria-selected\",\"true\"),this.passedElement.triggerEvent(X,{el:n}),this.dropdown.isActive&&(this.input.setActiveDescendant(n.id),this.containerOuter.setActiveDescendant(n.id))}},t._addItem=function(e){var t=e.value,i=e.label,n=void 0===i?null:i,s=e.choiceId,r=void 0===s?-1:s,o=e.groupId,a=void 0===o?-1:o,l=e.customProperties,c=void 0===l?null:l,h=e.placeholder,u=void 0!==h&&h,d=e.keyCode,p=void 0===d?null:d,f=S(\"String\",t)?t.trim():t,m=p,v=c,g=this._store.items,_=n||f,b=parseInt(r,10)||-1,y=a>=0?this._store.getGroupById(a):null,E=g?g.length+1:1;return this.config.prependValue&&(f=this.config.prependValue+f.toString()),this.config.appendValue&&(f+=this.config.appendValue.toString()),this._store.dispatch(function(e){var t=e.value,i=e.label,n=e.id,s=e.choiceId,r=e.groupId,o=e.customProperties,a=e.placeholder,l=e.keyCode;return{type:ee,value:t,label:i,id:n,choiceId:s,groupId:r,customProperties:o,placeholder:a,keyCode:l}}({value:f,label:_,id:E,choiceId:b,groupId:a,customProperties:c,placeholder:u,keyCode:m})),this._isSelectOneElement&&this.removeActiveItems(E),this.passedElement.triggerEvent(W,{id:E,value:f,label:_,customProperties:v,groupValue:y&&y.value?y.value:void 0,keyCode:m}),this},t._removeItem=function(e){if(!e||!S(\"Object\",e))return this;var t=e.id,i=e.value,n=e.label,s=e.choiceId,r=e.groupId,o=r>=0?this._store.getGroupById(r):null;return this._store.dispatch(function(e,t){return{type:te,id:e,choiceId:t}}(t,s)),o&&o.value?this.passedElement.triggerEvent(U,{id:t,value:i,label:n,groupValue:o.value}):this.passedElement.triggerEvent(U,{id:t,value:i,label:n}),this},t._addChoice=function(e){var t=e.value,i=e.label,n=void 0===i?null:i,s=e.isSelected,r=void 0!==s&&s,o=e.isDisabled,a=void 0!==o&&o,l=e.groupId,c=void 0===l?-1:l,h=e.customProperties,u=void 0===h?null:h,d=e.placeholder,p=void 0!==d&&d,f=e.keyCode,m=void 0===f?null:f;if(null!=t){var v=this._store.choices,g=n||t,_=v?v.length+1:1,b=this._baseId+\"-\"+this._idNames.itemChoice+\"-\"+_;this._store.dispatch(function(e){var t=e.value,i=e.label,n=e.id,s=e.groupId,r=e.disabled,o=e.elementId,a=e.customProperties,l=e.placeholder,c=e.keyCode;return{type:Y,value:t,label:i,id:n,groupId:s,disabled:r,elementId:o,customProperties:a,placeholder:l,keyCode:c}}({value:t,label:g,id:_,groupId:c,disabled:a,elementId:b,customProperties:u,placeholder:p,keyCode:m})),r&&this._addItem({value:t,label:g,choiceId:_,customProperties:u,placeholder:p,keyCode:m})}},t._addGroup=function(e){var t=this,i=e.group,n=e.id,s=e.valueKey,r=void 0===s?\"value\":s,o=e.labelKey,a=void 0===o?\"label\":o,l=S(\"Object\",i)?i.choices:Array.from(i.getElementsByTagName(\"OPTION\")),c=n||Math.floor((new Date).valueOf()*Math.random()),h=!!i.disabled&&i.disabled;if(l){this._store.dispatch(we(i.label,c,!0,h));l.forEach((function(e){var i=e.disabled||e.parentNode&&e.parentNode.disabled;t._addChoice({value:e[r],label:S(\"Object\",e)?e[a]:e.innerHTML,isSelected:e.selected,isDisabled:i,groupId:c,customProperties:e.customProperties,placeholder:e.placeholder})}))}else this._store.dispatch(we(i.label,i.id,!1,i.disabled))},t._getTemplate=function(e){var t;if(!e)return null;for(var i=this.config,n=i.templates,s=i.classNames,r=arguments.length,o=new Array(r>1?r-1:0),a=1;a.\n\n // RequireJS\n if (typeof define === 'function' && define.amd) {\n define(smoothScroll);\n\n // CommonJS\n } else if (typeof exports === 'object' && typeof module === 'object') {\n module.exports = smoothScroll();\n\n } else {\n root.smoothScroll = smoothScroll();\n }\n\n})(this, function(){\n'use strict';\n\n// Do not initialize smoothScroll when running server side, handle it in client:\nif (typeof window !== 'object') return;\n\n// We do not want this script to be applied in browsers that do not support those\n// That means no smoothscroll on IE9 and below.\nif(document.querySelectorAll === void 0 || window.pageYOffset === void 0 || history.pushState === void 0) { return; }\n\n// Get the top position of an element in the document\nvar getTop = function(element, start) {\n // return value of html.getBoundingClientRect().top ... IE : 0, other browsers : -pageYOffset\n if(element.nodeName === 'HTML') return -start\n return element.getBoundingClientRect().top + start\n}\n// ease in out function thanks to:\n// http://blog.greweb.fr/2012/02/bezier-curve-based-easing-functions-from-concept-to-implementation/\nvar easeInOutCubic = function (t) { return t<.5 ? 4*t*t*t : (t-1)*(2*t-2)*(2*t-2)+1 }\n\n// calculate the scroll position we should be in\n// given the start and end point of the scroll\n// the time elapsed from the beginning of the scroll\n// and the total duration of the scroll (default 500ms)\nvar position = function(start, end, elapsed, duration) {\n if (elapsed > duration) return end;\n return start + (end - start) * easeInOutCubic(elapsed / duration); // <-- you can change the easing funtion there\n // return start + (end - start) * (elapsed / duration); // <-- this would give a linear scroll\n}\n\n// we use requestAnimationFrame to be called by the browser before every repaint\n// if the first argument is an element then scroll to the top of this element\n// if the first argument is numeric then scroll to this location\n// if the callback exist, it is called when the scrolling is finished\n// if context is set then scroll that element, else scroll window\nvar smoothScroll = function(el, duration, callback, context){\n duration = duration || 500;\n context = context || window;\n var start = context.scrollTop || window.pageYOffset;\n\n if (typeof el === 'number') {\n var end = parseInt(el);\n } else {\n var end = getTop(el, start);\n }\n\n var clock = Date.now();\n var requestAnimationFrame = window.requestAnimationFrame ||\n window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame ||\n function(fn){window.setTimeout(fn, 15);};\n\n var step = function(){\n var elapsed = Date.now() - clock;\n if (context !== window) {\n context.scrollTop = position(start, end, elapsed, duration);\n }\n else {\n window.scroll(0, position(start, end, elapsed, duration));\n }\n\n if (elapsed > duration) {\n if (typeof callback === 'function') {\n callback(el);\n }\n } else {\n requestAnimationFrame(step);\n }\n }\n step();\n}\n\nvar linkHandler = function(ev) {\n if (!ev.defaultPrevented) {\n ev.preventDefault();\n\n if (location.hash !== this.hash) window.history.pushState(null, null, this.hash)\n // using the history api to solve issue #1 - back doesn't work\n // most browser don't update :target when the history api is used:\n // THIS IS A BUG FROM THE BROWSERS.\n // change the scrolling duration in this call\n var node = document.getElementById(this.hash.substring(1))\n if (!node) return; // Do not scroll to non-existing node\n\n smoothScroll(node, 500, function (el) {\n location.replace('#' + el.id)\n // this will cause the :target to be activated.\n });\n }\n}\n\n// We look for all the internal links in the documents and attach the smoothscroll function\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n var internal = document.querySelectorAll('a[href^=\"#\"]:not([href=\"#\"])'), a;\n for(var i=internal.length; a=internal[--i];){\n a.addEventListener(\"click\", linkHandler, false);\n }\n});\n\n// return smoothscroll API\nreturn smoothScroll;\n\n});\n","/*!\r\n * OverlayScrollbars\r\n * https://github.com/KingSora/OverlayScrollbars\r\n *\r\n * Version: 1.13.0\r\n *\r\n * Copyright KingSora | Rene Haas.\r\n * https://github.com/KingSora\r\n *\r\n * Released under the MIT license.\r\n * Date: 02.08.2020\r\n */\r\n\r\n(function (global, factory) {\r\n if (typeof define === 'function' && define.amd)\r\n define(function () { return factory(global, global.document, undefined); });\r\n else if (typeof module === 'object' && typeof module.exports === 'object')\r\n module.exports = factory(global, global.document, undefined);\r\n else\r\n factory(global, global.document, undefined);\r\n}(typeof window !== 'undefined' ? window : this,\r\n function (window, document, undefined) {\r\n 'use strict';\r\n var PLUGINNAME = 'OverlayScrollbars';\r\n var TYPES = {\r\n o: 'object',\r\n f: 'function',\r\n a: 'array',\r\n s: 'string',\r\n b: 'boolean',\r\n n: 'number',\r\n u: 'undefined',\r\n z: 'null'\r\n //d : 'date',\r\n //e : 'error',\r\n //r : 'regexp',\r\n //y : 'symbol'\r\n };\r\n var LEXICON = {\r\n c: 'class',\r\n s: 'style',\r\n i: 'id',\r\n l: 'length',\r\n p: 'prototype',\r\n ti: 'tabindex',\r\n oH: 'offsetHeight',\r\n cH: 'clientHeight',\r\n sH: 'scrollHeight',\r\n oW: 'offsetWidth',\r\n cW: 'clientWidth',\r\n sW: 'scrollWidth',\r\n hOP: 'hasOwnProperty',\r\n bCR: 'getBoundingClientRect'\r\n };\r\n var VENDORS = (function () {\r\n //https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n var jsCache = {};\r\n var cssCache = {};\r\n var cssPrefixes = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\n var jsPrefixes = ['WebKit', 'Moz', 'O', 'MS'];\r\n function firstLetterToUpper(str) {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n }\r\n\r\n return {\r\n _cssPrefixes: cssPrefixes,\r\n _jsPrefixes: jsPrefixes,\r\n _cssProperty: function (name) {\r\n var result = cssCache[name];\r\n\r\n if (cssCache[LEXICON.hOP](name))\r\n return result;\r\n\r\n var uppercasedName = firstLetterToUpper(name);\r\n var elmStyle = document.createElement('div')[LEXICON.s];\r\n var resultPossibilities;\r\n var i = 0;\r\n var v;\r\n var currVendorWithoutDashes;\r\n\r\n for (; i < cssPrefixes.length; i++) {\r\n currVendorWithoutDashes = cssPrefixes[i].replace(/-/g, '');\r\n resultPossibilities = [\r\n name, //transition\r\n cssPrefixes[i] + name, //-webkit-transition\r\n currVendorWithoutDashes + uppercasedName, //webkitTransition\r\n firstLetterToUpper(currVendorWithoutDashes) + uppercasedName //WebkitTransition\r\n ];\r\n for (v = 0; v < resultPossibilities[LEXICON.l]; v++) {\r\n if (elmStyle[resultPossibilities[v]] !== undefined) {\r\n result = resultPossibilities[v];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n cssCache[name] = result;\r\n return result;\r\n },\r\n _cssPropertyValue: function (property, values, suffix) {\r\n var name = property + ' ' + values;\r\n var result = cssCache[name];\r\n\r\n if (cssCache[LEXICON.hOP](name))\r\n return result;\r\n\r\n var dummyStyle = document.createElement('div')[LEXICON.s];\r\n var possbleValues = values.split(' ');\r\n var preparedSuffix = suffix || '';\r\n var i = 0;\r\n var v = -1;\r\n var prop;\r\n\r\n for (; i < possbleValues[LEXICON.l]; i++) {\r\n for (; v < VENDORS._cssPrefixes[LEXICON.l]; v++) {\r\n prop = v < 0 ? possbleValues[i] : VENDORS._cssPrefixes[v] + possbleValues[i];\r\n dummyStyle.cssText = property + ':' + prop + preparedSuffix;\r\n if (dummyStyle[LEXICON.l]) {\r\n result = prop;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n cssCache[name] = result;\r\n return result;\r\n },\r\n _jsAPI: function (name, isInterface, fallback) {\r\n var i = 0;\r\n var result = jsCache[name];\r\n\r\n if (!jsCache[LEXICON.hOP](name)) {\r\n result = window[name];\r\n for (; i < jsPrefixes[LEXICON.l]; i++)\r\n result = result || window[(isInterface ? jsPrefixes[i] : jsPrefixes[i].toLowerCase()) + firstLetterToUpper(name)];\r\n jsCache[name] = result;\r\n }\r\n return result || fallback;\r\n }\r\n }\r\n })();\r\n var COMPATIBILITY = (function () {\r\n function windowSize(x) {\r\n return x ? window.innerWidth || document.documentElement[LEXICON.cW] || document.body[LEXICON.cW] : window.innerHeight || document.documentElement[LEXICON.cH] || document.body[LEXICON.cH];\r\n }\r\n function bind(func, thisObj) {\r\n if (typeof func != TYPES.f) {\r\n throw \"Can't bind function!\";\r\n // closest thing possible to the ECMAScript 5\r\n // internal IsCallable function\r\n //throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\r\n }\r\n var proto = LEXICON.p;\r\n var aArgs = Array[proto].slice.call(arguments, 2);\r\n var fNOP = function () { };\r\n var fBound = function () { return func.apply(this instanceof fNOP ? this : thisObj, aArgs.concat(Array[proto].slice.call(arguments))); };\r\n\r\n if (func[proto])\r\n fNOP[proto] = func[proto]; // Function.prototype doesn't have a prototype property\r\n fBound[proto] = new fNOP();\r\n\r\n return fBound;\r\n }\r\n\r\n return {\r\n /**\r\n * Gets the current window width.\r\n * @returns {Number|number} The current window width in pixel.\r\n */\r\n wW: bind(windowSize, 0, true),\r\n\r\n /**\r\n * Gets the current window height.\r\n * @returns {Number|number} The current window height in pixel.\r\n */\r\n wH: bind(windowSize, 0),\r\n\r\n /**\r\n * Gets the MutationObserver Object or undefined if not supported.\r\n * @returns {MutationObserver|*|undefined} The MutationsObserver Object or undefined.\r\n */\r\n mO: bind(VENDORS._jsAPI, 0, 'MutationObserver', true),\r\n\r\n /**\r\n * Gets the ResizeObserver Object or undefined if not supported.\r\n * @returns {MutationObserver|*|undefined} The ResizeObserver Object or undefined.\r\n */\r\n rO: bind(VENDORS._jsAPI, 0, 'ResizeObserver', true),\r\n\r\n /**\r\n * Gets the RequestAnimationFrame method or it's corresponding polyfill.\r\n * @returns {*|Function} The RequestAnimationFrame method or it's corresponding polyfill.\r\n */\r\n rAF: bind(VENDORS._jsAPI, 0, 'requestAnimationFrame', false, function (func) { return window.setTimeout(func, 1000 / 60); }),\r\n\r\n /**\r\n * Gets the CancelAnimationFrame method or it's corresponding polyfill.\r\n * @returns {*|Function} The CancelAnimationFrame method or it's corresponding polyfill.\r\n */\r\n cAF: bind(VENDORS._jsAPI, 0, 'cancelAnimationFrame', false, function (id) { return window.clearTimeout(id); }),\r\n\r\n /**\r\n * Gets the current time.\r\n * @returns {number} The current time.\r\n */\r\n now: function () {\r\n return Date.now && Date.now() || new Date().getTime();\r\n },\r\n\r\n /**\r\n * Stops the propagation of the given event.\r\n * @param event The event of which the propagation shall be stoped.\r\n */\r\n stpP: function (event) {\r\n if (event.stopPropagation)\r\n event.stopPropagation();\r\n else\r\n event.cancelBubble = true;\r\n },\r\n\r\n /**\r\n * Prevents the default action of the given event.\r\n * @param event The event of which the default action shall be prevented.\r\n */\r\n prvD: function (event) {\r\n if (event.preventDefault && event.cancelable)\r\n event.preventDefault();\r\n else\r\n event.returnValue = false;\r\n },\r\n\r\n /**\r\n * Gets the pageX and pageY values of the given mouse event.\r\n * @param event The mouse event of which the pageX and pageX shall be got.\r\n * @returns {{x: number, y: number}} x = pageX value, y = pageY value.\r\n */\r\n page: function (event) {\r\n event = event.originalEvent || event;\r\n\r\n var strPage = 'page';\r\n var strClient = 'client';\r\n var strX = 'X';\r\n var strY = 'Y';\r\n var target = event.target || event.srcElement || document;\r\n var eventDoc = target.ownerDocument || document;\r\n var doc = eventDoc.documentElement;\r\n var body = eventDoc.body;\r\n\r\n //if touch event return return pageX/Y of it\r\n if (event.touches !== undefined) {\r\n var touch = event.touches[0];\r\n return {\r\n x: touch[strPage + strX],\r\n y: touch[strPage + strY]\r\n }\r\n }\r\n\r\n // Calculate pageX/Y if not native supported\r\n if (!event[strPage + strX] && event[strClient + strX] && event[strClient + strX] != null) {\r\n\r\n return {\r\n x: event[strClient + strX] +\r\n (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\r\n (doc && doc.clientLeft || body && body.clientLeft || 0),\r\n y: event[strClient + strY] +\r\n (doc && doc.scrollTop || body && body.scrollTop || 0) -\r\n (doc && doc.clientTop || body && body.clientTop || 0)\r\n }\r\n }\r\n return {\r\n x: event[strPage + strX],\r\n y: event[strPage + strY]\r\n };\r\n },\r\n\r\n /**\r\n * Gets the clicked mouse button of the given mouse event.\r\n * @param event The mouse event of which the clicked button shal be got.\r\n * @returns {number} The number of the clicked mouse button. (0 : none | 1 : leftButton | 2 : middleButton | 3 : rightButton)\r\n */\r\n mBtn: function (event) {\r\n var button = event.button;\r\n if (!event.which && button !== undefined)\r\n return (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));\r\n else\r\n return event.which;\r\n },\r\n\r\n /**\r\n * Checks whether a item is in the given array and returns its index.\r\n * @param item The item of which the position in the array shall be determined.\r\n * @param arr The array.\r\n * @returns {number} The zero based index of the item or -1 if the item isn't in the array.\r\n */\r\n inA: function (item, arr) {\r\n for (var i = 0; i < arr[LEXICON.l]; i++)\r\n //Sometiems in IE a \"SCRIPT70\" Permission denied error occurs if HTML elements in a iFrame are compared\r\n try {\r\n if (arr[i] === item)\r\n return i;\r\n }\r\n catch (e) { }\r\n return -1;\r\n },\r\n\r\n /**\r\n * Returns true if the given value is a array.\r\n * @param arr The potential array.\r\n * @returns {boolean} True if the given value is a array, false otherwise.\r\n */\r\n isA: function (arr) {\r\n var def = Array.isArray;\r\n return def ? def(arr) : this.type(arr) == TYPES.a;\r\n },\r\n\r\n /**\r\n * Determine the internal JavaScript [[Class]] of the given object.\r\n * @param obj The object of which the type shall be determined.\r\n * @returns {string} The type of the given object.\r\n */\r\n type: function (obj) {\r\n if (obj === undefined)\r\n return obj + '';\r\n if (obj === null)\r\n return obj + '';\r\n return Object[LEXICON.p].toString.call(obj).replace(/^\\[object (.+)\\]$/, '$1').toLowerCase();\r\n },\r\n\r\n\r\n bind: bind\r\n\r\n /**\r\n * Gets the vendor-prefixed CSS property by the given name.\r\n * For example the given name is \"transform\" and you're using a old Firefox browser then the returned value would be \"-moz-transform\".\r\n * If the browser doesn't need a vendor-prefix, then the returned string is the given name.\r\n * If the browser doesn't support the given property name at all (not even with a vendor-prefix) the returned value is null.\r\n * @param propName The unprefixed CSS property name.\r\n * @returns {string|null} The vendor-prefixed CSS property or null if the browser doesn't support the given CSS property.\r\n\r\n cssProp: function(propName) {\r\n return VENDORS._cssProperty(propName);\r\n }\r\n */\r\n }\r\n })();\r\n\r\n\r\n var MATH = Math;\r\n var JQUERY = window.jQuery;\r\n var EASING = (function () {\r\n var _easingsMath = {\r\n p: MATH.PI,\r\n c: MATH.cos,\r\n s: MATH.sin,\r\n w: MATH.pow,\r\n t: MATH.sqrt,\r\n n: MATH.asin,\r\n a: MATH.abs,\r\n o: 1.70158\r\n };\r\n\r\n /*\r\n x : current percent (0 - 1),\r\n t : current time (duration * percent),\r\n b : start value (from),\r\n c : end value (to),\r\n d : duration\r\n\r\n easingName : function(x, t, b, c, d) { return easedValue; }\r\n */\r\n\r\n return {\r\n swing: function (x, t, b, c, d) {\r\n return 0.5 - _easingsMath.c(x * _easingsMath.p) / 2;\r\n },\r\n linear: function (x, t, b, c, d) {\r\n return x;\r\n },\r\n easeInQuad: function (x, t, b, c, d) {\r\n return c * (t /= d) * t + b;\r\n },\r\n easeOutQuad: function (x, t, b, c, d) {\r\n return -c * (t /= d) * (t - 2) + b;\r\n },\r\n easeInOutQuad: function (x, t, b, c, d) {\r\n return ((t /= d / 2) < 1) ? c / 2 * t * t + b : -c / 2 * ((--t) * (t - 2) - 1) + b;\r\n },\r\n easeInCubic: function (x, t, b, c, d) {\r\n return c * (t /= d) * t * t + b;\r\n },\r\n easeOutCubic: function (x, t, b, c, d) {\r\n return c * ((t = t / d - 1) * t * t + 1) + b;\r\n },\r\n easeInOutCubic: function (x, t, b, c, d) {\r\n return ((t /= d / 2) < 1) ? c / 2 * t * t * t + b : c / 2 * ((t -= 2) * t * t + 2) + b;\r\n },\r\n easeInQuart: function (x, t, b, c, d) {\r\n return c * (t /= d) * t * t * t + b;\r\n },\r\n easeOutQuart: function (x, t, b, c, d) {\r\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\r\n },\r\n easeInOutQuart: function (x, t, b, c, d) {\r\n return ((t /= d / 2) < 1) ? c / 2 * t * t * t * t + b : -c / 2 * ((t -= 2) * t * t * t - 2) + b;\r\n },\r\n easeInQuint: function (x, t, b, c, d) {\r\n return c * (t /= d) * t * t * t * t + b;\r\n },\r\n easeOutQuint: function (x, t, b, c, d) {\r\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\r\n },\r\n easeInOutQuint: function (x, t, b, c, d) {\r\n return ((t /= d / 2) < 1) ? c / 2 * t * t * t * t * t + b : c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\r\n },\r\n easeInSine: function (x, t, b, c, d) {\r\n return -c * _easingsMath.c(t / d * (_easingsMath.p / 2)) + c + b;\r\n },\r\n easeOutSine: function (x, t, b, c, d) {\r\n return c * _easingsMath.s(t / d * (_easingsMath.p / 2)) + b;\r\n },\r\n easeInOutSine: function (x, t, b, c, d) {\r\n return -c / 2 * (_easingsMath.c(_easingsMath.p * t / d) - 1) + b;\r\n },\r\n easeInExpo: function (x, t, b, c, d) {\r\n return (t == 0) ? b : c * _easingsMath.w(2, 10 * (t / d - 1)) + b;\r\n },\r\n easeOutExpo: function (x, t, b, c, d) {\r\n return (t == d) ? b + c : c * (-_easingsMath.w(2, -10 * t / d) + 1) + b;\r\n },\r\n easeInOutExpo: function (x, t, b, c, d) {\r\n if (t == 0) return b;\r\n if (t == d) return b + c;\r\n if ((t /= d / 2) < 1) return c / 2 * _easingsMath.w(2, 10 * (t - 1)) + b;\r\n return c / 2 * (-_easingsMath.w(2, -10 * --t) + 2) + b;\r\n },\r\n easeInCirc: function (x, t, b, c, d) {\r\n return -c * (_easingsMath.t(1 - (t /= d) * t) - 1) + b;\r\n },\r\n easeOutCirc: function (x, t, b, c, d) {\r\n return c * _easingsMath.t(1 - (t = t / d - 1) * t) + b;\r\n },\r\n easeInOutCirc: function (x, t, b, c, d) {\r\n return ((t /= d / 2) < 1) ? -c / 2 * (_easingsMath.t(1 - t * t) - 1) + b : c / 2 * (_easingsMath.t(1 - (t -= 2) * t) + 1) + b;\r\n },\r\n easeInElastic: function (x, t, b, c, d) {\r\n var s = _easingsMath.o; var p = 0; var a = c;\r\n if (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * .3;\r\n if (a < _easingsMath.a(c)) { a = c; s = p / 4; }\r\n else s = p / (2 * _easingsMath.p) * _easingsMath.n(c / a);\r\n return -(a * _easingsMath.w(2, 10 * (t -= 1)) * _easingsMath.s((t * d - s) * (2 * _easingsMath.p) / p)) + b;\r\n },\r\n easeOutElastic: function (x, t, b, c, d) {\r\n var s = _easingsMath.o; var p = 0; var a = c;\r\n if (t == 0) return b;\r\n if ((t /= d) == 1) return b + c;\r\n if (!p) p = d * .3;\r\n if (a < _easingsMath.a(c)) { a = c; s = p / 4; }\r\n else s = p / (2 * _easingsMath.p) * _easingsMath.n(c / a);\r\n return a * _easingsMath.w(2, -10 * t) * _easingsMath.s((t * d - s) * (2 * _easingsMath.p) / p) + c + b;\r\n },\r\n easeInOutElastic: function (x, t, b, c, d) {\r\n var s = _easingsMath.o; var p = 0; var a = c;\r\n if (t == 0) return b;\r\n if ((t /= d / 2) == 2) return b + c;\r\n if (!p) p = d * (.3 * 1.5);\r\n if (a < _easingsMath.a(c)) { a = c; s = p / 4; }\r\n else s = p / (2 * _easingsMath.p) * _easingsMath.n(c / a);\r\n if (t < 1) return -.5 * (a * _easingsMath.w(2, 10 * (t -= 1)) * _easingsMath.s((t * d - s) * (2 * _easingsMath.p) / p)) + b;\r\n return a * _easingsMath.w(2, -10 * (t -= 1)) * _easingsMath.s((t * d - s) * (2 * _easingsMath.p) / p) * .5 + c + b;\r\n },\r\n easeInBack: function (x, t, b, c, d, s) {\r\n s = s || _easingsMath.o;\r\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\r\n },\r\n easeOutBack: function (x, t, b, c, d, s) {\r\n s = s || _easingsMath.o;\r\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\r\n },\r\n easeInOutBack: function (x, t, b, c, d, s) {\r\n s = s || _easingsMath.o;\r\n return ((t /= d / 2) < 1) ? c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b : c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\r\n },\r\n easeInBounce: function (x, t, b, c, d) {\r\n return c - this.easeOutBounce(x, d - t, 0, c, d) + b;\r\n },\r\n easeOutBounce: function (x, t, b, c, d) {\r\n var o = 7.5625;\r\n if ((t /= d) < (1 / 2.75)) {\r\n return c * (o * t * t) + b;\r\n } else if (t < (2 / 2.75)) {\r\n return c * (o * (t -= (1.5 / 2.75)) * t + .75) + b;\r\n } else if (t < (2.5 / 2.75)) {\r\n return c * (o * (t -= (2.25 / 2.75)) * t + .9375) + b;\r\n } else {\r\n return c * (o * (t -= (2.625 / 2.75)) * t + .984375) + b;\r\n }\r\n },\r\n easeInOutBounce: function (x, t, b, c, d) {\r\n return (t < d / 2) ? this.easeInBounce(x, t * 2, 0, c, d) * .5 + b : this.easeOutBounce(x, t * 2 - d, 0, c, d) * .5 + c * .5 + b;\r\n }\r\n };\r\n /*\r\n *\r\n * TERMS OF USE - EASING EQUATIONS\r\n * \r\n * Open source under the BSD License. \r\n * \r\n * Copyright © 2001 Robert Penner\r\n * All rights reserved.\r\n * \r\n * Redistribution and use in source and binary forms, with or without modification, \r\n * are permitted provided that the following conditions are met:\r\n * \r\n * Redistributions of source code must retain the above copyright notice, this list of \r\n * conditions and the following disclaimer.\r\n * Redistributions in binary form must reproduce the above copyright notice, this list \r\n * of conditions and the following disclaimer in the documentation and/or other materials \r\n * provided with the distribution.\r\n * \r\n * Neither the name of the author nor the names of contributors may be used to endorse \r\n * or promote products derived from this software without specific prior written permission.\r\n * \r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \r\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\r\n * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \r\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \r\n * OF THE POSSIBILITY OF SUCH DAMAGE. \r\n *\r\n */\r\n })();\r\n var FRAMEWORK = (function () {\r\n var _rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\r\n var _strSpace = ' ';\r\n var _strEmpty = '';\r\n var _strScrollLeft = 'scrollLeft';\r\n var _strScrollTop = 'scrollTop';\r\n var _animations = [];\r\n var _type = COMPATIBILITY.type;\r\n var _cssNumber = {\r\n animationIterationCount: true,\r\n columnCount: true,\r\n fillOpacity: true,\r\n flexGrow: true,\r\n flexShrink: true,\r\n fontWeight: true,\r\n lineHeight: true,\r\n opacity: true,\r\n order: true,\r\n orphans: true,\r\n widows: true,\r\n zIndex: true,\r\n zoom: true\r\n };\r\n\r\n function extend() {\r\n var src, copyIsArray, copy, name, options, clone, target = arguments[0] || {},\r\n i = 1,\r\n length = arguments[LEXICON.l],\r\n deep = false;\r\n\r\n // Handle a deep copy situation\r\n if (_type(target) == TYPES.b) {\r\n deep = target;\r\n target = arguments[1] || {};\r\n // skip the boolean and the target\r\n i = 2;\r\n }\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if (_type(target) != TYPES.o && !_type(target) == TYPES.f) {\r\n target = {};\r\n }\r\n\r\n // extend jQuery itself if only one argument is passed\r\n if (length === i) {\r\n target = FakejQuery;\r\n --i;\r\n }\r\n\r\n for (; i < length; i++) {\r\n // Only deal with non-null/undefined values\r\n if ((options = arguments[i]) != null) {\r\n // Extend the base object\r\n for (name in options) {\r\n src = target[name];\r\n copy = options[name];\r\n\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n continue;\r\n }\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (deep && copy && (isPlainObject(copy) || (copyIsArray = COMPATIBILITY.isA(copy)))) {\r\n if (copyIsArray) {\r\n copyIsArray = false;\r\n clone = src && COMPATIBILITY.isA(src) ? src : [];\r\n\r\n } else {\r\n clone = src && isPlainObject(src) ? src : {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[name] = extend(deep, clone, copy);\r\n\r\n // Don't bring in undefined values\r\n } else if (copy !== undefined) {\r\n target[name] = copy;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Return the modified object\r\n return target;\r\n };\r\n\r\n function inArray(item, arr, fromIndex) {\r\n for (var i = fromIndex || 0; i < arr[LEXICON.l]; i++)\r\n if (arr[i] === item)\r\n return i;\r\n return -1;\r\n }\r\n\r\n function isFunction(obj) {\r\n return _type(obj) == TYPES.f;\r\n };\r\n\r\n function isEmptyObject(obj) {\r\n for (var name in obj)\r\n return false;\r\n return true;\r\n };\r\n\r\n function isPlainObject(obj) {\r\n if (!obj || _type(obj) != TYPES.o)\r\n return false;\r\n\r\n var key;\r\n var proto = LEXICON.p;\r\n var hasOwnProperty = Object[proto].hasOwnProperty;\r\n var hasOwnConstructor = hasOwnProperty.call(obj, 'constructor');\r\n var hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf');\r\n\r\n if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n\r\n for (key in obj) { /**/ }\r\n\r\n return _type(key) == TYPES.u || hasOwnProperty.call(obj, key);\r\n };\r\n\r\n function each(obj, callback) {\r\n var i = 0;\r\n\r\n if (isArrayLike(obj)) {\r\n for (; i < obj[LEXICON.l]; i++) {\r\n if (callback.call(obj[i], i, obj[i]) === false)\r\n break;\r\n }\r\n }\r\n else {\r\n for (i in obj) {\r\n if (callback.call(obj[i], i, obj[i]) === false)\r\n break;\r\n }\r\n }\r\n\r\n return obj;\r\n };\r\n\r\n function isArrayLike(obj) {\r\n var length = !!obj && [LEXICON.l] in obj && obj[LEXICON.l];\r\n var t = _type(obj);\r\n return isFunction(t) ? false : (t == TYPES.a || length === 0 || _type(length) == TYPES.n && length > 0 && (length - 1) in obj);\r\n }\r\n\r\n function stripAndCollapse(value) {\r\n var tokens = value.match(_rnothtmlwhite) || [];\r\n return tokens.join(_strSpace);\r\n }\r\n\r\n function matches(elem, selector) {\r\n var nodeList = (elem.parentNode || document).querySelectorAll(selector) || [];\r\n var i = nodeList[LEXICON.l];\r\n\r\n while (i--)\r\n if (nodeList[i] == elem)\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n function insertAdjacentElement(el, strategy, child) {\r\n if (COMPATIBILITY.isA(child)) {\r\n for (var i = 0; i < child[LEXICON.l]; i++)\r\n insertAdjacentElement(el, strategy, child[i]);\r\n }\r\n else if (_type(child) == TYPES.s)\r\n el.insertAdjacentHTML(strategy, child);\r\n else\r\n el.insertAdjacentElement(strategy, child.nodeType ? child : child[0]);\r\n }\r\n\r\n function setCSSVal(el, prop, val) {\r\n try {\r\n if (el[LEXICON.s][prop] !== undefined)\r\n el[LEXICON.s][prop] = parseCSSVal(prop, val);\r\n } catch (e) { }\r\n }\r\n\r\n function parseCSSVal(prop, val) {\r\n if (!_cssNumber[prop.toLowerCase()] && _type(val) == TYPES.n)\r\n val += 'px';\r\n return val;\r\n }\r\n\r\n function startNextAnimationInQ(animObj, removeFromQ) {\r\n var index;\r\n var nextAnim;\r\n if (removeFromQ !== false)\r\n animObj.q.splice(0, 1);\r\n if (animObj.q[LEXICON.l] > 0) {\r\n nextAnim = animObj.q[0];\r\n animate(animObj.el, nextAnim.props, nextAnim.duration, nextAnim.easing, nextAnim.complete, true);\r\n }\r\n else {\r\n index = inArray(animObj, _animations);\r\n if (index > -1)\r\n _animations.splice(index, 1);\r\n }\r\n }\r\n\r\n function setAnimationValue(el, prop, value) {\r\n if (prop === _strScrollLeft || prop === _strScrollTop)\r\n el[prop] = value;\r\n else\r\n setCSSVal(el, prop, value);\r\n }\r\n\r\n function animate(el, props, options, easing, complete, guaranteedNext) {\r\n var hasOptions = isPlainObject(options);\r\n var from = {};\r\n var to = {};\r\n var i = 0;\r\n var key;\r\n var animObj;\r\n var start;\r\n var progress;\r\n var step;\r\n var specialEasing;\r\n var duration;\r\n if (hasOptions) {\r\n easing = options.easing;\r\n start = options.start;\r\n progress = options.progress;\r\n step = options.step;\r\n specialEasing = options.specialEasing;\r\n complete = options.complete;\r\n duration = options.duration;\r\n }\r\n else\r\n duration = options;\r\n specialEasing = specialEasing || {};\r\n duration = duration || 400;\r\n easing = easing || 'swing';\r\n guaranteedNext = guaranteedNext || false;\r\n\r\n for (; i < _animations[LEXICON.l]; i++) {\r\n if (_animations[i].el === el) {\r\n animObj = _animations[i];\r\n break;\r\n }\r\n }\r\n\r\n if (!animObj) {\r\n animObj = {\r\n el: el,\r\n q: []\r\n };\r\n _animations.push(animObj);\r\n }\r\n\r\n for (key in props) {\r\n if (key === _strScrollLeft || key === _strScrollTop)\r\n from[key] = el[key];\r\n else\r\n from[key] = FakejQuery(el).css(key);\r\n }\r\n\r\n for (key in from) {\r\n if (from[key] !== props[key] && props[key] !== undefined)\r\n to[key] = props[key];\r\n }\r\n\r\n if (!isEmptyObject(to)) {\r\n var timeNow;\r\n var end;\r\n var percent;\r\n var fromVal;\r\n var toVal;\r\n var easedVal;\r\n var timeStart;\r\n var frame;\r\n var elapsed;\r\n var qPos = guaranteedNext ? 0 : inArray(qObj, animObj.q);\r\n var qObj = {\r\n props: to,\r\n duration: hasOptions ? options : duration,\r\n easing: easing,\r\n complete: complete\r\n };\r\n if (qPos === -1) {\r\n qPos = animObj.q[LEXICON.l];\r\n animObj.q.push(qObj);\r\n }\r\n\r\n if (qPos === 0) {\r\n if (duration > 0) {\r\n timeStart = COMPATIBILITY.now();\r\n frame = function () {\r\n timeNow = COMPATIBILITY.now();\r\n elapsed = (timeNow - timeStart);\r\n end = qObj.stop || elapsed >= duration;\r\n percent = 1 - ((MATH.max(0, timeStart + duration - timeNow) / duration) || 0);\r\n\r\n for (key in to) {\r\n fromVal = parseFloat(from[key]);\r\n toVal = parseFloat(to[key]);\r\n easedVal = (toVal - fromVal) * EASING[specialEasing[key] || easing](percent, percent * duration, 0, 1, duration) + fromVal;\r\n setAnimationValue(el, key, easedVal);\r\n if (isFunction(step)) {\r\n step(easedVal, {\r\n elem: el,\r\n prop: key,\r\n start: fromVal,\r\n now: easedVal,\r\n end: toVal,\r\n pos: percent,\r\n options: {\r\n easing: easing,\r\n speacialEasing: specialEasing,\r\n duration: duration,\r\n complete: complete,\r\n step: step\r\n },\r\n startTime: timeStart\r\n });\r\n }\r\n }\r\n\r\n if (isFunction(progress))\r\n progress({}, percent, MATH.max(0, duration - elapsed));\r\n\r\n if (end) {\r\n startNextAnimationInQ(animObj);\r\n if (isFunction(complete))\r\n complete();\r\n }\r\n else\r\n qObj.frame = COMPATIBILITY.rAF()(frame);\r\n };\r\n qObj.frame = COMPATIBILITY.rAF()(frame);\r\n }\r\n else {\r\n for (key in to)\r\n setAnimationValue(el, key, to[key]);\r\n startNextAnimationInQ(animObj);\r\n }\r\n }\r\n }\r\n else if (guaranteedNext)\r\n startNextAnimationInQ(animObj);\r\n }\r\n\r\n function stop(el, clearQ, jumpToEnd) {\r\n var animObj;\r\n var qObj;\r\n var key;\r\n var i = 0;\r\n for (; i < _animations[LEXICON.l]; i++) {\r\n animObj = _animations[i];\r\n if (animObj.el === el) {\r\n if (animObj.q[LEXICON.l] > 0) {\r\n qObj = animObj.q[0];\r\n qObj.stop = true;\r\n COMPATIBILITY.cAF()(qObj.frame);\r\n animObj.q.splice(0, 1);\r\n\r\n if (jumpToEnd)\r\n for (key in qObj.props)\r\n setAnimationValue(el, key, qObj.props[key]);\r\n\r\n if (clearQ)\r\n animObj.q = [];\r\n else\r\n startNextAnimationInQ(animObj, false);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function elementIsVisible(el) {\r\n return !!(el[LEXICON.oW] || el[LEXICON.oH] || el.getClientRects()[LEXICON.l]);\r\n }\r\n\r\n function FakejQuery(selector) {\r\n if (arguments[LEXICON.l] === 0)\r\n return this;\r\n\r\n var base = new FakejQuery();\r\n var elements = selector;\r\n var i = 0;\r\n var elms;\r\n var el;\r\n\r\n if (_type(selector) == TYPES.s) {\r\n elements = [];\r\n if (selector.charAt(0) === '<') {\r\n el = document.createElement('div');\r\n el.innerHTML = selector;\r\n elms = el.children;\r\n }\r\n else {\r\n elms = document.querySelectorAll(selector);\r\n }\r\n\r\n for (; i < elms[LEXICON.l]; i++)\r\n elements.push(elms[i]);\r\n }\r\n\r\n if (elements) {\r\n if (_type(elements) != TYPES.s && (!isArrayLike(elements) || elements === window || elements === elements.self))\r\n elements = [elements];\r\n\r\n for (i = 0; i < elements[LEXICON.l]; i++)\r\n base[i] = elements[i];\r\n\r\n base[LEXICON.l] = elements[LEXICON.l];\r\n }\r\n\r\n return base;\r\n };\r\n\r\n FakejQuery[LEXICON.p] = {\r\n\r\n //EVENTS:\r\n\r\n on: function (eventName, handler) {\r\n eventName = (eventName || _strEmpty).match(_rnothtmlwhite) || [_strEmpty];\r\n\r\n var eventNameLength = eventName[LEXICON.l];\r\n var i = 0;\r\n var el;\r\n return this.each(function () {\r\n el = this;\r\n try {\r\n if (el.addEventListener) {\r\n for (; i < eventNameLength; i++)\r\n el.addEventListener(eventName[i], handler);\r\n }\r\n else if (el.detachEvent) {\r\n for (; i < eventNameLength; i++)\r\n el.attachEvent('on' + eventName[i], handler);\r\n }\r\n } catch (e) { }\r\n });\r\n },\r\n\r\n off: function (eventName, handler) {\r\n eventName = (eventName || _strEmpty).match(_rnothtmlwhite) || [_strEmpty];\r\n\r\n var eventNameLength = eventName[LEXICON.l];\r\n var i = 0;\r\n var el;\r\n return this.each(function () {\r\n el = this;\r\n try {\r\n if (el.removeEventListener) {\r\n for (; i < eventNameLength; i++)\r\n el.removeEventListener(eventName[i], handler);\r\n }\r\n else if (el.detachEvent) {\r\n for (; i < eventNameLength; i++)\r\n el.detachEvent('on' + eventName[i], handler);\r\n }\r\n } catch (e) { }\r\n });\r\n },\r\n\r\n one: function (eventName, handler) {\r\n eventName = (eventName || _strEmpty).match(_rnothtmlwhite) || [_strEmpty];\r\n return this.each(function () {\r\n var el = FakejQuery(this);\r\n FakejQuery.each(eventName, function (i, oneEventName) {\r\n var oneHandler = function (e) {\r\n handler.call(this, e);\r\n el.off(oneEventName, oneHandler);\r\n };\r\n el.on(oneEventName, oneHandler);\r\n });\r\n });\r\n },\r\n\r\n trigger: function (eventName) {\r\n var el;\r\n var event;\r\n return this.each(function () {\r\n el = this;\r\n if (document.createEvent) {\r\n event = document.createEvent('HTMLEvents');\r\n event.initEvent(eventName, true, false);\r\n el.dispatchEvent(event);\r\n }\r\n else {\r\n el.fireEvent('on' + eventName);\r\n }\r\n });\r\n },\r\n\r\n //DOM NODE INSERTING / REMOVING:\r\n\r\n append: function (child) {\r\n return this.each(function () { insertAdjacentElement(this, 'beforeend', child); });\r\n },\r\n\r\n prepend: function (child) {\r\n return this.each(function () { insertAdjacentElement(this, 'afterbegin', child); });\r\n },\r\n\r\n before: function (child) {\r\n return this.each(function () { insertAdjacentElement(this, 'beforebegin', child); });\r\n },\r\n\r\n after: function (child) {\r\n return this.each(function () { insertAdjacentElement(this, 'afterend', child); });\r\n },\r\n\r\n remove: function () {\r\n return this.each(function () {\r\n var el = this;\r\n var parentNode = el.parentNode;\r\n if (parentNode != null)\r\n parentNode.removeChild(el);\r\n });\r\n },\r\n\r\n unwrap: function () {\r\n var parents = [];\r\n var i;\r\n var el;\r\n var parent;\r\n\r\n this.each(function () {\r\n parent = this.parentNode;\r\n if (inArray(parent, parents) === - 1)\r\n parents.push(parent);\r\n });\r\n\r\n for (i = 0; i < parents[LEXICON.l]; i++) {\r\n el = parents[i];\r\n parent = el.parentNode;\r\n while (el.firstChild)\r\n parent.insertBefore(el.firstChild, el);\r\n parent.removeChild(el);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n wrapAll: function (wrapperHTML) {\r\n var i;\r\n var nodes = this;\r\n var wrapper = FakejQuery(wrapperHTML)[0];\r\n var deepest = wrapper;\r\n var parent = nodes[0].parentNode;\r\n var previousSibling = nodes[0].previousSibling;\r\n while (deepest.childNodes[LEXICON.l] > 0)\r\n deepest = deepest.childNodes[0];\r\n\r\n for (i = 0; nodes[LEXICON.l] - i; deepest.firstChild === nodes[0] && i++)\r\n deepest.appendChild(nodes[i]);\r\n\r\n var nextSibling = previousSibling ? previousSibling.nextSibling : parent.firstChild;\r\n parent.insertBefore(wrapper, nextSibling);\r\n\r\n return this;\r\n },\r\n\r\n wrapInner: function (wrapperHTML) {\r\n return this.each(function () {\r\n var el = FakejQuery(this);\r\n var contents = el.contents();\r\n\r\n if (contents[LEXICON.l])\r\n contents.wrapAll(wrapperHTML);\r\n else\r\n el.append(wrapperHTML);\r\n });\r\n },\r\n\r\n wrap: function (wrapperHTML) {\r\n return this.each(function () { FakejQuery(this).wrapAll(wrapperHTML); });\r\n },\r\n\r\n\r\n //DOM NODE MANIPULATION / INFORMATION:\r\n\r\n css: function (styles, val) {\r\n var el;\r\n var key;\r\n var cptStyle;\r\n var getCptStyle = window.getComputedStyle;\r\n if (_type(styles) == TYPES.s) {\r\n if (val === undefined) {\r\n el = this[0];\r\n cptStyle = getCptStyle ? getCptStyle(el, null) : el.currentStyle[styles];\r\n\r\n //https://bugzilla.mozilla.org/show_bug.cgi?id=548397 can be null sometimes if iframe with display: none (firefox only!)\r\n return getCptStyle ? cptStyle != null ? cptStyle.getPropertyValue(styles) : el[LEXICON.s][styles] : cptStyle;\r\n }\r\n else {\r\n return this.each(function () {\r\n setCSSVal(this, styles, val);\r\n });\r\n }\r\n }\r\n else {\r\n return this.each(function () {\r\n for (key in styles)\r\n setCSSVal(this, key, styles[key]);\r\n });\r\n }\r\n },\r\n\r\n hasClass: function (className) {\r\n var elem, i = 0;\r\n var classNamePrepared = _strSpace + className + _strSpace;\r\n var classList;\r\n\r\n while ((elem = this[i++])) {\r\n classList = elem.classList;\r\n if (classList && classList.contains(className))\r\n return true;\r\n else if (elem.nodeType === 1 && (_strSpace + stripAndCollapse(elem.className + _strEmpty) + _strSpace).indexOf(classNamePrepared) > -1)\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n addClass: function (className) {\r\n var classes;\r\n var elem;\r\n var cur;\r\n var curValue;\r\n var clazz;\r\n var finalValue;\r\n var supportClassList;\r\n var elmClassList;\r\n var i = 0;\r\n var v = 0;\r\n\r\n if (className) {\r\n classes = className.match(_rnothtmlwhite) || [];\r\n\r\n while ((elem = this[i++])) {\r\n elmClassList = elem.classList;\r\n if (supportClassList === undefined)\r\n supportClassList = elmClassList !== undefined;\r\n\r\n if (supportClassList) {\r\n while ((clazz = classes[v++]))\r\n elmClassList.add(clazz);\r\n }\r\n else {\r\n curValue = elem.className + _strEmpty;\r\n cur = elem.nodeType === 1 && (_strSpace + stripAndCollapse(curValue) + _strSpace);\r\n\r\n if (cur) {\r\n while ((clazz = classes[v++]))\r\n if (cur.indexOf(_strSpace + clazz + _strSpace) < 0)\r\n cur += clazz + _strSpace;\r\n\r\n finalValue = stripAndCollapse(cur);\r\n if (curValue !== finalValue)\r\n elem.className = finalValue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n removeClass: function (className) {\r\n var classes;\r\n var elem;\r\n var cur;\r\n var curValue;\r\n var clazz;\r\n var finalValue;\r\n var supportClassList;\r\n var elmClassList;\r\n var i = 0;\r\n var v = 0;\r\n\r\n if (className) {\r\n classes = className.match(_rnothtmlwhite) || [];\r\n\r\n while ((elem = this[i++])) {\r\n elmClassList = elem.classList;\r\n if (supportClassList === undefined)\r\n supportClassList = elmClassList !== undefined;\r\n\r\n if (supportClassList) {\r\n while ((clazz = classes[v++]))\r\n elmClassList.remove(clazz);\r\n }\r\n else {\r\n curValue = elem.className + _strEmpty;\r\n cur = elem.nodeType === 1 && (_strSpace + stripAndCollapse(curValue) + _strSpace);\r\n\r\n if (cur) {\r\n while ((clazz = classes[v++]))\r\n while (cur.indexOf(_strSpace + clazz + _strSpace) > -1)\r\n cur = cur.replace(_strSpace + clazz + _strSpace, _strSpace);\r\n\r\n finalValue = stripAndCollapse(cur);\r\n if (curValue !== finalValue)\r\n elem.className = finalValue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n hide: function () {\r\n return this.each(function () { this[LEXICON.s].display = 'none'; });\r\n },\r\n\r\n show: function () {\r\n return this.each(function () { this[LEXICON.s].display = 'block'; });\r\n },\r\n\r\n attr: function (attrName, value) {\r\n var i = 0;\r\n var el;\r\n while (el = this[i++]) {\r\n if (value === undefined)\r\n return el.getAttribute(attrName);\r\n el.setAttribute(attrName, value);\r\n }\r\n return this;\r\n },\r\n\r\n removeAttr: function (attrName) {\r\n return this.each(function () { this.removeAttribute(attrName); });\r\n },\r\n\r\n offset: function () {\r\n var el = this[0];\r\n var rect = el[LEXICON.bCR]();\r\n var scrollLeft = window.pageXOffset || document.documentElement[_strScrollLeft];\r\n var scrollTop = window.pageYOffset || document.documentElement[_strScrollTop];\r\n return {\r\n top: rect.top + scrollTop,\r\n left: rect.left + scrollLeft\r\n };\r\n },\r\n\r\n position: function () {\r\n var el = this[0];\r\n return {\r\n top: el.offsetTop,\r\n left: el.offsetLeft\r\n };\r\n },\r\n\r\n scrollLeft: function (value) {\r\n var i = 0;\r\n var el;\r\n while (el = this[i++]) {\r\n if (value === undefined)\r\n return el[_strScrollLeft];\r\n el[_strScrollLeft] = value;\r\n }\r\n return this;\r\n },\r\n\r\n scrollTop: function (value) {\r\n var i = 0;\r\n var el;\r\n while (el = this[i++]) {\r\n if (value === undefined)\r\n return el[_strScrollTop];\r\n el[_strScrollTop] = value;\r\n }\r\n return this;\r\n },\r\n\r\n val: function (value) {\r\n var el = this[0];\r\n if (!value)\r\n return el.value;\r\n el.value = value;\r\n return this;\r\n },\r\n\r\n\r\n //DOM TRAVERSAL / FILTERING:\r\n\r\n first: function () {\r\n return this.eq(0);\r\n },\r\n\r\n last: function () {\r\n return this.eq(-1);\r\n },\r\n\r\n eq: function (index) {\r\n return FakejQuery(this[index >= 0 ? index : this[LEXICON.l] + index]);\r\n },\r\n\r\n find: function (selector) {\r\n var children = [];\r\n var i;\r\n this.each(function () {\r\n var el = this;\r\n var ch = el.querySelectorAll(selector);\r\n for (i = 0; i < ch[LEXICON.l]; i++)\r\n children.push(ch[i]);\r\n });\r\n return FakejQuery(children);\r\n },\r\n\r\n children: function (selector) {\r\n var children = [];\r\n var el;\r\n var ch;\r\n var i;\r\n\r\n this.each(function () {\r\n ch = this.children;\r\n for (i = 0; i < ch[LEXICON.l]; i++) {\r\n el = ch[i];\r\n if (selector) {\r\n if ((el.matches && el.matches(selector)) || matches(el, selector))\r\n children.push(el);\r\n }\r\n else\r\n children.push(el);\r\n }\r\n });\r\n return FakejQuery(children);\r\n },\r\n\r\n parent: function (selector) {\r\n var parents = [];\r\n var parent;\r\n this.each(function () {\r\n parent = this.parentNode;\r\n if (selector ? FakejQuery(parent).is(selector) : true)\r\n parents.push(parent);\r\n });\r\n return FakejQuery(parents);\r\n },\r\n\r\n is: function (selector) {\r\n\r\n var el;\r\n var i;\r\n for (i = 0; i < this[LEXICON.l]; i++) {\r\n el = this[i];\r\n if (selector === ':visible')\r\n return elementIsVisible(el);\r\n if (selector === ':hidden')\r\n return !elementIsVisible(el);\r\n if ((el.matches && el.matches(selector)) || matches(el, selector))\r\n return true;\r\n }\r\n return false;\r\n },\r\n\r\n contents: function () {\r\n var contents = [];\r\n var childs;\r\n var i;\r\n\r\n this.each(function () {\r\n childs = this.childNodes;\r\n for (i = 0; i < childs[LEXICON.l]; i++)\r\n contents.push(childs[i]);\r\n });\r\n\r\n return FakejQuery(contents);\r\n },\r\n\r\n each: function (callback) {\r\n return each(this, callback);\r\n },\r\n\r\n\r\n //ANIMATION:\r\n\r\n animate: function (props, duration, easing, complete) {\r\n return this.each(function () { animate(this, props, duration, easing, complete); });\r\n },\r\n\r\n stop: function (clearQ, jump) {\r\n return this.each(function () { stop(this, clearQ, jump); });\r\n }\r\n };\r\n\r\n extend(FakejQuery, {\r\n extend: extend,\r\n inArray: inArray,\r\n isEmptyObject: isEmptyObject,\r\n isPlainObject: isPlainObject,\r\n each: each\r\n });\r\n\r\n return FakejQuery;\r\n })();\r\n var INSTANCES = (function () {\r\n var _targets = [];\r\n var _instancePropertyString = '__overlayScrollbars__';\r\n\r\n /**\r\n * Register, unregister or get a certain (or all) instances.\r\n * Register: Pass the target and the instance.\r\n * Unregister: Pass the target and null.\r\n * Get Instance: Pass the target from which the instance shall be got.\r\n * Get Targets: Pass no arguments.\r\n * @param target The target to which the instance shall be registered / from which the instance shall be unregistered / the instance shall be got\r\n * @param instance The instance.\r\n * @returns {*|void} Returns the instance from the given target.\r\n */\r\n return function (target, instance) {\r\n var argLen = arguments[LEXICON.l];\r\n if (argLen < 1) {\r\n //return all targets\r\n return _targets;\r\n }\r\n else {\r\n if (instance) {\r\n //register instance\r\n target[_instancePropertyString] = instance;\r\n _targets.push(target);\r\n }\r\n else {\r\n var index = COMPATIBILITY.inA(target, _targets);\r\n if (index > -1) {\r\n if (argLen > 1) {\r\n //unregister instance\r\n delete target[_instancePropertyString];\r\n _targets.splice(index, 1);\r\n }\r\n else {\r\n //get instance from target\r\n return _targets[index][_instancePropertyString];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n })();\r\n var PLUGIN = (function () {\r\n var _plugin;\r\n var _pluginsGlobals;\r\n var _pluginsAutoUpdateLoop;\r\n var _pluginsExtensions = [];\r\n var _pluginsOptions = (function () {\r\n var type = COMPATIBILITY.type;\r\n var possibleTemplateTypes = [\r\n TYPES.b, //boolean\r\n TYPES.n, //number\r\n TYPES.s, //string\r\n TYPES.a, //array\r\n TYPES.o, //object\r\n TYPES.f, //function\r\n TYPES.z //null\r\n ];\r\n var restrictedStringsSplit = ' ';\r\n var restrictedStringsPossibilitiesSplit = ':';\r\n var classNameAllowedValues = [TYPES.z, TYPES.s];\r\n var numberAllowedValues = TYPES.n;\r\n var booleanNullAllowedValues = [TYPES.z, TYPES.b];\r\n var booleanTrueTemplate = [true, TYPES.b];\r\n var booleanFalseTemplate = [false, TYPES.b];\r\n var callbackTemplate = [null, [TYPES.z, TYPES.f]];\r\n var updateOnLoadTemplate = [['img'], [TYPES.s, TYPES.a, TYPES.z]];\r\n var inheritedAttrsTemplate = [['style', 'class'], [TYPES.s, TYPES.a, TYPES.z]];\r\n var resizeAllowedValues = 'n:none b:both h:horizontal v:vertical';\r\n var overflowBehaviorAllowedValues = 'v-h:visible-hidden v-s:visible-scroll s:scroll h:hidden';\r\n var scrollbarsVisibilityAllowedValues = 'v:visible h:hidden a:auto';\r\n var scrollbarsAutoHideAllowedValues = 'n:never s:scroll l:leave m:move';\r\n var optionsDefaultsAndTemplate = {\r\n className: ['os-theme-dark', classNameAllowedValues], //null || string\r\n resize: ['none', resizeAllowedValues], //none || both || horizontal || vertical || n || b || h || v\r\n sizeAutoCapable: booleanTrueTemplate, //true || false\r\n clipAlways: booleanTrueTemplate, //true || false\r\n normalizeRTL: booleanTrueTemplate, //true || false\r\n paddingAbsolute: booleanFalseTemplate, //true || false\r\n autoUpdate: [null, booleanNullAllowedValues], //true || false || null\r\n autoUpdateInterval: [33, numberAllowedValues], //number\r\n updateOnLoad: updateOnLoadTemplate, //string || array || null\r\n nativeScrollbarsOverlaid: {\r\n showNativeScrollbars: booleanFalseTemplate, //true || false\r\n initialize: booleanTrueTemplate //true || false\r\n },\r\n overflowBehavior: {\r\n x: ['scroll', overflowBehaviorAllowedValues], //visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n y: ['scroll', overflowBehaviorAllowedValues] //visible-hidden || visible-scroll || hidden || scroll || v-h || v-s || h || s\r\n },\r\n scrollbars: {\r\n visibility: ['auto', scrollbarsVisibilityAllowedValues], //visible || hidden || auto || v || h || a\r\n autoHide: ['never', scrollbarsAutoHideAllowedValues], //never || scroll || leave || move || n || s || l || m\r\n autoHideDelay: [800, numberAllowedValues], //number\r\n dragScrolling: booleanTrueTemplate, //true || false\r\n clickScrolling: booleanFalseTemplate, //true || false\r\n touchSupport: booleanTrueTemplate, //true || false\r\n snapHandle: booleanFalseTemplate //true || false\r\n },\r\n textarea: {\r\n dynWidth: booleanFalseTemplate, //true || false\r\n dynHeight: booleanFalseTemplate, //true || false\r\n inheritedAttrs: inheritedAttrsTemplate //string || array || null\r\n },\r\n callbacks: {\r\n onInitialized: callbackTemplate, //null || function\r\n onInitializationWithdrawn: callbackTemplate, //null || function\r\n onDestroyed: callbackTemplate, //null || function\r\n onScrollStart: callbackTemplate, //null || function\r\n onScroll: callbackTemplate, //null || function\r\n onScrollStop: callbackTemplate, //null || function\r\n onOverflowChanged: callbackTemplate, //null || function\r\n onOverflowAmountChanged: callbackTemplate, //null || function\r\n onDirectionChanged: callbackTemplate, //null || function\r\n onContentSizeChanged: callbackTemplate, //null || function\r\n onHostSizeChanged: callbackTemplate, //null || function\r\n onUpdated: callbackTemplate //null || function\r\n }\r\n };\r\n var convert = function (template) {\r\n var recursive = function (obj) {\r\n var key;\r\n var val;\r\n var valType;\r\n for (key in obj) {\r\n if (!obj[LEXICON.hOP](key))\r\n continue;\r\n val = obj[key];\r\n valType = type(val);\r\n if (valType == TYPES.a)\r\n obj[key] = val[template ? 1 : 0];\r\n else if (valType == TYPES.o)\r\n obj[key] = recursive(val);\r\n }\r\n return obj;\r\n };\r\n return recursive(FRAMEWORK.extend(true, {}, optionsDefaultsAndTemplate));\r\n };\r\n\r\n return {\r\n _defaults: convert(),\r\n\r\n _template: convert(true),\r\n\r\n /**\r\n * Validates the passed object by the passed template.\r\n * @param obj The object which shall be validated.\r\n * @param template The template which defines the allowed values and types.\r\n * @param writeErrors True if errors shall be logged to the console.\r\n * @param diffObj If a object is passed then only valid differences to this object will be returned.\r\n * @returns {{}} A object which contains two objects called \"default\" and \"prepared\" which contains only the valid properties of the passed original object and discards not different values compared to the passed diffObj.\r\n */\r\n _validate: function (obj, template, writeErrors, diffObj) {\r\n var validatedOptions = {};\r\n var validatedOptionsPrepared = {};\r\n var objectCopy = FRAMEWORK.extend(true, {}, obj);\r\n var inArray = FRAMEWORK.inArray;\r\n var isEmptyObj = FRAMEWORK.isEmptyObject;\r\n var checkObjectProps = function (data, template, diffData, validatedOptions, validatedOptionsPrepared, prevPropName) {\r\n for (var prop in template) {\r\n if (template[LEXICON.hOP](prop) && data[LEXICON.hOP](prop)) {\r\n var isValid = false;\r\n var isDiff = false;\r\n var templateValue = template[prop];\r\n var templateValueType = type(templateValue);\r\n var templateIsComplex = templateValueType == TYPES.o;\r\n var templateTypes = !COMPATIBILITY.isA(templateValue) ? [templateValue] : templateValue;\r\n var dataDiffValue = diffData[prop];\r\n var dataValue = data[prop];\r\n var dataValueType = type(dataValue);\r\n var propPrefix = prevPropName ? prevPropName + '.' : '';\r\n var error = \"The option \\\"\" + propPrefix + prop + \"\\\" wasn't set, because\";\r\n var errorPossibleTypes = [];\r\n var errorRestrictedStrings = [];\r\n var restrictedStringValuesSplit;\r\n var restrictedStringValuesPossibilitiesSplit;\r\n var isRestrictedValue;\r\n var mainPossibility;\r\n var currType;\r\n var i;\r\n var v;\r\n var j;\r\n\r\n dataDiffValue = dataDiffValue === undefined ? {} : dataDiffValue;\r\n\r\n //if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && dataValueType == TYPES.o) {\r\n validatedOptions[prop] = {};\r\n validatedOptionsPrepared[prop] = {};\r\n checkObjectProps(dataValue, templateValue, dataDiffValue, validatedOptions[prop], validatedOptionsPrepared[prop], propPrefix + prop);\r\n FRAMEWORK.each([data, validatedOptions, validatedOptionsPrepared], function (index, value) {\r\n if (isEmptyObj(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n }\r\n else if (!templateIsComplex) {\r\n for (i = 0; i < templateTypes[LEXICON.l]; i++) {\r\n currType = templateTypes[i];\r\n templateValueType = type(currType);\r\n //if currtype is string and starts with restrictedStringPrefix and end with restrictedStringSuffix\r\n isRestrictedValue = templateValueType == TYPES.s && inArray(currType, possibleTemplateTypes) === -1;\r\n if (isRestrictedValue) {\r\n errorPossibleTypes.push(TYPES.s);\r\n\r\n //split it into a array which contains all possible values for example: [\"y:yes\", \"n:no\", \"m:maybe\"]\r\n restrictedStringValuesSplit = currType.split(restrictedStringsSplit);\r\n errorRestrictedStrings = errorRestrictedStrings.concat(restrictedStringValuesSplit);\r\n for (v = 0; v < restrictedStringValuesSplit[LEXICON.l]; v++) {\r\n //split the possible values into their possibiliteis for example: [\"y\", \"yes\"] -> the first is always the mainPossibility\r\n restrictedStringValuesPossibilitiesSplit = restrictedStringValuesSplit[v].split(restrictedStringsPossibilitiesSplit);\r\n mainPossibility = restrictedStringValuesPossibilitiesSplit[0];\r\n for (j = 0; j < restrictedStringValuesPossibilitiesSplit[LEXICON.l]; j++) {\r\n //if any possibility matches with the dataValue, its valid\r\n if (dataValue === restrictedStringValuesPossibilitiesSplit[j]) {\r\n isValid = true;\r\n break;\r\n }\r\n }\r\n if (isValid)\r\n break;\r\n }\r\n }\r\n else {\r\n errorPossibleTypes.push(currType);\r\n\r\n if (dataValueType === currType) {\r\n isValid = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (isValid) {\r\n isDiff = dataValue !== dataDiffValue;\r\n\r\n if (isDiff)\r\n validatedOptions[prop] = dataValue;\r\n\r\n if (isRestrictedValue ? inArray(dataDiffValue, restrictedStringValuesPossibilitiesSplit) < 0 : isDiff)\r\n validatedOptionsPrepared[prop] = isRestrictedValue ? mainPossibility : dataValue;\r\n }\r\n else if (writeErrors) {\r\n console.warn(error + \" it doesn't accept the type [ \" + dataValueType.toUpperCase() + \" ] with the value of \\\"\" + dataValue + \"\\\".\\r\\n\" +\r\n \"Accepted types are: [ \" + errorPossibleTypes.join(', ').toUpperCase() + \" ].\" +\r\n (errorRestrictedStrings[length] > 0 ? \"\\r\\nValid strings are: [ \" + errorRestrictedStrings.join(', ').split(restrictedStringsPossibilitiesSplit).join(', ') + \" ].\" : ''));\r\n }\r\n delete data[prop];\r\n }\r\n }\r\n }\r\n };\r\n checkObjectProps(objectCopy, template, diffObj || {}, validatedOptions, validatedOptionsPrepared);\r\n\r\n //add values which aren't specified in the template to the finished validated object to prevent them from being discarded\r\n /*\r\n if(keepForeignProps) {\r\n FRAMEWORK.extend(true, validatedOptions, objectCopy);\r\n FRAMEWORK.extend(true, validatedOptionsPrepared, objectCopy);\r\n }\r\n */\r\n\r\n if (!isEmptyObj(objectCopy) && writeErrors)\r\n console.warn('The following options are discarded due to invalidity:\\r\\n' + window.JSON.stringify(objectCopy, null, 2));\r\n\r\n return {\r\n _default: validatedOptions,\r\n _prepared: validatedOptionsPrepared\r\n };\r\n }\r\n }\r\n }());\r\n\r\n /**\r\n * Initializes the object which contains global information about the plugin and each instance of it.\r\n */\r\n function initOverlayScrollbarsStatics() {\r\n if (!_pluginsGlobals)\r\n _pluginsGlobals = new OverlayScrollbarsGlobals(_pluginsOptions._defaults);\r\n if (!_pluginsAutoUpdateLoop)\r\n _pluginsAutoUpdateLoop = new OverlayScrollbarsAutoUpdateLoop(_pluginsGlobals);\r\n }\r\n\r\n /**\r\n * The global object for the OverlayScrollbars objects. It contains resources which every OverlayScrollbars object needs. This object is initialized only once: if the first OverlayScrollbars object gets initialized.\r\n * @param defaultOptions\r\n * @constructor\r\n */\r\n function OverlayScrollbarsGlobals(defaultOptions) {\r\n var _base = this;\r\n var strOverflow = 'overflow';\r\n var strHidden = 'hidden';\r\n var strScroll = 'scroll';\r\n var bodyElement = FRAMEWORK('body');\r\n var scrollbarDummyElement = FRAMEWORK('
');\r\n var scrollbarDummyElement0 = scrollbarDummyElement[0];\r\n var dummyContainerChild = FRAMEWORK(scrollbarDummyElement.children('div').eq(0));\r\n\r\n bodyElement.append(scrollbarDummyElement);\r\n scrollbarDummyElement.hide().show(); //fix IE8 bug (incorrect measuring)\r\n\r\n var nativeScrollbarSize = calcNativeScrollbarSize(scrollbarDummyElement0);\r\n var nativeScrollbarIsOverlaid = {\r\n x: nativeScrollbarSize.x === 0,\r\n y: nativeScrollbarSize.y === 0\r\n };\r\n var msie = (function () {\r\n var ua = window.navigator.userAgent;\r\n var strIndexOf = 'indexOf';\r\n var strSubString = 'substring';\r\n var msie = ua[strIndexOf]('MSIE ');\r\n var trident = ua[strIndexOf]('Trident/');\r\n var edge = ua[strIndexOf]('Edge/');\r\n var rv = ua[strIndexOf]('rv:');\r\n var result;\r\n var parseIntFunc = parseInt;\r\n\r\n // IE 10 or older => return version number\r\n if (msie > 0)\r\n result = parseIntFunc(ua[strSubString](msie + 5, ua[strIndexOf]('.', msie)), 10);\r\n\r\n // IE 11 => return version number\r\n else if (trident > 0)\r\n result = parseIntFunc(ua[strSubString](rv + 3, ua[strIndexOf]('.', rv)), 10);\r\n\r\n // Edge (IE 12+) => return version number\r\n else if (edge > 0)\r\n result = parseIntFunc(ua[strSubString](edge + 5, ua[strIndexOf]('.', edge)), 10);\r\n\r\n // other browser\r\n return result;\r\n })();\r\n\r\n FRAMEWORK.extend(_base, {\r\n defaultOptions: defaultOptions,\r\n msie: msie,\r\n autoUpdateLoop: false,\r\n autoUpdateRecommended: !COMPATIBILITY.mO(),\r\n nativeScrollbarSize: nativeScrollbarSize,\r\n nativeScrollbarIsOverlaid: nativeScrollbarIsOverlaid,\r\n nativeScrollbarStyling: (function () {\r\n var result = false;\r\n scrollbarDummyElement.addClass('os-viewport-native-scrollbars-invisible');\r\n try {\r\n result = (scrollbarDummyElement.css('scrollbar-width') === 'none' && (msie > 9 || !msie)) || window.getComputedStyle(scrollbarDummyElement0, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) { }\r\n\r\n //fix opera bug: scrollbar styles will only appear if overflow value is scroll or auto during the activation of the style.\r\n //and set overflow to scroll\r\n //scrollbarDummyElement.css(strOverflow, strHidden).hide().css(strOverflow, strScroll).show();\r\n //return (scrollbarDummyElement0[LEXICON.oH] - scrollbarDummyElement0[LEXICON.cH]) === 0 && (scrollbarDummyElement0[LEXICON.oW] - scrollbarDummyElement0[LEXICON.cW]) === 0;\r\n\r\n return result;\r\n })(),\r\n overlayScrollbarDummySize: { x: 30, y: 30 },\r\n cssCalc: VENDORS._cssPropertyValue('width', 'calc', '(1px)') || null,\r\n restrictedMeasuring: (function () {\r\n //https://bugzilla.mozilla.org/show_bug.cgi?id=1439305\r\n //since 1.11.0 always false -> fixed via CSS (hopefully)\r\n scrollbarDummyElement.css(strOverflow, strHidden);\r\n var scrollSize = {\r\n w: scrollbarDummyElement0[LEXICON.sW],\r\n h: scrollbarDummyElement0[LEXICON.sH]\r\n };\r\n scrollbarDummyElement.css(strOverflow, 'visible');\r\n var scrollSize2 = {\r\n w: scrollbarDummyElement0[LEXICON.sW],\r\n h: scrollbarDummyElement0[LEXICON.sH]\r\n };\r\n return (scrollSize.w - scrollSize2.w) !== 0 || (scrollSize.h - scrollSize2.h) !== 0;\r\n })(),\r\n rtlScrollBehavior: (function () {\r\n scrollbarDummyElement.css({ 'overflow-y': strHidden, 'overflow-x': strScroll, 'direction': 'rtl' }).scrollLeft(0);\r\n var dummyContainerOffset = scrollbarDummyElement.offset();\r\n var dummyContainerChildOffset = dummyContainerChild.offset();\r\n //https://github.com/KingSora/OverlayScrollbars/issues/187\r\n scrollbarDummyElement.scrollLeft(-999);\r\n var dummyContainerChildOffsetAfterScroll = dummyContainerChild.offset();\r\n return {\r\n //origin direction = determines if the zero scroll position is on the left or right side\r\n //'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n //true = on the left side\r\n //false = on the right side\r\n i: dummyContainerOffset.left === dummyContainerChildOffset.left,\r\n //negative = determines if the maximum scroll is positive or negative\r\n //'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n //true = negative\r\n //false = positive\r\n n: dummyContainerChildOffset.left !== dummyContainerChildOffsetAfterScroll.left\r\n };\r\n })(),\r\n supportTransform: !!VENDORS._cssProperty('transform'),\r\n supportTransition: !!VENDORS._cssProperty('transition'),\r\n supportPassiveEvents: (function () {\r\n var supportsPassive = false;\r\n try {\r\n window.addEventListener('test', null, Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n supportsPassive = true;\r\n }\r\n }));\r\n } catch (e) { }\r\n return supportsPassive;\r\n })(),\r\n supportResizeObserver: !!COMPATIBILITY.rO(),\r\n supportMutationObserver: !!COMPATIBILITY.mO()\r\n });\r\n\r\n scrollbarDummyElement.removeAttr(LEXICON.s).remove();\r\n\r\n //Catch zoom event:\r\n (function () {\r\n if (nativeScrollbarIsOverlaid.x && nativeScrollbarIsOverlaid.y)\r\n return;\r\n\r\n var abs = MATH.abs;\r\n var windowWidth = COMPATIBILITY.wW();\r\n var windowHeight = COMPATIBILITY.wH();\r\n var windowDpr = getWindowDPR();\r\n var onResize = function () {\r\n if (INSTANCES().length > 0) {\r\n var newW = COMPATIBILITY.wW();\r\n var newH = COMPATIBILITY.wH();\r\n var deltaW = newW - windowWidth;\r\n var deltaH = newH - windowHeight;\r\n\r\n if (deltaW === 0 && deltaH === 0)\r\n return;\r\n\r\n var deltaWRatio = MATH.round(newW / (windowWidth / 100.0));\r\n var deltaHRatio = MATH.round(newH / (windowHeight / 100.0));\r\n var absDeltaW = abs(deltaW);\r\n var absDeltaH = abs(deltaH);\r\n var absDeltaWRatio = abs(deltaWRatio);\r\n var absDeltaHRatio = abs(deltaHRatio);\r\n var newDPR = getWindowDPR();\r\n\r\n var deltaIsBigger = absDeltaW > 2 && absDeltaH > 2;\r\n var difference = !differenceIsBiggerThanOne(absDeltaWRatio, absDeltaHRatio);\r\n var dprChanged = newDPR !== windowDpr && windowDpr > 0;\r\n var isZoom = deltaIsBigger && difference && dprChanged;\r\n var oldScrollbarSize = _base.nativeScrollbarSize;\r\n var newScrollbarSize;\r\n\r\n if (isZoom) {\r\n bodyElement.append(scrollbarDummyElement);\r\n newScrollbarSize = _base.nativeScrollbarSize = calcNativeScrollbarSize(scrollbarDummyElement[0]);\r\n scrollbarDummyElement.remove();\r\n if (oldScrollbarSize.x !== newScrollbarSize.x || oldScrollbarSize.y !== newScrollbarSize.y) {\r\n FRAMEWORK.each(INSTANCES(), function () {\r\n if (INSTANCES(this))\r\n INSTANCES(this).update('zoom');\r\n });\r\n }\r\n }\r\n\r\n windowWidth = newW;\r\n windowHeight = newH;\r\n windowDpr = newDPR;\r\n }\r\n };\r\n\r\n function differenceIsBiggerThanOne(valOne, valTwo) {\r\n var absValOne = abs(valOne);\r\n var absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n }\r\n\r\n function getWindowDPR() {\r\n var dDPI = window.screen.deviceXDPI || 0;\r\n var sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || (dDPI / sDPI);\r\n }\r\n\r\n FRAMEWORK(window).on('resize', onResize);\r\n })();\r\n\r\n function calcNativeScrollbarSize(measureElement) {\r\n return {\r\n x: measureElement[LEXICON.oH] - measureElement[LEXICON.cH],\r\n y: measureElement[LEXICON.oW] - measureElement[LEXICON.cW]\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * The object which manages the auto update loop for all OverlayScrollbars objects. This object is initialized only once: if the first OverlayScrollbars object gets initialized.\r\n * @constructor\r\n */\r\n function OverlayScrollbarsAutoUpdateLoop(globals) {\r\n var _base = this;\r\n var _inArray = FRAMEWORK.inArray;\r\n var _getNow = COMPATIBILITY.now;\r\n var _strAutoUpdate = 'autoUpdate';\r\n var _strAutoUpdateInterval = _strAutoUpdate + 'Interval';\r\n var _strLength = LEXICON.l;\r\n var _loopingInstances = [];\r\n var _loopingInstancesIntervalCache = [];\r\n var _loopIsActive = false;\r\n var _loopIntervalDefault = 33;\r\n var _loopInterval = _loopIntervalDefault;\r\n var _loopTimeOld = _getNow();\r\n var _loopID;\r\n\r\n\r\n /**\r\n * The auto update loop which will run every 50 milliseconds or less if the update interval of a instance is lower than 50 milliseconds.\r\n */\r\n var loop = function () {\r\n if (_loopingInstances[_strLength] > 0 && _loopIsActive) {\r\n _loopID = COMPATIBILITY.rAF()(function () {\r\n loop();\r\n });\r\n var timeNew = _getNow();\r\n var timeDelta = timeNew - _loopTimeOld;\r\n var lowestInterval;\r\n var instance;\r\n var instanceOptions;\r\n var instanceAutoUpdateAllowed;\r\n var instanceAutoUpdateInterval;\r\n var now;\r\n\r\n if (timeDelta > _loopInterval) {\r\n _loopTimeOld = timeNew - (timeDelta % _loopInterval);\r\n lowestInterval = _loopIntervalDefault;\r\n for (var i = 0; i < _loopingInstances[_strLength]; i++) {\r\n instance = _loopingInstances[i];\r\n if (instance !== undefined) {\r\n instanceOptions = instance.options();\r\n instanceAutoUpdateAllowed = instanceOptions[_strAutoUpdate];\r\n instanceAutoUpdateInterval = MATH.max(1, instanceOptions[_strAutoUpdateInterval]);\r\n now = _getNow();\r\n\r\n if ((instanceAutoUpdateAllowed === true || instanceAutoUpdateAllowed === null) && (now - _loopingInstancesIntervalCache[i]) > instanceAutoUpdateInterval) {\r\n instance.update('auto');\r\n _loopingInstancesIntervalCache[i] = new Date(now += instanceAutoUpdateInterval);\r\n }\r\n\r\n lowestInterval = MATH.max(1, MATH.min(lowestInterval, instanceAutoUpdateInterval));\r\n }\r\n }\r\n _loopInterval = lowestInterval;\r\n }\r\n } else {\r\n _loopInterval = _loopIntervalDefault;\r\n }\r\n };\r\n\r\n /**\r\n * Add OverlayScrollbars instance to the auto update loop. Only successful if the instance isn't already added.\r\n * @param instance The instance which shall be updated in a loop automatically.\r\n */\r\n _base.add = function (instance) {\r\n if (_inArray(instance, _loopingInstances) === -1) {\r\n _loopingInstances.push(instance);\r\n _loopingInstancesIntervalCache.push(_getNow());\r\n if (_loopingInstances[_strLength] > 0 && !_loopIsActive) {\r\n _loopIsActive = true;\r\n globals.autoUpdateLoop = _loopIsActive;\r\n loop();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Remove OverlayScrollbars instance from the auto update loop. Only successful if the instance was added before.\r\n * @param instance The instance which shall be updated in a loop automatically.\r\n */\r\n _base.remove = function (instance) {\r\n var index = _inArray(instance, _loopingInstances);\r\n if (index > -1) {\r\n //remove from loopingInstances list\r\n _loopingInstancesIntervalCache.splice(index, 1);\r\n _loopingInstances.splice(index, 1);\r\n\r\n //correct update loop behavior\r\n if (_loopingInstances[_strLength] === 0 && _loopIsActive) {\r\n _loopIsActive = false;\r\n globals.autoUpdateLoop = _loopIsActive;\r\n if (_loopID !== undefined) {\r\n COMPATIBILITY.cAF()(_loopID);\r\n _loopID = -1;\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * A object which manages the scrollbars visibility of the target element.\r\n * @param pluginTargetElement The element from which the scrollbars shall be hidden.\r\n * @param options The custom options.\r\n * @param extensions The custom extensions.\r\n * @param globals\r\n * @param autoUpdateLoop\r\n * @returns {*}\r\n * @constructor\r\n */\r\n function OverlayScrollbarsInstance(pluginTargetElement, options, extensions, globals, autoUpdateLoop) {\r\n //shortcuts\r\n var type = COMPATIBILITY.type;\r\n var inArray = FRAMEWORK.inArray;\r\n var each = FRAMEWORK.each;\r\n\r\n //make correct instanceof\r\n var _base = new _plugin();\r\n var _frameworkProto = FRAMEWORK[LEXICON.p];\r\n\r\n //if passed element is no HTML element: skip and return\r\n if (!isHTMLElement(pluginTargetElement))\r\n return;\r\n\r\n //if passed element is already initialized: set passed options if there are any and return its instance\r\n if (INSTANCES(pluginTargetElement)) {\r\n var inst = INSTANCES(pluginTargetElement);\r\n inst.options(options);\r\n return inst;\r\n }\r\n\r\n //globals:\r\n var _nativeScrollbarIsOverlaid;\r\n var _overlayScrollbarDummySize;\r\n var _rtlScrollBehavior;\r\n var _autoUpdateRecommended;\r\n var _msieVersion;\r\n var _nativeScrollbarStyling;\r\n var _cssCalc;\r\n var _nativeScrollbarSize;\r\n var _supportTransition;\r\n var _supportTransform;\r\n var _supportPassiveEvents;\r\n var _supportResizeObserver;\r\n var _supportMutationObserver;\r\n var _restrictedMeasuring;\r\n\r\n //general readonly:\r\n var _initialized;\r\n var _destroyed;\r\n var _isTextarea;\r\n var _isBody;\r\n var _documentMixed;\r\n var _domExists;\r\n\r\n //general:\r\n var _isBorderBox;\r\n var _sizeAutoObserverAdded;\r\n var _paddingX;\r\n var _paddingY;\r\n var _borderX;\r\n var _borderY;\r\n var _marginX;\r\n var _marginY;\r\n var _isRTL;\r\n var _sleeping;\r\n var _contentBorderSize = {};\r\n var _scrollHorizontalInfo = {};\r\n var _scrollVerticalInfo = {};\r\n var _viewportSize = {};\r\n var _nativeScrollbarMinSize = {};\r\n\r\n //naming:\t\r\n var _strMinusHidden = '-hidden';\r\n var _strMarginMinus = 'margin-';\r\n var _strPaddingMinus = 'padding-';\r\n var _strBorderMinus = 'border-';\r\n var _strTop = 'top';\r\n var _strRight = 'right';\r\n var _strBottom = 'bottom';\r\n var _strLeft = 'left';\r\n var _strMinMinus = 'min-';\r\n var _strMaxMinus = 'max-';\r\n var _strWidth = 'width';\r\n var _strHeight = 'height';\r\n var _strFloat = 'float';\r\n var _strEmpty = '';\r\n var _strAuto = 'auto';\r\n var _strSync = 'sync';\r\n var _strScroll = 'scroll';\r\n var _strHundredPercent = '100%';\r\n var _strX = 'x';\r\n var _strY = 'y';\r\n var _strDot = '.';\r\n var _strSpace = ' ';\r\n var _strScrollbar = 'scrollbar';\r\n var _strMinusHorizontal = '-horizontal';\r\n var _strMinusVertical = '-vertical';\r\n var _strScrollLeft = _strScroll + 'Left';\r\n var _strScrollTop = _strScroll + 'Top';\r\n var _strMouseTouchDownEvent = 'mousedown touchstart';\r\n var _strMouseTouchUpEvent = 'mouseup touchend touchcancel';\r\n var _strMouseTouchMoveEvent = 'mousemove touchmove';\r\n var _strMouseEnter = 'mouseenter';\r\n var _strMouseLeave = 'mouseleave';\r\n var _strKeyDownEvent = 'keydown';\r\n var _strKeyUpEvent = 'keyup';\r\n var _strSelectStartEvent = 'selectstart';\r\n var _strTransitionEndEvent = 'transitionend webkitTransitionEnd oTransitionEnd';\r\n var _strResizeObserverProperty = '__overlayScrollbarsRO__';\r\n\r\n //class names:\t\r\n var _cassNamesPrefix = 'os-';\r\n var _classNameHTMLElement = _cassNamesPrefix + 'html';\r\n var _classNameHostElement = _cassNamesPrefix + 'host';\r\n var _classNameHostElementForeign = _classNameHostElement + '-foreign';\r\n var _classNameHostTextareaElement = _classNameHostElement + '-textarea';\r\n var _classNameHostScrollbarHorizontalHidden = _classNameHostElement + '-' + _strScrollbar + _strMinusHorizontal + _strMinusHidden;\r\n var _classNameHostScrollbarVerticalHidden = _classNameHostElement + '-' + _strScrollbar + _strMinusVertical + _strMinusHidden;\r\n var _classNameHostTransition = _classNameHostElement + '-transition';\r\n var _classNameHostRTL = _classNameHostElement + '-rtl';\r\n var _classNameHostResizeDisabled = _classNameHostElement + '-resize-disabled';\r\n var _classNameHostScrolling = _classNameHostElement + '-scrolling';\r\n var _classNameHostOverflow = _classNameHostElement + '-overflow';\r\n var _classNameHostOverflow = _classNameHostElement + '-overflow';\r\n var _classNameHostOverflowX = _classNameHostOverflow + '-x';\r\n var _classNameHostOverflowY = _classNameHostOverflow + '-y';\r\n var _classNameTextareaElement = _cassNamesPrefix + 'textarea';\r\n var _classNameTextareaCoverElement = _classNameTextareaElement + '-cover';\r\n var _classNamePaddingElement = _cassNamesPrefix + 'padding';\r\n var _classNameViewportElement = _cassNamesPrefix + 'viewport';\r\n var _classNameViewportNativeScrollbarsInvisible = _classNameViewportElement + '-native-scrollbars-invisible';\r\n var _classNameViewportNativeScrollbarsOverlaid = _classNameViewportElement + '-native-scrollbars-overlaid';\r\n var _classNameContentElement = _cassNamesPrefix + 'content';\r\n var _classNameContentArrangeElement = _cassNamesPrefix + 'content-arrange';\r\n var _classNameContentGlueElement = _cassNamesPrefix + 'content-glue';\r\n var _classNameSizeAutoObserverElement = _cassNamesPrefix + 'size-auto-observer';\r\n var _classNameResizeObserverElement = _cassNamesPrefix + 'resize-observer';\r\n var _classNameResizeObserverItemElement = _cassNamesPrefix + 'resize-observer-item';\r\n var _classNameResizeObserverItemFinalElement = _classNameResizeObserverItemElement + '-final';\r\n var _classNameTextInherit = _cassNamesPrefix + 'text-inherit';\r\n var _classNameScrollbar = _cassNamesPrefix + _strScrollbar;\r\n var _classNameScrollbarTrack = _classNameScrollbar + '-track';\r\n var _classNameScrollbarTrackOff = _classNameScrollbarTrack + '-off';\r\n var _classNameScrollbarHandle = _classNameScrollbar + '-handle';\r\n var _classNameScrollbarHandleOff = _classNameScrollbarHandle + '-off';\r\n var _classNameScrollbarUnusable = _classNameScrollbar + '-unusable';\r\n var _classNameScrollbarAutoHidden = _classNameScrollbar + '-' + _strAuto + _strMinusHidden;\r\n var _classNameScrollbarCorner = _classNameScrollbar + '-corner';\r\n var _classNameScrollbarCornerResize = _classNameScrollbarCorner + '-resize';\r\n var _classNameScrollbarCornerResizeB = _classNameScrollbarCornerResize + '-both';\r\n var _classNameScrollbarCornerResizeH = _classNameScrollbarCornerResize + _strMinusHorizontal;\r\n var _classNameScrollbarCornerResizeV = _classNameScrollbarCornerResize + _strMinusVertical;\r\n var _classNameScrollbarHorizontal = _classNameScrollbar + _strMinusHorizontal;\r\n var _classNameScrollbarVertical = _classNameScrollbar + _strMinusVertical;\r\n var _classNameDragging = _cassNamesPrefix + 'dragging';\r\n var _classNameThemeNone = _cassNamesPrefix + 'theme-none';\r\n var _classNamesDynamicDestroy = [\r\n _classNameViewportNativeScrollbarsInvisible,\r\n _classNameViewportNativeScrollbarsOverlaid,\r\n _classNameScrollbarTrackOff,\r\n _classNameScrollbarHandleOff,\r\n _classNameScrollbarUnusable,\r\n _classNameScrollbarAutoHidden,\r\n _classNameScrollbarCornerResize,\r\n _classNameScrollbarCornerResizeB,\r\n _classNameScrollbarCornerResizeH,\r\n _classNameScrollbarCornerResizeV,\r\n _classNameDragging].join(_strSpace);\r\n\r\n //callbacks:\t\r\n var _callbacksInitQeueue = [];\r\n\r\n //attrs viewport shall inherit from target\t\r\n var _viewportAttrsFromTarget = [LEXICON.ti];\r\n\r\n //options:\t\r\n var _defaultOptions;\r\n var _currentOptions;\r\n var _currentPreparedOptions;\r\n\r\n //extensions:\t\r\n var _extensions = {};\r\n var _extensionsPrivateMethods = 'added removed on contract';\r\n\r\n //update\t\r\n var _lastUpdateTime;\r\n var _swallowedUpdateHints = {};\r\n var _swallowedUpdateTimeout;\r\n var _swallowUpdateLag = 42;\r\n var _updateOnLoadEventName = 'load';\r\n var _updateOnLoadElms = [];\r\n\r\n //DOM elements:\t\r\n var _windowElement;\r\n var _documentElement;\r\n var _htmlElement;\r\n var _bodyElement;\r\n var _targetElement; //the target element of this OverlayScrollbars object\t\r\n var _hostElement; //the host element of this OverlayScrollbars object -> may be the same as targetElement\t\r\n var _sizeAutoObserverElement; //observes size auto changes\t\r\n var _sizeObserverElement; //observes size and padding changes\t\r\n var _paddingElement; //manages the padding\t\r\n var _viewportElement; //is the viewport of our scrollbar model\t\r\n var _contentElement; //the element which holds the content\t\r\n var _contentArrangeElement; //is needed for correct sizing of the content element (only if native scrollbars are overlays)\t\r\n var _contentGlueElement; //has always the size of the content element\t\r\n var _textareaCoverElement; //only applied if target is a textarea element. Used for correct size calculation and for prevention of uncontrolled scrolling\t\r\n var _scrollbarCornerElement;\r\n var _scrollbarHorizontalElement;\r\n var _scrollbarHorizontalTrackElement;\r\n var _scrollbarHorizontalHandleElement;\r\n var _scrollbarVerticalElement;\r\n var _scrollbarVerticalTrackElement;\r\n var _scrollbarVerticalHandleElement;\r\n var _windowElementNative;\r\n var _documentElementNative;\r\n var _targetElementNative;\r\n var _hostElementNative;\r\n var _sizeAutoObserverElementNative;\r\n var _sizeObserverElementNative;\r\n var _paddingElementNative;\r\n var _viewportElementNative;\r\n var _contentElementNative;\r\n\r\n //Cache:\t\r\n var _hostSizeCache;\r\n var _contentScrollSizeCache;\r\n var _arrangeContentSizeCache;\r\n var _hasOverflowCache;\r\n var _hideOverflowCache;\r\n var _widthAutoCache;\r\n var _heightAutoCache;\r\n var _cssBoxSizingCache;\r\n var _cssPaddingCache;\r\n var _cssBorderCache;\r\n var _cssMarginCache;\r\n var _cssDirectionCache;\r\n var _cssDirectionDetectedCache;\r\n var _paddingAbsoluteCache;\r\n var _clipAlwaysCache;\r\n var _contentGlueSizeCache;\r\n var _overflowBehaviorCache;\r\n var _overflowAmountCache;\r\n var _ignoreOverlayScrollbarHidingCache;\r\n var _autoUpdateCache;\r\n var _sizeAutoCapableCache;\r\n var _contentElementScrollSizeChangeDetectedCache;\r\n var _hostElementSizeChangeDetectedCache;\r\n var _scrollbarsVisibilityCache;\r\n var _scrollbarsAutoHideCache;\r\n var _scrollbarsClickScrollingCache;\r\n var _scrollbarsDragScrollingCache;\r\n var _resizeCache;\r\n var _normalizeRTLCache;\r\n var _classNameCache;\r\n var _oldClassName;\r\n var _textareaAutoWrappingCache;\r\n var _textareaInfoCache;\r\n var _textareaSizeCache;\r\n var _textareaDynHeightCache;\r\n var _textareaDynWidthCache;\r\n var _bodyMinSizeCache;\r\n var _updateAutoCache = {};\r\n\r\n //MutationObserver:\t\r\n var _mutationObserverHost;\r\n var _mutationObserverContent;\r\n var _mutationObserverHostCallback;\r\n var _mutationObserverContentCallback;\r\n var _mutationObserversConnected;\r\n var _mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n var _mutationObserverAttrsHost = [LEXICON.i, LEXICON.c, LEXICON.s, 'open'].concat(_viewportAttrsFromTarget);\r\n\r\n //events:\t\r\n var _destroyEvents = [];\r\n\r\n //textarea:\t\r\n var _textareaHasFocus;\r\n\r\n //scrollbars:\t\r\n var _scrollbarsAutoHideTimeoutId;\r\n var _scrollbarsAutoHideMoveTimeoutId;\r\n var _scrollbarsAutoHideDelay;\r\n var _scrollbarsAutoHideNever;\r\n var _scrollbarsAutoHideScroll;\r\n var _scrollbarsAutoHideMove;\r\n var _scrollbarsAutoHideLeave;\r\n var _scrollbarsHandleHovered;\r\n var _scrollbarsHandlesDefineScrollPos;\r\n\r\n //resize\t\r\n var _resizeNone;\r\n var _resizeBoth;\r\n var _resizeHorizontal;\r\n var _resizeVertical;\r\n\r\n\r\n //==== Event Listener ====//\t\r\n\r\n /**\t\r\n * Adds or removes a event listener from the given element. \t\r\n * @param element The element to which the event listener shall be applied or removed.\t\r\n * @param eventNames The name(s) of the events.\t\r\n * @param listener The method which shall be called.\t\r\n * @param remove True if the handler shall be removed, false or undefined if the handler shall be added.\t\r\n * @param passiveOrOptions The options for the event.\r\n */\r\n function setupResponsiveEventListener(element, eventNames, listener, remove, passiveOrOptions) {\r\n var collected = COMPATIBILITY.isA(eventNames) && COMPATIBILITY.isA(listener);\r\n var method = remove ? 'removeEventListener' : 'addEventListener';\r\n var onOff = remove ? 'off' : 'on';\r\n var events = collected ? false : eventNames.split(_strSpace)\r\n var i = 0;\r\n\r\n var passiveOrOptionsIsObj = FRAMEWORK.isPlainObject(passiveOrOptions);\r\n var passive = (_supportPassiveEvents && (passiveOrOptionsIsObj ? (passiveOrOptions._passive) : passiveOrOptions)) || false;\r\n var capture = passiveOrOptionsIsObj && (passiveOrOptions._capture || false);\r\n var nativeParam = _supportPassiveEvents ? {\r\n passive: passive,\r\n capture: capture,\r\n } : capture;\r\n\r\n if (collected) {\r\n for (; i < eventNames[LEXICON.l]; i++)\r\n setupResponsiveEventListener(element, eventNames[i], listener[i], remove, passiveOrOptions);\r\n }\r\n else {\r\n for (; i < events[LEXICON.l]; i++) {\r\n if(_supportPassiveEvents) {\r\n element[0][method](events[i], listener, nativeParam);\r\n }\r\n else {\r\n element[onOff](events[i], listener);\r\n } \r\n }\r\n }\r\n }\r\n\r\n\r\n function addDestroyEventListener(element, eventNames, listener, passive) {\r\n setupResponsiveEventListener(element, eventNames, listener, false, passive);\r\n _destroyEvents.push(COMPATIBILITY.bind(setupResponsiveEventListener, 0, element, eventNames, listener, true, passive));\r\n }\r\n\r\n //==== Resize Observer ====//\r\n\r\n /**\r\n * Adds or removes a resize observer from the given element.\r\n * @param targetElement The element to which the resize observer shall be added or removed.\r\n * @param onElementResizedCallback The callback which is fired every time the resize observer registers a size change or false / undefined if the resizeObserver shall be removed.\r\n */\r\n function setupResizeObserver(targetElement, onElementResizedCallback) {\r\n if (targetElement) {\r\n var resizeObserver = COMPATIBILITY.rO();\r\n var strAnimationStartEvent = 'animationstart mozAnimationStart webkitAnimationStart MSAnimationStart';\r\n var strChildNodes = 'childNodes';\r\n var constScroll = 3333333;\r\n var callback = function () {\r\n targetElement[_strScrollTop](constScroll)[_strScrollLeft](_isRTL ? _rtlScrollBehavior.n ? -constScroll : _rtlScrollBehavior.i ? 0 : constScroll : constScroll);\r\n onElementResizedCallback();\r\n };\r\n //add resize observer:\r\n if (onElementResizedCallback) {\r\n if (_supportResizeObserver) {\r\n var element = targetElement.addClass('observed').append(generateDiv(_classNameResizeObserverElement)).contents()[0];\r\n var observer = element[_strResizeObserverProperty] = new resizeObserver(callback);\r\n observer.observe(element);\r\n }\r\n else {\r\n if (_msieVersion > 9 || !_autoUpdateRecommended) {\r\n targetElement.prepend(\r\n generateDiv(_classNameResizeObserverElement,\r\n generateDiv({ c: _classNameResizeObserverItemElement, dir: 'ltr' },\r\n generateDiv(_classNameResizeObserverItemElement,\r\n generateDiv(_classNameResizeObserverItemFinalElement)\r\n ) +\r\n generateDiv(_classNameResizeObserverItemElement,\r\n generateDiv({ c: _classNameResizeObserverItemFinalElement, style: 'width: 200%; height: 200%' })\r\n )\r\n )\r\n )\r\n );\r\n\r\n var observerElement = targetElement[0][strChildNodes][0][strChildNodes][0];\r\n var shrinkElement = FRAMEWORK(observerElement[strChildNodes][1]);\r\n var expandElement = FRAMEWORK(observerElement[strChildNodes][0]);\r\n var expandElementChild = FRAMEWORK(expandElement[0][strChildNodes][0]);\r\n var widthCache = observerElement[LEXICON.oW];\r\n var heightCache = observerElement[LEXICON.oH];\r\n var isDirty;\r\n var rAFId;\r\n var currWidth;\r\n var currHeight;\r\n var factor = 2;\r\n var nativeScrollbarSize = globals.nativeScrollbarSize; //care don't make changes to this object!!!\r\n var reset = function () {\r\n /*\r\n var sizeResetWidth = observerElement[LEXICON.oW] + nativeScrollbarSize.x * factor + nativeScrollbarSize.y * factor + _overlayScrollbarDummySize.x + _overlayScrollbarDummySize.y;\r\n var sizeResetHeight = observerElement[LEXICON.oH] + nativeScrollbarSize.x * factor + nativeScrollbarSize.y * factor + _overlayScrollbarDummySize.x + _overlayScrollbarDummySize.y;\r\n var expandChildCSS = {};\r\n expandChildCSS[_strWidth] = sizeResetWidth;\r\n expandChildCSS[_strHeight] = sizeResetHeight;\r\n expandElementChild.css(expandChildCSS);\r\n\r\n\r\n expandElement[_strScrollLeft](sizeResetWidth)[_strScrollTop](sizeResetHeight);\r\n shrinkElement[_strScrollLeft](sizeResetWidth)[_strScrollTop](sizeResetHeight);\r\n */\r\n expandElement[_strScrollLeft](constScroll)[_strScrollTop](constScroll);\r\n shrinkElement[_strScrollLeft](constScroll)[_strScrollTop](constScroll);\r\n };\r\n var onResized = function () {\r\n rAFId = 0;\r\n if (!isDirty)\r\n return;\r\n\r\n widthCache = currWidth;\r\n heightCache = currHeight;\r\n callback();\r\n };\r\n var onScroll = function (event) {\r\n currWidth = observerElement[LEXICON.oW];\r\n currHeight = observerElement[LEXICON.oH];\r\n isDirty = currWidth != widthCache || currHeight != heightCache;\r\n\r\n if (event && isDirty && !rAFId) {\r\n COMPATIBILITY.cAF()(rAFId);\r\n rAFId = COMPATIBILITY.rAF()(onResized);\r\n }\r\n else if (!event)\r\n onResized();\r\n\r\n reset();\r\n if (event) {\r\n COMPATIBILITY.prvD(event);\r\n COMPATIBILITY.stpP(event);\r\n }\r\n return false;\r\n };\r\n var expandChildCSS = {};\r\n var observerElementCSS = {};\r\n\r\n setTopRightBottomLeft(observerElementCSS, _strEmpty, [\r\n -((nativeScrollbarSize.y + 1) * factor),\r\n nativeScrollbarSize.x * -factor,\r\n nativeScrollbarSize.y * -factor,\r\n -((nativeScrollbarSize.x + 1) * factor)\r\n ]);\r\n\r\n FRAMEWORK(observerElement).css(observerElementCSS);\r\n expandElement.on(_strScroll, onScroll);\r\n shrinkElement.on(_strScroll, onScroll);\r\n targetElement.on(strAnimationStartEvent, function () {\r\n onScroll(false);\r\n });\r\n //lets assume that the divs will never be that large and a constant value is enough\r\n expandChildCSS[_strWidth] = constScroll;\r\n expandChildCSS[_strHeight] = constScroll;\r\n expandElementChild.css(expandChildCSS);\r\n\r\n reset();\r\n }\r\n else {\r\n var attachEvent = _documentElementNative.attachEvent;\r\n var isIE = _msieVersion !== undefined;\r\n if (attachEvent) {\r\n targetElement.prepend(generateDiv(_classNameResizeObserverElement));\r\n findFirst(targetElement, _strDot + _classNameResizeObserverElement)[0].attachEvent('onresize', callback);\r\n }\r\n else {\r\n var obj = _documentElementNative.createElement(TYPES.o);\r\n obj.setAttribute(LEXICON.ti, '-1');\r\n obj.setAttribute(LEXICON.c, _classNameResizeObserverElement);\r\n obj.onload = function () {\r\n var wnd = this.contentDocument.defaultView;\r\n wnd.addEventListener('resize', callback);\r\n wnd.document.documentElement.style.display = 'none';\r\n };\r\n obj.type = 'text/html';\r\n if (isIE)\r\n targetElement.prepend(obj);\r\n obj.data = 'about:blank';\r\n if (!isIE)\r\n targetElement.prepend(obj);\r\n targetElement.on(strAnimationStartEvent, callback);\r\n }\r\n }\r\n }\r\n\r\n if (targetElement[0] === _sizeObserverElementNative) {\r\n var directionChanged = function () {\r\n var dir = _hostElement.css('direction');\r\n var css = {};\r\n var scrollLeftValue = 0;\r\n var result = false;\r\n if (dir !== _cssDirectionDetectedCache) {\r\n if (dir === 'ltr') {\r\n css[_strLeft] = 0;\r\n css[_strRight] = _strAuto;\r\n scrollLeftValue = constScroll;\r\n }\r\n else {\r\n css[_strLeft] = _strAuto;\r\n css[_strRight] = 0;\r\n scrollLeftValue = _rtlScrollBehavior.n ? -constScroll : _rtlScrollBehavior.i ? 0 : constScroll;\r\n }\r\n //execution order is important for IE!!!\r\n _sizeObserverElement.children().eq(0).css(css);\r\n _sizeObserverElement[_strScrollLeft](scrollLeftValue)[_strScrollTop](constScroll);\r\n _cssDirectionDetectedCache = dir;\r\n result = true;\r\n }\r\n return result;\r\n };\r\n directionChanged();\r\n addDestroyEventListener(targetElement, _strScroll, function (event) {\r\n if (directionChanged())\r\n update();\r\n COMPATIBILITY.prvD(event);\r\n COMPATIBILITY.stpP(event);\r\n return false;\r\n });\r\n }\r\n }\r\n //remove resize observer:\r\n else {\r\n if (_supportResizeObserver) {\r\n var element = targetElement.contents()[0];\r\n var resizeObserverObj = element[_strResizeObserverProperty];\r\n if (resizeObserverObj) {\r\n resizeObserverObj.disconnect();\r\n delete element[_strResizeObserverProperty];\r\n }\r\n }\r\n else {\r\n remove(targetElement.children(_strDot + _classNameResizeObserverElement).eq(0));\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Freezes or unfreezes the given resize observer.\r\n * @param targetElement The element to which the target resize observer is applied.\r\n * @param freeze True if the resize observer shall be frozen, false otherwise.\r\n \r\n function freezeResizeObserver(targetElement, freeze) {\r\n if (targetElement !== undefined) {\r\n if(freeze) {\r\n if (_supportResizeObserver) {\r\n var element = targetElement.contents()[0];\r\n element[_strResizeObserverProperty].unobserve(element);\r\n }\r\n else {\r\n targetElement = targetElement.children(_strDot + _classNameResizeObserverElement).eq(0);\r\n var w = targetElement.css(_strWidth);\r\n var h = targetElement.css(_strHeight);\r\n var css = {};\r\n css[_strWidth] = w;\r\n css[_strHeight] = h;\r\n targetElement.css(css);\r\n }\r\n }\r\n else {\r\n if (_supportResizeObserver) {\r\n var element = targetElement.contents()[0];\r\n element[_strResizeObserverProperty].observe(element);\r\n }\r\n else {\r\n var css = { };\r\n css[_strHeight] = _strEmpty;\r\n css[_strWidth] = _strEmpty;\r\n targetElement.children(_strDot + _classNameResizeObserverElement).eq(0).css(css);\r\n }\r\n }\r\n }\r\n }\r\n */\r\n\r\n\r\n //==== Mutation Observers ====//\r\n\r\n /**\r\n * Creates MutationObservers for the host and content Element if they are supported.\r\n */\r\n function createMutationObservers() {\r\n if (_supportMutationObserver) {\r\n var mutationObserverContentLag = 11;\r\n var mutationObserver = COMPATIBILITY.mO();\r\n var contentLastUpdate = COMPATIBILITY.now();\r\n var mutationTarget;\r\n var mutationAttrName;\r\n var mutationIsClass;\r\n var oldMutationVal;\r\n var newClassVal;\r\n var hostClassNameRegex;\r\n var contentTimeout;\r\n var now;\r\n var sizeAuto;\r\n var action;\r\n\r\n _mutationObserverHostCallback = function (mutations) {\r\n\r\n var doUpdate = false;\r\n var doUpdateForce = false;\r\n var mutation;\r\n var mutatedAttrs = [];\r\n\r\n if (_initialized && !_sleeping) {\r\n each(mutations, function () {\r\n mutation = this;\r\n mutationTarget = mutation.target;\r\n mutationAttrName = mutation.attributeName;\r\n mutationIsClass = mutationAttrName === LEXICON.c;\r\n oldMutationVal = mutation.oldValue;\r\n newClassVal = mutationTarget.className;\r\n\r\n if (_domExists && mutationIsClass && !doUpdateForce) {\r\n // if old class value contains _classNameHostElementForeign and new class value doesn't\r\n if (oldMutationVal.indexOf(_classNameHostElementForeign) > -1 && newClassVal.indexOf(_classNameHostElementForeign) < 0) {\r\n hostClassNameRegex = createHostClassNameRegExp(true);\r\n _hostElementNative.className = newClassVal.split(_strSpace).concat(oldMutationVal.split(_strSpace).filter(function (name) {\r\n return name.match(hostClassNameRegex);\r\n })).join(_strSpace);\r\n doUpdate = doUpdateForce = true;\r\n }\r\n }\r\n\r\n if (!doUpdate) {\r\n doUpdate = mutationIsClass\r\n ? hostClassNamesChanged(oldMutationVal, newClassVal)\r\n : mutationAttrName === LEXICON.s\r\n ? oldMutationVal !== mutationTarget[LEXICON.s].cssText\r\n : true;\r\n }\r\n\r\n mutatedAttrs.push(mutationAttrName);\r\n });\r\n\r\n updateViewportAttrsFromTarget(mutatedAttrs);\r\n\r\n if (doUpdate)\r\n _base.update(doUpdateForce || _strAuto);\r\n }\r\n return doUpdate;\r\n };\r\n _mutationObserverContentCallback = function (mutations) {\r\n var doUpdate = false;\r\n var mutation;\r\n\r\n if (_initialized && !_sleeping) {\r\n each(mutations, function () {\r\n mutation = this;\r\n doUpdate = isUnknownMutation(mutation);\r\n return !doUpdate;\r\n });\r\n\r\n if (doUpdate) {\r\n now = COMPATIBILITY.now();\r\n sizeAuto = (_heightAutoCache || _widthAutoCache);\r\n action = function () {\r\n if (!_destroyed) {\r\n contentLastUpdate = now;\r\n\r\n //if cols, rows or wrap attr was changed\r\n if (_isTextarea)\r\n textareaUpdate();\r\n\r\n if (sizeAuto)\r\n update();\r\n else\r\n _base.update(_strAuto);\r\n }\r\n };\r\n clearTimeout(contentTimeout);\r\n if (mutationObserverContentLag <= 0 || now - contentLastUpdate > mutationObserverContentLag || !sizeAuto)\r\n action();\r\n else\r\n contentTimeout = setTimeout(action, mutationObserverContentLag);\r\n }\r\n }\r\n return doUpdate;\r\n }\r\n\r\n _mutationObserverHost = new mutationObserver(_mutationObserverHostCallback);\r\n _mutationObserverContent = new mutationObserver(_mutationObserverContentCallback);\r\n }\r\n }\r\n\r\n /**\r\n * Connects the MutationObservers if they are supported.\r\n */\r\n function connectMutationObservers() {\r\n if (_supportMutationObserver && !_mutationObserversConnected) {\r\n _mutationObserverHost.observe(_hostElementNative, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: _mutationObserverAttrsHost\r\n });\r\n\r\n _mutationObserverContent.observe(_isTextarea ? _targetElementNative : _contentElementNative, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n subtree: !_isTextarea,\r\n childList: !_isTextarea,\r\n characterData: !_isTextarea,\r\n attributeFilter: _isTextarea ? _mutationObserverAttrsTextarea : _mutationObserverAttrsHost\r\n });\r\n\r\n _mutationObserversConnected = true;\r\n }\r\n }\r\n\r\n /**\r\n * Disconnects the MutationObservers if they are supported.\r\n */\r\n function disconnectMutationObservers() {\r\n if (_supportMutationObserver && _mutationObserversConnected) {\r\n _mutationObserverHost.disconnect();\r\n _mutationObserverContent.disconnect();\r\n\r\n _mutationObserversConnected = false;\r\n }\r\n }\r\n\r\n\r\n //==== Events of elements ====//\r\n\r\n /**\r\n * This method gets called every time the host element gets resized. IMPORTANT: Padding changes are detected too!!\r\n * It refreshes the hostResizedEventArgs and the hostSizeResizeCache.\r\n * If there are any size changes, the update method gets called.\r\n */\r\n function hostOnResized() {\r\n if (!_sleeping) {\r\n var changed;\r\n var hostSize = {\r\n w: _sizeObserverElementNative[LEXICON.sW],\r\n h: _sizeObserverElementNative[LEXICON.sH]\r\n };\r\n\r\n changed = checkCache(hostSize, _hostElementSizeChangeDetectedCache);\r\n _hostElementSizeChangeDetectedCache = hostSize;\r\n if (changed)\r\n update({ _hostSizeChanged: true });\r\n }\r\n }\r\n\r\n /**\r\n * The mouse enter event of the host element. This event is only needed for the autoHide feature.\r\n */\r\n function hostOnMouseEnter() {\r\n if (_scrollbarsAutoHideLeave)\r\n refreshScrollbarsAutoHide(true);\r\n }\r\n\r\n /**\r\n * The mouse leave event of the host element. This event is only needed for the autoHide feature.\r\n */\r\n function hostOnMouseLeave() {\r\n if (_scrollbarsAutoHideLeave && !_bodyElement.hasClass(_classNameDragging))\r\n refreshScrollbarsAutoHide(false);\r\n }\r\n\r\n /**\r\n * The mouse move event of the host element. This event is only needed for the autoHide \"move\" feature.\r\n */\r\n function hostOnMouseMove() {\r\n if (_scrollbarsAutoHideMove) {\r\n refreshScrollbarsAutoHide(true);\r\n clearTimeout(_scrollbarsAutoHideMoveTimeoutId);\r\n _scrollbarsAutoHideMoveTimeoutId = setTimeout(function () {\r\n if (_scrollbarsAutoHideMove && !_destroyed)\r\n refreshScrollbarsAutoHide(false);\r\n }, 100);\r\n }\r\n }\r\n\r\n /**\r\n * Prevents text from deselection if attached to the document element on the mousedown event of a DOM element.\r\n * @param event The select start event.\r\n */\r\n function documentOnSelectStart(event) {\r\n COMPATIBILITY.prvD(event);\r\n return false;\r\n }\r\n\r\n /**\t\r\n * A callback which will be called after a element has loaded.\t\r\n */\r\n function updateOnLoadCallback(event) {\r\n var elm = FRAMEWORK(event.target);\r\n\r\n eachUpdateOnLoad(function (i, updateOnLoadSelector) {\r\n if (elm.is(updateOnLoadSelector)) {\r\n update({ _contentSizeChanged: true });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Adds or removes mouse & touch events of the host element. (for handling auto-hiding of the scrollbars)\r\n * @param destroy Indicates whether the events shall be added or removed.\r\n */\r\n function setupHostMouseTouchEvents(destroy) {\r\n if (!destroy)\r\n setupHostMouseTouchEvents(true);\r\n\r\n setupResponsiveEventListener(_hostElement,\r\n _strMouseTouchMoveEvent.split(_strSpace)[0],\r\n hostOnMouseMove,\r\n (!_scrollbarsAutoHideMove || destroy), true);\r\n setupResponsiveEventListener(_hostElement,\r\n [_strMouseEnter, _strMouseLeave],\r\n [hostOnMouseEnter, hostOnMouseLeave],\r\n (!_scrollbarsAutoHideLeave || destroy), true);\r\n\r\n //if the plugin is initialized and the mouse is over the host element, make the scrollbars visible\r\n if (!_initialized && !destroy)\r\n _hostElement.one('mouseover', hostOnMouseEnter);\r\n }\r\n\r\n\r\n //==== Update Detection ====//\r\n\r\n /**\r\n * Measures the min width and min height of the body element and refreshes the related cache.\r\n * @returns {boolean} True if the min width or min height has changed, false otherwise.\r\n */\r\n function bodyMinSizeChanged() {\r\n var bodyMinSize = {};\r\n if (_isBody && _contentArrangeElement) {\r\n bodyMinSize.w = parseToZeroOrNumber(_contentArrangeElement.css(_strMinMinus + _strWidth));\r\n bodyMinSize.h = parseToZeroOrNumber(_contentArrangeElement.css(_strMinMinus + _strHeight));\r\n bodyMinSize.c = checkCache(bodyMinSize, _bodyMinSizeCache);\r\n bodyMinSize.f = true; //flag for \"measured at least once\"\r\n }\r\n _bodyMinSizeCache = bodyMinSize;\r\n return !!bodyMinSize.c;\r\n }\r\n\r\n /**\r\n * Returns true if the class names really changed (new class without plugin host prefix)\r\n * @param oldClassNames The old ClassName string or array.\r\n * @param newClassNames The new ClassName string or array.\r\n * @returns {boolean} True if the class names has really changed, false otherwise.\r\n */\r\n function hostClassNamesChanged(oldClassNames, newClassNames) {\r\n var currClasses = typeof newClassNames == TYPES.s ? newClassNames.split(_strSpace) : [];\r\n var oldClasses = typeof oldClassNames == TYPES.s ? oldClassNames.split(_strSpace) : [];\r\n var diff = getArrayDifferences(oldClasses, currClasses);\r\n\r\n // remove none theme from diff list to prevent update\r\n var idx = inArray(_classNameThemeNone, diff);\r\n var i;\r\n var regex;\r\n\r\n if (idx > -1)\r\n diff.splice(idx, 1);\r\n\r\n if (diff[LEXICON.l] > 0) {\r\n regex = createHostClassNameRegExp(true, true);\r\n for (i = 0; i < diff.length; i++) {\r\n if (!diff[i].match(regex)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Returns true if the given mutation is not from a from the plugin generated element. If the target element is a textarea the mutation is always unknown.\r\n * @param mutation The mutation which shall be checked.\r\n * @returns {boolean} True if the mutation is from a unknown element, false otherwise.\r\n */\r\n function isUnknownMutation(mutation) {\r\n var attributeName = mutation.attributeName;\r\n var mutationTarget = mutation.target;\r\n var mutationType = mutation.type;\r\n var strClosest = 'closest';\r\n\r\n if (mutationTarget === _contentElementNative)\r\n return attributeName === null;\r\n if (mutationType === 'attributes' && (attributeName === LEXICON.c || attributeName === LEXICON.s) && !_isTextarea) {\r\n //ignore className changes by the plugin\t\r\n if (attributeName === LEXICON.c && FRAMEWORK(mutationTarget).hasClass(_classNameHostElement))\r\n return hostClassNamesChanged(mutation.oldValue, mutationTarget.className);\r\n\r\n //only do it of browser support it natively\t\r\n if (typeof mutationTarget[strClosest] != TYPES.f)\r\n return true;\r\n if (mutationTarget[strClosest](_strDot + _classNameResizeObserverElement) !== null ||\r\n mutationTarget[strClosest](_strDot + _classNameScrollbar) !== null ||\r\n mutationTarget[strClosest](_strDot + _classNameScrollbarCorner) !== null)\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns true if the content size was changed since the last time this method was called.\r\n * @returns {boolean} True if the content size was changed, false otherwise.\r\n */\r\n function updateAutoContentSizeChanged() {\r\n if (_sleeping)\r\n return false;\r\n\r\n var contentMeasureElement = getContentMeasureElement();\r\n var textareaValueLength = _isTextarea && _widthAutoCache && !_textareaAutoWrappingCache ? _targetElement.val().length : 0;\r\n var setCSS = !_mutationObserversConnected && _widthAutoCache && !_isTextarea;\r\n var css = {};\r\n var float;\r\n var bodyMinSizeC;\r\n var changed;\r\n var contentElementScrollSize;\r\n\r\n if (setCSS) {\r\n float = _contentElement.css(_strFloat);\r\n css[_strFloat] = _isRTL ? _strRight : _strLeft;\r\n css[_strWidth] = _strAuto;\r\n _contentElement.css(css);\r\n }\r\n contentElementScrollSize = {\r\n w: contentMeasureElement[LEXICON.sW] + textareaValueLength,\r\n h: contentMeasureElement[LEXICON.sH] + textareaValueLength\r\n };\r\n if (setCSS) {\r\n css[_strFloat] = float;\r\n css[_strWidth] = _strHundredPercent;\r\n _contentElement.css(css);\r\n }\r\n\r\n bodyMinSizeC = bodyMinSizeChanged();\r\n changed = checkCache(contentElementScrollSize, _contentElementScrollSizeChangeDetectedCache);\r\n\r\n _contentElementScrollSizeChangeDetectedCache = contentElementScrollSize;\r\n\r\n return changed || bodyMinSizeC;\r\n }\r\n\r\n /**\r\n * Returns true when a attribute which the MutationObserver would observe has changed. \r\n * @returns {boolean} True if one of the attributes which a MutationObserver would observe has changed, false or undefined otherwise.\r\n */\r\n function meaningfulAttrsChanged() {\r\n if (_sleeping || _mutationObserversConnected)\r\n return;\r\n\r\n var elem;\r\n var curr;\r\n var cache;\r\n var changedAttrs = [];\r\n var checks = [\r\n {\r\n _elem: _hostElement,\r\n _attrs: _mutationObserverAttrsHost.concat(':visible')\r\n },\r\n {\r\n _elem: _isTextarea ? _targetElement : undefined,\r\n _attrs: _mutationObserverAttrsTextarea\r\n }\r\n ];\r\n\r\n each(checks, function (index, check) {\r\n elem = check._elem;\r\n if (elem) {\r\n each(check._attrs, function (index, attr) {\r\n curr = attr.charAt(0) === ':' ? elem.is(attr) : elem.attr(attr);\r\n cache = _updateAutoCache[attr];\r\n\r\n if (checkCache(curr, cache)) {\r\n changedAttrs.push(attr);\r\n }\r\n\r\n _updateAutoCache[attr] = curr;\r\n });\r\n }\r\n });\r\n\r\n updateViewportAttrsFromTarget(changedAttrs);\r\n\r\n return changedAttrs[LEXICON.l] > 0;\r\n }\r\n\r\n /**\r\n * Checks is a CSS Property of a child element is affecting the scroll size of the content.\r\n * @param propertyName The CSS property name.\r\n * @returns {boolean} True if the property is affecting the content scroll size, false otherwise.\r\n */\r\n function isSizeAffectingCSSProperty(propertyName) {\r\n if (!_initialized)\r\n return true;\r\n var flexGrow = 'flex-grow';\r\n var flexShrink = 'flex-shrink';\r\n var flexBasis = 'flex-basis';\r\n var affectingPropsX = [\r\n _strWidth,\r\n _strMinMinus + _strWidth,\r\n _strMaxMinus + _strWidth,\r\n _strMarginMinus + _strLeft,\r\n _strMarginMinus + _strRight,\r\n _strLeft,\r\n _strRight,\r\n 'font-weight',\r\n 'word-spacing',\r\n flexGrow,\r\n flexShrink,\r\n flexBasis\r\n ];\r\n var affectingPropsXContentBox = [\r\n _strPaddingMinus + _strLeft,\r\n _strPaddingMinus + _strRight,\r\n _strBorderMinus + _strLeft + _strWidth,\r\n _strBorderMinus + _strRight + _strWidth\r\n ];\r\n var affectingPropsY = [\r\n _strHeight,\r\n _strMinMinus + _strHeight,\r\n _strMaxMinus + _strHeight,\r\n _strMarginMinus + _strTop,\r\n _strMarginMinus + _strBottom,\r\n _strTop,\r\n _strBottom,\r\n 'line-height',\r\n flexGrow,\r\n flexShrink,\r\n flexBasis\r\n ];\r\n var affectingPropsYContentBox = [\r\n _strPaddingMinus + _strTop,\r\n _strPaddingMinus + _strBottom,\r\n _strBorderMinus + _strTop + _strWidth,\r\n _strBorderMinus + _strBottom + _strWidth\r\n ];\r\n var _strS = 's';\r\n var _strVS = 'v-s';\r\n var checkX = _overflowBehaviorCache.x === _strS || _overflowBehaviorCache.x === _strVS;\r\n var checkY = _overflowBehaviorCache.y === _strS || _overflowBehaviorCache.y === _strVS;\r\n var sizeIsAffected = false;\r\n var checkPropertyName = function (arr, name) {\r\n for (var i = 0; i < arr[LEXICON.l]; i++) {\r\n if (arr[i] === name)\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n if (checkY) {\r\n sizeIsAffected = checkPropertyName(affectingPropsY, propertyName);\r\n if (!sizeIsAffected && !_isBorderBox)\r\n sizeIsAffected = checkPropertyName(affectingPropsYContentBox, propertyName);\r\n }\r\n if (checkX && !sizeIsAffected) {\r\n sizeIsAffected = checkPropertyName(affectingPropsX, propertyName);\r\n if (!sizeIsAffected && !_isBorderBox)\r\n sizeIsAffected = checkPropertyName(affectingPropsXContentBox, propertyName);\r\n }\r\n return sizeIsAffected;\r\n }\r\n\r\n\r\n //==== Update ====//\r\n\r\n /**\r\n * Sets the attribute values of the viewport element to the values from the target element.\r\n * The value of a attribute is only set if the attribute is whitelisted.\r\n * @attrs attrs The array of attributes which shall be set or undefined if all whitelisted shall be set.\r\n */\r\n function updateViewportAttrsFromTarget(attrs) {\r\n attrs = attrs || _viewportAttrsFromTarget;\r\n each(attrs, function (index, attr) {\r\n if (COMPATIBILITY.inA(attr, _viewportAttrsFromTarget) > -1) {\r\n var targetAttr = _targetElement.attr(attr);\r\n if (type(targetAttr) == TYPES.s) {\r\n _viewportElement.attr(attr, targetAttr);\r\n }\r\n else {\r\n _viewportElement.removeAttr(attr);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Updates the variables and size of the textarea element, and manages the scroll on new line or new character.\r\n */\r\n function textareaUpdate() {\r\n if (!_sleeping) {\r\n var wrapAttrOff = !_textareaAutoWrappingCache;\r\n var minWidth = _viewportSize.w;\r\n var minHeight = _viewportSize.h;\r\n var css = {};\r\n var doMeasure = _widthAutoCache || wrapAttrOff;\r\n var origWidth;\r\n var width;\r\n var origHeight;\r\n var height;\r\n\r\n //reset min size\r\n css[_strMinMinus + _strWidth] = _strEmpty;\r\n css[_strMinMinus + _strHeight] = _strEmpty;\r\n\r\n //set width auto\r\n css[_strWidth] = _strAuto;\r\n _targetElement.css(css);\r\n\r\n //measure width\r\n origWidth = _targetElementNative[LEXICON.oW];\r\n width = doMeasure ? MATH.max(origWidth, _targetElementNative[LEXICON.sW] - 1) : 1;\r\n /*width += (_widthAutoCache ? _marginX + (!_isBorderBox ? wrapAttrOff ? 0 : _paddingX + _borderX : 0) : 0);*/\r\n\r\n //set measured width\r\n css[_strWidth] = _widthAutoCache ? _strAuto /*width*/ : _strHundredPercent;\r\n css[_strMinMinus + _strWidth] = _strHundredPercent;\r\n\r\n //set height auto\r\n css[_strHeight] = _strAuto;\r\n _targetElement.css(css);\r\n\r\n //measure height\r\n origHeight = _targetElementNative[LEXICON.oH];\r\n height = MATH.max(origHeight, _targetElementNative[LEXICON.sH] - 1);\r\n\r\n //append correct size values\r\n css[_strWidth] = width;\r\n css[_strHeight] = height;\r\n _textareaCoverElement.css(css);\r\n\r\n //apply min width / min height to prevent textarea collapsing\r\n css[_strMinMinus + _strWidth] = minWidth /*+ (!_isBorderBox && _widthAutoCache ? _paddingX + _borderX : 0)*/;\r\n css[_strMinMinus + _strHeight] = minHeight /*+ (!_isBorderBox && _heightAutoCache ? _paddingY + _borderY : 0)*/;\r\n _targetElement.css(css);\r\n\r\n return {\r\n _originalWidth: origWidth,\r\n _originalHeight: origHeight,\r\n _dynamicWidth: width,\r\n _dynamicHeight: height\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Updates the plugin and DOM to the current options.\r\n * This method should only be called if a update is 100% required.\r\n * @param updateHints A objects which contains hints for this update:\r\n * {\r\n * _hostSizeChanged : boolean,\r\n * _contentSizeChanged : boolean,\r\n * _force : boolean, == preventSwallowing\r\n * _changedOptions : { }, == preventSwallowing && preventSleep\r\n * }\r\n */\r\n function update(updateHints) {\r\n clearTimeout(_swallowedUpdateTimeout);\r\n updateHints = updateHints || {};\r\n _swallowedUpdateHints._hostSizeChanged |= updateHints._hostSizeChanged;\r\n _swallowedUpdateHints._contentSizeChanged |= updateHints._contentSizeChanged;\r\n _swallowedUpdateHints._force |= updateHints._force;\r\n\r\n var now = COMPATIBILITY.now();\r\n var hostSizeChanged = !!_swallowedUpdateHints._hostSizeChanged;\r\n var contentSizeChanged = !!_swallowedUpdateHints._contentSizeChanged;\r\n var force = !!_swallowedUpdateHints._force;\r\n var changedOptions = updateHints._changedOptions;\r\n var swallow = _swallowUpdateLag > 0 && _initialized && !_destroyed && !force && !changedOptions && (now - _lastUpdateTime) < _swallowUpdateLag && (!_heightAutoCache && !_widthAutoCache);\r\n var displayIsHidden;\r\n\r\n if (swallow)\r\n _swallowedUpdateTimeout = setTimeout(update, _swallowUpdateLag);\r\n\r\n //abort update due to:\r\n //destroyed\r\n //swallowing\r\n //sleeping\r\n //host is hidden or has false display\r\n if (_destroyed || swallow || (_sleeping && !changedOptions) || (_initialized && !force && (displayIsHidden = _hostElement.is(':hidden'))) || _hostElement.css('display') === 'inline')\r\n return;\r\n\r\n _lastUpdateTime = now;\r\n _swallowedUpdateHints = {};\r\n\r\n //if scrollbar styling is possible and native scrollbars aren't overlaid the scrollbar styling will be applied which hides the native scrollbars completely.\r\n if (_nativeScrollbarStyling && !(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)) {\r\n //native scrollbars are hidden, so change the values to zero\r\n _nativeScrollbarSize.x = 0;\r\n _nativeScrollbarSize.y = 0;\r\n }\r\n else {\r\n //refresh native scrollbar size (in case of zoom)\r\n _nativeScrollbarSize = extendDeep({}, globals.nativeScrollbarSize);\r\n }\r\n\r\n // Scrollbar padding is needed for firefox, because firefox hides scrollbar automatically if the size of the div is too small.\r\n // The calculation: [scrollbar size +3 *3]\r\n // (+3 because of possible decoration e.g. borders, margins etc., but only if native scrollbar is NOT a overlaid scrollbar)\r\n // (*3 because (1)increase / (2)decrease -button and (3)resize handle)\r\n _nativeScrollbarMinSize = {\r\n x: (_nativeScrollbarSize.x + (_nativeScrollbarIsOverlaid.x ? 0 : 3)) * 3,\r\n y: (_nativeScrollbarSize.y + (_nativeScrollbarIsOverlaid.y ? 0 : 3)) * 3\r\n };\r\n\r\n changedOptions = changedOptions || {};\r\n //freezeResizeObserver(_sizeObserverElement, true);\r\n //freezeResizeObserver(_sizeAutoObserverElement, true);\r\n\r\n var checkCacheAutoForce = function () {\r\n return checkCache.apply(this, [].slice.call(arguments).concat([force]));\r\n };\r\n\r\n //save current scroll offset\r\n var currScroll = {\r\n x: _viewportElement[_strScrollLeft](),\r\n y: _viewportElement[_strScrollTop]()\r\n };\r\n\r\n var currentPreparedOptionsScrollbars = _currentPreparedOptions.scrollbars;\r\n var currentPreparedOptionsTextarea = _currentPreparedOptions.textarea;\r\n\r\n //scrollbars visibility:\r\n var scrollbarsVisibility = currentPreparedOptionsScrollbars.visibility;\r\n var scrollbarsVisibilityChanged = checkCacheAutoForce(scrollbarsVisibility, _scrollbarsVisibilityCache);\r\n\r\n //scrollbars autoHide:\r\n var scrollbarsAutoHide = currentPreparedOptionsScrollbars.autoHide;\r\n var scrollbarsAutoHideChanged = checkCacheAutoForce(scrollbarsAutoHide, _scrollbarsAutoHideCache);\r\n\r\n //scrollbars click scrolling\r\n var scrollbarsClickScrolling = currentPreparedOptionsScrollbars.clickScrolling;\r\n var scrollbarsClickScrollingChanged = checkCacheAutoForce(scrollbarsClickScrolling, _scrollbarsClickScrollingCache);\r\n\r\n //scrollbars drag scrolling\r\n var scrollbarsDragScrolling = currentPreparedOptionsScrollbars.dragScrolling;\r\n var scrollbarsDragScrollingChanged = checkCacheAutoForce(scrollbarsDragScrolling, _scrollbarsDragScrollingCache);\r\n\r\n //className\r\n var className = _currentPreparedOptions.className;\r\n var classNameChanged = checkCacheAutoForce(className, _classNameCache);\r\n\r\n //resize\r\n var resize = _currentPreparedOptions.resize;\r\n var resizeChanged = checkCacheAutoForce(resize, _resizeCache) && !_isBody; //body can't be resized since the window itself acts as resize possibility.\r\n\r\n //paddingAbsolute\r\n var paddingAbsolute = _currentPreparedOptions.paddingAbsolute;\r\n var paddingAbsoluteChanged = checkCacheAutoForce(paddingAbsolute, _paddingAbsoluteCache);\r\n\r\n //clipAlways\r\n var clipAlways = _currentPreparedOptions.clipAlways;\r\n var clipAlwaysChanged = checkCacheAutoForce(clipAlways, _clipAlwaysCache);\r\n\r\n //sizeAutoCapable\r\n var sizeAutoCapable = _currentPreparedOptions.sizeAutoCapable && !_isBody; //body can never be size auto, because it shall be always as big as the viewport.\r\n var sizeAutoCapableChanged = checkCacheAutoForce(sizeAutoCapable, _sizeAutoCapableCache);\r\n\r\n //showNativeScrollbars\r\n var ignoreOverlayScrollbarHiding = _currentPreparedOptions.nativeScrollbarsOverlaid.showNativeScrollbars;\r\n var ignoreOverlayScrollbarHidingChanged = checkCacheAutoForce(ignoreOverlayScrollbarHiding, _ignoreOverlayScrollbarHidingCache);\r\n\r\n //autoUpdate\r\n var autoUpdate = _currentPreparedOptions.autoUpdate;\r\n var autoUpdateChanged = checkCacheAutoForce(autoUpdate, _autoUpdateCache);\r\n\r\n //overflowBehavior\r\n var overflowBehavior = _currentPreparedOptions.overflowBehavior;\r\n var overflowBehaviorChanged = checkCacheAutoForce(overflowBehavior, _overflowBehaviorCache, force);\r\n\r\n //dynWidth:\r\n var textareaDynWidth = currentPreparedOptionsTextarea.dynWidth;\r\n var textareaDynWidthChanged = checkCacheAutoForce(_textareaDynWidthCache, textareaDynWidth);\r\n\r\n //dynHeight:\r\n var textareaDynHeight = currentPreparedOptionsTextarea.dynHeight;\r\n var textareaDynHeightChanged = checkCacheAutoForce(_textareaDynHeightCache, textareaDynHeight);\r\n\r\n //scrollbars visibility\r\n _scrollbarsAutoHideNever = scrollbarsAutoHide === 'n';\r\n _scrollbarsAutoHideScroll = scrollbarsAutoHide === 's';\r\n _scrollbarsAutoHideMove = scrollbarsAutoHide === 'm';\r\n _scrollbarsAutoHideLeave = scrollbarsAutoHide === 'l';\r\n\r\n //scrollbars autoHideDelay\r\n _scrollbarsAutoHideDelay = currentPreparedOptionsScrollbars.autoHideDelay;\r\n\r\n //old className\r\n _oldClassName = _classNameCache;\r\n\r\n //resize\r\n _resizeNone = resize === 'n';\r\n _resizeBoth = resize === 'b';\r\n _resizeHorizontal = resize === 'h';\r\n _resizeVertical = resize === 'v';\r\n\r\n //normalizeRTL\r\n _normalizeRTLCache = _currentPreparedOptions.normalizeRTL;\r\n\r\n //ignore overlay scrollbar hiding\r\n ignoreOverlayScrollbarHiding = ignoreOverlayScrollbarHiding && (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y);\r\n\r\n //refresh options cache\r\n _scrollbarsVisibilityCache = scrollbarsVisibility;\r\n _scrollbarsAutoHideCache = scrollbarsAutoHide;\r\n _scrollbarsClickScrollingCache = scrollbarsClickScrolling;\r\n _scrollbarsDragScrollingCache = scrollbarsDragScrolling;\r\n _classNameCache = className;\r\n _resizeCache = resize;\r\n _paddingAbsoluteCache = paddingAbsolute;\r\n _clipAlwaysCache = clipAlways;\r\n _sizeAutoCapableCache = sizeAutoCapable;\r\n _ignoreOverlayScrollbarHidingCache = ignoreOverlayScrollbarHiding;\r\n _autoUpdateCache = autoUpdate;\r\n _overflowBehaviorCache = extendDeep({}, overflowBehavior);\r\n _textareaDynWidthCache = textareaDynWidth;\r\n _textareaDynHeightCache = textareaDynHeight;\r\n _hasOverflowCache = _hasOverflowCache || { x: false, y: false };\r\n\r\n //set correct class name to the host element\r\n if (classNameChanged) {\r\n removeClass(_hostElement, _oldClassName + _strSpace + _classNameThemeNone);\r\n addClass(_hostElement, className !== undefined && className !== null && className.length > 0 ? className : _classNameThemeNone);\r\n }\r\n\r\n //set correct auto Update\r\n if (autoUpdateChanged) {\r\n if (autoUpdate === true || (autoUpdate === null && _autoUpdateRecommended)) {\r\n disconnectMutationObservers();\r\n autoUpdateLoop.add(_base);\r\n }\r\n else {\r\n autoUpdateLoop.remove(_base);\r\n connectMutationObservers();\r\n }\r\n }\r\n\r\n //activate or deactivate size auto capability\r\n if (sizeAutoCapableChanged) {\r\n if (sizeAutoCapable) {\r\n if (_contentGlueElement) {\r\n _contentGlueElement.show();\r\n }\r\n else {\r\n _contentGlueElement = FRAMEWORK(generateDiv(_classNameContentGlueElement));\r\n _paddingElement.before(_contentGlueElement);\r\n }\r\n if (_sizeAutoObserverAdded) {\r\n _sizeAutoObserverElement.show();\r\n }\r\n else {\r\n _sizeAutoObserverElement = FRAMEWORK(generateDiv(_classNameSizeAutoObserverElement));\r\n _sizeAutoObserverElementNative = _sizeAutoObserverElement[0];\r\n\r\n _contentGlueElement.before(_sizeAutoObserverElement);\r\n var oldSize = { w: -1, h: -1 };\r\n setupResizeObserver(_sizeAutoObserverElement, function () {\r\n var newSize = {\r\n w: _sizeAutoObserverElementNative[LEXICON.oW],\r\n h: _sizeAutoObserverElementNative[LEXICON.oH]\r\n };\r\n if (checkCache(newSize, oldSize)) {\r\n if (_initialized && (_heightAutoCache && newSize.h > 0) || (_widthAutoCache && newSize.w > 0)) {\r\n update();\r\n }\r\n else if (_initialized && (!_heightAutoCache && newSize.h === 0) || (!_widthAutoCache && newSize.w === 0)) {\r\n update();\r\n }\r\n }\r\n oldSize = newSize;\r\n });\r\n _sizeAutoObserverAdded = true;\r\n //fix heightAuto detector bug if height is fixed but contentHeight is 0.\r\n //the probability this bug will ever happen is very very low, thats why its ok if we use calc which isn't supported in IE8.\r\n if (_cssCalc !== null)\r\n _sizeAutoObserverElement.css(_strHeight, _cssCalc + '(100% + 1px)');\r\n }\r\n }\r\n else {\r\n if (_sizeAutoObserverAdded)\r\n _sizeAutoObserverElement.hide();\r\n if (_contentGlueElement)\r\n _contentGlueElement.hide();\r\n }\r\n }\r\n\r\n //if force, update all resizeObservers too\r\n if (force) {\r\n _sizeObserverElement.find('*').trigger(_strScroll);\r\n if (_sizeAutoObserverAdded)\r\n _sizeAutoObserverElement.find('*').trigger(_strScroll);\r\n }\r\n\r\n //display hidden:\r\n displayIsHidden = displayIsHidden === undefined ? _hostElement.is(':hidden') : displayIsHidden;\r\n\r\n //textarea AutoWrapping:\r\n var textareaAutoWrapping = _isTextarea ? _targetElement.attr('wrap') !== 'off' : false;\r\n var textareaAutoWrappingChanged = checkCacheAutoForce(textareaAutoWrapping, _textareaAutoWrappingCache);\r\n\r\n //detect direction:\r\n var cssDirection = _hostElement.css('direction');\r\n var cssDirectionChanged = checkCacheAutoForce(cssDirection, _cssDirectionCache);\r\n\r\n //detect box-sizing:\r\n var boxSizing = _hostElement.css('box-sizing');\r\n var boxSizingChanged = checkCacheAutoForce(boxSizing, _cssBoxSizingCache);\r\n\r\n //detect padding:\r\n var padding = getTopRightBottomLeftHost(_strPaddingMinus);\r\n\r\n //width + height auto detecting var:\r\n var sizeAutoObserverElementBCRect;\r\n //exception occurs in IE8 sometimes (unknown exception)\r\n try {\r\n sizeAutoObserverElementBCRect = _sizeAutoObserverAdded ? _sizeAutoObserverElementNative[LEXICON.bCR]() : null;\r\n } catch (ex) {\r\n return;\r\n }\r\n\r\n _isRTL = cssDirection === 'rtl';\r\n _isBorderBox = (boxSizing === 'border-box');\r\n var isRTLLeft = _isRTL ? _strLeft : _strRight;\r\n var isRTLRight = _isRTL ? _strRight : _strLeft;\r\n\r\n //detect width auto:\r\n var widthAutoResizeDetection = false;\r\n var widthAutoObserverDetection = (_sizeAutoObserverAdded && (_hostElement.css(_strFloat) !== 'none' /*|| _isTextarea */)) ? (MATH.round(sizeAutoObserverElementBCRect.right - sizeAutoObserverElementBCRect.left) === 0) && (!paddingAbsolute ? (_hostElementNative[LEXICON.cW] - _paddingX) > 0 : true) : false;\r\n if (sizeAutoCapable && !widthAutoObserverDetection) {\r\n var tmpCurrHostWidth = _hostElementNative[LEXICON.oW];\r\n var tmpCurrContentGlueWidth = _contentGlueElement.css(_strWidth);\r\n _contentGlueElement.css(_strWidth, _strAuto);\r\n\r\n var tmpNewHostWidth = _hostElementNative[LEXICON.oW];\r\n _contentGlueElement.css(_strWidth, tmpCurrContentGlueWidth);\r\n widthAutoResizeDetection = tmpCurrHostWidth !== tmpNewHostWidth;\r\n if (!widthAutoResizeDetection) {\r\n _contentGlueElement.css(_strWidth, tmpCurrHostWidth + 1);\r\n tmpNewHostWidth = _hostElementNative[LEXICON.oW];\r\n _contentGlueElement.css(_strWidth, tmpCurrContentGlueWidth);\r\n widthAutoResizeDetection = tmpCurrHostWidth !== tmpNewHostWidth;\r\n }\r\n }\r\n var widthAuto = (widthAutoObserverDetection || widthAutoResizeDetection) && sizeAutoCapable && !displayIsHidden;\r\n var widthAutoChanged = checkCacheAutoForce(widthAuto, _widthAutoCache);\r\n var wasWidthAuto = !widthAuto && _widthAutoCache;\r\n\r\n //detect height auto:\r\n var heightAuto = _sizeAutoObserverAdded && sizeAutoCapable && !displayIsHidden ? (MATH.round(sizeAutoObserverElementBCRect.bottom - sizeAutoObserverElementBCRect.top) === 0) /* && (!paddingAbsolute && (_msieVersion > 9 || !_msieVersion) ? true : true) */ : false;\r\n var heightAutoChanged = checkCacheAutoForce(heightAuto, _heightAutoCache);\r\n var wasHeightAuto = !heightAuto && _heightAutoCache;\r\n\r\n //detect border:\r\n //we need the border only if border box and auto size\r\n var updateBorderX = (widthAuto && _isBorderBox) || !_isBorderBox;\r\n var updateBorderY = (heightAuto && _isBorderBox) || !_isBorderBox;\r\n var border = getTopRightBottomLeftHost(_strBorderMinus, '-' + _strWidth, !updateBorderX, !updateBorderY)\r\n\r\n //detect margin:\r\n var margin = getTopRightBottomLeftHost(_strMarginMinus);\r\n\r\n //vars to apply correct css\r\n var contentElementCSS = {};\r\n var contentGlueElementCSS = {};\r\n\r\n //funcs\r\n var getHostSize = function () {\r\n //has to be clientSize because offsetSize respect borders\r\n return {\r\n w: _hostElementNative[LEXICON.cW],\r\n h: _hostElementNative[LEXICON.cH]\r\n };\r\n };\r\n var getViewportSize = function () {\r\n //viewport size is padding container because it never has padding, margin and a border\r\n //determine zoom rounding error -> sometimes scrollWidth/Height is smaller than clientWidth/Height\r\n //if this happens add the difference to the viewportSize to compensate the rounding error\r\n return {\r\n w: _paddingElementNative[LEXICON.oW] + MATH.max(0, _contentElementNative[LEXICON.cW] - _contentElementNative[LEXICON.sW]),\r\n h: _paddingElementNative[LEXICON.oH] + MATH.max(0, _contentElementNative[LEXICON.cH] - _contentElementNative[LEXICON.sH])\r\n };\r\n };\r\n\r\n //set info for padding\r\n var paddingAbsoluteX = _paddingX = padding.l + padding.r;\r\n var paddingAbsoluteY = _paddingY = padding.t + padding.b;\r\n paddingAbsoluteX *= paddingAbsolute ? 1 : 0;\r\n paddingAbsoluteY *= paddingAbsolute ? 1 : 0;\r\n padding.c = checkCacheAutoForce(padding, _cssPaddingCache);\r\n\r\n //set info for border\r\n _borderX = border.l + border.r;\r\n _borderY = border.t + border.b;\r\n border.c = checkCacheAutoForce(border, _cssBorderCache);\r\n\r\n //set info for margin\r\n _marginX = margin.l + margin.r;\r\n _marginY = margin.t + margin.b;\r\n margin.c = checkCacheAutoForce(margin, _cssMarginCache);\r\n\r\n //refresh cache\r\n _textareaAutoWrappingCache = textareaAutoWrapping;\r\n _cssDirectionCache = cssDirection;\r\n _cssBoxSizingCache = boxSizing;\r\n _widthAutoCache = widthAuto;\r\n _heightAutoCache = heightAuto;\r\n _cssPaddingCache = padding;\r\n _cssBorderCache = border;\r\n _cssMarginCache = margin;\r\n\r\n //IEFix direction changed\r\n if (cssDirectionChanged && _sizeAutoObserverAdded)\r\n _sizeAutoObserverElement.css(_strFloat, isRTLRight);\r\n\r\n //apply padding:\r\n if (padding.c || cssDirectionChanged || paddingAbsoluteChanged || widthAutoChanged || heightAutoChanged || boxSizingChanged || sizeAutoCapableChanged) {\r\n var paddingElementCSS = {};\r\n var textareaCSS = {};\r\n var paddingValues = [padding.t, padding.r, padding.b, padding.l];\r\n\r\n setTopRightBottomLeft(contentGlueElementCSS, _strMarginMinus, [-padding.t, -padding.r, -padding.b, -padding.l]);\r\n if (paddingAbsolute) {\r\n setTopRightBottomLeft(paddingElementCSS, _strEmpty, paddingValues);\r\n setTopRightBottomLeft(_isTextarea ? textareaCSS : contentElementCSS, _strPaddingMinus);\r\n }\r\n else {\r\n setTopRightBottomLeft(paddingElementCSS, _strEmpty);\r\n setTopRightBottomLeft(_isTextarea ? textareaCSS : contentElementCSS, _strPaddingMinus, paddingValues);\r\n }\r\n\r\n _paddingElement.css(paddingElementCSS);\r\n _targetElement.css(textareaCSS);\r\n }\r\n\r\n //viewport size is padding container because it never has padding, margin and a border.\r\n _viewportSize = getViewportSize();\r\n\r\n //update Textarea\r\n var textareaSize = _isTextarea ? textareaUpdate() : false;\r\n var textareaSizeChanged = _isTextarea && checkCacheAutoForce(textareaSize, _textareaSizeCache);\r\n var textareaDynOrigSize = _isTextarea && textareaSize ? {\r\n w: textareaDynWidth ? textareaSize._dynamicWidth : textareaSize._originalWidth,\r\n h: textareaDynHeight ? textareaSize._dynamicHeight : textareaSize._originalHeight\r\n } : {};\r\n _textareaSizeCache = textareaSize;\r\n\r\n //fix height auto / width auto in cooperation with current padding & boxSizing behavior:\r\n if (heightAuto && (heightAutoChanged || paddingAbsoluteChanged || boxSizingChanged || padding.c || border.c)) {\r\n contentElementCSS[_strHeight] = _strAuto;\r\n }\r\n else if (heightAutoChanged || paddingAbsoluteChanged) {\r\n contentElementCSS[_strHeight] = _strHundredPercent;\r\n }\r\n if (widthAuto && (widthAutoChanged || paddingAbsoluteChanged || boxSizingChanged || padding.c || border.c || cssDirectionChanged)) {\r\n contentElementCSS[_strWidth] = _strAuto;\r\n contentGlueElementCSS[_strMaxMinus + _strWidth] = _strHundredPercent; //IE Fix\r\n }\r\n else if (widthAutoChanged || paddingAbsoluteChanged) {\r\n contentElementCSS[_strWidth] = _strHundredPercent;\r\n contentElementCSS[_strFloat] = _strEmpty;\r\n contentGlueElementCSS[_strMaxMinus + _strWidth] = _strEmpty; //IE Fix\r\n }\r\n if (widthAuto) {\r\n //textareaDynOrigSize.w || _strAuto :: doesnt works because applied margin will shift width\r\n contentGlueElementCSS[_strWidth] = _strAuto;\r\n\r\n contentElementCSS[_strWidth] = VENDORS._cssPropertyValue(_strWidth, 'max-content intrinsic') || _strAuto;\r\n contentElementCSS[_strFloat] = isRTLRight;\r\n }\r\n else {\r\n contentGlueElementCSS[_strWidth] = _strEmpty;\r\n }\r\n if (heightAuto) {\r\n //textareaDynOrigSize.h || _contentElementNative[LEXICON.cH] :: use for anti scroll jumping\r\n contentGlueElementCSS[_strHeight] = textareaDynOrigSize.h || _contentElementNative[LEXICON.cH];\r\n }\r\n else {\r\n contentGlueElementCSS[_strHeight] = _strEmpty;\r\n }\r\n if (sizeAutoCapable)\r\n _contentGlueElement.css(contentGlueElementCSS);\r\n _contentElement.css(contentElementCSS);\r\n\r\n //CHECKPOINT HERE ~\r\n contentElementCSS = {};\r\n contentGlueElementCSS = {};\r\n\r\n //if [content(host) client / scroll size, or target element direction, or content(host) max-sizes] changed, or force is true\r\n if (hostSizeChanged || contentSizeChanged || textareaSizeChanged || cssDirectionChanged || boxSizingChanged || paddingAbsoluteChanged || widthAutoChanged || widthAuto || heightAutoChanged || heightAuto || ignoreOverlayScrollbarHidingChanged || overflowBehaviorChanged || clipAlwaysChanged || resizeChanged || scrollbarsVisibilityChanged || scrollbarsAutoHideChanged || scrollbarsDragScrollingChanged || scrollbarsClickScrollingChanged || textareaDynWidthChanged || textareaDynHeightChanged || textareaAutoWrappingChanged) {\r\n var strOverflow = 'overflow';\r\n var strOverflowX = strOverflow + '-x';\r\n var strOverflowY = strOverflow + '-y';\r\n var strHidden = 'hidden';\r\n var strVisible = 'visible';\r\n\r\n //Reset the viewport (very important for natively overlaid scrollbars and zoom change\r\n //don't change the overflow prop as it is very expensive and affects performance !A LOT!\r\n if (!_nativeScrollbarStyling) {\r\n var viewportElementResetCSS = {};\r\n var resetXTmp = _hasOverflowCache.y && _hideOverflowCache.ys && !ignoreOverlayScrollbarHiding ? (_nativeScrollbarIsOverlaid.y ? _viewportElement.css(isRTLLeft) : -_nativeScrollbarSize.y) : 0;\r\n var resetBottomTmp = _hasOverflowCache.x && _hideOverflowCache.xs && !ignoreOverlayScrollbarHiding ? (_nativeScrollbarIsOverlaid.x ? _viewportElement.css(_strBottom) : -_nativeScrollbarSize.x) : 0;\r\n setTopRightBottomLeft(viewportElementResetCSS, _strEmpty);\r\n _viewportElement.css(viewportElementResetCSS);\r\n }\r\n\r\n //measure several sizes:\r\n var contentMeasureElement = getContentMeasureElement();\r\n //in Firefox content element has to have overflow hidden, else element margins aren't calculated properly, this element prevents this bug, but only if scrollbars aren't overlaid\r\n var contentSize = {\r\n //use clientSize because natively overlaidScrollbars add borders\r\n w: textareaDynOrigSize.w || contentMeasureElement[LEXICON.cW],\r\n h: textareaDynOrigSize.h || contentMeasureElement[LEXICON.cH]\r\n };\r\n var scrollSize = {\r\n w: contentMeasureElement[LEXICON.sW],\r\n h: contentMeasureElement[LEXICON.sH]\r\n };\r\n\r\n //apply the correct viewport style and measure viewport size\r\n if (!_nativeScrollbarStyling) {\r\n viewportElementResetCSS[_strBottom] = wasHeightAuto ? _strEmpty : resetBottomTmp;\r\n viewportElementResetCSS[isRTLLeft] = wasWidthAuto ? _strEmpty : resetXTmp;\r\n _viewportElement.css(viewportElementResetCSS);\r\n }\r\n _viewportSize = getViewportSize();\r\n\r\n //measure and correct several sizes\r\n var hostSize = getHostSize();\r\n var hostAbsoluteRectSize = {\r\n w: hostSize.w - _marginX - _borderX - (_isBorderBox ? 0 : _paddingX),\r\n h: hostSize.h - _marginY - _borderY - (_isBorderBox ? 0 : _paddingY)\r\n };\r\n var contentGlueSize = {\r\n //client/scrollSize + AbsolutePadding -> because padding is only applied to the paddingElement if its absolute, so you have to add it manually\r\n //hostSize is clientSize -> so padding should be added manually, right? FALSE! Because content glue is inside hostElement, so we don't have to worry about padding\r\n w: MATH.max((widthAuto ? contentSize.w : scrollSize.w) + paddingAbsoluteX, hostAbsoluteRectSize.w),\r\n h: MATH.max((heightAuto ? contentSize.h : scrollSize.h) + paddingAbsoluteY, hostAbsoluteRectSize.h)\r\n };\r\n contentGlueSize.c = checkCacheAutoForce(contentGlueSize, _contentGlueSizeCache);\r\n _contentGlueSizeCache = contentGlueSize;\r\n\r\n //apply correct contentGlue size\r\n if (sizeAutoCapable) {\r\n //size contentGlue correctly to make sure the element has correct size if the sizing switches to auto\r\n if (contentGlueSize.c || (heightAuto || widthAuto)) {\r\n contentGlueElementCSS[_strWidth] = contentGlueSize.w;\r\n contentGlueElementCSS[_strHeight] = contentGlueSize.h;\r\n\r\n //textarea-sizes are already calculated correctly at this point\r\n if (!_isTextarea) {\r\n contentSize = {\r\n //use clientSize because natively overlaidScrollbars add borders\r\n w: contentMeasureElement[LEXICON.cW],\r\n h: contentMeasureElement[LEXICON.cH]\r\n };\r\n }\r\n }\r\n var textareaCoverCSS = {};\r\n var setContentGlueElementCSSfunction = function (horizontal) {\r\n var scrollbarVars = getScrollbarVars(horizontal);\r\n var wh = scrollbarVars._w_h;\r\n var strWH = scrollbarVars._width_height;\r\n var autoSize = horizontal ? widthAuto : heightAuto;\r\n var borderSize = horizontal ? _borderX : _borderY;\r\n var paddingSize = horizontal ? _paddingX : _paddingY;\r\n var marginSize = horizontal ? _marginX : _marginY;\r\n var viewportSize = _viewportSize[wh] - borderSize - marginSize - (_isBorderBox ? 0 : paddingSize);\r\n\r\n //make contentGlue size -1 if element is not auto sized, to make sure that a resize event happens when the element shrinks\r\n if (!autoSize || (!autoSize && border.c))\r\n contentGlueElementCSS[strWH] = hostAbsoluteRectSize[wh] - 1;\r\n\r\n //if size is auto and host is smaller than size as min size, make content glue size -1 to make sure size changes will be detected (this is only needed if padding is 0)\r\n if (autoSize && (contentSize[wh] < viewportSize) && (horizontal && _isTextarea ? !textareaAutoWrapping : true)) {\r\n if (_isTextarea)\r\n textareaCoverCSS[strWH] = parseToZeroOrNumber(_textareaCoverElement.css(strWH)) - 1;\r\n contentGlueElementCSS[strWH] -= 1;\r\n }\r\n\r\n //make sure content glue size is at least 1\r\n if (contentSize[wh] > 0)\r\n contentGlueElementCSS[strWH] = MATH.max(1, contentGlueElementCSS[strWH]);\r\n };\r\n setContentGlueElementCSSfunction(true);\r\n setContentGlueElementCSSfunction(false);\r\n\r\n if (_isTextarea)\r\n _textareaCoverElement.css(textareaCoverCSS);\r\n _contentGlueElement.css(contentGlueElementCSS);\r\n }\r\n if (widthAuto)\r\n contentElementCSS[_strWidth] = _strHundredPercent;\r\n if (widthAuto && !_isBorderBox && !_mutationObserversConnected)\r\n contentElementCSS[_strFloat] = 'none';\r\n\r\n //apply and reset content style\r\n _contentElement.css(contentElementCSS);\r\n contentElementCSS = {};\r\n\r\n //measure again, but this time all correct sizes:\r\n var contentScrollSize = {\r\n w: contentMeasureElement[LEXICON.sW],\r\n h: contentMeasureElement[LEXICON.sH],\r\n };\r\n contentScrollSize.c = contentSizeChanged = checkCacheAutoForce(contentScrollSize, _contentScrollSizeCache);\r\n _contentScrollSizeCache = contentScrollSize;\r\n\r\n //refresh viewport size after correct measuring\r\n _viewportSize = getViewportSize();\r\n\r\n hostSize = getHostSize();\r\n hostSizeChanged = checkCacheAutoForce(hostSize, _hostSizeCache);\r\n _hostSizeCache = hostSize;\r\n\r\n var hideOverflowForceTextarea = _isTextarea && (_viewportSize.w === 0 || _viewportSize.h === 0);\r\n var previousOverflowAmount = _overflowAmountCache;\r\n var overflowBehaviorIsVS = {};\r\n var overflowBehaviorIsVH = {};\r\n var overflowBehaviorIsS = {};\r\n var overflowAmount = {};\r\n var hasOverflow = {};\r\n var hideOverflow = {};\r\n var canScroll = {};\r\n var viewportRect = _paddingElementNative[LEXICON.bCR]();\r\n var setOverflowVariables = function (horizontal) {\r\n var scrollbarVars = getScrollbarVars(horizontal);\r\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\r\n var xyI = scrollbarVarsInverted._x_y;\r\n var xy = scrollbarVars._x_y;\r\n var wh = scrollbarVars._w_h;\r\n var widthHeight = scrollbarVars._width_height;\r\n var scrollMax = _strScroll + scrollbarVars._Left_Top + 'Max';\r\n var fractionalOverflowAmount = viewportRect[widthHeight] ? MATH.abs(viewportRect[widthHeight] - _viewportSize[wh]) : 0;\r\n var checkFractionalOverflowAmount = previousOverflowAmount && previousOverflowAmount[xy] > 0 && _viewportElementNative[scrollMax] === 0;\r\n overflowBehaviorIsVS[xy] = overflowBehavior[xy] === 'v-s';\r\n overflowBehaviorIsVH[xy] = overflowBehavior[xy] === 'v-h';\r\n overflowBehaviorIsS[xy] = overflowBehavior[xy] === 's';\r\n overflowAmount[xy] = MATH.max(0, MATH.round((contentScrollSize[wh] - _viewportSize[wh]) * 100) / 100);\r\n overflowAmount[xy] *= (hideOverflowForceTextarea || (checkFractionalOverflowAmount && fractionalOverflowAmount > 0 && fractionalOverflowAmount < 1)) ? 0 : 1;\r\n hasOverflow[xy] = overflowAmount[xy] > 0;\r\n\r\n //hideOverflow:\r\n //x || y : true === overflow is hidden by \"overflow: scroll\" OR \"overflow: hidden\"\r\n //xs || ys : true === overflow is hidden by \"overflow: scroll\"\r\n hideOverflow[xy] = overflowBehaviorIsVS[xy] || overflowBehaviorIsVH[xy] ? (hasOverflow[xyI] && !overflowBehaviorIsVS[xyI] && !overflowBehaviorIsVH[xyI]) : hasOverflow[xy];\r\n hideOverflow[xy + 's'] = hideOverflow[xy] ? (overflowBehaviorIsS[xy] || overflowBehaviorIsVS[xy]) : false;\r\n\r\n canScroll[xy] = hasOverflow[xy] && hideOverflow[xy + 's'];\r\n };\r\n setOverflowVariables(true);\r\n setOverflowVariables(false);\r\n\r\n overflowAmount.c = checkCacheAutoForce(overflowAmount, _overflowAmountCache);\r\n _overflowAmountCache = overflowAmount;\r\n hasOverflow.c = checkCacheAutoForce(hasOverflow, _hasOverflowCache);\r\n _hasOverflowCache = hasOverflow;\r\n hideOverflow.c = checkCacheAutoForce(hideOverflow, _hideOverflowCache);\r\n _hideOverflowCache = hideOverflow;\r\n\r\n //if native scrollbar is overlay at x OR y axis, prepare DOM\r\n if (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) {\r\n var borderDesign = 'px solid transparent';\r\n var contentArrangeElementCSS = {};\r\n var arrangeContent = {};\r\n var arrangeChanged = force;\r\n var setContentElementCSS;\r\n\r\n if (hasOverflow.x || hasOverflow.y) {\r\n arrangeContent.w = _nativeScrollbarIsOverlaid.y && hasOverflow.y ? contentScrollSize.w + _overlayScrollbarDummySize.y : _strEmpty;\r\n arrangeContent.h = _nativeScrollbarIsOverlaid.x && hasOverflow.x ? contentScrollSize.h + _overlayScrollbarDummySize.x : _strEmpty;\r\n arrangeChanged = checkCacheAutoForce(arrangeContent, _arrangeContentSizeCache);\r\n _arrangeContentSizeCache = arrangeContent;\r\n }\r\n\r\n if (hasOverflow.c || hideOverflow.c || contentScrollSize.c || cssDirectionChanged || widthAutoChanged || heightAutoChanged || widthAuto || heightAuto || ignoreOverlayScrollbarHidingChanged) {\r\n contentElementCSS[_strMarginMinus + isRTLRight] = contentElementCSS[_strBorderMinus + isRTLRight] = _strEmpty;\r\n setContentElementCSS = function (horizontal) {\r\n var scrollbarVars = getScrollbarVars(horizontal);\r\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\r\n var xy = scrollbarVars._x_y;\r\n var strDirection = horizontal ? _strBottom : isRTLLeft;\r\n var invertedAutoSize = horizontal ? heightAuto : widthAuto;\r\n\r\n if (_nativeScrollbarIsOverlaid[xy] && hasOverflow[xy] && hideOverflow[xy + 's']) {\r\n contentElementCSS[_strMarginMinus + strDirection] = invertedAutoSize ? (ignoreOverlayScrollbarHiding ? _strEmpty : _overlayScrollbarDummySize[xy]) : _strEmpty;\r\n contentElementCSS[_strBorderMinus + strDirection] = ((horizontal ? !invertedAutoSize : true) && !ignoreOverlayScrollbarHiding) ? (_overlayScrollbarDummySize[xy] + borderDesign) : _strEmpty;\r\n }\r\n else {\r\n arrangeContent[scrollbarVarsInverted._w_h] =\r\n contentElementCSS[_strMarginMinus + strDirection] =\r\n contentElementCSS[_strBorderMinus + strDirection] = _strEmpty;\r\n arrangeChanged = true;\r\n }\r\n };\r\n\r\n if (_nativeScrollbarStyling) {\r\n addRemoveClass(_viewportElement, _classNameViewportNativeScrollbarsInvisible, !ignoreOverlayScrollbarHiding)\r\n }\r\n else {\r\n setContentElementCSS(true);\r\n setContentElementCSS(false);\r\n }\r\n }\r\n if (ignoreOverlayScrollbarHiding) {\r\n arrangeContent.w = arrangeContent.h = _strEmpty;\r\n arrangeChanged = true;\r\n }\r\n if (arrangeChanged && !_nativeScrollbarStyling) {\r\n contentArrangeElementCSS[_strWidth] = hideOverflow.y ? arrangeContent.w : _strEmpty;\r\n contentArrangeElementCSS[_strHeight] = hideOverflow.x ? arrangeContent.h : _strEmpty;\r\n\r\n if (!_contentArrangeElement) {\r\n _contentArrangeElement = FRAMEWORK(generateDiv(_classNameContentArrangeElement));\r\n _viewportElement.prepend(_contentArrangeElement);\r\n }\r\n _contentArrangeElement.css(contentArrangeElementCSS);\r\n }\r\n _contentElement.css(contentElementCSS);\r\n }\r\n\r\n var viewportElementCSS = {};\r\n var paddingElementCSS = {};\r\n var setViewportCSS;\r\n if (hostSizeChanged || hasOverflow.c || hideOverflow.c || contentScrollSize.c || overflowBehaviorChanged || boxSizingChanged || ignoreOverlayScrollbarHidingChanged || cssDirectionChanged || clipAlwaysChanged || heightAutoChanged) {\r\n viewportElementCSS[isRTLRight] = _strEmpty;\r\n setViewportCSS = function (horizontal) {\r\n var scrollbarVars = getScrollbarVars(horizontal);\r\n var scrollbarVarsInverted = getScrollbarVars(!horizontal);\r\n var xy = scrollbarVars._x_y;\r\n var XY = scrollbarVars._X_Y;\r\n var strDirection = horizontal ? _strBottom : isRTLLeft;\r\n\r\n var reset = function () {\r\n viewportElementCSS[strDirection] = _strEmpty;\r\n _contentBorderSize[scrollbarVarsInverted._w_h] = 0;\r\n };\r\n if (hasOverflow[xy] && hideOverflow[xy + 's']) {\r\n viewportElementCSS[strOverflow + XY] = _strScroll;\r\n if (ignoreOverlayScrollbarHiding || _nativeScrollbarStyling) {\r\n reset();\r\n }\r\n else {\r\n viewportElementCSS[strDirection] = -(_nativeScrollbarIsOverlaid[xy] ? _overlayScrollbarDummySize[xy] : _nativeScrollbarSize[xy]);\r\n _contentBorderSize[scrollbarVarsInverted._w_h] = _nativeScrollbarIsOverlaid[xy] ? _overlayScrollbarDummySize[scrollbarVarsInverted._x_y] : 0;\r\n }\r\n } else {\r\n viewportElementCSS[strOverflow + XY] = _strEmpty;\r\n reset();\r\n }\r\n };\r\n setViewportCSS(true);\r\n setViewportCSS(false);\r\n\r\n // if the scroll container is too small and if there is any overflow with no overlay scrollbar (and scrollbar styling isn't possible), \r\n // make viewport element greater in size (Firefox hide Scrollbars fix)\r\n // because firefox starts hiding scrollbars on too small elements\r\n // with this behavior the overflow calculation may be incorrect or the scrollbars would appear suddenly\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=292284\r\n if (!_nativeScrollbarStyling\r\n && (_viewportSize.h < _nativeScrollbarMinSize.x || _viewportSize.w < _nativeScrollbarMinSize.y)\r\n && ((hasOverflow.x && hideOverflow.x && !_nativeScrollbarIsOverlaid.x) || (hasOverflow.y && hideOverflow.y && !_nativeScrollbarIsOverlaid.y))) {\r\n viewportElementCSS[_strPaddingMinus + _strTop] = _nativeScrollbarMinSize.x;\r\n viewportElementCSS[_strMarginMinus + _strTop] = -_nativeScrollbarMinSize.x;\r\n\r\n viewportElementCSS[_strPaddingMinus + isRTLRight] = _nativeScrollbarMinSize.y;\r\n viewportElementCSS[_strMarginMinus + isRTLRight] = -_nativeScrollbarMinSize.y;\r\n }\r\n else {\r\n viewportElementCSS[_strPaddingMinus + _strTop] =\r\n viewportElementCSS[_strMarginMinus + _strTop] =\r\n viewportElementCSS[_strPaddingMinus + isRTLRight] =\r\n viewportElementCSS[_strMarginMinus + isRTLRight] = _strEmpty;\r\n }\r\n viewportElementCSS[_strPaddingMinus + isRTLLeft] =\r\n viewportElementCSS[_strMarginMinus + isRTLLeft] = _strEmpty;\r\n\r\n //if there is any overflow (x OR y axis) and this overflow shall be hidden, make overflow hidden, else overflow visible\r\n if ((hasOverflow.x && hideOverflow.x) || (hasOverflow.y && hideOverflow.y) || hideOverflowForceTextarea) {\r\n //only hide if is Textarea\r\n if (_isTextarea && hideOverflowForceTextarea) {\r\n paddingElementCSS[strOverflowX] =\r\n paddingElementCSS[strOverflowY] = strHidden;\r\n }\r\n }\r\n else {\r\n if (!clipAlways || (overflowBehaviorIsVH.x || overflowBehaviorIsVS.x || overflowBehaviorIsVH.y || overflowBehaviorIsVS.y)) {\r\n //only un-hide if Textarea\r\n if (_isTextarea) {\r\n paddingElementCSS[strOverflowX] =\r\n paddingElementCSS[strOverflowY] = _strEmpty;\r\n }\r\n viewportElementCSS[strOverflowX] =\r\n viewportElementCSS[strOverflowY] = strVisible;\r\n }\r\n }\r\n\r\n _paddingElement.css(paddingElementCSS);\r\n _viewportElement.css(viewportElementCSS);\r\n viewportElementCSS = {};\r\n\r\n //force soft redraw in webkit because without the scrollbars will may appear because DOM wont be redrawn under special conditions\r\n if ((hasOverflow.c || boxSizingChanged || widthAutoChanged || heightAutoChanged) && !(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)) {\r\n var elementStyle = _contentElementNative[LEXICON.s];\r\n var dump;\r\n elementStyle.webkitTransform = 'scale(1)';\r\n elementStyle.display = 'run-in';\r\n dump = _contentElementNative[LEXICON.oH];\r\n elementStyle.display = _strEmpty; //|| dump; //use dump to prevent it from deletion if minify\r\n elementStyle.webkitTransform = _strEmpty;\r\n }\r\n /*\r\n //force hard redraw in webkit if native overlaid scrollbars shall appear\r\n if (ignoreOverlayScrollbarHidingChanged && ignoreOverlayScrollbarHiding) {\r\n _hostElement.hide();\r\n var dump = _hostElementNative[LEXICON.oH];\r\n _hostElement.show();\r\n }\r\n */\r\n }\r\n\r\n //change to direction RTL and width auto Bugfix in Webkit\r\n //without this fix, the DOM still thinks the scrollbar is LTR and thus the content is shifted to the left\r\n contentElementCSS = {};\r\n if (cssDirectionChanged || widthAutoChanged || heightAutoChanged) {\r\n if (_isRTL && widthAuto) {\r\n var floatTmp = _contentElement.css(_strFloat);\r\n var posLeftWithoutFloat = MATH.round(_contentElement.css(_strFloat, _strEmpty).css(_strLeft, _strEmpty).position().left);\r\n _contentElement.css(_strFloat, floatTmp);\r\n var posLeftWithFloat = MATH.round(_contentElement.position().left);\r\n\r\n if (posLeftWithoutFloat !== posLeftWithFloat)\r\n contentElementCSS[_strLeft] = posLeftWithoutFloat;\r\n }\r\n else {\r\n contentElementCSS[_strLeft] = _strEmpty;\r\n }\r\n }\r\n _contentElement.css(contentElementCSS);\r\n\r\n //handle scroll position\r\n if (_isTextarea && contentSizeChanged) {\r\n var textareaInfo = getTextareaInfo();\r\n if (textareaInfo) {\r\n var textareaRowsChanged = _textareaInfoCache === undefined ? true : textareaInfo._rows !== _textareaInfoCache._rows;\r\n var cursorRow = textareaInfo._cursorRow;\r\n var cursorCol = textareaInfo._cursorColumn;\r\n var widestRow = textareaInfo._widestRow;\r\n var lastRow = textareaInfo._rows;\r\n var lastCol = textareaInfo._columns;\r\n var cursorPos = textareaInfo._cursorPosition;\r\n var cursorMax = textareaInfo._cursorMax;\r\n var cursorIsLastPosition = (cursorPos >= cursorMax && _textareaHasFocus);\r\n var textareaScrollAmount = {\r\n x: (!textareaAutoWrapping && (cursorCol === lastCol && cursorRow === widestRow)) ? _overflowAmountCache.x : -1,\r\n y: (textareaAutoWrapping ? cursorIsLastPosition || textareaRowsChanged && (previousOverflowAmount ? (currScroll.y === previousOverflowAmount.y) : false) : (cursorIsLastPosition || textareaRowsChanged) && cursorRow === lastRow) ? _overflowAmountCache.y : -1\r\n };\r\n currScroll.x = textareaScrollAmount.x > -1 ? (_isRTL && _normalizeRTLCache && _rtlScrollBehavior.i ? 0 : textareaScrollAmount.x) : currScroll.x; //if inverted, scroll to 0 -> normalized this means to max scroll offset.\r\n currScroll.y = textareaScrollAmount.y > -1 ? textareaScrollAmount.y : currScroll.y;\r\n }\r\n _textareaInfoCache = textareaInfo;\r\n }\r\n if (_isRTL && _rtlScrollBehavior.i && _nativeScrollbarIsOverlaid.y && hasOverflow.x && _normalizeRTLCache)\r\n currScroll.x += _contentBorderSize.w || 0;\r\n if (widthAuto)\r\n _hostElement[_strScrollLeft](0);\r\n if (heightAuto)\r\n _hostElement[_strScrollTop](0);\r\n _viewportElement[_strScrollLeft](currScroll.x)[_strScrollTop](currScroll.y);\r\n\r\n //scrollbars management:\r\n var scrollbarsVisibilityVisible = scrollbarsVisibility === 'v';\r\n var scrollbarsVisibilityHidden = scrollbarsVisibility === 'h';\r\n var scrollbarsVisibilityAuto = scrollbarsVisibility === 'a';\r\n var refreshScrollbarsVisibility = function (showX, showY) {\r\n showY = showY === undefined ? showX : showY;\r\n refreshScrollbarAppearance(true, showX, canScroll.x)\r\n refreshScrollbarAppearance(false, showY, canScroll.y)\r\n };\r\n\r\n //manage class name which indicates scrollable overflow\r\n addRemoveClass(_hostElement, _classNameHostOverflow, hideOverflow.x || hideOverflow.y);\r\n addRemoveClass(_hostElement, _classNameHostOverflowX, hideOverflow.x);\r\n addRemoveClass(_hostElement, _classNameHostOverflowY, hideOverflow.y);\r\n\r\n //add or remove rtl class name for styling purposes except when its body, then the scrollbar stays\r\n if (cssDirectionChanged && !_isBody) {\r\n addRemoveClass(_hostElement, _classNameHostRTL, _isRTL);\r\n }\r\n\r\n //manage the resize feature (CSS3 resize \"polyfill\" for this plugin)\r\n if (_isBody)\r\n addClass(_hostElement, _classNameHostResizeDisabled);\r\n if (resizeChanged) {\r\n addRemoveClass(_hostElement, _classNameHostResizeDisabled, _resizeNone);\r\n addRemoveClass(_scrollbarCornerElement, _classNameScrollbarCornerResize, !_resizeNone);\r\n addRemoveClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeB, _resizeBoth);\r\n addRemoveClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeH, _resizeHorizontal);\r\n addRemoveClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeV, _resizeVertical);\r\n }\r\n\r\n //manage the scrollbars general visibility + the scrollbar interactivity (unusable class name)\r\n if (scrollbarsVisibilityChanged || overflowBehaviorChanged || hideOverflow.c || hasOverflow.c || ignoreOverlayScrollbarHidingChanged) {\r\n if (ignoreOverlayScrollbarHiding) {\r\n if (ignoreOverlayScrollbarHidingChanged) {\r\n removeClass(_hostElement, _classNameHostScrolling);\r\n if (ignoreOverlayScrollbarHiding) {\r\n refreshScrollbarsVisibility(false);\r\n }\r\n }\r\n }\r\n else if (scrollbarsVisibilityAuto) {\r\n refreshScrollbarsVisibility(canScroll.x, canScroll.y);\r\n }\r\n else if (scrollbarsVisibilityVisible) {\r\n refreshScrollbarsVisibility(true);\r\n }\r\n else if (scrollbarsVisibilityHidden) {\r\n refreshScrollbarsVisibility(false);\r\n }\r\n }\r\n\r\n //manage the scrollbars auto hide feature (auto hide them after specific actions)\r\n if (scrollbarsAutoHideChanged || ignoreOverlayScrollbarHidingChanged) {\r\n setupHostMouseTouchEvents(!_scrollbarsAutoHideLeave && !_scrollbarsAutoHideMove);\r\n refreshScrollbarsAutoHide(_scrollbarsAutoHideNever, !_scrollbarsAutoHideNever);\r\n }\r\n\r\n //manage scrollbars handle length & offset - don't remove!\r\n if (hostSizeChanged || overflowAmount.c || heightAutoChanged || widthAutoChanged || resizeChanged || boxSizingChanged || paddingAbsoluteChanged || ignoreOverlayScrollbarHidingChanged || cssDirectionChanged) {\r\n refreshScrollbarHandleLength(true);\r\n refreshScrollbarHandleOffset(true);\r\n refreshScrollbarHandleLength(false);\r\n refreshScrollbarHandleOffset(false);\r\n }\r\n\r\n //manage interactivity\r\n if (scrollbarsClickScrollingChanged)\r\n refreshScrollbarsInteractive(true, scrollbarsClickScrolling);\r\n if (scrollbarsDragScrollingChanged)\r\n refreshScrollbarsInteractive(false, scrollbarsDragScrolling);\r\n\r\n //callbacks:\r\n dispatchCallback('onDirectionChanged', {\r\n isRTL: _isRTL,\r\n dir: cssDirection\r\n }, cssDirectionChanged);\r\n dispatchCallback('onHostSizeChanged', {\r\n width: _hostSizeCache.w,\r\n height: _hostSizeCache.h\r\n }, hostSizeChanged);\r\n dispatchCallback('onContentSizeChanged', {\r\n width: _contentScrollSizeCache.w,\r\n height: _contentScrollSizeCache.h\r\n }, contentSizeChanged);\r\n dispatchCallback('onOverflowChanged', {\r\n x: hasOverflow.x,\r\n y: hasOverflow.y,\r\n xScrollable: hideOverflow.xs,\r\n yScrollable: hideOverflow.ys,\r\n clipped: hideOverflow.x || hideOverflow.y\r\n }, hasOverflow.c || hideOverflow.c);\r\n dispatchCallback('onOverflowAmountChanged', {\r\n x: overflowAmount.x,\r\n y: overflowAmount.y\r\n }, overflowAmount.c);\r\n }\r\n\r\n //fix body min size\r\n if (_isBody && _bodyMinSizeCache && (_hasOverflowCache.c || _bodyMinSizeCache.c)) {\r\n //its possible that no min size was measured until now, because the content arrange element was just added now, in this case, measure now the min size.\r\n if (!_bodyMinSizeCache.f)\r\n bodyMinSizeChanged();\r\n if (_nativeScrollbarIsOverlaid.y && _hasOverflowCache.x)\r\n _contentElement.css(_strMinMinus + _strWidth, _bodyMinSizeCache.w + _overlayScrollbarDummySize.y);\r\n if (_nativeScrollbarIsOverlaid.x && _hasOverflowCache.y)\r\n _contentElement.css(_strMinMinus + _strHeight, _bodyMinSizeCache.h + _overlayScrollbarDummySize.x);\r\n _bodyMinSizeCache.c = false;\r\n }\r\n\r\n if (_initialized && changedOptions.updateOnLoad) {\r\n updateElementsOnLoad();\r\n }\r\n\r\n //freezeResizeObserver(_sizeObserverElement, false);\r\n //freezeResizeObserver(_sizeAutoObserverElement, false);\r\n\r\n dispatchCallback('onUpdated', { forced: force });\r\n }\r\n\r\n /**\r\n * Updates the found elements of which the load event shall be handled.\r\n */\r\n function updateElementsOnLoad() {\r\n if (!_isTextarea) {\r\n eachUpdateOnLoad(function (i, updateOnLoadSelector) {\r\n _contentElement.find(updateOnLoadSelector).each(function (i, el) {\r\n // if element doesn't have a updateOnLoadCallback applied\r\n if (COMPATIBILITY.inA(el, _updateOnLoadElms) < 0) {\r\n _updateOnLoadElms.push(el);\r\n FRAMEWORK(el)\r\n .off(_updateOnLoadEventName, updateOnLoadCallback)\r\n .on(_updateOnLoadEventName, updateOnLoadCallback);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n //==== Options ====//\r\n\r\n /**\r\n * Sets new options but doesn't call the update method.\r\n * @param newOptions The object which contains the new options.\r\n * @returns {*} A object which contains the changed options.\r\n */\r\n function setOptions(newOptions) {\r\n var validatedOpts = _pluginsOptions._validate(newOptions, _pluginsOptions._template, true, _currentOptions)\r\n\r\n _currentOptions = extendDeep({}, _currentOptions, validatedOpts._default);\r\n _currentPreparedOptions = extendDeep({}, _currentPreparedOptions, validatedOpts._prepared);\r\n\r\n return validatedOpts._prepared;\r\n }\r\n\r\n\r\n //==== Structure ====//\r\n\r\n /**\r\n * Builds or destroys the wrapper and helper DOM elements.\r\n * @param destroy Indicates whether the DOM shall be build or destroyed.\r\n */\r\n /**\r\n * Builds or destroys the wrapper and helper DOM elements.\r\n * @param destroy Indicates whether the DOM shall be build or destroyed.\r\n */\r\n function setupStructureDOM(destroy) {\r\n var strParent = 'parent';\r\n var classNameResizeObserverHost = 'os-resize-observer-host';\r\n var classNameTextareaElementFull = _classNameTextareaElement + _strSpace + _classNameTextInherit;\r\n var textareaClass = _isTextarea ? _strSpace + _classNameTextInherit : _strEmpty;\r\n var adoptAttrs = _currentPreparedOptions.textarea.inheritedAttrs;\r\n var adoptAttrsMap = {};\r\n var applyAdoptedAttrs = function () {\r\n var applyAdoptedAttrsElm = destroy ? _targetElement : _hostElement;\r\n each(adoptAttrsMap, function (key, value) {\r\n if (type(value) == TYPES.s) {\r\n if (key == LEXICON.c)\r\n applyAdoptedAttrsElm.addClass(value);\r\n else\r\n applyAdoptedAttrsElm.attr(key, value);\r\n }\r\n });\r\n };\r\n var hostElementClassNames = [\r\n _classNameHostElement,\r\n _classNameHostElementForeign,\r\n _classNameHostTextareaElement,\r\n _classNameHostResizeDisabled,\r\n _classNameHostRTL,\r\n _classNameHostScrollbarHorizontalHidden,\r\n _classNameHostScrollbarVerticalHidden,\r\n _classNameHostTransition,\r\n _classNameHostScrolling,\r\n _classNameHostOverflow,\r\n _classNameHostOverflowX,\r\n _classNameHostOverflowY,\r\n _classNameThemeNone,\r\n _classNameTextareaElement,\r\n _classNameTextInherit,\r\n _classNameCache].join(_strSpace);\r\n var hostElementCSS = {};\r\n\r\n //get host element as first element, because that's the most upper element and required for the other elements\r\n _hostElement = _hostElement || (_isTextarea ? (_domExists ? _targetElement[strParent]()[strParent]()[strParent]()[strParent]() : FRAMEWORK(generateDiv(_classNameHostTextareaElement))) : _targetElement);\r\n _contentElement = _contentElement || selectOrGenerateDivByClass(_classNameContentElement + textareaClass);\r\n _viewportElement = _viewportElement || selectOrGenerateDivByClass(_classNameViewportElement + textareaClass);\r\n _paddingElement = _paddingElement || selectOrGenerateDivByClass(_classNamePaddingElement + textareaClass);\r\n _sizeObserverElement = _sizeObserverElement || selectOrGenerateDivByClass(classNameResizeObserverHost);\r\n _textareaCoverElement = _textareaCoverElement || (_isTextarea ? selectOrGenerateDivByClass(_classNameTextareaCoverElement) : undefined);\r\n\r\n //add this class to workaround class changing issues with UI frameworks especially Vue\r\n if (_domExists)\r\n addClass(_hostElement, _classNameHostElementForeign);\r\n\r\n //on destroy, remove all generated class names from the host element before collecting the adopted attributes \r\n //to prevent adopting generated class names\r\n if (destroy)\r\n removeClass(_hostElement, hostElementClassNames);\r\n\r\n //collect all adopted attributes\r\n adoptAttrs = type(adoptAttrs) == TYPES.s ? adoptAttrs.split(_strSpace) : adoptAttrs;\r\n if (COMPATIBILITY.isA(adoptAttrs) && _isTextarea) {\r\n each(adoptAttrs, function (i, v) {\r\n if (type(v) == TYPES.s) {\r\n adoptAttrsMap[v] = destroy ? _hostElement.attr(v) : _targetElement.attr(v);\r\n }\r\n });\r\n }\r\n\r\n if (!destroy) {\r\n if (_isTextarea) {\r\n if (!_currentPreparedOptions.sizeAutoCapable) {\r\n hostElementCSS[_strWidth] = _targetElement.css(_strWidth);\r\n hostElementCSS[_strHeight] = _targetElement.css(_strHeight);\r\n }\r\n\r\n if (!_domExists)\r\n _targetElement.addClass(_classNameTextInherit).wrap(_hostElement);\r\n\r\n //jQuery clones elements in wrap functions, so we have to select them again\r\n _hostElement = _targetElement[strParent]().css(hostElementCSS);\r\n }\r\n\r\n if (!_domExists) {\r\n //add the correct class to the target element\r\n addClass(_targetElement, _isTextarea ? classNameTextareaElementFull : _classNameHostElement);\r\n\r\n //wrap the content into the generated elements to create the required DOM\r\n _hostElement.wrapInner(_contentElement)\r\n .wrapInner(_viewportElement)\r\n .wrapInner(_paddingElement)\r\n .prepend(_sizeObserverElement);\r\n\r\n //jQuery clones elements in wrap functions, so we have to select them again\r\n _contentElement = findFirst(_hostElement, _strDot + _classNameContentElement);\r\n _viewportElement = findFirst(_hostElement, _strDot + _classNameViewportElement);\r\n _paddingElement = findFirst(_hostElement, _strDot + _classNamePaddingElement);\r\n\r\n if (_isTextarea) {\r\n _contentElement.prepend(_textareaCoverElement);\r\n applyAdoptedAttrs();\r\n }\r\n }\r\n\r\n if (_nativeScrollbarStyling)\r\n addClass(_viewportElement, _classNameViewportNativeScrollbarsInvisible);\r\n if (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)\r\n addClass(_viewportElement, _classNameViewportNativeScrollbarsOverlaid);\r\n if (_isBody)\r\n addClass(_htmlElement, _classNameHTMLElement);\r\n\r\n _sizeObserverElementNative = _sizeObserverElement[0];\r\n _hostElementNative = _hostElement[0];\r\n _paddingElementNative = _paddingElement[0];\r\n _viewportElementNative = _viewportElement[0];\r\n _contentElementNative = _contentElement[0];\r\n\r\n updateViewportAttrsFromTarget();\r\n }\r\n else {\r\n if (_domExists && _initialized) {\r\n //clear size observer\r\n _sizeObserverElement.children().remove();\r\n\r\n //remove the style property and classes from already generated elements\r\n each([_paddingElement, _viewportElement, _contentElement, _textareaCoverElement], function (i, elm) {\r\n if (elm) {\r\n removeClass(elm.removeAttr(LEXICON.s), _classNamesDynamicDestroy);\r\n }\r\n });\r\n\r\n //add classes to the host element which was removed previously to match the expected DOM\r\n addClass(_hostElement, _isTextarea ? _classNameHostTextareaElement : _classNameHostElement);\r\n }\r\n else {\r\n //remove size observer\r\n remove(_sizeObserverElement);\r\n\r\n //unwrap the content to restore DOM\r\n _contentElement.contents()\r\n .unwrap()\r\n .unwrap()\r\n .unwrap();\r\n\r\n if (_isTextarea) {\r\n _targetElement.unwrap();\r\n remove(_hostElement);\r\n remove(_textareaCoverElement);\r\n applyAdoptedAttrs();\r\n }\r\n }\r\n\r\n if (_isTextarea)\r\n _targetElement.removeAttr(LEXICON.s);\r\n\r\n if (_isBody)\r\n removeClass(_htmlElement, _classNameHTMLElement);\r\n }\r\n }\r\n\r\n /**\r\n * Adds or removes all wrapper elements interactivity events.\r\n * @param destroy Indicates whether the Events shall be added or removed.\r\n */\r\n function setupStructureEvents() {\r\n var textareaKeyDownRestrictedKeyCodes = [\r\n 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 123, //F1 to F12\r\n 33, 34, //page up, page down\r\n 37, 38, 39, 40, //left, up, right, down arrows\r\n 16, 17, 18, 19, 20, 144 //Shift, Ctrl, Alt, Pause, CapsLock, NumLock\r\n ];\r\n var textareaKeyDownKeyCodesList = [];\r\n var textareaUpdateIntervalID;\r\n var scrollStopTimeoutId;\r\n var scrollStopDelay = 175;\r\n var strFocus = 'focus';\r\n\r\n function updateTextarea(doClearInterval) {\r\n textareaUpdate();\r\n _base.update(_strAuto);\r\n if (doClearInterval && _autoUpdateRecommended)\r\n clearInterval(textareaUpdateIntervalID);\r\n }\r\n function textareaOnScroll(event) {\r\n _targetElement[_strScrollLeft](_rtlScrollBehavior.i && _normalizeRTLCache ? 9999999 : 0);\r\n _targetElement[_strScrollTop](0);\r\n COMPATIBILITY.prvD(event);\r\n COMPATIBILITY.stpP(event);\r\n return false;\r\n }\r\n function textareaOnDrop(event) {\r\n setTimeout(function () {\r\n if (!_destroyed)\r\n updateTextarea();\r\n }, 50);\r\n }\r\n function textareaOnFocus() {\r\n _textareaHasFocus = true;\r\n addClass(_hostElement, strFocus);\r\n }\r\n function textareaOnFocusout() {\r\n _textareaHasFocus = false;\r\n textareaKeyDownKeyCodesList = [];\r\n removeClass(_hostElement, strFocus);\r\n updateTextarea(true);\r\n }\r\n function textareaOnKeyDown(event) {\r\n var keyCode = event.keyCode;\r\n\r\n if (inArray(keyCode, textareaKeyDownRestrictedKeyCodes) < 0) {\r\n if (!textareaKeyDownKeyCodesList[LEXICON.l]) {\r\n updateTextarea();\r\n textareaUpdateIntervalID = setInterval(updateTextarea, 1000 / 60);\r\n }\r\n if (inArray(keyCode, textareaKeyDownKeyCodesList) < 0)\r\n textareaKeyDownKeyCodesList.push(keyCode);\r\n }\r\n }\r\n function textareaOnKeyUp(event) {\r\n var keyCode = event.keyCode;\r\n var index = inArray(keyCode, textareaKeyDownKeyCodesList);\r\n\r\n if (inArray(keyCode, textareaKeyDownRestrictedKeyCodes) < 0) {\r\n if (index > -1)\r\n textareaKeyDownKeyCodesList.splice(index, 1);\r\n if (!textareaKeyDownKeyCodesList[LEXICON.l])\r\n updateTextarea(true);\r\n }\r\n }\r\n function contentOnTransitionEnd(event) {\r\n if (_autoUpdateCache === true)\r\n return;\r\n event = event.originalEvent || event;\r\n if (isSizeAffectingCSSProperty(event.propertyName))\r\n _base.update(_strAuto);\r\n }\r\n function viewportOnScroll(event) {\r\n if (!_sleeping) {\r\n if (scrollStopTimeoutId !== undefined)\r\n clearTimeout(scrollStopTimeoutId);\r\n else {\r\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\r\n refreshScrollbarsAutoHide(true);\r\n\r\n if (!nativeOverlayScrollbarsAreActive())\r\n addClass(_hostElement, _classNameHostScrolling);\r\n\r\n dispatchCallback('onScrollStart', event);\r\n }\r\n\r\n //if a scrollbars handle gets dragged, the mousemove event is responsible for refreshing the handle offset\r\n //because if CSS scroll-snap is used, the handle offset gets only refreshed on every snap point\r\n //this looks laggy & clunky, it looks much better if the offset refreshes with the mousemove\r\n if (!_scrollbarsHandlesDefineScrollPos) {\r\n refreshScrollbarHandleOffset(true);\r\n refreshScrollbarHandleOffset(false);\r\n }\r\n dispatchCallback('onScroll', event);\r\n\r\n scrollStopTimeoutId = setTimeout(function () {\r\n if (!_destroyed) {\r\n //OnScrollStop:\r\n clearTimeout(scrollStopTimeoutId);\r\n scrollStopTimeoutId = undefined;\r\n\r\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\r\n refreshScrollbarsAutoHide(false);\r\n\r\n if (!nativeOverlayScrollbarsAreActive())\r\n removeClass(_hostElement, _classNameHostScrolling);\r\n\r\n dispatchCallback('onScrollStop', event);\r\n }\r\n }, scrollStopDelay);\r\n }\r\n }\r\n\r\n\r\n if (_isTextarea) {\r\n if (_msieVersion > 9 || !_autoUpdateRecommended) {\r\n addDestroyEventListener(_targetElement, 'input', updateTextarea);\r\n }\r\n else {\r\n addDestroyEventListener(_targetElement,\r\n [_strKeyDownEvent, _strKeyUpEvent],\r\n [textareaOnKeyDown, textareaOnKeyUp]);\r\n }\r\n\r\n addDestroyEventListener(_targetElement,\r\n [_strScroll, 'drop', strFocus, strFocus + 'out'],\r\n [textareaOnScroll, textareaOnDrop, textareaOnFocus, textareaOnFocusout]);\r\n }\r\n else {\r\n addDestroyEventListener(_contentElement, _strTransitionEndEvent, contentOnTransitionEnd);\r\n }\r\n addDestroyEventListener(_viewportElement, _strScroll, viewportOnScroll, true);\r\n }\r\n\r\n\r\n //==== Scrollbars ====//\r\n\r\n /**\r\n * Builds or destroys all scrollbar DOM elements (scrollbar, track, handle)\r\n * @param destroy Indicates whether the DOM shall be build or destroyed.\r\n */\r\n function setupScrollbarsDOM(destroy) {\r\n var selectOrGenerateScrollbarDOM = function (isHorizontal) {\r\n var scrollbarClassName = isHorizontal ? _classNameScrollbarHorizontal : _classNameScrollbarVertical;\r\n var scrollbar = selectOrGenerateDivByClass(_classNameScrollbar + _strSpace + scrollbarClassName, true);\r\n var track = selectOrGenerateDivByClass(_classNameScrollbarTrack, scrollbar);\r\n var handle = selectOrGenerateDivByClass(_classNameScrollbarHandle, scrollbar);\r\n\r\n if (!_domExists && !destroy) {\r\n scrollbar.append(track);\r\n track.append(handle);\r\n }\r\n\r\n return {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle\r\n };\r\n };\r\n function resetScrollbarDOM(isHorizontal) {\r\n var scrollbarVars = getScrollbarVars(isHorizontal);\r\n var scrollbar = scrollbarVars._scrollbar;\r\n var track = scrollbarVars._track;\r\n var handle = scrollbarVars._handle;\r\n\r\n if (_domExists && _initialized) {\r\n each([scrollbar, track, handle], function (i, elm) {\r\n removeClass(elm.removeAttr(LEXICON.s), _classNamesDynamicDestroy);\r\n });\r\n }\r\n else {\r\n remove(scrollbar || selectOrGenerateScrollbarDOM(isHorizontal)._scrollbar);\r\n }\r\n }\r\n var horizontalElements;\r\n var verticalElements;\r\n\r\n if (!destroy) {\r\n horizontalElements = selectOrGenerateScrollbarDOM(true);\r\n verticalElements = selectOrGenerateScrollbarDOM();\r\n\r\n _scrollbarHorizontalElement = horizontalElements._scrollbar;\r\n _scrollbarHorizontalTrackElement = horizontalElements._track;\r\n _scrollbarHorizontalHandleElement = horizontalElements._handle;\r\n _scrollbarVerticalElement = verticalElements._scrollbar;\r\n _scrollbarVerticalTrackElement = verticalElements._track;\r\n _scrollbarVerticalHandleElement = verticalElements._handle;\r\n\r\n if (!_domExists) {\r\n _paddingElement.after(_scrollbarVerticalElement);\r\n _paddingElement.after(_scrollbarHorizontalElement);\r\n }\r\n }\r\n else {\r\n resetScrollbarDOM(true);\r\n resetScrollbarDOM();\r\n }\r\n }\r\n\r\n /**\r\n * Initializes all scrollbar interactivity events. (track and handle dragging, clicking, scrolling)\r\n * @param isHorizontal True if the target scrollbar is the horizontal scrollbar, false if the target scrollbar is the vertical scrollbar.\r\n */\r\n function setupScrollbarEvents(isHorizontal) {\r\n var scrollbarVars = getScrollbarVars(isHorizontal);\r\n var scrollbarVarsInfo = scrollbarVars._info;\r\n var insideIFrame = _windowElementNative.top !== _windowElementNative;\r\n var xy = scrollbarVars._x_y;\r\n var XY = scrollbarVars._X_Y;\r\n var scroll = _strScroll + scrollbarVars._Left_Top;\r\n var strActive = 'active';\r\n var strSnapHandle = 'snapHandle';\r\n var strClickEvent = 'click';\r\n var scrollDurationFactor = 1;\r\n var increaseDecreaseScrollAmountKeyCodes = [16, 17]; //shift, ctrl\r\n var trackTimeout;\r\n var mouseDownScroll;\r\n var mouseDownOffset;\r\n var mouseDownInvertedScale;\r\n\r\n function getPointerPosition(event) {\r\n return _msieVersion && insideIFrame ? event['screen' + XY] : COMPATIBILITY.page(event)[xy]; //use screen coordinates in EDGE & IE because the page values are incorrect in frames.\r\n }\r\n function getPreparedScrollbarsOption(name) {\r\n return _currentPreparedOptions.scrollbars[name];\r\n }\r\n function increaseTrackScrollAmount() {\r\n scrollDurationFactor = 0.5;\r\n }\r\n function decreaseTrackScrollAmount() {\r\n scrollDurationFactor = 1;\r\n }\r\n function stopClickEventPropagation(event) {\r\n COMPATIBILITY.stpP(event);\r\n }\r\n function documentKeyDown(event) {\r\n if (inArray(event.keyCode, increaseDecreaseScrollAmountKeyCodes) > -1)\r\n increaseTrackScrollAmount();\r\n }\r\n function documentKeyUp(event) {\r\n if (inArray(event.keyCode, increaseDecreaseScrollAmountKeyCodes) > -1)\r\n decreaseTrackScrollAmount();\r\n }\r\n function onMouseTouchDownContinue(event) {\r\n var originalEvent = event.originalEvent || event;\r\n var isTouchEvent = originalEvent.touches !== undefined;\r\n return _sleeping || _destroyed || nativeOverlayScrollbarsAreActive() || !_scrollbarsDragScrollingCache || (isTouchEvent && !getPreparedScrollbarsOption('touchSupport')) ? false : COMPATIBILITY.mBtn(event) === 1 || isTouchEvent;\r\n }\r\n function documentDragMove(event) {\r\n if (onMouseTouchDownContinue(event)) {\r\n var trackLength = scrollbarVarsInfo._trackLength;\r\n var handleLength = scrollbarVarsInfo._handleLength;\r\n var scrollRange = scrollbarVarsInfo._maxScroll;\r\n var scrollRaw = (getPointerPosition(event) - mouseDownOffset) * mouseDownInvertedScale;\r\n var scrollDeltaPercent = scrollRaw / (trackLength - handleLength);\r\n var scrollDelta = (scrollRange * scrollDeltaPercent);\r\n scrollDelta = isFinite(scrollDelta) ? scrollDelta : 0;\r\n if (_isRTL && isHorizontal && !_rtlScrollBehavior.i)\r\n scrollDelta *= -1;\r\n\r\n _viewportElement[scroll](MATH.round(mouseDownScroll + scrollDelta));\r\n\r\n if (_scrollbarsHandlesDefineScrollPos)\r\n refreshScrollbarHandleOffset(isHorizontal, mouseDownScroll + scrollDelta);\r\n\r\n if (!_supportPassiveEvents)\r\n COMPATIBILITY.prvD(event);\r\n }\r\n else\r\n documentMouseTouchUp(event);\r\n }\r\n function documentMouseTouchUp(event) {\r\n event = event || event.originalEvent;\r\n\r\n setupResponsiveEventListener(_documentElement,\r\n [_strMouseTouchMoveEvent, _strMouseTouchUpEvent, _strKeyDownEvent, _strKeyUpEvent, _strSelectStartEvent],\r\n [documentDragMove, documentMouseTouchUp, documentKeyDown, documentKeyUp, documentOnSelectStart],\r\n true);\r\n COMPATIBILITY.rAF()(function() {\r\n setupResponsiveEventListener(_documentElement, strClickEvent, stopClickEventPropagation, true, { _capture: true });\r\n });\r\n \r\n \r\n if (_scrollbarsHandlesDefineScrollPos)\r\n refreshScrollbarHandleOffset(isHorizontal, true);\r\n\r\n _scrollbarsHandlesDefineScrollPos = false;\r\n removeClass(_bodyElement, _classNameDragging);\r\n removeClass(scrollbarVars._handle, strActive);\r\n removeClass(scrollbarVars._track, strActive);\r\n removeClass(scrollbarVars._scrollbar, strActive);\r\n\r\n mouseDownScroll = undefined;\r\n mouseDownOffset = undefined;\r\n mouseDownInvertedScale = 1;\r\n\r\n decreaseTrackScrollAmount();\r\n\r\n if (trackTimeout !== undefined) {\r\n _base.scrollStop();\r\n clearTimeout(trackTimeout);\r\n trackTimeout = undefined;\r\n }\r\n\r\n if (event) {\r\n var rect = _hostElementNative[LEXICON.bCR]();\r\n var mouseInsideHost = event.clientX >= rect.left && event.clientX <= rect.right && event.clientY >= rect.top && event.clientY <= rect.bottom;\r\n\r\n //if mouse is outside host element\r\n if (!mouseInsideHost)\r\n hostOnMouseLeave();\r\n\r\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\r\n refreshScrollbarsAutoHide(false);\r\n }\r\n }\r\n function onHandleMouseTouchDown(event) {\r\n if (onMouseTouchDownContinue(event))\r\n onHandleMouseTouchDownAction(event);\r\n }\r\n function onHandleMouseTouchDownAction(event) {\r\n mouseDownScroll = _viewportElement[scroll]();\r\n mouseDownScroll = isNaN(mouseDownScroll) ? 0 : mouseDownScroll;\r\n if (_isRTL && isHorizontal && !_rtlScrollBehavior.n || !_isRTL)\r\n mouseDownScroll = mouseDownScroll < 0 ? 0 : mouseDownScroll;\r\n\r\n mouseDownInvertedScale = getHostElementInvertedScale()[xy];\r\n mouseDownOffset = getPointerPosition(event);\r\n\r\n _scrollbarsHandlesDefineScrollPos = !getPreparedScrollbarsOption(strSnapHandle);\r\n addClass(_bodyElement, _classNameDragging);\r\n addClass(scrollbarVars._handle, strActive);\r\n addClass(scrollbarVars._scrollbar, strActive);\r\n\r\n setupResponsiveEventListener(_documentElement,\r\n [_strMouseTouchMoveEvent, _strMouseTouchUpEvent, _strSelectStartEvent],\r\n [documentDragMove, documentMouseTouchUp, documentOnSelectStart]);\r\n COMPATIBILITY.rAF()(function() {\r\n setupResponsiveEventListener(_documentElement, strClickEvent, stopClickEventPropagation, false, { _capture: true });\r\n });\r\n \r\n\r\n if (_msieVersion || !_documentMixed)\r\n COMPATIBILITY.prvD(event);\r\n COMPATIBILITY.stpP(event);\r\n }\r\n function onTrackMouseTouchDown(event) {\r\n if (onMouseTouchDownContinue(event)) {\r\n var handleToViewportRatio = scrollbarVars._info._handleLength / Math.round(MATH.min(1, _viewportSize[scrollbarVars._w_h] / _contentScrollSizeCache[scrollbarVars._w_h]) * scrollbarVars._info._trackLength);\r\n var scrollDistance = MATH.round(_viewportSize[scrollbarVars._w_h] * handleToViewportRatio);\r\n var scrollBaseDuration = 270 * handleToViewportRatio;\r\n var scrollFirstIterationDelay = 400 * handleToViewportRatio;\r\n var trackOffset = scrollbarVars._track.offset()[scrollbarVars._left_top];\r\n var ctrlKey = event.ctrlKey;\r\n var instantScroll = event.shiftKey;\r\n var instantScrollTransition = instantScroll && ctrlKey;\r\n var isFirstIteration = true;\r\n var easing = 'linear';\r\n var decreaseScroll;\r\n var finishedCondition;\r\n var scrollActionFinsished = function (transition) {\r\n if (_scrollbarsHandlesDefineScrollPos)\r\n refreshScrollbarHandleOffset(isHorizontal, transition);\r\n };\r\n var scrollActionInstantFinished = function () {\r\n scrollActionFinsished();\r\n onHandleMouseTouchDownAction(event);\r\n };\r\n var scrollAction = function () {\r\n if (!_destroyed) {\r\n var mouseOffset = (mouseDownOffset - trackOffset) * mouseDownInvertedScale;\r\n var handleOffset = scrollbarVarsInfo._handleOffset;\r\n var trackLength = scrollbarVarsInfo._trackLength;\r\n var handleLength = scrollbarVarsInfo._handleLength;\r\n var scrollRange = scrollbarVarsInfo._maxScroll;\r\n var currScroll = scrollbarVarsInfo._currentScroll;\r\n var scrollDuration = scrollBaseDuration * scrollDurationFactor;\r\n var timeoutDelay = isFirstIteration ? MATH.max(scrollFirstIterationDelay, scrollDuration) : scrollDuration;\r\n var instantScrollPosition = scrollRange * ((mouseOffset - (handleLength / 2)) / (trackLength - handleLength)); // 100% * positionPercent\r\n var rtlIsNormal = _isRTL && isHorizontal && ((!_rtlScrollBehavior.i && !_rtlScrollBehavior.n) || _normalizeRTLCache);\r\n var decreaseScrollCondition = rtlIsNormal ? handleOffset < mouseOffset : handleOffset > mouseOffset;\r\n var scrollObj = {};\r\n var animationObj = {\r\n easing: easing,\r\n step: function (now) {\r\n if (_scrollbarsHandlesDefineScrollPos) {\r\n _viewportElement[scroll](now); //https://github.com/jquery/jquery/issues/4340\r\n refreshScrollbarHandleOffset(isHorizontal, now);\r\n }\r\n }\r\n };\r\n instantScrollPosition = isFinite(instantScrollPosition) ? instantScrollPosition : 0;\r\n instantScrollPosition = _isRTL && isHorizontal && !_rtlScrollBehavior.i ? (scrollRange - instantScrollPosition) : instantScrollPosition;\r\n\r\n //_base.scrollStop();\r\n\r\n if (instantScroll) {\r\n _viewportElement[scroll](instantScrollPosition); //scroll instantly to new position\r\n if (instantScrollTransition) {\r\n //get the scroll position after instant scroll (in case CSS Snap Points are used) to get the correct snapped scroll position\r\n //and the animation stops at the correct point\r\n instantScrollPosition = _viewportElement[scroll]();\r\n //scroll back to the position before instant scrolling so animation can be performed\r\n _viewportElement[scroll](currScroll);\r\n\r\n instantScrollPosition = rtlIsNormal && _rtlScrollBehavior.i ? (scrollRange - instantScrollPosition) : instantScrollPosition;\r\n instantScrollPosition = rtlIsNormal && _rtlScrollBehavior.n ? -instantScrollPosition : instantScrollPosition;\r\n\r\n scrollObj[xy] = instantScrollPosition;\r\n _base.scroll(scrollObj, extendDeep(animationObj, {\r\n duration: 130,\r\n complete: scrollActionInstantFinished\r\n }));\r\n }\r\n else\r\n scrollActionInstantFinished();\r\n }\r\n else {\r\n decreaseScroll = isFirstIteration ? decreaseScrollCondition : decreaseScroll;\r\n finishedCondition = rtlIsNormal\r\n ? (decreaseScroll ? handleOffset + handleLength >= mouseOffset : handleOffset <= mouseOffset)\r\n : (decreaseScroll ? handleOffset <= mouseOffset : handleOffset + handleLength >= mouseOffset);\r\n\r\n if (finishedCondition) {\r\n clearTimeout(trackTimeout);\r\n _base.scrollStop();\r\n trackTimeout = undefined;\r\n scrollActionFinsished(true);\r\n }\r\n else {\r\n trackTimeout = setTimeout(scrollAction, timeoutDelay);\r\n\r\n scrollObj[xy] = (decreaseScroll ? '-=' : '+=') + scrollDistance;\r\n _base.scroll(scrollObj, extendDeep(animationObj, {\r\n duration: scrollDuration\r\n }));\r\n }\r\n isFirstIteration = false;\r\n }\r\n }\r\n };\r\n if (ctrlKey)\r\n increaseTrackScrollAmount();\r\n\r\n mouseDownInvertedScale = getHostElementInvertedScale()[xy];\r\n mouseDownOffset = COMPATIBILITY.page(event)[xy];\r\n\r\n _scrollbarsHandlesDefineScrollPos = !getPreparedScrollbarsOption(strSnapHandle);\r\n addClass(_bodyElement, _classNameDragging);\r\n addClass(scrollbarVars._track, strActive);\r\n addClass(scrollbarVars._scrollbar, strActive);\r\n\r\n setupResponsiveEventListener(_documentElement,\r\n [_strMouseTouchUpEvent, _strKeyDownEvent, _strKeyUpEvent, _strSelectStartEvent],\r\n [documentMouseTouchUp, documentKeyDown, documentKeyUp, documentOnSelectStart]);\r\n\r\n scrollAction();\r\n COMPATIBILITY.prvD(event);\r\n COMPATIBILITY.stpP(event);\r\n }\r\n }\r\n function onTrackMouseTouchEnter(event) {\r\n //make sure both scrollbars will stay visible if one scrollbar is hovered if autoHide is \"scroll\" or \"move\".\r\n _scrollbarsHandleHovered = true;\r\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\r\n refreshScrollbarsAutoHide(true);\r\n }\r\n function onTrackMouseTouchLeave(event) {\r\n _scrollbarsHandleHovered = false;\r\n if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\r\n refreshScrollbarsAutoHide(false);\r\n }\r\n function onScrollbarMouseTouchDown(event) {\r\n COMPATIBILITY.stpP(event);\r\n }\r\n\r\n addDestroyEventListener(scrollbarVars._handle,\r\n _strMouseTouchDownEvent,\r\n onHandleMouseTouchDown);\r\n addDestroyEventListener(scrollbarVars._track,\r\n [_strMouseTouchDownEvent, _strMouseEnter, _strMouseLeave],\r\n [onTrackMouseTouchDown, onTrackMouseTouchEnter, onTrackMouseTouchLeave]);\r\n addDestroyEventListener(scrollbarVars._scrollbar,\r\n _strMouseTouchDownEvent,\r\n onScrollbarMouseTouchDown);\r\n\r\n if (_supportTransition) {\r\n addDestroyEventListener(scrollbarVars._scrollbar, _strTransitionEndEvent, function (event) {\r\n if (event.target !== scrollbarVars._scrollbar[0])\r\n return;\r\n refreshScrollbarHandleLength(isHorizontal);\r\n refreshScrollbarHandleOffset(isHorizontal);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Shows or hides the given scrollbar and applied a class name which indicates if the scrollbar is scrollable or not.\r\n * @param isHorizontal True if the horizontal scrollbar is the target, false if the vertical scrollbar is the target.\r\n * @param shallBeVisible True if the scrollbar shall be shown, false if hidden.\r\n * @param canScroll True if the scrollbar is scrollable, false otherwise.\r\n */\r\n function refreshScrollbarAppearance(isHorizontal, shallBeVisible, canScroll) {\r\n var scrollbarHiddenClassName = isHorizontal ? _classNameHostScrollbarHorizontalHidden : _classNameHostScrollbarVerticalHidden;\r\n var scrollbarElement = isHorizontal ? _scrollbarHorizontalElement : _scrollbarVerticalElement;\r\n\r\n addRemoveClass(_hostElement, scrollbarHiddenClassName, !shallBeVisible);\r\n addRemoveClass(scrollbarElement, _classNameScrollbarUnusable, !canScroll);\r\n }\r\n\r\n /**\r\n * Autoshows / autohides both scrollbars with.\r\n * @param shallBeVisible True if the scrollbars shall be autoshown (only the case if they are hidden by a autohide), false if the shall be auto hidden.\r\n * @param delayfree True if the scrollbars shall be hidden without a delay, false or undefined otherwise.\r\n */\r\n function refreshScrollbarsAutoHide(shallBeVisible, delayfree) {\r\n clearTimeout(_scrollbarsAutoHideTimeoutId);\r\n if (shallBeVisible) {\r\n //if(_hasOverflowCache.x && _hideOverflowCache.xs)\r\n removeClass(_scrollbarHorizontalElement, _classNameScrollbarAutoHidden);\r\n //if(_hasOverflowCache.y && _hideOverflowCache.ys)\r\n removeClass(_scrollbarVerticalElement, _classNameScrollbarAutoHidden);\r\n }\r\n else {\r\n var anyActive;\r\n var strActive = 'active';\r\n var hide = function () {\r\n if (!_scrollbarsHandleHovered && !_destroyed) {\r\n anyActive = _scrollbarHorizontalHandleElement.hasClass(strActive) || _scrollbarVerticalHandleElement.hasClass(strActive);\r\n if (!anyActive && (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove || _scrollbarsAutoHideLeave))\r\n addClass(_scrollbarHorizontalElement, _classNameScrollbarAutoHidden);\r\n if (!anyActive && (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove || _scrollbarsAutoHideLeave))\r\n addClass(_scrollbarVerticalElement, _classNameScrollbarAutoHidden);\r\n }\r\n };\r\n if (_scrollbarsAutoHideDelay > 0 && delayfree !== true)\r\n _scrollbarsAutoHideTimeoutId = setTimeout(hide, _scrollbarsAutoHideDelay);\r\n else\r\n hide();\r\n }\r\n }\r\n\r\n /**\r\n * Refreshes the handle length of the given scrollbar.\r\n * @param isHorizontal True if the horizontal scrollbar handle shall be refreshed, false if the vertical one shall be refreshed.\r\n */\r\n function refreshScrollbarHandleLength(isHorizontal) {\r\n var handleCSS = {};\r\n var scrollbarVars = getScrollbarVars(isHorizontal);\r\n var scrollbarVarsInfo = scrollbarVars._info;\r\n var digit = 1000000;\r\n //get and apply intended handle length\r\n var handleRatio = MATH.min(1, _viewportSize[scrollbarVars._w_h] / _contentScrollSizeCache[scrollbarVars._w_h]);\r\n handleCSS[scrollbarVars._width_height] = (MATH.floor(handleRatio * 100 * digit) / digit) + '%'; //the last * digit / digit is for flooring to the 4th digit\r\n\r\n if (!nativeOverlayScrollbarsAreActive())\r\n scrollbarVars._handle.css(handleCSS);\r\n\r\n //measure the handle length to respect min & max length\r\n scrollbarVarsInfo._handleLength = scrollbarVars._handle[0]['offset' + scrollbarVars._Width_Height];\r\n scrollbarVarsInfo._handleLengthRatio = handleRatio;\r\n }\r\n\r\n /**\r\n * Refreshes the handle offset of the given scrollbar.\r\n * @param isHorizontal True if the horizontal scrollbar handle shall be refreshed, false if the vertical one shall be refreshed.\r\n * @param scrollOrTransition The scroll position of the given scrollbar axis to which the handle shall be moved or a boolean which indicates whether a transition shall be applied. If undefined or boolean if the current scroll-offset is taken. (if isHorizontal ? scrollLeft : scrollTop)\r\n */\r\n function refreshScrollbarHandleOffset(isHorizontal, scrollOrTransition) {\r\n var transition = type(scrollOrTransition) == TYPES.b;\r\n var transitionDuration = 250;\r\n var isRTLisHorizontal = _isRTL && isHorizontal;\r\n var scrollbarVars = getScrollbarVars(isHorizontal);\r\n var scrollbarVarsInfo = scrollbarVars._info;\r\n var strTranslateBrace = 'translate(';\r\n var strTransform = VENDORS._cssProperty('transform');\r\n var strTransition = VENDORS._cssProperty('transition');\r\n var nativeScroll = isHorizontal ? _viewportElement[_strScrollLeft]() : _viewportElement[_strScrollTop]();\r\n var currentScroll = scrollOrTransition === undefined || transition ? nativeScroll : scrollOrTransition;\r\n\r\n //measure the handle length to respect min & max length\r\n var handleLength = scrollbarVarsInfo._handleLength;\r\n var trackLength = scrollbarVars._track[0]['offset' + scrollbarVars._Width_Height];\r\n var handleTrackDiff = trackLength - handleLength;\r\n var handleCSS = {};\r\n var transformOffset;\r\n var translateValue;\r\n\r\n //DONT use the variable '_contentScrollSizeCache[scrollbarVars._w_h]' instead of '_viewportElement[0]['scroll' + scrollbarVars._Width_Height]'\r\n // because its a bit behind during the small delay when content size updates\r\n //(delay = mutationObserverContentLag, if its 0 then this var could be used)\r\n var maxScroll = (_viewportElementNative[_strScroll + scrollbarVars._Width_Height] - _viewportElementNative['client' + scrollbarVars._Width_Height]) * (_rtlScrollBehavior.n && isRTLisHorizontal ? -1 : 1); //* -1 if rtl scroll max is negative\r\n var getScrollRatio = function (base) {\r\n return isNaN(base / maxScroll) ? 0 : MATH.max(0, MATH.min(1, base / maxScroll));\r\n };\r\n var getHandleOffset = function (scrollRatio) {\r\n var offset = handleTrackDiff * scrollRatio;\r\n offset = isNaN(offset) ? 0 : offset;\r\n offset = (isRTLisHorizontal && !_rtlScrollBehavior.i) ? (trackLength - handleLength - offset) : offset;\r\n offset = MATH.max(0, offset);\r\n return offset;\r\n };\r\n var scrollRatio = getScrollRatio(nativeScroll);\r\n var unsnappedScrollRatio = getScrollRatio(currentScroll);\r\n var handleOffset = getHandleOffset(unsnappedScrollRatio);\r\n var snappedHandleOffset = getHandleOffset(scrollRatio);\r\n\r\n scrollbarVarsInfo._maxScroll = maxScroll;\r\n scrollbarVarsInfo._currentScroll = nativeScroll;\r\n scrollbarVarsInfo._currentScrollRatio = scrollRatio;\r\n\r\n if (_supportTransform) {\r\n transformOffset = isRTLisHorizontal ? -(trackLength - handleLength - handleOffset) : handleOffset; //in px\r\n //transformOffset = (transformOffset / trackLength * 100) * (trackLength / handleLength); //in %\r\n translateValue = isHorizontal ? strTranslateBrace + transformOffset + 'px, 0)' : strTranslateBrace + '0, ' + transformOffset + 'px)';\r\n\r\n handleCSS[strTransform] = translateValue;\r\n\r\n //apply or clear up transition\r\n if (_supportTransition)\r\n handleCSS[strTransition] = transition && MATH.abs(handleOffset - scrollbarVarsInfo._handleOffset) > 1 ? getCSSTransitionString(scrollbarVars._handle) + ', ' + (strTransform + _strSpace + transitionDuration + 'ms') : _strEmpty;\r\n }\r\n else\r\n handleCSS[scrollbarVars._left_top] = handleOffset;\r\n\r\n\r\n //only apply css if offset has changed and overflow exists.\r\n if (!nativeOverlayScrollbarsAreActive()) {\r\n scrollbarVars._handle.css(handleCSS);\r\n\r\n //clear up transition\r\n if (_supportTransform && _supportTransition && transition) {\r\n scrollbarVars._handle.one(_strTransitionEndEvent, function () {\r\n if (!_destroyed)\r\n scrollbarVars._handle.css(strTransition, _strEmpty);\r\n });\r\n }\r\n }\r\n\r\n scrollbarVarsInfo._handleOffset = handleOffset;\r\n scrollbarVarsInfo._snappedHandleOffset = snappedHandleOffset;\r\n scrollbarVarsInfo._trackLength = trackLength;\r\n }\r\n\r\n /**\r\n * Refreshes the interactivity of the given scrollbar element.\r\n * @param isTrack True if the track element is the target, false if the handle element is the target.\r\n * @param value True for interactivity false for no interactivity.\r\n */\r\n function refreshScrollbarsInteractive(isTrack, value) {\r\n var action = value ? 'removeClass' : 'addClass';\r\n var element1 = isTrack ? _scrollbarHorizontalTrackElement : _scrollbarHorizontalHandleElement;\r\n var element2 = isTrack ? _scrollbarVerticalTrackElement : _scrollbarVerticalHandleElement;\r\n var className = isTrack ? _classNameScrollbarTrackOff : _classNameScrollbarHandleOff;\r\n\r\n element1[action](className);\r\n element2[action](className);\r\n }\r\n\r\n /**\r\n * Returns a object which is used for fast access for specific variables.\r\n * @param isHorizontal True if the horizontal scrollbar vars shall be accessed, false if the vertical scrollbar vars shall be accessed.\r\n * @returns {{wh: string, WH: string, lt: string, _wh: string, _lt: string, t: *, h: *, c: {}, s: *}}\r\n */\r\n function getScrollbarVars(isHorizontal) {\r\n return {\r\n _width_height: isHorizontal ? _strWidth : _strHeight,\r\n _Width_Height: isHorizontal ? 'Width' : 'Height',\r\n _left_top: isHorizontal ? _strLeft : _strTop,\r\n _Left_Top: isHorizontal ? 'Left' : 'Top',\r\n _x_y: isHorizontal ? _strX : _strY,\r\n _X_Y: isHorizontal ? 'X' : 'Y',\r\n _w_h: isHorizontal ? 'w' : 'h',\r\n _l_t: isHorizontal ? 'l' : 't',\r\n _track: isHorizontal ? _scrollbarHorizontalTrackElement : _scrollbarVerticalTrackElement,\r\n _handle: isHorizontal ? _scrollbarHorizontalHandleElement : _scrollbarVerticalHandleElement,\r\n _scrollbar: isHorizontal ? _scrollbarHorizontalElement : _scrollbarVerticalElement,\r\n _info: isHorizontal ? _scrollHorizontalInfo : _scrollVerticalInfo\r\n };\r\n }\r\n\r\n\r\n //==== Scrollbar Corner ====//\r\n\r\n /**\r\n * Builds or destroys the scrollbar corner DOM element.\r\n * @param destroy Indicates whether the DOM shall be build or destroyed.\r\n */\r\n function setupScrollbarCornerDOM(destroy) {\r\n _scrollbarCornerElement = _scrollbarCornerElement || selectOrGenerateDivByClass(_classNameScrollbarCorner, true);\r\n\r\n if (!destroy) {\r\n if (!_domExists) {\r\n _hostElement.append(_scrollbarCornerElement);\r\n }\r\n }\r\n else {\r\n if (_domExists && _initialized) {\r\n removeClass(_scrollbarCornerElement.removeAttr(LEXICON.s), _classNamesDynamicDestroy);\r\n }\r\n else {\r\n remove(_scrollbarCornerElement);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Initializes all scrollbar corner interactivity events.\r\n */\r\n function setupScrollbarCornerEvents() {\r\n var insideIFrame = _windowElementNative.top !== _windowElementNative;\r\n var mouseDownPosition = {};\r\n var mouseDownSize = {};\r\n var mouseDownInvertedScale = {};\r\n var reconnectMutationObserver;\r\n\r\n function documentDragMove(event) {\r\n if (onMouseTouchDownContinue(event)) {\r\n var pageOffset = getCoordinates(event);\r\n var hostElementCSS = {};\r\n if (_resizeHorizontal || _resizeBoth)\r\n hostElementCSS[_strWidth] = (mouseDownSize.w + (pageOffset.x - mouseDownPosition.x) * mouseDownInvertedScale.x);\r\n if (_resizeVertical || _resizeBoth)\r\n hostElementCSS[_strHeight] = (mouseDownSize.h + (pageOffset.y - mouseDownPosition.y) * mouseDownInvertedScale.y);\r\n _hostElement.css(hostElementCSS);\r\n COMPATIBILITY.stpP(event);\r\n }\r\n else {\r\n documentMouseTouchUp(event);\r\n }\r\n }\r\n function documentMouseTouchUp(event) {\r\n var eventIsTrusted = event !== undefined;\r\n\r\n setupResponsiveEventListener(_documentElement,\r\n [_strSelectStartEvent, _strMouseTouchMoveEvent, _strMouseTouchUpEvent],\r\n [documentOnSelectStart, documentDragMove, documentMouseTouchUp],\r\n true);\r\n\r\n removeClass(_bodyElement, _classNameDragging);\r\n if (_scrollbarCornerElement.releaseCapture)\r\n _scrollbarCornerElement.releaseCapture();\r\n\r\n if (eventIsTrusted) {\r\n if (reconnectMutationObserver)\r\n connectMutationObservers();\r\n _base.update(_strAuto);\r\n }\r\n reconnectMutationObserver = false;\r\n }\r\n function onMouseTouchDownContinue(event) {\r\n var originalEvent = event.originalEvent || event;\r\n var isTouchEvent = originalEvent.touches !== undefined;\r\n return _sleeping || _destroyed ? false : COMPATIBILITY.mBtn(event) === 1 || isTouchEvent;\r\n }\r\n function getCoordinates(event) {\r\n return _msieVersion && insideIFrame ? { x: event.screenX, y: event.screenY } : COMPATIBILITY.page(event);\r\n }\r\n\r\n addDestroyEventListener(_scrollbarCornerElement, _strMouseTouchDownEvent, function (event) {\r\n if (onMouseTouchDownContinue(event) && !_resizeNone) {\r\n if (_mutationObserversConnected) {\r\n reconnectMutationObserver = true;\r\n disconnectMutationObservers();\r\n }\r\n\r\n mouseDownPosition = getCoordinates(event);\r\n\r\n mouseDownSize.w = _hostElementNative[LEXICON.oW] - (!_isBorderBox ? _paddingX : 0);\r\n mouseDownSize.h = _hostElementNative[LEXICON.oH] - (!_isBorderBox ? _paddingY : 0);\r\n mouseDownInvertedScale = getHostElementInvertedScale();\r\n\r\n setupResponsiveEventListener(_documentElement,\r\n [_strSelectStartEvent, _strMouseTouchMoveEvent, _strMouseTouchUpEvent],\r\n [documentOnSelectStart, documentDragMove, documentMouseTouchUp]);\r\n\r\n addClass(_bodyElement, _classNameDragging);\r\n if (_scrollbarCornerElement.setCapture)\r\n _scrollbarCornerElement.setCapture();\r\n\r\n COMPATIBILITY.prvD(event);\r\n COMPATIBILITY.stpP(event);\r\n }\r\n });\r\n }\r\n\r\n\r\n //==== Utils ====//\r\n\r\n /**\r\n * Calls the callback with the given name. The Context of this callback is always _base (this).\r\n * @param name The name of the target which shall be called.\r\n * @param args The args with which the callback shall be called.\r\n * @param dependent Boolean which decides whether the callback shall be fired, undefined is like a \"true\" value.\r\n */\r\n function dispatchCallback(name, args, dependent) {\r\n if (dependent === false)\r\n return;\r\n if (_initialized) {\r\n var callback = _currentPreparedOptions.callbacks[name];\r\n var extensionOnName = name;\r\n var ext;\r\n\r\n if (extensionOnName.substr(0, 2) === 'on')\r\n extensionOnName = extensionOnName.substr(2, 1).toLowerCase() + extensionOnName.substr(3);\r\n\r\n if (type(callback) == TYPES.f)\r\n callback.call(_base, args);\r\n\r\n each(_extensions, function () {\r\n ext = this;\r\n if (type(ext.on) == TYPES.f)\r\n ext.on(extensionOnName, args);\r\n });\r\n }\r\n else if (!_destroyed)\r\n _callbacksInitQeueue.push({ n: name, a: args });\r\n }\r\n\r\n /**\r\n * Sets the \"top, right, bottom, left\" properties, with a given prefix, of the given css object.\r\n * @param targetCSSObject The css object to which the values shall be applied.\r\n * @param prefix The prefix of the \"top, right, bottom, left\" css properties. (example: 'padding-' is a valid prefix)\r\n * @param values A array of values which shall be applied to the \"top, right, bottom, left\" -properties. The array order is [top, right, bottom, left].\r\n * If this argument is undefined the value '' (empty string) will be applied to all properties.\r\n */\r\n function setTopRightBottomLeft(targetCSSObject, prefix, values) {\r\n prefix = prefix || _strEmpty;\r\n values = values || [_strEmpty, _strEmpty, _strEmpty, _strEmpty];\r\n\r\n targetCSSObject[prefix + _strTop] = values[0];\r\n targetCSSObject[prefix + _strRight] = values[1];\r\n targetCSSObject[prefix + _strBottom] = values[2];\r\n targetCSSObject[prefix + _strLeft] = values[3];\r\n }\r\n\r\n /**\r\n * Gets the \"top, right, bottom, left\" CSS properties of the CSS property with the given prefix from the host element.\r\n * @param prefix The prefix of the \"top, right, bottom, left\" css properties. (example: 'padding-' is a valid prefix)\r\n * @param suffix The suffix of the \"top, right, bottom, left\" css properties. (example: 'border-' is a valid prefix with '-width' is a valid suffix)\r\n * @param zeroX True if the x axis shall be 0.\r\n * @param zeroY True if the y axis shall be 0.\r\n * @returns {{}} The object which contains the numbers of the read CSS properties.\r\n */\r\n function getTopRightBottomLeftHost(prefix, suffix, zeroX, zeroY) {\r\n suffix = suffix || _strEmpty;\r\n prefix = prefix || _strEmpty;\r\n return {\r\n t: zeroY ? 0 : parseToZeroOrNumber(_hostElement.css(prefix + _strTop + suffix)),\r\n r: zeroX ? 0 : parseToZeroOrNumber(_hostElement.css(prefix + _strRight + suffix)),\r\n b: zeroY ? 0 : parseToZeroOrNumber(_hostElement.css(prefix + _strBottom + suffix)),\r\n l: zeroX ? 0 : parseToZeroOrNumber(_hostElement.css(prefix + _strLeft + suffix))\r\n };\r\n }\r\n\r\n /**\r\n * Returns the computed CSS transition string from the given element.\r\n * @param element The element from which the transition string shall be returned.\r\n * @returns {string} The CSS transition string from the given element.\r\n */\r\n function getCSSTransitionString(element) {\r\n var transitionStr = VENDORS._cssProperty('transition');\r\n var assembledValue = element.css(transitionStr);\r\n if (assembledValue)\r\n return assembledValue;\r\n var regExpString = '\\\\s*(' + '([^,(]+(\\\\(.+?\\\\))?)+' + ')[\\\\s,]*';\r\n var regExpMain = new RegExp(regExpString);\r\n var regExpValidate = new RegExp('^(' + regExpString + ')+$');\r\n var properties = 'property duration timing-function delay'.split(' ');\r\n var result = [];\r\n var strResult;\r\n var valueArray;\r\n var i = 0;\r\n var j;\r\n var splitCssStyleByComma = function (str) {\r\n strResult = [];\r\n if (!str.match(regExpValidate))\r\n return str;\r\n while (str.match(regExpMain)) {\r\n strResult.push(RegExp.$1);\r\n str = str.replace(regExpMain, _strEmpty);\r\n }\r\n\r\n return strResult;\r\n };\r\n for (; i < properties[LEXICON.l]; i++) {\r\n valueArray = splitCssStyleByComma(element.css(transitionStr + '-' + properties[i]));\r\n for (j = 0; j < valueArray[LEXICON.l]; j++)\r\n result[j] = (result[j] ? result[j] + _strSpace : _strEmpty) + valueArray[j];\r\n }\r\n return result.join(', ');\r\n }\r\n\r\n /**\r\n * Generates a Regular Expression which matches with a string which starts with 'os-host'.\r\n * @param {boolean} withCurrClassNameOption The Regular Expression also matches if the string is the current ClassName option (multiple values splitted by space possible).\r\n * @param {boolean} withOldClassNameOption The Regular Expression also matches if the string is the old ClassName option (multiple values splitted by space possible).\r\n */\r\n function createHostClassNameRegExp(withCurrClassNameOption, withOldClassNameOption) {\r\n var i;\r\n var split;\r\n var appendix;\r\n var appendClasses = function (classes, condition) {\r\n appendix = '';\r\n if (condition && typeof classes == TYPES.s) {\r\n split = classes.split(_strSpace);\r\n for (i = 0; i < split[LEXICON.l]; i++)\r\n appendix += '|' + split[i] + '$';\r\n // split[i].replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') for escaping regex characters\r\n }\r\n return appendix;\r\n };\r\n\r\n return new RegExp(\r\n '(^' + _classNameHostElement + '([-_].+|)$)' +\r\n appendClasses(_classNameCache, withCurrClassNameOption) +\r\n appendClasses(_oldClassName, withOldClassNameOption), 'g');\r\n }\r\n\r\n /**\r\n * Calculates the host-elements inverted scale. (invertedScale = 1 / scale)\r\n * @returns {{x: number, y: number}} The scale of the host-element.\r\n */\r\n function getHostElementInvertedScale() {\r\n var rect = _paddingElementNative[LEXICON.bCR]();\r\n return {\r\n x: _supportTransform ? 1 / (MATH.round(rect.width) / _paddingElementNative[LEXICON.oW]) || 1 : 1,\r\n y: _supportTransform ? 1 / (MATH.round(rect.height) / _paddingElementNative[LEXICON.oH]) || 1 : 1\r\n };\r\n }\r\n\r\n /**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param o The object which shall be checked.\r\n * @returns {boolean} True the given object is a HTMLElement, false otherwise.\r\n */\r\n function isHTMLElement(o) {\r\n var strOwnerDocument = 'ownerDocument';\r\n var strHTMLElement = 'HTMLElement';\r\n var wnd = o && o[strOwnerDocument] ? (o[strOwnerDocument].parentWindow || window) : window;\r\n return (\r\n typeof wnd[strHTMLElement] == TYPES.o ? o instanceof wnd[strHTMLElement] : //DOM2\r\n o && typeof o == TYPES.o && o !== null && o.nodeType === 1 && typeof o.nodeName == TYPES.s\r\n );\r\n }\r\n\r\n /**\r\n * Compares 2 arrays and returns the differences between them as a array.\r\n * @param a1 The first array which shall be compared.\r\n * @param a2 The second array which shall be compared.\r\n * @returns {Array} The differences between the two arrays.\r\n */\r\n function getArrayDifferences(a1, a2) {\r\n var a = [];\r\n var diff = [];\r\n var i;\r\n var k;\r\n for (i = 0; i < a1.length; i++)\r\n a[a1[i]] = true;\r\n for (i = 0; i < a2.length; i++) {\r\n if (a[a2[i]])\r\n delete a[a2[i]];\r\n else\r\n a[a2[i]] = true;\r\n }\r\n for (k in a)\r\n diff.push(k);\r\n return diff;\r\n }\r\n\r\n /**\r\n * Returns Zero or the number to which the value can be parsed.\r\n * @param value The value which shall be parsed.\r\n * @param toFloat Indicates whether the number shall be parsed to a float.\r\n */\r\n function parseToZeroOrNumber(value, toFloat) {\r\n var num = toFloat ? parseFloat(value) : parseInt(value, 10);\r\n return isNaN(num) ? 0 : num;\r\n }\r\n\r\n /**\r\n * Gets several information of the textarea and returns them as a object or undefined if the browser doesn't support it.\r\n * @returns {{cursorRow: Number, cursorCol, rows: Number, cols: number, wRow: number, pos: number, max : number}} or undefined if not supported.\r\n */\r\n function getTextareaInfo() {\r\n //read needed values\r\n var textareaCursorPosition = _targetElementNative.selectionStart;\r\n if (textareaCursorPosition === undefined)\r\n return;\r\n\r\n var textareaValue = _targetElement.val();\r\n var textareaLength = textareaValue[LEXICON.l];\r\n var textareaRowSplit = textareaValue.split('\\n');\r\n var textareaLastRow = textareaRowSplit[LEXICON.l];\r\n var textareaCurrentCursorRowSplit = textareaValue.substr(0, textareaCursorPosition).split('\\n');\r\n var widestRow = 0;\r\n var textareaLastCol = 0;\r\n var cursorRow = textareaCurrentCursorRowSplit[LEXICON.l];\r\n var cursorCol = textareaCurrentCursorRowSplit[textareaCurrentCursorRowSplit[LEXICON.l] - 1][LEXICON.l];\r\n var rowCols;\r\n var i;\r\n\r\n //get widest Row and the last column of the textarea\r\n for (i = 0; i < textareaRowSplit[LEXICON.l]; i++) {\r\n rowCols = textareaRowSplit[i][LEXICON.l];\r\n if (rowCols > textareaLastCol) {\r\n widestRow = i + 1;\r\n textareaLastCol = rowCols;\r\n }\r\n }\r\n\r\n return {\r\n _cursorRow: cursorRow, //cursorRow\r\n _cursorColumn: cursorCol, //cursorCol\r\n _rows: textareaLastRow, //rows\r\n _columns: textareaLastCol, //cols\r\n _widestRow: widestRow, //wRow\r\n _cursorPosition: textareaCursorPosition, //pos\r\n _cursorMax: textareaLength //max\r\n };\r\n }\r\n\r\n /**\r\n * Determines whether native overlay scrollbars are active.\r\n * @returns {boolean} True if native overlay scrollbars are active, false otherwise.\r\n */\r\n function nativeOverlayScrollbarsAreActive() {\r\n return (_ignoreOverlayScrollbarHidingCache && (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y));\r\n }\r\n\r\n /**\r\n * Gets the element which is used to measure the content size.\r\n * @returns {*} TextareaCover if target element is textarea else the ContentElement.\r\n */\r\n function getContentMeasureElement() {\r\n return _isTextarea ? _textareaCoverElement[0] : _contentElementNative;\r\n }\r\n\r\n /**\r\n * Generates a string which represents a HTML div with the given classes or attributes.\r\n * @param classesOrAttrs The class of the div as string or a object which represents the attributes of the div. (The class attribute can also be written as \"className\".)\r\n * @param content The content of the div as string.\r\n * @returns {string} The concated string which represents a HTML div and its content.\r\n */\r\n function generateDiv(classesOrAttrs, content) {\r\n return '
' +\r\n (content || _strEmpty) +\r\n '
';\r\n }\r\n\r\n /**\r\n * Selects or generates a div with the given class attribute.\r\n * @param className The class names (divided by spaces) of the div which shall be selected or generated.\r\n * @param selectParentOrOnlyChildren The parent element from which of the element shall be selected. (if undefined or boolean its hostElement)\r\n * If its a boolean it decides whether only the children of the host element shall be selected.\r\n * @returns {*} The generated or selected element.\r\n */\r\n function selectOrGenerateDivByClass(className, selectParentOrOnlyChildren) {\r\n var onlyChildren = type(selectParentOrOnlyChildren) == TYPES.b;\r\n var selectParent = onlyChildren ? _hostElement : (selectParentOrOnlyChildren || _hostElement);\r\n\r\n return (_domExists && !selectParent[LEXICON.l])\r\n ? null\r\n : _domExists\r\n ? selectParent[onlyChildren ? 'children' : 'find'](_strDot + className.replace(/\\s/g, _strDot)).eq(0)\r\n : FRAMEWORK(generateDiv(className))\r\n }\r\n\r\n /**\r\n * Gets the value of the given property from the given object.\r\n * @param obj The object from which the property value shall be got.\r\n * @param path The property of which the value shall be got.\r\n * @returns {*} Returns the value of the searched property or undefined of the property wasn't found.\r\n */\r\n function getObjectPropVal(obj, path) {\r\n var splits = path.split(_strDot);\r\n var i = 0;\r\n var val;\r\n for (; i < splits.length; i++) {\r\n if (!obj[LEXICON.hOP](splits[i]))\r\n return;\r\n val = obj[splits[i]];\r\n if (i < splits.length && type(val) == TYPES.o)\r\n obj = val;\r\n }\r\n return val;\r\n }\r\n\r\n /**\r\n * Sets the value of the given property from the given object.\r\n * @param obj The object from which the property value shall be set.\r\n * @param path The property of which the value shall be set.\r\n * @param val The value of the property which shall be set.\r\n */\r\n function setObjectPropVal(obj, path, val) {\r\n var splits = path.split(_strDot);\r\n var splitsLength = splits.length;\r\n var i = 0;\r\n var extendObj = {};\r\n var extendObjRoot = extendObj;\r\n for (; i < splitsLength; i++)\r\n extendObj = extendObj[splits[i]] = i + 1 < splitsLength ? {} : val;\r\n FRAMEWORK.extend(obj, extendObjRoot, true);\r\n }\r\n\r\n /**\t\r\n * Runs a action for each selector inside the updateOnLoad option.\t\r\n * @param {Function} action The action for each updateOnLoad selector, the arguments the function takes is the index and the value (the selector).\t\r\n */\r\n function eachUpdateOnLoad(action) {\r\n var updateOnLoad = _currentPreparedOptions.updateOnLoad;\r\n updateOnLoad = type(updateOnLoad) == TYPES.s ? updateOnLoad.split(_strSpace) : updateOnLoad;\r\n\r\n if (COMPATIBILITY.isA(updateOnLoad) && !_destroyed) {\r\n each(updateOnLoad, action);\r\n }\r\n }\r\n\r\n\r\n //==== Utils Cache ====//\r\n\r\n /**\r\n * Compares two values or objects and returns true if they aren't equal.\r\n * @param current The first value or object which shall be compared.\r\n * @param cache The second value or object which shall be compared.\r\n * @param force If true the returned value is always true.\r\n * @returns {boolean} True if both values or objects aren't equal or force is true, false otherwise.\r\n */\r\n function checkCache(current, cache, force) {\r\n if (force)\r\n return force;\r\n if (type(current) == TYPES.o && type(cache) == TYPES.o) {\r\n for (var prop in current) {\r\n if (prop !== 'c') {\r\n if (current[LEXICON.hOP](prop) && cache[LEXICON.hOP](prop)) {\r\n if (checkCache(current[prop], cache[prop]))\r\n return true;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n return current !== cache;\r\n }\r\n return false;\r\n }\r\n\r\n\r\n //==== Shortcuts ====//\r\n\r\n /**\r\n * jQuery extend method shortcut with a appended \"true\" as first argument.\r\n */\r\n function extendDeep() {\r\n return FRAMEWORK.extend.apply(this, [true].concat([].slice.call(arguments)));\r\n }\r\n\r\n /**\r\n * jQuery addClass method shortcut.\r\n */\r\n function addClass(el, classes) {\r\n return _frameworkProto.addClass.call(el, classes);\r\n }\r\n\r\n /**\r\n * jQuery removeClass method shortcut.\r\n */\r\n function removeClass(el, classes) {\r\n return _frameworkProto.removeClass.call(el, classes);\r\n }\r\n\r\n /**\r\n * Adds or removes the given classes dependent on the boolean value. True for add, false for remove.\r\n */\r\n function addRemoveClass(el, classes, doAdd) {\r\n return doAdd ? addClass(el, classes) : removeClass(el, classes);\r\n }\r\n\r\n /**\r\n * jQuery remove method shortcut.\r\n */\r\n function remove(el) {\r\n return _frameworkProto.remove.call(el);\r\n }\r\n\r\n /**\r\n * Finds the first child element with the given selector of the given element.\r\n * @param el The root element from which the selector shall be valid.\r\n * @param selector The selector of the searched element.\r\n * @returns {*} The first element which is a child of the given element and matches the givens selector.\r\n */\r\n function findFirst(el, selector) {\r\n return _frameworkProto.find.call(el, selector).eq(0);\r\n }\r\n\r\n\r\n //==== API ====//\r\n\r\n /**\r\n * Puts the instance to sleep. It wont respond to any changes in the DOM and won't update. Scrollbar Interactivity is also disabled as well as the resize handle.\r\n * This behavior can be reset by calling the update method.\r\n */\r\n _base.sleep = function () {\r\n _sleeping = true;\r\n };\r\n\r\n /**\r\n * Updates the plugin and DOM to the current options.\r\n * This method should only be called if a update is 100% required.\r\n * @param force True if every property shall be updated and the cache shall be ignored.\r\n * !INTERNAL USAGE! : force can be a string \"auto\", \"sync\" or \"zoom\" too\r\n * if \"auto\" then before a real update the content size and host element attributes gets checked, and if they changed only then the update method will be called.\r\n * if \"sync\" then the async update process (MutationObserver or UpdateLoop) gets synchronized and a corresponding update takes place if one was needed due to pending changes.\r\n * if \"zoom\" then a update takes place where it's assumed that content and host size changed\r\n * @returns {boolean|undefined} \r\n * If force is \"sync\" then a boolean is returned which indicates whether a update was needed due to pending changes.\r\n * If force is \"auto\" then a boolean is returned whether a update was needed due to attribute or size changes.\r\n * undefined otherwise.\r\n */\r\n _base.update = function (force) {\r\n if (_destroyed)\r\n return;\r\n\r\n var attrsChanged;\r\n var contentSizeC;\r\n var isString = type(force) == TYPES.s;\r\n var doUpdateAuto;\r\n var mutHost;\r\n var mutContent;\r\n\r\n if (isString) {\r\n if (force === _strAuto) {\r\n attrsChanged = meaningfulAttrsChanged();\r\n contentSizeC = updateAutoContentSizeChanged();\r\n doUpdateAuto = attrsChanged || contentSizeC;\r\n if (doUpdateAuto) {\r\n update({\r\n _contentSizeChanged: contentSizeC,\r\n _changedOptions: _initialized ? undefined : _currentPreparedOptions\r\n });\r\n }\r\n }\r\n else if (force === _strSync) {\r\n if (_mutationObserversConnected) {\r\n mutHost = _mutationObserverHostCallback(_mutationObserverHost.takeRecords());\r\n mutContent = _mutationObserverContentCallback(_mutationObserverContent.takeRecords());\r\n }\r\n else {\r\n mutHost = _base.update(_strAuto);\r\n }\r\n }\r\n else if (force === 'zoom') {\r\n update({\r\n _hostSizeChanged: true,\r\n _contentSizeChanged: true\r\n });\r\n }\r\n }\r\n else {\r\n force = _sleeping || force;\r\n _sleeping = false;\r\n if (!_base.update(_strSync) || force)\r\n update({ _force: force });\r\n }\r\n\r\n updateElementsOnLoad();\r\n\r\n return doUpdateAuto || mutHost || mutContent;\r\n };\r\n\r\n /**\r\n Gets or sets the current options. The update method will be called automatically if new options were set.\r\n * @param newOptions If new options are given, then the new options will be set, if new options aren't given (undefined or a not a plain object) then the current options will be returned.\r\n * @param value If new options is a property path string, then this value will be used to set the option to which the property path string leads.\r\n * @returns {*}\r\n */\r\n _base.options = function (newOptions, value) {\r\n var option = {};\r\n var changedOps;\r\n\r\n //return current options if newOptions are undefined or empty\r\n if (FRAMEWORK.isEmptyObject(newOptions) || !FRAMEWORK.isPlainObject(newOptions)) {\r\n if (type(newOptions) == TYPES.s) {\r\n if (arguments.length > 1) {\r\n setObjectPropVal(option, newOptions, value);\r\n changedOps = setOptions(option);\r\n }\r\n else\r\n return getObjectPropVal(_currentOptions, newOptions);\r\n }\r\n else\r\n return _currentOptions;\r\n }\r\n else {\r\n changedOps = setOptions(newOptions);\r\n }\r\n\r\n if (!FRAMEWORK.isEmptyObject(changedOps)) {\r\n update({ _changedOptions: changedOps });\r\n }\r\n };\r\n\r\n /**\r\n * Restore the DOM, disconnects all observers, remove all resize observers and put the instance to sleep.\r\n */\r\n _base.destroy = function () {\r\n if (_destroyed)\r\n return;\r\n\r\n //remove this instance from auto update loop\r\n autoUpdateLoop.remove(_base);\r\n\r\n //disconnect all mutation observers\r\n disconnectMutationObservers();\r\n\r\n //remove all resize observers\r\n setupResizeObserver(_sizeObserverElement);\r\n setupResizeObserver(_sizeAutoObserverElement);\r\n\r\n //remove all extensions\r\n for (var extName in _extensions)\r\n _base.removeExt(extName);\r\n\r\n //remove all 'destroy' events\r\n while (_destroyEvents[LEXICON.l] > 0)\r\n _destroyEvents.pop()();\r\n\r\n //remove all events from host element\r\n setupHostMouseTouchEvents(true);\r\n\r\n //remove all helper / detection elements\r\n if (_contentGlueElement)\r\n remove(_contentGlueElement);\r\n if (_contentArrangeElement)\r\n remove(_contentArrangeElement);\r\n if (_sizeAutoObserverAdded)\r\n remove(_sizeAutoObserverElement);\r\n\r\n //remove all generated DOM\r\n setupScrollbarsDOM(true);\r\n setupScrollbarCornerDOM(true);\r\n setupStructureDOM(true);\r\n\r\n //remove all generated image load events\r\n for (var i = 0; i < _updateOnLoadElms[LEXICON.l]; i++)\r\n FRAMEWORK(_updateOnLoadElms[i]).off(_updateOnLoadEventName, updateOnLoadCallback);\r\n _updateOnLoadElms = undefined;\r\n\r\n _destroyed = true;\r\n _sleeping = true;\r\n\r\n //remove this instance from the instances list\r\n INSTANCES(pluginTargetElement, 0);\r\n dispatchCallback('onDestroyed');\r\n\r\n //remove all properties and methods\r\n //for (var property in _base)\r\n // delete _base[property];\r\n //_base = undefined;\r\n };\r\n\r\n /**\r\n * Scrolls to a given position or element.\r\n * @param coordinates\r\n * 1. Can be \"coordinates\" which looks like:\r\n * { x : ?, y : ? } OR Object with x and y properties\r\n * { left : ?, top : ? } OR Object with left and top properties\r\n * { l : ?, t : ? } OR Object with l and t properties\r\n * [ ?, ? ] OR Array where the first two element are the coordinates (first is x, second is y)\r\n * ? A single value which stays for both axis\r\n * A value can be a number, a string or a calculation.\r\n *\r\n * Operators:\r\n * [NONE] The current scroll will be overwritten by the value.\r\n * '+=' The value will be added to the current scroll offset\r\n * '-=' The value will be subtracted from the current scroll offset\r\n * '*=' The current scroll wil be multiplicated by the value.\r\n * '/=' The current scroll wil be divided by the value.\r\n *\r\n * Units:\r\n * [NONE] The value is the final scroll amount. final = (value * 1)\r\n * 'px' Same as none\r\n * '%' The value is dependent on the current scroll value. final = ((currentScrollValue / 100) * value)\r\n * 'vw' The value is multiplicated by the viewport width. final = (value * viewportWidth)\r\n * 'vh' The value is multiplicated by the viewport height. final = (value * viewportHeight)\r\n *\r\n * example final values:\r\n * 200, '200px', '50%', '1vw', '1vh', '+=200', '/=1vw', '*=2px', '-=5vh', '+=33%', '+= 50% - 2px', '-= 1vw - 50%'\r\n *\r\n * 2. Can be a HTML or jQuery element:\r\n * The final scroll offset is the offset (without margin) of the given HTML / jQuery element.\r\n *\r\n * 3. Can be a object with a HTML or jQuery element with additional settings:\r\n * {\r\n * el : [HTMLElement, jQuery element], MUST be specified, else this object isn't valid.\r\n * scroll : [string, array, object], Default value is 'always'.\r\n * block : [string, array, object], Default value is 'begin'.\r\n * margin : [number, boolean, array, object] Default value is false.\r\n * }\r\n *\r\n * Possible scroll settings are:\r\n * 'always' Scrolls always.\r\n * 'ifneeded' Scrolls only if the element isnt fully in view.\r\n * 'never' Scrolls never.\r\n *\r\n * Possible block settings are:\r\n * 'begin' Both axis shall be docked to the \"begin\" edge. - The element will be docked to the top and left edge of the viewport.\r\n * 'end' Both axis shall be docked to the \"end\" edge. - The element will be docked to the bottom and right edge of the viewport. (If direction is RTL to the bottom and left edge.)\r\n * 'center' Both axis shall be docked to \"center\". - The element will be centered in the viewport.\r\n * 'nearest' The element will be docked to the nearest edge(s).\r\n *\r\n * Possible margin settings are: -- The actual margin of the element wont be affect, this option affects only the final scroll offset.\r\n * [BOOLEAN] If true the css margin of the element will be used, if false no margin will be used.\r\n * [NUMBER] The margin will be used for all edges.\r\n *\r\n * @param duration The duration of the scroll animation, OR a jQuery animation configuration object.\r\n * @param easing The animation easing.\r\n * @param complete The animation complete callback.\r\n * @returns {{\r\n * position: {x: number, y: number},\r\n * ratio: {x: number, y: number},\r\n * max: {x: number, y: number},\r\n * handleOffset: {x: number, y: number},\r\n * handleLength: {x: number, y: number},\r\n * handleLengthRatio: {x: number, y: number}, t\r\n * rackLength: {x: number, y: number},\r\n * isRTL: boolean,\r\n * isRTLNormalized: boolean\r\n * }}\r\n */\r\n _base.scroll = function (coordinates, duration, easing, complete) {\r\n if (arguments.length === 0 || coordinates === undefined) {\r\n var infoX = _scrollHorizontalInfo;\r\n var infoY = _scrollVerticalInfo;\r\n var normalizeInvert = _normalizeRTLCache && _isRTL && _rtlScrollBehavior.i;\r\n var normalizeNegate = _normalizeRTLCache && _isRTL && _rtlScrollBehavior.n;\r\n var scrollX = infoX._currentScroll;\r\n var scrollXRatio = infoX._currentScrollRatio;\r\n var maxScrollX = infoX._maxScroll;\r\n scrollXRatio = normalizeInvert ? 1 - scrollXRatio : scrollXRatio;\r\n scrollX = normalizeInvert ? maxScrollX - scrollX : scrollX;\r\n scrollX *= normalizeNegate ? -1 : 1;\r\n maxScrollX *= normalizeNegate ? -1 : 1;\r\n\r\n return {\r\n position: {\r\n x: scrollX,\r\n y: infoY._currentScroll\r\n },\r\n ratio: {\r\n x: scrollXRatio,\r\n y: infoY._currentScrollRatio\r\n },\r\n max: {\r\n x: maxScrollX,\r\n y: infoY._maxScroll\r\n },\r\n handleOffset: {\r\n x: infoX._handleOffset,\r\n y: infoY._handleOffset\r\n },\r\n handleLength: {\r\n x: infoX._handleLength,\r\n y: infoY._handleLength\r\n },\r\n handleLengthRatio: {\r\n x: infoX._handleLengthRatio,\r\n y: infoY._handleLengthRatio\r\n },\r\n trackLength: {\r\n x: infoX._trackLength,\r\n y: infoY._trackLength\r\n },\r\n snappedHandleOffset: {\r\n x: infoX._snappedHandleOffset,\r\n y: infoY._snappedHandleOffset\r\n },\r\n isRTL: _isRTL,\r\n isRTLNormalized: _normalizeRTLCache\r\n };\r\n }\r\n\r\n _base.update(_strSync);\r\n\r\n var normalizeRTL = _normalizeRTLCache;\r\n var coordinatesXAxisProps = [_strX, _strLeft, 'l'];\r\n var coordinatesYAxisProps = [_strY, _strTop, 't'];\r\n var coordinatesOperators = ['+=', '-=', '*=', '/='];\r\n var durationIsObject = type(duration) == TYPES.o;\r\n var completeCallback = durationIsObject ? duration.complete : complete;\r\n var i;\r\n var finalScroll = {};\r\n var specialEasing = {};\r\n var doScrollLeft;\r\n var doScrollTop;\r\n var animationOptions;\r\n var strEnd = 'end';\r\n var strBegin = 'begin';\r\n var strCenter = 'center';\r\n var strNearest = 'nearest';\r\n var strAlways = 'always';\r\n var strNever = 'never';\r\n var strIfNeeded = 'ifneeded';\r\n var strLength = LEXICON.l;\r\n var settingsAxis;\r\n var settingsScroll;\r\n var settingsBlock;\r\n var settingsMargin;\r\n var finalElement;\r\n var elementObjSettingsAxisValues = [_strX, _strY, 'xy', 'yx'];\r\n var elementObjSettingsBlockValues = [strBegin, strEnd, strCenter, strNearest];\r\n var elementObjSettingsScrollValues = [strAlways, strNever, strIfNeeded];\r\n var coordinatesIsElementObj = coordinates[LEXICON.hOP]('el');\r\n var possibleElement = coordinatesIsElementObj ? coordinates.el : coordinates;\r\n var possibleElementIsJQuery = possibleElement instanceof FRAMEWORK || JQUERY ? possibleElement instanceof JQUERY : false;\r\n var possibleElementIsHTMLElement = possibleElementIsJQuery ? false : isHTMLElement(possibleElement);\r\n var updateScrollbarInfos = function () {\r\n if (doScrollLeft)\r\n refreshScrollbarHandleOffset(true);\r\n if (doScrollTop)\r\n refreshScrollbarHandleOffset(false);\r\n };\r\n var proxyCompleteCallback = type(completeCallback) != TYPES.f ? undefined : function () {\r\n updateScrollbarInfos();\r\n completeCallback();\r\n };\r\n function checkSettingsStringValue(currValue, allowedValues) {\r\n for (i = 0; i < allowedValues[strLength]; i++) {\r\n if (currValue === allowedValues[i])\r\n return true;\r\n }\r\n return false;\r\n }\r\n function getRawScroll(isX, coordinates) {\r\n var coordinateProps = isX ? coordinatesXAxisProps : coordinatesYAxisProps;\r\n coordinates = type(coordinates) == TYPES.s || type(coordinates) == TYPES.n ? [coordinates, coordinates] : coordinates;\r\n\r\n if (COMPATIBILITY.isA(coordinates))\r\n return isX ? coordinates[0] : coordinates[1];\r\n else if (type(coordinates) == TYPES.o) {\r\n //decides RTL normalization \"hack\" with .n\r\n //normalizeRTL = type(coordinates.n) == TYPES.b ? coordinates.n : normalizeRTL; \r\n for (i = 0; i < coordinateProps[strLength]; i++)\r\n if (coordinateProps[i] in coordinates)\r\n return coordinates[coordinateProps[i]];\r\n }\r\n }\r\n function getFinalScroll(isX, rawScroll) {\r\n var isString = type(rawScroll) == TYPES.s;\r\n var operator;\r\n var amount;\r\n var scrollInfo = isX ? _scrollHorizontalInfo : _scrollVerticalInfo;\r\n var currScroll = scrollInfo._currentScroll;\r\n var maxScroll = scrollInfo._maxScroll;\r\n var mult = ' * ';\r\n var finalValue;\r\n var isRTLisX = _isRTL && isX;\r\n var normalizeShortcuts = isRTLisX && _rtlScrollBehavior.n && !normalizeRTL;\r\n var strReplace = 'replace';\r\n var evalFunc = eval;\r\n var possibleOperator;\r\n if (isString) {\r\n //check operator\r\n if (rawScroll[strLength] > 2) {\r\n possibleOperator = rawScroll.substr(0, 2);\r\n if (inArray(possibleOperator, coordinatesOperators) > -1)\r\n operator = possibleOperator;\r\n }\r\n\r\n //calculate units and shortcuts\r\n rawScroll = operator ? rawScroll.substr(2) : rawScroll;\r\n rawScroll = rawScroll\r\n [strReplace](/min/g, 0) //'min' = 0%\r\n [strReplace](//g, (normalizeShortcuts ? '-' : _strEmpty) + _strHundredPercent) //'>' = 100%\r\n [strReplace](/px/g, _strEmpty)\r\n [strReplace](/%/g, mult + (maxScroll * (isRTLisX && _rtlScrollBehavior.n ? -1 : 1) / 100.0))\r\n [strReplace](/vw/g, mult + _viewportSize.w)\r\n [strReplace](/vh/g, mult + _viewportSize.h);\r\n amount = parseToZeroOrNumber(isNaN(rawScroll) ? parseToZeroOrNumber(evalFunc(rawScroll), true).toFixed() : rawScroll);\r\n }\r\n else {\r\n amount = rawScroll;\r\n }\r\n\r\n if (amount !== undefined && !isNaN(amount) && type(amount) == TYPES.n) {\r\n var normalizeIsRTLisX = normalizeRTL && isRTLisX;\r\n var operatorCurrScroll = currScroll * (normalizeIsRTLisX && _rtlScrollBehavior.n ? -1 : 1);\r\n var invert = normalizeIsRTLisX && _rtlScrollBehavior.i;\r\n var negate = normalizeIsRTLisX && _rtlScrollBehavior.n;\r\n operatorCurrScroll = invert ? (maxScroll - operatorCurrScroll) : operatorCurrScroll;\r\n switch (operator) {\r\n case '+=':\r\n finalValue = operatorCurrScroll + amount;\r\n break;\r\n case '-=':\r\n finalValue = operatorCurrScroll - amount;\r\n break;\r\n case '*=':\r\n finalValue = operatorCurrScroll * amount;\r\n break;\r\n case '/=':\r\n finalValue = operatorCurrScroll / amount;\r\n break;\r\n default:\r\n finalValue = amount;\r\n break;\r\n }\r\n finalValue = invert ? maxScroll - finalValue : finalValue;\r\n finalValue *= negate ? -1 : 1;\r\n finalValue = isRTLisX && _rtlScrollBehavior.n ? MATH.min(0, MATH.max(maxScroll, finalValue)) : MATH.max(0, MATH.min(maxScroll, finalValue));\r\n }\r\n return finalValue === currScroll ? undefined : finalValue;\r\n }\r\n function getPerAxisValue(value, valueInternalType, defaultValue, allowedValues) {\r\n var resultDefault = [defaultValue, defaultValue];\r\n var valueType = type(value);\r\n var valueArrLength;\r\n var valueArrItem;\r\n\r\n //value can be [ string, or array of two strings ]\r\n if (valueType == valueInternalType) {\r\n value = [value, value];\r\n }\r\n else if (valueType == TYPES.a) {\r\n valueArrLength = value[strLength];\r\n if (valueArrLength > 2 || valueArrLength < 1)\r\n value = resultDefault;\r\n else {\r\n if (valueArrLength === 1)\r\n value[1] = defaultValue;\r\n for (i = 0; i < valueArrLength; i++) {\r\n valueArrItem = value[i];\r\n if (type(valueArrItem) != valueInternalType || !checkSettingsStringValue(valueArrItem, allowedValues)) {\r\n value = resultDefault;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n else if (valueType == TYPES.o)\r\n value = [value[_strX] || defaultValue, value[_strY] || defaultValue];\r\n else\r\n value = resultDefault;\r\n return { x: value[0], y: value[1] };\r\n }\r\n function generateMargin(marginTopRightBottomLeftArray) {\r\n var result = [];\r\n var currValue;\r\n var currValueType;\r\n var valueDirections = [_strTop, _strRight, _strBottom, _strLeft];\r\n for (i = 0; i < marginTopRightBottomLeftArray[strLength]; i++) {\r\n if (i === valueDirections[strLength])\r\n break;\r\n currValue = marginTopRightBottomLeftArray[i];\r\n currValueType = type(currValue);\r\n if (currValueType == TYPES.b)\r\n result.push(currValue ? parseToZeroOrNumber(finalElement.css(_strMarginMinus + valueDirections[i])) : 0);\r\n else\r\n result.push(currValueType == TYPES.n ? currValue : 0);\r\n }\r\n return result;\r\n }\r\n\r\n if (possibleElementIsJQuery || possibleElementIsHTMLElement) {\r\n //get settings\r\n var margin = coordinatesIsElementObj ? coordinates.margin : 0;\r\n var axis = coordinatesIsElementObj ? coordinates.axis : 0;\r\n var scroll = coordinatesIsElementObj ? coordinates.scroll : 0;\r\n var block = coordinatesIsElementObj ? coordinates.block : 0;\r\n var marginDefault = [0, 0, 0, 0];\r\n var marginType = type(margin);\r\n var marginLength;\r\n finalElement = possibleElementIsJQuery ? possibleElement : FRAMEWORK(possibleElement);\r\n\r\n if (finalElement[strLength] > 0) {\r\n //margin can be [ boolean, number, array of 2, array of 4, object ]\r\n if (marginType == TYPES.n || marginType == TYPES.b)\r\n margin = generateMargin([margin, margin, margin, margin]);\r\n else if (marginType == TYPES.a) {\r\n marginLength = margin[strLength];\r\n if (marginLength === 2)\r\n margin = generateMargin([margin[0], margin[1], margin[0], margin[1]]);\r\n else if (marginLength >= 4)\r\n margin = generateMargin(margin);\r\n else\r\n margin = marginDefault;\r\n }\r\n else if (marginType == TYPES.o)\r\n margin = generateMargin([margin[_strTop], margin[_strRight], margin[_strBottom], margin[_strLeft]]);\r\n else\r\n margin = marginDefault;\r\n\r\n //block = type(block) === TYPES.b ? block ? [ strNearest, strBegin ] : [ strNearest, strEnd ] : block;\r\n settingsAxis = checkSettingsStringValue(axis, elementObjSettingsAxisValues) ? axis : 'xy';\r\n settingsScroll = getPerAxisValue(scroll, TYPES.s, strAlways, elementObjSettingsScrollValues);\r\n settingsBlock = getPerAxisValue(block, TYPES.s, strBegin, elementObjSettingsBlockValues);\r\n settingsMargin = margin;\r\n\r\n var viewportScroll = {\r\n l: _scrollHorizontalInfo._currentScroll,\r\n t: _scrollVerticalInfo._currentScroll\r\n };\r\n // use padding element instead of viewport element because padding element has never padding, margin or position applied.\r\n var viewportOffset = _paddingElement.offset();\r\n\r\n //get coordinates\r\n var elementOffset = finalElement.offset();\r\n var doNotScroll = {\r\n x: settingsScroll.x == strNever || settingsAxis == _strY,\r\n y: settingsScroll.y == strNever || settingsAxis == _strX\r\n };\r\n elementOffset[_strTop] -= settingsMargin[0];\r\n elementOffset[_strLeft] -= settingsMargin[3];\r\n var elementScrollCoordinates = {\r\n x: MATH.round(elementOffset[_strLeft] - viewportOffset[_strLeft] + viewportScroll.l),\r\n y: MATH.round(elementOffset[_strTop] - viewportOffset[_strTop] + viewportScroll.t)\r\n };\r\n if (_isRTL) {\r\n if (!_rtlScrollBehavior.n && !_rtlScrollBehavior.i)\r\n elementScrollCoordinates.x = MATH.round(viewportOffset[_strLeft] - elementOffset[_strLeft] + viewportScroll.l);\r\n if (_rtlScrollBehavior.n && normalizeRTL)\r\n elementScrollCoordinates.x *= -1;\r\n if (_rtlScrollBehavior.i && normalizeRTL)\r\n elementScrollCoordinates.x = MATH.round(viewportOffset[_strLeft] - elementOffset[_strLeft] + (_scrollHorizontalInfo._maxScroll - viewportScroll.l));\r\n }\r\n\r\n //measuring is required\r\n if (settingsBlock.x != strBegin || settingsBlock.y != strBegin || settingsScroll.x == strIfNeeded || settingsScroll.y == strIfNeeded || _isRTL) {\r\n var measuringElm = finalElement[0];\r\n var rawElementSize = _supportTransform ? measuringElm[LEXICON.bCR]() : {\r\n width: measuringElm[LEXICON.oW],\r\n height: measuringElm[LEXICON.oH]\r\n };\r\n var elementSize = {\r\n w: rawElementSize[_strWidth] + settingsMargin[3] + settingsMargin[1],\r\n h: rawElementSize[_strHeight] + settingsMargin[0] + settingsMargin[2]\r\n };\r\n var finalizeBlock = function (isX) {\r\n var vars = getScrollbarVars(isX);\r\n var wh = vars._w_h;\r\n var lt = vars._left_top;\r\n var xy = vars._x_y;\r\n var blockIsEnd = settingsBlock[xy] == (isX ? _isRTL ? strBegin : strEnd : strEnd);\r\n var blockIsCenter = settingsBlock[xy] == strCenter;\r\n var blockIsNearest = settingsBlock[xy] == strNearest;\r\n var scrollNever = settingsScroll[xy] == strNever;\r\n var scrollIfNeeded = settingsScroll[xy] == strIfNeeded;\r\n var vpSize = _viewportSize[wh];\r\n var vpOffset = viewportOffset[lt];\r\n var elSize = elementSize[wh];\r\n var elOffset = elementOffset[lt];\r\n var divide = blockIsCenter ? 2 : 1;\r\n var elementCenterOffset = elOffset + (elSize / 2);\r\n var viewportCenterOffset = vpOffset + (vpSize / 2);\r\n var isInView =\r\n elSize <= vpSize\r\n && elOffset >= vpOffset\r\n && elOffset + elSize <= vpOffset + vpSize;\r\n\r\n if (scrollNever)\r\n doNotScroll[xy] = true;\r\n else if (!doNotScroll[xy]) {\r\n if (blockIsNearest || scrollIfNeeded) {\r\n doNotScroll[xy] = scrollIfNeeded ? isInView : false;\r\n blockIsEnd = elSize < vpSize ? elementCenterOffset > viewportCenterOffset : elementCenterOffset < viewportCenterOffset;\r\n }\r\n elementScrollCoordinates[xy] -= blockIsEnd || blockIsCenter ? ((vpSize / divide) - (elSize / divide)) * (isX && _isRTL && normalizeRTL ? -1 : 1) : 0;\r\n }\r\n };\r\n finalizeBlock(true);\r\n finalizeBlock(false);\r\n }\r\n\r\n if (doNotScroll.y)\r\n delete elementScrollCoordinates.y;\r\n if (doNotScroll.x)\r\n delete elementScrollCoordinates.x;\r\n\r\n coordinates = elementScrollCoordinates;\r\n }\r\n }\r\n\r\n finalScroll[_strScrollLeft] = getFinalScroll(true, getRawScroll(true, coordinates));\r\n finalScroll[_strScrollTop] = getFinalScroll(false, getRawScroll(false, coordinates));\r\n doScrollLeft = finalScroll[_strScrollLeft] !== undefined;\r\n doScrollTop = finalScroll[_strScrollTop] !== undefined;\r\n\r\n if ((doScrollLeft || doScrollTop) && (duration > 0 || durationIsObject)) {\r\n if (durationIsObject) {\r\n duration.complete = proxyCompleteCallback;\r\n _viewportElement.animate(finalScroll, duration);\r\n }\r\n else {\r\n animationOptions = {\r\n duration: duration,\r\n complete: proxyCompleteCallback\r\n };\r\n if (COMPATIBILITY.isA(easing) || FRAMEWORK.isPlainObject(easing)) {\r\n specialEasing[_strScrollLeft] = easing[0] || easing.x;\r\n specialEasing[_strScrollTop] = easing[1] || easing.y;\r\n animationOptions.specialEasing = specialEasing;\r\n }\r\n else {\r\n animationOptions.easing = easing;\r\n }\r\n _viewportElement.animate(finalScroll, animationOptions);\r\n }\r\n }\r\n else {\r\n if (doScrollLeft)\r\n _viewportElement[_strScrollLeft](finalScroll[_strScrollLeft]);\r\n if (doScrollTop)\r\n _viewportElement[_strScrollTop](finalScroll[_strScrollTop]);\r\n updateScrollbarInfos();\r\n }\r\n };\r\n\r\n /**\r\n * Stops all scroll animations.\r\n * @returns {*} The current OverlayScrollbars instance (for chaining).\r\n */\r\n _base.scrollStop = function (param1, param2, param3) {\r\n _viewportElement.stop(param1, param2, param3);\r\n return _base;\r\n };\r\n\r\n /**\r\n * Returns all relevant elements.\r\n * @param elementName The name of the element which shall be returned.\r\n * @returns {{target: *, host: *, padding: *, viewport: *, content: *, scrollbarHorizontal: {scrollbar: *, track: *, handle: *}, scrollbarVertical: {scrollbar: *, track: *, handle: *}, scrollbarCorner: *} | *}\r\n */\r\n _base.getElements = function (elementName) {\r\n var obj = {\r\n target: _targetElementNative,\r\n host: _hostElementNative,\r\n padding: _paddingElementNative,\r\n viewport: _viewportElementNative,\r\n content: _contentElementNative,\r\n scrollbarHorizontal: {\r\n scrollbar: _scrollbarHorizontalElement[0],\r\n track: _scrollbarHorizontalTrackElement[0],\r\n handle: _scrollbarHorizontalHandleElement[0]\r\n },\r\n scrollbarVertical: {\r\n scrollbar: _scrollbarVerticalElement[0],\r\n track: _scrollbarVerticalTrackElement[0],\r\n handle: _scrollbarVerticalHandleElement[0]\r\n },\r\n scrollbarCorner: _scrollbarCornerElement[0]\r\n };\r\n return type(elementName) == TYPES.s ? getObjectPropVal(obj, elementName) : obj;\r\n };\r\n\r\n /**\r\n * Returns a object which describes the current state of this instance.\r\n * @param stateProperty A specific property from the state object which shall be returned.\r\n * @returns {{widthAuto, heightAuto, overflowAmount, hideOverflow, hasOverflow, contentScrollSize, viewportSize, hostSize, autoUpdate} | *}\r\n */\r\n _base.getState = function (stateProperty) {\r\n function prepare(obj) {\r\n if (!FRAMEWORK.isPlainObject(obj))\r\n return obj;\r\n var extended = extendDeep({}, obj);\r\n var changePropertyName = function (from, to) {\r\n if (extended[LEXICON.hOP](from)) {\r\n extended[to] = extended[from];\r\n delete extended[from];\r\n }\r\n };\r\n changePropertyName('w', _strWidth); //change w to width\r\n changePropertyName('h', _strHeight); //change h to height\r\n delete extended.c; //delete c (the 'changed' prop)\r\n return extended;\r\n };\r\n var obj = {\r\n destroyed: !!prepare(_destroyed),\r\n sleeping: !!prepare(_sleeping),\r\n autoUpdate: prepare(!_mutationObserversConnected),\r\n widthAuto: prepare(_widthAutoCache),\r\n heightAuto: prepare(_heightAutoCache),\r\n padding: prepare(_cssPaddingCache),\r\n overflowAmount: prepare(_overflowAmountCache),\r\n hideOverflow: prepare(_hideOverflowCache),\r\n hasOverflow: prepare(_hasOverflowCache),\r\n contentScrollSize: prepare(_contentScrollSizeCache),\r\n viewportSize: prepare(_viewportSize),\r\n hostSize: prepare(_hostSizeCache),\r\n documentMixed: prepare(_documentMixed)\r\n };\r\n return type(stateProperty) == TYPES.s ? getObjectPropVal(obj, stateProperty) : obj;\r\n };\r\n\r\n /**\r\n * Gets all or specific extension instance.\r\n * @param extName The name of the extension from which the instance shall be got.\r\n * @returns {{}} The instance of the extension with the given name or undefined if the instance couldn't be found.\r\n */\r\n _base.ext = function (extName) {\r\n var result;\r\n var privateMethods = _extensionsPrivateMethods.split(' ');\r\n var i = 0;\r\n if (type(extName) == TYPES.s) {\r\n if (_extensions[LEXICON.hOP](extName)) {\r\n result = extendDeep({}, _extensions[extName]);\r\n for (; i < privateMethods.length; i++)\r\n delete result[privateMethods[i]];\r\n }\r\n }\r\n else {\r\n result = {};\r\n for (i in _extensions)\r\n result[i] = extendDeep({}, _base.ext(i));\r\n }\r\n return result;\r\n };\r\n\r\n /**\r\n * Adds a extension to this instance.\r\n * @param extName The name of the extension which shall be added.\r\n * @param extensionOptions The extension options which shall be used.\r\n * @returns {{}} The instance of the added extension or undefined if the extension couldn't be added properly.\r\n */\r\n _base.addExt = function (extName, extensionOptions) {\r\n var registeredExtensionObj = _plugin.extension(extName);\r\n var instance;\r\n var instanceAdded;\r\n var instanceContract;\r\n var contractResult;\r\n var contractFulfilled = true;\r\n if (registeredExtensionObj) {\r\n if (!_extensions[LEXICON.hOP](extName)) {\r\n instance = registeredExtensionObj.extensionFactory.call(_base,\r\n extendDeep({}, registeredExtensionObj.defaultOptions),\r\n FRAMEWORK,\r\n COMPATIBILITY);\r\n\r\n if (instance) {\r\n instanceContract = instance.contract;\r\n if (type(instanceContract) == TYPES.f) {\r\n contractResult = instanceContract(window);\r\n contractFulfilled = type(contractResult) == TYPES.b ? contractResult : contractFulfilled;\r\n }\r\n if (contractFulfilled) {\r\n _extensions[extName] = instance;\r\n instanceAdded = instance.added;\r\n if (type(instanceAdded) == TYPES.f)\r\n instanceAdded(extensionOptions);\r\n\r\n return _base.ext(extName);\r\n }\r\n }\r\n }\r\n else\r\n return _base.ext(extName);\r\n }\r\n else\r\n console.warn(\"A extension with the name \\\"\" + extName + \"\\\" isn't registered.\");\r\n };\r\n\r\n /**\r\n * Removes a extension from this instance.\r\n * @param extName The name of the extension which shall be removed.\r\n * @returns {boolean} True if the extension was removed, false otherwise e.g. if the extension wasn't added before.\r\n */\r\n _base.removeExt = function (extName) {\r\n var instance = _extensions[extName];\r\n var instanceRemoved;\r\n if (instance) {\r\n delete _extensions[extName];\r\n\r\n instanceRemoved = instance.removed;\r\n if (type(instanceRemoved) == TYPES.f)\r\n instanceRemoved();\r\n\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n /**\r\n * Constructs the plugin.\r\n * @param targetElement The element to which the plugin shall be applied.\r\n * @param options The initial options of the plugin.\r\n * @param extensions The extension(s) which shall be added right after the initialization.\r\n * @returns {boolean} True if the plugin was successfully initialized, false otherwise.\r\n */\r\n function construct(targetElement, options, extensions) {\r\n _defaultOptions = globals.defaultOptions;\r\n _nativeScrollbarStyling = globals.nativeScrollbarStyling;\r\n _nativeScrollbarSize = extendDeep({}, globals.nativeScrollbarSize);\r\n _nativeScrollbarIsOverlaid = extendDeep({}, globals.nativeScrollbarIsOverlaid);\r\n _overlayScrollbarDummySize = extendDeep({}, globals.overlayScrollbarDummySize);\r\n _rtlScrollBehavior = extendDeep({}, globals.rtlScrollBehavior);\r\n\r\n //parse & set options but don't update\r\n setOptions(extendDeep({}, _defaultOptions, options));\r\n\r\n _cssCalc = globals.cssCalc;\r\n _msieVersion = globals.msie;\r\n _autoUpdateRecommended = globals.autoUpdateRecommended;\r\n _supportTransition = globals.supportTransition;\r\n _supportTransform = globals.supportTransform;\r\n _supportPassiveEvents = globals.supportPassiveEvents;\r\n _supportResizeObserver = globals.supportResizeObserver;\r\n _supportMutationObserver = globals.supportMutationObserver;\r\n _restrictedMeasuring = globals.restrictedMeasuring;\r\n _documentElement = FRAMEWORK(targetElement.ownerDocument);\r\n _documentElementNative = _documentElement[0];\r\n _windowElement = FRAMEWORK(_documentElementNative.defaultView || _documentElementNative.parentWindow);\r\n _windowElementNative = _windowElement[0];\r\n _htmlElement = findFirst(_documentElement, 'html');\r\n _bodyElement = findFirst(_htmlElement, 'body');\r\n _targetElement = FRAMEWORK(targetElement);\r\n _targetElementNative = _targetElement[0];\r\n _isTextarea = _targetElement.is('textarea');\r\n _isBody = _targetElement.is('body');\r\n _documentMixed = _documentElementNative !== document;\r\n\r\n /* On a div Element The if checks only whether:\r\n * - the targetElement has the class \"os-host\"\r\n * - the targetElement has a a child with the class \"os-padding\"\r\n * \r\n * If that's the case, its assumed the DOM has already the following structure:\r\n * (The \".os-host\" element is the targetElement)\r\n *\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *\r\n * =====================================================================================\r\n * \r\n * On a Textarea Element The if checks only whether:\r\n * - the targetElement has the class \"os-textarea\" \r\n * - the targetElement is inside a element with the class \"os-content\" \r\n * \r\n * If that's the case, its assumed the DOM has already the following structure:\r\n * (The \".os-textarea\" (textarea) element is the targetElement)\r\n *\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n * \r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n */\r\n _domExists = _isTextarea\r\n ? _targetElement.hasClass(_classNameTextareaElement) && _targetElement.parent().hasClass(_classNameContentElement)\r\n : _targetElement.hasClass(_classNameHostElement) && _targetElement.children(_strDot + _classNamePaddingElement)[LEXICON.l];\r\n\r\n var initBodyScroll;\r\n var bodyMouseTouchDownListener;\r\n\r\n //check if the plugin hasn't to be initialized\r\n if (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y && !_currentPreparedOptions.nativeScrollbarsOverlaid.initialize) {\r\n dispatchCallback('onInitializationWithdrawn');\r\n if (_domExists) {\r\n setupStructureDOM(true);\r\n setupScrollbarsDOM(true);\r\n setupScrollbarCornerDOM(true);\r\n }\r\n\r\n _destroyed = true;\r\n _sleeping = true;\r\n\r\n return _base;\r\n }\r\n\r\n if (_isBody) {\r\n initBodyScroll = {};\r\n initBodyScroll.l = MATH.max(_targetElement[_strScrollLeft](), _htmlElement[_strScrollLeft](), _windowElement[_strScrollLeft]());\r\n initBodyScroll.t = MATH.max(_targetElement[_strScrollTop](), _htmlElement[_strScrollTop](), _windowElement[_strScrollTop]());\r\n\r\n bodyMouseTouchDownListener = function () {\r\n _viewportElement.removeAttr(LEXICON.ti);\r\n setupResponsiveEventListener(_viewportElement, _strMouseTouchDownEvent, bodyMouseTouchDownListener, true, true);\r\n }\r\n }\r\n\r\n //build OverlayScrollbars DOM\r\n setupStructureDOM();\r\n setupScrollbarsDOM();\r\n setupScrollbarCornerDOM();\r\n\r\n //create OverlayScrollbars events\r\n setupStructureEvents();\r\n setupScrollbarEvents(true);\r\n setupScrollbarEvents(false);\r\n setupScrollbarCornerEvents();\r\n\r\n //create mutation observers\r\n createMutationObservers();\r\n\r\n //build resize observer for the host element\r\n setupResizeObserver(_sizeObserverElement, hostOnResized);\r\n\r\n if (_isBody) {\r\n //apply the body scroll to handle it right in the update method\r\n _viewportElement[_strScrollLeft](initBodyScroll.l)[_strScrollTop](initBodyScroll.t);\r\n\r\n //set the focus on the viewport element so you dont have to click on the page to use keyboard keys (up / down / space) for scrolling\r\n if (document.activeElement == targetElement && _viewportElementNative.focus) {\r\n //set a tabindex to make the viewportElement focusable\r\n _viewportElement.attr(LEXICON.ti, '-1');\r\n _viewportElementNative.focus();\r\n\r\n /* the tabindex has to be removed due to;\r\n * If you set the tabindex attribute on an
, then its child content cannot be scrolled with the arrow keys unless you set tabindex on the content, too\r\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex\r\n */\r\n setupResponsiveEventListener(_viewportElement, _strMouseTouchDownEvent, bodyMouseTouchDownListener, false, true);\r\n }\r\n }\r\n\r\n //update for the first time & initialize cache\r\n _base.update(_strAuto);\r\n\r\n //the plugin is initialized now!\r\n _initialized = true;\r\n dispatchCallback('onInitialized');\r\n\r\n //call all callbacks which would fire before the initialized was complete\r\n each(_callbacksInitQeueue, function (index, value) { dispatchCallback(value.n, value.a); });\r\n _callbacksInitQeueue = [];\r\n\r\n //add extensions\r\n if (type(extensions) == TYPES.s)\r\n extensions = [extensions];\r\n if (COMPATIBILITY.isA(extensions))\r\n each(extensions, function (index, value) { _base.addExt(value); });\r\n else if (FRAMEWORK.isPlainObject(extensions))\r\n each(extensions, function (key, value) { _base.addExt(key, value); });\r\n\r\n //add the transition class for transitions AFTER the first update & AFTER the applied extensions (for preventing unwanted transitions)\r\n setTimeout(function () {\r\n if (_supportTransition && !_destroyed)\r\n addClass(_hostElement, _classNameHostTransition);\r\n }, 333);\r\n\r\n return _base;\r\n }\r\n\r\n if (_plugin.valid(construct(pluginTargetElement, options, extensions))) {\r\n INSTANCES(pluginTargetElement, _base);\r\n }\r\n\r\n return _base;\r\n }\r\n\r\n /**\r\n * Initializes a new OverlayScrollbarsInstance object or changes options if already initialized or returns the current instance.\r\n * @param pluginTargetElements The elements to which the Plugin shall be initialized.\r\n * @param options The custom options with which the plugin shall be initialized.\r\n * @param extensions The extension(s) which shall be added right after initialization.\r\n * @returns {*}\r\n */\r\n _plugin = window[PLUGINNAME] = function (pluginTargetElements, options, extensions) {\r\n if (arguments[LEXICON.l] === 0)\r\n return this;\r\n\r\n var arr = [];\r\n var optsIsPlainObj = FRAMEWORK.isPlainObject(options);\r\n var inst;\r\n var result;\r\n\r\n //pluginTargetElements is null or undefined\r\n if (!pluginTargetElements)\r\n return optsIsPlainObj || !options ? result : arr;\r\n\r\n /*\r\n pluginTargetElements will be converted to:\r\n 1. A jQueryElement Array\r\n 2. A HTMLElement Array\r\n 3. A Array with a single HTML Element\r\n so pluginTargetElements is always a array.\r\n */\r\n pluginTargetElements = pluginTargetElements[LEXICON.l] != undefined ? pluginTargetElements : [pluginTargetElements[0] || pluginTargetElements];\r\n initOverlayScrollbarsStatics();\r\n\r\n if (pluginTargetElements[LEXICON.l] > 0) {\r\n if (optsIsPlainObj) {\r\n FRAMEWORK.each(pluginTargetElements, function (i, v) {\r\n inst = v;\r\n if (inst !== undefined)\r\n arr.push(OverlayScrollbarsInstance(inst, options, extensions, _pluginsGlobals, _pluginsAutoUpdateLoop));\r\n });\r\n }\r\n else {\r\n FRAMEWORK.each(pluginTargetElements, function (i, v) {\r\n inst = INSTANCES(v);\r\n if ((options === '!' && _plugin.valid(inst)) || (COMPATIBILITY.type(options) == TYPES.f && options(v, inst)))\r\n arr.push(inst);\r\n else if (options === undefined)\r\n arr.push(inst);\r\n });\r\n }\r\n result = arr[LEXICON.l] === 1 ? arr[0] : arr;\r\n }\r\n return result;\r\n };\r\n\r\n /**\r\n * Returns a object which contains global information about the plugin and each instance of it.\r\n * The returned object is just a copy, that means that changes to the returned object won't have any effect to the original object.\r\n */\r\n _plugin.globals = function () {\r\n initOverlayScrollbarsStatics();\r\n var globals = FRAMEWORK.extend(true, {}, _pluginsGlobals);\r\n delete globals['msie'];\r\n return globals;\r\n };\r\n\r\n /**\r\n * Gets or Sets the default options for each new plugin initialization.\r\n * @param newDefaultOptions The object with which the default options shall be extended.\r\n */\r\n _plugin.defaultOptions = function (newDefaultOptions) {\r\n initOverlayScrollbarsStatics();\r\n var currDefaultOptions = _pluginsGlobals.defaultOptions;\r\n if (newDefaultOptions === undefined)\r\n return FRAMEWORK.extend(true, {}, currDefaultOptions);\r\n\r\n //set the new default options\r\n _pluginsGlobals.defaultOptions = FRAMEWORK.extend(true, {}, currDefaultOptions, _pluginsOptions._validate(newDefaultOptions, _pluginsOptions._template, true, currDefaultOptions)._default);\r\n };\r\n\r\n /**\r\n * Checks whether the passed instance is a non-destroyed OverlayScrollbars instance.\r\n * @param osInstance The potential OverlayScrollbars instance which shall be checked.\r\n * @returns {boolean} True if the passed value is a non-destroyed OverlayScrollbars instance, false otherwise.\r\n */\r\n _plugin.valid = function (osInstance) {\r\n return osInstance instanceof _plugin && !osInstance.getState().destroyed;\r\n };\r\n\r\n /**\r\n * Registers, Unregisters or returns a extension.\r\n * Register: Pass the name and the extension. (defaultOptions is optional)\r\n * Unregister: Pass the name and anything except a function as extension parameter.\r\n * Get extension: Pass the name of the extension which shall be got.\r\n * Get all extensions: Pass no arguments.\r\n * @param extensionName The name of the extension which shall be registered, unregistered or returned.\r\n * @param extension A function which generates the instance of the extension or anything other to remove a already registered extension.\r\n * @param defaultOptions The default options which shall be used for the registered extension.\r\n */\r\n _plugin.extension = function (extensionName, extension, defaultOptions) {\r\n var extNameTypeString = COMPATIBILITY.type(extensionName) == TYPES.s;\r\n var argLen = arguments[LEXICON.l];\r\n var i = 0;\r\n if (argLen < 1 || !extNameTypeString) {\r\n //return a copy of all extension objects\r\n return FRAMEWORK.extend(true, { length: _pluginsExtensions[LEXICON.l] }, _pluginsExtensions);\r\n }\r\n else if (extNameTypeString) {\r\n if (COMPATIBILITY.type(extension) == TYPES.f) {\r\n //register extension\r\n _pluginsExtensions.push({\r\n name: extensionName,\r\n extensionFactory: extension,\r\n defaultOptions: defaultOptions\r\n });\r\n }\r\n else {\r\n for (; i < _pluginsExtensions[LEXICON.l]; i++) {\r\n if (_pluginsExtensions[i].name === extensionName) {\r\n if (argLen > 1)\r\n _pluginsExtensions.splice(i, 1); //remove extension\r\n else\r\n return FRAMEWORK.extend(true, {}, _pluginsExtensions[i]); //return extension with the given name\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n return _plugin;\r\n })();\r\n\r\n if (JQUERY && JQUERY.fn) {\r\n /**\r\n * The jQuery initialization interface.\r\n * @param options The initial options for the construction of the plugin. To initialize the plugin, this option has to be a object! If it isn't a object, the instance(s) are returned and the plugin wont be initialized.\r\n * @param extensions The extension(s) which shall be added right after initialization.\r\n * @returns {*} After initialization it returns the jQuery element array, else it returns the instance(s) of the elements which are selected.\r\n */\r\n JQUERY.fn.overlayScrollbars = function (options, extensions) {\r\n var _elements = this;\r\n if (JQUERY.isPlainObject(options)) {\r\n JQUERY.each(_elements, function () { PLUGIN(this, options, extensions); });\r\n return _elements;\r\n }\r\n else\r\n return PLUGIN(_elements, options);\r\n };\r\n }\r\n return PLUGIN;\r\n }\r\n));","/*\n * fitty v2.3.3 - Snugly resizes text to fit its parent container\n * Copyright (c) 2020 Rik Schennink (https://pqina.nl/)\n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = function (w) {\n\n // no window, early exit\n if (!w) return;\n\n // node list to array helper method\n var toArray = function toArray(nl) {\n return [].slice.call(nl);\n };\n\n // states\n var DrawState = {\n IDLE: 0,\n DIRTY_CONTENT: 1,\n DIRTY_LAYOUT: 2,\n DIRTY: 3\n };\n\n // all active fitty elements\n var fitties = [];\n\n // group all redraw calls till next frame, we cancel each frame request when a new one comes in. If no support for request animation frame, this is an empty function and supports for fitty stops.\n var redrawFrame = null;\n var requestRedraw = 'requestAnimationFrame' in w ? function () {\n w.cancelAnimationFrame(redrawFrame);\n redrawFrame = w.requestAnimationFrame(function () {\n return redraw(fitties.filter(function (f) {\n return f.dirty && f.active;\n }));\n });\n } : function () {};\n\n // sets all fitties to dirty so they are redrawn on the next redraw loop, then calls redraw\n var redrawAll = function redrawAll(type) {\n return function () {\n fitties.forEach(function (f) {\n return f.dirty = type;\n });\n requestRedraw();\n };\n };\n\n // redraws fitties so they nicely fit their parent container\n var redraw = function redraw(fitties) {\n\n // getting info from the DOM at this point should not trigger a reflow, let's gather as much intel as possible before triggering a reflow\n\n // check if styles of all fitties have been computed\n fitties.filter(function (f) {\n return !f.styleComputed;\n }).forEach(function (f) {\n f.styleComputed = computeStyle(f);\n });\n\n // restyle elements that require pre-styling, this triggers a reflow, please try to prevent by adding CSS rules (see docs)\n fitties.filter(shouldPreStyle).forEach(applyStyle);\n\n // we now determine which fitties should be redrawn\n var fittiesToRedraw = fitties.filter(shouldRedraw);\n\n // we calculate final styles for these fitties\n fittiesToRedraw.forEach(calculateStyles);\n\n // now we apply the calculated styles from our previous loop\n fittiesToRedraw.forEach(function (f) {\n applyStyle(f);\n markAsClean(f);\n });\n\n // now we dispatch events for all restyled fitties\n fittiesToRedraw.forEach(dispatchFitEvent);\n };\n\n var markAsClean = function markAsClean(f) {\n return f.dirty = DrawState.IDLE;\n };\n\n var calculateStyles = function calculateStyles(f) {\n\n // get available width from parent node\n f.availableWidth = f.element.parentNode.clientWidth;\n\n // the space our target element uses\n f.currentWidth = f.element.scrollWidth;\n\n // remember current font size\n f.previousFontSize = f.currentFontSize;\n\n // let's calculate the new font size\n f.currentFontSize = Math.min(Math.max(f.minSize, f.availableWidth / f.currentWidth * f.previousFontSize), f.maxSize);\n\n // if allows wrapping, only wrap when at minimum font size (otherwise would break container)\n f.whiteSpace = f.multiLine && f.currentFontSize === f.minSize ? 'normal' : 'nowrap';\n };\n\n // should always redraw if is not dirty layout, if is dirty layout, only redraw if size has changed\n var shouldRedraw = function shouldRedraw(f) {\n return f.dirty !== DrawState.DIRTY_LAYOUT || f.dirty === DrawState.DIRTY_LAYOUT && f.element.parentNode.clientWidth !== f.availableWidth;\n };\n\n // every fitty element is tested for invalid styles\n var computeStyle = function computeStyle(f) {\n\n // get style properties\n var style = w.getComputedStyle(f.element, null);\n\n // get current font size in pixels (if we already calculated it, use the calculated version)\n f.currentFontSize = parseFloat(style.getPropertyValue('font-size'));\n\n // get display type and wrap mode\n f.display = style.getPropertyValue('display');\n f.whiteSpace = style.getPropertyValue('white-space');\n };\n\n // determines if this fitty requires initial styling, can be prevented by applying correct styles through CSS\n var shouldPreStyle = function shouldPreStyle(f) {\n\n var preStyle = false;\n\n // if we already tested for prestyling we don't have to do it again\n if (f.preStyleTestCompleted) return false;\n\n // should have an inline style, if not, apply\n if (!/inline-/.test(f.display)) {\n preStyle = true;\n f.display = 'inline-block';\n }\n\n // to correctly calculate dimensions the element should have whiteSpace set to nowrap\n if (f.whiteSpace !== 'nowrap') {\n preStyle = true;\n f.whiteSpace = 'nowrap';\n }\n\n // we don't have to do this twice\n f.preStyleTestCompleted = true;\n\n return preStyle;\n };\n\n // apply styles to single fitty\n var applyStyle = function applyStyle(f) {\n f.element.style.whiteSpace = f.whiteSpace;\n f.element.style.display = f.display;\n f.element.style.fontSize = f.currentFontSize + 'px';\n };\n\n // dispatch a fit event on a fitty\n var dispatchFitEvent = function dispatchFitEvent(f) {\n f.element.dispatchEvent(new CustomEvent('fit', {\n detail: {\n oldValue: f.previousFontSize,\n newValue: f.currentFontSize,\n scaleFactor: f.currentFontSize / f.previousFontSize\n }\n }));\n };\n\n // fit method, marks the fitty as dirty and requests a redraw (this will also redraw any other fitty marked as dirty)\n var fit = function fit(f, type) {\n return function () {\n f.dirty = type;\n if (!f.active) return;\n requestRedraw();\n };\n };\n\n var init = function init(f) {\n\n // save some of the original CSS properties before we change them\n f.originalStyle = {\n whiteSpace: f.element.style.whiteSpace,\n display: f.element.style.display,\n fontSize: f.element.style.fontSize\n };\n\n // should we observe DOM mutations\n observeMutations(f);\n\n // this is a new fitty so we need to validate if it's styles are in order\n f.newbie = true;\n\n // because it's a new fitty it should also be dirty, we want it to redraw on the first loop\n f.dirty = true;\n\n // we want to be able to update this fitty\n fitties.push(f);\n };\n\n var destroy = function destroy(f) {\n return function () {\n\n // remove from fitties array\n fitties = fitties.filter(function (_) {\n return _.element !== f.element;\n });\n\n // stop observing DOM\n if (f.observeMutations) f.observer.disconnect();\n\n // reset the CSS properties we changes\n f.element.style.whiteSpace = f.originalStyle.whiteSpace;\n f.element.style.display = f.originalStyle.display;\n f.element.style.fontSize = f.originalStyle.fontSize;\n };\n };\n\n // add a new fitty, does not redraw said fitty\n var subscribe = function subscribe(f) {\n return function () {\n if (f.active) return;\n f.active = true;\n requestRedraw();\n };\n };\n\n // remove an existing fitty\n var unsubscribe = function unsubscribe(f) {\n return function () {\n return f.active = false;\n };\n };\n\n var observeMutations = function observeMutations(f) {\n\n // no observing?\n if (!f.observeMutations) return;\n\n // start observing mutations\n f.observer = new MutationObserver(fit(f, DrawState.DIRTY_CONTENT));\n\n // start observing\n f.observer.observe(f.element, f.observeMutations);\n };\n\n // default mutation observer settings\n var mutationObserverDefaultSetting = {\n subtree: true,\n childList: true,\n characterData: true\n };\n\n // default fitty options\n var defaultOptions = {\n minSize: 16,\n maxSize: 512,\n multiLine: true,\n observeMutations: 'MutationObserver' in w ? mutationObserverDefaultSetting : false\n };\n\n // array of elements in, fitty instances out\n function fittyCreate(elements, options) {\n\n // set options object\n var fittyOptions = _extends({}, defaultOptions, options);\n\n // create fitties\n var publicFitties = elements.map(function (element) {\n\n // create fitty instance\n var f = _extends({}, fittyOptions, {\n\n // internal options for this fitty\n element: element,\n active: true\n });\n\n // initialise this fitty\n init(f);\n\n // expose API\n return {\n element: element,\n fit: fit(f, DrawState.DIRTY),\n unfreeze: subscribe(f),\n freeze: unsubscribe(f),\n unsubscribe: destroy(f)\n };\n });\n\n // call redraw on newly initiated fitties\n requestRedraw();\n\n // expose fitties\n return publicFitties;\n }\n\n // fitty creation function\n function fitty(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n // if target is a string\n return typeof target === 'string' ?\n\n // treat it as a querySelector\n fittyCreate(toArray(document.querySelectorAll(target)), options) :\n\n // create single fitty\n fittyCreate([target], options)[0];\n }\n\n // handles viewport changes, redraws all fitties, but only does so after a timeout\n var resizeDebounce = null;\n var onWindowResized = function onWindowResized() {\n w.clearTimeout(resizeDebounce);\n resizeDebounce = w.setTimeout(redrawAll(DrawState.DIRTY_LAYOUT), fitty.observeWindowDelay);\n };\n\n // define observe window property, so when we set it to true or false events are automatically added and removed\n var events = ['resize', 'orientationchange'];\n Object.defineProperty(fitty, 'observeWindow', {\n set: function set(enabled) {\n var method = (enabled ? 'add' : 'remove') + 'EventListener';\n events.forEach(function (e) {\n w[method](e, onWindowResized);\n });\n }\n });\n\n // fitty global properties (by setting observeWindow to true the events above get added)\n fitty.observeWindow = true;\n fitty.observeWindowDelay = 100;\n\n // public fit all method, will force redraw no matter what\n fitty.fitAll = redrawAll(DrawState.DIRTY);\n\n // export our fitty function, we don't want to keep it to our selves\n return fitty;\n}(typeof window === 'undefined' ? null : window);","/**!\n* tippy.js v4.3.5\n* (c) 2017-2019 atomiks\n* MIT License\n*/\nimport Popper from 'popper.js';\n\nvar css = \".tippy-iOS{cursor:pointer!important;-webkit-tap-highlight-color:transparent}.tippy-popper{transition-timing-function:cubic-bezier(.165,.84,.44,1);max-width:calc(100% - 8px);pointer-events:none;outline:0}.tippy-popper[x-placement^=top] .tippy-backdrop{border-radius:40% 40% 0 0}.tippy-popper[x-placement^=top] .tippy-roundarrow{bottom:-7px;bottom:-6.5px;-webkit-transform-origin:50% 0;transform-origin:50% 0;margin:0 3px}.tippy-popper[x-placement^=top] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.tippy-popper[x-placement^=top] .tippy-arrow{border-top:8px solid #333;border-right:8px solid transparent;border-left:8px solid transparent;bottom:-7px;margin:0 3px;-webkit-transform-origin:50% 0;transform-origin:50% 0}.tippy-popper[x-placement^=top] .tippy-backdrop{-webkit-transform-origin:0 25%;transform-origin:0 25%}.tippy-popper[x-placement^=top] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(1) translate(-50%,-55%);transform:scale(1) translate(-50%,-55%)}.tippy-popper[x-placement^=top] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(.2) translate(-50%,-45%);transform:scale(.2) translate(-50%,-45%);opacity:0}.tippy-popper[x-placement^=top] [data-animation=shift-toward][data-state=visible]{-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}.tippy-popper[x-placement^=top] [data-animation=perspective]{-webkit-transform-origin:bottom;transform-origin:bottom}.tippy-popper[x-placement^=top] [data-animation=perspective][data-state=visible]{-webkit-transform:perspective(700px) translateY(-10px);transform:perspective(700px) translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:perspective(700px) rotateX(60deg);transform:perspective(700px) rotateX(60deg)}.tippy-popper[x-placement^=top] [data-animation=fade][data-state=visible]{-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift-away][data-state=visible]{-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift-away][data-state=hidden]{opacity:0}.tippy-popper[x-placement^=top] [data-animation=scale]{-webkit-transform-origin:bottom;transform-origin:bottom}.tippy-popper[x-placement^=top] [data-animation=scale][data-state=visible]{-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateY(-10px) scale(.5);transform:translateY(-10px) scale(.5)}.tippy-popper[x-placement^=bottom] .tippy-backdrop{border-radius:0 0 30% 30%}.tippy-popper[x-placement^=bottom] .tippy-roundarrow{top:-7px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;margin:0 3px}.tippy-popper[x-placement^=bottom] .tippy-roundarrow svg{position:absolute;left:0}.tippy-popper[x-placement^=bottom] .tippy-arrow{border-bottom:8px solid #333;border-right:8px solid transparent;border-left:8px solid transparent;top:-7px;margin:0 3px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.tippy-popper[x-placement^=bottom] .tippy-backdrop{-webkit-transform-origin:0 -50%;transform-origin:0 -50%}.tippy-popper[x-placement^=bottom] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(1) translate(-50%,-45%);transform:scale(1) translate(-50%,-45%)}.tippy-popper[x-placement^=bottom] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(.2) translate(-50%);transform:scale(.2) translate(-50%);opacity:0}.tippy-popper[x-placement^=bottom] [data-animation=shift-toward][data-state=visible]{-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}.tippy-popper[x-placement^=bottom] [data-animation=perspective]{-webkit-transform-origin:top;transform-origin:top}.tippy-popper[x-placement^=bottom] [data-animation=perspective][data-state=visible]{-webkit-transform:perspective(700px) translateY(10px);transform:perspective(700px) translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:perspective(700px) rotateX(-60deg);transform:perspective(700px) rotateX(-60deg)}.tippy-popper[x-placement^=bottom] [data-animation=fade][data-state=visible]{-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift-away][data-state=visible]{-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift-away][data-state=hidden]{opacity:0}.tippy-popper[x-placement^=bottom] [data-animation=scale]{-webkit-transform-origin:top;transform-origin:top}.tippy-popper[x-placement^=bottom] [data-animation=scale][data-state=visible]{-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateY(10px) scale(.5);transform:translateY(10px) scale(.5)}.tippy-popper[x-placement^=left] .tippy-backdrop{border-radius:50% 0 0 50%}.tippy-popper[x-placement^=left] .tippy-roundarrow{right:-12px;-webkit-transform-origin:33.33333333% 50%;transform-origin:33.33333333% 50%;margin:3px 0}.tippy-popper[x-placement^=left] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.tippy-popper[x-placement^=left] .tippy-arrow{border-left:8px solid #333;border-top:8px solid transparent;border-bottom:8px solid transparent;right:-7px;margin:3px 0;-webkit-transform-origin:0 50%;transform-origin:0 50%}.tippy-popper[x-placement^=left] .tippy-backdrop{-webkit-transform-origin:50% 0;transform-origin:50% 0}.tippy-popper[x-placement^=left] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%)}.tippy-popper[x-placement^=left] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(.2) translate(-75%,-50%);transform:scale(.2) translate(-75%,-50%);opacity:0}.tippy-popper[x-placement^=left] [data-animation=shift-toward][data-state=visible]{-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateX(-20px);transform:translateX(-20px)}.tippy-popper[x-placement^=left] [data-animation=perspective]{-webkit-transform-origin:right;transform-origin:right}.tippy-popper[x-placement^=left] [data-animation=perspective][data-state=visible]{-webkit-transform:perspective(700px) translateX(-10px);transform:perspective(700px) translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:perspective(700px) rotateY(-60deg);transform:perspective(700px) rotateY(-60deg)}.tippy-popper[x-placement^=left] [data-animation=fade][data-state=visible]{-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift-away][data-state=visible]{-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift-away][data-state=hidden]{opacity:0}.tippy-popper[x-placement^=left] [data-animation=scale]{-webkit-transform-origin:right;transform-origin:right}.tippy-popper[x-placement^=left] [data-animation=scale][data-state=visible]{-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateX(-10px) scale(.5);transform:translateX(-10px) scale(.5)}.tippy-popper[x-placement^=right] .tippy-backdrop{border-radius:0 50% 50% 0}.tippy-popper[x-placement^=right] .tippy-roundarrow{left:-12px;-webkit-transform-origin:66.66666666% 50%;transform-origin:66.66666666% 50%;margin:3px 0}.tippy-popper[x-placement^=right] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.tippy-popper[x-placement^=right] .tippy-arrow{border-right:8px solid #333;border-top:8px solid transparent;border-bottom:8px solid transparent;left:-7px;margin:3px 0;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.tippy-popper[x-placement^=right] .tippy-backdrop{-webkit-transform-origin:-50% 0;transform-origin:-50% 0}.tippy-popper[x-placement^=right] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%)}.tippy-popper[x-placement^=right] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(.2) translate(-25%,-50%);transform:scale(.2) translate(-25%,-50%);opacity:0}.tippy-popper[x-placement^=right] [data-animation=shift-toward][data-state=visible]{-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}.tippy-popper[x-placement^=right] [data-animation=perspective]{-webkit-transform-origin:left;transform-origin:left}.tippy-popper[x-placement^=right] [data-animation=perspective][data-state=visible]{-webkit-transform:perspective(700px) translateX(10px);transform:perspective(700px) translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:perspective(700px) rotateY(60deg);transform:perspective(700px) rotateY(60deg)}.tippy-popper[x-placement^=right] [data-animation=fade][data-state=visible]{-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift-away][data-state=visible]{-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift-away][data-state=hidden]{opacity:0}.tippy-popper[x-placement^=right] [data-animation=scale]{-webkit-transform-origin:left;transform-origin:left}.tippy-popper[x-placement^=right] [data-animation=scale][data-state=visible]{-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateX(10px) scale(.5);transform:translateX(10px) scale(.5)}.tippy-tooltip{position:relative;color:#fff;border-radius:.25rem;font-size:.875rem;padding:.3125rem .5625rem;line-height:1.4;text-align:center;background-color:#333}.tippy-tooltip[data-size=small]{padding:.1875rem .375rem;font-size:.75rem}.tippy-tooltip[data-size=large]{padding:.375rem .75rem;font-size:1rem}.tippy-tooltip[data-animatefill]{overflow:hidden;background-color:initial}.tippy-tooltip[data-interactive],.tippy-tooltip[data-interactive] .tippy-roundarrow path{pointer-events:auto}.tippy-tooltip[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-tooltip[data-inertia][data-state=hidden]{transition-timing-function:ease}.tippy-arrow,.tippy-roundarrow{position:absolute;width:0;height:0}.tippy-roundarrow{width:18px;height:7px;fill:#333;pointer-events:none}.tippy-backdrop{position:absolute;background-color:#333;border-radius:50%;width:calc(110% + 2rem);left:50%;top:50%;z-index:-1;transition:all cubic-bezier(.46,.1,.52,.98);-webkit-backface-visibility:hidden;backface-visibility:hidden}.tippy-backdrop:after{content:\\\"\\\";float:left;padding-top:100%}.tippy-backdrop+.tippy-content{transition-property:opacity;will-change:opacity}.tippy-backdrop+.tippy-content[data-state=hidden]{opacity:0}\";\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nvar version = \"4.3.5\";\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nvar ua = isBrowser ? navigator.userAgent : '';\nvar isIE = /MSIE |Trident\\//.test(ua);\nvar isUCBrowser = /UCBrowser\\//.test(ua);\nvar isIOS = isBrowser && /iPhone|iPad|iPod/.test(navigator.platform) && !window.MSStream;\n\nvar defaultProps = {\n a11y: true,\n allowHTML: true,\n animateFill: true,\n animation: 'shift-away',\n appendTo: function appendTo() {\n return document.body;\n },\n aria: 'describedby',\n arrow: false,\n arrowType: 'sharp',\n boundary: 'scrollParent',\n content: '',\n delay: 0,\n distance: 10,\n duration: [325, 275],\n flip: true,\n flipBehavior: 'flip',\n flipOnUpdate: false,\n followCursor: false,\n hideOnClick: true,\n ignoreAttributes: false,\n inertia: false,\n interactive: false,\n interactiveBorder: 2,\n interactiveDebounce: 0,\n lazy: true,\n maxWidth: 350,\n multiple: false,\n offset: 0,\n onHidden: function onHidden() {},\n onHide: function onHide() {},\n onMount: function onMount() {},\n onShow: function onShow() {},\n onShown: function onShown() {},\n onTrigger: function onTrigger() {},\n placement: 'top',\n popperOptions: {},\n role: 'tooltip',\n showOnInit: false,\n size: 'regular',\n sticky: false,\n target: '',\n theme: 'dark',\n touch: true,\n touchHold: false,\n trigger: 'mouseenter focus',\n triggerTarget: null,\n updateDuration: 0,\n wait: null,\n zIndex: 9999\n /**\n * If the set() method encounters one of these, the popperInstance must be\n * recreated\n */\n\n};\nvar POPPER_INSTANCE_DEPENDENCIES = ['arrow', 'arrowType', 'boundary', 'distance', 'flip', 'flipBehavior', 'flipOnUpdate', 'offset', 'placement', 'popperOptions'];\n\nvar elementProto = isBrowser ? Element.prototype : {};\nvar matches = elementProto.matches || elementProto.matchesSelector || elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector;\n/**\n * Ponyfill for Array.from - converts iterable values to an array\n */\n\nfunction arrayFrom(value) {\n return [].slice.call(value);\n}\n/**\n * Ponyfill for Element.prototype.closest\n */\n\nfunction closest(element, selector) {\n return closestCallback(element, function (el) {\n return matches.call(el, selector);\n });\n}\n/**\n * Works like Element.prototype.closest, but uses a callback instead\n */\n\nfunction closestCallback(element, callback) {\n while (element) {\n if (callback(element)) {\n return element;\n }\n\n element = element.parentElement;\n }\n\n return null;\n}\n\n// Passive event listener config\nvar PASSIVE = {\n passive: true // Popper `preventOverflow` padding\n\n};\nvar PADDING = 4; // Popper attributes\n// In Popper v2 these will be `data-*` instead of `x-*` to adhere to HTML5 spec\n\nvar PLACEMENT_ATTRIBUTE = 'x-placement';\nvar OUT_OF_BOUNDARIES_ATTRIBUTE = 'x-out-of-boundaries'; // Classes\n\nvar IOS_CLASS = \"tippy-iOS\";\nvar ACTIVE_CLASS = \"tippy-active\";\nvar POPPER_CLASS = \"tippy-popper\";\nvar TOOLTIP_CLASS = \"tippy-tooltip\";\nvar CONTENT_CLASS = \"tippy-content\";\nvar BACKDROP_CLASS = \"tippy-backdrop\";\nvar ARROW_CLASS = \"tippy-arrow\";\nvar ROUND_ARROW_CLASS = \"tippy-roundarrow\"; // Selectors\n\nvar POPPER_SELECTOR = \".\".concat(POPPER_CLASS);\nvar TOOLTIP_SELECTOR = \".\".concat(TOOLTIP_CLASS);\nvar CONTENT_SELECTOR = \".\".concat(CONTENT_CLASS);\nvar BACKDROP_SELECTOR = \".\".concat(BACKDROP_CLASS);\nvar ARROW_SELECTOR = \".\".concat(ARROW_CLASS);\nvar ROUND_ARROW_SELECTOR = \".\".concat(ROUND_ARROW_CLASS);\n\nvar isUsingTouch = false;\nfunction onDocumentTouch() {\n if (isUsingTouch) {\n return;\n }\n\n isUsingTouch = true;\n\n if (isIOS) {\n document.body.classList.add(IOS_CLASS);\n }\n\n if (window.performance) {\n document.addEventListener('mousemove', onDocumentMouseMove);\n }\n}\nvar lastMouseMoveTime = 0;\nfunction onDocumentMouseMove() {\n var now = performance.now(); // Chrome 60+ is 1 mousemove per animation frame, use 20ms time difference\n\n if (now - lastMouseMoveTime < 20) {\n isUsingTouch = false;\n document.removeEventListener('mousemove', onDocumentMouseMove);\n\n if (!isIOS) {\n document.body.classList.remove(IOS_CLASS);\n }\n }\n\n lastMouseMoveTime = now;\n}\nfunction onWindowBlur() {\n var _document = document,\n activeElement = _document.activeElement;\n\n if (activeElement && activeElement.blur && activeElement._tippy) {\n activeElement.blur();\n }\n}\n/**\n * Adds the needed global event listeners\n */\n\nfunction bindGlobalEventListeners() {\n document.addEventListener('touchstart', onDocumentTouch, PASSIVE);\n window.addEventListener('blur', onWindowBlur);\n}\n\nvar keys = Object.keys(defaultProps);\n/**\n * Returns an object of optional props from data-tippy-* attributes\n */\n\nfunction getDataAttributeOptions(reference) {\n return keys.reduce(function (acc, key) {\n var valueAsString = (reference.getAttribute(\"data-tippy-\".concat(key)) || '').trim();\n\n if (!valueAsString) {\n return acc;\n }\n\n if (key === 'content') {\n acc[key] = valueAsString;\n } else {\n try {\n acc[key] = JSON.parse(valueAsString);\n } catch (e) {\n acc[key] = valueAsString;\n }\n }\n\n return acc;\n }, {});\n}\n/**\n * Polyfills the virtual reference (plain object) with Element.prototype props\n * Mutating because DOM elements are mutated, adds `_tippy` property\n */\n\nfunction polyfillElementPrototypeProperties(virtualReference) {\n var polyfills = {\n isVirtual: true,\n attributes: virtualReference.attributes || {},\n contains: function contains() {},\n setAttribute: function setAttribute(key, value) {\n virtualReference.attributes[key] = value;\n },\n getAttribute: function getAttribute(key) {\n return virtualReference.attributes[key];\n },\n removeAttribute: function removeAttribute(key) {\n delete virtualReference.attributes[key];\n },\n hasAttribute: function hasAttribute(key) {\n return key in virtualReference.attributes;\n },\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n classList: {\n classNames: {},\n add: function add(key) {\n virtualReference.classList.classNames[key] = true;\n },\n remove: function remove(key) {\n delete virtualReference.classList.classNames[key];\n },\n contains: function contains(key) {\n return key in virtualReference.classList.classNames;\n }\n }\n };\n\n for (var key in polyfills) {\n virtualReference[key] = polyfills[key];\n }\n}\n\n/**\n * Determines if a value is a \"bare\" virtual element (before mutations done\n * by `polyfillElementPrototypeProperties()`). JSDOM elements show up as\n * [object Object], we can check if the value is \"element-like\" if it has\n * `addEventListener`\n */\n\nfunction isBareVirtualElement(value) {\n return {}.toString.call(value) === '[object Object]' && !value.addEventListener;\n}\n/**\n * Determines if the value is a reference element\n */\n\nfunction isReferenceElement(value) {\n return !!value._tippy && !matches.call(value, POPPER_SELECTOR);\n}\n/**\n * Safe .hasOwnProperty check, for prototype-less objects\n */\n\nfunction hasOwnProperty(obj, key) {\n return {}.hasOwnProperty.call(obj, key);\n}\n/**\n * Returns an array of elements based on the value\n */\n\nfunction getArrayOfElements(value) {\n if (isSingular(value)) {\n // TODO: VirtualReference is not compatible to type Element\n return [value];\n }\n\n if (value instanceof NodeList) {\n return arrayFrom(value);\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n try {\n return arrayFrom(document.querySelectorAll(value));\n } catch (e) {\n return [];\n }\n}\n/**\n * Returns a value at a given index depending on if it's an array or number\n */\n\nfunction getValue(value, index, defaultValue) {\n if (Array.isArray(value)) {\n var v = value[index];\n return v == null ? defaultValue : v;\n }\n\n return value;\n}\n/**\n * Debounce utility. To avoid bloating bundle size, we're only passing 1\n * argument here, a more generic function would pass all arguments. Only\n * `onMouseMove` uses this which takes the event object for now.\n */\n\nfunction debounce(fn, ms) {\n // Avoid wrapping in `setTimeout` if ms is 0 anyway\n if (ms === 0) {\n return fn;\n }\n\n var timeout;\n return function (arg) {\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n fn(arg);\n }, ms);\n };\n}\n/**\n * Prevents errors from being thrown while accessing nested modifier objects\n * in `popperOptions`\n */\n\nfunction getModifier(obj, key) {\n return obj && obj.modifiers && obj.modifiers[key];\n}\n/**\n * Determines if an array or string includes a value\n */\n\nfunction includes(a, b) {\n return a.indexOf(b) > -1;\n}\n/**\n * Determines if the value is a real element\n */\n\nfunction isRealElement(value) {\n return value instanceof Element;\n}\n/**\n * Determines if the value is singular-like\n */\n\nfunction isSingular(value) {\n return !!(value && hasOwnProperty(value, 'isVirtual')) || isRealElement(value);\n}\n/**\n * Firefox extensions don't allow setting .innerHTML directly, this will trick it\n */\n\nfunction innerHTML() {\n return 'innerHTML';\n}\n/**\n * Evaluates a function if one, or returns the value\n */\n\nfunction invokeWithArgsOrReturn(value, args) {\n return typeof value === 'function' ? value.apply(null, args) : value;\n}\n/**\n * Sets a popperInstance `flip` modifier's enabled state\n */\n\nfunction setFlipModifierEnabled(modifiers, value) {\n modifiers.filter(function (m) {\n return m.name === 'flip';\n })[0].enabled = value;\n}\n/**\n * Determines if an element can receive focus\n * Always returns true for virtual objects\n */\n\nfunction canReceiveFocus(element) {\n return isRealElement(element) ? matches.call(element, 'a[href],area[href],button,details,input,textarea,select,iframe,[tabindex]') && !element.hasAttribute('disabled') : true;\n}\n/**\n * Returns a new `div` element\n */\n\nfunction div() {\n return document.createElement('div');\n}\n/**\n * Applies a transition duration to a list of elements\n */\n\nfunction setTransitionDuration(els, value) {\n els.forEach(function (el) {\n if (el) {\n el.style.transitionDuration = \"\".concat(value, \"ms\");\n }\n });\n}\n/**\n * Sets the visibility state to elements so they can begin to transition\n */\n\nfunction setVisibilityState(els, state) {\n els.forEach(function (el) {\n if (el) {\n el.setAttribute('data-state', state);\n }\n });\n}\n/**\n * Evaluates the props object by merging data attributes and\n * disabling conflicting options where necessary\n */\n\nfunction evaluateProps(reference, props) {\n var out = _extends({}, props, {\n content: invokeWithArgsOrReturn(props.content, [reference])\n }, props.ignoreAttributes ? {} : getDataAttributeOptions(reference));\n\n if (out.arrow || isUCBrowser) {\n out.animateFill = false;\n }\n\n return out;\n}\n/**\n * Validates an object of options with the valid default props object\n */\n\nfunction validateOptions(options, defaultProps) {\n Object.keys(options).forEach(function (option) {\n if (!hasOwnProperty(defaultProps, option)) {\n throw new Error(\"[tippy]: `\".concat(option, \"` is not a valid option\"));\n }\n });\n}\n\n/**\n * Sets the innerHTML of an element\n */\n\nfunction setInnerHTML(element, html) {\n element[innerHTML()] = isRealElement(html) ? html[innerHTML()] : html;\n}\n/**\n * Sets the content of a tooltip\n */\n\nfunction setContent(contentEl, props) {\n if (isRealElement(props.content)) {\n setInnerHTML(contentEl, '');\n contentEl.appendChild(props.content);\n } else if (typeof props.content !== 'function') {\n var key = props.allowHTML ? 'innerHTML' : 'textContent';\n contentEl[key] = props.content;\n }\n}\n/**\n * Returns the child elements of a popper element\n */\n\nfunction getChildren(popper) {\n return {\n tooltip: popper.querySelector(TOOLTIP_SELECTOR),\n backdrop: popper.querySelector(BACKDROP_SELECTOR),\n content: popper.querySelector(CONTENT_SELECTOR),\n arrow: popper.querySelector(ARROW_SELECTOR) || popper.querySelector(ROUND_ARROW_SELECTOR)\n };\n}\n/**\n * Adds `data-inertia` attribute\n */\n\nfunction addInertia(tooltip) {\n tooltip.setAttribute('data-inertia', '');\n}\n/**\n * Removes `data-inertia` attribute\n */\n\nfunction removeInertia(tooltip) {\n tooltip.removeAttribute('data-inertia');\n}\n/**\n * Creates an arrow element and returns it\n */\n\nfunction createArrowElement(arrowType) {\n var arrow = div();\n\n if (arrowType === 'round') {\n arrow.className = ROUND_ARROW_CLASS;\n setInnerHTML(arrow, '');\n } else {\n arrow.className = ARROW_CLASS;\n }\n\n return arrow;\n}\n/**\n * Creates a backdrop element and returns it\n */\n\nfunction createBackdropElement() {\n var backdrop = div();\n backdrop.className = BACKDROP_CLASS;\n backdrop.setAttribute('data-state', 'hidden');\n return backdrop;\n}\n/**\n * Adds interactive-related attributes\n */\n\nfunction addInteractive(popper, tooltip) {\n popper.setAttribute('tabindex', '-1');\n tooltip.setAttribute('data-interactive', '');\n}\n/**\n * Removes interactive-related attributes\n */\n\nfunction removeInteractive(popper, tooltip) {\n popper.removeAttribute('tabindex');\n tooltip.removeAttribute('data-interactive');\n}\n/**\n * Add/remove transitionend listener from tooltip\n */\n\nfunction updateTransitionEndListener(tooltip, action, listener) {\n // UC Browser hasn't adopted the `transitionend` event despite supporting\n // unprefixed transitions...\n var eventName = isUCBrowser && document.body.style.webkitTransition !== undefined ? 'webkitTransitionEnd' : 'transitionend';\n tooltip[action + 'EventListener'](eventName, listener);\n}\n/**\n * Returns the popper's placement, ignoring shifting (top-start, etc)\n */\n\nfunction getBasicPlacement(popper) {\n var fullPlacement = popper.getAttribute(PLACEMENT_ATTRIBUTE);\n return fullPlacement ? fullPlacement.split('-')[0] : '';\n}\n/**\n * Triggers reflow\n */\n\nfunction reflow(popper) {\n void popper.offsetHeight;\n}\n/**\n * Adds/removes theme from tooltip's classList\n */\n\nfunction updateTheme(tooltip, action, theme) {\n theme.split(' ').forEach(function (themeName) {\n tooltip.classList[action](themeName + '-theme');\n });\n}\n/**\n * Constructs the popper element and returns it\n */\n\nfunction createPopperElement(id, props) {\n var popper = div();\n popper.className = POPPER_CLASS;\n popper.id = \"tippy-\".concat(id);\n popper.style.zIndex = '' + props.zIndex;\n popper.style.position = 'absolute';\n popper.style.top = '0';\n popper.style.left = '0';\n\n if (props.role) {\n popper.setAttribute('role', props.role);\n }\n\n var tooltip = div();\n tooltip.className = TOOLTIP_CLASS;\n tooltip.style.maxWidth = props.maxWidth + (typeof props.maxWidth === 'number' ? 'px' : '');\n tooltip.setAttribute('data-size', props.size);\n tooltip.setAttribute('data-animation', props.animation);\n tooltip.setAttribute('data-state', 'hidden');\n updateTheme(tooltip, 'add', props.theme);\n var content = div();\n content.className = CONTENT_CLASS;\n content.setAttribute('data-state', 'hidden');\n\n if (props.interactive) {\n addInteractive(popper, tooltip);\n }\n\n if (props.arrow) {\n tooltip.appendChild(createArrowElement(props.arrowType));\n }\n\n if (props.animateFill) {\n tooltip.appendChild(createBackdropElement());\n tooltip.setAttribute('data-animatefill', '');\n }\n\n if (props.inertia) {\n addInertia(tooltip);\n }\n\n setContent(content, props);\n tooltip.appendChild(content);\n popper.appendChild(tooltip);\n return popper;\n}\n/**\n * Updates the popper element based on the new props\n */\n\nfunction updatePopperElement(popper, prevProps, nextProps) {\n var _getChildren = getChildren(popper),\n tooltip = _getChildren.tooltip,\n content = _getChildren.content,\n backdrop = _getChildren.backdrop,\n arrow = _getChildren.arrow;\n\n popper.style.zIndex = '' + nextProps.zIndex;\n tooltip.setAttribute('data-size', nextProps.size);\n tooltip.setAttribute('data-animation', nextProps.animation);\n tooltip.style.maxWidth = nextProps.maxWidth + (typeof nextProps.maxWidth === 'number' ? 'px' : '');\n\n if (nextProps.role) {\n popper.setAttribute('role', nextProps.role);\n } else {\n popper.removeAttribute('role');\n }\n\n if (prevProps.content !== nextProps.content) {\n setContent(content, nextProps);\n } // animateFill\n\n\n if (!prevProps.animateFill && nextProps.animateFill) {\n tooltip.appendChild(createBackdropElement());\n tooltip.setAttribute('data-animatefill', '');\n } else if (prevProps.animateFill && !nextProps.animateFill) {\n tooltip.removeChild(backdrop);\n tooltip.removeAttribute('data-animatefill');\n } // arrow\n\n\n if (!prevProps.arrow && nextProps.arrow) {\n tooltip.appendChild(createArrowElement(nextProps.arrowType));\n } else if (prevProps.arrow && !nextProps.arrow) {\n tooltip.removeChild(arrow);\n } // arrowType\n\n\n if (prevProps.arrow && nextProps.arrow && prevProps.arrowType !== nextProps.arrowType) {\n tooltip.replaceChild(createArrowElement(nextProps.arrowType), arrow);\n } // interactive\n\n\n if (!prevProps.interactive && nextProps.interactive) {\n addInteractive(popper, tooltip);\n } else if (prevProps.interactive && !nextProps.interactive) {\n removeInteractive(popper, tooltip);\n } // inertia\n\n\n if (!prevProps.inertia && nextProps.inertia) {\n addInertia(tooltip);\n } else if (prevProps.inertia && !nextProps.inertia) {\n removeInertia(tooltip);\n } // theme\n\n\n if (prevProps.theme !== nextProps.theme) {\n updateTheme(tooltip, 'remove', prevProps.theme);\n updateTheme(tooltip, 'add', nextProps.theme);\n }\n}\n/**\n * Hides all visible poppers on the document\n */\n\nfunction hideAll() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n excludedReferenceOrInstance = _ref.exclude,\n duration = _ref.duration;\n\n arrayFrom(document.querySelectorAll(POPPER_SELECTOR)).forEach(function (popper) {\n var instance = popper._tippy;\n\n if (instance) {\n var isExcluded = false;\n\n if (excludedReferenceOrInstance) {\n isExcluded = isReferenceElement(excludedReferenceOrInstance) ? instance.reference === excludedReferenceOrInstance : popper === excludedReferenceOrInstance.popper;\n }\n\n if (!isExcluded) {\n instance.hide(duration);\n }\n }\n });\n}\n/**\n * Determines if the mouse cursor is outside of the popper's interactive border\n * region\n */\n\nfunction isCursorOutsideInteractiveBorder(popperPlacement, popperRect, event, props) {\n if (!popperPlacement) {\n return true;\n }\n\n var x = event.clientX,\n y = event.clientY;\n var interactiveBorder = props.interactiveBorder,\n distance = props.distance;\n var exceedsTop = popperRect.top - y > (popperPlacement === 'top' ? interactiveBorder + distance : interactiveBorder);\n var exceedsBottom = y - popperRect.bottom > (popperPlacement === 'bottom' ? interactiveBorder + distance : interactiveBorder);\n var exceedsLeft = popperRect.left - x > (popperPlacement === 'left' ? interactiveBorder + distance : interactiveBorder);\n var exceedsRight = x - popperRect.right > (popperPlacement === 'right' ? interactiveBorder + distance : interactiveBorder);\n return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n}\n/**\n * Returns the distance offset, taking into account the default offset due to\n * the transform: translate() rule (10px) in CSS\n */\n\nfunction getOffsetDistanceInPx(distance) {\n return -(distance - 10) + 'px';\n}\n\nvar idCounter = 1; // Workaround for IE11's lack of new MouseEvent constructor\n\nvar mouseMoveListeners = [];\n/**\n * Creates and returns a Tippy object. We're using a closure pattern instead of\n * a class so that the exposed object API is clean without private members\n * prefixed with `_`.\n */\n\nfunction createTippy(reference, collectionProps) {\n var props = evaluateProps(reference, collectionProps); // If the reference shouldn't have multiple tippys, return null early\n\n if (!props.multiple && reference._tippy) {\n return null;\n }\n /* ======================= 🔒 Private members 🔒 ======================= */\n\n\n var lastTriggerEventType;\n var lastMouseMoveEvent;\n var showTimeoutId;\n var hideTimeoutId;\n var scheduleHideAnimationFrameId;\n var isScheduledToShow = false;\n var isBeingDestroyed = false;\n var previousPlacement;\n var wasVisibleDuringPreviousUpdate = false;\n var hasMountCallbackRun = false;\n var currentMountCallback;\n var currentTransitionEndListener;\n var listeners = [];\n var currentComputedPadding;\n var debouncedOnMouseMove = debounce(onMouseMove, props.interactiveDebounce);\n /* ======================= 🔑 Public members 🔑 ======================= */\n\n var id = idCounter++;\n var popper = createPopperElement(id, props);\n var popperChildren = getChildren(popper);\n var popperInstance = null;\n var state = {\n // Is the instance currently enabled?\n isEnabled: true,\n // Is the tippy currently showing and not transitioning out?\n isVisible: false,\n // Has the instance been destroyed?\n isDestroyed: false,\n // Is the tippy currently mounted to the DOM?\n isMounted: false,\n // Has the tippy finished transitioning in?\n isShown: false\n };\n var instance = {\n // properties\n id: id,\n reference: reference,\n popper: popper,\n popperChildren: popperChildren,\n popperInstance: popperInstance,\n props: props,\n state: state,\n // methods\n clearDelayTimeouts: clearDelayTimeouts,\n set: set,\n setContent: setContent,\n show: show,\n hide: hide,\n enable: enable,\n disable: disable,\n destroy: destroy\n /* ==================== Initial instance mutations =================== */\n\n };\n reference._tippy = instance;\n popper._tippy = instance;\n addTriggersToReference();\n\n if (!props.lazy) {\n createPopperInstance();\n }\n\n if (props.showOnInit) {\n scheduleShow();\n } // Ensure the event listeners target can receive focus\n\n\n if (props.a11y && !props.target && !canReceiveFocus(getEventListenersTarget())) {\n getEventListenersTarget().setAttribute('tabindex', '0');\n } // Prevent a tippy with a delay from hiding if the cursor left then returned\n // before it started hiding\n\n\n popper.addEventListener('mouseenter', function (event) {\n if (instance.props.interactive && instance.state.isVisible && lastTriggerEventType === 'mouseenter') {\n // We don't want props.onTrigger() to be called here, since the `event`\n // object is not related to the reference element\n scheduleShow(event, true);\n }\n });\n popper.addEventListener('mouseleave', function () {\n if (instance.props.interactive && lastTriggerEventType === 'mouseenter') {\n document.addEventListener('mousemove', debouncedOnMouseMove);\n }\n });\n return instance;\n /* ======================= 🔒 Private methods 🔒 ======================= */\n\n /**\n * Removes the follow cursor listener\n */\n\n function removeFollowCursorListener() {\n document.removeEventListener('mousemove', positionVirtualReferenceNearCursor);\n }\n /**\n * Cleans up interactive mouse listeners\n */\n\n\n function cleanupInteractiveMouseListeners() {\n document.body.removeEventListener('mouseleave', scheduleHide);\n document.removeEventListener('mousemove', debouncedOnMouseMove);\n mouseMoveListeners = mouseMoveListeners.filter(function (listener) {\n return listener !== debouncedOnMouseMove;\n });\n }\n /**\n * Returns correct target used for event listeners\n */\n\n\n function getEventListenersTarget() {\n return instance.props.triggerTarget || reference;\n }\n /**\n * Adds the document click event listener for the instance\n */\n\n\n function addDocumentClickListener() {\n document.addEventListener('click', onDocumentClick, true);\n }\n /**\n * Removes the document click event listener for the instance\n */\n\n\n function removeDocumentClickListener() {\n document.removeEventListener('click', onDocumentClick, true);\n }\n /**\n * Returns transitionable inner elements used in show/hide methods\n */\n\n\n function getTransitionableElements() {\n return [instance.popperChildren.tooltip, instance.popperChildren.backdrop, instance.popperChildren.content];\n }\n /**\n * Determines if the instance is in `followCursor` mode.\n * NOTE: in v5, touch devices will use `initial` behavior no matter the value.\n */\n\n\n function getIsInLooseFollowCursorMode() {\n var followCursor = instance.props.followCursor;\n return followCursor && lastTriggerEventType !== 'focus' || isUsingTouch && followCursor === 'initial';\n }\n /**\n * Updates the tooltip's position on each animation frame\n */\n\n\n function makeSticky() {\n setTransitionDuration([popper], isIE ? 0 : instance.props.updateDuration);\n var prevRefRect = reference.getBoundingClientRect();\n\n function updatePosition() {\n var currentRefRect = reference.getBoundingClientRect(); // Only schedule an update if the reference rect has changed\n\n if (prevRefRect.top !== currentRefRect.top || prevRefRect.right !== currentRefRect.right || prevRefRect.bottom !== currentRefRect.bottom || prevRefRect.left !== currentRefRect.left) {\n instance.popperInstance.scheduleUpdate();\n }\n\n prevRefRect = currentRefRect;\n\n if (instance.state.isMounted) {\n requestAnimationFrame(updatePosition);\n }\n }\n\n updatePosition();\n }\n /**\n * Invokes a callback once the tooltip has fully transitioned out\n */\n\n\n function onTransitionedOut(duration, callback) {\n onTransitionEnd(duration, function () {\n if (!instance.state.isVisible && popper.parentNode && popper.parentNode.contains(popper)) {\n callback();\n }\n });\n }\n /**\n * Invokes a callback once the tooltip has fully transitioned in\n */\n\n\n function onTransitionedIn(duration, callback) {\n onTransitionEnd(duration, callback);\n }\n /**\n * Invokes a callback once the tooltip's CSS transition ends\n */\n\n\n function onTransitionEnd(duration, callback) {\n var tooltip = instance.popperChildren.tooltip;\n /**\n * Listener added as the `transitionend` handler\n */\n\n function listener(event) {\n if (event.target === tooltip) {\n updateTransitionEndListener(tooltip, 'remove', listener);\n callback();\n }\n } // Make callback synchronous if duration is 0\n // `transitionend` won't fire otherwise\n\n\n if (duration === 0) {\n return callback();\n }\n\n updateTransitionEndListener(tooltip, 'remove', currentTransitionEndListener);\n updateTransitionEndListener(tooltip, 'add', listener);\n currentTransitionEndListener = listener;\n }\n /**\n * Adds an event listener to the reference and stores it in `listeners`\n */\n\n\n function on(eventType, handler) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n getEventListenersTarget().addEventListener(eventType, handler, options);\n listeners.push({\n eventType: eventType,\n handler: handler,\n options: options\n });\n }\n /**\n * Adds event listeners to the reference based on the `trigger` prop\n */\n\n\n function addTriggersToReference() {\n if (instance.props.touchHold && !instance.props.target) {\n on('touchstart', onTrigger, PASSIVE);\n on('touchend', onMouseLeave, PASSIVE);\n }\n\n instance.props.trigger.trim().split(' ').forEach(function (eventType) {\n if (eventType === 'manual') {\n return;\n } // Non-delegates\n\n\n if (!instance.props.target) {\n on(eventType, onTrigger);\n\n switch (eventType) {\n case 'mouseenter':\n on('mouseleave', onMouseLeave);\n break;\n\n case 'focus':\n on(isIE ? 'focusout' : 'blur', onBlur);\n break;\n }\n } else {\n // Delegates\n switch (eventType) {\n case 'mouseenter':\n on('mouseover', onDelegateShow);\n on('mouseout', onDelegateHide);\n break;\n\n case 'focus':\n on('focusin', onDelegateShow);\n on('focusout', onDelegateHide);\n break;\n\n case 'click':\n on(eventType, onDelegateShow);\n break;\n }\n }\n });\n }\n /**\n * Removes event listeners from the reference\n */\n\n\n function removeTriggersFromReference() {\n listeners.forEach(function (_ref) {\n var eventType = _ref.eventType,\n handler = _ref.handler,\n options = _ref.options;\n getEventListenersTarget().removeEventListener(eventType, handler, options);\n });\n listeners = [];\n }\n /**\n * Positions the virtual reference near the cursor\n */\n\n\n function positionVirtualReferenceNearCursor(event) {\n var _lastMouseMoveEvent = lastMouseMoveEvent = event,\n x = _lastMouseMoveEvent.clientX,\n y = _lastMouseMoveEvent.clientY; // Gets set once popperInstance `onCreate` has been called\n\n\n if (!currentComputedPadding) {\n return;\n } // If the instance is interactive, avoid updating the position unless it's\n // over the reference element\n\n\n var isCursorOverReference = closestCallback(event.target, function (el) {\n return el === reference;\n });\n var rect = reference.getBoundingClientRect();\n var followCursor = instance.props.followCursor;\n var isHorizontal = followCursor === 'horizontal';\n var isVertical = followCursor === 'vertical'; // The virtual reference needs some size to prevent itself from overflowing\n\n var isVerticalPlacement = includes(['top', 'bottom'], getBasicPlacement(popper));\n var fullPlacement = popper.getAttribute(PLACEMENT_ATTRIBUTE);\n var isVariation = fullPlacement ? !!fullPlacement.split('-')[1] : false;\n var size = isVerticalPlacement ? popper.offsetWidth : popper.offsetHeight;\n var halfSize = size / 2;\n var verticalIncrease = isVerticalPlacement ? 0 : isVariation ? size : halfSize;\n var horizontalIncrease = isVerticalPlacement ? isVariation ? size : halfSize : 0;\n\n if (isCursorOverReference || !instance.props.interactive) {\n instance.popperInstance.reference = _extends({}, instance.popperInstance.reference, {\n // This will exist in next Popper.js feature release to fix #532\n // @ts-ignore\n referenceNode: reference,\n // These `client` values don't get used by Popper.js if they are 0\n clientWidth: 0,\n clientHeight: 0,\n getBoundingClientRect: function getBoundingClientRect() {\n return {\n width: isVerticalPlacement ? size : 0,\n height: isVerticalPlacement ? 0 : size,\n top: (isHorizontal ? rect.top : y) - verticalIncrease,\n bottom: (isHorizontal ? rect.bottom : y) + verticalIncrease,\n left: (isVertical ? rect.left : x) - horizontalIncrease,\n right: (isVertical ? rect.right : x) + horizontalIncrease\n };\n }\n });\n instance.popperInstance.update();\n }\n\n if (followCursor === 'initial' && instance.state.isVisible) {\n removeFollowCursorListener();\n }\n }\n /**\n * Creates the tippy instance for a delegate when it's been triggered\n */\n\n\n function createDelegateChildTippy(event) {\n if (event) {\n var targetEl = closest(event.target, instance.props.target);\n\n if (targetEl && !targetEl._tippy) {\n createTippy(targetEl, _extends({}, instance.props, {\n content: invokeWithArgsOrReturn(collectionProps.content, [targetEl]),\n appendTo: collectionProps.appendTo,\n target: '',\n showOnInit: true\n }));\n }\n }\n }\n /**\n * Event listener invoked upon trigger\n */\n\n\n function onTrigger(event) {\n if (!instance.state.isEnabled || isEventListenerStopped(event)) {\n return;\n }\n\n if (!instance.state.isVisible) {\n lastTriggerEventType = event.type;\n\n if (event instanceof MouseEvent) {\n lastMouseMoveEvent = event; // If scrolling, `mouseenter` events can be fired if the cursor lands\n // over a new target, but `mousemove` events don't get fired. This\n // causes interactive tooltips to get stuck open until the cursor is\n // moved\n\n mouseMoveListeners.forEach(function (listener) {\n return listener(event);\n });\n }\n } // Toggle show/hide when clicking click-triggered tooltips\n\n\n if (event.type === 'click' && instance.props.hideOnClick !== false && instance.state.isVisible) {\n scheduleHide();\n } else {\n scheduleShow(event);\n }\n }\n /**\n * Event listener used for interactive tooltips to detect when they should\n * hide\n */\n\n\n function onMouseMove(event) {\n var isCursorOverPopper = closest(event.target, POPPER_SELECTOR) === popper;\n var isCursorOverReference = closestCallback(event.target, function (el) {\n return el === reference;\n });\n\n if (isCursorOverPopper || isCursorOverReference) {\n return;\n }\n\n if (isCursorOutsideInteractiveBorder(getBasicPlacement(popper), popper.getBoundingClientRect(), event, instance.props)) {\n cleanupInteractiveMouseListeners();\n scheduleHide();\n }\n }\n /**\n * Event listener invoked upon mouseleave\n */\n\n\n function onMouseLeave(event) {\n if (isEventListenerStopped(event)) {\n return;\n }\n\n if (instance.props.interactive) {\n document.body.addEventListener('mouseleave', scheduleHide);\n document.addEventListener('mousemove', debouncedOnMouseMove);\n mouseMoveListeners.push(debouncedOnMouseMove);\n return;\n }\n\n scheduleHide();\n }\n /**\n * Event listener invoked upon blur\n */\n\n\n function onBlur(event) {\n if (event.target !== getEventListenersTarget()) {\n return;\n }\n\n if (instance.props.interactive && event.relatedTarget && popper.contains(event.relatedTarget)) {\n return;\n }\n\n scheduleHide();\n }\n /**\n * Event listener invoked when a child target is triggered\n */\n\n\n function onDelegateShow(event) {\n if (closest(event.target, instance.props.target)) {\n scheduleShow(event);\n }\n }\n /**\n * Event listener invoked when a child target should hide\n */\n\n\n function onDelegateHide(event) {\n if (closest(event.target, instance.props.target)) {\n scheduleHide();\n }\n }\n /**\n * Determines if an event listener should stop further execution due to the\n * `touchHold` option\n */\n\n\n function isEventListenerStopped(event) {\n var supportsTouch = 'ontouchstart' in window;\n var isTouchEvent = includes(event.type, 'touch');\n var touchHold = instance.props.touchHold;\n return supportsTouch && isUsingTouch && touchHold && !isTouchEvent || isUsingTouch && !touchHold && isTouchEvent;\n }\n /**\n * Runs the mount callback\n */\n\n\n function runMountCallback() {\n if (!hasMountCallbackRun && currentMountCallback) {\n hasMountCallbackRun = true;\n reflow(popper);\n currentMountCallback();\n }\n }\n /**\n * Creates the popper instance for the instance\n */\n\n\n function createPopperInstance() {\n var popperOptions = instance.props.popperOptions;\n var _instance$popperChild = instance.popperChildren,\n tooltip = _instance$popperChild.tooltip,\n arrow = _instance$popperChild.arrow;\n var preventOverflowModifier = getModifier(popperOptions, 'preventOverflow');\n\n function applyMutations(data) {\n if (instance.props.flip && !instance.props.flipOnUpdate) {\n if (data.flipped) {\n instance.popperInstance.options.placement = data.placement;\n }\n\n setFlipModifierEnabled(instance.popperInstance.modifiers, false);\n } // Apply all of the popper's attributes to the tootip node as well.\n // Allows users to avoid using the .tippy-popper selector for themes.\n\n\n tooltip.setAttribute(PLACEMENT_ATTRIBUTE, data.placement);\n\n if (data.attributes[OUT_OF_BOUNDARIES_ATTRIBUTE] !== false) {\n tooltip.setAttribute(OUT_OF_BOUNDARIES_ATTRIBUTE, '');\n } else {\n tooltip.removeAttribute(OUT_OF_BOUNDARIES_ATTRIBUTE);\n } // Prevents a transition when changing placements (while tippy is visible)\n // for scroll/resize updates\n\n\n if (previousPlacement && previousPlacement !== data.placement && wasVisibleDuringPreviousUpdate) {\n tooltip.style.transition = 'none';\n requestAnimationFrame(function () {\n tooltip.style.transition = '';\n });\n }\n\n previousPlacement = data.placement;\n wasVisibleDuringPreviousUpdate = instance.state.isVisible;\n var basicPlacement = getBasicPlacement(popper);\n var styles = tooltip.style; // Account for the `distance` offset\n\n styles.top = styles.bottom = styles.left = styles.right = '';\n styles[basicPlacement] = getOffsetDistanceInPx(instance.props.distance);\n var padding = preventOverflowModifier && preventOverflowModifier.padding !== undefined ? preventOverflowModifier.padding : PADDING;\n var isPaddingNumber = typeof padding === 'number';\n\n var computedPadding = _extends({\n top: isPaddingNumber ? padding : padding.top,\n bottom: isPaddingNumber ? padding : padding.bottom,\n left: isPaddingNumber ? padding : padding.left,\n right: isPaddingNumber ? padding : padding.right\n }, !isPaddingNumber && padding);\n\n computedPadding[basicPlacement] = isPaddingNumber ? padding + instance.props.distance : (padding[basicPlacement] || 0) + instance.props.distance;\n instance.popperInstance.modifiers.filter(function (m) {\n return m.name === 'preventOverflow';\n })[0].padding = computedPadding;\n currentComputedPadding = computedPadding;\n }\n\n var config = _extends({\n eventsEnabled: false,\n placement: instance.props.placement\n }, popperOptions, {\n modifiers: _extends({}, popperOptions ? popperOptions.modifiers : {}, {\n preventOverflow: _extends({\n boundariesElement: instance.props.boundary,\n padding: PADDING\n }, preventOverflowModifier),\n arrow: _extends({\n element: arrow,\n enabled: !!arrow\n }, getModifier(popperOptions, 'arrow')),\n flip: _extends({\n enabled: instance.props.flip,\n // The tooltip is offset by 10px from the popper in CSS,\n // we need to account for its distance\n padding: instance.props.distance + PADDING,\n behavior: instance.props.flipBehavior\n }, getModifier(popperOptions, 'flip')),\n offset: _extends({\n offset: instance.props.offset\n }, getModifier(popperOptions, 'offset'))\n }),\n onCreate: function onCreate(data) {\n applyMutations(data);\n runMountCallback();\n\n if (popperOptions && popperOptions.onCreate) {\n popperOptions.onCreate(data);\n }\n },\n onUpdate: function onUpdate(data) {\n applyMutations(data);\n runMountCallback();\n\n if (popperOptions && popperOptions.onUpdate) {\n popperOptions.onUpdate(data);\n }\n }\n });\n\n instance.popperInstance = new Popper(reference, popper, config);\n }\n /**\n * Mounts the tooltip to the DOM\n */\n\n\n function mount() {\n hasMountCallbackRun = false;\n var isInLooseFollowCursorMode = getIsInLooseFollowCursorMode();\n\n if (instance.popperInstance) {\n setFlipModifierEnabled(instance.popperInstance.modifiers, instance.props.flip);\n\n if (!isInLooseFollowCursorMode) {\n instance.popperInstance.reference = reference;\n instance.popperInstance.enableEventListeners();\n }\n\n instance.popperInstance.scheduleUpdate();\n } else {\n createPopperInstance();\n\n if (!isInLooseFollowCursorMode) {\n instance.popperInstance.enableEventListeners();\n }\n }\n\n var appendTo = instance.props.appendTo;\n var parentNode = appendTo === 'parent' ? reference.parentNode : invokeWithArgsOrReturn(appendTo, [reference]);\n\n if (!parentNode.contains(popper)) {\n parentNode.appendChild(popper);\n instance.props.onMount(instance);\n instance.state.isMounted = true;\n }\n }\n /**\n * Setup before show() is invoked (delays, etc.)\n */\n\n\n function scheduleShow(event, shouldAvoidCallingOnTrigger) {\n clearDelayTimeouts();\n\n if (instance.state.isVisible) {\n return;\n } // Is a delegate, create an instance for the child target\n\n\n if (instance.props.target) {\n return createDelegateChildTippy(event);\n }\n\n isScheduledToShow = true;\n\n if (event && !shouldAvoidCallingOnTrigger) {\n instance.props.onTrigger(instance, event);\n }\n\n if (instance.props.wait) {\n return instance.props.wait(instance, event);\n } // If the tooltip has a delay, we need to be listening to the mousemove as\n // soon as the trigger event is fired, so that it's in the correct position\n // upon mount.\n // Edge case: if the tooltip is still mounted, but then scheduleShow() is\n // called, it causes a jump.\n\n\n if (getIsInLooseFollowCursorMode() && !instance.state.isMounted) {\n if (!instance.popperInstance) {\n createPopperInstance();\n }\n\n document.addEventListener('mousemove', positionVirtualReferenceNearCursor);\n }\n\n addDocumentClickListener();\n var delay = getValue(instance.props.delay, 0, defaultProps.delay);\n\n if (delay) {\n showTimeoutId = setTimeout(function () {\n show();\n }, delay);\n } else {\n show();\n }\n }\n /**\n * Setup before hide() is invoked (delays, etc.)\n */\n\n\n function scheduleHide() {\n clearDelayTimeouts();\n\n if (!instance.state.isVisible) {\n removeFollowCursorListener();\n removeDocumentClickListener();\n return;\n }\n\n isScheduledToShow = false;\n var delay = getValue(instance.props.delay, 1, defaultProps.delay);\n\n if (delay) {\n hideTimeoutId = setTimeout(function () {\n if (instance.state.isVisible) {\n hide();\n }\n }, delay);\n } else {\n // Fixes a `transitionend` problem when it fires 1 frame too\n // late sometimes, we don't want hide() to be called.\n scheduleHideAnimationFrameId = requestAnimationFrame(function () {\n hide();\n });\n }\n }\n /**\n * Listener to handle clicks on the document to determine if the\n * instance should hide\n */\n\n\n function onDocumentClick(event) {\n // Clicked on interactive popper\n if (instance.props.interactive && popper.contains(event.target)) {\n return;\n } // Clicked on the event listeners target\n\n\n if (getEventListenersTarget().contains(event.target)) {\n if (isUsingTouch) {\n return;\n }\n\n if (instance.state.isVisible && includes(instance.props.trigger, 'click')) {\n return;\n }\n }\n\n if (instance.props.hideOnClick === true) {\n clearDelayTimeouts();\n hide();\n }\n }\n /* ======================= 🔑 Public methods 🔑 ======================= */\n\n /**\n * Enables the instance to allow it to show or hide\n */\n\n\n function enable() {\n instance.state.isEnabled = true;\n }\n /**\n * Disables the instance to disallow it to show or hide\n */\n\n\n function disable() {\n instance.state.isEnabled = false;\n }\n /**\n * Clears pending timeouts related to the `delay` prop if any\n */\n\n\n function clearDelayTimeouts() {\n clearTimeout(showTimeoutId);\n clearTimeout(hideTimeoutId);\n cancelAnimationFrame(scheduleHideAnimationFrameId);\n }\n /**\n * Sets new props for the instance and redraws the tooltip\n */\n\n\n function set(options) {\n // Backwards-compatible after TypeScript change\n options = options || {};\n validateOptions(options, defaultProps);\n removeTriggersFromReference();\n var prevProps = instance.props;\n var nextProps = evaluateProps(reference, _extends({}, instance.props, {}, options, {\n ignoreAttributes: true\n }));\n nextProps.ignoreAttributes = hasOwnProperty(options, 'ignoreAttributes') ? options.ignoreAttributes || false : prevProps.ignoreAttributes;\n instance.props = nextProps;\n addTriggersToReference();\n cleanupInteractiveMouseListeners();\n debouncedOnMouseMove = debounce(onMouseMove, nextProps.interactiveDebounce);\n updatePopperElement(popper, prevProps, nextProps);\n instance.popperChildren = getChildren(popper);\n\n if (instance.popperInstance) {\n if (POPPER_INSTANCE_DEPENDENCIES.some(function (prop) {\n return hasOwnProperty(options, prop) && options[prop] !== prevProps[prop];\n })) {\n instance.popperInstance.destroy();\n createPopperInstance();\n\n if (instance.state.isVisible) {\n instance.popperInstance.enableEventListeners();\n }\n\n if (instance.props.followCursor && lastMouseMoveEvent) {\n positionVirtualReferenceNearCursor(lastMouseMoveEvent);\n }\n } else {\n instance.popperInstance.update();\n }\n }\n }\n /**\n * Shortcut for .set({ content: newContent })\n */\n\n\n function setContent(content) {\n set({\n content: content\n });\n }\n /**\n * Shows the tooltip\n */\n\n\n function show() {\n var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getValue(instance.props.duration, 0, defaultProps.duration[1]);\n\n if (instance.state.isDestroyed || !instance.state.isEnabled || isUsingTouch && !instance.props.touch) {\n return;\n } // Standardize `disabled` behavior across browsers.\n // Firefox allows events on disabled elements, but Chrome doesn't.\n // Using a wrapper element (i.e. ) is recommended.\n\n\n if (getEventListenersTarget().hasAttribute('disabled')) {\n return;\n }\n\n if (instance.props.onShow(instance) === false) {\n return;\n }\n\n addDocumentClickListener();\n popper.style.visibility = 'visible';\n instance.state.isVisible = true;\n\n if (instance.props.interactive) {\n getEventListenersTarget().classList.add(ACTIVE_CLASS);\n } // Prevent a transition if the popper is at the opposite placement\n\n\n var transitionableElements = getTransitionableElements();\n setTransitionDuration(transitionableElements.concat(popper), 0);\n\n currentMountCallback = function currentMountCallback() {\n if (!instance.state.isVisible) {\n return;\n }\n\n var isInLooseFollowCursorMode = getIsInLooseFollowCursorMode();\n\n if (isInLooseFollowCursorMode && lastMouseMoveEvent) {\n positionVirtualReferenceNearCursor(lastMouseMoveEvent);\n } else if (!isInLooseFollowCursorMode) {\n // Double update will apply correct mutations\n instance.popperInstance.update();\n }\n\n if (instance.popperChildren.backdrop) {\n instance.popperChildren.content.style.transitionDelay = Math.round(duration / 12) + 'ms';\n }\n\n if (instance.props.sticky) {\n makeSticky();\n }\n\n setTransitionDuration([popper], instance.props.updateDuration);\n setTransitionDuration(transitionableElements, duration);\n setVisibilityState(transitionableElements, 'visible');\n onTransitionedIn(duration, function () {\n if (instance.props.aria) {\n getEventListenersTarget().setAttribute(\"aria-\".concat(instance.props.aria), popper.id);\n }\n\n instance.props.onShown(instance);\n instance.state.isShown = true;\n });\n };\n\n mount();\n }\n /**\n * Hides the tooltip\n */\n\n\n function hide() {\n var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getValue(instance.props.duration, 1, defaultProps.duration[1]);\n\n if (instance.state.isDestroyed || !instance.state.isEnabled && !isBeingDestroyed) {\n return;\n }\n\n if (instance.props.onHide(instance) === false && !isBeingDestroyed) {\n return;\n }\n\n removeDocumentClickListener();\n popper.style.visibility = 'hidden';\n instance.state.isVisible = false;\n instance.state.isShown = false;\n wasVisibleDuringPreviousUpdate = false;\n\n if (instance.props.interactive) {\n getEventListenersTarget().classList.remove(ACTIVE_CLASS);\n }\n\n var transitionableElements = getTransitionableElements();\n setTransitionDuration(transitionableElements, duration);\n setVisibilityState(transitionableElements, 'hidden');\n onTransitionedOut(duration, function () {\n if (!isScheduledToShow) {\n removeFollowCursorListener();\n }\n\n if (instance.props.aria) {\n getEventListenersTarget().removeAttribute(\"aria-\".concat(instance.props.aria));\n }\n\n instance.popperInstance.disableEventListeners();\n instance.popperInstance.options.placement = instance.props.placement;\n popper.parentNode.removeChild(popper);\n instance.props.onHidden(instance);\n instance.state.isMounted = false;\n });\n }\n /**\n * Destroys the tooltip\n */\n\n\n function destroy(destroyTargetInstances) {\n if (instance.state.isDestroyed) {\n return;\n }\n\n isBeingDestroyed = true; // If the popper is currently mounted to the DOM, we want to ensure it gets\n // hidden and unmounted instantly upon destruction\n\n if (instance.state.isMounted) {\n hide(0);\n }\n\n removeTriggersFromReference();\n delete reference._tippy;\n var target = instance.props.target;\n\n if (target && destroyTargetInstances && isRealElement(reference)) {\n arrayFrom(reference.querySelectorAll(target)).forEach(function (child) {\n if (child._tippy) {\n child._tippy.destroy();\n }\n });\n }\n\n if (instance.popperInstance) {\n instance.popperInstance.destroy();\n }\n\n isBeingDestroyed = false;\n instance.state.isDestroyed = true;\n }\n}\n\n/**\n * Groups an array of instances by taking control of their props during\n * certain lifecycles.\n */\nfunction group(instances) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$delay = _ref.delay,\n delay = _ref$delay === void 0 ? instances[0].props.delay : _ref$delay,\n _ref$duration = _ref.duration,\n duration = _ref$duration === void 0 ? 0 : _ref$duration;\n\n var isAnyTippyOpen = false;\n instances.forEach(function (instance) {\n if (instance._originalProps) {\n instance.set(instance._originalProps);\n } else {\n instance._originalProps = _extends({}, instance.props);\n }\n });\n\n function setIsAnyTippyOpen(value) {\n isAnyTippyOpen = value;\n updateInstances();\n }\n\n function onShow(instance) {\n instance._originalProps.onShow(instance);\n\n instances.forEach(function (instance) {\n instance.set({\n duration: duration\n });\n\n if (instance.state.isVisible) {\n instance.hide();\n }\n });\n setIsAnyTippyOpen(true);\n }\n\n function onHide(instance) {\n instance._originalProps.onHide(instance);\n\n setIsAnyTippyOpen(false);\n }\n\n function onShown(instance) {\n instance._originalProps.onShown(instance);\n\n instance.set({\n duration: instance._originalProps.duration\n });\n }\n\n function updateInstances() {\n instances.forEach(function (instance) {\n instance.set({\n onShow: onShow,\n onShown: onShown,\n onHide: onHide,\n delay: isAnyTippyOpen ? [0, Array.isArray(delay) ? delay[1] : delay] : delay,\n duration: isAnyTippyOpen ? duration : instance._originalProps.duration\n });\n });\n }\n\n updateInstances();\n}\n\nvar globalEventListenersBound = false;\n/**\n * Exported module\n */\n\nfunction tippy(targets, options) {\n validateOptions(options || {}, defaultProps);\n\n if (!globalEventListenersBound) {\n bindGlobalEventListeners();\n globalEventListenersBound = true;\n }\n\n var props = _extends({}, defaultProps, {}, options); // If they are specifying a virtual positioning reference, we need to polyfill\n // some native DOM props\n\n\n if (isBareVirtualElement(targets)) {\n polyfillElementPrototypeProperties(targets);\n }\n\n var instances = getArrayOfElements(targets).reduce(function (acc, reference) {\n var instance = reference && createTippy(reference, props);\n\n if (instance) {\n acc.push(instance);\n }\n\n return acc;\n }, []);\n return isSingular(targets) ? instances[0] : instances;\n}\n/**\n * Static props\n */\n\n\ntippy.version = version;\ntippy.defaults = defaultProps;\n/**\n * Static methods\n */\n\ntippy.setDefaults = function (partialDefaults) {\n Object.keys(partialDefaults).forEach(function (key) {\n // @ts-ignore\n defaultProps[key] = partialDefaults[key];\n });\n};\n\ntippy.hideAll = hideAll;\ntippy.group = group;\n/**\n * Auto-init tooltips for elements with a `data-tippy=\"...\"` attribute\n */\n\nfunction autoInit() {\n arrayFrom(document.querySelectorAll('[data-tippy]')).forEach(function (el) {\n var content = el.getAttribute('data-tippy');\n\n if (content) {\n tippy(el, {\n content: content\n });\n }\n });\n}\n\nif (isBrowser) {\n setTimeout(autoInit);\n}\n\n/**\n * Injects a string of CSS styles to a style node in \n */\n\nfunction injectCSS(css) {\n if (isBrowser) {\n var style = document.createElement('style');\n style.type = 'text/css';\n style.textContent = css;\n style.setAttribute('data-tippy-stylesheet', '');\n var head = document.head;\n var firstStyleOrLinkTag = head.querySelector('style,link');\n\n if (firstStyleOrLinkTag) {\n head.insertBefore(style, firstStyleOrLinkTag);\n } else {\n head.appendChild(style);\n }\n }\n}\n\ninjectCSS(css);\n\nexport default tippy;\n//# sourceMappingURL=index.all.js.map\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).basicLightbox=e()}}((function(){return function e(n,t,o){function r(c,u){if(!t[c]){if(!n[c]){var s=\"function\"==typeof require&&require;if(!u&&s)return s(c,!0);if(i)return i(c,!0);var a=new Error(\"Cannot find module '\"+c+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var l=t[c]={exports:{}};n[c][0].call(l.exports,(function(e){return r(n[c][1][e]||e)}),l,l.exports,e,n,t,o)}return t[c].exports}for(var i=\"function\"==typeof require&&require,c=0;c1&&void 0!==arguments[1]&&arguments[1],t=document.createElement(\"div\");return t.innerHTML=e.trim(),!0===n?t.children:t.firstChild},r=function(e,n){var t=e.children;return 1===t.length&&t[0].tagName===n},i=function(e){return null!=(e=e||document.querySelector(\".basicLightbox\"))&&!0===e.ownerDocument.body.contains(e)};t.visible=i;t.create=function(e,n){var t=function(e,n){var t=o('\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t')),i=t.querySelector(\".basicLightbox__placeholder\");e.forEach((function(e){return i.appendChild(e)}));var c=r(i,\"IMG\"),u=r(i,\"VIDEO\"),s=r(i,\"IFRAME\");return!0===c&&t.classList.add(\"basicLightbox--img\"),!0===u&&t.classList.add(\"basicLightbox--video\"),!0===s&&t.classList.add(\"basicLightbox--iframe\"),t}(e=function(e){var n=\"string\"==typeof e,t=e instanceof HTMLElement==1;if(!1===n&&!1===t)throw new Error(\"Content must be a DOM element/node or string\");return!0===n?Array.from(o(e,!0)):\"TEMPLATE\"===e.tagName?[e.content.cloneNode(!0)]:Array.from(e.children)}(e),n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(null==(e=Object.assign({},e)).closable&&(e.closable=!0),null==e.className&&(e.className=\"\"),null==e.onShow&&(e.onShow=function(){}),null==e.onClose&&(e.onClose=function(){}),\"boolean\"!=typeof e.closable)throw new Error(\"Property `closable` must be a boolean\");if(\"string\"!=typeof e.className)throw new Error(\"Property `className` must be a string\");if(\"function\"!=typeof e.onShow)throw new Error(\"Property `onShow` must be a function\");if(\"function\"!=typeof e.onClose)throw new Error(\"Property `onClose` must be a function\");return e}(n)),c=function(e){return!1!==n.onClose(u)&&function(e,n){return e.classList.remove(\"basicLightbox--visible\"),setTimeout((function(){return!1===i(e)||e.parentElement.removeChild(e),n()}),410),!0}(t,(function(){if(\"function\"==typeof e)return e(u)}))};!0===n.closable&&t.addEventListener(\"click\",(function(e){e.target===t&&c()}));var u={element:function(){return t},visible:function(){return i(t)},show:function(e){return!1!==n.onShow(u)&&function(e,n){return document.body.appendChild(e),setTimeout((function(){requestAnimationFrame((function(){return e.classList.add(\"basicLightbox--visible\"),n()}))}),10),!0}(t,(function(){if(\"function\"==typeof e)return e(u)}))},close:c};return u}},{}]},{},[1])(1)}));","/* Web Font Loader v1.6.28 - (c) Adobe Systems, Google. License: Apache 2.0 */(function(){function aa(a,b,c){return a.call.apply(a.bind,arguments)}function ba(a,b,c){if(!a)throw Error();if(2=b.f?e():a.fonts.load(fa(b.a),b.h).then(function(a){1<=a.length?d():setTimeout(f,25)},function(){e()})}f()}),e=null,f=new Promise(function(a,d){e=setTimeout(d,b.f)});Promise.race([f,d]).then(function(){e&&(clearTimeout(e),e=null);b.g(b.a)},function(){b.j(b.a)})};function Q(a,b,c,d,e,f,g){this.v=a;this.B=b;this.c=c;this.a=d;this.s=g||\"BESbswy\";this.f={};this.w=e||3E3;this.u=f||null;this.m=this.j=this.h=this.g=null;this.g=new M(this.c,this.s);this.h=new M(this.c,this.s);this.j=new M(this.c,this.s);this.m=new M(this.c,this.s);a=new G(this.a.c+\",serif\",J(this.a));a=O(a);this.g.a.style.cssText=a;a=new G(this.a.c+\",sans-serif\",J(this.a));a=O(a);this.h.a.style.cssText=a;a=new G(\"serif\",J(this.a));a=O(a);this.j.a.style.cssText=a;a=new G(\"sans-serif\",J(this.a));a=\nO(a);this.m.a.style.cssText=a;N(this.g);N(this.h);N(this.j);N(this.m)}var R={D:\"serif\",C:\"sans-serif\"},S=null;function T(){if(null===S){var a=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))/.exec(window.navigator.userAgent);S=!!a&&(536>parseInt(a[1],10)||536===parseInt(a[1],10)&&11>=parseInt(a[2],10))}return S}Q.prototype.start=function(){this.f.serif=this.j.a.offsetWidth;this.f[\"sans-serif\"]=this.m.a.offsetWidth;this.A=q();U(this)};\nfunction la(a,b,c){for(var d in R)if(R.hasOwnProperty(d)&&b===a.f[R[d]]&&c===a.f[R[d]])return!0;return!1}function U(a){var b=a.g.a.offsetWidth,c=a.h.a.offsetWidth,d;(d=b===a.f.serif&&c===a.f[\"sans-serif\"])||(d=T()&&la(a,b,c));d?q()-a.A>=a.w?T()&&la(a,b,c)&&(null===a.u||a.u.hasOwnProperty(a.a.c))?V(a,a.v):V(a,a.B):ma(a):V(a,a.v)}function ma(a){setTimeout(p(function(){U(this)},a),50)}function V(a,b){setTimeout(p(function(){v(this.g.a);v(this.h.a);v(this.j.a);v(this.m.a);b(this.a)},a),0)};function W(a,b,c){this.c=a;this.a=b;this.f=0;this.m=this.j=!1;this.s=c}var X=null;W.prototype.g=function(a){var b=this.a;b.g&&w(b.f,[b.a.c(\"wf\",a.c,J(a).toString(),\"active\")],[b.a.c(\"wf\",a.c,J(a).toString(),\"loading\"),b.a.c(\"wf\",a.c,J(a).toString(),\"inactive\")]);K(b,\"fontactive\",a);this.m=!0;na(this)};\nW.prototype.h=function(a){var b=this.a;if(b.g){var c=y(b.f,b.a.c(\"wf\",a.c,J(a).toString(),\"active\")),d=[],e=[b.a.c(\"wf\",a.c,J(a).toString(),\"loading\")];c||d.push(b.a.c(\"wf\",a.c,J(a).toString(),\"inactive\"));w(b.f,d,e)}K(b,\"fontinactive\",a);na(this)};function na(a){0==--a.f&&a.j&&(a.m?(a=a.a,a.g&&w(a.f,[a.a.c(\"wf\",\"active\")],[a.a.c(\"wf\",\"loading\"),a.a.c(\"wf\",\"inactive\")]),K(a,\"active\")):L(a.a))};function oa(a){this.j=a;this.a=new ja;this.h=0;this.f=this.g=!0}oa.prototype.load=function(a){this.c=new ca(this.j,a.context||this.j);this.g=!1!==a.events;this.f=!1!==a.classes;pa(this,new ha(this.c,a),a)};\nfunction qa(a,b,c,d,e){var f=0==--a.h;(a.f||a.g)&&setTimeout(function(){var a=e||null,m=d||null||{};if(0===c.length&&f)L(b.a);else{b.f+=c.length;f&&(b.j=f);var h,l=[];for(h=0;h encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp(token, 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn decodeURIComponent(components.join(''));\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher);\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher);\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n","var win = window;\n\nexport var raf = win.requestAnimationFrame\n || win.webkitRequestAnimationFrame\n || win.mozRequestAnimationFrame\n || win.msRequestAnimationFrame\n || function(cb) { return setTimeout(cb, 16); };\n","var win = window;\n\nexport var caf = win.cancelAnimationFrame\n || win.mozCancelAnimationFrame\n || function(id){ clearTimeout(id); };\n","export function extend() {\n var obj, name, copy,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length;\n\n for (; i < length; i++) {\n if ((obj = arguments[i]) !== null) {\n for (name in obj) {\n copy = obj[name];\n\n if (target === copy) {\n continue;\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n}","export function checkStorageValue (value) {\n return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\n}","export function setLocalStorage(storage, key, value, access) {\n if (access) {\n try { storage.setItem(key, value); } catch (e) {}\n }\n return value;\n}","export function getBody () {\n var doc = document,\n body = doc.body;\n\n if (!body) {\n body = doc.createElement('body');\n body.fake = true;\n }\n\n return body;\n}","export var docElement = document.documentElement;","import { docElement } from './docElement.js';\n\nexport function setFakeBody (body) {\n var docOverflow = '';\n if (body.fake) {\n docOverflow = docElement.style.overflow;\n //avoid crashing IE8, if background image is used\n body.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n body.style.overflow = docElement.style.overflow = 'hidden';\n docElement.appendChild(body);\n }\n\n return docOverflow;\n}","import { docElement } from './docElement.js';\n\nexport function resetFakeBody (body, docOverflow) {\n if (body.fake) {\n body.remove();\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n // eslint-disable-next-line\n docElement.offsetHeight;\n }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function addCSSRule(sheet, selector, rules, index) {\n // return raf(function() {\n 'insertRule' in sheet ?\n sheet.insertRule(selector + '{' + rules + '}', index) :\n sheet.addRule(selector, rules, index);\n // });\n}","export function getCssRulesLength(sheet) {\n var rule = ('insertRule' in sheet) ? sheet.cssRules : sheet.rules;\n return rule.length;\n}","// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\nexport function forEach (arr, callback, scope) {\n for (var i = 0, l = arr.length; i < l; i++) {\n callback.call(scope, arr[i], i);\n }\n}","export var classListSupport = 'classList' in document.createElement('_');","import { classListSupport } from './classListSupport.js';\n\nvar hasClass = classListSupport ?\n function (el, str) { return el.classList.contains(str); } :\n function (el, str) { return el.className.indexOf(str) >= 0; };\n\nexport { classListSupport, hasClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar addClass = classListSupport ?\n function (el, str) {\n if (!hasClass(el, str)) { el.classList.add(str); }\n } :\n function (el, str) {\n if (!hasClass(el, str)) { el.className += ' ' + str; }\n };\n\nexport { addClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar removeClass = classListSupport ?\n function (el, str) {\n if (hasClass(el, str)) { el.classList.remove(str); }\n } :\n function (el, str) {\n if (hasClass(el, str)) { el.className = el.className.replace(str, ''); }\n };\n\nexport { removeClass };","export function hasAttr(el, attr) {\n return el.hasAttribute(attr);\n}","export function getAttr(el, attr) {\n return el.getAttribute(attr);\n}","export function isNodeList(el) {\n // Only NodeList has the \"item()\" function\n return typeof el.item !== \"undefined\"; \n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function setAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n if (Object.prototype.toString.call(attrs) !== '[object Object]') { return; }\n\n for (var i = els.length; i--;) {\n for(var key in attrs) {\n els[i].setAttribute(key, attrs[key]);\n }\n }\n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function removeAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n attrs = (attrs instanceof Array) ? attrs : [attrs];\n\n var attrLength = attrs.length;\n for (var i = els.length; i--;) {\n for (var j = attrLength; j--;) {\n els[i].removeAttribute(attrs[j]);\n }\n }\n}","export function arrayFromNodeList (nl) {\n var arr = [];\n for (var i = 0, l = nl.length; i < l; i++) {\n arr.push(nl[i]);\n }\n return arr;\n}","export function hideElement(el, forceHide) {\n if (el.style.display !== 'none') { el.style.display = 'none'; }\n}","export function showElement(el, forceHide) {\n if (el.style.display === 'none') { el.style.display = ''; }\n}","export function isVisible(el) {\n return window.getComputedStyle(el).display !== 'none';\n}","export function whichProperty(props){\n if (typeof props === 'string') {\n var arr = [props],\n Props = props.charAt(0).toUpperCase() + props.substr(1),\n prefixes = ['Webkit', 'Moz', 'ms', 'O'];\n \n prefixes.forEach(function(prefix) {\n if (prefix !== 'ms' || props === 'transform') {\n arr.push(prefix + Props);\n }\n });\n\n props = arr;\n }\n\n var el = document.createElement('fakeelement'),\n len = props.length;\n for(var i = 0; i < props.length; i++){\n var prop = props[i];\n if( el.style[prop] !== undefined ){ return prop; }\n }\n\n return false; // explicit for ie9-\n}\n","// get transitionend, animationend based on transitionDuration\n// @propin: string\n// @propOut: string, first-letter uppercase\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\nexport function getEndProperty(propIn, propOut) {\n var endProp = false;\n if (/^Webkit/.test(propIn)) {\n endProp = 'webkit' + propOut + 'End';\n } else if (/^O/.test(propIn)) {\n endProp = 'o' + propOut + 'End';\n } else if (propIn) {\n endProp = propOut.toLowerCase() + 'end';\n }\n return endProp;\n}","// Test via a getter in the options object to see if the passive property is accessed\nvar supportsPassive = false;\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n} catch (e) {}\nexport var passiveOption = supportsPassive ? { passive: true } : false;","import { passiveOption } from './passiveOption.js';\n\nexport function addEvents(el, obj, preventScrolling) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\n el.addEventListener(prop, obj[prop], option);\n }\n}","import { passiveOption } from './passiveOption.js';\n\nexport function removeEvents(el, obj) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\n el.removeEventListener(prop, obj[prop], option);\n }\n}","export function Events() {\n return {\n topics: {},\n on: function (eventName, fn) {\n this.topics[eventName] = this.topics[eventName] || [];\n this.topics[eventName].push(fn);\n },\n off: function(eventName, fn) {\n if (this.topics[eventName]) {\n for (var i = 0; i < this.topics[eventName].length; i++) {\n if (this.topics[eventName][i] === fn) {\n this.topics[eventName].splice(i, 1);\n break;\n }\n }\n }\n },\n emit: function (eventName, data) {\n data.type = eventName;\n if (this.topics[eventName]) {\n this.topics[eventName].forEach(function(fn) {\n fn(data, eventName);\n });\n }\n }\n };\n};","// Object.keys\nif (!Object.keys) {\n Object.keys = function(object) {\n var keys = [];\n for (var name in object) {\n if (Object.prototype.hasOwnProperty.call(object, name)) {\n keys.push(name);\n }\n }\n return keys;\n };\n}\n\n// ChildNode.remove\nif(!(\"remove\" in Element.prototype)){\n Element.prototype.remove = function(){\n if(this.parentNode) {\n this.parentNode.removeChild(this);\n }\n };\n}\n\nimport { raf } from './helpers/raf.js';\nimport { caf } from './helpers/caf.js';\nimport { extend } from './helpers/extend.js';\nimport { checkStorageValue } from './helpers/checkStorageValue.js';\nimport { setLocalStorage } from './helpers/setLocalStorage.js';\nimport { getSlideId } from './helpers/getSlideId.js';\nimport { calc } from './helpers/calc.js';\nimport { percentageLayout } from './helpers/percentageLayout.js';\nimport { mediaquerySupport } from './helpers/mediaquerySupport.js';\nimport { createStyleSheet } from './helpers/createStyleSheet.js';\nimport { addCSSRule } from './helpers/addCSSRule.js';\nimport { removeCSSRule } from './helpers/removeCSSRule.js';\nimport { getCssRulesLength } from './helpers/getCssRulesLength.js';\nimport { toDegree } from './helpers/toDegree.js';\nimport { getTouchDirection } from './helpers/getTouchDirection.js';\nimport { forEach } from './helpers/forEach.js';\nimport { hasClass } from './helpers/hasClass.js';\nimport { addClass } from './helpers/addClass.js';\nimport { removeClass } from './helpers/removeClass.js';\nimport { hasAttr } from './helpers/hasAttr.js';\nimport { getAttr } from './helpers/getAttr.js';\nimport { setAttrs } from './helpers/setAttrs.js';\nimport { removeAttrs } from './helpers/removeAttrs.js';\nimport { arrayFromNodeList } from './helpers/arrayFromNodeList.js';\nimport { hideElement } from './helpers/hideElement.js';\nimport { showElement } from './helpers/showElement.js';\nimport { isVisible } from './helpers/isVisible.js';\nimport { whichProperty } from './helpers/whichProperty.js';\nimport { has3DTransforms } from './helpers/has3DTransforms.js';\nimport { getEndProperty } from './helpers/getEndProperty.js';\nimport { addEvents } from './helpers/addEvents.js';\nimport { removeEvents } from './helpers/removeEvents.js';\nimport { Events } from './helpers/events.js';\nimport { jsTransform } from './helpers/jsTransform.js';\n\nexport var tns = function(options) {\n options = extend({\n container: '.slider',\n mode: 'carousel',\n axis: 'horizontal',\n items: 1,\n gutter: 0,\n edgePadding: 0,\n fixedWidth: false,\n autoWidth: false,\n viewportMax: false,\n slideBy: 1,\n center: false,\n controls: true,\n controlsPosition: 'top',\n controlsText: ['prev', 'next'],\n controlsContainer: false,\n prevButton: false,\n nextButton: false,\n nav: true,\n navPosition: 'top',\n navContainer: false,\n navAsThumbnails: false,\n arrowKeys: false,\n speed: 300,\n autoplay: false,\n autoplayPosition: 'top',\n autoplayTimeout: 5000,\n autoplayDirection: 'forward',\n autoplayText: ['start', 'stop'],\n autoplayHoverPause: false,\n autoplayButton: false,\n autoplayButtonOutput: true,\n autoplayResetOnVisibility: true,\n animateIn: 'tns-fadeIn',\n animateOut: 'tns-fadeOut',\n animateNormal: 'tns-normal',\n animateDelay: false,\n loop: true,\n rewind: false,\n autoHeight: false,\n responsive: false,\n lazyload: false,\n lazyloadSelector: '.tns-lazy-img',\n touch: true,\n mouseDrag: false,\n swipeAngle: 15,\n nested: false,\n preventActionWhenRunning: false,\n preventScrollOnTouch: false,\n freezable: true,\n onInit: false,\n useLocalStorage: true,\n nonce: false\n }, options || {});\n\n var doc = document,\n win = window,\n KEYS = {\n ENTER: 13,\n SPACE: 32,\n LEFT: 37,\n RIGHT: 39\n },\n tnsStorage = {},\n localStorageAccess = options.useLocalStorage;\n\n if (localStorageAccess) {\n // check browser version and local storage access\n var browserInfo = navigator.userAgent;\n var uid = new Date;\n\n try {\n tnsStorage = win.localStorage;\n if (tnsStorage) {\n tnsStorage.setItem(uid, uid);\n localStorageAccess = tnsStorage.getItem(uid) == uid;\n tnsStorage.removeItem(uid);\n } else {\n localStorageAccess = false;\n }\n if (!localStorageAccess) { tnsStorage = {}; }\n } catch(e) {\n localStorageAccess = false;\n }\n\n if (localStorageAccess) {\n // remove storage when browser version changes\n if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\n ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function(item) { tnsStorage.removeItem(item); });\n }\n // update browserInfo\n localStorage['tnsApp'] = browserInfo;\n }\n }\n\n var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\n PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\n CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\n TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\n HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\n TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\n TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\n ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\n ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\n TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\n ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess);\n\n // get element nodes from selectors\n var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\n tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'],\n optionsElements = {};\n\n tnsList.forEach(function(item) {\n if (typeof options[item] === 'string') {\n var str = options[item],\n el = doc.querySelector(str);\n optionsElements[item] = str;\n\n if (el && el.nodeName) {\n options[item] = el;\n } else {\n if (supportConsoleWarn) { console.warn('Can\\'t find', options[item]); }\n return;\n }\n }\n });\n\n // make sure at least 1 slide\n if (options.container.children.length < 1) {\n if (supportConsoleWarn) { console.warn('No slides found in', options.container); }\n return;\n }\n\n // update options\n var responsive = options.responsive,\n nested = options.nested,\n carousel = options.mode === 'carousel' ? true : false;\n\n if (responsive) {\n // apply responsive[0] to options and remove it\n if (0 in responsive) {\n options = extend(options, responsive[0]);\n delete responsive[0];\n }\n\n var responsiveTem = {};\n for (var key in responsive) {\n var val = responsive[key];\n // update responsive\n // from: 300: 2\n // to:\n // 300: {\n // items: 2\n // }\n val = typeof val === 'number' ? {items: val} : val;\n responsiveTem[key] = val;\n }\n responsive = responsiveTem;\n responsiveTem = null;\n }\n\n // update options\n function updateOptions (obj) {\n for (var key in obj) {\n if (!carousel) {\n if (key === 'slideBy') { obj[key] = 'page'; }\n if (key === 'edgePadding') { obj[key] = false; }\n if (key === 'autoHeight') { obj[key] = false; }\n }\n\n // update responsive options\n if (key === 'responsive') { updateOptions(obj[key]); }\n }\n }\n if (!carousel) { updateOptions(options); }\n\n\n // === define and set variables ===\n if (!carousel) {\n options.axis = 'horizontal';\n options.slideBy = 'page';\n options.edgePadding = false;\n\n var animateIn = options.animateIn,\n animateOut = options.animateOut,\n animateDelay = options.animateDelay,\n animateNormal = options.animateNormal;\n }\n\n var horizontal = options.axis === 'horizontal' ? true : false,\n outerWrapper = doc.createElement('div'),\n innerWrapper = doc.createElement('div'),\n middleWrapper,\n container = options.container,\n containerParent = container.parentNode,\n containerHTML = container.outerHTML,\n slideItems = container.children,\n slideCount = slideItems.length,\n breakpointZone,\n windowWidth = getWindowWidth(),\n isOn = false;\n if (responsive) { setBreakpointZone(); }\n if (carousel) { container.className += ' tns-vpfix'; }\n\n // fixedWidth: viewport > rightBoundary > indexMax\n var autoWidth = options.autoWidth,\n fixedWidth = getOption('fixedWidth'),\n edgePadding = getOption('edgePadding'),\n gutter = getOption('gutter'),\n viewport = getViewportWidth(),\n center = getOption('center'),\n items = !autoWidth ? Math.floor(getOption('items')) : 1,\n slideBy = getOption('slideBy'),\n viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\n arrowKeys = getOption('arrowKeys'),\n speed = getOption('speed'),\n rewind = options.rewind,\n loop = rewind ? false : options.loop,\n autoHeight = getOption('autoHeight'),\n controls = getOption('controls'),\n controlsText = getOption('controlsText'),\n nav = getOption('nav'),\n touch = getOption('touch'),\n mouseDrag = getOption('mouseDrag'),\n autoplay = getOption('autoplay'),\n autoplayTimeout = getOption('autoplayTimeout'),\n autoplayText = getOption('autoplayText'),\n autoplayHoverPause = getOption('autoplayHoverPause'),\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\n sheet = createStyleSheet(null, getOption('nonce')),\n lazyload = options.lazyload,\n lazyloadSelector = options.lazyloadSelector,\n slidePositions, // collection of slide positions\n slideItemsOut = [],\n cloneCount = loop ? getCloneCountForLoop() : 0,\n slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\n hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\n rightBoundary = fixedWidth ? getRightBoundary() : null,\n updateIndexBeforeTransform = (!carousel || !loop) ? true : false,\n // transform\n transformAttr = horizontal ? 'left' : 'top',\n transformPrefix = '',\n transformPostfix = '',\n // index\n getIndexMax = (function () {\n if (fixedWidth) {\n return function() { return center && !loop ? slideCount - 1 : Math.ceil(- rightBoundary / (fixedWidth + gutter)); };\n } else if (autoWidth) {\n return function() {\n for (var i = 0; i < slideCountNew; i++) {\n if (slidePositions[i] >= - rightBoundary) { return i; }\n }\n };\n } else {\n return function() {\n if (center && carousel && !loop) {\n return slideCount - 1;\n } else {\n return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\n }\n };\n }\n })(),\n index = getStartIndex(getOption('startIndex')),\n indexCached = index,\n displayIndex = getCurrentSlide(),\n indexMin = 0,\n indexMax = !autoWidth ? getIndexMax() : null,\n // resize\n resizeTimer,\n preventActionWhenRunning = options.preventActionWhenRunning,\n swipeAngle = options.swipeAngle,\n moveDirectionExpected = swipeAngle ? '?' : true,\n running = false,\n onInit = options.onInit,\n events = new Events(),\n // id, class\n newContainerClasses = ' tns-slider tns-' + options.mode,\n slideId = container.id || getSlideId(),\n disable = getOption('disable'),\n disabled = false,\n freezable = options.freezable,\n freeze = freezable && !autoWidth ? getFreeze() : false,\n frozen = false,\n controlsEvents = {\n 'click': onControlsClick,\n 'keydown': onControlsKeydown\n },\n navEvents = {\n 'click': onNavClick,\n 'keydown': onNavKeydown\n },\n hoverEvents = {\n 'mouseover': mouseoverPause,\n 'mouseout': mouseoutRestart\n },\n visibilityEvent = {'visibilitychange': onVisibilityChange},\n docmentKeydownEvent = {'keydown': onDocumentKeydown},\n touchEvents = {\n 'touchstart': onPanStart,\n 'touchmove': onPanMove,\n 'touchend': onPanEnd,\n 'touchcancel': onPanEnd\n }, dragEvents = {\n 'mousedown': onPanStart,\n 'mousemove': onPanMove,\n 'mouseup': onPanEnd,\n 'mouseleave': onPanEnd\n },\n hasControls = hasOption('controls'),\n hasNav = hasOption('nav'),\n navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\n hasAutoplay = hasOption('autoplay'),\n hasTouch = hasOption('touch'),\n hasMouseDrag = hasOption('mouseDrag'),\n slideActiveClass = 'tns-slide-active',\n slideClonedClass = 'tns-slide-cloned',\n imgCompleteClass = 'tns-complete',\n imgEvents = {\n 'load': onImgLoaded,\n 'error': onImgFailed\n },\n imgsComplete,\n liveregionCurrent,\n preventScroll = options.preventScrollOnTouch === 'force' ? true : false;\n\n // controls\n if (hasControls) {\n var controlsContainer = options.controlsContainer,\n controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\n prevButton = options.prevButton,\n nextButton = options.nextButton,\n prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\n nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\n prevIsButton,\n nextIsButton;\n }\n\n // nav\n if (hasNav) {\n var navContainer = options.navContainer,\n navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\n navItems,\n pages = autoWidth ? slideCount : getPages(),\n pagesCached = 0,\n navClicked = -1,\n navCurrentIndex = getCurrentNavIndex(),\n navCurrentIndexCached = navCurrentIndex,\n navActiveClass = 'tns-nav-active',\n navStr = 'Carousel Page ',\n navStrCurrent = ' (Current Slide)';\n }\n\n // autoplay\n if (hasAutoplay) {\n var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\n autoplayButton = options.autoplayButton,\n autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\n autoplayHtmlStrings = ['', ' animation'],\n autoplayTimer,\n animating,\n autoplayHoverPaused,\n autoplayUserPaused,\n autoplayVisibilityPaused;\n }\n\n if (hasTouch || hasMouseDrag) {\n var initPosition = {},\n lastPosition = {},\n translateInit,\n disX,\n disY,\n panStart = false,\n rafIndex,\n getDist = horizontal ?\n function(a, b) { return a.x - b.x; } :\n function(a, b) { return a.y - b.y; };\n }\n\n // disable slider when slidecount <= items\n if (!autoWidth) { resetVariblesWhenDisable(disable || freeze); }\n\n if (TRANSFORM) {\n transformAttr = TRANSFORM;\n transformPrefix = 'translate';\n\n if (HAS3DTRANSFORMS) {\n transformPrefix += horizontal ? '3d(' : '3d(0px, ';\n transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\n } else {\n transformPrefix += horizontal ? 'X(' : 'Y(';\n transformPostfix = ')';\n }\n\n }\n\n if (carousel) { container.className = container.className.replace('tns-vpfix', ''); }\n initStructure();\n initSheet();\n initSliderTransform();\n\n // === COMMON FUNCTIONS === //\n function resetVariblesWhenDisable (condition) {\n if (condition) {\n controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\n }\n }\n\n function getCurrentSlide () {\n var tem = carousel ? index - cloneCount : index;\n while (tem < 0) { tem += slideCount; }\n return tem%slideCount + 1;\n }\n\n function getStartIndex (ind) {\n ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\n return carousel ? ind + cloneCount : ind;\n }\n\n function getAbsIndex (i) {\n if (i == null) { i = index; }\n\n if (carousel) { i -= cloneCount; }\n while (i < 0) { i += slideCount; }\n\n return Math.floor(i%slideCount);\n }\n\n function getCurrentNavIndex () {\n var absIndex = getAbsIndex(),\n result;\n\n result = navAsThumbnails ? absIndex :\n fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) :\n Math.floor(absIndex / items);\n\n // set active nav to the last one when reaches the right edge\n if (!loop && carousel && index === indexMax) { result = pages - 1; }\n\n return result;\n }\n\n function getItemsMax () {\n // fixedWidth or autoWidth while viewportMax is not available\n if (autoWidth || (fixedWidth && !viewportMax)) {\n return slideCount - 1;\n // most cases\n } else {\n var str = fixedWidth ? 'fixedWidth' : 'items',\n arr = [];\n\n if (fixedWidth || options[str] < slideCount) { arr.push(options[str]); }\n\n if (responsive) {\n for (var bp in responsive) {\n var tem = responsive[bp][str];\n if (tem && (fixedWidth || tem < slideCount)) { arr.push(tem); }\n }\n }\n\n if (!arr.length) { arr.push(0); }\n\n return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\n }\n }\n\n function getCloneCountForLoop () {\n var itemsMax = getItemsMax(),\n result = carousel ? Math.ceil((itemsMax * 5 - slideCount)/2) : (itemsMax * 4 - slideCount);\n result = Math.max(itemsMax, result);\n\n return hasOption('edgePadding') ? result + 1 : result;\n }\n\n function getWindowWidth () {\n return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\n }\n\n function getInsertPosition (pos) {\n return pos === 'top' ? 'afterbegin' : 'beforeend';\n }\n\n function getClientWidth (el) {\n if (el == null) { return; }\n var div = doc.createElement('div'), rect, width;\n el.appendChild(div);\n rect = div.getBoundingClientRect();\n width = rect.right - rect.left;\n div.remove();\n return width || getClientWidth(el.parentNode);\n }\n\n function getViewportWidth () {\n var gap = edgePadding ? edgePadding * 2 - gutter : 0;\n return getClientWidth(containerParent) - gap;\n }\n\n function hasOption (item) {\n if (options[item]) {\n return true;\n } else {\n if (responsive) {\n for (var bp in responsive) {\n if (responsive[bp][item]) { return true; }\n }\n }\n return false;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n function getOption (item, ww) {\n if (ww == null) { ww = windowWidth; }\n\n if (item === 'items' && fixedWidth) {\n return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\n\n } else {\n var result = options[item];\n\n if (responsive) {\n for (var bp in responsive) {\n // bp: convert string to number\n if (ww >= parseInt(bp)) {\n if (item in responsive[bp]) { result = responsive[bp][item]; }\n }\n }\n }\n\n if (item === 'slideBy' && result === 'page') { result = getOption('items'); }\n if (!carousel && (item === 'slideBy' || item === 'items')) { result = Math.floor(result); }\n\n return result;\n }\n }\n\n function getSlideMarginLeft (i) {\n return CALC ?\n CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' :\n i * 100 / slideCountNew + '%';\n }\n\n function getInnerWrapperStyles (edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\n var str = '';\n\n if (edgePaddingTem !== undefined) {\n var gap = edgePaddingTem;\n if (gutterTem) { gap -= gutterTem; }\n str = horizontal ?\n 'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' :\n 'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\n } else if (gutterTem && !fixedWidthTem) {\n var gutterTemUnit = '-' + gutterTem + 'px',\n dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\n str = 'margin: 0 ' + dir + ';'\n }\n\n if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) { str += getTransitionDurationStyle(speedTem); }\n return str;\n }\n\n function getContainerWidth (fixedWidthTem, gutterTem, itemsTem) {\n if (fixedWidthTem) {\n return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\n } else {\n return CALC ?\n CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' :\n slideCountNew * 100 / itemsTem + '%';\n }\n }\n\n function getSlideWidthStyle (fixedWidthTem, gutterTem, itemsTem) {\n var width;\n\n if (fixedWidthTem) {\n width = (fixedWidthTem + gutterTem) + 'px';\n } else {\n if (!carousel) { itemsTem = Math.floor(itemsTem); }\n var dividend = carousel ? slideCountNew : itemsTem;\n width = CALC ?\n CALC + '(100% / ' + dividend + ')' :\n 100 / dividend + '%';\n }\n\n width = 'width:' + width;\n\n // inner slider: overwrite outer slider styles\n return nested !== 'inner' ? width + ';' : width + ' !important;';\n }\n\n function getSlideGutterStyle (gutterTem) {\n var str = '';\n\n // gutter maybe interger || 0\n // so can't use 'if (gutter)'\n if (gutterTem !== false) {\n var prop = horizontal ? 'padding-' : 'margin-',\n dir = horizontal ? 'right' : 'bottom';\n str = prop + dir + ': ' + gutterTem + 'px;';\n }\n\n return str;\n }\n\n function getCSSPrefix (name, num) {\n var prefix = name.substring(0, name.length - num).toLowerCase();\n if (prefix) { prefix = '-' + prefix + '-'; }\n\n return prefix;\n }\n\n function getTransitionDurationStyle (speed) {\n return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\n }\n\n function getAnimationDurationStyle (speed) {\n return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\n }\n\n function initStructure () {\n var classOuter = 'tns-outer',\n classInner = 'tns-inner',\n hasGutter = hasOption('gutter');\n\n outerWrapper.className = classOuter;\n innerWrapper.className = classInner;\n outerWrapper.id = slideId + '-ow';\n innerWrapper.id = slideId + '-iw';\n\n // set container properties\n if (container.id === '') { container.id = slideId; }\n newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\n newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\n if (autoWidth) { newContainerClasses += ' tns-autowidth'; }\n newContainerClasses += ' tns-' + options.axis;\n container.className += newContainerClasses;\n\n // add constrain layer for carousel\n if (carousel) {\n middleWrapper = doc.createElement('div');\n middleWrapper.id = slideId + '-mw';\n middleWrapper.className = 'tns-ovh';\n\n outerWrapper.appendChild(middleWrapper);\n middleWrapper.appendChild(innerWrapper);\n } else {\n outerWrapper.appendChild(innerWrapper);\n }\n\n if (autoHeight) {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.className += ' tns-ah';\n }\n\n containerParent.insertBefore(outerWrapper, container);\n innerWrapper.appendChild(container);\n\n // add id, class, aria attributes\n // before clone slides\n forEach(slideItems, function(item, i) {\n addClass(item, 'tns-item');\n if (!item.id) { item.id = slideId + '-item' + i; }\n if (!carousel && animateNormal) { addClass(item, animateNormal); }\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n });\n\n // ## clone slides\n // carousel: n + slides + n\n // gallery: slides + n\n if (cloneCount) {\n var fragmentBefore = doc.createDocumentFragment(),\n fragmentAfter = doc.createDocumentFragment();\n\n for (var j = cloneCount; j--;) {\n var num = j%slideCount,\n cloneFirst = slideItems[num].cloneNode(true);\n addClass(cloneFirst, slideClonedClass);\n removeAttrs(cloneFirst, 'id');\n fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\n\n if (carousel) {\n var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\n addClass(cloneLast, slideClonedClass);\n removeAttrs(cloneLast, 'id');\n fragmentBefore.appendChild(cloneLast);\n }\n }\n\n container.insertBefore(fragmentBefore, container.firstChild);\n container.appendChild(fragmentAfter);\n slideItems = container.children;\n }\n\n }\n\n function initSliderTransform () {\n // ## images loaded/failed\n if (hasOption('autoHeight') || autoWidth || !horizontal) {\n var imgs = container.querySelectorAll('img');\n\n // add img load event listener\n forEach(imgs, function(img) {\n var src = img.src;\n\n if (!lazyload) {\n // not data img\n if (src && src.indexOf('data:image') < 0) {\n img.src = '';\n addEvents(img, imgEvents);\n addClass(img, 'loading');\n\n img.src = src;\n // data img\n } else {\n imgLoaded(img);\n }\n }\n });\n\n // set imgsComplete\n raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), function() { imgsComplete = true; }); });\n\n // reset imgs for auto height: check visible imgs only\n if (hasOption('autoHeight')) { imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1)); }\n\n lazyload ? initSliderTransformStyleCheck() : raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck); });\n\n } else {\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n }\n\n function initSliderTransformStyleCheck () {\n if (autoWidth && slideCount > 1) {\n // check styles application\n var num = loop ? index : slideCount - 1;\n\n (function stylesApplicationCheck() {\n var left = slideItems[num].getBoundingClientRect().left;\n var right = slideItems[num - 1].getBoundingClientRect().right;\n\n (Math.abs(left - right) <= 1) ?\n initSliderTransformCore() :\n setTimeout(function(){ stylesApplicationCheck() }, 16);\n })();\n\n } else {\n initSliderTransformCore();\n }\n }\n\n\n function initSliderTransformCore () {\n // run Fn()s which are rely on image loading\n if (!horizontal || autoWidth) {\n setSlidePositions();\n\n if (autoWidth) {\n rightBoundary = getRightBoundary();\n if (freezable) { freeze = getFreeze(); }\n indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\n resetVariblesWhenDisable(disable || freeze);\n } else {\n updateContentWrapperHeight();\n }\n }\n\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n\n function initSheet () {\n // gallery:\n // set animation classes and left value for gallery slider\n if (!carousel) {\n for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\n var item = slideItems[i];\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // #### LAYOUT\n\n // ## INLINE-BLOCK VS FLOAT\n\n // ## PercentageLayout:\n // slides: inline-block\n // remove blank space between slides by set font-size: 0\n\n // ## Non PercentageLayout:\n // slides: float\n // margin-right: -100%\n // margin-left: ~\n\n // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\n if (horizontal) {\n if (PERCENTAGELAYOUT || autoWidth) {\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\n addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\n } else if (carousel) {\n forEach(slideItems, function (slide, i) {\n slide.style.marginLeft = getSlideMarginLeft(i);\n });\n }\n }\n\n\n // ## BASIC STYLES\n if (CSSMQ) {\n // middle wrapper style\n if (TRANSITIONDURATION) {\n var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\n addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\n }\n\n // inner wrapper styles\n str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\n addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet));\n\n // container styles\n if (carousel) {\n str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\n }\n\n // slide styles\n str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\n if (options.gutter) { str += getSlideGutterStyle(options.gutter); }\n // set gallery items transition-duration\n if (!carousel) {\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n if (ANIMATIONDURATION) { str += getAnimationDurationStyle(speed); }\n }\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n\n // non CSS mediaqueries: IE8\n // ## update inner wrapper, container, slides if needed\n // set inline styles for inner wrapper & container\n // insert stylesheet (one line) for slides only (since slides are many)\n } else {\n // middle wrapper styles\n update_carousel_transition_duration();\n\n // inner wrapper styles\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight);\n\n // container styles\n if (carousel && horizontal && !autoWidth) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\n if (gutter) { str += getSlideGutterStyle(gutter); }\n\n // append to the last line\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n }\n\n // ## MEDIAQUERIES\n if (responsive && CSSMQ) {\n for (var bp in responsive) {\n // bp: convert string to number\n bp = parseInt(bp);\n\n var opts = responsive[bp],\n str = '',\n middleWrapperStr = '',\n innerWrapperStr = '',\n containerStr = '',\n slideStr = '',\n itemsBP = !autoWidth ? getOption('items', bp) : null,\n fixedWidthBP = getOption('fixedWidth', bp),\n speedBP = getOption('speed', bp),\n edgePaddingBP = getOption('edgePadding', bp),\n autoHeightBP = getOption('autoHeight', bp),\n gutterBP = getOption('gutter', bp);\n\n // middle wrapper string\n if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\n middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\n }\n\n // inner wrapper string\n if ('edgePadding' in opts || 'gutter' in opts) {\n innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\n }\n\n // container string\n if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || (fixedWidth && 'gutter' in opts))) {\n containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\n }\n if (TRANSITIONDURATION && 'speed' in opts) {\n containerStr += getTransitionDurationStyle(speedBP);\n }\n if (containerStr) {\n containerStr = '#' + slideId + '{' + containerStr + '}';\n }\n\n // slide string\n if ('fixedWidth' in opts || (fixedWidth && 'gutter' in opts) || !carousel && 'items' in opts) {\n slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\n }\n if ('gutter' in opts) {\n slideStr += getSlideGutterStyle(gutterBP);\n }\n // set gallery items transition-duration\n if (!carousel && 'speed' in opts) {\n if (TRANSITIONDURATION) { slideStr += getTransitionDurationStyle(speedBP); }\n if (ANIMATIONDURATION) { slideStr += getAnimationDurationStyle(speedBP); }\n }\n if (slideStr) { slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}'; }\n\n // add up\n str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\n\n if (str) {\n sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\n }\n }\n }\n }\n\n function initTools () {\n // == slides ==\n updateSlideStatus();\n\n // == live region ==\n outerWrapper.insertAdjacentHTML('afterbegin', '
slide ' + getLiveRegionStr() + ' of ' + slideCount + '
');\n liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current');\n\n // == autoplayInit ==\n if (hasAutoplay) {\n var txt = autoplay ? 'stop' : 'start';\n if (autoplayButton) {\n setAttrs(autoplayButton, {'data-action': txt});\n } else if (options.autoplayButtonOutput) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '');\n autoplayButton = outerWrapper.querySelector('[data-action]');\n }\n\n // add event\n if (autoplayButton) {\n addEvents(autoplayButton, {'click': toggleAutoplay});\n }\n\n if (autoplay) {\n startAutoplay();\n if (autoplayHoverPause) { addEvents(container, hoverEvents); }\n if (autoplayResetOnVisibility) { addEvents(container, visibilityEvent); }\n }\n }\n\n // == navInit ==\n if (hasNav) {\n var initIndex = !carousel ? 0 : cloneCount;\n // customized nav\n // will not hide the navs in case they're thumbnails\n if (navContainer) {\n setAttrs(navContainer, {'aria-label': 'Carousel Pagination'});\n navItems = navContainer.children;\n forEach(navItems, function(item, i) {\n setAttrs(item, {\n 'data-nav': i,\n 'tabindex': '-1',\n 'aria-label': navStr + (i + 1),\n 'aria-controls': slideId,\n });\n });\n\n // generated nav\n } else {\n var navHtml = '',\n hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\n for (var i = 0; i < slideCount; i++) {\n // hide nav items by default\n navHtml += '';\n }\n navHtml = '
' + navHtml + '
';\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\n\n navContainer = outerWrapper.querySelector('.tns-nav');\n navItems = navContainer.children;\n }\n\n updateNavVisibility();\n\n // add transition\n if (TRANSITIONDURATION) {\n var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\n str = 'transition: all ' + speed / 1000 + 's';\n\n if (prefix) {\n str = '-' + prefix + '-' + str;\n }\n\n addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\n }\n\n setAttrs(navItems[navCurrentIndex], {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navItems[navCurrentIndex], 'tabindex');\n addClass(navItems[navCurrentIndex], navActiveClass);\n\n // add events\n addEvents(navContainer, navEvents);\n }\n\n\n\n // == controlsInit ==\n if (hasControls) {\n if (!controlsContainer && (!prevButton || !nextButton)) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '
');\n\n controlsContainer = outerWrapper.querySelector('.tns-controls');\n }\n\n if (!prevButton || !nextButton) {\n prevButton = controlsContainer.children[0];\n nextButton = controlsContainer.children[1];\n }\n\n if (options.controlsContainer) {\n setAttrs(controlsContainer, {\n 'aria-label': 'Carousel Navigation',\n 'tabindex': '0'\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs([prevButton, nextButton], {\n 'aria-controls': slideId,\n 'tabindex': '-1',\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs(prevButton, {'data-controls' : 'prev'});\n setAttrs(nextButton, {'data-controls' : 'next'});\n }\n\n prevIsButton = isButton(prevButton);\n nextIsButton = isButton(nextButton);\n\n updateControlsStatus();\n\n // add events\n if (controlsContainer) {\n addEvents(controlsContainer, controlsEvents);\n } else {\n addEvents(prevButton, controlsEvents);\n addEvents(nextButton, controlsEvents);\n }\n }\n\n // hide tools if needed\n disableUI();\n }\n\n function initEvents () {\n // add events\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n addEvents(container, eve);\n }\n\n if (touch) { addEvents(container, touchEvents, options.preventScrollOnTouch); }\n if (mouseDrag) { addEvents(container, dragEvents); }\n if (arrowKeys) { addEvents(doc, docmentKeydownEvent); }\n\n if (nested === 'inner') {\n events.on('outerResized', function () {\n resizeTasks();\n events.emit('innerLoaded', info());\n });\n } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\n addEvents(win, {'resize': onResize});\n }\n\n if (autoHeight) {\n if (nested === 'outer') {\n events.on('innerLoaded', doAutoHeight);\n } else if (!disable) { doAutoHeight(); }\n }\n\n doLazyLoad();\n if (disable) { disableSlider(); } else if (freeze) { freezeSlider(); }\n\n events.on('indexChanged', additionalUpdates);\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n if (typeof onInit === 'function') { onInit(info()); }\n isOn = true;\n }\n\n function destroy () {\n // sheet\n sheet.disabled = true;\n if (sheet.ownerNode) { sheet.ownerNode.remove(); }\n\n // remove win event listeners\n removeEvents(win, {'resize': onResize});\n\n // arrowKeys, controls, nav\n if (arrowKeys) { removeEvents(doc, docmentKeydownEvent); }\n if (controlsContainer) { removeEvents(controlsContainer, controlsEvents); }\n if (navContainer) { removeEvents(navContainer, navEvents); }\n\n // autoplay\n removeEvents(container, hoverEvents);\n removeEvents(container, visibilityEvent);\n if (autoplayButton) { removeEvents(autoplayButton, {'click': toggleAutoplay}); }\n if (autoplay) { clearInterval(autoplayTimer); }\n\n // container\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n removeEvents(container, eve);\n }\n if (touch) { removeEvents(container, touchEvents); }\n if (mouseDrag) { removeEvents(container, dragEvents); }\n\n // cache Object values in options && reset HTML\n var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\n\n tnsList.forEach(function(item, i) {\n var el = item === 'container' ? outerWrapper : options[item];\n\n if (typeof el === 'object' && el) {\n var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\n parentEl = el.parentNode;\n el.outerHTML = htmlList[i];\n options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\n }\n });\n\n\n // reset variables\n tnsList = animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = resizeTimer = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = pages = pagesCached = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initPosition = lastPosition = translateInit = disX = disY = panStart = rafIndex = getDist = touch = mouseDrag = null;\n // check variables\n // [animateIn, animateOut, animateDelay, animateNormal, horizontal, outerWrapper, innerWrapper, container, containerParent, containerHTML, slideItems, slideCount, breakpointZone, windowWidth, autoWidth, fixedWidth, edgePadding, gutter, viewport, items, slideBy, viewportMax, arrowKeys, speed, rewind, loop, autoHeight, sheet, lazyload, slidePositions, slideItemsOut, cloneCount, slideCountNew, hasRightDeadZone, rightBoundary, updateIndexBeforeTransform, transformAttr, transformPrefix, transformPostfix, getIndexMax, index, indexCached, indexMin, indexMax, resizeTimer, swipeAngle, moveDirectionExpected, running, onInit, events, newContainerClasses, slideId, disable, disabled, freezable, freeze, frozen, controlsEvents, navEvents, hoverEvents, visibilityEvent, docmentKeydownEvent, touchEvents, dragEvents, hasControls, hasNav, navAsThumbnails, hasAutoplay, hasTouch, hasMouseDrag, slideActiveClass, imgCompleteClass, imgEvents, imgsComplete, controls, controlsText, controlsContainer, controlsContainerHTML, prevButton, nextButton, prevIsButton, nextIsButton, nav, navContainer, navContainerHTML, navItems, pages, pagesCached, navClicked, navCurrentIndex, navCurrentIndexCached, navActiveClass, navStr, navStrCurrent, autoplay, autoplayTimeout, autoplayDirection, autoplayText, autoplayHoverPause, autoplayButton, autoplayButtonHTML, autoplayResetOnVisibility, autoplayHtmlStrings, autoplayTimer, animating, autoplayHoverPaused, autoplayUserPaused, autoplayVisibilityPaused, initPosition, lastPosition, translateInit, disX, disY, panStart, rafIndex, getDist, touch, mouseDrag ].forEach(function(item) { if (item !== null) { console.log(item); } });\n\n for (var a in this) {\n if (a !== 'rebuild') { this[a] = null; }\n }\n isOn = false;\n }\n\n// === ON RESIZE ===\n // responsive || fixedWidth || autoWidth || !horizontal\n function onResize (e) {\n raf(function(){ resizeTasks(getEvent(e)); });\n }\n\n function resizeTasks (e) {\n if (!isOn) { return; }\n if (nested === 'outer') { events.emit('outerResized', info(e)); }\n windowWidth = getWindowWidth();\n var bpChanged,\n breakpointZoneTem = breakpointZone,\n needContainerTransform = false;\n\n if (responsive) {\n setBreakpointZone();\n bpChanged = breakpointZoneTem !== breakpointZone;\n // if (hasRightDeadZone) { needContainerTransform = true; } // *?\n if (bpChanged) { events.emit('newBreakpointStart', info(e)); }\n }\n\n var indChanged,\n itemsChanged,\n itemsTem = items,\n disableTem = disable,\n freezeTem = freeze,\n arrowKeysTem = arrowKeys,\n controlsTem = controls,\n navTem = nav,\n touchTem = touch,\n mouseDragTem = mouseDrag,\n autoplayTem = autoplay,\n autoplayHoverPauseTem = autoplayHoverPause,\n autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\n indexTem = index;\n\n if (bpChanged) {\n var fixedWidthTem = fixedWidth,\n autoHeightTem = autoHeight,\n controlsTextTem = controlsText,\n centerTem = center,\n autoplayTextTem = autoplayText;\n\n if (!CSSMQ) {\n var gutterTem = gutter,\n edgePaddingTem = edgePadding;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n arrowKeys = getOption('arrowKeys');\n controls = getOption('controls');\n nav = getOption('nav');\n touch = getOption('touch');\n center = getOption('center');\n mouseDrag = getOption('mouseDrag');\n autoplay = getOption('autoplay');\n autoplayHoverPause = getOption('autoplayHoverPause');\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\n\n if (bpChanged) {\n disable = getOption('disable');\n fixedWidth = getOption('fixedWidth');\n speed = getOption('speed');\n autoHeight = getOption('autoHeight');\n controlsText = getOption('controlsText');\n autoplayText = getOption('autoplayText');\n autoplayTimeout = getOption('autoplayTimeout');\n\n if (!CSSMQ) {\n edgePadding = getOption('edgePadding');\n gutter = getOption('gutter');\n }\n }\n // update options\n resetVariblesWhenDisable(disable);\n\n viewport = getViewportWidth(); // <= edgePadding, gutter\n if ((!horizontal || autoWidth) && !disable) {\n setSlidePositions();\n if (!horizontal) {\n updateContentWrapperHeight(); // <= setSlidePositions\n needContainerTransform = true;\n }\n }\n if (fixedWidth || autoWidth) {\n rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\n // fixedWidth: <= viewport, fixedWidth, gutter\n indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\n // fixedWidth: <= rightBoundary, fixedWidth, gutter\n }\n\n if (bpChanged || fixedWidth) {\n items = getOption('items');\n slideBy = getOption('slideBy');\n itemsChanged = items !== itemsTem;\n\n if (itemsChanged) {\n if (!fixedWidth && !autoWidth) { indexMax = getIndexMax(); } // <= items\n // check index before transform in case\n // slider reach the right edge then items become bigger\n updateIndex();\n }\n }\n\n if (bpChanged) {\n if (disable !== disableTem) {\n if (disable) {\n disableSlider();\n } else {\n enableSlider(); // <= slidePositions, rightBoundary, indexMax\n }\n }\n }\n\n if (freezable && (bpChanged || fixedWidth || autoWidth)) {\n freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\n // <= fixedWidth: fixedWidth, gutter, rightBoundary\n // <= others: items\n\n if (freeze !== freezeTem) {\n if (freeze) {\n doContainerTransform(getContainerTransformValue(getStartIndex(0)));\n freezeSlider();\n } else {\n unfreezeSlider();\n needContainerTransform = true;\n }\n }\n }\n\n resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\n if (!autoplay) { autoplayHoverPause = autoplayResetOnVisibility = false; }\n\n if (arrowKeys !== arrowKeysTem) {\n arrowKeys ?\n addEvents(doc, docmentKeydownEvent) :\n removeEvents(doc, docmentKeydownEvent);\n }\n if (controls !== controlsTem) {\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n } else {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n if (nav !== navTem) {\n if (nav) {\n showElement(navContainer);\n updateNavVisibility();\n } else {\n hideElement(navContainer)\n }\n }\n if (touch !== touchTem) {\n touch ?\n addEvents(container, touchEvents, options.preventScrollOnTouch) :\n removeEvents(container, touchEvents);\n }\n if (mouseDrag !== mouseDragTem) {\n mouseDrag ?\n addEvents(container, dragEvents) :\n removeEvents(container, dragEvents);\n }\n if (autoplay !== autoplayTem) {\n if (autoplay) {\n if (autoplayButton) { showElement(autoplayButton); }\n if (!animating && !autoplayUserPaused) { startAutoplay(); }\n } else {\n if (autoplayButton) { hideElement(autoplayButton); }\n if (animating) { stopAutoplay(); }\n }\n }\n if (autoplayHoverPause !== autoplayHoverPauseTem) {\n autoplayHoverPause ?\n addEvents(container, hoverEvents) :\n removeEvents(container, hoverEvents);\n }\n if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\n autoplayResetOnVisibility ?\n addEvents(doc, visibilityEvent) :\n removeEvents(doc, visibilityEvent);\n }\n\n if (bpChanged) {\n if (fixedWidth !== fixedWidthTem || center !== centerTem) { needContainerTransform = true; }\n\n if (autoHeight !== autoHeightTem) {\n if (!autoHeight) { innerWrapper.style.height = ''; }\n }\n\n if (controls && controlsText !== controlsTextTem) {\n prevButton.innerHTML = controlsText[0];\n nextButton.innerHTML = controlsText[1];\n }\n\n if (autoplayButton && autoplayText !== autoplayTextTem) {\n var i = autoplay ? 1 : 0,\n html = autoplayButton.innerHTML,\n len = html.length - autoplayTextTem[i].length;\n if (html.substring(len) === autoplayTextTem[i]) {\n autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\n }\n }\n } else {\n if (center && (fixedWidth || autoWidth)) { needContainerTransform = true; }\n }\n\n if (itemsChanged || fixedWidth && !autoWidth) {\n pages = getPages();\n updateNavVisibility();\n }\n\n indChanged = index !== indexTem;\n if (indChanged) {\n events.emit('indexChanged', info());\n needContainerTransform = true;\n } else if (itemsChanged) {\n if (!indChanged) { additionalUpdates(); }\n } else if (fixedWidth || autoWidth) {\n doLazyLoad();\n updateSlideStatus();\n updateLiveRegion();\n }\n\n if (itemsChanged && !carousel) { updateGallerySlidePositions(); }\n\n if (!disable && !freeze) {\n // non-mediaqueries: IE8\n if (bpChanged && !CSSMQ) {\n // middle wrapper styles\n\n // inner wrapper styles\n if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\n }\n\n if (horizontal) {\n // container styles\n if (carousel) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = getSlideWidthStyle(fixedWidth, gutter, items) +\n getSlideGutterStyle(gutter);\n\n // remove the last line and\n // add new styles\n removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\n }\n }\n\n // auto height\n if (autoHeight) { doAutoHeight(); }\n\n if (needContainerTransform) {\n doContainerTransformSilent();\n indexCached = index;\n }\n }\n\n if (bpChanged) { events.emit('newBreakpointEnd', info(e)); }\n }\n\n\n\n\n\n // === INITIALIZATION FUNCTIONS === //\n function getFreeze () {\n if (!fixedWidth && !autoWidth) {\n var a = center ? items - (items - 1) / 2 : items;\n return slideCount <= a;\n }\n\n var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\n vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\n\n if (center) {\n vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\n }\n\n return width <= vp;\n }\n\n function setBreakpointZone () {\n breakpointZone = 0;\n for (var bp in responsive) {\n bp = parseInt(bp); // convert string to number\n if (windowWidth >= bp) { breakpointZone = bp; }\n }\n }\n\n // (slideBy, indexMin, indexMax) => index\n var updateIndex = (function () {\n return loop ?\n carousel ?\n // loop + carousel\n function () {\n var leftEdge = indexMin,\n rightEdge = indexMax;\n\n leftEdge += slideBy;\n rightEdge -= slideBy;\n\n // adjust edges when has edge paddings\n // or fixed-width slider with extra space on the right side\n if (edgePadding) {\n leftEdge += 1;\n rightEdge -= 1;\n } else if (fixedWidth) {\n if ((viewport + gutter)%(fixedWidth + gutter)) { rightEdge -= 1; }\n }\n\n if (cloneCount) {\n if (index > rightEdge) {\n index -= slideCount;\n } else if (index < leftEdge) {\n index += slideCount;\n }\n }\n } :\n // loop + gallery\n function() {\n if (index > indexMax) {\n while (index >= indexMin + slideCount) { index -= slideCount; }\n } else if (index < indexMin) {\n while (index <= indexMax - slideCount) { index += slideCount; }\n }\n } :\n // non-loop\n function() {\n index = Math.max(indexMin, Math.min(indexMax, index));\n };\n })();\n\n function disableUI () {\n if (!autoplay && autoplayButton) { hideElement(autoplayButton); }\n if (!nav && navContainer) { hideElement(navContainer); }\n if (!controls) {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n\n function enableUI () {\n if (autoplay && autoplayButton) { showElement(autoplayButton); }\n if (nav && navContainer) { showElement(navContainer); }\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n }\n }\n\n function freezeSlider () {\n if (frozen) { return; }\n\n // remove edge padding from inner wrapper\n if (edgePadding) { innerWrapper.style.margin = '0px'; }\n\n // add class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { addClass(slideItems[i], str); }\n addClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n disableUI();\n\n frozen = true;\n }\n\n function unfreezeSlider () {\n if (!frozen) { return; }\n\n // restore edge padding for inner wrapper\n // for mordern browsers\n if (edgePadding && CSSMQ) { innerWrapper.style.margin = ''; }\n\n // remove class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { removeClass(slideItems[i], str); }\n removeClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n enableUI();\n\n frozen = false;\n }\n\n function disableSlider () {\n if (disabled) { return; }\n\n sheet.disabled = true;\n container.className = container.className.replace(newContainerClasses.substring(1), '');\n removeAttrs(container, ['style']);\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { hideElement(slideItems[j]); }\n hideElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // vertical slider\n if (!horizontal || !carousel) { removeAttrs(innerWrapper, ['style']); }\n\n // gallery\n if (!carousel) {\n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i];\n removeAttrs(item, ['style']);\n removeClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // update tools\n disableUI();\n\n disabled = true;\n }\n\n function enableSlider () {\n if (!disabled) { return; }\n\n sheet.disabled = false;\n container.className += newContainerClasses;\n doContainerTransformSilent();\n\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { showElement(slideItems[j]); }\n showElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // gallery\n if (!carousel) {\n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i],\n classN = i < index + items ? animateIn : animateNormal;\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, classN);\n }\n }\n\n // update tools\n enableUI();\n\n disabled = false;\n }\n\n function updateLiveRegion () {\n var str = getLiveRegionStr();\n if (liveregionCurrent.innerHTML !== str) { liveregionCurrent.innerHTML = str; }\n }\n\n function getLiveRegionStr () {\n var arr = getVisibleSlideRange(),\n start = arr[0] + 1,\n end = arr[1] + 1;\n return start === end ? start + '' : start + ' to ' + end;\n }\n\n function getVisibleSlideRange (val) {\n if (val == null) { val = getContainerTransformValue(); }\n var start = index, end, rangestart, rangeend;\n\n // get range start, range end for autoWidth and fixedWidth\n if (center || edgePadding) {\n if (autoWidth || fixedWidth) {\n rangestart = - (parseFloat(val) + edgePadding);\n rangeend = rangestart + viewport + edgePadding * 2;\n }\n } else {\n if (autoWidth) {\n rangestart = slidePositions[index];\n rangeend = rangestart + viewport;\n }\n }\n\n // get start, end\n // - check auto width\n if (autoWidth) {\n slidePositions.forEach(function(point, i) {\n if (i < slideCountNew) {\n if ((center || edgePadding) && point <= rangestart + 0.5) { start = i; }\n if (rangeend - point >= 0.5) { end = i; }\n }\n });\n\n // - check percentage width, fixed width\n } else {\n\n if (fixedWidth) {\n var cell = fixedWidth + gutter;\n if (center || edgePadding) {\n start = Math.floor(rangestart/cell);\n end = Math.ceil(rangeend/cell - 1);\n } else {\n end = start + Math.ceil(viewport/cell) - 1;\n }\n\n } else {\n if (center || edgePadding) {\n var a = items - 1;\n if (center) {\n start -= a / 2;\n end = index + a / 2;\n } else {\n end = index + a;\n }\n\n if (edgePadding) {\n var b = edgePadding * items / viewport;\n start -= b;\n end += b;\n }\n\n start = Math.floor(start);\n end = Math.ceil(end);\n } else {\n end = start + items - 1;\n }\n }\n\n start = Math.max(start, 0);\n end = Math.min(end, slideCountNew - 1);\n }\n\n return [start, end];\n }\n\n function doLazyLoad () {\n if (lazyload && !disable) {\n var arg = getVisibleSlideRange();\n arg.push(lazyloadSelector);\n\n getImageArray.apply(null, arg).forEach(function (img) {\n if (!hasClass(img, imgCompleteClass)) {\n // stop propagation transitionend event to container\n var eve = {};\n eve[TRANSITIONEND] = function (e) { e.stopPropagation(); };\n addEvents(img, eve);\n\n addEvents(img, imgEvents);\n\n // update src\n img.src = getAttr(img, 'data-src');\n\n // update srcset\n var srcset = getAttr(img, 'data-srcset');\n if (srcset) { img.srcset = srcset; }\n\n addClass(img, 'loading');\n }\n });\n }\n }\n\n function onImgLoaded (e) {\n imgLoaded(getTarget(e));\n }\n\n function onImgFailed (e) {\n imgFailed(getTarget(e));\n }\n\n function imgLoaded (img) {\n addClass(img, 'loaded');\n imgCompleted(img);\n }\n\n function imgFailed (img) {\n addClass(img, 'failed');\n imgCompleted(img);\n }\n\n function imgCompleted (img) {\n addClass(img, imgCompleteClass);\n removeClass(img, 'loading');\n removeEvents(img, imgEvents);\n }\n\n function getImageArray (start, end, imgSelector) {\n var imgs = [];\n if (!imgSelector) { imgSelector = 'img'; }\n\n while (start <= end) {\n forEach(slideItems[start].querySelectorAll(imgSelector), function (img) { imgs.push(img); });\n start++;\n }\n\n return imgs;\n }\n\n // check if all visible images are loaded\n // and update container height if it's done\n function doAutoHeight () {\n var imgs = getImageArray.apply(null, getVisibleSlideRange());\n raf(function(){ imgsLoadedCheck(imgs, updateInnerWrapperHeight); });\n }\n\n function imgsLoadedCheck (imgs, cb) {\n // execute callback function if all images are complete\n if (imgsComplete) { return cb(); }\n\n // check image classes\n imgs.forEach(function (img, index) {\n if (!lazyload && img.complete) { imgCompleted(img); } // Check image.complete\n if (hasClass(img, imgCompleteClass)) { imgs.splice(index, 1); }\n });\n\n // execute callback function if selected images are all complete\n if (!imgs.length) { return cb(); }\n\n // otherwise execute this functiona again\n raf(function(){ imgsLoadedCheck(imgs, cb); });\n }\n\n function additionalUpdates () {\n doLazyLoad();\n updateSlideStatus();\n updateLiveRegion();\n updateControlsStatus();\n updateNavStatus();\n }\n\n\n function update_carousel_transition_duration () {\n if (carousel && autoHeight) {\n middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\n }\n }\n\n function getMaxSlideHeight (slideStart, slideRange) {\n var heights = [];\n for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\n heights.push(slideItems[i].offsetHeight);\n }\n\n return Math.max.apply(null, heights);\n }\n\n // update inner wrapper height\n // 1. get the max-height of the visible slides\n // 2. set transitionDuration to speed\n // 3. update inner wrapper height to max-height\n // 4. set transitionDuration to 0s after transition done\n function updateInnerWrapperHeight () {\n var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\n wp = middleWrapper ? middleWrapper : innerWrapper;\n\n if (wp.style.height !== maxHeight) { wp.style.height = maxHeight + 'px'; }\n }\n\n // get the distance from the top edge of the first slide to each slide\n // (init) => slidePositions\n function setSlidePositions () {\n slidePositions = [0];\n var attr = horizontal ? 'left' : 'top',\n attr2 = horizontal ? 'right' : 'bottom',\n base = slideItems[0].getBoundingClientRect()[attr];\n\n forEach(slideItems, function(item, i) {\n // skip the first slide\n if (i) { slidePositions.push(item.getBoundingClientRect()[attr] - base); }\n // add the end edge\n if (i === slideCountNew - 1) { slidePositions.push(item.getBoundingClientRect()[attr2] - base); }\n });\n }\n\n // update slide\n function updateSlideStatus () {\n var range = getVisibleSlideRange(),\n start = range[0],\n end = range[1];\n\n forEach(slideItems, function(item, i) {\n // show slides\n if (i >= start && i <= end) {\n if (hasAttr(item, 'aria-hidden')) {\n removeAttrs(item, ['aria-hidden', 'tabindex']);\n addClass(item, slideActiveClass);\n }\n // hide slides\n } else {\n if (!hasAttr(item, 'aria-hidden')) {\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n removeClass(item, slideActiveClass);\n }\n }\n });\n }\n\n // gallery: update slide position\n function updateGallerySlidePositions () {\n var l = index + Math.min(slideCount, items);\n for (var i = slideCountNew; i--;) {\n var item = slideItems[i];\n\n if (i >= index && i < l) {\n // add transitions to visible slides when adjusting their positions\n addClass(item, 'tns-moving');\n\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n } else if (item.style.left) {\n item.style.left = '';\n addClass(item, animateNormal);\n removeClass(item, animateIn);\n }\n\n // remove outlet animation\n removeClass(item, animateOut);\n }\n\n // removing '.tns-moving'\n setTimeout(function() {\n forEach(slideItems, function(el) {\n removeClass(el, 'tns-moving');\n });\n }, 300);\n }\n\n // set tabindex on Nav\n function updateNavStatus () {\n // get current nav\n if (nav) {\n navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\n navClicked = -1;\n\n if (navCurrentIndex !== navCurrentIndexCached) {\n var navPrev = navItems[navCurrentIndexCached],\n navCurrent = navItems[navCurrentIndex];\n\n setAttrs(navPrev, {\n 'tabindex': '-1',\n 'aria-label': navStr + (navCurrentIndexCached + 1)\n });\n removeClass(navPrev, navActiveClass);\n\n setAttrs(navCurrent, {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navCurrent, 'tabindex');\n addClass(navCurrent, navActiveClass);\n\n navCurrentIndexCached = navCurrentIndex;\n }\n }\n }\n\n function getLowerCaseNodeName (el) {\n return el.nodeName.toLowerCase();\n }\n\n function isButton (el) {\n return getLowerCaseNodeName(el) === 'button';\n }\n\n function isAriaDisabled (el) {\n return el.getAttribute('aria-disabled') === 'true';\n }\n\n function disEnableElement (isButton, el, val) {\n if (isButton) {\n el.disabled = val;\n } else {\n el.setAttribute('aria-disabled', val.toString());\n }\n }\n\n // set 'disabled' to true on controls when reach the edges\n function updateControlsStatus () {\n if (!controls || rewind || loop) { return; }\n\n var prevDisabled = (prevIsButton) ? prevButton.disabled : isAriaDisabled(prevButton),\n nextDisabled = (nextIsButton) ? nextButton.disabled : isAriaDisabled(nextButton),\n disablePrev = (index <= indexMin) ? true : false,\n disableNext = (!rewind && index >= indexMax) ? true : false;\n\n if (disablePrev && !prevDisabled) {\n disEnableElement(prevIsButton, prevButton, true);\n }\n if (!disablePrev && prevDisabled) {\n disEnableElement(prevIsButton, prevButton, false);\n }\n if (disableNext && !nextDisabled) {\n disEnableElement(nextIsButton, nextButton, true);\n }\n if (!disableNext && nextDisabled) {\n disEnableElement(nextIsButton, nextButton, false);\n }\n }\n\n // set duration\n function resetDuration (el, str) {\n if (TRANSITIONDURATION) { el.style[TRANSITIONDURATION] = str; }\n }\n\n function getSliderWidth () {\n return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\n }\n\n function getCenterGap (num) {\n if (num == null) { num = index; }\n\n var gap = edgePadding ? gutter : 0;\n return autoWidth ? ((viewport - gap) - (slidePositions[num + 1] - slidePositions[num] - gutter))/2 :\n fixedWidth ? (viewport - fixedWidth) / 2 :\n (items - 1) / 2;\n }\n\n function getRightBoundary () {\n var gap = edgePadding ? gutter : 0,\n result = (viewport + gap) - getSliderWidth();\n\n if (center && !loop) {\n result = fixedWidth ? - (fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() :\n getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\n }\n if (result > 0) { result = 0; }\n\n return result;\n }\n\n function getContainerTransformValue (num) {\n if (num == null) { num = index; }\n\n var val;\n if (horizontal && !autoWidth) {\n if (fixedWidth) {\n val = - (fixedWidth + gutter) * num;\n if (center) { val += getCenterGap(); }\n } else {\n var denominator = TRANSFORM ? slideCountNew : items;\n if (center) { num -= getCenterGap(); }\n val = - num * 100 / denominator;\n }\n } else {\n val = - slidePositions[num];\n if (center && autoWidth) {\n val += getCenterGap();\n }\n }\n\n if (hasRightDeadZone) { val = Math.max(val, rightBoundary); }\n\n val += (horizontal && !autoWidth && !fixedWidth) ? '%' : 'px';\n\n return val;\n }\n\n function doContainerTransformSilent (val) {\n resetDuration(container, '0s');\n doContainerTransform(val);\n }\n\n function doContainerTransform (val) {\n if (val == null) { val = getContainerTransformValue(); }\n container.style[transformAttr] = transformPrefix + val + transformPostfix;\n }\n\n function animateSlide (number, classOut, classIn, isOut) {\n var l = number + items;\n if (!loop) { l = Math.min(l, slideCountNew); }\n\n for (var i = number; i < l; i++) {\n var item = slideItems[i];\n\n // set item positions\n if (!isOut) { item.style.left = (i - index) * 100 / items + '%'; }\n\n if (animateDelay && TRANSITIONDELAY) {\n item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\n }\n removeClass(item, classOut);\n addClass(item, classIn);\n\n if (isOut) { slideItemsOut.push(item); }\n }\n }\n\n // make transfer after click/drag:\n // 1. change 'transform' property for mordern browsers\n // 2. change 'left' property for legacy browsers\n var transformCore = (function () {\n return carousel ?\n function () {\n resetDuration(container, '');\n if (TRANSITIONDURATION || !speed) {\n // for morden browsers with non-zero duration or\n // zero duration for all browsers\n doContainerTransform();\n // run fallback function manually\n // when duration is 0 / container is hidden\n if (!speed || !isVisible(container)) { onTransitionEnd(); }\n\n } else {\n // for old browser with non-zero duration\n jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\n }\n\n if (!horizontal) { updateContentWrapperHeight(); }\n } :\n function () {\n slideItemsOut = [];\n\n var eve = {};\n eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\n removeEvents(slideItems[indexCached], eve);\n addEvents(slideItems[index], eve);\n\n animateSlide(indexCached, animateIn, animateOut, true);\n animateSlide(index, animateNormal, animateIn);\n\n // run fallback function manually\n // when transition or animation not supported / duration is 0\n if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) { onTransitionEnd(); }\n };\n })();\n\n function render (e, sliderMoved) {\n if (updateIndexBeforeTransform) { updateIndex(); }\n\n // render when slider was moved (touch or drag) even though index may not change\n if (index !== indexCached || sliderMoved) {\n // events\n events.emit('indexChanged', info());\n events.emit('transitionStart', info());\n if (autoHeight) { doAutoHeight(); }\n\n // pause autoplay when click or keydown from user\n if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) { stopAutoplay(); }\n\n running = true;\n transformCore();\n }\n }\n\n /*\n * Transfer prefixed properties to the same format\n * CSS: -Webkit-Transform => webkittransform\n * JS: WebkitTransform => webkittransform\n * @param {string} str - property\n *\n */\n function strTrans (str) {\n return str.toLowerCase().replace(/-/g, '');\n }\n\n // AFTER TRANSFORM\n // Things need to be done after a transfer:\n // 1. check index\n // 2. add classes to visible slide\n // 3. disable controls buttons when reach the first/last slide in non-loop slider\n // 4. update nav status\n // 5. lazyload images\n // 6. update container height\n function onTransitionEnd (event) {\n // check running on gallery mode\n // make sure trantionend/animationend events run only once\n if (carousel || running) {\n events.emit('transitionEnd', info(event));\n\n if (!carousel && slideItemsOut.length > 0) {\n for (var i = 0; i < slideItemsOut.length; i++) {\n var item = slideItemsOut[i];\n // set item positions\n item.style.left = '';\n\n if (ANIMATIONDELAY && TRANSITIONDELAY) {\n item.style[ANIMATIONDELAY] = '';\n item.style[TRANSITIONDELAY] = '';\n }\n removeClass(item, animateOut);\n addClass(item, animateNormal);\n }\n }\n\n /* update slides, nav, controls after checking ...\n * => legacy browsers who don't support 'event'\n * have to check event first, otherwise event.target will cause an error\n * => or 'gallery' mode:\n * + event target is slide item\n * => or 'carousel' mode:\n * + event target is container,\n * + event.property is the same with transform attribute\n */\n if (!event ||\n !carousel && event.target.parentNode === container ||\n event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\n\n if (!updateIndexBeforeTransform) {\n var indexTem = index;\n updateIndex();\n if (index !== indexTem) {\n events.emit('indexChanged', info());\n\n doContainerTransformSilent();\n }\n }\n\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n running = false;\n indexCached = index;\n }\n }\n\n }\n\n // # ACTIONS\n function goTo (targetIndex, e) {\n if (freeze) { return; }\n\n // prev slideBy\n if (targetIndex === 'prev') {\n onControlsClick(e, -1);\n\n // next slideBy\n } else if (targetIndex === 'next') {\n onControlsClick(e, 1);\n\n // go to exact slide\n } else {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n var absIndex = getAbsIndex(),\n indexGap = 0;\n\n if (targetIndex === 'first') {\n indexGap = - absIndex;\n } else if (targetIndex === 'last') {\n indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\n } else {\n if (typeof targetIndex !== 'number') { targetIndex = parseInt(targetIndex); }\n\n if (!isNaN(targetIndex)) {\n // from directly called goTo function\n if (!e) { targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex)); }\n\n indexGap = targetIndex - absIndex;\n }\n }\n\n // gallery: make sure new page won't overlap with current page\n if (!carousel && indexGap && Math.abs(indexGap) < items) {\n var factor = indexGap > 0 ? 1 : -1;\n indexGap += (index + indexGap - slideCount) >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\n }\n\n index += indexGap;\n\n // make sure index is in range\n if (carousel && loop) {\n if (index < indexMin) { index += slideCount; }\n if (index > indexMax) { index -= slideCount; }\n }\n\n // if index is changed, start rendering\n if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\n render(e);\n }\n\n }\n }\n\n // on controls click\n function onControlsClick (e, dir) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n var passEventObject;\n\n if (!dir) {\n e = getEvent(e);\n var target = getTarget(e);\n\n while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) { target = target.parentNode; }\n\n var targetIn = [prevButton, nextButton].indexOf(target);\n if (targetIn >= 0) {\n passEventObject = true;\n dir = targetIn === 0 ? -1 : 1;\n }\n }\n\n if (rewind) {\n if (index === indexMin && dir === -1) {\n goTo('last', e);\n return;\n } else if (index === indexMax && dir === 1) {\n goTo('first', e);\n return;\n }\n }\n\n if (dir) {\n index += slideBy * dir;\n if (autoWidth) { index = Math.floor(index); }\n // pass e when click control buttons or keydown\n render((passEventObject || (e && e.type === 'keydown')) ? e : null);\n }\n }\n\n // on nav click\n function onNavClick (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n e = getEvent(e);\n var target = getTarget(e), navIndex;\n\n // find the clicked nav item\n while (target !== navContainer && !hasAttr(target, 'data-nav')) { target = target.parentNode; }\n if (hasAttr(target, 'data-nav')) {\n var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\n targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\n targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\n goTo(targetIndex, e);\n\n if (navCurrentIndex === navIndex) {\n if (animating) { stopAutoplay(); }\n navClicked = -1; // reset navClicked\n }\n }\n }\n\n // autoplay functions\n function setAutoplayTimer () {\n autoplayTimer = setInterval(function () {\n onControlsClick(null, autoplayDirection);\n }, autoplayTimeout);\n\n animating = true;\n }\n\n function stopAutoplayTimer () {\n clearInterval(autoplayTimer);\n animating = false;\n }\n\n function updateAutoplayButton (action, txt) {\n setAttrs(autoplayButton, {'data-action': action});\n autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\n }\n\n function startAutoplay () {\n setAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('stop', autoplayText[1]); }\n }\n\n function stopAutoplay () {\n stopAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('start', autoplayText[0]); }\n }\n\n // programaitcally play/pause the slider\n function play () {\n if (autoplay && !animating) {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n function pause () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n }\n }\n\n function toggleAutoplay () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n } else {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n\n function onVisibilityChange () {\n if (doc.hidden) {\n if (animating) {\n stopAutoplayTimer();\n autoplayVisibilityPaused = true;\n }\n } else if (autoplayVisibilityPaused) {\n setAutoplayTimer();\n autoplayVisibilityPaused = false;\n }\n }\n\n function mouseoverPause () {\n if (animating) {\n stopAutoplayTimer();\n autoplayHoverPaused = true;\n }\n }\n\n function mouseoutRestart () {\n if (autoplayHoverPaused) {\n setAutoplayTimer();\n autoplayHoverPaused = false;\n }\n }\n\n // keydown events on document\n function onDocumentKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n onControlsClick(e, keyIndex === 0 ? -1 : 1);\n }\n }\n\n // on key control\n function onControlsKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (!prevButton.disabled) { onControlsClick(e, -1); }\n } else if (!nextButton.disabled) {\n onControlsClick(e, 1);\n }\n }\n }\n\n // set focus\n function setFocus (el) {\n el.focus();\n }\n\n // on key nav\n function onNavKeydown (e) {\n e = getEvent(e);\n var curElement = doc.activeElement;\n if (!hasAttr(curElement, 'data-nav')) { return; }\n\n // var code = e.keyCode,\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\n navIndex = Number(getAttr(curElement, 'data-nav'));\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (navIndex > 0) { setFocus(navItems[navIndex - 1]); }\n } else if (keyIndex === 1) {\n if (navIndex < pages - 1) { setFocus(navItems[navIndex + 1]); }\n } else {\n navClicked = navIndex;\n goTo(navIndex, e);\n }\n }\n }\n\n function getEvent (e) {\n e = e || win.event;\n return isTouchEvent(e) ? e.changedTouches[0] : e;\n }\n function getTarget (e) {\n return e.target || win.event.srcElement;\n }\n\n function isTouchEvent (e) {\n return e.type.indexOf('touch') >= 0;\n }\n\n function preventDefaultBehavior (e) {\n e.preventDefault ? e.preventDefault() : e.returnValue = false;\n }\n\n function getMoveDirectionExpected () {\n return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\n }\n\n function onPanStart (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n if (autoplay && animating) { stopAutoplayTimer(); }\n\n panStart = true;\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n\n var $ = getEvent(e);\n events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\n\n if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\n preventDefaultBehavior(e);\n }\n\n lastPosition.x = initPosition.x = $.clientX;\n lastPosition.y = initPosition.y = $.clientY;\n if (carousel) {\n translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\n resetDuration(container, '0s');\n }\n }\n\n function onPanMove (e) {\n if (panStart) {\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n\n if (carousel) {\n if (!rafIndex) { rafIndex = raf(function(){ panUpdate(e); }); }\n } else {\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) { preventScroll = true; }\n }\n\n if ((typeof e.cancelable !== 'boolean' || e.cancelable) && preventScroll) {\n e.preventDefault();\n }\n }\n }\n\n function panUpdate (e) {\n if (!moveDirectionExpected) {\n panStart = false;\n return;\n }\n caf(rafIndex);\n if (panStart) { rafIndex = raf(function(){ panUpdate(e); }); }\n\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) {\n if (!preventScroll && isTouchEvent(e)) { preventScroll = true; }\n\n try {\n if (e.type) { events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e)); }\n } catch(err) {}\n\n var x = translateInit,\n dist = getDist(lastPosition, initPosition);\n if (!horizontal || fixedWidth || autoWidth) {\n x += dist;\n x += 'px';\n } else {\n var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew): dist * 100 / (viewport + gutter);\n x += percentageX;\n x += '%';\n }\n\n container.style[transformAttr] = transformPrefix + x + transformPostfix;\n }\n }\n\n function onPanEnd (e) {\n if (panStart) {\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n if (carousel) { resetDuration(container, ''); }\n panStart = false;\n\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n var dist = getDist(lastPosition, initPosition);\n\n if (Math.abs(dist)) {\n // drag vs click\n if (!isTouchEvent(e)) {\n // prevent \"click\"\n var target = getTarget(e);\n addEvents(target, {'click': function preventClick (e) {\n preventDefaultBehavior(e);\n removeEvents(target, {'click': preventClick});\n }});\n }\n\n if (carousel) {\n rafIndex = raf(function() {\n if (horizontal && !autoWidth) {\n var indexMoved = - dist * items / (viewport + gutter);\n indexMoved = dist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\n index += indexMoved;\n } else {\n var moved = - (translateInit + dist);\n if (moved <= 0) {\n index = indexMin;\n } else if (moved >= slidePositions[slideCountNew - 1]) {\n index = indexMax;\n } else {\n var i = 0;\n while (i < slideCountNew && moved >= slidePositions[i]) {\n index = i;\n if (moved > slidePositions[i] && dist < 0) { index += 1; }\n i++;\n }\n }\n }\n\n render(e, dist);\n events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\n });\n } else {\n if (moveDirectionExpected) {\n onControlsClick(e, dist > 0 ? -1 : 1);\n }\n }\n }\n }\n\n // reset\n if (options.preventScrollOnTouch === 'auto') { preventScroll = false; }\n if (swipeAngle) { moveDirectionExpected = '?'; }\n if (autoplay && !animating) { setAutoplayTimer(); }\n }\n\n // === RESIZE FUNCTIONS === //\n // (slidePositions, index, items) => vertical_conentWrapper.height\n function updateContentWrapperHeight () {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\n }\n\n function getPages () {\n var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\n return Math.min(Math.ceil(rough), slideCount);\n }\n\n /*\n * 1. update visible nav items list\n * 2. add \"hidden\" attributes to previous visible nav items\n * 3. remove \"hidden\" attrubutes to new visible nav items\n */\n function updateNavVisibility () {\n if (!nav || navAsThumbnails) { return; }\n\n if (pages !== pagesCached) {\n var min = pagesCached,\n max = pages,\n fn = showElement;\n\n if (pagesCached > pages) {\n min = pages;\n max = pagesCached;\n fn = hideElement;\n }\n\n while (min < max) {\n fn(navItems[min]);\n min++;\n }\n\n // cache pages\n pagesCached = pages;\n }\n }\n\n function info (e) {\n return {\n container: container,\n slideItems: slideItems,\n navContainer: navContainer,\n navItems: navItems,\n controlsContainer: controlsContainer,\n hasControls: hasControls,\n prevButton: prevButton,\n nextButton: nextButton,\n items: items,\n slideBy: slideBy,\n cloneCount: cloneCount,\n slideCount: slideCount,\n slideCountNew: slideCountNew,\n index: index,\n indexCached: indexCached,\n displayIndex: getCurrentSlide(),\n navCurrentIndex: navCurrentIndex,\n navCurrentIndexCached: navCurrentIndexCached,\n pages: pages,\n pagesCached: pagesCached,\n sheet: sheet,\n isOn: isOn,\n event: e || {},\n };\n }\n\n return {\n version: '2.9.3',\n getInfo: info,\n events: events,\n goTo: goTo,\n play: play,\n pause: pause,\n isOn: isOn,\n updateSliderHeight: updateInnerWrapperHeight,\n refresh: initSliderTransform,\n destroy: destroy,\n rebuild: function() {\n return tns(extend(options, optionsElements));\n }\n };\n};\n","// get css-calc \n// @return - false | calc | -webkit-calc | -moz-calc\n// @usage - var calc = getCalc(); \nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function calc() {\n var doc = document, \n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'), \n result = false;\n\n body.appendChild(div);\n try {\n var str = '(10px * 10)',\n vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\n val;\n for (var i = 0; i < 3; i++) {\n val = vals[i];\n div.style.width = val;\n if (div.offsetWidth === 100) { \n result = val.replace(str, ''); \n break;\n }\n }\n } catch (e) {}\n \n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return result;\n}","// get subpixel support value\n// @return - boolean\nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function percentageLayout() {\n // check subpixel layout supporting\n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n wrapper = doc.createElement('div'),\n outer = doc.createElement('div'),\n str = '',\n count = 70,\n perPage = 3,\n supported = false;\n\n wrapper.className = \"tns-t-subp2\";\n outer.className = \"tns-t-ct\";\n\n for (var i = 0; i < count; i++) {\n str += '
';\n }\n\n outer.innerHTML = str;\n wrapper.appendChild(outer);\n body.appendChild(wrapper);\n\n supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\n\n body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\n\n return supported;\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function mediaquerySupport () {\n if (window.matchMedia || window.msMatchMedia) {\n return true;\n }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'),\n style = doc.createElement('style'),\n rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\n position;\n\n style.type = 'text/css';\n div.className = 'tns-mq-test';\n\n body.appendChild(style);\n body.appendChild(div);\n\n if (style.styleSheet) {\n style.styleSheet.cssText = rule;\n } else {\n style.appendChild(doc.createTextNode(rule));\n }\n\n position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\n\n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return position === \"absolute\";\n}\n","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function has3DTransforms(tf){\n if (!tf) { return false; }\n if (!window.getComputedStyle) { return false; }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n el = doc.createElement('p'),\n has3d,\n cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\n\n cssTF += 'transform';\n\n // Add it to the body to get the computed style\n body.insertBefore(el, null);\n\n el.style[tf] = 'translate3d(1px,1px,1px)';\n has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\n\n body.fake ? resetFakeBody(body, docOverflow) : el.remove();\n\n return (has3d !== undefined && has3d.length > 0 && has3d !== \"none\");\n}\n","export function getSlideId() {\n var id = window.tnsId;\n window.tnsId = !id ? 1 : id + 1;\n \n return 'tns' + window.tnsId;\n}","// create and append style sheet\nexport function createStyleSheet (media, nonce) {\n // Create the