{"version":3,"sources":["src/js/utilities.js","src/js/alert.js","src/js/helpers/inputMask.js","src/js/select.js","src/js/button.js","src/js/overflow.js","src/js/carousel.js","src/js/collapse.js","src/js/contact-drawer.js","src/js/dropdown.js","src/js/modal.js","src/js/filter.js","src/js/form.js","src/js/linkpicker.js","src/js/masthead.js","src/js/helpers/resizeElement.js","src/js/nav.js","src/js/pagination.js","src/js/popover.js","src/js/product-stack.js","src/js/progress.js","src/js/slider.js","src/js/tab.js","src/js/helpers/columns.js","src/js/helpers/rows.js","src/js/table.js","src/js/tooltip.js","src/js/dds-all.js"],"names":["global","factory","exports","module","define","amd","self","UIC","this","DOC","document","HTML","documentElement","globalObject","window","prefix","ddsSpace","supportTransitions","transitionEndEvent","transitionDuration","tipPositions","isIPhone","test","navigator","platform","isIOS","userAgent","maxTouchPoints","MSStream","isIE","isSafari","isEdge","isFirefox","direction","chrome","webstore","runtime","UP","RIGHT","DOWN","LEFT","NONE","getFullScreenOverlay","overlay","getElementById","console","warn","getElementsByClassName","element","classNAME","slice","call","getSibling","selector","firstChar","charAt","selectorSubstring","substr","nextElementSibling","classList","contains","id","tagName","toLowerCase","getFocusableElements","Array","prototype","querySelectorAll","filter","filterCollapsedParents","parentElement","getAttribute","getNextFocusableElement","getComputedStyle","getPropertyValue","indexOf","tabIndex","focusable","length","ariaAnnounce","theMessage","msgEl","randomNum","Math","floor","random","body","appendChild","createElement","style","aria-live","setTimeout","textContent","removeChild","getClosest","parentsOnly","parentNode","querySelector","previousElementSibling","one","event","handler","addEventListener","handlerWrapper","e","removeEventListener","getTransitionDurationFromElement","duration","parseFloat","isNaN","emulateTransitionEnd","called","uicoreCustomEvent","componentName","eventName","related","details","evt","createEvent","initCustomEvent","CustomEvent","bubbles","detail","relatedTarget","dispatchEvent","setFocus","focus","setActive","styleTip","link","position","parent","useArrow","maxWidth","windowWidth","windowHeight","rect","scroll","y","pageYOffset","x","pageXOffset","linkDimensions","offsetWidth","offsetHeight","topPosition","leftPosition","arrowTop","arrowLeft","arrowWidth","arrowHeight","posChanged","elMargin","elementDimensions","w","h","isPopover","arrow","halfTopExceed","halfLeftExceed","halfRightExceed","halfBottomExceed","topExceed","leftExceed","bottomExceed","rightExceed","className","replace","Number","margin","match","rectLeft","rectTop","handleFirstTab","keyCode","add","handleMouseDownOnce","remove","isObject","val","Object","toString","isArray","isJson","str","t","JSON","parse","each","arr","fn","scope","n","hasOwnProperty","sortItems","a","b","c","d","f","value","g","i","innerHTML","attr","setAttribute","classAdd","elem","classes","clazz","newClasses","classRemove","debounce","func","wait","immediate","timeout","context","args","arguments","callNow","clearTimeout","apply","altFind","callback","ret","validateNum","num","defaultVal","parseInt","jsonOptionsInit","options","jsonParams","dataset","renderSvg","svg","attributes","svgWrapper","createElementNS","key","elm","svgElem","setAttributeNS","name","show","flush","el","ie","NodeList","hasChildNodes","firstChild","getText","text","div","findText","childNodes","cNode","nodeType","data","Alert","HTMLElement","closeButton","dismissMessage","clickHandler","target","toggle","InputMask","wrap","mNum","spacing","hasValue","charSet","charset","cursorMin","handleValueChange","cursor","mask","italic","selectionEnd","handleCurrentValue","setValueOfMask","max","setSelectionRange","j","isInt","isLetter","strippedValue","isCharsetPresent","placeholder","l","newValue","matchesNumber","matchesLetter","undefined","validateProgress","validExample","pattern","RegExp","testValue","toUpperCase","Error","class","aria_hidden","emphasis","tClass","pTxt","createTextNode","errorDiv","removeAttribute","insertBefore","createShell","s","char","initKeyboardEvent","KeyboardEvent","cancelable","shiftKey","Spinbox","spinmin","spindefault","spinmax","spinstep","msg","input","plusCtrl","minusCtrl","handleKeypressEvent","charCode","which","blur","preventDefault","newInput","abs","handleCtrlClickEvent","control","temp","handleDisabling","hasAttribute","click","controls","DatePicker","datesFilter","pastDates","availableWeekDays","day","notBeforeDate","Date","notAfterDate","button_prev","button_next","focusableEls","currentSelected","calendarWrapper","calendarBtn","dateInput","calendar","pickerBtn","form","monthEl","smallMedia","matchMedia","tempSelected","todaysDate","monthLabel","datePtr","monthsTexts","freeze","TAB","ENTER","ESC","SPACE","PAGEUP","PAGEDOWN","END","HOME","setFocusableElements","toggleCalendar","matches","resetPosition","createOverlay","repositionIfNeeded","dateText","validity","valid","checkDateValidity","getFullYear","setFullYear","getMonth","setMonth","createMonth","newDateElem","nextBtn","getTime","resetToDefaultDate","blurHandler","removeActiveClass","removeOverlay","top","right","bottom","elementRect","getBoundingClientRect","calendarRect","elementCenterPercent","height","innerHeight","elementExceedsTop","elementExceedsBottom","scrHeightRemain","scrHeightRemainProportional","calendarExceedsBottom","calendarExceedsTop","calendarFitScr","calendarTopToReachProportion","activeElement","getWeekDay","createDay","date","isAvailable","newDayElem","dateElem","getDate","dateKeydownHandler","available_week_day","getDay","stringify","overflow","visibility","removeTempClass","firstElementChild","defaultDate","getNearestAvailableDay","clearCalendar","currentMonth","monthCheckBefore","setDate","daysPrev","prevDate","monthCheckAfter","daysAfter","futureDate","datas","calendarDate","setNewDate","monthPrev","monthNext","initEvent","setNewTempDate","currentDate","getNextAvailableDay","oldSelected","children","nextDate","nearestRight","nearestLeft","daysRight","daysLeft","od1","od2","prevSelected","buttonKeydownHandler","inputHandler","errorMsg","display","setCustomValidity","init","wrapper","bottomMenu","createCalendar","prevMonthDate","nextMonthDate","destroy","reset","setHours","checkValidity","stopPropagation","defaultDay","defaultMonth","BarSelect","selects","select","mouseOverHandler","focusHandler","currentTarget","isInViewport","scrollIntoView","bounding","left","clientHeight","innerWidth","clientWidth","Button","pxToMove","btnWidth","onEl","offEl","circleEl","btnToggle","toggled","checked","label","labels","type","otherLabel","otherInput","toggleOff","transform","toggleOn","widthOff","width","widthOn","ButtonFilter","inactiveFilterItem","activeFilterItem","lastActiveItem","focusInEventHandler","filterItem","parentFieldset","filterItems","Overflow","lazyload","responsive","overflowElement","overflowContainer","overflowChildren","overflowChildRight","overflowChildLeft","leftCtrl","rightCtrl","ctrlWidth","containerLeft","containerRight","centered","atLeftEnd","atRightEnd","centeredOffset","containerHeight","containerWidth","handleResize","getChildrenWidth","setLeftAndRightIndex","addHeightStyle","offsetLeft","currentOffset","pageRight","handleClickEvent","isRight","controlClick","rightChild","rightElementEdge","leftChild","tabLeft","contSpace","remainder","child","getMargin","push","currentStyle","convertRemToPixels","marginLeft","marginRight","els","overflowChildLeftSet","offSet","useCentered","toggleCentered","setContainerLeftRight","idx","childLeft","setMinimumWidth","minWidth","totalItems","hasRightControl","hasLeftControl","rem","computed","split","fontSize","ceil","setCtrlWidth","frameListener","requestAnimationFrame","leftSvg","aria-hidden","rightSvg","createArrowHtml","lazyLoad","getCurrentDetails","clickRight","clickLeft","clickEnd","clickHome","Carousel","interval","pause","keyboard","mosaic","visibilityState","smallMediaSize","mouseHover","stopAutoRotate","index","timer","isSliding","slides","total","slideDirection","leftArrow","rightArrow","svgIndicator","svgIndicators","btnIndicator","btnIndicators","indicator","indicators","pauseHandler","clearTimer","resumeHandler","cycle","indicatorHandler","eventTarget","slideTo","controlsHandler","srcElement","setActivePage","pageIndex","clearInterval","setInterval","viewportHeight","next","activeItem","getActiveIndex","slide-to","imgTag","backgroundImage","src","ieMosaicPolyfill","addListener","swipe","start","end","params","min","getTouch","screenX","screenY","touches","downListener","touch","moveListener","upListener","swipeInit","childIndicator","FilmstripCarousel","itemsView","handleOverflowChange","updateItemsView","clickEventHandler","rightNumber","leftNumber","success","Collapse","href","activeCollapse","showAllBtn","hideAllBtn","accordion","collapse","isClickable","closeAction","collapseElement","isAnimating","scrollHeight","hide","showHideAll","ContactDrawer","openTime","closedTime","transitionTime","tab","content","visible","cancelAutomation","toggleAction","openAction","hidden","timerAction","toggleOptionsStr","contactDrawer","toggleOptions","OpenTimeInSeconds","CloseTimeInSeconds","TransitionTimeInMilliseconds","setDrawerToggleOptions","transition","Dropdown","persist","menuItems","itemsChecked","currentText","filters","isMultiSelect","menu","preventEmptyAnchor","anchor","toggleDismiss","open","dismissHandler","preventScroll","windowClickHandler","hasData","filterInput","splice","recountChecked","keyHandler","isMenuOpen","isSameElement","isInsideMenu","isMenuItem","displayTxt","checkedCounter","html","formatDisplayCount","dropdownEls","dropdownEl","menuItem","Modal","static","backdrop","header","origRightPadding","scrollbarWidth","modalElement","firstFocusableEl","lastFocusableEl","handleBackwardTab","focusVisibilityHandler","handleForwardTab","keydownHandlerToggle","triggerShow","loading","triggerHide","isInDropdown","isInSplitBtn","minDistance","activeElementIdx","prevFocusableEl","nextFocusableEl","scrollToElement","scrollTop","paddingRight","dissmissEl","potentialHeader","FilterKeyword","addButton","filterCntr","handleKeyEvent","clickOutHandler","trim","FilterCollection","filterResults","filterOffCanvasResults","clearAllItem","clearAllOffCanvas","resultsLabelDesktop","filterOffCanvas","keywordFilter","visibileIdx","mediaIncrementforDropdowns","showMoreDiv","mobileModal","collectionInputsContainer","dropdowns","collectionInputs","targetCollection","filterCollection","smallWindow","horizontal","filtersTemp","dropdownObjects","accordionObjects","isOffCanvasState","isApplyingState","mediumMediaSize","handleAddEvent","createOffCanvasFilterItem","createDesktopFilterItem","checkbox","innerText","behavior","handleClearAllEvent","toggleClearAllButtons","clearFilter","clearMultiSelects","updateFiltersCount","filtersAsStrings","handleDesktopCheckboxClick","deselected","handleFilterItemClickEvent","removedFilter","handleOffCanvasCheckboxClick","checkboxId","desktopCheckbox","checkboxFilter","currentFilter","result","numOfFilters","updateOffCanvasAccordionCount","handleOffCanvasClearAllEvent","handleOffCanvasFilterItemClickEvent","offCanvasOrigin","handleShowMore","toggleDropdown","arrayOfObjectsContains","obj","ul","option","targetValue","results","deselectTarget","origin","updateVerticalDesktopAccordionCount","offCanvasFilterObj","filterDesktop","dropdown","createShowMoreButton","showMore","filterAlreadyExists","filterOffCanvasItem","isDigit","cloneNode","concat","createFilter","filterValue","offCanvasOriginId","addedFilter","useX","filterText","filterId","filterLabel","filterIcon","isOffCanvasFilter","whichFilters","whichParent","htmlFilter","accordionParent","accordionBtn","forEach","filteringMobileBtn","stringArray","onState","OffCanvas","updateResultsLabel","resultCount","error","modalBtn","filterTemp","newFilter","filterToRemove","typeofInput","multiSelect","numOfDropdowns","Forms","validate","togglePassword","passwordState","checkboxValidator","LinkPicker","interest","touse","interestData","touseData","find","onChangeHandler","selectedIndex","disabled","removeAllOptions","appendDataToSelect","sel","removeGrp","groups","getElementsByTagName","group","opts","createDocumentFragment","addOptions","o","len","prop","Masthead","activeContainerId","offCanvasMenuBtn","countryMenuBtn","fullScreenOverlay","signInText","mediaSize","handleMenuItemEvent","updateMenuHeights","handleMenuCntrEvent","currentMenu","handleMenuCtnrBlurEvent","closeMenu","closeOverLay","handleMenuHoverInEvent","openOverLay","handleMenuItemKeyEvent","nextItem","item","isTop","previousItem","lastElementChild","openMenu","handleIconClickEvent","origContainerId","button","container","activeContainer","activeButton","closeContainer","openContainer","handleWindowClickEvent","handleFocusOutEvent","handleKeyDownEvent","previousMenu","previousLink","items","nextMenu","prePreviousMenu","heights","cBottom","cHeight","nBottom","nHeight","toggleFullScreen","logIn","displayname","signInCtnr","signInBadge","logOut","cartCount","count","cartBadge","topMenuItem","menuCtnr","ResizeElement","cancel","raf","attachEvent","stylesCreated","requestFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","cancelFrame","cancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","resetTriggers","triggers","__resizeTriggers__","expand","contract","expandChild","scrollLeft","scrollWidth","scrollListener","__resizeRAF__","__resizeLast__","checkTriggers","__resizeListeners__","animation","keyframeprefix","animationstartevent","domPrefixes","startEvents","animationName","animationKeyframes","animationStyle","addResizeListener","css","head","styleSheet","cssText","createStyles","removeResizeListener","detachEvent","NavAnchored","tabs","backButton","sticky","targetItems","targetNav","exitFocus","activeTab","isSticky","tabbing","modalSize","showModal","activateTab","deactivateTab","handleScrollEvent","last_known_scroll_position","stickNav","updateItems","itemTop","spacer","targetBottom","setElementWidth","zIndex","removeElementWidth","hideModal","handleModalKeydown","createModal","isIconElement","tabContent","toggleElementWidth","determineSection","scrollOffset","handleEnterEvent","currentSection","toggleTab","handleKeydownEvent","focusEl","iter","section","oldItem","newItem","activateItems","panel","field","NavSkip","tabindex","borderStyle","dataInset","focusOutHandler","toggleZindex","opacity","focusElement","border","NavAnchoredVertical","opt","keys","activeCSSClassName","scrollViewType","shouldShowModal","isClickOnIconElement","lastKnownScrollPosition","navOnTopScreen","elemClassList","navItem","lastNavItem","positionOflastNavItemBottom","negativeTop","isNavAfterLastContentBottom","toogleContent","NavLeft","main","suffix","arrows","selected","altmenu","masthead","desktopLeftNav","siteBody","offCanvas","footer","buttonToggle","footerHeight","mastheadHeight","visibleFooter","focusableElms","parentAccordions","defaultMain","adjustHeightForFooter","calcHeight","maxHeight","adjustHeightForMasthead","isFooterVisible","alignChevrons","accordionButtons","accordionButton","after","handleAdjustmentEvent","handleBackClick","handleOffCanvasKeyDown","handleOffCanvasItemEsc","pageReadyCount","fElement","leftMenu","aItem","oneLi","thisLi","headerHorizontalMenu","pageReady","mastheadMend","storedId","createOffCanvasMenu","li","lnAccordion","lnCardHeader","lnCollapse","lnAnchor","Promise","all","from","images","img","complete","map","resolve","onload","onerror","then","tag","ps","parentAccordion","reverse","stepAccord","aButton","aChevron","aCollapse","thisChevron","list","selectedLink","waitForLeftNav","Pagination","page","pageText","itemsPerPageText","perPageSelect","perPage","hidePages","external","buttonLabelLeft","buttonLabelRight","disablePaginationInput","showTotal","pagination","currentPage","previousPerPage","newPage","totalPages","newTotalPages","lastPage","onFirstPage","onLastPage","links","template","prevText","nextText","origPerPage","handlePaginationEvent","buttons","pages","queryStr","handleFocusoutEvent","handleChangeEvent","renderPage","update","origCurrentPage","firstItemOnPage","renderPageInput","pageInputWrapper","pageInputTextBefore","pageInputField","aria-label","pageInputTextAfter","p","bEl","data-page","span","totalItemsWrapper","origTotalPages","frag","prev","hasInput","renderPager","Option","renderSelect","newPerPage","addItems","removeItems","remItems","setItems","newItems","spanItems","outerHTML","paginator","role","render","Popover","delay","title","data_title","data_content","placement","data_placement","inOffCanvas","inFixedTop","inFixedBottom","popoverArrow","popoverCloseBtn","popoverFocusTrap","positionCalc","popover","popoverModal","isHiding","showTimeout","hideTimeout","windowBlurHandler","closeBtnHandler","focusTrapHandler","updatePopover","showTrigger","hideTrigger","popoverParent","positionCalculation","popoverTitle","popoverParagraph","popoverDialog","popoverTitleDiv","popoverContent","aria_label","data_dismiss","popoverClasses","join","createPopover","ProductStack","childrenWidth","productStacks","rightCtrls","leftCtrls","productStackID","increment","updateSectionHeights","sections","sectionName","sectionMatches","sectionMatch","styleTag","view","viewDiv","productStack","Progress","showText","showtext","timeToComplete","round","Slider","optionsInput","slider","animate","animationDuration","ort","orientation","dir","singleStep","step","percision","behaviour","limit","padding","tooltips","showRange","format","ariaFormat","spectrum","connects","handles","handleNumbers","sliderBase","actions","minLabel","maxLabel","minValue","maxValue","optEvents","events","supportsPassive","locations","values","activeHandlesCount","minContainers","maxContainers","dirOffset","msPrefix","msTransform","transformRule","defaultFormatter","to","toFixed","endEventHandler","get","asArray","containers","focusEventHandler","blurEventHandler","getNextStepsForHandle","handleNumber","location","nearbySteps","getNearbySteps","thisStep","decrement","snap","stepBefore","startValue","stepAfter","highestStep","stepDecimals","countStepDecimals","bindEvent","namespacedEvent","fireEvent","addNodeTo","addTarget","documentLeave","nodeName","eventEnd","eventMove","movement","calcPoint","startCalcPoint","proposal","baseSize","moveHandles","handle","listeners","setZindex","eventStart","some","isHandleDisabled","moveEvent","move","pageOffset","buttonsProperty","endEvent","doNotReject","outEvent","eventTap","calcPointToPercentage","getClosestHandle","addClassFor","setHandle","addTooltip","isSliderDisabled","addOrigin","horizontalKeys","verticalKeys","largeStepKeys","edgeKeys","isLargeDown","isLargeUp","isDown","isUp","isMax","Spectrum","getDefaultStep","xVal","toStepping","eventKeydown","addConnect","base","countDecimals","numStr","pieces","String","upward","proposals","checkHandlePosition","state","transformDirection","lookBackward","lookForward","fromStepping","rule","inRuleOrder","updateConnect","updateHandlePosition","connectWidth","translateRule","scaleRule","tap","targetEvent","eventType","reference","getValue","unconstrained","getStep","v","resolveToValue","subRangeRatio","pa","pb","fromPercentage","range","toPercentage","xPct","xSteps","getJ","closest","handleEntryPoint","that","percentage","isNumeric","xHighestCompleteStep","handleStepPoint","totalSteps","xNumSteps","isFinite","isPercentage","alt","method","fixEvent","hover","points","methods","passive","mouse","pointer","isTouchOnTarget","checkTouch","targetTouches","pageX","pageY","targetTouch","changedTouches","getPageOffset","clientX","clientY","doc","docElem","ownerDocument","clientTop","clientLeft","pos","removeTooltips","namespace","substring","bind","tEvent","tNamespace","tooltip","removeElement","supportPageOffset","isCSS1Compat","compatMode","entry","ordered","sort","va","vb","size","convert","RangeError","drag","fixed","parsed","validateMargin","formatter","inputs","testJs","validateOptions","addContent","addContainer","pointerEnabled","msPointerEnabled","addSlider","optConnects","connectBase","addElements","connect","handleBefore","handleAfter","eventHolders","eventHolder","fireSetEvent","isInit","valueSet","unencoded","formattedValue","setTooltips","positions","now","Tab","tablist","withinModal","panels","thresholdMediaSize","tabContainer","accordionWrapper","nested","37","38","39","40","handleOverflowEvent","determineOrientation","proceed","switchTabOnArrowPress","pressed","targetTab","focusLastTab","focusFirstTab","needsFocus","deactivateTabs","getTablistPanels","determineDeletable","deleteTab","checkTabFocus","resizeHandler","handleResizeSmall","sisterCollapseStr","activateCollapse","showBlock","prevActivated","sisterTabStr","tabToActivate","tabContentContainer","modalBody","removeListener","getParentTablist","delayValue","determineDelay","siblingTabs","getSiblingTabs","card","cardHeader","h5","data_toggle","data_target","data_parent","aria_controls","aria_expanded","chevron","accordionSpan","cardBodyWrapper","aria_labelledby","cardBody","Columns","dt","swap","columns","cols","headings","order","cell","column","originalCellIndex","sortable","hiddenColumns","row","dataIndex","expandable","searchIndex","cells","activeHeadings","lastTh","activeRows","rebuild","th","td","insert","heading","rows","renderHeader","hasHeadings","sorting","btm","alpha","numeric","tr","updateSortDirection","selectedRows","indexes","searchData","cellIndex","Rows","build","tdx","hasRows","TableComplex","validateRow","hasErrors","rowCount","rowLength","localFunctions","subElements","layoutOptions","tableData","expandIcon","condensed","fixedColumns","rearrangeableColumns","fixedHeight","defaultBatchActions","exportCsv","exportJson","deleteRow","delete","noEntries","import","print","batchActions","chooseActions","chooseAction","allColumns","showData","search","settings","exportDetails","exportShowWarning","allowedExtensions","action","allowedImportExtensions","ext","actionsSelectFilters","additionalActions","additionalAction","js","layout","row1","row2","table","noRows","columnBox","paginationElement","columnRenderers","selectedColumns","dragSrcEl","sortedColumnIdx","batchId","allCheckboxId","searchId","initialY","begOffsetTop","currentY","searching","metHeight","columnsFixed","moveableCols","colMoved","handleTouchEvent","pointerType","finOffsetTop","yOffset","dataTransfer","offsetTop","targetEl","handleCheckBoxEvent","before","handlePointerLeave","col","startedBelow","startedAbove","endedBelow","endedAbove","handleTouchEnd","orderChanged","applyButton","dropElem","dropHTML","insertAdjacentHTML","previousSibling","nextSibling","setupDragEvents","handleDragEvent","overEl","leaveEl","dropTarget","handleImportActionEvent","reader","FileReader","output","files","inputOptions","readAsText","handleExportActionEvent","exportFileOptions","skipColumn","export","handleDeleteActionEvent","handleSelectAllChange","nodeIndex","columnBoxCheckboxes","cellIdx","getHeaderCellIndex","check","dataInput","pop","newRows","less","more","selectAll","indeterminate","thisBox","toggleBox","checkCount","allChk","chkbox","handleTableHeaderEvent","deleteAll","handleAccordionEvent","htmlRow","detailsRow","use","rowId","extend","props","baseCellIdx","baseIdx","setRenderColumns","renderers","renderer","renderDetails","stripeClass","detailsCell","colspan","accordionBody","accordionBodyChild","renderExpand","showButton","aria-expanded","inputCheckbox","renderCustomRow","clean","renderActions","renderSearch","renderSettings","renderPlaceholder","topCtnr","createActionButton","dataToggle","dataTarget","onclick","flexGrow","justifyContent","cmplxAction","cmplxActionLabel","for","cmplxActionDropdown","data-toggle","data-target","aria-controls","svgClass","unordered","actionLabel","actionLI","inputGroup","searchCtnr","searchIcon","searchInput","searchLabel","optGear","XMLSerializer","serializeToString","selectHeader","selectCellIdx","stripeColor","clear","fixHeight","sortLabel","fixColumns","box","bindEvents","actionSelect","actionButton","createSpecialCharModal","origInput","settingsCtnr","renderSettingsDropDown","unOrderedList","indI","liCheckbox","handleButtonEvent","fileImport","setColumns","nCIdx","listItem","columnLabel","columnInput","boxLabel","columnContainer","checkableCount","dragSvg","draggable","defaultAllChecked","emptySpan","buttonContainer","cancelButton","hd","reducePx","tHead","expandDone","selectDone","r","tBodies","widths","newrows","rowIdx","headerCount","padR","selectData","z","query","modal","modalEl","csvBtn","isUrl","isEmail","modifyText","expandRow","theRowIdx","expandCell","paginate","inArray","reduce","bool","word","includes","setMessage","newPages","refresh","exportOptions","headers","defaults","download","filename","exportFileName","lineDelimiter","columnDelimiter","tableName","replacer","space","blob","unshift","isLink","encodeURI","Blob","decodeURIComponent","url","msSaveBlob","encodeURIComponent","newData","importHeader","shift","json","pTable","thead","tbody","newTh","newCell","message","insertDetails","searchResults","rowIds","newNum","crypto","msCrypto","getRandomValues","Uint32Array","dataToTable","replaceChild","dataIdx","itemCount","rowsNeeded","drop","Tooltip","textAlignments","textAlign","text_align","tooltipArrow","tooltipIdText","tooltipId","counter","aria_describedby","tooltipInner","createToolTip","supports","initCallback","lookUp","support","constructor","Form","SkipNav","Table","loadURLSVGs","paths","execute","defs","xhr","XMLHttpRequest","readyState","status","response","createRange","createContextualFragment","fragSymbol","fragStyle","handleSVGResponse","responseText","send","defineProperty"],"mappings":"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","sourcesContent":["// parse the package.json file to get needed variables\nimport { ddsSpace, ddsToken } from \"../../package.json\";\n\nexport const DOC = document;\nexport const HTML = DOC.documentElement;\nexport const globalObject = typeof global !== \"undefined\" ? global : window;\nexport const prefix = ddsSpace + ddsToken;\nexport const supportTransitions =\n \"Webkit\" + \"Transition\" in HTML[\"style\"] ||\n \"Transition\"[\"toLowerCase\"]() in HTML[\"style\"];\nexport const transitionEndEvent =\n \"Webkit\" + \"Transition\" in HTML[\"style\"] ?\n \"Webkit\"[\"toLowerCase\"]() + \"Transition\" + \"End\" :\n \"Transition\"[\"toLowerCase\"]() + \"end\";\nexport const transitionDuration =\n \"Webkit\" + \"Duration\" in HTML[\"style\"] ?\n \"Webkit\"[\"toLowerCase\"]() + \"Transition\" + \"Duration\" :\n \"Transition\"[\"toLowerCase\"]() + \"Duration\";\nexport const tipPositions = /\\b(top|bottom|left|right)+/;\nexport const isIPhone = (/(IPhone)/i.test(navigator.platform));\nexport const isIOS = (/iPad|iPhone|iPod|Macintosh/i.test(navigator.userAgent) || (navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1)) && !window.MSStream; // /(/(IPad)/i.test(navigator.platform)) || (/(IPhone)/i.test(navigator.platform));\nexport const isIE = (/msie|trident|Windows Phone/i.test(navigator.userAgent));\nexport const isSafari = (/Version\\/[\\d.]+.*Safari/i.test(navigator.userAgent));\nexport const isEdge = (/Edge\\/\\d./i.test(navigator.userAgent));\nexport const isFirefox = (/firefox/i.test(navigator.userAgent));\nexport const isChrome = !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);\nexport const direction = {\n UP: 1,\n RIGHT: 2,\n DOWN: 3,\n LEFT: 4,\n NONE: 5\n};\n\n// selection methods\nexport function getFullScreenOverlay() {\n var overlay = DOC.getElementById(prefix + \"full-screen-overlay\");\n if (!overlay) {\n console.warn(\"OFF-CANVAS: Overlay requested. Corresponding HTML missing. Please apply id 'dds__full-screen-overlay' and class 'dds__overlay' to an empty div\");\n return false;\n }\n return overlay;\n}\n\n\nexport function getElementsByClassName(element, classNAME) {\n // returns Array\n return [].slice.call(element[\"getElementsByClassName\"](classNAME));\n}\n\nexport function getSibling(element, selector) {\n\n var firstChar = selector.charAt(0);\n var selectorSubstring = selector.substr(1);\n\n if (firstChar === \".\") {\n if (element.nextElementSibling && element.nextElementSibling.classList) {\n if(element.nextElementSibling.classList.contains(selectorSubstring)) {\n return element.nextElementSibling;\n } else {\n return getSibling(element.nextElementSibling, selector);\n }\n }\n } else if (firstChar === \"#\") {\n \n if (element.nextElementSibling && element.nextElementSibling.id) {\n if(element.nextElementSibling.id === selectorSubstring) {\n return element.nextElementSibling;\n } else {\n return getSibling(element.nextElementSibling, selector);\n }\n }\n } else {\n if (element.nextElementSibling && element.nextElementSibling.tagName) {\n if(element.nextElementSibling.tagName.toLowerCase() === selector.toLowerCase()) {\n return element.nextElementSibling;\n } else {\n return getSibling(element.nextElementSibling, selector);\n }\n }\n }\n}\n\nexport function getFocusableElements(element) {\n var arr = Array.prototype.slice.call(element.querySelectorAll(\"*:not([aria-expanded='false']) a[href],*:not([aria-expanded='false']) area[href],*:not([aria-expanded='false']) input:not([disabled]),*:not([aria-expanded='false']) select:not([disabled]),*:not([aria-expanded='false']) textarea:not([disabled]),*:not([aria-expanded='false']) button:not([disabled]):not(.dds__d-none), *:not([aria-expanded='false']) > .dds__accordion-card-body > ul > [tabindex='0']\"));\n return arr.filter(filterCollapsedParents);\n}\n\nfunction filterCollapsedParents(element) {\n for(;element && element !== DOC; element = element.parentElement) {\n if (element.parentElement) {\n if ((element.parentElement.classList.contains(\"dds__collapse\") && element.parentElement.getAttribute(\"aria-expanded\") == \"false\") || element.parentElement.classList.contains(prefix + \"d-none\")) {\n return false;\n } \n } else {\n return element; //if scaled entire DOM tree and no parents are collapsed, element is focusable\n }\n }\n}\n\nexport function getNextFocusableElement(element) {\n for(;element && element !== DOC; element = element.nextElementSibling) {\n if (element.nextElementSibling) {\n if (window.getComputedStyle(element.nextElementSibling).getPropertyValue(\"display\") != \"none\") {\n if ([\"A\",\"AREA\",\"INPUT\",\"SELECT\",\"TEXTAREA\",\"BUTTON\"].indexOf(element.nextElementSibling.tagName) != -1\n && element.nextElementSibling.tabIndex >= 0) {\n return element.nextElementSibling;\n } else {\n var focusable = getFocusableElements(element.nextElementSibling);\n if (focusable && focusable.length > 0) {\n return focusable[0];\n }\n }\n }\n } else {\n return getNextFocusableElement(element.parentElement);\n }\n }\n}\n\n/**\n * Creates a temporary, assertive element to announce a message for text reader clients, then removes that element.\n * @param {String} theMessage The short text to announce. Consider translation requirements.\n * @return void\n */\nexport function ariaAnnounce (theMessage) {\n var msgEl,\n randomNum = Math.floor(Math.random() * 999999999) + 1;\n document.body.appendChild(createElement(\"div\", {\n style: \"position:absolute; left:-1000px; width: 0px; height: 0px;\",\n id: \"ariaAnnouncement\" + randomNum,\n \"aria-live\": \"assertive\"\n }));\n msgEl = document.getElementById(\"ariaAnnouncement\" + randomNum);\n window.setTimeout(function() {\n msgEl.textContent = theMessage;\n }, 15);\n window.setTimeout(function () {\n msgEl.parentElement.removeChild(msgEl);\n }, 5000);\n}\n\n\n/**\n * @method getClosest Crawls the DOM to find the closest targeted element\n * @param element {DOM element} the DOM element from which to start searching\n * @param selector {string} the class, ID, or tag name for which to search\n * @param parentsOnly {boolean} if false or not set, modifies TAG search to include children elements of the currently-inspected target\n * @return {element} or false\n */\nexport function getClosest(element, selector, parentsOnly) {\n // source http://gomakethings.com/climbing-up-and-down-the-dom-tree-with-vanilla-javascript/\n var firstChar = selector.charAt(0);\n\n var selectorSubstring = selector.substr(1);\n if (firstChar === \".\") {\n // If selector is a class\n for (; element && element !== DOC; element = element.parentNode) {\n // Get closest match\n if (\n element[\"parentNode\"].querySelector(selector) !== null &&\n // hasClass(element, selectorSubstring)) {\n element.classList[\"contains\"](selectorSubstring)\n ) {\n return element;\n } else if (parentsOnly === false) {\n if (element.querySelector(selector)) {\n return element.querySelector(selector);\n }\n }\n }\n } else if (firstChar === \"#\") {\n // If selector is an ID\n for (; element && element !== DOC; element = element.parentNode) {\n // Get closest match\n if (element.id === selectorSubstring) {\n return element;\n } else if (parentsOnly === false) {\n if (element.querySelector(selector)) {\n return element.querySelector(selector);\n }\n }\n }\n } else {\n // If selector is a tagName\n for (; element && element !== DOC; element = element.parentNode) {\n // Get closest match\n if (element.tagName && element.tagName.toLowerCase() === selector.toLowerCase() ) {\n return element;\n } else if (element.previousElementSibling && element.previousElementSibling.tagName.toLowerCase() === selector.toLowerCase()) {\n return element.previousElementSibling;\n } else if (parentsOnly === false) {\n if (element.querySelector(selector)) {\n return element.querySelector(selector);\n }\n }\n }\n }\n return false;\n\n}\n\nexport function one(element, event, handler) {\n element.addEventListener(\n event,\n function handlerWrapper(e) {\n handler(e);\n element.removeEventListener(event, handlerWrapper, false);\n },\n false\n );\n}\n\nexport function getTransitionDurationFromElement(element) {\n var duration = supportTransitions ?\n globalObject[\"getComputedStyle\"](element)[transitionDuration] :\n 0;\n duration = parseFloat(duration);\n duration =\n typeof duration === \"number\" && !isNaN(duration) ? duration * 1000 : 0;\n return duration + 50; // we take a short offset to make sure we fire on the next frame after animation\n}\n\nexport function getAnimationDurationFromElement(element) {\n var duration = supportTransitions ?\n globalObject[\"getComputedStyle\"](element)[\"animationDuration\"] :\n 0;\n duration = parseFloat(duration);\n duration =\n typeof duration === \"number\" && !isNaN(duration) ? duration * 1000 : 0;\n return duration + 50; // we take a short offset to make sure we fire on the next frame after animation\n}\n\nexport function emulateTransitionEnd(element, handler) {\n // emulateTransitionEnd since 2.0.4\n var called = 0;\n\n var duration = getTransitionDurationFromElement(element);\n supportTransitions &&\n one(element, transitionEndEvent, function (e) {\n handler(e);\n called = 1;\n });\n setTimeout(function () {\n !called && handler();\n }, duration);\n}\n\nexport function emulateAnimationnEnd(element, handler) {\n // emulateTransitionEnd since 2.0.4\n var called = 0;\n\n var duration = getAnimationDurationFromElement(element);\n supportTransitions &&\n one(element, transitionEndEvent, function (e) {\n handler(e);\n called = 1;\n });\n setTimeout(function () {\n !called && handler();\n }, duration);\n}\n\nexport function uicoreCustomEvent(componentName, eventName, related, details) {\n var evt;\n if (isIE){\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent( \"uic\" + componentName + eventName, true, true, details );\n }\n else{\n evt = new CustomEvent(\"uic\" + componentName + eventName, {\n bubbles: true,\n detail: details\n });\n }\n evt.relatedTarget = related;\n related.dispatchEvent(evt);\n}\n\n\n// tooltip / popover stuff\nexport function getScroll() {\n // also Affix and ScrollSpy uses it\n return {\n y: globalObject.pageYOffset || HTML[\"scrollTop\"],\n x: globalObject.pageXOffset || HTML[\"scrollLeft\"]\n };\n}\n\n// set new focus element since 2.0.3\nexport function setFocus(element) {\n element.focus ? element.focus() : element.setActive();\n}\n\nexport function offWindowLeft(element, link) {\n var elementDimensions = {\n w: element[\"offsetWidth\"],\n h: element[\"offsetHeight\"]\n };\n var rect = link[\"getBoundingClientRect\"]();\n if (elementDimensions.w < 50) {\n elementDimensions.w = 50;\n }\n return rect[\"left\"] - elementDimensions.w < 0;\n}\n\nexport function styleTip(link, element, position, parent, useArrow) {\n // both popovers and tooltips (target,tooltip,placement,elementToAppendTo)\n\n // element.style.height = elementDimensions.h + 'px';\n // element.style.width = elementDimensions.w + 'px';\n element.style.maxWidth = \"125px\";\n\n useArrow = typeof useArrow === \"boolean\" ? useArrow : true;\n\n var windowWidth = HTML[\"clientWidth\"] || DOC[\"body\"][\"clientWidth\"];\n\n var windowHeight = HTML[\"clientHeight\"] || DOC[\"body\"][\"clientHeight\"];\n\n var rect = link[\"getBoundingClientRect\"]();\n\n var scroll =\n parent === DOC[\"body\"] ?\n getScroll() :\n {\n y: parent[\"offsetTop\"] + parent[\"scrollTop\"],\n x: parent[\"offsetLeft\"] + parent[\"scrollLeft\"]\n };\n\n var linkDimensions = {\n w: link.offsetWidth,\n h: link.offsetHeight\n };\n\n var maxWidth = 125;\n while(element[\"offsetHeight\"] >= maxWidth) {\n maxWidth = maxWidth * 1.5;\n element.style.maxWidth = maxWidth + \"px\";\n }\n\n var elementDimensions = {\n w: element[\"offsetWidth\"],\n h: element[\"offsetHeight\"]\n };\n\n var isPopover = element.classList[\"contains\"](\"dds__popover\");\n\n var topPosition;\n\n var leftPosition;\n\n var arrow = element.querySelector(\".dds__arrow\");\n\n var arrowTop;\n\n var arrowLeft;\n\n var arrowWidth;\n\n var arrowHeight;\n\n var halfTopExceed =\n rect[\"top\"] + linkDimensions.h / 2 - elementDimensions.h / 2 < 0;\n\n var halfLeftExceed =\n rect[\"left\"] + linkDimensions.w / 2 - elementDimensions.w / 2 < 0;\n\n var halfRightExceed =\n rect[\"left\"] + elementDimensions.w / 2 + linkDimensions.w / 2 >= windowWidth;\n\n var halfBottomExceed =\n rect[\"top\"] + elementDimensions.h / 2 + linkDimensions.h / 2 >= windowHeight;\n\n var topExceed = rect[\"top\"] - elementDimensions.h < 0;\n\n var leftExceed = rect[\"left\"] - elementDimensions.w < 0;\n\n var bottomExceed =\n rect[\"top\"] + elementDimensions.h + linkDimensions.h >= windowHeight;\n\n var rightExceed =\n rect[\"left\"] + elementDimensions.w + linkDimensions.w >= windowWidth;\n\n // recompute position\n var posChanged;\n if (position === \"right\"){\n if (!rightExceed && !halfTopExceed && !halfBottomExceed) {\n position === \"right\";\n } else if (rightExceed && !leftExceed && !halfTopExceed && !halfBottomExceed) { //If exceeds right, but fits on the left\n posChanged = true;\n position = \"left\";\n } else if ((!halfTopExceed || !halfBottomExceed) && (!halfRightExceed || !halfLeftExceed)) { //If half of top or bottom doesnt fit, try to fit top or bottom\n if (!topExceed) {\n posChanged = true;\n position = \"top\";\n } else if (!bottomExceed) {\n posChanged = true;\n position = \"bottom\"; \n }\n }\n }\n else if (position === \"left\") {\n if (!leftExceed && !halfTopExceed && !halfBottomExceed) {\n position === \"left\";\n } else if (leftExceed && !rightExceed && !halfTopExceed && !halfBottomExceed) {\n posChanged = true;\n position = \"right\";\n } else if ((!halfTopExceed || !halfBottomExceed) && (!halfRightExceed || !halfLeftExceed)) {\n if (!topExceed) {\n posChanged = true;\n position = \"top\";\n } else if (!bottomExceed) {\n posChanged = true;\n position = \"bottom\"; \n }\n }\n } else if (position === \"top\") {\n if (!topExceed && !halfRightExceed && !halfLeftExceed) {\n position === \"top\";\n }else if (topExceed && !bottomExceed && !halfRightExceed && !halfLeftExceed) {\n posChanged = true;\n position = \"bottom\";\n } else if ((!halfRightExceed || !halfLeftExceed) && (!halfTopExceed || !halfBottomExceed)) { //If half of right or left doesnt fit, try to fit right or left\n if (!rightExceed) {\n posChanged = true;\n position = \"right\";\n } else if (!leftExceed) {\n posChanged = true;\n position = \"left\"; \n }\n }\n } else if (position === \"bottom\") {\n if (!bottomExceed && !halfRightExceed && !halfLeftExceed) {\n position === \"bottom\";\n } else if (bottomExceed && !topExceed && !halfRightExceed && !halfLeftExceed) {\n posChanged = true;\n position = \"top\";\n } else if ((!halfRightExceed || !halfLeftExceed) && (!halfTopExceed || !halfBottomExceed)) { //Can't be top\n if (!rightExceed) {\n posChanged = true;\n position = \"right\";\n } else if (!leftExceed) {\n posChanged = true;\n position = \"left\"; \n }\n }\n }\n\n // update tooltip/popover class\n element.className[\"indexOf\"](position) === -1 &&\n (element.className = element.className.replace(tipPositions, position));\n\n // update tooltip/popover dimensions\n if (posChanged) {\n elementDimensions = {\n w: element[\"offsetWidth\"],\n h: element[\"offsetHeight\"]\n };\n }\n // we check the computed width & height and update here\n var elMargin;\n try {\n elMargin = Number(window.getComputedStyle(element).margin.match(/\\d+/)[0]); // get the margin value from style as a number\n } catch (e) {\n elMargin = 0;\n }\n arrowWidth = arrow[\"offsetWidth\"] + (elMargin * 2);\n arrowHeight = arrow[\"offsetHeight\"] + (elMargin * 2);\n\n var rectLeft = rect[\"left\"], rectTop = rect[\"top\"];\n if (!useArrow) {\n if (position === \"left\") {\n rectLeft = rect[\"left\"] + arrowWidth;\n } else if( position === \"right\") {\n rectLeft = rect[\"left\"] - arrowWidth;\n } else if (position === \"top\") {\n rectTop = rect[\"top\"] + arrowHeight;\n } else if (position === \"bottom\") {\n rectTop = rect[\"top\"] - arrowHeight;\n }\n }\n\n // apply styling to tooltip or popover\n if (position === \"left\" || position === \"right\") {\n // secondary|side positions\n if (position === \"left\") {\n // LEFT\n leftPosition =\n rectLeft +\n scroll.x -\n elementDimensions.w -\n (isPopover ? arrowWidth : 3); // subtract to move more left\n window.addEventListener(\"resize\", function () {\n arrow[\"style\"][\"left\"] = \"initial\";\n });\n } else {\n // RIGHT\n leftPosition = rectLeft + linkDimensions.w + (isPopover ? 0 : 3); // add to move more right\n }\n\n topPosition =\n rect[\"top\"] - elementDimensions.h / 2 + linkDimensions.h / 2 + scroll.y;\n arrowTop =\n elementDimensions.h / 2 - \n (isPopover ? arrowHeight * 0.9 : arrowHeight / 2);\n } else if (position === \"top\" || position === \"bottom\") {\n // primary|vertical positions\n if (position === \"top\") {\n // TOP\n topPosition =\n rectTop +\n scroll.y -\n elementDimensions.h - \n (isPopover ? arrowHeight : 3); // subtract to move more up\n } else {\n // BOTTOM\n topPosition = rectTop + linkDimensions.h + scroll.y + (isPopover ? 0 : 3);\n }\n leftPosition =\n rect[\"left\"] - elementDimensions.w / 2 + linkDimensions.w / 2 + scroll.x;\n arrowLeft = elementDimensions.w / 2 - arrowWidth / 2;\n }\n\n // apply style to tooltip/popover and its arrow\n element[\"style\"][\"top\"] = topPosition + \"px\";\n element[\"style\"][\"left\"] = leftPosition + \"px\";\n\n arrowTop && (arrow[\"style\"][\"top\"] = arrowTop + \"px\");\n arrowLeft && (arrow[\"style\"][\"left\"] = arrowLeft + \"px\");\n\n}\n\nexport function handleFirstTab(e) {\n if (e.keyCode === 9) {\n document.body.classList.add(\"user-is-tabbing\");\n\n window.removeEventListener(\"keydown\", handleFirstTab);\n window.addEventListener(\"mousedown\", handleMouseDownOnce);\n }\n}\n\nexport function handleMouseDownOnce(e) {\n //NVDA in browse mode swallows the enter key as mouse click: https://github.com/nvaccess/nvda/issues/4903\n //This breaks our visual focus toggle. Enter key event has x,y values of 0,0 whereas click has positive x,y values.\n //Capture enter key when treated as mousedown by NVDA browse mode.\n if (e.x === 0 && e.y === 0) {\n return;\n }\n document.body.classList.remove(\"user-is-tabbing\");\n\n window.removeEventListener(\"mousedown\", handleMouseDownOnce);\n window.addEventListener(\"keydown\", handleFirstTab);\n}\n\n// Form--passwords validation\n//================================================================\nexport function passwordVerification() {\n var myInput = document.getElementById(\"psw\");\n var letter = document.getElementById(\"letter\");\n var capital = document.getElementById(\"capital\");\n var number = document.getElementById(\"number\");\n var length = document.getElementById(\"length\");\n\n // When the user clicks on the password field, show the message box\n myInput.onfocus = function () {\n document.getElementById(\"message\").style.display = \"block\";\n };\n\n // When the user clicks outside of the password field, hide the message box\n myInput.onblur = function () {\n document.getElementById(\"message\").style.display = \"none\";\n };\n\n // When the user starts to type something inside the password field\n myInput.onkeyup = function () {\n // Validate lowercase letters\n var lowerCaseLetters = /[a-z]/g;\n if (myInput.value.match(lowerCaseLetters)) {\n letter.classList.add(\"valid\");\n letter.classList.remove(\"invalid\");\n } else {\n letter.classList.remove(\"valid\");\n letter.classList.add(\"invalid\");\n }\n\n // Validate capital letters\n var upperCaseLetters = /[A-Z]/g;\n if (myInput.value.match(upperCaseLetters)) {\n capital.classList.remove(\"invalid\");\n capital.classList.add(\"valid\");\n } else {\n capital.classList.remove(\"valid\");\n capital.classList.add(\"invalid\");\n }\n\n // Validate numbers\n var numbers = /[0-9]/g;\n if (myInput.value.match(numbers)) {\n number.classList.remove(\"invalid\");\n number.classList.add(\"valid\");\n } else {\n number.classList.remove(\"valid\");\n number.classList.add(\"invalid\");\n }\n\n // Validate length\n if (myInput.value.length >= 8) {\n length.classList.remove(\"invalid\");\n length.classList.add(\"valid\");\n } else {\n length.classList.remove(\"valid\");\n length.classList.add(\"invalid\");\n }\n };\n}\n\n/**\n * Check is item is object\n * @return {Boolean}\n */\nexport function isObject(val) {\n return Object.prototype.toString.call(val) === \"[object Object]\";\n}\n\n/**\n * Check is item is array\n * @return {Boolean}\n */\nexport function isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Check for valid JSON string\n * @param {String} str\n * @return {Boolean|Array|Object}\n */\nexport function isJson(str) {\n var t = !1;\n try {\n t = JSON.parse(str);\n } catch (e) {\n return !1;\n }\n return !(null === t || (!isArray(t) && !isObject(t))) && t;\n}\n\n/**\n * Iterator helper\n * @param {(Array|Object)} arr Any object, array or array-like collection.\n * @param {Function} fn Callback\n * @param {Object} scope Change the value of this\n * @return {Void}\n */\nexport function each(arr, fn, scope) {\n var n;\n if (arr) {\n if (isObject(arr)) {\n for (n in arr) {\n if (Object.prototype.hasOwnProperty.call(arr, n)) {\n fn.call(scope, arr[n], n);\n }\n }\n } else if (arr.length > 0) {\n for (n = 0; n < arr.length; n++) {\n fn.call(scope, arr[n], n);\n }\n } else {\n return false;\n }\n } else {\n return false;\n }\n}\n\n/**\n * Bubble sort algorithm\n */\nexport function sortItems(a, b) {\n var c, d;\n if (1 === b) {\n c = 0;\n d = a.length;\n } else {\n if (b === -1) {\n c = a.length - 1;\n d = -1;\n }\n }\n for (var e = !0; e;) {\n e = !1;\n for (var f = c; f != d; f += b) {\n if (a[f + b] && a[f].value > a[f + b].value) {\n var g = a[f],\n h = a[f + b],\n i = g;\n a[f] = h;\n a[f + b] = i;\n e = !0;\n }\n }\n }\n return a;\n}\n\n/**\n * Create DOM element node\n * @param {String} a nodeName\n * @param {Object} b properties and attributes\n * @return {Object}\n */\nexport function createElement(a, b) {\n var d = DOC.createElement(a);\n if (b && \"object\" == typeof b) {\n var e;\n for (e in b) {\n if (\"html\" === e) {\n d.innerHTML = b[e];\n } else {\n if (e.slice(0,5) === \"aria_\" || e.slice(0,5) === \"data_\") {\n var attr = e.slice(0,4) + \"-\" + e.slice(5);\n d.setAttribute(attr, b[e]); \n } else {\n d.setAttribute(e, b[e]);\n }\n }\n }\n }\n return d;\n}\n\nexport function loadURLSVGs(paths, lazyload) {\n var lazyloading = typeof(lazyload) === \"boolean\" ? lazyload : true,\n execute = function(paths) {\n if (paths.length > 0 && !Array.isArray(paths)) {\n paths = new Array(paths);\n }\n if (!paths || paths.length < 1) {\n console.error(\"The File path(s) supplied were either empty or null.\");\n return false;\n }\n var defs,\n style,\n svg,\n handleSVGResponse = function(response) {\n if (response.match(/ swipe.start.x) || (swipe.end.x + swipe.params.min.x < swipe.start.x)) &&\n ((swipe.end.y < swipe.start.y + swipe.params.max.y) && (swipe.start.y > swipe.end.y - swipe.params.max.y))\n ) {\n if (swipe.end.x > swipe.start.x) {\n swipe.direction = direction.RIGHT;\n } else {\n swipe.direction = direction.LEFT;\n }\n }\n if (\n ((swipe.end.y - swipe.params.min.y > swipe.start.y) || (swipe.end.y + swipe.params.min.y < swipe.start.y)) &&\n ((swipe.end.x < swipe.start.x + swipe.params.max.x) && (swipe.start.x > swipe.end.x - swipe.params.max.x))\n ) {\n if (swipe.end.y > swipe.start.y) {\n swipe.direction = direction.DOWN;\n } else {\n swipe.direction = direction.UP;\n }\n }\n if (swipe.direction !== direction.NONE) {\n if (typeof callback === \"function\") {\n callback(el, swipe.direction);\n }\n }\n swipe.direction = direction.NONE;\n };\n if (isEdge) {\n el.addEventListener(\"mousedown\", downListener);\n el.addEventListener(\"mousemove\", moveListener);\n el.addEventListener(\"mouseup\", upListener);\n } else if (isIE) {\n el.addEventListener(\"pointerdown\", downListener);\n el.addEventListener(\"pointermove\", moveListener);\n el.addEventListener(\"pointerup\", upListener);\n } else {\n el.addEventListener(\"touchstart\", downListener);\n el.addEventListener(\"touchmove\", moveListener);\n el.addEventListener(\"touchend\", upListener);\n }\n}\nexport function renderSvg(svg, attributes) {\n var svgWrapper = DOC.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svgWrapper.setAttribute(\"focusable\", false);\n classAdd(svgWrapper, prefix + \"svg-icons\");\n classAdd(svgWrapper, prefix + \"icon-svg\");\n if (!isArray(svg)) {\n svg = [svg];\n }\n each(svg, function(elm) {\n var svgElem = DOC.createElementNS(\"http://www.w3.org/2000/svg\", \"use\");\n\n svgElem.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", \"#\" + prefix + elm.name);\n classAdd(svgElem, [prefix + \"svg-icons-item\"]); //are these two classes the same\n classAdd(svgElem, prefix + \"icon-svg-item\");\n svgElem.setAttribute(\"tabindex\", \"-1\"); //does this do anything\n if (elm.show) {\n classAdd(svgElem, [ prefix + \"show\"]);\n }\n\n svgWrapper.appendChild(svgElem);\n });\n\n for (var key in attributes) {\n if (Object.prototype.hasOwnProperty.call(attributes, key)) {\n svgWrapper.setAttribute(key, attributes[key]);\n }\n }\n return svgWrapper;\n}\n\nexport function flush(el, ie) {\n if (el instanceof NodeList) {\n each(el, function (e) {\n flush(e, ie);\n });\n } else {\n if (ie) {\n while (el.hasChildNodes()) {\n el.removeChild(el.firstChild);\n }\n } else {\n el.innerHTML = \"\";\n }\n }\n}\n\nexport function getText(value) {\n var text, div = DOC.createElement(\"div\");\n div.innerHTML = value;\n\n function findText(div) {\n each(div.childNodes, function(cNode) {\n if (cNode.nodeType === 3) {\n text = cNode.data;\n }\n findText(cNode);\n }, this);\n }\n findText(div);\n return text;\n}\n","import {prefix, uicoreCustomEvent} from \"./utilities.js\";\r\n\r\nexport default function Alert(element) {\r\n // initialization element\r\n element = element instanceof HTMLElement ? element : (function() {\r\n return false;\r\n })();\r\n\r\n // bind, target alert, duration and stuff\r\n var self = this,\r\n stringAlert = \"Alert\",\r\n closeButton = element.querySelector(\".\"+prefix+\"close-x\"),\r\n dismissMessage = element.querySelector(\".\"+prefix+\"dismiss\"),\r\n \r\n // handlers\r\n clickHandler = function(e) {\r\n if ((closeButton === e.target || closeButton.contains(e.target)) || \r\n (dismissMessage === e.target || dismissMessage.contains(e.target))){\r\n self.toggle();\r\n }\r\n };\r\n\r\n // public method\r\n this.toggle = function() {\r\n if (element) {\r\n if (element.getAttribute(\"aria-expanded\") === \"true\") {\r\n element.setAttribute(\"aria-expanded\", \"false\");\r\n dismissMessage.focus();\r\n uicoreCustomEvent(\"Alert\", \"DismissEvent\", element);\r\n } else {\r\n element.setAttribute(\"aria-expanded\", \"true\");\r\n closeButton.focus();\r\n uicoreCustomEvent(\"Alert\", \"OpenEvent\", element);\r\n }\r\n \r\n }\r\n };\r\n\r\n // init\r\n if (!(stringAlert in element)) {\r\n // prevent adding event handlers twice\r\n closeButton.addEventListener(\"click\", clickHandler, false);\r\n dismissMessage.addEventListener(\"click\", clickHandler, false);\r\n }\r\n\r\n element[stringAlert] = self;\r\n}","import { prefix, getSibling, isIE, createElement } from \"../utilities\";\r\n\r\nexport default function InputMask( element ) { //, opts ) {\r\n // initialization element\r\n element = element instanceof HTMLElement ? element : (function() {\r\n return false;\r\n })();\r\n\r\n var wrap,\r\n stringInputMask = \"InputMask\",\r\n mNum = \"XdDmMyY9\",\r\n mChar = \"_\",\r\n spacing = 0,\r\n hasValue = false,\r\n charSet = element.dataset.charset,\r\n cursorMin = 0,\r\n createShell = function(t) {\r\n wrap = createElement(\"span\", {\r\n class: prefix + \"input-shell\",\r\n });\r\n spacing = !t.getAttribute(\"set-cursor\") ? spacing : isNaN(parseInt(t.getAttribute(\"set-cursor\"))) ? spacing : parseInt(t.getAttribute(\"set-cursor\")) !=1 ? spacing : 1;\r\n var mask = createElement(\"span\", {\r\n aria_hidden: \"true\",\r\n id: t.getAttribute(\"id\") + \"Mask\" }),\r\n\r\n emphasis = createElement(\"i\"),\r\n tClass = t.getAttribute(\"class\"),\r\n pTxt = hasValue ? t.value: t.getAttribute(\"placeholder\"),\r\n placeholder = document.createTextNode(pTxt),\r\n errorDiv = getSibling(t, \"#\"+t.getAttribute(\"id\")+\"Feedback\");\r\n \r\n t.setAttribute(\"maxlength\", placeholder.length);\r\n t.setAttribute(\"data-placeholder\", pTxt);\r\n t.removeAttribute(\"placeholder\");\r\n \r\n \r\n if ( !tClass || ( tClass && tClass.indexOf(\"masked\") === -1 ) ) {\r\n t.setAttribute( \"class\", tClass + \" masked\");\r\n }\r\n \r\n mask.appendChild(emphasis);\r\n mask.appendChild(placeholder);\r\n \r\n wrap.appendChild(mask);\r\n t.parentNode.insertBefore( wrap, t );\r\n wrap.appendChild(t);\r\n if(errorDiv) {\r\n wrap.appendChild(errorDiv);\r\n }\r\n },\r\n setValueOfMask = function(e) {\r\n var value = e.target.value,\r\n placeholder = e.target.getAttribute(\"data-placeholder\");\r\n \r\n return \"\" + value + \"\" + placeholder.substr(value.length);\r\n },\r\n handleFocusEvent = function(e) {\r\n for (var s=0; s cursorMin){\r\n cursor--;\r\n }\r\n cursor = Math.max(cursor, cursorMin);\r\n }\r\n element.setSelectionRange(cursor, cursor);\r\n }, 50);\r\n },\r\n \r\n handleCurrentValue = function(e) {\r\n var isCharsetPresent = e.target.getAttribute(\"data-charset\"),\r\n placeholder = isCharsetPresent || e.target.getAttribute(\"data-placeholder\"),\r\n value = e.target.value, l = placeholder.length, newValue = \"\",\r\n i, j, isInt, isLetter, strippedValue;\r\n \r\n // strip special characters\r\n strippedValue = isCharsetPresent ? value.replace(/\\W/g, \"\") : value.replace(/\\D/g, \"\");\r\n \r\n for (i = 0, j = 0; i < l; i++) {\r\n isInt = !isNaN(parseInt(strippedValue[j]));\r\n isLetter = strippedValue[j] ? strippedValue[j].match(/[A-Z]/i) : false;\r\n var matchesNumber = mNum.indexOf(placeholder[i]) >= 0;\r\n var matchesLetter = mChar.indexOf(placeholder[i]) >= 0;\r\n if ((matchesNumber && isInt) || (isCharsetPresent && matchesLetter && isLetter)) {\r\n newValue += strippedValue[j++];\r\n } else if ((!isCharsetPresent && !isInt && matchesNumber) || (isCharsetPresent && ((matchesLetter && !isLetter) || (matchesNumber && !isInt)))) {\r\n return newValue;\r\n } else {\r\n newValue += placeholder[i];\r\n }\r\n // break if no characters left and the pattern is non-special character\r\n if (strippedValue[j] == undefined) {\r\n if(i+1 >= l || charSet.charAt(i+1).match(\".*[\"+ mNum + mChar + \"].*\") || e.keyCode == 8){\r\n break;\r\n }\r\n }\r\n }\r\n if (e.target.getAttribute(\"data-valid-example\")) {\r\n return validateProgress(e, newValue);\r\n }\r\n return newValue;\r\n },\r\n \r\n validateProgress = function(e, value) {\r\n var validExample = e.target.getAttribute(\"data-valid-example\"),\r\n pattern = new RegExp(e.target.getAttribute(\"pattern\")),\r\n placeholder = e.target.getAttribute(\"data-placeholder\"),\r\n l = value.length, testValue = \"\";\r\n \r\n //convert to months\r\n if (l == 1 && placeholder.toUpperCase().substr(0,2) == \"MM\") {\r\n if(value > 1 && value < 10) {\r\n value = \"0\" + value;\r\n }\r\n return value;\r\n }\r\n // test the value, removing the last character, until what you have is a submatch\r\n for (var i = l; i >= 0; i--) {\r\n testValue = value + validExample.substr(value.length);\r\n if (pattern.test(testValue)) {\r\n return value;\r\n } else {\r\n value = value.substr(0, value.length-1);\r\n }\r\n }\r\n \r\n return value;\r\n };\r\n\r\n // add event listeners\r\n // init\r\n if (!(stringInputMask in element)) {\r\n var parentNode = element.parentNode;\r\n element.value ? hasValue = true: hasValue = false;\r\n if (!charSet){\r\n throw new Error(\"Data charset is missing or invalid\");\r\n }\r\n if(!charSet.charAt(0).match(\".*[\"+ mNum + mChar + \"].*\")){\r\n while(!charSet.charAt(cursorMin).match(\".*[\"+ mNum + mChar + \"].*\")){\r\n cursorMin++;\r\n }\r\n }\r\n if ( !parentNode || !parentNode.classList.contains(prefix + \"input-shell\") ) {\r\n createShell(element);\r\n element.addEventListener(\"change\", handleValueChange, false);\r\n element.addEventListener(\"keyup\", handleValueChange, false);\r\n if (spacing > 0) {\r\n element.addEventListener(\"focus\", handleFocusEvent, false);\r\n }\r\n }\r\n }\r\n\r\n element[stringInputMask] = self;\r\n}","import { prefix, debounce, jsonOptionsInit, getFullScreenOverlay, validateNum, uicoreCustomEvent, each, getFocusableElements, getClosest, isIE, isEdge, isFirefox, DOC, createElement, globalObject} from \"./utilities.js\";\nimport InputMask from \"./helpers/inputMask.js\";\n\nexport function Spinbox(element, options) {\n\n // initialization element\n element = element instanceof HTMLElement ? element : (function() {\n return false;\n })();\n\n options = options || {};\n options = jsonOptionsInit(element, options);\n options.spinmin = element.dataset.spinmin ? validateNum(element.dataset.spinmin, 0) : validateNum(options.spinmin, 0);\n options.spindefault = element.dataset.spindefault ? validateNum(element.dataset.spindefault, 0) : validateNum(options.spindefault, 0);\n options.spinmax = element.dataset.spinmax ? validateNum(element.dataset.spinmax, 100) : validateNum(options.spinmax, 100);\n options.spinstep = element.dataset.spinstep ? validateNum(element.dataset.spinstep, 1) : validateNum(options.spinstep, 1);\n\n var msg= \"\";\n if (isNaN(options.spinmin)) {\n msg += \"Min value is not a number.\\n\";\n }\n if (isNaN(options.spinmax)) {\n msg += \"Max value is not a number.\\n\";\n }\n if (isNaN(options.spindefault)) {\n msg += \"Default value is not a number.\\n\";\n } else if (options.spindefault < options.spinmin || options.spindefault > options.spinmax) {\n msg += \"Default value falls outside of the min max values.\\n\";\n }\n if (isNaN(options.spinstep)) {\n msg += \"Step value is not a number.\\n\";\n }\n if (msg.length) {\n throw new Error(msg);\n }\n \n var self = this,\n stringSpinbox = \"Spinbox\",\n input,\n plusCtrl,\n minusCtrl,\n // horizontal,\n // handlers\n handleKeypressEvent = debounce(function(e) {\n var charCode = (e.which) ? e.which : e.keyCode;\n // if not a number\n if ( input.value.length > options.spinmax.length || (charCode > 31 && (charCode < 48 || charCode > 57))) {\n if (charCode == 13){\n input.blur();\n }\n else if (input.value.length == 0 && (options.spinmin < 0 && charCode == 45)) { // allow minus when input empty and spinmin less than zero\n return;\n } else {\n e.preventDefault();\n }\n } else {\n var newInput = input.value;\n if (parseInt(newInput) > options.spinmax) {\n input.value = options.spinmax;\n input.setAttribute(\"aria-valuenow\", options.spinmax);\n e.preventDefault();\n } else if (parseInt(newInput) < options.spinmin) {\n input.value = options.spinmin;\n input.setAttribute(\"aria-valuenow\", options.spinmin);\n e.preventDefault();\n } else {\n if (input.value == \"-\" && e.charCode == 48) { // dont allow -0\n e.preventDefault();\n } else {\n if (charCode == 13) { // Enter key\n if (Math.abs(parseInt(input.value)) % options.spinstep > 0) {\n input.value = parseInt(input.value) - (Math.abs(parseInt(input.value)) % options.spinstep);\n }\n input.blur();\n } else {\n input.setAttribute(\"aria-valuenow\", input.value);\n }\n }\n }\n }\n }, 500),\n handleCtrlClickEvent = function(e, control) {\n var temp;\n if (control === minusCtrl) {\n temp = parseInt(input.value) - options.spinstep;\n } else {\n temp = parseInt(input.value) + options.spinstep;\n }\n if (!(temp < options.spinmin) && !(temp > options.spinmax)) {\n input.value = temp;\n input.setAttribute(\"aria-valuenow\", temp);\n handleDisabling();\n uicoreCustomEvent(\"Spinbox\", \"ValueChangeEvent\", element, {\"value\": input.value});\n }\n },\n handleDisabling = function() {\n if (input.value == options.spinmin || (parseInt(input.value) - options.spinstep) < options.spinmin) {\n minusCtrl.setAttribute(\"disabled\", \"\");\n } else if (minusCtrl.hasAttribute(\"disabled\")) {\n minusCtrl.removeAttribute(\"disabled\");\n }\n if (input.value == options.spinmax || (parseInt(input.value) + options.spinstep) > options.spinmax) {\n plusCtrl.setAttribute(\"disabled\", \"\");\n } else if (plusCtrl.hasAttribute(\"disabled\")) {\n plusCtrl.removeAttribute(\"disabled\");\n }\n },\n handleFocusOut = function() {\n // if input is empty, negative, or NaN\n if (input.value.length == 0 || input.value == \"-\" || !(/^\\d+$/.test(input.value))) {\n input.value = options.spindefault;\n } else if (parseInt(input.value) < options.spinmin) {\n input.value = options.spinmin;\n } else if (parseInt(input.value) > options.spinmax) {\n input.value = options.spinmax;\n } else if (Math.abs(parseInt(input.value)) % options.spinstep > 0) {\n input.value = parseInt(input.value) - (Math.abs(parseInt(input.value)) % options.spinstep);\n } else if(input.value.match(/^0+/g)) {\n var match = input.value.match(/^0+/g);\n var temp = input.value.replace(match,\"\");\n if (temp.length == 0) {\n input.value = \"0\";\n } else {\n input.value = temp;\n }\n }\n handleDisabling();\n uicoreCustomEvent(\"Spinbox\", \"ValueChangeEvent\", element, {\"value\": input.value});\n\n },\n handleArrowEvent = function(e) {\n switch (e.keyCode) {\n case 35: // end\n e.preventDefault();\n input.value = options.spinmax;\n uicoreCustomEvent(\"Spinbox\", \"ValueChangeEvent\", element, {\"value\": input.value});\n break;\n case 36: // home\n e.preventDefault();\n input.value = options.spinmin;\n uicoreCustomEvent(\"Spinbox\", \"ValueChangeEvent\", element, {\"value\": input.value});\n break;\n case 38: // up\n e.preventDefault();\n if (input.value.length) {\n plusCtrl.click();\n } else {\n input.value = options.spinmin + options.spinstep;\n input.setAttribute(\"aria-valuenow\", input.value);\n uicoreCustomEvent(\"Spinbox\", \"ValueChangeEvent\", element, {\"value\": input.value});\n }\n break;\n case 40: // down\n e.preventDefault();\n minusCtrl.click();\n break;\n case 37: // left\n case 39: // right \n e.preventDefault(); \n break;\n default:\n break;\n }\n };\n\n // init\n if (!(stringSpinbox in element)) {\n input = element.querySelector(\".\" + prefix + \"spinbox-input\");\n input.addEventListener(\"keypress\", handleKeypressEvent);\n input.addEventListener(\"keyup\", handleDisabling);\n input.addEventListener(\"focusout\", handleFocusOut);\n element.addEventListener(\"keydown\", handleArrowEvent);\n\n input.value = options.spindefault;\n input.setAttribute(\"aria-valuenow\", options.spindefault);\n input.setAttribute(\"aria-valuemin\", options.spinmin);\n input.setAttribute(\"aria-valuemax\", options.spinmax);\n\n var controls = element.querySelectorAll(\"button.\" + prefix + \"spinbox-btn\");\n if (element.classList.contains(prefix + \"spinbox-horizontal\")) {// horizontal spinbox\n // horizontal = true;\n minusCtrl = controls[0];\n plusCtrl = controls[1];\n } else {\n // horizontal = false;\n minusCtrl = controls[1];\n plusCtrl = controls[0];\n }\n\n minusCtrl.addEventListener(\"click\", function(e) {\n handleCtrlClickEvent(e, minusCtrl);\n });\n plusCtrl.addEventListener(\"click\", function(e) {\n handleCtrlClickEvent(e, plusCtrl);\n });\n handleDisabling();\n }\n\n\n element[stringSpinbox] = self;\n}\n\nexport function DatePicker(element, options) {\n // initialization element\n element = element instanceof HTMLElement ? element : (function() {\n return false;\n })();\n \n // set option\n options = options || {};\n options = jsonOptionsInit(element, options);\n options.datesFilter = options.datesFilter ? options.datesFilter : false;\n options.pastDates = options.pastDates ? options.pastDates : false;\n options.availableWeekDays = options.availableWeekDays ? options.availableWeekDays : [{day: \"monday\"},{day: \"tuesday\"},{day: \"wednesday\"},{day: \"thursday\"},{day: \"friday\"},{day: \"saturday\"},{day: \"sunday\"}];\n options.notBeforeDate = options.notBeforeDate ? new Date(options.notBeforeDate) : null;\n options.notAfterDate = options.notAfterDate ? new Date(options.notAfterDate) : null;\n options.button_prev = options.button_prev ? options.button_prev : null; \n options.button_next = options.button_next ? options.button_next : null; \n\n var self = this,\n stringDatePicker = \"DatePicker\",\n calendarBtn = element.querySelector(\".\" + prefix + \"datepicker-btn\"),\n target = element[\"getAttribute\"](\"data-target\"),\n dateInput = element.querySelector(\".\" + prefix + \"form-control\"),\n calendar = element.querySelector(target),\n pickerBtn = element.querySelector(\".\" + prefix + \"datepicker-btn\"),\n form = null,\n monthEl = null,\n focusableEls,\n currentSelected,\n overlay = getFullScreenOverlay(),\n smallMedia = window.matchMedia(\"(max-width: 767.98px)\"),\n calendarWrapper,\n tempSelected = new Date(),\n todaysDate = new Date(),\n monthLabel = null,\n datePtr = new Date(),\n monthsTexts = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n keyCode = Object.freeze({\n \"TAB\": 9,\n \"ENTER\": 13,\n \"ESC\": 27,\n \"SPACE\": 32,\n \"PAGEUP\": 33,\n \"PAGEDOWN\": 34,\n \"END\": 35,\n \"HOME\": 36,\n \"LEFT\": 37,\n \"UP\": 38,\n \"RIGHT\": 39,\n \"DOWN\": 40\n }),\n setFocusableElements = function() {\n focusableEls = getFocusableElements(calendar);\n },\n toggleCalendar = function() {\n if (calendar.classList.contains(prefix + \"d-none\")) {\n calendar.classList.remove(prefix + \"d-none\");\n calendarWrapper.classList.remove(prefix+\"hide\");\n if (smallMedia.matches) {\n resetPosition();\n createOverlay();\n } else {\n repositionIfNeeded();\n }\n \n globalObject.addEventListener(\"resize\", toggleCalendar);\n //check if calendar is within confines of page\n var dateText = dateInput.value;\n if (dateText && dateInput.validity.valid && checkDateValidity(new Date(dateText))) {\n currentSelected = new Date(dateText);\n tempSelected = new Date(dateText);\n if (datePtr.getFullYear() != currentSelected.getFullYear()) {\n datePtr.setFullYear(currentSelected.getFullYear());\n }\n if (datePtr.getMonth() != currentSelected.getMonth()) {\n datePtr.setMonth(currentSelected.getMonth());\n }\n createMonth();\n var newDateElem = element.querySelector(\"[data-calendar-date=\\\"\" + currentSelected + \"\\\"]\");\n if(!newDateElem.classList.contains(prefix + \"datepicker-date-disabled\")) {\n newDateElem.classList.add(prefix + \"datepicker-date-selected\");\n var nextBtn = newDateElem.querySelector(\".\" + prefix + \"datepicker-calendar-day\");\n nextBtn.removeAttribute(\"tabindex\");\n nextBtn.focus();\n }\n tempSelected = new Date(currentSelected.getTime());\n }\n else {\n resetToDefaultDate();\n }\n calendar.addEventListener(\"focusout\", blurHandler, false);\n } else {\n calendar.classList.add(prefix + \"d-none\");\n calendarWrapper.classList.add(prefix+\"hide\");\n globalObject.removeEventListener(\"resize\", toggleCalendar);\n removeActiveClass();\n pickerBtn.focus();\n calendar.removeEventListener(\"focusout\", blurHandler, false);\n removeOverlay();\n }\n },\n createWrapper = function() {\n var wrapper = createElement(\"div\", {\n class: prefix + \"calendar-wrapper \" + prefix + \"hide\"\n });\n calendar.parentNode.appendChild(wrapper);\n wrapper.appendChild(calendar);\n return wrapper;\n },\n resetPosition = function() {\n calendar.style.top = \"\";\n calendar.style.right = \"\";\n calendar.style.bottom = \"\";\n },\n repositionIfNeeded = function() {\n resetPosition();\n var elementRect = element.getBoundingClientRect();\n var calendarRect = calendar.getBoundingClientRect();\n\n if (calendarRect.right > document.body.offsetWidth) {\n calendar.style.right = (document.body.offsetWidth - calendarBtn.getBoundingClientRect().right) +\"px\";\n }\n \n var elementCenterPercent = parseInt((100 * (elementRect.top + elementRect.height / 2)) / window.innerHeight);\n var elementExceedsTop = elementRect.top < 0;\n var elementExceedsBottom = elementRect.top + elementRect.height > window.innerHeight;\n\n var scrHeightRemain = Math.max(window.innerHeight - calendarRect.height, 0);\n var scrHeightRemainProportional = parseInt(scrHeightRemain * (elementCenterPercent / 100));\n\n var calendarExceedsBottom = calendarRect.bottom >= window.innerHeight;\n var calendarExceedsTop = elementRect.top - calendarRect.height <= 0;\n var calendarFitScr = calendarRect.height <= window.innerHeight;\n var calendarTopToReachProportion = Math.max(elementRect.top - scrHeightRemainProportional, 0);\n\n if (!calendarExceedsBottom) {\n calendar.style.top = \"100%\";\n } else if (!calendarExceedsTop) {\n calendar.style.bottom = \"100%\";\n } else if (calendarFitScr && elementExceedsTop) {\n calendar.style.top = Math.abs(elementRect.top) + \"px\";\n } else if (calendarFitScr && elementExceedsBottom) {\n calendar.style.bottom = Math.abs(elementRect.top + elementRect.height - window.innerHeight) + \"px\";\n } else if (calendarFitScr) {\n calendar.style.top = \"-\" + calendarTopToReachProportion + \"px\";\n } else {\n calendar.style.top = \"-\" + Math.abs(elementRect.top) + \"px\";\n }\n },\n blurHandler = function() {\n setTimeout( function() {\n if(calendar && !calendar.contains(document.activeElement) && !calendarBtn.contains(document.activeElement)) {\n toggleCalendar();\n calendarBtn.focus();\n }\n }, 10);\n },\n getWeekDay = function (day) {\n return [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"][day];\n }, \n createDay = function (date) {\n var isAvailable = true;\n var newDayElem = document.createElement(\"div\");\n var dateElem = document.createElement(\"button\");\n dateElem.setAttribute(\"tabindex\", \"-1\");\n dateElem.setAttribute(\"type\", \"button\");\n dateElem.innerHTML = date.getDate();\n dateElem.addEventListener(\"keydown\", dateKeydownHandler, false);\n dateElem.className = prefix + \"datepicker-calendar-day\";\n newDayElem.className = prefix + \"datepicker-date\";\n newDayElem.setAttribute(\"data-calendar-date\", date);\n \n var available_week_day = options.availableWeekDays.filter(function(f) {\n return (f.day === date.getDay() || f.day === getWeekDay(date.getDay()));\n });\n if (date.getMonth() != datePtr.getMonth()) {\n newDayElem.classList.add(prefix + \"datepicker-date-outdated\");\n }\n if (datePtr.getTime() <= todaysDate.getTime() - 1 && !options.pastDates) {\n newDayElem.classList.add(prefix + \"datepicker-date-disabled\");\n dateElem.setAttribute(\"disabled\", \"\");\n } else {\n if (options.datesFilter) {\n if (options.notBeforeDate && date <= options.notBeforeDate) {\n isAvailable = false;\n }\n if (options.notAfterDate && date > options.notAfterDate) {\n isAvailable = false;\n }\n if (available_week_day.length && isAvailable) {\n newDayElem.classList.add(prefix + \"datepicker-date-active\");\n newDayElem.setAttribute(\"data-calendar-data\", JSON.stringify(available_week_day[0]));\n newDayElem.setAttribute(\"data-calendar-status\", \"active\");\n } else {\n newDayElem.classList.add(prefix + \"datepicker-date-disabled\");\n dateElem.setAttribute(\"disabled\", \"\");\n }\n } else {\n newDayElem.classList.add(prefix + \"datepicker-date-active\");\n newDayElem.setAttribute(\"data-calendar-status\", \"active\");\n }\n }\n //set current selected date\n if (currentSelected && date.toString() == currentSelected.toString() && !newDayElem.classList.contains(prefix + \"datepicker-date-disabled\")) {\n newDayElem.classList.add(prefix + \"datepicker-date-selected\");\n \n }\n //if textbox is empty \n if (date.toString() == tempSelected.toString() && !newDayElem.classList.contains(prefix + \"datepicker-date-disabled\")) {\n newDayElem.classList.add(prefix + \"datepicker-date-temp-selected\");\n dateElem.removeAttribute(\"tabindex\");\n }\n //add date to the calendar\n newDayElem.appendChild(dateElem);\n monthEl.appendChild(newDayElem);\n },\n createOverlay = function () {\n DOC.body.style.overflow = \"hidden\";\n if (overlay && !(overlay.classList.contains(prefix + \"show\"))) {\n overlay.classList.add(prefix + \"show\");\n overlay.removeAttribute(\"hidden\");\n if( overlay.style.visibility == \"hidden\"){\n overlay.style.visibility = \"\";\n }\n } else {\n console.warn(\"MODAL: Overlay requested. Corresponding HTML missing. Please apply id 'dds__full-screen-overlay' and class 'dds__overlay' to an empty div\");\n }\n\n },\n removeOverlay = function () {\n DOC.body.style.overflow = \"\";\n if (overlay) {\n overlay.classList.remove(prefix + \"show\");\n }\n },\n removeActiveClass = function () {\n each(element.querySelectorAll(\".\" + prefix + \"datepicker-date-selected\"), function(day) {\n day.classList.remove(prefix + \"datepicker-date-selected\");\n });\n },\n removeTempClass = function() {\n each(element.querySelectorAll(\".\" + prefix + \"datepicker-date-temp-selected\"), function(day) {\n day.classList.remove(prefix + \"datepicker-date-temp-selected\");\n day.firstElementChild.setAttribute(\"tabindex\", \"-1\");\n });\n },\n resetToDefaultDate = function() {\n currentSelected = null;\n var defaultDate = getNearestAvailableDay(new Date(options.defaultDate));\n todaysDate = getNearestAvailableDay(todaysDate);\n tempSelected = new Date(defaultDate.getTime());\n if (datePtr.getFullYear() != tempSelected.getFullYear()) {\n datePtr.setFullYear(tempSelected.getFullYear());\n }\n if (datePtr.getMonth() != tempSelected.getMonth()) {\n datePtr.setMonth(tempSelected.getMonth());\n }\n createMonth();\n var newDateElem = element.querySelector(\"[data-calendar-date=\\\"\" + tempSelected + \"\\\"]\");\n newDateElem.classList.add(prefix + \"datepicker-date-temp-selected\");\n var nextBtn = newDateElem.querySelector(\".\" + prefix + \"datepicker-calendar-day\");\n nextBtn.removeAttribute(\"tabindex\");\n nextBtn.focus();\n },\n selectDate = function () {\n var activeDates = element.querySelectorAll(\"[data-calendar-status=active]\");\n each(activeDates, function(date) {\n date.addEventListener(\"click\", function () {\n removeActiveClass();\n removeTempClass();\n var datas = this.dataset;\n this.classList.add(prefix + \"datepicker-date-selected\");\n currentSelected = new Date(datas.calendarDate);\n setNewDate();\n });\n });\n },\n createMonth = function () {\n clearCalendar();\n var currentMonth = datePtr.getMonth();\n monthLabel.innerHTML = monthsTexts[datePtr.getMonth()] + \" \" + datePtr.getFullYear();\n //check to see if previous month is out of range\n var monthCheckBefore = new Date(datePtr.getTime());\n monthCheckBefore.setDate(monthCheckBefore.getDate() - 1); \n if ((options.notBeforeDate && monthCheckBefore <= options.notBeforeDate) || (!options.pastDates && monthCheckBefore.getTime() <= todaysDate.getTime() - 1)) {\n options.button_prev.classList.add(prefix + \"disabled\");\n options.button_prev.setAttribute(\"disabled\", \"\");\n } else {\n options.button_prev.classList.remove(prefix + \"disabled\");\n options.button_prev.removeAttribute(\"disabled\");\n }\n //add previous month days on calendar\n var daysPrev = datePtr.getDay();\n if(daysPrev > 0) {\n for(var i=daysPrev; i>0; i--) {\n var prevDate = new Date(datePtr.getTime());\n prevDate.setDate(datePtr.getDate() - i);\n createDay(prevDate);\n }\n }\n //add current month days onto calendar\n while (datePtr.getMonth() === currentMonth) {\n createDay(datePtr);\n datePtr.setDate(datePtr.getDate() + 1);\n }\n //check to see if next month is out of range\n var monthCheckAfter = new Date(datePtr.getTime());\n if(options.notAfterDate && monthCheckAfter > options.notAfterDate) {\n options.button_next.classList.add(prefix + \"disabled\");\n options.button_next.setAttribute(\"disabled\", \"\");\n } else {\n options.button_next.classList.remove(prefix + \"disabled\");\n options.button_next.removeAttribute(\"disabled\");\n }\n //add next month days onto calendar\n datePtr.setDate(datePtr.getDate() - 1);\n var daysAfter = 6 - datePtr.getDay();\n if (daysAfter > 0) {\n for(var j=1; j<=daysAfter; j++) {\n var futureDate = new Date(datePtr.getTime());\n futureDate.setDate(datePtr.getDate() + j);\n createDay(futureDate);\n }\n }\n datePtr.setDate(1);\n selectDate();\n setFocusableElements();\n },\n monthPrev = function (e) {\n if (e) {\n e.preventDefault();\n }\n datePtr.setMonth(datePtr.getMonth() - 1);\n createMonth();\n },\n monthNext = function (e) {\n if (e) {\n e.preventDefault();\n }\n datePtr.setMonth(datePtr.getMonth() + 1);\n createMonth();\n },\n checkDateValidity = function(date) {\n var available_week_day = options.availableWeekDays.filter(function(f) {\n return (f.day === date.getDay() || f.day === getWeekDay(date.getDay()));\n });\n //check if valid weekday\n if(available_week_day.length == 0) {\n return false;\n }\n //check if not before\n if (options.notBeforeDate && date <= options.notBeforeDate) {\n return false;\n }\n //check if not after\n if (options.notAfterDate && date > options.notAfterDate) {\n return false;\n }\n // check if before today\n if (!options.pastDates && date.getTime() <= todaysDate.getTime() - 1) {\n return false;\n }\n return true;\n },\n clearCalendar = function () {\n monthEl.innerHTML = \"\";\n },\n createCalendar = function () {\n element.querySelector(target).innerHTML = \"
\";\n element.querySelector(\".\" + prefix + \"datepicker-week\").innerHTML = \"SUNMONTUEWEDTHUFRISAT\";\n var bottomMenu = element.querySelector(\".\" + prefix + \"calendar-buttons\");\n bottomMenu.innerHTML = \"\";\n bottomMenu.querySelector(\".\" + prefix + \"btn-secondary\").addEventListener(\"click\", toggleCalendar, false);\n bottomMenu.querySelector(\".\" + prefix + \"btn-secondary\").addEventListener(\"keydown\", buttonKeydownHandler, false);\n },\n setNewDate = function() {\n var deliminator = \"/\";\n dateInput.value = (\"0\" + (currentSelected.getMonth() + 1)).slice(-2) + deliminator + (\"0\" + currentSelected.getDate()).slice(-2) + deliminator + currentSelected.getFullYear();\n var e = document.createEvent(\"Event\");\n e.initEvent(\"change\", false, false);\n dateInput.dispatchEvent(e);\n dateInput.focus();\n uicoreCustomEvent(\"DatePicker\", \"SelectedDate\", element, { \"date\": currentSelected});\n toggleCalendar();\n },\n setNewTempDate = function(prevDate, currentDate) {\n //look for the new date\n tempSelected = getNextAvailableDay(prevDate, currentDate);\n //remove current selected\n var oldSelected = element.querySelector(\"[data-calendar-date=\\\"\" + prevDate + \"\\\"]\");\n if (oldSelected) {\n oldSelected.children[0].setAttribute(\"tabindex\", \"-1\");\n oldSelected.classList.remove(prefix + \"datepicker-date-temp-selected\");\n }\n var newDateElem = element.querySelector(\"[data-calendar-date=\\\"\" + tempSelected + \"\\\"]\");\n var nextBtn = newDateElem.querySelector(\".\" + prefix + \"datepicker-calendar-day\");\n nextBtn.removeAttribute(\"tabindex\");\n nextBtn.parentElement.classList.add(prefix + \"datepicker-date-temp-selected\");\n nextBtn.focus();\n },\n getNextAvailableDay = function(prevDate, currentDate) {\n var newDate = element.querySelector(\":not(.dds__datepicker-date-disabled):not(.dds__datepicker-date-outdated)[data-calendar-date='\" + currentDate + \"']\");\n var direction = prevDate < currentDate ? 1 : -1;\n //check day\n if (newDate) {\n return currentDate;\n }\n else {\n //check if not before\n if (options.notBeforeDate && currentDate <= options.notBeforeDate) {\n return prevDate;\n }\n //check if not after\n if (options.notAfterDate && currentDate >= options.notAfterDate) {\n return prevDate;\n }\n // check if before today\n if (currentDate.getTime() <= todaysDate.getTime() - 1 && !options.pastDates) {\n return prevDate;\n }\n if (currentDate.getMonth() != prevDate.getMonth()) {\n if (direction == 1) {\n monthNext();\n }\n if (direction == -1) {\n monthPrev(); \n }\n if (element.querySelector(\":not(.dds__datepicker-date-disabled)[data-calendar-date='\" + currentDate + \"']\")) {\n return currentDate;\n }\n else {\n prevDate = new Date (currentDate.getTime());\n currentDate.setDate(currentDate.getDate() + direction);\n return getNextAvailableDay(prevDate, currentDate);\n }\n } else {\n prevDate = new Date (currentDate.getTime());\n currentDate.setDate(currentDate.getDate() + direction);\n return getNextAvailableDay(prevDate, currentDate);\n }\n }\n },\n getNearestAvailableDay = function(currentDate) {\n if (checkDateValidity(currentDate)) {\n return currentDate;\n } else {\n var nextDate = new Date(currentDate.getTime());\n nextDate.setDate(nextDate.getDate() + 1);\n var prevDate = new Date(currentDate.getTime());\n prevDate.setDate(prevDate.getDate() - 1); \n var nearestRight = getNextAvailableDay(currentDate, nextDate);\n if (nearestRight.getMonth() > currentDate.getMonth()) {\n monthPrev();\n removeTempClass();\n } \n var nearestLeft = getNextAvailableDay(currentDate, prevDate);\n if (nearestRight.getMonth() > currentDate.getMonth()) {\n return nearestLeft;\n } \n if (nearestLeft.getMonth() < currentDate.getMonth()) {\n monthNext();\n removeTempClass();\n return nearestRight;\n }\n var daysRight = Math.abs(currentDate.getDate() - nearestRight.getDate());\n var daysLeft = Math.abs(currentDate.getDate() - nearestLeft.getDate());\n //if getnextavailableday is not in available range\n if(daysLeft == 0 && daysRight == 0) {\n var od1 = new Date(currentDate.getTime());\n var od2 = new Date(currentDate.getTime());\n while (!checkDateValidity(od1) && !checkDateValidity(od2)) {\n if(od1.getMonth() == currentDate.getMonth()) {\n od1.setDate((od1.getDate()-1));\n }\n if (od2.getMonth() == currentDate.getMonth()) {\n od2.setDate((od2.getDate()+1));\n }\n }\n if (checkDateValidity(od1)) {\n return od1;\n } else{\n return od2;\n }\n } else if (daysLeft == 0) {\n return nearestRight;\n } else if (daysRight == 0) {\n return nearestLeft;\n } else if(daysRight < daysLeft) {\n return nearestRight;\n } else {\n return nearestLeft;\n }\n }\n },\n dateKeydownHandler = function(e) {\n var prevSelected = new Date (tempSelected.getTime());\n switch (e.keyCode) {\n case keyCode.UP: // up key\n e.preventDefault();\n tempSelected.setDate(tempSelected.getDate() - 7);\n setNewTempDate(prevSelected, tempSelected);\n break;\n case keyCode.DOWN: // down key\n e.preventDefault();\n tempSelected.setDate(tempSelected.getDate() + 7);\n setNewTempDate(prevSelected, tempSelected);\n break;\n case keyCode.LEFT: // left key\n e.preventDefault();\n tempSelected.setDate(tempSelected.getDate() - 1);\n setNewTempDate(prevSelected, tempSelected);\n break;\n case keyCode.RIGHT: // right key\n e.preventDefault();\n tempSelected.setDate(tempSelected.getDate() + 1);\n setNewTempDate(prevSelected, tempSelected);\n break;\n case keyCode.ESC: // esc key\n var oldSelected = element.querySelector(\".\" + prefix + \"datepicker-date-selected\");\n if (oldSelected) {\n oldSelected.classList.remove(prefix + \"datepicker-date-selected\");\n oldSelected.children[0].setAttribute(\"tabindex\", \"-1\");\n }\n toggleCalendar();\n break;\n case keyCode.TAB: // tab key\n if ( focusableEls.length === 1 ) {\n e.preventDefault();\n break;\n }\n if ( e.shiftKey ) {\n if ( document.activeElement === focusableEls[0] ) {\n e.preventDefault();\n focusableEls[ focusableEls.length - 1 ].focus();\n }\n } else {\n if ( document.activeElement === focusableEls[ focusableEls.length - 1 ] ) {\n e.preventDefault();\n focusableEls[0].focus();\n }\n }\n break;\n }\n },\n buttonKeydownHandler = function(e) {\n switch (e.keyCode) {\n case keyCode.ESC: // esc key\n toggleCalendar();\n break;\n case keyCode.TAB: // tab key\n if ( focusableEls.length === 1 ) {\n e.preventDefault();\n break;\n }\n if ( e.shiftKey ) {\n if ( document.activeElement === focusableEls[0] ) {\n e.preventDefault();\n focusableEls[ focusableEls.length - 1 ].focus();\n }\n } else {\n if ( document.activeElement === focusableEls[ focusableEls.length - 1 ] ) {\n e.preventDefault();\n focusableEls[0].focus();\n }\n }\n break;\n }\n },\n inputHandler = function () {\n if(checkDateValidity(new Date(dateInput.value)) && getComputedStyle(errorMsg).display == \"block\") {\n errorMsg.style.display = \"none\";\n dateInput.setCustomValidity(\"\");\n } else if ((!checkDateValidity(new Date(dateInput.value)))) {\n if (!isEdge || (isEdge && calendar.classList.contains(prefix + \"d-none\") && document.activeElement !== calendarBtn)) {\n toggleCalendar();\n }\n if (getComputedStyle(errorMsg).display == \"none\") {\n errorMsg.style.display = \"block\";\n dateInput.setCustomValidity(\"Invalid Date\");\n }\n }\n },\n submitHandler = function(event) {\n var formValidationErrorSuffix = \"Feedback\";\n if (form.checkValidity() === false) {\n each(form, function(el) {\n if(el.tagName == \"INPUT\") {\n var errorMsg = form.querySelector(\"#\"+ el.getAttribute(\"id\")+formValidationErrorSuffix);\n setTimeout(function() {\n if (el.classList.contains(\"dds__datepicker-input\")) {\n if (checkDateValidity(new Date(el.value))) {\n el.setCustomValidity(\"\");\n } else {\n el.setCustomValidity(\"Invalid Date\");\n }\n }\n if (!el.validity.valid) {\n //if error message has not been turned on yet\n if(errorMsg && !(getComputedStyle(errorMsg)[\"display\"] == \"block\")){\n errorMsg.style.display = \"block\";\n }\n el.setAttribute(\"aria-invalid\", \"true\");\n el.setAttribute(\n \"aria-describedby\",\n el.getAttribute(\"id\") + formValidationErrorSuffix\n );\n } else {\n //if error message has not been turned off yet\n if(errorMsg && (getComputedStyle(errorMsg)[\"display\"] == \"block\")){\n errorMsg.style.display = \"none\";\n } \n el.setAttribute(\"aria-invalid\", \"false\");\n el.setAttribute(\"aria-describedby\", \"\");\n }\n }, 10);\n }\n });\n event.preventDefault();\n event.stopPropagation();\n }\n\n form.classList.add(\"dds__was-validated\");\n };\n //public functions\n this.init = function () {\n createCalendar();\n options.button_prev = document.querySelector(target + \" [data-calendar-toggle=previous]\");\n options.button_next = document.querySelector(target + \" [data-calendar-toggle=next]\");\n monthEl = document.querySelector(target + \" [data-calendar-area=month]\");\n monthLabel = document.querySelector(target + \" [data-calendar-label=month]\");\n datePtr.setDate(1);\n createMonth();\n calendarWrapper = element.querySelector(\".\"+prefix+\"calendar-wrapper\") ? element.querySelector(\".\"+prefix+\"calendar-wrapper\") : createWrapper();\n options.button_prev.addEventListener(\"click\", function() {\n monthPrev();\n removeTempClass();\n var prevMonthDate = new Date(tempSelected.getTime());\n prevMonthDate.setMonth(prevMonthDate.getMonth()-1);\n if (tempSelected.getMonth() === prevMonthDate.getMonth()) {\n prevMonthDate.setDate(0);\n }\n setNewTempDate(prevMonthDate, getNearestAvailableDay(prevMonthDate));\n if(!options.button_prev.classList.contains(prefix + \"disabled\")) {\n options.button_prev.focus();\n }\n }, false);\n options.button_next.addEventListener(\"click\", function() {\n monthNext();\n removeTempClass();\n var nextMonthDate = new Date(tempSelected.getTime());\n nextMonthDate.setMonth(nextMonthDate.getMonth() + 1);\n if (nextMonthDate.getMonth() - tempSelected.getMonth() >= 2) {\n nextMonthDate.setDate(0);\n }\n setNewTempDate(nextMonthDate, getNearestAvailableDay(nextMonthDate));\n if(!options.button_next.classList.contains(prefix + \"disabled\")) {\n options.button_next.focus();\n }\n }, false);\n options.button_prev.addEventListener(\"keydown\", buttonKeydownHandler, false);\n options.button_next.addEventListener(\"keydown\", buttonKeydownHandler, false);\n };\n \n this.destroy = function () {\n options.button_prev.removeEventListener(\"click\", monthPrev, false);\n options.button_next.removeEventListener(\"click\", monthNext, false);\n options.button_prev.removeEventListener(\"keydown\", buttonKeydownHandler, false);\n options.button_next.removeEventListener(\"keydown\", buttonKeydownHandler, false);\n clearCalendar();\n document.querySelector(target).innerHTML = \"\";\n };\n this.reset = function () {\n this.destroy();\n this.init();\n };\n // this.set = function (options) {\n // for (var k in options) {\n // if (opts.hasOwnProperty(k)) {\n // opts[k] = options[k];\n // } \n // }\n // createMonth();\n // }\n if (!(stringDatePicker in element)) {\n // validate options\n if (calendarBtn == null) {\n throw new Error(\"There was a problem found with date picker button, please correct and try again\");\n }\n if (target == null) {\n throw new Error(\"There was a problem found with date picker target, please correct and try again\");\n }\n if (calendar == null) {\n throw new Error(\"There was a problem found with calendar, please correct and try again\");\n }\n //remove time from date\n datePtr.setHours(0, 0, 0, 0);\n todaysDate.setHours(0, 0, 0, 0);\n calendarBtn.addEventListener(\"click\", toggleCalendar, false);\n if (isEdge) {\n calendarBtn.addEventListener(\"click\", inputHandler, false);\n }\n if(!dateInput.hasAttribute(\"placeholder\")){\n console.warn(\"Placeholder was not set. Please set a placeholder value if you plan to use form validation. Setting to default placeholder value.\");\n dateInput.setAttribute(\"placeholder\", \"__/__/____\");\n }\n if (dateInput) {\n new InputMask(dateInput);\n var errorMsg = element.querySelector(\".\" + prefix + \"invalid-feedback\");\n dateInput.addEventListener(\"change\", inputHandler, false);\n if (isEdge) {\n dateInput.addEventListener(\"focusout\", inputHandler, false);\n }\n }\n form = getClosest(element, \"FORM\", false);\n form.addEventListener(\"submit\", submitHandler);\n this.init();\n setFocusableElements();\n // //set input mask\n options.defaultDate = options.defaultDate ? (checkDateValidity(new Date (options.defaultDate)) ? options.defaultDate : \"\" ) : \"\"; \n if (!options.defaultDate) {\n options.defaultDate = new Date();\n options.defaultDate.setHours(0, 0, 0, 0);\n } else {\n var defaultDate = new Date (options.defaultDate);\n var defaultDay = defaultDate.getDate() < 10 ? \"0\" + defaultDate.getDate() : defaultDate.getDate();\n var defaultMonth = (defaultDate.getMonth() + 1) < 10 ? \"0\" + (defaultDate.getMonth() + 1) : (defaultDate.getMonth() + 1);\n\n dateInput.setAttribute(\"value\", defaultMonth + \"/\" + defaultDay + \"/\" + defaultDate.getFullYear());\n var e = document.createEvent(\"Event\");\n e.initEvent(\"change\", false, false);\n dateInput.dispatchEvent(e);\n if (isIE || isEdge) {\n element.style.display = \"none\"; //IE needs a small timeout or cursor will appear in input box\n setTimeout(function() {\n dateInput.blur();\n element.style.display = \"block\";\n }, 300);\n } \n }\n }\n element[stringDatePicker] = self;\n}\n\nexport function BarSelect(element) {\n element = element instanceof HTMLElement ? element : (function() {\n return false;\n })();\n\n var self = this,\n stringBarSelect = \"BarSelect\",\n selects = null,\n value = 0,\n clickHandler = function (e) {\n var input = e.target.classList.contains(prefix + \"bar-select\") ? e.target.querySelector(\"input\") : e.target.tagName == \"LABEL\" ? e.target.previousElementSibling : e.target;\n value = parseInt(input.getAttribute(\"value\"));\n each(selects, function(select) {\n if (parseInt(select.querySelector(\"input\").getAttribute(\"value\")) <= value) {\n select.classList.remove(prefix + \"bar-select-hover\");\n select.classList.add(prefix + \"bar-select-selected\");\n } else {\n select.classList.remove(prefix + \"bar-select-hover\");\n select.classList.remove(prefix + \"bar-select-selected\");\n }\n });\n uicoreCustomEvent(\"BarSelect\", \"SelectedValue\", element, { \"value\": value});\n },\n mouseOverHandler = function(e) {\n var input = e.target.classList.contains(prefix + \"bar-select\") ? e.target.querySelector(\"input\") : e.target.tagName == \"LABEL\" ? e.target.previousElementSibling : e.target;\n value = parseInt(input.getAttribute(\"value\"));\n each(selects, function(select) {\n if (parseInt(select.querySelector(\"input\").getAttribute(\"value\")) <= value) {\n select.classList.add(prefix + \"bar-select-hover\");\n } else {\n select.classList.remove(prefix + \"bar-select-hover\");\n }\n });\n },\n mouseOutHandler = function() {\n each(selects, function(select) {\n select.classList.remove(prefix + \"bar-select-hover\");\n });\n },\n focusHandler = function(e) {\n var input = e.currentTarget.nextElementSibling;\n if (!isInViewport(input)) {\n input.scrollIntoView(false);\n }\n },\n isInViewport = function(element) {\n var bounding = element.getBoundingClientRect();\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n };\n\n if (!(stringBarSelect in element)) {\n selects = element.querySelectorAll(\".\" + prefix + \"bar-select\");\n element.addEventListener(\"mouseout\", mouseOutHandler, false);\n each(selects, function(select) {\n select.addEventListener(\"click\", clickHandler, false);\n select.addEventListener(\"mouseover\", mouseOverHandler, false);\n if (isIE || isFirefox) {\n select.querySelector(\"input\").addEventListener(\"focusin\", focusHandler, false);\n }\n });\n }\n\n element[stringBarSelect] = self;\n}","import { DOC, getElementsByClassName, prefix, uicoreCustomEvent, getTransitionDurationFromElement, each, getClosest } from \"./utilities.js\";\r\n\r\nexport function Button(element) {\r\n // initialization element\r\n element = element instanceof HTMLElement ? element : (function() {\r\n return false;\r\n })();\r\n\r\n // constant\r\n var self = this,\r\n stringButton = \"Button\",\r\n toggled = false, // toggled makes sure to prevent triggering twice the change.bs.button events\r\n pxToMove,\r\n btnWidth,\r\n checked = \"checked\",\r\n LABEL = \"LABEL\",\r\n onEl,\r\n offEl,\r\n circleEl,\r\n btnToggle,\r\n // private methods\r\n keyHandler = function(e) {\r\n var key = e.which || e.keyCode;\r\n key === 32 && e[\"target\"] === DOC.activeElement && toggle(e);\r\n },\r\n preventScroll = function(e) {\r\n var key = e.which || e.keyCode;\r\n key === 32 && e[\"preventDefault\"]();\r\n },\r\n toggle = function(e) {\r\n var label =\r\n e[\"target\"].tagName === LABEL \r\n ? e[\"target\"] \r\n : e[\"target\"][\"parentNode\"].tagName === LABEL \r\n ? e[\"target\"][\"parentNode\"] \r\n : null; // the .btn label\r\n\r\n if (!label) return; //react if a label or its immediate child is clicked\r\n\r\n var eventTarget = e[\"target\"], // the button itself, the target of the handler function\r\n labels = getElementsByClassName(eventTarget[\"parentNode\"], \"btn\"), // all the button group buttons\r\n input = label[\"getElementsByTagName\"](\"INPUT\")[0];\r\n \r\n if (!input) return; //return if no input found\r\n\r\n // manage the dom manipulation\r\n if (input.type === \"checkbox\") {\r\n //checkboxes\r\n if (!input[checked]) {\r\n label.classList.add(prefix+\"active\");\r\n input[\"getAttribute\"](checked);\r\n input[\"setAttribute\"](checked, checked);\r\n input[checked] = true;\r\n } else {\r\n label.classList.remove(prefix+\"active\");\r\n input[\"getAttribute\"](checked);\r\n input.removeAttribute(checked);\r\n input[checked] = false;\r\n }\r\n\r\n if (!toggled) {\r\n // prevent triggering the event twice\r\n toggled = true;\r\n // bootstrapCustomEvent.call(input, \"change\", component); //trigger the change for the input\r\n // bootstrapCustomEvent.call(element, \"change\", component); //trigger the change for the btn-group\r\n }\r\n }\r\n\r\n if (input.type === \"radio\" && !toggled) {\r\n // radio buttons\r\n if (!input[checked]) {\r\n // don't trigger if already active\r\n label.classList.add(prefix+\"active\");\r\n input[\"setAttribute\"](checked, checked);\r\n input[checked] = true;\r\n // bootstrapCustomEvent.call(input, \"change\", component); //trigger the change for the input\r\n // bootstrapCustomEvent.call(element, \"change\", component); //trigger the change for the btn-group\r\n\r\n toggled = true;\r\n each(labels, function(otherLabel) {\r\n var otherInput = otherLabel[\"getElementsByTagName\"](\"INPUT\")[0];\r\n if (otherLabel !== label && otherLabel.classList[\"contains\"](prefix+\"active\")) {\r\n label.classList.remove(prefix+\"active\");\r\n otherInput.removeAttribute(checked);\r\n otherInput[checked] = false;\r\n // bootstrapCustomEvent.call(otherInput, \"change\", component); // trigger the change\r\n }\r\n });\r\n }\r\n }\r\n setTimeout(function() {\r\n toggled = false;\r\n }, 50);\r\n },\r\n clickHandler = function() {\r\n // going from on to off\r\n if (btnToggle.getAttribute(\"aria-checked\") === \"true\") {\r\n self.toggleOff();\r\n // going from off to on\r\n } else {\r\n self.toggleOn();\r\n } \r\n };\r\n \r\n // public methods\r\n this.toggleOff = function() {\r\n circleEl.style.transform = \"translateX(0px)\";\r\n setTimeout(function(){\r\n btnToggle.setAttribute(\"aria-checked\", \"false\");\r\n }, (getTransitionDurationFromElement(circleEl)/2)-25);\r\n offEl.setAttribute(\"aria-hidden\", \"false\");\r\n onEl.setAttribute(\"aria-hidden\", \"true\");\r\n uicoreCustomEvent(\"ButtonToggle\", \"Off\", element);\r\n };\r\n this.toggleOn = function() {\r\n circleEl.style.transform = \"translateX(\" + pxToMove + \"px)\";\r\n setTimeout(function(){\r\n btnToggle.setAttribute(\"aria-checked\", \"true\");\r\n }, (getTransitionDurationFromElement(circleEl)/2)-25);\r\n offEl.setAttribute(\"aria-hidden\", \"true\");\r\n onEl.setAttribute(\"aria-hidden\", \"false\") ;\r\n uicoreCustomEvent(\"ButtonToggle\", \"On\", element);\r\n };\r\n\r\n // init\r\n if (!(stringButton in element)) {\r\n // prevent adding event handlers twice\r\n if (element.classList.contains(prefix + \"btn-toggle-container\")) {\r\n btnToggle = element.firstElementChild.tagName === \"LABEL\" ? element.querySelector(\".\" + prefix + \"btn-toggle\") : element;\r\n \r\n offEl = btnToggle.querySelector(\".\" + prefix + \"toggle-txt-off\");\r\n onEl = btnToggle.querySelector(\".\" + prefix + \"toggle-txt-on\");\r\n circleEl = btnToggle.querySelector(\".\" + prefix + \"toggle-circle\");\r\n \r\n if (element.firstElementChild.tagName === \"SPAN\") {\r\n offEl.style.display=\"block\";\r\n onEl.style.display=\"block\";\r\n var widthOff = offEl.getBoundingClientRect().width;\r\n var widthOn = onEl.getBoundingClientRect().width;\r\n offEl.removeAttribute(\"style\");\r\n onEl.removeAttribute(\"style\");\r\n btnWidth = Math.max(widthOff, widthOn);\r\n btnToggle.style.width = (btnWidth + 24) + \"px\";\r\n }\r\n\r\n pxToMove = btnToggle.getBoundingClientRect().width - 28;\r\n \r\n if(btnToggle.getAttribute(\"aria-checked\") === \"true\"){\r\n circleEl.style.transform = \"translateX(\" + pxToMove + \"px)\";\r\n }\r\n btnToggle.style.visibility = \"visible\";\r\n element.addEventListener(\"click\", clickHandler);\r\n // bootstrap button js that needs to be checked on \r\n } else {\r\n element.addEventListener(\"click\", toggle, false);\r\n element[\"hasAttribute\"](\"tabindex\") && \r\n element.addEventListener(\"keyup\", keyHandler, false),\r\n element.addEventListener(\"keydown\", preventScroll, false);\r\n \r\n // activate items on load\r\n each(getElementsByClassName(element, prefix+\"btn\"), function(label) {\r\n !label.classList[\"contains\"](prefix+\"active\") &&\r\n label(\"hasAttribute\")(\"checked\") &&\r\n label.classList.add(prefix+\"active\");\r\n });\r\n }\r\n \r\n }\r\n\r\n element[stringButton] = self;\r\n}\r\n\r\nexport function ButtonFilter(element) {\r\n // initialization element\r\n element = element instanceof HTMLElement ? element : (function() {\r\n return false;\r\n })();\r\n\r\n var stringButtonFilter = \"ButtonFilter\",\r\n lastActiveItem = null,\r\n inactiveFilterItem,\r\n activeFilterItem,\r\n // Event Handlers\r\n focusInEventHandler = function(e) {\r\n var filterItem = e[\"currentTarget\"];\r\n e.preventDefault();\r\n // Clicking or Tabbing on the active filter item\r\n var parentFieldset = getClosest(filterItem, \"fieldset\", false);\r\n if(filterItem == lastActiveItem || filterItem.classList.contains(prefix+\"disabled\") || parentFieldset && parentFieldset.hasAttribute(\"disabled\")){\r\n return;\r\n }\r\n\r\n activeFilterItem = filterItem;\r\n inactiveFilterItem = lastActiveItem;\r\n\r\n if (inactiveFilterItem.label) {\r\n inactiveFilterItem.label.classList.remove(prefix + \"active\");\r\n activeFilterItem.label.classList.add(prefix + \"active\");\r\n }\r\n if (inactiveFilterItem.input) {\r\n inactiveFilterItem.input.removeAttribute(\"checked\");\r\n activeFilterItem.input.setAttribute(\"checked\",\"\");\r\n }\r\n\r\n inactiveFilterItem.classList.remove(prefix + \"active\");\r\n activeFilterItem.classList.add(prefix + \"active\");\r\n lastActiveItem = activeFilterItem;\r\n\r\n // TODO\r\n // Emit filter event typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: T\r\n uicoreCustomEvent(\"ButtonFilter\", \"Click\", activeFilterItem.label, {\"target\": activeFilterItem.label.dataset[\"filterValue\"]});\r\n };\r\n\r\n if (!(stringButtonFilter in element)) {\r\n var filterItems = element.querySelectorAll(\".\"+ prefix + \"filter-item\");\r\n lastActiveItem = element.querySelector(\".\" + prefix + \"active\");\r\n for (var f = 0; f < filterItems.length; f++) {\r\n filterItems[f].addEventListener(\"focusin\", focusInEventHandler, false);\r\n filterItems[f].label = filterItems[f].querySelector(\".\"+ prefix + \"btn-filter\");\r\n filterItems[f].input = filterItems[f].querySelector(\".\"+ prefix + \"btn-input\");\r\n }\r\n }\r\n\r\n element[stringButtonFilter] = self;\r\n}","import {each, prefix, debounce, createElement, classAdd, isArray, isIE, uicoreCustomEvent, emulateTransitionEnd, isEdge, renderSvg } from \"./utilities\";\n\nexport default function Overflow(element, options) {\n\n element = element instanceof HTMLElement ? element : (function () {\n return false;\n })();\n\n // set options\n options = options || {};\n if (element.dataset[\"type\"]) {\n options.type = element.dataset[\"type\"];\n }\n if (element.dataset[\"position\"]) {\n options.position = element.dataset[\"position\"];\n }\n if (element.dataset[\"top\"]) {\n options.top = parseInt(element.dataset[\"top\"]);\n }\n if (element.dataset[\"style\"]) {\n options.style = element.dataset[\"style\"];\n }\n\n options.type = options.type ? options.type : \"single\";\n options.style = options.style ? options.style === \"svg\" ? options.style = \"svg\" : \"button\" : \"button\";\n options.position = options.position && options.position === \"outset\" ? \"outset\" : \"inset\";\n options.top = options.top && typeof(options.top) === \"number\" ? options.top : null;\n options.lazyload = options.lazyload ? options.lazyload : false;\n options.responsive = options.responsive ? options.responsive : false;\n\n var self = this,\n stringOverflow = \"Overflow\",\n overflowElement, // The UL container div\n overflowContainer, // The UL element\n overflowChildren,\n overflowChildRight,\n overflowChildLeft,\n centered = false,\n leftCtrl,\n rightCtrl,\n atLeftEnd = true,\n atRightEnd = true,\n ctrlWidth,\n containerLeft,\n containerRight,\n centeredOffset = 0,\n containerHeight = 0,\n containerWidth = 0,\n // handlers\n handleSizeChange = function() {\n if (containerWidth == overflowElement.offsetWidth) return;\n if (containerHeight !== overflowChildren.children[0].offsetHeight) {\n handleResize();\n }\n setLeftAndRightIndex();\n containerWidth = overflowElement.offsetWidth;\n\n },\n handleResize = debounce(function() {\n getChildrenWidth();\n setLeftAndRightIndex();\n addHeightStyle([leftCtrl,rightCtrl]);\n if ( (Math.abs(overflowContainer.offsetLeft) + overflowContainer.offsetWidth) > overflowChildren.width) {\n if(leftCtrl.hasAttribute(\"active\")){\n var currentOffset = pageRight();\n overflowContainer.style.left = currentOffset + \"px\";\n }\n }\n }, 10),\n handleClickEvent = function(e) {\n var isRight = e.target.classList.contains(prefix+\"overflow-control-right\") ? true : false;\n controlClick(isRight);\n },\n controlClick = function(isRight) {\n var currentOffset = null;\n if (options.type == \"single\") {\n if (isRight) {\n atLeftEnd = false;\n var rightChild = overflowChildren.children[overflowChildRight+1];\n var rightElementEdge = (rightChild.offsetLeft + rightChild.offsetWidth) - (Math.abs(overflowContainer.offsetLeft) + overflowContainer.offsetWidth);\n if (overflowChildRight+1 >= (overflowChildren.children.length - 1) ) {\n atRightEnd = true;\n }\n currentOffset = (Math.abs(overflowContainer.offsetLeft) + rightElementEdge + (options.position === \"inset\" && !atRightEnd ? ctrlWidth : 0))*-1;\n } else {\n atRightEnd = false;\n var leftChild = overflowChildren.children[overflowChildLeft-1];\n if (overflowChildLeft-1 === 0) {\n atLeftEnd = true;\n currentOffset = 0;\n } else {\n currentOffset = (leftChild.offsetLeft - (options.position === \"inset\" && !atLeftEnd ? ctrlWidth : 0))*-1;\n }\n }\n } else {\n if (isRight) {\n currentOffset = pageRight();\n } else {\n atRightEnd = false;\n if (overflowChildren.children[overflowChildLeft].offsetLeft < overflowContainer.offsetWidth) {\n atLeftEnd = true;\n currentOffset = 0;\n } else {\n var tabLeft = Math.abs(overflowContainer.offsetLeft) - overflowChildren.children[overflowChildLeft-1].offsetLeft;\n var contSpace = overflowContainer.offsetWidth - (options.position === \"inset\" ? ctrlWidth : 0) - overflowChildren.children[overflowChildLeft-1].offsetWidth;\n currentOffset = ( Math.abs(overflowContainer.offsetLeft) - (tabLeft + contSpace))*-1;\n }\n }\n }\n overflowContainer.style.left = currentOffset + \"px\";\n emulateTransitionEnd(overflowContainer, setLeftAndRightIndex);\n },\n pageRight = function() {\n var rightChild;\n atLeftEnd = overflowChildren.width < overflowContainer.offsetWidth ? true : false;\n var currentOffset = null;\n var remainder = overflowChildren.width - (Math.abs(overflowContainer.offsetLeft) + overflowContainer.offsetWidth);\n if (overflowContainer.offsetWidth >= remainder) {\n atRightEnd = true;\n rightChild = overflowChildren.children[overflowChildren.children.length-1];\n var rightElementEdge = (rightChild.offsetLeft + rightChild.offsetWidth) - (Math.abs(overflowContainer.offsetLeft) + overflowContainer.offsetWidth);\n currentOffset = (Math.abs(overflowContainer.offsetLeft) + rightElementEdge)*-1;\n } else {\n atRightEnd = false;\n rightChild = overflowChildren.children[overflowChildRight+1];\n currentOffset = (rightChild.offsetLeft - (options.position === \"inset\" && !atRightEnd ? ctrlWidth : 0))*-1;\n }\n return currentOffset;\n },\n setLeftAndRightCtrl = function() {\n if (atRightEnd) {\n rightCtrl.removeAttribute(\"active\");\n if(isIE && centered && atLeftEnd) {\n setMinimumWidth();\n }\n } else if (!rightCtrl.hasAttribute(\"active\") ) {\n rightCtrl.setAttribute(\"active\",\"\");\n if(isIE && centered) {\n overflowContainer.style.minWidth = \"\";\n }\n }\n if (atLeftEnd) {\n leftCtrl.removeAttribute(\"active\");\n } else if (!leftCtrl.hasAttribute(\"active\") ) {\n leftCtrl.setAttribute(\"active\",\"\");\n }\n },\n createArrowHtml = function() {\n leftCtrl = createElement(\"button\", {\n class: prefix+\"overflow-control \"+prefix+\"overflow-control-left \"+(options.style === \"button\" ? prefix+\"overflow-control-btn\" : prefix+\"overflow-control-svg\"),\n tabIndex: \"-1\"\n });\n leftCtrl.style.left = options.position === \"outset\" ? \"-8px\" : \"0px\";\n leftCtrl.addEventListener(\"click\", handleClickEvent, false);\n rightCtrl = createElement(\"button\", {\n class: prefix+\"overflow-control \"+prefix+\"overflow-control-right \"+(options.style === \"button\" ? prefix+\"overflow-control-btn\" : prefix+\"overflow-control-svg\"),\n tabIndex: \"-1\"\n });\n rightCtrl.style.right = options.position === \"outset\" ? \"-8px\" : \"0px\";\n rightCtrl.addEventListener(\"click\", handleClickEvent, false);\n if (options.top) {\n rightCtrl.style.top = options.top+\"px\";\n leftCtrl.style.top = options.top+\"px\";\n }\n var controls = [leftCtrl,rightCtrl];\n if (!options.responsive) {\n each(controls, function(control) {\n control.classList.add(prefix + \"overflow-unresponsive\");\n });\n }\n addHeightStyle(controls);\n \n var leftSvg = renderSvg([{name:\"chevron-left\", show: true}], {\"aria-hidden\": true});\n classAdd(leftSvg, prefix+\"overflow-control-left\");\n var rightSvg = renderSvg([{name:\"chevron-right\", show: true}], {\"aria-hidden\": true});\n classAdd(rightSvg, prefix+\"overflow-control-right\");\n leftCtrl.appendChild(leftSvg);\n rightCtrl.appendChild(rightSvg);\n \n element.insertBefore(leftCtrl, element.children[0]);\n element.insertBefore(rightCtrl, element.children[1]);\n setCtrlWidth();\n },\n getChildrenWidth = function() {\n overflowChildren.width = 0;\n overflowChildren.children = [];\n each(overflowContainer.children, function(child) {\n overflowChildren.width += child.offsetWidth+getMargin(child);\n overflowChildren.children.push(child);\n });\n overflowChildren.width -= (isEdge ? overflowChildren.children.length - 1 : 0);\n },\n getMargin = function(child) {\n var style = child.currentStyle || window.getComputedStyle(child),\n margin;\n if (isIE) {\n margin = convertRemToPixels(style.getPropertyValue(\"margin-left\")) + convertRemToPixels(style.getPropertyValue(\"margin-right\"));\n } else {\n margin = parseInt(style.marginLeft) + parseInt(style.marginRight);\n }\n return margin;\n },\n addHeightStyle = function(els) {\n if (!isArray(els)) {\n els = [els];\n }\n each(els, function(el) {\n if (options.style === \"button\") {\n el.style.height = overflowChildren.children[0].offsetHeight +\"px\";\n containerHeight = overflowChildren.children[0].offsetHeight;\n }\n });\n },\n toggleCentered = function(offSet) {\n if (offSet < 0) {\n if (overflowContainer.parentElement.classList.contains(prefix+\"tabs-centered-container\")) {\n overflowContainer.parentElement.classList.remove(prefix+\"tabs-centered-container\");\n }\n if (overflowContainer.classList.contains(prefix+\"tab-centered\")) {\n overflowContainer.classList.remove(prefix+\"tab-centered\");\n }\n return false;\n } else {\n if (!overflowContainer.parentElement.classList.contains(prefix+\"tabs-centered-container\")) {\n overflowContainer.parentElement.classList.add(prefix+\"tabs-centered-container\");\n }\n if (!overflowContainer.classList.contains(prefix+\"tab-centered\")) {\n overflowContainer.classList.add(prefix+\"tab-centered\");\n }\n overflowContainer.style.left = \"0px\"; \n return true; \n }\n },\n setContainerLeftRight = function(useCentered, offSet) {\n if (useCentered) {\n containerLeft = offSet > 0 ? 0 : offSet;\n containerRight = overflowElement.offsetWidth;\n centeredOffset = Math.floor(offSet);\n } else {\n containerLeft = Math.abs(overflowContainer.offsetLeft);\n containerLeft += options.position === \"inset\" && !atLeftEnd ? ctrlWidth : 0;\n containerRight = containerLeft + overflowContainer.offsetWidth;\n }\n },\n setLeftAndRightIndex = function() {\n overflowChildLeft = null;\n overflowChildRight = null;\n var overflowChildLeftSet = false,\n offSet = (overflowElement.offsetWidth - overflowChildren.width)/2,\n useCentered = false;\n if (centered) {\n useCentered = toggleCentered(offSet);\n }\n setContainerLeftRight(useCentered, offSet);\n each(overflowChildren.children, function(child, idx) {\n var childLeft;\n if (useCentered) {\n childLeft = centeredOffset + (Math.floor(overflowChildren.width/overflowChildren.children.length)*idx);\n } else {\n childLeft = child.offsetLeft;\n }\n if (!overflowChildLeftSet && childLeft >= containerLeft) {\n overflowChildLeft = idx;\n overflowChildLeftSet = true;\n }\n if (childLeft+child.offsetWidth <= containerRight) {\n overflowChildRight = idx;\n }\n });\n if (overflowChildLeft > 0 ) {\n atLeftEnd = false;\n } else {\n atLeftEnd = true;\n }\n if (overflowChildRight < (overflowChildren.children.length-1)) {\n atRightEnd = false;\n } else {\n atRightEnd = true;\n }\n setLeftAndRightCtrl();\n uicoreCustomEvent(\"Overflow\", \"ChangeEvent\", element, {\n \"left\": overflowChildLeft, \n \"right\": overflowChildRight, \n \"totalItems\": overflowChildren.children.length,\n \"hasRightControl\": rightCtrl.hasAttribute(\"active\"),\n \"hasLeftControl\": leftCtrl.hasAttribute(\"active\")\n });\n },\n convertRemToPixels = function(rem) { \n if (rem.indexOf(\"rem\") > 0) { \n rem = rem.split(\"rem\")[0];\n var computed = rem * parseFloat(getComputedStyle(document.documentElement).fontSize);\n if (computed < 0) {\n return Math.floor(computed);\n } else {\n return Math.ceil(computed);\n }\n } else {\n return 0;\n }\n },\n setCtrlWidth = function() {\n var style = rightCtrl.currentStyle || window.getComputedStyle(rightCtrl, null);\n if (isIE) {\n ctrlWidth = convertRemToPixels(style.getPropertyValue(\"width\"));\n } else {\n ctrlWidth = parseInt(style.getPropertyValue(\"width\").match(/^\\d.?/g)[0]);\n }\n },\n setMinimumWidth = function() {\n var width = 0;\n each(overflowContainer.querySelectorAll(\"LI\"), function(child) {\n width += 120+getMargin(child);\n });\n overflowContainer.style.minWidth = (width-5) + \"px\";\n },\n frameListener = function() {\n handleSizeChange();\n window.requestAnimationFrame(frameListener);\n },\n init = function(){\n getChildrenWidth();\n createArrowHtml();\n setLeftAndRightIndex();\n if (overflowChildRight < overflowChildren.children.length-1) {\n rightCtrl.setAttribute(\"active\",\"\");\n }\n if (isIE && centered && atLeftEnd && atRightEnd) {\n setMinimumWidth();\n }\n window.addEventListener(\"resize\", handleResize, false);\n containerWidth = overflowElement.offsetWidth;\n window.requestAnimationFrame(frameListener);\n };\n \n this.lazyLoad = function() {\n if (stringOverflow in element) {\n init();\n }\n };\n\n this.getCurrentDetails = function() {\n return {\"left\": overflowChildLeft, \n \"right\": overflowChildRight,\n \"totalItems\": overflowChildren.children.length,\n \"hasRightControl\": rightCtrl.hasAttribute(\"active\"),\n \"hasLeftControl\": leftCtrl.hasAttribute(\"active\")\n };\n };\n this.clickRight = function() {\n controlClick(true);\n };\n\n this.clickLeft = function() {\n controlClick(false);\n };\n\n this.clickEnd = function() {\n atLeftEnd = overflowChildren.width < overflowContainer.offsetWidth ? true : false;\n atRightEnd = true;\n if(rightCtrl.hasAttribute(\"active\")){\n overflowContainer.style.left = ((overflowChildren.width - overflowContainer.offsetWidth + (options.position === \"inset\" && !atRightEnd ? ctrlWidth : 0))*-1)+\"px\";\n }\n rightCtrl.removeAttribute(\"active\");\n emulateTransitionEnd(overflowContainer, setLeftAndRightIndex);\n };\n\n this.clickHome = function() {\n atLeftEnd = true;\n atRightEnd = false;\n if(leftCtrl.hasAttribute(\"active\")){\n overflowContainer.style.left = \"0px\";\n }\n leftCtrl.removeAttribute(\"active\");\n emulateTransitionEnd(overflowContainer, setLeftAndRightIndex);\n };\n\n //init\n if (!(stringOverflow in element)) {\n overflowElement = element;\n if (element.children[0].classList.contains(prefix + \"tabs-centered-container\")) {\n centered = true;\n }\n\n overflowElement.style.overflow = \"hidden\";\n overflowContainer = overflowElement.querySelector(\"UL\");\n overflowContainer.classList.add(prefix + \"overflow-transition\");\n overflowContainer.setAttribute(\"style\",\"position: relative; flex-wrap: nowrap; white-space: nowrap; left: 0px\");\n overflowChildren = {};\n // Some child elements contain images so wait for page load to initialize.\n if (!options.lazyload) {\n init();\n }\n \n }\n\n element[stringOverflow] = self;\n}\n","import {getElementsByClassName,globalObject,supportTransitions,HTML,DOC,getTransitionDurationFromElement,prefix,uicoreCustomEvent, isIE, ieMosaicPolyfill, each, validateNum, getClosest, jsonOptionsInit, swipeInit, direction} from \"./utilities.js\";\r\nimport Overflow from \"./overflow.js\";\r\n\r\nexport function Carousel(element, options) {\r\n // initialization element\r\n element = element instanceof HTMLElement ? element : (function() {\r\n return false;\r\n })();\r\n\r\n // set options\r\n options = options || {};\r\n options = jsonOptionsInit(element, options);\r\n options.interval = element.dataset.interval ? validateNum(element.dataset.interval, 5000) : validateNum(options.interval, 5000);\r\n options.pause = element.dataset.pause ? element.dataset.pause === \"hover\" ? element.dataset.pause : false : options.pause === \"hover\" ? options.pause : false;\r\n options.keyboard = element.dataset.keyboard ? element.dataset.keyboard === \"true\" ? true: false : options.keyboard === \"true\" ? true : false;\r\n options.mosaic = false;\r\n \r\n // DATA API\r\n var stringCarousel = \"Carousel\",\r\n visibilityState = \"visible\",\r\n smallMediaSize = window.matchMedia(\"(max-width: 767.98px)\"),\r\n // strings\r\n paused = \"paused\",\r\n dataSlideTo = \"data-slide-to\",\r\n mouseHover = \"onmouseleave\" in DOC ? [\"mouseenter\", \"mouseleave\"] : [\"mouseover\", \"mouseout\"];\r\n\r\n // bind, event targets\r\n var self = this,\r\n stopAutoRotate = false,\r\n index = (element.index = 0),\r\n timer = (element.timer = 0),\r\n isSliding = false, // isSliding prevents click event handlers when animation is running\r\n slides = getElementsByClassName(element, prefix+\"carousel-item\"),\r\n total = slides[\"length\"],\r\n slideDirection = (this[\"direction\"] = \"left\"),\r\n // Arrow capability\r\n leftArrow = getElementsByClassName(\r\n element,\r\n prefix+\"carousel-control-prev\"\r\n )[0],\r\n rightArrow = getElementsByClassName(\r\n element,\r\n prefix+\"carousel-control-next\"\r\n )[0],\r\n // SVG indicators\r\n svgIndicator = element.querySelector(\".\" + prefix+\"carousel-indicators\"),\r\n svgIndicators = (svgIndicator && svgIndicator[\"getElementsByTagName\"](\"LI\")) || [],\r\n // Button indicatos\r\n btnIndicator = element.querySelector(\".\" + prefix+\"carousel-indicators-btn\"),\r\n btnIndicators = (btnIndicator && btnIndicator[\"getElementsByTagName\"](\"LI\")) || [],\r\n indicator = svgIndicator ? svgIndicator : btnIndicator,\r\n indicators = svgIndicators[\"length\"] > 0 ? svgIndicators : btnIndicators;\r\n\r\n // invalidate when not enough items\r\n if (total < 2) {\r\n return;\r\n }\r\n\r\n // handlers\r\n var pauseHandler = function() {\r\n if (options.interval !== false && !element.classList[\"contains\"](paused)) {\r\n element.classList.add(paused);\r\n !isSliding && clearTimer(timer);\r\n }\r\n },\r\n resumeHandler = function() {\r\n if (options.interval !== false && element.classList[\"contains\"](paused)) {\r\n element.classList.remove(paused);\r\n !isSliding && clearTimer(timer);\r\n !isSliding && self.cycle();\r\n }\r\n },\r\n indicatorHandler = function(e) {\r\n e[\"preventDefault\"]();\r\n if (isSliding) return;\r\n\r\n var eventTarget = e[\"target\"]; // event target | the current active item\r\n\r\n if (eventTarget && !eventTarget.classList[\"contains\"](prefix+\"active\") && eventTarget[\"getAttribute\"](dataSlideTo)) {\r\n index = parseInt(eventTarget[\"getAttribute\"](dataSlideTo), 10);\r\n stopAutoRotate = true;\r\n } else {\r\n return false;\r\n }\r\n\r\n self.slideTo(index); //Do the slide\r\n },\r\n controlsHandler = function(e) {\r\n e[\"preventDefault\"]();\r\n if (isSliding) return;\r\n\r\n var eventTarget = e.currentTarget || e.srcElement;\r\n\r\n if (eventTarget === rightArrow) {\r\n index++;\r\n } else if (eventTarget === leftArrow) {\r\n index--;\r\n }\r\n\r\n self.slideTo(index); //Do the slide\r\n },\r\n keyHandler = function(e) {\r\n if (isSliding) return;\r\n switch (e.which) {\r\n case 39: index++; break; \r\n case 37: index--; break;\r\n default: return;\r\n }\r\n self.slideTo(index); //Do the slide\r\n },\r\n swipeHandler = function (el, d) {\r\n switch (d) {\r\n case direction.LEFT:\r\n self.slideTo(index+1);\r\n break;\r\n case direction.RIGHT:\r\n self.slideTo(index-1);\r\n break; \r\n }\r\n },\r\n // private methods\r\n isElementInScrollRange = function() {\r\n var rect = element[\"getBoundingClientRect\"](),\r\n viewportHeight = globalObject[innerHeight] || HTML[\"clientHeight\"];\r\n return rect[\"top\"] <= viewportHeight && rect[\"bottom\"] >= 0; // bottom && top\r\n },\r\n setActivePage = function(pageIndex) {\r\n //indicators\r\n each (indicators, function(indicator) {\r\n indicator.classList.remove(prefix+\"active\");\r\n });\r\n if (indicators[pageIndex]) indicators[pageIndex].classList.add(prefix+\"active\");\r\n },\r\n clearTimer = function(timer) {\r\n clearInterval(timer);\r\n timer = null;\r\n },\r\n toggleMosaic = function(e) {\r\n pauseHandler();\r\n if (e.matches) {\r\n stopAutoRotate = false;\r\n element.addEventListener(mouseHover[0], pauseHandler, false);\r\n element.addEventListener(mouseHover[1], resumeHandler, false);\r\n element.addEventListener(\"touchstart\", pauseHandler, false);\r\n element.addEventListener(\"touchend\", resumeHandler, false);\r\n resumeHandler();\r\n } else {\r\n stopAutoRotate = true;\r\n element.removeEventListener(mouseHover[0], pauseHandler, false);\r\n element.removeEventListener(mouseHover[1], resumeHandler, false);\r\n element.removeEventListener(\"touchstart\", pauseHandler, false);\r\n element.removeEventListener(\"touchend\", resumeHandler, false);\r\n }\r\n };\r\n\r\n // public methods\r\n this.cycle = function() {\r\n if(!stopAutoRotate) {\r\n if (timer) {\r\n clearTimer(timer);\r\n }\r\n timer = setInterval(function() {\r\n isElementInScrollRange() && (index++, self.slideTo(index));\r\n }, options.interval);\r\n } else {\r\n if (timer) {\r\n clearTimer(timer);\r\n }\r\n }\r\n };\r\n this.slideTo = function(next) {\r\n if (isSliding) return; // when controled via methods, make sure to check again\r\n\r\n var activeItem = this.getActiveIndex(); // the current active\r\n // orientation;\r\n // chaeck to see if we need to reset carousel\r\n \r\n // first return if we're on the same item #227\r\n if (activeItem === next) {\r\n return;\r\n }\r\n\r\n // determine slide direction\r\n if (activeItem < next) {\r\n slideDirection = \"right\";\r\n } else {\r\n slideDirection = \"left\";\r\n }\r\n\r\n // find the right next index\r\n if (next < 0) {\r\n next = total - 1;\r\n } else if (next >= total) {\r\n next = 0;\r\n }\r\n\r\n // update index\r\n index = next;\r\n\r\n uicoreCustomEvent(\"Carousel\", \"SlideEvent\", element, { \"direction\": slideDirection, \"slide-to\" : next });\r\n\r\n isSliding = true;\r\n clearTimer(timer);\r\n setActivePage(next);\r\n\r\n if (supportTransitions && element.classList[\"contains\"](\"slide\")) {\r\n // apply appropriate animation\r\n if (slideDirection === \"right\") {\r\n slides[next].classList.add(prefix+\"carousel-item-next\");\r\n slides[next][\"offsetWidth\"];\r\n slides[next].classList.add(prefix+\"carousel-item-left\");\r\n slides[activeItem].classList.add(prefix+\"carousel-item-left\");\r\n } else {\r\n slides[next].classList.add(prefix+\"carousel-item-prev\");\r\n slides[next][\"offsetWidth\"];\r\n slides[next].classList.add(prefix+\"carousel-item-right\");\r\n slides[activeItem].classList.add(prefix+\"carousel-item-right\");\r\n }\r\n var timeout = getTransitionDurationFromElement(slides[next]);\r\n\r\n isSliding &&\r\n setTimeout(function() {\r\n isSliding = false;\r\n\r\n slides[next].classList.add(prefix+\"active\");\r\n slides[activeItem].classList.remove(prefix+\"active\");\r\n\r\n slides[next].classList.remove(prefix+\"carousel-item-next\");\r\n slides[next].classList.remove(prefix+\"carousel-item-prev\");\r\n slides[next].classList.remove(prefix+\"carousel-item-left\");\r\n slides[next].classList.remove(prefix+\"carousel-item-right\");\r\n slides[activeItem].classList.remove(prefix+\"carousel-item-left\");\r\n uicoreCustomEvent(\"Carousel\", \"SlideEvent\", element, { \"direction\": slideDirection, \"slide-to\" : next });\r\n \r\n if (!(visibilityState === \"hidden\") && options.interval && !element.classList[\"contains\"](paused)) {\r\n self.cycle();\r\n } else {\r\n if(visibilityState === \"hidden\") {\r\n pauseHandler();\r\n }\r\n }\r\n }, timeout);\r\n\r\n } else {\r\n slides[next].classList.add(prefix+\"active\");\r\n slides[next][\"offsetWidth\"];\r\n slides[activeItem].classList.remove(prefix+\"active\");\r\n setTimeout(function() {\r\n isSliding = false;\r\n if (options.interval && !element.classList[\"contains\"](paused)) {\r\n self.cycle();\r\n }\r\n uicoreCustomEvent(\"Carousel\", \"SlideEvent\", element, { \"direction\": slideDirection, \"slide-to\" : next });\r\n }, 100);\r\n }\r\n };\r\n this.getActiveIndex = function() {\r\n return (\r\n slides[\"indexOf\"](\r\n getElementsByClassName(element, prefix+\"carousel-item\" + \" \" + prefix + \"active\")[0]\r\n ) || 0\r\n );\r\n };\r\n\r\n // init\r\n if (!(stringCarousel in element)) {\r\n \r\n if (element.classList.contains(prefix + \"mosaic\")){\r\n options.mosaic = true;\r\n }\r\n \r\n DOC.addEventListener(\"visibilitychange\", function(){\r\n if (visibilityState === \"hidden\" && document.visibilityState === \"visible\") {\r\n resumeHandler();\r\n }\r\n visibilityState = document.visibilityState;\r\n });\r\n\r\n if (options.pause && options.interval) {\r\n if (!options.mosaic || (options.mosaic && smallMediaSize.matches)) {\r\n element.addEventListener(mouseHover[0], pauseHandler, false);\r\n element.addEventListener(mouseHover[1], resumeHandler, false);\r\n element.addEventListener(\"touchstart\", pauseHandler, false);\r\n element.addEventListener(\"touchend\", resumeHandler, false);\r\n } \r\n if (options.mosaic) {\r\n if (isIE) {\r\n ieMosaicPolyfill(slides);\r\n }\r\n if (!smallMediaSize.matches) {\r\n stopAutoRotate = true;\r\n }\r\n smallMediaSize.addListener(toggleMosaic);\r\n }\r\n }\r\n\r\n swipeInit(element, swipeHandler);\r\n\r\n rightArrow && rightArrow.addEventListener(\"click\", controlsHandler, false);\r\n leftArrow && leftArrow.addEventListener(\"click\", controlsHandler, false);\r\n\r\n indicator && indicator.addEventListener(\"click\", indicatorHandler, false);\r\n\r\n if (!svgIndicator) {\r\n each (indicators, function(indicator) {\r\n each (indicator.children, function(childIndicator) {\r\n childIndicator.addEventListener(\"click\", indicatorHandler);\r\n });\r\n indicator.addEventListener(\"click\", indicatorHandler);\r\n });\r\n }\r\n\r\n options.keyboard === true && globalObject.addEventListener(\"keydown\", keyHandler, false);\r\n if (self.getActiveIndex() < 0) {\r\n slides[length] && slides[0].classList.add(prefix+\"active\");\r\n indicators[length] && setActivePage(0);\r\n }\r\n \r\n if (options.interval) {\r\n self.cycle();\r\n }\r\n }\r\n element[stringCarousel] = self;\r\n}\r\n\r\nexport function FilmstripCarousel(element, options) {\r\n element = element instanceof HTMLElement ? element : (function() {\r\n return false;\r\n })();\r\n\r\n options = options || {};\r\n options = jsonOptionsInit(element, options);\r\n options.lazyload = typeof options.lazyload === \"boolean\" ? options.lazyload : false;\r\n\r\n var stringFilmstrip = \"Filmstrip\",\r\n activeElement,\r\n itemsView,\r\n overflow = {},\r\n overflowContainer,\r\n // handlers\r\n handleOverflowChange = function(e) {\r\n overflow.detail = e.detail;\r\n updateItemsView();\r\n },\r\n clickEventHandler = function(e) {\r\n e.preventDefault();\r\n var target = e.target;\r\n if (target && target.parentElement.tagName === \"BUTTON\") {\r\n target = target.parentElement;\r\n }\r\n if (activeElement) {\r\n activeElement.classList.remove(prefix + \"active\");\r\n activeElement.setAttribute(\"aria-pressed\",\"false\");\r\n }\r\n target.classList.add(prefix + \"active\");\r\n target.setAttribute(\"aria-pressed\",\"true\");\r\n activeElement = target;\r\n // Emit filter event\r\n uicoreCustomEvent(\"FilmstripCarousel\", \"ItemClick\", element, {\"target\": target.dataset[\"filterValue\"]});\r\n },\r\n updateItemsView = function() {\r\n if(itemsView){\r\n var rightNumber = overflow.detail.hasRightControl ? overflow.detail.right+1 : overflow.detail.totalItems,\r\n leftNumber = overflow.detail.hasLeftControl ? overflow.detail.left+1 : 1;\r\n itemsView.innerHTML = \"Viewing \" + (leftNumber) + (leftNumber < rightNumber ? \" - \" + (rightNumber) : \"\") + \" of \"+ overflow.detail.totalItems +\" items \";\r\n }\r\n };\r\n\r\n this.lazyLoad = function() {\r\n if (options.lazyload && overflow) {\r\n overflow.lazyLoad();\r\n overflow.detail = overflow.getCurrentDetails();\r\n updateItemsView();\r\n overflowContainer.addEventListener(\"uicOverflowChangeEvent\", handleOverflowChange, false);\r\n uicoreCustomEvent(\"FilmstripCarousel\", \"LazyLoadEvent\", element, {\"success\": true});\r\n }\r\n else {\r\n uicoreCustomEvent(\"FilmstripCarousel\", \"LazyLoadEvent\", element, {\"success\": false, \"msg\": \"Carousel cannot be lazy loaded. Check usage or avoid mulitple lazy loads.\"});\r\n }\r\n };\r\n\r\n // prevent adding event handlers twice\r\n if (!(stringFilmstrip in element)) {\r\n itemsView = element.parentElement.querySelector(\"DIV.dds__items-view\");\r\n each(element.querySelector(\"UL\").querySelectorAll(\"LI BUTTON\"), function(el) {\r\n if (el.classList.contains(prefix + \"active\")) {\r\n activeElement = el;\r\n }\r\n el.addEventListener(\"click\", clickEventHandler, false);\r\n });\r\n\r\n overflowContainer = getClosest(element, \".\" + prefix + \"container-overflow\");\r\n if (overflowContainer) {\r\n overflow = new Overflow(overflowContainer, {\r\n position: \"outset\",\r\n style: \"svg\",\r\n top: 50,\r\n lazyload: options.lazyload\r\n });\r\n if (!options.lazyload) {\r\n overflow.detail = overflow.getCurrentDetails();\r\n updateItemsView();\r\n overflowContainer.addEventListener(\"uicOverflowChangeEvent\", handleOverflowChange, false);\r\n }\r\n }\r\n \r\n }\r\n\r\n element[stringFilmstrip] = self;\r\n\r\n}\r\n","import {uicoreCustomEvent,prefix,emulateTransitionEnd,getClosest,DOC, jsonOptionsInit} from \"./utilities.js\";\n\nexport default function Collapse(element, options) {\n // initialization element\n element = element instanceof HTMLElement ? element : (function() {\n return false;\n })();\n\n // set options\n options = options || {};\n options = jsonOptionsInit(element, options);\n options.target = element.dataset.target ? element.dataset.target\n : options.target ? options.target : element.href && element.getAttribute(\"href\") ? element.getAttribute(\"href\") : false;\n options.parent = element.dataset.parent ? element.dataset.parent : options.parent ? options.parent : false;\n\n // validate options\n (function () {\n if(!options.target || !(options.target.charAt(0) === \"#\")) {\n throw new Error(\"There was a problem found with target value, please correct and try again\");\n }\n })();\n\n // event targets and constants\n var self = this,\n accordion = null,\n stringCollapse = \"Collapse\",\n collapse = null,\n activeCollapse,\n activeElement,\n showAllBtn,\n hideAllBtn,\n isClickable = true, \n // private methods\n openAction = function(collapseElement, toggle) {\n uicoreCustomEvent(\"ShowHide\", \"ShowEvent\", collapseElement);\n collapseElement.isAnimating = true;\n collapseElement.classList.add(prefix + \"collapsing\");\n collapseElement.classList.remove(prefix+\"collapse\");\n collapseElement.style.height = collapseElement.scrollHeight + \"px\";\n collapseElement.children[0].focus();\n toggle.setAttribute(\"aria-expanded\", \"true\");\n\n emulateTransitionEnd(collapseElement, function() {\n if (!toggle.classList.contains(prefix+\"collapsed\")) {\n collapseElement.isAnimating = false;\n collapseElement.setAttribute(\"aria-expanded\", \"true\");\n collapseElement.classList.remove(prefix + \"collapsing\");\n collapseElement.classList.add(prefix + \"collapse\");\n collapseElement.classList.add(prefix + \"show\");\n collapseElement.style.height = \"\";\n uicoreCustomEvent(\"ShowHide\", \"Shown\", collapseElement);\n }\n });\n },\n closeAction = function(collapseElement, toggle) {\n uicoreCustomEvent(\"ShowHide\", \"HideEvent\", collapseElement);\n collapseElement.isAnimating = true;\n collapseElement.style.height = collapseElement.scrollHeight + \"px\"; // set height first\n collapseElement.classList.remove(prefix + \"collapse\");\n collapseElement.classList.remove(prefix+\"show\");\n collapseElement.classList.add(prefix + \"collapsing\");\n collapseElement.offsetWidth; // force reflow to enable transition\n collapseElement.style.height = \"0rem\";\n toggle.setAttribute(\"aria-expanded\", \"false\");\n\n emulateTransitionEnd(collapseElement, function() {\n collapseElement.isAnimating = false;\n collapseElement.setAttribute(\"aria-expanded\", \"false\");\n collapseElement.classList.remove(prefix + \"collapsing\");\n collapseElement.classList.add(prefix + \"collapse\");\n collapseElement.style.height = \"\";\n uicoreCustomEvent(\"ShowHide\", \"Hidden\", collapseElement);\n });\n },\n showAll = function() {\n // this function will be called by all the sub accordions individually\n // thus, achieve the goal to show all\n if (element.classList.contains(prefix + \"collapsed\")){\n self.show();\n }\n },\n hideAll = function() {\n if (!element.classList.contains(prefix + \"collapsed\")){\n self.hide();\n }\n }, \n handleBeginShow = function() {\n isClickable = false;\n },\n handleEndShow = function() {\n isClickable = true;\n };\n\n // public methods\n this.toggle = function(e) {\n if (!isClickable) {\n return;\n }\n if (e) {\n e.preventDefault();\n }\n if (!collapse.classList.contains(prefix+\"show\")) {\n self.show();\n } else {\n self.hide();\n }\n };\n this.hide = function() {\n if (collapse.isAnimating) return;\n closeAction(collapse, element);\n element.classList.add(prefix + \"collapsed\");\n };\n this.show = function() {\n if (accordion && options.parent) {\n activeCollapse = accordion.querySelector(\".\" + prefix + \"collapse\" + \".\" + prefix+\"show\") || accordion.querySelector(\".\"+prefix+\"collapsing\");\n activeElement =\n activeCollapse &&\n (accordion.querySelector(\"[data-toggle='\" + prefix + \"collapse\" + \"'][data-target='#\" + activeCollapse.id + \"']\") ||\n accordion.querySelector(\"[data-toggle='\" +prefix + \"collapse\" + \"'][href='#\" + activeCollapse.id + \"']\"));\n }\n\n if (\n !collapse.isAnimating || (activeCollapse && !activeCollapse.isAnimating)) {\n if (activeElement && activeCollapse !== collapse) {\n closeAction(activeCollapse, activeElement);\n activeElement.classList.add(prefix + \"collapsed\");\n }\n openAction(collapse, element);\n element.classList.remove(prefix + \"collapsed\");\n }\n };\n\n // init\n if (!(stringCollapse in element)) {\n element.addEventListener(\"click\", self.toggle, false);\n\n collapse = DOC.getElementById(options.target.substr(1));\n if (collapse) {\n collapse.isAnimating = false; //// when true it will prevent click handlers\n }\n accordion = options.parent && getClosest(element, options.parent)\n || getClosest(element, \".\" + prefix + \"accordion\");\n\n if (accordion) {\n var showHideAll = accordion.querySelector(\".dds__show-hide-container\");\n if (showHideAll) {\n showAllBtn = showHideAll.querySelector(\".dds__show-all\");\n if(showAllBtn) {\n showAllBtn.addEventListener(\"click\", showAll, false);\n }\n hideAllBtn = showHideAll.querySelector(\".dds__hide-all\");\n if(hideAllBtn) {\n hideAllBtn.addEventListener(\"click\", hideAll, false);\n }\n }\n }\n document.addEventListener(\"uicShowHideShowEvent\", handleBeginShow);\n document.addEventListener(\"uicShowHideShown\", handleEndShow);\n }\n \n element[stringCollapse] = self;\n\n}\n","import {prefix, uicoreCustomEvent, jsonOptionsInit} from \"./utilities.js\";\n\nexport default function ContactDrawer(element, options) {\n // initialization element\n element = element instanceof HTMLElement ? element : (function() {\n return false;\n })();\n\n // set options\n options = options || {};\n options = jsonOptionsInit(element, options);\n options.openTime = options.openTime ? options.openTime : 5000; // milliseconds\n options.closedTime = options.closedTime ? options.closedTime : 7000; // milliseconds\n options.transitionTime = options.transitionTime ? options.transitionTime : 500; // milliseconds\n\n // bind, elements\n var self = this,\n stringContactDrawer = \"ContactDrawer\",\n tab = element.querySelector(\".\" + prefix + \"drawer-tab\"),\n closeButton = element.querySelector(\".\" + prefix + \"close-x\"),\n content = element.querySelector(\".\" + prefix + \"drawer-content\"),\n visible = true,\n cancelAutomation = false;\n\n // handlers\n var clickHandler = function (e) {\n e.preventDefault();\n if (!cancelAutomation) {\n cancelAutomation = true;\n }\n toggleAction();\n };\n\n // private methods\n var openAction = function() {\n visible = true;\n element.classList.add(prefix + \"drawer-open\");\n uicoreCustomEvent(\"ContactDrawer\", \"OpenEvent\", element);\n content.hidden = false;\n content.setAttribute(\"aria-hidden\", false);\n },\n closeAction = function() {\n visible = false;\n element.classList.remove(prefix + \"drawer-open\");\n uicoreCustomEvent(\"ContactDrawer\", \"CloseEvent\", element);\n setTimeout(function() {\n content.hidden = true;\n }, options.transitionTime);\n content.setAttribute(\"aria-hidden\", true);\n },\n toggleAction = function() {\n if (visible) {\n closeAction();\n } else {\n openAction();\n }\n },\n setDrawerToggleOptions = function() {\n var toggleOptionsStr = content.dataset.contactDrawer;\n if (toggleOptionsStr) {\n var toggleOptions = JSON.parse(toggleOptionsStr);\n\n if (toggleOptions) {\n if (toggleOptions.OpenTimeInSeconds)\n options.openTime = toggleOptions.OpenTimeInSeconds * 1000;\n if (toggleOptions.CloseTimeInSeconds)\n options.closedTime = toggleOptions.CloseTimeInSeconds * 1000;\n if (toggleOptions.TransitionTimeInMilliseconds)\n options.transitionTime = toggleOptions.TransitionTimeInMilliseconds;\n }\n }\n },\n setTransitionTime = function() {\n if (\n options.transitionTime > options.openTime ||\n options.transitionTime > options.closedTime\n ) {\n //console.warn(\"contact drawer transition time is too large\");\n return;\n }\n\n if (element) {\n element.style.transition = \"all \" + options.transitionTime + \"ms ease\";\n }\n };\n\n // public methods\n this.timerAction = function() {\n if (!cancelAutomation) {\n if (visible) {\n closeAction();\n if (options.closedTime) {\n setTimeout(function() {\n return self.timerAction();\n }, options.closedTime);\n }\n } else {\n openAction();\n if (options.openTime) {\n setTimeout(function() {\n return self.timerAction();\n }, options.openTime);\n }\n }\n }\n };\n\n // init\n if (!(stringContactDrawer in element)) {\n\n tab.addEventListener(\"click\", clickHandler, false);\n closeButton.addEventListener(\"click\", clickHandler, false);\n\n setDrawerToggleOptions();\n setTransitionTime();\n }\n\n if(!cancelAutomation) {\n self.timerAction();\n }\n element[stringContactDrawer] = self;\n}\n","import {prefix,uicoreCustomEvent,DOC,setFocus,createElement, each, jsonOptionsInit} from \"./utilities.js\";\r\n\r\nexport default function Dropdown(element, options) {\r\n // initialization element\r\n element = element instanceof HTMLElement ? element : (function() {\r\n return false;\r\n })();\r\n\r\n // set option\r\n options = options || {};\r\n options = jsonOptionsInit(element, options);\r\n options.persist = element.dataset.persist ? element.dataset.persist : options.persist ? options.persist : false;\r\n // constants, event targets, strings\r\n var self = this,\r\n stringDropdown = \"Dropdown\",\r\n parent = element.parentNode,\r\n isMultiSelect = false,\r\n relatedTarget = null,\r\n menu = parent.querySelector(\".\"+prefix+\"button-dropdown-container\"),\r\n menuItems,\r\n itemsChecked,\r\n currentText,\r\n filters,\r\n // preventDefault on empty anchor links\r\n preventEmptyAnchor = function (anchor) {\r\n if ((anchor && anchor.tagName === \"A\" && anchor.href && anchor.href.slice(-1) === \"#\") ||\r\n (anchor && anchor.parentNode && anchor.parentNode.tagName === \"A\" && anchor.parentNode.href && anchor.parentNode.href.slice(-1) === \"#\")) {\r\n this.preventDefault();\r\n }\r\n },\r\n // toggle dismissible events\r\n toggleDismiss = function () {\r\n if (element.open) {\r\n element.addEventListener(\"click\", dismissHandler, false);\r\n element.addEventListener(\"keydown\", preventScroll, false);\r\n menu.addEventListener(\"keydown\", preventScroll, false);\r\n menu.addEventListener(\"click\", dismissHandler, false);\r\n window.addEventListener(\"click\", windowClickHandler, true);\r\n } else {\r\n element.removeEventListener(\"click\", dismissHandler, false);\r\n element.removeEventListener(\"keydown\", preventScroll, false);\r\n menu.removeEventListener(\"keydown\", preventScroll, false);\r\n menu.removeEventListener(\"click\", dismissHandler, false);\r\n window.removeEventListener(\"click\", windowClickHandler, true);\r\n }\r\n },\r\n // handlers\r\n dismissHandler = function (e) {\r\n var eventTarget = e.target, \r\n hasData = eventTarget && (stringDropdown in eventTarget || stringDropdown in eventTarget.parentNode);\r\n if ((eventTarget === menu || menu.contains(eventTarget))\r\n && (options.persist || hasData)) {\r\n return;\r\n } else {\r\n relatedTarget =\r\n eventTarget === element || element.contains(eventTarget)\r\n ? element\r\n : null;\r\n \r\n if (!eventTarget.classList.contains(prefix + \"disabled\")) {\r\n hide();\r\n }\r\n }\r\n element.focus();\r\n preventEmptyAnchor.call(e, eventTarget);\r\n },\r\n formatDisplayCount = function() {\r\n var displayTxt;\r\n if (itemsChecked > 0) {\r\n displayTxt = \" (\" + itemsChecked +\")\";\r\n } else {\r\n displayTxt = \" \";\r\n }\r\n var checkedCounter = element.querySelector(\".\" + prefix + \"checked-presentation\");\r\n if (checkedCounter != null) {\r\n checkedCounter.innerHTML = checkedCounter.innerHTML.replace(currentText, displayTxt);\r\n currentText = displayTxt;\r\n } else {\r\n checkedCounter = createElement(\"span\", {\r\n class: prefix + \"checked-presentation \" + prefix + \"ml-1\",\r\n html: displayTxt\r\n });\r\n currentText = checkedCounter.innerHTML;\r\n // element.insertBefore(checkedCounter,element.querySelector(\"svg.\" + prefix + \"arrow-tri-solid-right\"));\r\n element.querySelector(\".dds__text-truncate\").appendChild(checkedCounter);\r\n }\r\n \r\n },\r\n clickHandler = function (e) {\r\n relatedTarget = element;\r\n\r\n if (isMultiSelect && e.target.tagName === \"INPUT\") {\r\n if (e.target.checked) {\r\n filters.push(e.target.name);\r\n e.target.parentElement.parentElement.setAttribute(\"aria-checked\", \"true\");\r\n uicoreCustomEvent(\"Dropdown\", \"AddEvent\", element, { \"filters\": filters, \"filter\": e.target.name, \"filterInput\": e.target});\r\n } else {\r\n var index = filters.indexOf(e.target.name);\r\n filters.splice(index, 1);\r\n e.target.parentElement.parentElement.setAttribute(\"aria-checked\", \"false\");\r\n uicoreCustomEvent(\"Dropdown\", \"RemoveEvent\", element, { \"filters\": filters, \"filter\": e.target.name, \"filterInput\": e.target});\r\n }\r\n self.recountChecked();\r\n\r\n // element.innerHTML = element.innerHTML.replace(currentText, displayTxt);\r\n // currentText = displayTxt;\r\n element.focus();\r\n }\r\n else if (e.target.tagName == \"BUTTON\" || e.target.parentElement.tagName == \"BUTTON\" || e.target.parentElement.parentElement.tagName == \"BUTTON\"){\r\n self.toggle();\r\n preventEmptyAnchor.call(e, e.target);\r\n }\r\n },\r\n preventScroll = function (e) {\r\n var key = e.which || e.keyCode;\r\n if (key === 38 || key === 40) {\r\n e.preventDefault();\r\n }\r\n },\r\n keyHandler = function (e) {\r\n var key = e.which || e.keyCode,\r\n activeItem = DOC.activeElement,\r\n isMenuOpen = menu.classList.contains(prefix + \"show\"),\r\n isSameElement = (activeItem === element) || (activeItem.parentNode === menu),\r\n isInsideMenu = menu.contains(activeItem),\r\n isMenuItem = activeItem.parentNode === menu || activeItem.parentNode.parentNode === menu;\r\n\r\n if ((isMenuItem) || (isMenuOpen && isSameElement)) {\r\n // checking element with enter or spacebar\r\n if (isInsideMenu && (key === 13 || key === 32)) {\r\n activeItem.firstElementChild.click();\r\n }\r\n\r\n // navigate up | down\r\n var idx = menuItems.indexOf(activeItem);\r\n idx = \r\n key === 38\r\n ? idx >= 1 \r\n ? idx - 1 \r\n : 0 \r\n : key === 40 \r\n ? idx < menuItems.length - 1 \r\n ? idx + 1 \r\n : menuItems.length - 1\r\n : idx;\r\n menuItems[idx] && setFocus(menuItems[idx]);\r\n }\r\n if (\r\n ((menuItems.length && isMenuItem) || // menu has items\r\n (!menuItems.length && (isInsideMenu || isSameElement)) || // menu might be a form\r\n !isInsideMenu) && // or the focused element is not in the menu at all\r\n element.open &&\r\n key === 27 // menu must be open\r\n ) {\r\n self.toggle();\r\n relatedTarget = null;\r\n element.focus();\r\n }\r\n if (!isMenuOpen && !isMenuItem && (key === 40|| key === 13 || key === 32)) { //if menu is closed and hit enter or space on arrow btn, open menu and set focus to first item\r\n e.preventDefault();\r\n self.toggle();\r\n menuItems[0] && setFocus(menuItems[0]);\r\n relatedTarget = null;\r\n }\r\n if (isMenuOpen && (key === 9 || (e.shiftKey && e.keyCode == 9))) { //if menu is open then close menu on tab\r\n e.preventDefault();\r\n self.toggle();\r\n element.focus();\r\n }\r\n \r\n },\r\n // private methods\r\n show = function () {\r\n if (element.classList.contains(prefix + \"btn-split-arrow\")) {\r\n menu.style.minWidth = parent.offsetWidth+\"px\";\r\n } else if (element.classList.contains(prefix + \"btn\")) {\r\n menu.style.minWidth = element.offsetWidth +\"px\";\r\n }\r\n uicoreCustomEvent(\"DropDown\", \"ShowEvent\", element);\r\n menu.classList.add(prefix + \"show\");\r\n parent.classList.add(prefix + \"show\");\r\n element.setAttribute(\"aria-expanded\", true);\r\n uicoreCustomEvent(\"DropDown\", \"Shown\", element);\r\n element.open = true;\r\n\r\n setTimeout(function () {\r\n toggleDismiss();\r\n }, 100);\r\n },\r\n hide = function () {\r\n uicoreCustomEvent(\"DropDown\", \"HideEvent\", element);\r\n menu.classList.remove(prefix + \"show\");\r\n parent.classList.remove(prefix + \"show\");\r\n element.setAttribute(\"aria-expanded\", false);\r\n uicoreCustomEvent(\"DropDown\", \"Hidden\", element);\r\n element.open = false;\r\n\r\n setTimeout(function () {\r\n toggleDismiss();\r\n element.addEventListener(\"click\", clickHandler, false);\r\n }, 100);\r\n },\r\n focusOutHandler = function(e) {\r\n var target = e.relatedTarget ? e.relatedTarget : e.target ? e.target : DOC.activeElement;\r\n if(!(e.currentTarget.contains(target))) {\r\n if(e.currentTarget.classList.contains(prefix + \"btn-dropdown\")) {\r\n relatedTarget = parent = e.currentTarget;\r\n } else {\r\n relatedTarget = parent = e.currentTarget.parentNode;\r\n }\r\n } else {\r\n return;\r\n }\r\n hide();\r\n preventEmptyAnchor.call(e, relatedTarget);\r\n },\r\n windowClickHandler = function(e) {\r\n if (!parent.contains(e.target) || parent === e.target){\r\n hide();\r\n preventEmptyAnchor.call(e, relatedTarget);\r\n }\r\n };\r\n\r\n // public methods\r\n this.toggle = function () {\r\n if (parent.classList.contains(prefix + \"show\") && element.open) {\r\n hide();\r\n } else {\r\n show();\r\n }\r\n };\r\n\r\n this.recountChecked = function() {\r\n itemsChecked = element.parentElement.querySelectorAll(\".\" + prefix + \"form-check-input:checked\").length;\r\n formatDisplayCount();\r\n };\r\n\r\n // init\r\n if (!(stringDropdown in element)) {\r\n // set initial state to closed\r\n element.open = false;\r\n // prevent adding event handlers twice\r\n !(\"tabIndex\" in menu) && menu.setAttribute(\"tabindex\", \"0\"); // Fix onblur on Chrome | Safari\r\n element.addEventListener(\"click\", clickHandler, false);\r\n parent.addEventListener(\"focusout\", focusOutHandler, true);\r\n element.addEventListener(\"keydown\", keyHandler, false);\r\n menu.addEventListener(\"keydown\", keyHandler, false);\r\n if (element.parentElement.classList.contains(\"dds__multi-select\")){\r\n isMultiSelect = true;\r\n }\r\n\r\n var dropdownEls = menu.children;\r\n menuItems = [];\r\n each (dropdownEls, function(dropdownEl) {\r\n if (dropdownEl.children.length && dropdownEl.children[0].tagName === \"LI\" && !dropdownEl.children[0].firstElementChild.classList.contains(prefix + \"disabled\")) {\r\n menuItems.push(dropdownEl.children[0]);\r\n } \r\n else if (dropdownEl.tagName === \"LI\" && !dropdownEl.firstElementChild.classList.contains(prefix + \"disabled\")) {\r\n menuItems.push(dropdownEl);\r\n } \r\n });\r\n if (isMultiSelect){\r\n each (menuItems, function(menuItem) {\r\n menuItem.firstElementChild.addEventListener(\"click\", clickHandler, true);\r\n });\r\n itemsChecked = 0;\r\n filters = [];\r\n }\r\n }\r\n\r\n element[stringDropdown] = self;\r\n}\r\n","import { DOC,emulateTransitionEnd, getFocusableElements, getFullScreenOverlay, getTransitionDurationFromElement, prefix,supportTransitions,uicoreCustomEvent, isSafari , isIOS, each, setFocus, jsonOptionsInit, getClosest} from \"./utilities.js\";\n\nexport default function Modal(element, options) {\n // element can be the modal/triggering button\n\n // the modal (both JavaScript / DATA API init) / triggering button element (DATA API)\n element = element instanceof HTMLElement ? element : (function () {\n return false;\n })();\n\n // set options\n options = options || {};\n options = jsonOptionsInit(element, options);\n options.static = options.backdrop === \"static\" ? true : false;\n options.target = element.dataset.target ? DOC.getElementById(element.dataset[\"target\"].substr(1)) : \n options.target ? DOC.getElementById(options.target.substr(1)) : null;\n // validate options\n (function () {\n if (options.target == null || options.target === \"\") {\n throw new Error(\"There was a problem found with target value, please correct and try again\");\n }\n });\n // determine modal, triggering element\n var self = this,\n stringModal = \"Modal\",\n focusableEls,\n header,\n origRightPadding,\n scrollbarWidth,\n modalElement = options.target,\n overlayDelay,\n overlay = getFullScreenOverlay(),\n // private methods\n setFocusableElements = function() {\n focusableEls = getFocusableElements(modalElement);\n modalElement.firstFocusableEl = focusableEls[0];\n modalElement.lastFocusableEl = focusableEls[ focusableEls.length - 1 ];\n\n },\n focusFirstDescendant = function () {\n if (modalElement.loading) {\n //if loading indicator modal- trap focus so can't tab out\n modalElement.focus();\n } else {\n setFocusableElements();\n if (focusableEls.length > 0) {\n //if there is something to focus\n setFocus(focusableEls[0]);\n }\n }\n },\n handleKeyDown = function(e) {\n\n if (!modalElement.loading) {\n setFocusableElements();\n\n var KEY_TAB = 9;\n var KEY_ESC = 27;\n\n // For loading modal which has no focusable elements\n if(focusableEls.length == 0){\n e.preventDefault();\n }\n\n switch(e.keyCode) {\n case KEY_TAB:\n if ( focusableEls.length === 1 ) {\n e.preventDefault();\n break;\n }\n if ( e.shiftKey ) {\n handleBackwardTab(e);\n } else {\n handleForwardTab(e);\n }\n break;\n case KEY_ESC: self.hide(); break;\n default:\n break;\n }\n }\n },\n handleBackwardTab = function (e) {\n if ( document.activeElement === modalElement.firstFocusableEl ) {\n e.preventDefault();\n setFocus(modalElement.lastFocusableEl);\n }\n if (header) focusVisibilityHandler();\n },\n handleForwardTab = function (e) {\n if (header) focusVisibilityHandler();\n\n if ( document.activeElement === modalElement.lastFocusableEl ) {\n e.preventDefault();\n setFocus(modalElement.firstFocusableEl);\n }\n },\n createOverlay = function() {\n if (overlay && !(overlay.classList.contains(prefix + \"show\"))) {\n overlayDelay = getTransitionDurationFromElement(overlay);\n overlay.classList.add(prefix + \"show\");\n overlay.removeAttribute(\"hidden\");\n if( overlay.style.visibility == \"hidden\"){\n overlay.style.visibility = \"\";\n }\n } else {\n console.warn(\"MODAL: Overlay requested. Corresponding HTML missing. Please apply id 'dds__full-screen-overlay' and class 'dds__overlay' to an empty div\");\n }\n \n if (!options.static) {\n window.addEventListener(\"click\", function(e) {\n if (modalElement.classList.contains(prefix + \"show\") && e.target != modalElement && !modalElement.contains(e.target)) {\n self.hide();\n }\n }, false);\n }\n DOC.body.style.paddingRight = (scrollbarWidth + origRightPadding) + \"px\";\n DOC.body.style.overflow = \"hidden\";\n },\n removeOverlay = function () {\n if (overlay) {\n overlay.classList.remove(prefix + \"show\");\n overlay.setAttribute(\"hidden\",\"\");\n }\n \n if (!options.static) {\n modalElement.removeEventListener(\"click\", function(e) {\n if (e.target == modalElement) {\n self.hide();\n }\n }, false);\n }\n if (origRightPadding == 0) {\n DOC.body.style.paddingRight = \"\";\n } else {\n DOC.body.style.paddingRight = origRightPadding + \"px\";\n }\n DOC.body.style.overflow = \"\";\n if (DOC.body.style.length == 0) {\n DOC.body.removeAttribute(\"style\");\n }\n uicoreCustomEvent(\"Modal\", \"Hidden\", modalElement);\n },\n keydownHandlerToggle = function () {\n if (modalElement.classList.contains(prefix + \"show\")) {\n DOC.addEventListener(\"keydown\", keyHandler, false);\n } else {\n DOC.removeEventListener(\"keydown\", keyHandler, false);\n }\n },\n triggerShow = function () {\n //resizeHandlerToggle();\n keydownHandlerToggle();\n setFocus(modalElement);\n focusFirstDescendant();\n uicoreCustomEvent(\"Modal\", \"Shown\", modalElement);\n },\n triggerHide = function () {\n setTimeout( function() {\n modalElement.style.display = \"\";\n }, getTransitionDurationFromElement(modalElement));\n //check if parent is dropdown, and set focus on appropriate element\n var isInDropdown = getClosest(element, \".\"+prefix+\"btn-dropdown\", true);\n var isInSplitBtn = isInDropdown && isInDropdown.classList.contains(prefix+\"btn-group\");\n element && (isInDropdown ? (isInSplitBtn ? setFocus(isInDropdown.querySelector(\".\"+prefix +\"btn-split-arrow\")): setFocus(isInDropdown.querySelector(\".\"+prefix+\"btn\"))) : setFocus(element));\n \n if (modalElement.classList.contains(prefix + \"show\")) {\n keydownHandlerToggle();\n }\n },\n // handlers\n clickHandler = function (e) {\n if ((e.target === element || e.target.parentElement === element) && !(modalElement.classList.contains(prefix + \"show\"))) {\n self.show();\n e.preventDefault();\n }\n },\n keyHandler = function (e) {\n if (self.keyboard && e.which == 27 && modalElement.classList.contains(prefix + \"show\")) {\n self.hide();\n }\n },\n dismissHandler = function (e) {\n if (modalElement.classList.contains(prefix + \"show\")) {\n self.hide();\n e.preventDefault();\n }\n },\n focusVisibilityHandler = function () {\n // minimum distance from \"to be focused\" element to the bottom of fixed header\n var minDistance = header.parentElement.clientHeight;\n var activeElementIdx = focusableEls.indexOf(document.activeElement);\n \n // handles shift tab loop, and get next element to receive focus - going back\n var prevFocusableEl = activeElementIdx === 0 ? focusableEls[focusableEls.length -1] : focusableEls[activeElementIdx - 1] ;\n \n // handles tab loop, and get next element to receive focus - going forward \n var nextFocusableEl = activeElementIdx === (focusableEls.length -1) ? focusableEls[0] : focusableEls[activeElementIdx + 1];\n \n if(event.shiftKey && event.keyCode === 9) {\n scrollToElement(prevFocusableEl, minDistance, header);\n } else if(!event.shiftKey && event.keyCode === 9) {\n scrollToElement(nextFocusableEl, minDistance, header);\n }\n },\n scrollToElement = function (element, minDistance, header) {\n if((!header.contains(element)) && // prevents scroll if header will receive focus\n element.getBoundingClientRect().top < minDistance) { // element is behind fixed header\n \n // scroll to top of \"to be focused\" element\n modalElement.scrollTop = (element.getBoundingClientRect().top - (minDistance*2)) + modalElement.scrollTop;\n }\n };\n\n // public methods\n this.toggle = function () {\n if (modalElement.classList.contains(prefix + \"show\")) {\n this.hide();\n } else {\n this.show();\n }\n };\n this.show = function () {\n uicoreCustomEvent(\"Modal\", \"ShowEvent\", modalElement);\n\n createOverlay();\n\n modalElement.style.display = \"block\";\n\n if (isSafari && isIOS) {\n modalElement.classList.add(prefix + \"is-safari\");\n }\n\n setTimeout( function() {\n modalElement.classList.add(prefix + \"show\");\n }, 5);\n modalElement.setAttribute(\"aria-hidden\", false);\n modalElement.classList.contains(prefix + \"fade\")\n ? emulateTransitionEnd(modalElement, triggerShow)\n : triggerShow();\n\n supportTransitions && modalElement.loading ? overlayDelay : 0;\n };\n this.hide = function () {\n uicoreCustomEvent(\"Modal\", \"HideEvent\", modalElement);\n\n modalElement.classList.remove(prefix + \"show\");\n modalElement.setAttribute(\"aria-hidden\", true);\n\n if (isSafari && isIOS && modalElement.classList.contains(prefix + \"is-safari\")) {\n modalElement.classList.remove(prefix + \"is-safari\");\n }\n \n setTimeout( function() {\n removeOverlay();\n }, getTransitionDurationFromElement(modalElement));\n \n modalElement.classList.contains(prefix + \"fade\")\n ? emulateTransitionEnd(modalElement, triggerHide)\n : triggerHide();\n supportTransitions && overlay ? overlayDelay : 0;\n };\n\n //init\n if (!(stringModal in element)) {\n if (!modalElement) {\n return false;\n } else {\n origRightPadding = DOC.body.style.paddingRight ? DOC.body.style.paddingRight.split(\"px\")[0] : 0;\n scrollbarWidth = window.innerWidth - DOC.documentElement.clientWidth;\n modalElement.loading = modalElement.classList.contains(prefix + \"loading-modal\") ? true : false;\n \n if (!modalElement.loading) {\n element.addEventListener(\"click\", clickHandler, false);\n modalElement.addEventListener(\"keydown\", handleKeyDown);\n each(modalElement.querySelectorAll(\"[data-dismiss='\"+prefix+\"modal']\"), function(dissmissEl) {\n dissmissEl.addEventListener(\"click\", dismissHandler, false);\n });\n var modalContent = modalElement.querySelector(\".\" + prefix + \"modal-content\");\n var potentialHeader = modalContent.firstElementChild;\n if (potentialHeader.classList.contains(prefix + \"container-fluid\") && !potentialHeader.classList.contains(prefix + \"modal-body\")) {\n potentialHeader.firstElementChild.classList.add(prefix + \"offcanvas-modal-topbar\");\n }\n header = modalElement.querySelector(\".\"+prefix+\"offcanvas-modal-topbar\");\n\n\n\n }\n }\n }\n\n element[stringModal] = self;\n}","import { uicoreCustomEvent, prefix, debounce, createElement, getClosest, classAdd, getFocusableElements, getAnimationDurationFromElement, altFind, renderSvg, each, setFocus, ariaAnnounce} from \"./utilities\";\nimport Collapse from \"./collapse.js\";\nimport Dropdown from \"./dropdown.js\";\nimport Modal from \"./modal.js\";\n\nexport function FilterKeyword(element) {\n element = element instanceof HTMLElement ? element : (function () {\n return false;\n })();\n\n // bind, target alert, duration and stuff\n var self = this,\n stringFilterKeyword = \"FilterKeyword\",\n addButton,\n filterInput,\n filterCntr,\n\n // handlers\n handleClickEvent = function (e) {\n if ((e.target == addButton || addButton.contains(e.target)) && filterInput.value.trim() != \"\") {\n uicoreCustomEvent(\"FilterKeyword\", \"CreateEvent\", element, { \"filter\": filterInput.value } );\n filterInput.value = \"\";\n filterInput.focus();\n window.removeEventListener(\"click\", clickOutHandler, true);\n }\n },\n\n handleKeyEvent = debounce(function (e){\n window.addEventListener(\"click\", clickOutHandler, true);\n if (e.keyCode == 13){\n uicoreCustomEvent(\"FilterKeyword\", \"CreateEvent\", element, { \"filter\": filterInput.value } );\n filterInput.value = \"\";\n filterInput.focus();\n }\n }, 50),\n\n clickOutHandler = function(e) {\n if (filterCntr.contains(e.target)) {\n return; \n }\n filterInput.value = \"\";\n window.removeEventListener(\"click\", clickOutHandler, true);\n };\n\n // init\n if (!(stringFilterKeyword in element)) {\n addButton = element.querySelector(\".\" + prefix + \"filter-btn\");\n filterInput = element.querySelector(\".\" + prefix + \"filter-input\");\n filterCntr = element.querySelector(\".\" + prefix + \"filter-container\");\n\n addButton.addEventListener(\"click\", handleClickEvent, true);\n filterInput.addEventListener(\"keydown\", handleKeyEvent, false);\n }\n\n element[stringFilterKeyword] = self;\n\n}\n\nexport function FilterCollection(element) {\n element = element instanceof HTMLElement ? element : (function () {\n return false;\n })();\n\n var horizontal = true;\n\n // bind, target alert, duration and stuff\n var self = this,\n stringFilterCollection = \"FilterCollection\",\n filterResults,\n filterOffCanvasResults,\n clearAllItem,\n clearAllOffCanvas,\n resultsLabelDesktop,\n filters = [],\n filtersTemp = [],\n filterOffCanvas,\n keywordFilter,\n visibileIdx,\n mediaIncrementforDropdowns,\n showMoreDiv,\n mobileModal,\n dropdownObjects = [],\n accordionObjects = [],\n digit = \"digit\",\n collectionInputsContainer,\n dropdowns,\n collectionInputs,\n targetCollection,\n filterCollection,\n isOffCanvasState = false,\n isApplyingState = false,\n smallWindow,\n smallMediaSize = window.matchMedia(\"(max-width: 767.98px)\"),\n mediumMediaSize = window.matchMedia(\"(max-width: 991.98px)\"),\n\n // handlers \n handleAddEvent = function (e) {\n if (e.type === \"uicDropdownAddEvent\" || e.type === \"uicFilterKeywordCreateEvent\") {\n if(!isOffCanvasState){\n createDesktopFilterItem(e.detail.filter, e.detail.filterInput);\n } else{\n createOffCanvasFilterItem(e.detail.filter, e.detail.filterInput);\n }\n } else {\n var checkbox = e.srcElement; \n if (checkbox.tagName != \"INPUT\") {\n if (checkbox.tagName === \"SPAN\" && checkbox.previousElementSibling.tagName === \"INPUT\") {\n checkbox = checkbox.previousElementSibling;\n } else {\n checkbox = checkbox.querySelector(\"input\");\n }\n }\n createDesktopFilterItem(checkbox.nextElementSibling.innerText, checkbox);\n if (!horizontal && \n (element.getBoundingClientRect().y && element.getBoundingClientRect().y< 0) \n || (element.getBoundingClientRect().top && element.getBoundingClientRect().top < 0 )) { //Edge FF use top, not y\n element.scrollIntoView({behavior: \"smooth\"});\n }\n }\n },\n\n handleClearAllEvent = function (e) {\n if (e.target == clearAllOffCanvas || clearAllOffCanvas.contains(e.target) || e.target === clearAllItem || clearAllItem.contains(e.target)) {\n toggleClearAllButtons(false);\n ariaAnnounce(\n document.querySelector(\".\" + prefix + \"filter-btn-clear\").innerText // will say \"Clear all\"\n );\n } else {\n ariaAnnounce(\n getClosest(e.target, \".\" + prefix + \"svg-close-x\", false).getAttribute(\"aria-label\") // will say filter-close\n );\n }\n each(filterResults.querySelectorAll(\"button.\"+prefix + \"filter-item\"), function(filter) {\n clearFilter(filter);\n });\n resultsLabelDesktop.classList.add(prefix + \"d-none\");\n if (horizontal) { clearMultiSelects(); }\n updateFiltersCount();\n uicoreCustomEvent(\"FilterCollection\", \"RemoveAllEvent\", element, { \"filters\": filtersAsStrings()} );\n },\n \n handleDesktopCheckboxClick = function (e){\n\n if ( e.type === \"uicDropdownAddEvent\" || e.type === \"uicDropdownRemoveEvent\") {\n if (e.detail.filterInput.checked === true){\n handleAddEvent(e);\n } else {\n var deselected = filterResults.querySelector(\"#\" + e.detail.filter.replace(/\\s/g, \"\").toLowerCase());\n clearFilter(deselected);\n if(filters && filters.length === 0) {\n toggleClearAllButtons(false);\n uicoreCustomEvent(\"FilterCollection\", \"RemoveAllEvent\", element, { \"filters\": filtersAsStrings()} );\n }\n }\n } else if (e.type === \"click\") {\n e.preventDefault();\n var checkbox = e.srcElement;\n if (checkbox.tagName != \"INPUT\") {\n if (checkbox.tagName === \"SPAN\" && checkbox.previousElementSibling.tagName === \"INPUT\") {\n checkbox = checkbox.previousElementSibling;\n } else {\n checkbox = checkbox.querySelector(\"input\");\n }\n }\n if (!checkbox.hasAttribute(\"disabled\") && !checkbox.classList.contains(prefix+\"disabled\")) {\n setTimeout(function() {\n if (checkbox.checked) {\n checkbox.checked = false;\n getClosest(checkbox, \"li\", true).setAttribute(\"aria-checked\", \"false\");\n } else {\n checkbox.checked = true;\n getClosest(checkbox, \"li\", true).setAttribute(\"aria-checked\", \"true\");\n }\n if (checkbox.checked === true) {\n handleAddEvent(e); \n } else {\n var value = checkbox.name.toLowerCase();\n var deselected = filterResults.querySelector(\"[value=\\\"\" + value + \"\\\"]\");\n clearFilter(deselected);\n if(filters && filters.length === 0) {\n toggleClearAllButtons(false);\n uicoreCustomEvent(\"FilterCollection\", \"RemoveAllEvent\", element, { \"filters\": filtersAsStrings()} );\n }\n }\n },25);\n }\n }\n },\n\n handleFilterItemClickEvent = function (e) {\n var target = e.target.classList.contains(\".\" + prefix + \"filter-item\") ? e.target : getClosest(e.target, \".\" + prefix + \"filter-item\");\n if(filters.length && filters.length === 1) {\n handleClearAllEvent(e);\n resultsLabelDesktop.classList.add(prefix + \"d-none\");\n accordionObjects[0] ? setFocus(accordionObjects[0]) : setFocus(collectionInputs[0]);\n } else {\n ariaAnnounce(\n getClosest(e.target, \".\" + prefix + \"svg-close-x\", false).getAttribute(\"aria-label\") // will say filter-close\n );\n var nextFocusableEl = target.previousElementSibling && target.previousElementSibling.classList.contains(prefix+\"filter-item\") ?\n target.previousElementSibling :\n target.nextElementSibling && target.nextElementSibling.classList.contains(prefix+\"filter-item\") ? \n target.nextElementSibling :\n accordionObjects ?\n accordionObjects[0] :\n collectionInputs[0];\n setTimeout(function() {\n clearFilter(target);\n uicoreCustomEvent(\"FilterCollection\", \"RemoveEvent\", element, { \"filters\": filtersAsStrings(), \"removedFilter\": target.innerText } );\n setFocus(nextFocusableEl);\n }, 50);\n }\n },\n \n handleOffCanvasApplyEvent = function () {\n isApplyingState = true;\n isOffCanvasState = false;\n \n // add label\n if (filtersTemp.length > 1) {\n resultsLabelDesktop.classList.remove(prefix + \"d-none\");\n }\n // if temp filter isn't in filters (create)\n each(filtersTemp, function(filterTemp){\n if (!arrayOfObjectsContains(filters, filterTemp.value.toLowerCase())) {\n var newFilter = filterTemp.cloneNode(true);\n newFilter.origin = filterTemp.origin;\n newFilter.offCanvasOrigin = filterTemp.offCanvasOrigin;\n newFilter.value = filterTemp.value;\n newFilter.addEventListener(\"click\", handleFilterItemClickEvent, false);\n horizontal ? filterResults.insertBefore(newFilter, clearAllItem) : filterResults.appendChild(newFilter);\n if(newFilter.origin){\n newFilter.origin.checked = true;\n getClosest(newFilter.origin, \"li\", true).setAttribute(\"aria-checked\", \"true\");\n }\n }\n });\n\n // if filter is no longer in temp filters (delete)\n each(filters.slice(), function(temp) {\n if (!arrayOfObjectsContains(filtersTemp, temp.value.toLowerCase())) {\n var filterToRemove = altFind(filters, function(result) {\n return result.value === temp.value;\n });\n clearFilter(filterToRemove);\n }\n });\n filters = filtersTemp.slice();\n \n // reset\n isApplyingState = false;\n\n if (filters.length > 0) {\n resultsLabelDesktop.classList.remove(prefix + \"d-none\");\n toggleClearAllButtons(true);\n } else {\n resultsLabelDesktop.classList.add(prefix + \"d-none\");\n toggleClearAllButtons(false);\n }\n\n // update html filter count values\n updateFiltersCount();\n if (horizontal) {\n each(dropdownObjects, function(dropdown) {\n dropdown.recountChecked();\n });\n } else {\n updateVerticalDesktopAccordionCount();\n }\n\n mobileModal.hide();\n uicoreCustomEvent(\"FilterCollection\", \"UpdateEvent\", element, { \"filters\": filtersAsStrings()} );\n },\n\n handleOffCanvasCancelEvent = function(){\n //clear off canvas and reset to filters\n handleOffCanvasClearAllEvent();\n each(filters, function(filter){\n if (filter.offCanvasOrigin) {\n filter.offCanvasOrigin.click();\n } \n else {\n createOffCanvasFilterItem(filter, filter.origin);\n }\n });\n if (filters.length === 0) {\n toggleClearAllButtons(false);\n }\n\n isOffCanvasState = false;\n },\n\n handleOffCanvasCheckboxClick = function(e){\n var checkboxId = e.target.id.replace(\"OffCanvas\", \"\");\n var desktopCheckbox = document.getElementById(checkboxId);\n getClosest(e.target, \"li\", true).setAttribute(\"aria-checked\", e.target.checked);\n if (!e.target.hasAttribute(\"disabled\") && !e.target.classList.contains(prefix+\"disabled\")) {\n //create new off canvas filter\n if(e.target.checked) {\n createOffCanvasFilterItem(e.target.name, desktopCheckbox);\n toggleClearAllButtons(true);\n }\n // remove off canvas filter\n else {\n var checkboxFilter;\n var value = e.target.name.toLowerCase();\n checkboxFilter = filterOffCanvasResults.querySelector(\"[value=\\\"\" + value + \"\\\"]\");\n var currentFilter = altFind(filtersTemp, function(result) {\n var check = result.innerText.toLowerCase().replace(/\\s/g, \"\") == checkboxFilter.innerText.toLowerCase().replace(/\\s/g, \"\");\n return check;\n });\n // remove from temp array\n var index = filtersTemp.indexOf(currentFilter);\n filtersTemp.splice(index, 1);\n \n if (checkboxFilter) {\n setTimeout(function() {\n filterOffCanvasResults.removeChild(checkboxFilter);\n setTimeout(function() {\n //if no more filters turn off Clear All Item\n if (self.numOfFilters(true) < 1) {\n toggleClearAllButtons(false);\n }\n },10);\n }, 1);\n }\n }\n updateOffCanvasAccordionCount(e.target); //horizontal multi-selects don't have updated count at this point\n }\n },\n\n handleOffCanvasClearAllClick = function () {\n var focusableEls = getFocusableElements(filterOffCanvas);\n // after hitting \"offcanvas\" clear all button set focus on the previous focusable element \n if(focusableEls.indexOf(clearAllOffCanvas) > 0) {\n focusableEls[focusableEls.indexOf(clearAllOffCanvas) - 1].focus();\n }\n handleOffCanvasClearAllEvent();\n },\n\n handleOffCanvasClearAllEvent = function(){\n each(element.querySelectorAll(\".\" + prefix + \"modal-offcanvas input.\" + prefix + \"form-check-input\"), function(checkbox) {\n checkbox.checked = false;\n getClosest(checkbox, \"li\", true).setAttribute(\"aria-checked\", \"false\");\n updateOffCanvasAccordionCount(checkbox);\n });\n each(element.querySelectorAll(\".\" + prefix + \"modal-offcanvas button.\" + prefix + \"filter-item\"), function(filter) {\n filterOffCanvasResults.removeChild(filter);\n });\n filtersTemp = [];\n toggleClearAllButtons(false);\n },\n\n handleOffCanvasFilterItemClickEvent = function(e){\n var target = e.target.classList.contains(\".\" + prefix + \"filter-item\") ? e.target : getClosest(e.target, \".\" + prefix + \"filter-item\"),\n currentFilter = altFind(filtersTemp, function(result) {\n return result.value.toLowerCase().replace(/\\s+/g, \"\") === target.innerText.toLowerCase().replace(/\\s+/g, \"\");\n });\n \n // uncheck the corresponding checkbox\n if (currentFilter.offCanvasOrigin) {\n currentFilter.offCanvasOrigin.checked = false;\n getClosest(currentFilter.offCanvasOrigin, \"li\", true).setAttribute(\"aria-checked\", \"false\");\n updateOffCanvasAccordionCount(currentFilter.offCanvasOrigin);\n }\n\n // remove from temp array\n var index = filtersTemp.indexOf(currentFilter);\n filtersTemp.splice(index, 1);\n\n //set focus on next element if it exists\n target.nextElementSibling ? \n target.nextElementSibling.focus() : \n target.previousElementSibling && target.previousElementSibling.classList.contains(prefix + \"filter-item\") ?\n target.previousElementSibling.focus() :\n setFocus(getFocusableElements(filterOffCanvas)[0]);\n // getFocusableElements(filterOffCanvas)[0].focus();\n \n // remove filter button from DOM\n if (filterOffCanvasResults.contains(target)){\n setTimeout(function() {\n filterOffCanvasResults.removeChild(target);\n setTimeout(function() {\n //if no more filters turn off Clear All Item\n if (self.numOfFilters(true) < 1) {\n toggleClearAllButtons(false);\n }\n },10);\n }, 1);\n }\n },\n \n handleOffCanvasOpen = function() {\n isOffCanvasState = true;\n filtersTemp = filters.slice();\n },\n\n handleResizeSmall = function (e) {\n //change vertical clear all button\n if (!e.matches) {\n //going from small to big\n mobileModal.hide();\n smallWindow = false;\n if (!horizontal) {\n if (clearAllItem.classList.contains(\"dds__d-flex\")) {\n clearAllItem.classList.remove(\"dds__d-flex\");\n clearAllItem.classList.add(\"dds__d-none\");\n clearAllItem = element.querySelector(\".\"+prefix+\"filter-collector-accordion .\"+prefix+\"filter-btn-clear\");\n clearAllItem.classList.remove(\"dds__d-none\");\n clearAllItem.classList.add(\"dds__d-flex\");\n } else {\n clearAllItem = element.querySelector(\".\"+prefix+\"filter-collector-accordion .\"+prefix+\"filter-btn-clear\");\n }\n clearAllItem.addEventListener(\"click\", handleClearAllEvent, false);\n clearAllItem.addEventListener(\"touchstart\", handleClearAllEvent, false);\n }\n } else if (e.matches && !horizontal) {\n smallWindow = true;\n if (clearAllItem.classList.contains(\"dds__d-flex\")) {\n clearAllItem.classList.remove(\"dds__d-flex\");\n clearAllItem.classList.add(\"dds__d-none\");\n clearAllItem = element.querySelector(\".dds__filter-label-results .dds__filter-btn-clear\");\n clearAllItem.classList.remove(\"dds__d-none\");\n clearAllItem.classList.add(\"dds__d-flex\");\n } else {\n clearAllItem = element.querySelector(\".dds__filter-label-results .dds__filter-btn-clear\");\n }\n clearAllItem.addEventListener(\"click\", handleClearAllEvent, false);\n clearAllItem.addEventListener(\"touchstart\", handleClearAllEvent, false);\n }\n updateFiltersCount();\n },\n\n handleResizeMedium = function (e) {\n var numOfDropdowns, rows;\n if (e.matches) {\n mediaIncrementforDropdowns = 3;\n \n rows = Math.max(Math.ceil((visibileIdx + 1) / 4), 2);\n numOfDropdowns = rows * 3 - 2;\n if (numOfDropdowns < dropdowns.length - 1) {\n showMoreDiv.classList.remove(prefix + \"d-none\");\n }\n visibileIdx = numOfDropdowns - 1;\n toggleDropdown(visibileIdx);\n } else {\n mediaIncrementforDropdowns = 4;\n if (visibileIdx === dropdowns.length) {\n return;\n }\n rows = Math.max(Math.ceil((visibileIdx + 1) / 3), 2);\n numOfDropdowns = rows * 4 - 2;\n if (numOfDropdowns > dropdowns.length - 1) {\n numOfDropdowns = dropdowns.length;\n showMoreDiv.classList.add(prefix + \"d-none\");\n }\n visibileIdx = numOfDropdowns - 1;\n toggleDropdown(visibileIdx);\n }\n },\n\n handleShowMore = function () {\n visibileIdx = Math.min(visibileIdx + mediaIncrementforDropdowns, dropdowns.length - 1);\n if (visibileIdx === dropdowns.length - 1) {\n showMoreDiv.classList.add(prefix + \"d-none\");\n }\n toggleDropdown(visibileIdx);\n setTimeout(function() {\n setFocus(dropdowns[visibileIdx].querySelector(\".\"+prefix+\"btn-secondary\"));\n },1);\n },\n\n arrayOfObjectsContains = function (arr, value) {\n var results = arr.filter(function(obj) {\n return obj.value === value;\n });\n return results.length > 0;\n },\n\n clearMultiSelects = function () {\n each(collectionInputs, function(input) {\n if (input.querySelector(\".\" + prefix + \"checked-presentation\")) {\n input.firstElementChild.removeChild(input.querySelector(\".\" + prefix + \"checked-presentation\"));\n }\n\n var typeofInput = input[\"getAttribute\"](\"data-filter\");\n if (typeofInput == prefix + \"multi-select\") {\n var ul = input[\"getAttribute\"](\"data-target\");\n each(element.querySelector(ul).children, function(option) {\n option.setAttribute(\"aria-checked\", false);\n option.querySelector(\"input\").checked = false;\n });\n }\n });\n },\n\n clearFilter = function(filter) {\n if (filter === null || filter === undefined) {\n return;\n }\n\n // finder filter, if found no match in the filters, return\n var targetValue = filter.innerText,\n results = filters.filter(function(obj) {\n targetValue = targetValue.toLowerCase().replace(/\\n/g, \"\");\n return obj.value === targetValue;\n });\n\n if (results.length < 1) {\n return;\n }\n \n // if it's a checkbox, uncheck\n var deselectTarget = results[0]; \n if(deselectTarget.origin.tagName === \"INPUT\" && deselectTarget.origin.checked === true){\n deselectTarget.origin.checked = false;\n getClosest(deselectTarget.origin, \"li\", true).setAttribute(\"aria-checked\", \"false\");\n }\n if(deselectTarget.offCanvasOrigin && deselectTarget.offCanvasOrigin.tagName === \"INPUT\" && deselectTarget.offCanvasOrigin.checked === true){\n deselectTarget.offCanvasOrigin.checked = false;\n getClosest(deselectTarget.offCanvasOrigin, \"li\", true).setAttribute(\"aria-checked\", \"false\");\n updateOffCanvasAccordionCount(deselectTarget.offCanvasOrigin);\n }\n if (!horizontal) {\n updateVerticalDesktopAccordionCount(deselectTarget.origin);\n }\n\n var value = filter.value.toLowerCase();\n var index;\n\n if (filterResults.contains(filter)) {\n var filterOffCanvas; \n\n filterResults.removeChild(filter);\n filterOffCanvas = filterOffCanvasResults.querySelector(\"[value=\\\"\" + value + \"\\\"]\");\n if (filterOffCanvasResults.contains(filterOffCanvas)) {\n filterOffCanvasResults.removeChild(filterOffCanvas);\n \n //remove from filter temp\n var offCanvasFilterObj = altFind(filtersTemp, function(result) {\n return result.value === targetValue.toLowerCase().replace(/\\n/g, \"\");\n });\n index = filtersTemp.indexOf(offCanvasFilterObj);\n filtersTemp.splice(index, 1);\n }\n }\n\n //if selecting an offcanvas filter\n else if (filterOffCanvasResults.contains(filter) || filterResults.querySelector(\"#\" +filter.id ) != null){\n // filterOffCanvasResults.removeChild(filter);\n var filterDesktop = filterResults.querySelector(\"#\" +filter.id );\n filterResults.removeChild(filterDesktop);\n }\n \n index = filters.indexOf(results[0]);\n filters.splice(index, 1);\n if (!horizontal && \n (element.getBoundingClientRect().y && element.getBoundingClientRect().y< 0) \n || (element.getBoundingClientRect().top && element.getBoundingClientRect().top < 0 )) { //Edge FF use top, not y\n element.scrollIntoView({behavior: \"smooth\"});\n }\n if (filters.length === 0) {\n toggleClearAllButtons(false);\n }\n // reset text (count) values in dropdowns\n each(dropdownObjects, function(dropdown) {\n dropdown.recountChecked();\n });\n\n },\n\n createShowMoreButton = function(){\n showMoreDiv = createElement(\"div\", {\n class: prefix + \"col-xs-12 \" + prefix + \"col-sm-6 \" + prefix + \"col-md-4 \" + prefix + \"col-lg-3\",\n });\n var showMore = createElement(\"button\", {\n class: prefix + \"filter-btn-show \" + prefix + \"btn \" + prefix + \"btn-secondary \" + prefix + \"d-flex \" + prefix + \"text-truncate\",\n id: \"showMorefilters\",\n html: \"Show More Filters\"\n });\n showMore.addEventListener(\"click\", handleShowMore, false);\n showMoreDiv.appendChild(showMore);\n collectionInputsContainer.appendChild(showMoreDiv);\n },\n\n createOffCanvasFilterItem = function (filterItem, origin) {\n if (filterAlreadyExists(filterItem.value ? filterItem.value : filterItem, true)) {\n return;\n }\n\n var filterOffCanvasItem;\n var isDigit = false;\n if (origin === null || origin === undefined) {\n origin = \"\";\n }\n if (typeof filterItem === \"object\") {\n // it's an object so clone it\n filterOffCanvasItem = filterItem.cloneNode(true);\n } else {\n // id's can't have a digit as first number\n if (filterItem[0].match(/\\d/)){\n filterItem = digit.concat(filterItem);\n isDigit = true;\n }\n filterItem = filterItem.replace(/\\s+/g,\" \").trim();\n // need to create an object\n filterOffCanvasItem = createFilter(filterItem, true, isDigit);\n } \n if (!isApplyingState) {\n filterOffCanvasItem.addEventListener(\"click\", handleOffCanvasFilterItemClickEvent, false);\n filterOffCanvasResults.appendChild(filterOffCanvasItem); // DOM Add New Filter to OffCanvas\n }\n var filterValue = filterItem.value ? filterItem.value : filterItem.replace(/^digit/, \"\") ;\n if (isOffCanvasState){\n var offCanvasOriginId = origin.id + \"OffCanvas\";\n var offCanvasOrigin = document.getElementById(offCanvasOriginId);\n filterOffCanvasItem.value = origin.name ? origin.name.toLowerCase() : filterValue.toLowerCase();\n filterOffCanvasItem.origin = origin;\n filterOffCanvasItem.offCanvasOrigin = offCanvasOrigin;\n filtersTemp.push(filterOffCanvasItem);\n }\n\n if (clearAllOffCanvas.classList.contains(prefix + \"d-none\")) {\n toggleClearAllButtons(true);\n }\n\n },\n\n createDesktopFilterItem = function (filter, origin) {\n var isDigit = false;\n if (origin === null || origin === undefined) {\n origin = \"\";\n }\n // id's can't have a digit as first number\n if (filter[0].match(/\\d/)){\n filter = digit.concat(filter);\n isDigit = true;\n }\n filter = filter.replace(/\\s+/g,\" \").trim();\n \n if (filterAlreadyExists(filter, false)) {\n return;\n }\n\n if (filters.length <= 0) {\n resultsLabelDesktop.classList.remove(prefix + \"d-none\");\n }\n \n if (clearAllItem.classList.contains(prefix + \"d-none\")) {\n toggleClearAllButtons(true);\n }\n \n var filterItem = createFilter(filter, true, isDigit);\n var offCanvasOriginId = origin.id + \"OffCanvas\";\n var offCanvasOrigin = document.getElementById(offCanvasOriginId);\n\n filterItem.origin = origin;\n filterItem.offCanvasOrigin = offCanvasOrigin,\n filterItem.value = origin.name ? origin.name.toLowerCase() : filter.replace(/^digit/, \"\").toLowerCase();\n filterItem.addEventListener(\"click\", handleFilterItemClickEvent, false);\n\n if(!isOffCanvasState){\n filters.push(filterItem);\n if (offCanvasOrigin) {\n offCanvasOrigin.checked = true; // Keep offCanvas checkbox in sync\n getClosest(offCanvasOrigin, \"li\", true).setAttribute(\"aria-checked\", \"true\");\n updateOffCanvasAccordionCount(offCanvasOrigin);\n }\n if (horizontal) {\n filterResults.insertBefore(filterItem, clearAllItem);\n } else {\n filterResults.appendChild(filterItem); // DOM Add new filter to Desktop\n updateVerticalDesktopAccordionCount(origin);\n }\n if (!isApplyingState){\n createOffCanvasFilterItem(filterItem, filterItem.origin);\n }\n updateFiltersCount();\n uicoreCustomEvent(\"FilterCollection\", \"CreateEvent\", filterItem, { \"filters\": filtersAsStrings(), \"addedFilter\": filterItem.innerText } );\n }\n },\n\n // creates the HTML filterItem button\n createFilter = function (filter, useX, isDigit) {\n var filterText = filter;\n if(isDigit){\n filterText = filter.replace(/^digit/, \"\");\n }\n var filterId = filter.replace(/([^A-Za-z0-9._:/-])/g,\"\"); // =need to delete instances of special characters\n var filterItem = createElement(\"button\", {\n class: prefix + \"filter-item \" + prefix + \"btn \" + prefix +\"btn-secondary \" + prefix + \"btn-sm \" + prefix + \"text-truncate\",\n id: filterId.toLowerCase().replace(/\\s/g, \"\").trim()\n });\n\n var filterLabel = createElement(\"label\", {\n html: filterText,\n class: prefix + \"text-truncate\"\n });\n\n filterItem.appendChild(filterLabel);\n\n // create filterItem SVG\n if(useX) {\n var filterIcon = renderSvg([{name:\"close-x\", show:true}]);\n classAdd(filterIcon, prefix + \"svg-close-x\");\n classAdd(filterIcon, prefix + \"align-self-center\");\n classAdd(filterIcon, prefix + \"m1-1\");\n filterIcon.setAttribute(\"tabindex\", \"-1\");\n filterIcon.setAttribute(\"focusable\", \"false\");\n filterIcon.setAttribute(\"aria-label\", \"filter-close\");\n \n // put everything together\n filterItem.appendChild(filterIcon);\n } \n return filterItem; \n },\n \n filterAlreadyExists = function(filter, isOffCanvasFilter) {\n var whichFilters = isOffCanvasFilter ? filtersTemp : filters;\n var whichParent = isOffCanvasFilter ? filterOffCanvas : element;\n \n if (filter === null || filter === undefined || filter == \"\") {\n console.warn(\"Not a valid filter tag\");\n return true;\n }\n if(arrayOfObjectsContains(whichFilters, filter.toLowerCase())){\n \n each(whichParent.querySelectorAll(\".dds__filter-item\"), function(htmlFilter) {\n if (htmlFilter.value.toLowerCase() == filter.toLowerCase()){\n htmlFilter.classList.add(prefix + \"shakey\");\n \n setTimeout(function(){\n htmlFilter.classList.remove(prefix + \"shakey\");\n }, getAnimationDurationFromElement(htmlFilter));\n }\n });\n console.warn(\"This filter has already been added\");\n return true;\n }\n\n return false;\n },\n\n updateOffCanvasAccordionCount = function(origin){\n var accordionParent = getClosest(origin, \".\" + prefix + \"collapse\").id;\n var accordionBtn = element.querySelector(\"[data-target='#\"+accordionParent+\"']\");//[data-target='#\" + activeCollapse.id + \"']\"\n var accordionBody = getClosest(origin, \".\" + prefix + \"accordion-card-body\");\n var itemsChecked = accordionBody.querySelectorAll(\".\" + prefix + \"form-check-input:checked\").length;\n\n var displayTxt;\n if (itemsChecked > 0) {\n displayTxt = \"(\" + itemsChecked +\")\";\n } else {\n displayTxt = \" \";\n }\n\n var checkedCounter = accordionBtn.querySelector(\".\" + prefix + \"checked-presentation\");\n if (checkedCounter != null) {\n checkedCounter.innerHTML = displayTxt;\n // currentText = displayTxt;\n } else {\n checkedCounter = createElement(\"span\", {\n class: prefix + \"checked-presentation \" + prefix + \"ml-1\",\n html: displayTxt\n });\n accordionBtn.appendChild(checkedCounter);\n }\n },\n\n updateVerticalDesktopAccordionCount = function(origin) {\n if (origin) {\n var accordionParent = getClosest(origin, \".\" + prefix + \"collapse\").id;\n var accordionBtn = element.querySelector(\"[data-target='#\"+accordionParent+\"']\");//[data-target='#\" + activeCollapse.id + \"']\"\n var accordionBody = getClosest(origin, \".\" + prefix + \"secondary-accordion\");\n var itemsChecked = accordionBody.querySelectorAll(\".\" + prefix + \"form-check-input:checked\").length;\n \n var displayTxt;\n if (itemsChecked > 0) {\n displayTxt = \"(\" + itemsChecked +\")\";\n } else {\n displayTxt = \" \";\n }\n \n var checkedCounter = accordionBtn.querySelector(\".\" + prefix + \"checked-presentation\");\n if (checkedCounter != null) {\n checkedCounter.innerHTML = displayTxt;\n } else {\n checkedCounter = createElement(\"span\", {\n class: prefix + \"checked-presentation \" + prefix + \"ml-1 \" + prefix + \"font-weight-bold\",\n html: displayTxt\n });\n accordionBtn.insertBefore(checkedCounter, accordionBtn.querySelector(\".\" + prefix + \"arrow-tri-solid-right\"));\n }\n } else {\n accordionObjects.forEach(function(accordion) {\n var itemsChecked = accordion.parentNode.querySelectorAll(\".\" + prefix + \"form-check-input:checked\").length;\n \n var displayTxt;\n if (itemsChecked > 0) {\n displayTxt = \"(\" + itemsChecked +\")\";\n } else {\n displayTxt = \" \";\n }\n\n var checkedCounter = accordion.querySelector(\".\" + prefix + \"checked-presentation\");\n if (checkedCounter != null) {\n checkedCounter.innerHTML = displayTxt;\n } else {\n checkedCounter = createElement(\"span\", {\n class: prefix + \"checked-presentation \" + prefix + \"ml-1\",\n html: displayTxt\n });\n accordion.querySelector(\"span\").appendChild(checkedCounter);\n }\n });\n }\n },\n\n updateFiltersCount = function() {\n var itemsChecked = filters.length;\n var filteringMobileBtn = element.querySelectorAll(\".\" + prefix + \"filter-btn-mobile\")[0];\n\n var displayTxt;\n if (itemsChecked > 0) {\n displayTxt = \"(\" + itemsChecked +\")\";\n } else {\n displayTxt = \" \";\n }\n var checkedCounter = filteringMobileBtn.querySelector(\".\" + prefix + \"checked-presentation\");\n if (checkedCounter != null) {\n checkedCounter.innerHTML = displayTxt;\n } else {\n checkedCounter = createElement(\"span\", {\n class: prefix + \"checked-presentation \" + prefix + \"ml-1\",\n html: displayTxt\n });\n filteringMobileBtn.appendChild(checkedCounter);\n }\n },\n\n filtersAsStrings = function() {\n var stringArray = [];\n each(filters, function(filter) {\n stringArray.push(filter.value);\n });\n return stringArray;\n },\n\n toggleClearAllButtons = function (onState) {\n if (smallWindow && !horizontal) {\n clearAllItem = element.querySelector(\".\"+prefix+\"filter-label-results .\"+prefix+\"filter-btn-clear\");\n }\n if (onState == true && clearAllItem.classList.contains(prefix + \"d-none\")) {\n clearAllOffCanvas.classList.remove(prefix + \"d-none\");\n clearAllItem.classList.add(prefix + \"d-flex\");\n clearAllItem.classList.remove(prefix + \"d-none\");\n clearAllItem.addEventListener(\"click\", handleClearAllEvent, false);\n clearAllItem.addEventListener(\"touchstart\", handleClearAllEvent, false);\n } else if (onState == false & !clearAllItem.classList.contains(prefix + \"d-none\")) {\n clearAllOffCanvas.classList.add(prefix + \"d-none\");\n clearAllItem.classList.remove(prefix + \"d-flex\");\n clearAllItem.classList.add(prefix + \"d-none\");\n clearAllItem.removeEventListener(\"click\", handleClearAllEvent, false);\n clearAllItem.removeEventListener(\"touchstart\", handleClearAllEvent, false);\n }\n },\n\n toggleDropdown = function (index) {\n var i;\n if (dropdowns[index].classList.contains(prefix + \"d-none\")) {\n for (i = 0; i <= index; i++) {\n dropdowns[i].classList.remove(prefix + \"d-none\");\n }\n }\n else {\n for (i = index + 1; i < dropdowns.length; i++) {\n dropdowns[i].classList.add(prefix + \"d-none\");\n }\n }\n };\n\n this.numOfFilters = function(OffCanvas) {\n if (OffCanvas) {\n return filterOffCanvasResults.querySelectorAll(\".\" + prefix + \"filter-item\").length;\n }\n };\n \n this.updateResultsLabel = function(resultCount) {\n if (!resultCount || typeof resultCount !== \"string\" ) {\n console.warn(\"This is not a valid input for updateResultsLabel.\");\n return;\n }\n element.querySelector(\".\" + prefix + \"resultCount\").innerText = resultCount;\n };\n\n // init\n if (!(stringFilterCollection in element)) {\n if (element.classList.contains(prefix + \"filter-collection-vertical\")) {\n horizontal = false;\n }\n if (horizontal) {\n clearAllItem = element.querySelector(\".\"+prefix+\"filter-collection-wrapper .\"+prefix+\"filter-btn-clear\");\n } else if (smallMediaSize.matches) {\n clearAllItem = element.querySelector(\".\"+prefix+\"filter-label-results .\"+prefix+\"filter-btn-clear\");\n } else {\n clearAllItem = element.querySelector(\".\"+prefix+\"filter-collector-accordion .\"+prefix+\"filter-btn-clear\");\n }\n \n collectionInputsContainer = element.querySelector(\".\" + prefix + \"filter-input-container\");\n dropdowns = collectionInputsContainer.querySelectorAll(\"div.\" + prefix + \"btn-dropdown\");\n collectionInputs = element.querySelectorAll(\"[data-filter]\");\n targetCollection = element[\"getAttribute\"](\"data-target\");\n filterCollection = element.querySelector(targetCollection);\n\n if (filterCollection == null) {\n console.error(\"Found no filter collection to output results to.\");\n return false;\n }\n if (collectionInputs == null) {\n console.error(\"Found no data-filter element(s) available to use\");\n return false;\n }\n\n //off canvas inits\n if (element.querySelector(\".\" + prefix + \"filter-btn-mobile\")) {\n var modalBtn = element.querySelector(\".\" + prefix + \"filter-btn-mobile\");\n mobileModal = new Modal(modalBtn);\n modalBtn.addEventListener(\"click\", handleOffCanvasOpen);\n filterOffCanvas = element.querySelector(\".\" + prefix + \"modal-offcanvas\");\n\n if (element.querySelectorAll(\"[data-toggle='\" + prefix + \"collapse\" + \"']\")) {\n each(element.querySelectorAll(\"[data-toggle='\" + prefix + \"collapse\" + \"']\"), function(accordion) {\n new Collapse(accordion);\n });\n }\n if (filterOffCanvas.querySelector(\".\" + prefix + \"text-right .\" + prefix + \"btn-primary\")) {\n var applyBtn = filterOffCanvas.querySelector(\".\" + prefix + \"text-right .\" + prefix + \"btn-primary\");\n applyBtn.addEventListener(\"click\", handleOffCanvasApplyEvent);\n }\n if (filterOffCanvas.querySelector(\".\" + prefix + \"text-right .\" + prefix + \"dds__btn-secondary-primary\")) {\n var clearAllBtn = filterOffCanvas.querySelector(\".\" + prefix + \"text-right .\" + prefix + \"dds__btn-secondary\");\n clearAllBtn.addEventListener(\"click\", handleClearAllEvent);\n }\n if (filterOffCanvas.querySelector(\".\" + prefix + \"text-right .\" + prefix + \"btn-secondary\")) {\n clearAllOffCanvas = filterOffCanvas.querySelector(\".\" + prefix + \"text-right .\" + prefix + \"btn-secondary\");\n clearAllOffCanvas.addEventListener(\"click\", handleOffCanvasClearAllClick, false);\n }\n if (filterOffCanvas.querySelector(\"[data-dismiss]\")) {\n var backOffCanvas = filterOffCanvas.querySelector(\"[data-dismiss]\");\n backOffCanvas.addEventListener(\"click\", handleOffCanvasCancelEvent, false);\n }\n each(filterOffCanvas.querySelectorAll(\".\" + prefix + \"form-check-input\"), function(checkbox){\n checkbox.addEventListener(\"click\", handleOffCanvasCheckboxClick, false);\n });\n }\n if (horizontal) {\n if (!mediumMediaSize.matches) {\n if (collectionInputs.length > 8){\n visibileIdx = 5;\n mediaIncrementforDropdowns = 4;\n for (var i = visibileIdx + 1; i < dropdowns.length; i++ ) {\n dropdowns[i].classList.add(prefix + \"d-none\");\n }\n createShowMoreButton();\n }\n }\n else if (mediumMediaSize.matches) {\n if (collectionInputs.length > 6) {\n visibileIdx = 3;\n mediaIncrementforDropdowns = 3;\n for (i = visibileIdx + 1; i < dropdowns.length; i++ ) {\n dropdowns[i].classList.add(prefix + \"d-none\");\n }\n createShowMoreButton();\n }\n }\n }\n\n each(collectionInputs, function(input) {\n var typeofInput = input[\"getAttribute\"](\"data-filter\");\n if (typeofInput == prefix + \"keyword-filter\") {\n keywordFilter = input;\n new FilterKeyword(keywordFilter);\n keywordFilter.addEventListener(\"uicFilterKeywordCreateEvent\", handleAddEvent, false);\n }\n else if (typeofInput == prefix + \"multi-select\") {\n var multiSelect = input;\n dropdownObjects.push(new Dropdown(input));\n multiSelect.addEventListener(\"uicDropdownAddEvent\", handleDesktopCheckboxClick, false);\n multiSelect.addEventListener(\"uicDropdownRemoveEvent\", handleDesktopCheckboxClick, false);\n } else if (typeofInput == prefix + \"secondary-accordion\") {\n accordionObjects.push(input);\n var checkboxes = input.parentNode.querySelectorAll(\".\" + prefix + \"form-check\");\n each(checkboxes, function(checkbox) {\n checkbox.addEventListener(\"click\", handleDesktopCheckboxClick, true);\n });\n }\n });\n \n filterResults = filterCollection.querySelector(\"div.\" + prefix + \"filter-results\");\n filterOffCanvasResults = element.querySelector(\"div.\" + prefix + \"modal-offcanvas div.\" + prefix + \"filter-results\");\n resultsLabelDesktop = element.querySelector(\"label.\" + prefix + \"filter-label-results\");\n\n if (horizontal) { mediumMediaSize.addListener(handleResizeMedium);}\n smallMediaSize.addListener(handleResizeSmall);\n \n }\n\n element[stringFilterCollection] = self;\n}\n","import { prefix, DOC, getElementsByClassName, each, jsonOptionsInit } from \"./utilities.js\";\nimport InputMask from \"./helpers/inputMask.js\";\n\nexport default function Forms(element, options) {\n element = element instanceof HTMLElement ? element : (function() {\n return false;\n })();\n\n \n options = options || {};\n options = jsonOptionsInit(element, options);\n options.validate = element.dataset.validate ? element.dataset.validate === \"true\" ? true: false : options.validate ? options.validate : true;\n\n var self = this,\n stringForm = \"Form\",\n togglePassword = function (e) {\n var passwordState = DOC.getElementById(e.target.dataset[\"target\"]);\n if (passwordState) {\n if (passwordState.type === \"password\") {\n passwordState.type = \"text\";\n } else {\n passwordState.type = \"password\";\n }\n } else {\n console.warn(\"The target password field does not exist.\");\n }\n },\n submitHandler = function(event) {\n var formValidationErrorSuffix = \"Feedback\";\n if (element.checkValidity() === false) {\n each(element, function(el) {\n if(el.tagName == \"INPUT\"){\n var errorMsg = element.querySelector(\"#\"+ el.getAttribute(\"id\")+formValidationErrorSuffix);\n setTimeout(function(){\n if (!el.validity.valid) {\n //if error message has not been turned on yet\n if(errorMsg && !(getComputedStyle(errorMsg)[\"display\"] == \"block\")){\n errorMsg.style.display = \"block\";\n }\n el.setAttribute(\"aria-invalid\", \"true\");\n el.setAttribute(\n \"aria-describedby\",\n el.getAttribute(\"id\") + formValidationErrorSuffix\n );\n } else {\n //if error message has not been turned off yet\n if(errorMsg && (getComputedStyle(errorMsg)[\"display\"] == \"block\")){\n errorMsg.style.display = \"none\";\n } \n el.setAttribute(\"aria-invalid\", \"false\");\n el.setAttribute(\"aria-describedby\", \"\");\n }\n }, 10);\n }\n });\n event.preventDefault();\n event.stopPropagation();\n }\n\n element.classList.add(\"dds__was-validated\");\n };\n \n //init\n if (!(stringForm in element)) {\n if (element.querySelectorAll(\"input\")) {\n each(element.querySelectorAll(\"input\"), function(child) {\n if (child.classList.contains(prefix + \"input-masked\")) {\n new InputMask(child);\n }\n });\n }\n if (!element.hasAttribute(\"novalidate\")) {\n element.setAttribute(\"novalidate\", \"\");\n } \n if (options.validate) {\n element.addEventListener(\"submit\", submitHandler);\n }\n\n var checkboxValidators = getElementsByClassName(element, prefix + \"form-check-input\");\n each(checkboxValidators, function(checkboxValidator) {\n if (checkboxValidator && !!checkboxValidator.dataset[\"target\"]) {\n checkboxValidator.addEventListener(\"click\", togglePassword);\n }\n });\n }\n element[stringForm] = self;\n}\n","import {each, createElement} from \"./utilities.js\";\n\nexport default function LinkPicker(element) {\n // initialization element\n element = element instanceof HTMLElement ? element : (function() {\n return false;\n })();\n\n // constants, event targets, strings\n var self = this,\n stringLinkPicker = \"LinkPicker\",\n interestName = \"Interest\",\n touseName = \"ToUse\",\n interest = element.querySelector(\"select[name=\\\"\"+stringLinkPicker+\"_\"+interestName+\"\\\"]\"),\n touse = element.querySelector(\"select[name=\\\"\"+stringLinkPicker+\"_\"+touseName+\"\\\"]\"),\n interestData = JSON.parse(interest.getAttribute(\"data-select\")),\n touseData = JSON.parse(touse.getAttribute(\"data-select\")),\n findName = \"Find\",\n find = element.querySelector(\"button[name=\\\"\"+stringLinkPicker+\"_\"+findName+\"\\\"]\"),\n // handlers\n onChangeHandler = function(e) {\n var eventTarget = e[\"target\"];\n if(eventTarget === interest) {\n if(interest.selectedIndex === 0) {\n touse.disabled = true;\n touse.classList.add(\"dds__disabled\"); //disabled attribute doesn't work on FF\n } else {\n touse.disabled = false;\n touse.classList.remove(\"dds__disabled\");\n }\n var obj = touseData[ touseName ][ interest.value ];\n removeAllOptions(touse, true);\n appendDataToSelect(touse, obj);\n find.classList.add(\"dds__disabled\");\n } else {\n if(touse.selectedIndex === 0)\n {\n find.disabled = true;\n find.classList.add(\"dds__disabled\");\n }\n else{\n find.disabled = false;\n find.classList.remove(\"dds__disabled\");\n }\n }\n },\n clickHandler = function() {\n var link = touse.options[touse.selectedIndex].value;\n find[\"setAttribute\"](\"href\",link);\n find.click();\n },\n removeAllOptions = function(sel, removeGrp) {\n var len, groups, par;\n if (removeGrp) {\n groups = sel.getElementsByTagName(\"optgroup\");\n len = groups.length;\n for (var i=len; i; i--) {\n sel.removeChild( groups[i-1] );\n }\n }\n\n len = sel.options.length;\n for (i=len; i; i--) {\n par = sel.options[i-1].parentNode;\n par.removeChild( sel.options[i-1] );\n }\n },\n appendDataToSelect = function(sel, obj) {\n var f = document.createDocumentFragment();\n var labels = [], group, opts;\n\n function addOptions(obj) {\n var f = document.createDocumentFragment();\n var o;\n\n for (var i=0, len=obj.text.length; i 0) {\r\n currentMenu.setAttribute(\"style\",\"height: \"+max+\"px\");\r\n if (nextMenu) {\r\n nextMenu.setAttribute(\"style\",\"height: \"+max+\"px\");\r\n }\r\n if (previousMenu) {\r\n previousMenu.setAttribute(\"style\",\"height: \"+max+\"px\");\r\n }\r\n if (prePreviousMenu) {\r\n prePreviousMenu.setAttribute(\"style\",\"height: \"+max+\"px\");\r\n }\r\n }\r\n } else {\r\n var cBottom = currentMenu.getBoundingClientRect().bottom,\r\n cHeight = currentMenu.offsetHeight,\r\n nBottom = nextMenu.getBoundingClientRect().bottom,\r\n nHeight = nextMenu.offsetHeight;\r\n \r\n if (cHeight < nHeight) { \r\n if (currentMenu.hasAttribute(\"style\")) {\r\n currentMenu.removeAttribute(\"style\");\r\n }\r\n currentMenu.setAttribute(\"style\",\"height: \"+nHeight+\"px\");\r\n }\r\n if (cBottom < nBottom) {\r\n if (nextMenu.hasAttribute(\"style\")) {\r\n nextMenu.removeAttribute(\"style\");\r\n }\r\n nextMenu.setAttribute(\"style\",\"bottom: -4px\");\r\n }\r\n }\r\n } \r\n },\r\n // Top navigation methods\r\n openContainer = function(target, button, container) {\r\n activeContainerId = target;\r\n button.classList.add(prefix + \"active\");\r\n button.setAttribute(\"aria-expanded\",\"true\");\r\n container.classList.add(prefix + \"active\"); \r\n if (container.classList.contains(prefix + \"msthd-offcanvas-menu\")) {\r\n toggleFullScreen(container, true);\r\n uicoreCustomEvent(\"Masthead\", \"OffCanvasOpen\", element);\r\n setTimeout(function() {\r\n setFocus(getFocusableElements(container)[0]);\r\n }, 200);\r\n } else {\r\n container.querySelectorAll(\"a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex='0']\")[0].focus();\r\n container.addEventListener(\"focusout\", handleFocusOutEvent, true);\r\n }\r\n container.addEventListener(\"keydown\", handleKeyDownEvent, false); \r\n \r\n },\r\n closeContainer = function(button, container) {\r\n activeContainerId = null;\r\n window.removeEventListener(\"click\", handleWindowClickEvent, false);\r\n button.classList.remove(prefix + \"active\");\r\n button.setAttribute(\"aria-expanded\",\"false\");\r\n if (container.classList.contains(prefix + \"msthd-offcanvas-menu\")) {\r\n toggleFullScreen(container, false);\r\n uicoreCustomEvent(\"Masthead\", \"OffCanvasClose\", element);\r\n } else{\r\n container.removeEventListener(\"focusout\", handleFocusOutEvent, true);\r\n container.removeEventListener(\"keydown\", handleKeyDownEvent, false);\r\n }\r\n container.classList.remove(prefix + \"active\");\r\n },\r\n toggleFullScreen = function(container, show) {\r\n if (show) {\r\n if (container) {\r\n container.hidden = false;\r\n }\r\n DOC.body.classList.add(prefix + \"active\");\r\n \r\n // container.addEventListener(\"keydown\", handle)\r\n \r\n if(fullScreenOverlay && !(fullScreenOverlay.classList[\"contains\"](prefix + \"show\"))) {\r\n fullScreenOverlay.classList.add(prefix + \"show\");\r\n fullScreenOverlay.hidden = false;\r\n }\r\n window.addEventListener(\"click\", handleWindowClickEvent, false);\r\n window.addEventListener(\"touchstart\", handleWindowClickEvent, false);\r\n } else {\r\n if (container) {\r\n container.hidden = true;\r\n }\r\n DOC.body.classList.remove(prefix + \"active\");\r\n if (fullScreenOverlay && fullScreenOverlay.classList[\"contains\"](prefix + \"show\")) {\r\n fullScreenOverlay.classList.remove(prefix + \"show\");\r\n fullScreenOverlay.hidden = true;\r\n }\r\n window.removeEventListener(\"touchstart\", handleWindowClickEvent, false);\r\n }\r\n },\r\n touchHandler = function(e) {\r\n if (!document.querySelector(\".\" + prefix + \"msthd-menu-top\").contains(e.target)) {\r\n closeOverLay();\r\n }\r\n };\r\n \r\n this.logIn = function(displayname) {\r\n var signInCtnr = element.querySelector(\".\" + prefix + \"msthd-icon-ctnr\"+\"[data-target='msthd-signin-ctnr']\"),\r\n signInBadge = signInCtnr.querySelector(\".\" + prefix + \"badge\"),\r\n label = signInCtnr.querySelector(\".\" + prefix + \"msthd-label\");\r\n\r\n if (signInBadge.hidden) {\r\n signInBadge.hidden = false;\r\n }\r\n \r\n if (label) {\r\n label.innerHTML = displayname;\r\n }\r\n signInCtnr.setAttribute(\"data-target\",\"msthd-signout-ctnr\");\r\n };\r\n this.logOut = function() {\r\n var signInCtnr = element.querySelector(\".\" + prefix + \"msthd-icon-ctnr\"+\"[data-target='msthd-signout-ctnr']\"),\r\n signInBadge = signInCtnr.querySelector(\".\" + prefix + \"badge\"),\r\n label = signInCtnr.querySelector(\".\" + prefix + \"msthd-label\");\r\n\r\n if (!signInBadge.hidden) {\r\n signInBadge.hidden = true;\r\n }\r\n \r\n if (label) {\r\n label.innerHTML = signInText;\r\n }\r\n signInCtnr.setAttribute(\"data-target\",\"msthd-signin-ctnr\");\r\n };\r\n this.cartCount = function(count) {\r\n var cartCtnr = element.querySelector(\".\" + prefix + \"msthd-icon-ctnr\"+\"[data-target='msthd-cart-ctnr']\"),\r\n cartBadge = cartCtnr.querySelector(\".\" + prefix + \"badge\");\r\n if (count && count > 0) {\r\n if (cartBadge.hidden) {\r\n cartBadge.hidden = false;\r\n }\r\n cartBadge.innerHTML = count;\r\n } else {\r\n cartBadge.hidden = true;\r\n cartBadge.innerHTML = 0;\r\n }\r\n };\r\n\r\n // init\r\n if (!(stringMasthead in element)) {\r\n document.addEventListener(\"uicLeftNavCloseEvent\", function(e) {\r\n closeContainer(e.detail.button, e.detail.container);\r\n });\r\n\r\n overlay = DOC.getElementById(prefix + \"msthd-overlay\");\r\n\r\n each(element.querySelectorAll(\"button.\"+ prefix +\"msthd-icon-ctnr\", \"a.\"+ prefix +\"msthd-icon-ctnr\"),function(button) {\r\n if (button.dataset.toggle && button.dataset.toggle === (prefix + \"msthd-offcanvas\")) {\r\n offCanvasMenuBtn = button;\r\n }\r\n if (button.dataset.target === \"msthd-country-ctnr\") {\r\n new Dropdown(button);\r\n countryMenuBtn = button;\r\n } else {\r\n button.addEventListener(\"click\", handleIconClickEvent, false);\r\n }\r\n });\r\n\r\n if(countryMenuBtn){\r\n countryMenuBtn.addEventListener('uicDropDownShowEvent', function() {\r\n openOverLay();\r\n });\r\n\r\n countryMenuBtn.addEventListener('uicDropDownHideEvent', function() {\r\n closeOverLay();\r\n });\r\n }\r\n\r\n if (offCanvasMenuBtn) {\r\n fullScreenOverlay = getFullScreenOverlay();\r\n if (!DOC.body.classList.contains(prefix + \"body-off-canvas\")) {\r\n DOC.body.classList.add(prefix + \"body-off-canvas\");\r\n }\r\n if (isIPhone && isSafari) {\r\n element.querySelector(\".\" + prefix + \"msthd-offcanvas-menu\").classList.add(prefix + \"safari-fix\");\r\n }\r\n each(element.querySelectorAll(\"[data-toggle='dds__collapse']\"), function(collapse) {\r\n new Collapse(collapse);\r\n });\r\n mediaSize.addListener(function() {\r\n if (!mediaSize.matches) {\r\n if (activeContainerId) {\r\n var container = DOC.getElementById(activeContainerId),\r\n button = getClosest(container, \"BUTTON\", false);\r\n closeContainer(button, container);\r\n }\r\n if (bottomMenu) {\r\n each(bottomMenu.querySelectorAll(\".\" + prefix + \"msthd-menu-top-item\"), function(topMenuItem){\r\n if (topMenuItem.matches(\":hover\")) {\r\n openOverLay();\r\n }\r\n });\r\n }\r\n } else {\r\n closeOverLay();\r\n }\r\n });\r\n }\r\n if (bottomMenu) {\r\n \r\n\r\n each(bottomMenu.querySelectorAll(\".\" + prefix + \"msthd-menu-ctnr\"), function(menuCtnr) {\r\n if (!menuCtnr.classList.contains(prefix+\"msthd-menu-tier-img\")) {\r\n if(window.matchMedia(\"(any-hover: hover)\").matches || isIE) { //Device capable of hover + IE (IE Doesn't support media features)\r\n menuCtnr.addEventListener(mouseHover[0], handleMenuCntrEvent, false);\r\n menuCtnr.addEventListener(mouseHover[1], handleMenuCntrEvent, false);\r\n } else { //Device only capable of touch\r\n menuCtnr.addEventListener(\"touchstart\", handleMenuCntrEvent, false);\r\n }\r\n }\r\n menuCtnr.addEventListener(\"blur\", handleMenuCtnrBlurEvent, true);\r\n });\r\n each(bottomMenu.querySelectorAll(\".\" + prefix + \"msthd-menu-top-item > a\"), function(topMenuItem){\r\n topMenuItem.addEventListener(\"keydown\", handleMenuItemKeyEvent, false);\r\n });\r\n each(bottomMenu.querySelectorAll(\".\" + prefix + \"msthd-menu-item , .\" + prefix + \"msthd-menu-item-img\"), function(menuItem) {\r\n \r\n menuItem.querySelector(\"a\").addEventListener(\"keydown\", handleMenuItemKeyEvent, false);\r\n if(window.matchMedia(\"(any-hover: hover)\").matches || isIE) { //Device capable of hover + IE (IE Doesn't support media features)\r\n menuItem.addEventListener(mouseHover[0], handleMenuItemEvent, false);\r\n menuItem.addEventListener(mouseHover[1], handleMenuItemEvent, false);\r\n } else { //Device only capable of touch\r\n menuItem.addEventListener(\"touchstart\", handleMenuItemEvent, false);\r\n }\r\n });\r\n\r\n bottomMenu = element.querySelector(\".\" + prefix + \"msthd-menu-top\");\r\n if(window.matchMedia(\"(any-hover: hover)\").matches || isIE) { //Device capable of hover + IE (IE Doesn't support media features)\r\n bottomMenu.addEventListener(mouseHover[0], handleMenuHoverInEvent, false);\r\n bottomMenu.addEventListener(mouseHover[1], handleMenuHoverOutEvent, false);\r\n } else { //Device only capable of touch\r\n bottomMenu.addEventListener(\"touchstart\", handleMenuHoverInEvent, false);\r\n }\r\n\r\n if (isIOS) {\r\n window.addEventListener(\"touchstart\", touchHandler, false);\r\n }\r\n\r\n }\r\n }\r\n\r\n element[stringMasthead] = self;\r\n}\r\n","\n/**\n* Detect Element Resize\n*\n* https://github.com/sdecima/javascript-detect-element-resize\n* Sebastian Decima\n*\n* version: 0.5.3\n**/\nexport default function ResizeElement() {\n (function () {\n var attachEvent = document.attachEvent,\n stylesCreated = false;\n \n if (!attachEvent) {\n var requestFrame = (function(){\n var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame ||\n function(fn){ return window.setTimeout(fn, 20); };\n return function(fn){ return raf(fn); };\n })();\n \n var cancelFrame = (function(){\n var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame ||\n window.clearTimeout;\n return function(id){ return cancel(id); };\n })();\n \n var resetTriggers = function(element){\n var triggers = element.__resizeTriggers__,\n expand = triggers.firstElementChild,\n contract = triggers.lastElementChild,\n expandChild = expand.firstElementChild;\n contract.scrollLeft = contract.scrollWidth;\n contract.scrollTop = contract.scrollHeight;\n expandChild.style.width = expand.offsetWidth + 1 + \"px\";\n expandChild.style.height = expand.offsetHeight + 1 + \"px\";\n expand.scrollLeft = expand.scrollWidth;\n expand.scrollTop = expand.scrollHeight;\n };\n \n var checkTriggers = function(element){\n return element.offsetWidth != element.__resizeLast__.width ||\n element.offsetHeight != element.__resizeLast__.height;\n };\n \n var scrollListener = function(e){\n var element = this;\n resetTriggers(this);\n if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__);\n this.__resizeRAF__ = requestFrame(function(){\n if (checkTriggers(element)) {\n element.__resizeLast__.width = element.offsetWidth;\n element.__resizeLast__.height = element.offsetHeight;\n element.__resizeListeners__.forEach(function(fn){\n fn.call(element, e);\n });\n }\n });\n };\n \n /* Detect CSS Animations support to detect element display/re-attach */\n var animation = false,\n // animationstring = \"animation\",\n keyframeprefix = \"\",\n animationstartevent = \"animationstart\",\n domPrefixes = \"Webkit Moz O ms\".split(\" \"),\n startEvents = \"webkitAnimationStart animationstart oAnimationStart MSAnimationStart\".split(\" \"),\n pfx = \"\";\n {\n var elm = document.createElement(\"fakeelement\");\n if( elm.style.animationName !== undefined ) { animation = true; } \n \n if( animation === false ) {\n for( var i = 0; i < domPrefixes.length; i++ ) {\n if( elm.style[ domPrefixes[i] + \"AnimationName\" ] !== undefined ) {\n pfx = domPrefixes[ i ];\n // animationstring = pfx + \"Animation\";\n keyframeprefix = \"-\" + pfx.toLowerCase() + \"-\";\n animationstartevent = startEvents[ i ];\n animation = true;\n break;\n }\n }\n }\n }\n \n var animationName = \"resizeanim\";\n var animationKeyframes = \"@\" + keyframeprefix + \"keyframes \" + animationName + \" { from { opacity: 0; } to { opacity: 0; } } \";\n var animationStyle = keyframeprefix + \"animation: 1ms \" + animationName + \"; \";\n }\n \n var createStyles = function() {\n if (!stylesCreated) {\n //opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\n var css = (animationKeyframes ? animationKeyframes : \"\") +\n \".resize-triggers { \" + (animationStyle ? animationStyle : \"\") + \"visibility: hidden; opacity: 0; } \" +\n \".resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \\\" \\\"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }\",\n head = document.head || document.getElementsByTagName(\"head\")[0],\n style = document.createElement(\"style\");\n \n style.type = \"text/css\";\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n \n head.appendChild(style);\n stylesCreated = true;\n }\n };\n \n window.addResizeListener = function(element, fn){\n if (attachEvent) element.attachEvent(\"onresize\", fn);\n else {\n if (!element.__resizeTriggers__) {\n if (getComputedStyle(element).position == \"static\") element.style.position = \"relative\";\n createStyles();\n element.__resizeLast__ = {};\n element.__resizeListeners__ = [];\n (element.__resizeTriggers__ = document.createElement(\"div\")).className = \"resize-triggers\";\n element.__resizeTriggers__.innerHTML = \"
\" +\n \"
\";\n element.appendChild(element.__resizeTriggers__);\n resetTriggers(element);\n element.addEventListener(\"scroll\", scrollListener, true);\n \n /* Listen for a css animation to detect element display/re-attach */\n animationstartevent && element.__resizeTriggers__.addEventListener(animationstartevent, function(e) {\n if(e.animationName == animationName)\n resetTriggers(element);\n });\n }\n element.__resizeListeners__.push(fn);\n }\n };\n \n window.removeResizeListener = function(element, fn){\n if (attachEvent) element.detachEvent(\"onresize\", fn);\n else {\n element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n if (!element.__resizeListeners__.length) {\n element.removeEventListener(\"scroll\", scrollListener);\n element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);\n }\n }\n };\n })();\n}","import { ariaAnnounce, classAdd, classRemove, createElement, debounce, each, DOC, getClosest, getFocusableElements, getNextFocusableElement, isIE, isIOS, isSafari, jsonOptionsInit, one, prefix, setFocus, uicoreCustomEvent } from \"./utilities.js\";\n\nimport Collapse from \"./collapse.js\";\nimport ResizeElement from \"./helpers/resizeElement.js\";\n\nexport function NavAnchored(element) {\n // initialization element, the element we spy on\n element = element instanceof HTMLElement ? element : (function() {\n return false;\n })();\n\n var self = this,\n items,\n tabs,\n modalElement,\n backButton,\n activeTab = null,\n focusableEls,\n stringNav = \"Nav\",\n sticky,\n isSticky = false,\n targetItems,\n tabbing = false,\n targetNav,\n modalSize = window.matchMedia(\"(max-width: 767.98px)\"),\n exitFocus,\n // Event Handlers\n handleClickEvent = function(e) {\n activeTab = e.target;\n tabbing = false;\n if (modalSize.matches && modalElement && !(modalElement.classList.contains(prefix + \"show\"))) {\n showModal(activeTab);\n for (var index = 0; index < items[\"length\"]; index++) {\n var item = items[index];\n if(index == activeTab.idx) {\n activateTab(item);\n } else {\n deactivateTab(item);\n }\n }\n e.preventDefault();\n } else {\n window.addEventListener(\"scroll\", handleScrollEvent, false);\n if (!isSticky) {\n if (isIE) {\n element.scrollIntoView(true);\n } else {\n element.scrollIntoView({behavior: \"smooth\"});\n }\n } \n if (isIE) {\n targetItems[activeTab.idx].scrollIntoView(true);\n } else {\n targetItems[activeTab.idx].scrollIntoView({behavior: \"smooth\"});\n }\n }\n },\n handleScrollEvent = function() {\n var last_known_scroll_position = window.pageYOffset;\n stickNav(last_known_scroll_position);\n if (!tabbing) {\n window.requestAnimationFrame(updateItems);\n }\n },\n stickNav = function(itemTop) {\n var targetBottom = targetNav.getBoundingClientRect().bottom,\n spacer;\n if (itemTop > sticky && 0 <= targetBottom) {\n if (!isSticky) {\n if(isIE) { // bug fix for position fixed on IE\n spacer = createElement(\"div\", {\n class: prefix + \"nav-spacer\"\n });\n spacer.style.height = element.offsetHeight+\"px\";\n setElementWidth(element);\n element.parentElement.insertBefore(spacer, element);\n }\n element.style.zIndex = 1030;\n element.classList.add(prefix + \"active\");\n isSticky = true;\n }\n } else {\n if (isSticky) {\n if (isIE) {\n spacer = element.parentElement.querySelector(\".\" + prefix + \"nav-spacer\");\n if (spacer) {\n element.parentElement.removeChild(spacer);\n }\n removeElementWidth();\n }\n element.style.zIndex = \"\";\n element.classList.remove(prefix + \"active\");\n isSticky = false;\n }\n }\n },\n dismissHandler = function(e) {\n if (modalElement.classList.contains(prefix + \"show\")) {\n hideModal();\n e.preventDefault();\n setFocus(activeTab);\n }\n },\n handleModalKeydown = function(e) { \n var KEY_TAB = 9;\n var KEY_ESC = 27;\n \n switch(e.keyCode) {\n case KEY_TAB:\n if ( focusableEls.length === 1 ) {\n e.preventDefault();\n break;\n }\n if ( e.shiftKey ) {\n handleBackwardTab(e);\n } else {\n handleForwardTab(e);\n }\n break;\n case KEY_ESC: \n hideModal();\n setFocus(activeTab);\n break;\n default:\n break;\n }\n },\n showModal = function(item) {\n createModal(item);\n modalElement.style.display = \"block\";\n modalElement.setAttribute(\"aria-hidden\", false);\n triggerShow();\n modalElement.classList.add(prefix + \"show\");\n\n if (isSafari && isIOS) {\n modalElement.classList.add(prefix + \"is-safari\");\n }\n\n DOC.body.classList.add(prefix + \"modal-open\");\n\n backButton = modalElement && modalElement.querySelector(\"[data-dismiss='\"+prefix+\"modal']\");\n backButton.addEventListener(\"click\", dismissHandler, false);\n setFocusableElements();\n setTimeout(function() {\n setFocus(backButton);\n }, 50);\n modalElement.addEventListener(\"keydown\", handleModalKeydown);\n },\n hideModal = function() {\n modalElement.classList.add(prefix + \"slide-right\");\n modalElement.classList.remove(prefix + \"show\");\n modalElement.setAttribute(\"aria-hidden\", true);\n if (isSafari && isIOS && modalElement.classList.contains(prefix + \"is-safari\")) {\n modalElement.classList.remove(prefix + \"is-safari\");\n }\n setTimeout(function() {\n triggerHide();\n \n DOC.body.classList.remove(prefix + \"modal-open\");\n if (backButton) {\n backButton.removeEventListener(\"click\", dismissHandler, false);\n }\n }, 200);\n },\n createModal = function(tab) {\n var controls = tab.getAttribute(\"aria-controls\");\n var isIconElement =\n (tab === tab.parentElement\n .querySelector(\".dds__icons.dds__chevron-right.dds__tab-icon\"));\n\n if (!controls && isIconElement) {\n controls = tab.parentElement.getAttribute(\"aria-controls\");\n }\n\n var tabContent = document.getElementById(controls).innerHTML;\n \n var modalBody = modalElement.querySelector(\".\" + prefix+ \"modal-body\");\n modalBody.innerHTML = tabContent;\n },\n // triggers\n triggerShow = function() {\n setFocus(modalElement);\n },\n triggerHide = function() {\n modalElement.style.display = \"\";\n },\n setFocusableElements = function() {\n focusableEls = getFocusableElements(modalElement);\n modalElement.firstFocusableEl = focusableEls[0];\n modalElement.lastFocusableEl = focusableEls[ focusableEls.length - 1 ];\n },\n handleBackwardTab = function (e) {\n if ( document.activeElement === modalElement.firstFocusableEl ) {\n e.preventDefault();\n setFocus(modalElement.lastFocusableEl);\n }\n },\n handleForwardTab = function (e) {\n if ( document.activeElement === modalElement.lastFocusableEl ) {\n e.preventDefault();\n setFocus(modalElement.firstFocusableEl);\n }\n },\n setElementWidth = function(el) {\n element.style.width = el.offsetWidth+\"px\";\n },\n removeElementWidth = function() {\n element.style.width = \"\";\n },\n toggleElementWidth = debounce(function() {\n if (isSticky) {\n setElementWidth(element.parentElement);\n } else {\n removeElementWidth();\n }\n }, 10),\n // takes a number to slighly adjust scroll offset if needed \n determineSection = function(scrollOffset) {\n scrollOffset = scrollOffset || 0;\n for (var i = 0; i < targetItems.length; i++) {\n if (targetItems[i].getBoundingClientRect().top + scrollOffset > 0) {\n return i;\n }\n }\n return targetItems.length >= 1 ? targetItems.length : 1;\n },\n handleEnterEvent = function(e) {\n var target = e.target;\n tabbing = true;\n if (e.keyCode == 9) {\n if (!modalSize.matches) {\n var currentSection = (determineSection(-5) -1);\n currentSection = currentSection < 0 ? 0 : currentSection;\n if (isIE) {\n targetItems[target.idx].scrollIntoView(true);\n } else {\n targetItems[target.idx].scrollIntoView({behavior: \"smooth\"});\n }\n toggleTab(tabs[currentSection],tabs[target.idx]);\n }\n }\n tabbing = false;\n },\n handleKeydownEvent = function(e) {\n var key = e.keyCode,\n idx = e.target.idx;\n \n switch(key) {\n case 9: if (!e.shiftKey) {\n if (modalSize.matches) {\n e.preventDefault(); \n setFocus(exitFocus);\n } else {\n tabbing = true;\n var focusEl;\n each(targetItems, function(target, iter) {\n if (iter >= idx && target.focusableEls.length > 0 && !focusEl) {\n focusEl = target.focusableEls;\n }\n });\n if (focusEl) { e.preventDefault(); setFocus(focusEl[0]); }\n else if (exitFocus) { e.preventDefault(); setFocus(exitFocus); }\n }\n }\n break;\n case 13:\n case 32: // enter and spacebar keys\n e.preventDefault();\n tabbing = false;\n setFocus(e.target);\n e.target.click();\n break;\n case 35: e.preventDefault();\n setFocus(items[tabs.length-1]);\n items[tabs.length-1].click();\n break;\n case 36: e.preventDefault();\n setFocus(items[0]);\n items[0].click();\n break;\n case 39: e.preventDefault();\n if (idx === items.length-1) {\n setFocus(items[0]);\n } else {\n setFocus(items[idx+1]);\n }\n break;\n case 37: e.preventDefault();\n if (idx === 0) {\n setFocus(items[items.length-1]);\n } else {\n setFocus(items[idx-1]);\n }\n break;\n }\n },\n updateItems = function() {\n var section = (determineSection(-5) -1);\n section = section < 0 ? 0 : section;\n for (var index = 0; index < items[\"length\"]; index++) {\n var item = items[index];\n if (isSticky) {\n if(index == section) {\n activateTab(item);\n } else {\n deactivateTab(item);\n }\n } else {\n if (index == 0) {\n activateTab(item);\n } else {\n deactivateTab(item);\n }\n }\n }\n return item;\n },\n toggleTab = function(oldItem, newItem) {\n deactivateTab(oldItem);\n activateTab(newItem);\n },\n activateTab = function(item) {\n item.setAttribute(\"tabindex\",\"0\");\n item.classList.add(prefix + \"active\");\n item.setAttribute(\"aria-selected\",\"true\");\n },\n deactivateTab = function(item) {\n item.setAttribute(\"tabindex\",\"-1\");\n item.classList.remove(prefix + \"active\");\n item.setAttribute(\"aria-selected\",\"false\");\n },\n activateItems = function() {\n element.setAttribute(\"style\", \"display: none !important;\");\n each(targetItems, function(item) {\n item.setAttribute(\"style\", \"display: block;\");\n });\n };\n \n // init - prevent adding event handlers twice\n if (!(stringNav in element)) {\n\n modalElement = element.dataset[\"target\"] && DOC.getElementById(element.dataset[\"target\"].substr(1));\n\n targetNav = element.nextElementSibling;\n \n tabs = element.querySelectorAll(\"li button\");\n\n sticky = element.getBoundingClientRect().top;\n items = [];\n targetItems = [];\n \n if (isIE) {\n window.addEventListener(\"resize\", toggleElementWidth, false);\n }\n \n // populate items and targets\n for (var i=0; i < tabs.length; i++) {\n tabs[i].idx = i;\n items.push(tabs[i]);\n items[i].addEventListener(\"click\", handleClickEvent, false);\n items[i].addEventListener(\"keydown\", handleKeydownEvent, false);\n var panel = document.getElementById(tabs[i].dataset[\"target\"].slice(1));\n panel.scrollTop += element.offsetHeight;\n panel.focusableEls = getFocusableElements(panel);\n each(panel.focusableEls, function(field) {\n field.addEventListener(\"keyup\", handleEnterEvent, false);\n field.idx = i;\n });\n targetItems.push(panel);\n }\n if (targetItems[targetItems.length-1].focusableEls.length == 0) { // last panel and no focusable items\n DOC.addEventListener(\"DOMContentLoaded\", function() { // make sure all HTML is available prior to checking\n exitFocus = getNextFocusableElement(panel);\n });\n }\n\n if (modalSize.matches) {\n window.removeEventListener(\"scroll\", handleScrollEvent, false);\n if (!modalElement) {\n activateItems();\n }\n } else {\n window.addEventListener(\"scroll\", handleScrollEvent, false);\n }\n modalSize.addListener(function() {\n if (!modalSize.matches) {\n element.removeAttribute(\"style\");\n window.addEventListener(\"scroll\", handleScrollEvent, false);\n if (modalElement) {\n hideModal();\n }\n } else {\n element.classList.remove(prefix + \"active\");\n var spacer = element.parentElement.querySelector(\".\" + prefix + \"nav-spacer\");\n if (spacer) {\n element.parentElement.removeChild(spacer);\n }\n window.removeEventListener(\"scroll\", handleScrollEvent, false);\n if (!modalElement) {\n activateItems();\n }\n }\n });\n\n }\n\n element[stringNav] = self;\n}\n\nexport function NavSkip(element) {\n\n // initialization element\n element = element instanceof HTMLElement ? element : (function() {\n return false;\n })();\n\n var self = this,\n stringNavSkip = \"NavSkip\",\n hiddenZindex = \"-1000\",\n visibleZindex = \"1080\",\n tabindex,\n borderStyle,\n dataInset,\n \n // handlers\n focusInHandler = function(e) {\n if (element === e.target || element.contains(e.target)) {\n element.style.zIndex = visibleZindex;\n element.style.opacity = \"1\";\n each(element.querySelectorAll(\"a.\" + prefix + \"btn\"), function(button) {\n button.addEventListener(\"click\", clickHandler, false);\n });\n }\n element.addEventListener(\"focusout\", focusOutHandler);\n },\n\n focusOutHandler = function(e) {\n var target = e.relatedTarget ? e.relatedTarget : DOC.activeElement;\n if (!element.contains(target) && !(element === target)) {\n toggleZindex();\n }\n }, \n \n toggleZindex = function() {\n element.style.zIndex = hiddenZindex;\n element.style.opacity = \"0\";\n each(element.querySelectorAll(\"a.\" + prefix + \"btn\"), function(button) {\n button.removeEventListener(\"click\", clickHandler, false);\n });\n element.removeEventListener(\"focusout\", focusOutHandler);\n\n },\n\n clickHandler = function(e) {\n // element.style.zIndex = hiddenZindex;\n toggleZindex();\n var focusElement = document.getElementById(e.target.getAttribute(\"href\").substr(1));\n tabindex = focusElement.getAttribute(\"tabIndex\");\n if (tabindex !== 0) {\n focusElement.setAttribute(\"tabIndex\", \"0\"); \n } \n focusElement.addEventListener(\"focusout\", blurHandler, false);\n setTimeout( function() {\n focusElement.focus();\n }, 100); //firefox needs a little timeout to register tabindex\n if (e.target.getAttribute(\"data-inset\") === \"true\") { //only add special border if pass in this attr\n dataInset = true;\n borderStyle = focusElement.style.border;\n setTimeout( function() { \n focusElement.style.border = \"2px inset #000000\";\n }, 10);\n } else {\n dataInset = false;\n }\n },\n\n blurHandler = function(e) { \n if (dataInset) {\n e.target.style.border = borderStyle;\n }\n if (tabindex !== 0) {\n tabindex == null ? e.target.removeAttribute(\"tabIndex\") : e.target.setAttribute(\"tabIndex\", tabindex);\n }\n e.target.removeEventListener(\"focusout\", blurHandler, false); //once one blur event occurs, we want to remove the event listener\n };\n\n // init\n if (!(stringNavSkip in element)) {\n // prevent adding event handlers twice\n element.addEventListener(\"focusin\", focusInHandler);\n // window.addEventListener(\"keyup\", keydownZindexHandler);\n // var focusableEls = document.querySelectorAll(\"a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex='0']\");\n // focusableEls[0].addEventListener(\"keyup\", keydownZindexHandler);\n // if using Mac, keyboard accessbility will only work if you set up this setting: https://stackoverflow.com/questions/11704828/how-to-allow-keyboard-focus-of-links-in-firefox\n // On Mac: In System Preferences → Keyboard, in the Shortcuts pane, check the “all controls” radio at the bottom.\n // Safari on Mac: additionally, go to safari preferences-> Advanced -> Accessibility \"Press Tab to highlight each item on a webpage\"\n // Firefox on Mac: additionally, type \"about:config\" in the URL bar. There is no accessibility.tabfocus preference on the mac, so you'll have to make one. Right click in the window, create a new \"integer\" pref, and set it to 7.\n }\n\n\n element[stringNavSkip] = self;\n}\n\nexport function NavAnchoredVertical(element, options) { \n // initialization element, the element we spy on\n element = element instanceof HTMLElement ? element : (function () {\n return false;\n })();\n\n var opt = {};\n\n if (options && Object.keys(options).length) {\n opt.showModal = typeof options.showModal === \"boolean\" && options.showModal;\n }\n\n var self = this,\n activeCSSClassName = prefix + \"active\",\n activeTab = null,\n backButton,\n exitFocus,\n focusableEls,\n modalElement,\n modalSize = window.matchMedia(\"(max-width: 767.98px)\"),\n isSticky = false,\n items,\n stringNav = \"Nav\",\n sticky,\n tabs,\n targetItems,\n tabbing = false,\n targetNav,\n // Event Handlers\n handleClickEvent = function (e) {\n var scrollViewType = !isIE ? { behavior: \"smooth\" } : true;\n var shouldShowModal = opt.showModal && \n modalSize.matches &&\n modalElement && \n !(modalElement.classList.contains(prefix + \"show\"));\n\n var isClickOnIconElement = (e.target === e.target.parentElement\n .querySelector(\".dds__icons.dds__chevron-right.dds__tab-icon\"));\n\n activeTab = isClickOnIconElement ? e.target.parentElement : e.target;\n tabbing = false;\n\n if (shouldShowModal) {\n showModal(activeTab);\n for (var index = 0; index < items[\"length\"]; index++) {\n var item = items[index];\n if (index == activeTab.idx) {\n activateTab(item);\n } else {\n deactivateTab(item);\n }\n }\n return e.preventDefault();\n } \n\n window.addEventListener(\"scroll\", handleScrollEvent, false);\n \n if (!isSticky) {\n element.scrollIntoView(scrollViewType);\n }\n\n targetItems[activeTab.idx].scrollIntoView(scrollViewType);\n },\n handleScrollEvent = function () {\n var lastKnownScrollPosition = window.pageYOffset;\n stickNav(lastKnownScrollPosition);\n if (!tabbing) {\n window.requestAnimationFrame(updateItems);\n }\n },\n stickNav = function (lastKnownScrollPosition) {\n // var lastTargetContent = targetItems[targetItems.length - 1];\n\n var target = targetNav.getBoundingClientRect();\n var navPositionCoords = element.parentElement.getBoundingClientRect();\n\n var navOnTopScreen = (navPositionCoords.top <= 0);\n var elemClassList = element.classList;\n\n if (lastKnownScrollPosition > sticky && 0 <= target.bottom) {\n elemClassList.add(activeCSSClassName);\n element.style.zIndex = 1030;\n isSticky = true;\n } else if (isSticky) {\n elemClassList.remove(activeCSSClassName);\n element.style.zIndex = \"\";\n isSticky = false;\n }\n\n if (isIE) {\n var navItem = element.querySelectorAll(\".dds__nav-anchored-vertical-item\");\n var lastNavItem = navItem[navItem.length - 1];\n \n var positionOflastNavItemBottom = lastNavItem.getBoundingClientRect().bottom;\n var negativeTop = target.bottom - lastNavItem.parentElement.getBoundingClientRect().height;\n var isNavAfterLastContentBottom = (target.bottom >= positionOflastNavItemBottom);\n\n if (navOnTopScreen) {\n element.style.top = isNavAfterLastContentBottom ? \"0px\" : negativeTop + \"px\";\n element.style.position = \"fixed\";\n element.style.height = target.bottom +\"px\";\n\n targetNav.style.marginLeft =\"270px\";\n return;\n }\n\n element.style.height =\"auto\";\n element.style.position =\"relative\";\n targetNav.style.marginLeft =\"0\";\n }\n },\n dismissHandler = function (e) {\n if (modalElement.classList.contains(prefix + \"show\")) {\n hideModal();\n e.preventDefault();\n setFocus(activeTab);\n }\n },\n handleModalKeydown = function (e) {\n var KEY_TAB = 9;\n var KEY_ESC = 27;\n\n switch (e.keyCode) {\n case KEY_TAB:\n if (focusableEls.length === 1) {\n e.preventDefault();\n break;\n }\n if (e.shiftKey) {\n handleBackwardTab(e);\n } else {\n handleForwardTab(e);\n }\n break;\n case KEY_ESC:\n hideModal();\n setFocus(activeTab);\n break;\n default:\n break;\n }\n },\n showModal = function (item) {\n createModal(item);\n modalElement.style.display = \"block\";\n modalElement.setAttribute(\"aria-hidden\", false);\n triggerShow();\n modalElement.classList.add(prefix + \"show\");\n\n if (isSafari && isIOS) {\n modalElement.classList.add(prefix + \"is-safari\");\n }\n\n DOC.body.classList.add(prefix + \"modal-open\");\n\n backButton = modalElement && modalElement.querySelector(\"[data-dismiss='\" + prefix + \"modal']\");\n backButton.addEventListener(\"click\", dismissHandler, false);\n setFocusableElements();\n setTimeout(function () {\n setFocus(backButton);\n }, 50);\n modalElement.addEventListener(\"keydown\", handleModalKeydown);\n },\n hideModal = function () {\n modalElement.classList.add(prefix + \"slide-right\");\n modalElement.classList.remove(prefix + \"show\");\n modalElement.setAttribute(\"aria-hidden\", true);\n if (isSafari && isIOS && modalElement.classList.contains(prefix + \"is-safari\")) {\n modalElement.classList.remove(prefix + \"is-safari\");\n }\n setTimeout(function () {\n triggerHide();\n\n DOC.body.classList.remove(prefix + \"modal-open\");\n if (backButton) {\n backButton.removeEventListener(\"click\", dismissHandler, false);\n }\n }, 200);\n },\n createModal = function (tab) {\n var controls = tab.getAttribute(\"aria-controls\");\n var isIconElement = \n (tab === tab.parentElement\n .querySelector(\".dds__icons.dds__chevron-right.dds__tab-icon\"));\n\n if (!controls && isIconElement) {\n controls = tab.parentElement.getAttribute(\"aria-controls\");\n }\n\n var tabContent = document.getElementById(controls).innerHTML;\n\n var modalBody = modalElement.querySelector(\".\" + prefix + \"modal-body\");\n modalBody.innerHTML = tabContent;\n },\n // triggers\n triggerShow = function () {\n setFocus(modalElement);\n },\n triggerHide = function () {\n modalElement.style.display = \"\";\n },\n setFocusableElements = function () {\n focusableEls = getFocusableElements(modalElement);\n modalElement.firstFocusableEl = focusableEls[0];\n modalElement.lastFocusableEl = focusableEls[focusableEls.length - 1];\n },\n handleBackwardTab = function (e) {\n if (document.activeElement === modalElement.firstFocusableEl) {\n e.preventDefault();\n setFocus(modalElement.lastFocusableEl);\n }\n },\n handleForwardTab = function (e) {\n if (document.activeElement === modalElement.lastFocusableEl) {\n e.preventDefault();\n setFocus(modalElement.firstFocusableEl);\n }\n },\n setElementWidth = function (el) {\n element.style.width = el.offsetWidth + \"px\";\n },\n removeElementWidth = function () {\n element.style.width = \"\";\n },\n toggleElementWidth = debounce(function () {\n if (isSticky) {\n setElementWidth(element.parentElement);\n } else {\n removeElementWidth();\n }\n }, 10),\n toogleContent = debounce(function () {\n each(targetItems, function (panel) {\n if (opt.showModal && !modalSize.matches) {\n panel.classList.remove(\"modal-off\");\n panel.classList.remove(\"modal-on\");\n } else {\n panel.classList.add(\"modal-off\");\n panel.classList.add(\"modal-on\");\n }\n });\n }, 10),\n // takes a number to slighly adjust scroll offset if needed \n determineSection = function (scrollOffset) {\n scrollOffset = scrollOffset || 0;\n for (var i = 0; i < targetItems.length; i++) {\n if (targetItems[i].getBoundingClientRect().top + scrollOffset > 0) {\n return i;\n }\n }\n\n return targetItems.length >= 1 ? targetItems.length : 1;\n },\n handleEnterEvent = function (e) {\n var target = e.target;\n tabbing = true;\n if (e.keyCode == 9) {\n if (!modalSize.matches) {\n var currentSection = (determineSection(-5) - 1);\n currentSection = currentSection < 0 ? 0 : currentSection;\n if (isIE) {\n targetItems[target.idx].scrollIntoView(true);\n } else {\n targetItems[target.idx].scrollIntoView({ behavior: \"smooth\" });\n }\n toggleTab(tabs[currentSection], tabs[target.idx]);\n }\n }\n tabbing = false;\n },\n handleKeydownEvent = function (e) {\n var key = e.keyCode,\n idx = e.target.idx;\n\n switch (key) {\n case 9: if (!e.shiftKey) {\n if (modalSize.matches) {\n e.preventDefault();\n setFocus(exitFocus);\n } else {\n tabbing = true;\n var focusEl;\n each(targetItems, function (target, iter) {\n if (iter >= idx && target.focusableEls.length > 0 && !focusEl) {\n focusEl = target.focusableEls;\n }\n });\n if (focusEl) { e.preventDefault(); setFocus(focusEl[0]); }\n else if (exitFocus) { e.preventDefault(); setFocus(exitFocus); }\n }\n }\n break;\n case 13:\n case 32: // enter and spacebar keys\n e.preventDefault();\n tabbing = false;\n setFocus(e.target);\n e.target.click();\n break;\n case 35: e.preventDefault();\n setFocus(items[tabs.length - 1]);\n items[tabs.length - 1].click();\n break;\n case 36: e.preventDefault();\n setFocus(items[0]);\n items[0].click();\n break;\n case 39: e.preventDefault();\n if (idx === items.length - 1) {\n setFocus(items[0]);\n } else {\n setFocus(items[idx + 1]);\n }\n break;\n case 37: e.preventDefault();\n if (idx === 0) {\n setFocus(items[items.length - 1]);\n } else {\n setFocus(items[idx - 1]);\n }\n break;\n }\n },\n updateItems = function () {\n var section = (determineSection(-5) - 1);\n section = section < 0 ? 0 : section;\n for (var index = 0; index < items[\"length\"]; index++) {\n var item = items[index];\n if (isSticky) {\n if (index == section) {\n activateTab(item);\n } else {\n deactivateTab(item);\n }\n } else {\n if (index == 0) {\n activateTab(item);\n } else {\n deactivateTab(item);\n }\n }\n }\n return item;\n },\n toggleTab = function (oldItem, newItem) {\n deactivateTab(oldItem);\n activateTab(newItem);\n },\n activateTab = function (item) {\n item.setAttribute(\"tabindex\", \"0\");\n item.classList.add(prefix + \"active\");\n item.setAttribute(\"aria-selected\", \"true\");\n },\n deactivateTab = function (item) {\n item.setAttribute(\"tabindex\", \"-1\");\n item.classList.remove(prefix + \"active\");\n item.setAttribute(\"aria-selected\", \"false\");\n },\n activateItems = function () {\n element.setAttribute(\"style\", \"display: none !important;\");\n each(targetItems, function (item) {\n item.setAttribute(\"style\", \"display: none;\");\n });\n };\n\n // init - prevent adding event handlers twice\n if (!(stringNav in element)) {\n\n modalElement = element.dataset[\"target\"] && DOC.getElementById(element.dataset[\"target\"].substr(1));\n\n targetNav = element.nextElementSibling;\n\n tabs = element.querySelectorAll(\"li button\");\n sticky = element.getBoundingClientRect().top;\n items = [];\n targetItems = [];\n\n // populate items and targets\n for (var i = 0; i < tabs.length; i++) {\n tabs[i].idx = i;\n items.push(tabs[i]);\n items[i].addEventListener(\"click\", handleClickEvent, false);\n items[i].addEventListener(\"keydown\", handleKeydownEvent, false);\n\n var panel = document.getElementById(tabs[i].dataset[\"target\"].slice(1));\n panel.scrollTop += element.offsetHeight;\n panel.focusableEls = getFocusableElements(panel);\n\n each(panel.focusableEls, function (field) {\n field.addEventListener(\"keyup\", handleEnterEvent, false);\n field.idx = i;\n });\n\n targetItems.push(panel);\n \n if (opt.showModal && modalSize.matches) {\n panel.classList.add(\"modal-on\");\n panel.classList.remove(\"modal-off\");\n } else {\n panel.classList.add(\"modal-off\");\n panel.classList.remove(\"modal-off\");\n }\n }\n\n if (targetItems[targetItems.length - 1].focusableEls.length == 0) { // last panel and no focusable items\n DOC.addEventListener(\"DOMContentLoaded\", function () { // make sure all HTML is available prior to checking\n exitFocus = getNextFocusableElement(panel);\n });\n }\n\n if (modalSize.matches && !opt.showModal) { \n window.removeEventListener(\"scroll\", handleScrollEvent, false);\n\n if (!modalElement) {\n activateItems();\n }\n\n element\n .setAttribute(\"style\", \"display: none !important;\");\n } else {\n window.addEventListener(\"scroll\", handleScrollEvent, false);\n }\n\n window.addEventListener(\"resize\", function () {\n if (modalSize.matches && !opt.showModal) {\n return element\n .setAttribute(\"style\", \"display: none !important;\");\n }\n\n opt.showModal && toogleContent();\n\n if (isIE) {\n opt.showModal && stickNav(window.pageYOffset);\n toggleElementWidth();\n }\n }, false);\n\n modalSize.addListener(function () {\n if (!modalSize.matches) {\n element.removeAttribute(\"style\");\n window.addEventListener(\"scroll\", handleScrollEvent, false);\n if (modalElement) {\n hideModal();\n }\n } else {\n element.classList.remove(prefix + \"active\");\n var spacer = element.parentElement.querySelector(\".\" + prefix + \"nav-spacer\");\n if (spacer) {\n element.parentElement.removeChild(spacer);\n }\n window.removeEventListener(\"scroll\", handleScrollEvent, false);\n if (!modalElement) {\n activateItems();\n }\n }\n });\n }\n\n element[stringNav] = self;\n}\n\nexport function NavLeft(element, options) {\n // initialization element, the element we spy on\n element = element instanceof HTMLElement ? element : (function () {\n return false;\n })();\n\n // set options\n options = options || {};\n options = jsonOptionsInit(element, options);\n options.menu = element.dataset.menu ? element.dataset.menu : options.menu ? options.menu : \"navLeft-list\";\n options.main = element.dataset.main ? element.dataset.main : options.main ? options.main : null;\n options.suffix = element.dataset.suffix ? element.dataset.suffix : options.suffix ? options.suffix : null;\n options.arrows = element.dataset.arrows ? element.dataset.arrows : options.arrows ? options.arrows : \"right\"; // can be \"left\", \"right\", or \"center\"\n options.selected = element.dataset.selected ? element.dataset.selected : options.selected ? options.selected : null;\n options.altmenu = element.dataset.altmenu ? element.dataset.altmenu : options.altmenu ? options.altmenu : null; \n options.replace = element.dataset.replace ? element.dataset.replace == \"true\" : options.replace ? options.replace == \"true\" : false; \n\n // warn if required options are not provided\n if (!options.main) {\n throw new Error(\"Left Nav 'main' option must be set.\");\n }\n\n var self = this,\n stringNavLeft = \"NavLeft\",\n masthead,\n desktopLeftNav,\n siteBody,\n offCanvas,\n suffix,\n footer,\n buttonToggle,\n footerHeight,\n mastheadHeight,\n visibleFooter,\n parentAccordions = [],\n focusableElms,\n KEY_TAB = 9,\n KEY_ESC = 27,\n defaultMain = options.menu === \"navLeft-list\",\n adjustHeightForFooter = function () {\n if (!footer) {\n return;\n }\n visibleFooter = (document.documentElement.clientHeight - footer.getBoundingClientRect().top);\n visibleFooter = visibleFooter < 0 ? 0 : visibleFooter;\n var calcHeight = (document.documentElement.clientHeight - visibleFooter);\n if (visibleFooter > 0) {\n buttonToggle.style.height = element.style.height = calcHeight + \"px\";\n }\n if (suffix) {\n if (visibleFooter > 0) {\n suffix.style.bottom = visibleFooter + \"px\";\n }\n desktopLeftNav.style.maxHeight = (document.documentElement.clientHeight - suffix.getBoundingClientRect().height - footerHeight) + \"px\";\n }\n },\n adjustHeightForMasthead = function () {\n if (!masthead) {\n return;\n }\n var calcHeight;\n mastheadHeight = masthead.getBoundingClientRect().height;\n if (window.pageYOffset > mastheadHeight) {\n // if masthead not is visible\n element.style.top = \"0px\";\n if (!isFooterVisible()) {\n buttonToggle.style.height = element.style.height = document.documentElement.clientHeight + \"px\";\n } else {\n buttonToggle.style.height = element.style.height = (document.documentElement.clientHeight - visibleFooter)+ \"px\";\n }\n } else {\n element.style.top = (mastheadHeight - window.pageYOffset) + \"px\";\n if (isFooterVisible()) {\n calcHeight = (parseInt(window.getComputedStyle(element).height, 10) - (mastheadHeight - window.pageYOffset));\n buttonToggle.style.height = element.style.height = calcHeight + \"px\";\n } else {\n calcHeight = (document.documentElement.clientHeight - mastheadHeight + window.pageYOffset);\n buttonToggle.style.height = element.style.height = calcHeight + \"px\";\n }\n }\n },\n alignChevrons = function(accordionButtons) {\n if (accordionButtons) {\n if (options.arrows === \"right\") {\n each(accordionButtons, function (accordionButton) {\n classAdd(accordionButton, prefix + \"navLeft-button-optionRight\");\n });\n } else if (options.arrows === \"center\") {\n each(accordionButtons, function (accordionButton) {\n classAdd(accordionButton, prefix + \"navLeft-button-optionCenter\");\n accordionButton.children[1].after(accordionButton.children[0]);\n });\n }\n }\n },\n cloneLeftNavToOffCanvas = function () {\n if (defaultMain && !options.altmenu) {\n return;\n }\n var offCanvasCloneSuffix = \"-offCanvas\";\n if (options.altmenu) {\n each(DOC.getElementById(options.altmenu).children, function (li) {\n offCanvas.leftMenu.querySelector(\"ul\").appendChild(li.cloneNode(true));\n });\n DOC.getElementById(options.altmenu).parentElement.removeChild(DOC.getElementById(options.altmenu));\n } else {\n each(element.querySelectorAll(\".\" + prefix + \"navLeft-list>li\"), function (li) {\n offCanvas.leftMenu.querySelector(\"ul\").appendChild(li.cloneNode(true));\n });\n }\n each(offCanvas.leftMenu.querySelectorAll(\".\" + prefix + \"accordion\"), function(lnAccordion) {\n lnAccordion.id = lnAccordion.id + offCanvasCloneSuffix;\n lnAccordion.querySelector(\".\" + prefix + \"accordion-btn\").setAttribute(\"data-parent\", \n lnAccordion.querySelector(\".\" + prefix + \"accordion-btn\").getAttribute(\"data-parent\").substr(1) + offCanvasCloneSuffix);\n });\n each(offCanvas.leftMenu.querySelectorAll(\".\" + prefix + \"accordion-card-header\"), function(lnCardHeader) {\n lnCardHeader.id = lnCardHeader.id + offCanvasCloneSuffix;\n lnCardHeader.nextElementSibling.setAttribute(\"aria-labelledby\", \n lnCardHeader.nextElementSibling.getAttribute(\"aria-labelledby\") + offCanvasCloneSuffix);\n });\n each(offCanvas.leftMenu.querySelectorAll(\".\" + prefix + \"collapse\"), function(lnCollapse) {\n lnCollapse.id = lnCollapse.id + offCanvasCloneSuffix;\n if (lnCollapse.previousElementSibling.querySelector(\".\" + prefix + \"accordion-btn\")) {\n lnCollapse.previousElementSibling.querySelector(\".\" + prefix + \"accordion-btn\").setAttribute(\"data-target\", \n lnCollapse.previousElementSibling.querySelector(\".\" + prefix + \"accordion-btn\").getAttribute(\"data-target\") + offCanvasCloneSuffix);\n lnCollapse.previousElementSibling.querySelector(\".\" + prefix + \"accordion-btn\").setAttribute(\"aria-controls\", \n lnCollapse.previousElementSibling.querySelector(\".\" + prefix + \"accordion-btn\").getAttribute(\"aria-controls\") + offCanvasCloneSuffix);\n }\n });\n each(offCanvas.leftMenu.querySelectorAll(\"a\"), function(lnAnchor) {\n if(lnAnchor.id) {\n lnAnchor.id = lnAnchor.id + offCanvasCloneSuffix;\n }\n });\n \n // define focusable offcanvas elements\n focusableElms = getFocusableElements(DOC.querySelector(\".\" + prefix + \"msthd-top .\" + prefix + \"navLeft\"));\n\n \n // reinit offcanvas collapses\n each(offCanvas.leftMenu.querySelectorAll(\"[data-toggle='\" + prefix + \"collapse']\"), function (collapse) {\n new Collapse(collapse);\n });\n },\n createOffCanvasMenu = function () {\n if (defaultMain && !options.altmenu) {\n return;\n }\n // remove header menu\n offCanvas = {\n mastheadMend: masthead.querySelectorAll(\".\" + prefix + \"msthd-offcanvas-menu\")[0],\n parent: undefined,\n storedId: undefined,\n leftMenu: element.querySelectorAll(\".\" + prefix + \"msthd-offcanvas-menu\")[0]\n };\n if (offCanvas.mastheadMend) {\n offCanvas.parent = offCanvas.mastheadMend.parentElement;\n offCanvas.storedId = offCanvas.mastheadMend.id;\n offCanvas.parent.removeChild(offCanvas.mastheadMend);\n } else {\n throw new Error(\"Left Nav cannot initialize without a masthead component in the header element.\");\n }\n\n // reassign ID to leftNav's offCanvas\n offCanvas.leftMenu.id = offCanvas.storedId;\n if (offCanvas.parent) {\n offCanvas.parent.appendChild(offCanvas.leftMenu);\n }\n },\n expandSelection = function () {\n if (!options.selected) {\n return;\n }\n each(parentAccordions, function(stepAccord) {\n var aButton = stepAccord.querySelector(\".\" + prefix + \"accordion-btn\"),\n aChevron = stepAccord.querySelector(\".\" + prefix + \"accordion-btn i\"),\n aCollapse = stepAccord.querySelector(\".\" + prefix + \"collapse\");\n aButton.setAttribute(\"aria-expanded\", true);\n classAdd(aChevron, prefix + \"navLeft-icon-rotate\");\n one(aButton, \"click\", function(event) {\n each(getClosest(event.target, \".\" + prefix + \"accordion\", true).querySelectorAll(\".\" + prefix + \"accordion-btn i\"), function(thisChevron) {\n classRemove(thisChevron, prefix + \"navLeft-icon-rotate\");\n });\n });\n aCollapse.setAttribute(\"aria-expanded\", true);\n classAdd(aCollapse, prefix + \"show\");\n });\n\n setTimeout(function() {\n each(element.querySelectorAll(\".\" + prefix + \"navLeft-list\"), function(list) {\n var selectedLink = list.querySelector(\".\" + prefix + \"navLeft-link-selected\");\n if (selectedLink) {\n selectedLink.scrollIntoView();\n }\n });\n }, 500);\n },\n handleAdjustmentEvent = function () {\n adjustHeightForFooter();\n adjustHeightForMasthead();\n },\n handleBackClick = function () {\n var activeContainer = masthead.querySelector(\".\" + prefix + \"msthd-offcanvas-menu\");\n var activeButton = masthead.querySelector(\"[data-toggle='\" + prefix + \"msthd-offcanvas']\");\n uicoreCustomEvent(\"LeftNav\", \"CloseEvent\", element, {\"button\": activeButton, \"container\": activeContainer});\n },\n handleOffCanvasKeyDown = function (e) {\n switch(e.keyCode) {\n case KEY_TAB:\n if ( focusableElms.length === 1 ) {\n e.preventDefault();\n break;\n }\n if ( e.shiftKey ) {\n handleBackwardTab(e);\n } else {\n handleForwardTab(e);\n }\n break;\n case KEY_ESC: {\n handleBackClick();\n break; \n }\n default:\n break;\n }\n },\n handleBackwardTab = function (e) {\n if ( DOC.activeElement === focusableElms[0] ) {\n e.preventDefault();\n focusableElms[focusableElms.length-1].focus();\n }\n },\n handleForwardTab = function (e) {\n if ( DOC.activeElement === focusableElms[focusableElms.length-1] ) {\n e.preventDefault();\n focusableElms[0].focus();\n }\n },\n handleOffCanvasItemEsc = function (e) {\n switch(e.keyCode) {\n case KEY_ESC: {\n handleBackClick();\n break; \n }\n default:\n break;\n } \n },\n handleOffCanvasOpenEvent = function () {\n each(focusableElms, function(fElement) { // top level categories\n fElement.addEventListener(\"keydown\", handleOffCanvasKeyDown, false);\n });\n // add eventListener to offCanvas menu choices, but not categories\n each(offCanvas.leftMenu.querySelectorAll(\"li a\"), function(aItem) {\n aItem.addEventListener(\"keydown\", handleOffCanvasItemEsc);\n aItem.addEventListener(\"click\", handleBackClick);\n });\n each(offCanvas.leftMenu.querySelectorAll(\"li button\"), function(aItem) {\n aItem.addEventListener(\"keydown\", handleOffCanvasItemEsc);\n });\n if (DOC.body.classList.contains(\"user-is-tabbing\")) {\n setTimeout(function() {\n setFocus(focusableElms[0]);\n }, 200);\n }\n },\n handleOffCanvasCloseEvent = function () {\n each(focusableElms, function(fElement) {\n fElement.removeEventListener(\"keydown\", handleOffCanvasKeyDown, false);\n });\n each(offCanvas.leftMenu.querySelectorAll(\"li a\"), function(aItem) {\n aItem.removeEventListener(\"keydown\", handleOffCanvasItemEsc);\n aItem.removeEventListener(\"click\", handleBackClick);\n });\n each(offCanvas.leftMenu.querySelectorAll(\"li button\"), function(aItem) {\n aItem.removeEventListener(\"keydown\", handleOffCanvasItemEsc);\n });\n if (DOC.body.classList.contains(\"user-is-tabbing\")) {\n setTimeout(function() {\n setFocus(masthead.querySelector(\"[data-toggle='\" + prefix + \"msthd-offcanvas']\"));\n }, 200);\n }\n ariaAnnounce(\n masthead.querySelector(\"[data-toggle='\" + prefix + \"msthd-offcanvas']\").getAttribute(\"aria-label\") + \" \" + \n masthead.querySelector(\"[data-toggle='\" + prefix + \"msthd-offcanvas']\").getAttribute(\"aria-expanded\")\n );\n },\n handleToggleClick = function () { // active in this case means the site body is fully expanded, or that the leftnav has been altered from its initial state (thus, collapsed)\n if (element.classList[\"contains\"](prefix + \"active\")) {\n classRemove(element, prefix + \"active\");\n classRemove(siteBody, prefix + \"active\");\n classRemove(buttonToggle.querySelector(\"svg\"), prefix + \"rotate-180\");\n buttonToggle.setAttribute(\"aria-expanded\", \"true\");\n element.querySelector(\"#navLeft-list\").style.display = \"\";\n } else {\n classAdd(element, prefix + \"active\");\n classAdd(siteBody, prefix + \"active\");\n classAdd(buttonToggle.querySelector(\"svg\"), prefix + \"rotate-180\");\n buttonToggle.setAttribute(\"aria-expanded\", \"false\");\n element.querySelector(\"#navLeft-list\").style.display = \"none\";\n }\n setTimeout(function () {\n adjustHeightForFooter();\n adjustHeightForMasthead();\n }, 200);\n },\n highlightSelection = function () {\n if (!options.selected) {\n return;\n }\n var anchortags = DOC.querySelectorAll(\"a[href*='\" + options.selected + \"']\");\n each(anchortags, function (tag) {\n var ps = tag.parentElement.previousElementSibling;\n if (ps && ps.tagName.toLowerCase() === \"li\") {\n classAdd(ps, prefix + \"navLeft-link-selectedPrev\");\n }\n classAdd(tag.parentElement, prefix + \"navLeft-link-selected\");\n // take note of parent accordions\n var parentAccordion = getClosest(tag, \".\" + prefix + \"accordion\", true);\n do {\n parentAccordions.push(parentAccordion);\n parentAccordion = getClosest(parentAccordion.parentElement, \".\" + prefix + \"accordion\", true);\n } while (parentAccordion);\n parentAccordions = parentAccordions.reverse();\n });\n },\n isFooterVisible = function () {\n return footer ? DOC.body.offsetHeight >= footer.getBoundingClientRect().top : false;\n };\n\n // init\n if (!(stringNavLeft in element)) { // prevents adding event handlers twice\n var pageReadyCount = 0,\n pageReadyInterval = 50,\n maxPageReadyTry = 5000;\n // assign global variables\n desktopLeftNav = element.querySelector(\".\" + prefix + \"navLeft\");\n siteBody = DOC.getElementById(options.main);\n buttonToggle = element.querySelector(\".\" + prefix + \"navLeft-btn-toggle\");\n\n // add event handlers\n window.addEventListener(\"scroll\", handleAdjustmentEvent);\n window.addEventListener(\"resize\", handleAdjustmentEvent);\n if (options.menu.length > 0 || options.altmenu.length > 0) { // otherwise let masthead continue to manage offcanvas\n DOC.addEventListener(\"uicMastheadOffCanvasOpen\", handleOffCanvasOpenEvent, false);\n DOC.addEventListener(\"uicMastheadOffCanvasClose\", handleOffCanvasCloseEvent, false);\n }\n buttonToggle.addEventListener(\"click\", handleToggleClick);\n\n // adjust initial page elements\n if (!defaultMain) {\n if (DOC.getElementById(options.menu)) {\n DOC.getElementById(options.menu).hidden = true;\n } else {\n throw new Error(\"Element not found by ID ('\" + options.menu + \"') for left nav menu choices.\");\n }\n }\n if (options.altmenu) {\n if (DOC.getElementById(options.altmenu)) {\n DOC.getElementById(options.altmenu).hidden = true;\n } else {\n throw new Error(\"Element not found by ID ('\" + options.altmenu + \"') for left nav (offcanvas) menu choices.\");\n }\n }\n classAdd(siteBody, prefix + \"body-ml-20\");\n if (options.suffix) {\n suffix = DOC.getElementById(options.suffix);\n element.querySelector(\"nav\").appendChild(suffix);\n classAdd(suffix, prefix + \"navLeft-suffix\");\n }\n\n // move user's leftNav options into our HTML structure\n if (!defaultMain) {\n each(DOC.getElementById(\"navLeft-list\").querySelectorAll(\"li\"), function(oneLi) {\n oneLi.parentElement.removeChild(oneLi);\n });\n var developerLinks = DOC.querySelectorAll(\"#\" + options.menu + \">ul>li\").length ? \n DOC.querySelectorAll(\"#\" + options.menu + \">ul>li\") : \n DOC.querySelectorAll(\"#\" + options.menu + \">li\");\n each(developerLinks, function(thisLi) {\n element.querySelector(\".\" + prefix + \"navLeft-list\").appendChild(thisLi);\n });\n DOC.getElementById(options.menu).parentElement.removeChild(DOC.getElementById(options.menu));\n }\n\n // Remove masthead horizontal menu if it exists\n if (options.replace) {\n var headerHorizontalMenu = DOC.querySelector(\".\" + prefix + \"msthd-navbar-bottom\");\n if (headerHorizontalMenu) {\n headerHorizontalMenu.parentElement.removeChild(headerHorizontalMenu);\n }\n }\n\n // align accordion chevrons\n alignChevrons(element.querySelectorAll(\".\" + prefix + \"accordion button\"));\n if (options.altmenu) {\n alignChevrons(document.getElementById(options.altmenu).querySelectorAll(\".\" + prefix + \"accordion button\"));\n }\n\n // assign global variables that have dependencies\n var pageReady = function() {\n footer = DOC.querySelector(\"footer\");\n masthead = DOC.querySelector(\"header\");\n footerHeight = footer.getBoundingClientRect().height;\n createOffCanvasMenu();\n cloneLeftNavToOffCanvas();\n // set initial heights of elements\n adjustHeightForFooter();\n adjustHeightForMasthead();\n element.style.top = mastheadHeight;\n if (!isIE) { // this is a bonus check for guaranteed initial display. IE doesn't Promise, so it's skip IE, or use a polyfill.\n Promise.all(Array.from(DOC.images).filter(function (img) { !img.complete; }).map(function (img) { new Promise(function (resolve) { { img.onload = img.onerror = resolve; } }); })).then(function () {\n adjustHeightForFooter();\n adjustHeightForMasthead();\n });\n }\n highlightSelection();\n expandSelection();\n ResizeElement();\n };\n\n // wait for header and footer. Will be instant unless page load time is abnormally lengthy\n var waitForLeftNav = function() {\n if (pageReadyCount < maxPageReadyTry) {\n if (DOC.querySelector(\"footer\") && DOC.querySelector(\"header\")) {\n setTimeout(pageReady, pageReadyInterval);\n } else {\n setTimeout(waitForLeftNav, pageReadyInterval);\n }\n pageReadyCount += pageReadyInterval;\n } else {\n throw new Error(\"Unable to initialize Left Nav component due to page load timeout.\");\n }\n };\n\n waitForLeftNav();\n }\n\n\n element[stringNavLeft] = self;\n}\n","import { DOC, prefix, createElement, isArray, uicoreCustomEvent, isIE, each, validateNum, renderSvg, flush } from \"./utilities.js\";\r\n\r\nexport default function Pagination(element, options) {\r\n\r\n element = element instanceof HTMLElement ? element : (function () {\r\n return false;\r\n })();\r\n\r\n var jsonParams = element.dataset.page;\r\n if (jsonParams) {\r\n options = JSON.parse(jsonParams);\r\n }\r\n\r\n // set options\r\n options = options || {};\r\n options.items = validateNum(options.items, 1);\r\n options.filter = element.classList.contains(prefix + \"pagination-justified-filter\") ? true : false;\r\n options.pageText = typeof options.pageText === \"string\" ? options.pageText : \"Page\";\r\n options.itemsPerPageText = typeof options.itemsPerPageText === \"string\" ? options.itemsPerPageText : \"Items per page\";\r\n options.perPageSelect = options.perPageSelect ? options.perPageSelect : [12, 24, 48, 96];\r\n if (isArray(options.perPageSelect)) {\r\n if (typeof options.perPageSelect[0] === \"number\") {\r\n options.perPageSelect = options.perPageSelect.map(function(i) { \r\n i = Math.abs(parseInt(i));\r\n return i;\r\n });\r\n } else if (validateNum(options.perPageSelect[0])) {\r\n options.perPageSelect = options.perPageSelect.map(function(i) { \r\n i = Math.abs(parseInt(i));\r\n return i;\r\n });\r\n } else {\r\n throw new Error(\"Invalid perPageSelect. Should be a non-empty array of integer\");\r\n }\r\n } else {\r\n options.perPageSelect = [12,24,28,96];\r\n }\r\n options.perPage = options.perPageSelect.indexOf(options.perPage) > -1 ? validateNum(options.perPage) : options.perPageSelect[0];\r\n options.hidePages = options.hidePages && typeof options.hidePages === \"boolean\" ? options.hidePages : false;\r\n options.external = options.external != null && typeof options.external === \"boolean\" ? options.external : false;\r\n options.buttonLabelLeft = options.buttonLabelLeft ? options.buttonLabelLeft : \"Previous\";\r\n options.buttonLabelRight = options.buttonLabelRight ? options.buttonLabelRight : \"Next\";\r\n options.disablePaginationInput = options.disablePaginationInput != null && typeof options.disablePaginationInput === \"boolean\" ? options.disablePaginationInput : false;\r\n options.showTotal = options.showTotal && typeof options.showTotal === \"string\" ? options.showTotal : false;\r\n\r\n var self = this,\r\n stringPagination = \"Pagination\",\r\n template = \"{total}{pager}{select}\",\r\n pagination,\r\n prevText = options.buttonLabelLeft,\r\n nextText = options.buttonLabelRight,\r\n currentPage,\r\n origPerPage = options.perPage,\r\n previousPerPage,\r\n newPage,\r\n totalPages,\r\n newTotalPages,\r\n lastPage,\r\n onFirstPage,\r\n onLastPage,\r\n links,\r\n // handlers\r\n handlePaginationEvent = function(e) {\r\n var target;\r\n if (e.target.dataset[\"page\"]) {\r\n target = e.target;\r\n } else {\r\n target = e.target.parentNode;\r\n }\r\n var name = target.getAttribute(\"aria-label\");\r\n var focusBtn;\r\n\r\n var buttons = pagination.querySelectorAll(\"button\");\r\n for (var idx = 0;idx < buttons.length;idx++) {\r\n if (target === buttons[idx]) {\r\n focusBtn = buttons[idx];\r\n break;\r\n } \r\n }\r\n\r\n if (!options.external) {\r\n if (target.dataset[\"page\"]) {\r\n self.page(target.dataset[\"page\"]);\r\n }\r\n } else {\r\n uicoreCustomEvent(\"Pagination\", \"PageChangeEvent\", element, { \"page\": target.dataset[\"page\"], \"perPage\" : options.perPage, \"pages\" : totalPages });\r\n }\r\n\r\n focusBtn = pagination.querySelector(\"[aria-label=\\\"\"+name+\"\\\"]\"),\r\n focusBtn.focus();\r\n\r\n },\r\n handleKeydownEvent = function(e) {\r\n if(e.keyCode == 13) {\r\n if(e.target.value <= totalPages && e.target.value > 0) {\r\n if (!options.external) {\r\n self.page(e.target.value);\r\n } else {\r\n uicoreCustomEvent(\"Pagination\", \"PageChangeEvent\", element, { \"page\": e.target.value, \"perPage\" : options.perPage, \"pages\" : totalPages });\r\n }\r\n } else {\r\n e.target.value = currentPage;\r\n }\r\n var queryStr = e.target.tagName;\r\n each(e.target.classList, function(clazz) {\r\n queryStr += \".\" + clazz;\r\n });\r\n pagination.querySelector(queryStr).focus();\r\n }\r\n },\r\n handleFocusoutEvent = function(e) {\r\n if(e.target.value != currentPage) {\r\n e.target.value = currentPage;\r\n } else {\r\n e.preventDefault();\r\n }\r\n },\r\n handleChangeEvent = function(e) {\r\n if (e.target.value != options.perPage) {\r\n previousPerPage = options.perPage;\r\n options.perPage = parseInt(e.target.value);\r\n if (!options.external) {\r\n update();\r\n } else {\r\n renderPage(); \r\n uicoreCustomEvent(\"Pagination\", \"PerPageChangeEvent\", element, { \"page\": currentPage, \"perPage\" : options.perPage, \"pages\" : totalPages });\r\n }\r\n var queryStr = e.target.tagName;\r\n each(e.target.classList, function(clazz) {\r\n queryStr += \".\" + clazz;\r\n });\r\n element.querySelector(queryStr).focus();\r\n }\r\n },\r\n // dynamic ui\r\n render = function() {\r\n if (options.showTotal) {\r\n var totalItems = createElement(\"div\", {\r\n class: prefix + \"pagination-total-items\"\r\n });\r\n var spanItems = createElement(\"span\", {\r\n html: options.items + \" \" + options.showTotal\r\n });\r\n totalItems.appendChild(spanItems);\r\n template = template.replace(\"{total}\", totalItems.outerHTML);\r\n } else {\r\n template = template.replace(\"{total}\", \"\");\r\n }\r\n\r\n var paginator = createElement(\"ul\", {\r\n class: prefix + \"pagination-list\",\r\n role: \"presentation\"\r\n });\r\n \r\n // Pager placement\r\n template = template.replace(\"{pager}\", paginator.outerHTML);\r\n\r\n // Per Page Select placement\r\n if (options.filter) {\r\n var wrap = \"
\";\r\n \r\n // Selector placement\r\n template = template.replace(\"{select}\", wrap);\r\n } else {\r\n template = template.replace(\"{select}\", \"\");\r\n }\r\n\r\n element.innerHTML = template;\r\n\r\n pagination = element.querySelector(\".\" + prefix + \"pagination-list\");\r\n\r\n if (options.items < options.perPage) {\r\n pagination.classList.add(prefix + \"pagination-hidden\");\r\n }\r\n\r\n update();\r\n },\r\n renderPage = function () {\r\n var origCurrentPage = currentPage;\r\n\r\n if (newPage) {\r\n currentPage = newPage;\r\n newPage = null;\r\n } else if (previousPerPage) {\r\n var firstItemOnPage = ( (origCurrentPage - 1) * previousPerPage) + 1;\r\n currentPage = Math.ceil(firstItemOnPage / options.perPage);\r\n previousPerPage = null;\r\n } else if (newTotalPages && currentPage > newTotalPages) {\r\n currentPage = newTotalPages;\r\n }\r\n\r\n onFirstPage = currentPage === 1;\r\n onLastPage = currentPage === lastPage;\r\n\r\n if (origCurrentPage != currentPage) {\r\n uicoreCustomEvent(\"Pagination\", \"PageUpdateEvent\", element, { \"page\": currentPage, \"perPage\" : options.perPage, \"pages\" : totalPages });\r\n }\r\n },\r\n renderPageInput = function() {\r\n var pageInputWrapper = createElement(\"li\", {\r\n class: prefix + \"pagination-input-ctnr\"\r\n });\r\n if (options.hidePages) {\r\n pageInputWrapper.classList.add(prefix + \"d-none\");\r\n }\r\n var pageInputTextBefore = createElement(\"label\", {\r\n html: options.pageText\r\n });\r\n var pageInputField = createElement(\"input\", {\r\n class: prefix + \"form-control \" + prefix + \"text-center\" ,\r\n type: \"text\",\r\n value: currentPage,\r\n \"aria-label\": \"Page \" + currentPage + \" of \" + (newTotalPages ? newTotalPages : totalPages)\r\n });\r\n pageInputField.disabled = options.disablePaginationInput;\r\n var pageInputTextAfter = createElement(\"label\", {\r\n html: \"of \" + (newTotalPages ? newTotalPages : totalPages)\r\n });\r\n \r\n pageInputWrapper.appendChild(pageInputTextBefore);\r\n pageInputWrapper.appendChild(pageInputField);\r\n pageInputWrapper.appendChild(pageInputTextAfter);\r\n return pageInputWrapper;\r\n },\r\n renderPager = function () {\r\n var origTotalPages = totalPages,\r\n pages = newTotalPages ? newTotalPages : totalPages;\r\n\r\n flush(pagination, isIE);\r\n \r\n if (pages > 1) {\r\n var frag = DOC.createDocumentFragment(),\r\n prev = onFirstPage ? 1 : currentPage - 1,\r\n next = onLastPage ? pages : currentPage + 1;\r\n \r\n frag.appendChild(button(\"dds__btn dds__btn-secondary dds__page-item\", prev, prevText));\r\n \r\n each(links, function(p) {\r\n frag.appendChild(p);\r\n });\r\n \r\n frag.appendChild(button(\"dds__btn dds__btn-secondary dds__page-item\", next, nextText));\r\n \r\n pagination.appendChild(frag.cloneNode(true));\r\n // add in click and keydown listeners\r\n each(pagination.querySelectorAll(\"li\"), function(el) {\r\n var hasInput = el.querySelector(\"input\");\r\n var hasButton = el.querySelector(\"button\");\r\n if(hasButton) {\r\n el.addEventListener(\"click\", handlePaginationEvent, true);\r\n }\r\n if(hasInput) {\r\n hasInput.addEventListener(\"keydown\", handleKeydownEvent, false);\r\n hasInput.addEventListener(\"focusout\", handleFocusoutEvent, false);\r\n }\r\n });\r\n }\r\n\r\n if (pages != origTotalPages || newTotalPages) {\r\n totalPages = pages;\r\n newTotalPages = null;\r\n uicoreCustomEvent(\"Pagination\", \"PerPageUpdateEvent\", element, { \"page\": currentPage, \"perPage\" : options.perPage, \"pages\" : totalPages });\r\n }\r\n },\r\n renderSelect = function() {\r\n var el = element.querySelector(\".\" + prefix + \"perpage\");\r\n if (el) { flush(el, isIE); }\r\n var select = createElement(\"select\",{\r\n class: prefix + \"form-control\"\r\n });\r\n\r\n // Create the options\r\n each(options.perPageSelect, function(val) {\r\n var option;\r\n if (val == options.perPage) {\r\n option = new Option(val, val, true, true);\r\n } else {\r\n option = new Option(val, val, false, false);\r\n }\r\n select.add(option);\r\n });\r\n\r\n var label = createElement(\"label\", {\r\n html: options.itemsPerPageText\r\n });\r\n\r\n // Custom label\r\n el.innerHTML = \"\";\r\n el.appendChild(select);\r\n el.appendChild(label);\r\n\r\n select.addEventListener(\"change\", handleChangeEvent, false);\r\n\r\n },\r\n renderTotalItems = function() {\r\n var totalItemsWrapper = element.querySelector(\".\" + prefix + \"pagination-total-items\");\r\n flush(totalItemsWrapper, isIE);\r\n totalItemsWrapper.appendChild(createElement(\"span\", {html: options.items + \" \" + options.showTotal}));\r\n },\r\n button = function (c, p, t) {\r\n var el = createElement(\"li\");\r\n\r\n var bEl = createElement(\"button\", {\r\n class: c + \" \" + prefix + \"pager-link\",\r\n\r\n \"aria-label\": t,\r\n \"data-page\": p\r\n });\r\n \r\n var span = createElement(\"span\", {\r\n html: t\r\n });\r\n bEl.appendChild(span);\r\n var svgElem;\r\n if (t === prevText) {\r\n svgElem = renderSvg([{name:\"chevron-left\", show:true}]);\r\n svgElem.setAttribute(\"name\",\"chevron-left\");\r\n bEl.insertBefore(svgElem, span);\r\n if (onFirstPage) {\r\n bEl.setAttribute(\"disabled\",\"\");\r\n }\r\n } else if (t === nextText) {\r\n svgElem = renderSvg([{name:\"chevron-right\", show:true}]);\r\n svgElem.setAttribute(\"name\",\"chevron-right\");\r\n bEl.appendChild(svgElem);\r\n if (onLastPage) {\r\n bEl.setAttribute(\"disabled\",\"\");\r\n }\r\n }\r\n el.appendChild(bEl);\r\n\r\n return el;\r\n },\r\n paginate = function () {\r\n var pages;\r\n\r\n if (options.items < options.perPage) {\r\n pages = 1;\r\n } else {\r\n pages = Math.ceil( (options.items / options.perPage) );\r\n }\r\n if (!totalPages) {\r\n totalPages = lastPage = pages;\r\n } else {\r\n newTotalPages = lastPage = pages;\r\n }\r\n },\r\n update = function() {\r\n\r\n if (options.items < options.perPage) {\r\n pagination.classList.add(prefix + \"pagination-hidden\");\r\n } else if (pagination.classList.contains(prefix + \"pagination-hidden\")) {\r\n pagination.classList.remove(prefix + \"pagination-hidden\");\r\n }\r\n\r\n paginate(); \r\n\r\n renderPage();\r\n \r\n links = [renderPageInput()];\r\n \r\n renderPager();\r\n\r\n if(options.filter) {\r\n renderSelect();\r\n }\r\n\r\n if (options.showTotal) {\r\n renderTotalItems();\r\n }\r\n };\r\n\r\n\r\n\r\n /**\r\n * Changes the page to the number passed in\r\n * @param {int} num\r\n * @return {void}\r\n */\r\n this.page = function(num) {\r\n \r\n newPage = validateNum(num);\r\n\r\n if (!newPage\r\n || newPage == currentPage \r\n || newPage > totalPages \r\n || newPage < 0\r\n ) {\r\n return false;\r\n }\r\n\r\n update();\r\n };\r\n\r\n /**\r\n * Changes the value chosen in the per-page selection input\r\n * @param {int} num\r\n * @return {void}\r\n */\r\n this.perPage = function(num) {\r\n var newPerPage = validateNum(num);\r\n\r\n if (!newPerPage) {\r\n return false;\r\n } else {\r\n options.perPage = newPerPage;\r\n }\r\n\r\n update();\r\n };\r\n \r\n /**\r\n * Adds the amount of items passed in\r\n * @param {int} num\r\n * @return {void}\r\n */\r\n this.addItems = function(num) {\r\n \r\n var addItems = validateNum(num);\r\n\r\n if (!addItems) {\r\n return false;\r\n } else {\r\n options.items += addItems;\r\n }\r\n\r\n update();\r\n };\r\n\r\n /**\r\n * Removes the amount of items passed in\r\n * @param {int} num\r\n * @return {void}\r\n */\r\n this.removeItems = function(num) {\r\n \r\n var remItems = validateNum(num);\r\n\r\n if (!remItems) {\r\n return false;\r\n } else {\r\n options.items -= remItems;\r\n }\r\n\r\n update();\r\n };\r\n\r\n /**\r\n * Sets the total number of items to the number passed in\r\n * @param {int} num\r\n * @return {void}\r\n */\r\n this.setItems = function(num) {\r\n \r\n var newItems = validateNum(num);\r\n if (newItems == undefined || newItems == null) {\r\n if (num === 0) options.items = 0;\r\n pagination.classList.add(prefix + \"pagination-hidden\");\r\n return false;\r\n } else {\r\n options.items = newItems;\r\n if (options.items === 0) {\r\n options.perPage = origPerPage;\r\n previousPerPage = null;\r\n }\r\n }\r\n\r\n update();\r\n };\r\n\r\n /**\r\n * Return the calculated pages\r\n * @return {int} totalPages\r\n */\r\n this.pages = function() {\r\n return totalPages;\r\n };\r\n\r\n //init\r\n if (!(stringPagination in element)) {\r\n currentPage = 1;\r\n render();\r\n }\r\n\r\n element[stringPagination] = self;\r\n}","import { DOC, emulateTransitionEnd, globalObject, getClosest, prefix, styleTip, uicoreCustomEvent, getFullScreenOverlay, createElement, jsonOptionsInit} from \"./utilities.js\";\n\nexport default function Popover(element, options) {\n // initialization element\n element = element instanceof HTMLElement ? element : (function () {\n return false;\n })();\n\n options = options || {};\n options = jsonOptionsInit(element, options);\n options.delay = element.dataset.delay ? parseInt(element.dataset.delay) : options.delay ? parseInt(options.delay) : 10;\n options.title = element.dataset.title ? element.dataset.title : options.data_title ? options.data_title : null;\n options.content = element.dataset.content ? element.dataset.content : options.data_content ? options.data_content : null;\n options.placement = element.dataset.placement ? element.dataset.placement : options.data_placement ? options.data_placement : null;\n options.container = element.dataset.container ? element.dataset.container : options.container ? options.container : DOC.body;\n\n // validate options\n (function () {\n if (options.title == null || options.title === \"\") {\n throw new Error(\"There was a problem found with title value, please correct and try again\");\n }\n if (options.content == null || options.content === \"\") {\n throw new Error(\"There was a problem found with content value, please correct and try again\");\n }\n if (options.placement == null) {\n throw new Error(\"There was a problem found with placement value, please correct and try again\");\n }\n var inOffCanvas = getClosest(element, \".\" + prefix + \"modal-offcanvas\");\n if(inOffCanvas) {\n options.container = inOffCanvas;\n } else {\n var inFixedTop = getClosest(element, \".fixed-top\");\n if(inFixedTop) {\n options.container = inFixedTop;\n } else {\n var inFixedBottom = getClosest(element, \".fixed-bottom\");\n if(inFixedBottom) {\n options.container = inFixedBottom;\n }\n }\n }\n })();\n\n // DATA API\n var self = this,\n popoverString = \"Popover\",\n container = DOC.body,\n overlay = getFullScreenOverlay(),\n popoverArrow = null,\n popoverCloseBtn = null,\n popoverFocusTrap = null,\n positionCalc = true,\n smallMedia = window.matchMedia(\"(max-width: 767.98px)\"),\n popover = null,\n popoverModal = null,\n visible = false,\n isHiding = false,\n showTimeout = null,\n hideTimeout = null,\n // handlers\n triggerHandler = function(e) {\n self.toggle();\n e.preventDefault();\n },\n blurHandler = function(e) {\n // setTimeout is important here because when you tab with keyboard,\n // activeElement is not consistently updated until the blur event has been processed\n setTimeout(function(){\n if (DOC.activeElement === element) return;\n if (popover && !popover.contains(DOC.activeElement)) {\n self.hide();\n element.focus();\n e.preventDefault();\n }\n }, 10);\n },\n windowBlurHandler = function() {\n self.hide();\n },\n closeBtnHandler = function(e) {\n self.hide();\n element.focus();\n e.preventDefault();\n e.stopPropagation();\n },\n focusTrapHandler = function(e){\n self.hide();\n element.focus();\n e.preventDefault();\n },\n keyHandler = function (e) {\n if (e.keyCode === 27 && e.type === \"keydown\") { //esc\n element.focus();\n self.hide();\n e.preventDefault();\n } else if (e.keyCode === 13 && e.type === \"keydown\") { //enter\n if (e.currentTarget.classList.contains(prefix + \"close\")) {\n self.hide();\n element.focus();\n e.preventDefault();\n }\n } else if (e.keyCode === 9 & e.type === \"keydown\") { //tab out\n if (e.shiftKey && e.srcElement.classList.contains(prefix + \"popover\")) {\n self.hide();\n element.focus();\n e.preventDefault();\n }\n }\n },\n createPopover = function () {\n //create popover divs\n var popoverDialog = null,\n popoverTitleDiv = null,\n popoverTitle = null,\n popoverContent = null,\n popoverParagraph = null;\n\n popover = createElement(\"div\", {\n class: prefix + \"modal-dialog\",\n tabindex: \"0\",\n role: \"dialog\"\n });\n\n popoverDialog = createElement(\"div\", {\n class: prefix + \"popover-dialog\",\n });\n popover.appendChild(popoverDialog);\n\n //create popover arrow\n popoverArrow = createElement(\"div\", {\n class: prefix + \"arrow\"\n });\n popover.appendChild(popoverArrow);\n\n //set popover title container\n popoverTitleDiv = createElement(\"div\", {\n class: prefix + \"popover-title-container \" + prefix + \"d-flex\"\n });\n\n popoverDialog.appendChild(popoverTitleDiv);\n\n popoverTitle = createElement(\"h3\", {\n class: prefix + \"popover-header \" + prefix + \"bold-16\",\n html: options.title\n });\n popoverTitleDiv.appendChild(popoverTitle);\n\n //set popover body content\n popoverContent = createElement(\"div\", {\n class: prefix + \"popover-body\"\n });\n\n popoverParagraph = createElement(\"p\", {\n html: options.content\n });\n\n popoverDialog.appendChild(popoverContent);\n popoverContent.appendChild(popoverParagraph);\n \n //create close button\n popoverCloseBtn = createElement(\"button\", {\n class: prefix + \"close\" + \" \" + prefix + \"icons \" + prefix + \"close-x \" + prefix + \"position-absolute\",\n tabindex: \"0\",\n aria_label: \"Close Popover\",\n data_dismiss: prefix + \"popover\"\n });\n\n popoverTitleDiv.appendChild(popoverCloseBtn);\n\n popoverFocusTrap = createElement(\"div\", {\n tabindex: \"0\"\n });\n\n popover.appendChild(popoverFocusTrap);\n \n //append to the container\n if (smallMedia.matches) {\n popoverModal = createElement(\"div\", {\n class: prefix + \"modal\"\n });\n popoverModal.style.display = \"block\";\n \n DOC.body.classList.add(prefix + \"modal-open\");\n popoverModal.appendChild(popover);\n element.parentNode.insertBefore(popoverModal, element);\n } else {\n container.insertBefore(popover, container.firstChild);\n }\n\n var popoverClasses = [\n prefix + \"popover\",\n prefix + \"bs-popover-\" + options.placement,\n prefix + \"fade\",\n prefix + \"rounded-0\"\n ];\n \n popover.setAttribute(\"class\", popoverClasses.join(\" \"));\n },\n removePopover = function () {\n var popoverParent = popover.parentNode;\n\n // if popover has the dds__modal, then access it's parent to remove the whole node\n if (popoverParent.getAttribute(\"class\") === prefix + \"modal\") {\n popoverParent.parentNode.removeChild(popoverParent);\n } else {\n container.removeChild(popover);\n }\n popover = null;\n DOC.body.classList.remove(prefix + \"modal-open\");\n },\n createOverlay = function () {\n if (overlay) {\n overlay.classList.add(prefix + \"show\");\n overlay.removeAttribute(\"hidden\");\n overlay.style.visibility = \"hidden\";\n } else {\n console.warn(\"POPOVER: Overlay requested. Corresponding HTML missing. Please apply 'dds__overlay' to a div\");\n }\n },\n removeOverlay = function () {\n if (overlay) overlay.classList.remove(prefix + \"show\");\n },\n showPopover = function () {\n if (!popover.classList.contains(prefix + \"show\")) popover.classList.add(prefix + \"show\");\n },\n hidePopover = function () {\n if (popover.classList.contains(prefix + \"show\")) popover.classList.remove(prefix + \"show\");\n },\n updatePopover = function () {\n if (positionCalc) {\n styleTip(element, popover, options.placement, container);\n } else {\n popover.style.cssText = \"\";\n }\n },\n // triggers\n showTrigger = function() {\n uicoreCustomEvent(\"Popover\", \"Shown\", element);\n },\n hideTrigger = function() {\n if (visible) removePopover();\n visible = false;\n isHiding = false;\n uicoreCustomEvent(\"Popover\", \"Hidden\", element);\n },\n positionCalculation = function(e) {\n if (e.matches) {\n positionCalc = false;\n } else {\n positionCalc = true;\n }\n };\n\n // public methods / handlers\n this.toggle = function() {\n if (visible) {\n self.hide();\n } else {\n self.show();\n }\n };\n\n this.show = function() {\n if (visible || isHiding) return;\n visible = true;\n\n createPopover();\n createOverlay();\n updatePopover();\n\n clearTimeout(showTimeout);\n showTimeout = setTimeout(function () {\n showPopover();\n \n popover.focus();\n popover.addEventListener(\"blur\", blurHandler, false);\n popover.addEventListener(\"keydown\", keyHandler, false);\n popoverFocusTrap.addEventListener(\"focus\", focusTrapHandler, false);\n popoverCloseBtn.addEventListener(\"click\", closeBtnHandler, false);\n\n window.addEventListener(\"blur\", windowBlurHandler, false);\n globalObject.addEventListener(\"resize\", self.toggle, false);\n \n uicoreCustomEvent(\"Popover\", \"ShowEvent\", element);\n emulateTransitionEnd(popover, showTrigger);\n }, options.delay);\n };\n\n this.hide = function() {\n if (!visible || isHiding) return;\n isHiding = true;\n\n clearTimeout(hideTimeout);\n hideTimeout = setTimeout(function () {\n hidePopover();\n removeOverlay();\n \n popover.removeEventListener(\"blur\", blurHandler, false);\n popover.removeEventListener(\"keydown\", keyHandler, false);\n popoverFocusTrap.removeEventListener(\"focus\", focusTrapHandler, false);\n popoverCloseBtn.removeEventListener(\"click\", closeBtnHandler, false);\n\n window.removeEventListener(\"blur\", windowBlurHandler, false);\n globalObject.removeEventListener(\"resize\", self.toggle, false);\n\n uicoreCustomEvent(\"Popover\", \"HideEvent\", element);\n emulateTransitionEnd(popover, hideTrigger);\n }, options.delay);\n };\n\n this.update = function () {\n updatePopover();\n };\n\n // init\n if (!(popoverString in element)) {\n // prevent adding event handlers twice\n element.addEventListener(\"click\", triggerHandler, false);\n positionCalculation(smallMedia);\n smallMedia.addListener(positionCalculation);\n }\n\n element[popoverString] = self;\n}\n","import {createElement, prefix, uicoreCustomEvent, each, jsonOptionsInit, debounce, isIE, isSafari, isEdge} from \"./utilities.js\";\n\nexport default function ProductStack(element, options) {\n element = element instanceof HTMLElement ? element : (function() {\n return false;\n })();\n\n options = options || {};\n options = jsonOptionsInit(element, options);\n options.lazyload = typeof options.lazyload === \"boolean\" ? options.lazyload : false;\n options.type = options.type ? options.type : \"single\";\n\n var stringProductStack = \"ProductStack\",\n itemsView,\n currentOffset,\n overflowContainer,\n childrenWidth,\n productStacks,\n rightCtrls,\n leftCtrls,\n productStackID,\n // handlers\n resizeHandler = function() {\n updateSectionHeights();\n updateItemsView();\n },\n controlClick = function(e) {\n var increment = childrenWidth;\n if (options.type == \"page\") {\n // increment = overflowContainer.offsetWidth;\n var leftNumber = Math.ceil((overflowContainer.scrollLeft - 5) / childrenWidth) + 1;\n var rightNumber = Math.floor((overflowContainer.scrollLeft + overflowContainer.offsetWidth + 5) / childrenWidth);\n if (rightNumber - leftNumber <= 0){\n increment = childrenWidth;\n } else {\n increment = childrenWidth * (rightNumber - leftNumber + 1);\n }\n }\n\n var isRight = (e.target.classList.contains(prefix + \"overflow-control-right\") || e.target.parentElement.classList.contains(prefix + \"overflow-control-right\")) ? true : false;\n\n if (isRight) {\n if ((currentOffset + increment) < childrenWidth * productStacks.length - overflowContainer.offsetWidth - 1) {\n currentOffset += increment;\n }\n else {\n currentOffset = childrenWidth * productStacks.length - overflowContainer.offsetWidth;\n }\n } else {\n if ((currentOffset - increment) > 1) {\n currentOffset -= increment;\n }\n else {\n currentOffset = 0;\n }\n }\n if(isIE || isSafari || isEdge) {\n overflowContainer.scrollLeft = currentOffset;\n }\n else {\n overflowContainer.scroll({ top: 0, left: currentOffset, behavior: \"smooth\" });\n }\n updateItemsView();\n },\n updateSectionHeights = function() {\n element.getElementsByTagName(\"style\")[0].innerHTML = \"\";\n childrenWidth = productStacks[0].parentElement.offsetWidth;\n // tallestSections can be used in the future to optimize the performace on resize\n // var tallestSections = [];\n each(productStacks[0].sections, function(section) {\n // to optimize, we can extract querySelectorAll outside and save it somewhere instead of doing it over and over\n var sectionName = \".\" + section.className.replace(/\\s/g, \".\");\n var sectionMatches = element.querySelectorAll(sectionName);\n if(sectionMatches.length > 1){\n var maxHeight = 0;\n each(sectionMatches, function(sectionMatch) {\n if (sectionMatches.style){\n sectionMatches.removeAttribute(\"style\");\n }\n if (sectionMatch.offsetHeight > maxHeight) {\n maxHeight = sectionMatch.offsetHeight;\n }\n else if (sectionMatch.offsetHeight == 0) {\n sectionMatch.nextElementSibling.style.visibility = \"hidden\";\n }\n });\n var styleTag = element.getElementsByTagName(\"style\")[0].innerHTML;\n element.getElementsByTagName(\"style\")[0].innerHTML = styleTag + \"#\"+ productStackID + \" \" + sectionName + \"{ height: \" + maxHeight + \"px }\";\n }\n });\n },\n updateItemsView = function() {\n //can be optimized later on to avoid cycling through all sections to generate stylesheet\n // adding and subtracting 5 pixels for flexibility on non-integer scrollLeft\n if (itemsView) {\n var leftNumber = Math.ceil((overflowContainer.scrollLeft - 5) / childrenWidth) + 1;\n var rightNumber = Math.floor((overflowContainer.scrollLeft + overflowContainer.offsetWidth + 5) / childrenWidth);\n each(itemsView, function(view){\n view.innerHTML = \"\" + (leftNumber) + (leftNumber < rightNumber ? \" - \" + (Math.min(rightNumber, productStacks.length)) : \"\") + \" of \"+ productStacks.length +\"\";\n });\n uicoreCustomEvent(\"ProductStack\", \"ChangeEvent\", element, {\"left\": leftNumber, \"right\": rightNumber, \"totalItems\": productStacks.length});\n if(leftNumber <= 1){\n each(leftCtrls, function(leftCtrl){\n leftCtrl.setAttribute(\"disabled\", \"\");\n });\n } else {\n each(leftCtrls, function(leftCtrl){\n leftCtrl.removeAttribute(\"disabled\");\n });\n }\n if (rightNumber >= productStacks.length) {\n each(rightCtrls, function(rightCtrl){\n rightCtrl.setAttribute(\"disabled\", \"\");\n });\n } else {\n each(rightCtrls, function(rightCtrl){\n rightCtrl.removeAttribute(\"disabled\");\n });\n }\n if(rightCtrls[0].disabled && leftCtrls[0].disabled){\n each(rightCtrls, function(rightCtrl){\n rightCtrl.style.display = \"none\";\n });\n each(leftCtrls, function(leftCtrl){\n leftCtrl.style.display = \"none\";\n });\n each(itemsView, function(viewDiv){\n viewDiv.style.display = \"none\";\n });\n } else{\n each(rightCtrls, function(rightCtrl){\n rightCtrl.style.display = \"block\";\n });\n each(leftCtrls, function(leftCtrl){\n leftCtrl.style.display = \"block\";\n });\n each(itemsView, function(viewDiv){\n viewDiv.style.display = \"block\";\n });\n }\n }\n };\n\n\n this.lazyLoad = function() {\n if (options.lazyload) {\n updateSectionHeights();\n updateItemsView();\n uicoreCustomEvent(\"ProductStack\", \"LazyLoadEvent\", element, {\"success\": true});\n }\n else {\n uicoreCustomEvent(\"ProductStack\", \"LazyLoadEvent\", element, {\"success\": false, \"msg\": \"Carousel cannot be lazy loaded. Check usage or avoid mulitple lazy loads.\"});\n }\n };\n\n // prevent adding event handlers twice\n if (!(stringProductStack in element)) {\n productStackID = element.id ? element.id : \"product-stack\";\n var style = createElement(\"style\");\n style.type = \"text/css\";\n element.insertBefore(style, element.firstElementChild);\n productStacks = element.querySelectorAll(\"UL.\" + prefix + \"product-stack\");\n each(productStacks, function(productStack) {\n productStack.sections = [];\n var i = 0;\n each(productStack.children, function(section) {\n if (section.tagName ==\"LI\") {\n section.classList.add(prefix + \"ps-row-\"+ i++);\n productStack.sections.push(section);\n }\n });\n });\n itemsView = element.parentElement.querySelectorAll(\"DIV.\" + prefix + \"items-view\");\n overflowContainer = element.querySelector(\".\" + prefix + \"product-stack-wrapper\");\n overflowContainer.addEventListener(\"scroll\", debounce(function() {\n if (overflowContainer.scrollLeft != currentOffset) {\n updateItemsView();\n currentOffset = overflowContainer.scrollLeft;\n }\n }), 15);\n window.addEventListener(\"load\", updateSectionHeights, false);\n window.addEventListener(\"resize\", debounce(resizeHandler, 15));\n childrenWidth = element.querySelector(\".\" + prefix + \"product-stack\").parentElement.offsetWidth;\n rightCtrls = element.querySelectorAll(\"[data-toggle='\" + prefix + \"product-stack-control-right']\");\n each(rightCtrls, function(rightCtrl){\n rightCtrl.addEventListener(\"click\", controlClick, true);\n });\n leftCtrls = element.querySelectorAll(\"[data-toggle='\" + prefix + \"product-stack-control-left']\");\n each(leftCtrls, function(leftCtrl){\n leftCtrl.addEventListener(\"click\", controlClick, true);\n leftCtrl.setAttribute(\"disabled\", \"\");\n });\n if (isEdge) {\n rightCtrls[0].addEventListener(\"keydown\", function(e){\n setTimeout(function(){\n if ((e.keyCode == 13 || e.keyCode == 32) && rightCtrls[0].disabled) {\n e.preventDefault();\n leftCtrls[0].focus();\n }\n }, 100);\n }, false);\n leftCtrls[0].addEventListener(\"keydown\", function(e){\n setTimeout(function(){\n if ((e.keyCode == 13 || e.keyCode == 32) && leftCtrls[0].disabled) {\n e.preventDefault();\n rightCtrls[0].focus();\n }\n }, 100);\n }, false);\n leftCtrls[1].addEventListener(\"keydown\", function(e){\n setTimeout(function(){\n if ((e.keyCode == 13 || e.keyCode == 32) && leftCtrls[1].disabled) {\n e.preventDefault();\n rightCtrls[1].focus();\n }\n }, 100);\n }, false);\n rightCtrls[1].addEventListener(\"keydown\", function(e){\n setTimeout(function(){\n if ((e.keyCode == 13 || e.keyCode == 32) && rightCtrls[1].disabled) {\n e.preventDefault();\n leftCtrls[1].focus();\n }\n }, 100);\n }, false);\n }\n currentOffset = overflowContainer.scrollLeft;\n updateItemsView();\n }\n\n element[stringProductStack] = self;\n}\n","import { validateNum, jsonOptionsInit } from \"./utilities\";\n\nexport default function Progress(element, options) {\n element = element instanceof HTMLElement ? element : (function () {\n return false;\n })();\n\n // set options\n options = options || {};\n options = jsonOptionsInit(element, options);\n options.showText = element.dataset.showtext ? element.dataset.showtext == \"true\" ? true : false : options.showtext == \"true\" ? true : false;\n options.timeToComplete = element.dataset.timeToComplete ? validateNum(element.dataset.timeToComplete, 10000) : validateNum(options.timeToComplete, 10000);\n\n\n // this defines how chunky you want the increment block to be the smaller the increment, the smoother it is,\n // however, it will impact minimum time to complete depending on client's machine's performance\n var increment = 0.25,\n timeToComplete = options.timeToComplete,\n millisecondPerTick = timeToComplete / (100.0 / increment),\n width = 0,\n id,\n stringProgress = \"Progress\",\n frame = function() {\n if (width < 100.0) {\n width += increment;\n element.style.width = width + \"%\";\n element.setAttribute(\"aria-valuenow\", Math.round(width));\n } else {\n element.style.width = \"100%\";\n clearInterval(id);\n }\n if (options.showText) {\n element.innerHTML = width < 100 ? Math.round(width) + \"%\" : \"100%\";\n }\n };\n\n // init\n if (!(stringProgress in element)) {\n setInterval(frame, millisecondPerTick);\n }\n\n element[stringProgress] = self;\n}\n","import { uicoreCustomEvent, prefix, DOC, offWindowLeft, createElement, isIE, isArray, each } from \"./utilities\";\n\nexport default function Slider(element, optionsInput) {\n element = element instanceof HTMLElement ? element : (function() {\n return false;\n })();\n\n var isJson = false,\n jsonParams = element.dataset.slider;\n if (jsonParams) {\n optionsInput = JSON.parse(jsonParams);\n isJson = true;\n }\n var options = optionsInput || {};\n \n\n // User supplied\n options.animate = typeof options.animate == \"boolean\" ? options.animate : true;\n options.animationDuration = typeof options.animationDuration == \"number\" ? options.animationDuration : 300;\n options.ort = options.orientation ? options.orientation === \"vertical\" ? 1 : 0 : 0;\n options.dir = options.direction ? options.direction === \"rtl\" ? 1 : 0 : options.ort == 1 ? 1 : 0;\n options.singleStep = typeof options.step == \"number\" ? options.step : undefined;\n options.percision = typeof options.percision == \"number\" ? options.percision > 2 ? 2 : options.percision : 0;\n // User supplied but heeds more calculations at see validateOptions\n options.behaviour = options.behaviour ? options.behaviour : \"tap\";\n options.margin = typeof options.margin == \"number\" ? options.margin : 1;\n options.limit = typeof options.limit == \"number\" ? options.limit : 0;\n options.padding = options.padding ? options.padding : 0;\n options.tooltips = typeof options.tooltips == \"boolean\" ? options.tooltips : true;\n options.content = typeof options.content == \"string\" ? options.content : false;\n options.showRange = typeof options.showRange == \"boolean\" ? options.showRange : false;\n // Formats at see validateOptions\n options.format = typeof options.format == \"object\" ? options.format : undefined;\n options.ariaFormat = typeof options.ariaFormat == \"object\" ? options.ariaFormat : undefined;\n\n var stringSlider = \"Slider\",\n slider, \n container,\n spectrum,\n optEvents = {},\n events = {},\n connects,\n handles,\n handleNumbers,\n sliderBase,\n parsed,\n actions,\n supportsPassive = isIE ? false : true,\n locations = [],\n values = [],\n tooltips,\n activeHandlesCount = 0,\n minContainers = [],\n maxContainers = [],\n // For horizontal sliders in standard ltr documents,\n // make .dds__slider-origin overflow to the left so the document doesn't scroll.\n dirOffset = options.dir == 1 || options.ort == 1 ? 0 : 100,\n msPrefix = element.style.msTransform !== undefined,\n noPrefix = element.style.transform !== undefined,\n transformRule = noPrefix ? \"transform\" : msPrefix ? \"msTransform\" : \"webkitTransform\",\n // Default formatter uses numbers only and supplies percision/decimal places\n defaultFormatter = { to: function(value) { return value !== undefined && value.toFixed(options.percision); }, from: Number },\n // Validation\n validateMargin = function(entry) {\n if (options.margin === 0) {\n return;\n }\n \n options.margin = spectrum.getMargin(entry);\n \n if (!options.margin) {\n throw new Error(\"Slider 'margin' option is only supported on linear sliders.\");\n }\n },\n validateOptions = function() {\n // Range always first initiates Spectrum\n if (options.range) {\n // Filter incorrect input.\n if (typeof options.range !== \"object\" || isArray(options.range)) {\n throw new Error(\"Slider 'range' is not an object.\");\n }\n\n // Update if only one handle\n if (options.range.min === undefined) {\n options.range.min = 0;\n }\n\n // Catch missing end.\n if (options.range.max === undefined) {\n throw new Error(\"Slider Missing 'max' in 'range'.\");\n }\n\n // Catch equal start or end.\n if (options.range.min === options.range.max) {\n throw new Error(\"Slider 'range' 'min' and 'max' cannot be equal.\");\n }\n\n spectrum = new Spectrum(options.range, options.snap, options.singleStep);\n } else {\n throw new RangeError(\"There was a problem found with the range option values, please correct and try again!\");\n }\n // Start\n if (options.start) {\n var entry = asArray(options.start);\n\n // Validate input. Values aren't tested, as the public .val method\n // will always provide a valid location.\n if (!Array.isArray(entry) || !entry.length) {\n throw new Error(\"Slider 'start' option is incorrect.\");\n }\n\n // Store the number of handles.\n options.handles = entry.length;\n\n // When the slider is initialized, the .val method will\n // be called with the start options.\n options.start = entry;\n } else {\n if (options.range.min && options.range.max) {\n options.start = [options.range.min,options.range.max];\n options.handles = 2;\n } else {\n options.start = options.range.max;\n options.handles = 1;\n }\n }\n // Events\n if (options.behaviour) {\n // Make sure the input is a string.\n if (typeof options.behaviour !== \"string\") {\n throw new Error(\"Slider 'behaviour' must be a string containing options.\");\n }\n\n // Check if the string contains any keywords.\n // None are required.\n var tap = options.behaviour.indexOf(\"tap\") >= 0;\n var drag = options.behaviour.indexOf(\"drag\") >= 0;\n var fixed = options.behaviour.indexOf(\"fixed\") >= 0;\n var snap = options.behaviour.indexOf(\"snap\") >= 0;\n var hover = options.behaviour.indexOf(\"hover\") >= 0;\n var unconstrained = options.behaviour.indexOf(\"unconstrained\") >= 0;\n\n if (fixed) {\n if (parsed.handles !== 2) {\n throw new Error(\"Slider 'fixed' behaviour must be used with 2 handles\");\n }\n\n // Use margin to enforce fixed state\n validateMargin(options.start[1] - options.start[0]);\n }\n\n if (unconstrained && (parsed.margin || parsed.limit)) {\n throw new Error(\n \"Slider 'unconstrained' behaviour cannot be used with margin or limit\"\n );\n }\n\n optEvents = {\n tap: tap || snap,\n drag: drag,\n fixed: fixed,\n snap: snap,\n hover: hover,\n unconstrained: unconstrained\n };\n }\n // Margin\n if (optEvents.fixed == 0) { // at see validateBehaviour\n validateMargin(options.margin);\n }\n // Limit\n options.limit = spectrum.getMargin(options.limit);\n // Padding\n if (options.padding) {\n if (typeof options.padding == \"number\" && !Array.isArray(options.padding)) {\n throw new Error(\n \"Slider 'padding' option must be numeric or array of exactly 2 numbers.\"\n );\n }\n \n if (Array.isArray(options.padding) \n && !( options.padding.length == 2 \n || typeof options.padding[0] != \"number\" \n || typeof options.padding[1] != \"number\"\n )\n )\n {\n throw new Error(\n \"Slider 'padding' option must be numeric or array of exactly 2 numbers.\"\n );\n }\n \n if (options.padding === 0) {\n return;\n }\n \n if (!Array.isArray(options.padding)) {\n options.padding = [options.padding];\n }\n \n // 'getMargin' returns false for invalid values.\n options.padding = [spectrum.getMargin(options.padding[0]), spectrum.getMargin(options.padding[1])];\n \n if (options.padding[0] === false || options.padding[1] === false) {\n throw new Error(\"Slider 'padding' option is only supported on linear sliders.\");\n }\n \n if (options.padding[0] < 0 || options.padding[1] < 0) {\n throw new Error(\"Slider 'padding' option must be a positive number(s).\");\n }\n \n if (options.padding[0] + options.padding[1] > 100) {\n throw new Error(\"Slider 'padding' option must not exceed 100% of the range.\");\n }\n }\n // Tooltips\n if (options.tooltips) {\n var tooltips;\n if (options.tooltips === false) {\n return;\n }\n \n if (options.tooltips === true) {\n tooltips = [];\n \n for (var i = 0; i < options.handles; i++) {\n tooltips.push(true);\n }\n } else {\n tooltips = asArray(options.tooltips);\n \n if (tooltips.length !== handles) {\n throw new Error(\"Slider must pass a formatter for all handles.\");\n }\n \n tooltips.forEach(function(formatter) {\n if (\n typeof formatter !== \"boolean\" &&\n (typeof formatter !== \"object\" || typeof formatter.to !== \"function\")\n ) {\n throw new Error(\"Slider 'tooltips' must be passed a formatter or 'false'.\");\n }\n });\n }\n options.tooltips = tooltips;\n }\n // Formats\n if (!options.format) {\n if (isJson) {\n var inputs = JSON.parse(jsonParams);\n if (inputs.format) {\n var testJs;\n if (inputs.format.indexOf(\"(\") > -1) {\n testJs = inputs.format.substring(0, inputs.format.indexOf(\"(\")).trim();\n } else {\n testJs = inputs.format;\n }\n if (!window[testJs]) {\n throw new Error(\"The supplied format function \"+inputs.format+\" could not be accessed, please verify and try again!\");\n } else {\n options.format = window[testJs];\n }\n } else {\n options.format = defaultFormatter;\n }\n } else {\n options.format = defaultFormatter;\n }\n }\n if (!options.ariaFormat) {\n if (isJson) {\n inputs = JSON.parse(jsonParams);\n if (inputs.ariaFormat) {\n if (inputs.ariaFormat.indexOf(\"(\") > -1) {\n testJs = inputs.ariaFormat.substring(0, inputs.ariaFormat.indexOf(\"(\")).trim();\n } else {\n testJs = inputs.ariaFormat;\n }\n if (!window[testJs]) {\n throw new Error(\"The supplied format function \"+inputs.ariaFormat+\" could not be accessed, please verify and try again!\");\n } else {\n options.ariaFormat = window[testJs];\n }\n } else {\n options.ariaFormat = options.format;\n }\n } else {\n options.ariaFormat = options.format;\n }\n }\n if (options.format) {\n if (!options.format.to || !options.format.from) {\n throw new Error(\"The supplied format function \"+options.format+\" is missing required method to or from, please verify and try again!\");\n }\n }\n if (options.ariaFormat) {\n if (!options.ariaFormat.to || !options.ariaFormat.from) {\n throw new Error(\"The supplied format function \"+options.format+\" is missing required method to or from, please verify and try again!\");\n }\n }\n },\n // Event Handlers\n endEventHandler = function() {\n var data = get();\n if (!Array.isArray(data)) {\n data = asArray(data);\n }\n for (var d = 0; d < data.length; d++) {\n data[d] = typeof data[d] == \"string\" ? data[d] : options.format.to(data[d]);\n }\n var containers = null;\n if (handles.length == 1) {\n containers = maxContainers;\n } else {\n containers = minContainers;\n }\n \n for (var c = 0; containers.length > c; c++) {\n containers[c].innerHTML = data[0];\n }\n if (handles.length > 1) {\n for (var max = 0; maxContainers.length > max; max++) {\n maxContainers[max].innerHTML = data[1];\n }\n }\n var details = {};\n if (data[1]) {\n details.min = data[0];\n details.max = data[1];\n } else {\n details.value = data[0];\n }\n uicoreCustomEvent(\"Slider\", \"SlideEnd\", element, details);\n },\n focusEventHandler = function(e) {\n e[\"currentTarget\"].classList.add(prefix + \"slider-active\");\n },\n blurEventHandler = function(e) {\n e[\"currentTarget\"].classList.remove(prefix + \"slider-active\");\n },\n \n // Handles keydown on focused handles\n // Don't move the document when pressing arrow keys on focused handles\n eventKeydown = function(event, handleNumber) {\n if (isSliderDisabled() || isHandleDisabled(handleNumber)) {\n return false;\n }\n\n var horizontalKeys = [\"Left\", \"Right\"];\n var verticalKeys = [\"Down\", \"Up\"];\n var largeStepKeys = [\"PageDown\", \"PageUp\"];\n var edgeKeys = [\"Home\", \"End\"];\n\n if (options.dir && !options.ort) {\n // On an right-to-left slider, the left and right keys act inverted\n horizontalKeys.reverse();\n } else if (options.ort && !options.dir) {\n // On a top-to-bottom slider, the up and down keys act inverted\n verticalKeys.reverse();\n largeStepKeys.reverse();\n }\n\n // Strip \"Arrow\" for IE compatibility. https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n var key = event.key.replace(\"Arrow\", \"\");\n\n var isLargeDown = key === largeStepKeys[0];\n var isLargeUp = key === largeStepKeys[1];\n var isDown = key === verticalKeys[0] || key === horizontalKeys[0] || isLargeDown;\n var isUp = key === verticalKeys[1] || key === horizontalKeys[1] || isLargeUp;\n var isMin = key === edgeKeys[0];\n var isMax = key === edgeKeys[1];\n\n if (!isDown && !isUp && !isMin && !isMax) {\n return true;\n }\n\n event.preventDefault();\n\n var to;\n\n if (isUp || isDown) {\n var multiplier = 5;\n var direction = isDown ? 0 : 1;\n var steps = getNextStepsForHandle(handleNumber);\n var step = steps[direction];\n\n // At the edge of a slider, do nothing\n if (step === null) {\n return false;\n }\n\n // No step set, use the default of 10% of the sub-range\n if (step === false) {\n step = Spectrum.getDefaultStep(locations[handleNumber], isDown, 10);\n }\n\n if (isLargeUp || isLargeDown) {\n step *= multiplier;\n }\n\n // Step over zero-length ranges (#948);\n step = Math.max(step, 0.0000001);\n\n // Decrement for down steps\n step = (isDown ? -1 : 1) * step;\n\n to = values[handleNumber] + step;\n } else if (isMax) {\n // End key\n to = options.spectrum.xVal[options.spectrum.xVal.length - 1];\n } else {\n // Home key\n to = options.spectrum.xVal[0];\n }\n\n setHandle(handleNumber, spectrum.toStepping(to), true, true);\n\n fireEvent(\"slide\", handleNumber);\n fireEvent(\"update\", handleNumber);\n fireEvent(\"change\", handleNumber);\n fireEvent(\"set\", handleNumber);\n\n return false;\n },\n getNextStepsForHandle = function(handleNumber) {\n var location = locations[handleNumber];\n var nearbySteps = spectrum.getNearbySteps(location);\n var value = values[handleNumber];\n var increment = nearbySteps.thisStep.step;\n var decrement = null;\n\n // If snapped, directly use defined step value\n if (options.snap) {\n return [\n value - nearbySteps.stepBefore.startValue || null,\n nearbySteps.stepAfter.startValue - value || null\n ];\n }\n\n // If the next value in this step moves into the next step,\n // the increment is the start of the next step - the current value\n if (increment !== false) {\n if (value + increment > nearbySteps.stepAfter.startValue) {\n increment = nearbySteps.stepAfter.startValue - value;\n }\n }\n\n // If the value is beyond the starting point\n if (value > nearbySteps.thisStep.startValue) {\n decrement = nearbySteps.thisStep.step;\n } else if (nearbySteps.stepBefore.step === false) {\n decrement = false;\n }\n\n // If a handle is at the start of a step, it always steps back into the previous step first\n else {\n decrement = value - nearbySteps.stepBefore.highestStep;\n }\n\n // Now, if at the slider edges, there is no in/decrement\n if (location === 100) {\n increment = null;\n } else if (location === 0) {\n decrement = null;\n }\n\n // As per #391, the comparison for the decrement step can have some rounding issues.\n var stepDecimals = spectrum.countStepDecimals();\n\n // Round per #391\n if (increment !== null && increment !== false) {\n increment = Number(increment.toFixed(stepDecimals));\n }\n\n if (decrement !== null && decrement !== false) {\n decrement = Number(decrement.toFixed(stepDecimals));\n }\n\n return [decrement, increment];\n },\n // Attach events to several slider parts.\n bindSliderEvents = function(behaviour) {\n // Attach the standard drag event to the handles.\n if (!behaviour.fixed) {\n handles.forEach(function(handle, index) {\n // These events are only bound to the visual handle\n // element, not the 'real' origin element.\n attachEvent(actions.start, handle.children[0], eventStart, {\n handleNumbers: [index]\n });\n });\n }\n\n // Attach the tap event to the slider base.\n if (behaviour.tap) {\n attachEvent(actions.start, sliderBase, eventTap, {});\n }\n\n // Fire hover events\n if (behaviour.hover) {\n // attachEvent(actions.move, sliderBase, eventHover, {\n // hover: true\n // });\n }\n\n // Make the range draggable.\n if (behaviour.drag) {\n connects.forEach(function(connect, index) {\n if (connect === false || index === 0 || index === connects.length - 1) {\n return;\n }\n\n var handleBefore = handles[index - 1];\n var handleAfter = handles[index];\n var eventHolders = [connect];\n\n connect.classList.add(prefix + \"slider-draggable\");\n\n // When the range is fixed, the entire range can\n // be dragged by the handles. The handle in the first\n // origin will propagate the start event upward,\n // but it needs to be bound manually on the other.\n if (behaviour.fixed) {\n eventHolders.push(handleBefore.children[0]);\n eventHolders.push(handleAfter.children[0]);\n }\n\n eventHolders.forEach(function(eventHolder) {\n attachEvent(actions.start, eventHolder, eventStart, {\n handles: [handleBefore, handleAfter],\n handleNumbers: [index - 1, index]\n });\n });\n });\n }\n },\n // Attach an event to this slider, possibly including a namespace\n bindEvent = function(namespacedEvent, callback) {\n events[namespacedEvent] = events[namespacedEvent] || [];\n events[namespacedEvent].push(callback);\n\n // If the event bound is 'update,' fire it immediately for all handles.\n if (namespacedEvent.split(\".\")[0] === \"update\") {\n handles.forEach(function(a, index) {\n fireEvent(\"update\", index);\n });\n }\n },\n // Helpers\n addNodeTo = function(addTarget, className) {\n var div = createElement(\"div\", {\n class: className ? className : \"\"\n });\n\n addTarget.appendChild(div);\n\n return div;\n },\n // Round a value to the closest 'to'.\n closest = function(value, to) {\n return Math.round(value / to) * to;\n },\n // Current position of an element relative to the document.\n offset = function(elem, orientation) {\n var rect = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var docElem = doc.documentElement;\n var pageOffset = getPageOffset(doc);\n\n // getBoundingClientRect contains left scroll in Chrome on Android.\n // I haven't found a feature detection that proves this. Worst case\n // scenario on mis-match: the 'tap' feature on horizontal sliders breaks.\n if (/webkit.*Chrome.*Mobile/i.test(navigator.userAgent)) {\n pageOffset.x = 0;\n }\n return orientation\n ? rect.top + pageOffset.y - docElem.clientTop\n : rect.left + pageOffset.x - docElem.clientLeft;\n },\n // Fire 'end' when a mouse or pen leaves the document.\n documentLeave = function(event, data) {\n if (event.type === \"mouseout\" && event.target.nodeName === \"HTML\" && event.relatedTarget === null) {\n eventEnd(event, data);\n }\n },\n // Handle movement on document for handle and range drag.\n eventMove = function(event, data) {\n // Check if we are moving up or down\n var movement = (options.dir ? -1 : 1) * (event.calcPoint - data.startCalcPoint);\n\n // Convert the movement into a percentage of the slider width/height\n var proposal = (movement * 100) / data.baseSize;\n\n moveHandles(movement > 0, proposal, data.locations, data.handleNumbers);\n },\n // Unbind move events on document, call callbacks.\n eventEnd = function(event, data) {\n // The handle is no longer active, so remove the class.\n if (data.handle) {\n data.handle.classList.remove(prefix + \"slider-active\");\n activeHandlesCount -= 1;\n }\n\n // Unbind the move and end events, which are added on 'start'.\n data.listeners.forEach(function(c) {\n DOC.removeEventListener(c[0], c[1]);\n });\n\n if (activeHandlesCount === 0) {\n // Remove dragging class.\n slider.classList.remove(prefix + \"slider-drag\");\n setZindex();\n\n // Remove cursor styles and text-selection events bound to the element.\n if (event.cursor) {\n element.style.cursor = \"\";\n }\n }\n\n data.handleNumbers.forEach(function(handleNumber) {\n fireEvent(\"change\", handleNumber);\n fireEvent(\"set\", handleNumber);\n fireEvent(\"end\", handleNumber);\n });\n },\n // Bind move events on document.\n eventStart = function(event, data) {\n // Ignore event if any handle is disabled\n if (data.handleNumbers.some(isHandleDisabled)) {\n return false;\n }\n\n var handle;\n\n if (data.handleNumbers.length === 1) {\n var handleOrigin = handles[data.handleNumbers[0]];\n\n handle = handleOrigin.children[0];\n activeHandlesCount += 1;\n\n // Mark the handle as 'active' so it can be styled.\n handle.classList.add(prefix + \"slider-active\");\n }\n\n // A drag should never propagate up to the 'tap' event.\n event.stopPropagation();\n\n // Record the event listeners.\n var listeners = [];\n\n // Attach the move and end events.\n var moveEvent = attachEvent(actions.move, DOC, eventMove, {\n // The event target has changed so we need to propagate the original one so that we keep\n // relying on it to extract target touches.\n target: event.target,\n handle: handle,\n listeners: listeners,\n startCalcPoint: event.calcPoint,\n baseSize: baseSize(),\n pageOffset: event.pageOffset,\n handleNumbers: data.handleNumbers,\n buttonsProperty: event.buttons,\n locations: locations.slice()\n });\n\n var endEvent = attachEvent(actions.end, DOC, eventEnd, {\n target: event.target,\n handle: handle,\n listeners: listeners,\n doNotReject: true,\n handleNumbers: data.handleNumbers\n });\n\n var outEvent = attachEvent(\"mouseout\", DOC, documentLeave, {\n target: event.target,\n handle: handle,\n listeners: listeners,\n doNotReject: true,\n handleNumbers: data.handleNumbers\n });\n\n // We want to make sure we pushed the listeners in the listener list rather than creating\n // a new one as it has already been passed to the event handlers.\n listeners.push.apply(listeners, moveEvent.concat(endEvent, outEvent));\n\n // Text selection isn't an issue on touch devices,\n // so adding cursor styles can be skipped.\n if (event.cursor) {\n // Prevent the 'I' cursor and extend the range-drag cursor.\n element.style.cursor = getComputedStyle(event.target).cursor;\n\n // Mark the target with a dragging state.\n if (handles.length > 1) {\n slider.classList.add(prefix + \"slider-drag\");\n }\n }\n\n data.handleNumbers.forEach(function(handleNumber) {\n fireEvent(\"start\", handleNumber);\n });\n },\n // Move closest handle to tapped location.\n eventTap = function(event) {\n // The tap event shouldn't propagate up\n event.stopPropagation();\n\n var proposal = calcPointToPercentage(event.calcPoint);\n var handleNumber = getClosestHandle(proposal);\n\n // Tackle the case that all handles are 'disabled'.\n if (handleNumber === false) {\n return false;\n }\n\n // Flag the slider as it is now in a transitional state.\n // Transition takes a configurable amount of ms (default 300). Re-enable the slider after that.\n if (!events.snap) {\n addClassFor(slider, prefix +\"slider-tap\", options.animationDuration);\n }\n\n setHandle(handleNumber, proposal, true, true);\n\n setZindex();\n\n fireEvent(\"slide\", handleNumber, true);\n fireEvent(\"update\", handleNumber, true);\n fireEvent(\"change\", handleNumber, true);\n fireEvent(\"set\", handleNumber, true);\n\n if (events.snap) {\n eventStart(event, { handleNumbers: [handleNumber] });\n }\n },\n\n addTooltip = function(handle, handleNumber) {\n if (!options.tooltips[handleNumber]) {\n return false;\n }\n\n return addNodeTo(handle.firstChild, prefix + \"slider-tooltip\");\n },\n isSliderDisabled = function() {\n return slider.hasAttribute(\"disabled\");\n },\n // Disable the slider dragging if any handle is disabled\n isHandleDisabled = function(handleNumber) {\n var handleOrigin = handles[handleNumber];\n return handleOrigin.hasAttribute(\"disabled\");\n },\n // Append a origin to the base\n addOrigin = function(handleNumber) {\n var origin = addNodeTo(sliderBase, prefix + \"slider-origin\");\n var handle = addNodeTo(origin, prefix + \"slider-handle\");\n \n addNodeTo(handle, prefix + \"slider-touch-area\");\n \n handle.setAttribute(\"data-handle\", handleNumber);\n \n // keyboard support\n handle.setAttribute(\"tabindex\", \"0\");\n handle.addEventListener(\"keydown\", function(event) {\n return eventKeydown(event, handleNumber);\n });\n \n handle.setAttribute(\"role\", \"slider\");\n handle.setAttribute(\"aria-orientation\", options.ort ? \"vertical\" : \"horizontal\");\n \n if (options.handles == 1) {\n handle.classList.add(prefix + \"slider-handle-upper\");\n } else if (handleNumber === 0) {\n handle.classList.add(prefix + \"slider-handle-lower\");\n } else {\n handle.classList.add(prefix + \"slider-handle-upper\");\n }\n \n return origin;\n },\n // nsert nodes for connect elements\n addConnect = function(base, add) {\n if (!add) {\n return false;\n }\n \n return addNodeTo(base, prefix + \"slider-connect\");\n },\n addLabels = function() {\n var min, max, minLabel, maxLabel;\n var minValue = options.format.to(options.range.min);\n var maxValue = options.format.to(options.range.max);\n if (handles.length == 1) {\n max = createElement(\"div\", {\n class: prefix + \"slider-max\"\n });\n maxLabel = addNodeTo(max);\n maxLabel.innerHTML = maxValue;\n maxContainers.push(maxLabel);\n } else {\n min = createElement(\"div\", {\n class: prefix + \"slider-min\"\n });\n minLabel = addNodeTo(min);\n minLabel.innerHTML = minValue;\n minContainers.push(minLabel);\n max = createElement(\"div\", {\n class: prefix + \"slider-max\"\n });\n maxLabel = addNodeTo(max);\n maxLabel.innerHTML = maxValue;\n maxContainers.push(maxLabel);\n }\n if (options.ort === 0) {\n if (min) { container.insertBefore(min, container.childNodes[0]); }\n container.appendChild(max);\n } else {\n if (min) { container.appendChild(min); }\n container.insertBefore(max, container.childNodes[0]);\n }\n },\n addContent = function() {\n var label = createElement(\"div\", {\n class: prefix + \"text-no-wrap \"+prefix+\"mb-3\" + (options.ort == 1 ? \" \"+prefix+\"d-flex \"+prefix+\"flex-column \"+prefix+\"align-items-center\" : \"\")\n });\n var text = DOC.createTextNode(options.content);\n label.appendChild(text);\n element.insertBefore(label, element.firstChild);\n if (options.showRange) {\n var span = createElement(\"span\", {\n html: \" ( \" + options.format.to(options.range.min) + \" - \" + options.format.to(options.range.max) + \" )\"\n });\n label.appendChild(span);\n }\n },\n addContainer = function() {\n container = element.querySelector(\".\" + prefix + \"slider-container\");\n \n // if vertical add class to parent\n if(options.ort == 1) {\n container.classList.add(prefix + \"slider-container-vertical\");\n }\n \n // update wrapper to singe with one handle\n if (options.handles == 1) {\n var wrapper = container.querySelector(\".\" + prefix + \"slider-wrapper\");\n wrapper.classList.remove(prefix + \"slider-wrapper\");\n wrapper.classList.add(prefix + \"slider-wrapper-single\");\n }\n },\n addElements = function() {\n\n var connectBase = addNodeTo(sliderBase, prefix + \"slider-connects\");\n\n handles = [];\n connects = [];\n handleNumbers = [];\n var optConnects;\n\n if (options.handles === 1) {\n optConnects = [true,false];\n } else {\n optConnects = [false,options.range,false];\n }\n connects.push(addConnect(connectBase, optConnects[0]));\n\n for (var i = 0; i < options.handles; i++) {\n // Keep a list of all added handles.\n handles.push(addOrigin(i));\n handleNumbers[i] = i;\n connects.push(addConnect(connectBase, optConnects[i + 1]));\n }\n },\n // Initialize a single slider.\n addSlider = function() {\n\n if (options.dir === 0) {\n slider.classList.add(prefix + \"slider-ltr\");\n } else {\n slider.classList.add(prefix + \"slider-rtl\");\n }\n\n if (options.ort === 0) {\n slider.classList.add(prefix + \"slider-horizontal\");\n } else {\n slider.classList.add(prefix + \"slider-vertical\");\n }\n\n var base = addNodeTo(slider, prefix + \"slider-base\");\n base.setAttribute(\"tabindex\", \"0\");\n base.setAttribute(\"aria-label\", (options.content ? options.content : \"Slider\") + \" \" + options.format.to(options.range.min) + \" to \" + options.format.to(options.range.max));\n \n return base;\n },\n valueSet = function(input, fireSetEvent) {\n var values = asArray(input);\n var isInit = locations[0] === undefined;\n\n // Event fires by default\n fireSetEvent = fireSetEvent === undefined ? true : !!fireSetEvent;\n\n // Animation is optional.\n // Make sure the initial values were set before using animated placement.\n if (options.animate && !isInit) {\n addClassFor(slider, prefix + \"slider-tap\", options.animationDuration);\n }\n\n // First pass, without lookAhead but with lookBackward. Values are set from left to right.\n handleNumbers.forEach(function(handleNumber) {\n setHandle(handleNumber, resolveToValue(values[handleNumber], handleNumber), true, false);\n });\n\n // Second pass. Now that all base values are set, apply constraints\n handleNumbers.forEach(function(handleNumber) {\n setHandle(handleNumber, locations[handleNumber], true, true);\n });\n\n setZindex();\n\n handleNumbers.forEach(function(handleNumber) {\n fireEvent(\"update\", handleNumber);\n\n // Fire the event only for handles that received a new value, as per #579\n if (values[handleNumber] !== null && fireSetEvent) {\n fireEvent(\"set\", handleNumber);\n }\n });\n },\n\n asArray = function(a) {\n return Array.isArray(a) ? a : [a];\n },\n addClassFor = function(element, className, duration) {\n if (duration > 0) {\n element.classList.add(className);\n setTimeout(function() {\n element.classList.remove(className);\n }, duration);\n }\n },\n // Counts decimals\n countDecimals = function(numStr) {\n numStr = String(numStr);\n var pieces = numStr.split(\".\");\n return pieces.length > 1 ? pieces[1].length : 0;\n },\n // Limits a value to 0 - 100\n limit = function(a) {\n return Math.max(Math.min(a, 100), 0);\n },\n // Moves handle(s) by a percentage\n // (bool, % to move, [% where handle started, ...], [index in handles, ...])\n moveHandles = function(upward, proposal, locations, handleNumbers) {\n var proposals = locations.slice();\n\n var b = [!upward, upward];\n var f = [upward, !upward];\n\n // Copy handleNumbers so we don't change the dataset\n handleNumbers = handleNumbers.slice();\n\n // Check to see which handle is 'leading'.\n // If that one can't move the second can't either.\n if (upward) {\n handleNumbers.reverse();\n }\n\n // Step 1: get the maximum percentage that any of the handles can move\n if (handleNumbers.length > 1) {\n handleNumbers.forEach(function(handleNumber, o) {\n var to = checkHandlePosition(\n proposals,\n handleNumber,\n proposals[handleNumber] + proposal,\n b[o],\n f[o],\n false\n );\n\n // Stop if one of the handles can't move.\n if (to === false) {\n proposal = 0;\n } else {\n proposal = to - proposals[handleNumber];\n proposals[handleNumber] = to;\n }\n });\n }\n\n // If using one handle, check backward AND forward\n else {\n b = f = [true];\n }\n\n var state = false;\n\n // Step 2: Try to set the handles with the found percentage\n handleNumbers.forEach(function(handleNumber, o) {\n state = setHandle(handleNumber, locations[handleNumber] + proposal, b[o], f[o]) || state;\n });\n\n // Step 3: If a handle moved, fire events\n if (state) {\n handleNumbers.forEach(function(handleNumber) {\n fireEvent(\"update\", handleNumber);\n fireEvent(\"slide\", handleNumber);\n });\n }\n },\n // Takes a base value and an offset. This offset is used for the connect bar size.\n // In the initial design for this feature, the origin element was 1% wide.\n // Unfortunately, a rounding bug in Chrome makes it impossible to implement this feature\n // in this manner: https://bugs.chromium.org/p/chromium/issues/detail?id=798223\n transformDirection = function(a, b) {\n return options.dir ? 100 - a - b : a;\n },\n // Updates locations and values, updates visual state\n updateHandlePosition = function(handleNumber, to) {\n // Update locations.\n locations[handleNumber] = to;\n\n // Convert the value to the slider stepping/range.\n values[handleNumber] = spectrum.fromStepping(to);\n\n var rule = \"translate(\" + inRuleOrder(transformDirection(to, 0) - dirOffset + \"%\", \"0\") + \")\";\n handles[handleNumber].style[transformRule] = rule;\n\n updateConnect(handleNumber);\n updateConnect(handleNumber + 1);\n },\n // Test suggested values and apply margin, step.\n setHandle = function(handleNumber, to, lookBackward, lookForward) {\n to = checkHandlePosition(locations, handleNumber, to, lookBackward, lookForward, false);\n\n if (to === false) {\n return false;\n }\n\n updateHandlePosition(handleNumber, to);\n\n return true;\n },\n // Updates style attribute for connect nodes\n updateConnect = function(index) {\n // Skip connects set to false\n if (!connects[index]) {\n return;\n }\n\n var l = 0;\n var h = 100;\n\n if (index !== 0) {\n l = locations[index - 1];\n }\n\n if (index !== connects.length - 1) {\n h = locations[index];\n }\n\n // We use two rules:\n // 'translate' to change the left/top offset;\n // 'scale' to change the width of the element;\n // As the element has a width of 100%, a translation of 100% is equal to 100% of the parent (.noUi-base)\n var connectWidth = h - l;\n var translateRule = \"translate(\" + inRuleOrder(transformDirection(l, connectWidth) + \"%\", \"0\") + \")\";\n var scaleRule = \"scale(\" + inRuleOrder(connectWidth / 100, \"1\") + \")\";\n\n connects[index].style[transformRule] = translateRule + \" \" + scaleRule;\n },\n setZindex = function() {\n handleNumbers.forEach(function(handleNumber) {\n var dir = locations[handleNumber] > 50 ? -1 : 1;\n var zIndex = 3 + (handles.length + dir * handleNumber);\n handles[handleNumber].style.zIndex = zIndex;\n });\n },\n // Undo attachment of event\n removeEvent = function(namespacedEvent) {\n var event = namespacedEvent && namespacedEvent.split(\".\")[0];\n var namespace = event && namespacedEvent.substring(event.length);\n\n Object.keys(events).forEach(function(bind) {\n var tEvent = bind.split(\".\")[0];\n var tNamespace = bind.substring(tEvent.length);\n\n if ((!event || event === tEvent) && (!namespace || namespace === tNamespace)) {\n delete events[bind];\n }\n });\n },\n // External event handling\n fireEvent = function(eventName, handleNumber, tap) {\n Object.keys(events).forEach(function(targetEvent) {\n var eventType = targetEvent.split(\".\")[0];\n\n if (eventName === eventType) {\n events[targetEvent].forEach(function(callback) {\n callback.call(\n // Use the slider public API as the scope ('this')\n self,\n // Return values as array, so arg_1[arg_2] is always valid.\n values.map(options.format.to),\n // Handle index, 0 or 1\n handleNumber,\n // Un-formatted slider values\n values.slice(),\n // Event is fired by tap, true or false\n tap || false,\n // Left offset of the handle, in relation to the slider\n locations.slice()\n );\n });\n }\n });\n },\n // Split out the handle positioning logic so the Move event can use it, too\n checkHandlePosition = function(reference, handleNumber, to, lookBackward, lookForward, getValue) {\n // For sliders with multiple handles, limit movement to the other handle.\n // Apply the margin option by adding it to the handle positions.\n if (handles.length > 1 && !optEvents.unconstrained) {\n if (lookBackward && handleNumber > 0) {\n to = Math.max(to, reference[handleNumber - 1] + options.margin);\n }\n\n if (lookForward && handleNumber < handles.length - 1) {\n to = Math.min(to, reference[handleNumber + 1] - options.margin);\n }\n }\n\n // The limit option has the opposite effect, limiting handles to a\n // maximum distance from another. Limit must be > 0, as otherwise\n // handles would be unmovable.\n if (handles.length > 1 && options.limit) {\n if (lookBackward && handleNumber > 0) {\n to = Math.min(to, reference[handleNumber - 1] + options.limit);\n }\n\n if (lookForward && handleNumber < handles.length - 1) {\n to = Math.max(to, reference[handleNumber + 1] - options.limit);\n }\n }\n\n // The padding option keeps the handles a certain distance from the\n // edges of the slider. Padding must be > 0.\n if (options.padding) {\n if (handleNumber === 0) {\n to = Math.max(to, options.padding[0]);\n }\n\n if (handleNumber === handles.length - 1) {\n to = Math.min(to, 100 - options.padding[1]);\n }\n }\n\n to = spectrum.getStep(to);\n\n // Limit percentage to the 0 - 100 range\n to = limit(to);\n\n // Return false if handle can't move\n if (to === reference[handleNumber] && !getValue) {\n return false;\n }\n\n return to;\n },\n // Uses slider orientation to create CSS rules. a = base value;\n inRuleOrder = function(v, a) {\n var o = options.ort;\n return (o ? a : v) + \", \" + (o ? v : a);\n },\n // Parses value passed to .set method. Returns current value if not parse-able.\n resolveToValue = function(to, handleNumber) {\n // Setting with null indicates an 'ignore'.\n // Inputting 'false' is invalid.\n if (to === null || to === false || to === undefined) {\n return locations[handleNumber];\n }\n\n // If a formatted number was passed, attempt to decode it.\n if (typeof to === \"number\") {\n to = String(to);\n }\n\n to = options.format.from(to);\n to = spectrum.toStepping(to);\n\n // If parsing the number failed, use the current value.\n if (to === false || isNaN(to)) {\n return locations[handleNumber];\n }\n\n return to;\n },\n toStepping = function(xVal, xPct, value) {\n if (value >= xVal.slice(-1)[0]) {\n return 100;\n }\n \n var j = getJ(value, xVal);\n var va = xVal[j - 1];\n var vb = xVal[j];\n var pa = xPct[j - 1];\n var pb = xPct[j];\n \n return pa + toPercentage([va, vb], value) / subRangeRatio(pa, pb);\n },\n // (value) Input a percentage, find where it is on the specified range.\n fromStepping = function(xVal, xPct, value) {\n // There is no range group that fits 100\n if (value >= 100) {\n return xVal.slice(-1)[0];\n }\n\n var j = getJ(value, xPct);\n var va = xVal[j - 1];\n var vb = xVal[j];\n var pa = xPct[j - 1];\n var pb = xPct[j];\n\n return isPercentage([va, vb], (value - pa) * subRangeRatio(pa, pb));\n },\n subRangeRatio = function(pa, pb) {\n return 100 / (pb - pa);\n },\n // (percentage) How many percent is this value of this range?\n fromPercentage = function(range, value) {\n return (value * 100) / (range[1] - range[0]);\n },\n // (percentage) Where is this value on this range?\n toPercentage = function(range, value) {\n return fromPercentage(range, range[0] < 0 ? value + Math.abs(range[0]) : value - range[0]);\n },\n // (percentage) Get the step that applies at a certain value.\n getStep = function(xPct, xSteps, snap, value) {\n \n if (value === 100) {\n return value;\n }\n\n var j = getJ(value, xPct);\n var a = xPct[j - 1];\n var b = xPct[j];\n\n // If 'snap' is set, steps are used as fixed points on the slider.\n if (snap) {\n // Find the closest position, a or b.\n if (value - a > (b - a) / 2) {\n return b;\n }\n\n return a;\n }\n\n if (!xSteps[j - 1]) {\n return value;\n }\n\n return xPct[j - 1] + closest(value - xPct[j - 1], xSteps[j - 1]);\n },\n handleEntryPoint = function(index, value, that) {\n var percentage;\n \n // Wrap numerical input in an array.\n if (typeof value === \"number\") {\n value = [value];\n }\n \n // Reject any invalid input, by testing whether value is an array.\n if (!isArray(value)) {\n throw new Error(\"Slider 'range' contains invalid value.\");\n }\n \n // Covert min/max syntax to 0 and 100.\n if (index === \"min\") {\n percentage = 0;\n } else if (index === \"max\") {\n percentage = 100;\n } else {\n percentage = parseFloat(index);\n }\n \n // Check for correct input.\n if (!isNumeric(percentage) || !isNumeric(value[0])) {\n throw new Error(\"Slider 'range' value isn't numeric.\");\n }\n \n // Store values.\n that.xPct.push(percentage);\n that.xVal.push(value[0]);\n \n // NaN will evaluate to false too, but to keep\n // logging clear, set step explicitly. Make sure\n // not to override the 'step' setting with false.\n if (!percentage) {\n if (!isNaN(value[1])) {\n that.xSteps[0] = value[1];\n }\n } else {\n that.xSteps.push(isNaN(value[1]) ? false : value[1]);\n }\n \n that.xHighestCompleteStep.push(0);\n },\n handleStepPoint = function(i, n, that) {\n // Ignore 'false' stepping.\n if (!n) {\n return;\n }\n \n // Step over zero-length ranges (#948);\n if (that.xVal[i] === that.xVal[i + 1]) {\n that.xSteps[i] = that.xHighestCompleteStep[i] = that.xVal[i];\n \n return;\n }\n \n // Factor to range ratio\n that.xSteps[i] =\n fromPercentage([that.xVal[i], that.xVal[i + 1]], n) / subRangeRatio(that.xPct[i], that.xPct[i + 1]);\n \n var totalSteps = (that.xVal[i + 1] - that.xVal[i]) / that.xNumSteps[i];\n var highestStep = Math.ceil(Number(totalSteps.toFixed(3)) - 1);\n var step = that.xVal[i] + that.xNumSteps[i] * highestStep;\n \n that.xHighestCompleteStep[i] = step;\n },\n // Checks whether a value is numerical.\n isNumeric = function(a) {\n return typeof a === \"number\" && !isNaN(a) && isFinite(a);\n },\n // (value) How much is this percentage on this range?\n isPercentage = function(range, value) {\n return (value * (range[1] - range[0])) / 100 + range[0];\n },\n getJ = function(value, arr) {\n \n var j = 1;\n \n while (value >= arr[j]) {\n j += 1;\n }\n \n return j;\n },\n // Shorthand for base dimensions.\n baseSize = function() {\n var rect = sliderBase.getBoundingClientRect();\n var alt = \"offset\" + [\"Width\", \"Height\"][options.ort];\n return options.ort === 0 ? rect.width || sliderBase[alt] : rect.height || sliderBase[alt];\n },\n // Handler for attaching events trough a proxy.\n attachEvent = function(events, element, callback, data) {\n // This function can be used to 'filter' events to the slider.\n // element is a node, not a nodeList\n\n var method = function(e) {\n e = fixEvent(e, data.pageOffset, data.target || element);\n\n // fixEvent returns false if this event has a different target\n // when handling (multi-) touch events;\n if (!e) {\n return false;\n }\n\n // doNotReject is passed by all end events to make sure released touches\n // are not rejected, leaving the slider \"stuck\" to the cursor;\n if (isSliderDisabled() && !data.doNotReject) {\n return false;\n }\n\n // Stop if an active 'tap' transition is taking place.\n if (slider.classList.contains(prefix + \"slider-tap\") && !data.doNotReject) {\n return false;\n }\n\n // Ignore right or middle clicks on start #454\n if (events === actions.start && e.buttons !== undefined && e.buttons > 1) {\n return false;\n }\n\n // Ignore right or middle clicks on start #454\n if (data.hover && e.buttons) {\n return false;\n }\n\n // 'supportsPassive' is only true if a browser also supports touch-action: none in CSS.\n // iOS safari does not, so it doesn't get to benefit from passive scrolling. iOS does support\n // touch-action: manipulation, but that allows panning, which breaks\n // sliders after zooming/on non-responsive pages.\n // See: https://bugs.webkit.org/show_bug.cgi?id=133112\n if (!supportsPassive) {\n e.preventDefault();\n }\n\n e.calcPoint = e.points[options.ort];\n\n // Call the event handler with the event [ and additional data ].\n callback(e, data);\n };\n\n var methods = [];\n\n // Bind a closure on the target for every event type.\n events.split(\" \").forEach(function(eventName) {\n element.addEventListener(eventName, method, supportsPassive ? { passive: true } : false);\n methods.push([eventName, method]);\n });\n\n return methods;\n },\n // Provide a clean event with standardized offset values.\n fixEvent = function(e, pageOffset, eventTarget) {\n // Filter the event to register the type, which can be\n // touch, mouse or pointer. Offset changes need to be\n // made on an event specific basis.\n var touch = e.type.indexOf(\"touch\") === 0;\n var mouse = e.type.indexOf(\"mouse\") === 0;\n var pointer = e.type.indexOf(\"pointer\") === 0;\n\n var x;\n var y;\n\n // The only thing one handle should be concerned about is the touches that originated on top of it.\n if (touch) {\n // Returns true if a touch originated on the target.\n var isTouchOnTarget = function(checkTouch) {\n return checkTouch.target === eventTarget || eventTarget.contains(checkTouch.target);\n };\n\n // In the case of touchstart events, we need to make sure there is still no more than one\n // touch on the target so we look amongst all touches.\n if (e.type === \"touchstart\") {\n var targetTouches = Array.prototype.filter.call(e.touches, isTouchOnTarget);\n\n // Do not support more than one touch per handle.\n if (targetTouches.length > 1) {\n return false;\n }\n\n x = targetTouches[0].pageX;\n y = targetTouches[0].pageY;\n } else {\n // In the other cases, find on changedTouches is enough.\n var targetTouch = Array.prototype.find.call(e.changedTouches, isTouchOnTarget);\n\n // Cancel if the target touch has not moved.\n if (!targetTouch) {\n return false;\n }\n\n x = targetTouch.pageX;\n y = targetTouch.pageY;\n }\n }\n\n pageOffset = pageOffset || getPageOffset(DOC);\n\n if (mouse || pointer) {\n x = e.clientX + pageOffset.x;\n y = e.clientY + pageOffset.y;\n }\n\n e.pageOffset = pageOffset;\n e.points = [x, y];\n e.cursor = mouse || pointer; // Fix #435\n\n return e;\n },\n // Translate a coordinate in the document to a percentage on the slider\n calcPointToPercentage = function(calcPoint) {\n var location = calcPoint - offset(sliderBase, options.ort);\n var proposal = (location * 100) / baseSize();\n\n // Clamp proposal between 0% and 100%\n proposal = limit(proposal);\n\n return options.dir ? 100 - proposal : proposal;\n },\n // Find handle closest to a certain percentage on the slider\n getClosestHandle = function(proposal) {\n var closest = 100;\n var handleNumber = false;\n\n handles.forEach(function(handle, index) {\n // Disabled handles are ignored\n if (isHandleDisabled(index)) {\n return;\n }\n\n var pos = Math.abs(locations[index] - proposal);\n\n if (pos < closest || (pos === 100 && closest === 100)) {\n handleNumber = index;\n closest = pos;\n }\n });\n\n return handleNumber;\n },\n removeTooltips = function() {\n if (tooltips) {\n removeEvent(\"update.tooltips\");\n tooltips.forEach(function(tooltip) {\n if (tooltip) {\n removeElement(tooltip);\n }\n });\n tooltips = null;\n }\n },\n // The tooltips option is a shorthand for using the 'update' event.\n setTooltips = function() {\n removeTooltips();\n\n // Tooltips are added with options.tooltips in original order.\n tooltips = handles.map(addTooltip);\n\n bindEvent(\"update.tooltips\", function(values, handleNumber, unencoded) {\n if (!tooltips[handleNumber]) {\n return;\n }\n\n var formattedValue = values[handleNumber];\n\n if (options.tooltips[handleNumber] !== true) {\n formattedValue = options.tooltips[handleNumber].to(unencoded[handleNumber]);\n }\n\n tooltips[handleNumber].innerHTML = formattedValue;\n });\n\n // Fix for vertical sliders, if tooltip flows off the window move it the right side.\n if (options.ort == 1 &&\n offWindowLeft(handles[0].querySelector(\".\" + prefix + \"slider-tooltip\"), handles[0].querySelector(\"div.\"+prefix+\"slider-handle\"))) {\n each(handles, function(handle) {\n handle.querySelector(\".\" + prefix + \"slider-tooltip\").style.right = \"auto\";\n handle.querySelector(\".\" + prefix + \"slider-tooltip\").style.left = \"120%\";\n });\n }\n },\n aria = function() {\n bindEvent(\"update\", function(values, handleNumber, unencoded, tap, positions) {\n // Update Aria Values for all handles, as a change in one changes min and max values for the next.\n handleNumbers.forEach(function(index) {\n var handle = handles[index];\n\n var min = checkHandlePosition(locations, index, 0, true, true, true);\n var max = checkHandlePosition(locations, index, 100, true, true, true);\n\n var now = positions[index];\n\n // Formatted value for display\n var text = options.ariaFormat.to(unencoded[index]);\n\n // Map to slider range values\n min = spectrum.fromStepping(min).toFixed(options.percision);\n max = spectrum.fromStepping(max).toFixed(options.percision);\n now = spectrum.fromStepping(now).toFixed(options.percision);\n \n handle.children[0].setAttribute(\"aria-valuemin\", min);\n handle.children[0].setAttribute(\"aria-valuemax\", max);\n handle.children[0].setAttribute(\"aria-valuenow\", now);\n handle.children[0].setAttribute(\"aria-valuetext\", text);\n });\n });\n },\n // Get the slider value.\n get = function() {\n var v = values.map(options.format.to);\n\n // If only one handle is used, return a single value.\n if (v.length === 1) {\n return values[0];\n }\n\n return v;\n },\n removeElement = function(el) {\n el.parentElement.removeChild(el);\n },\n getPageOffset = function(doc) {\n var supportPageOffset = window.pageXOffset !== undefined;\n var isCSS1Compat = (doc.compatMode || \"\") === \"CSS1Compat\";\n var x = supportPageOffset\n ? window.pageXOffset\n : isCSS1Compat\n ? doc.documentElement.scrollLeft\n : doc.body.scrollLeft;\n var y = supportPageOffset\n ? window.pageYOffset\n : isCSS1Compat\n ? doc.documentElement.scrollTop\n : doc.body.scrollTop;\n\n return {\n x: x,\n y: y\n };\n },\n // we provide a function to compute constants instead\n // of accessing window.* as soon as the module needs it\n // so that we do not compute anything if not needed\n getActions = function() {\n // Determine the events to bind. IE11 implements pointerEvents without\n // a prefix, which breaks compatibility with the IE10 implementation.\n return window.navigator.pointerEnabled\n ? {\n start: \"pointerdown\",\n move: \"pointermove\",\n end: \"pointerup\"\n }\n : window.navigator.msPointerEnabled\n ? {\n start: \"MSPointerDown\",\n move: \"MSPointerMove\",\n end: \"MSPointerUp\"\n }\n : {\n start: \"mousedown touchstart\",\n move: \"mousemove touchmove\",\n end: \"mouseup touchend\"\n };\n };\n \n function Spectrum(entry, snap, singleStep) {\n this.xPct = [];\n this.xVal = [];\n this.xSteps = [singleStep || false];\n this.xNumSteps = [false];\n this.xHighestCompleteStep = [];\n \n this.snap = snap;\n \n var index;\n var ordered = []; // [0, 'min'], [1, '50%'], [2, 'max']\n \n // Map the object keys to an array.\n for (index in entry) {\n if (Object.prototype.hasOwnProperty.call(entry, index)) {\n ordered.push([entry[index], index]);\n }\n }\n \n // Sort all entries by value (numeric sort).\n if (ordered.length && typeof ordered[0][0] === \"object\") {\n ordered.sort(function(a, b) {\n return a[0][0] - b[0][0];\n });\n } else {\n ordered.sort(function(a, b) {\n return a[0] - b[0];\n });\n }\n \n // Convert all entries to subranges.\n for (index = 0; index < ordered.length; index++) {\n handleEntryPoint(ordered[index][1], ordered[index][0], this);\n }\n \n // Store the actual step values.\n // xSteps is sorted in the same order as xPct and xVal.\n this.xNumSteps = this.xSteps.slice(0);\n \n // Convert all numeric steps to the percentage of the subrange they represent.\n for (index = 0; index < this.xNumSteps.length; index++) {\n handleStepPoint(index, this.xNumSteps[index], this);\n }\n }\n\n Spectrum.prototype.getMargin = function(value) {\n var step = this.xNumSteps[0];\n \n if (step && (value / step) % 1 !== 0) {\n throw new Error(\"Slider 'limit', 'margin' and 'padding' must be divisible by step.\");\n }\n \n return this.xPct.length === 2 ? fromPercentage(this.xVal, value) : false;\n };\n \n Spectrum.prototype.toStepping = function(value) {\n value = toStepping(this.xVal, this.xPct, value);\n \n return value;\n };\n \n Spectrum.prototype.fromStepping = function(value) {\n return fromStepping(this.xVal, this.xPct, value);\n };\n \n Spectrum.prototype.getStep = function(value) {\n value = getStep(this.xPct, this.xSteps, this.snap, value);\n \n return value;\n };\n \n Spectrum.prototype.getDefaultStep = function(value, isDown, size) {\n var j = getJ(value, this.xPct);\n \n // When at the top or stepping down, look at the previous sub-range\n if (value === 100 || (isDown && value === this.xPct[j - 1])) {\n j = Math.max(j - 1, 1);\n }\n \n return (this.xVal[j] - this.xVal[j - 1]) / size;\n };\n \n Spectrum.prototype.getNearbySteps = function(value) {\n var j = getJ(value, this.xPct);\n \n return {\n stepBefore: {\n startValue: this.xVal[j - 2],\n step: this.xNumSteps[j - 2],\n highestStep: this.xHighestCompleteStep[j - 2]\n },\n thisStep: {\n startValue: this.xVal[j - 1],\n step: this.xNumSteps[j - 1],\n highestStep: this.xHighestCompleteStep[j - 1]\n },\n stepAfter: {\n startValue: this.xVal[j],\n step: this.xNumSteps[j],\n highestStep: this.xHighestCompleteStep[j]\n }\n };\n };\n \n Spectrum.prototype.countStepDecimals = function() {\n var stepDecimals = this.xNumSteps.map(countDecimals);\n return Math.max.apply(null, stepDecimals);\n };\n \n // Outside testing\n Spectrum.prototype.convert = function(value) {\n return this.getStep(this.toStepping(value));\n };\n\n // init\n if (!(stringSlider in element)) {\n validateOptions(options);\n \n if (options.ort == 1) {\n element.classList.add(prefix+\"align-items-center\");\n }\n if (options.content) {\n addContent();\n }\n \n addContainer();\n\n actions = getActions();\n\n slider = element.querySelector(\".\" + prefix + \"slider-target\");\n sliderBase = addSlider();\n addElements();\n\n // Attach user events.\n bindSliderEvents(optEvents);\n\n // Use the public value method to set the start values.\n valueSet(options.start);\n\n if (options.tooltips) {\n setTooltips();\n }\n\n aria();\n\n bindEvent(\"end\", endEventHandler);\n\n addLabels();\n\n for (var i = 0; i < handles.length; i++) {\n handles[i].firstChild.addEventListener(\"focus\", focusEventHandler, false);\n handles[i].firstChild.addEventListener(\"blur\", blurEventHandler, false);\n handles[i].addEventListener(\"keyup\", endEventHandler, false);\n }\n element.addEventListener(\"click\", endEventHandler, false);\n }\n\n element[stringSlider] = self;\n\n}\n","import {getClosest, prefix, DOC, isSafari, isIOS, uicoreCustomEvent, createElement, each, setFocus, getFocusableElements, jsonOptionsInit} from \"./utilities.js\";\nimport Overflow from \"./overflow.js\";\nimport Collapse from \"./collapse.js\";\n\nexport default function Tab(element, options) {\n\n element = element instanceof HTMLElement ? element : (function() {\n return false;\n })();\n\n options = options || {};\n options = jsonOptionsInit(element, options);\n options.lazyload = typeof options.lazyload === \"boolean\" ? options.lazyload : false;\n\n var self = this,\n stringTab = \"Tab\",\n tablist,\n activeTab = null,\n modalElement,\n withinModal,\n tabs,\n backButton,\n panels,\n delay,\n nested = false,\n focusableEls,\n thresholdMediaSize,\n tabContainer,\n accordionWrapper,\n smallMediaSize = window.matchMedia(\"(max-width: 767.98px)\"),\n overflow,\n overflowContainer;\n\n // Key mappings for easy reference\n var keys = {\n end: 35,\n home: 36,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n delete: 46,\n tab: 9,\n esc: 27,\n };\n\n // Add or substract depending on key pressed\n var direction = {\n 37: -1,\n 38: -1,\n 39: 1,\n 40: 1\n },\n handleOverflowEvent = function(e) {\n overflow.detail = e.detail;\n },\n setFocusableElements = function() {\n focusableEls = getFocusableElements(modalElement);\n modalElement.firstFocusableEl = focusableEls[0];\n modalElement.lastFocusableEl = focusableEls[focusableEls.length - 1];\n },\n handleBackwardTab = function (e) {\n if (document.activeElement === modalElement.firstFocusableEl) {\n e.preventDefault();\n setFocus(modalElement.lastFocusableEl);\n }\n },\n handleForwardTab = function (e) {\n if (document.activeElement === modalElement.lastFocusableEl) {\n e.preventDefault();\n setFocus(modalElement.firstFocusableEl);\n }\n },\n handleModalKeydown = function (e) {\n switch(e.keyCode) {\n case keys.tab:\n if (focusableEls.length === 1) {\n e.preventDefault();\n break;\n }\n if (e.shiftKey) {\n handleBackwardTab(e);\n } else {\n handleForwardTab(e);\n }\n break;\n case keys.esc: \n self.hide();\n setFocus(activeTab);\n break;\n default:\n break;\n }\n },\n // When a tab is clicked, activateTab is fired to activate it\n clickEventListener = function(e) {\n var target = e.target;\n if (target === element && modalElement && !(modalElement.classList.contains(prefix + \"show\"))) {\n e.preventDefault();\n }\n self.show();\n activeTab = getClosest(target, \".\" + prefix + \"tab-link\");\n activateTab(activeTab, false);\n },\n // Handle keydown on tabs\n keydownEventListener = function(e) {\n var key = e.keyCode;\n\n switch (key) {\n case keys.end:\n e.preventDefault();\n // Activate last tab\n if (overflow) {\n overflow.clickEnd();\n }\n activateTab(tabs[tabs.length - 1]);\n break;\n case keys.home:\n e.preventDefault();\n if (overflow) {\n overflow.clickHome();\n }\n // Activate first tab\n activateTab(tabs[0]);\n break;\n\n // Up, down, left, and right keys are in keydown\n // because we need to prevent page scroll\n case keys.up:\n case keys.down:\n determineOrientation(e);\n break;\n case keys.left:\n case keys.right:\n determineOrientation(e);\n break;\n }\n },\n // Handle keyup on tabs\n keyupEventListener = function(e) {\n var key = e.keyCode;\n\n switch (key) {\n case keys.delete:\n determineDeletable(e);\n break;\n }\n },\n // When a tablist's aria-orientation is set to vertical,\n // only up and down arrow should function.\n // In all other cases only left and right arrow function.\n determineOrientation = function(e) {\n var key = e.keyCode;\n var vertical = tablist.getAttribute(\"aria-orientation\") == \"vertical\";\n var proceed = false;\n\n if (vertical) {\n if (key === keys.up || key === keys.down) {\n e.preventDefault();\n proceed = true;\n }\n } else {\n if (key === keys.left || key === keys.right) {\n e.preventDefault();\n proceed = true;\n }\n }\n\n if (proceed) {\n switchTabOnArrowPress(e);\n }\n },\n // Find first parent of el with role=\"tablist\"\n getParentTablist = function(el) {\n var role = \"tablist\";\n while (el && el.parentNode) {\n el = el.parentNode;\n if (el.getAttribute(\"role\") && el.getAttribute(\"role\") == role) {\n return el;\n }\n }\n return null;\n },\n // Get all siblings of el with class=\"dds__tab-link\"\n getSiblingTabs = function() {\n var siblingTabs = tablist.querySelectorAll(\".\" + prefix + \"tab-link\");\n for (var i = 0; i < siblingTabs.length; i++) {\n siblingTabs[i].index = i;\n }\n return siblingTabs;\n },\n getTablistPanels = function(tab) {\n var controls = tab.getAttribute(\"aria-controls\");\n var panelGroup = document.getElementById(controls).parentElement;\n var siblingPanels = panelGroup.children;\n\n return siblingPanels;\n\n },\n // Either focus the next, previous, first, or last tab\n // depening on key pressed\n switchTabOnArrowPress = function(e) {\n var pressed = e.keyCode;\n each (tabs, function(tab) {\n tab.addEventListener(\"focus\", focusEventHandler);\n });\n\n if (direction[pressed]) {\n var target = e.target;\n if (target.index !== undefined) {\n \n if (tabs[target.index + direction[pressed]]) {\n var targetTab = target.index + direction[pressed];\n if (overflow) {\n if (targetTab < overflow.detail.left) {\n overflow.clickLeft();\n } else if (targetTab > overflow.detail.right) {\n overflow.clickRight();\n }\n } \n setTimeout(function() {\n setFocus(tabs[targetTab]);\n }, 125);\n }\n else if (pressed === keys.left || pressed === keys.up) {\n if (overflow) overflow.clickEnd();\n focusLastTab();\n }\n else if (pressed === keys.right || pressed == keys.down) {\n if (overflow) overflow.clickHome();\n focusFirstTab();\n }\n }\n }\n },\n // Activates any given tab panel\n activateTab = function(tab, needsFocus) {\n needsFocus = needsFocus || true;\n\n // Deactivate all other tabs\n deactivateTabs(tab);\n\n // Remove tabindex attribute\n tab.removeAttribute(\"tabindex\");\n\n // Set the tab as selected\n tab.setAttribute(\"aria-selected\", \"true\");\n\n // Get the value of aria-controls (which is an ID)\n var controls = tab.getAttribute(\"aria-controls\");\n\n tab.classList.add(prefix + \"active\");\n\n // Remove hidden attribute from tab panel to make it visible\n // document.getElementById(controls).removeAttribute('hidden');\n document.getElementById(controls).classList.add(prefix + \"active\");\n document.getElementById(controls).classList.add(prefix + \"show\");\n\n // Set focus when required\n if (needsFocus) {\n setFocus(tab);\n }\n },\n // Deactivate all tabs and tab panels\n deactivateTabs = function(tab) {\n panels = getTablistPanels (tab);\n each (tabs, function(tab) {\n tab.setAttribute(\"tabindex\", \"-1\");\n tab.setAttribute(\"aria-selected\", \"false\");\n tab.removeEventListener(\"focus\", focusEventHandler);\n tab.classList.remove(prefix + \"active\");\n tab.classList.remove(prefix + \"show\");\n });\n\n each (panels, function(panel) {\n // panel.setAttribute('hidden', 'hidden');\n panel.classList.remove(prefix + \"active\");\n panel.classList.remove(prefix + \"show\");\n });\n },\n // Make a guess\n focusFirstTab = function() {\n setFocus(tabs[0]);\n },\n // Make a guess\n focusLastTab = function() {\n setFocus(tabs[tabs.length - 1]);\n },\n // Detect if a tab is deletable\n determineDeletable = function(e) {\n var target = e.target;\n\n if (target.getAttribute(\"data-deletable\") !== null) {\n // Delete target tab\n deleteTab(e);\n\n // Update arrays related to tabs widget\n // generateArrays();\n\n // Activate the closest tab to the one that was just deleted\n if (target.index - 1 < 0) {\n activateTab(tabs[0]);\n }\n else {\n activateTab(tabs[target.index - 1]);\n }\n }\n },\n // Deletes a tab and its panel\n deleteTab = function(e) {\n var target = e.target;\n var panel = document.getElementById(target.getAttribute(\"aria-controls\"));\n\n target.parentElement.removeChild(target);\n panel.parentElement.removeChild(panel);\n },\n // Determine whether there should be a delay\n // when user navigates with the arrow keys\n determineDelay = function() {\n var hasDelay = tablist.hasAttribute(\"data-delay\");\n var delay = 0;\n\n if (hasDelay) {\n var delayValue = tablist.getAttribute(\"data-delay\");\n if (delayValue) {\n delay = delayValue;\n }\n else {\n // If no value is specified, default to 300ms\n delay = 300;\n }\n }\n\n return delay;\n },\n //\n focusEventHandler = function(e) {\n var target = e.target;\n\n setTimeout(checkTabFocus, delay, target);\n },\n // Only activate tab on focus if it still has focus after the delay\n checkTabFocus = function(target) {\n var focused = document.activeElement;\n\n if (target === focused) {\n activateTab(target, false);\n }\n },\n // triggers\n triggerShow = function() {\n setFocus(modalElement);\n },\n triggerHide = function() {\n modalElement.style.display = \"\";\n },\n createModal = function() {\n var modalBody = modalElement.querySelector(\".\" + prefix+ \"modal-body\");\n \n tabContainer = getClosest(tablist, \".\" + prefix + \"tabs-container\");\n var tabContentContainer;\n if (overflowContainer) {\n tabContentContainer = getClosest(tabContainer,\".\" + prefix + \"tab-content\", false);\n } else {\n tabContentContainer = tabContainer.querySelector(\".\" + prefix + \"tab-content\");\n }\n\n if (modalBody.firstElementChild) {\n tabContentContainer.appendChild(modalBody.firstElementChild);\n }\n var tab = getClosest(event.target, \".\" + prefix+ \"tab-link\");\n var controls = tab.getAttribute(\"aria-controls\");\n var tabContent = document.getElementById(controls);\n\n setTimeout(function() {\n modalBody.appendChild(tabContent);\n }, 50);\n },\n dismissHandler = function(e) {\n if (modalElement.classList.contains(prefix + \"show\")) {\n self.hide();\n e.preventDefault();\n setFocus(activeTab);\n }\n },\n resizeHandler = function(){\n if (!smallMediaSize.matches && modalElement.classList.contains(prefix + \"show\")) {\n self.hide();\n }\n }, \n createAccordions = function() {\n accordionWrapper = createElement(\"div\", {\n class: prefix + \"accordion \" + prefix + \"mb-3\",\n id: tabs[0].id + \"parent\"\n });\n tabContainer.parentElement.insertBefore(accordionWrapper, tabContainer);\n each(tabs, function(tab) {\n var card = createElement(\"div\", {\n class: prefix + \"accordion-card\"\n });\n var cardHeader = createElement(\"div\", {\n class: prefix + \"accordion-card-header\"\n });\n var h5 = createElement(\"h5\", {\n class: prefix + \"mb-0\"\n });\n var accordionBtn = createElement(\"button\", {\n class: prefix + \"accordion-btn \" + prefix + \"collapsed \" + prefix + \"d-flex\",\n type: \"button\",\n role: \"button\",\n data_toggle: prefix + \"collapse\",\n data_target: \"#\" + tab.id + \"accord\", //Need to create IDs\n data_parent: \"#\" + tabs[0].id + \"parent\",\n aria_controls: tab.id + \"accord\",\n aria_expanded: \"false\"\n });\n var chevron = createElement(\"i\", {\n class: prefix + \"icons \" + prefix + \"chevron-right\",\n aria_hidden: \"true\"\n });\n var accordionSpan = createElement(\"span\", {\n class: prefix + \"mx-2\",\n html: tab.innerText,\n id: tab.id + \"header\"\n });\n\n accordionBtn.appendChild(chevron);\n accordionBtn.appendChild(accordionSpan);\n h5.appendChild(accordionBtn);\n cardHeader.appendChild(h5);\n card.appendChild(cardHeader);\n accordionWrapper.appendChild(card);\n var cardBodyWrapper = createElement(\"div\", {\n id: tab.id + \"accord\",\n class: prefix + \"collapse\",\n aria_labelledby: tab.id + \"header\",\n role: \"region\",\n aria_expanded: \"false\"\n });\n var cardBody = createElement(\"div\", {\n class: prefix + \"accordion-card-body\",\n html: document.getElementById(tab.getAttribute(\"aria-controls\")).innerHTML\n });\n card.appendChild(cardBodyWrapper);\n cardBodyWrapper.appendChild(cardBody);\n });\n each(withinModal.querySelectorAll(\"[data-toggle='\" + prefix + \"collapse\" + \"']\"), function(accordion) {\n new Collapse(accordion);\n });\n },\n handleResizeSmall = function() {\n if (thresholdMediaSize.matches) {\n var activeTab = tabContainer.querySelector(\"[aria-selected='true']\");\n var sisterCollapseStr = activeTab.getAttribute(\"id\") + \"accord\";\n var activateCollapse = accordionWrapper.querySelector(\"[data-target='#\" + sisterCollapseStr + \"']\");\n if (activateCollapse && activateCollapse.classList.contains(prefix + \"collapsed\")) { //Need to Activate the collapse\n var prevActivated = accordionWrapper.querySelector(\"button[aria-expanded='true']\");\n var showBlock;\n if (prevActivated) {\n prevActivated.setAttribute(\"aria-expanded\", false);\n prevActivated.classList.add(prefix + \"collapsed\");\n showBlock = getClosest(prevActivated, \".dds__collapse\", false);\n showBlock.classList.remove(prefix + \"show\");\n showBlock.setAttribute(\"aria-expanded\", \"false\");\n }\n activateCollapse.setAttribute(\"aria-expanded\", true);\n activateCollapse.classList.remove(prefix + \"collapsed\");\n showBlock = getClosest(activateCollapse, \".dds__collapse\", false);\n showBlock.classList.add(prefix + \"show\");\n showBlock.setAttribute(\"aria-expanded\", \"true\");\n }\n accordionWrapper.classList.remove(prefix + \"d-none\");\n tabContainer.classList.add(prefix + \"d-none\");\n } else {\n var activeCollapse = accordionWrapper.querySelector(\"button[aria-expanded='true']\");\n if (activeCollapse) {\n var sisterTabStr = activeCollapse.getAttribute(\"aria-controls\").slice(0,-6);\n var tabToActivate = document.getElementById(sisterTabStr);\n activateTab(tabToActivate);\n }\n accordionWrapper.classList.add(prefix + \"d-none\");\n tabContainer.classList.remove(prefix + \"d-none\");\n }\n };\n\n this.show = function() {\n if (window.innerWidth > 767.98) {\n return;\n }\n createModal();\n modalElement.style.display = \"block\";\n modalElement.setAttribute(\"aria-hidden\", false);\n modalElement.classList.add(prefix + \"show\");\n\n if (isSafari && isIOS) {\n modalElement.classList.add(prefix + \"is-safari\");\n }\n\n if (DOC.body.classList.contains(prefix + \"modal-open\")) {\n nested = true;\n } else {\n DOC.body.classList.add(prefix + \"modal-open\");\n nested = false;\n }\n\n backButton = modalElement && modalElement.querySelector(\"[data-dismiss='\"+prefix+\"modal']\");\n backButton.addEventListener(\"click\", dismissHandler, false);\n smallMediaSize.addListener(resizeHandler);\n setTimeout(function() {\n setFocusableElements();\n setFocus(backButton);\n }, 50);\n modalElement.addEventListener(\"keydown\", handleModalKeydown);\n };\n\n this.hide = function() {\n //Need to append tab content back to tabContentContainer\n var modalBody = modalElement.querySelector(\".\" + prefix+ \"modal-body\");\n // var tabContainer = getClosest(tablist, \".\" + prefix + \"tabs-container\", true);\n var tabContainer = getClosest(tablist, \".\" + prefix + \"tabs-container\");\n var tabContentContainer;\n if (overflowContainer) {\n tabContentContainer = getClosest(tabContainer,\".\" + prefix + \"tab-content\", false);\n } else {\n tabContentContainer = tabContainer.querySelector(\".\" + prefix + \"tab-content\");\n }\n if (modalBody.firstElementChild) {\n tabContentContainer.appendChild(modalBody.firstElementChild);\n }\n modalElement.classList.add(prefix + \"slide-right\");\n modalElement.classList.remove(prefix + \"show\");\n modalElement.setAttribute(\"aria-hidden\", true);\n if (isSafari && isIOS && modalElement.classList.contains(prefix + \"is-safari\")) {\n modalElement.classList.remove(prefix + \"is-safari\");\n }\n smallMediaSize.removeListener(resizeHandler);\n setTimeout(function() {\n triggerHide();\n if (!nested) {\n DOC.body.classList.remove(prefix + \"modal-open\");\n } \n backButton.removeEventListener(\"click\", dismissHandler, false);\n }, 200);\n modalElement.removeEventListener(\"keydown\", handleModalKeydown);\n };\n\n this.lazyLoad = function() {\n if (options.lazyload && overflow && !overflow.detail) {\n overflow.lazyLoad();\n overflow.detail = overflow.getCurrentDetails();\n overflowContainer.addEventListener(\"uicOverflowChangeEvent\", handleOverflowEvent, false);\n uicoreCustomEvent(\"Tab\", \"LazyLoadEvent\", element, {\"success\": true});\n }\n else {\n uicoreCustomEvent(\"Tab\", \"LazyLoadEvent\", element, {\"success\": false, \"msg\": \"Tab cannot be lazy loaded. Check usage or avoid mulitple lazy loads.\"});\n }\n };\n\n // init\n if (!(stringTab in element)) {\n tablist = getParentTablist(element);\n modalElement = element.dataset[\"target\"] && DOC.getElementById(element.dataset[\"target\"].substr(1));\n delay = determineDelay();\n tabs = getSiblingTabs();\n // prevent adding event handlers twice\n element.addEventListener(\"keydown\", keydownEventListener);\n element.addEventListener(\"keyup\", keyupEventListener);\n element.addEventListener(\"click\", clickEventListener);\n overflowContainer = getClosest(element, \".\" + prefix + \"container-overflow\");\n if (overflowContainer) {\n if (!(\"overflow\" in tablist)) {\n overflow = new Overflow(overflowContainer, {\n lazyload: options.lazyload\n });\n if (!options.lazyload) {\n overflow.detail = overflow.getCurrentDetails();\n overflowContainer.addEventListener(\"uicOverflowChangeEvent\", handleOverflowEvent);\n }\n tablist[\"overflow\"] = overflow;\n } else {\n overflow = tablist[\"overflow\"];\n }\n }\n tabContainer = getClosest(tablist, \".\" + prefix + \"tabs-container\");\n withinModal = getClosest(element, \".\" + prefix + \"modal-offcanvas\", true);\n if (withinModal) { //check if tabs are within Modal\n var accordionExist = withinModal.querySelector(\"#\" + element.id + \"accord\"); //check if accordions already been made\n if (!accordionExist) {\n createAccordions();\n if (withinModal.classList.contains(prefix + \"modal-width-25\")) {\n thresholdMediaSize = window.matchMedia(\"(max-width: 3071.92px)\"); //3071.92*0.25 = 767.98\n } else if (withinModal.classList.contains(prefix + \"modal-width-50\")) {\n thresholdMediaSize = window.matchMedia(\"(max-width: 1535.96px)\"); //1535.96*0.5 = 767.98\n } else if (withinModal.classList.contains(prefix + \"modal-width-75\")) {\n thresholdMediaSize = window.matchMedia(\"(max-width: 1023.97px)\"); //3071.92*0.25 = 767.98\n } else {\n thresholdMediaSize = window.matchMedia(\"(max-width: 767.98px)\");\n }\n thresholdMediaSize.addListener(handleResizeSmall);\n handleResizeSmall();\n }\n }\n }\n \n element[stringTab] = self;\n}\n","import { each, sortItems, isArray, createElement } from \"../utilities.js\";\r\n/**\r\n * Columns API\r\n * @param {Object} instance DataTable instance\r\n * @param {Mixed} columns Column index or array of column indexes\r\n */\r\nexport default function Columns(dt) {\r\n var hiddenHeader = false;\r\n /**\r\n * Swap two columns\r\n * @return {Void}\r\n */\r\n this.swap = function(columns) {\r\n if (columns.length && columns.length === 2) {\r\n var cols = [];\r\n\r\n // Get the current column indexes\r\n each(dt.headings, function (h, i) {\r\n cols.push(i);\r\n });\r\n\r\n var x = columns[0];\r\n var y = columns[1];\r\n var b = cols[y];\r\n cols[y] = cols[x];\r\n cols[x] = b;\r\n\r\n this.order(cols);\r\n }\r\n };\r\n\r\n /**\r\n * Reorder the columns\r\n * @return {Array} columns Array of ordered column indexes\r\n */\r\n this.order = function(columns) {\r\n \r\n var a, b, c, d, h, s, cell,\r\n temp = [\r\n [],\r\n [],\r\n [],\r\n []\r\n ];\r\n\r\n // Order the headings\r\n each(columns, function (column, x) {\r\n h = dt.headings[column];\r\n s = h.getAttribute(\"data-sortable\") !== \"false\";\r\n a = h.cloneNode(true);\r\n a.originalCellIndex = x;\r\n a.sortable = s;\r\n\r\n temp[0].push(a);\r\n\r\n if (dt.hiddenColumns.indexOf(column) < 0) {\r\n b = h.cloneNode(true);\r\n b.originalCellIndex = x;\r\n b.sortable = s;\r\n\r\n temp[1].push(b);\r\n }\r\n });\r\n\r\n // Order the row cells\r\n each(dt.data, function (row, i) {\r\n c = row.cloneNode();\r\n d = row.cloneNode();\r\n\r\n c.dataIndex = d.dataIndex = i;\r\n if(dt.expandable){\r\n c.details = d.details = row.details;\r\n }\r\n\r\n \r\n if (row.searchIndex !== null && row.searchIndex !== undefined) {\r\n c.searchIndex = d.searchIndex = row.searchIndex;\r\n }\r\n\r\n // Append the cell to the fragment in the correct order\r\n each(columns, function (column) {\r\n cell = row.cells[column].cloneNode(true);\r\n cell.data = row.cells[column].data;\r\n c.appendChild(cell);\r\n \r\n if (dt.hiddenColumns.indexOf(column) < 0) {\r\n cell = row.cells[column].cloneNode(true);\r\n cell.data = row.cells[column].data;\r\n d.appendChild(cell);\r\n }\r\n });\r\n \r\n temp[2].push(c);\r\n temp[3].push(d);\r\n });\r\n\r\n dt.headings = temp[0];\r\n dt.activeHeadings = temp[1];\r\n\r\n each(dt.headings, function(header) {\r\n if (header.classList.contains(\"desc\") || header.classList.contains(\"asc\")) {\r\n dt.lastTh = header;\r\n }\r\n });\r\n\r\n dt.data = temp[2];\r\n dt.activeRows = temp[3];\r\n };\r\n\r\n /**\r\n * Hide columns\r\n * @return {Void}\r\n */\r\n this.hide = function(columns) {\r\n if (columns.length) {\r\n each(columns, function (column) {\r\n if (dt.hiddenColumns.indexOf(column) < 0) {\r\n dt.hiddenColumns.push(column);\r\n }\r\n });\r\n\r\n this.rebuild();\r\n }\r\n };\r\n\r\n /**\r\n * Show columns\r\n * @return {Void}\r\n */\r\n this.show = function(columns) {\r\n if (columns.length) {\r\n var index;\r\n\r\n each(columns, function (column) {\r\n index = dt.hiddenColumns.indexOf(column);\r\n if (index > -1) {\r\n dt.hiddenColumns.splice(index, 1);\r\n }\r\n });\r\n\r\n this.rebuild();\r\n }\r\n };\r\n\r\n /**\r\n * Check column(s) visibility\r\n * @return {Boolean}\r\n */\r\n this.visible = function(columns) {\r\n var cols;\r\n\r\n columns = columns || dt.headings.map(function (th) {\r\n return th.originalCellIndex;\r\n });\r\n\r\n if (!isNaN(columns)) {\r\n cols = dt.hiddenColumns.indexOf(columns) < 0;\r\n } else if (isArray(columns)) {\r\n cols = [];\r\n each(columns, function (column) {\r\n cols.push(dt.hiddenColumns.indexOf(column) < 0);\r\n });\r\n }\r\n\r\n return cols;\r\n };\r\n\r\n /**\r\n * Add a new column\r\n * @param {Object} data\r\n */\r\n this.add = function(data) {\r\n var that = this,\r\n td, th = createElement(\"th\");\r\n\r\n if (!dt.headings.length) {\r\n dt.insert({\r\n headings: [data.heading],\r\n rows: data.rows.map(function (i) {\r\n return [i];\r\n })\r\n });\r\n this.rebuild();\r\n return;\r\n }\r\n\r\n if (!hiddenHeader) {\r\n if (data.heading.nodeName) {\r\n th.appendChild(data.heading);\r\n } else {\r\n th.innerHTML = data.heading;\r\n }\r\n } else {\r\n th.innerHTML = \"\";\r\n }\r\n\r\n dt.headings.push(th);\r\n\r\n each(dt.data, function (row, i) {\r\n if (data.data[i]) {\r\n td = createElement(\"td\");\r\n\r\n if (data.data[i].nodeName) {\r\n td.appendChild(data.data[i]);\r\n } else {\r\n td.innerHTML = data.data[i];\r\n }\r\n\r\n td.data = td.innerHTML;\r\n\r\n if (data.render) {\r\n td.innerHTML = data.render.call(that, td.data, td, row);\r\n }\r\n\r\n row.appendChild(td);\r\n }\r\n });\r\n\r\n if (data.type) {\r\n th.setAttribute(\"data-type\", data.type);\r\n }\r\n if (data.format) {\r\n th.setAttribute(\"data-format\", data.format);\r\n }\r\n if (Object.prototype.hasOwnProperty.call(data, \"sortable\")) {\r\n th.sortable = data.sortable;\r\n th.setAttribute(\"data-sortable\", data.sortable === true ? \"true\" : \"false\");\r\n }\r\n\r\n this.rebuild();\r\n\r\n dt.renderHeader();\r\n };\r\n\r\n /**\r\n * Remove column(s)\r\n * @param {Array|Number} select\r\n * @return {Void}\r\n */\r\n this.remove = function(select) {\r\n if (isArray(select)) {\r\n // Remove in reverse otherwise the indexes will be incorrect\r\n select.sort(function (a, b) {\r\n return b - a;\r\n });\r\n\r\n each(select, function (column) {\r\n this.remove(column);\r\n }, this);\r\n } else {\r\n dt.headings.splice(select, 1);\r\n\r\n each(dt.data, function (row) {\r\n row.removeChild(row.cells[select]);\r\n });\r\n }\r\n\r\n this.rebuild();\r\n };\r\n\r\n /**\r\n * Sort by column\r\n * @param {int} column - The column no.\r\n * @param {string} direction - asc or desc\r\n * @return {void}\r\n */\r\n this.sort = function(column, direction) {\r\n // Check column is present\r\n if (dt.hasHeadings && (column < 0 || column > dt.activeHeadings.length - 1 )) {\r\n return false;\r\n }\r\n \r\n dt.sorting = true;\r\n \r\n var rows = [],\r\n alpha = [],\r\n numeric = [],\r\n a = 0,\r\n n = 0,\r\n th = dt.activeHeadings[column];\r\n\r\n rows = dt.data;\r\n column = th.originalCellIndex;\r\n \r\n each(rows, function (tr) {\r\n var num, content;\r\n \r\n var cell = tr.cells[column];\r\n content = cell.hasAttribute(\"data-content\") ? cell.getAttribute(\"data-content\") : cell.data;\r\n num = content.replace(/(\\$|,|\\s|%)/g, \"\");\r\n \r\n if (th.getAttribute(\"data-type\") === \"date\") { \r\n num = Date.parse(content);\r\n if (num.isNaN) {\r\n num = 0;\r\n }\r\n }\r\n \r\n if (parseFloat(num) == num) {\r\n numeric[n++] = {\r\n value: Number(num),\r\n row: tr\r\n };\r\n } else {\r\n alpha[a++] = {\r\n value: content.toLowerCase(),\r\n row: tr\r\n };\r\n }\r\n\r\n });\r\n \r\n /* Sort according to direction (ascending or descending) */\r\n var top, btm;\r\n if (th.classList.contains(\"asc\") || direction == \"desc\") {\r\n top = sortItems(alpha, -1);\r\n btm = sortItems(numeric, -1);\r\n } else {\r\n top = sortItems(numeric, 1);\r\n btm = sortItems(alpha, 1);\r\n\r\n }\r\n this.updateSortDirection(th, direction);\r\n \r\n dt.lastTh = th;\r\n \r\n /* Reorder the table */\r\n rows = top.concat(btm);\r\n dt.data = [];\r\n dt.selectedRows = [];\r\n var indexes = [];\r\n \r\n each(rows, function (v, i) {\r\n dt.data.push(v.row);\r\n\r\n if (v.row.searchIndex !== null && v.row.searchIndex !== undefined) {\r\n indexes.push(i);\r\n }\r\n\r\n }, dt);\r\n \r\n dt.searchData = indexes;\r\n\r\n this.rebuild();\r\n };\r\n\r\n this.updateSortDirection = function(th, direction){\r\n if (th.classList.contains(\"asc\") || direction == \"desc\") {\r\n // top = sortItems(alpha, -1);\r\n // btm = sortItems(numeric, -1);\r\n th.classList.remove(\"asc\");\r\n th.classList.add( \"desc\");\r\n th.setAttribute(\"aria-sort\",\"descending\");\r\n } else {\r\n // top = sortItems(numeric, 1);\r\n // btm = sortItems(alpha, 1);\r\n th.classList.remove(\"desc\");\r\n th.classList.add(\"asc\");\r\n th.setAttribute(\"aria-sort\",\"ascending\");\r\n }\r\n\r\n if (dt.lastTh && th != dt.lastTh) {\r\n dt.lastTh.classList.remove(\"desc\");\r\n dt.lastTh.classList.remove(\"asc\");\r\n }\r\n };\r\n\r\n /**\r\n * Rebuild the columns\r\n * @return {Void}\r\n */\r\n this.rebuild = function() {\r\n var a, b, c, d, temp = [];\r\n\r\n dt.activeRows = [];\r\n dt.activeHeadings = [];\r\n\r\n each(dt.headings, function (th, i) {\r\n th.originalCellIndex = i;\r\n th.sortable = th.getAttribute(\"data-sortable\") !== \"false\";\r\n if (dt.hiddenColumns.indexOf(i) < 0) {\r\n dt.activeHeadings.push(th);\r\n \r\n } \r\n });\r\n // Loop over the rows and reorder the cells\r\n each(dt.data, function (row, i) {\r\n a = row.cloneNode();\r\n b = row.cloneNode();\r\n\r\n a.dataIndex = b.dataIndex = i;\r\n a.details = b.details = row.details;\r\n\r\n if (row.searchIndex !== null && row.searchIndex !== undefined) {\r\n a.searchIndex = b.searchIndex = row.searchIndex;\r\n }\r\n\r\n // Append the cell to the fragment in the correct order\r\n each(row.cells, function (cell) {\r\n c = cell.cloneNode(true);\r\n c.data = cell.data;\r\n a.appendChild(c);\r\n\r\n if (dt.hiddenColumns.indexOf(cell.cellIndex) < 0) {\r\n d = cell.cloneNode(true);\r\n d.data = cell.data;\r\n b.appendChild(d);\r\n \r\n }\r\n });\r\n\r\n // Append the fragment with the ordered cells\r\n temp.push(a);\r\n dt.activeRows.push(b);\r\n });\r\n \r\n dt.data = temp;\r\n };\r\n}\r\n","import { each, isArray, createElement, getText } from \"../utilities.js\";\r\n\r\n/**\r\n * Rows API\r\n * @param {Object} instance DataTable instance\r\n * @param {Array} rows\r\n */\r\nexport default function Rows(dt) {\r\n /**\r\n * Build a new row\r\n * @param {Array} row\r\n * @return {HTMLElement}\r\n */\r\n this.build = function(row) {\r\n var td, tr = createElement(\"tr\");\r\n\r\n var headings = dt.headings;\r\n\r\n if (!headings.length) {\r\n headings = row.map(function () {\r\n return \"\";\r\n });\r\n }\r\n\r\n each(row, function(tdx) {\r\n if (tdx.indexOf(\"table-cmplx-accordion-btn\") > -1 || tdx.indexOf(\"table-cmplx-row-select\") > -1) {\r\n td = createElement(\"tr\");\r\n td.innerHTML = tdx;\r\n tr.appendChild(td.firstChild);\r\n } else {\r\n td = createElement(\"td\");\r\n td.innerHTML = tdx;\r\n td.data = tdx;\r\n td.setAttribute(\"data-content\", getText(tdx));\r\n tr.appendChild(td);\r\n }\r\n });\r\n\r\n if (row.details) {\r\n tr.details = row.details;\r\n }\r\n return tr;\r\n };\r\n\r\n this.render = function(row) {\r\n return row;\r\n };\r\n\r\n /**\r\n * Add new row\r\n * @param {Array} select\r\n */\r\n this.add = function(data, details) {\r\n\r\n if (isArray(data)) {\r\n // Check for multiple rows\r\n if (isArray(data[0])) {\r\n each(data, function (row, i) {\r\n // append details is supplied\r\n if (details[i]) {\r\n row.details = details[i];\r\n }\r\n dt.data.push(this.build(row));\r\n }, this);\r\n } else {\r\n // append details is supplied\r\n if (details) {\r\n data.details = details[0];\r\n }\r\n dt.data.push(this.build(data));\r\n }\r\n\r\n // We may have added data to an empty table\r\n if ( dt.data.length ) {\r\n dt.hasRows = true;\r\n }\r\n\r\n this.update();\r\n\r\n // Needs to be called after the return of add\r\n }\r\n };\r\n\r\n /**\r\n * Remove row(s)\r\n * @param {Array|Number} select\r\n * @return {Void}\r\n */\r\n this.remove = function(select) {\r\n\r\n if (isArray(select)) {\r\n // Remove in reverse otherwise the indexes will be incorrect\r\n select.sort(function (a, b) {\r\n return b - a;\r\n });\r\n\r\n each(select, function (row) {\r\n dt.data.splice(row, 1);\r\n });\r\n } else {\r\n dt.data.splice(select, 1);\r\n }\r\n\r\n this.update();\r\n };\r\n\r\n /**\r\n * Update row indexes\r\n * @return {Void}\r\n */\r\n this.update = function() {\r\n var idx = 0;\r\n each(dt.data, function (row) {\r\n if(row.children.length != 1) {\r\n row.dataIndex = idx++;\r\n }\r\n });\r\n };\r\n}","import { DOC, isObject, isArray, isJson, each, createElement, getClosest, prefix, classRemove, classAdd, getSibling, uicoreCustomEvent, validateNum, renderSvg, flush, isEdge, getText} from \"./utilities.js\";\nimport Pagination from \"./pagination.js\";\nimport Columns from \"./helpers/columns.js\";\nimport Rows from \"./helpers/rows.js\";\nimport Dropdown from \"./dropdown.js\";\nimport Modal from \"./modal.js\";\n\nexport default function TableComplex(element, params) {\n element = element instanceof HTMLElement ? element : (function() {\n return;\n })();\n\n function validateRow(row, name) {\n var hasErrors = \"\";\n var rowCount = row.match(/\\{((\\w*|\\d*):?)+\\}/g);\n if (rowCount.length < 1 || rowCount.length > 3) {\n hasErrors += \"Custom layout for row \"+name+\" was delared with an incorrect set of elements!\\n\";\n }\n var rowLength = 0;\n var localFunctions = [\"placeholder\",\"actions\",\"settings\",\"search\"];\n each(rowCount, function(temp) {\n var subElements = temp.replace(/\\{|\\}/g, \"\").split(\":\");\n if (subElements.indexOf(\"placeholder\") === -1 && !temp.match(/\\{[A-Z,a-z]+:[1,2,3](:(start|center|end))*\\}/g) ) {\n hasErrors += \"Custom layout for row \"+name+\" has an element \"+ temp +\", which has been declared incorrectly!\\n\";\n }\n if (layoutOptions.indexOf(subElements[0]) === -1 && !window[subElements[0]] && localFunctions.indexOf(subElements[0]) < 0) { // does custom function exist\n hasErrors += \"Custom layout for row \"+name+\" has an element with custom function '\"+ subElements[0] +\"' that is not accessible or dosen't exist!\\n\";\n }\n if (!isNaN(subElements[1].substring(0,1))) {\n rowLength += +subElements[1].substring(0,1);\n }\n });\n if (rowLength != 3) {\n hasErrors += \"Custom layout for row \"+name+\" is configured with grid length '\"+ rowLength +\"', which needs to add up to '3'!\\n\";\n }\n return hasErrors;\n }\n\n var jsonParams = element.dataset.tableData;\n if (jsonParams) {\n params = JSON.parse(jsonParams);\n }\n\n // init options\n var options = {};\n var layoutOptions = [\"{actions:1:start}\",\"{search:1:center}\",\"{settings:1:end}\"];\n \n // Check to see what Javascript options are set or are missing from table element classes\n options.sort = typeof params.sort === \"boolean\" ? params.sort : false;\n options.expand = typeof params.expand === \"boolean\" ? params.expand : false;\n if (options.expand) {\n options.expandIcon = params.expandIcon && typeof params.expandIcon === \"string\" ? params.expandIcon : \"arrow-tri-solid-right\";\n if (options.expandIcon.indexOf(prefix) > -1) {\n options.expandIcon = options.expandIcon.split(prefix)[1];\n }\n }\n options.showTotal = typeof params.showTotal === \"string\" ? params.showTotal : false;\n options.condensed = typeof params.condensed === \"boolean\" ? params.condensed : false;\n options.fixedColumns = typeof params.fixedColumns === \"boolean\" ? params.fixedColumns : false;\n options.rearrangeableColumns = typeof params.rearrangeableColumns === \"boolean\" ? params.rearrangeableColumns : false;\n options.fixedHeight = typeof params.fixedHeight === \"boolean\" ? params.fixedHeight : false;\n options.header = typeof params.header === \"boolean\" ? params.header : true;\n //Set Default Batch Actions\n options.defaultBatchActions = {};\n options.defaultBatchActions.exportCsv = params.defaultBatchActions && typeof params.defaultBatchActions.exportCsv === \"boolean\" ? params.defaultBatchActions.exportCsv : true ;\n options.defaultBatchActions.exportJson = params.defaultBatchActions && typeof params.defaultBatchActions.exportJson === \"boolean\" ? params.defaultBatchActions.exportJson : true ;\n options.defaultBatchActions.deleteRow = params.defaultBatchActions && typeof params.defaultBatchActions.delete === \"boolean\" ? params.defaultBatchActions.delete : true ;\n\n // Set all table text to variables\n options.text = {};\n options.text.apply = params.text && params.text.apply && typeof params.text.apply === \"string\"? params.text.apply : \"Apply\";\n options.text.cancel = params.text && params.text.cancel && typeof params.text.cancel === \"string\" ? params.text.cancel : \"Cancel\";\n options.text.exportCsv = params.text && params.text.exportCsv && typeof params.text.exportCsv === \"string\" ? params.text.exportCsv : \"Export as csv\";\n options.text.exportJson = params.text && params.text.exportJson && typeof params.text.exportJson === \"string\" ? params.text.exportJson : \"Export as json\";\n options.text.deleteRow = params.text && params.text.delete && typeof params.text.delete === \"string\" ? params.text.delete : \"Delete\";\n options.text.noEntries = params.text && params.text.noEntries && typeof params.text.noEntries === \"string\" ? params.text.noEntries: \"No entries found\";\n options.text.import = params.text && params.text.import && typeof params.text.import === \"string\" ? params.text.import: \"Import\";\n options.text.print = params.text && params.text.print && typeof params.text.print === \"string\" ? params.text.print: \"Print\";\n options.text.columns = params.text && params.text.columns && typeof params.text.columns === \"string\" ? params.text.columns: \"Columns\";\n options.text.batchActions = params.text && params.text.batchActions && typeof params.text.batchActions === \"string\" ? params.text.batchActions: \"Batch Actions\";\n options.text.chooseActions = params.text && params.text.chooseAction && typeof params.text.chooseAction === \"string\" ? params.text.chooseAction: \"Choose Actions\";\n options.text.allColumns = params.text && params.text.allColumns && typeof params.text.allColumns === \"string\" ? params.text.allColumns: \"All Columns\";\n \n // Remove the data from the Table element\n options.showData = jsonParams && typeof params.showData === \"boolean\" ? params.showData : true;\n // Search is either on by default or can be truned off\n options.search = typeof params.search === \"boolean\" ? params.search : true;\n if (options.search) {\n options.text.search = {};\n options.text.search.label = params.text && params.text.search && typeof params.text.search.label === \"string\" ? params.text.search.label : false;\n options.text.search.placeholder = params.text && params.text.search && typeof params.text.search.placeholder === \"string\" ? params.text.search.placeholder : false;\n }\n // Settings is either on by default or can be turned off\n options.settings = typeof params.settings === \"boolean\" ? params.settings : true;\n // Import either on by default or can be turned off\n options.import = typeof params.import === \"boolean\" ? params.import : true;\n // Printing is either on by default or can be turned off\n options.print = typeof params.print === \"boolean\" ? params.print : true;\n // Column Management is either on by default or can be turned off\n options.column = typeof params.column === \"boolean\" ? params.column : true;\n // Export details roww is either on by default or can be turned off\n options.exportDetails = typeof params.exportDetails === \"boolean\" ? params.exportDetails : true;\n // Control whether to show warning on csv export\n options.exportShowWarning = typeof params.exportShowWarning === \"boolean\" ? params.exportShowWarning : true;\n \n var allowedExtensions = [\".csv\", \".json\", \".js\"];\n options.allowedImportExtensions = [];\n //is it just one or is it an array \n each(params.allowedImportExtensions, function(ext) {\n if (typeof ext === \"string\" && allowedExtensions.indexOf(ext) >= -1) {\n options.allowedImportExtensions.push(ext); \n }\n });\n if (options.allowedImportExtensions.length === 0) options.allowedImportExtensions = allowedExtensions;\n // Bulk Actions\n options.actionsSelectFilters = [];\n each(params.additionalActions, function(additionalAction) {\n if (additionalAction.js) {\n var testJs = additionalAction.js;\n if (additionalAction.js.indexOf(\"(\") > -1) {\n testJs = additionalAction.js.substring(0, additionalAction.js.indexOf(\"(\")).trim();\n } else {\n additionalAction.js += \"()\";\n }\n if (!window[testJs]) {\n throw new Error(\"The additional action function \"+additionalAction.js+\" could not be accessed, please verify and try again!\");\n } else {\n options.actionsSelectFilters.splice(additionalAction.pos, 0, additionalAction);\n }\n } else {\n options.actionsSelectFilters.splice(additionalAction.pos, 0, additionalAction);\n }\n });\n for (var action in options.defaultBatchActions) {\n if (options.defaultBatchActions[action]) {\n if (action === \"deleteRow\" && options.actionsSelectFilters[0]) { //place divider above `delete` action only when other actions are present\n options.actionsSelectFilters.push(\"hr\");\n }\n options.actionsSelectFilters.push(options.text[action]);\n }\n }\n options.select = typeof params.select === \"boolean\" ? params.select : true;\n if (!options.select) layoutOptions.splice(layoutOptions.indexOf(\"{actions:1:start}\"),1,\"{placeholder:1:start}\");\n if (!options.search) layoutOptions.splice(layoutOptions.indexOf(\"{search:1:center}\"),1,\"{placeholder:1:center}\");\n if (!options.settings) layoutOptions.splice(layoutOptions.indexOf(\"{settings:1:end}\"),1,\"{placeholder:1:end}\");\n // Customise the layout\n if (params.layout) {\n var rowCount = 0;\n var hasErrors = \"\";\n if (params.layout.row1) {\n hasErrors += validateRow(params.layout.row1, \"one\");\n rowCount++;\n }\n if (params.layout.row2) {\n hasErrors += validateRow(params.layout.row2, \"two\");\n rowCount++;\n }\n if (rowCount === 0) {\n hasErrors += \"Custom layout was configured to have no Rows, which it needs to have at least 1!\\n\";\n }\n if (hasErrors.length > 0) {\n throw new Error(hasErrors);\n }\n }\n options.layout = params.layout ? params.layout : {row2:layoutOptions.join(\"\")};\n\n if (isArray(params.perPageSelect)) {\n if (typeof params.perPageSelect[0] === \"number\") {\n options.perPageSelect = params.perPageSelect.map(function(i) { \n i = Math.abs(parseInt(i));\n return i;\n });\n } else if (validateNum(params.perPageSelect[0])) {\n options.perPageSelect = params.perPageSelect.map(function(i) { \n i = Math.abs(parseInt(i));\n return i;\n });\n } else {\n throw new Error(\"Invalid perPageSelect. Should be a non-empty array of integer\");\n }\n } else {\n options.perPageSelect = [12,24,48,96];\n }\n options.perPage = options.perPageSelect.indexOf(params.perPage) > -1 ? validateNum(params.perPage) : options.perPageSelect[0];\n options.origPerPage = options.perPage;\n options.items = validateNum(params.items, 0);\n options.buttonLabelLeft = params.buttonLabelLeft && typeof params.buttonLabelLeft === \"string\" ? params.buttonLabelLeft : \"Previous\";\n options.buttonLabelRight = params.buttonLabelRight && typeof params.buttonLabelRight === \"string\" ? params.buttonLabelRight : \"Next\";\n options.disablePaginationInput = params.disablePaginationInput !== null && typeof params.disablePaginationInput === \"boolean\" ? params.disablePaginationInput : false;\n\n // transfer data\n options.data = {};\n if(!params.data) {\n var msg = \"Missing data parameters for table!\";\n console.error(msg);\n uicoreCustomEvent(\"Table\", \"Error\", table, {\"msg\": msg});\n return false;\n }\n if (!params.data.headings) {\n msg = \"Missing data.headings parameters for table!\";\n console.error(msg);\n uicoreCustomEvent(\"Table\", \"Error\", table, {\"msg\": msg});\n return false;\n }\n options.data.headings = params.data.headings;\n if (!params.data.columns) {\n msg = \"Missing data.columns parameters for table!\";\n console.error(msg);\n uicoreCustomEvent(\"Table\", \"Error\", table, {\"msg\": msg});\n return false;\n }\n options.data.columns = params.data.columns;\n if (!params.data.rows) {\n msg = \"Missing data.rows parameters for table!\";\n console.error(msg);\n uicoreCustomEvent(\"Table\", \"Error\", table, {\"msg\": msg});\n return false;\n }\n options.data.rows = params.data.rows;\n \n options.labels = {\n noRows: options.text.noEntries, // Message shown when there are no search results\n };\n\n if (!options.showData) {\n delete element.dataset.tableData;\n }\n\n var self = this,\n stringTable = \"Table\",\n table = element,\n body,\n head,\n header,\n wrapper,\n container,\n bottom,\n columnBox,\n isIE,\n pages,\n currentPage,\n totalPages,\n paginationElement,\n pagination,\n columnRenderers,\n selectedColumns,\n labels,\n rect,\n input,\n searching = false,\n dragSrcEl,\n sortedColumnIdx,\n metHeight = true,\n batchId,\n allCheckboxId,\n searchId,\n columnsFixed = false,\n initialY,\n begOffsetTop,\n currentY,\n moveableCols = [],\n colMoved = false,\n // Handlers\n handleTouchEvent = function(e) {\n if (e.pointerType === \"mouse\") {\n return false; //If mouse touch on IE, cancel and use handleDragEvent\n } else {\n e.preventDefault(); //else prevent default actions, like scrolling\n }\n var yOffset = 0;\n var finOffsetTop;\n if (e.type === \"touchstart\" || e.type === \"pointerdown\") {\n if (e.type === \"pointerdown\") {\n initialY = e.clientY - yOffset;\n } else {\n initialY = e.touches[0].clientY - yOffset;\n }\n dragSrcEl = e[\"target\"];\n if (dragSrcEl.tagName != \"LI\" ) {\n dragSrcEl = getClosest(dragSrcEl, \".\" + prefix + \"table-cmplx-drag-li\");\n }\n dragSrcEl.dataTransfer = {};\n dragSrcEl.dataTransfer.data = dragSrcEl.outerHTML;\n begOffsetTop = dragSrcEl.offsetTop;\n if (e.target.type === \"checkbox\" || e.target.parentElement.querySelector(\"input\")) {\n var targetEl = e.target.type === \"checkbox\" ? e.target : e.target.parentElement.querySelector(\"input\");\n setTimeout(function() {\n handleCheckBoxEvent(targetEl);\n }, 250);\n }\n }\n if (e.type === \"touchmove\" || e.type === \"pointermove\") {\n e.preventDefault();\n var before = false;\n if (isIE || isEdge) {\n currentY = e.clientY - initialY;\n dragSrcEl.addEventListener(\"pointerleave\", handlePointerLeave);\n } else {\n currentY = e.touches[0].clientY - initialY; //difference btn start and end if you move up it is negative\n }\n yOffset = currentY;\n if (yOffset === 0) {\n return false;\n }\n\n if (!dragSrcEl) {\n dragSrcEl = e[\"target\"];\n if (dragSrcEl.tagName != \"LI\" ) {\n dragSrcEl = getClosest(dragSrcEl, \".\" + prefix + \"table-cmplx-drag-li\");\n }\n }\n\n finOffsetTop = begOffsetTop + currentY;\n dragSrcEl.style.transform = \"translate3d(0, \" + yOffset + \"px, 0)\";\n dragSrcEl.style.opacity = 0.5;\n colMoved = true;\n each(moveableCols, function(col) {\n var startedBelow = col.offsetTop < dragSrcEl.offsetTop;\n var startedAbove = col.offsetTop > dragSrcEl.offsetTop;\n var endedBelow = col.offsetTop < finOffsetTop;\n var endedAbove = col.offsetTop > finOffsetTop;\n if (endedAbove && startedBelow //if started from below and moved above column\n || endedBelow && startedAbove) { //if started from above and moved below column\n if (endedAbove) { //if item is being moved before col\n if (col.previousElementSibling) { //if not the first column\n if (finOffsetTop > col.previousElementSibling.offsetTop) { //if moving up, but not above predecessor\n if (col.classList.contains(prefix + \"border-bottom-black\")) {\n col.classList.remove(prefix + \"border-bottom-black\");\n } \n col.classList.add(prefix + \"border-top-black\");\n } else if (col.classList.contains(prefix + \"border-top-black\")) {\n col.classList.remove(prefix + \"border-top-black\");\n } else if (col.classList.contains(prefix + \"border-bottom-black\")) {\n col.classList.remove(prefix + \"border-bottom-black\");\n }\n } else if (finOffsetTop < 0) { //if being placed before first column\n col.classList.add(prefix + \"border-top-black\");\n }\n } else if (endedBelow) { //if item is being moved below\n if (col.nextElementSibling) {\n if (finOffsetTop < col.nextElementSibling.offsetTop) {\n if (col.classList.contains(prefix + \"border-top-black\")) {\n col.classList.remove(prefix + \"border-top-black\");\n }\n col.classList.add(prefix + \"border-bottom-black\");\n } else if (col.classList.contains(prefix + \"border-bottom-black\")) { //either should get the styling or should not\n col.classList.remove(prefix + \"border-bottom-black\");\n } else if (col.classList.contains(prefix + \"border-top-black\")) {\n col.classList.remove(prefix + \"border-top-black\");\n }\n } else if (finOffsetTop > col.offsetTop) {\n col.classList.add(prefix + \"border-bottom-black\");\n }\n \n }\n } else if (startedBelow && col.nextElementSibling && col.nextElementSibling.offsetTop > finOffsetTop && !col.nextElementSibling.classList.contains(prefix + \"table-cmplx-drag-li\")) { // started from below + moved below a draggable but above a fixed column\n col.classList.add(prefix + \"border-bottom-black\");\n } else if (endedAbove && startedAbove && finOffsetTop > col.previousElementSibling.offsetTop && col.previousElementSibling.classList.contains(prefix + \"table-cmplx-li\")) { //if started from above + moved above but below a fixed \n col.classList.add(prefix + \"border-top-black\");\n } else if (col.classList.contains(prefix + \"border-top-black\")) { //If it has a border but doesmn't fall into above category, remove it\n col.classList.remove(prefix + \"border-top-black\");\n } else if (col.classList.contains(prefix + \"border-bottom-black\")) { //If it has a border but doesmn't fall into above category, remove it\n col.classList.remove(prefix + \"border-bottom-black\");\n }\n });\n }\n if (e.type ===\"touchend\" || e.type === \"pointerup\") {\n initialY = currentY;\n before = false;\n if (!dragSrcEl) {\n dragSrcEl = e[\"target\"];\n if (dragSrcEl.tagName != \"LI\" ) {\n dragSrcEl = getClosest(dragSrcEl, \".\" + prefix + \"table-cmplx-drag-li\");\n }\n }\n finOffsetTop = begOffsetTop + currentY;\n if (colMoved) {\n each(moveableCols, function(col) {\n if (col != dragSrcEl) {\n var startedBelow = col.offsetTop < dragSrcEl.offsetTop;\n var startedAbove = col.offsetTop > dragSrcEl.offsetTop;\n var endedBelow = col.offsetTop < finOffsetTop;\n var endedAbove = col.offsetTop > finOffsetTop;\n if (endedAbove && startedBelow \n || endedBelow && startedAbove \n || col.nextElementSibling && startedBelow && col.nextElementSibling.offsetTop > finOffsetTop && !col.nextElementSibling.classList.contains(prefix + \"table-cmplx-drag-li\") //if moving from bottom coming up: starting top is lower than above's starting top but ending top is higher \n || endedAbove && startedAbove && finOffsetTop > col.previousElementSibling.offsetTop && col.previousElementSibling.classList.contains(prefix + \"table-cmplx-li\") ) { \n if (endedAbove && startedBelow \n || endedAbove && startedAbove && finOffsetTop > col.previousElementSibling.offsetTop && col.previousElementSibling.classList.contains(prefix + \"table-cmplx-li\")) {\n before = true;\n if (col.previousElementSibling) { //if not the first column\n if (finOffsetTop > col.previousElementSibling.offsetTop) {\n handleTouchEnd(dragSrcEl, before, col);\n } \n } else if (!col.previousElementSibling && finOffsetTop < 0) { //if being placed before the first column\n handleTouchEnd(dragSrcEl, before, col);\n }\n } else if (endedBelow && startedAbove \n || startedBelow && col.nextElementSibling && col.nextElementSibling.offsetTop > finOffsetTop && !col.nextElementSibling.classList.contains(prefix + \"table-cmplx-drag-li\")) { //if moving column down\n if (col.nextElementSibling && finOffsetTop < col.nextElementSibling.offsetTop) {\n handleTouchEnd(dragSrcEl, before, col);\n } else if (!col.nextElementSibling && finOffsetTop > col.offsetTop) { //if being placed below last column\n handleTouchEnd(dragSrcEl, before, col);\n }\n }\n\n col.classList.remove(prefix + \"border-top-black\");\n col.classList.remove(prefix + \"border-bottom-black\");\n\n columnBox.orderChanged = true;\n }\n }\n });\n if (dragSrcEl.hasAttribute(\"style\")) { //set back to origin if doesn't get moved into available slot\n dragSrcEl.removeAttribute(\"style\");\n }\n colMoved = false; //once touch end is over, set colMoved back to false \n } else if (dragSrcEl.querySelector(\"input\")){\n if (dragSrcEl.querySelector(\"input\").checked) {\n dragSrcEl.querySelector(\"input\").checked = false;\n } else {\n dragSrcEl.querySelector(\"input\").checked = true;\n }\n }\n var applyButton = columnBox.querySelector(\".\"+prefix+\"btn-primary\");\n if (applyButton.disabled) {\n applyButton.removeAttribute(\"disabled\");\n }\n if (isIE || isEdge) {\n dragSrcEl.removeEventListener(\"pointerleave\", handlePointerLeave);\n }\n }\n },\n handleTouchEnd = function(dragSrcEl, before, col) {\n var input = dragSrcEl.querySelector(\"input\");\n var checked = input && input.checked;\n setTimeout(function() {\n var dropElem;\n var dropHTML = dragSrcEl.dataTransfer.data;\n \n dragSrcEl.parentNode.removeChild(dragSrcEl);\n if (before) {\n col.insertAdjacentHTML(\"beforebegin\", dropHTML);\n dropElem = col.previousSibling;\n } else {\n col.insertAdjacentHTML(\"afterend\", dropHTML);\n dropElem = col.nextSibling;\n }\n \n moveableCols.push(dropElem);\n moveableCols = moveableCols.filter( function(value) {\n return value != dragSrcEl;\n });\n if (checked) {\n dropElem.querySelector(\"input\").checked = true;\n }\n setupDragEvents(dropElem);\n }, 50);\n },\n handlePointerLeave = function(e) {\n setTimeout(function() {\n dragSrcEl = e[\"relatedTarget\"];\n if (dragSrcEl.tagName != \"LI\" ) {\n dragSrcEl = getClosest(dragSrcEl, \".\" + prefix + \"table-cmplx-drag-li\");\n }\n if (dragSrcEl.hasAttribute(\"style\")) {\n dragSrcEl.removeAttribute(\"style\");\n }\n each(moveableCols, function(col) {\n if (col.classList.contains(prefix + \"border-top-black\")) {\n col.classList.remove(prefix + \"border-top-black\");\n } else if (col.classList.contains(prefix + \"border-bottom-black\")) {\n col.classList.remove(prefix + \"border-bottom-black\");\n }\n });\n },50);\n },\n handleDragEvent = function(e) {\n e.stopPropagation();\n if (e.type === \"dragstart\") {\n dragSrcEl = e[\"target\"];\n\n dragSrcEl.dataTransfer = {};\n dragSrcEl.dataTransfer.data = dragSrcEl.outerHTML;\n }\n if (e.type === \"dragover\") {\n var overEl = e[\"target\"];\n if (overEl.tagName != \"LI\" ) {\n overEl = getClosest(overEl, \".\" + prefix + \"table-cmplx-drag-li\");\n }\n if (dragSrcEl != overEl) {\n if (e.preventDefault) {\n e.preventDefault(); // Necessary. Allows us to drop.\n }\n overEl.classList.add(prefix + \"border-bottom-black\");\n if (overEl.previousElementSibling && overEl.previousElementSibling.classList.contains(prefix + \"border-bottom-black\")) {\n overEl.previousElementSibling.classList.remove(prefix + \"border-bottom-black\");\n }\n if (overEl.nextElementSibling && overEl.nextElementSibling.classList.contains(prefix + \"border-bottom-black\")) {\n overEl.nextElementSibling.classList.remove(prefix + \"border-bottom-black\");\n }\n return false;\n }\n \n }\n \n if (e.type === \"dragleave\") {\n \n var leaveEl = e[\"target\"];\n if (leaveEl.tagName != \"LI\" ) {\n leaveEl = getClosest(leaveEl, \".\" + prefix + \"table-cmplx-drag-li\");\n }\n if (dragSrcEl != leaveEl) {\n if (e.preventDefault) {\n e.preventDefault(); // Necessary. Allows us to drop.\n }\n \n leaveEl.classList.remove(prefix + \"border-bottom-black\");\n return false;\n }\n \n }\n \n if (e.type === \"drop\") {\n \n if (e.stopPropagation) {\n e.stopPropagation(); // Stops some browsers from redirecting.\n }\n \n var dropTarget = e[\"target\"]; \n if (dropTarget.tagName != \"LI\") {\n dropTarget = getClosest(dropTarget, \".\" + prefix + \"table-cmplx-drag-li\");\n }\n // Don't do anything if dropping the same column we're dragging.\n if (dragSrcEl != dropTarget) {\n var checkbox = dragSrcEl.querySelector(\"input\");\n var checked = checkbox ? checkbox.checked : false;\n var dropHTML = dragSrcEl.dataTransfer.data;\n dragSrcEl.parentNode.removeChild(dragSrcEl);\n \n dropTarget.insertAdjacentHTML(\"afterend\",dropHTML);\n var dropElem = dropTarget.nextSibling;\n if (checked) {\n dropElem.querySelector(\"input\").checked = true;\n }\n setupDragEvents(dropElem);\n dropTarget.classList.remove(prefix + \"border-bottom-black\");\n\n columnBox.orderChanged = true;\n var applyButton = columnBox.querySelector(\".\"+prefix+\"btn-primary\");\n // eanble Apply and Cancel\n if (applyButton.disabled) {\n applyButton.removeAttribute(\"disabled\");\n }\n }\n return false;\n }\n },\n handleImportActionEvent = function(e) {\n var t = e.target;\n var reader = new FileReader();\n var output = \"\"; //placeholder for text output\n var type = \"\"; //placeholder for file type\n if(t.files && t.files[0]) {\n if (!t.files[0].type || \n t.files[0].type === \"application/json\") {\n type = \"json\";\n } else if(t.files[0].type && \n (t.files[0].type === \"application/vnd.ms-excel\" ||\n t.files[0].type === \"text/csv\")) {\n type = \"csv\";\n } else {\n var msg = \"The file type for the file selected was not recognizable!\";\n console.error(msg);\n uicoreCustomEvent(\"Table\", \"Error\", table, {\"msg\": msg});\n } \n reader.onload = function (e) {\n output = e.target.result;\n if(type === \"json\") {\n if(!isJson(output)) {\n msg = \"The file type for the supplied file was not recognizable!\";\n console.error(msg);\n uicoreCustomEvent(\"Table\", \"Error\", table, {\"msg\": msg});\n }\n }\n var inputOptions = {type: type,\n data: output,\n headings: true};\n self.import(inputOptions);\n t.value = \"\";\n \n };//end onload()\n reader.readAsText(t.files[0]);\n }//end if html5 filelist support\n e.preventDefault();\n },\n handleExportActionEvent = function(t) {\n var exportFileOptions = { };\n if (options.expand && options.select) {\n exportFileOptions.skipColumn = [0,1];\n } else if (options.expand || options.select) {\n exportFileOptions.skipColumn = [0];\n }\n\n if (t.innerHTML === options.text.exportCsv) {\n exportFileOptions.type = \"csv\";\n } else {\n exportFileOptions.type = \"json\";\n }\n self.export(exportFileOptions);\n },\n handleDeleteActionEvent = function() {\n self.delete();\n },\n handleSelectAllChange = function(state) {\n if (options.select) {\n var actions = wrapper.querySelector(\"[data-target='#cmplxTablesActions']\");\n if (state === \"checked\" || state === \"indeterminate\" && actions.disabled) {\n actions.removeAttribute(\"disabled\");\n } else if (state === \"unchecked\" && !actions.disabled && table.selectedRows.length < 1) {\n actions.setAttribute(\"disabled\",\"\");\n }\n }\n },\n handleCheckBoxEvent = function(t) {\n var nodeIndex, \n columnBoxCheckboxes = getClosest(t, \".\" + prefix + \"column-box\", true);\n if (columnBoxCheckboxes) {\n columnBoxCheckboxes = columnBoxCheckboxes.querySelectorAll(\".\" + prefix + \"column-box input\");\n }\n if(options.select && t.classList.contains(prefix + \"table-cmplx-select-all\")) { // Header Select All\n if (table.hasRows) {\n var cellIdx = getHeaderCellIndex(prefix + \"table-cmplx-select-all\");\n var check = t.checked;\n if (!check || t.state === \"indeterminate\") {\n check = false;\n t.checked = false;\n t.state = \"unchecked\";\n } else {\n t.state = \"checked\";\n check = true;\n }\n each(pages[currentPage-1], function(row) {\n if(row.cells.length != 1) {\n var cell = row.cells[cellIdx];\n var input = cell.querySelector(\"input[type='checkbox']\");\n var dataInput = table.data[row.dataIndex].cells[cellIdx].querySelector(\"input[type='checkbox']\");\n\n if (check) {\n dataInput.checked = input.checked = true;\n table.selectedRows.push(row.dataIndex);\n row.classList.add(\"selected\");\n if (options.expand) {\n row.nextElementSibling.classList.add(\"selected\");\n }\n t.state = \"checked\";\n } else {\n dataInput.checked = input.checked = false;\n table.selectedRows.pop(row.dataIndex);\n row.classList.remove(\"selected\");\n if (options.expand) {\n row.nextElementSibling.classList.remove(\"selected\");\n }\n }\n }\n });\n pages[currentPage-1].selected = t.checked;\n handleSelectAllChange(t.state);\n } else {\n t.checked = false;\n }\n } else if(options.select && t.parentNode.classList.contains(prefix + \"table-cmplx-row-select\")) { // Table Cell Select\n cellIdx = getHeaderCellIndex(prefix + \"table-cmplx-select-all\");\n var tr = getClosest(t, \"tr\", false);\n if (t.checked) {\n table.data[tr.dataIndex].cells[cellIdx].querySelector(\"input[type='checkbox']\").checked = true;\n tr.classList.add(\"selected\");\n if (options.expand) {\n tr.nextElementSibling.classList.add(\"selected\");\n }\n if (table.selectedRows.length === 0) {\n table.selectedRows.push(tr.dataIndex);\n } else {\n var newRows = [];\n for (var idx = 0; idx < table.selectedRows.length; idx++) {\n \n var value = table.selectedRows[idx];\n var less = table.selectedRows[idx-1];\n var more = table.selectedRows[idx+1];\n if (tr.dataIndex < value \n && (less === undefined || tr.dataIndex > less)\n && newRows.indexOf(tr.dataIndex) === -1) {\n newRows.push(tr.dataIndex);\n newRows.push(value);\n } else if (tr.dataIndex > value \n && (more === undefined || tr.dataIndex < more)\n && newRows.indexOf(tr.dataIndex) === -1) {\n newRows.push(value);\n newRows.push(tr.dataIndex);\n } else {\n newRows.push(value);\n }\n }\n if (newRows.length > 0) {\n table.selectedRows = newRows;\n }\n }\n } else {\n table.data[tr.dataIndex].cells[cellIdx].querySelector(\"input[type='checkbox']\").checked = false;\n tr.classList.remove(\"selected\");\n if (options.expand) {\n tr.nextElementSibling.classList.remove(\"selected\");\n }\n table.selectedRows = table.selectedRows.filter( function(value) {\n if (value != tr.dataIndex) {\n return \"\" + value;\n }\n });\n each(table.activeHeadings[cellIdx].children, function(el) {\n if (el && el.classList.contains(prefix + \"table-cmplx-select-all\")) {\n el.checked = false;\n }\n });\n }\n var selectAll = wrapper.querySelector(\".\" + prefix + \"table-cmplx-select-all\");\n if (table.selectedRows.length === options.perPage || table.selectedRows.length === pages[currentPage-1].length) {\n selectAll.indeterminate = false;\n selectAll.state = \"checked\";\n selectAll.checked = true;\n } else if (table.selectedRows.length > 0) {\n selectAll.state = \"indeterminate\";\n selectAll.indeterminate = true;\n } else {\n selectAll.state = \"unchecked\";\n selectAll.indeterminate = false;\n }\n handleSelectAllChange(selectAll.state);\n } else if(options.column && t.id === allCheckboxId) {\n for (nodeIndex = 0; nodeIndex < columnBoxCheckboxes.length; nodeIndex++) {\n var thisBox = columnBoxCheckboxes[nodeIndex];\n if (thisBox.id !== allCheckboxId) {\n if (getClosest(t, \".\" + prefix + \"column-box\", true).querySelector(\"#\" + allCheckboxId)[\"checked\"]) {\n toggleBox(thisBox, \"checked\");\n } else {\n toggleBox(thisBox, \"unchecked\");\n } \n }\n }\n } else if(options.column && t.id !== allCheckboxId) {\n var checkCount = 0;\n var allChk = getClosest(t, \".\" + prefix + \"column-box\", true).querySelector(\"#\" + allCheckboxId);\n for (nodeIndex = 0; nodeIndex < columnBoxCheckboxes.length; nodeIndex++) {\n var chkbox = columnBoxCheckboxes[nodeIndex];\n if (chkbox.id !== allCheckboxId) {\n if (chkbox[\"checked\"]) {\n checkCount++;\n }\n }\n }\n if (columnBoxCheckboxes && checkCount === columnBoxCheckboxes.length-1) {\n toggleBox(allChk, \"checked\");\n } else if (checkCount === 0) {\n toggleBox(allChk, \"unchecked\");\n } else {\n toggleBox(allChk);\n }\n }\n },\n handleButtonEvent = function(t) {\n if (t.innerHTML === options.text.cancel) {\n columnBox.classList.remove(prefix + \"show\");\n }\n else if (t.innerHTML === options.text.apply) {\n if(columnBox.orderChanged) {\n var order = [];\n // Make sure we pick up cells for Expandable, Selectable and Labels\n for (var h = 0; h < baseCellIdx(); h++) {\n order.push(h);\n }\n // Add fixed columns to order - which should always be first col(s) in table\n each(table.activeHeadings, function(th) {\n if (th.getAttribute(\"data-fixed\") === \"true\") {\n order.push(th.originalCellIndex);\n }\n });\n each (columnBox.getElementsByTagName(\"ul\"), function(unOrderedList) {\n each(unOrderedList.children, function(li, indI) {\n if (indI > 1) { // first two li's are for check-all and HR\n each(table.headings, function(header) {\n if(li.querySelectorAll(\"label\")[0].textContent === header.textContent) {\n order.push(header.originalCellIndex);\n }\n });\n }\n });\n });\n columnBox.orderChanged = false;\n columns().order(order);\n table.hiddenColumns = [];\n self.update();\n }\n\n each (columnBox.getElementsByTagName(\"ul\"), function(unOrderedList) {\n each(unOrderedList.children, function(li) {\n var liCheckbox = li.querySelector(\"input[type='checkbox']\");\n if (liCheckbox && liCheckbox.checked && liCheckbox.id !== allCheckboxId) {\n each(table.headings, function(header) {\n if(li.querySelectorAll(\"label\")[0].textContent === header.textContent) {\n columns().show([header.originalCellIndex]);\n self.update();\n }\n });\n } else if (liCheckbox && !liCheckbox.checked && liCheckbox.id !== allCheckboxId) {\n each(table.headings, function(header) {\n if(li.querySelectorAll(\"label\")[0].textContent === header.textContent) {\n columns().hide([header.originalCellIndex]);\n self.update();\n }\n });\n }\n });\n\n if (searching) {\n self.search(input.value);\n }\n });\n columnsFixed = false;\n renderHeader();\n columnBox.classList.remove(prefix + \"show\");\n }\n },\n handleTableHeaderEvent = function(e,t) {\n if (\n options.sort &&\n t.hasAttribute(\"data-sortable\")\n ) {\n if ( options.items > 0 && (options.items != table.activeRows.length)) {\n self.deleteAll();\n //change column to asc or desc\n columns().updateSortDirection(table.activeHeadings[table.activeHeadings.indexOf(t)], t.classList.contains(\"asc\") ? \"asc\":\"desc\");\n }\n else{\n columns().sort(table.activeHeadings.indexOf(t));\n sortedColumnIdx = t.originalCellIndex;\n self.update();\n e.preventDefault();\n }\n uicoreCustomEvent(\"Table\", \"SortEvent\", table, { \"column\" : table.activeHeadings.indexOf(t), \"direction\" : (t.classList.contains(\"asc\") ? \"ascending\":\"descending\"), \"currentPage\": currentPage, \"perPage\": options.perPage });\n }\n t.focus();\n },\n handleAccordionEvent = function(t) {\n if(t.classList.contains(prefix + \"table-cmplx-accordion-btn\")) {\n var htmlRow = t.parentNode.parentNode,\n currentRow = table.data[htmlRow.dataIndex];\n if (currentRow.details) {\n var detailsRow = htmlRow.nextElementSibling.children[0];\n if (detailsRow.classList.contains(prefix + \"show\")) {\n detailsRow.classList.remove(prefix + \"show\");\n t.classList.add(prefix + \"collapsed\");\n t.setAttribute(\"aria-expanded\",false);\n } else {\n detailsRow.classList.add(prefix + \"show\");\n t.classList.remove(prefix + \"collapsed\");\n t.setAttribute(\"aria-expanded\",true);\n }\n } else {\n each(t.querySelector(\"svg\").childNodes, function(use) {\n if (use.getAttribute(\"class\").indexOf(prefix + \"show\") > -1) {\n classRemove(use, prefix + \"show\");\n if (use.getAttribute(\"xlink:href\").indexOf(prefix + \"loading-sqrs\") != -1) {\n var row = getClosest(use, \"tr\", false);\n table.activeRows[row.dataIndex].event = \"ExpandCancelEvent\";\n uicoreCustomEvent(\"Table\", \"ExpandCancelEvent\", table, {\"rowId\": row.dataIndex});\n }\n } else {\n classAdd(use, prefix + \"show\");\n if (use.getAttribute(\"xlink:href\").indexOf(prefix + \"loading-sqrs\") != -1) {\n row = getClosest(use, \"tr\", false);\n table.activeRows[row.dataIndex].event = \"ExpandStartEvent\";\n var content = [];\n each(table.data[row.dataIndex].cells, function(cell, idx) {\n if (options.expand && options.select) {\n if (idx >= 2) {\n var dt = \"\\\"\"+labels[idx]+\"\\\": \\\"\"+ ( (cell.hasAttribute(\"data-content\") ? cell.getAttribute(\"data-content\") : cell.textContent )+\"\\\"\" );\n content.push(dt);\n }\n } else if (options.expand || options.select) {\n if (idx >= 1) {\n dt = \"\\\"\"+labels[idx]+\"\\\": \\\"\"+ ( (cell.hasAttribute(\"data-content\") ? cell.getAttribute(\"data-content\") : cell.textContent )+\"\\\"\" );\n content.push(dt);\n }\n } else {\n dt = \"\\\"\"+labels[idx]+\"\\\": \\\"\"+ ( (cell.hasAttribute(\"data-content\") ? cell.getAttribute(\"data-content\") : cell.textContent )+\"\\\"\" );\n content.push(dt);\n }\n });\n uicoreCustomEvent(\"Table\", \"ExpandStartEvent\", table, {\"rowId\": row.dataIndex, \"content\": content});\n }\n }\n });\n }\n }\n },\n setupDragEvents = function(el) {\n el.addEventListener(\"dragstart\", handleDragEvent, false);\n el.addEventListener(\"dragover\", handleDragEvent, false);\n el.addEventListener(\"dragleave\", handleDragEvent, false);\n el.addEventListener(\"drop\", handleDragEvent, false);\n if (isIE || isEdge) {\n el.addEventListener(\"pointerdown\", handleTouchEvent, false);\n el.addEventListener(\"pointerup\", handleTouchEvent, false);\n el.addEventListener(\"pointermove\", handleTouchEvent, false);\n if (isEdge) {\n el.addEventListener(\"click\", function(e) {\n if (e.pointerType === \"touch\") {\n e.preventDefault();\n }\n });\n }\n } else {\n el.addEventListener(\"touchstart\", handleTouchEvent, false);\n el.addEventListener(\"touchend\", handleTouchEvent, false);\n el.addEventListener(\"touchmove\", handleTouchEvent, false);\n }\n\n },\n extend = function (src, props) {\n for (var prop in props) {\n if (Object.prototype.hasOwnProperty.call(props, prop)) {\n // if (props.hasOwnProperty(prop)) {\n var val = props[prop];\n if (val && isObject(val)) {\n src[prop] = src[prop] || {};\n extend(src[prop], val);\n } else {\n src[prop] = val;\n }\n }\n }\n return src;\n },\n baseCellIdx = function() {\n var baseIdx = 0;\n if (table.expand) {\n baseIdx++;\n }\n if (table.select) {\n baseIdx++;\n }\n return baseIdx;\n },\n columns = function (columns) {\n return new Columns(table, columns);\n },\n rows = function (rows) {\n return new Rows(table, rows);\n },\n // Function used to convert options data to thead and tbody\n dataToTable = function() {\n var thead = false,\n tbody = false;\n\n table.data = table.data || options.data;\n\n if (table.data.headings) {\n thead = createElement(\"thead\");\n var tr = createElement(\"tr\");\n\n // Add the expandable header for row details\n if (options.expand) {\n var th = createElement(\"th\", {\n title: \"expand details\"\n });\n tr.appendChild(th);\n table.expand = options.expand;\n }\n if (options.select) {\n th = createElement(\"th\");\n th.appendChild(createElement(\"input\", {\n type: \"checkbox\",\n class: prefix + \"table-cmplx-select-all\",\n title: \"select all rows\"\n }));\n tr.appendChild(th);\n table.select = options.select;\n }\n each(table.data.headings, function (col) {\n var th = createElement(\"th\", {\n scope: \"col\",\n html: col\n });\n tr.appendChild(th);\n });\n thead.appendChild(tr);\n }\n\n if (table.data.rows && table.data.rows.length) {\n tbody = createElement(\"tbody\");\n \n each(table.data.rows, function (row, idx) {\n row.dataIndex = idx;\n if (table.data.headings) {\n if (options.data.headings.length !== row.data.length) {\n throw new Error(\n \"Row found at index, [ \"+idx+\" ] that does not match the number of headings supplied.\"\n );\n }\n }\n\n var tr = createElement(\"tr\");\n //Add secondary accordion arrow for details\n if(options.expand) {\n tr.appendChild(renderExpand());\n }\n //Add selectable checkboxes\n if(options.select) {\n tr.appendChild(renderSelect());\n }\n each(row.data, function (value) {\n var td = createElement(\"td\", {\n html: value\n });\n td.setAttribute(\"data-content\", getText(value));\n tr.appendChild(td);\n });\n \n tbody.appendChild(tr);\n\n if (row.details) {\n tr.details = row.details;\n }\n\n // Secondary accordion html for details\n if (options.expand){\n tbody.appendChild(renderDetails(tr, table.headings.length));\n }\n \n });\n }\n\n if (thead) {\n if (table.tHead !== null) {\n table.removeChild(table.tHead);\n }\n table.appendChild(thead);\n }\n\n if (tbody) {\n if (table.tBodies.length) {\n table.removeChild(table.tBodies[0]);\n }\n table.appendChild(tbody);\n }\n },\n setRenderColumns = function() {\n if (selectedColumns.length) {\n each(table.data, function (row) {\n each(row.cells, function (cell, i) {\n if (selectedColumns.indexOf(i) > -1) {\n each(columnRenderers, function (renderers) {\n if (renderers.columns === cell.cellIndex) {\n cell.innerHTML = renderers.renderer.call(self, cell.data, cell, row);\n }\n });\n }\n });\n });\n }\n },\n renderDetails = function(row, length, stripeClass, selected) {\n var clazz = prefix + \"table-cmplx-row-details\";\n\n if (stripeClass) clazz = stripeClass + \" \" + clazz;\n if (selected) clazz += \" \" + \"selected\";\n \n var detailsRow = createElement(\"tr\", {\n class: clazz\n });\n\n var detailsCell = createElement(\"td\", {\n class : prefix + \"table-complx-details\",\n colspan: length\n });\n\n var accordionBody = createElement(\"div\", {\n class : prefix + \"table-complx-details-body\"\n });\n\n var accordionBodyChild = createElement(\"div\", {\n class : prefix + \"table-complx-details-body-child\"\n });\n\n accordionBody.appendChild(accordionBodyChild);\n\n if (row.details) {\n accordionBodyChild.innerHTML = row.details;\n } else {\n row.details = false;\n }\n\n detailsCell.appendChild(accordionBody);\n detailsRow.appendChild(detailsCell);\n return detailsRow;\n },\n renderExpand = function() {\n var td = createElement(\"td\");\n var showButton = createElement(\"button\", {\n class: prefix + \"table-cmplx-accordion-btn \" + prefix + \"collapsed\", \n \"aria-expanded\": false,\n \"aria-label\": \"expand details\"\n }),\n svgElem = renderSvg([{name:options.expandIcon, show:true},{name:\"loading-sqrs\", show:false}]);\n showButton.appendChild(svgElem);\n td.appendChild(showButton);\n return td;\n },\n renderSelect = function() {\n var td = createElement(\"td\", {\n class: prefix + \"table-cmplx-row-select\"\n });\n var inputCheckbox = createElement(\"input\", {\n type: \"checkbox\",\n title: \"row select\"\n });\n td.appendChild(inputCheckbox);\n return td;\n },\n renderCustomRow = function(row) {\n var template = \"
\";\n template += row;\n template += \"
\";\n\n each(row.match(/\\{((\\w*|\\d*):?)+\\}/g), function(el) {\n var replace = el;\n var clean = el.replace(/[{,}]/g, \"\").split(\":\");\n switch(clean[0]) {\n case \"actions\": template = template.replace(replace, renderActions(clean[1], clean[2])); break;\n case \"search\": template = template.replace(replace, renderSearch(clean[1], clean[2])); break;\n case \"settings\": template = template.replace(replace, renderSettings(clean[1], clean[2])); break;\n case \"placeholder\": template = template.replace(replace, renderPlaceholder(clean[1])); break;\n default : \n var topCtnr = \"
\";\n topCtnr += window[clean[0]]()+\"
\";\n template = template.replace(replace, topCtnr);\n \n }\n });\n return template;\n },\n createActionButton = function(html, js, dataToggle, dataTarget) {\n var button;\n if (dataToggle && dataTarget) {\n button = createElement(\"button\", {\n class: prefix + \"dropdown-item\",\n role :\"menuitem\",\n onclick: js ? js : \"javascript: void(0);\",\n html: html,\n tabindex: \"-1\",\n data_toggle: dataToggle,\n data_target: dataTarget\n });\n } else {\n button = createElement(\"button\", {\n class: prefix + \"dropdown-item\",\n role :\"menuitem\",\n onclick: js ? js : \"javascript: void(0);\",\n html: html,\n tabindex: \"-1\"\n });\n }\n return button;\n },\n createActionLi = function () {\n return createElement(\"li\", {\n class: prefix + \"dropdown-list-item\",\n role: \"none presentation\",\n tabindex: \"0\"\n });\n },\n renderActions = function(flexGrow, justifyContent) {\n var topCtnr;\n if (options.select) {\n topCtnr = \"
\" : +\">\";\n var cmplxAction = createElement(\"div\", {\n class: prefix + \"table-cmplx-action\"\n });\n var cmplxActionLabel = createElement(\"label\", {\n class: prefix + \"table-cmplx-action-label\",\n html: options.text.batchActions,\n for: batchId+\"BatchActions\"\n });\n cmplxAction.appendChild(cmplxActionLabel);\n\n var cmplxActionDropdown = createElement(\"div\", {\n class: prefix + \"mb-0 \" + prefix + \"btn-dropdown\"\n });\n var anchor = createElement(\"button\", {\n id: batchId+\"BatchActions\",\n class: prefix + \"btn \" + prefix + \"btn-secondary \" + prefix + \"table-cmplx-action-button\" ,\n tabindex: \"0\",\n \"data-toggle\": prefix + \"dropdown\",\n \"data-target\": \"#cmplxTablesActions\",\n \"aria-expanded\": \"false\",\n \"aria-controls\": \"cmplxTablesActions\",\n html: options.text.chooseActions\n });\n \n var svgElem = renderSvg([{name:\"arrow-tri-solid-right\", show:true}]);\n var svgClass= svgElem.getAttribute(\"class\");\n svgElem.setAttribute(\"class\", svgClass + \" \" + prefix + \"arrow-tri-solid-right\");\n anchor.appendChild(svgElem);\n cmplxActionDropdown.appendChild(anchor);\n\n var unordered = createElement(\"ul\", {\n id: \"cmplxTablesActions\",\n class: prefix + \"button-dropdown-container \" + prefix + \"collapse\",\n role: \"menu\"\n });\n\n each(options.actionsSelectFilters, function(action) {\n if (\"hr\" === action) {\n unordered.appendChild(createElement(action,{class: prefix+\"dropdown-divider\"}));\n } else {\n var actionLI = createActionLi();\n var actionLabel;\n if (typeof action === \"string\") {\n if (action === options.text.exportCsv) { \n actionLabel = createActionButton(action, null, \"dds__modal\", \"#\"+prefix+\"csvSpecialChars\");\n } else {\n actionLabel = createActionButton(action);\n }\n } else {\n actionLabel = createActionButton(action.html, action.js);\n }\n actionLI.appendChild(actionLabel);\n unordered.appendChild(actionLI);\n }\n });\n \n anchor.setAttribute(\"disabled\",\"\");\n\n cmplxActionDropdown.appendChild(unordered);\n cmplxAction.appendChild(cmplxActionDropdown);\n\n topCtnr += cmplxAction.outerHTML + \"
\";\n } else {\n topCtnr = \"
\";\n }\n\n return topCtnr;\n },\n renderSearch = function(flexGrow, justifyContent) {\n var topCtnr;\n if (options.search) {\n topCtnr = \"
\" : +\">\";\n var inputGroup = createElement(\"div\", {\n class: prefix + \"table-cmplx-input-group\"\n });\n var searchCtnr = createElement(\"div\", {\n class: prefix + \"table-cmplx-search\"\n });\n var searchIcon = renderSvg([{name:\"filter\", show:true}]);\n var searchInput = createElement(\"input\", {\n type: \"search\",\n class: prefix + \"form-control \",\n \"aria-label\": \"search\"\n });\n if (options.search && options.text.search.placeholder) {\n searchInput.setAttribute(\"placeholder\", options.text.search.placeholder);\n }\n searchCtnr.appendChild(searchInput);\n searchCtnr.appendChild(searchIcon);\n if (options.search && options.text.search.label) {\n var searchLabel = createElement(\"label\", {\n for: searchId + \"Search\",\n html: options.text.search.label\n });\n searchInput.setAttribute(\"id\",searchId+\"Search\");\n inputGroup.appendChild(searchLabel);\n inputGroup.appendChild(searchCtnr);\n topCtnr += inputGroup.outerHTML + \"
\";\n } else {\n topCtnr += searchCtnr.outerHTML + \"\";\n }\n } else {\n topCtnr = \"
\";\n }\n\n return topCtnr;\n },\n renderSettings = function(flexGrow, justifyContent) {\n var topCtnr;\n if (options.settings) {\n topCtnr = \"
\" : +\">\";\n var optGear = \"
\";\n \n if (options.import) {\n optGear += \"\";\n optGear += \"\";\n }\n if (options.print) {\n optGear += \"\";\n }\n if (options.column) {\n optGear += \"\";\n }\n \n optGear += columnBox = \"
\";\n optGear += \"
\";\n topCtnr += optGear + \"
\";\n } else {\n topCtnr = \"
\";\n }\n\n return topCtnr;\n },\n renderPlaceholder = function (flexGrow) {\n return \"
\";\n },\n render = function() {\n \n var template = \"\";\n\n // Convert data to HTML\n if (options.data) {\n dataToTable(options.data);\n }\n\n body = table.tBodies[0];\n head = table.tHead;\n \n // Should move this to dataToTable method\n if (!body) {\n body = createElement(\"tbody\");\n table.appendChild(body);\n }\n \n\n table.hasRows = body.rows.length > 0;\n \n // Make a tHead if there isn't one (fixes #8)\n // Should move this to dataToTable method\n if (!head) {\n var h = createElement(\"thead\");\n var t = createElement(\"tr\");\n \n if (table.hasRows) {\n each(body.rows[0].cells, function () {\n t.appendChild(createElement(\"th\"));\n });\n \n h.appendChild(t);\n }\n \n head = h;\n \n table.insertBefore(head, body);\n }\n \n table.hasHeadings = head.rows.length > 0;\n \n if (table.hasHeadings) {\n header = head.rows[0];\n table.headings = [].slice.call(header.cells);\n }\n \n // Header\n if (!options.header) {\n if (head) {\n table.removeChild(table.tHead);\n }\n }\n \n // Build\n wrapper = createElement(\"div\", {\n class: prefix + \"table-cmplx-wrapper\"\n });\n \n //////////////////////////////////////////////////////\n // Top template - Begin\n //////////////////////////////////////////////////////\n \n if (options.layout.row1) {\n template += renderCustomRow(options.layout.row1);\n }\n\n if (options.layout.row2) {\n template += renderCustomRow(options.layout.row2);\n }\n\n //////////////////////////////////////////////////////\n // Top template - End\n //////////////////////////////////////////////////////\n\n template += \"
\";\n \n //////////////////////////////////////////////////////\n // Bottom template - Begin\n //////////////////////////////////////////////////////\n\n template += \"
\";\n template += \"
\";\n \n //////////////////////////////////////////////////////\n // Bottom template - End\n //////////////////////////////////////////////////////\n\n if (table.hasHeadings) {\n // Sortable\n renderHeader();\n }\n \n // Add table class\n table.classList.add(prefix + \"table-cmplx\");\n \n wrapper.innerHTML = template;\n \n container = wrapper.querySelector(\".\" + prefix + \"table-cmplx-container\");\n\n bottom = wrapper.querySelector(\".\" + prefix + \"table-cmplx-bottom\");\n \n // Pagination\n options.pagination = getSibling(element, \".dds__pagination\") ? true : false;\n if (options.pagination) {\n paginationElement = getSibling(element, \".dds__pagination\");\n bottom.appendChild(paginationElement);\n }\n\n columnBox = wrapper.querySelector(\"[data-toggle='data-column-box']\");\n \n // Insert in to DOM tree\n table.parentNode.replaceChild(wrapper, table);\n container.appendChild(table);\n \n // Store the table dimensions\n rect = table.getBoundingClientRect();\n \n // Convert rows to array for processing\n table.data = [];\n table.activeRows = [];\n\n var dataIdx = 0;\n each(body.rows, function(row, idx) {\n if (options.expand) {\n if (idx % 2 == 0) {\n row.dataIndex = dataIdx++;\n table.activeRows.push(row);\n table.data.push(row);\n }\n } else {\n row.dataIndex = idx;\n table.activeRows.push(row);\n table.data.push(row);\n }\n }, true);\n\n table.activeHeadings = table.headings.slice();\n\n // Update\n self.update();\n \n // Set Columns\n setColumns();\n\n // Fix columns, think this is the only valid call for fixColumns\n fixColumns();\n\n // Options condensed\n if (options.condensed) {\n wrapper.querySelector(\".\" + prefix + \"table-cmplx\").classList.add(prefix + \"condensed\");\n }\n \n // This needs to run after the options.condensed\n if (options.fixedHeight) {\n if (options.origPerPage > table.activeRows.length) {\n metHeight = false;\n } else {\n // Fix height\n fixHeight();\n }\n }\n \n bindEvents();\n },\n renderPage = function () {\n if (options.search && searching === true && table.searchData.length === 0) return;\n if (table.hasRows && totalPages) {\n \n // Use a fragment to limit touching the DOM\n var index = currentPage - 1,\n frag = DOC.createDocumentFragment();\n \n var page = pages[index];\n var selectHeader;\n var selectCellIdx;\n \n if (table.hasHeadings) {\n flush(header, isIE);\n \n each(table.activeHeadings, function (th) {\n if (options.select) {\n each(th.children, function(el) {\n if (el && el.classList.contains(prefix + \"table-cmplx-select-all\")) {\n selectHeader = el;\n selectCellIdx = th.originalCellIndex;\n if(page.selected) {\n selectHeader.checked = true;\n selectHeader.state = \"checked\"; // set the state\n } else {\n selectHeader.checked = false;\n selectHeader.state = \"unchecked\"; // set the state\n }\n } \n });\n }\n // reest sortable columns\n if (th.hasAttribute(\"data-sortable\") && th.originalCellIndex != sortedColumnIdx) {\n th.setAttribute(\"aria-sort\", \"none\");\n }\n header.appendChild(th);\n }, this);\n }\n \n var selectedRows = 0;\n each(page, function (row, idx) {\n //row.className = \"\";\n row.removeAttribute(\"class\");\n var selected = false;\n // redo if previously selected\n if (options.select) {\n if(table.data[row.dataIndex].cells[selectCellIdx].querySelector(\"input[type='checkbox']\").checked) {\n row.classList.add(\"selected\");\n selected = true;\n selectedRows++;\n if (!selectHeader.checked) {\n selectHeader.indeterminate = true;\n selectHeader.state = \"indeterminate\"; // set the state\n }\n }\n }\n // redo if stripped table\n if (table.classList.contains(prefix + \"table-striped\")) {\n var stripeColor = idx % 2 > 0 ? prefix + \"table-cmplx-row-odd\" : prefix + \"table-cmplx-row-even\";\n row.classList.add(stripeColor);\n }\n frag.appendChild(rows().render(row));\n if(options.expand) {\n row.querySelector(\".\" + prefix + \"table-cmplx-accordion-btn\").classList.add(prefix + \"collapsed\");\n var detailsRow = renderDetails(row, table.headings.length, stripeColor, selected);\n detailsRow.children[0].classList.remove(prefix + \"show\");\n frag.appendChild(detailsRow);\n }\n }, this);\n\n if (options.select) {\n if (selectedRows === page.length) {\n selectHeader.indeterminate = false;\n selectHeader.checked = true;\n selectHeader.state = \"checked\";\n } else if (selectedRows === 0 && options.select) {\n selectHeader.indeterminate = false;\n selectHeader.checked = false;\n selectHeader.state = \"unchecked\";\n }\n handleSelectAllChange(selectHeader.state);\n }\n self.clear(frag);\n \n } else if (searching && totalPages == 0) {\n if (table.hasHeadings) {\n flush(header, isIE);\n \n each(table.activeHeadings, function (th) {\n header.appendChild(th);\n }, this);\n }\n } else {\n self.clear();\n }\n if(!metHeight) {\n fixHeight();\n }\n },\n renderHeader = function () {\n \n labels = [];\n \n if (table.headings && table.headings.length) {\n\n each(table.headings, function (th, i) {\n \n labels[i] = th.textContent;\n \n th.sortable = th.hasAttribute(\"data-sortable\");\n \n th.originalCellIndex = i;\n if (options.sort && th.sortable) {\n var sortLabel = createElement(\"label\", {\n class: prefix + \"table-cmplx-sorter\",\n html: th.textContent\n });\n th.textContent = \"\";\n th.setAttribute(\"tabindex\",\"0\");\n th.appendChild(sortLabel);\n }\n });\n }\n \n fixColumns();\n },\n toggleBox = function (box, state) {\n box[\"getAttribute\"](\"indeterminate\");\n box[\"setAttribute\"](\"indeterminate\", false);\n box[\"indeterminate\"] = false;\n box.state = null;\n box[\"checked\"] = false;\n if (state && state === \"checked\") {\n box[\"getAttribute\"](\"checked\");\n box[\"setAttribute\"](\"checked\", \"checked\");\n box[\"checked\"] = true;\n } else if (state) {\n box[\"getAttribute\"](\"checked\");\n box.removeAttribute(\"checked\");\n } else {\n box.state = \"indeterminate\";\n box.indeterminate = true;\n }\n },\n getHeaderCellIndex = function(selector) {\n var cellIdx = 0;\n each(table.activeHeadings, function(header) {\n each(header.children, function(el) {\n if (el.classList.contains(selector)) {\n cellIdx = header.originalCellIndex;\n }\n });\n });\n return cellIdx;\n },\n bindEvents = function () {\n\n // Batch Actions\n if (options.select) {\n var actionSelect = wrapper.querySelector(\"#cmplxTablesActions\");\n actionSelect.addEventListener(\"keydown\", function(e) {\n if (e.keyCode == 13) {\n e.preventDefault();\n var actionButton = e.target.querySelector(\"button\");\n if (actionButton.innerHTML === options.text.deleteRow) {\n handleDeleteActionEvent();\n } else if (actionButton.innerHTML === options.text.exportCsv) {\n if (options.exportShowWarning) createSpecialCharModal();\n else handleExportActionEvent(e.target);\n } else if (actionButton.innerHTML === options.text.exportJson) {\n handleExportActionEvent(e.target);\n }\n }\n });\n actionSelect.addEventListener(\"mousedown\", function(e) {\n e.preventDefault();\n var actionButton = e.target;\n if (actionButton.innerHTML === options.text.deleteRow) {\n handleDeleteActionEvent();\n } else if (actionButton.innerHTML === options.text.exportCsv ) {\n if (options.exportShowWarning) createSpecialCharModal();\n else handleExportActionEvent(e.target);\n } else if (actionButton.innerHTML === options.text.exportJson) {\n handleExportActionEvent(e.target);\n }\n });\n } \n\n // Search\n if (options.search) {\n input = wrapper.querySelector(\".\" + prefix + \"table-cmplx-search\").querySelector(\"input[type=search]\");\n if (input) {\n input.addEventListener(\"keyup\",function (e) {\n if (e.keyCode === 9 || e.keyCode === 16 || e.keyCode === 13) return;\n self.search(input.value);\n e.preventDefault();\n }, false);\n input.addEventListener(\"mouseup\", function (e) {\n var origInput = input.value;\n setTimeout ( function() {\n if (input.value == \"\" && origInput != \"\") { //the 'x' was pressed and removed the orig query string\n self.search(input.value);\n }\n }, 100);\n e.preventDefault();\n }, false);\n }\n }\n \n // Settings\n if (options.settings) {\n var settingsCtnr = wrapper.querySelector(\".\" + prefix + \"table-cmplx-settings\");\n if (options.column) {\n var button = settingsCtnr.querySelector(\"button[aria-label='table settings columns']\");\n button.addEventListener(\"click\", function(e) {\n if(columnBox.classList.contains(prefix + \"show\")) {\n columnBox.classList.remove(prefix + \"show\");\n } else {\n renderSettingsDropDown();\n columnBox.classList.add(prefix + \"show\");\n columnBox.addEventListener(\"click\", function(e) {\n var t = e.target;\n if (t.nodeName.toLowerCase() === \"button\") {\n handleButtonEvent(t);\n settingsCtnr.querySelector(\"button[aria-label='table settings columns']\").focus();\n } else if(t.nodeName.toLowerCase() === \"input\") {\n var applyButton = columnBox.querySelector(\".\"+prefix+\"btn-primary\");\n if (applyButton.disabled) {\n applyButton.removeAttribute(\"disabled\");\n }\n }\n });\n }\n e.preventDefault();\n }, false);\n }\n \n if (options.print) {\n button = settingsCtnr.querySelector(\"button[aria-label='table settings print']\");\n button.addEventListener(\"click\", function(e) {\n self.print();\n e.preventDefault();\n }, false);\n }\n\n if (options.import) {\n var fileImport = settingsCtnr.querySelector(\".\"+prefix+\"table-cmplx-file-import\");\n fileImport.addEventListener(\"change\", handleImportActionEvent, false);\n \n button = settingsCtnr.querySelector(\"button[aria-label='table settings import']\");\n button.addEventListener(\"click\", function(e) {\n fileImport.click();\n e.preventDefault();\n }, false);\n }\n } \n \n // All listeners with in the table are should use wrapper.\n // Pager(s) / sorting\n wrapper.addEventListener(\"keydown\" ,function (e) {\n var t = e.target;\n // Checks for headers\n if (t.nodeName.toLowerCase() === \"th\" && e.keyCode === 13) { \n handleTableHeaderEvent(e,t);\n }\n // Checks for buttons\n if (t.nodeName.toLowerCase() === \"button\" && e.keyCode === 13 && t.classList.contains(prefix+\"table-cmplx-accordion-btn\")) {\n handleAccordionEvent(t);\n e.preventDefault();\n }\n }, false);\n\n wrapper.addEventListener(\"click\" ,function (e) {\n var t = e.target;\n // Checks for headers\n if (t.classList.contains(prefix+\"table-cmplx-sorter\")) { \n handleTableHeaderEvent(e,t.parentNode); \n }\n // Checks for buttons\n if (t.nodeName.toLowerCase() === \"button\") {\n handleAccordionEvent(t);\n e.preventDefault();\n }\n // Checks for inputs\n if (t.nodeName.toLowerCase() === \"input\") {\n if(t.type === \"checkbox\") {\n handleCheckBoxEvent(t);\n }\n }\n }, false);\n },\n setColumns = function () {\n each(table.data, function (row) {\n each(row.cells, function (cell) {\n cell.data = cell.innerHTML;\n });\n });\n \n // Check for the columns option\n if (options.data.columns && table.headings.length) {\n \n each(options.data.columns, function (data) {\n \n // convert single column selection to array\n if (!isArray(data.select)) {\n data.select = [data.select];\n }\n \n if (Object.prototype.hasOwnProperty.call(data, \"render\") && (typeof data.render === \"function\" || (typeof data.render === \"string\" && window[data.render]))) {\n var nCIdx = parseInt(data.select)+baseCellIdx();\n selectedColumns = selectedColumns.concat(nCIdx);\n \n columnRenderers.push({\n columns: nCIdx,\n renderer: window[data.render]\n });\n }\n \n // Add the data attributes to the th elements\n each(data.select, function (column) {\n var th = table.headings[baseCellIdx()+column];\n if (data.type) {\n th.setAttribute(\"data-type\", data.type);\n }\n if (data.format) {\n th.setAttribute(\"data-format\", data.format);\n }\n if (options.sort) {\n if (Object.prototype.hasOwnProperty.call(data, \"sortable\") && data.sortable) {\n th.setAttribute(\"data-sortable\", \"\");\n th.setAttribute(\"aria-sort\",\"none\");\n }\n if (Object.prototype.hasOwnProperty.call(data, \"sort\")) {\n th.setAttribute(\"data-sortable\", \"\");\n th.setAttribute(\"aria-sort\",\"none\");\n }\n }\n if (Object.prototype.hasOwnProperty.call(data, \"fixed\")) {\n th.setAttribute(\"data-fixed\", data.fixed);\n }\n if (Object.prototype.hasOwnProperty.call(data, \"control\")) {\n th.setAttribute(\"data-control\", data.control);\n }\n if (Object.prototype.hasOwnProperty.call(data, \"hidden\")) {\n if (data.hidden) {\n columns().hide([baseCellIdx()+column]);\n self.update();\n }\n }\n if (Object.prototype.hasOwnProperty.call(data, \"sort\") && data.select.length ==1 ) {\n sortedColumnIdx = baseCellIdx()+data.select[0];\n columns().sort(sortedColumnIdx, data.sort);\n self.update();\n uicoreCustomEvent(\"Table\", \"SortEvent\", table, { \"column\" : sortedColumnIdx, \"direction\" : (data.sort === \"asc\" ? \"ascending\":\"descending\"), \"currentPage\": currentPage, \"perPage\": options.perPage });\n }\n });\n });\n }\n \n if (table.hasRows) {\n each(table.data, function (row, idx) {\n row.dataIndex = idx;\n each(row.cells, function (cell) {\n cell.data = cell.innerHTML;\n });\n });\n \n setRenderColumns();\n columns().rebuild();\n self.update();\n }\n\n renderHeader();\n \n },\n renderSettingsDropDown = function() {\n\n flush(columnBox, isIE);\n var columnContainer = createElement(\"div\", {\n class: prefix + \"table-cmplx-column-cntr\"\n });\n\n // set up list variables and add first check/uncheck-all row\n var checkableCount = 0,\n checkCount = 0;\n var unOrderedList = createElement(\"ul\");\n var listItem;\n var columnLabel;\n var columnInput;\n var boxLabel;\n \n // Add column headings to list\n each(table.headings, function(header, idx) {\n\n if (idx >= baseCellIdx() && (header.dataset[\"fixed\"] !== \"true\") && (options.rearrangeableColumns || header.dataset[\"control\"] !== \"false\")) {\n var listItem;\n var dragSvg;\n if (options.rearrangeableColumns) {\n listItem = createElement(\"li\", {\n class: prefix + \"table-cmplx-drag-li\",\n draggable: true\n });\n dragSvg = renderSvg([{name:\"handle\", show:true}]);\n setupDragEvents(listItem);\n moveableCols.push(listItem);\n } else {\n listItem = createElement(\"li\", {\n class: prefix + \"table-cmplx-li\"\n });\n }\n columnLabel = createElement(\"label\",{ \n for: idx + \"_\" + batchId, // prevent duplicate IDs when using multiple tables per page\n class: prefix + \"text-truncate\"\n });\n boxLabel = createElement(\"span\");\n if (header.dataset[\"control\"] !== \"false\") {\n checkableCount++;\n columnInput = createElement(\"input\",{\n id: idx + \"_\" + batchId,\n type: \"checkbox\"\n });\n columnInput.checked = columns().visible(idx);\n columnLabel.appendChild(columnInput);\n if (columnInput.checked) {\n checkCount++;\n }\n } else {\n boxLabel.style.marginLeft = \"1.75rem\";\n }\n boxLabel.innerHTML = header.textContent;\n columnLabel.appendChild(boxLabel);\n if(dragSvg) {\n listItem.appendChild(dragSvg);\n }\n listItem.appendChild(columnLabel);\n unOrderedList.appendChild(listItem);\n columnContainer.appendChild(unOrderedList);\n }\n });\n var defaultAllChecked = (checkCount === checkableCount || checkCount === 0) ? checkCount === checkableCount : null; // all-checked will be true | false | null (indeterminate)\n if (checkableCount > 1) {\n // Add lightweight hr to list\n listItem = createElement(\"li\", {\n class: prefix + \"table-cmplx-li\"\n });\n boxLabel = createElement(\"hr\");\n boxLabel.classList.add(prefix + \"tertiary_divider\");\n boxLabel.classList.add(prefix + \"mt-1\");\n listItem.appendChild(boxLabel);\n unOrderedList.insertBefore(listItem,unOrderedList.firstChild);\n\n // add check-all box to list\n listItem = createElement(\"li\", {\n class: prefix + \"table-cmplx-li\"\n });\n columnLabel = createElement(\"label\", { \n for: allCheckboxId,\n class: prefix + \"text-truncate\"\n });\n columnInput = createElement(\"input\", {\n id: allCheckboxId,\n type: \"checkbox\"\n });\n boxLabel = createElement(\"span\");\n boxLabel.innerHTML = options.text.allColumns;\n columnLabel.appendChild(columnInput);\n columnLabel.appendChild(boxLabel);\n listItem.appendChild(columnLabel);\n unOrderedList.insertBefore(listItem,unOrderedList.firstChild);\n \n var allChk = unOrderedList.querySelector(\"#\" + allCheckboxId);\n if (defaultAllChecked === true) {\n toggleBox(allChk, \"checked\");\n } else if (defaultAllChecked === false) {\n toggleBox(allChk, \"unchecked\");\n } else {\n toggleBox(allChk);\n }\n }\n if (columnContainer.querySelectorAll(\"ul\").length === 0) {\n var emptySpan = createElement(\"span\", {\n class: prefix + \"text-wrap\",\n html: \"Cannot rearrange or turn columns on/off.\"\n });\n columnContainer.appendChild(emptySpan);\n }\n var buttonContainer = createElement(\"div\", {\n class: prefix + \"row \" + prefix + \"no-gutters\"\n });\n var cancelButton = createElement(\"button\", {\n class: prefix + \"btn \" + prefix + \"btn-secondary\",\n html: options.text.cancel\n });\n var applyButton = createElement(\"button\", {\n class: prefix + \"btn \" + prefix + \"btn-primary\",\n html: options.text.apply,\n disabled: \"\"\n });\n buttonContainer.appendChild(cancelButton);\n buttonContainer.appendChild(applyButton);\n columnContainer.appendChild(buttonContainer);\n columnBox.appendChild(columnContainer);\n },\n paginate = function() {\n\n var perPage = options.perPage,\n rows = table.activeRows;\n \n if (searching) {\n rows = [];\n \n each(table.searchData, function (index) {\n rows.push(table.activeRows[index]);\n }, this);\n }\n \n // Check for hidden columns\n pages = rows\n .map(function (tr, i) {\n return i % perPage === 0 ? rows.slice(i, i + perPage) : null;\n })\n .filter(function (page) {\n return page;\n });\n \n totalPages = pages.length;\n },\n fixColumns = function () {\n rect = table.getBoundingClientRect();\n if ( options.fixedColumns \n && table.activeHeadings \n && table.activeHeadings.length\n && !columnsFixed) {\n var cells,\n hd = false,\n reducePx = 0;\n \n // If we have headings we need only set the widths on them\n // otherwise we need a temp header and the widths need applying to all cells\n if (table.tHead) {\n each(table.activeHeadings, function (cell) {\n cell.style.maxWidth = \"\";\n cell.style.width = \"\";\n });\n var expandDone, selectDone = false;\n each(table.activeHeadings, function (cell, i) {\n if ((i==0) && options.expand && !expandDone){\n expandDone = true;\n cell.style.maxWidth = \"20px\";\n cell.style.width = \"20px\";\n reducePx += 20;\n }\n else if ((i==0||i==1) && options.select && !selectDone){\n selectDone = true;\n cell.style.maxWidth = \"20px\";\n cell.style.width = \"20px\";\n reducePx += 20;\n }\n else {\n var ow = cell.offsetWidth;\n var w = ow / (rect.width - reducePx) * 100;\n cell.style.width = w + \"%\";\n }\n });\n } else {\n cells = [];\n \n // Make temperary headings\n hd = createElement(\"thead\");\n var r = createElement(\"tr\");\n each(table.tBodies[0].rows[0].cells, function() {\n var th = createElement(\"th\");\n r.appendChild(th);\n cells.push(th);\n });\n \n hd.appendChild(r);\n table.insertBefore(hd, body);\n \n var widths = [];\n each(cells, function (cell, i) {\n if ((i==0) && options.expand){\n reducePx += 20;\n }\n else if((i==0||i==1) && options.select){\n reducePx += 20;\n } \n else {\n var ow = cell.offsetWidth;\n var w = ow / (rect.width - reducePx) * 100;\n widths.push(w);\n }\n }, this);\n \n each(table.data, function (row) {\n each(row.cells, function (cell, i) {\n if((i==0) && options.expand){\n cell.style.width = \"20px\";\n }\n else if ((i==0||i==1) && options.select){\n cell.style.width = \"20px\";\n }\n else if (columns().visible(baseCellIdx()+cell.cellIndex))\n cell.style.width = widths[i] + \"%\";\n }, this);\n }, this);\n \n // Discard the temp header\n table.removeChild(hd);\n }\n columnsFixed = true;\n }\n },\n fixHeight = function () { \n if (options.fixedHeight) {\n container.style.height = null;\n rect = container.getBoundingClientRect();\n container.style.height = rect.height + \"px\";\n }\n metHeight = options.origPerPage <= table.activeRows.length && options.perPage == options.origPerPage;\n },\n resetCollapse = function() {\n each(table.activeRows, function(row) {\n var button = row.querySelector(\".\"+ prefix + \"table-cmplx-accordion-btn\");\n if(button && !button.classList.contains(prefix + \"collapsed\")) {\n button.classList.add(prefix + \"collapsed\");\n }\n });\n },\n insert = function (data) {\n var newrows = [];\n if (isObject(data)) {\n if (data.headings) {\n if (!table.hasHeadings && !table.hasRows) {\n var tr = createElement(\"tr\"),\n th;\n each(data.headings, function (heading) {\n th = createElement(\"th\", {\n html: heading\n });\n\n tr.appendChild(th);\n });\n head.appendChild(tr);\n\n header = tr;\n table.headings = [].slice.call(header.cells);\n table.hasHeadings = true;\n\n // Re-enable sorting if it was disabled due\n // to missing header\n // options.sort = initialSortable;\n }\n }\n\n if (data.rows && isArray(data.rows)) {\n each(data.rows, function (row, rowIdx) {\n var headerCount = [];\n for (var l = 0; l < labels.length; l++) {\n headerCount.push(l);\n }\n var padR = 0,\n r = [];\n if (options.expand) {\n r[0] = renderExpand().outerHTML;\n padR++;\n delete headerCount[0];\n }\n if (options.select) {\n var selectData = renderSelect().outerHTML;\n if (options.expand) {\n r[1] = selectData;\n padR++;\n delete headerCount[1];\n } else {\n r[0] = selectData;\n padR++;\n }\n }\n each(row, function (cell, idx) {\n var index;\n if(data.headings) {\n index = labels.indexOf(data.headings[idx]);\n delete headerCount[index];\n } else {\n index = idx;\n }\n \n if (index > -1) {\n r[index] = cell;\n }\n });\n for (var z = 0; z < headerCount.length; z++) {\n if (headerCount[z]) {\n r[headerCount[z]] = \"\";\n }\n }\n if (r.length == (data.headings ? labels.length : (padR + labels.length))) {\n newrows.push(r);\n } else {\n var msg = \"Row found at index, [ \"+rowIdx+\" ] that did not match the current headers.\";\n console.error(msg);\n uicoreCustomEvent(\"Table\", \"Error\", table, {\"msg\": msg});\n }\n });\n }\n }\n\n if (newrows.length) {\n if(data.details) {\n rows().add(newrows, data.details);\n } else {\n rows().add(newrows);\n }\n columns().rebuild();\n if(searching) {\n var query = wrapper.querySelector(\"input[type='search']\").value;\n self.search(query);\n }\n table.hasRows = true;\n }\n\n fixColumns();\n setRenderColumns();\n columns().rebuild();\n self.update();\n\n if (!metHeight) {\n fixHeight();\n }\n },\n createSpecialCharModal = function(){\n var modal = document.getElementById(prefix +\"csvSpecialChars\");\n if (!modal) {\n var modalEl = createElement(\"div\", {\n class: prefix + \"modal \" + prefix + \"fade\",\n role: \"dialog\",\n aria_labelledby: prefix + \"modal-title\",\n id: prefix+\"csvSpecialChars\",\n tabindex: \"-1\",\n html: \"
\" +\n \"

CSV with Special Characters

\" +\n \"

If you are exporting table data that includes special characters, then you may need to use the following process to see these within Excel:

    \" +\n \"
  1. Open Excel.
  2. \" +\n \"
  3. Open the Data menu.
  4. \" +\n \"
  5. Select the option From Text/CSV.
  6. \" +\n \"
  7. Select the CSV file. This should open an import dialog.
  8. \"+\n \"
  9. Go to File Origin menu and choose the Unicode (UTF-8) options.
  10. \" +\n \"
  11. Load the file to complete the process.
  12. \" +\n \"
\" +\n \"
\" +\n \"
\" +\n \"\" +\n \"\" +\n \"
\" +\n \"
\" +\n \"
\"\n });\n wrapper.appendChild(modalEl);\n var batchActions = wrapper.querySelector(\".\"+prefix+\"table-cmplx-action .\" + prefix + \"btn-dropdown\");\n var csvBtn = batchActions.querySelector(\"[data-target='#\"+prefix+\"csvSpecialChars']\");\n setTimeout(function() {\n var csvModal = new Modal(csvBtn, {\n static: false\n });\n csvModal.show();\n modal = document.getElementById(prefix +\"csvSpecialChars\");\n var continueBtn = modal.querySelector(\".\" +prefix +\"btn-primary\");\n continueBtn.addEventListener(\"click\", function() {\n handleExportActionEvent(csvBtn);\n });\n }, 200);\n }\n },\n isUrl = function (value) {\n return value.match(/(?:(?:https?|ftp):\\/\\/|\\b(?:[a-z\\d]+\\.))(?:(?:[^\\s()<>]+|\\((?:[^\\s()<>]+|(?:\\([^\\s()<>]+\\)))?\\))+(?:\\((?:[^\\s()<>]+|(?:\\(?:[^\\s()<>]+\\)))?\\)|[^\\s`!()[\\]{};:'\".,<>?«»“”‘’]))?/g);\n },\n isEmail = function(value) {\n /* eslint-disable */ \n return value.match(/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/);\n /* eslint-enable */ \n }, \n modifyText = function(text) {\n text = text.trim();\n text = text.replace(/\\s{2,}/g, \" \");\n text = text.replace(/\\n/g, \" \");\n text = text.replace(/\"/g, \"\\\"\\\"\");\n if (text.indexOf(\",\") > -1) text = \"\\\"\" + text + \"\\\"\";\n return text;\n };\n\n if (!options.header) {\n options.sort = false;\n }\n\n if (table.tHead === null) {\n if (!options.data ||\n (options.data && !options.data.headings)\n ) {\n options.sort = false;\n }\n }\n\n if (table.tBodies.length && !table.tBodies[0].rows.length) {\n if (options.data) {\n if (!options.data.rows) {\n throw new Error(\n \"You seem to be using the data option, but you've not defined any rows.\"\n );\n }\n }\n }\n\n /**\n * Expand a row\n * @param {number} rowIdx\n * @return {Void} \n */\n this.expandRow = function(rowIdx) {\n var theRowIdx = validateNum(rowIdx, 0);\n\n if (typeof theRowIdx === \"number\") {\n var expandCell = table.activeRows[theRowIdx].querySelector(\".\" + prefix + \"table-cmplx-accordion-btn\");\n handleAccordionEvent(expandCell);\n }\n return false;\n };\n\n /**\n * Update the instance\n * @return {Void}\n */\n this.update = function() {\n // Remove class that was set from setMessage if applicable\n if (!(options.search && searching && table.searchData.length == 0)) {\n wrapper.classList.remove(prefix + \"table-cmplx-empty\");\n }\n\n paginate();\n\n renderPage();\n\n table.sorting = false;\n\n rows().update();\n\n if (table.hasRows) {\n table.setAttribute(\"aria-rowcount\", table.activeRows.length);\n } else {\n table.setAttribute(\"aria-rowcount\", 0);\n }\n\n table.setAttribute(\"aria-colcount\", table.activeHeadings.length);\n\n uicoreCustomEvent(\"Table\", \"UpdateEvent\", table);\n };\n\n /**\n * Perform a search of the data set\n * @param {string} query\n * @return {void}\n */\n this.search = function(query) {\n if (!table.hasRows) return false;\n \n resetCollapse();\n \n query = query.toLowerCase();\n\n searching = true;\n table.searchData = [];\n\n if (!query.length) {\n searching = false;\n if (currentPage != 1) { //if not already on the first page \n pagination.page(1);\n currentPage = 1;\n }\n this.update();\n pagination.setItems(table.activeRows.length);\n uicoreCustomEvent(\"Table\", \"SearchEvent\", table, { \"query\": query, \"searchData\": table.searchData});\n wrapper.classList.remove(\"search-results\");\n\n return false;\n }\n\n this.clear();\n\n each(table.data, function (row, idx) {\n var inArray = table.searchData.indexOf(row) > -1;\n\n var doesQueryMatch = query.split(\" \").reduce(function (bool, word) {\n \n var includes = false,\n cell = null,\n content = null;\n\n for (var x = baseCellIdx(); x < row.cells.length; x++) {\n cell = row.cells[x];\n content = cell.hasAttribute(\"data-content\") ? cell.getAttribute(\"data-content\") : cell.textContent;\n if (\n content.toLowerCase().indexOf(word) > -1 &&\n columns().visible(cell.cellIndex)\n ) {\n includes = true;\n break;\n }\n }\n\n return bool && includes;\n }, true);\n\n if (doesQueryMatch && !inArray) {\n row.searchIndex = idx;\n table.searchData.push(idx);\n } else {\n row.searchIndex = null;\n }\n }, this);\n\n wrapper.classList.add(\"search-results\");\n if (!table.searchData.length) {\n wrapper.classList.remove(\"search-results\");\n this.setMessage(options.labels.noRows);\n } else {\n if (table.searchData.length > options.perPage && currentPage != 1) { //if not already on the first page \n pagination.page(1);\n }\n currentPage = 1;\n this.update();\n }\n pagination.setItems(table.searchData.length);\n uicoreCustomEvent(\"Table\", \"SearchEvent\", table, {\"query\": query, \"searchData\": table.searchData});\n };\n\n /**\n * Change page\n * @param {int} page\n * @return {void}\n */\n this.page = function(page) {\n \n var newPage;\n\n if (!isNaN(page)) {\n newPage = parseInt(page, 10); \n } else {\n newPage = page;\n }\n\n if (newPage == currentPage || newPage > pages.length || newPage < 0) {\n return false;\n }\n\n currentPage = newPage;\n\n renderPage();\n\n if (options.items > 0) {\n pagination.page(newPage);\n }\n\n uicoreCustomEvent(\"Table\", \"PageChangedEvent\", table, { \"currentPage\": currentPage});\n };\n\n this.perPage = function(detail) {\n \n var newPerPage, newPage, newPages;\n if (!isNaN(detail.perPage)) {\n newPerPage = parseInt(detail.perPage, 10);\n } else {\n newPerPage = detail.perPage;\n }\n if (!isNaN(detail.page)) {\n newPage = parseInt(detail.page, 10);\n } else {\n newPage = detail.page;\n }\n if (!isNaN(detail.pages)) {\n newPages = parseInt(detail.pages, 10);\n } else {\n newPages = detail.perPage;\n }\n\n if (options.perPage != newPerPage) {\n options.perPage = newPerPage;\n totalPages = newPages;\n currentPage = newPage;\n\n this.update();\n\n if (options.items > 0) {\n pagination.perPage(newPerPage);\n }\n \n if(!metHeight) {\n fixHeight();\n }\n }\n };\n\n /**\n * Refresh the instance\n * @return {void}\n */\n this.refresh = function () {\n\n var that = this;\n if (options.search) {\n input.value = \"\";\n searching = false;\n }\n currentPage = 1;\n that.update();\n\n uicoreCustomEvent(\"Table\", \"RefreshEvent\", table);\n };\n\n /**\n * Truncate the table\n * @param {mixes} html - HTML string or HTMLElement\n * @return {void}\n */\n this.clear = function (html) {\n \n if (body) {\n flush(body, isIE);\n }\n\n var parent = body;\n if (!body) {\n parent = table;\n }\n\n if (html) {\n if (typeof html === \"string\") {\n var frag = DOC.createDocumentFragment();\n frag.innerHTML = html;\n parent.appendChild(frag);\n } else {\n parent.appendChild(html);\n }\n }\n };\n\n /**\n * Export table to various formats (csv, txt or sql)\n * @param {Object} exportOptions User options\n * @return {Boolean}\n */\n this.export = function (exportOptions) {\n if (!table.hasHeadings && !table.hasRows) return false;\n\n var headers = table.activeHeadings,\n rows = [],\n arr = [],\n i,\n x,\n str,\n link;\n\n var defaults = {\n download: true,\n skipColumn: [],\n\n filename: params.exportFileName,\n \n // csv\n lineDelimiter: \"\\n\",\n columnDelimiter: \",\",\n\n // sql\n tableName: \"myTable\",\n\n // json\n replacer: null,\n space: 4\n };\n\n // Check for the options object\n if (!isObject(exportOptions)) {\n return false;\n }\n\n var o = extend(defaults, exportOptions);\n\n if (o.type) {\n if (options.select) {\n each(table.selectedRows, function(rowIdx) {\n rows = rows.concat(table.activeRows[rowIdx]);\n });\n } else {\n if (o.currentPage) {\n rows = rows.concat(pages[currentPage-1]);\n } else {\n rows = rows.concat(table.activeRows);\n }\n }\n // Only proceed if we have data\n if (rows.length) {\n var blob;\n if (o.type === \"txt\" || o.type === \"csv\") {\n rows.unshift(header);\n str = \"\";\n\n each(rows, function(row) {\n for (x = 0; x < (options.exportDetails ? row.cells.length + 1: row.cells.length) ; x++) {\n var text;\n if (x === row.cells.length) {\n //add details column if exportDetails = true\n if (rows.indexOf(row) > 0) {\n text = table.data[rows.indexOf(row)-1].details ? table.data[rows.indexOf(row)-1].details : null;\n } else {\n text = \"Details\";\n }\n if (text) {\n\n str += modifyText(text) + o.columnDelimiter;\n }\n } else if (\n x < row.cells.length &&\n o.skipColumn.indexOf(headers[x].originalCellIndex) < 0 &&\n columns(headers[x].originalCellIndex).visible()\n // Check for column skip and visibility\n ) {\n text = row.cells[x].getAttribute(\"data-content\") ? row.cells[x].getAttribute(\"data-content\") : row.cells[x].textContent;\n text = modifyText(text);\n \n var isLink = row.cells[x].querySelector(\"a\");\n if (isLink) {\n text = isLink.getAttribute(\"href\");\n if (text.substring(0,2) === \"//\") { //Excel won't interpret `//www.example.com` as a hyperlink, but will for links in format `www.example.com` or `http://www.example.com`)\n text = text.substring(2, text.length);\n } else if (text.substring(0,7) === \"mailto:\") {\n text = text.substring(7,text.length);\n }\n }\n str += text + o.columnDelimiter;\n }\n }\n // Remove trailing column delimiter\n str = str.trim().substring(0, str.length - 1);\n\n // Apply line delimiter\n str += o.lineDelimiter;\n });\n\n // Remove trailing line delimiter\n str = str.trim().substring(0, str.length - 1);\n\n if (isIE || isEdge) {\n str = encodeURI(str);\n blob = new Blob([decodeURIComponent(str)],{type:\"text/csv;charset=UTF-8\"});\n }\n } else if (o.type === \"json\") {\n // Iterate rows\n each(rows, function(row, idx) {\n arr[idx] = arr[idx] || {};\n // Iterate columns\n for (i = 0; i < (options.exportDetails ? headers.length + 1 : headers.length) ; i++) {\n if (i === headers.length) {\n if (table.data[rows.indexOf(row)].details) {\n arr[idx][\"Details\"] = table.data[rows.indexOf(row)].details;\n }\n } else if (\n // Check for column skip and column visibility\n i < row.cells.length &&\n o.skipColumn.indexOf(headers[i].originalCellIndex) < 0 &&\n columns(headers[i].originalCellIndex).visible()\n ) {\n if (row.cells[i].getAttribute(\"data-content\")) {\n var isLink = row.cells[i].querySelector(\"a\");\n\n if (isLink) { // Aligning with format for exporting to excel\n var url = isLink.getAttribute(\"href\");\n if (url.substring(0,2) === \"//\") {\n arr[idx][headers[i].textContent] = url.substring(2, url.length);\n } else if (url.substring(0,7) === \"mailto:\") {\n arr[idx][headers[i].textContent] = url.substring(7, url.length);\n } else {\n arr[idx][headers[i].textContent] = url;\n }\n } else {\n arr[idx][headers[i].textContent] = row.cells[i].getAttribute(\"data-content\");\n }\n } else {\n arr[idx][headers[i].textContent] = row.cells[i].textContent;\n }\n }\n }\n });\n\n // Convert the array of objects to JSON string\n str = JSON.stringify(arr, o.replacer, o.space);\n if (isIE || isEdge) {\n blob = new Blob([decodeURIComponent(str)],{type:\"text/json;charset=UTF-8\"});\n }\n }\n\n // Download\n if (o.download) {\n // Filename\n o.filename = o.filename || \"datatable_export\";\n o.filename += \".\" + o.type;\n\n \n if (isIE || isEdge) {\n //Internet Explorer\n window.navigator.msSaveBlob(blob, o.filename);\n } else {\n // Create a link to trigger the download\n if (o.type === \"json\") {\n str = encodeURIComponent(str);\n str = \"data:application/json;charset=utf-8,\" + str;\n } else if (o.type === \"csv\") {\n str = encodeURIComponent(str);\n str = \"data:application/csv;charset=utf-8,\" + str;\n }\n link = createElement(\"a\", {\n href: str,\n download: o.filename\n });\n\n // Append the link\n body.appendChild(link);\n\n // Trigger the download\n link.click();\n\n // Remove the link\n body.removeChild(link);\n }\n }\n\n return str;\n }\n }\n\n return false;\n };\n\n /**\n * Import data to the table\n * @param {Object} newData User newData\n * @return {Boolean}\n */\n this.import = function (newData) {\n var obj = false;\n var defaults = {\n // csv\n lineDelimiter: \"\\n\",\n columnDelimiter: \",\"\n };\n\n // Check for the newData object\n if (!isObject(newData)) {\n return false;\n }\n newData = extend(defaults, newData);\n\n if (newData.data.length || isObject(newData.data)) {\n // Import CSV\n if (newData.type === \"csv\") {\n obj = {\n rows: [],\n details: [],\n headings: []\n };\n\n // Split the string into rows\n var rows = newData.data.split(newData.lineDelimiter);\n\n if (rows.length) {\n // var importHeaders = rows[0].replace(/\\r?\\n|\\r/g, \"\").split(newData.columnDelimiter);\n newData.skipColumn = [];\n newData.details = -1;\n // each(importHeaders, function(importHeader, idx) {\n each(rows[0].replace(/\\r?\\n|\\r/g, \"\").split(newData.columnDelimiter), function(importHeader, idx) {\n if (labels.indexOf(importHeader) < 0) {\n if (importHeader != \"Details\") {\n newData.skipColumn.push(idx);\n } else {\n newData.details = idx;\n }\n } else {\n obj.headings.push(importHeader);\n }\n });\n\n if(obj.headings) { //.length + baseCellIdx() >= labels.length) {\n rows.shift();\n if (rows[rows.length-1] == \"\") {\n rows = rows.splice(0, rows.length-1);\n }\n each(rows, function (row, i) {\n row = row.replace(/\\r?\\n|\\r/g, \"\");\n obj.rows[i] = [];\n\n // Split the rows into values\n each(row.split(newData.columnDelimiter), function(value, v) {\n if (newData.skipColumn.indexOf(v) == -1 && newData.details != v) {\n if (isEmail(value)) {\n value = \"\" + value + \"\";\n } else if (isUrl(value)) {\n value = value.substring(0,3) === \"www\" ? \n \"\" + value + \"\" :\n \"\" + value + \"\";\n }\n obj.rows[i].push(value);\n } else if (newData.details == v) {\n obj.details[i] = value;\n }\n });\n });\n } else {\n var msg = \"Supplied text/csv file does not contain the correct Header row!\";\n console.error(msg);\n uicoreCustomEvent(\"Table\", \"Error\", table, {\"msg\": msg});\n }\n }\n } else if (newData.type === \"json\") {\n var json = isJson(newData.data);\n\n // Valid JSON string\n if (json) {\n obj = {\n rows: [],\n details: [],\n headings: []\n };\n\n if(isArray(json)) {\n var idx = 0;\n each(json, function (data) {\n obj.rows[idx] = [];\n obj.details[idx] = \"\";\n each(data, function(value, importHeader) {\n if (labels.indexOf(importHeader) < 0) {\n if (importHeader === \"Details\") {\n obj.details[idx] = value;\n }\n } else {\n if (obj.headings.indexOf(importHeader) < 0) {\n obj.headings.push(importHeader);\n }\n if (isEmail(value)) {\n value = \"\" + value + \"\";\n } else if (isUrl(value)) {\n value = value.substring(0,3) === \"www\" ?\n \"\" + value + \"\" :\n \"\" + value + \"\";\n }\n obj.rows[idx].push(value);\n }\n });\n idx++;\n });\n } else {\n msg = \"That's not valid JSON array data!\";\n console.error(msg);\n uicoreCustomEvent(\"Table\", \"Error\", table, {\"msg\": msg});\n }\n } else {\n msg = \"That's not valid JSON!\";\n console.error(msg);\n uicoreCustomEvent(\"Table\", \"Error\", table, {\"msg\": msg});\n }\n } else if (isObject(newData.data)) {\n obj = newData.data;\n obj.details = [];\n each(obj.rows, function(row, idx) {\n obj.rows[idx] = row.data;\n obj.details.push(row.details);\n });\n } else {\n return new Error(\"\");\n }\n if (obj) {\n // Add the rows\n insert(obj);\n }\n }\n\n return false;\n };\n\n /**\n * Print the table\n * @return {void}\n */\n this.print = function () {\n var headings = table.activeHeadings;\n var rows = table.activeRows;\n\n // Open new window\n var w = window.open();\n var d = w.document;\n\n var pTable = d.createElement(\"table\");\n var thead = d.createElement(\"thead\");\n var tbody = d.createElement(\"tbody\");\n\n var tr = d.createElement(\"tr\");\n each(headings, function (th) {\n var newTh = d.createElement(\"th\");\n newTh.appendChild(d.createTextNode(th.textContent));\n tr.appendChild(newTh);\n });\n\n thead.appendChild(tr);\n\n each(rows, function (row) {\n var tr = d.createElement(\"tr\");\n each(row.cells, function (cell) {\n var newCell = d.createElement(\"td\");\n newCell.appendChild(d.createTextNode(cell.textContent));\n tr.appendChild(newCell);\n });\n tbody.appendChild(tr);\n });\n\n pTable.appendChild(thead);\n pTable.appendChild(tbody);\n\n d.body.appendChild(pTable);\n\n // Print\n w.print();\n };\n\n /**\n * Show a message in the table\n * @param {string} message\n */\n this.setMessage = function (message) {\n\n var colspan = labels.length;\n wrapper.classList.add(prefix + \"table-cmplx-empty\");\n\n this.clear(\n createElement(\"tr\", {\n html: \"\" +\n message +\n \"\"\n })\n );\n\n if(!metHeight) {\n fixHeight();\n }\n };\n\n this.insertDetails = function(rowId, details) {\n var row = table.activeRows[rowId];\n if (row.event != \"ExpandCancelEvent\") {\n var stripeColor = false;\n if (table.classList.contains(prefix + \"table-striped\")) {\n stripeColor = rowId % 2 > 0 ? prefix + \"table-cmplx-row-odd\" : prefix + \"table-cmplx-row-even\";\n }\n table.data[rowId].details = row.details = details;\n renderDetails(row, table.headings.length, stripeColor);\n\n var button = row.cells[0].querySelector(\".\" + prefix + \"table-cmplx-accordion-btn\");\n each(row.cells[0].querySelectorAll(\"use\"), function(use) {\n if (use.getAttribute(\"xlink:href\").indexOf(prefix + \"loading-sqrs\") != -1) {\n classRemove(use, prefix +\"show\");\n } else {\n classAdd(use, prefix + \"show\");\n button.classList.remove(prefix + \"collapsed\");\n button.setAttribute(\"aria-expanded\", true);\n }\n });\n this.update();\n uicoreCustomEvent(\"Table\", \"ExpandEndEvent\", table, {\"rowId\": rowId});\n } else {\n return false;\n }\n return true;\n };\n\n this.delete = function() {\n var that = this;\n if (table.selectedRows.length == 0) {\n return false;\n } else {\n rows().remove(table.selectedRows);\n columns().rebuild();\n pagination.removeItems(table.selectedRows.length);\n if (options.items > 0) {\n options.items -= table.selectedRows.length;\n }\n }\n\n if (table.activeRows.length == 0) {\n table.hasRows = false;\n var cell = header.cells[getHeaderCellIndex(prefix + \"table-cmplx-select-all\")];\n var input = cell.querySelector(\"input[type='checkbox']\");\n if (input.checked) {\n input.checked = false;\n input.state = \"unchecked\";\n }\n handleSelectAllChange(input.state);\n }\n\n if (searching) {\n var query = wrapper.querySelector(\"input[type='search']\").value;\n var searchResults = table.searchData.length;\n table.searchData = [];\n searching = false;\n if (searchResults == table.selectedRows.length) {\n wrapper.querySelector(\"input[type='search']\").value = \"\";\n that.update();\n } else {\n that.search(query);\n }\n } else {\n that.update();\n }\n\n table.selectedRows = [];\n if (!table.hasRows) {\n this.setMessage(options.labels.noRows);\n }\n uicoreCustomEvent(\"Table\",\"DeleteEvent\", table, { \"rowIds\": table.selectedRows});\n\n };\n\n this.deleteAll = function() {\n var that = this;\n if (table.data.length == 0) {\n return false;\n } else { \n table.data = [];\n pages = [];\n currentPage = 1;\n rows().update();\n columns().rebuild();\n options.items = 0;\n options.perPage = options.origPerPage;\n pagination.setItems(0);\n }\n\n table.hasRows = false;\n\n if (options.select) {\n var cell = header.cells[getHeaderCellIndex(prefix + \"table-cmplx-select-all\")];\n var input = cell.querySelector(\"input[type='checkbox']\");\n if (input && (input.checked || input.state === \"indeterminate\")) {\n input.click();\n input.checked = false;\n input.state = \"unchecked\";\n }\n handleSelectAllChange(input.state);\n }\n\n\n if (searching) {\n searching = false;\n wrapper.querySelector(\"input[type='search']\").value = \"\";\n } \n that.update(); \n\n this.setMessage(options.labels.noRows);\n\n uicoreCustomEvent(\"Table\",\"DeleteAllEvent\", table); \n };\n\n this.setItems = function(items) {\n var newNum = validateNum(items);\n if (!newNum || options.items != 0) {\n return false;\n } else {\n options.items = newNum;\n pagination.setItems(options.items);\n }\n };\n\n //init\n if (!(stringTable in element)) {\n // Set the tables Id\n var crypto = window.crypto || window.msCrypto;\n batchId = crypto.getRandomValues(new Uint32Array(10))[0];\n allCheckboxId = \"checkAll_\" + batchId;\n if (options.search && options.text.search.label) {\n searchId = crypto.getRandomValues(new Uint32Array(10))[0];\n }\n\n table.data = null; // populated in dataToTable\n table.hasRows = false; // set in render\n table.headings = []; // duplicate commented out of code in render\n table.hasHeadings = false;\n \n // IE detection\n isIE = !!/(msie|trident)/i.test(navigator.userAgent);\n\n currentPage = 1;\n\n columnRenderers = [];\n selectedColumns = [];\n\n \n table.activeHeadings = [];\n \n table.sorting = false;\n \n table.searchData = [];\n table.hiddenColumns = [];\n if (options.select)\n table.selectedRows = [];\n\n render();\n\n // Options pagination\n if (options.pagination) {\n var itemCount = options.items > 0 ? options.items : table.activeRows.length;\n pagination = new Pagination(paginationElement, {\n perPageSelect: options.perPageSelect,\n perPage: options.perPage,\n items: itemCount,\n pageText: params.text && params.text.pageText,\n itemsPerPageText: params.text && params.text.itemsPerPageText,\n hidePages: params.hidePages,\n external: options.items == 0 ? false : true,\n buttonLabelLeft: options.buttonLabelLeft,\n buttonLabelRight: options.buttonLabelRight,\n disablePaginationInput: options.disablePaginationInput,\n showTotal: options.showTotal\n });\n // Option to override the item count was padded in\n if (options.items == 0) {\n paginationElement.parentNode.addEventListener(\"uicPaginationPageUpdateEvent\", function(e) {\n self.page(e.detail.page);\n }, false);\n paginationElement.parentNode.addEventListener(\"uicPaginationPerPageUpdateEvent\", function(e) {\n self.perPage(e.detail);\n }, false);\n } else {\n paginationElement.parentNode.addEventListener(\"uicPaginationPageChangeEvent\", function(e) {\n if (table.activeRows.length < (e.detail.page * e.detail.perPage)) {\n var rowsNeeded = (e.detail.page * e.detail.perPage) - table.activeRows.length;\n if ((e.detail.page * e.detail.perPage) > options.items) {\n rowsNeeded = options.items - table.activeRows.length;\n }\n if (rowsNeeded > 0) {\n uicoreCustomEvent(\"Table\", \"NewPageEvent\", table, { \"page\": e.detail.page, \"rows\" : rowsNeeded });\n } else {\n self.page(e.detail.page);\n }\n } else {\n self.page(e.detail.page);\n }\n }, false);\n paginationElement.parentNode.addEventListener(\"uicPaginationPerPageChangeEvent\", function(e) {\n if ((e.detail.page * e.detail.perPage) > table.activeRows.length ) {\n var rowsNeeded = (e.detail.page * e.detail.perPage) - table.activeRows.length;\n if ((e.detail.page * e.detail.perPage) <= options.items) {\n uicoreCustomEvent(\"Table\", \"MoreRowsEvent\", table, { \"page\": e.detail.page, \"perPage\": e.detail.perPage, \"rows\" : rowsNeeded });\n } else {\n self.perPage(e.detail);\n }\n } else {\n self.perPage(e.detail);\n }\n }, false);\n }\n }\n\n // Options condensed\n if (options.condensed) {\n wrapper.querySelector(\".\" + prefix + \"table-cmplx\").classList.add(prefix + \"condensed\");\n }\n\n each(wrapper.querySelectorAll(\"[data-toggle=\\\"dds__dropdown\\\"]\"), function(drop) {\n if (drop.classList.contains(prefix+\"table-cmplx-action-button\")) {\n new Dropdown(drop);\n }\n });\n }\n\n element[stringTable] = self;\n}\n","import {getClosest,globalObject,DOC,prefix,styleTip,emulateTransitionEnd,uicoreCustomEvent, createElement, validateNum, jsonOptionsInit, isIOS} from \"./utilities.js\";\r\n\r\nexport default function Tooltip(element, options) {\r\n // initialization element\r\n element = element instanceof HTMLElement ? element : (function() {\r\n return false;\r\n })();\r\n\r\n // set options\r\n options = options || {};\r\n options = jsonOptionsInit(element, options);\r\n var textAlignments = [\"left\", \"center\", \"right\"];\r\n // init options\r\n options.title = element.dataset.title ? element.dataset.title : options.data_title ? options.data_title : null,\r\n options.animation = options.animation && options.animation === \"boolean\" ? options.animation : options.animation && options.animation === prefix + \"fade\" ? prefix + \"fade\" : false;\r\n options.placement = element.dataset.placement ? element.dataset.placement : options.data_placement ? options.data_placement : null;\r\n options.textAlign = element.dataset.text_align && textAlignments.indexOf(element.dataset.text_align.toLowerCase()) > -1 \r\n ? element.dataset.text_align.toLowerCase() : options.text_align && textAlignments.indexOf(options.text_align.toLowerCase()) > -1 \r\n ? options.text_align.toLowerCase() : \"center\";\r\n options.delay = element.dataset.delay ? validateNum(element.dataset.delay, 60) : validateNum(options.delay, 60);\r\n options.container = element.dataset.container ? element.dataset.container : options.container ? options.container : DOC.body;\r\n\r\n \r\n // validate options\r\n (function () {\r\n if (options.title == null) {\r\n throw new Error(\"There was a problem found with title value, please correct and try again\");\r\n }\r\n if (options.placement == null) {\r\n throw new Error(\"There was a problem found with placement value, please correct and try again\");\r\n }\r\n var inOffCanvas = getClosest(element, \".\" + prefix + \"modal-offcanvas\");\r\n if(inOffCanvas) {\r\n options.container = inOffCanvas;\r\n } else {\r\n var inFixedTop = getClosest(element, \".fixed-top\");\r\n if(inFixedTop) {\r\n options.container = inFixedTop;\r\n } else {\r\n var inFixedBottom = getClosest(element, \".fixed-bottom\");\r\n if(inFixedBottom) {\r\n options.container = inFixedBottom;\r\n }\r\n }\r\n }\r\n\r\n })();\r\n\r\n // bind, event targets, title and constants\r\n var self = this,\r\n stringTooltip = \"Tooltip\",\r\n mouseHover = \"onmouseleave\" in DOC ? [\"mouseenter\", \"mouseleave\"] : [\"mouseover\", \"mouseout\"],\r\n tooltip,\r\n tooltipArrow,\r\n createToolTip = function() {\r\n\r\n var tooltipIdText = options.title.replace(/[\\s\\W]/g, \"\").toLowerCase().substring(0, 15);\r\n var tooltipId = tooltipIdText;\r\n var counter = 1;\r\n while (DOC.getElementById(tooltipId)) {\r\n tooltipId = tooltipIdText + counter;\r\n counter++;\r\n }\r\n\r\n tooltip = createElement(\"div\", {\r\n role: \"tooltip\",\r\n aria_describedby: tooltipId\r\n });\r\n tooltip.style[\"top\"] = \"0px\"; //move tooltip to top to prevent scrollbar during calculation\r\n\r\n // tooltip arrow\r\n tooltipArrow = createElement(\"div\", {\r\n class: prefix + \"arrow \" + prefix + \"position-absolute \" + prefix + \"d-block\"\r\n });\r\n\r\n tooltip.appendChild(tooltipArrow);\r\n // tooltip inner\r\n\r\n var tooltipInner = createElement(\"div\", {\r\n class: prefix+\"tooltip-inner \" + prefix + \"text-\" + options.textAlign,\r\n html: options.title,\r\n id: tooltipId\r\n });\r\n tooltip.appendChild(tooltipInner);\r\n\r\n options.container.appendChild(tooltip);\r\n tooltip.setAttribute(\"class\", prefix+\"tooltip \" + prefix+\"bs-tooltip\"+\"-\"+options.placement + \" \" + options.animation + \" \" + prefix + \"position-absolute \" + prefix + \"d-block \" + prefix + \"break-word\");\r\n },\r\n updateTooltip = function() {\r\n tooltip.setAttribute(\"style\", \"\");\r\n tooltipArrow.setAttribute(\"style\", \"\");\r\n styleTip(element, tooltip, options.placement, options.container, true);\r\n },\r\n showTooltip = function() {\r\n !(tooltip.classList.contains(prefix + \"show\")) && tooltip.classList.add(prefix + \"show\");\r\n },\r\n // triggers\r\n showTrigger = function() {\r\n globalObject.addEventListener(\"resize\", self.hide, false);\r\n uicoreCustomEvent(\"Tooltip\", \"Shown\", element);\r\n },\r\n hideTrigger = function() {\r\n globalObject.removeEventListener(\"resize\", self.hide);\r\n uicoreCustomEvent(\"Tooltip\", \"Hidden\", element);\r\n },\r\n keyHandler = function(e) {\r\n var key = e.which || e.keyCode;\r\n if (key === 27) {\r\n self.hide(e);\r\n } else if (key === 13) {\r\n self.show();\r\n }\r\n },\r\n touchHandler = function(e) {\r\n if (tooltip.classList.contains(prefix + \"show\")) {\r\n if ((!e.target === tooltip || !tooltip.contains(e.target)) && element !== e.target) {\r\n self.hide();\r\n }\r\n }\r\n };\r\n\r\n // public methods\r\n this.show = function() {\r\n setTimeout(function() {\r\n updateTooltip();\r\n showTooltip();\r\n uicoreCustomEvent(\"Tooltip\", \"ShowEvent\", element);\r\n options.animation\r\n ? emulateTransitionEnd(tooltip, showTrigger)\r\n : showTrigger();\r\n }, options.delay);\r\n };\r\n this.hide = function(e) {\r\n var target = DOC.activeElement;\r\n if (e && e.relatedTarget) {\r\n target = e.relatedTarget;\r\n }\r\n if ((!target === tooltip || !tooltip.contains(target)) && target !== element) {\r\n setTimeout(function() {\r\n if (tooltip && tooltip.classList.contains(prefix + \"show\")) {\r\n uicoreCustomEvent(\"Tooltip\", \"HideEvent\", element);\r\n tooltip.classList.remove(prefix + \"show\");\r\n options.animation\r\n ? emulateTransitionEnd(tooltip, hideTrigger)\r\n : hideTrigger();\r\n }\r\n }, options.delay);\r\n }\r\n };\r\n this.toggle = function() {\r\n if (!tooltip) {\r\n self.show();\r\n } else {\r\n self.hide();\r\n }\r\n };\r\n\r\n // init\r\n if (!(stringTooltip in element)) {\r\n // prevent adding event handlers twice\r\n element.setAttribute(\"data-original-title\", options.title);\r\n element.removeAttribute(\"title\");\r\n element.addEventListener(mouseHover[0], self.show, false);\r\n element.addEventListener(\"focusin\", self.show, false);\r\n element.addEventListener(mouseHover[1], self.hide, false); \r\n element.addEventListener(\"focusout\", self.hide, false);\r\n element.addEventListener(\"keydown\", keyHandler, false);\r\n if(isIOS){\r\n element.addEventListener(\"click\", self.show, false);\r\n window.addEventListener(\"touchstart\", touchHandler, false);\r\n }\r\n if (!tooltip) {\r\n createToolTip();\r\n tooltip.addEventListener(\"mouseleave\", self.hide, false);\r\n }\r\n }\r\n\r\n element[stringTooltip] = self;\r\n}","import Alert from \"./alert.js\";\nimport {BarSelect} from \"./select.js\";\nimport {Button} from \"./button.js\";\nimport {ButtonFilter} from \"./button.js\";\nimport {Carousel} from \"./carousel.js\";\nimport {FilmstripCarousel} from \"./carousel.js\";\nimport Collapse from \"./collapse.js\";\nimport ContactDrawer from \"./contact-drawer.js\";\nimport {DatePicker} from \"./select.js\";\nimport Dropdown from \"./dropdown.js\";\nimport {FilterCollection} from \"./filter.js\";\nimport {FilterKeyword} from \"./filter.js\";\nimport Form from \"./form.js\";\nimport LinkPicker from \"./linkpicker.js\";\nimport Masthead from \"./masthead.js\";\nimport Modal from \"./modal.js\";\nimport {NavAnchored} from \"./nav.js\";\nimport {NavAnchoredVertical} from \"./nav.js\";\nimport {NavSkip} from \"./nav.js\";\nimport {NavLeft} from \"./nav.js\";\nimport Pagination from \"./pagination.js\";\nimport Popover from \"./popover.js\";\nimport ProductStack from \"./product-stack.js\";\nimport Progress from \"./progress.js\";\nimport {NavSkip as SkipNav} from \"./nav.js\";\nimport Slider from \"./slider.js\";\nimport {Spinbox} from \"./select.js\";\nimport Tab from \"./tab.js\";\nimport Table from \"./table.js\";\nimport Tooltip from \"./tooltip.js\";\nimport { DOC, prefix, handleFirstTab, loadURLSVGs, each } from \"./utilities.js\";\n\n// globals\nvar body = \"body\", // allow the library to be used in \n supports = [];\n\nvar initializeDataAPI = function (constructor, collection) {\n each(collection, function(i) {\n new constructor(i);\n })\n },\n initCallback = function (lookUp) {\n lookUp = lookUp || DOC;\n each(supports, function(support) {\n initializeDataAPI(\n support[0],\n lookUp[\"querySelectorAll\"](support[1])\n );\n\n })\n};\n\n// ALERT DATA API\nsupports[\"push\"]([Alert, \"[data-dismiss=\\\"\" + prefix + \"alert\\\"]\"]);\n\n// BUTTON DATA API\nsupports[\"push\"]([Button, \"[data-toggle=\\\"\" + prefix + \"button\\\"]\"]);\n\n// BUTTON DATA API\nsupports[\"push\"]([BarSelect, \"[data-toggle=\\\"\" + prefix + \"bar-select\\\"]\"]);\n\n// BUTTON FILTER DATA API\nsupports[\"push\"]([ButtonFilter, \"[data-toggle=\\\"\" + prefix + \"button-filter\\\"]\"]);\n\n// CAROUSEL DATA API\nsupports[\"push\"]([Carousel, \"[data-ride=\\\"\" + prefix + \"carousel\\\"]\"]);\n\n// CAROUSEL FILMSTRIP DATA API\nsupports[\"push\"]([FilmstripCarousel, \"[data-toggle=\\\"\" + prefix + \"filmstrip-carousel\\\"]\"]);\n\n// COLLAPSE DATA API\nsupports[\"push\"]([Collapse, \"[data-toggle=\\\"\" + prefix + \"collapse\\\"]\"]);\n\n// CONTACT DRAWER DATA API\nsupports[\"push\"]([ContactDrawer, \"[data-toggle=\\\"\" + prefix + \"contact-drawer\\\"]\"]);\n\n// DROPDOWN DATA API\nsupports[\"push\"]([Dropdown, \"[data-toggle=\\\"\" + prefix + \"dropdown\\\"]\"]);\n\n// DATEPICKER DATA API\nsupports[\"push\"]([DatePicker, \"[data-toggle=\\\"\" + prefix + \"datepicker\\\"]\"]);\n\n// FILTER COLLECTION DATA API\nsupports[\"push\"]([FilterCollection, \"[data-toggle=\\\"\" + prefix + \"filter-collection\\\"]\"]);\n\n// KEYWORD FILTER DATA API\nsupports[\"push\"]([FilterKeyword, \"[data-toggle=\\\"\" + prefix + \"filter-keyword\\\"]\"]);\n\n// FORM CAROUSEL DATA API\nsupports[\"push\"]([Form, \"[data-toggle=\\\"\" + prefix + \"form-validation\\\"]\"]);\n\n// LINKPICKER DATA API\nsupports[\"push\"]([LinkPicker, \"[data-toggle=\\\"\" + prefix + \"linkpicker\\\"]\"]);\n\n// MASTHEAD DATA API\nsupports[\"push\"]([Masthead, \"[data-toggle=\\\"\" + prefix + \"msthd\\\"]\"]);\n\n// MODAL DATA API\nsupports[\"push\"]([Modal, \"[data-toggle=\\\"\" + prefix + \"modal\\\"]\"]);\n\n// NAVIGATION ANCHORED DATA API\nsupports[\"push\"]([NavAnchored, \"[data-toggle=\\\"\" + prefix + \"nav-anchored\\\"]\"]);\n\n// NAVIGATION ANCHORED VERTICAL DATA API\nsupports[\"push\"]([NavAnchoredVertical, \"[data-toggle=\\\"\" + prefix + \"nav-anchored-vertical\\\"]\"]);\n\n// NAV LEFT DATA API\nsupports[\"push\"]([NavLeft, \"[data-toggle=\\\"\" + prefix +\"nav-left\\\"]\"]);\n\n// SKIPNAV DATA API\nsupports[\"push\"]([NavSkip, \"[data-toggle=\\\"\" + prefix +\"nav-skip\\\"]\"]);\n\n// PAGINATION DATA API\nsupports[\"push\"]([Pagination, \"[data-toggle=\\\"\" + prefix + \"pagination\\\"]\"]);\n\n// POPOVER DATA API\nsupports[\"push\"]([Popover, \"[data-toggle=\\\"\" + prefix + \"popover\\\"]\"]);\n\n// PRODUCTSTACK DATA API\nsupports[\"push\"]([ProductStack, \"[data-toggle=\\\"\" + prefix + \"product-stack\\\"]\"]);\n\n// PROGRESS DATA API\nsupports[\"push\"]([Progress, \"[data-toggle=\\\"\" + prefix + \"progress\\\"]\"]);\n\n// SKIPNAV DATA API\nsupports[\"push\"]([SkipNav, \"[data-toggle=\\\"\" + prefix +\"nav-skip\\\"]\"]);\n\n// Slider DATA API\nsupports[\"push\"]([Slider, \"[data-toggle=\\\"\" + prefix + \"slider\\\"]\"]);\n\n// Spinbox DATA API\nsupports[\"push\"]([Spinbox, \"[data-toggle=\\\"\" + prefix + \"spinbox\\\"]\"]);\n\n// TABLE DATA API\nsupports[\"push\"]([Table, \"[data-table=\\\"\" + prefix + \"table\\\"]\"]);\n\n// TAB DATA API\nsupports[\"push\"]([Tab, \"[data-toggle=\\\"\" + prefix + \"tab\\\"]\"]);\n\n// TOOLTIP DATA API\nsupports[\"push\"]([Tooltip, \"[data-toggle=\\\"\" + prefix + \"tooltip\\\"]\"]);\n\n// bulk initialize all components\nDOC[body] ? initCallback() : DOC.addEventListener(\"DOMContentLoaded\", function () {\n initCallback();\n});\n\nwindow.addEventListener(\"keydown\", handleFirstTab);\n\nexport {\n Alert, BarSelect, Button, ButtonFilter, Carousel, Collapse, ContactDrawer, DatePicker, Dropdown, FilmstripCarousel, FilterCollection, FilterKeyword, Form, LinkPicker, Masthead, Modal, NavAnchored, NavAnchoredVertical, NavLeft, NavSkip, Pagination, Popover, ProductStack, Progress, SkipNav, Slider, Spinbox, Tab, Table, Tooltip,\n handleFirstTab, loadURLSVGs\n};\n"],"file":"dds-all.min.js"}