{"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/fileupload.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/index.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","proceed","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","extend","src","props","prop","singleLineCSVtoArray","p","s","l","InputMask","HTMLElement","wrap","mNum","spacing","hasValue","charSet","charset","cursorMin","handleValueChange","cursor","target","mask","italic","selectionEnd","handleCurrentValue","setValueOfMask","max","setSelectionRange","j","isInt","isLetter","strippedValue","isCharsetPresent","placeholder","newValue","matchesNumber","matchesLetter","undefined","validateProgress","validExample","pattern","RegExp","testValue","toUpperCase","Error","class","aria_hidden","emphasis","tClass","pTxt","createTextNode","errorDiv","removeAttribute","insertBefore","createShell","char","initKeyboardEvent","KeyboardEvent","cancelable","shiftKey","Overflow","type","top","lazyload","responsive","overflowElement","overflowContainer","overflowChildren","overflowChildRight","overflowChildLeft","leftCtrl","rightCtrl","ctrlWidth","containerLeft","containerRight","centered","atLeftEnd","atRightEnd","centeredOffset","containerHeight","containerWidth","handleResize","getChildrenWidth","setLeftAndRightIndex","addHeightStyle","abs","offsetLeft","width","hasAttribute","currentOffset","pageRight","left","handleClickEvent","isRight","controlClick","rightChild","children","rightElementEdge","leftChild","tabLeft","contSpace","remainder","child","getMargin","push","currentStyle","convertRemToPixels","marginLeft","marginRight","els","height","overflowChildLeftSet","offSet","useCentered","toggleCentered","setContainerLeftRight","idx","childLeft","setMinimumWidth","minWidth","right","totalItems","hasRightControl","hasLeftControl","rem","computed","split","fontSize","ceil","setCtrlWidth","frameListener","requestAnimationFrame","init","aria-label","controls","control","leftSvg","aria-hidden","rightSvg","createArrowHtml","lazyLoad","getCurrentDetails","clickRight","clickLeft","clickEnd","clickHome","overflow","Collapse","href","activeCollapse","activeElement","showAllBtn","hideAllBtn","accordion","collapse","isClickable","closeAction","collapseElement","toggle","isAnimating","scrollHeight","preventDefault","hide","showHideAll","Dropdown","persist","menuItems","itemsChecked","currentText","filters","isMultiSelect","menu","preventEmptyAnchor","anchor","toggleDismiss","open","dismissHandler","preventScroll","windowClickHandler","eventTarget","hasData","clickHandler","checked","filterInput","index","splice","recountChecked","which","keyHandler","activeItem","isMenuOpen","isSameElement","isInsideMenu","isMenuItem","firstElementChild","click","displayTxt","checkedCounter","html","formatDisplayCount","currentTarget","dropdownEls","dropdownEl","menuItem","Modal","static","backdrop","focusableEls","header","origRightPadding","scrollbarWidth","modalElement","setFocusableElements","firstFocusableEl","lastFocusableEl","handleBackwardTab","focusVisibilityHandler","handleForwardTab","keydownHandlerToggle","triggerShow","loading","triggerHide","display","isInDropdown","isInSplitBtn","keyboard","minDistance","clientHeight","activeElementIdx","prevFocusableEl","nextFocusableEl","scrollToElement","getBoundingClientRect","scrollTop","visibility","paddingRight","innerWidth","clientWidth","dissmissEl","potentialHeader","FilterKeyword","addButton","filterCntr","handleKeyEvent","clickOutHandler","trim","ResizeElement","cancel","raf","attachEvent","stylesCreated","requestFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","cancelFrame","cancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","resetTriggers","triggers","__resizeTriggers__","expand","contract","lastElementChild","expandChild","scrollLeft","scrollWidth","scrollListener","__resizeRAF__","__resizeLast__","checkTriggers","__resizeListeners__","forEach","animation","keyframeprefix","animationstartevent","domPrefixes","startEvents","animationName","animationKeyframes","animationStyle","addResizeListener","css","head","getElementsByTagName","styleSheet","cssText","createStyles","removeResizeListener","detachEvent","NavSkip","tabindex","borderStyle","dataInset","focusOutHandler","toggleZindex","zIndex","opacity","button","focusElement","blurHandler","border","Pagination","page","items","pageText","itemsPerPageText","perPageSelect","map","perPage","hidePages","external","buttonLabelLeft","buttonLabelRight","disablePaginationInput","showTotal","pagination","currentPage","previousPerPage","newPage","totalPages","newTotalPages","lastPage","onFirstPage","onLastPage","links","template","prevText","nextText","origPerPage","handlePaginationEvent","buttons","pages","handleKeydownEvent","queryStr","handleFocusoutEvent","handleChangeEvent","renderPage","update","origCurrentPage","firstItemOnPage","renderPageInput","pageInputWrapper","pageInputTextBefore","pageInputField","disabled","pageInputTextAfter","bEl","data-page","span","totalItemsWrapper","origTotalPages","frag","createDocumentFragment","prev","next","cloneNode","hasInput","renderPager","select","option","Option","label","renderSelect","newPerPage","addItems","removeItems","remItems","setItems","newItems","spanItems","outerHTML","paginator","role","render","Columns","dt","swap","columns","cols","headings","order","cell","temp","column","originalCellIndex","sortable","hiddenColumns","row","dataIndex","expandable","searchIndex","cells","activeHeadings","lastTh","activeRows","rebuild","visible","th","td","that","insert","heading","rows","nodeName","format","renderHeader","sort","hasHeadings","sorting","btm","alpha","numeric","tr","content","Date","updateSortDirection","concat","selectedRows","indexes","v","searchData","cellIndex","Rows","build","tdx","txt","hasRows","Alert","closeButton","dismissMessage","BarSelect","selects","input","mouseOverHandler","focusHandler","isInViewport","scrollIntoView","bounding","bottom","innerHeight","Button","pxToMove","btnWidth","onEl","offEl","circleEl","btnToggle","toggled","labels","otherLabel","otherInput","toggleOff","transform","toggleOn","widthOff","widthOn","ButtonFilter","inactiveFilterItem","activeFilterItem","lastActiveItem","focusInEventHandler","filterItem","parentFieldset","filterItems","Carousel","interval","pause","mosaic","visibilityState","smallMediaSize","matchMedia","mouseHover","stopAutoRotate","timer","isSliding","slides","total","slideDirection","leftArrow","rightArrow","svgIndicator","svgIndicators","btnIndicator","btnIndicators","indicators","isFocused","politeElement","pauseHandler","clearTimer","resumeHandler","cycle","indicatorHandler","dataSlideAttr","activeClassTarget","slideTo","controlsHandler","srcElement","setActivePage","pageIndex","indicator","clearInterval","updateIndicatorButtonCurrent","slideIndex","indicatorIndex","spanCurrent","updatePolite","innerText","togglePolite","activePolite","setNextFocusableAfterSlide","nextSlide","nextFocusableElements","setInterval","viewportHeight","getActiveIndex","slide-to","spanSlide","indicatorButton","matches","imgTag","backgroundImage","ieMosaicPolyfill","addListener","swipe","start","end","params","min","getTouch","screenX","screenY","touches","downListener","touch","moveListener","upListener","swipeInit","childIndicator","ContactDrawer","openTime","closedTime","transitionTime","tab","cancelAutomation","toggleAction","openAction","hidden","timerAction","toggleOptionsStr","contactDrawer","toggleOptions","OpenTimeInSeconds","CloseTimeInSeconds","TransitionTimeInMilliseconds","setDrawerToggleOptions","transition","DatePicker","datesFilter","pastDates","availableWeekDays","day","notBeforeDate","notAfterDate","button_prev","button_next","currentSelected","calendarWrapper","calendarBtn","dateInput","calendar","form","monthEl","smallMedia","tempSelected","todaysDate","monthLabel","datePtr","monthsTexts","weekDays","freeze","TAB","ENTER","ESC","SPACE","PAGEUP","PAGEDOWN","END","HOME","getMonthName","date","getMonth","toggleCalendar","resetPosition","createOverlay","repositionIfNeeded","dateText","validity","valid","checkDateValidity","getFullYear","setFullYear","setMonth","createMonth","newDateElem","nextBtn","getTime","resetToDefaultDate","removeActiveClass","removeOverlay","elementRect","calendarRect","elementCenterPercent","elementExceedsTop","elementExceedsBottom","scrHeightRemain","scrHeightRemainProportional","calendarExceedsBottom","calendarExceedsTop","calendarFitScr","calendarTopToReachProportion","getWeekDay","__formatDate","pad","z","String","o","getDate","__generateDateRange","startDate","endDate","dates","idate","udate","setDate","createDay","isAvailable","dateElem","btn","dateKeydownHandler","getDay","join","__createDayBtn","newDayElem","__createDayWrapper","available_week_day","defaultDate","stringify","removeTempClass","getNearestAvailableDay","clearCalendar","previousPtr","nextPtr","base","baseDate","year","month","firstDay","lastDay","__generateCalendar","datas","calendarDate","setNewDate","updateMonthNavLabel","prevMonthDate","nextMonthDate","monthPrev","monthNext","initEvent","setNewTempDate","prevDate","currentDate","getNextAvailableDay","oldSelected","possibleDates","reduce","acc","returnValue","prevSelected","buttonKeydownHandler","inputHandler","errorMsg","setCustomValidity","wrapper","bottomMenu","createCalendar","destroy","reset","setHours","checkValidity","stopPropagation","defaultDay","defaultMonth","blur","FileUpload","extensionErrorMessage","sizeErrorMessage","maxSize","maxSizeLabel","hasBeforeDelete","beforeDelete","Function","hasAfterDelete","afterDelete","hasUploadAction","uploadAction","hasProgressAction","progressAction","hasErrorAction","errorAction","hasBeforeUpload","beforeUpload","bytesToSize","size","suffix","isMB","getRounded","round","removeFile","tempName","files","renderFileList","loaded","fileString","result","updateProgress","lengthComputable","errorHandler","error","loadFile","readFile","beforeEventReturn","File","FileReader","reader","loadFormat","readAsBinaryString","readAsArrayBuffer","readAsDataURL","readAsText","onprogress","onload","onerror","errorTemplate","message","Container","bodyAlign","icon","messageBox","messageText","validateSize","file","getFileName","bytesToSizeInfo","resultLine","data_key","aria_labelledby","fileSizeBox","arial_label","iconDelete","fileSizeText","fileNameText","buttonRemoveText","buttonRemove","sizeError","extensionError","fileName","allowedExensions","originalSize","factor","sizeToBytes","placeholderText","FilmstripCarousel","itemsView","handleOverflowChange","updateItemsView","clickEventHandler","rightNumber","leftNumber","success","msg","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","behavior","handleClearAllEvent","toggleClearAllButtons","clearFilter","clearMultiSelects","updateFiltersCount","filtersAsStrings","handleDesktopCheckboxClick","deselected","handleFilterItemClickEvent","removedFilter","handleOffCanvasCheckboxClick","checkboxId","desktopCheckbox","checkboxFilter","currentFilter","numOfFilters","updateOffCanvasAccordionCount","handleOffCanvasClearAllEvent","handleOffCanvasFilterItemClickEvent","offCanvasOrigin","handleShowMore","toggleDropdown","arrayOfObjectsContains","obj","ul","targetValue","results","deselectTarget","origin","updateVerticalDesktopAccordionCount","offCanvasFilterObj","filterDesktop","dropdown","createShowMoreButton","showMore","filterAlreadyExists","filterOffCanvasItem","isDigit","createFilter","filterValue","offCanvasOriginId","addedFilter","useX","filterText","filterId","filterLabel","filterIcon","isOffCanvasFilter","whichFilters","whichParent","htmlFilter","accordionParent","accordionBtn","filteringMobileBtn","stringArray","onState","OffCanvas","updateResultsLabel","resultCount","modalBtn","filterTemp","newFilter","filterToRemove","typeofInput","multiSelect","numOfDropdowns","Form","validate","togglePassword","passwordState","checkboxValidator","LinkPicker","interest","touse","interestData","touseData","find","onChangeHandler","selectedIndex","removeAllOptions","appendDataToSelect","sel","removeGrp","groups","group","opts","addOptions","len","Masthead","activeContainerId","offCanvasMenuBtn","countryMenuBtn","fullScreenOverlay","signInText","mediaSize","handleMenuItemEvent","updateMenuHeights","handleMenuCntrEvent","currentMenu","handleMenuCtnrBlurEvent","closeMenu","closeOverLay","handleMenuHoverInEvent","openOverLay","handleMenuItemKeyEvent","nextItem","item","isTop","previousItem","openMenu","handleIconClickEvent","origContainerId","container","activeContainer","activeButton","closeContainer","openContainer","handleWindowClickEvent","handleFocusOutEvent","handleKeyDownEvent","previousMenu","previousLink","nextMenu","prePreviousMenu","heights","cBottom","cHeight","nBottom","nHeight","toggleFullScreen","logIn","displayname","signInCtnr","signInBadge","logOut","cartCount","count","cartBadge","topMenuItem","menuCtnr","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","removeElementWidth","hideModal","handleModalKeydown","createModal","isIconElement","tabContent","toggleElementWidth","determineSection","scrollOffset","handleEnterEvent","currentSection","toggleTab","focusEl","iter","section","oldItem","newItem","activateItems","panel","field","NavAnchoredVertical","opt","keys","activeCSSClassName","scrollViewType","shouldShowModal","isClickOnIconElement","lastKnownScrollPosition","navOnTopScreen","elemClassList","navItem","lastNavItem","positionOflastNavItemBottom","negativeTop","isNavAfterLastContentBottom","toogleContent","NavLeft","main","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","resolve","then","tag","ps","parentAccordion","reverse","stepAccord","aButton","aChevron","aCollapse","thisChevron","list","selectedLink","waitForLeftNav","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","createPopover","ProductStack","childrenWidth","productStacks","rightCtrls","leftCtrls","productStackID","increment","updateSectionHeights","sections","sectionName","sectionMatches","sectionMatch","styleTag","view","viewDiv","productStack","Progress","showText","showtext","timeToComplete","SkipNav","Slider","optionsInput","slider","animate","animationDuration","ort","orientation","dir","singleStep","step","percision","behaviour","limit","padding","tooltips","showRange","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","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","countDecimals","numStr","pieces","upward","proposals","checkHandlePosition","state","transformDirection","lookBackward","lookForward","fromStepping","rule","inRuleOrder","updateConnect","updateHandlePosition","connectWidth","translateRule","scaleRule","tap","targetEvent","eventType","reference","getValue","unconstrained","getStep","resolveToValue","subRangeRatio","pa","pb","fromPercentage","range","toPercentage","xPct","xSteps","getJ","closest","handleEntryPoint","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","va","vb","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","Spinbox","spinmin","spindefault","spinmax","spinstep","plusCtrl","minusCtrl","updateValue","handleKeypressEvent","charCode","newInput","handleCtrlClickEvent","handleDisabling","Tab","tablist","withinModal","panels","thresholdMediaSize","tabContainer","accordionWrapper","nested","37","38","39","40","handleOverflowEvent","determineOrientation","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","cardBody","Table","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","searching","dragSrcEl","sortedColumnIdx","batchId","allCheckboxId","searchId","initialY","begOffsetTop","currentY","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","output","inputOptions","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","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","query","modal","modalEl","csvBtn","isUrl","isEmail","modifyText","expandRow","theRowIdx","expandCell","paginate","inArray","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","insertDetails","rowIds","searchResults","newNum","crypto","msCrypto","getRandomValues","Uint32Array","textFromValue","isValueString","dataToTable","replaceChild","dataIdx","itemCount","rowsNeeded","drop","Tooltip","textAlignments","textAlign","text_align","tooltipArrow","tooltipId","tooltipIdText","counter","setTooltipId","aria_describedby","tooltipInner","createToolTip","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\r\nimport { ddsSpace, ddsToken } from \"../../package.json\";\r\n\r\nexport const DOC = document;\r\nexport const HTML = DOC.documentElement;\r\nexport const globalObject = typeof global !== \"undefined\" ? global : window;\r\nexport const prefix = ddsSpace + ddsToken;\r\nexport const supportTransitions =\r\n \"Webkit\" + \"Transition\" in HTML[\"style\"] || \"Transition\"[\"toLowerCase\"]() in HTML[\"style\"];\r\nexport const transitionEndEvent =\r\n \"Webkit\" + \"Transition\" in HTML[\"style\"]\r\n ? \"Webkit\"[\"toLowerCase\"]() + \"Transition\" + \"End\"\r\n : \"Transition\"[\"toLowerCase\"]() + \"end\";\r\nexport const transitionDuration =\r\n \"Webkit\" + \"Duration\" in HTML[\"style\"]\r\n ? \"Webkit\"[\"toLowerCase\"]() + \"Transition\" + \"Duration\"\r\n : \"Transition\"[\"toLowerCase\"]() + \"Duration\";\r\nexport const tipPositions = /\\b(top|bottom|left|right)+/;\r\nexport const isIPhone = /(IPhone)/i.test(navigator.platform);\r\nexport const isIOS =\r\n (/iPad|iPhone|iPod|Macintosh/i.test(navigator.userAgent) ||\r\n (navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1)) &&\r\n !window.MSStream; // /(/(IPad)/i.test(navigator.platform)) || (/(IPhone)/i.test(navigator.platform));\r\nexport const isIE = /msie|trident|Windows Phone/i.test(navigator.userAgent);\r\nexport const isSafari = /Version\\/[\\d.]+.*Safari/i.test(navigator.userAgent);\r\nexport const isEdge = /Edge\\/\\d./i.test(navigator.userAgent);\r\nexport const isFirefox = /firefox/i.test(navigator.userAgent);\r\nexport const isChrome = !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);\r\nexport const direction = {\r\n UP: 1,\r\n RIGHT: 2,\r\n DOWN: 3,\r\n LEFT: 4,\r\n NONE: 5,\r\n};\r\n\r\n// selection methods\r\nexport function getFullScreenOverlay() {\r\n var overlay = DOC.getElementById(prefix + \"full-screen-overlay\");\r\n if (!overlay) {\r\n console.warn(\r\n \"OFF-CANVAS: Overlay requested. Corresponding HTML missing. Please apply id 'dds__full-screen-overlay' and class 'dds__overlay' to an empty div\"\r\n );\r\n return false;\r\n }\r\n return overlay;\r\n}\r\n\r\nexport function getElementsByClassName(element, classNAME) {\r\n // returns Array\r\n return [].slice.call(element[\"getElementsByClassName\"](classNAME));\r\n}\r\n\r\nexport function getSibling(element, selector) {\r\n var firstChar = selector.charAt(0);\r\n var selectorSubstring = selector.substr(1);\r\n\r\n if (firstChar === \".\") {\r\n if (element.nextElementSibling && element.nextElementSibling.classList) {\r\n if (element.nextElementSibling.classList.contains(selectorSubstring)) {\r\n return element.nextElementSibling;\r\n } else {\r\n return getSibling(element.nextElementSibling, selector);\r\n }\r\n }\r\n } else if (firstChar === \"#\") {\r\n if (element.nextElementSibling && element.nextElementSibling.id) {\r\n if (element.nextElementSibling.id === selectorSubstring) {\r\n return element.nextElementSibling;\r\n } else {\r\n return getSibling(element.nextElementSibling, selector);\r\n }\r\n }\r\n } else {\r\n if (element.nextElementSibling && element.nextElementSibling.tagName) {\r\n if (element.nextElementSibling.tagName.toLowerCase() === selector.toLowerCase()) {\r\n return element.nextElementSibling;\r\n } else {\r\n return getSibling(element.nextElementSibling, selector);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function getFocusableElements(element) {\r\n var arr = Array.prototype.slice.call(\r\n element.querySelectorAll(\r\n \"*: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']\"\r\n )\r\n );\r\n return arr.filter(filterCollapsedParents);\r\n}\r\n\r\nfunction filterCollapsedParents(element) {\r\n for (; element && element !== DOC; element = element.parentElement) {\r\n if (element.parentElement) {\r\n if (\r\n (element.parentElement.classList.contains(\"dds__collapse\") &&\r\n element.parentElement.getAttribute(\"aria-expanded\") == \"false\") ||\r\n element.parentElement.classList.contains(prefix + \"d-none\")\r\n ) {\r\n return false;\r\n }\r\n } else {\r\n return element; //if scaled entire DOM tree and no parents are collapsed, element is focusable\r\n }\r\n }\r\n}\r\n\r\nexport function getNextFocusableElement(element) {\r\n for (; element && element !== DOC; element = element.nextElementSibling) {\r\n if (element.nextElementSibling) {\r\n if (window.getComputedStyle(element.nextElementSibling).getPropertyValue(\"display\") != \"none\") {\r\n if (\r\n [\"A\", \"AREA\", \"INPUT\", \"SELECT\", \"TEXTAREA\", \"BUTTON\"].indexOf(\r\n element.nextElementSibling.tagName\r\n ) != -1 &&\r\n element.nextElementSibling.tabIndex >= 0\r\n ) {\r\n return element.nextElementSibling;\r\n } else {\r\n var focusable = getFocusableElements(element.nextElementSibling);\r\n if (focusable && focusable.length > 0) {\r\n return focusable[0];\r\n }\r\n }\r\n }\r\n } else {\r\n return getNextFocusableElement(element.parentElement);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Creates a temporary, assertive element to announce a message for text reader clients, then removes that element.\r\n * @param {String} theMessage The short text to announce. Consider translation requirements.\r\n * @return void\r\n */\r\nexport function ariaAnnounce(theMessage) {\r\n var msgEl,\r\n randomNum = Math.floor(Math.random() * 999999999) + 1;\r\n document.body.appendChild(\r\n createElement(\"div\", {\r\n style: \"position:absolute; left:-1000px; width: 0px; height: 0px;\",\r\n id: \"ariaAnnouncement\" + randomNum,\r\n \"aria-live\": \"assertive\",\r\n })\r\n );\r\n msgEl = document.getElementById(\"ariaAnnouncement\" + randomNum);\r\n window.setTimeout(function () {\r\n msgEl.textContent = theMessage;\r\n }, 15);\r\n window.setTimeout(function () {\r\n msgEl.parentElement.removeChild(msgEl);\r\n }, 5000);\r\n}\r\n\r\n/**\r\n * @method getClosest Crawls the DOM to find the closest targeted element\r\n * @param element {DOM element} the DOM element from which to start searching\r\n * @param selector {string} the class, ID, or tag name for which to search\r\n * @param parentsOnly {boolean} if false or not set, modifies TAG search to include children elements of the currently-inspected target\r\n * @return {element} or false\r\n */\r\nexport function getClosest(element, selector, parentsOnly) {\r\n // source http://gomakethings.com/climbing-up-and-down-the-dom-tree-with-vanilla-javascript/\r\n var firstChar = selector.charAt(0);\r\n\r\n var selectorSubstring = selector.substr(1);\r\n if (firstChar === \".\") {\r\n // If selector is a class\r\n for (; element && element !== DOC; element = element.parentNode) {\r\n // Get closest match\r\n if (\r\n element[\"parentNode\"].querySelector(selector) !== null &&\r\n // hasClass(element, selectorSubstring)) {\r\n element.classList[\"contains\"](selectorSubstring)\r\n ) {\r\n return element;\r\n } else if (parentsOnly === false) {\r\n if (element.querySelector(selector)) {\r\n return element.querySelector(selector);\r\n }\r\n }\r\n }\r\n } else if (firstChar === \"#\") {\r\n // If selector is an ID\r\n for (; element && element !== DOC; element = element.parentNode) {\r\n // Get closest match\r\n if (element.id === selectorSubstring) {\r\n return element;\r\n } else if (parentsOnly === false) {\r\n if (element.querySelector(selector)) {\r\n return element.querySelector(selector);\r\n }\r\n }\r\n }\r\n } else {\r\n // If selector is a tagName\r\n for (; element && element !== DOC; element = element.parentNode) {\r\n // Get closest match\r\n if (element.tagName && element.tagName.toLowerCase() === selector.toLowerCase()) {\r\n return element;\r\n } else if (\r\n element.previousElementSibling &&\r\n element.previousElementSibling.tagName.toLowerCase() === selector.toLowerCase()\r\n ) {\r\n return element.previousElementSibling;\r\n } else if (parentsOnly === false) {\r\n if (element.querySelector(selector)) {\r\n return element.querySelector(selector);\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function one(element, event, handler) {\r\n element.addEventListener(\r\n event,\r\n function handlerWrapper(e) {\r\n handler(e);\r\n element.removeEventListener(event, handlerWrapper, false);\r\n },\r\n false\r\n );\r\n}\r\n\r\nexport function getTransitionDurationFromElement(element) {\r\n var duration = supportTransitions ? globalObject[\"getComputedStyle\"](element)[transitionDuration] : 0;\r\n duration = parseFloat(duration);\r\n duration = typeof duration === \"number\" && !isNaN(duration) ? duration * 1000 : 0;\r\n return duration + 50; // we take a short offset to make sure we fire on the next frame after animation\r\n}\r\n\r\nexport function getAnimationDurationFromElement(element) {\r\n var duration = supportTransitions ? globalObject[\"getComputedStyle\"](element)[\"animationDuration\"] : 0;\r\n duration = parseFloat(duration);\r\n duration = typeof duration === \"number\" && !isNaN(duration) ? duration * 1000 : 0;\r\n return duration + 50; // we take a short offset to make sure we fire on the next frame after animation\r\n}\r\n\r\nexport function emulateTransitionEnd(element, handler) {\r\n // emulateTransitionEnd since 2.0.4\r\n var called = 0;\r\n\r\n var duration = getTransitionDurationFromElement(element);\r\n supportTransitions &&\r\n one(element, transitionEndEvent, function (e) {\r\n handler(e);\r\n called = 1;\r\n });\r\n setTimeout(function () {\r\n !called && handler();\r\n }, duration);\r\n}\r\n\r\nexport function emulateAnimationnEnd(element, handler) {\r\n // emulateTransitionEnd since 2.0.4\r\n var called = 0;\r\n\r\n var duration = getAnimationDurationFromElement(element);\r\n supportTransitions &&\r\n one(element, transitionEndEvent, function (e) {\r\n handler(e);\r\n called = 1;\r\n });\r\n setTimeout(function () {\r\n !called && handler();\r\n }, duration);\r\n}\r\n\r\nexport function uicoreCustomEvent(componentName, eventName, related, details) {\r\n var evt;\r\n if (isIE) {\r\n evt = document.createEvent(\"CustomEvent\");\r\n evt.initCustomEvent(\"uic\" + componentName + eventName, true, true, details);\r\n } else {\r\n evt = new CustomEvent(\"uic\" + componentName + eventName, {\r\n bubbles: true,\r\n detail: details,\r\n });\r\n }\r\n evt.proceed = true;\r\n evt.relatedTarget = related;\r\n related.dispatchEvent(evt);\r\n return evt;\r\n}\r\n\r\n// tooltip / popover stuff\r\nexport function getScroll() {\r\n // also Affix and ScrollSpy uses it\r\n return {\r\n y: globalObject.pageYOffset || HTML[\"scrollTop\"],\r\n x: globalObject.pageXOffset || HTML[\"scrollLeft\"],\r\n };\r\n}\r\n\r\n// set new focus element since 2.0.3\r\nexport function setFocus(element) {\r\n element.focus ? element.focus() : element.setActive();\r\n}\r\n\r\nexport function offWindowLeft(element, link) {\r\n var elementDimensions = {\r\n w: element[\"offsetWidth\"],\r\n h: element[\"offsetHeight\"],\r\n };\r\n var rect = link[\"getBoundingClientRect\"]();\r\n if (elementDimensions.w < 50) {\r\n elementDimensions.w = 50;\r\n }\r\n return rect[\"left\"] - elementDimensions.w < 0;\r\n}\r\n\r\nexport function styleTip(link, element, position, parent, useArrow) {\r\n // both popovers and tooltips (target,tooltip,placement,elementToAppendTo)\r\n\r\n // element.style.height = elementDimensions.h + 'px';\r\n // element.style.width = elementDimensions.w + 'px';\r\n element.style.maxWidth = \"125px\";\r\n\r\n useArrow = typeof useArrow === \"boolean\" ? useArrow : true;\r\n\r\n var windowWidth = HTML[\"clientWidth\"] || DOC[\"body\"][\"clientWidth\"];\r\n\r\n var windowHeight = HTML[\"clientHeight\"] || DOC[\"body\"][\"clientHeight\"];\r\n\r\n var rect = link[\"getBoundingClientRect\"]();\r\n\r\n var scroll =\r\n parent === DOC[\"body\"]\r\n ? getScroll()\r\n : {\r\n y: parent[\"offsetTop\"] + parent[\"scrollTop\"],\r\n x: parent[\"offsetLeft\"] + parent[\"scrollLeft\"],\r\n };\r\n\r\n var linkDimensions = {\r\n w: link.offsetWidth,\r\n h: link.offsetHeight,\r\n };\r\n\r\n var maxWidth = 125;\r\n while (element[\"offsetHeight\"] >= maxWidth) {\r\n maxWidth = maxWidth * 1.5;\r\n element.style.maxWidth = maxWidth + \"px\";\r\n }\r\n\r\n var elementDimensions = {\r\n w: element[\"offsetWidth\"],\r\n h: element[\"offsetHeight\"],\r\n };\r\n\r\n var isPopover = element.classList[\"contains\"](\"dds__popover\");\r\n\r\n var topPosition;\r\n\r\n var leftPosition;\r\n\r\n var arrow = element.querySelector(\".dds__arrow\");\r\n\r\n var arrowTop;\r\n\r\n var arrowLeft;\r\n\r\n var arrowWidth;\r\n\r\n var arrowHeight;\r\n\r\n var halfTopExceed = rect[\"top\"] + linkDimensions.h / 2 - elementDimensions.h / 2 < 0;\r\n\r\n var halfLeftExceed = rect[\"left\"] + linkDimensions.w / 2 - elementDimensions.w / 2 < 0;\r\n\r\n var halfRightExceed = rect[\"left\"] + elementDimensions.w / 2 + linkDimensions.w / 2 >= windowWidth;\r\n\r\n var halfBottomExceed = rect[\"top\"] + elementDimensions.h / 2 + linkDimensions.h / 2 >= windowHeight;\r\n\r\n var topExceed = rect[\"top\"] - elementDimensions.h < 0;\r\n\r\n var leftExceed = rect[\"left\"] - elementDimensions.w < 0;\r\n\r\n var bottomExceed = rect[\"top\"] + elementDimensions.h + linkDimensions.h >= windowHeight;\r\n\r\n var rightExceed = rect[\"left\"] + elementDimensions.w + linkDimensions.w >= windowWidth;\r\n\r\n // recompute position\r\n var posChanged;\r\n if (position === \"right\") {\r\n if (!rightExceed && !halfTopExceed && !halfBottomExceed) {\r\n position === \"right\";\r\n } else if (rightExceed && !leftExceed && !halfTopExceed && !halfBottomExceed) {\r\n //If exceeds right, but fits on the left\r\n posChanged = true;\r\n position = \"left\";\r\n } else if ((!halfTopExceed || !halfBottomExceed) && (!halfRightExceed || !halfLeftExceed)) {\r\n //If half of top or bottom doesnt fit, try to fit top or bottom\r\n if (!topExceed) {\r\n posChanged = true;\r\n position = \"top\";\r\n } else if (!bottomExceed) {\r\n posChanged = true;\r\n position = \"bottom\";\r\n }\r\n }\r\n } else if (position === \"left\") {\r\n if (!leftExceed && !halfTopExceed && !halfBottomExceed) {\r\n position === \"left\";\r\n } else if (leftExceed && !rightExceed && !halfTopExceed && !halfBottomExceed) {\r\n posChanged = true;\r\n position = \"right\";\r\n } else if ((!halfTopExceed || !halfBottomExceed) && (!halfRightExceed || !halfLeftExceed)) {\r\n if (!topExceed) {\r\n posChanged = true;\r\n position = \"top\";\r\n } else if (!bottomExceed) {\r\n posChanged = true;\r\n position = \"bottom\";\r\n }\r\n }\r\n } else if (position === \"top\") {\r\n if (!topExceed && !halfRightExceed && !halfLeftExceed) {\r\n position === \"top\";\r\n } else if (topExceed && !bottomExceed && !halfRightExceed && !halfLeftExceed) {\r\n posChanged = true;\r\n position = \"bottom\";\r\n } else if ((!halfRightExceed || !halfLeftExceed) && (!halfTopExceed || !halfBottomExceed)) {\r\n //If half of right or left doesnt fit, try to fit right or left\r\n if (!rightExceed) {\r\n posChanged = true;\r\n position = \"right\";\r\n } else if (!leftExceed) {\r\n posChanged = true;\r\n position = \"left\";\r\n }\r\n }\r\n } else if (position === \"bottom\") {\r\n if (!bottomExceed && !halfRightExceed && !halfLeftExceed) {\r\n position === \"bottom\";\r\n } else if (bottomExceed && !topExceed && !halfRightExceed && !halfLeftExceed) {\r\n posChanged = true;\r\n position = \"top\";\r\n } else if ((!halfRightExceed || !halfLeftExceed) && (!halfTopExceed || !halfBottomExceed)) {\r\n //Can't be top\r\n if (!rightExceed) {\r\n posChanged = true;\r\n position = \"right\";\r\n } else if (!leftExceed) {\r\n posChanged = true;\r\n position = \"left\";\r\n }\r\n }\r\n }\r\n\r\n // update tooltip/popover class\r\n element.className[\"indexOf\"](position) === -1 &&\r\n (element.className = element.className.replace(tipPositions, position));\r\n\r\n // update tooltip/popover dimensions\r\n if (posChanged) {\r\n elementDimensions = {\r\n w: element[\"offsetWidth\"],\r\n h: element[\"offsetHeight\"],\r\n };\r\n }\r\n // we check the computed width & height and update here\r\n var elMargin;\r\n try {\r\n elMargin = Number(window.getComputedStyle(element).margin.match(/\\d+/)[0]); // get the margin value from style as a number\r\n } catch (e) {\r\n elMargin = 0;\r\n }\r\n arrowWidth = arrow[\"offsetWidth\"] + elMargin * 2;\r\n arrowHeight = arrow[\"offsetHeight\"] + elMargin * 2;\r\n\r\n var rectLeft = rect[\"left\"],\r\n rectTop = rect[\"top\"];\r\n if (!useArrow) {\r\n if (position === \"left\") {\r\n rectLeft = rect[\"left\"] + arrowWidth;\r\n } else if (position === \"right\") {\r\n rectLeft = rect[\"left\"] - arrowWidth;\r\n } else if (position === \"top\") {\r\n rectTop = rect[\"top\"] + arrowHeight;\r\n } else if (position === \"bottom\") {\r\n rectTop = rect[\"top\"] - arrowHeight;\r\n }\r\n }\r\n\r\n // apply styling to tooltip or popover\r\n if (position === \"left\" || position === \"right\") {\r\n // secondary|side positions\r\n if (position === \"left\") {\r\n // LEFT\r\n leftPosition = rectLeft + scroll.x - elementDimensions.w - (isPopover ? arrowWidth : 3); // subtract to move more left\r\n window.addEventListener(\"resize\", function () {\r\n arrow[\"style\"][\"left\"] = \"initial\";\r\n });\r\n } else {\r\n // RIGHT\r\n leftPosition = rectLeft + linkDimensions.w + (isPopover ? 0 : 3); // add to move more right\r\n }\r\n\r\n topPosition = rect[\"top\"] - elementDimensions.h / 2 + linkDimensions.h / 2 + scroll.y;\r\n arrowTop = elementDimensions.h / 2 - (isPopover ? arrowHeight * 0.9 : arrowHeight / 2);\r\n } else if (position === \"top\" || position === \"bottom\") {\r\n // primary|vertical positions\r\n if (position === \"top\") {\r\n // TOP\r\n topPosition = rectTop + scroll.y - elementDimensions.h - (isPopover ? arrowHeight : 3); // subtract to move more up\r\n } else {\r\n // BOTTOM\r\n topPosition = rectTop + linkDimensions.h + scroll.y + (isPopover ? 0 : 3);\r\n }\r\n leftPosition = rect[\"left\"] - elementDimensions.w / 2 + linkDimensions.w / 2 + scroll.x;\r\n arrowLeft = elementDimensions.w / 2 - arrowWidth / 2;\r\n }\r\n\r\n // apply style to tooltip/popover and its arrow\r\n element[\"style\"][\"top\"] = topPosition + \"px\";\r\n element[\"style\"][\"left\"] = leftPosition + \"px\";\r\n\r\n arrowTop && (arrow[\"style\"][\"top\"] = arrowTop + \"px\");\r\n arrowLeft && (arrow[\"style\"][\"left\"] = arrowLeft + \"px\");\r\n}\r\n\r\nexport function handleFirstTab(e) {\r\n if (e.keyCode === 9) {\r\n document.body.classList.add(\"user-is-tabbing\");\r\n\r\n window.removeEventListener(\"keydown\", handleFirstTab);\r\n window.addEventListener(\"mousedown\", handleMouseDownOnce);\r\n }\r\n}\r\n\r\nexport function handleMouseDownOnce(e) {\r\n //NVDA in browse mode swallows the enter key as mouse click: https://github.com/nvaccess/nvda/issues/4903\r\n //This breaks our visual focus toggle. Enter key event has x,y values of 0,0 whereas click has positive x,y values.\r\n //Capture enter key when treated as mousedown by NVDA browse mode.\r\n if (e.x === 0 && e.y === 0) {\r\n return;\r\n }\r\n document.body.classList.remove(\"user-is-tabbing\");\r\n\r\n window.removeEventListener(\"mousedown\", handleMouseDownOnce);\r\n window.addEventListener(\"keydown\", handleFirstTab);\r\n}\r\n\r\n// Form--passwords validation\r\n//================================================================\r\nexport function passwordVerification() {\r\n var myInput = document.getElementById(\"psw\");\r\n var letter = document.getElementById(\"letter\");\r\n var capital = document.getElementById(\"capital\");\r\n var number = document.getElementById(\"number\");\r\n var length = document.getElementById(\"length\");\r\n\r\n // When the user clicks on the password field, show the message box\r\n myInput.onfocus = function () {\r\n document.getElementById(\"message\").style.display = \"block\";\r\n };\r\n\r\n // When the user clicks outside of the password field, hide the message box\r\n myInput.onblur = function () {\r\n document.getElementById(\"message\").style.display = \"none\";\r\n };\r\n\r\n // When the user starts to type something inside the password field\r\n myInput.onkeyup = function () {\r\n // Validate lowercase letters\r\n var lowerCaseLetters = /[a-z]/g;\r\n if (myInput.value.match(lowerCaseLetters)) {\r\n letter.classList.add(\"valid\");\r\n letter.classList.remove(\"invalid\");\r\n } else {\r\n letter.classList.remove(\"valid\");\r\n letter.classList.add(\"invalid\");\r\n }\r\n\r\n // Validate capital letters\r\n var upperCaseLetters = /[A-Z]/g;\r\n if (myInput.value.match(upperCaseLetters)) {\r\n capital.classList.remove(\"invalid\");\r\n capital.classList.add(\"valid\");\r\n } else {\r\n capital.classList.remove(\"valid\");\r\n capital.classList.add(\"invalid\");\r\n }\r\n\r\n // Validate numbers\r\n var numbers = /[0-9]/g;\r\n if (myInput.value.match(numbers)) {\r\n number.classList.remove(\"invalid\");\r\n number.classList.add(\"valid\");\r\n } else {\r\n number.classList.remove(\"valid\");\r\n number.classList.add(\"invalid\");\r\n }\r\n\r\n // Validate length\r\n if (myInput.value.length >= 8) {\r\n length.classList.remove(\"invalid\");\r\n length.classList.add(\"valid\");\r\n } else {\r\n length.classList.remove(\"valid\");\r\n length.classList.add(\"invalid\");\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Check is item is object\r\n * @return {Boolean}\r\n */\r\nexport function isObject(val) {\r\n return Object.prototype.toString.call(val) === \"[object Object]\";\r\n}\r\n\r\n/**\r\n * Check is item is array\r\n * @return {Boolean}\r\n */\r\nexport function isArray(val) {\r\n return Array.isArray(val);\r\n}\r\n\r\n/**\r\n * Check for valid JSON string\r\n * @param {String} str\r\n * @return {Boolean|Array|Object}\r\n */\r\nexport function isJson(str) {\r\n var t = !1;\r\n try {\r\n t = JSON.parse(str);\r\n } catch (e) {\r\n return !1;\r\n }\r\n return !(null === t || (!isArray(t) && !isObject(t))) && t;\r\n}\r\n\r\n/**\r\n * Iterator helper\r\n * @param {(Array|Object)} arr Any object, array or array-like collection.\r\n * @param {Function} fn Callback\r\n * @param {Object} scope Change the value of this\r\n * @return {Void}\r\n */\r\nexport function each(arr, fn, scope) {\r\n var n;\r\n if (arr) {\r\n if (isObject(arr)) {\r\n for (n in arr) {\r\n if (Object.prototype.hasOwnProperty.call(arr, n)) {\r\n fn.call(scope, arr[n], n);\r\n }\r\n }\r\n } else if (arr.length > 0) {\r\n for (n = 0; n < arr.length; n++) {\r\n fn.call(scope, arr[n], n);\r\n }\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Bubble sort algorithm\r\n */\r\nexport function sortItems(a, b) {\r\n var c, d;\r\n if (1 === b) {\r\n c = 0;\r\n d = a.length;\r\n } else {\r\n if (b === -1) {\r\n c = a.length - 1;\r\n d = -1;\r\n }\r\n }\r\n for (var e = !0; e; ) {\r\n e = !1;\r\n for (var f = c; f != d; f += b) {\r\n if (a[f + b] && a[f].value > a[f + b].value) {\r\n var g = a[f],\r\n h = a[f + b],\r\n i = g;\r\n a[f] = h;\r\n a[f + b] = i;\r\n e = !0;\r\n }\r\n }\r\n }\r\n return a;\r\n}\r\n\r\n/**\r\n * Create DOM element node\r\n * @param {String} a nodeName\r\n * @param {Object} b properties and attributes\r\n * @return {Object}\r\n */\r\nexport function createElement(a, b) {\r\n var d = DOC.createElement(a);\r\n if (b && \"object\" == typeof b) {\r\n var e;\r\n for (e in b) {\r\n if (\"html\" === e) {\r\n d.innerHTML = b[e];\r\n } else {\r\n if (e.slice(0, 5) === \"aria_\" || e.slice(0, 5) === \"data_\") {\r\n var attr = e.slice(0, 4) + \"-\" + e.slice(5);\r\n d.setAttribute(attr, b[e]);\r\n } else {\r\n d.setAttribute(e, b[e]);\r\n }\r\n }\r\n }\r\n }\r\n return d;\r\n}\r\n\r\nexport function loadURLSVGs(paths, lazyload) {\r\n var lazyloading = typeof lazyload === \"boolean\" ? lazyload : true,\r\n execute = function (paths) {\r\n if (paths.length > 0 && !Array.isArray(paths)) {\r\n paths = new Array(paths);\r\n }\r\n if (!paths || paths.length < 1) {\r\n console.error(\"The File path(s) supplied were either empty or null.\");\r\n return false;\r\n }\r\n var defs,\r\n style,\r\n svg,\r\n handleSVGResponse = function (response) {\r\n if (response.match(/ swipe.start.x ||\r\n swipe.end.x + swipe.params.min.x < swipe.start.x) &&\r\n swipe.end.y < swipe.start.y + swipe.params.max.y &&\r\n swipe.start.y > swipe.end.y - swipe.params.max.y\r\n ) {\r\n if (swipe.end.x > swipe.start.x) {\r\n swipe.direction = direction.RIGHT;\r\n } else {\r\n swipe.direction = direction.LEFT;\r\n }\r\n }\r\n if (\r\n (swipe.end.y - swipe.params.min.y > swipe.start.y ||\r\n swipe.end.y + swipe.params.min.y < swipe.start.y) &&\r\n swipe.end.x < swipe.start.x + swipe.params.max.x &&\r\n swipe.start.x > swipe.end.x - swipe.params.max.x\r\n ) {\r\n if (swipe.end.y > swipe.start.y) {\r\n swipe.direction = direction.DOWN;\r\n } else {\r\n swipe.direction = direction.UP;\r\n }\r\n }\r\n if (swipe.direction !== direction.NONE) {\r\n if (typeof callback === \"function\") {\r\n callback(el, swipe.direction);\r\n }\r\n }\r\n swipe.direction = direction.NONE;\r\n };\r\n if (isEdge) {\r\n el.addEventListener(\"mousedown\", downListener);\r\n el.addEventListener(\"mousemove\", moveListener);\r\n el.addEventListener(\"mouseup\", upListener);\r\n } else if (isIE) {\r\n el.addEventListener(\"pointerdown\", downListener);\r\n el.addEventListener(\"pointermove\", moveListener);\r\n el.addEventListener(\"pointerup\", upListener);\r\n } else {\r\n el.addEventListener(\"touchstart\", downListener);\r\n el.addEventListener(\"touchmove\", moveListener);\r\n el.addEventListener(\"touchend\", upListener);\r\n }\r\n}\r\nexport function renderSvg(svg, attributes) {\r\n var svgWrapper = DOC.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n svgWrapper.setAttribute(\"focusable\", false);\r\n classAdd(svgWrapper, prefix + \"svg-icons\");\r\n classAdd(svgWrapper, prefix + \"icon-svg\");\r\n if (!isArray(svg)) {\r\n svg = [svg];\r\n }\r\n each(svg, function (elm) {\r\n var svgElem = DOC.createElementNS(\"http://www.w3.org/2000/svg\", \"use\");\r\n\r\n svgElem.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", \"#\" + prefix + elm.name);\r\n classAdd(svgElem, [prefix + \"svg-icons-item\"]); //are these two classes the same\r\n classAdd(svgElem, prefix + \"icon-svg-item\");\r\n svgElem.setAttribute(\"tabindex\", \"-1\"); //does this do anything\r\n if (elm.show) {\r\n classAdd(svgElem, [prefix + \"show\"]);\r\n }\r\n\r\n svgWrapper.appendChild(svgElem);\r\n });\r\n\r\n for (var key in attributes) {\r\n if (Object.prototype.hasOwnProperty.call(attributes, key)) {\r\n svgWrapper.setAttribute(key, attributes[key]);\r\n }\r\n }\r\n return svgWrapper;\r\n}\r\n\r\nexport function flush(el, ie) {\r\n if (el instanceof NodeList) {\r\n each(el, function (e) {\r\n flush(e, ie);\r\n });\r\n } else {\r\n if (ie) {\r\n while (el.hasChildNodes()) {\r\n el.removeChild(el.firstChild);\r\n }\r\n } else {\r\n el.innerHTML = \"\";\r\n }\r\n }\r\n}\r\n\r\nexport function getText(value) {\r\n var text,\r\n div = DOC.createElement(\"div\");\r\n div.innerHTML = value;\r\n\r\n function findText(div) {\r\n each(\r\n div.childNodes,\r\n function (cNode) {\r\n if (cNode.nodeType === 3) {\r\n text = cNode.data;\r\n }\r\n findText(cNode);\r\n },\r\n this\r\n );\r\n }\r\n findText(div);\r\n return text;\r\n}\r\n\r\n/**\r\n * Extends source object adding properties from probs object\r\n * @param {object} src\r\n * @param {object} props\r\n * @returns\r\n */\r\nexport function extend(src, props) {\r\n for (var prop in props) {\r\n if (Object.prototype.hasOwnProperty.call(props, prop)) {\r\n // if (props.hasOwnProperty(prop)) {\r\n var val = props[prop];\r\n if (val && isObject(val)) {\r\n src[prop] = src[prop] || {};\r\n extend(src[prop], val);\r\n } else {\r\n src[prop] = val;\r\n }\r\n }\r\n }\r\n return src;\r\n}\r\n\r\n/**\r\n * Transform a CSV line in a javascript array according the RFC 4180 rules.\r\n * @param {string} text\r\n * @returns {array}\r\n */\r\nexport function singleLineCSVtoArray(text) {\r\n var ret = [\"\"],\r\n i = 0,\r\n p = \"\",\r\n s = true;\r\n for (var l in text) {\r\n l = text[l];\r\n if ('\"' === l) {\r\n s = !s;\r\n if ('\"' === p) {\r\n ret[i] += '\"';\r\n l = \"-\";\r\n } else if (\"\" === p) {\r\n l = \"-\";\r\n }\r\n } else if (s && \",\" === l) {\r\n l = ret[++i] = \"\";\r\n } else {\r\n ret[i] += l;\r\n }\r\n p = l;\r\n }\r\n return ret;\r\n}\r\n","import { prefix, uicoreCustomEvent } from \"./utilities.js\";\r\n\r\nexport default function Alert(element) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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 // handlers\r\n clickHandler = function (e) {\r\n if (\r\n closeButton === e.target ||\r\n closeButton.contains(e.target) ||\r\n dismissMessage === e.target ||\r\n dismissMessage.contains(e.target)\r\n ) {\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 // 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}\r\n","import { prefix, getSibling, isIE, createElement } from \"../utilities\";\r\n\r\nexport default function InputMask(element) {\r\n //, opts ) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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\")\r\n ? spacing\r\n : isNaN(parseInt(t.getAttribute(\"set-cursor\")))\r\n ? spacing\r\n : parseInt(t.getAttribute(\"set-cursor\")) != 1\r\n ? spacing\r\n : 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 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 < spacing; s++) {\r\n var char = e.target.getAttribute(\"data-placeholder\").charAt(s);\r\n element.value += char;\r\n var evt;\r\n if (!isIE) {\r\n evt = new KeyboardEvent(\"keyup\", {\r\n bubbles: true,\r\n cancelable: true,\r\n char: char,\r\n key: \"[\",\r\n shiftKey: true,\r\n });\r\n } else {\r\n evt = document.createEvent(\"KeyboardEvent\");\r\n evt.initKeyboardEvent(\"keyup\", true, true, null, char, null, \"\", false, \"\");\r\n }\r\n element.dispatchEvent(evt);\r\n }\r\n },\r\n handleValueChange = function (e) {\r\n var id = e.target.getAttribute(\"id\"),\r\n mask = wrap.querySelector(\"#\" + id + \"Mask\"),\r\n italic = wrap.querySelector(\"#\" + id + \"Mask i\"),\r\n cursor;\r\n\r\n if (e.target.value == italic.innerHTML) {\r\n return; // Continue only if value hasn't changed\r\n }\r\n\r\n setTimeout(function () {\r\n cursor = element.selectionEnd;\r\n e.target.value = handleCurrentValue(e);\r\n mask.innerHTML = setValueOfMask(e);\r\n\r\n if (e.keyCode != 8) {\r\n //if the user is backspacing and then switches back to typing forward\r\n if (!charSet.charAt(cursor - 1).match(\".*[\" + mNum + mChar + \"].*\")) {\r\n while (\r\n !charSet.charAt(cursor - 1).match(\".*[\" + mNum + mChar + \"].*\") &&\r\n cursor < charSet.length\r\n ) {\r\n cursor++;\r\n }\r\n } else {\r\n //if the user is typing forward\r\n while (!charSet.charAt(cursor).match(\".*[\" + mNum + mChar + \"].*\") && cursor < charSet.length) {\r\n cursor++;\r\n }\r\n }\r\n } else {\r\n //if the user is backspacing\r\n while (!charSet.charAt(cursor - 1).match(\".*[\" + mNum + mChar + \"].*\") && cursor > 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 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,\r\n l = placeholder.length,\r\n newValue = \"\",\r\n i,\r\n j,\r\n isInt,\r\n isLetter,\r\n 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 (\r\n (!isCharsetPresent && !isInt && matchesNumber) ||\r\n (isCharsetPresent && ((matchesLetter && !isLetter) || (matchesNumber && !isInt)))\r\n ) {\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 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,\r\n 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}\r\n","import {\r\n prefix,\r\n debounce,\r\n jsonOptionsInit,\r\n getFullScreenOverlay,\r\n validateNum,\r\n uicoreCustomEvent,\r\n each,\r\n getFocusableElements,\r\n getClosest,\r\n isIE,\r\n isEdge,\r\n isFirefox,\r\n DOC,\r\n createElement,\r\n globalObject,\r\n} from \"./utilities.js\";\r\nimport InputMask from \"./helpers/inputMask.js\";\r\n\r\nexport function Spinbox(element, options) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n options = options || {};\r\n options = jsonOptionsInit(element, options);\r\n options.spinmin = element.dataset.spinmin\r\n ? validateNum(element.dataset.spinmin, 0)\r\n : validateNum(options.spinmin, 0);\r\n options.spindefault = element.dataset.spindefault\r\n ? validateNum(element.dataset.spindefault, 0)\r\n : validateNum(options.spindefault, 0);\r\n options.spinmax = element.dataset.spinmax\r\n ? validateNum(element.dataset.spinmax, 100)\r\n : validateNum(options.spinmax, 100);\r\n options.spinstep = element.dataset.spinstep\r\n ? validateNum(element.dataset.spinstep, 1)\r\n : validateNum(options.spinstep, 1);\r\n\r\n var msg = \"\";\r\n if (isNaN(options.spinmin)) {\r\n msg += \"Min value is not a number.\\n\";\r\n }\r\n if (isNaN(options.spinmax)) {\r\n msg += \"Max value is not a number.\\n\";\r\n }\r\n if (isNaN(options.spindefault)) {\r\n msg += \"Default value is not a number.\\n\";\r\n } else if (options.spindefault < options.spinmin || options.spindefault > options.spinmax) {\r\n msg += \"Default value falls outside of the min max values.\\n\";\r\n }\r\n if (isNaN(options.spinstep)) {\r\n msg += \"Step value is not a number.\\n\";\r\n }\r\n if (msg.length) {\r\n throw new Error(msg);\r\n }\r\n\r\n var self = this,\r\n stringSpinbox = \"Spinbox\",\r\n updateValue = function (value) {\r\n input.value = value;\r\n input.setAttribute(\"aria-valuenow\", value);\r\n //the attr size is what defines an input width\r\n var size = Math.max(2, value.toString().length);\r\n input.setAttribute(\"size\", size.toString());\r\n if (isIE && size > 2) {\r\n if (size > 3) {\r\n element.setAttribute(\"style\", \"min-width:\" + size + \"rem\");\r\n } else {\r\n element.removeAttribute(\"style\");\r\n }\r\n }\r\n },\r\n input,\r\n plusCtrl,\r\n minusCtrl,\r\n // horizontal\r\n // handlers\r\n handleKeypressEvent = debounce(function (e) {\r\n var charCode = e.which ? e.which : e.keyCode;\r\n // if not a number\r\n if (input.value.length > options.spinmax.length || (charCode > 31 && (charCode < 48 || charCode > 57))) {\r\n if (charCode == 13) {\r\n input.blur();\r\n } else if (input.value.length == 0 && options.spinmin < 0 && charCode == 45) {\r\n // allow minus when input empty and spinmin less than zero\r\n return;\r\n } else {\r\n e.preventDefault();\r\n }\r\n } else {\r\n var newInput = input.value;\r\n if (parseInt(newInput) > options.spinmax) {\r\n updateValue(options.spinmax);\r\n e.preventDefault();\r\n } else if (parseInt(newInput) < options.spinmin) {\r\n updateValue(options.spinmin);\r\n e.preventDefault();\r\n } else {\r\n if (input.value == \"-\" && e.charCode == 48) {\r\n // dont allow -0\r\n e.preventDefault();\r\n } else {\r\n if (charCode == 13) {\r\n // Enter key\r\n if (Math.abs(parseInt(input.value)) % options.spinstep > 0) {\r\n input.value =\r\n parseInt(input.value) - (Math.abs(parseInt(input.value)) % options.spinstep);\r\n }\r\n input.blur();\r\n } else {\r\n updateValue(input.value);\r\n }\r\n }\r\n }\r\n }\r\n }, 500),\r\n handleCtrlClickEvent = function (e, control) {\r\n var temp;\r\n if (control === minusCtrl) {\r\n temp = parseInt(input.value) - options.spinstep;\r\n } else {\r\n temp = parseInt(input.value) + options.spinstep;\r\n }\r\n if (!(temp < options.spinmin) && !(temp > options.spinmax)) {\r\n updateValue(temp);\r\n handleDisabling();\r\n uicoreCustomEvent(\"Spinbox\", \"ValueChangeEvent\", element, {\r\n value: input.value,\r\n });\r\n }\r\n },\r\n handleDisabling = function () {\r\n if (input.value == options.spinmin || parseInt(input.value) - options.spinstep < options.spinmin) {\r\n minusCtrl.setAttribute(\"disabled\", \"\");\r\n } else if (minusCtrl.hasAttribute(\"disabled\")) {\r\n minusCtrl.removeAttribute(\"disabled\");\r\n }\r\n if (input.value == options.spinmax || parseInt(input.value) + options.spinstep > options.spinmax) {\r\n plusCtrl.setAttribute(\"disabled\", \"\");\r\n } else if (plusCtrl.hasAttribute(\"disabled\")) {\r\n plusCtrl.removeAttribute(\"disabled\");\r\n }\r\n },\r\n handleFocusOut = function () {\r\n // if input is empty, negative, or NaN\r\n if (input.value.length == 0 || input.value == \"-\" || !/^\\d+$/.test(input.value)) {\r\n input.value = options.spindefault;\r\n } else if (parseInt(input.value) < options.spinmin) {\r\n input.value = options.spinmin;\r\n } else if (parseInt(input.value) > options.spinmax) {\r\n input.value = options.spinmax;\r\n } else if (Math.abs(parseInt(input.value)) % options.spinstep > 0) {\r\n input.value = parseInt(input.value) - (Math.abs(parseInt(input.value)) % options.spinstep);\r\n } else if (input.value.match(/^0+/g)) {\r\n var match = input.value.match(/^0+/g);\r\n var temp = input.value.replace(match, \"\");\r\n if (temp.length == 0) {\r\n input.value = \"0\";\r\n } else {\r\n input.value = temp;\r\n }\r\n }\r\n handleDisabling();\r\n uicoreCustomEvent(\"Spinbox\", \"ValueChangeEvent\", element, {\r\n value: input.value,\r\n });\r\n },\r\n handleArrowEvent = function (e) {\r\n switch (e.keyCode) {\r\n case 35: // end\r\n e.preventDefault();\r\n input.value = options.spinmax;\r\n uicoreCustomEvent(\"Spinbox\", \"ValueChangeEvent\", element, {\r\n value: input.value,\r\n });\r\n break;\r\n case 36: // home\r\n e.preventDefault();\r\n input.value = options.spinmin;\r\n uicoreCustomEvent(\"Spinbox\", \"ValueChangeEvent\", element, {\r\n value: input.value,\r\n });\r\n break;\r\n case 38: // up\r\n e.preventDefault();\r\n if (input.value.length) {\r\n plusCtrl.click();\r\n } else {\r\n var v = options.spinmin + options.spinstep;\r\n updateValue(v);\r\n uicoreCustomEvent(\"Spinbox\", \"ValueChangeEvent\", element, { value: v });\r\n }\r\n break;\r\n case 40: // down\r\n e.preventDefault();\r\n minusCtrl.click();\r\n break;\r\n case 37: // left\r\n case 39: // right\r\n e.preventDefault();\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n // init\r\n if (!(stringSpinbox in element)) {\r\n input = element.querySelector(\".\" + prefix + \"spinbox-input\");\r\n input.addEventListener(\"keypress\", handleKeypressEvent);\r\n input.addEventListener(\"keyup\", handleDisabling);\r\n input.addEventListener(\"focusout\", handleFocusOut);\r\n element.addEventListener(\"keydown\", handleArrowEvent);\r\n\r\n input.value = options.spindefault;\r\n input.setAttribute(\"aria-valuenow\", options.spindefault);\r\n input.setAttribute(\"aria-valuemin\", options.spinmin);\r\n input.setAttribute(\"aria-valuemax\", options.spinmax);\r\n\r\n var controls = element.querySelectorAll(\"button.\" + prefix + \"spinbox-btn\");\r\n if (element.classList.contains(prefix + \"spinbox-horizontal\")) {\r\n // horizontal spinbox\r\n // horizontal = true;\r\n minusCtrl = controls[0];\r\n plusCtrl = controls[1];\r\n } else {\r\n // horizontal = false;\r\n minusCtrl = controls[1];\r\n plusCtrl = controls[0];\r\n }\r\n\r\n minusCtrl.addEventListener(\"click\", function (e) {\r\n handleCtrlClickEvent(e, minusCtrl);\r\n });\r\n plusCtrl.addEventListener(\"click\", function (e) {\r\n handleCtrlClickEvent(e, plusCtrl);\r\n });\r\n handleDisabling();\r\n updateValue(parseInt(input.value, 10));\r\n }\r\n\r\n element[stringSpinbox] = self;\r\n}\r\n\r\nexport function DatePicker(element, options) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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.datesFilter = options.datesFilter ? options.datesFilter : false;\r\n options.pastDates = options.pastDates ? options.pastDates === true : false;\r\n options.availableWeekDays = options.availableWeekDays\r\n ? options.availableWeekDays\r\n : [\r\n { day: \"monday\" },\r\n { day: \"tuesday\" },\r\n { day: \"wednesday\" },\r\n { day: \"thursday\" },\r\n { day: \"friday\" },\r\n { day: \"saturday\" },\r\n { day: \"sunday\" },\r\n ];\r\n options.notBeforeDate = options.notBeforeDate ? new Date(options.notBeforeDate) : null;\r\n options.notAfterDate = options.notAfterDate ? new Date(options.notAfterDate) : null;\r\n options.button_prev = options.button_prev ? options.button_prev : null;\r\n options.button_next = options.button_next ? options.button_next : null;\r\n\r\n var self = this,\r\n stringDatePicker = \"DatePicker\",\r\n calendarBtn = element.querySelector(\".\" + prefix + \"datepicker-btn\"),\r\n target = element[\"getAttribute\"](\"data-target\"),\r\n dateInput = element.querySelector(\".\" + prefix + \"form-control\"),\r\n calendar = element.querySelector(target),\r\n form = null,\r\n monthEl = null,\r\n focusableEls,\r\n currentSelected,\r\n overlay = getFullScreenOverlay(),\r\n smallMedia = window.matchMedia(\"(max-width: 767.98px)\"),\r\n calendarWrapper,\r\n tempSelected = new Date(),\r\n todaysDate = new Date(),\r\n monthLabel = null,\r\n // holds the current month in calendar presentation\r\n datePtr = new Date(),\r\n monthsTexts = [\r\n \"January\",\r\n \"February\",\r\n \"March\",\r\n \"April\",\r\n \"May\",\r\n \"June\",\r\n \"July\",\r\n \"August\",\r\n \"September\",\r\n \"October\",\r\n \"November\",\r\n \"December\",\r\n ],\r\n weekDays = [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"],\r\n keyCode = Object.freeze({\r\n TAB: 9,\r\n ENTER: 13,\r\n ESC: 27,\r\n SPACE: 32,\r\n PAGEUP: 33,\r\n PAGEDOWN: 34,\r\n END: 35,\r\n HOME: 36,\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40,\r\n }),\r\n getMonthName = function (date) {\r\n return monthsTexts[(date || new Date()).getMonth()];\r\n },\r\n setFocusableElements = function () {\r\n focusableEls = getFocusableElements(calendar);\r\n },\r\n toggleCalendar = function () {\r\n if (calendar.classList.contains(prefix + \"d-none\")) {\r\n calendar.classList.remove(prefix + \"d-none\");\r\n calendarWrapper.classList.remove(prefix + \"hide\");\r\n if (smallMedia.matches) {\r\n resetPosition();\r\n createOverlay();\r\n } else {\r\n repositionIfNeeded();\r\n }\r\n\r\n globalObject.addEventListener(\"resize\", toggleCalendar);\r\n //check if calendar is within confines of page\r\n var dateText = dateInput.value;\r\n // !! new Date(dateText) risk of bug when browser l10n/i18n <> en_US\r\n if (dateText && dateInput.validity.valid && checkDateValidity(new Date(dateText))) {\r\n currentSelected = new Date(dateText);\r\n tempSelected = new Date(dateText);\r\n if (datePtr.getFullYear() != currentSelected.getFullYear()) {\r\n datePtr.setFullYear(currentSelected.getFullYear());\r\n }\r\n if (datePtr.getMonth() != currentSelected.getMonth()) {\r\n datePtr.setMonth(currentSelected.getMonth());\r\n }\r\n createMonth();\r\n var newDateElem = element.querySelector('[data-calendar-date=\"' + currentSelected + '\"]');\r\n if (!newDateElem.classList.contains(prefix + \"datepicker-date-disabled\")) {\r\n newDateElem.classList.add(prefix + \"datepicker-date-selected\");\r\n var nextBtn = newDateElem.querySelector(\".\" + prefix + \"datepicker-calendar-day\");\r\n nextBtn.removeAttribute(\"tabindex\");\r\n nextBtn.focus();\r\n }\r\n tempSelected = new Date(currentSelected.getTime());\r\n } else {\r\n resetToDefaultDate();\r\n }\r\n calendar.addEventListener(\"focusout\", blurHandler, false);\r\n } else {\r\n calendar.classList.add(prefix + \"d-none\");\r\n calendarWrapper.classList.add(prefix + \"hide\");\r\n globalObject.removeEventListener(\"resize\", toggleCalendar);\r\n removeActiveClass();\r\n calendarBtn.focus();\r\n calendar.removeEventListener(\"focusout\", blurHandler, false);\r\n removeOverlay();\r\n }\r\n },\r\n createWrapper = function () {\r\n var wrapper = createElement(\"div\", {\r\n class: prefix + \"calendar-wrapper \" + prefix + \"hide\",\r\n });\r\n calendar.parentNode.appendChild(wrapper);\r\n wrapper.appendChild(calendar);\r\n return wrapper;\r\n },\r\n resetPosition = function () {\r\n calendar.style.top = \"\";\r\n calendar.style.right = \"\";\r\n calendar.style.bottom = \"\";\r\n },\r\n repositionIfNeeded = function () {\r\n resetPosition();\r\n var elementRect = element.getBoundingClientRect();\r\n var calendarRect = calendar.getBoundingClientRect();\r\n\r\n if (calendarRect.right > document.body.offsetWidth) {\r\n calendar.style.right = document.body.offsetWidth - calendarBtn.getBoundingClientRect().right + \"px\";\r\n }\r\n\r\n var elementCenterPercent = parseInt(\r\n (100 * (elementRect.top + elementRect.height / 2)) / window.innerHeight\r\n );\r\n var elementExceedsTop = elementRect.top < 0;\r\n var elementExceedsBottom = elementRect.top + elementRect.height > window.innerHeight;\r\n\r\n var scrHeightRemain = Math.max(window.innerHeight - calendarRect.height, 0);\r\n var scrHeightRemainProportional = parseInt(scrHeightRemain * (elementCenterPercent / 100));\r\n\r\n var calendarExceedsBottom = calendarRect.bottom >= window.innerHeight;\r\n var calendarExceedsTop = elementRect.top - calendarRect.height <= 0;\r\n var calendarFitScr = calendarRect.height <= window.innerHeight;\r\n var calendarTopToReachProportion = Math.max(elementRect.top - scrHeightRemainProportional, 0);\r\n\r\n if (!calendarExceedsBottom) {\r\n calendar.style.top = \"100%\";\r\n } else if (!calendarExceedsTop) {\r\n calendar.style.bottom = \"100%\";\r\n } else if (calendarFitScr && elementExceedsTop) {\r\n calendar.style.top = Math.abs(elementRect.top) + \"px\";\r\n } else if (calendarFitScr && elementExceedsBottom) {\r\n calendar.style.bottom = Math.abs(elementRect.top + elementRect.height - window.innerHeight) + \"px\";\r\n } else if (calendarFitScr) {\r\n calendar.style.top = \"-\" + calendarTopToReachProportion + \"px\";\r\n } else {\r\n calendar.style.top = \"-\" + Math.abs(elementRect.top) + \"px\";\r\n }\r\n },\r\n blurHandler = function () {\r\n setTimeout(function () {\r\n if (\r\n calendar &&\r\n !calendar.contains(document.activeElement) &&\r\n !calendarBtn.contains(document.activeElement)\r\n ) {\r\n toggleCalendar();\r\n calendarBtn.focus();\r\n }\r\n }, 10);\r\n },\r\n getWeekDay = function (day) {\r\n return [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"][day];\r\n },\r\n __formatDate = function (d, mask) {\r\n function pad(n, z) {\r\n var v = String(n);\r\n while (v.length < z) {\r\n v = \"0\" + v;\r\n }\r\n return v;\r\n }\r\n\r\n if (!mask || mask.length === 0) {\r\n mask = \"YMD\";\r\n }\r\n var o = \"\";\r\n for (var i = 0; i < mask.length; i++) {\r\n switch (mask[i]) {\r\n case \"Y\":\r\n o = o + pad(d.getFullYear(), 4);\r\n break;\r\n case \"M\":\r\n o = o + pad(d.getMonth(), 2);\r\n break;\r\n case \"D\":\r\n o = o + pad(d.getDate(), 2);\r\n break;\r\n }\r\n }\r\n return o;\r\n },\r\n __createDayWrapper = function (date) {\r\n var div = document.createElement(\"div\");\r\n div.className = prefix + \"datepicker-date\";\r\n div.setAttribute(\"data-calendar-date\", date);\r\n return div;\r\n },\r\n __createDayBtn = function (date) {\r\n var btn = document.createElement(\"button\");\r\n btn.setAttribute(\"type\", \"button\");\r\n btn.setAttribute(\"tabindex\", \"-1\");\r\n btn.className = prefix + \"datepicker-calendar-day\";\r\n btn.addEventListener(\"keydown\", dateKeydownHandler, false);\r\n btn.innerHTML = date.getDate();\r\n btn.setAttribute(\"aria-label\", [weekDays[date.getDay()], getMonthName(date), date.getDate()].join(\" \"));\r\n return btn;\r\n },\r\n __generateDateRange = function (startDate, endDate) {\r\n var dates = [];\r\n var idate = new Date(startDate);\r\n var udate = new Date(endDate);\r\n while (idate <= udate) {\r\n dates.push(new Date(idate));\r\n idate.setDate(idate.getDate() + 1);\r\n }\r\n return dates;\r\n },\r\n // generate date series pertaining a calendar in base date's month/year\r\n // base must be a Date object!\r\n __generateCalendar = function (base) {\r\n var baseDate = !base ? new Date() : base;\r\n\r\n var year = baseDate.getFullYear(),\r\n month = baseDate.getMonth();\r\n\r\n var firstDay = new Date(year, month, 1);\r\n if (firstDay.getDay() > 0) {\r\n firstDay.setDate(firstDay.getDate() - firstDay.getDay());\r\n }\r\n\r\n var lastDay = new Date(year, month + 1, 1);\r\n lastDay.setDate(lastDay.getDate() - 1);\r\n\r\n lastDay.setDate(lastDay.getDate() + (6 - lastDay.getDay()));\r\n // generate the list of dates\r\n return __generateDateRange(firstDay, lastDay);\r\n },\r\n createDay = function (date) {\r\n var isAvailable = true;\r\n\r\n var dateElem = __createDayBtn(date);\r\n var newDayElem = __createDayWrapper(date);\r\n\r\n if (date.getMonth() != datePtr.getMonth()) {\r\n newDayElem.classList.add(prefix + \"datepicker-date-outdated\");\r\n }\r\n\r\n var available_week_day = options.availableWeekDays.filter(function (f) {\r\n return f.day === date.getDay() || f.day === getWeekDay(date.getDay());\r\n });\r\n if (date <= options.defaultDate && date.getDate() < options.defaultDate.getDate() && !options.pastDates) {\r\n newDayElem.classList.add(prefix + \"datepicker-date-disabled\");\r\n dateElem.setAttribute(\"disabled\", \"\");\r\n } else {\r\n if (options.datesFilter) {\r\n if (options.notBeforeDate && date <= options.notBeforeDate) {\r\n isAvailable = false;\r\n }\r\n if (options.notAfterDate && date > options.notAfterDate) {\r\n isAvailable = false;\r\n }\r\n if (available_week_day.length && isAvailable) {\r\n newDayElem.classList.add(prefix + \"datepicker-date-active\");\r\n newDayElem.setAttribute(\"data-calendar-data\", JSON.stringify(available_week_day[0]));\r\n newDayElem.setAttribute(\"data-calendar-status\", \"active\");\r\n } else {\r\n newDayElem.classList.add(prefix + \"datepicker-date-disabled\");\r\n dateElem.setAttribute(\"disabled\", \"\");\r\n }\r\n } else {\r\n newDayElem.classList.add(prefix + \"datepicker-date-active\");\r\n newDayElem.setAttribute(\"data-calendar-status\", \"active\");\r\n }\r\n }\r\n //set current selected date\r\n if (\r\n currentSelected &&\r\n date.toString() == currentSelected.toString() &&\r\n !newDayElem.classList.contains(prefix + \"datepicker-date-disabled\")\r\n ) {\r\n newDayElem.classList.add(prefix + \"datepicker-date-selected\");\r\n }\r\n //if textbox is empty\r\n if (\r\n date.toString() == tempSelected.toString() &&\r\n !newDayElem.classList.contains(prefix + \"datepicker-date-disabled\")\r\n ) {\r\n newDayElem.classList.add(prefix + \"datepicker-date-temp-selected\");\r\n dateElem.removeAttribute(\"tabindex\");\r\n }\r\n //add date to the calendar\r\n newDayElem.appendChild(dateElem);\r\n return newDayElem;\r\n },\r\n createOverlay = function () {\r\n DOC.body.style.overflow = \"hidden\";\r\n if (overlay && !overlay.classList.contains(prefix + \"show\")) {\r\n overlay.classList.add(prefix + \"show\");\r\n overlay.removeAttribute(\"hidden\");\r\n if (overlay.style.visibility == \"hidden\") {\r\n overlay.style.visibility = \"\";\r\n }\r\n } else {\r\n console.warn(\r\n \"MODAL: Overlay requested. Corresponding HTML missing. Please apply id 'dds__full-screen-overlay' and class 'dds__overlay' to an empty div\"\r\n );\r\n }\r\n },\r\n removeOverlay = function () {\r\n DOC.body.style.overflow = \"\";\r\n if (overlay) {\r\n overlay.classList.remove(prefix + \"show\");\r\n }\r\n },\r\n removeActiveClass = function () {\r\n each(element.querySelectorAll(\".\" + prefix + \"datepicker-date-selected\"), function (day) {\r\n day.classList.remove(prefix + \"datepicker-date-selected\");\r\n });\r\n },\r\n removeTempClass = function () {\r\n each(element.querySelectorAll(\".\" + prefix + \"datepicker-date-temp-selected\"), function (day) {\r\n day.classList.remove(prefix + \"datepicker-date-temp-selected\");\r\n day.firstElementChild.setAttribute(\"tabindex\", \"-1\");\r\n });\r\n },\r\n resetToDefaultDate = function () {\r\n currentSelected = null;\r\n var defaultDate = getNearestAvailableDay(\r\n new Date(options.defaultDate),\r\n options.notBeforeDate,\r\n options.notAfterDate\r\n );\r\n if (!defaultDate) {\r\n /* eslint-disable no-console */\r\n console.warn(\r\n \"Can't define a valid date range. Check options.defaultDate options.notBeforeDate options.notAfterDate\"\r\n );\r\n return;\r\n }\r\n //todaysDate = getNearestAvailableDay(todaysDate);\r\n tempSelected = new Date(defaultDate.getTime());\r\n if (datePtr.getFullYear() != tempSelected.getFullYear()) {\r\n datePtr.setFullYear(tempSelected.getFullYear());\r\n }\r\n if (datePtr.getMonth() != tempSelected.getMonth()) {\r\n datePtr.setMonth(tempSelected.getMonth());\r\n }\r\n createMonth();\r\n var newDateElem = element.querySelector('[data-calendar-date=\"' + tempSelected + '\"]');\r\n newDateElem.classList.add(prefix + \"datepicker-date-temp-selected\");\r\n var nextBtn = newDateElem.querySelector(\".\" + prefix + \"datepicker-calendar-day\");\r\n nextBtn.removeAttribute(\"tabindex\");\r\n nextBtn.focus();\r\n },\r\n selectDate = function () {\r\n var activeDates = element.querySelectorAll(\"[data-calendar-status=active]\");\r\n each(activeDates, function (date) {\r\n date.addEventListener(\"click\", function () {\r\n removeActiveClass();\r\n removeTempClass();\r\n var datas = this.dataset;\r\n this.classList.add(prefix + \"datepicker-date-selected\");\r\n currentSelected = new Date(datas.calendarDate);\r\n setNewDate();\r\n });\r\n });\r\n },\r\n createMonth = function () {\r\n clearCalendar();\r\n monthLabel.innerHTML = monthsTexts[datePtr.getMonth()] + \" \" + datePtr.getFullYear();\r\n\r\n // clone current date\r\n var previousPtr = new Date(datePtr.getTime()),\r\n nextPtr = new Date(datePtr.getTime());\r\n\r\n // adjust new datePtr in previous & next month\r\n previousPtr.setMonth(previousPtr.getMonth() - 1);\r\n nextPtr.setMonth(nextPtr.getMonth() + 1);\r\n\r\n //check to see if previous month is out of range\r\n if (\r\n (options.notBeforeDate &&\r\n __formatDate(previousPtr, \"YM\") < __formatDate(options.notBeforeDate, \"YM\")) ||\r\n (!options.pastDates && __formatDate(previousPtr, \"YM\") < __formatDate(todaysDate, \"YM\"))\r\n ) {\r\n options.button_prev.classList.add(prefix + \"disabled\");\r\n options.button_prev.setAttribute(\"disabled\", \"\");\r\n } else {\r\n options.button_prev.classList.remove(prefix + \"disabled\");\r\n options.button_prev.removeAttribute(\"disabled\");\r\n }\r\n //check to see if next month is out of range\r\n if (options.notAfterDate && __formatDate(nextPtr, \"YM\") > __formatDate(options.notAfterDate, \"YM\")) {\r\n options.button_next.classList.add(prefix + \"disabled\");\r\n options.button_next.setAttribute(\"disabled\", \"\");\r\n } else {\r\n options.button_next.classList.remove(prefix + \"disabled\");\r\n options.button_next.removeAttribute(\"disabled\");\r\n }\r\n //add next month days onto calendar\r\n\r\n var dates = __generateCalendar(datePtr);\r\n each(dates, function (d) {\r\n monthEl.appendChild(createDay(d));\r\n });\r\n\r\n datePtr.setDate(1);\r\n selectDate();\r\n setFocusableElements();\r\n },\r\n updateMonthNavLabel = function (date) {\r\n //update label with prev month\r\n var prevMonthDate = new Date(date);\r\n prevMonthDate.setMonth(prevMonthDate.getMonth() - 1);\r\n options.button_prev &&\r\n options.button_prev.setAttribute(\r\n \"aria-label\",\r\n [\"previous month \", getMonthName(prevMonthDate)].join(\" \")\r\n );\r\n\r\n //update label with next month\r\n var nextMonthDate = new Date(date);\r\n nextMonthDate.setMonth(nextMonthDate.getMonth() + 1);\r\n options.button_next &&\r\n options.button_next.setAttribute(\"aria-label\", [\"next month \", getMonthName(nextMonthDate)].join(\" \"));\r\n },\r\n monthPrev = function (e) {\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n datePtr.setMonth(datePtr.getMonth() - 1);\r\n createMonth();\r\n },\r\n monthNext = function (e) {\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n datePtr.setMonth(datePtr.getMonth() + 1);\r\n createMonth();\r\n },\r\n checkDateValidity = function (date) {\r\n if (isNaN(date.getTime())) {\r\n return false;\r\n }\r\n var available_week_day = options.availableWeekDays.filter(function (f) {\r\n return f.day === date.getDay() || f.day === getWeekDay(date.getDay());\r\n });\r\n //check if valid weekday\r\n if (available_week_day.length == 0) {\r\n return false;\r\n }\r\n //check if not before\r\n if (options.notBeforeDate && date <= options.notBeforeDate) {\r\n return false;\r\n }\r\n //check if not after\r\n if (options.notAfterDate && date > options.notAfterDate) {\r\n return false;\r\n }\r\n // check if before today\r\n if (!options.pastDates && date < options.defaultDate && date.getDate() < options.defaultDate.getDate()) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n clearCalendar = function () {\r\n monthEl.innerHTML = \"\";\r\n },\r\n createCalendar = function () {\r\n element.setAttribute(\"aria-modal\", \"true\");\r\n element.setAttribute(\"role\", \"dialog\");\r\n /* eslint-disable */\r\n element.querySelector(target).innerHTML = [\r\n '
',\r\n ' \",\r\n '
',\r\n ' \",\r\n \"
\",\r\n '
',\r\n '
',\r\n '
',\r\n ].join(\"\");\r\n\r\n element.querySelector(\".\" + prefix + \"datepicker-week\").innerHTML = [\r\n 'SUN',\r\n 'MON',\r\n ' TUE',\r\n ' WED',\r\n ' THU',\r\n ' FRI',\r\n ' SAT',\r\n ].join(\"\");\r\n\r\n var bottomMenu = element.querySelector(\".\" + prefix + \"calendar-buttons\");\r\n //eslint-disable-next-line\r\n bottomMenu.innerHTML =\r\n '';\r\n bottomMenu.querySelector(\".\" + prefix + \"btn-secondary\").addEventListener(\"click\", toggleCalendar, false);\r\n bottomMenu\r\n .querySelector(\".\" + prefix + \"btn-secondary\")\r\n .addEventListener(\"keydown\", buttonKeydownHandler, false);\r\n },\r\n setNewDate = function () {\r\n var deliminator = \"/\";\r\n dateInput.value =\r\n (\"0\" + (currentSelected.getMonth() + 1)).slice(-2) +\r\n deliminator +\r\n (\"0\" + currentSelected.getDate()).slice(-2) +\r\n deliminator +\r\n currentSelected.getFullYear();\r\n var e = document.createEvent(\"Event\");\r\n e.initEvent(\"change\", false, false);\r\n dateInput.dispatchEvent(e);\r\n dateInput.focus();\r\n uicoreCustomEvent(\"DatePicker\", \"SelectedDate\", element, {\r\n date: currentSelected,\r\n });\r\n toggleCalendar();\r\n },\r\n setNewTempDate = function (prevDate, currentDate) {\r\n //look for the new date\r\n tempSelected = getNextAvailableDay(prevDate, currentDate);\r\n //remove current selected\r\n var oldSelected = element.querySelector('[data-calendar-date=\"' + prevDate + '\"]');\r\n if (oldSelected) {\r\n oldSelected.children[0].setAttribute(\"tabindex\", \"-1\");\r\n oldSelected.classList.remove(prefix + \"datepicker-date-temp-selected\");\r\n }\r\n var newDateElem = element.querySelector('[data-calendar-date=\"' + tempSelected + '\"]');\r\n var nextBtn = newDateElem.querySelector(\".\" + prefix + \"datepicker-calendar-day\");\r\n nextBtn.removeAttribute(\"tabindex\");\r\n nextBtn.parentElement.classList.add(prefix + \"datepicker-date-temp-selected\");\r\n nextBtn.focus();\r\n updateMonthNavLabel(currentDate);\r\n },\r\n getNextAvailableDay = function (prevDate, currentDate) {\r\n var newDate = element.querySelector(\r\n \":not(.dds__datepicker-date-disabled):not(.dds__datepicker-date-outdated)[data-calendar-date='\" +\r\n currentDate +\r\n \"']\"\r\n );\r\n var direction = prevDate < currentDate ? 1 : -1;\r\n //check day\r\n if (newDate) {\r\n return currentDate;\r\n } else {\r\n //check if not before\r\n if (options.notBeforeDate && currentDate <= options.notBeforeDate) {\r\n return prevDate;\r\n }\r\n //check if not after\r\n if (options.notAfterDate && currentDate >= options.notAfterDate) {\r\n return prevDate;\r\n }\r\n // check if before today\r\n if (currentDate.getTime() <= todaysDate.getTime() - 1 && !options.pastDates) {\r\n return prevDate;\r\n }\r\n if (currentDate.getMonth() != prevDate.getMonth()) {\r\n if (direction == 1) {\r\n monthNext();\r\n }\r\n if (direction == -1) {\r\n monthPrev();\r\n }\r\n if (\r\n element.querySelector(\r\n \":not(.dds__datepicker-date-disabled)[data-calendar-date='\" + currentDate + \"']\"\r\n )\r\n ) {\r\n return currentDate;\r\n } else {\r\n prevDate = new Date(currentDate.getTime());\r\n currentDate.setDate(currentDate.getDate() + direction);\r\n return getNextAvailableDay(prevDate, currentDate);\r\n }\r\n } else {\r\n prevDate = new Date(currentDate.getTime());\r\n currentDate.setDate(currentDate.getDate() + direction);\r\n return getNextAvailableDay(prevDate, currentDate);\r\n }\r\n }\r\n },\r\n getNearestAvailableDay = function (currentDate, notBeforeDate, notAfterDate) {\r\n // the date is valid... so no calculation\r\n if (checkDateValidity(currentDate)) {\r\n return currentDate;\r\n }\r\n // no limits to find nearest day set limites notBefore=currentDate-1; notAfter=currentDate+30;\r\n\r\n if (!notBeforeDate) {\r\n notBeforeDate = new Date(currentDate).setDate(currentDate.getDate() - 7);\r\n }\r\n if (!notAfterDate) {\r\n notAfterDate = new Date(currentDate).setDate(currentDate.getDate() + 30);\r\n }\r\n // generate the list of possible dates\r\n var possibleDates = __generateDateRange(notBeforeDate, notAfterDate).filter(checkDateValidity);\r\n\r\n //reducer to find if the $date is on array\r\n //ignoring timestamp\r\n var hasDate = function (date) {\r\n return function (acc, val) {\r\n if (!acc && date && val) {\r\n acc =\r\n val.getDate() === date.getDate() &&\r\n val.getMonth() === date.getMonth() &&\r\n val.getFullYear() === date.getFullYear();\r\n }\r\n return acc;\r\n };\r\n };\r\n\r\n if (possibleDates.reduce(hasDate(currentDate), false)) {\r\n //test if the current day is inside available dates\r\n return currentDate;\r\n }\r\n\r\n //the first available date closest to currentDate\r\n return possibleDates.filter(function (value) {\r\n return value >= currentDate;\r\n })[0];\r\n },\r\n dateKeydownHandler = function (e) {\r\n if (!e.preventDefault) {\r\n e.preventDefault = function () {\r\n return (e.returnValue = false);\r\n };\r\n }\r\n var prevSelected = new Date(tempSelected.getTime());\r\n switch (e.keyCode) {\r\n case keyCode.UP: // up key\r\n e.preventDefault();\r\n tempSelected.setDate(tempSelected.getDate() - 7);\r\n setNewTempDate(prevSelected, tempSelected);\r\n break;\r\n case keyCode.DOWN: // down key\r\n e.preventDefault();\r\n tempSelected.setDate(tempSelected.getDate() + 7);\r\n setNewTempDate(prevSelected, tempSelected);\r\n break;\r\n case keyCode.LEFT: // left key\r\n e.preventDefault();\r\n tempSelected.setDate(tempSelected.getDate() - 1);\r\n setNewTempDate(prevSelected, tempSelected);\r\n break;\r\n case keyCode.RIGHT: // right key\r\n e.preventDefault();\r\n tempSelected.setDate(tempSelected.getDate() + 1);\r\n setNewTempDate(prevSelected, tempSelected);\r\n break;\r\n case keyCode.ESC: // esc key\r\n var oldSelected = element.querySelector(\".\" + prefix + \"datepicker-date-selected\");\r\n if (oldSelected) {\r\n oldSelected.classList.remove(prefix + \"datepicker-date-selected\");\r\n oldSelected.children[0].setAttribute(\"tabindex\", \"-1\");\r\n }\r\n toggleCalendar();\r\n break;\r\n case keyCode.TAB: // tab key\r\n if (focusableEls.length === 1) {\r\n e.preventDefault();\r\n break;\r\n }\r\n if (e.shiftKey) {\r\n if (document.activeElement === focusableEls[0]) {\r\n e.preventDefault();\r\n focusableEls[focusableEls.length - 1].focus();\r\n }\r\n } else {\r\n if (document.activeElement === focusableEls[focusableEls.length - 1]) {\r\n e.preventDefault();\r\n focusableEls[0].focus();\r\n }\r\n }\r\n break;\r\n }\r\n },\r\n buttonKeydownHandler = function (e) {\r\n switch (e.keyCode) {\r\n case keyCode.ESC: // esc key\r\n toggleCalendar();\r\n break;\r\n case keyCode.TAB: // tab key\r\n if (focusableEls.length === 1) {\r\n e.preventDefault();\r\n break;\r\n }\r\n if (e.shiftKey) {\r\n if (document.activeElement === focusableEls[0]) {\r\n e.preventDefault();\r\n focusableEls[focusableEls.length - 1].focus();\r\n }\r\n } else {\r\n if (document.activeElement === focusableEls[focusableEls.length - 1]) {\r\n e.preventDefault();\r\n focusableEls[0].focus();\r\n }\r\n }\r\n break;\r\n }\r\n },\r\n inputHandler = function () {\r\n if (checkDateValidity(new Date(dateInput.value)) && getComputedStyle(errorMsg).display == \"block\") {\r\n errorMsg.style.display = \"none\";\r\n dateInput.setCustomValidity(\"\");\r\n } else if (!checkDateValidity(new Date(dateInput.value))) {\r\n if (\r\n !isEdge ||\r\n (isEdge && calendar.classList.contains(prefix + \"d-none\") && document.activeElement !== calendarBtn)\r\n ) {\r\n toggleCalendar();\r\n }\r\n if (getComputedStyle(errorMsg).display == \"none\") {\r\n errorMsg.style.display = \"block\";\r\n dateInput.setCustomValidity(\"Invalid Date\");\r\n }\r\n }\r\n },\r\n submitHandler = function (event) {\r\n var formValidationErrorSuffix = \"Feedback\";\r\n if (form.checkValidity() === false) {\r\n each(form, function (el) {\r\n if (el.tagName == \"INPUT\") {\r\n var errorMsg = form.querySelector(\"#\" + el.getAttribute(\"id\") + formValidationErrorSuffix);\r\n setTimeout(function () {\r\n if (el.classList.contains(\"dds__datepicker-input\")) {\r\n if (checkDateValidity(new Date(el.value))) {\r\n el.setCustomValidity(\"\");\r\n } else {\r\n el.setCustomValidity(\"Invalid Date\");\r\n }\r\n }\r\n if (!el.validity.valid) {\r\n //if error message has not been turned on yet\r\n if (errorMsg && !(getComputedStyle(errorMsg)[\"display\"] == \"block\")) {\r\n errorMsg.style.display = \"block\";\r\n }\r\n el.setAttribute(\"aria-invalid\", \"true\");\r\n el.setAttribute(\"aria-describedby\", el.getAttribute(\"id\") + formValidationErrorSuffix);\r\n } else {\r\n //if error message has not been turned off yet\r\n if (errorMsg && getComputedStyle(errorMsg)[\"display\"] == \"block\") {\r\n errorMsg.style.display = \"none\";\r\n }\r\n el.setAttribute(\"aria-invalid\", \"false\");\r\n el.setAttribute(\"aria-describedby\", \"\");\r\n }\r\n }, 10);\r\n }\r\n });\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n form.classList.add(\"dds__was-validated\");\r\n };\r\n //public functions\r\n this.init = function () {\r\n createCalendar();\r\n options.button_prev = document.querySelector(target + \" [data-calendar-toggle=previous]\");\r\n options.button_next = document.querySelector(target + \" [data-calendar-toggle=next]\");\r\n monthEl = document.querySelector(target + \" [data-calendar-area=month]\");\r\n monthLabel = document.querySelector(target + \" [data-calendar-label=month]\");\r\n datePtr.setDate(1);\r\n createMonth();\r\n calendarWrapper = element.querySelector(\".\" + prefix + \"calendar-wrapper\")\r\n ? element.querySelector(\".\" + prefix + \"calendar-wrapper\")\r\n : createWrapper();\r\n options.button_prev.addEventListener(\r\n \"click\",\r\n function () {\r\n monthPrev();\r\n removeTempClass();\r\n var prevMonthDate = new Date(tempSelected.getTime());\r\n prevMonthDate.setMonth(prevMonthDate.getMonth() - 1);\r\n prevMonthDate.setDate(1);\r\n setNewTempDate(\r\n prevMonthDate,\r\n getNearestAvailableDay(prevMonthDate, options.notBeforeDate, options.notAfterDate)\r\n );\r\n if (!options.button_prev.classList.contains(prefix + \"disabled\")) {\r\n options.button_prev.focus();\r\n }\r\n updateMonthNavLabel(prevMonthDate);\r\n },\r\n false\r\n );\r\n options.button_next.addEventListener(\r\n \"click\",\r\n function () {\r\n monthNext();\r\n removeTempClass();\r\n var nextMonthDate = new Date(tempSelected.getTime());\r\n nextMonthDate.setMonth(nextMonthDate.getMonth() + 1);\r\n nextMonthDate.setDate(1);\r\n setNewTempDate(\r\n nextMonthDate,\r\n getNearestAvailableDay(nextMonthDate, options.notBeforeDate, options.notAfterDate)\r\n );\r\n if (!options.button_next.classList.contains(prefix + \"disabled\")) {\r\n options.button_next.focus();\r\n }\r\n updateMonthNavLabel(nextMonthDate);\r\n },\r\n false\r\n );\r\n updateMonthNavLabel(tempSelected);\r\n options.button_prev.addEventListener(\"keydown\", buttonKeydownHandler, false);\r\n options.button_next.addEventListener(\"keydown\", buttonKeydownHandler, false);\r\n };\r\n\r\n this.destroy = function () {\r\n options.button_prev.removeEventListener(\"click\", monthPrev, false);\r\n options.button_next.removeEventListener(\"click\", monthNext, false);\r\n options.button_prev.removeEventListener(\"keydown\", buttonKeydownHandler, false);\r\n options.button_next.removeEventListener(\"keydown\", buttonKeydownHandler, false);\r\n clearCalendar();\r\n document.querySelector(target).innerHTML = \"\";\r\n };\r\n this.reset = function () {\r\n this.destroy();\r\n this.init();\r\n };\r\n // this.set = function (options) {\r\n // for (var k in options) {\r\n // if (opts.hasOwnProperty(k)) {\r\n // opts[k] = options[k];\r\n // }\r\n // }\r\n // createMonth();\r\n // }\r\n if (!(stringDatePicker in element)) {\r\n // validate options\r\n if (calendarBtn == null) {\r\n throw new Error(\"There was a problem found with date picker button, please correct and try again\");\r\n }\r\n if (target == null) {\r\n throw new Error(\"There was a problem found with date picker target, please correct and try again\");\r\n }\r\n if (calendar == null) {\r\n throw new Error(\"There was a problem found with calendar, please correct and try again\");\r\n }\r\n //remove time from date\r\n datePtr.setHours(0, 0, 0, 0);\r\n todaysDate.setHours(0, 0, 0, 0);\r\n calendarBtn.addEventListener(\"click\", toggleCalendar, false);\r\n if (isEdge) {\r\n calendarBtn.addEventListener(\"click\", inputHandler, false);\r\n dateInput.addEventListener(\"focusout\", inputHandler, false);\r\n }\r\n if (!dateInput.hasAttribute(\"placeholder\")) {\r\n console.warn(\r\n \"Placeholder was not set. Please set a placeholder value if you plan to use form validation. Setting to default placeholder value.\"\r\n );\r\n dateInput.setAttribute(\"placeholder\", \"__/__/____\");\r\n }\r\n if (dateInput) {\r\n new InputMask(dateInput);\r\n var errorMsg = element.querySelector(\".\" + prefix + \"invalid-feedback\");\r\n dateInput.addEventListener(\"change\", inputHandler, false);\r\n }\r\n form = getClosest(element, \"FORM\", false);\r\n form.addEventListener(\"submit\", submitHandler);\r\n setFocusableElements();\r\n // //set input mask\r\n options.defaultDate = options.defaultDate\r\n ? checkDateValidity(new Date(options.defaultDate))\r\n ? options.defaultDate\r\n : \"\"\r\n : \"\";\r\n if (!options.defaultDate) {\r\n options.defaultDate = new Date();\r\n options.defaultDate.setHours(0, 0, 0, 0);\r\n } else {\r\n var defaultDate = (options.defaultDate = new Date(options.defaultDate));\r\n var defaultDay = defaultDate.getDate() < 10 ? \"0\" + defaultDate.getDate() : defaultDate.getDate();\r\n var defaultMonth =\r\n defaultDate.getMonth() + 1 < 10 ? \"0\" + (defaultDate.getMonth() + 1) : defaultDate.getMonth() + 1;\r\n\r\n dateInput.setAttribute(\"value\", defaultMonth + \"/\" + defaultDay + \"/\" + defaultDate.getFullYear());\r\n var e = document.createEvent(\"Event\");\r\n e.initEvent(\"change\", false, false);\r\n dateInput.dispatchEvent(e);\r\n if (isIE || isEdge) {\r\n element.style.display = \"none\"; //IE needs a small timeout or cursor will appear in input box\r\n setTimeout(function () {\r\n dateInput.blur();\r\n element.style.display = \"block\";\r\n }, 300);\r\n }\r\n }\r\n this.init();\r\n }\r\n element[stringDatePicker] = self;\r\n}\r\n\r\nexport function BarSelect(element) {\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n var self = this,\r\n stringBarSelect = \"BarSelect\",\r\n selects = null,\r\n value = 0,\r\n clickHandler = function (e) {\r\n var input = e.target.classList.contains(prefix + \"bar-select\")\r\n ? e.target.querySelector(\"input\")\r\n : e.target.tagName == \"LABEL\"\r\n ? e.target.previousElementSibling\r\n : e.target;\r\n value = parseInt(input.getAttribute(\"value\"));\r\n each(selects, function (select) {\r\n if (parseInt(select.querySelector(\"input\").getAttribute(\"value\")) <= value) {\r\n select.classList.remove(prefix + \"bar-select-hover\");\r\n select.classList.add(prefix + \"bar-select-selected\");\r\n } else {\r\n select.classList.remove(prefix + \"bar-select-hover\");\r\n select.classList.remove(prefix + \"bar-select-selected\");\r\n }\r\n });\r\n uicoreCustomEvent(\"BarSelect\", \"SelectedValue\", element, {\r\n value: value,\r\n });\r\n },\r\n mouseOverHandler = function (e) {\r\n var input = e.target.classList.contains(prefix + \"bar-select\")\r\n ? e.target.querySelector(\"input\")\r\n : e.target.tagName == \"LABEL\"\r\n ? e.target.previousElementSibling\r\n : e.target;\r\n value = parseInt(input.getAttribute(\"value\"));\r\n each(selects, function (select) {\r\n if (parseInt(select.querySelector(\"input\").getAttribute(\"value\")) <= value) {\r\n select.classList.add(prefix + \"bar-select-hover\");\r\n } else {\r\n select.classList.remove(prefix + \"bar-select-hover\");\r\n }\r\n });\r\n },\r\n mouseOutHandler = function () {\r\n each(selects, function (select) {\r\n select.classList.remove(prefix + \"bar-select-hover\");\r\n });\r\n },\r\n focusHandler = function (e) {\r\n var input = e.currentTarget.nextElementSibling;\r\n if (!isInViewport(input)) {\r\n input.scrollIntoView(false);\r\n }\r\n },\r\n isInViewport = function (element) {\r\n var bounding = element.getBoundingClientRect();\r\n return (\r\n bounding.top >= 0 &&\r\n bounding.left >= 0 &&\r\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\r\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\r\n );\r\n };\r\n\r\n if (!(stringBarSelect in element)) {\r\n selects = element.querySelectorAll(\".\" + prefix + \"bar-select\");\r\n element.addEventListener(\"mouseout\", mouseOutHandler, false);\r\n each(selects, function (select) {\r\n select.addEventListener(\"click\", clickHandler, false);\r\n select.addEventListener(\"mouseover\", mouseOverHandler, false);\r\n if (isIE || isFirefox) {\r\n select.querySelector(\"input\").addEventListener(\"focusin\", focusHandler, false);\r\n }\r\n });\r\n }\r\n\r\n element[stringBarSelect] = self;\r\n}\r\n","import {\r\n DOC,\r\n getElementsByClassName,\r\n prefix,\r\n uicoreCustomEvent,\r\n getTransitionDurationFromElement,\r\n each,\r\n getClosest,\r\n} from \"./utilities.js\";\r\n\r\nexport function Button(element) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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 =\r\n element.firstElementChild.tagName === \"LABEL\"\r\n ? element.querySelector(\".\" + prefix + \"btn-toggle\")\r\n : 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\") && 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 element[stringButton] = self;\r\n}\r\n\r\nexport function ButtonFilter(element) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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 (\r\n filterItem == lastActiveItem ||\r\n filterItem.classList.contains(prefix + \"disabled\") ||\r\n (parentFieldset && parentFieldset.hasAttribute(\"disabled\"))\r\n ) {\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, {\r\n target: activeFilterItem.label.dataset[\"filterValue\"],\r\n });\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}\r\n","import {\r\n each,\r\n prefix,\r\n debounce,\r\n createElement,\r\n classAdd,\r\n isArray,\r\n isIE,\r\n uicoreCustomEvent,\r\n emulateTransitionEnd,\r\n isEdge,\r\n renderSvg,\r\n} from \"./utilities\";\r\n\r\nexport default function Overflow(element, options) {\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n // set options\r\n options = options || {};\r\n if (element.dataset[\"type\"]) {\r\n options.type = element.dataset[\"type\"];\r\n }\r\n if (element.dataset[\"position\"]) {\r\n options.position = element.dataset[\"position\"];\r\n }\r\n if (element.dataset[\"top\"]) {\r\n options.top = parseInt(element.dataset[\"top\"]);\r\n }\r\n if (element.dataset[\"style\"]) {\r\n options.style = element.dataset[\"style\"];\r\n }\r\n\r\n options.type = options.type ? options.type : \"single\";\r\n options.style = options.style ? (options.style === \"svg\" ? (options.style = \"svg\") : \"button\") : \"button\";\r\n options.position = options.position && options.position === \"outset\" ? \"outset\" : \"inset\";\r\n options.top = options.top && typeof options.top === \"number\" ? options.top : null;\r\n options.lazyload = options.lazyload ? options.lazyload : false;\r\n options.responsive = options.responsive ? options.responsive : false;\r\n\r\n var self = this,\r\n stringOverflow = \"Overflow\",\r\n overflowElement, // The UL container div\r\n overflowContainer, // The UL element\r\n overflowChildren,\r\n overflowChildRight,\r\n overflowChildLeft,\r\n centered = false,\r\n leftCtrl,\r\n rightCtrl,\r\n atLeftEnd = true,\r\n atRightEnd = true,\r\n ctrlWidth,\r\n containerLeft,\r\n containerRight,\r\n centeredOffset = 0,\r\n containerHeight = 0,\r\n containerWidth = 0,\r\n // handlers\r\n handleSizeChange = function () {\r\n if (containerWidth == overflowElement.offsetWidth) return;\r\n if (containerHeight !== overflowChildren.children[0].offsetHeight) {\r\n handleResize();\r\n }\r\n setLeftAndRightIndex();\r\n containerWidth = overflowElement.offsetWidth;\r\n },\r\n handleResize = debounce(function () {\r\n getChildrenWidth();\r\n setLeftAndRightIndex();\r\n addHeightStyle([leftCtrl, rightCtrl]);\r\n if (Math.abs(overflowContainer.offsetLeft) + overflowContainer.offsetWidth > overflowChildren.width) {\r\n if (leftCtrl.hasAttribute(\"active\")) {\r\n var currentOffset = pageRight();\r\n overflowContainer.style.left = currentOffset + \"px\";\r\n }\r\n }\r\n }, 10),\r\n handleClickEvent = function (e) {\r\n var isRight = e.target.classList.contains(prefix + \"overflow-control-right\") ? true : false;\r\n controlClick(isRight);\r\n },\r\n controlClick = function (isRight) {\r\n var currentOffset = null;\r\n if (options.type == \"single\") {\r\n if (isRight) {\r\n atLeftEnd = false;\r\n var rightChild = overflowChildren.children[overflowChildRight + 1];\r\n var rightElementEdge =\r\n rightChild.offsetLeft +\r\n rightChild.offsetWidth -\r\n (Math.abs(overflowContainer.offsetLeft) + overflowContainer.offsetWidth);\r\n if (overflowChildRight + 1 >= overflowChildren.children.length - 1) {\r\n atRightEnd = true;\r\n }\r\n currentOffset =\r\n (Math.abs(overflowContainer.offsetLeft) +\r\n rightElementEdge +\r\n (options.position === \"inset\" && !atRightEnd ? ctrlWidth : 0)) *\r\n -1;\r\n } else {\r\n atRightEnd = false;\r\n var leftChild = overflowChildren.children[overflowChildLeft - 1];\r\n if (overflowChildLeft - 1 === 0) {\r\n atLeftEnd = true;\r\n currentOffset = 0;\r\n } else {\r\n currentOffset =\r\n (leftChild.offsetLeft - (options.position === \"inset\" && !atLeftEnd ? ctrlWidth : 0)) * -1;\r\n }\r\n }\r\n } else {\r\n if (isRight) {\r\n currentOffset = pageRight();\r\n } else {\r\n atRightEnd = false;\r\n if (overflowChildren.children[overflowChildLeft].offsetLeft < overflowContainer.offsetWidth) {\r\n atLeftEnd = true;\r\n currentOffset = 0;\r\n } else {\r\n var tabLeft =\r\n Math.abs(overflowContainer.offsetLeft) -\r\n overflowChildren.children[overflowChildLeft - 1].offsetLeft;\r\n var contSpace =\r\n overflowContainer.offsetWidth -\r\n (options.position === \"inset\" ? ctrlWidth : 0) -\r\n overflowChildren.children[overflowChildLeft - 1].offsetWidth;\r\n currentOffset = (Math.abs(overflowContainer.offsetLeft) - (tabLeft + contSpace)) * -1;\r\n }\r\n }\r\n }\r\n overflowContainer.style.left = currentOffset + \"px\";\r\n emulateTransitionEnd(overflowContainer, setLeftAndRightIndex);\r\n },\r\n pageRight = function () {\r\n var rightChild;\r\n atLeftEnd = overflowChildren.width < overflowContainer.offsetWidth ? true : false;\r\n var currentOffset = null;\r\n var remainder =\r\n overflowChildren.width - (Math.abs(overflowContainer.offsetLeft) + overflowContainer.offsetWidth);\r\n if (overflowContainer.offsetWidth >= remainder) {\r\n atRightEnd = true;\r\n rightChild = overflowChildren.children[overflowChildren.children.length - 1];\r\n var rightElementEdge =\r\n rightChild.offsetLeft +\r\n rightChild.offsetWidth -\r\n (Math.abs(overflowContainer.offsetLeft) + overflowContainer.offsetWidth);\r\n currentOffset = (Math.abs(overflowContainer.offsetLeft) + rightElementEdge) * -1;\r\n } else {\r\n atRightEnd = false;\r\n rightChild = overflowChildren.children[overflowChildRight + 1];\r\n currentOffset =\r\n (rightChild.offsetLeft - (options.position === \"inset\" && !atRightEnd ? ctrlWidth : 0)) * -1;\r\n }\r\n return currentOffset;\r\n },\r\n setLeftAndRightCtrl = function () {\r\n if (atRightEnd) {\r\n rightCtrl.removeAttribute(\"active\");\r\n if (isIE && centered && atLeftEnd) {\r\n setMinimumWidth();\r\n }\r\n } else if (!rightCtrl.hasAttribute(\"active\")) {\r\n rightCtrl.setAttribute(\"active\", \"\");\r\n if (isIE && centered) {\r\n overflowContainer.style.minWidth = \"\";\r\n }\r\n }\r\n if (atLeftEnd) {\r\n leftCtrl.removeAttribute(\"active\");\r\n } else if (!leftCtrl.hasAttribute(\"active\")) {\r\n leftCtrl.setAttribute(\"active\", \"\");\r\n }\r\n },\r\n createArrowHtml = function () {\r\n leftCtrl = createElement(\"button\", {\r\n class:\r\n prefix +\r\n \"overflow-control \" +\r\n prefix +\r\n \"overflow-control-left \" +\r\n (options.style === \"button\" ? prefix + \"overflow-control-btn\" : prefix + \"overflow-control-svg\"),\r\n tabIndex: \"-1\",\r\n \"aria-label\": \"Previous\",\r\n });\r\n leftCtrl.style.left = options.position === \"outset\" ? \"-8px\" : \"0px\";\r\n leftCtrl.addEventListener(\"click\", handleClickEvent, false);\r\n rightCtrl = createElement(\"button\", {\r\n class:\r\n prefix +\r\n \"overflow-control \" +\r\n prefix +\r\n \"overflow-control-right \" +\r\n (options.style === \"button\" ? prefix + \"overflow-control-btn\" : prefix + \"overflow-control-svg\"),\r\n tabIndex: \"-1\",\r\n \"aria-label\": \"Next\",\r\n });\r\n rightCtrl.style.right = options.position === \"outset\" ? \"-8px\" : \"0px\";\r\n rightCtrl.addEventListener(\"click\", handleClickEvent, false);\r\n if (options.top) {\r\n rightCtrl.style.top = options.top + \"px\";\r\n leftCtrl.style.top = options.top + \"px\";\r\n }\r\n var controls = [leftCtrl, rightCtrl];\r\n if (!options.responsive) {\r\n each(controls, function (control) {\r\n control.classList.add(prefix + \"overflow-unresponsive\");\r\n });\r\n }\r\n addHeightStyle(controls);\r\n\r\n var leftSvg = renderSvg([{ name: \"chevron-left\", show: true }], { \"aria-hidden\": true });\r\n classAdd(leftSvg, prefix + \"overflow-control-left\");\r\n var rightSvg = renderSvg([{ name: \"chevron-right\", show: true }], { \"aria-hidden\": true });\r\n classAdd(rightSvg, prefix + \"overflow-control-right\");\r\n leftCtrl.appendChild(leftSvg);\r\n rightCtrl.appendChild(rightSvg);\r\n\r\n element.insertBefore(leftCtrl, element.children[0]);\r\n element.insertBefore(rightCtrl, element.children[1]);\r\n setCtrlWidth();\r\n },\r\n getChildrenWidth = function () {\r\n overflowChildren.width = 0;\r\n overflowChildren.children = [];\r\n each(overflowContainer.children, function (child) {\r\n overflowChildren.width += child.offsetWidth + getMargin(child);\r\n overflowChildren.children.push(child);\r\n });\r\n overflowChildren.width -= isEdge ? overflowChildren.children.length - 1 : 0;\r\n },\r\n getMargin = function (child) {\r\n var style = child.currentStyle || window.getComputedStyle(child),\r\n margin;\r\n if (isIE) {\r\n margin =\r\n convertRemToPixels(style.getPropertyValue(\"margin-left\")) +\r\n convertRemToPixels(style.getPropertyValue(\"margin-right\"));\r\n } else {\r\n margin = parseInt(style.marginLeft) + parseInt(style.marginRight);\r\n }\r\n return margin;\r\n },\r\n addHeightStyle = function (els) {\r\n if (!isArray(els)) {\r\n els = [els];\r\n }\r\n each(els, function (el) {\r\n if (options.style === \"button\") {\r\n el.style.height = overflowChildren.children[0].offsetHeight + \"px\";\r\n containerHeight = overflowChildren.children[0].offsetHeight;\r\n }\r\n });\r\n },\r\n toggleCentered = function (offSet) {\r\n if (offSet < 0) {\r\n if (overflowContainer.parentElement.classList.contains(prefix + \"tabs-centered-container\")) {\r\n overflowContainer.parentElement.classList.remove(prefix + \"tabs-centered-container\");\r\n }\r\n if (overflowContainer.classList.contains(prefix + \"tab-centered\")) {\r\n overflowContainer.classList.remove(prefix + \"tab-centered\");\r\n }\r\n return false;\r\n } else {\r\n if (!overflowContainer.parentElement.classList.contains(prefix + \"tabs-centered-container\")) {\r\n overflowContainer.parentElement.classList.add(prefix + \"tabs-centered-container\");\r\n }\r\n if (!overflowContainer.classList.contains(prefix + \"tab-centered\")) {\r\n overflowContainer.classList.add(prefix + \"tab-centered\");\r\n }\r\n overflowContainer.style.left = \"0px\";\r\n return true;\r\n }\r\n },\r\n setContainerLeftRight = function (useCentered, offSet) {\r\n if (useCentered) {\r\n containerLeft = offSet > 0 ? 0 : offSet;\r\n containerRight = overflowElement.offsetWidth;\r\n centeredOffset = Math.floor(offSet);\r\n } else {\r\n containerLeft = Math.abs(overflowContainer.offsetLeft);\r\n containerLeft += options.position === \"inset\" && !atLeftEnd ? ctrlWidth : 0;\r\n containerRight = containerLeft + overflowContainer.offsetWidth;\r\n }\r\n },\r\n setLeftAndRightIndex = function () {\r\n overflowChildLeft = null;\r\n overflowChildRight = null;\r\n var overflowChildLeftSet = false,\r\n offSet = (overflowElement.offsetWidth - overflowChildren.width) / 2,\r\n useCentered = false;\r\n if (centered) {\r\n useCentered = toggleCentered(offSet);\r\n }\r\n setContainerLeftRight(useCentered, offSet);\r\n each(overflowChildren.children, function (child, idx) {\r\n var childLeft;\r\n if (useCentered) {\r\n childLeft =\r\n centeredOffset + Math.floor(overflowChildren.width / overflowChildren.children.length) * idx;\r\n } else {\r\n childLeft = child.offsetLeft;\r\n }\r\n if (!overflowChildLeftSet && childLeft >= containerLeft) {\r\n overflowChildLeft = idx;\r\n overflowChildLeftSet = true;\r\n }\r\n if (childLeft + child.offsetWidth <= containerRight) {\r\n overflowChildRight = idx;\r\n }\r\n });\r\n if (overflowChildLeft > 0) {\r\n atLeftEnd = false;\r\n } else {\r\n atLeftEnd = true;\r\n }\r\n if (overflowChildRight < overflowChildren.children.length - 1) {\r\n atRightEnd = false;\r\n } else {\r\n atRightEnd = true;\r\n }\r\n setLeftAndRightCtrl();\r\n uicoreCustomEvent(\"Overflow\", \"ChangeEvent\", element, {\r\n left: overflowChildLeft,\r\n right: overflowChildRight,\r\n totalItems: overflowChildren.children.length,\r\n hasRightControl: rightCtrl.hasAttribute(\"active\"),\r\n hasLeftControl: leftCtrl.hasAttribute(\"active\"),\r\n });\r\n },\r\n convertRemToPixels = function (rem) {\r\n if (rem.indexOf(\"rem\") > 0) {\r\n rem = rem.split(\"rem\")[0];\r\n var computed = rem * parseFloat(getComputedStyle(document.documentElement).fontSize);\r\n if (computed < 0) {\r\n return Math.floor(computed);\r\n } else {\r\n return Math.ceil(computed);\r\n }\r\n } else {\r\n return 0;\r\n }\r\n },\r\n setCtrlWidth = function () {\r\n var style = rightCtrl.currentStyle || window.getComputedStyle(rightCtrl, null);\r\n if (isIE) {\r\n ctrlWidth = convertRemToPixels(style.getPropertyValue(\"width\"));\r\n } else {\r\n ctrlWidth = parseInt(style.getPropertyValue(\"width\").match(/^\\d.?/g)[0]);\r\n }\r\n },\r\n setMinimumWidth = function () {\r\n var width = 0;\r\n each(overflowContainer.querySelectorAll(\"LI\"), function (child) {\r\n width += 120 + getMargin(child);\r\n });\r\n overflowContainer.style.minWidth = width - 5 + \"px\";\r\n },\r\n frameListener = function () {\r\n handleSizeChange();\r\n window.requestAnimationFrame(frameListener);\r\n },\r\n init = function () {\r\n getChildrenWidth();\r\n createArrowHtml();\r\n setLeftAndRightIndex();\r\n if (overflowChildRight < overflowChildren.children.length - 1) {\r\n rightCtrl.setAttribute(\"active\", \"\");\r\n }\r\n if (isIE && centered && atLeftEnd && atRightEnd) {\r\n setMinimumWidth();\r\n }\r\n window.addEventListener(\"resize\", handleResize, false);\r\n containerWidth = overflowElement.offsetWidth;\r\n window.requestAnimationFrame(frameListener);\r\n };\r\n\r\n this.lazyLoad = function () {\r\n if (stringOverflow in element) {\r\n init();\r\n }\r\n };\r\n\r\n this.getCurrentDetails = function () {\r\n return {\r\n left: overflowChildLeft,\r\n right: overflowChildRight,\r\n totalItems: overflowChildren.children.length,\r\n hasRightControl: rightCtrl.hasAttribute(\"active\"),\r\n hasLeftControl: leftCtrl.hasAttribute(\"active\"),\r\n };\r\n };\r\n this.clickRight = function () {\r\n controlClick(true);\r\n };\r\n\r\n this.clickLeft = function () {\r\n controlClick(false);\r\n };\r\n\r\n this.clickEnd = function () {\r\n atLeftEnd = overflowChildren.width < overflowContainer.offsetWidth ? true : false;\r\n atRightEnd = true;\r\n if (rightCtrl.hasAttribute(\"active\")) {\r\n overflowContainer.style.left =\r\n (overflowChildren.width -\r\n overflowContainer.offsetWidth +\r\n (options.position === \"inset\" && !atRightEnd ? ctrlWidth : 0)) *\r\n -1 +\r\n \"px\";\r\n }\r\n rightCtrl.removeAttribute(\"active\");\r\n emulateTransitionEnd(overflowContainer, setLeftAndRightIndex);\r\n };\r\n\r\n this.clickHome = function () {\r\n atLeftEnd = true;\r\n atRightEnd = false;\r\n if (leftCtrl.hasAttribute(\"active\")) {\r\n overflowContainer.style.left = \"0px\";\r\n }\r\n leftCtrl.removeAttribute(\"active\");\r\n emulateTransitionEnd(overflowContainer, setLeftAndRightIndex);\r\n };\r\n\r\n //init\r\n if (!(stringOverflow in element)) {\r\n overflowElement = element;\r\n if (element.children[0].classList.contains(prefix + \"tabs-centered-container\")) {\r\n centered = true;\r\n }\r\n\r\n overflowElement.style.overflow = \"hidden\";\r\n overflowContainer = overflowElement.querySelector(\"UL\");\r\n overflowContainer.classList.add(prefix + \"overflow-transition\");\r\n overflowContainer.setAttribute(\r\n \"style\",\r\n \"position: relative; flex-wrap: nowrap; white-space: nowrap; left: 0px\"\r\n );\r\n overflowChildren = {};\r\n // Some child elements contain images so wait for page load to initialize.\r\n if (!options.lazyload) {\r\n init();\r\n }\r\n }\r\n\r\n element[stringOverflow] = self;\r\n}\r\n","import {\r\n getElementsByClassName,\r\n globalObject,\r\n supportTransitions,\r\n HTML,\r\n DOC,\r\n getTransitionDurationFromElement,\r\n prefix,\r\n uicoreCustomEvent,\r\n isIE,\r\n ieMosaicPolyfill,\r\n each,\r\n validateNum,\r\n getClosest,\r\n jsonOptionsInit,\r\n swipeInit,\r\n direction,\r\n getFocusableElements,\r\n} from \"./utilities.js\";\r\nimport Overflow from \"./overflow.js\";\r\n\r\nexport function Carousel(element, options) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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\r\n ? validateNum(element.dataset.interval, 5000)\r\n : validateNum(options.interval, 5000);\r\n options.pause = element.dataset.pause\r\n ? element.dataset.pause === \"hover\"\r\n ? element.dataset.pause\r\n : false\r\n : options.pause === \"hover\"\r\n ? options.pause\r\n : false;\r\n options.keyboard = element.dataset.keyboard\r\n ? element.dataset.keyboard === \"true\"\r\n ? true\r\n : false\r\n : options.keyboard === \"true\"\r\n ? true\r\n : 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(element, prefix + \"carousel-control-prev\")[0],\r\n rightArrow = getElementsByClassName(element, prefix + \"carousel-control-next\")[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 indicators = svgIndicators[\"length\"] > 0 ? svgIndicators : btnIndicators,\r\n isFocused = false,\r\n politeElement = null;\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 activeClassTarget = e.target.parentNode;\r\n var dataSlideAttr;\r\n if (svgIndicator) {\r\n dataSlideAttr = e.target.parentNode[\"getAttribute\"](dataSlideTo);\r\n } else {\r\n dataSlideAttr = e.target[\"getAttribute\"](dataSlideTo);\r\n }\r\n\r\n if (activeClassTarget && !activeClassTarget.classList[\"contains\"](prefix + \"active\") && dataSlideAttr) {\r\n index = parseInt(dataSlideAttr, 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:\r\n index++;\r\n break;\r\n case 37:\r\n index--;\r\n break;\r\n default:\r\n 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 buildIndicatorButtons = function () {\r\n if (svgIndicator) {\r\n each(indicators, function (indicator, indicatorIndex) {\r\n var spanSlide = document.createElement(\"span\");\r\n spanSlide.classList.add(\"dds__sr-only\");\r\n spanSlide.innerText = \"Slide \" + (indicatorIndex + 1);\r\n\r\n var spanCurrent = document.createElement(\"span\");\r\n spanCurrent.classList.add(prefix + \"carousel-indicator-current\");\r\n spanCurrent.classList.add(\"dds__sr-only\");\r\n\r\n var indicatorButton = document.createElement(\"button\");\r\n indicatorButton.appendChild(spanSlide);\r\n indicatorButton.appendChild(spanCurrent);\r\n indicator.appendChild(indicatorButton);\r\n });\r\n } else {\r\n each(indicators, function (indicator) {\r\n var spanCurrent = document.createElement(\"span\");\r\n spanCurrent.classList.add(prefix + \"carousel-indicator-current\");\r\n spanCurrent.classList.add(\"dds__sr-only\");\r\n indicator.appendChild(spanCurrent);\r\n });\r\n }\r\n },\r\n updateIndicatorButtonCurrent = function (slideIndex) {\r\n each(indicators, function (indicator, indicatorIndex) {\r\n var spanCurrent = indicator.getElementsByClassName(prefix + \"carousel-indicator-current\")[0];\r\n\r\n spanCurrent.innerHTML = \"\";\r\n\r\n if (slideIndex === indicatorIndex) {\r\n spanCurrent.innerHTML = \"Current item\";\r\n }\r\n });\r\n },\r\n buildPolite = function () {\r\n politeElement = document.createElement(\"div\");\r\n politeElement.setAttribute(\"aria-atomic\", true);\r\n politeElement.classList.add(\"dds__sr-only\");\r\n element.appendChild(politeElement);\r\n },\r\n updatePolite = function (slideIndex) {\r\n politeElement.innerText = slideIndex + 1 + \" of \" + total + \" slides\";\r\n },\r\n togglePolite = function (activePolite) {\r\n if (activePolite) {\r\n politeElement.setAttribute(\"aria-live\", \"polite\");\r\n } else {\r\n politeElement.removeAttribute(\"aria-live\");\r\n }\r\n },\r\n handleFocusIn = function (e) {\r\n if (!element.contains(e.relatedTarget)) {\r\n isFocused = true;\r\n togglePolite(true);\r\n }\r\n },\r\n handleFocusOut = function (e) {\r\n if (!element.contains(e.relatedTarget)) {\r\n isFocused = false;\r\n togglePolite(false);\r\n }\r\n },\r\n setNextFocusableAfterSlide = function (nextSlide) {\r\n // Need to keep the carousel focused when the slide changes for aria-live work properly\r\n // If the content has some focusable element, when the slide happens, the slide and focused itens are turned into display none\r\n // This would trigger a focusout, so to avoid that the bellow code was implemented\r\n var indicator = svgIndicator || btnIndicator;\r\n\r\n if (isFocused && !indicator.contains(document.activeElement)) {\r\n var nextFocusableElements = getFocusableElements(nextSlide);\r\n nextFocusableElements && nextFocusableElements[0] && nextFocusableElements[0].focus();\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\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 updatePolite(next);\r\n updateIndicatorButtonCurrent(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 setNextFocusableAfterSlide(slides[next]);\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, {\r\n direction: slideDirection,\r\n \"slide-to\": next,\r\n });\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 } else {\r\n setNextFocusableAfterSlide(slides[next]);\r\n\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\r\n this.getActiveIndex = function () {\r\n return (\r\n slides[\"indexOf\"](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 if (element.classList.contains(prefix + \"mosaic\")) {\r\n options.mosaic = true;\r\n }\r\n\r\n buildPolite();\r\n updatePolite(index);\r\n buildIndicatorButtons();\r\n updateIndicatorButtonCurrent(index);\r\n\r\n element.addEventListener(\"focusin\", handleFocusIn);\r\n element.addEventListener(\"focusout\", handleFocusOut);\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 indicator.querySelector(\"button\").addEventListener(\"click\", indicatorHandler, false);\r\n });\r\n } else {\r\n each(indicators, function (indicator) {\r\n each(indicator.children, function (childIndicator) {\r\n if (childIndicator.tagName === \"BUTTON\") childIndicator.addEventListener(\"click\", indicatorHandler);\r\n });\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 =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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\r\n ? overflow.detail.right + 1\r\n : overflow.detail.totalItems,\r\n leftNumber = overflow.detail.hasLeftControl ? overflow.detail.left + 1 : 1;\r\n itemsView.innerHTML =\r\n \"Viewing \" +\r\n leftNumber +\r\n (leftNumber < rightNumber ? \" - \" + rightNumber : \"\") +\r\n \" of \" +\r\n overflow.detail.totalItems +\r\n \" 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 } else {\r\n uicoreCustomEvent(\"FilmstripCarousel\", \"LazyLoadEvent\", element, {\r\n success: false,\r\n msg: \"Carousel cannot be lazy loaded. Check usage or avoid mulitple lazy loads.\",\r\n });\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\r\n each(element.querySelector(\"ul\").querySelectorAll(\"li button\"), function (el) {\r\n if (el.classList.contains(prefix + \"active\")) activeElement = el;\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 element[stringFilmstrip] = self;\r\n}\r\n","import { uicoreCustomEvent, prefix, emulateTransitionEnd, getClosest, DOC, jsonOptionsInit } from \"./utilities.js\";\r\n\r\nexport default function Collapse(element, options) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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.target = element.dataset.target\r\n ? element.dataset.target\r\n : options.target\r\n ? options.target\r\n : element.href && element.getAttribute(\"href\")\r\n ? element.getAttribute(\"href\")\r\n : false;\r\n options.parent = element.dataset.parent ? element.dataset.parent : options.parent ? options.parent : false;\r\n\r\n // validate options\r\n (function () {\r\n if (!options.target || !(options.target.charAt(0) === \"#\")) {\r\n throw new Error(\"There was a problem found with target value, please correct and try again\");\r\n }\r\n })();\r\n\r\n // event targets and constants\r\n var self = this,\r\n accordion = null,\r\n stringCollapse = \"Collapse\",\r\n collapse = null,\r\n activeCollapse,\r\n activeElement,\r\n showAllBtn,\r\n hideAllBtn,\r\n isClickable = true,\r\n // private methods\r\n openAction = function (collapseElement, toggle) {\r\n uicoreCustomEvent(\"ShowHide\", \"ShowEvent\", collapseElement);\r\n collapseElement.isAnimating = true;\r\n collapseElement.classList.add(prefix + \"collapsing\");\r\n collapseElement.classList.remove(prefix + \"collapse\");\r\n collapseElement.style.height = collapseElement.scrollHeight + \"px\";\r\n collapseElement.children[0].focus();\r\n toggle.setAttribute(\"aria-expanded\", \"true\");\r\n\r\n emulateTransitionEnd(collapseElement, function () {\r\n if (!toggle.classList.contains(prefix + \"collapsed\")) {\r\n collapseElement.isAnimating = false;\r\n collapseElement.setAttribute(\"aria-expanded\", \"true\");\r\n collapseElement.classList.remove(prefix + \"collapsing\");\r\n collapseElement.classList.add(prefix + \"collapse\");\r\n collapseElement.classList.add(prefix + \"show\");\r\n collapseElement.style.height = \"\";\r\n uicoreCustomEvent(\"ShowHide\", \"Shown\", collapseElement);\r\n }\r\n });\r\n },\r\n closeAction = function (collapseElement, toggle) {\r\n uicoreCustomEvent(\"ShowHide\", \"HideEvent\", collapseElement);\r\n collapseElement.isAnimating = true;\r\n collapseElement.style.height = collapseElement.scrollHeight + \"px\"; // set height first\r\n collapseElement.classList.remove(prefix + \"collapse\");\r\n collapseElement.classList.remove(prefix + \"show\");\r\n collapseElement.classList.add(prefix + \"collapsing\");\r\n collapseElement.offsetWidth; // force reflow to enable transition\r\n collapseElement.style.height = \"0rem\";\r\n toggle.setAttribute(\"aria-expanded\", \"false\");\r\n\r\n emulateTransitionEnd(collapseElement, function () {\r\n collapseElement.isAnimating = false;\r\n collapseElement.setAttribute(\"aria-expanded\", \"false\");\r\n collapseElement.classList.remove(prefix + \"collapsing\");\r\n collapseElement.classList.add(prefix + \"collapse\");\r\n collapseElement.style.height = \"\";\r\n uicoreCustomEvent(\"ShowHide\", \"Hidden\", collapseElement);\r\n });\r\n },\r\n showAll = function () {\r\n // this function will be called by all the sub accordions individually\r\n // thus, achieve the goal to show all\r\n if (element.classList.contains(prefix + \"collapsed\")) {\r\n self.show();\r\n }\r\n },\r\n hideAll = function () {\r\n if (!element.classList.contains(prefix + \"collapsed\")) {\r\n self.hide();\r\n }\r\n },\r\n handleBeginShow = function () {\r\n isClickable = false;\r\n },\r\n handleEndShow = function () {\r\n isClickable = true;\r\n };\r\n\r\n // public methods\r\n this.toggle = function (e) {\r\n if (!isClickable) {\r\n return;\r\n }\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n if (!collapse.classList.contains(prefix + \"show\")) {\r\n self.show();\r\n } else {\r\n self.hide();\r\n }\r\n };\r\n this.hide = function () {\r\n if (collapse.isAnimating) return;\r\n closeAction(collapse, element);\r\n element.classList.add(prefix + \"collapsed\");\r\n };\r\n this.show = function () {\r\n if (accordion && options.parent) {\r\n activeCollapse =\r\n accordion.querySelector(\".\" + prefix + \"collapse\" + \".\" + prefix + \"show\") ||\r\n accordion.querySelector(\".\" + prefix + \"collapsing\");\r\n activeElement =\r\n activeCollapse &&\r\n (accordion.querySelector(\r\n \"[data-toggle='\" + prefix + \"collapse\" + \"'][data-target='#\" + activeCollapse.id + \"']\"\r\n ) ||\r\n accordion.querySelector(\r\n \"[data-toggle='\" + prefix + \"collapse\" + \"'][href='#\" + activeCollapse.id + \"']\"\r\n ));\r\n }\r\n\r\n if (!collapse.isAnimating || (activeCollapse && !activeCollapse.isAnimating)) {\r\n if (activeElement && activeCollapse !== collapse) {\r\n closeAction(activeCollapse, activeElement);\r\n activeElement.classList.add(prefix + \"collapsed\");\r\n }\r\n openAction(collapse, element);\r\n element.classList.remove(prefix + \"collapsed\");\r\n }\r\n };\r\n\r\n // init\r\n if (!(stringCollapse in element)) {\r\n element.addEventListener(\"click\", self.toggle, false);\r\n\r\n collapse = DOC.getElementById(options.target.substr(1));\r\n if (collapse) {\r\n collapse.isAnimating = false; //// when true it will prevent click handlers\r\n }\r\n accordion =\r\n (options.parent && getClosest(element, options.parent)) || getClosest(element, \".\" + prefix + \"accordion\");\r\n\r\n if (accordion) {\r\n var showHideAll = accordion.querySelector(\".dds__show-hide-container\");\r\n if (showHideAll) {\r\n showAllBtn = showHideAll.querySelector(\".dds__show-all\");\r\n if (showAllBtn) {\r\n showAllBtn.addEventListener(\"click\", showAll, false);\r\n }\r\n hideAllBtn = showHideAll.querySelector(\".dds__hide-all\");\r\n if (hideAllBtn) {\r\n hideAllBtn.addEventListener(\"click\", hideAll, false);\r\n }\r\n }\r\n }\r\n document.addEventListener(\"uicShowHideShowEvent\", handleBeginShow);\r\n document.addEventListener(\"uicShowHideShown\", handleEndShow);\r\n }\r\n\r\n element[stringCollapse] = self;\r\n}\r\n","import { prefix, uicoreCustomEvent, jsonOptionsInit } from \"./utilities.js\";\r\n\r\nexport default function ContactDrawer(element, options) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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.openTime = options.openTime ? options.openTime : 5000; // milliseconds\r\n options.closedTime = options.closedTime ? options.closedTime : 7000; // milliseconds\r\n options.transitionTime = options.transitionTime ? options.transitionTime : 500; // milliseconds\r\n\r\n // bind, elements\r\n var self = this,\r\n stringContactDrawer = \"ContactDrawer\",\r\n tab = element.querySelector(\".\" + prefix + \"drawer-tab\"),\r\n closeButton = element.querySelector(\".\" + prefix + \"close-x\"),\r\n content = element.querySelector(\".\" + prefix + \"drawer-content\"),\r\n visible = true,\r\n cancelAutomation = false;\r\n\r\n // handlers\r\n var clickHandler = function (e) {\r\n e.preventDefault();\r\n if (!cancelAutomation) {\r\n cancelAutomation = true;\r\n }\r\n toggleAction();\r\n };\r\n\r\n // private methods\r\n var openAction = function () {\r\n visible = true;\r\n element.classList.add(prefix + \"drawer-open\");\r\n uicoreCustomEvent(\"ContactDrawer\", \"OpenEvent\", element);\r\n content.hidden = false;\r\n content.setAttribute(\"aria-hidden\", false);\r\n },\r\n closeAction = function () {\r\n visible = false;\r\n element.classList.remove(prefix + \"drawer-open\");\r\n uicoreCustomEvent(\"ContactDrawer\", \"CloseEvent\", element);\r\n setTimeout(function () {\r\n content.hidden = true;\r\n }, options.transitionTime);\r\n content.setAttribute(\"aria-hidden\", true);\r\n },\r\n toggleAction = function () {\r\n if (visible) {\r\n closeAction();\r\n } else {\r\n openAction();\r\n }\r\n },\r\n setDrawerToggleOptions = function () {\r\n var toggleOptionsStr = content.dataset.contactDrawer;\r\n if (toggleOptionsStr) {\r\n var toggleOptions = JSON.parse(toggleOptionsStr);\r\n\r\n if (toggleOptions) {\r\n if (toggleOptions.OpenTimeInSeconds) options.openTime = toggleOptions.OpenTimeInSeconds * 1000;\r\n if (toggleOptions.CloseTimeInSeconds) options.closedTime = toggleOptions.CloseTimeInSeconds * 1000;\r\n if (toggleOptions.TransitionTimeInMilliseconds)\r\n options.transitionTime = toggleOptions.TransitionTimeInMilliseconds;\r\n }\r\n }\r\n },\r\n setTransitionTime = function () {\r\n if (options.transitionTime > options.openTime || options.transitionTime > options.closedTime) {\r\n //console.warn(\"contact drawer transition time is too large\");\r\n return;\r\n }\r\n\r\n if (element) {\r\n element.style.transition = \"all \" + options.transitionTime + \"ms ease\";\r\n }\r\n };\r\n\r\n // public methods\r\n this.timerAction = function () {\r\n if (!cancelAutomation) {\r\n if (visible) {\r\n closeAction();\r\n if (options.closedTime) {\r\n setTimeout(function () {\r\n return self.timerAction();\r\n }, options.closedTime);\r\n }\r\n } else {\r\n openAction();\r\n if (options.openTime) {\r\n setTimeout(function () {\r\n return self.timerAction();\r\n }, options.openTime);\r\n }\r\n }\r\n }\r\n };\r\n\r\n // init\r\n if (!(stringContactDrawer in element)) {\r\n tab.addEventListener(\"click\", clickHandler, false);\r\n closeButton.addEventListener(\"click\", clickHandler, false);\r\n\r\n setDrawerToggleOptions();\r\n setTransitionTime();\r\n }\r\n\r\n if (!cancelAutomation) {\r\n self.timerAction();\r\n }\r\n element[stringContactDrawer] = self;\r\n}\r\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 =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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 (\r\n (anchor && anchor.tagName === \"A\" && anchor.href && anchor.href.slice(-1) === \"#\") ||\r\n (anchor &&\r\n anchor.parentNode &&\r\n anchor.parentNode.tagName === \"A\" &&\r\n anchor.parentNode.href &&\r\n anchor.parentNode.href.slice(-1) === \"#\")\r\n ) {\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)) && (options.persist || hasData)) {\r\n return;\r\n } else {\r\n relatedTarget = eventTarget === element || element.contains(eventTarget) ? element : 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 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, {\r\n filters: filters,\r\n filter: e.target.name,\r\n filterInput: e.target,\r\n });\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, {\r\n filters: filters,\r\n filter: e.target.name,\r\n filterInput: e.target,\r\n });\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 } else if (\r\n e.target.tagName == \"BUTTON\" ||\r\n e.target.parentElement.tagName == \"BUTTON\" ||\r\n e.target.parentElement.parentElement.tagName == \"BUTTON\"\r\n ) {\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)) {\r\n //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))) {\r\n //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 // 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 (\r\n dropdownEl.children.length &&\r\n dropdownEl.children[0].tagName === \"LI\" &&\r\n !dropdownEl.children[0].firstElementChild.classList.contains(prefix + \"disabled\")\r\n ) {\r\n menuItems.push(dropdownEl.children[0]);\r\n } else if (\r\n dropdownEl.tagName === \"LI\" &&\r\n !dropdownEl.firstElementChild.classList.contains(prefix + \"disabled\")\r\n ) {\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 {\r\n DOC,\r\n emulateTransitionEnd,\r\n getFocusableElements,\r\n getFullScreenOverlay,\r\n getTransitionDurationFromElement,\r\n prefix,\r\n supportTransitions,\r\n uicoreCustomEvent,\r\n isSafari,\r\n isIOS,\r\n each,\r\n setFocus,\r\n jsonOptionsInit,\r\n getClosest,\r\n} from \"./utilities.js\";\r\n\r\nexport default function Modal(element, options) {\r\n // element can be the modal/triggering button\r\n\r\n // the modal (both JavaScript / DATA API init) / triggering button element (DATA API)\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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.static = options.backdrop === \"static\" ? true : false;\r\n options.target = element.dataset.target\r\n ? DOC.getElementById(element.dataset[\"target\"].substr(1))\r\n : options.target\r\n ? DOC.getElementById(options.target.substr(1))\r\n : null;\r\n // validate options\r\n (function () {\r\n if (options.target == null || options.target === \"\") {\r\n throw new Error(\"There was a problem found with target value, please correct and try again\");\r\n }\r\n });\r\n // determine modal, triggering element\r\n var self = this,\r\n stringModal = \"Modal\",\r\n focusableEls,\r\n header,\r\n origRightPadding,\r\n scrollbarWidth,\r\n modalElement = options.target,\r\n overlayDelay,\r\n overlay = getFullScreenOverlay(),\r\n // private methods\r\n setFocusableElements = function () {\r\n focusableEls = getFocusableElements(modalElement);\r\n modalElement.firstFocusableEl = focusableEls[0];\r\n modalElement.lastFocusableEl = focusableEls[focusableEls.length - 1];\r\n },\r\n focusFirstDescendant = function () {\r\n if (modalElement.loading) {\r\n //if loading indicator modal- trap focus so can't tab out\r\n modalElement.focus();\r\n } else {\r\n setFocusableElements();\r\n if (focusableEls.length > 0) {\r\n //if there is something to focus\r\n setFocus(focusableEls[0]);\r\n }\r\n }\r\n },\r\n handleKeyDown = function (e) {\r\n if (!modalElement.loading) {\r\n setFocusableElements();\r\n\r\n var KEY_TAB = 9;\r\n var KEY_ESC = 27;\r\n\r\n // For loading modal which has no focusable elements\r\n if (focusableEls.length == 0) {\r\n e.preventDefault();\r\n }\r\n\r\n switch (e.keyCode) {\r\n case KEY_TAB:\r\n if (focusableEls.length === 1) {\r\n e.preventDefault();\r\n break;\r\n }\r\n if (e.shiftKey) {\r\n handleBackwardTab(e);\r\n } else {\r\n handleForwardTab(e);\r\n }\r\n break;\r\n case KEY_ESC:\r\n self.hide();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n },\r\n handleBackwardTab = function (e) {\r\n if (document.activeElement === modalElement.firstFocusableEl) {\r\n e.preventDefault();\r\n setFocus(modalElement.lastFocusableEl);\r\n }\r\n if (header) focusVisibilityHandler();\r\n },\r\n handleForwardTab = function (e) {\r\n if (header) focusVisibilityHandler();\r\n\r\n if (document.activeElement === modalElement.lastFocusableEl) {\r\n e.preventDefault();\r\n setFocus(modalElement.firstFocusableEl);\r\n }\r\n },\r\n createOverlay = function () {\r\n if (overlay && !overlay.classList.contains(prefix + \"show\")) {\r\n overlayDelay = getTransitionDurationFromElement(overlay);\r\n overlay.classList.add(prefix + \"show\");\r\n overlay.removeAttribute(\"hidden\");\r\n if (overlay.style.visibility == \"hidden\") {\r\n overlay.style.visibility = \"\";\r\n }\r\n } else {\r\n console.warn(\r\n \"MODAL: Overlay requested. Corresponding HTML missing. Please apply id 'dds__full-screen-overlay' and class 'dds__overlay' to an empty div\"\r\n );\r\n }\r\n\r\n if (!options.static) {\r\n window.addEventListener(\r\n \"click\",\r\n function (e) {\r\n if (\r\n modalElement.classList.contains(prefix + \"show\") &&\r\n e.target != modalElement &&\r\n !modalElement.contains(e.target)\r\n ) {\r\n self.hide();\r\n }\r\n },\r\n false\r\n );\r\n }\r\n DOC.body.style.paddingRight = scrollbarWidth + origRightPadding + \"px\";\r\n DOC.body.style.overflow = \"hidden\";\r\n },\r\n removeOverlay = function () {\r\n if (overlay) {\r\n overlay.classList.remove(prefix + \"show\");\r\n overlay.setAttribute(\"hidden\", \"\");\r\n }\r\n\r\n if (!options.static) {\r\n modalElement.removeEventListener(\r\n \"click\",\r\n function (e) {\r\n if (e.target == modalElement) {\r\n self.hide();\r\n }\r\n },\r\n false\r\n );\r\n }\r\n if (origRightPadding == 0) {\r\n DOC.body.style.paddingRight = \"\";\r\n } else {\r\n DOC.body.style.paddingRight = origRightPadding + \"px\";\r\n }\r\n DOC.body.style.overflow = \"\";\r\n if (DOC.body.style.length == 0) {\r\n DOC.body.removeAttribute(\"style\");\r\n }\r\n uicoreCustomEvent(\"Modal\", \"Hidden\", modalElement);\r\n },\r\n keydownHandlerToggle = function () {\r\n if (modalElement.classList.contains(prefix + \"show\")) {\r\n DOC.addEventListener(\"keydown\", keyHandler, false);\r\n } else {\r\n DOC.removeEventListener(\"keydown\", keyHandler, false);\r\n }\r\n },\r\n triggerShow = function () {\r\n //resizeHandlerToggle();\r\n keydownHandlerToggle();\r\n setFocus(modalElement);\r\n focusFirstDescendant();\r\n uicoreCustomEvent(\"Modal\", \"Shown\", modalElement);\r\n },\r\n triggerHide = function () {\r\n setTimeout(function () {\r\n modalElement.style.display = \"\";\r\n }, getTransitionDurationFromElement(modalElement));\r\n //check if parent is dropdown, and set focus on appropriate element\r\n var isInDropdown = getClosest(element, \".\" + prefix + \"btn-dropdown\", true);\r\n var isInSplitBtn = isInDropdown && isInDropdown.classList.contains(prefix + \"btn-group\");\r\n element &&\r\n (isInDropdown\r\n ? isInSplitBtn\r\n ? setFocus(isInDropdown.querySelector(\".\" + prefix + \"btn-split-arrow\"))\r\n : setFocus(isInDropdown.querySelector(\".\" + prefix + \"btn\"))\r\n : setFocus(element));\r\n\r\n if (modalElement.classList.contains(prefix + \"show\")) {\r\n keydownHandlerToggle();\r\n }\r\n },\r\n // handlers\r\n clickHandler = function (e) {\r\n if (\r\n (e.target === element || e.target.parentElement === element) &&\r\n !modalElement.classList.contains(prefix + \"show\")\r\n ) {\r\n self.show();\r\n e.preventDefault();\r\n }\r\n },\r\n keyHandler = function (e) {\r\n if (self.keyboard && e.which == 27 && modalElement.classList.contains(prefix + \"show\")) {\r\n self.hide();\r\n }\r\n },\r\n dismissHandler = function (e) {\r\n if (modalElement.classList.contains(prefix + \"show\")) {\r\n self.hide();\r\n e.preventDefault();\r\n }\r\n },\r\n focusVisibilityHandler = function () {\r\n // minimum distance from \"to be focused\" element to the bottom of fixed header\r\n var minDistance = header.parentElement.clientHeight;\r\n var activeElementIdx = focusableEls.indexOf(document.activeElement);\r\n\r\n // handles shift tab loop, and get next element to receive focus - going back\r\n var prevFocusableEl =\r\n activeElementIdx === 0 ? focusableEls[focusableEls.length - 1] : focusableEls[activeElementIdx - 1];\r\n\r\n // handles tab loop, and get next element to receive focus - going forward\r\n var nextFocusableEl =\r\n activeElementIdx === focusableEls.length - 1 ? focusableEls[0] : focusableEls[activeElementIdx + 1];\r\n\r\n if (event.shiftKey && event.keyCode === 9) {\r\n scrollToElement(prevFocusableEl, minDistance, header);\r\n } else if (!event.shiftKey && event.keyCode === 9) {\r\n scrollToElement(nextFocusableEl, minDistance, header);\r\n }\r\n },\r\n scrollToElement = function (element, minDistance, header) {\r\n if (\r\n !header.contains(element) && // prevents scroll if header will receive focus\r\n element.getBoundingClientRect().top < minDistance\r\n ) {\r\n // element is behind fixed header\r\n\r\n // scroll to top of \"to be focused\" element\r\n modalElement.scrollTop = element.getBoundingClientRect().top - minDistance * 2 + modalElement.scrollTop;\r\n }\r\n };\r\n\r\n // public methods\r\n this.toggle = function () {\r\n if (modalElement.classList.contains(prefix + \"show\")) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n };\r\n this.show = function () {\r\n uicoreCustomEvent(\"Modal\", \"ShowEvent\", modalElement);\r\n\r\n createOverlay();\r\n\r\n modalElement.style.display = \"block\";\r\n\r\n if (isSafari && isIOS) {\r\n modalElement.classList.add(prefix + \"is-safari\");\r\n }\r\n\r\n setTimeout(function () {\r\n modalElement.classList.add(prefix + \"show\");\r\n }, 5);\r\n modalElement.setAttribute(\"aria-hidden\", false);\r\n modalElement.classList.contains(prefix + \"fade\")\r\n ? emulateTransitionEnd(modalElement, triggerShow)\r\n : triggerShow();\r\n\r\n supportTransitions && modalElement.loading ? overlayDelay : 0;\r\n };\r\n this.hide = function () {\r\n uicoreCustomEvent(\"Modal\", \"HideEvent\", modalElement);\r\n\r\n modalElement.classList.remove(prefix + \"show\");\r\n modalElement.setAttribute(\"aria-hidden\", true);\r\n\r\n if (isSafari && isIOS && modalElement.classList.contains(prefix + \"is-safari\")) {\r\n modalElement.classList.remove(prefix + \"is-safari\");\r\n }\r\n\r\n setTimeout(function () {\r\n removeOverlay();\r\n }, getTransitionDurationFromElement(modalElement));\r\n\r\n modalElement.classList.contains(prefix + \"fade\")\r\n ? emulateTransitionEnd(modalElement, triggerHide)\r\n : triggerHide();\r\n supportTransitions && overlay ? overlayDelay : 0;\r\n };\r\n\r\n //init\r\n if (!(stringModal in element)) {\r\n if (!modalElement) {\r\n return false;\r\n } else {\r\n origRightPadding = DOC.body.style.paddingRight ? DOC.body.style.paddingRight.split(\"px\")[0] : 0;\r\n scrollbarWidth = window.innerWidth - DOC.documentElement.clientWidth;\r\n modalElement.loading = modalElement.classList.contains(prefix + \"loading-modal\") ? true : false;\r\n\r\n if (!modalElement.loading) {\r\n element.addEventListener(\"click\", clickHandler, false);\r\n modalElement.addEventListener(\"keydown\", handleKeyDown);\r\n each(modalElement.querySelectorAll(\"[data-dismiss='\" + prefix + \"modal']\"), function (dissmissEl) {\r\n dissmissEl.addEventListener(\"click\", dismissHandler, false);\r\n });\r\n var modalContent = modalElement.querySelector(\".\" + prefix + \"modal-content\");\r\n var potentialHeader = modalContent.firstElementChild;\r\n if (\r\n potentialHeader.classList.contains(prefix + \"container-fluid\") &&\r\n !potentialHeader.classList.contains(prefix + \"modal-body\")\r\n ) {\r\n potentialHeader.firstElementChild.classList.add(prefix + \"offcanvas-modal-topbar\");\r\n }\r\n header = modalElement.querySelector(\".\" + prefix + \"offcanvas-modal-topbar\");\r\n }\r\n }\r\n }\r\n\r\n element[stringModal] = self;\r\n}\r\n","import {\r\n uicoreCustomEvent,\r\n prefix,\r\n debounce,\r\n createElement,\r\n getClosest,\r\n classAdd,\r\n getFocusableElements,\r\n getAnimationDurationFromElement,\r\n altFind,\r\n renderSvg,\r\n each,\r\n setFocus,\r\n ariaAnnounce,\r\n} from \"./utilities\";\r\nimport Collapse from \"./collapse.js\";\r\nimport Dropdown from \"./dropdown.js\";\r\nimport Modal from \"./modal.js\";\r\n\r\nexport function FilterKeyword(element) {\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n // bind, target alert, duration and stuff\r\n var self = this,\r\n stringFilterKeyword = \"FilterKeyword\",\r\n addButton,\r\n filterInput,\r\n filterCntr,\r\n // handlers\r\n handleClickEvent = function (e) {\r\n if ((e.target == addButton || addButton.contains(e.target)) && filterInput.value.trim() != \"\") {\r\n uicoreCustomEvent(\"FilterKeyword\", \"CreateEvent\", element, { filter: filterInput.value });\r\n filterInput.value = \"\";\r\n filterInput.focus();\r\n window.removeEventListener(\"click\", clickOutHandler, true);\r\n }\r\n },\r\n handleKeyEvent = debounce(function (e) {\r\n window.addEventListener(\"click\", clickOutHandler, true);\r\n if (e.keyCode == 13) {\r\n uicoreCustomEvent(\"FilterKeyword\", \"CreateEvent\", element, { filter: filterInput.value });\r\n filterInput.value = \"\";\r\n filterInput.focus();\r\n }\r\n }, 50),\r\n clickOutHandler = function (e) {\r\n if (filterCntr.contains(e.target)) {\r\n return;\r\n }\r\n filterInput.value = \"\";\r\n window.removeEventListener(\"click\", clickOutHandler, true);\r\n };\r\n\r\n // init\r\n if (!(stringFilterKeyword in element)) {\r\n addButton = element.querySelector(\".\" + prefix + \"filter-btn\");\r\n filterInput = element.querySelector(\".\" + prefix + \"filter-input\");\r\n filterCntr = element.querySelector(\".\" + prefix + \"filter-container\");\r\n\r\n addButton.addEventListener(\"click\", handleClickEvent, true);\r\n filterInput.addEventListener(\"keydown\", handleKeyEvent, false);\r\n }\r\n\r\n element[stringFilterKeyword] = self;\r\n}\r\n\r\nexport function FilterCollection(element) {\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n var horizontal = true;\r\n\r\n // bind, target alert, duration and stuff\r\n var self = this,\r\n stringFilterCollection = \"FilterCollection\",\r\n filterResults,\r\n filterOffCanvasResults,\r\n clearAllItem,\r\n clearAllOffCanvas,\r\n resultsLabelDesktop,\r\n filters = [],\r\n filtersTemp = [],\r\n filterOffCanvas,\r\n keywordFilter,\r\n visibileIdx,\r\n mediaIncrementforDropdowns,\r\n showMoreDiv,\r\n mobileModal,\r\n dropdownObjects = [],\r\n accordionObjects = [],\r\n digit = \"digit\",\r\n collectionInputsContainer,\r\n dropdowns,\r\n collectionInputs,\r\n targetCollection,\r\n filterCollection,\r\n isOffCanvasState = false,\r\n isApplyingState = false,\r\n smallWindow,\r\n smallMediaSize = window.matchMedia(\"(max-width: 767.98px)\"),\r\n mediumMediaSize = window.matchMedia(\"(max-width: 991.98px)\"),\r\n // handlers\r\n handleAddEvent = function (e) {\r\n if (e.type === \"uicDropdownAddEvent\" || e.type === \"uicFilterKeywordCreateEvent\") {\r\n if (!isOffCanvasState) {\r\n createDesktopFilterItem(e.detail.filter, e.detail.filterInput);\r\n } else {\r\n createOffCanvasFilterItem(e.detail.filter, e.detail.filterInput);\r\n }\r\n } else {\r\n var checkbox = e.srcElement;\r\n if (checkbox.tagName != \"INPUT\") {\r\n if (checkbox.tagName === \"SPAN\" && checkbox.previousElementSibling.tagName === \"INPUT\") {\r\n checkbox = checkbox.previousElementSibling;\r\n } else {\r\n checkbox = checkbox.querySelector(\"input\");\r\n }\r\n }\r\n createDesktopFilterItem(checkbox.nextElementSibling.innerText, checkbox);\r\n if (\r\n (!horizontal && element.getBoundingClientRect().y && element.getBoundingClientRect().y < 0) ||\r\n (element.getBoundingClientRect().top && element.getBoundingClientRect().top < 0)\r\n ) {\r\n //Edge FF use top, not y\r\n element.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }\r\n },\r\n handleClearAllEvent = function (e) {\r\n if (\r\n e.target == clearAllOffCanvas ||\r\n clearAllOffCanvas.contains(e.target) ||\r\n e.target === clearAllItem ||\r\n clearAllItem.contains(e.target)\r\n ) {\r\n toggleClearAllButtons(false);\r\n ariaAnnounce(\r\n document.querySelector(\".\" + prefix + \"filter-btn-clear\").innerText // will say \"Clear all\"\r\n );\r\n } else {\r\n ariaAnnounce(\r\n getClosest(e.target, \".\" + prefix + \"svg-close-x\", false).getAttribute(\"aria-label\") // will say filter-close\r\n );\r\n }\r\n each(filterResults.querySelectorAll(\"button.\" + prefix + \"filter-item\"), function (filter) {\r\n clearFilter(filter);\r\n });\r\n resultsLabelDesktop.classList.add(prefix + \"d-none\");\r\n if (horizontal) {\r\n clearMultiSelects();\r\n }\r\n updateFiltersCount();\r\n uicoreCustomEvent(\"FilterCollection\", \"RemoveAllEvent\", element, { filters: filtersAsStrings() });\r\n },\r\n handleDesktopCheckboxClick = function (e) {\r\n if (e.type === \"uicDropdownAddEvent\" || e.type === \"uicDropdownRemoveEvent\") {\r\n if (e.detail.filterInput.checked === true) {\r\n handleAddEvent(e);\r\n } else {\r\n var deselected = filterResults.querySelector(\r\n \"#\" + e.detail.filter.replace(/\\s/g, \"\").toLowerCase()\r\n );\r\n clearFilter(deselected);\r\n if (filters && filters.length === 0) {\r\n toggleClearAllButtons(false);\r\n uicoreCustomEvent(\"FilterCollection\", \"RemoveAllEvent\", element, {\r\n filters: filtersAsStrings(),\r\n });\r\n }\r\n }\r\n } else if (e.type === \"click\") {\r\n e.preventDefault();\r\n var checkbox = e.srcElement;\r\n if (checkbox.tagName != \"INPUT\") {\r\n if (checkbox.tagName === \"SPAN\" && checkbox.previousElementSibling.tagName === \"INPUT\") {\r\n checkbox = checkbox.previousElementSibling;\r\n } else {\r\n checkbox = checkbox.querySelector(\"input\");\r\n }\r\n }\r\n if (!checkbox.hasAttribute(\"disabled\") && !checkbox.classList.contains(prefix + \"disabled\")) {\r\n setTimeout(function () {\r\n if (checkbox.checked) {\r\n checkbox.checked = false;\r\n getClosest(checkbox, \"li\", true).setAttribute(\"aria-checked\", \"false\");\r\n } else {\r\n checkbox.checked = true;\r\n getClosest(checkbox, \"li\", true).setAttribute(\"aria-checked\", \"true\");\r\n }\r\n if (checkbox.checked === true) {\r\n handleAddEvent(e);\r\n } else {\r\n var value = checkbox.name.toLowerCase();\r\n var deselected = filterResults.querySelector('[value=\"' + value + '\"]');\r\n clearFilter(deselected);\r\n if (filters && filters.length === 0) {\r\n toggleClearAllButtons(false);\r\n uicoreCustomEvent(\"FilterCollection\", \"RemoveAllEvent\", element, {\r\n filters: filtersAsStrings(),\r\n });\r\n }\r\n }\r\n }, 25);\r\n }\r\n }\r\n },\r\n handleFilterItemClickEvent = function (e) {\r\n var target = e.target.classList.contains(\".\" + prefix + \"filter-item\")\r\n ? e.target\r\n : getClosest(e.target, \".\" + prefix + \"filter-item\");\r\n if (filters.length && filters.length === 1) {\r\n handleClearAllEvent(e);\r\n resultsLabelDesktop.classList.add(prefix + \"d-none\");\r\n accordionObjects[0] ? setFocus(accordionObjects[0]) : setFocus(collectionInputs[0]);\r\n } else {\r\n ariaAnnounce(\r\n getClosest(e.target, \".\" + prefix + \"svg-close-x\", false).getAttribute(\"aria-label\") // will say filter-close\r\n );\r\n var nextFocusableEl =\r\n target.previousElementSibling &&\r\n target.previousElementSibling.classList.contains(prefix + \"filter-item\")\r\n ? target.previousElementSibling\r\n : target.nextElementSibling &&\r\n target.nextElementSibling.classList.contains(prefix + \"filter-item\")\r\n ? target.nextElementSibling\r\n : accordionObjects\r\n ? accordionObjects[0]\r\n : collectionInputs[0];\r\n setTimeout(function () {\r\n clearFilter(target);\r\n uicoreCustomEvent(\"FilterCollection\", \"RemoveEvent\", element, {\r\n filters: filtersAsStrings(),\r\n removedFilter: target.innerText,\r\n });\r\n setFocus(nextFocusableEl);\r\n }, 50);\r\n }\r\n },\r\n handleOffCanvasApplyEvent = function () {\r\n isApplyingState = true;\r\n isOffCanvasState = false;\r\n\r\n // add label\r\n if (filtersTemp.length > 1) {\r\n resultsLabelDesktop.classList.remove(prefix + \"d-none\");\r\n }\r\n // if temp filter isn't in filters (create)\r\n each(filtersTemp, function (filterTemp) {\r\n if (!arrayOfObjectsContains(filters, filterTemp.value.toLowerCase())) {\r\n var newFilter = filterTemp.cloneNode(true);\r\n newFilter.origin = filterTemp.origin;\r\n newFilter.offCanvasOrigin = filterTemp.offCanvasOrigin;\r\n newFilter.value = filterTemp.value;\r\n newFilter.addEventListener(\"click\", handleFilterItemClickEvent, false);\r\n horizontal\r\n ? filterResults.insertBefore(newFilter, clearAllItem)\r\n : filterResults.appendChild(newFilter);\r\n if (newFilter.origin) {\r\n newFilter.origin.checked = true;\r\n getClosest(newFilter.origin, \"li\", true).setAttribute(\"aria-checked\", \"true\");\r\n }\r\n }\r\n });\r\n\r\n // if filter is no longer in temp filters (delete)\r\n each(filters.slice(), function (temp) {\r\n if (!arrayOfObjectsContains(filtersTemp, temp.value.toLowerCase())) {\r\n var filterToRemove = altFind(filters, function (result) {\r\n return result.value === temp.value;\r\n });\r\n clearFilter(filterToRemove);\r\n }\r\n });\r\n filters = filtersTemp.slice();\r\n\r\n // reset\r\n isApplyingState = false;\r\n\r\n if (filters.length > 0) {\r\n resultsLabelDesktop.classList.remove(prefix + \"d-none\");\r\n toggleClearAllButtons(true);\r\n } else {\r\n resultsLabelDesktop.classList.add(prefix + \"d-none\");\r\n toggleClearAllButtons(false);\r\n }\r\n\r\n // update html filter count values\r\n updateFiltersCount();\r\n if (horizontal) {\r\n each(dropdownObjects, function (dropdown) {\r\n dropdown.recountChecked();\r\n });\r\n } else {\r\n updateVerticalDesktopAccordionCount();\r\n }\r\n\r\n mobileModal.hide();\r\n uicoreCustomEvent(\"FilterCollection\", \"UpdateEvent\", element, { filters: filtersAsStrings() });\r\n },\r\n handleOffCanvasCancelEvent = function () {\r\n //clear off canvas and reset to filters\r\n handleOffCanvasClearAllEvent();\r\n each(filters, function (filter) {\r\n if (filter.offCanvasOrigin) {\r\n filter.offCanvasOrigin.click();\r\n } else {\r\n createOffCanvasFilterItem(filter, filter.origin);\r\n }\r\n });\r\n if (filters.length === 0) {\r\n toggleClearAllButtons(false);\r\n }\r\n\r\n isOffCanvasState = false;\r\n },\r\n handleOffCanvasCheckboxClick = function (e) {\r\n var checkboxId = e.target.id.replace(\"OffCanvas\", \"\");\r\n var desktopCheckbox = document.getElementById(checkboxId);\r\n getClosest(e.target, \"li\", true).setAttribute(\"aria-checked\", e.target.checked);\r\n if (!e.target.hasAttribute(\"disabled\") && !e.target.classList.contains(prefix + \"disabled\")) {\r\n //create new off canvas filter\r\n if (e.target.checked) {\r\n createOffCanvasFilterItem(e.target.name, desktopCheckbox);\r\n toggleClearAllButtons(true);\r\n }\r\n // remove off canvas filter\r\n else {\r\n var checkboxFilter;\r\n var value = e.target.name.toLowerCase();\r\n checkboxFilter = filterOffCanvasResults.querySelector('[value=\"' + value + '\"]');\r\n var currentFilter = altFind(filtersTemp, function (result) {\r\n var check =\r\n result.innerText.toLowerCase().replace(/\\s/g, \"\") ==\r\n checkboxFilter.innerText.toLowerCase().replace(/\\s/g, \"\");\r\n return check;\r\n });\r\n // remove from temp array\r\n var index = filtersTemp.indexOf(currentFilter);\r\n filtersTemp.splice(index, 1);\r\n\r\n if (checkboxFilter) {\r\n setTimeout(function () {\r\n filterOffCanvasResults.removeChild(checkboxFilter);\r\n setTimeout(function () {\r\n //if no more filters turn off Clear All Item\r\n if (self.numOfFilters(true) < 1) {\r\n toggleClearAllButtons(false);\r\n }\r\n }, 10);\r\n }, 1);\r\n }\r\n }\r\n updateOffCanvasAccordionCount(e.target); //horizontal multi-selects don't have updated count at this point\r\n }\r\n },\r\n handleOffCanvasClearAllClick = function () {\r\n var focusableEls = getFocusableElements(filterOffCanvas);\r\n // after hitting \"offcanvas\" clear all button set focus on the previous focusable element\r\n if (focusableEls.indexOf(clearAllOffCanvas) > 0) {\r\n focusableEls[focusableEls.indexOf(clearAllOffCanvas) - 1].focus();\r\n }\r\n handleOffCanvasClearAllEvent();\r\n },\r\n handleOffCanvasClearAllEvent = function () {\r\n each(\r\n element.querySelectorAll(\".\" + prefix + \"modal-offcanvas input.\" + prefix + \"form-check-input\"),\r\n function (checkbox) {\r\n checkbox.checked = false;\r\n getClosest(checkbox, \"li\", true).setAttribute(\"aria-checked\", \"false\");\r\n updateOffCanvasAccordionCount(checkbox);\r\n }\r\n );\r\n each(\r\n element.querySelectorAll(\".\" + prefix + \"modal-offcanvas button.\" + prefix + \"filter-item\"),\r\n function (filter) {\r\n filterOffCanvasResults.removeChild(filter);\r\n }\r\n );\r\n filtersTemp = [];\r\n toggleClearAllButtons(false);\r\n },\r\n handleOffCanvasFilterItemClickEvent = function (e) {\r\n var target = e.target.classList.contains(\".\" + prefix + \"filter-item\")\r\n ? e.target\r\n : getClosest(e.target, \".\" + prefix + \"filter-item\"),\r\n currentFilter = altFind(filtersTemp, function (result) {\r\n return (\r\n result.value.toLowerCase().replace(/\\s+/g, \"\") ===\r\n target.innerText.toLowerCase().replace(/\\s+/g, \"\")\r\n );\r\n });\r\n\r\n // uncheck the corresponding checkbox\r\n if (currentFilter.offCanvasOrigin) {\r\n currentFilter.offCanvasOrigin.checked = false;\r\n getClosest(currentFilter.offCanvasOrigin, \"li\", true).setAttribute(\"aria-checked\", \"false\");\r\n updateOffCanvasAccordionCount(currentFilter.offCanvasOrigin);\r\n }\r\n\r\n // remove from temp array\r\n var index = filtersTemp.indexOf(currentFilter);\r\n filtersTemp.splice(index, 1);\r\n\r\n //set focus on next element if it exists\r\n target.nextElementSibling\r\n ? target.nextElementSibling.focus()\r\n : target.previousElementSibling &&\r\n target.previousElementSibling.classList.contains(prefix + \"filter-item\")\r\n ? target.previousElementSibling.focus()\r\n : setFocus(getFocusableElements(filterOffCanvas)[0]);\r\n // getFocusableElements(filterOffCanvas)[0].focus();\r\n\r\n // remove filter button from DOM\r\n if (filterOffCanvasResults.contains(target)) {\r\n setTimeout(function () {\r\n filterOffCanvasResults.removeChild(target);\r\n setTimeout(function () {\r\n //if no more filters turn off Clear All Item\r\n if (self.numOfFilters(true) < 1) {\r\n toggleClearAllButtons(false);\r\n }\r\n }, 10);\r\n }, 1);\r\n }\r\n },\r\n handleOffCanvasOpen = function () {\r\n isOffCanvasState = true;\r\n filtersTemp = filters.slice();\r\n },\r\n handleResizeSmall = function (e) {\r\n //change vertical clear all button\r\n if (!e.matches) {\r\n //going from small to big\r\n mobileModal.hide();\r\n smallWindow = false;\r\n if (!horizontal) {\r\n if (clearAllItem.classList.contains(\"dds__d-flex\")) {\r\n clearAllItem.classList.remove(\"dds__d-flex\");\r\n clearAllItem.classList.add(\"dds__d-none\");\r\n clearAllItem = element.querySelector(\r\n \".\" + prefix + \"filter-collector-accordion .\" + prefix + \"filter-btn-clear\"\r\n );\r\n clearAllItem.classList.remove(\"dds__d-none\");\r\n clearAllItem.classList.add(\"dds__d-flex\");\r\n } else {\r\n clearAllItem = element.querySelector(\r\n \".\" + prefix + \"filter-collector-accordion .\" + prefix + \"filter-btn-clear\"\r\n );\r\n }\r\n clearAllItem.addEventListener(\"click\", handleClearAllEvent, false);\r\n clearAllItem.addEventListener(\"touchstart\", handleClearAllEvent, false);\r\n }\r\n } else if (e.matches && !horizontal) {\r\n smallWindow = true;\r\n if (clearAllItem.classList.contains(\"dds__d-flex\")) {\r\n clearAllItem.classList.remove(\"dds__d-flex\");\r\n clearAllItem.classList.add(\"dds__d-none\");\r\n clearAllItem = element.querySelector(\".dds__filter-label-results .dds__filter-btn-clear\");\r\n clearAllItem.classList.remove(\"dds__d-none\");\r\n clearAllItem.classList.add(\"dds__d-flex\");\r\n } else {\r\n clearAllItem = element.querySelector(\".dds__filter-label-results .dds__filter-btn-clear\");\r\n }\r\n clearAllItem.addEventListener(\"click\", handleClearAllEvent, false);\r\n clearAllItem.addEventListener(\"touchstart\", handleClearAllEvent, false);\r\n }\r\n updateFiltersCount();\r\n },\r\n handleResizeMedium = function (e) {\r\n var numOfDropdowns, rows;\r\n if (e.matches) {\r\n mediaIncrementforDropdowns = 3;\r\n\r\n rows = Math.max(Math.ceil((visibileIdx + 1) / 4), 2);\r\n numOfDropdowns = rows * 3 - 2;\r\n if (numOfDropdowns < dropdowns.length - 1) {\r\n showMoreDiv.classList.remove(prefix + \"d-none\");\r\n }\r\n visibileIdx = numOfDropdowns - 1;\r\n toggleDropdown(visibileIdx);\r\n } else {\r\n mediaIncrementforDropdowns = 4;\r\n if (visibileIdx === dropdowns.length) {\r\n return;\r\n }\r\n rows = Math.max(Math.ceil((visibileIdx + 1) / 3), 2);\r\n numOfDropdowns = rows * 4 - 2;\r\n if (numOfDropdowns > dropdowns.length - 1) {\r\n numOfDropdowns = dropdowns.length;\r\n showMoreDiv.classList.add(prefix + \"d-none\");\r\n }\r\n visibileIdx = numOfDropdowns - 1;\r\n toggleDropdown(visibileIdx);\r\n }\r\n },\r\n handleShowMore = function () {\r\n visibileIdx = Math.min(visibileIdx + mediaIncrementforDropdowns, dropdowns.length - 1);\r\n if (visibileIdx === dropdowns.length - 1) {\r\n showMoreDiv.classList.add(prefix + \"d-none\");\r\n }\r\n toggleDropdown(visibileIdx);\r\n setTimeout(function () {\r\n setFocus(dropdowns[visibileIdx].querySelector(\".\" + prefix + \"btn-secondary\"));\r\n }, 1);\r\n },\r\n arrayOfObjectsContains = function (arr, value) {\r\n var results = arr.filter(function (obj) {\r\n return obj.value === value;\r\n });\r\n return results.length > 0;\r\n },\r\n clearMultiSelects = function () {\r\n each(collectionInputs, function (input) {\r\n if (input.querySelector(\".\" + prefix + \"checked-presentation\")) {\r\n input.firstElementChild.removeChild(input.querySelector(\".\" + prefix + \"checked-presentation\"));\r\n }\r\n\r\n var typeofInput = input[\"getAttribute\"](\"data-filter\");\r\n if (typeofInput == prefix + \"multi-select\") {\r\n var ul = input[\"getAttribute\"](\"data-target\");\r\n each(element.querySelector(ul).children, function (option) {\r\n option.setAttribute(\"aria-checked\", false);\r\n option.querySelector(\"input\").checked = false;\r\n });\r\n }\r\n });\r\n },\r\n clearFilter = function (filter) {\r\n if (filter === null || filter === undefined) {\r\n return;\r\n }\r\n\r\n // finder filter, if found no match in the filters, return\r\n var targetValue = filter.innerText,\r\n results = filters.filter(function (obj) {\r\n targetValue = targetValue.toLowerCase().replace(/\\n/g, \"\");\r\n return obj.value === targetValue;\r\n });\r\n\r\n if (results.length < 1) {\r\n return;\r\n }\r\n\r\n // if it's a checkbox, uncheck\r\n var deselectTarget = results[0];\r\n if (deselectTarget.origin.tagName === \"INPUT\" && deselectTarget.origin.checked === true) {\r\n deselectTarget.origin.checked = false;\r\n getClosest(deselectTarget.origin, \"li\", true).setAttribute(\"aria-checked\", \"false\");\r\n }\r\n if (\r\n deselectTarget.offCanvasOrigin &&\r\n deselectTarget.offCanvasOrigin.tagName === \"INPUT\" &&\r\n deselectTarget.offCanvasOrigin.checked === true\r\n ) {\r\n deselectTarget.offCanvasOrigin.checked = false;\r\n getClosest(deselectTarget.offCanvasOrigin, \"li\", true).setAttribute(\"aria-checked\", \"false\");\r\n updateOffCanvasAccordionCount(deselectTarget.offCanvasOrigin);\r\n }\r\n if (!horizontal) {\r\n updateVerticalDesktopAccordionCount(deselectTarget.origin);\r\n }\r\n\r\n var value = filter.value.toLowerCase();\r\n var index;\r\n\r\n if (filterResults.contains(filter)) {\r\n var filterOffCanvas;\r\n\r\n filterResults.removeChild(filter);\r\n filterOffCanvas = filterOffCanvasResults.querySelector('[value=\"' + value + '\"]');\r\n if (filterOffCanvasResults.contains(filterOffCanvas)) {\r\n filterOffCanvasResults.removeChild(filterOffCanvas);\r\n\r\n //remove from filter temp\r\n var offCanvasFilterObj = altFind(filtersTemp, function (result) {\r\n return result.value === targetValue.toLowerCase().replace(/\\n/g, \"\");\r\n });\r\n index = filtersTemp.indexOf(offCanvasFilterObj);\r\n filtersTemp.splice(index, 1);\r\n }\r\n }\r\n\r\n //if selecting an offcanvas filter\r\n else if (filterOffCanvasResults.contains(filter) || filterResults.querySelector(\"#\" + filter.id) != null) {\r\n // filterOffCanvasResults.removeChild(filter);\r\n var filterDesktop = filterResults.querySelector(\"#\" + filter.id);\r\n filterResults.removeChild(filterDesktop);\r\n }\r\n\r\n index = filters.indexOf(results[0]);\r\n filters.splice(index, 1);\r\n if (\r\n (!horizontal && element.getBoundingClientRect().y && element.getBoundingClientRect().y < 0) ||\r\n (element.getBoundingClientRect().top && element.getBoundingClientRect().top < 0)\r\n ) {\r\n //Edge FF use top, not y\r\n element.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n if (filters.length === 0) {\r\n toggleClearAllButtons(false);\r\n }\r\n // reset text (count) values in dropdowns\r\n each(dropdownObjects, function (dropdown) {\r\n dropdown.recountChecked();\r\n });\r\n },\r\n createShowMoreButton = function () {\r\n showMoreDiv = createElement(\"div\", {\r\n class: prefix + \"col-xs-12 \" + prefix + \"col-sm-6 \" + prefix + \"col-md-4 \" + prefix + \"col-lg-3\",\r\n });\r\n var showMore = createElement(\"button\", {\r\n class:\r\n prefix +\r\n \"filter-btn-show \" +\r\n prefix +\r\n \"btn \" +\r\n prefix +\r\n \"btn-secondary \" +\r\n prefix +\r\n \"d-flex \" +\r\n prefix +\r\n \"text-truncate\",\r\n id: \"showMorefilters\",\r\n html: \"Show More Filters\",\r\n });\r\n showMore.addEventListener(\"click\", handleShowMore, false);\r\n showMoreDiv.appendChild(showMore);\r\n collectionInputsContainer.appendChild(showMoreDiv);\r\n },\r\n createOffCanvasFilterItem = function (filterItem, origin) {\r\n if (filterAlreadyExists(filterItem.value ? filterItem.value : filterItem, true)) {\r\n return;\r\n }\r\n\r\n var filterOffCanvasItem;\r\n var isDigit = false;\r\n if (origin === null || origin === undefined) {\r\n origin = \"\";\r\n }\r\n if (typeof filterItem === \"object\") {\r\n // it's an object so clone it\r\n filterOffCanvasItem = filterItem.cloneNode(true);\r\n } else {\r\n // id's can't have a digit as first number\r\n if (filterItem[0].match(/\\d/)) {\r\n filterItem = digit.concat(filterItem);\r\n isDigit = true;\r\n }\r\n filterItem = filterItem.replace(/\\s+/g, \" \").trim();\r\n // need to create an object\r\n filterOffCanvasItem = createFilter(filterItem, true, isDigit);\r\n }\r\n if (!isApplyingState) {\r\n filterOffCanvasItem.addEventListener(\"click\", handleOffCanvasFilterItemClickEvent, false);\r\n filterOffCanvasResults.appendChild(filterOffCanvasItem); // DOM Add New Filter to OffCanvas\r\n }\r\n var filterValue = filterItem.value ? filterItem.value : filterItem.replace(/^digit/, \"\");\r\n if (isOffCanvasState) {\r\n var offCanvasOriginId = origin.id + \"OffCanvas\";\r\n var offCanvasOrigin = document.getElementById(offCanvasOriginId);\r\n filterOffCanvasItem.value = origin.name ? origin.name.toLowerCase() : filterValue.toLowerCase();\r\n filterOffCanvasItem.origin = origin;\r\n filterOffCanvasItem.offCanvasOrigin = offCanvasOrigin;\r\n filtersTemp.push(filterOffCanvasItem);\r\n }\r\n\r\n if (clearAllOffCanvas.classList.contains(prefix + \"d-none\")) {\r\n toggleClearAllButtons(true);\r\n }\r\n },\r\n createDesktopFilterItem = function (filter, origin) {\r\n var isDigit = false;\r\n if (origin === null || origin === undefined) {\r\n origin = \"\";\r\n }\r\n // id's can't have a digit as first number\r\n if (filter[0].match(/\\d/)) {\r\n filter = digit.concat(filter);\r\n isDigit = true;\r\n }\r\n filter = filter.replace(/\\s+/g, \" \").trim();\r\n\r\n if (filterAlreadyExists(filter, false)) {\r\n return;\r\n }\r\n\r\n if (filters.length <= 0) {\r\n resultsLabelDesktop.classList.remove(prefix + \"d-none\");\r\n }\r\n\r\n if (clearAllItem.classList.contains(prefix + \"d-none\")) {\r\n toggleClearAllButtons(true);\r\n }\r\n\r\n var filterItem = createFilter(filter, true, isDigit);\r\n var offCanvasOriginId = origin.id + \"OffCanvas\";\r\n var offCanvasOrigin = document.getElementById(offCanvasOriginId);\r\n\r\n filterItem.origin = origin;\r\n (filterItem.offCanvasOrigin = offCanvasOrigin),\r\n (filterItem.value = origin.name\r\n ? origin.name.toLowerCase()\r\n : filter.replace(/^digit/, \"\").toLowerCase());\r\n filterItem.addEventListener(\"click\", handleFilterItemClickEvent, false);\r\n\r\n if (!isOffCanvasState) {\r\n filters.push(filterItem);\r\n if (offCanvasOrigin) {\r\n offCanvasOrigin.checked = true; // Keep offCanvas checkbox in sync\r\n getClosest(offCanvasOrigin, \"li\", true).setAttribute(\"aria-checked\", \"true\");\r\n updateOffCanvasAccordionCount(offCanvasOrigin);\r\n }\r\n if (horizontal) {\r\n filterResults.insertBefore(filterItem, clearAllItem);\r\n } else {\r\n filterResults.appendChild(filterItem); // DOM Add new filter to Desktop\r\n updateVerticalDesktopAccordionCount(origin);\r\n }\r\n if (!isApplyingState) {\r\n createOffCanvasFilterItem(filterItem, filterItem.origin);\r\n }\r\n updateFiltersCount();\r\n uicoreCustomEvent(\"FilterCollection\", \"CreateEvent\", filterItem, {\r\n filters: filtersAsStrings(),\r\n addedFilter: filterItem.innerText,\r\n });\r\n }\r\n },\r\n // creates the HTML filterItem button\r\n createFilter = function (filter, useX, isDigit) {\r\n var filterText = filter;\r\n if (isDigit) {\r\n filterText = filter.replace(/^digit/, \"\");\r\n }\r\n var filterId = filter.replace(/([^A-Za-z0-9._:/-])/g, \"\"); // =need to delete instances of special characters\r\n var filterItem = createElement(\"button\", {\r\n class:\r\n prefix +\r\n \"filter-item \" +\r\n prefix +\r\n \"btn \" +\r\n prefix +\r\n \"btn-secondary \" +\r\n prefix +\r\n \"btn-sm \" +\r\n prefix +\r\n \"text-truncate\",\r\n id: filterId.toLowerCase().replace(/\\s/g, \"\").trim(),\r\n });\r\n\r\n var filterLabel = createElement(\"label\", {\r\n html: filterText,\r\n class: prefix + \"text-truncate\",\r\n });\r\n\r\n filterItem.appendChild(filterLabel);\r\n\r\n // create filterItem SVG\r\n if (useX) {\r\n var filterIcon = renderSvg([{ name: \"close-x\", show: true }]);\r\n classAdd(filterIcon, prefix + \"svg-close-x\");\r\n classAdd(filterIcon, prefix + \"align-self-center\");\r\n classAdd(filterIcon, prefix + \"m1-1\");\r\n filterIcon.setAttribute(\"tabindex\", \"-1\");\r\n filterIcon.setAttribute(\"focusable\", \"false\");\r\n filterIcon.setAttribute(\"aria-label\", \"filter-close\");\r\n\r\n // put everything together\r\n filterItem.appendChild(filterIcon);\r\n }\r\n return filterItem;\r\n },\r\n filterAlreadyExists = function (filter, isOffCanvasFilter) {\r\n var whichFilters = isOffCanvasFilter ? filtersTemp : filters;\r\n var whichParent = isOffCanvasFilter ? filterOffCanvas : element;\r\n\r\n if (filter === null || filter === undefined || filter == \"\") {\r\n console.warn(\"Not a valid filter tag\");\r\n return true;\r\n }\r\n if (arrayOfObjectsContains(whichFilters, filter.toLowerCase())) {\r\n each(whichParent.querySelectorAll(\".dds__filter-item\"), function (htmlFilter) {\r\n if (htmlFilter.value.toLowerCase() == filter.toLowerCase()) {\r\n htmlFilter.classList.add(prefix + \"shakey\");\r\n\r\n setTimeout(function () {\r\n htmlFilter.classList.remove(prefix + \"shakey\");\r\n }, getAnimationDurationFromElement(htmlFilter));\r\n }\r\n });\r\n console.warn(\"This filter has already been added\");\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n updateOffCanvasAccordionCount = function (origin) {\r\n var accordionParent = getClosest(origin, \".\" + prefix + \"collapse\").id;\r\n var accordionBtn = element.querySelector(\"[data-target='#\" + accordionParent + \"']\"); //[data-target='#\" + activeCollapse.id + \"']\"\r\n var accordionBody = getClosest(origin, \".\" + prefix + \"accordion-card-body\");\r\n var itemsChecked = accordionBody.querySelectorAll(\".\" + prefix + \"form-check-input:checked\").length;\r\n\r\n var displayTxt;\r\n if (itemsChecked > 0) {\r\n displayTxt = \"(\" + itemsChecked + \")\";\r\n } else {\r\n displayTxt = \" \";\r\n }\r\n\r\n var checkedCounter = accordionBtn.querySelector(\".\" + prefix + \"checked-presentation\");\r\n if (checkedCounter != null) {\r\n checkedCounter.innerHTML = 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 accordionBtn.appendChild(checkedCounter);\r\n }\r\n },\r\n updateVerticalDesktopAccordionCount = function (origin) {\r\n if (origin) {\r\n var accordionParent = getClosest(origin, \".\" + prefix + \"collapse\").id;\r\n var accordionBtn = element.querySelector(\"[data-target='#\" + accordionParent + \"']\"); //[data-target='#\" + activeCollapse.id + \"']\"\r\n var accordionBody = getClosest(origin, \".\" + prefix + \"secondary-accordion\");\r\n var itemsChecked = accordionBody.querySelectorAll(\".\" + prefix + \"form-check-input:checked\").length;\r\n\r\n var displayTxt;\r\n if (itemsChecked > 0) {\r\n displayTxt = \"(\" + itemsChecked + \")\";\r\n } else {\r\n displayTxt = \" \";\r\n }\r\n\r\n var checkedCounter = accordionBtn.querySelector(\".\" + prefix + \"checked-presentation\");\r\n if (checkedCounter != null) {\r\n checkedCounter.innerHTML = displayTxt;\r\n } else {\r\n checkedCounter = createElement(\"span\", {\r\n class: prefix + \"checked-presentation \" + prefix + \"ml-1 \" + prefix + \"font-weight-bold\",\r\n html: displayTxt,\r\n });\r\n accordionBtn.insertBefore(\r\n checkedCounter,\r\n accordionBtn.querySelector(\".\" + prefix + \"arrow-tri-solid-right\")\r\n );\r\n }\r\n } else {\r\n accordionObjects.forEach(function (accordion) {\r\n var itemsChecked = accordion.parentNode.querySelectorAll(\".\" + prefix + \"form-check-input:checked\")\r\n .length;\r\n\r\n var displayTxt;\r\n if (itemsChecked > 0) {\r\n displayTxt = \"(\" + itemsChecked + \")\";\r\n } else {\r\n displayTxt = \" \";\r\n }\r\n\r\n var checkedCounter = accordion.querySelector(\".\" + prefix + \"checked-presentation\");\r\n if (checkedCounter != null) {\r\n checkedCounter.innerHTML = 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 accordion.querySelector(\"span\").appendChild(checkedCounter);\r\n }\r\n });\r\n }\r\n },\r\n updateFiltersCount = function () {\r\n var itemsChecked = filters.length;\r\n var filteringMobileBtn = element.querySelectorAll(\".\" + prefix + \"filter-btn-mobile\")[0];\r\n\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 = filteringMobileBtn.querySelector(\".\" + prefix + \"checked-presentation\");\r\n if (checkedCounter != null) {\r\n checkedCounter.innerHTML = 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 filteringMobileBtn.appendChild(checkedCounter);\r\n }\r\n },\r\n filtersAsStrings = function () {\r\n var stringArray = [];\r\n each(filters, function (filter) {\r\n stringArray.push(filter.value);\r\n });\r\n return stringArray;\r\n },\r\n toggleClearAllButtons = function (onState) {\r\n if (smallWindow && !horizontal) {\r\n clearAllItem = element.querySelector(\r\n \".\" + prefix + \"filter-label-results .\" + prefix + \"filter-btn-clear\"\r\n );\r\n }\r\n if (onState == true && clearAllItem.classList.contains(prefix + \"d-none\")) {\r\n clearAllOffCanvas.classList.remove(prefix + \"d-none\");\r\n clearAllItem.classList.add(prefix + \"d-flex\");\r\n clearAllItem.classList.remove(prefix + \"d-none\");\r\n clearAllItem.addEventListener(\"click\", handleClearAllEvent, false);\r\n clearAllItem.addEventListener(\"touchstart\", handleClearAllEvent, false);\r\n } else if ((onState == false) & !clearAllItem.classList.contains(prefix + \"d-none\")) {\r\n clearAllOffCanvas.classList.add(prefix + \"d-none\");\r\n clearAllItem.classList.remove(prefix + \"d-flex\");\r\n clearAllItem.classList.add(prefix + \"d-none\");\r\n clearAllItem.removeEventListener(\"click\", handleClearAllEvent, false);\r\n clearAllItem.removeEventListener(\"touchstart\", handleClearAllEvent, false);\r\n }\r\n },\r\n toggleDropdown = function (index) {\r\n var i;\r\n if (dropdowns[index].classList.contains(prefix + \"d-none\")) {\r\n for (i = 0; i <= index; i++) {\r\n dropdowns[i].classList.remove(prefix + \"d-none\");\r\n }\r\n } else {\r\n for (i = index + 1; i < dropdowns.length; i++) {\r\n dropdowns[i].classList.add(prefix + \"d-none\");\r\n }\r\n }\r\n };\r\n\r\n this.numOfFilters = function (OffCanvas) {\r\n if (OffCanvas) {\r\n return filterOffCanvasResults.querySelectorAll(\".\" + prefix + \"filter-item\").length;\r\n }\r\n };\r\n\r\n this.updateResultsLabel = function (resultCount) {\r\n if (!resultCount || typeof resultCount !== \"string\") {\r\n console.warn(\"This is not a valid input for updateResultsLabel.\");\r\n return;\r\n }\r\n element.querySelector(\".\" + prefix + \"resultCount\").innerText = resultCount;\r\n };\r\n\r\n // init\r\n if (!(stringFilterCollection in element)) {\r\n if (element.classList.contains(prefix + \"filter-collection-vertical\")) {\r\n horizontal = false;\r\n }\r\n if (horizontal) {\r\n clearAllItem = element.querySelector(\r\n \".\" + prefix + \"filter-collection-wrapper .\" + prefix + \"filter-btn-clear\"\r\n );\r\n } else if (smallMediaSize.matches) {\r\n clearAllItem = element.querySelector(\".\" + prefix + \"filter-label-results .\" + prefix + \"filter-btn-clear\");\r\n } else {\r\n clearAllItem = element.querySelector(\r\n \".\" + prefix + \"filter-collector-accordion .\" + prefix + \"filter-btn-clear\"\r\n );\r\n }\r\n\r\n collectionInputsContainer = element.querySelector(\".\" + prefix + \"filter-input-container\");\r\n dropdowns = collectionInputsContainer.querySelectorAll(\"div.\" + prefix + \"btn-dropdown\");\r\n collectionInputs = element.querySelectorAll(\"[data-filter]\");\r\n targetCollection = element[\"getAttribute\"](\"data-target\");\r\n filterCollection = element.querySelector(targetCollection);\r\n\r\n if (filterCollection == null) {\r\n console.error(\"Found no filter collection to output results to.\");\r\n return false;\r\n }\r\n if (collectionInputs == null) {\r\n console.error(\"Found no data-filter element(s) available to use\");\r\n return false;\r\n }\r\n\r\n //off canvas inits\r\n if (element.querySelector(\".\" + prefix + \"filter-btn-mobile\")) {\r\n var modalBtn = element.querySelector(\".\" + prefix + \"filter-btn-mobile\");\r\n mobileModal = new Modal(modalBtn);\r\n modalBtn.addEventListener(\"click\", handleOffCanvasOpen);\r\n filterOffCanvas = element.querySelector(\".\" + prefix + \"modal-offcanvas\");\r\n\r\n if (element.querySelectorAll(\"[data-toggle='\" + prefix + \"collapse\" + \"']\")) {\r\n each(element.querySelectorAll(\"[data-toggle='\" + prefix + \"collapse\" + \"']\"), function (accordion) {\r\n new Collapse(accordion);\r\n });\r\n }\r\n if (filterOffCanvas.querySelector(\".\" + prefix + \"text-right .\" + prefix + \"btn-primary\")) {\r\n var applyBtn = filterOffCanvas.querySelector(\".\" + prefix + \"text-right .\" + prefix + \"btn-primary\");\r\n applyBtn.addEventListener(\"click\", handleOffCanvasApplyEvent);\r\n }\r\n if (filterOffCanvas.querySelector(\".\" + prefix + \"text-right .\" + prefix + \"dds__btn-secondary-primary\")) {\r\n var clearAllBtn = filterOffCanvas.querySelector(\r\n \".\" + prefix + \"text-right .\" + prefix + \"dds__btn-secondary\"\r\n );\r\n clearAllBtn.addEventListener(\"click\", handleClearAllEvent);\r\n }\r\n if (filterOffCanvas.querySelector(\".\" + prefix + \"text-right .\" + prefix + \"btn-secondary\")) {\r\n clearAllOffCanvas = filterOffCanvas.querySelector(\r\n \".\" + prefix + \"text-right .\" + prefix + \"btn-secondary\"\r\n );\r\n clearAllOffCanvas.addEventListener(\"click\", handleOffCanvasClearAllClick, false);\r\n }\r\n if (filterOffCanvas.querySelector(\"[data-dismiss]\")) {\r\n var backOffCanvas = filterOffCanvas.querySelector(\"[data-dismiss]\");\r\n backOffCanvas.addEventListener(\"click\", handleOffCanvasCancelEvent, false);\r\n }\r\n each(filterOffCanvas.querySelectorAll(\".\" + prefix + \"form-check-input\"), function (checkbox) {\r\n checkbox.addEventListener(\"click\", handleOffCanvasCheckboxClick, false);\r\n });\r\n }\r\n if (horizontal) {\r\n if (!mediumMediaSize.matches) {\r\n if (collectionInputs.length > 8) {\r\n visibileIdx = 5;\r\n mediaIncrementforDropdowns = 4;\r\n for (var i = visibileIdx + 1; i < dropdowns.length; i++) {\r\n dropdowns[i].classList.add(prefix + \"d-none\");\r\n }\r\n createShowMoreButton();\r\n }\r\n } else if (mediumMediaSize.matches) {\r\n if (collectionInputs.length > 6) {\r\n visibileIdx = 3;\r\n mediaIncrementforDropdowns = 3;\r\n for (i = visibileIdx + 1; i < dropdowns.length; i++) {\r\n dropdowns[i].classList.add(prefix + \"d-none\");\r\n }\r\n createShowMoreButton();\r\n }\r\n }\r\n }\r\n\r\n each(collectionInputs, function (input) {\r\n var typeofInput = input[\"getAttribute\"](\"data-filter\");\r\n if (typeofInput == prefix + \"keyword-filter\") {\r\n keywordFilter = input;\r\n new FilterKeyword(keywordFilter);\r\n keywordFilter.addEventListener(\"uicFilterKeywordCreateEvent\", handleAddEvent, false);\r\n } else if (typeofInput == prefix + \"multi-select\") {\r\n var multiSelect = input;\r\n dropdownObjects.push(new Dropdown(input));\r\n multiSelect.addEventListener(\"uicDropdownAddEvent\", handleDesktopCheckboxClick, false);\r\n multiSelect.addEventListener(\"uicDropdownRemoveEvent\", handleDesktopCheckboxClick, false);\r\n } else if (typeofInput == prefix + \"secondary-accordion\") {\r\n accordionObjects.push(input);\r\n var checkboxes = input.parentNode.querySelectorAll(\".\" + prefix + \"form-check\");\r\n each(checkboxes, function (checkbox) {\r\n checkbox.addEventListener(\"click\", handleDesktopCheckboxClick, true);\r\n });\r\n }\r\n });\r\n\r\n filterResults = filterCollection.querySelector(\"div.\" + prefix + \"filter-results\");\r\n filterOffCanvasResults = element.querySelector(\r\n \"div.\" + prefix + \"modal-offcanvas div.\" + prefix + \"filter-results\"\r\n );\r\n resultsLabelDesktop = element.querySelector(\"label.\" + prefix + \"filter-label-results\");\r\n\r\n if (horizontal) {\r\n mediumMediaSize.addListener(handleResizeMedium);\r\n }\r\n smallMediaSize.addListener(handleResizeSmall);\r\n }\r\n\r\n element[stringFilterCollection] = self;\r\n}\r\n","import { prefix, DOC, getElementsByClassName, each, jsonOptionsInit } from \"./utilities.js\";\r\nimport InputMask from \"./helpers/inputMask.js\";\r\n\r\nexport default function Forms(element, options) {\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n options = options || {};\r\n options = jsonOptionsInit(element, options);\r\n options.validate = element.dataset.validate\r\n ? element.dataset.validate === \"true\"\r\n ? true\r\n : false\r\n : options.validate\r\n ? options.validate\r\n : true;\r\n\r\n var self = this,\r\n stringForm = \"Form\",\r\n togglePassword = function (e) {\r\n var passwordState = DOC.getElementById(e.target.dataset[\"target\"]);\r\n if (passwordState) {\r\n if (passwordState.type === \"password\") {\r\n passwordState.type = \"text\";\r\n } else {\r\n passwordState.type = \"password\";\r\n }\r\n } else {\r\n console.warn(\"The target password field does not exist.\");\r\n }\r\n },\r\n submitHandler = function (event) {\r\n var formValidationErrorSuffix = \"Feedback\";\r\n if (element.checkValidity() === false) {\r\n each(element, function (el) {\r\n if (el.tagName == \"INPUT\") {\r\n var errorMsg = element.querySelector(\"#\" + el.getAttribute(\"id\") + formValidationErrorSuffix);\r\n setTimeout(function () {\r\n if (!el.validity.valid) {\r\n //if error message has not been turned on yet\r\n if (errorMsg && !(getComputedStyle(errorMsg)[\"display\"] == \"block\")) {\r\n errorMsg.style.display = \"block\";\r\n }\r\n el.setAttribute(\"aria-invalid\", \"true\");\r\n el.setAttribute(\"aria-describedby\", el.getAttribute(\"id\") + formValidationErrorSuffix);\r\n } else {\r\n //if error message has not been turned off yet\r\n if (errorMsg && getComputedStyle(errorMsg)[\"display\"] == \"block\") {\r\n errorMsg.style.display = \"none\";\r\n }\r\n el.setAttribute(\"aria-invalid\", \"false\");\r\n el.setAttribute(\"aria-describedby\", \"\");\r\n }\r\n }, 10);\r\n }\r\n });\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n element.classList.add(\"dds__was-validated\");\r\n };\r\n\r\n //init\r\n if (!(stringForm in element)) {\r\n if (element.querySelectorAll(\"input\")) {\r\n each(element.querySelectorAll(\"input\"), function (child) {\r\n if (child.classList.contains(prefix + \"input-masked\")) {\r\n new InputMask(child);\r\n }\r\n });\r\n }\r\n if (!element.hasAttribute(\"novalidate\")) {\r\n element.setAttribute(\"novalidate\", \"\");\r\n }\r\n if (options.validate) {\r\n element.addEventListener(\"submit\", submitHandler);\r\n }\r\n\r\n var checkboxValidators = getElementsByClassName(element, prefix + \"form-check-input\");\r\n each(checkboxValidators, function (checkboxValidator) {\r\n if (checkboxValidator && !!checkboxValidator.dataset[\"target\"]) {\r\n checkboxValidator.addEventListener(\"click\", togglePassword);\r\n }\r\n });\r\n }\r\n element[stringForm] = self;\r\n}\r\n","/* eslint-disable quotes */\r\nimport { jsonOptionsInit, createElement, uicoreCustomEvent } from \"./utilities.js\";\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nexport default function FileUpload(element, options) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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.extensionErrorMessage = options.extensionErrorMessage || \"File must be of type {extensions}.\";\r\n options.sizeErrorMessage = options.sizeErrorMessage || \"File must be smaller than {max-size}.\";\r\n\r\n // constants, event targets, strings\r\n var self = this,\r\n stringFileUpload = \"FileUpload\",\r\n parent = element.parentNode,\r\n input = null,\r\n uploadButton = null,\r\n target = null,\r\n placeholder = null,\r\n maxSize = null,\r\n maxSizeLabel = null,\r\n fileNameLimitSize = 22,\r\n fileNameCropSize = 8,\r\n // unused\r\n // feedBackBlock = null,\r\n hasBeforeDelete = options.beforeDelete && options.beforeDelete instanceof Function,\r\n hasAfterDelete = options.afterDelete && options.afterDelete instanceof Function,\r\n hasUploadAction = options.uploadAction && options.uploadAction instanceof Function,\r\n hasProgressAction = options.progressAction && options.progressAction instanceof Function,\r\n hasErrorAction = options.errorAction && options.errorAction instanceof Function,\r\n hasBeforeUpload = options.beforeUpload && options.beforeUpload instanceof Function,\r\n sizeToBytes = function (size) {\r\n var originalSize = size.replace(/[^0-9]*/gi, \"\"),\r\n suffix = size.replace(/[0-9]*/gi, \"\").toUpperCase(),\r\n factor = 1;\r\n switch (suffix) {\r\n case \"BYTES\":\r\n case \"\":\r\n break;\r\n case \"KB\":\r\n factor = 1024;\r\n break;\r\n case \"MB\":\r\n factor = 1024000;\r\n break;\r\n default:\r\n break;\r\n }\r\n return originalSize * factor;\r\n },\r\n bytesToSize = function (size) {\r\n var suffix = \"bytes\";\r\n var isKB = size >= 1024 && size < 1024000;\r\n var isMB = size >= 1024000;\r\n if (isKB) {\r\n suffix = \"KB\";\r\n size = getRounded(size, 1024);\r\n } else if (isMB) {\r\n suffix = \"MB\";\r\n size = getRounded(size, 1024000);\r\n }\r\n return { suffix: suffix, size: size };\r\n },\r\n getRounded = function (size, value) {\r\n return Math.round((size / value) * 100) / 100;\r\n },\r\n removeFile = function (e) {\r\n e.preventDefault();\r\n var tempName = element.files[0] ? element.files[0].name : \"\";\r\n if (hasBeforeDelete) {\r\n options.beforeDelete(tempName);\r\n uicoreCustomEvent(\"FileUpload\", \"BeforeDeleteEvent\", element, tempName);\r\n }\r\n element.value = \"\";\r\n renderFileList();\r\n if (hasAfterDelete) {\r\n options.afterDelete(tempName);\r\n uicoreCustomEvent(\"FileUpload\", \"AfterDeleteEvent\", element, tempName);\r\n }\r\n return true;\r\n },\r\n loaded = function (evt) {\r\n var fileString = evt.target.result;\r\n if (hasUploadAction) {\r\n options.uploadAction(fileString);\r\n uicoreCustomEvent(\"FileUpload\", \"UploadActionEvent\", element, fileString);\r\n }\r\n },\r\n updateProgress = function (evt) {\r\n if (evt.lengthComputable) {\r\n var loaded = evt.loaded / evt.total;\r\n if (hasProgressAction) {\r\n options.progressAction({ loaded: loaded, total: evt.total });\r\n uicoreCustomEvent(\"FileUpload\", \"ProgressActionEvent\", element, {\r\n loaded: loaded,\r\n total: evt.total,\r\n });\r\n }\r\n }\r\n },\r\n errorHandler = function (evt) {\r\n if (hasErrorAction) {\r\n options.errorAction(evt.target.error);\r\n uicoreCustomEvent(\"FileUpload\", \"ErrorActionEvent\", element, evt.target.error);\r\n }\r\n },\r\n loadFile = function (readFile) {\r\n var beforeEventReturn = true;\r\n if (hasBeforeUpload) {\r\n beforeEventReturn = options.beforeUpload(readFile) !== false;\r\n uicoreCustomEvent(\"FileUpload\", \"BeforeUploadEvent\", element, readFile);\r\n }\r\n if (window.File && window.FileReader && beforeEventReturn) {\r\n var reader = new FileReader();\r\n switch (options.loadFormat) {\r\n case \"binary\":\r\n reader.readAsBinaryString(readFile, \"UTF-8\");\r\n break;\r\n case \"buffer\":\r\n reader.readAsArrayBuffer(readFile, \"UTF-8\");\r\n break;\r\n case \"dataUrl\":\r\n reader.readAsDataURL(readFile, \"UTF-8\");\r\n break;\r\n default:\r\n reader.readAsText(readFile, \"UTF-8\");\r\n break;\r\n }\r\n reader.onprogress = updateProgress;\r\n reader.onload = loaded;\r\n reader.onerror = errorHandler;\r\n }\r\n },\r\n errorTemplate = function (message) {\r\n var Container = createElement(\"div\", {\r\n class: \"dds__alert\",\r\n role: \"alert\",\r\n });\r\n\r\n var bodyAlign = createElement(\"div\", {\r\n class: \"dds__d-flex dds__justify-content-between\",\r\n });\r\n\r\n var body = createElement(\"div\", {\r\n class: \"dds__error-default-body\",\r\n });\r\n\r\n var icon = createElement(\"i\", {\r\n class: \"dds__icons dds__alert-notice\",\r\n aria_hidden: \"true\",\r\n });\r\n\r\n var messageBox = createElement(\"p\", { class: \"dds__alert-body\" });\r\n var messageText = document.createTextNode(message);\r\n\r\n Container.appendChild(bodyAlign);\r\n bodyAlign.appendChild(body);\r\n body.appendChild(icon);\r\n body.appendChild(messageBox);\r\n messageBox.appendChild(messageText);\r\n\r\n return Container;\r\n },\r\n validateSize = function (file) {\r\n var isTooBig = maxSize && file && maxSize < file.size;\r\n if (isTooBig) {\r\n return errorTemplate(\r\n options.sizeErrorMessage.replace(\"{max-size}\", maxSizeLabel.size + \"\" + maxSizeLabel.suffix)\r\n );\r\n }\r\n return false;\r\n },\r\n validateExtension = function (fileName) {\r\n var isInvalidExtension =\r\n options.allowedExensions &&\r\n fileName &&\r\n options.allowedExensions.indexOf(fileName.replace(/^.*\\.(.+)$/i, \"$1\").toLowerCase()) == -1;\r\n if (isInvalidExtension) {\r\n return errorTemplate(\r\n options.extensionErrorMessage.replace(\r\n \"{extensions}\",\r\n options.allowedExensions.join(\", \").replace(/^(.+), (.+)$/, \"$1 or $2\")\r\n )\r\n );\r\n }\r\n return false;\r\n },\r\n getFileName = function (name) {\r\n return name.length < fileNameLimitSize\r\n ? name\r\n : name.substr(0, fileNameCropSize) + \"...\" + name.substr(-fileNameCropSize);\r\n },\r\n renderFileList = function () {\r\n target.innerHTML = \"\";\r\n for (var index = 0; index < element.files.length; index++) {\r\n var file = element.files[index],\r\n bytesToSizeInfo = bytesToSize(file.size),\r\n size = bytesToSizeInfo.size,\r\n suffix = bytesToSizeInfo.suffix,\r\n name = getFileName(file.name);\r\n\r\n loadFile(file);\r\n\r\n var resultLine = createElement(\"div\", {\r\n class: \"dds__form-text\",\r\n data_key: index,\r\n aria_labelledby: \"Selected file \" + name,\r\n });\r\n\r\n var icon = createElement(\"i\", {\r\n class: \"dds__icons dds__paper-clip\",\r\n aria_hidden: \"true\",\r\n });\r\n\r\n var fileSizeBox = createElement(\"span\", {\r\n class: \"dds__form-upload-file-size dds__text-muted\",\r\n arial_label: size + \"\" + suffix,\r\n });\r\n\r\n var iconDelete = createElement(\"i\", {\r\n class: \"dds__icons dds__trash\",\r\n aria_hidden: \"true\",\r\n });\r\n\r\n var fileSizeText = document.createTextNode(size + \"\" + suffix);\r\n var fileNameText = document.createTextNode(name);\r\n var buttonRemoveText = document.createTextNode(\"Delete\");\r\n\r\n var buttonRemove = createElement(\"button\", {\r\n class: \"dds__btn dds__form-upload-file-delete dds__btn-link\",\r\n aria_labelledby: \"Delete the file \" + name,\r\n });\r\n\r\n resultLine.appendChild(icon);\r\n resultLine.appendChild(fileNameText);\r\n fileSizeBox.appendChild(fileSizeText);\r\n resultLine.appendChild(fileSizeBox);\r\n buttonRemove.appendChild(iconDelete);\r\n buttonRemove.appendChild(buttonRemoveText);\r\n resultLine.appendChild(buttonRemove);\r\n\r\n buttonRemove.addEventListener(\"click\", removeFile);\r\n\r\n var sizeError = validateSize(file);\r\n if (sizeError) {\r\n resultLine.appendChild(sizeError);\r\n } else {\r\n var extensionError = validateExtension(file.name);\r\n if (extensionError) {\r\n resultLine.appendChild(extensionError);\r\n }\r\n }\r\n\r\n target.appendChild(resultLine);\r\n }\r\n },\r\n uploadButtonClick = function () {\r\n input.click();\r\n };\r\n\r\n // init\r\n if (!(stringFileUpload in element)) {\r\n if (element.dataset.maxSize) {\r\n maxSize = sizeToBytes(element.dataset.maxSize);\r\n maxSizeLabel = bytesToSize(maxSize);\r\n }\r\n\r\n input = parent.querySelector(\".dds__form-upload\");\r\n uploadButton = parent.querySelector(\".dds__form-upload-btn\");\r\n uploadButton.addEventListener(\"click\", uploadButtonClick);\r\n\r\n // unused\r\n // feedBackBlock = parent.querySelector(\".dds__invalid-feedback\");\r\n\r\n target = createElement(\"div\");\r\n target.classList.add(\"dds__form-upload-target\");\r\n parent.parentNode.appendChild(target);\r\n element.addEventListener(\"change\", renderFileList, false);\r\n\r\n if (element.dataset.placeholder) {\r\n placeholder = createElement(\"div\", {\r\n class: \"dds__form-upload-placeholder dds__text-muted\",\r\n });\r\n\r\n var placeholderText = document.createTextNode(element.dataset.placeholder);\r\n placeholder.appendChild(placeholderText);\r\n\r\n parent.appendChild(placeholder);\r\n }\r\n }\r\n\r\n element[stringFileUpload] = self;\r\n}\r\n","import { each, createElement } from \"./utilities.js\";\r\n\r\nexport default function LinkPicker(element) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n // constants, event targets, strings\r\n var self = this,\r\n stringLinkPicker = \"LinkPicker\",\r\n interestName = \"Interest\",\r\n touseName = \"ToUse\",\r\n interest = element.querySelector('select[name=\"' + stringLinkPicker + \"_\" + interestName + '\"]'),\r\n touse = element.querySelector('select[name=\"' + stringLinkPicker + \"_\" + touseName + '\"]'),\r\n interestData = JSON.parse(interest.getAttribute(\"data-select\")),\r\n touseData = JSON.parse(touse.getAttribute(\"data-select\")),\r\n findName = \"Find\",\r\n find = element.querySelector('button[name=\"' + stringLinkPicker + \"_\" + findName + '\"]'),\r\n // handlers\r\n onChangeHandler = function (e) {\r\n var eventTarget = e[\"target\"];\r\n if (eventTarget === interest) {\r\n if (interest.selectedIndex === 0) {\r\n touse.disabled = true;\r\n touse.classList.add(\"dds__disabled\"); //disabled attribute doesn't work on FF\r\n } else {\r\n touse.disabled = false;\r\n touse.classList.remove(\"dds__disabled\");\r\n }\r\n var obj = touseData[touseName][interest.value];\r\n removeAllOptions(touse, true);\r\n appendDataToSelect(touse, obj);\r\n find.classList.add(\"dds__disabled\");\r\n } else {\r\n if (touse.selectedIndex === 0) {\r\n find.disabled = true;\r\n find.classList.add(\"dds__disabled\");\r\n } else {\r\n find.disabled = false;\r\n find.classList.remove(\"dds__disabled\");\r\n }\r\n }\r\n },\r\n clickHandler = function () {\r\n var link = touse.options[touse.selectedIndex].value;\r\n find[\"setAttribute\"](\"href\", link);\r\n find.click();\r\n },\r\n removeAllOptions = function (sel, removeGrp) {\r\n var len, groups, par;\r\n if (removeGrp) {\r\n groups = sel.getElementsByTagName(\"optgroup\");\r\n len = groups.length;\r\n for (var i = len; i; i--) {\r\n sel.removeChild(groups[i - 1]);\r\n }\r\n }\r\n\r\n len = sel.options.length;\r\n for (i = len; i; i--) {\r\n par = sel.options[i - 1].parentNode;\r\n par.removeChild(sel.options[i - 1]);\r\n }\r\n },\r\n appendDataToSelect = function (sel, obj) {\r\n var f = document.createDocumentFragment();\r\n var labels = [],\r\n group,\r\n opts;\r\n\r\n function addOptions(obj) {\r\n var f = document.createDocumentFragment();\r\n var o;\r\n\r\n for (var i = 0, len = obj.text.length; i < len; i++) {\r\n o = createElement(\"option\");\r\n o.appendChild(document.createTextNode(obj.text[i]));\r\n\r\n if (obj.value) {\r\n o.value = obj.value[i];\r\n }\r\n\r\n f.appendChild(o);\r\n }\r\n return f;\r\n }\r\n\r\n if (obj.text) {\r\n opts = addOptions(obj);\r\n f.appendChild(opts);\r\n } else {\r\n for (var prop in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\r\n labels.push(prop);\r\n }\r\n }\r\n\r\n each(labels, function (label) {\r\n group = createElement(\"optgroup\", {\r\n label: label,\r\n });\r\n f.appendChild(group);\r\n opts = addOptions(obj[label]);\r\n group.appendChild(opts);\r\n });\r\n }\r\n sel.appendChild(f);\r\n };\r\n\r\n // init\r\n if (!(stringLinkPicker in element)) {\r\n appendDataToSelect(interest, interestData);\r\n interest.selectedIndex = 0;\r\n interest.addEventListener(\"change\", onChangeHandler, false);\r\n touse.addEventListener(\"change\", onChangeHandler, false);\r\n find.addEventListener(\"click\", clickHandler, false);\r\n var data = touseData[touseName][interest.value];\r\n appendDataToSelect(touse, data);\r\n }\r\n\r\n element[stringLinkPicker] = self;\r\n}\r\n","import {\r\n prefix,\r\n DOC,\r\n getClosest,\r\n each,\r\n getFullScreenOverlay,\r\n isSafari,\r\n isIPhone,\r\n isIOS,\r\n uicoreCustomEvent,\r\n setFocus,\r\n getFocusableElements,\r\n isIE,\r\n} from \"./utilities.js\";\r\nimport Collapse from \"./collapse.js\";\r\nimport Dropdown from \"./dropdown.js\";\r\n\r\nexport default function Masthead(element) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n var self = this,\r\n stringMasthead = \"Masthead\",\r\n bottomMenu = element.querySelector(\".\" + prefix + \"msthd-bottom\"),\r\n mouseHover = [\"mouseenter\", \"mouseleave\"],\r\n activeContainerId,\r\n offCanvasMenuBtn,\r\n countryMenuBtn,\r\n fullScreenOverlay,\r\n overlay,\r\n signInText = element.querySelector(\"[data-target=msthd-signin-ctnr] .\" + prefix + \"msthd-label\")\r\n ? element.querySelector(\"[data-target=msthd-signin-ctnr] .\" + prefix + \"msthd-label\").innerHTML\r\n : \"Sign In\",\r\n mediaSize = window.matchMedia(\"(max-width: 991.98px)\"),\r\n // validate with Search Story\r\n // searchClass = \".\" + prefix + \"msthd-search\",\r\n // searchCtnrClass = \".\" + prefix + \"msthd-search-ctnr\",\r\n // search = element.querySelector(searchClass),\r\n // searchCtnr = element.querySelector(searchCtnrClass),\r\n // searchIconCtnr = element.querySelector(\"div[data-toggle='dds__msthd-search']\"),\r\n ////////////////////////////\r\n // handlers\r\n handleMenuItemEvent = function (e) {\r\n e.preventDefault();\r\n var target = e.target.tagName === \"LI\" ? e.target : getClosest(e.target, \"LI\", false);\r\n // openOverLay();\r\n updateMenuHeights(target);\r\n e.stopPropagation();\r\n },\r\n handleMenuCntrEvent = function (e) {\r\n e.preventDefault();\r\n var currentMenu = e.target.tagName === \"UL\" ? e.target : getClosest(e.target, \"UL\", false);\r\n updateMenuHeights(currentMenu);\r\n e.stopPropagation();\r\n },\r\n handleMenuCtnrBlurEvent = function (e) {\r\n var target = e.currentTarget;\r\n var relatedTarget = e.relatedTarget ? e.relatedTarget : DOC.activeElement;\r\n if (!e.currentTarget.contains(relatedTarget)) {\r\n closeMenu(target);\r\n if (\r\n !relatedTarget.classList.contains(prefix + \"msthd-menu-link\") &&\r\n !relatedTarget.classList.contains(prefix + \"msthd-menu-top-link\")\r\n ) {\r\n closeOverLay();\r\n }\r\n }\r\n },\r\n handleMenuHoverInEvent = function (e) {\r\n e.preventDefault();\r\n openOverLay();\r\n e.stopPropagation();\r\n },\r\n handleMenuHoverOutEvent = function (e) {\r\n e.preventDefault();\r\n closeOverLay();\r\n e.stopPropagation();\r\n },\r\n handleMenuItemKeyEvent = function (e) {\r\n var anchor = e.target ? e.target : DOC.activeElement,\r\n item = anchor.parentNode,\r\n menu = item.querySelector(\"ul\") ? item.querySelector(\"ul\") : undefined,\r\n isTop = item.classList.contains(prefix + \"msthd-menu-top-item\"),\r\n nextItem;\r\n switch (e.keyCode) {\r\n case 37: // left key\r\n e.preventDefault();\r\n if (isTop) {\r\n if (\r\n item.previousElementSibling &&\r\n (nextItem = item.previousElementSibling.querySelector(\"a\"))\r\n ) {\r\n nextItem.focus();\r\n }\r\n } else if (item.classList.contains(prefix + \"msthd-menu-item-img\") && item.previousElementSibling) {\r\n item.previousElementSibling.querySelector(\"a\").focus();\r\n } else {\r\n previousItem = closeMenu(item);\r\n\r\n if (previousItem.classList.contains(prefix + \"msthd-menu-top-item\")) {\r\n closeOverLay();\r\n if (previousItem.previousElementSibling) {\r\n previousItem.previousElementSibling.querySelector(\"a\").focus();\r\n } else {\r\n previousItem.querySelector(\"a\").focus();\r\n }\r\n } else {\r\n previousItem.querySelector(\"a\").focus();\r\n updateMenuHeights(previousItem);\r\n }\r\n }\r\n break;\r\n case 38: // up key\r\n e.preventDefault();\r\n if (!isTop) {\r\n if (\r\n item.previousElementSibling &&\r\n (nextItem = item.previousElementSibling.querySelector(\"a\"))\r\n ) {\r\n nextItem.focus();\r\n } else {\r\n item.parentNode.lastElementChild.querySelector(\"a\").focus();\r\n }\r\n }\r\n break;\r\n case 39: // right key\r\n e.preventDefault();\r\n if (isTop) {\r\n if (item.nextElementSibling && (nextItem = item.nextElementSibling.querySelector(\"a\"))) {\r\n nextItem.focus();\r\n }\r\n } else {\r\n if (anchor.querySelector(\"svg\")) {\r\n openMenu([item, menu, anchor]);\r\n if (!isTop) {\r\n updateMenuHeights(item);\r\n }\r\n menu.querySelector(\"a\").focus();\r\n } else if (item.classList.contains(prefix + \"msthd-menu-item-img\") && item.nextElementSibling) {\r\n item.nextElementSibling.querySelector(\"a\").focus();\r\n } else {\r\n do {\r\n previousItem = closeMenu(item);\r\n item = previousItem;\r\n } while (!item.classList.contains(prefix + \"msthd-menu-top-item\"));\r\n closeOverLay();\r\n if (item.nextElementSibling) {\r\n item.nextElementSibling.querySelector(\"a\").focus();\r\n } else {\r\n item.querySelector(\"a\").focus();\r\n }\r\n }\r\n }\r\n break;\r\n case 40: // down key\r\n e.preventDefault();\r\n if (isTop) {\r\n if (!menu) {\r\n item.focus();\r\n } else {\r\n openMenu([item, menu, anchor]);\r\n menu.querySelector(\"a\").focus();\r\n openOverLay();\r\n }\r\n } else {\r\n if (item.nextElementSibling && (nextItem = item.nextElementSibling.querySelector(\"a\"))) {\r\n nextItem.focus();\r\n } else {\r\n item.parentNode.firstElementChild.querySelector(\"a\").focus();\r\n }\r\n }\r\n break;\r\n case 27: // escape key\r\n if (!item.classList.contains(prefix + \"msthd-menu-top-item\")) {\r\n do {\r\n var previousItem = closeMenu(item);\r\n item = previousItem;\r\n } while (!item.classList.contains(prefix + \"msthd-menu-top-item\"));\r\n item.querySelector(\"a\").focus();\r\n }\r\n closeOverLay();\r\n break;\r\n case 13: // enter key\r\n case 32: // space key\r\n if (!menu) {\r\n if (e.keyCode === 13) {\r\n return false;\r\n } else if (e.keyCode === 32) {\r\n // Spacekey scroll down the screen by default, so we need to preventDefault to ensure that this will not happen\r\n e.preventDefault();\r\n e.target.click && e.target.click();\r\n }\r\n } else {\r\n e.preventDefault();\r\n if (item.hasAttribute(\"active\")) {\r\n closeMenu(item);\r\n updateMenuHeights(menu);\r\n } else {\r\n openMenu([item, menu, anchor]);\r\n openOverLay();\r\n if (!isTop) {\r\n updateMenuHeights(item);\r\n }\r\n }\r\n menu.querySelector(\"a\").focus();\r\n }\r\n break;\r\n case 9: //TAB\r\n if (e.shiftKey) {\r\n closeOverLay();\r\n }\r\n break;\r\n }\r\n },\r\n handleIconClickEvent = function (e) {\r\n var button = e.target.tagName === \"BUTTON\" || e.target.tagName === \"A\" ? e.target : e.target.parentNode,\r\n target = button.dataset.target,\r\n container = DOC.getElementById(target),\r\n origContainerId;\r\n\r\n if (activeContainerId) {\r\n origContainerId = activeContainerId;\r\n var activeContainer = DOC.getElementById(activeContainerId);\r\n var activeButton = getClosest(activeContainer, \"BUTTON\", false);\r\n closeContainer(activeButton, activeContainer);\r\n }\r\n if (origContainerId !== target) {\r\n openContainer(target, button, container);\r\n }\r\n },\r\n handleWindowClickEvent = function (e) {\r\n if (activeContainerId) {\r\n var container = DOC.getElementById(activeContainerId),\r\n button = getClosest(container, \"button\", false);\r\n if (!container.contains(e.target) && !button.contains(e.target)) {\r\n closeContainer(button, container);\r\n }\r\n }\r\n },\r\n handleFocusOutEvent = function (e) {\r\n var target = e.relatedTarget ? e.relatedTarget : e.target;\r\n if (activeContainerId) {\r\n var container = DOC.getElementById(activeContainerId),\r\n button = getClosest(container, \"button\", false);\r\n if (target === button) {\r\n return;\r\n } else if (!container.contains(target)) {\r\n closeContainer(button, container);\r\n } else {\r\n window.addEventListener(\"click\", handleWindowClickEvent, false);\r\n }\r\n }\r\n },\r\n handleKeyDownEvent = function (e) {\r\n if (activeContainerId) {\r\n var container = DOC.getElementById(activeContainerId);\r\n var button = getClosest(container, \"button\", false);\r\n\r\n switch (e.keyCode) {\r\n case 9: //TAB\r\n if (e.shiftKey) {\r\n if (\r\n e.target ===\r\n container.querySelectorAll(\r\n \"a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex='0']\"\r\n )[0]\r\n ) {\r\n closeContainer(button, container);\r\n break;\r\n }\r\n }\r\n setTimeout(function () {\r\n if (!container.contains(document.activeElement)) {\r\n closeContainer(button, container);\r\n }\r\n }, 200);\r\n break;\r\n case 27: //ESC\r\n closeContainer(button, container);\r\n button.focus();\r\n break;\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n e.preventDefault();\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n },\r\n openOverLay = function () {\r\n if (overlay) {\r\n if (!overlay.classList.contains(prefix + \"show\")) {\r\n overlay.classList.add(prefix + \"show\");\r\n }\r\n } else {\r\n console.error(\"Please put the overlay in place!\");\r\n }\r\n },\r\n closeOverLay = function () {\r\n if (overlay) {\r\n if (overlay.classList.contains(prefix + \"show\")) {\r\n overlay.classList.remove(prefix + \"show\");\r\n }\r\n } else {\r\n console.error(\"Please put the overlay in place!\");\r\n }\r\n },\r\n closeMenu = function (item) {\r\n var previousMenu = item.tagName === \"LI\" ? item.parentNode : item,\r\n previousItem = previousMenu.parentNode,\r\n previousLink = previousItem.querySelector(\"a\");\r\n\r\n if (previousMenu.hasAttribute(\"style\")) {\r\n previousMenu.removeAttribute(\"style\");\r\n }\r\n\r\n previousItem.removeAttribute(\"active\");\r\n previousMenu.removeAttribute(\"active\");\r\n previousLink.removeAttribute(\"active\");\r\n previousLink.setAttribute(\"aria-expanded\", \"false\");\r\n\r\n return previousItem;\r\n },\r\n openMenu = function (items) {\r\n each(items, function (item) {\r\n item.setAttribute(\"active\", \"\");\r\n if (item.tagName === \"A\") item.setAttribute(\"aria-expanded\", \"true\");\r\n });\r\n },\r\n updateMenuHeights = function (target) {\r\n var currentMenu,\r\n nextMenu,\r\n previousMenu,\r\n prePreviousMenu,\r\n heights = [],\r\n max;\r\n\r\n // do not do logic on a list item image\r\n if (!target.classList.contains(prefix + \"msthd-menu-item-img\")) {\r\n // if a list item is passed\r\n if (target.tagName === \"LI\") {\r\n currentMenu = target.parentNode;\r\n nextMenu = target.querySelector(\"ul\") ? target.querySelector(\"ul\") : undefined;\r\n // if a unordered list is passed\r\n } else {\r\n currentMenu = target;\r\n }\r\n\r\n previousMenu = currentMenu.parentNode.parentNode.classList.contains(prefix + \"msthd-menu-top\")\r\n ? undefined\r\n : currentMenu.parentNode.parentNode;\r\n prePreviousMenu = previousMenu\r\n ? previousMenu.parentNode.parentNode.classList.contains(prefix + \"msthd-menu-top\")\r\n ? undefined\r\n : previousMenu.parentNode.parentNode\r\n : undefined;\r\n\r\n if (!previousMenu) {\r\n if (currentMenu.hasAttribute(\"style\")) {\r\n currentMenu.removeAttribute(\"style\");\r\n }\r\n }\r\n\r\n if (!nextMenu || !nextMenu.classList.contains(prefix + \"msthd-menu-tier-img\")) {\r\n // resst any height style\r\n if (currentMenu.hasAttribute(\"style\")) {\r\n currentMenu.removeAttribute(\"style\");\r\n }\r\n if (nextMenu && nextMenu.hasAttribute(\"style\")) {\r\n nextMenu.removeAttribute(\"style\");\r\n }\r\n if (previousMenu && previousMenu.hasAttribute(\"style\")) {\r\n previousMenu.removeAttribute(\"style\");\r\n }\r\n if (prePreviousMenu && prePreviousMenu.hasAttribute(\"style\")) {\r\n prePreviousMenu.removeAttribute(\"style\");\r\n }\r\n\r\n // find max height\r\n if (currentMenu) heights.push(currentMenu.offsetHeight);\r\n if (nextMenu) heights.push(nextMenu.offsetHeight);\r\n if (previousMenu) heights.push(previousMenu.offsetHeight);\r\n if (prePreviousMenu) heights.push(prePreviousMenu.offsetHeight);\r\n max = Math.max.apply(this, heights);\r\n\r\n // update height style\r\n if (max > 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\r\n .querySelectorAll(\r\n \"a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex='0']\"\r\n )[0]\r\n .focus();\r\n container.addEventListener(\"focusout\", handleFocusOutEvent, true);\r\n }\r\n container.addEventListener(\"keydown\", handleKeyDownEvent, false);\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(\r\n element.querySelectorAll(\"button.\" + prefix + \"msthd-icon-ctnr\", \"a.\" + prefix + \"msthd-icon-ctnr\"),\r\n 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\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 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) {\r\n //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 {\r\n //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(\r\n bottomMenu.querySelectorAll(\".\" + prefix + \"msthd-menu-item , .\" + prefix + \"msthd-menu-item-img\"),\r\n function (menuItem) {\r\n menuItem.querySelector(\"a\").addEventListener(\"keydown\", handleMenuItemKeyEvent, false);\r\n if (window.matchMedia(\"(any-hover: hover)\").matches || isIE) {\r\n //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 {\r\n //Device only capable of touch\r\n menuItem.addEventListener(\"touchstart\", handleMenuItemEvent, false);\r\n }\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) {\r\n //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 {\r\n //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 element[stringMasthead] = self;\r\n}\r\n","/**\r\n * Detect Element Resize\r\n *\r\n * https://github.com/sdecima/javascript-detect-element-resize\r\n * Sebastian Decima\r\n *\r\n * version: 0.5.3\r\n **/\r\nexport default function ResizeElement() {\r\n (function () {\r\n var attachEvent = document.attachEvent,\r\n stylesCreated = false;\r\n\r\n if (!attachEvent) {\r\n var requestFrame = (function () {\r\n var raf =\r\n window.requestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n function (fn) {\r\n return window.setTimeout(fn, 20);\r\n };\r\n return function (fn) {\r\n return raf(fn);\r\n };\r\n })();\r\n\r\n var cancelFrame = (function () {\r\n var cancel =\r\n window.cancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n window.webkitCancelAnimationFrame ||\r\n window.clearTimeout;\r\n return function (id) {\r\n return cancel(id);\r\n };\r\n })();\r\n\r\n var resetTriggers = function (element) {\r\n var triggers = element.__resizeTriggers__,\r\n expand = triggers.firstElementChild,\r\n contract = triggers.lastElementChild,\r\n expandChild = expand.firstElementChild;\r\n contract.scrollLeft = contract.scrollWidth;\r\n contract.scrollTop = contract.scrollHeight;\r\n expandChild.style.width = expand.offsetWidth + 1 + \"px\";\r\n expandChild.style.height = expand.offsetHeight + 1 + \"px\";\r\n expand.scrollLeft = expand.scrollWidth;\r\n expand.scrollTop = expand.scrollHeight;\r\n };\r\n\r\n var checkTriggers = function (element) {\r\n return (\r\n element.offsetWidth != element.__resizeLast__.width ||\r\n element.offsetHeight != element.__resizeLast__.height\r\n );\r\n };\r\n\r\n var scrollListener = function (e) {\r\n var element = this;\r\n resetTriggers(this);\r\n if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__);\r\n this.__resizeRAF__ = requestFrame(function () {\r\n if (checkTriggers(element)) {\r\n element.__resizeLast__.width = element.offsetWidth;\r\n element.__resizeLast__.height = element.offsetHeight;\r\n element.__resizeListeners__.forEach(function (fn) {\r\n fn.call(element, e);\r\n });\r\n }\r\n });\r\n };\r\n\r\n /* Detect CSS Animations support to detect element display/re-attach */\r\n var animation = false,\r\n // animationstring = \"animation\",\r\n keyframeprefix = \"\",\r\n animationstartevent = \"animationstart\",\r\n domPrefixes = \"Webkit Moz O ms\".split(\" \"),\r\n startEvents = \"webkitAnimationStart animationstart oAnimationStart MSAnimationStart\".split(\" \"),\r\n pfx = \"\";\r\n {\r\n var elm = document.createElement(\"fakeelement\");\r\n if (elm.style.animationName !== undefined) {\r\n animation = true;\r\n }\r\n\r\n if (animation === false) {\r\n for (var i = 0; i < domPrefixes.length; i++) {\r\n if (elm.style[domPrefixes[i] + \"AnimationName\"] !== undefined) {\r\n pfx = domPrefixes[i];\r\n // animationstring = pfx + \"Animation\";\r\n keyframeprefix = \"-\" + pfx.toLowerCase() + \"-\";\r\n animationstartevent = startEvents[i];\r\n animation = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n var animationName = \"resizeanim\";\r\n var animationKeyframes =\r\n \"@\" + keyframeprefix + \"keyframes \" + animationName + \" { from { opacity: 0; } to { opacity: 0; } } \";\r\n var animationStyle = keyframeprefix + \"animation: 1ms \" + animationName + \"; \";\r\n }\r\n\r\n var createStyles = function () {\r\n if (!stylesCreated) {\r\n //opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\r\n var css =\r\n (animationKeyframes ? animationKeyframes : \"\") +\r\n \".resize-triggers { \" +\r\n (animationStyle ? animationStyle : \"\") +\r\n \"visibility: hidden; opacity: 0; } \" +\r\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%; }',\r\n head = document.head || document.getElementsByTagName(\"head\")[0],\r\n style = document.createElement(\"style\");\r\n\r\n style.type = \"text/css\";\r\n if (style.styleSheet) {\r\n style.styleSheet.cssText = css;\r\n } else {\r\n style.appendChild(document.createTextNode(css));\r\n }\r\n\r\n head.appendChild(style);\r\n stylesCreated = true;\r\n }\r\n };\r\n\r\n window.addResizeListener = function (element, fn) {\r\n if (attachEvent) element.attachEvent(\"onresize\", fn);\r\n else {\r\n if (!element.__resizeTriggers__) {\r\n if (getComputedStyle(element).position == \"static\") element.style.position = \"relative\";\r\n createStyles();\r\n element.__resizeLast__ = {};\r\n element.__resizeListeners__ = [];\r\n (element.__resizeTriggers__ = document.createElement(\"div\")).className = \"resize-triggers\";\r\n element.__resizeTriggers__.innerHTML =\r\n '
' + '
';\r\n element.appendChild(element.__resizeTriggers__);\r\n resetTriggers(element);\r\n element.addEventListener(\"scroll\", scrollListener, true);\r\n\r\n /* Listen for a css animation to detect element display/re-attach */\r\n animationstartevent &&\r\n element.__resizeTriggers__.addEventListener(animationstartevent, function (e) {\r\n if (e.animationName == animationName) resetTriggers(element);\r\n });\r\n }\r\n element.__resizeListeners__.push(fn);\r\n }\r\n };\r\n\r\n window.removeResizeListener = function (element, fn) {\r\n if (attachEvent) element.detachEvent(\"onresize\", fn);\r\n else {\r\n element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\r\n if (!element.__resizeListeners__.length) {\r\n element.removeEventListener(\"scroll\", scrollListener);\r\n element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);\r\n }\r\n }\r\n };\r\n })();\r\n}\r\n","import {\r\n ariaAnnounce,\r\n classAdd,\r\n classRemove,\r\n createElement,\r\n debounce,\r\n each,\r\n DOC,\r\n getClosest,\r\n getFocusableElements,\r\n getNextFocusableElement,\r\n isIE,\r\n isIOS,\r\n isSafari,\r\n jsonOptionsInit,\r\n one,\r\n prefix,\r\n setFocus,\r\n uicoreCustomEvent,\r\n} from \"./utilities.js\";\r\n\r\nimport Collapse from \"./collapse.js\";\r\nimport ResizeElement from \"./helpers/resizeElement.js\";\r\n\r\nexport function NavAnchored(element) {\r\n // initialization element, the element we spy on\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n var self = this,\r\n items,\r\n tabs,\r\n modalElement,\r\n backButton,\r\n activeTab = null,\r\n focusableEls,\r\n stringNav = \"Nav\",\r\n sticky,\r\n isSticky = false,\r\n targetItems,\r\n tabbing = false,\r\n targetNav,\r\n modalSize = window.matchMedia(\"(max-width: 767.98px)\"),\r\n exitFocus,\r\n // Event Handlers\r\n handleClickEvent = function (e) {\r\n activeTab = e.target;\r\n tabbing = false;\r\n if (modalSize.matches && modalElement && !modalElement.classList.contains(prefix + \"show\")) {\r\n showModal(activeTab);\r\n for (var index = 0; index < items[\"length\"]; index++) {\r\n var item = items[index];\r\n if (index == activeTab.idx) {\r\n activateTab(item);\r\n } else {\r\n deactivateTab(item);\r\n }\r\n }\r\n e.preventDefault();\r\n } else {\r\n window.addEventListener(\"scroll\", handleScrollEvent, false);\r\n if (!isSticky) {\r\n if (isIE) {\r\n element.scrollIntoView(true);\r\n } else {\r\n element.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }\r\n if (isIE) {\r\n targetItems[activeTab.idx].scrollIntoView(true);\r\n } else {\r\n targetItems[activeTab.idx].scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }\r\n },\r\n handleScrollEvent = function () {\r\n var last_known_scroll_position = window.pageYOffset;\r\n stickNav(last_known_scroll_position);\r\n if (!tabbing) {\r\n window.requestAnimationFrame(updateItems);\r\n }\r\n },\r\n stickNav = function (itemTop) {\r\n var targetBottom = targetNav.getBoundingClientRect().bottom,\r\n spacer;\r\n if (itemTop > sticky && 0 <= targetBottom) {\r\n if (!isSticky) {\r\n if (isIE) {\r\n // bug fix for position fixed on IE\r\n spacer = createElement(\"div\", {\r\n class: prefix + \"nav-spacer\",\r\n });\r\n spacer.style.height = element.offsetHeight + \"px\";\r\n setElementWidth(element);\r\n element.parentElement.insertBefore(spacer, element);\r\n }\r\n element.style.zIndex = 1030;\r\n element.classList.add(prefix + \"active\");\r\n isSticky = true;\r\n }\r\n } else {\r\n if (isSticky) {\r\n if (isIE) {\r\n spacer = element.parentElement.querySelector(\".\" + prefix + \"nav-spacer\");\r\n if (spacer) {\r\n element.parentElement.removeChild(spacer);\r\n }\r\n removeElementWidth();\r\n }\r\n element.style.zIndex = \"\";\r\n element.classList.remove(prefix + \"active\");\r\n isSticky = false;\r\n }\r\n }\r\n },\r\n dismissHandler = function (e) {\r\n if (modalElement.classList.contains(prefix + \"show\")) {\r\n hideModal();\r\n e.preventDefault();\r\n setFocus(activeTab);\r\n }\r\n },\r\n handleModalKeydown = function (e) {\r\n var KEY_TAB = 9;\r\n var KEY_ESC = 27;\r\n\r\n switch (e.keyCode) {\r\n case KEY_TAB:\r\n if (focusableEls.length === 1) {\r\n e.preventDefault();\r\n break;\r\n }\r\n if (e.shiftKey) {\r\n handleBackwardTab(e);\r\n } else {\r\n handleForwardTab(e);\r\n }\r\n break;\r\n case KEY_ESC:\r\n hideModal();\r\n setFocus(activeTab);\r\n break;\r\n default:\r\n break;\r\n }\r\n },\r\n showModal = function (item) {\r\n createModal(item);\r\n modalElement.style.display = \"block\";\r\n modalElement.setAttribute(\"aria-hidden\", false);\r\n triggerShow();\r\n modalElement.classList.add(prefix + \"show\");\r\n\r\n if (isSafari && isIOS) {\r\n modalElement.classList.add(prefix + \"is-safari\");\r\n }\r\n\r\n DOC.body.classList.add(prefix + \"modal-open\");\r\n\r\n backButton = modalElement && modalElement.querySelector(\"[data-dismiss='\" + prefix + \"modal']\");\r\n backButton.addEventListener(\"click\", dismissHandler, false);\r\n setFocusableElements();\r\n setTimeout(function () {\r\n setFocus(backButton);\r\n }, 50);\r\n modalElement.addEventListener(\"keydown\", handleModalKeydown);\r\n },\r\n hideModal = function () {\r\n modalElement.classList.add(prefix + \"slide-right\");\r\n modalElement.classList.remove(prefix + \"show\");\r\n modalElement.setAttribute(\"aria-hidden\", true);\r\n if (isSafari && isIOS && modalElement.classList.contains(prefix + \"is-safari\")) {\r\n modalElement.classList.remove(prefix + \"is-safari\");\r\n }\r\n setTimeout(function () {\r\n triggerHide();\r\n\r\n DOC.body.classList.remove(prefix + \"modal-open\");\r\n if (backButton) {\r\n backButton.removeEventListener(\"click\", dismissHandler, false);\r\n }\r\n }, 200);\r\n },\r\n createModal = function (tab) {\r\n var controls = tab.getAttribute(\"aria-controls\");\r\n var isIconElement = tab === tab.parentElement.querySelector(\".dds__icons.dds__chevron-right.dds__tab-icon\");\r\n\r\n if (!controls && isIconElement) {\r\n controls = tab.parentElement.getAttribute(\"aria-controls\");\r\n }\r\n\r\n var tabContent = document.getElementById(controls).innerHTML;\r\n\r\n var modalBody = modalElement.querySelector(\".\" + prefix + \"modal-body\");\r\n modalBody.innerHTML = tabContent;\r\n },\r\n // triggers\r\n triggerShow = function () {\r\n setFocus(modalElement);\r\n },\r\n triggerHide = function () {\r\n modalElement.style.display = \"\";\r\n },\r\n setFocusableElements = function () {\r\n focusableEls = getFocusableElements(modalElement);\r\n modalElement.firstFocusableEl = focusableEls[0];\r\n modalElement.lastFocusableEl = focusableEls[focusableEls.length - 1];\r\n },\r\n handleBackwardTab = function (e) {\r\n if (document.activeElement === modalElement.firstFocusableEl) {\r\n e.preventDefault();\r\n setFocus(modalElement.lastFocusableEl);\r\n }\r\n },\r\n handleForwardTab = function (e) {\r\n if (document.activeElement === modalElement.lastFocusableEl) {\r\n e.preventDefault();\r\n setFocus(modalElement.firstFocusableEl);\r\n }\r\n },\r\n setElementWidth = function (el) {\r\n element.style.width = el.offsetWidth + \"px\";\r\n },\r\n removeElementWidth = function () {\r\n element.style.width = \"\";\r\n },\r\n toggleElementWidth = debounce(function () {\r\n if (isSticky) {\r\n setElementWidth(element.parentElement);\r\n } else {\r\n removeElementWidth();\r\n }\r\n }, 10),\r\n // takes a number to slighly adjust scroll offset if needed\r\n determineSection = function (scrollOffset) {\r\n scrollOffset = scrollOffset || 0;\r\n for (var i = 0; i < targetItems.length; i++) {\r\n if (targetItems[i].getBoundingClientRect().top + scrollOffset > 0) {\r\n return i;\r\n }\r\n }\r\n return targetItems.length >= 1 ? targetItems.length : 1;\r\n },\r\n handleEnterEvent = function (e) {\r\n var target = e.target;\r\n tabbing = true;\r\n if (e.keyCode == 9) {\r\n if (!modalSize.matches) {\r\n var currentSection = determineSection(-5) - 1;\r\n currentSection = currentSection < 0 ? 0 : currentSection;\r\n if (isIE) {\r\n targetItems[target.idx].scrollIntoView(true);\r\n } else {\r\n targetItems[target.idx].scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n toggleTab(tabs[currentSection], tabs[target.idx]);\r\n }\r\n }\r\n tabbing = false;\r\n },\r\n handleKeydownEvent = function (e) {\r\n var key = e.keyCode,\r\n idx = e.target.idx;\r\n\r\n switch (key) {\r\n case 9:\r\n if (!e.shiftKey) {\r\n if (modalSize.matches) {\r\n e.preventDefault();\r\n setFocus(exitFocus);\r\n } else {\r\n tabbing = true;\r\n var focusEl;\r\n each(targetItems, function (target, iter) {\r\n if (iter >= idx && target.focusableEls.length > 0 && !focusEl) {\r\n focusEl = target.focusableEls;\r\n }\r\n });\r\n if (focusEl) {\r\n e.preventDefault();\r\n setFocus(focusEl[0]);\r\n } else if (exitFocus) {\r\n e.preventDefault();\r\n setFocus(exitFocus);\r\n }\r\n }\r\n }\r\n break;\r\n case 13:\r\n case 32: // enter and spacebar keys\r\n e.preventDefault();\r\n tabbing = false;\r\n setFocus(e.target);\r\n e.target.click();\r\n break;\r\n case 35:\r\n e.preventDefault();\r\n setFocus(items[tabs.length - 1]);\r\n items[tabs.length - 1].click();\r\n break;\r\n case 36:\r\n e.preventDefault();\r\n setFocus(items[0]);\r\n items[0].click();\r\n break;\r\n case 39:\r\n e.preventDefault();\r\n if (idx === items.length - 1) {\r\n setFocus(items[0]);\r\n } else {\r\n setFocus(items[idx + 1]);\r\n }\r\n break;\r\n case 37:\r\n e.preventDefault();\r\n if (idx === 0) {\r\n setFocus(items[items.length - 1]);\r\n } else {\r\n setFocus(items[idx - 1]);\r\n }\r\n break;\r\n }\r\n },\r\n updateItems = function () {\r\n var section = determineSection(-5) - 1;\r\n section = section < 0 ? 0 : section;\r\n for (var index = 0; index < items[\"length\"]; index++) {\r\n var item = items[index];\r\n if (isSticky) {\r\n if (index == section) {\r\n activateTab(item);\r\n } else {\r\n deactivateTab(item);\r\n }\r\n } else {\r\n if (index == 0) {\r\n activateTab(item);\r\n } else {\r\n deactivateTab(item);\r\n }\r\n }\r\n }\r\n return item;\r\n },\r\n toggleTab = function (oldItem, newItem) {\r\n deactivateTab(oldItem);\r\n activateTab(newItem);\r\n },\r\n activateTab = function (item) {\r\n item.setAttribute(\"tabindex\", \"0\");\r\n item.classList.add(prefix + \"active\");\r\n item.setAttribute(\"aria-selected\", \"true\");\r\n },\r\n deactivateTab = function (item) {\r\n item.setAttribute(\"tabindex\", \"-1\");\r\n item.classList.remove(prefix + \"active\");\r\n item.setAttribute(\"aria-selected\", \"false\");\r\n },\r\n activateItems = function () {\r\n element.setAttribute(\"style\", \"display: none !important;\");\r\n each(targetItems, function (item) {\r\n item.setAttribute(\"style\", \"display: block;\");\r\n });\r\n };\r\n\r\n // init - prevent adding event handlers twice\r\n if (!(stringNav in element)) {\r\n modalElement = element.dataset[\"target\"] && DOC.getElementById(element.dataset[\"target\"].substr(1));\r\n\r\n targetNav = element.nextElementSibling;\r\n\r\n tabs = element.querySelectorAll(\"li button\");\r\n\r\n sticky = element.getBoundingClientRect().top;\r\n items = [];\r\n targetItems = [];\r\n\r\n if (isIE) {\r\n window.addEventListener(\"resize\", toggleElementWidth, false);\r\n }\r\n\r\n // populate items and targets\r\n for (var i = 0; i < tabs.length; i++) {\r\n tabs[i].idx = i;\r\n items.push(tabs[i]);\r\n items[i].addEventListener(\"click\", handleClickEvent, false);\r\n items[i].addEventListener(\"keydown\", handleKeydownEvent, false);\r\n var panel = document.getElementById(tabs[i].dataset[\"target\"].slice(1));\r\n panel.scrollTop += element.offsetHeight;\r\n panel.focusableEls = getFocusableElements(panel);\r\n each(panel.focusableEls, function (field) {\r\n field.addEventListener(\"keyup\", handleEnterEvent, false);\r\n field.idx = i;\r\n });\r\n targetItems.push(panel);\r\n }\r\n if (targetItems[targetItems.length - 1].focusableEls.length == 0) {\r\n // last panel and no focusable items\r\n DOC.addEventListener(\"DOMContentLoaded\", function () {\r\n // make sure all HTML is available prior to checking\r\n exitFocus = getNextFocusableElement(panel);\r\n });\r\n }\r\n\r\n if (modalSize.matches) {\r\n window.removeEventListener(\"scroll\", handleScrollEvent, false);\r\n if (!modalElement) {\r\n activateItems();\r\n }\r\n } else {\r\n window.addEventListener(\"scroll\", handleScrollEvent, false);\r\n }\r\n modalSize.addListener(function () {\r\n if (!modalSize.matches) {\r\n element.removeAttribute(\"style\");\r\n window.addEventListener(\"scroll\", handleScrollEvent, false);\r\n if (modalElement) {\r\n hideModal();\r\n }\r\n } else {\r\n element.classList.remove(prefix + \"active\");\r\n var spacer = element.parentElement.querySelector(\".\" + prefix + \"nav-spacer\");\r\n if (spacer) {\r\n element.parentElement.removeChild(spacer);\r\n }\r\n window.removeEventListener(\"scroll\", handleScrollEvent, false);\r\n if (!modalElement) {\r\n activateItems();\r\n }\r\n }\r\n });\r\n }\r\n\r\n element[stringNav] = self;\r\n}\r\n\r\nexport function NavSkip(element) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n var self = this,\r\n stringNavSkip = \"NavSkip\",\r\n hiddenZindex = \"-1000\",\r\n visibleZindex = \"1080\",\r\n tabindex,\r\n borderStyle,\r\n dataInset,\r\n // handlers\r\n focusInHandler = function (e) {\r\n if (element === e.target || element.contains(e.target)) {\r\n element.style.zIndex = visibleZindex;\r\n element.style.opacity = \"1\";\r\n each(element.querySelectorAll(\"a.\" + prefix + \"btn\"), function (button) {\r\n button.addEventListener(\"click\", clickHandler, false);\r\n });\r\n }\r\n element.addEventListener(\"focusout\", focusOutHandler);\r\n },\r\n focusOutHandler = function (e) {\r\n var target = e.relatedTarget ? e.relatedTarget : DOC.activeElement;\r\n if (!element.contains(target) && !(element === target)) {\r\n toggleZindex();\r\n }\r\n },\r\n toggleZindex = function () {\r\n element.style.zIndex = hiddenZindex;\r\n element.style.opacity = \"0\";\r\n each(element.querySelectorAll(\"a.\" + prefix + \"btn\"), function (button) {\r\n button.removeEventListener(\"click\", clickHandler, false);\r\n });\r\n element.removeEventListener(\"focusout\", focusOutHandler);\r\n },\r\n clickHandler = function (e) {\r\n // element.style.zIndex = hiddenZindex;\r\n toggleZindex();\r\n var focusElement = document.getElementById(e.target.getAttribute(\"href\").substr(1));\r\n tabindex = focusElement.getAttribute(\"tabIndex\");\r\n if (tabindex !== 0) {\r\n focusElement.setAttribute(\"tabIndex\", \"0\");\r\n }\r\n focusElement.addEventListener(\"focusout\", blurHandler, false);\r\n setTimeout(function () {\r\n focusElement.focus();\r\n }, 100); //firefox needs a little timeout to register tabindex\r\n if (e.target.getAttribute(\"data-inset\") === \"true\") {\r\n //only add special border if pass in this attr\r\n dataInset = true;\r\n borderStyle = focusElement.style.border;\r\n setTimeout(function () {\r\n focusElement.style.border = \"2px inset #000000\";\r\n }, 10);\r\n } else {\r\n dataInset = false;\r\n }\r\n },\r\n blurHandler = function (e) {\r\n if (dataInset) {\r\n e.target.style.border = borderStyle;\r\n }\r\n if (tabindex !== 0) {\r\n tabindex == null ? e.target.removeAttribute(\"tabIndex\") : e.target.setAttribute(\"tabIndex\", tabindex);\r\n }\r\n e.target.removeEventListener(\"focusout\", blurHandler, false); //once one blur event occurs, we want to remove the event listener\r\n };\r\n\r\n // init\r\n if (!(stringNavSkip in element)) {\r\n // prevent adding event handlers twice\r\n element.addEventListener(\"focusin\", focusInHandler);\r\n // window.addEventListener(\"keyup\", keydownZindexHandler);\r\n // var focusableEls = document.querySelectorAll(\"a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex='0']\");\r\n // focusableEls[0].addEventListener(\"keyup\", keydownZindexHandler);\r\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\r\n // On Mac: In System Preferences → Keyboard, in the Shortcuts pane, check the “all controls” radio at the bottom.\r\n // Safari on Mac: additionally, go to safari preferences-> Advanced -> Accessibility \"Press Tab to highlight each item on a webpage\"\r\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.\r\n }\r\n\r\n element[stringNavSkip] = self;\r\n}\r\n\r\nexport function NavAnchoredVertical(element, options) {\r\n // initialization element, the element we spy on\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n var opt = {};\r\n\r\n if (options && Object.keys(options).length) {\r\n opt.showModal = typeof options.showModal === \"boolean\" && options.showModal;\r\n }\r\n\r\n var self = this,\r\n activeCSSClassName = prefix + \"active\",\r\n activeTab = null,\r\n backButton,\r\n exitFocus,\r\n focusableEls,\r\n modalElement,\r\n modalSize = window.matchMedia(\"(max-width: 767.98px)\"),\r\n isSticky = false,\r\n items,\r\n stringNav = \"Nav\",\r\n sticky,\r\n tabs,\r\n targetItems,\r\n tabbing = false,\r\n targetNav,\r\n // Event Handlers\r\n handleClickEvent = function (e) {\r\n var scrollViewType = !isIE ? { behavior: \"smooth\" } : true;\r\n var shouldShowModal =\r\n opt.showModal && modalSize.matches && modalElement && !modalElement.classList.contains(prefix + \"show\");\r\n\r\n var isClickOnIconElement =\r\n e.target === e.target.parentElement.querySelector(\".dds__icons.dds__chevron-right.dds__tab-icon\");\r\n\r\n activeTab = isClickOnIconElement ? e.target.parentElement : e.target;\r\n tabbing = false;\r\n\r\n if (shouldShowModal) {\r\n showModal(activeTab);\r\n for (var index = 0; index < items[\"length\"]; index++) {\r\n var item = items[index];\r\n if (index == activeTab.idx) {\r\n activateTab(item);\r\n } else {\r\n deactivateTab(item);\r\n }\r\n }\r\n return e.preventDefault();\r\n }\r\n\r\n window.addEventListener(\"scroll\", handleScrollEvent, false);\r\n\r\n if (!isSticky) {\r\n element.scrollIntoView(scrollViewType);\r\n }\r\n\r\n targetItems[activeTab.idx].scrollIntoView(scrollViewType);\r\n },\r\n handleScrollEvent = function () {\r\n var lastKnownScrollPosition = window.pageYOffset;\r\n stickNav(lastKnownScrollPosition);\r\n if (!tabbing) {\r\n window.requestAnimationFrame(updateItems);\r\n }\r\n },\r\n stickNav = function (lastKnownScrollPosition) {\r\n // var lastTargetContent = targetItems[targetItems.length - 1];\r\n\r\n var target = targetNav.getBoundingClientRect();\r\n var navPositionCoords = element.parentElement.getBoundingClientRect();\r\n\r\n var navOnTopScreen = navPositionCoords.top <= 0;\r\n var elemClassList = element.classList;\r\n\r\n if (lastKnownScrollPosition > sticky && 0 <= target.bottom) {\r\n elemClassList.add(activeCSSClassName);\r\n element.style.zIndex = 1030;\r\n isSticky = true;\r\n } else if (isSticky) {\r\n elemClassList.remove(activeCSSClassName);\r\n element.style.zIndex = \"\";\r\n isSticky = false;\r\n }\r\n\r\n if (isIE) {\r\n var navItem = element.querySelectorAll(\".dds__nav-anchored-vertical-item\");\r\n var lastNavItem = navItem[navItem.length - 1];\r\n\r\n var positionOflastNavItemBottom = lastNavItem.getBoundingClientRect().bottom;\r\n var negativeTop = target.bottom - lastNavItem.parentElement.getBoundingClientRect().height;\r\n var isNavAfterLastContentBottom = target.bottom >= positionOflastNavItemBottom;\r\n\r\n if (navOnTopScreen) {\r\n element.style.top = isNavAfterLastContentBottom ? \"0px\" : negativeTop + \"px\";\r\n element.style.position = \"fixed\";\r\n element.style.height = target.bottom + \"px\";\r\n\r\n targetNav.style.marginLeft = \"270px\";\r\n return;\r\n }\r\n\r\n element.style.height = \"auto\";\r\n element.style.position = \"relative\";\r\n targetNav.style.marginLeft = \"0\";\r\n }\r\n },\r\n dismissHandler = function (e) {\r\n if (modalElement.classList.contains(prefix + \"show\")) {\r\n hideModal();\r\n e.preventDefault();\r\n setFocus(activeTab);\r\n }\r\n },\r\n handleModalKeydown = function (e) {\r\n var KEY_TAB = 9;\r\n var KEY_ESC = 27;\r\n\r\n switch (e.keyCode) {\r\n case KEY_TAB:\r\n if (focusableEls.length === 1) {\r\n e.preventDefault();\r\n break;\r\n }\r\n if (e.shiftKey) {\r\n handleBackwardTab(e);\r\n } else {\r\n handleForwardTab(e);\r\n }\r\n break;\r\n case KEY_ESC:\r\n hideModal();\r\n setFocus(activeTab);\r\n break;\r\n default:\r\n break;\r\n }\r\n },\r\n showModal = function (item) {\r\n createModal(item);\r\n modalElement.style.display = \"block\";\r\n modalElement.setAttribute(\"aria-hidden\", false);\r\n triggerShow();\r\n modalElement.classList.add(prefix + \"show\");\r\n\r\n if (isSafari && isIOS) {\r\n modalElement.classList.add(prefix + \"is-safari\");\r\n }\r\n\r\n DOC.body.classList.add(prefix + \"modal-open\");\r\n\r\n backButton = modalElement && modalElement.querySelector(\"[data-dismiss='\" + prefix + \"modal']\");\r\n backButton.addEventListener(\"click\", dismissHandler, false);\r\n setFocusableElements();\r\n setTimeout(function () {\r\n setFocus(backButton);\r\n }, 50);\r\n modalElement.addEventListener(\"keydown\", handleModalKeydown);\r\n },\r\n hideModal = function () {\r\n modalElement.classList.add(prefix + \"slide-right\");\r\n modalElement.classList.remove(prefix + \"show\");\r\n modalElement.setAttribute(\"aria-hidden\", true);\r\n if (isSafari && isIOS && modalElement.classList.contains(prefix + \"is-safari\")) {\r\n modalElement.classList.remove(prefix + \"is-safari\");\r\n }\r\n setTimeout(function () {\r\n triggerHide();\r\n\r\n DOC.body.classList.remove(prefix + \"modal-open\");\r\n if (backButton) {\r\n backButton.removeEventListener(\"click\", dismissHandler, false);\r\n }\r\n }, 200);\r\n },\r\n createModal = function (tab) {\r\n var controls = tab.getAttribute(\"aria-controls\");\r\n var isIconElement = tab === tab.parentElement.querySelector(\".dds__icons.dds__chevron-right.dds__tab-icon\");\r\n\r\n if (!controls && isIconElement) {\r\n controls = tab.parentElement.getAttribute(\"aria-controls\");\r\n }\r\n\r\n var tabContent = document.getElementById(controls).innerHTML;\r\n\r\n var modalBody = modalElement.querySelector(\".\" + prefix + \"modal-body\");\r\n modalBody.innerHTML = tabContent;\r\n },\r\n // triggers\r\n triggerShow = function () {\r\n setFocus(modalElement);\r\n },\r\n triggerHide = function () {\r\n modalElement.style.display = \"\";\r\n },\r\n setFocusableElements = function () {\r\n focusableEls = getFocusableElements(modalElement);\r\n modalElement.firstFocusableEl = focusableEls[0];\r\n modalElement.lastFocusableEl = focusableEls[focusableEls.length - 1];\r\n },\r\n handleBackwardTab = function (e) {\r\n if (document.activeElement === modalElement.firstFocusableEl) {\r\n e.preventDefault();\r\n setFocus(modalElement.lastFocusableEl);\r\n }\r\n },\r\n handleForwardTab = function (e) {\r\n if (document.activeElement === modalElement.lastFocusableEl) {\r\n e.preventDefault();\r\n setFocus(modalElement.firstFocusableEl);\r\n }\r\n },\r\n setElementWidth = function (el) {\r\n element.style.width = el.offsetWidth + \"px\";\r\n },\r\n removeElementWidth = function () {\r\n element.style.width = \"\";\r\n },\r\n toggleElementWidth = debounce(function () {\r\n if (isSticky) {\r\n setElementWidth(element.parentElement);\r\n } else {\r\n removeElementWidth();\r\n }\r\n }, 10),\r\n toogleContent = debounce(function () {\r\n each(targetItems, function (panel) {\r\n if (opt.showModal && !modalSize.matches) {\r\n panel.classList.remove(\"modal-off\");\r\n panel.classList.remove(\"modal-on\");\r\n } else {\r\n panel.classList.add(\"modal-off\");\r\n panel.classList.add(\"modal-on\");\r\n }\r\n });\r\n }, 10),\r\n // takes a number to slighly adjust scroll offset if needed\r\n determineSection = function (scrollOffset) {\r\n scrollOffset = scrollOffset || 0;\r\n for (var i = 0; i < targetItems.length; i++) {\r\n if (targetItems[i].getBoundingClientRect().top + scrollOffset > 0) {\r\n return i;\r\n }\r\n }\r\n\r\n return targetItems.length >= 1 ? targetItems.length : 1;\r\n },\r\n handleEnterEvent = function (e) {\r\n var target = e.target;\r\n tabbing = true;\r\n if (e.keyCode == 9) {\r\n if (!modalSize.matches) {\r\n var currentSection = determineSection(-5) - 1;\r\n currentSection = currentSection < 0 ? 0 : currentSection;\r\n if (isIE) {\r\n targetItems[target.idx].scrollIntoView(true);\r\n } else {\r\n targetItems[target.idx].scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n toggleTab(tabs[currentSection], tabs[target.idx]);\r\n }\r\n }\r\n tabbing = false;\r\n },\r\n handleKeydownEvent = function (e) {\r\n var key = e.keyCode,\r\n idx = e.target.idx;\r\n\r\n switch (key) {\r\n case 9:\r\n if (!e.shiftKey) {\r\n if (modalSize.matches) {\r\n e.preventDefault();\r\n setFocus(exitFocus);\r\n } else {\r\n tabbing = true;\r\n var focusEl;\r\n each(targetItems, function (target, iter) {\r\n if (iter >= idx && target.focusableEls.length > 0 && !focusEl) {\r\n focusEl = target.focusableEls;\r\n }\r\n });\r\n if (focusEl) {\r\n e.preventDefault();\r\n setFocus(focusEl[0]);\r\n } else if (exitFocus) {\r\n e.preventDefault();\r\n setFocus(exitFocus);\r\n }\r\n }\r\n }\r\n break;\r\n case 13:\r\n case 32: // enter and spacebar keys\r\n e.preventDefault();\r\n tabbing = false;\r\n setFocus(e.target);\r\n e.target.click();\r\n break;\r\n case 35:\r\n e.preventDefault();\r\n setFocus(items[tabs.length - 1]);\r\n items[tabs.length - 1].click();\r\n break;\r\n case 36:\r\n e.preventDefault();\r\n setFocus(items[0]);\r\n items[0].click();\r\n break;\r\n case 39:\r\n e.preventDefault();\r\n if (idx === items.length - 1) {\r\n setFocus(items[0]);\r\n } else {\r\n setFocus(items[idx + 1]);\r\n }\r\n break;\r\n case 37:\r\n e.preventDefault();\r\n if (idx === 0) {\r\n setFocus(items[items.length - 1]);\r\n } else {\r\n setFocus(items[idx - 1]);\r\n }\r\n break;\r\n }\r\n },\r\n updateItems = function () {\r\n var section = determineSection(-5) - 1;\r\n section = section < 0 ? 0 : section;\r\n for (var index = 0; index < items[\"length\"]; index++) {\r\n var item = items[index];\r\n if (isSticky) {\r\n if (index == section) {\r\n activateTab(item);\r\n } else {\r\n deactivateTab(item);\r\n }\r\n } else {\r\n if (index == 0) {\r\n activateTab(item);\r\n } else {\r\n deactivateTab(item);\r\n }\r\n }\r\n }\r\n return item;\r\n },\r\n toggleTab = function (oldItem, newItem) {\r\n deactivateTab(oldItem);\r\n activateTab(newItem);\r\n },\r\n activateTab = function (item) {\r\n item.setAttribute(\"tabindex\", \"0\");\r\n item.classList.add(prefix + \"active\");\r\n item.setAttribute(\"aria-selected\", \"true\");\r\n },\r\n deactivateTab = function (item) {\r\n item.setAttribute(\"tabindex\", \"-1\");\r\n item.classList.remove(prefix + \"active\");\r\n item.setAttribute(\"aria-selected\", \"false\");\r\n },\r\n activateItems = function () {\r\n element.setAttribute(\"style\", \"display: none !important;\");\r\n each(targetItems, function (item) {\r\n item.setAttribute(\"style\", \"display: none;\");\r\n });\r\n };\r\n\r\n // init - prevent adding event handlers twice\r\n if (!(stringNav in element)) {\r\n modalElement = element.dataset[\"target\"] && DOC.getElementById(element.dataset[\"target\"].substr(1));\r\n\r\n targetNav = element.nextElementSibling;\r\n\r\n tabs = element.querySelectorAll(\"li button\");\r\n sticky = element.getBoundingClientRect().top;\r\n items = [];\r\n targetItems = [];\r\n\r\n // populate items and targets\r\n for (var i = 0; i < tabs.length; i++) {\r\n tabs[i].idx = i;\r\n items.push(tabs[i]);\r\n items[i].addEventListener(\"click\", handleClickEvent, false);\r\n items[i].addEventListener(\"keydown\", handleKeydownEvent, false);\r\n\r\n var panel = document.getElementById(tabs[i].dataset[\"target\"].slice(1));\r\n panel.scrollTop += element.offsetHeight;\r\n panel.focusableEls = getFocusableElements(panel);\r\n\r\n each(panel.focusableEls, function (field) {\r\n field.addEventListener(\"keyup\", handleEnterEvent, false);\r\n field.idx = i;\r\n });\r\n\r\n targetItems.push(panel);\r\n\r\n if (opt.showModal && modalSize.matches) {\r\n panel.classList.add(\"modal-on\");\r\n panel.classList.remove(\"modal-off\");\r\n } else {\r\n panel.classList.add(\"modal-off\");\r\n panel.classList.remove(\"modal-off\");\r\n }\r\n }\r\n\r\n if (targetItems[targetItems.length - 1].focusableEls.length == 0) {\r\n // last panel and no focusable items\r\n DOC.addEventListener(\"DOMContentLoaded\", function () {\r\n // make sure all HTML is available prior to checking\r\n exitFocus = getNextFocusableElement(panel);\r\n });\r\n }\r\n\r\n if (modalSize.matches && !opt.showModal) {\r\n window.removeEventListener(\"scroll\", handleScrollEvent, false);\r\n\r\n if (!modalElement) {\r\n activateItems();\r\n }\r\n\r\n element.setAttribute(\"style\", \"display: none !important;\");\r\n } else {\r\n window.addEventListener(\"scroll\", handleScrollEvent, false);\r\n }\r\n\r\n window.addEventListener(\r\n \"resize\",\r\n function () {\r\n if (modalSize.matches && !opt.showModal) {\r\n return element.setAttribute(\"style\", \"display: none !important;\");\r\n }\r\n\r\n opt.showModal && toogleContent();\r\n\r\n if (isIE) {\r\n opt.showModal && stickNav(window.pageYOffset);\r\n toggleElementWidth();\r\n }\r\n },\r\n false\r\n );\r\n\r\n modalSize.addListener(function () {\r\n if (!modalSize.matches) {\r\n element.removeAttribute(\"style\");\r\n window.addEventListener(\"scroll\", handleScrollEvent, false);\r\n if (modalElement) {\r\n hideModal();\r\n }\r\n } else {\r\n element.classList.remove(prefix + \"active\");\r\n var spacer = element.parentElement.querySelector(\".\" + prefix + \"nav-spacer\");\r\n if (spacer) {\r\n element.parentElement.removeChild(spacer);\r\n }\r\n window.removeEventListener(\"scroll\", handleScrollEvent, false);\r\n if (!modalElement) {\r\n activateItems();\r\n }\r\n }\r\n });\r\n }\r\n\r\n element[stringNav] = self;\r\n}\r\n\r\nexport function NavLeft(element, options) {\r\n // initialization element, the element we spy on\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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.menu = element.dataset.menu ? element.dataset.menu : options.menu ? options.menu : \"navLeft-list\";\r\n options.main = element.dataset.main ? element.dataset.main : options.main ? options.main : null;\r\n options.suffix = element.dataset.suffix ? element.dataset.suffix : options.suffix ? options.suffix : null;\r\n options.arrows = element.dataset.arrows ? element.dataset.arrows : options.arrows ? options.arrows : \"right\"; // can be \"left\", \"right\", or \"center\"\r\n options.selected = element.dataset.selected ? element.dataset.selected : options.selected ? options.selected : null;\r\n options.altmenu = element.dataset.altmenu ? element.dataset.altmenu : options.altmenu ? options.altmenu : null;\r\n options.replace = element.dataset.replace\r\n ? element.dataset.replace == \"true\"\r\n : options.replace\r\n ? options.replace == \"true\"\r\n : false;\r\n\r\n // warn if required options are not provided\r\n if (!options.main) {\r\n throw new Error(\"Left Nav 'main' option must be set.\");\r\n }\r\n\r\n var self = this,\r\n stringNavLeft = \"NavLeft\",\r\n masthead,\r\n desktopLeftNav,\r\n siteBody,\r\n offCanvas,\r\n suffix,\r\n footer,\r\n buttonToggle,\r\n footerHeight,\r\n mastheadHeight,\r\n visibleFooter,\r\n parentAccordions = [],\r\n focusableElms,\r\n KEY_TAB = 9,\r\n KEY_ESC = 27,\r\n defaultMain = options.menu === \"navLeft-list\",\r\n adjustHeightForFooter = function () {\r\n if (!footer) {\r\n return;\r\n }\r\n visibleFooter = document.documentElement.clientHeight - footer.getBoundingClientRect().top;\r\n visibleFooter = visibleFooter < 0 ? 0 : visibleFooter;\r\n var calcHeight = document.documentElement.clientHeight - visibleFooter;\r\n if (visibleFooter > 0) {\r\n buttonToggle.style.height = element.style.height = calcHeight + \"px\";\r\n }\r\n if (suffix) {\r\n if (visibleFooter > 0) {\r\n suffix.style.bottom = visibleFooter + \"px\";\r\n }\r\n desktopLeftNav.style.maxHeight =\r\n document.documentElement.clientHeight - suffix.getBoundingClientRect().height - footerHeight + \"px\";\r\n }\r\n },\r\n adjustHeightForMasthead = function () {\r\n if (!masthead) {\r\n return;\r\n }\r\n var calcHeight;\r\n mastheadHeight = masthead.getBoundingClientRect().height;\r\n if (window.pageYOffset > mastheadHeight) {\r\n // if masthead not is visible\r\n element.style.top = \"0px\";\r\n if (!isFooterVisible()) {\r\n buttonToggle.style.height = element.style.height = document.documentElement.clientHeight + \"px\";\r\n } else {\r\n buttonToggle.style.height = element.style.height =\r\n document.documentElement.clientHeight - visibleFooter + \"px\";\r\n }\r\n } else {\r\n element.style.top = mastheadHeight - window.pageYOffset + \"px\";\r\n if (isFooterVisible()) {\r\n calcHeight =\r\n parseInt(window.getComputedStyle(element).height, 10) - (mastheadHeight - window.pageYOffset);\r\n buttonToggle.style.height = element.style.height = calcHeight + \"px\";\r\n } else {\r\n calcHeight = document.documentElement.clientHeight - mastheadHeight + window.pageYOffset;\r\n buttonToggle.style.height = element.style.height = calcHeight + \"px\";\r\n }\r\n }\r\n },\r\n alignChevrons = function (accordionButtons) {\r\n if (accordionButtons) {\r\n if (options.arrows === \"right\") {\r\n each(accordionButtons, function (accordionButton) {\r\n classAdd(accordionButton, prefix + \"navLeft-button-optionRight\");\r\n });\r\n } else if (options.arrows === \"center\") {\r\n each(accordionButtons, function (accordionButton) {\r\n classAdd(accordionButton, prefix + \"navLeft-button-optionCenter\");\r\n accordionButton.children[1].after(accordionButton.children[0]);\r\n });\r\n }\r\n }\r\n },\r\n cloneLeftNavToOffCanvas = function () {\r\n if (defaultMain && !options.altmenu) {\r\n return;\r\n }\r\n var offCanvasCloneSuffix = \"-offCanvas\";\r\n if (options.altmenu) {\r\n each(DOC.getElementById(options.altmenu).children, function (li) {\r\n offCanvas.leftMenu.querySelector(\"ul\").appendChild(li.cloneNode(true));\r\n });\r\n DOC.getElementById(options.altmenu).parentElement.removeChild(DOC.getElementById(options.altmenu));\r\n } else {\r\n each(element.querySelectorAll(\".\" + prefix + \"navLeft-list>li\"), function (li) {\r\n offCanvas.leftMenu.querySelector(\"ul\").appendChild(li.cloneNode(true));\r\n });\r\n }\r\n each(offCanvas.leftMenu.querySelectorAll(\".\" + prefix + \"accordion\"), function (lnAccordion) {\r\n lnAccordion.id = lnAccordion.id + offCanvasCloneSuffix;\r\n lnAccordion.querySelector(\".\" + prefix + \"accordion-btn\").setAttribute(\r\n \"data-parent\",\r\n lnAccordion\r\n .querySelector(\".\" + prefix + \"accordion-btn\")\r\n .getAttribute(\"data-parent\")\r\n .substr(1) + offCanvasCloneSuffix\r\n );\r\n });\r\n each(offCanvas.leftMenu.querySelectorAll(\".\" + prefix + \"accordion-card-header\"), function (lnCardHeader) {\r\n lnCardHeader.id = lnCardHeader.id + offCanvasCloneSuffix;\r\n lnCardHeader.nextElementSibling.setAttribute(\r\n \"aria-labelledby\",\r\n lnCardHeader.nextElementSibling.getAttribute(\"aria-labelledby\") + offCanvasCloneSuffix\r\n );\r\n });\r\n each(offCanvas.leftMenu.querySelectorAll(\".\" + prefix + \"collapse\"), function (lnCollapse) {\r\n lnCollapse.id = lnCollapse.id + offCanvasCloneSuffix;\r\n if (lnCollapse.previousElementSibling.querySelector(\".\" + prefix + \"accordion-btn\")) {\r\n lnCollapse.previousElementSibling\r\n .querySelector(\".\" + prefix + \"accordion-btn\")\r\n .setAttribute(\r\n \"data-target\",\r\n lnCollapse.previousElementSibling\r\n .querySelector(\".\" + prefix + \"accordion-btn\")\r\n .getAttribute(\"data-target\") + offCanvasCloneSuffix\r\n );\r\n lnCollapse.previousElementSibling\r\n .querySelector(\".\" + prefix + \"accordion-btn\")\r\n .setAttribute(\r\n \"aria-controls\",\r\n lnCollapse.previousElementSibling\r\n .querySelector(\".\" + prefix + \"accordion-btn\")\r\n .getAttribute(\"aria-controls\") + offCanvasCloneSuffix\r\n );\r\n }\r\n });\r\n each(offCanvas.leftMenu.querySelectorAll(\"a\"), function (lnAnchor) {\r\n if (lnAnchor.id) {\r\n lnAnchor.id = lnAnchor.id + offCanvasCloneSuffix;\r\n }\r\n });\r\n\r\n // define focusable offcanvas elements\r\n focusableElms = getFocusableElements(DOC.querySelector(\".\" + prefix + \"msthd-top .\" + prefix + \"navLeft\"));\r\n\r\n // reinit offcanvas collapses\r\n each(offCanvas.leftMenu.querySelectorAll(\"[data-toggle='\" + prefix + \"collapse']\"), function (collapse) {\r\n new Collapse(collapse);\r\n });\r\n },\r\n createOffCanvasMenu = function () {\r\n if (defaultMain && !options.altmenu) {\r\n return;\r\n }\r\n // remove header menu\r\n offCanvas = {\r\n mastheadMend: masthead.querySelectorAll(\".\" + prefix + \"msthd-offcanvas-menu\")[0],\r\n parent: undefined,\r\n storedId: undefined,\r\n leftMenu: element.querySelectorAll(\".\" + prefix + \"msthd-offcanvas-menu\")[0],\r\n };\r\n if (offCanvas.mastheadMend) {\r\n offCanvas.parent = offCanvas.mastheadMend.parentElement;\r\n offCanvas.storedId = offCanvas.mastheadMend.id;\r\n offCanvas.parent.removeChild(offCanvas.mastheadMend);\r\n } else {\r\n throw new Error(\"Left Nav cannot initialize without a masthead component in the header element.\");\r\n }\r\n\r\n // reassign ID to leftNav's offCanvas\r\n offCanvas.leftMenu.id = offCanvas.storedId;\r\n if (offCanvas.parent) {\r\n offCanvas.parent.appendChild(offCanvas.leftMenu);\r\n }\r\n },\r\n expandSelection = function () {\r\n if (!options.selected) {\r\n return;\r\n }\r\n each(parentAccordions, function (stepAccord) {\r\n var aButton = stepAccord.querySelector(\".\" + prefix + \"accordion-btn\"),\r\n aChevron = stepAccord.querySelector(\".\" + prefix + \"accordion-btn i\"),\r\n aCollapse = stepAccord.querySelector(\".\" + prefix + \"collapse\");\r\n aButton.setAttribute(\"aria-expanded\", true);\r\n classAdd(aChevron, prefix + \"navLeft-icon-rotate\");\r\n one(aButton, \"click\", function (event) {\r\n each(\r\n getClosest(event.target, \".\" + prefix + \"accordion\", true).querySelectorAll(\r\n \".\" + prefix + \"accordion-btn i\"\r\n ),\r\n function (thisChevron) {\r\n classRemove(thisChevron, prefix + \"navLeft-icon-rotate\");\r\n }\r\n );\r\n });\r\n aCollapse.setAttribute(\"aria-expanded\", true);\r\n classAdd(aCollapse, prefix + \"show\");\r\n });\r\n\r\n setTimeout(function () {\r\n each(element.querySelectorAll(\".\" + prefix + \"navLeft-list\"), function (list) {\r\n var selectedLink = list.querySelector(\".\" + prefix + \"navLeft-link-selected\");\r\n if (selectedLink) {\r\n selectedLink.scrollIntoView();\r\n }\r\n });\r\n }, 500);\r\n },\r\n handleAdjustmentEvent = function () {\r\n adjustHeightForFooter();\r\n adjustHeightForMasthead();\r\n },\r\n handleBackClick = function () {\r\n var activeContainer = masthead.querySelector(\".\" + prefix + \"msthd-offcanvas-menu\");\r\n var activeButton = masthead.querySelector(\"[data-toggle='\" + prefix + \"msthd-offcanvas']\");\r\n uicoreCustomEvent(\"LeftNav\", \"CloseEvent\", element, { button: activeButton, container: activeContainer });\r\n },\r\n handleOffCanvasKeyDown = function (e) {\r\n switch (e.keyCode) {\r\n case KEY_TAB:\r\n if (focusableElms.length === 1) {\r\n e.preventDefault();\r\n break;\r\n }\r\n if (e.shiftKey) {\r\n handleBackwardTab(e);\r\n } else {\r\n handleForwardTab(e);\r\n }\r\n break;\r\n case KEY_ESC: {\r\n handleBackClick();\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n },\r\n handleBackwardTab = function (e) {\r\n if (DOC.activeElement === focusableElms[0]) {\r\n e.preventDefault();\r\n focusableElms[focusableElms.length - 1].focus();\r\n }\r\n },\r\n handleForwardTab = function (e) {\r\n if (DOC.activeElement === focusableElms[focusableElms.length - 1]) {\r\n e.preventDefault();\r\n focusableElms[0].focus();\r\n }\r\n },\r\n handleOffCanvasItemEsc = function (e) {\r\n switch (e.keyCode) {\r\n case KEY_ESC: {\r\n handleBackClick();\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n },\r\n handleOffCanvasOpenEvent = function () {\r\n each(focusableElms, function (fElement) {\r\n // top level categories\r\n fElement.addEventListener(\"keydown\", handleOffCanvasKeyDown, false);\r\n });\r\n // add eventListener to offCanvas menu choices, but not categories\r\n each(offCanvas.leftMenu.querySelectorAll(\"li a\"), function (aItem) {\r\n aItem.addEventListener(\"keydown\", handleOffCanvasItemEsc);\r\n aItem.addEventListener(\"click\", handleBackClick);\r\n });\r\n each(offCanvas.leftMenu.querySelectorAll(\"li button\"), function (aItem) {\r\n aItem.addEventListener(\"keydown\", handleOffCanvasItemEsc);\r\n });\r\n if (DOC.body.classList.contains(\"user-is-tabbing\")) {\r\n setTimeout(function () {\r\n setFocus(focusableElms[0]);\r\n }, 200);\r\n }\r\n },\r\n handleOffCanvasCloseEvent = function () {\r\n each(focusableElms, function (fElement) {\r\n fElement.removeEventListener(\"keydown\", handleOffCanvasKeyDown, false);\r\n });\r\n each(offCanvas.leftMenu.querySelectorAll(\"li a\"), function (aItem) {\r\n aItem.removeEventListener(\"keydown\", handleOffCanvasItemEsc);\r\n aItem.removeEventListener(\"click\", handleBackClick);\r\n });\r\n each(offCanvas.leftMenu.querySelectorAll(\"li button\"), function (aItem) {\r\n aItem.removeEventListener(\"keydown\", handleOffCanvasItemEsc);\r\n });\r\n if (DOC.body.classList.contains(\"user-is-tabbing\")) {\r\n setTimeout(function () {\r\n setFocus(masthead.querySelector(\"[data-toggle='\" + prefix + \"msthd-offcanvas']\"));\r\n }, 200);\r\n }\r\n ariaAnnounce(\r\n masthead.querySelector(\"[data-toggle='\" + prefix + \"msthd-offcanvas']\").getAttribute(\"aria-label\") +\r\n \" \" +\r\n masthead\r\n .querySelector(\"[data-toggle='\" + prefix + \"msthd-offcanvas']\")\r\n .getAttribute(\"aria-expanded\")\r\n );\r\n },\r\n handleToggleClick = function () {\r\n // active in this case means the site body is fully expanded, or that the leftnav has been altered from its initial state (thus, collapsed)\r\n if (element.classList[\"contains\"](prefix + \"active\")) {\r\n classRemove(element, prefix + \"active\");\r\n classRemove(siteBody, prefix + \"active\");\r\n classRemove(buttonToggle.querySelector(\"svg\"), prefix + \"rotate-180\");\r\n buttonToggle.setAttribute(\"aria-expanded\", \"true\");\r\n element.querySelector(\"#navLeft-list\").style.display = \"\";\r\n } else {\r\n classAdd(element, prefix + \"active\");\r\n classAdd(siteBody, prefix + \"active\");\r\n classAdd(buttonToggle.querySelector(\"svg\"), prefix + \"rotate-180\");\r\n buttonToggle.setAttribute(\"aria-expanded\", \"false\");\r\n element.querySelector(\"#navLeft-list\").style.display = \"none\";\r\n }\r\n setTimeout(function () {\r\n adjustHeightForFooter();\r\n adjustHeightForMasthead();\r\n }, 200);\r\n },\r\n highlightSelection = function () {\r\n if (!options.selected) {\r\n return;\r\n }\r\n var anchortags = DOC.querySelectorAll(\"a[href*='\" + options.selected + \"']\");\r\n each(anchortags, function (tag) {\r\n var ps = tag.parentElement.previousElementSibling;\r\n if (ps && ps.tagName.toLowerCase() === \"li\") {\r\n classAdd(ps, prefix + \"navLeft-link-selectedPrev\");\r\n }\r\n classAdd(tag.parentElement, prefix + \"navLeft-link-selected\");\r\n // take note of parent accordions\r\n var parentAccordion = getClosest(tag, \".\" + prefix + \"accordion\", true);\r\n do {\r\n parentAccordions.push(parentAccordion);\r\n parentAccordion = getClosest(parentAccordion.parentElement, \".\" + prefix + \"accordion\", true);\r\n } while (parentAccordion);\r\n parentAccordions = parentAccordions.reverse();\r\n });\r\n },\r\n isFooterVisible = function () {\r\n return footer ? DOC.body.offsetHeight >= footer.getBoundingClientRect().top : false;\r\n };\r\n\r\n // init\r\n if (!(stringNavLeft in element)) {\r\n // prevents adding event handlers twice\r\n var pageReadyCount = 0,\r\n pageReadyInterval = 50,\r\n maxPageReadyTry = 5000;\r\n // assign global variables\r\n desktopLeftNav = element.querySelector(\".\" + prefix + \"navLeft\");\r\n siteBody = DOC.getElementById(options.main);\r\n buttonToggle = element.querySelector(\".\" + prefix + \"navLeft-btn-toggle\");\r\n\r\n // add event handlers\r\n window.addEventListener(\"scroll\", handleAdjustmentEvent);\r\n window.addEventListener(\"resize\", handleAdjustmentEvent);\r\n if (options.menu.length > 0 || options.altmenu.length > 0) {\r\n // otherwise let masthead continue to manage offcanvas\r\n DOC.addEventListener(\"uicMastheadOffCanvasOpen\", handleOffCanvasOpenEvent, false);\r\n DOC.addEventListener(\"uicMastheadOffCanvasClose\", handleOffCanvasCloseEvent, false);\r\n }\r\n buttonToggle.addEventListener(\"click\", handleToggleClick);\r\n\r\n // adjust initial page elements\r\n if (!defaultMain) {\r\n if (DOC.getElementById(options.menu)) {\r\n DOC.getElementById(options.menu).hidden = true;\r\n } else {\r\n throw new Error(\"Element not found by ID ('\" + options.menu + \"') for left nav menu choices.\");\r\n }\r\n }\r\n if (options.altmenu) {\r\n if (DOC.getElementById(options.altmenu)) {\r\n DOC.getElementById(options.altmenu).hidden = true;\r\n } else {\r\n throw new Error(\r\n \"Element not found by ID ('\" + options.altmenu + \"') for left nav (offcanvas) menu choices.\"\r\n );\r\n }\r\n }\r\n classAdd(siteBody, prefix + \"body-ml-20\");\r\n if (options.suffix) {\r\n suffix = DOC.getElementById(options.suffix);\r\n element.querySelector(\"nav\").appendChild(suffix);\r\n classAdd(suffix, prefix + \"navLeft-suffix\");\r\n }\r\n\r\n // move user's leftNav options into our HTML structure\r\n if (!defaultMain) {\r\n each(DOC.getElementById(\"navLeft-list\").querySelectorAll(\"li\"), function (oneLi) {\r\n oneLi.parentElement.removeChild(oneLi);\r\n });\r\n var developerLinks = DOC.querySelectorAll(\"#\" + options.menu + \">ul>li\").length\r\n ? DOC.querySelectorAll(\"#\" + options.menu + \">ul>li\")\r\n : DOC.querySelectorAll(\"#\" + options.menu + \">li\");\r\n each(developerLinks, function (thisLi) {\r\n element.querySelector(\".\" + prefix + \"navLeft-list\").appendChild(thisLi);\r\n });\r\n DOC.getElementById(options.menu).parentElement.removeChild(DOC.getElementById(options.menu));\r\n }\r\n\r\n // Remove masthead horizontal menu if it exists\r\n if (options.replace) {\r\n var headerHorizontalMenu = DOC.querySelector(\".\" + prefix + \"msthd-navbar-bottom\");\r\n if (headerHorizontalMenu) {\r\n headerHorizontalMenu.parentElement.removeChild(headerHorizontalMenu);\r\n }\r\n }\r\n\r\n // align accordion chevrons\r\n alignChevrons(element.querySelectorAll(\".\" + prefix + \"accordion button\"));\r\n if (options.altmenu) {\r\n alignChevrons(document.getElementById(options.altmenu).querySelectorAll(\".\" + prefix + \"accordion button\"));\r\n }\r\n\r\n // assign global variables that have dependencies\r\n var pageReady = function () {\r\n footer = DOC.querySelector(\"footer\");\r\n masthead = DOC.querySelector(\"header\");\r\n footerHeight = footer.getBoundingClientRect().height;\r\n createOffCanvasMenu();\r\n cloneLeftNavToOffCanvas();\r\n // set initial heights of elements\r\n adjustHeightForFooter();\r\n adjustHeightForMasthead();\r\n element.style.top = mastheadHeight;\r\n if (!isIE) {\r\n // this is a bonus check for guaranteed initial display. IE doesn't Promise, so it's skip IE, or use a polyfill.\r\n Promise.all(\r\n Array.from(DOC.images)\r\n .filter(function (img) {\r\n !img.complete;\r\n })\r\n .map(function (img) {\r\n new Promise(function (resolve) {\r\n {\r\n img.onload = img.onerror = resolve;\r\n }\r\n });\r\n })\r\n ).then(function () {\r\n adjustHeightForFooter();\r\n adjustHeightForMasthead();\r\n });\r\n }\r\n highlightSelection();\r\n expandSelection();\r\n ResizeElement();\r\n };\r\n\r\n // wait for header and footer. Will be instant unless page load time is abnormally lengthy\r\n var waitForLeftNav = function () {\r\n if (pageReadyCount < maxPageReadyTry) {\r\n if (DOC.querySelector(\"footer\") && DOC.querySelector(\"header\")) {\r\n setTimeout(pageReady, pageReadyInterval);\r\n } else {\r\n setTimeout(waitForLeftNav, pageReadyInterval);\r\n }\r\n pageReadyCount += pageReadyInterval;\r\n } else {\r\n throw new Error(\"Unable to initialize Left Nav component due to page load timeout.\");\r\n }\r\n };\r\n\r\n waitForLeftNav();\r\n }\r\n\r\n element[stringNavLeft] = self;\r\n}\r\n","import {\r\n DOC,\r\n prefix,\r\n createElement,\r\n isArray,\r\n uicoreCustomEvent,\r\n isIE,\r\n each,\r\n validateNum,\r\n renderSvg,\r\n flush,\r\n} from \"./utilities.js\";\r\n\r\nexport default function Pagination(element, options) {\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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 =\r\n 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 =\r\n 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 =\r\n options.disablePaginationInput != null && typeof options.disablePaginationInput === \"boolean\"\r\n ? options.disablePaginationInput\r\n : 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, {\r\n page: target.dataset[\"page\"],\r\n perPage: options.perPage,\r\n pages: totalPages,\r\n });\r\n }\r\n\r\n (focusBtn = pagination.querySelector('[aria-label=\"' + name + '\"]')), focusBtn.focus();\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, {\r\n page: e.target.value,\r\n perPage: options.perPage,\r\n pages: totalPages,\r\n });\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, {\r\n page: currentPage,\r\n perPage: options.perPage,\r\n pages: totalPages,\r\n });\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, {\r\n page: currentPage,\r\n perPage: options.perPage,\r\n pages: totalPages,\r\n });\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, {\r\n page: currentPage,\r\n perPage: options.perPage,\r\n pages: totalPages,\r\n });\r\n }\r\n },\r\n renderSelect = function () {\r\n var el = element.querySelector(\".\" + prefix + \"perpage\");\r\n if (el) {\r\n flush(el, isIE);\r\n }\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 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 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 * 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 newPage = validateNum(num);\r\n\r\n if (!newPage || newPage == currentPage || newPage > totalPages || newPage < 0) {\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 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 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 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}\r\n","import {\r\n DOC,\r\n emulateTransitionEnd,\r\n globalObject,\r\n getClosest,\r\n prefix,\r\n styleTip,\r\n uicoreCustomEvent,\r\n getFullScreenOverlay,\r\n createElement,\r\n jsonOptionsInit,\r\n} from \"./utilities.js\";\r\n\r\nexport default function Popover(element, options) {\r\n // initialization element\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n options = options || {};\r\n options = jsonOptionsInit(element, options);\r\n options.delay = element.dataset.delay\r\n ? parseInt(element.dataset.delay)\r\n : options.delay\r\n ? parseInt(options.delay)\r\n : 10;\r\n options.title = element.dataset.title ? element.dataset.title : options.data_title ? options.data_title : null;\r\n options.content = element.dataset.content\r\n ? element.dataset.content\r\n : options.data_content\r\n ? options.data_content\r\n : null;\r\n options.placement = element.dataset.placement\r\n ? element.dataset.placement\r\n : options.data_placement\r\n ? options.data_placement\r\n : null;\r\n options.container = element.dataset.container\r\n ? element.dataset.container\r\n : options.container\r\n ? options.container\r\n : DOC.body;\r\n\r\n // validate options\r\n (function () {\r\n if (options.title == null || options.title === \"\") {\r\n throw new Error(\"There was a problem found with title value, please correct and try again\");\r\n }\r\n if (options.content == null || options.content === \"\") {\r\n throw new Error(\"There was a problem found with content 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 // DATA API\r\n var self = this,\r\n popoverString = \"Popover\",\r\n container = DOC.body,\r\n overlay = getFullScreenOverlay(),\r\n popoverArrow = null,\r\n popoverCloseBtn = null,\r\n popoverFocusTrap = null,\r\n positionCalc = true,\r\n smallMedia = window.matchMedia(\"(max-width: 767.98px)\"),\r\n popover = null,\r\n popoverModal = null,\r\n visible = false,\r\n isHiding = false,\r\n showTimeout = null,\r\n hideTimeout = null,\r\n // handlers\r\n triggerHandler = function (e) {\r\n self.toggle();\r\n e.preventDefault();\r\n },\r\n blurHandler = function (e) {\r\n // setTimeout is important here because when you tab with keyboard,\r\n // activeElement is not consistently updated until the blur event has been processed\r\n setTimeout(function () {\r\n if (DOC.activeElement === element) return;\r\n if (popover && !popover.contains(DOC.activeElement)) {\r\n self.hide();\r\n element.focus();\r\n e.preventDefault();\r\n }\r\n }, 10);\r\n },\r\n windowBlurHandler = function () {\r\n self.hide();\r\n },\r\n closeBtnHandler = function (e) {\r\n self.hide();\r\n element.focus();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n },\r\n focusTrapHandler = function (e) {\r\n self.hide();\r\n element.focus();\r\n e.preventDefault();\r\n },\r\n keyHandler = function (e) {\r\n if (e.keyCode === 27 && e.type === \"keydown\") {\r\n //esc\r\n element.focus();\r\n self.hide();\r\n e.preventDefault();\r\n } else if (e.keyCode === 13 && e.type === \"keydown\") {\r\n //enter\r\n if (e.currentTarget.classList.contains(prefix + \"close\")) {\r\n self.hide();\r\n element.focus();\r\n e.preventDefault();\r\n }\r\n } else if ((e.keyCode === 9) & (e.type === \"keydown\")) {\r\n //tab out\r\n if (e.shiftKey && e.srcElement.classList.contains(prefix + \"popover\")) {\r\n self.hide();\r\n element.focus();\r\n e.preventDefault();\r\n }\r\n }\r\n },\r\n createPopover = function () {\r\n //create popover divs\r\n var popoverDialog = null,\r\n popoverTitleDiv = null,\r\n popoverTitle = null,\r\n popoverContent = null,\r\n popoverParagraph = null;\r\n\r\n popover = createElement(\"div\", {\r\n class: prefix + \"modal-dialog\",\r\n tabindex: \"0\",\r\n role: \"dialog\",\r\n });\r\n\r\n popoverDialog = createElement(\"div\", {\r\n class: prefix + \"popover-dialog\",\r\n });\r\n popover.appendChild(popoverDialog);\r\n\r\n //create popover arrow\r\n popoverArrow = createElement(\"div\", {\r\n class: prefix + \"arrow\",\r\n });\r\n popover.appendChild(popoverArrow);\r\n\r\n //set popover title container\r\n popoverTitleDiv = createElement(\"div\", {\r\n class: prefix + \"popover-title-container \" + prefix + \"d-flex\",\r\n });\r\n\r\n popoverDialog.appendChild(popoverTitleDiv);\r\n\r\n popoverTitle = createElement(\"h3\", {\r\n class: prefix + \"popover-header \" + prefix + \"bold-16\",\r\n html: options.title,\r\n });\r\n popoverTitleDiv.appendChild(popoverTitle);\r\n\r\n //set popover body content\r\n popoverContent = createElement(\"div\", {\r\n class: prefix + \"popover-body\",\r\n });\r\n\r\n popoverParagraph = createElement(\"p\", {\r\n html: options.content,\r\n });\r\n\r\n popoverDialog.appendChild(popoverContent);\r\n popoverContent.appendChild(popoverParagraph);\r\n\r\n //create close button\r\n popoverCloseBtn = createElement(\"button\", {\r\n class: prefix + \"close\" + \" \" + prefix + \"icons \" + prefix + \"close-x \" + prefix + \"position-absolute\",\r\n tabindex: \"0\",\r\n aria_label: \"Close Popover\",\r\n data_dismiss: prefix + \"popover\",\r\n });\r\n\r\n popoverTitleDiv.appendChild(popoverCloseBtn);\r\n\r\n popoverFocusTrap = createElement(\"div\", {\r\n tabindex: \"0\",\r\n });\r\n\r\n popover.appendChild(popoverFocusTrap);\r\n\r\n //append to the container\r\n if (smallMedia.matches) {\r\n popoverModal = createElement(\"div\", {\r\n class: prefix + \"modal\",\r\n });\r\n popoverModal.style.display = \"block\";\r\n\r\n DOC.body.classList.add(prefix + \"modal-open\");\r\n popoverModal.appendChild(popover);\r\n element.parentNode.insertBefore(popoverModal, element);\r\n } else {\r\n container.insertBefore(popover, container.firstChild);\r\n }\r\n\r\n var popoverClasses = [\r\n prefix + \"popover\",\r\n prefix + \"bs-popover-\" + options.placement,\r\n prefix + \"fade\",\r\n prefix + \"rounded-0\",\r\n ];\r\n\r\n popover.setAttribute(\"class\", popoverClasses.join(\" \"));\r\n },\r\n removePopover = function () {\r\n var popoverParent = popover.parentNode;\r\n\r\n // if popover has the dds__modal, then access it's parent to remove the whole node\r\n if (popoverParent.getAttribute(\"class\") === prefix + \"modal\") {\r\n popoverParent.parentNode.removeChild(popoverParent);\r\n } else {\r\n container.removeChild(popover);\r\n }\r\n popover = null;\r\n DOC.body.classList.remove(prefix + \"modal-open\");\r\n },\r\n createOverlay = function () {\r\n if (overlay) {\r\n overlay.classList.add(prefix + \"show\");\r\n overlay.removeAttribute(\"hidden\");\r\n overlay.style.visibility = \"hidden\";\r\n } else {\r\n console.warn(\r\n \"POPOVER: Overlay requested. Corresponding HTML missing. Please apply 'dds__overlay' to a div\"\r\n );\r\n }\r\n },\r\n removeOverlay = function () {\r\n if (overlay) overlay.classList.remove(prefix + \"show\");\r\n },\r\n showPopover = function () {\r\n if (!popover.classList.contains(prefix + \"show\")) popover.classList.add(prefix + \"show\");\r\n },\r\n hidePopover = function () {\r\n if (popover.classList.contains(prefix + \"show\")) popover.classList.remove(prefix + \"show\");\r\n },\r\n updatePopover = function () {\r\n if (positionCalc) {\r\n styleTip(element, popover, options.placement, container);\r\n } else {\r\n popover.style.cssText = \"\";\r\n }\r\n },\r\n // triggers\r\n showTrigger = function () {\r\n uicoreCustomEvent(\"Popover\", \"Shown\", element);\r\n },\r\n hideTrigger = function () {\r\n if (visible) removePopover();\r\n visible = false;\r\n isHiding = false;\r\n uicoreCustomEvent(\"Popover\", \"Hidden\", element);\r\n },\r\n positionCalculation = function (e) {\r\n if (e.matches) {\r\n positionCalc = false;\r\n } else {\r\n positionCalc = true;\r\n }\r\n };\r\n\r\n // public methods / handlers\r\n this.toggle = function () {\r\n if (visible) {\r\n self.hide();\r\n } else {\r\n self.show();\r\n }\r\n };\r\n\r\n this.show = function () {\r\n if (visible || isHiding) return;\r\n visible = true;\r\n\r\n createPopover();\r\n createOverlay();\r\n updatePopover();\r\n\r\n clearTimeout(showTimeout);\r\n showTimeout = setTimeout(function () {\r\n showPopover();\r\n\r\n popover.focus();\r\n popover.addEventListener(\"blur\", blurHandler, false);\r\n popover.addEventListener(\"keydown\", keyHandler, false);\r\n popoverFocusTrap.addEventListener(\"focus\", focusTrapHandler, false);\r\n popoverCloseBtn.addEventListener(\"click\", closeBtnHandler, false);\r\n\r\n window.addEventListener(\"blur\", windowBlurHandler, false);\r\n globalObject.addEventListener(\"resize\", self.toggle, false);\r\n\r\n uicoreCustomEvent(\"Popover\", \"ShowEvent\", element);\r\n emulateTransitionEnd(popover, showTrigger);\r\n }, options.delay);\r\n };\r\n\r\n this.hide = function () {\r\n if (!visible || isHiding) return;\r\n isHiding = true;\r\n\r\n clearTimeout(hideTimeout);\r\n hideTimeout = setTimeout(function () {\r\n hidePopover();\r\n removeOverlay();\r\n\r\n popover.removeEventListener(\"blur\", blurHandler, false);\r\n popover.removeEventListener(\"keydown\", keyHandler, false);\r\n popoverFocusTrap.removeEventListener(\"focus\", focusTrapHandler, false);\r\n popoverCloseBtn.removeEventListener(\"click\", closeBtnHandler, false);\r\n\r\n window.removeEventListener(\"blur\", windowBlurHandler, false);\r\n globalObject.removeEventListener(\"resize\", self.toggle, false);\r\n\r\n uicoreCustomEvent(\"Popover\", \"HideEvent\", element);\r\n emulateTransitionEnd(popover, hideTrigger);\r\n }, options.delay);\r\n };\r\n\r\n this.update = function () {\r\n updatePopover();\r\n };\r\n\r\n // init\r\n if (!(popoverString in element)) {\r\n // prevent adding event handlers twice\r\n element.addEventListener(\"click\", triggerHandler, false);\r\n positionCalculation(smallMedia);\r\n smallMedia.addListener(positionCalculation);\r\n }\r\n\r\n element[popoverString] = self;\r\n}\r\n","import {\r\n createElement,\r\n prefix,\r\n uicoreCustomEvent,\r\n each,\r\n jsonOptionsInit,\r\n debounce,\r\n isIE,\r\n isSafari,\r\n isEdge,\r\n} from \"./utilities.js\";\r\n\r\nexport default function ProductStack(element, options) {\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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 options.type = options.type ? options.type : \"single\";\r\n\r\n var stringProductStack = \"ProductStack\",\r\n itemsView,\r\n currentOffset,\r\n overflowContainer,\r\n childrenWidth,\r\n productStacks,\r\n rightCtrls,\r\n leftCtrls,\r\n productStackID,\r\n // handlers\r\n resizeHandler = function () {\r\n updateSectionHeights();\r\n updateItemsView();\r\n },\r\n controlClick = function (e) {\r\n var increment = childrenWidth;\r\n if (options.type == \"page\") {\r\n // increment = overflowContainer.offsetWidth;\r\n var leftNumber = Math.ceil((overflowContainer.scrollLeft - 5) / childrenWidth) + 1;\r\n var rightNumber = Math.floor(\r\n (overflowContainer.scrollLeft + overflowContainer.offsetWidth + 5) / childrenWidth\r\n );\r\n if (rightNumber - leftNumber <= 0) {\r\n increment = childrenWidth;\r\n } else {\r\n increment = childrenWidth * (rightNumber - leftNumber + 1);\r\n }\r\n }\r\n\r\n var isRight =\r\n e.target.classList.contains(prefix + \"overflow-control-right\") ||\r\n e.target.parentElement.classList.contains(prefix + \"overflow-control-right\")\r\n ? true\r\n : false;\r\n\r\n if (isRight) {\r\n if (\r\n currentOffset + increment <\r\n childrenWidth * productStacks.length - overflowContainer.offsetWidth - 1\r\n ) {\r\n currentOffset += increment;\r\n } else {\r\n currentOffset = childrenWidth * productStacks.length - overflowContainer.offsetWidth;\r\n }\r\n } else {\r\n if (currentOffset - increment > 1) {\r\n currentOffset -= increment;\r\n } else {\r\n currentOffset = 0;\r\n }\r\n }\r\n if (isIE || isSafari || isEdge) {\r\n overflowContainer.scrollLeft = currentOffset;\r\n } else {\r\n overflowContainer.scroll({ top: 0, left: currentOffset, behavior: \"smooth\" });\r\n }\r\n updateItemsView();\r\n },\r\n updateSectionHeights = function () {\r\n element.getElementsByTagName(\"style\")[0].innerHTML = \"\";\r\n childrenWidth = productStacks[0].parentElement.offsetWidth;\r\n // tallestSections can be used in the future to optimize the performace on resize\r\n // var tallestSections = [];\r\n each(productStacks[0].sections, function (section) {\r\n // to optimize, we can extract querySelectorAll outside and save it somewhere instead of doing it over and over\r\n var sectionName = \".\" + section.className.replace(/\\s/g, \".\");\r\n var sectionMatches = element.querySelectorAll(sectionName);\r\n if (sectionMatches.length > 1) {\r\n var maxHeight = 0;\r\n each(sectionMatches, function (sectionMatch) {\r\n if (sectionMatches.style) {\r\n sectionMatches.removeAttribute(\"style\");\r\n }\r\n if (sectionMatch.offsetHeight > maxHeight) {\r\n maxHeight = sectionMatch.offsetHeight;\r\n } else if (sectionMatch.offsetHeight == 0) {\r\n sectionMatch.nextElementSibling.style.visibility = \"hidden\";\r\n }\r\n });\r\n var styleTag = element.getElementsByTagName(\"style\")[0].innerHTML;\r\n element.getElementsByTagName(\"style\")[0].innerHTML =\r\n styleTag + \"#\" + productStackID + \" \" + sectionName + \"{ height: \" + maxHeight + \"px }\";\r\n }\r\n });\r\n },\r\n updateItemsView = function () {\r\n //can be optimized later on to avoid cycling through all sections to generate stylesheet\r\n // adding and subtracting 5 pixels for flexibility on non-integer scrollLeft\r\n if (itemsView) {\r\n var leftNumber = Math.ceil((overflowContainer.scrollLeft - 5) / childrenWidth) + 1;\r\n var rightNumber = Math.floor(\r\n (overflowContainer.scrollLeft + overflowContainer.offsetWidth + 5) / childrenWidth\r\n );\r\n each(itemsView, function (view) {\r\n view.innerHTML =\r\n \"\" +\r\n leftNumber +\r\n (leftNumber < rightNumber ? \" - \" + Math.min(rightNumber, productStacks.length) : \"\") +\r\n \" of \" +\r\n productStacks.length +\r\n \"\";\r\n });\r\n uicoreCustomEvent(\"ProductStack\", \"ChangeEvent\", element, {\r\n left: leftNumber,\r\n right: rightNumber,\r\n totalItems: productStacks.length,\r\n });\r\n if (leftNumber <= 1) {\r\n each(leftCtrls, function (leftCtrl) {\r\n leftCtrl.setAttribute(\"disabled\", \"\");\r\n });\r\n } else {\r\n each(leftCtrls, function (leftCtrl) {\r\n leftCtrl.removeAttribute(\"disabled\");\r\n });\r\n }\r\n if (rightNumber >= productStacks.length) {\r\n each(rightCtrls, function (rightCtrl) {\r\n rightCtrl.setAttribute(\"disabled\", \"\");\r\n });\r\n } else {\r\n each(rightCtrls, function (rightCtrl) {\r\n rightCtrl.removeAttribute(\"disabled\");\r\n });\r\n }\r\n if (rightCtrls[0].disabled && leftCtrls[0].disabled) {\r\n each(rightCtrls, function (rightCtrl) {\r\n rightCtrl.style.display = \"none\";\r\n });\r\n each(leftCtrls, function (leftCtrl) {\r\n leftCtrl.style.display = \"none\";\r\n });\r\n each(itemsView, function (viewDiv) {\r\n viewDiv.style.display = \"none\";\r\n });\r\n } else {\r\n each(rightCtrls, function (rightCtrl) {\r\n rightCtrl.style.display = \"block\";\r\n });\r\n each(leftCtrls, function (leftCtrl) {\r\n leftCtrl.style.display = \"block\";\r\n });\r\n each(itemsView, function (viewDiv) {\r\n viewDiv.style.display = \"block\";\r\n });\r\n }\r\n }\r\n };\r\n\r\n this.lazyLoad = function () {\r\n if (options.lazyload) {\r\n updateSectionHeights();\r\n updateItemsView();\r\n uicoreCustomEvent(\"ProductStack\", \"LazyLoadEvent\", element, { success: true });\r\n } else {\r\n uicoreCustomEvent(\"ProductStack\", \"LazyLoadEvent\", element, {\r\n success: false,\r\n msg: \"Carousel cannot be lazy loaded. Check usage or avoid mulitple lazy loads.\",\r\n });\r\n }\r\n };\r\n\r\n // prevent adding event handlers twice\r\n if (!(stringProductStack in element)) {\r\n productStackID = element.id ? element.id : \"product-stack\";\r\n var style = createElement(\"style\");\r\n style.type = \"text/css\";\r\n element.insertBefore(style, element.firstElementChild);\r\n productStacks = element.querySelectorAll(\"UL.\" + prefix + \"product-stack\");\r\n each(productStacks, function (productStack) {\r\n productStack.sections = [];\r\n var i = 0;\r\n each(productStack.children, function (section) {\r\n if (section.tagName == \"LI\") {\r\n section.classList.add(prefix + \"ps-row-\" + i++);\r\n productStack.sections.push(section);\r\n }\r\n });\r\n });\r\n itemsView = element.parentElement.querySelectorAll(\"DIV.\" + prefix + \"items-view\");\r\n overflowContainer = element.querySelector(\".\" + prefix + \"product-stack-wrapper\");\r\n overflowContainer.addEventListener(\r\n \"scroll\",\r\n debounce(function () {\r\n if (overflowContainer.scrollLeft != currentOffset) {\r\n updateItemsView();\r\n currentOffset = overflowContainer.scrollLeft;\r\n }\r\n }),\r\n 15\r\n );\r\n window.addEventListener(\"load\", updateSectionHeights, false);\r\n window.addEventListener(\"resize\", debounce(resizeHandler, 15));\r\n childrenWidth = element.querySelector(\".\" + prefix + \"product-stack\").parentElement.offsetWidth;\r\n rightCtrls = element.querySelectorAll(\"[data-toggle='\" + prefix + \"product-stack-control-right']\");\r\n each(rightCtrls, function (rightCtrl) {\r\n rightCtrl.addEventListener(\"click\", controlClick, true);\r\n });\r\n leftCtrls = element.querySelectorAll(\"[data-toggle='\" + prefix + \"product-stack-control-left']\");\r\n each(leftCtrls, function (leftCtrl) {\r\n leftCtrl.addEventListener(\"click\", controlClick, true);\r\n leftCtrl.setAttribute(\"disabled\", \"\");\r\n });\r\n if (isEdge) {\r\n rightCtrls[0].addEventListener(\r\n \"keydown\",\r\n function (e) {\r\n setTimeout(function () {\r\n if ((e.keyCode == 13 || e.keyCode == 32) && rightCtrls[0].disabled) {\r\n e.preventDefault();\r\n leftCtrls[0].focus();\r\n }\r\n }, 100);\r\n },\r\n false\r\n );\r\n leftCtrls[0].addEventListener(\r\n \"keydown\",\r\n function (e) {\r\n setTimeout(function () {\r\n if ((e.keyCode == 13 || e.keyCode == 32) && leftCtrls[0].disabled) {\r\n e.preventDefault();\r\n rightCtrls[0].focus();\r\n }\r\n }, 100);\r\n },\r\n false\r\n );\r\n leftCtrls[1].addEventListener(\r\n \"keydown\",\r\n function (e) {\r\n setTimeout(function () {\r\n if ((e.keyCode == 13 || e.keyCode == 32) && leftCtrls[1].disabled) {\r\n e.preventDefault();\r\n rightCtrls[1].focus();\r\n }\r\n }, 100);\r\n },\r\n false\r\n );\r\n rightCtrls[1].addEventListener(\r\n \"keydown\",\r\n function (e) {\r\n setTimeout(function () {\r\n if ((e.keyCode == 13 || e.keyCode == 32) && rightCtrls[1].disabled) {\r\n e.preventDefault();\r\n leftCtrls[1].focus();\r\n }\r\n }, 100);\r\n },\r\n false\r\n );\r\n }\r\n currentOffset = overflowContainer.scrollLeft;\r\n updateItemsView();\r\n }\r\n\r\n element[stringProductStack] = self;\r\n}\r\n","import { validateNum, jsonOptionsInit } from \"./utilities\";\r\n\r\nexport default function Progress(element, options) {\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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.showText = element.dataset.showtext\r\n ? element.dataset.showtext == \"true\"\r\n ? true\r\n : false\r\n : options.showtext == \"true\"\r\n ? true\r\n : false;\r\n options.timeToComplete = element.dataset.timeToComplete\r\n ? validateNum(element.dataset.timeToComplete, 10000)\r\n : validateNum(options.timeToComplete, 10000);\r\n\r\n // this defines how chunky you want the increment block to be the smaller the increment, the smoother it is,\r\n // however, it will impact minimum time to complete depending on client's machine's performance\r\n var increment = 0.25,\r\n timeToComplete = options.timeToComplete,\r\n millisecondPerTick = timeToComplete / (100.0 / increment),\r\n width = 0,\r\n id,\r\n stringProgress = \"Progress\",\r\n frame = function () {\r\n if (width < 100.0) {\r\n width += increment;\r\n element.style.width = width + \"%\";\r\n element.setAttribute(\"aria-valuenow\", Math.round(width));\r\n } else {\r\n element.style.width = \"100%\";\r\n clearInterval(id);\r\n }\r\n if (options.showText) {\r\n element.innerHTML = width < 100 ? Math.round(width) + \"%\" : \"100%\";\r\n }\r\n };\r\n\r\n // init\r\n if (!(stringProgress in element)) {\r\n setInterval(frame, millisecondPerTick);\r\n }\r\n\r\n element[stringProgress] = self;\r\n}\r\n","import { uicoreCustomEvent, prefix, DOC, offWindowLeft, createElement, isIE, isArray, each } from \"./utilities\";\r\n\r\nexport default function Slider(element, optionsInput) {\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return false;\r\n })();\r\n\r\n var isJson = false,\r\n jsonParams = element.dataset.slider;\r\n if (jsonParams) {\r\n optionsInput = JSON.parse(jsonParams);\r\n isJson = true;\r\n }\r\n var options = optionsInput || {};\r\n\r\n // User supplied\r\n options.animate = typeof options.animate == \"boolean\" ? options.animate : true;\r\n options.animationDuration = typeof options.animationDuration == \"number\" ? options.animationDuration : 300;\r\n options.ort = options.orientation ? (options.orientation === \"vertical\" ? 1 : 0) : 0;\r\n options.dir = options.direction ? (options.direction === \"rtl\" ? 1 : 0) : options.ort == 1 ? 1 : 0;\r\n options.singleStep = typeof options.step == \"number\" ? options.step : undefined;\r\n options.percision = typeof options.percision == \"number\" ? (options.percision > 2 ? 2 : options.percision) : 0;\r\n // User supplied but heeds more calculations at see validateOptions\r\n options.behaviour = options.behaviour ? options.behaviour : \"tap\";\r\n options.margin = typeof options.margin == \"number\" ? options.margin : 1;\r\n options.limit = typeof options.limit == \"number\" ? options.limit : 0;\r\n options.padding = options.padding ? options.padding : 0;\r\n options.tooltips = typeof options.tooltips == \"boolean\" ? options.tooltips : true;\r\n options.content = typeof options.content == \"string\" ? options.content : false;\r\n options.showRange = typeof options.showRange == \"boolean\" ? options.showRange : false;\r\n // Formats at see validateOptions\r\n options.format = typeof options.format == \"object\" ? options.format : undefined;\r\n options.ariaFormat = typeof options.ariaFormat == \"object\" ? options.ariaFormat : undefined;\r\n\r\n var stringSlider = \"Slider\",\r\n slider,\r\n container,\r\n spectrum,\r\n optEvents = {},\r\n events = {},\r\n connects,\r\n handles,\r\n handleNumbers,\r\n sliderBase,\r\n parsed,\r\n actions,\r\n supportsPassive = isIE ? false : true,\r\n locations = [],\r\n values = [],\r\n tooltips,\r\n activeHandlesCount = 0,\r\n minContainers = [],\r\n maxContainers = [],\r\n // For horizontal sliders in standard ltr documents,\r\n // make .dds__slider-origin overflow to the left so the document doesn't scroll.\r\n dirOffset = options.dir == 1 || options.ort == 1 ? 0 : 100,\r\n msPrefix = element.style.msTransform !== undefined,\r\n noPrefix = element.style.transform !== undefined,\r\n transformRule = noPrefix ? \"transform\" : msPrefix ? \"msTransform\" : \"webkitTransform\",\r\n // Default formatter uses numbers only and supplies percision/decimal places\r\n defaultFormatter = {\r\n to: function (value) {\r\n return value !== undefined && value.toFixed(options.percision);\r\n },\r\n from: Number,\r\n },\r\n // Validation\r\n validateMargin = function (entry) {\r\n if (options.margin === 0) {\r\n return;\r\n }\r\n\r\n options.margin = spectrum.getMargin(entry);\r\n\r\n if (!options.margin) {\r\n throw new Error(\"Slider 'margin' option is only supported on linear sliders.\");\r\n }\r\n },\r\n validateOptions = function () {\r\n // Range always first initiates Spectrum\r\n if (options.range) {\r\n // Filter incorrect input.\r\n if (typeof options.range !== \"object\" || isArray(options.range)) {\r\n throw new Error(\"Slider 'range' is not an object.\");\r\n }\r\n\r\n // Update if only one handle\r\n if (options.range.min === undefined) {\r\n options.range.min = 0;\r\n }\r\n\r\n // Catch missing end.\r\n if (options.range.max === undefined) {\r\n throw new Error(\"Slider Missing 'max' in 'range'.\");\r\n }\r\n\r\n // Catch equal start or end.\r\n if (options.range.min === options.range.max) {\r\n throw new Error(\"Slider 'range' 'min' and 'max' cannot be equal.\");\r\n }\r\n\r\n spectrum = new Spectrum(options.range, options.snap, options.singleStep);\r\n } else {\r\n throw new RangeError(\r\n \"There was a problem found with the range option values, please correct and try again!\"\r\n );\r\n }\r\n // Start\r\n if (options.start) {\r\n var entry = asArray(options.start);\r\n\r\n // Validate input. Values aren't tested, as the public .val method\r\n // will always provide a valid location.\r\n if (!Array.isArray(entry) || !entry.length) {\r\n throw new Error(\"Slider 'start' option is incorrect.\");\r\n }\r\n\r\n // Store the number of handles.\r\n options.handles = entry.length;\r\n\r\n // When the slider is initialized, the .val method will\r\n // be called with the start options.\r\n options.start = entry;\r\n } else {\r\n if (options.range.min && options.range.max) {\r\n options.start = [options.range.min, options.range.max];\r\n options.handles = 2;\r\n } else {\r\n options.start = options.range.max;\r\n options.handles = 1;\r\n }\r\n }\r\n // Events\r\n if (options.behaviour) {\r\n // Make sure the input is a string.\r\n if (typeof options.behaviour !== \"string\") {\r\n throw new Error(\"Slider 'behaviour' must be a string containing options.\");\r\n }\r\n\r\n // Check if the string contains any keywords.\r\n // None are required.\r\n var tap = options.behaviour.indexOf(\"tap\") >= 0;\r\n var drag = options.behaviour.indexOf(\"drag\") >= 0;\r\n var fixed = options.behaviour.indexOf(\"fixed\") >= 0;\r\n var snap = options.behaviour.indexOf(\"snap\") >= 0;\r\n var hover = options.behaviour.indexOf(\"hover\") >= 0;\r\n var unconstrained = options.behaviour.indexOf(\"unconstrained\") >= 0;\r\n\r\n if (fixed) {\r\n if (parsed.handles !== 2) {\r\n throw new Error(\"Slider 'fixed' behaviour must be used with 2 handles\");\r\n }\r\n\r\n // Use margin to enforce fixed state\r\n validateMargin(options.start[1] - options.start[0]);\r\n }\r\n\r\n if (unconstrained && (parsed.margin || parsed.limit)) {\r\n throw new Error(\"Slider 'unconstrained' behaviour cannot be used with margin or limit\");\r\n }\r\n\r\n optEvents = {\r\n tap: tap || snap,\r\n drag: drag,\r\n fixed: fixed,\r\n snap: snap,\r\n hover: hover,\r\n unconstrained: unconstrained,\r\n };\r\n }\r\n // Margin\r\n if (optEvents.fixed == 0) {\r\n // at see validateBehaviour\r\n validateMargin(options.margin);\r\n }\r\n // Limit\r\n options.limit = spectrum.getMargin(options.limit);\r\n // Padding\r\n if (options.padding) {\r\n if (typeof options.padding == \"number\" && !Array.isArray(options.padding)) {\r\n throw new Error(\"Slider 'padding' option must be numeric or array of exactly 2 numbers.\");\r\n }\r\n\r\n if (\r\n Array.isArray(options.padding) &&\r\n !(\r\n options.padding.length == 2 ||\r\n typeof options.padding[0] != \"number\" ||\r\n typeof options.padding[1] != \"number\"\r\n )\r\n ) {\r\n throw new Error(\"Slider 'padding' option must be numeric or array of exactly 2 numbers.\");\r\n }\r\n\r\n if (options.padding === 0) {\r\n return;\r\n }\r\n\r\n if (!Array.isArray(options.padding)) {\r\n options.padding = [options.padding];\r\n }\r\n\r\n // 'getMargin' returns false for invalid values.\r\n options.padding = [spectrum.getMargin(options.padding[0]), spectrum.getMargin(options.padding[1])];\r\n\r\n if (options.padding[0] === false || options.padding[1] === false) {\r\n throw new Error(\"Slider 'padding' option is only supported on linear sliders.\");\r\n }\r\n\r\n if (options.padding[0] < 0 || options.padding[1] < 0) {\r\n throw new Error(\"Slider 'padding' option must be a positive number(s).\");\r\n }\r\n\r\n if (options.padding[0] + options.padding[1] > 100) {\r\n throw new Error(\"Slider 'padding' option must not exceed 100% of the range.\");\r\n }\r\n }\r\n // Tooltips\r\n if (options.tooltips) {\r\n var tooltips;\r\n if (options.tooltips === false) {\r\n return;\r\n }\r\n\r\n if (options.tooltips === true) {\r\n tooltips = [];\r\n\r\n for (var i = 0; i < options.handles; i++) {\r\n tooltips.push(true);\r\n }\r\n } else {\r\n tooltips = asArray(options.tooltips);\r\n\r\n if (tooltips.length !== handles) {\r\n throw new Error(\"Slider must pass a formatter for all handles.\");\r\n }\r\n\r\n tooltips.forEach(function (formatter) {\r\n if (\r\n typeof formatter !== \"boolean\" &&\r\n (typeof formatter !== \"object\" || typeof formatter.to !== \"function\")\r\n ) {\r\n throw new Error(\"Slider 'tooltips' must be passed a formatter or 'false'.\");\r\n }\r\n });\r\n }\r\n options.tooltips = tooltips;\r\n }\r\n // Formats\r\n if (!options.format) {\r\n if (isJson) {\r\n var inputs = JSON.parse(jsonParams);\r\n if (inputs.format) {\r\n var testJs;\r\n if (inputs.format.indexOf(\"(\") > -1) {\r\n testJs = inputs.format.substring(0, inputs.format.indexOf(\"(\")).trim();\r\n } else {\r\n testJs = inputs.format;\r\n }\r\n if (!window[testJs]) {\r\n throw new Error(\r\n \"The supplied format function \" +\r\n inputs.format +\r\n \" could not be accessed, please verify and try again!\"\r\n );\r\n } else {\r\n options.format = window[testJs];\r\n }\r\n } else {\r\n options.format = defaultFormatter;\r\n }\r\n } else {\r\n options.format = defaultFormatter;\r\n }\r\n }\r\n if (!options.ariaFormat) {\r\n if (isJson) {\r\n inputs = JSON.parse(jsonParams);\r\n if (inputs.ariaFormat) {\r\n if (inputs.ariaFormat.indexOf(\"(\") > -1) {\r\n testJs = inputs.ariaFormat.substring(0, inputs.ariaFormat.indexOf(\"(\")).trim();\r\n } else {\r\n testJs = inputs.ariaFormat;\r\n }\r\n if (!window[testJs]) {\r\n throw new Error(\r\n \"The supplied format function \" +\r\n inputs.ariaFormat +\r\n \" could not be accessed, please verify and try again!\"\r\n );\r\n } else {\r\n options.ariaFormat = window[testJs];\r\n }\r\n } else {\r\n options.ariaFormat = options.format;\r\n }\r\n } else {\r\n options.ariaFormat = options.format;\r\n }\r\n }\r\n if (options.format) {\r\n if (!options.format.to || !options.format.from) {\r\n throw new Error(\r\n \"The supplied format function \" +\r\n options.format +\r\n \" is missing required method to or from, please verify and try again!\"\r\n );\r\n }\r\n }\r\n if (options.ariaFormat) {\r\n if (!options.ariaFormat.to || !options.ariaFormat.from) {\r\n throw new Error(\r\n \"The supplied format function \" +\r\n options.format +\r\n \" is missing required method to or from, please verify and try again!\"\r\n );\r\n }\r\n }\r\n },\r\n // Event Handlers\r\n endEventHandler = function () {\r\n var data = get();\r\n if (!Array.isArray(data)) {\r\n data = asArray(data);\r\n }\r\n for (var d = 0; d < data.length; d++) {\r\n data[d] = typeof data[d] == \"string\" ? data[d] : options.format.to(data[d]);\r\n }\r\n var containers = null;\r\n if (handles.length == 1) {\r\n containers = maxContainers;\r\n } else {\r\n containers = minContainers;\r\n }\r\n\r\n for (var c = 0; containers.length > c; c++) {\r\n containers[c].innerHTML = data[0];\r\n }\r\n if (handles.length > 1) {\r\n for (var max = 0; maxContainers.length > max; max++) {\r\n maxContainers[max].innerHTML = data[1];\r\n }\r\n }\r\n var details = {};\r\n if (data[1]) {\r\n details.min = data[0];\r\n details.max = data[1];\r\n } else {\r\n details.value = data[0];\r\n }\r\n uicoreCustomEvent(\"Slider\", \"SlideEnd\", element, details);\r\n },\r\n focusEventHandler = function (e) {\r\n e[\"currentTarget\"].classList.add(prefix + \"slider-active\");\r\n },\r\n blurEventHandler = function (e) {\r\n e[\"currentTarget\"].classList.remove(prefix + \"slider-active\");\r\n },\r\n // Handles keydown on focused handles\r\n // Don't move the document when pressing arrow keys on focused handles\r\n eventKeydown = function (event, handleNumber) {\r\n if (isSliderDisabled() || isHandleDisabled(handleNumber)) {\r\n return false;\r\n }\r\n\r\n var horizontalKeys = [\"Left\", \"Right\"];\r\n var verticalKeys = [\"Down\", \"Up\"];\r\n var largeStepKeys = [\"PageDown\", \"PageUp\"];\r\n var edgeKeys = [\"Home\", \"End\"];\r\n\r\n if (options.dir && !options.ort) {\r\n // On an right-to-left slider, the left and right keys act inverted\r\n horizontalKeys.reverse();\r\n } else if (options.ort && !options.dir) {\r\n // On a top-to-bottom slider, the up and down keys act inverted\r\n verticalKeys.reverse();\r\n largeStepKeys.reverse();\r\n }\r\n\r\n // Strip \"Arrow\" for IE compatibility. https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\r\n var key = event.key.replace(\"Arrow\", \"\");\r\n\r\n var isLargeDown = key === largeStepKeys[0];\r\n var isLargeUp = key === largeStepKeys[1];\r\n var isDown = key === verticalKeys[0] || key === horizontalKeys[0] || isLargeDown;\r\n var isUp = key === verticalKeys[1] || key === horizontalKeys[1] || isLargeUp;\r\n var isMin = key === edgeKeys[0];\r\n var isMax = key === edgeKeys[1];\r\n\r\n if (!isDown && !isUp && !isMin && !isMax) {\r\n return true;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n var to;\r\n\r\n if (isUp || isDown) {\r\n var multiplier = 5;\r\n var direction = isDown ? 0 : 1;\r\n var steps = getNextStepsForHandle(handleNumber);\r\n var step = steps[direction];\r\n\r\n // At the edge of a slider, do nothing\r\n if (step === null) {\r\n return false;\r\n }\r\n\r\n // No step set, use the default of 10% of the sub-range\r\n if (step === false) {\r\n step = Spectrum.getDefaultStep(locations[handleNumber], isDown, 10);\r\n }\r\n\r\n if (isLargeUp || isLargeDown) {\r\n step *= multiplier;\r\n }\r\n\r\n // Step over zero-length ranges (#948);\r\n step = Math.max(step, 0.0000001);\r\n\r\n // Decrement for down steps\r\n step = (isDown ? -1 : 1) * step;\r\n\r\n to = values[handleNumber] + step;\r\n } else if (isMax) {\r\n // End key\r\n to = options.spectrum.xVal[options.spectrum.xVal.length - 1];\r\n } else {\r\n // Home key\r\n to = options.spectrum.xVal[0];\r\n }\r\n\r\n setHandle(handleNumber, spectrum.toStepping(to), true, true);\r\n\r\n fireEvent(\"slide\", handleNumber);\r\n fireEvent(\"update\", handleNumber);\r\n fireEvent(\"change\", handleNumber);\r\n fireEvent(\"set\", handleNumber);\r\n\r\n return false;\r\n },\r\n getNextStepsForHandle = function (handleNumber) {\r\n var location = locations[handleNumber];\r\n var nearbySteps = spectrum.getNearbySteps(location);\r\n var value = values[handleNumber];\r\n var increment = nearbySteps.thisStep.step;\r\n var decrement = null;\r\n\r\n // If snapped, directly use defined step value\r\n if (options.snap) {\r\n return [\r\n value - nearbySteps.stepBefore.startValue || null,\r\n nearbySteps.stepAfter.startValue - value || null,\r\n ];\r\n }\r\n\r\n // If the next value in this step moves into the next step,\r\n // the increment is the start of the next step - the current value\r\n if (increment !== false) {\r\n if (value + increment > nearbySteps.stepAfter.startValue) {\r\n increment = nearbySteps.stepAfter.startValue - value;\r\n }\r\n }\r\n\r\n // If the value is beyond the starting point\r\n if (value > nearbySteps.thisStep.startValue) {\r\n decrement = nearbySteps.thisStep.step;\r\n } else if (nearbySteps.stepBefore.step === false) {\r\n decrement = false;\r\n }\r\n\r\n // If a handle is at the start of a step, it always steps back into the previous step first\r\n else {\r\n decrement = value - nearbySteps.stepBefore.highestStep;\r\n }\r\n\r\n // Now, if at the slider edges, there is no in/decrement\r\n if (location === 100) {\r\n increment = null;\r\n } else if (location === 0) {\r\n decrement = null;\r\n }\r\n\r\n // As per #391, the comparison for the decrement step can have some rounding issues.\r\n var stepDecimals = spectrum.countStepDecimals();\r\n\r\n // Round per #391\r\n if (increment !== null && increment !== false) {\r\n increment = Number(increment.toFixed(stepDecimals));\r\n }\r\n\r\n if (decrement !== null && decrement !== false) {\r\n decrement = Number(decrement.toFixed(stepDecimals));\r\n }\r\n\r\n return [decrement, increment];\r\n },\r\n // Attach events to several slider parts.\r\n bindSliderEvents = function (behaviour) {\r\n // Attach the standard drag event to the handles.\r\n if (!behaviour.fixed) {\r\n handles.forEach(function (handle, index) {\r\n // These events are only bound to the visual handle\r\n // element, not the 'real' origin element.\r\n attachEvent(actions.start, handle.children[0], eventStart, {\r\n handleNumbers: [index],\r\n });\r\n });\r\n }\r\n\r\n // Attach the tap event to the slider base.\r\n if (behaviour.tap) {\r\n attachEvent(actions.start, sliderBase, eventTap, {});\r\n }\r\n\r\n // Fire hover events\r\n if (behaviour.hover) {\r\n // attachEvent(actions.move, sliderBase, eventHover, {\r\n // hover: true\r\n // });\r\n }\r\n\r\n // Make the range draggable.\r\n if (behaviour.drag) {\r\n connects.forEach(function (connect, index) {\r\n if (connect === false || index === 0 || index === connects.length - 1) {\r\n return;\r\n }\r\n\r\n var handleBefore = handles[index - 1];\r\n var handleAfter = handles[index];\r\n var eventHolders = [connect];\r\n\r\n connect.classList.add(prefix + \"slider-draggable\");\r\n\r\n // When the range is fixed, the entire range can\r\n // be dragged by the handles. The handle in the first\r\n // origin will propagate the start event upward,\r\n // but it needs to be bound manually on the other.\r\n if (behaviour.fixed) {\r\n eventHolders.push(handleBefore.children[0]);\r\n eventHolders.push(handleAfter.children[0]);\r\n }\r\n\r\n eventHolders.forEach(function (eventHolder) {\r\n attachEvent(actions.start, eventHolder, eventStart, {\r\n handles: [handleBefore, handleAfter],\r\n handleNumbers: [index - 1, index],\r\n });\r\n });\r\n });\r\n }\r\n },\r\n // Attach an event to this slider, possibly including a namespace\r\n bindEvent = function (namespacedEvent, callback) {\r\n events[namespacedEvent] = events[namespacedEvent] || [];\r\n events[namespacedEvent].push(callback);\r\n\r\n // If the event bound is 'update,' fire it immediately for all handles.\r\n if (namespacedEvent.split(\".\")[0] === \"update\") {\r\n handles.forEach(function (a, index) {\r\n fireEvent(\"update\", index);\r\n });\r\n }\r\n },\r\n // Helpers\r\n addNodeTo = function (addTarget, className) {\r\n var div = createElement(\"div\", {\r\n class: className ? className : \"\",\r\n });\r\n\r\n addTarget.appendChild(div);\r\n\r\n return div;\r\n },\r\n // Round a value to the closest 'to'.\r\n closest = function (value, to) {\r\n return Math.round(value / to) * to;\r\n },\r\n // Current position of an element relative to the document.\r\n offset = function (elem, orientation) {\r\n var rect = elem.getBoundingClientRect();\r\n var doc = elem.ownerDocument;\r\n var docElem = doc.documentElement;\r\n var pageOffset = getPageOffset(doc);\r\n\r\n // getBoundingClientRect contains left scroll in Chrome on Android.\r\n // I haven't found a feature detection that proves this. Worst case\r\n // scenario on mis-match: the 'tap' feature on horizontal sliders breaks.\r\n if (/webkit.*Chrome.*Mobile/i.test(navigator.userAgent)) {\r\n pageOffset.x = 0;\r\n }\r\n return orientation\r\n ? rect.top + pageOffset.y - docElem.clientTop\r\n : rect.left + pageOffset.x - docElem.clientLeft;\r\n },\r\n // Fire 'end' when a mouse or pen leaves the document.\r\n documentLeave = function (event, data) {\r\n if (event.type === \"mouseout\" && event.target.nodeName === \"HTML\" && event.relatedTarget === null) {\r\n eventEnd(event, data);\r\n }\r\n },\r\n // Handle movement on document for handle and range drag.\r\n eventMove = function (event, data) {\r\n // Check if we are moving up or down\r\n var movement = (options.dir ? -1 : 1) * (event.calcPoint - data.startCalcPoint);\r\n\r\n // Convert the movement into a percentage of the slider width/height\r\n var proposal = (movement * 100) / data.baseSize;\r\n\r\n moveHandles(movement > 0, proposal, data.locations, data.handleNumbers);\r\n },\r\n // Unbind move events on document, call callbacks.\r\n eventEnd = function (event, data) {\r\n // The handle is no longer active, so remove the class.\r\n if (data.handle) {\r\n data.handle.classList.remove(prefix + \"slider-active\");\r\n activeHandlesCount -= 1;\r\n }\r\n\r\n // Unbind the move and end events, which are added on 'start'.\r\n data.listeners.forEach(function (c) {\r\n DOC.removeEventListener(c[0], c[1]);\r\n });\r\n\r\n if (activeHandlesCount === 0) {\r\n // Remove dragging class.\r\n slider.classList.remove(prefix + \"slider-drag\");\r\n setZindex();\r\n\r\n // Remove cursor styles and text-selection events bound to the element.\r\n if (event.cursor) {\r\n element.style.cursor = \"\";\r\n }\r\n }\r\n\r\n data.handleNumbers.forEach(function (handleNumber) {\r\n fireEvent(\"change\", handleNumber);\r\n fireEvent(\"set\", handleNumber);\r\n fireEvent(\"end\", handleNumber);\r\n });\r\n },\r\n // Bind move events on document.\r\n eventStart = function (event, data) {\r\n // Ignore event if any handle is disabled\r\n if (data.handleNumbers.some(isHandleDisabled)) {\r\n return false;\r\n }\r\n\r\n var handle;\r\n\r\n if (data.handleNumbers.length === 1) {\r\n var handleOrigin = handles[data.handleNumbers[0]];\r\n\r\n handle = handleOrigin.children[0];\r\n activeHandlesCount += 1;\r\n\r\n // Mark the handle as 'active' so it can be styled.\r\n handle.classList.add(prefix + \"slider-active\");\r\n }\r\n\r\n // A drag should never propagate up to the 'tap' event.\r\n event.stopPropagation();\r\n\r\n // Record the event listeners.\r\n var listeners = [];\r\n\r\n // Attach the move and end events.\r\n var moveEvent = attachEvent(actions.move, DOC, eventMove, {\r\n // The event target has changed so we need to propagate the original one so that we keep\r\n // relying on it to extract target touches.\r\n target: event.target,\r\n handle: handle,\r\n listeners: listeners,\r\n startCalcPoint: event.calcPoint,\r\n baseSize: baseSize(),\r\n pageOffset: event.pageOffset,\r\n handleNumbers: data.handleNumbers,\r\n buttonsProperty: event.buttons,\r\n locations: locations.slice(),\r\n });\r\n\r\n var endEvent = attachEvent(actions.end, DOC, eventEnd, {\r\n target: event.target,\r\n handle: handle,\r\n listeners: listeners,\r\n doNotReject: true,\r\n handleNumbers: data.handleNumbers,\r\n });\r\n\r\n var outEvent = attachEvent(\"mouseout\", DOC, documentLeave, {\r\n target: event.target,\r\n handle: handle,\r\n listeners: listeners,\r\n doNotReject: true,\r\n handleNumbers: data.handleNumbers,\r\n });\r\n\r\n // We want to make sure we pushed the listeners in the listener list rather than creating\r\n // a new one as it has already been passed to the event handlers.\r\n listeners.push.apply(listeners, moveEvent.concat(endEvent, outEvent));\r\n\r\n // Text selection isn't an issue on touch devices,\r\n // so adding cursor styles can be skipped.\r\n if (event.cursor) {\r\n // Prevent the 'I' cursor and extend the range-drag cursor.\r\n element.style.cursor = getComputedStyle(event.target).cursor;\r\n\r\n // Mark the target with a dragging state.\r\n if (handles.length > 1) {\r\n slider.classList.add(prefix + \"slider-drag\");\r\n }\r\n }\r\n\r\n data.handleNumbers.forEach(function (handleNumber) {\r\n fireEvent(\"start\", handleNumber);\r\n });\r\n },\r\n // Move closest handle to tapped location.\r\n eventTap = function (event) {\r\n // The tap event shouldn't propagate up\r\n event.stopPropagation();\r\n\r\n var proposal = calcPointToPercentage(event.calcPoint);\r\n var handleNumber = getClosestHandle(proposal);\r\n\r\n // Tackle the case that all handles are 'disabled'.\r\n if (handleNumber === false) {\r\n return false;\r\n }\r\n\r\n // Flag the slider as it is now in a transitional state.\r\n // Transition takes a configurable amount of ms (default 300). Re-enable the slider after that.\r\n if (!events.snap) {\r\n addClassFor(slider, prefix + \"slider-tap\", options.animationDuration);\r\n }\r\n\r\n setHandle(handleNumber, proposal, true, true);\r\n\r\n setZindex();\r\n\r\n fireEvent(\"slide\", handleNumber, true);\r\n fireEvent(\"update\", handleNumber, true);\r\n fireEvent(\"change\", handleNumber, true);\r\n fireEvent(\"set\", handleNumber, true);\r\n\r\n if (events.snap) {\r\n eventStart(event, { handleNumbers: [handleNumber] });\r\n }\r\n },\r\n addTooltip = function (handle, handleNumber) {\r\n if (!options.tooltips[handleNumber]) {\r\n return false;\r\n }\r\n\r\n return addNodeTo(handle.firstChild, prefix + \"slider-tooltip\");\r\n },\r\n isSliderDisabled = function () {\r\n return slider.hasAttribute(\"disabled\");\r\n },\r\n // Disable the slider dragging if any handle is disabled\r\n isHandleDisabled = function (handleNumber) {\r\n var handleOrigin = handles[handleNumber];\r\n return handleOrigin.hasAttribute(\"disabled\");\r\n },\r\n // Append a origin to the base\r\n addOrigin = function (handleNumber) {\r\n var origin = addNodeTo(sliderBase, prefix + \"slider-origin\");\r\n var handle = addNodeTo(origin, prefix + \"slider-handle\");\r\n\r\n addNodeTo(handle, prefix + \"slider-touch-area\");\r\n\r\n handle.setAttribute(\"data-handle\", handleNumber);\r\n\r\n // keyboard support\r\n handle.setAttribute(\"tabindex\", \"0\");\r\n handle.addEventListener(\"keydown\", function (event) {\r\n return eventKeydown(event, handleNumber);\r\n });\r\n\r\n handle.setAttribute(\"role\", \"slider\");\r\n handle.setAttribute(\"aria-orientation\", options.ort ? \"vertical\" : \"horizontal\");\r\n\r\n if (options.handles == 1) {\r\n handle.classList.add(prefix + \"slider-handle-upper\");\r\n } else if (handleNumber === 0) {\r\n handle.classList.add(prefix + \"slider-handle-lower\");\r\n } else {\r\n handle.classList.add(prefix + \"slider-handle-upper\");\r\n }\r\n\r\n return origin;\r\n },\r\n // nsert nodes for connect elements\r\n addConnect = function (base, add) {\r\n if (!add) {\r\n return false;\r\n }\r\n\r\n return addNodeTo(base, prefix + \"slider-connect\");\r\n },\r\n addLabels = function () {\r\n var min, max, minLabel, maxLabel;\r\n var minValue = options.format.to(options.range.min);\r\n var maxValue = options.format.to(options.range.max);\r\n if (handles.length == 1) {\r\n max = createElement(\"div\", {\r\n class: prefix + \"slider-max\",\r\n });\r\n maxLabel = addNodeTo(max);\r\n maxLabel.innerHTML = maxValue;\r\n maxContainers.push(maxLabel);\r\n } else {\r\n min = createElement(\"div\", {\r\n class: prefix + \"slider-min\",\r\n });\r\n minLabel = addNodeTo(min);\r\n minLabel.innerHTML = minValue;\r\n minContainers.push(minLabel);\r\n max = createElement(\"div\", {\r\n class: prefix + \"slider-max\",\r\n });\r\n maxLabel = addNodeTo(max);\r\n maxLabel.innerHTML = maxValue;\r\n maxContainers.push(maxLabel);\r\n }\r\n if (options.ort === 0) {\r\n if (min) {\r\n container.insertBefore(min, container.childNodes[0]);\r\n }\r\n container.appendChild(max);\r\n } else {\r\n if (min) {\r\n container.appendChild(min);\r\n }\r\n container.insertBefore(max, container.childNodes[0]);\r\n }\r\n },\r\n addContent = function () {\r\n var label = createElement(\"div\", {\r\n class:\r\n prefix +\r\n \"text-no-wrap \" +\r\n prefix +\r\n \"mb-3\" +\r\n (options.ort == 1\r\n ? \" \" + prefix + \"d-flex \" + prefix + \"flex-column \" + prefix + \"align-items-center\"\r\n : \"\"),\r\n });\r\n var text = DOC.createTextNode(options.content);\r\n label.appendChild(text);\r\n element.insertBefore(label, element.firstChild);\r\n if (options.showRange) {\r\n var span = createElement(\"span\", {\r\n html:\r\n \" ( \" +\r\n options.format.to(options.range.min) +\r\n \" - \" +\r\n options.format.to(options.range.max) +\r\n \" )\",\r\n });\r\n label.appendChild(span);\r\n }\r\n },\r\n addContainer = function () {\r\n container = element.querySelector(\".\" + prefix + \"slider-container\");\r\n\r\n // if vertical add class to parent\r\n if (options.ort == 1) {\r\n container.classList.add(prefix + \"slider-container-vertical\");\r\n }\r\n\r\n // update wrapper to singe with one handle\r\n if (options.handles == 1) {\r\n var wrapper = container.querySelector(\".\" + prefix + \"slider-wrapper\");\r\n wrapper.classList.remove(prefix + \"slider-wrapper\");\r\n wrapper.classList.add(prefix + \"slider-wrapper-single\");\r\n }\r\n },\r\n addElements = function () {\r\n var connectBase = addNodeTo(sliderBase, prefix + \"slider-connects\");\r\n\r\n handles = [];\r\n connects = [];\r\n handleNumbers = [];\r\n var optConnects;\r\n\r\n if (options.handles === 1) {\r\n optConnects = [true, false];\r\n } else {\r\n optConnects = [false, options.range, false];\r\n }\r\n connects.push(addConnect(connectBase, optConnects[0]));\r\n\r\n for (var i = 0; i < options.handles; i++) {\r\n // Keep a list of all added handles.\r\n handles.push(addOrigin(i));\r\n handleNumbers[i] = i;\r\n connects.push(addConnect(connectBase, optConnects[i + 1]));\r\n }\r\n },\r\n // Initialize a single slider.\r\n addSlider = function () {\r\n if (options.dir === 0) {\r\n slider.classList.add(prefix + \"slider-ltr\");\r\n } else {\r\n slider.classList.add(prefix + \"slider-rtl\");\r\n }\r\n\r\n if (options.ort === 0) {\r\n slider.classList.add(prefix + \"slider-horizontal\");\r\n } else {\r\n slider.classList.add(prefix + \"slider-vertical\");\r\n }\r\n\r\n var base = addNodeTo(slider, prefix + \"slider-base\");\r\n base.setAttribute(\"tabindex\", \"0\");\r\n base.setAttribute(\r\n \"aria-label\",\r\n (options.content ? options.content : \"Slider\") +\r\n \" \" +\r\n options.format.to(options.range.min) +\r\n \" to \" +\r\n options.format.to(options.range.max)\r\n );\r\n\r\n return base;\r\n },\r\n valueSet = function (input, fireSetEvent) {\r\n var values = asArray(input);\r\n var isInit = locations[0] === undefined;\r\n\r\n // Event fires by default\r\n fireSetEvent = fireSetEvent === undefined ? true : !!fireSetEvent;\r\n\r\n // Animation is optional.\r\n // Make sure the initial values were set before using animated placement.\r\n if (options.animate && !isInit) {\r\n addClassFor(slider, prefix + \"slider-tap\", options.animationDuration);\r\n }\r\n\r\n // First pass, without lookAhead but with lookBackward. Values are set from left to right.\r\n handleNumbers.forEach(function (handleNumber) {\r\n setHandle(handleNumber, resolveToValue(values[handleNumber], handleNumber), true, false);\r\n });\r\n\r\n // Second pass. Now that all base values are set, apply constraints\r\n handleNumbers.forEach(function (handleNumber) {\r\n setHandle(handleNumber, locations[handleNumber], true, true);\r\n });\r\n\r\n setZindex();\r\n\r\n handleNumbers.forEach(function (handleNumber) {\r\n fireEvent(\"update\", handleNumber);\r\n\r\n // Fire the event only for handles that received a new value, as per #579\r\n if (values[handleNumber] !== null && fireSetEvent) {\r\n fireEvent(\"set\", handleNumber);\r\n }\r\n });\r\n },\r\n asArray = function (a) {\r\n return Array.isArray(a) ? a : [a];\r\n },\r\n addClassFor = function (element, className, duration) {\r\n if (duration > 0) {\r\n element.classList.add(className);\r\n setTimeout(function () {\r\n element.classList.remove(className);\r\n }, duration);\r\n }\r\n },\r\n // Counts decimals\r\n countDecimals = function (numStr) {\r\n numStr = String(numStr);\r\n var pieces = numStr.split(\".\");\r\n return pieces.length > 1 ? pieces[1].length : 0;\r\n },\r\n // Limits a value to 0 - 100\r\n limit = function (a) {\r\n return Math.max(Math.min(a, 100), 0);\r\n },\r\n // Moves handle(s) by a percentage\r\n // (bool, % to move, [% where handle started, ...], [index in handles, ...])\r\n moveHandles = function (upward, proposal, locations, handleNumbers) {\r\n var proposals = locations.slice();\r\n\r\n var b = [!upward, upward];\r\n var f = [upward, !upward];\r\n\r\n // Copy handleNumbers so we don't change the dataset\r\n handleNumbers = handleNumbers.slice();\r\n\r\n // Check to see which handle is 'leading'.\r\n // If that one can't move the second can't either.\r\n if (upward) {\r\n handleNumbers.reverse();\r\n }\r\n\r\n // Step 1: get the maximum percentage that any of the handles can move\r\n if (handleNumbers.length > 1) {\r\n handleNumbers.forEach(function (handleNumber, o) {\r\n var to = checkHandlePosition(\r\n proposals,\r\n handleNumber,\r\n proposals[handleNumber] + proposal,\r\n b[o],\r\n f[o],\r\n false\r\n );\r\n\r\n // Stop if one of the handles can't move.\r\n if (to === false) {\r\n proposal = 0;\r\n } else {\r\n proposal = to - proposals[handleNumber];\r\n proposals[handleNumber] = to;\r\n }\r\n });\r\n }\r\n\r\n // If using one handle, check backward AND forward\r\n else {\r\n b = f = [true];\r\n }\r\n\r\n var state = false;\r\n\r\n // Step 2: Try to set the handles with the found percentage\r\n handleNumbers.forEach(function (handleNumber, o) {\r\n state = setHandle(handleNumber, locations[handleNumber] + proposal, b[o], f[o]) || state;\r\n });\r\n\r\n // Step 3: If a handle moved, fire events\r\n if (state) {\r\n handleNumbers.forEach(function (handleNumber) {\r\n fireEvent(\"update\", handleNumber);\r\n fireEvent(\"slide\", handleNumber);\r\n });\r\n }\r\n },\r\n // Takes a base value and an offset. This offset is used for the connect bar size.\r\n // In the initial design for this feature, the origin element was 1% wide.\r\n // Unfortunately, a rounding bug in Chrome makes it impossible to implement this feature\r\n // in this manner: https://bugs.chromium.org/p/chromium/issues/detail?id=798223\r\n transformDirection = function (a, b) {\r\n return options.dir ? 100 - a - b : a;\r\n },\r\n // Updates locations and values, updates visual state\r\n updateHandlePosition = function (handleNumber, to) {\r\n // Update locations.\r\n locations[handleNumber] = to;\r\n\r\n // Convert the value to the slider stepping/range.\r\n values[handleNumber] = spectrum.fromStepping(to);\r\n\r\n var rule = \"translate(\" + inRuleOrder(transformDirection(to, 0) - dirOffset + \"%\", \"0\") + \")\";\r\n handles[handleNumber].style[transformRule] = rule;\r\n\r\n updateConnect(handleNumber);\r\n updateConnect(handleNumber + 1);\r\n },\r\n // Test suggested values and apply margin, step.\r\n setHandle = function (handleNumber, to, lookBackward, lookForward) {\r\n to = checkHandlePosition(locations, handleNumber, to, lookBackward, lookForward, false);\r\n\r\n if (to === false) {\r\n return false;\r\n }\r\n\r\n updateHandlePosition(handleNumber, to);\r\n\r\n return true;\r\n },\r\n // Updates style attribute for connect nodes\r\n updateConnect = function (index) {\r\n // Skip connects set to false\r\n if (!connects[index]) {\r\n return;\r\n }\r\n\r\n var l = 0;\r\n var h = 100;\r\n\r\n if (index !== 0) {\r\n l = locations[index - 1];\r\n }\r\n\r\n if (index !== connects.length - 1) {\r\n h = locations[index];\r\n }\r\n\r\n // We use two rules:\r\n // 'translate' to change the left/top offset;\r\n // 'scale' to change the width of the element;\r\n // As the element has a width of 100%, a translation of 100% is equal to 100% of the parent (.noUi-base)\r\n var connectWidth = h - l;\r\n var translateRule = \"translate(\" + inRuleOrder(transformDirection(l, connectWidth) + \"%\", \"0\") + \")\";\r\n var scaleRule = \"scale(\" + inRuleOrder(connectWidth / 100, \"1\") + \")\";\r\n\r\n connects[index].style[transformRule] = translateRule + \" \" + scaleRule;\r\n },\r\n setZindex = function () {\r\n handleNumbers.forEach(function (handleNumber) {\r\n var dir = locations[handleNumber] > 50 ? -1 : 1;\r\n var zIndex = 3 + (handles.length + dir * handleNumber);\r\n handles[handleNumber].style.zIndex = zIndex;\r\n });\r\n },\r\n // Undo attachment of event\r\n removeEvent = function (namespacedEvent) {\r\n var event = namespacedEvent && namespacedEvent.split(\".\")[0];\r\n var namespace = event && namespacedEvent.substring(event.length);\r\n\r\n Object.keys(events).forEach(function (bind) {\r\n var tEvent = bind.split(\".\")[0];\r\n var tNamespace = bind.substring(tEvent.length);\r\n\r\n if ((!event || event === tEvent) && (!namespace || namespace === tNamespace)) {\r\n delete events[bind];\r\n }\r\n });\r\n },\r\n // External event handling\r\n fireEvent = function (eventName, handleNumber, tap) {\r\n Object.keys(events).forEach(function (targetEvent) {\r\n var eventType = targetEvent.split(\".\")[0];\r\n\r\n if (eventName === eventType) {\r\n events[targetEvent].forEach(function (callback) {\r\n callback.call(\r\n // Use the slider public API as the scope ('this')\r\n self,\r\n // Return values as array, so arg_1[arg_2] is always valid.\r\n values.map(options.format.to),\r\n // Handle index, 0 or 1\r\n handleNumber,\r\n // Un-formatted slider values\r\n values.slice(),\r\n // Event is fired by tap, true or false\r\n tap || false,\r\n // Left offset of the handle, in relation to the slider\r\n locations.slice()\r\n );\r\n });\r\n }\r\n });\r\n },\r\n // Split out the handle positioning logic so the Move event can use it, too\r\n checkHandlePosition = function (reference, handleNumber, to, lookBackward, lookForward, getValue) {\r\n // For sliders with multiple handles, limit movement to the other handle.\r\n // Apply the margin option by adding it to the handle positions.\r\n if (handles.length > 1 && !optEvents.unconstrained) {\r\n if (lookBackward && handleNumber > 0) {\r\n to = Math.max(to, reference[handleNumber - 1] + options.margin);\r\n }\r\n\r\n if (lookForward && handleNumber < handles.length - 1) {\r\n to = Math.min(to, reference[handleNumber + 1] - options.margin);\r\n }\r\n }\r\n\r\n // The limit option has the opposite effect, limiting handles to a\r\n // maximum distance from another. Limit must be > 0, as otherwise\r\n // handles would be unmovable.\r\n if (handles.length > 1 && options.limit) {\r\n if (lookBackward && handleNumber > 0) {\r\n to = Math.min(to, reference[handleNumber - 1] + options.limit);\r\n }\r\n\r\n if (lookForward && handleNumber < handles.length - 1) {\r\n to = Math.max(to, reference[handleNumber + 1] - options.limit);\r\n }\r\n }\r\n\r\n // The padding option keeps the handles a certain distance from the\r\n // edges of the slider. Padding must be > 0.\r\n if (options.padding) {\r\n if (handleNumber === 0) {\r\n to = Math.max(to, options.padding[0]);\r\n }\r\n\r\n if (handleNumber === handles.length - 1) {\r\n to = Math.min(to, 100 - options.padding[1]);\r\n }\r\n }\r\n\r\n to = spectrum.getStep(to);\r\n\r\n // Limit percentage to the 0 - 100 range\r\n to = limit(to);\r\n\r\n // Return false if handle can't move\r\n if (to === reference[handleNumber] && !getValue) {\r\n return false;\r\n }\r\n\r\n return to;\r\n },\r\n // Uses slider orientation to create CSS rules. a = base value;\r\n inRuleOrder = function (v, a) {\r\n var o = options.ort;\r\n return (o ? a : v) + \", \" + (o ? v : a);\r\n },\r\n // Parses value passed to .set method. Returns current value if not parse-able.\r\n resolveToValue = function (to, handleNumber) {\r\n // Setting with null indicates an 'ignore'.\r\n // Inputting 'false' is invalid.\r\n if (to === null || to === false || to === undefined) {\r\n return locations[handleNumber];\r\n }\r\n\r\n // If a formatted number was passed, attempt to decode it.\r\n if (typeof to === \"number\") {\r\n to = String(to);\r\n }\r\n\r\n to = options.format.from(to);\r\n to = spectrum.toStepping(to);\r\n\r\n // If parsing the number failed, use the current value.\r\n if (to === false || isNaN(to)) {\r\n return locations[handleNumber];\r\n }\r\n\r\n return to;\r\n },\r\n toStepping = function (xVal, xPct, value) {\r\n if (value >= xVal.slice(-1)[0]) {\r\n return 100;\r\n }\r\n\r\n var j = getJ(value, xVal);\r\n var va = xVal[j - 1];\r\n var vb = xVal[j];\r\n var pa = xPct[j - 1];\r\n var pb = xPct[j];\r\n\r\n return pa + toPercentage([va, vb], value) / subRangeRatio(pa, pb);\r\n },\r\n // (value) Input a percentage, find where it is on the specified range.\r\n fromStepping = function (xVal, xPct, value) {\r\n // There is no range group that fits 100\r\n if (value >= 100) {\r\n return xVal.slice(-1)[0];\r\n }\r\n\r\n var j = getJ(value, xPct);\r\n var va = xVal[j - 1];\r\n var vb = xVal[j];\r\n var pa = xPct[j - 1];\r\n var pb = xPct[j];\r\n\r\n return isPercentage([va, vb], (value - pa) * subRangeRatio(pa, pb));\r\n },\r\n subRangeRatio = function (pa, pb) {\r\n return 100 / (pb - pa);\r\n },\r\n // (percentage) How many percent is this value of this range?\r\n fromPercentage = function (range, value) {\r\n return (value * 100) / (range[1] - range[0]);\r\n },\r\n // (percentage) Where is this value on this range?\r\n toPercentage = function (range, value) {\r\n return fromPercentage(range, range[0] < 0 ? value + Math.abs(range[0]) : value - range[0]);\r\n },\r\n // (percentage) Get the step that applies at a certain value.\r\n getStep = function (xPct, xSteps, snap, value) {\r\n if (value === 100) {\r\n return value;\r\n }\r\n\r\n var j = getJ(value, xPct);\r\n var a = xPct[j - 1];\r\n var b = xPct[j];\r\n\r\n // If 'snap' is set, steps are used as fixed points on the slider.\r\n if (snap) {\r\n // Find the closest position, a or b.\r\n if (value - a > (b - a) / 2) {\r\n return b;\r\n }\r\n\r\n return a;\r\n }\r\n\r\n if (!xSteps[j - 1]) {\r\n return value;\r\n }\r\n\r\n return xPct[j - 1] + closest(value - xPct[j - 1], xSteps[j - 1]);\r\n },\r\n handleEntryPoint = function (index, value, that) {\r\n var percentage;\r\n\r\n // Wrap numerical input in an array.\r\n if (typeof value === \"number\") {\r\n value = [value];\r\n }\r\n\r\n // Reject any invalid input, by testing whether value is an array.\r\n if (!isArray(value)) {\r\n throw new Error(\"Slider 'range' contains invalid value.\");\r\n }\r\n\r\n // Covert min/max syntax to 0 and 100.\r\n if (index === \"min\") {\r\n percentage = 0;\r\n } else if (index === \"max\") {\r\n percentage = 100;\r\n } else {\r\n percentage = parseFloat(index);\r\n }\r\n\r\n // Check for correct input.\r\n if (!isNumeric(percentage) || !isNumeric(value[0])) {\r\n throw new Error(\"Slider 'range' value isn't numeric.\");\r\n }\r\n\r\n // Store values.\r\n that.xPct.push(percentage);\r\n that.xVal.push(value[0]);\r\n\r\n // NaN will evaluate to false too, but to keep\r\n // logging clear, set step explicitly. Make sure\r\n // not to override the 'step' setting with false.\r\n if (!percentage) {\r\n if (!isNaN(value[1])) {\r\n that.xSteps[0] = value[1];\r\n }\r\n } else {\r\n that.xSteps.push(isNaN(value[1]) ? false : value[1]);\r\n }\r\n\r\n that.xHighestCompleteStep.push(0);\r\n },\r\n handleStepPoint = function (i, n, that) {\r\n // Ignore 'false' stepping.\r\n if (!n) {\r\n return;\r\n }\r\n\r\n // Step over zero-length ranges (#948);\r\n if (that.xVal[i] === that.xVal[i + 1]) {\r\n that.xSteps[i] = that.xHighestCompleteStep[i] = that.xVal[i];\r\n\r\n return;\r\n }\r\n\r\n // Factor to range ratio\r\n that.xSteps[i] =\r\n fromPercentage([that.xVal[i], that.xVal[i + 1]], n) / subRangeRatio(that.xPct[i], that.xPct[i + 1]);\r\n\r\n var totalSteps = (that.xVal[i + 1] - that.xVal[i]) / that.xNumSteps[i];\r\n var highestStep = Math.ceil(Number(totalSteps.toFixed(3)) - 1);\r\n var step = that.xVal[i] + that.xNumSteps[i] * highestStep;\r\n\r\n that.xHighestCompleteStep[i] = step;\r\n },\r\n // Checks whether a value is numerical.\r\n isNumeric = function (a) {\r\n return typeof a === \"number\" && !isNaN(a) && isFinite(a);\r\n },\r\n // (value) How much is this percentage on this range?\r\n isPercentage = function (range, value) {\r\n return (value * (range[1] - range[0])) / 100 + range[0];\r\n },\r\n getJ = function (value, arr) {\r\n var j = 1;\r\n\r\n while (value >= arr[j]) {\r\n j += 1;\r\n }\r\n\r\n return j;\r\n },\r\n // Shorthand for base dimensions.\r\n baseSize = function () {\r\n var rect = sliderBase.getBoundingClientRect();\r\n var alt = \"offset\" + [\"Width\", \"Height\"][options.ort];\r\n return options.ort === 0 ? rect.width || sliderBase[alt] : rect.height || sliderBase[alt];\r\n },\r\n // Handler for attaching events trough a proxy.\r\n attachEvent = function (events, element, callback, data) {\r\n // This function can be used to 'filter' events to the slider.\r\n // element is a node, not a nodeList\r\n\r\n var method = function (e) {\r\n e = fixEvent(e, data.pageOffset, data.target || element);\r\n\r\n // fixEvent returns false if this event has a different target\r\n // when handling (multi-) touch events;\r\n if (!e) {\r\n return false;\r\n }\r\n\r\n // doNotReject is passed by all end events to make sure released touches\r\n // are not rejected, leaving the slider \"stuck\" to the cursor;\r\n if (isSliderDisabled() && !data.doNotReject) {\r\n return false;\r\n }\r\n\r\n // Stop if an active 'tap' transition is taking place.\r\n if (slider.classList.contains(prefix + \"slider-tap\") && !data.doNotReject) {\r\n return false;\r\n }\r\n\r\n // Ignore right or middle clicks on start #454\r\n if (events === actions.start && e.buttons !== undefined && e.buttons > 1) {\r\n return false;\r\n }\r\n\r\n // Ignore right or middle clicks on start #454\r\n if (data.hover && e.buttons) {\r\n return false;\r\n }\r\n\r\n // 'supportsPassive' is only true if a browser also supports touch-action: none in CSS.\r\n // iOS safari does not, so it doesn't get to benefit from passive scrolling. iOS does support\r\n // touch-action: manipulation, but that allows panning, which breaks\r\n // sliders after zooming/on non-responsive pages.\r\n // See: https://bugs.webkit.org/show_bug.cgi?id=133112\r\n if (!supportsPassive) {\r\n e.preventDefault();\r\n }\r\n\r\n e.calcPoint = e.points[options.ort];\r\n\r\n // Call the event handler with the event [ and additional data ].\r\n callback(e, data);\r\n };\r\n\r\n var methods = [];\r\n\r\n // Bind a closure on the target for every event type.\r\n events.split(\" \").forEach(function (eventName) {\r\n element.addEventListener(eventName, method, supportsPassive ? { passive: true } : false);\r\n methods.push([eventName, method]);\r\n });\r\n\r\n return methods;\r\n },\r\n // Provide a clean event with standardized offset values.\r\n fixEvent = function (e, pageOffset, eventTarget) {\r\n // Filter the event to register the type, which can be\r\n // touch, mouse or pointer. Offset changes need to be\r\n // made on an event specific basis.\r\n var touch = e.type.indexOf(\"touch\") === 0;\r\n var mouse = e.type.indexOf(\"mouse\") === 0;\r\n var pointer = e.type.indexOf(\"pointer\") === 0;\r\n\r\n var x;\r\n var y;\r\n\r\n // The only thing one handle should be concerned about is the touches that originated on top of it.\r\n if (touch) {\r\n // Returns true if a touch originated on the target.\r\n var isTouchOnTarget = function (checkTouch) {\r\n return checkTouch.target === eventTarget || eventTarget.contains(checkTouch.target);\r\n };\r\n\r\n // In the case of touchstart events, we need to make sure there is still no more than one\r\n // touch on the target so we look amongst all touches.\r\n if (e.type === \"touchstart\") {\r\n var targetTouches = Array.prototype.filter.call(e.touches, isTouchOnTarget);\r\n\r\n // Do not support more than one touch per handle.\r\n if (targetTouches.length > 1) {\r\n return false;\r\n }\r\n\r\n x = targetTouches[0].pageX;\r\n y = targetTouches[0].pageY;\r\n } else {\r\n // In the other cases, find on changedTouches is enough.\r\n var targetTouch = Array.prototype.find.call(e.changedTouches, isTouchOnTarget);\r\n\r\n // Cancel if the target touch has not moved.\r\n if (!targetTouch) {\r\n return false;\r\n }\r\n\r\n x = targetTouch.pageX;\r\n y = targetTouch.pageY;\r\n }\r\n }\r\n\r\n pageOffset = pageOffset || getPageOffset(DOC);\r\n\r\n if (mouse || pointer) {\r\n x = e.clientX + pageOffset.x;\r\n y = e.clientY + pageOffset.y;\r\n }\r\n\r\n e.pageOffset = pageOffset;\r\n e.points = [x, y];\r\n e.cursor = mouse || pointer; // Fix #435\r\n\r\n return e;\r\n },\r\n // Translate a coordinate in the document to a percentage on the slider\r\n calcPointToPercentage = function (calcPoint) {\r\n var location = calcPoint - offset(sliderBase, options.ort);\r\n var proposal = (location * 100) / baseSize();\r\n\r\n // Clamp proposal between 0% and 100%\r\n proposal = limit(proposal);\r\n\r\n return options.dir ? 100 - proposal : proposal;\r\n },\r\n // Find handle closest to a certain percentage on the slider\r\n getClosestHandle = function (proposal) {\r\n var closest = 100;\r\n var handleNumber = false;\r\n\r\n handles.forEach(function (handle, index) {\r\n // Disabled handles are ignored\r\n if (isHandleDisabled(index)) {\r\n return;\r\n }\r\n\r\n var pos = Math.abs(locations[index] - proposal);\r\n\r\n if (pos < closest || (pos === 100 && closest === 100)) {\r\n handleNumber = index;\r\n closest = pos;\r\n }\r\n });\r\n\r\n return handleNumber;\r\n },\r\n removeTooltips = function () {\r\n if (tooltips) {\r\n removeEvent(\"update.tooltips\");\r\n tooltips.forEach(function (tooltip) {\r\n if (tooltip) {\r\n removeElement(tooltip);\r\n }\r\n });\r\n tooltips = null;\r\n }\r\n },\r\n // The tooltips option is a shorthand for using the 'update' event.\r\n setTooltips = function () {\r\n removeTooltips();\r\n\r\n // Tooltips are added with options.tooltips in original order.\r\n tooltips = handles.map(addTooltip);\r\n\r\n bindEvent(\"update.tooltips\", function (values, handleNumber, unencoded) {\r\n if (!tooltips[handleNumber]) {\r\n return;\r\n }\r\n\r\n var formattedValue = values[handleNumber];\r\n\r\n if (options.tooltips[handleNumber] !== true) {\r\n formattedValue = options.tooltips[handleNumber].to(unencoded[handleNumber]);\r\n }\r\n\r\n tooltips[handleNumber].innerHTML = formattedValue;\r\n });\r\n\r\n // Fix for vertical sliders, if tooltip flows off the window move it the right side.\r\n if (\r\n options.ort == 1 &&\r\n offWindowLeft(\r\n handles[0].querySelector(\".\" + prefix + \"slider-tooltip\"),\r\n handles[0].querySelector(\"div.\" + prefix + \"slider-handle\")\r\n )\r\n ) {\r\n each(handles, function (handle) {\r\n handle.querySelector(\".\" + prefix + \"slider-tooltip\").style.right = \"auto\";\r\n handle.querySelector(\".\" + prefix + \"slider-tooltip\").style.left = \"120%\";\r\n });\r\n }\r\n },\r\n aria = function () {\r\n bindEvent(\"update\", function (values, handleNumber, unencoded, tap, positions) {\r\n // Update Aria Values for all handles, as a change in one changes min and max values for the next.\r\n handleNumbers.forEach(function (index) {\r\n var handle = handles[index];\r\n\r\n var min = checkHandlePosition(locations, index, 0, true, true, true);\r\n var max = checkHandlePosition(locations, index, 100, true, true, true);\r\n\r\n var now = positions[index];\r\n\r\n // Formatted value for display\r\n var text = options.ariaFormat.to(unencoded[index]);\r\n\r\n // Map to slider range values\r\n min = spectrum.fromStepping(min).toFixed(options.percision);\r\n max = spectrum.fromStepping(max).toFixed(options.percision);\r\n now = spectrum.fromStepping(now).toFixed(options.percision);\r\n\r\n handle.children[0].setAttribute(\"aria-valuemin\", min);\r\n handle.children[0].setAttribute(\"aria-valuemax\", max);\r\n handle.children[0].setAttribute(\"aria-valuenow\", now);\r\n handle.children[0].setAttribute(\"aria-valuetext\", text);\r\n });\r\n });\r\n },\r\n // Get the slider value.\r\n get = function () {\r\n var v = values.map(options.format.to);\r\n\r\n // If only one handle is used, return a single value.\r\n if (v.length === 1) {\r\n return values[0];\r\n }\r\n\r\n return v;\r\n },\r\n removeElement = function (el) {\r\n el.parentElement.removeChild(el);\r\n },\r\n getPageOffset = function (doc) {\r\n var supportPageOffset = window.pageXOffset !== undefined;\r\n var isCSS1Compat = (doc.compatMode || \"\") === \"CSS1Compat\";\r\n var x = supportPageOffset\r\n ? window.pageXOffset\r\n : isCSS1Compat\r\n ? doc.documentElement.scrollLeft\r\n : doc.body.scrollLeft;\r\n var y = supportPageOffset\r\n ? window.pageYOffset\r\n : isCSS1Compat\r\n ? doc.documentElement.scrollTop\r\n : doc.body.scrollTop;\r\n\r\n return {\r\n x: x,\r\n y: y,\r\n };\r\n },\r\n // we provide a function to compute constants instead\r\n // of accessing window.* as soon as the module needs it\r\n // so that we do not compute anything if not needed\r\n getActions = function () {\r\n // Determine the events to bind. IE11 implements pointerEvents without\r\n // a prefix, which breaks compatibility with the IE10 implementation.\r\n return window.navigator.pointerEnabled\r\n ? {\r\n start: \"pointerdown\",\r\n move: \"pointermove\",\r\n end: \"pointerup\",\r\n }\r\n : window.navigator.msPointerEnabled\r\n ? {\r\n start: \"MSPointerDown\",\r\n move: \"MSPointerMove\",\r\n end: \"MSPointerUp\",\r\n }\r\n : {\r\n start: \"mousedown touchstart\",\r\n move: \"mousemove touchmove\",\r\n end: \"mouseup touchend\",\r\n };\r\n };\r\n\r\n function Spectrum(entry, snap, singleStep) {\r\n this.xPct = [];\r\n this.xVal = [];\r\n this.xSteps = [singleStep || false];\r\n this.xNumSteps = [false];\r\n this.xHighestCompleteStep = [];\r\n\r\n this.snap = snap;\r\n\r\n var index;\r\n var ordered = []; // [0, 'min'], [1, '50%'], [2, 'max']\r\n\r\n // Map the object keys to an array.\r\n for (index in entry) {\r\n if (Object.prototype.hasOwnProperty.call(entry, index)) {\r\n ordered.push([entry[index], index]);\r\n }\r\n }\r\n\r\n // Sort all entries by value (numeric sort).\r\n if (ordered.length && typeof ordered[0][0] === \"object\") {\r\n ordered.sort(function (a, b) {\r\n return a[0][0] - b[0][0];\r\n });\r\n } else {\r\n ordered.sort(function (a, b) {\r\n return a[0] - b[0];\r\n });\r\n }\r\n\r\n // Convert all entries to subranges.\r\n for (index = 0; index < ordered.length; index++) {\r\n handleEntryPoint(ordered[index][1], ordered[index][0], this);\r\n }\r\n\r\n // Store the actual step values.\r\n // xSteps is sorted in the same order as xPct and xVal.\r\n this.xNumSteps = this.xSteps.slice(0);\r\n\r\n // Convert all numeric steps to the percentage of the subrange they represent.\r\n for (index = 0; index < this.xNumSteps.length; index++) {\r\n handleStepPoint(index, this.xNumSteps[index], this);\r\n }\r\n }\r\n\r\n Spectrum.prototype.getMargin = function (value) {\r\n var step = this.xNumSteps[0];\r\n\r\n if (step && (value / step) % 1 !== 0) {\r\n throw new Error(\"Slider 'limit', 'margin' and 'padding' must be divisible by step.\");\r\n }\r\n\r\n return this.xPct.length === 2 ? fromPercentage(this.xVal, value) : false;\r\n };\r\n\r\n Spectrum.prototype.toStepping = function (value) {\r\n value = toStepping(this.xVal, this.xPct, value);\r\n\r\n return value;\r\n };\r\n\r\n Spectrum.prototype.fromStepping = function (value) {\r\n return fromStepping(this.xVal, this.xPct, value);\r\n };\r\n\r\n Spectrum.prototype.getStep = function (value) {\r\n value = getStep(this.xPct, this.xSteps, this.snap, value);\r\n\r\n return value;\r\n };\r\n\r\n Spectrum.prototype.getDefaultStep = function (value, isDown, size) {\r\n var j = getJ(value, this.xPct);\r\n\r\n // When at the top or stepping down, look at the previous sub-range\r\n if (value === 100 || (isDown && value === this.xPct[j - 1])) {\r\n j = Math.max(j - 1, 1);\r\n }\r\n\r\n return (this.xVal[j] - this.xVal[j - 1]) / size;\r\n };\r\n\r\n Spectrum.prototype.getNearbySteps = function (value) {\r\n var j = getJ(value, this.xPct);\r\n\r\n return {\r\n stepBefore: {\r\n startValue: this.xVal[j - 2],\r\n step: this.xNumSteps[j - 2],\r\n highestStep: this.xHighestCompleteStep[j - 2],\r\n },\r\n thisStep: {\r\n startValue: this.xVal[j - 1],\r\n step: this.xNumSteps[j - 1],\r\n highestStep: this.xHighestCompleteStep[j - 1],\r\n },\r\n stepAfter: {\r\n startValue: this.xVal[j],\r\n step: this.xNumSteps[j],\r\n highestStep: this.xHighestCompleteStep[j],\r\n },\r\n };\r\n };\r\n\r\n Spectrum.prototype.countStepDecimals = function () {\r\n var stepDecimals = this.xNumSteps.map(countDecimals);\r\n return Math.max.apply(null, stepDecimals);\r\n };\r\n\r\n // Outside testing\r\n Spectrum.prototype.convert = function (value) {\r\n return this.getStep(this.toStepping(value));\r\n };\r\n\r\n // init\r\n if (!(stringSlider in element)) {\r\n validateOptions(options);\r\n\r\n if (options.ort == 1) {\r\n element.classList.add(prefix + \"align-items-center\");\r\n }\r\n if (options.content) {\r\n addContent();\r\n }\r\n\r\n addContainer();\r\n\r\n actions = getActions();\r\n\r\n slider = element.querySelector(\".\" + prefix + \"slider-target\");\r\n sliderBase = addSlider();\r\n addElements();\r\n\r\n // Attach user events.\r\n bindSliderEvents(optEvents);\r\n\r\n // Use the public value method to set the start values.\r\n valueSet(options.start);\r\n\r\n if (options.tooltips) {\r\n setTooltips();\r\n }\r\n\r\n aria();\r\n\r\n bindEvent(\"end\", endEventHandler);\r\n\r\n addLabels();\r\n\r\n for (var i = 0; i < handles.length; i++) {\r\n handles[i].firstChild.addEventListener(\"focus\", focusEventHandler, false);\r\n handles[i].firstChild.addEventListener(\"blur\", blurEventHandler, false);\r\n handles[i].addEventListener(\"keyup\", endEventHandler, false);\r\n }\r\n element.addEventListener(\"click\", endEventHandler, false);\r\n }\r\n\r\n element[stringSlider] = self;\r\n}\r\n","import {\r\n getClosest,\r\n prefix,\r\n DOC,\r\n isSafari,\r\n isIOS,\r\n uicoreCustomEvent,\r\n createElement,\r\n each,\r\n setFocus,\r\n getFocusableElements,\r\n jsonOptionsInit,\r\n} from \"./utilities.js\";\r\nimport Overflow from \"./overflow.js\";\r\nimport Collapse from \"./collapse.js\";\r\n\r\nexport default function Tab(element, options) {\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (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 self = this,\r\n stringTab = \"Tab\",\r\n tablist,\r\n activeTab = null,\r\n modalElement,\r\n withinModal,\r\n tabs,\r\n backButton,\r\n panels,\r\n delay,\r\n nested = false,\r\n focusableEls,\r\n thresholdMediaSize,\r\n tabContainer,\r\n accordionWrapper,\r\n smallMediaSize = window.matchMedia(\"(max-width: 767.98px)\"),\r\n overflow,\r\n overflowContainer;\r\n\r\n // Key mappings for easy reference\r\n var keys = {\r\n end: 35,\r\n home: 36,\r\n left: 37,\r\n up: 38,\r\n right: 39,\r\n down: 40,\r\n delete: 46,\r\n tab: 9,\r\n esc: 27,\r\n };\r\n\r\n // Add or substract depending on key pressed\r\n var direction = {\r\n 37: -1,\r\n 38: -1,\r\n 39: 1,\r\n 40: 1,\r\n },\r\n handleOverflowEvent = function (e) {\r\n overflow.detail = e.detail;\r\n },\r\n setFocusableElements = function () {\r\n focusableEls = getFocusableElements(modalElement);\r\n modalElement.firstFocusableEl = focusableEls[0];\r\n modalElement.lastFocusableEl = focusableEls[focusableEls.length - 1];\r\n },\r\n handleBackwardTab = function (e) {\r\n if (document.activeElement === modalElement.firstFocusableEl) {\r\n e.preventDefault();\r\n setFocus(modalElement.lastFocusableEl);\r\n }\r\n },\r\n handleForwardTab = function (e) {\r\n if (document.activeElement === modalElement.lastFocusableEl) {\r\n e.preventDefault();\r\n setFocus(modalElement.firstFocusableEl);\r\n }\r\n },\r\n handleModalKeydown = function (e) {\r\n switch (e.keyCode) {\r\n case keys.tab:\r\n if (focusableEls.length === 1) {\r\n e.preventDefault();\r\n break;\r\n }\r\n if (e.shiftKey) {\r\n handleBackwardTab(e);\r\n } else {\r\n handleForwardTab(e);\r\n }\r\n break;\r\n case keys.esc:\r\n self.hide();\r\n setFocus(activeTab);\r\n break;\r\n default:\r\n break;\r\n }\r\n },\r\n // When a tab is clicked, activateTab is fired to activate it\r\n clickEventListener = function (e) {\r\n var target = e.target;\r\n if (target === element && modalElement && !modalElement.classList.contains(prefix + \"show\")) {\r\n e.preventDefault();\r\n }\r\n self.show();\r\n activeTab = getClosest(target, \".\" + prefix + \"tab-link\");\r\n activateTab(activeTab, false);\r\n },\r\n // Handle keydown on tabs\r\n keydownEventListener = function (e) {\r\n var key = e.keyCode;\r\n\r\n switch (key) {\r\n case keys.end:\r\n e.preventDefault();\r\n // Activate last tab\r\n if (overflow) {\r\n overflow.clickEnd();\r\n }\r\n activateTab(tabs[tabs.length - 1]);\r\n break;\r\n case keys.home:\r\n e.preventDefault();\r\n if (overflow) {\r\n overflow.clickHome();\r\n }\r\n // Activate first tab\r\n activateTab(tabs[0]);\r\n break;\r\n\r\n // Up, down, left, and right keys are in keydown\r\n // because we need to prevent page scroll\r\n case keys.up:\r\n case keys.down:\r\n determineOrientation(e);\r\n break;\r\n case keys.left:\r\n case keys.right:\r\n determineOrientation(e);\r\n break;\r\n }\r\n },\r\n // Handle keyup on tabs\r\n keyupEventListener = function (e) {\r\n var key = e.keyCode;\r\n\r\n switch (key) {\r\n case keys.delete:\r\n determineDeletable(e);\r\n break;\r\n }\r\n },\r\n // When a tablist's aria-orientation is set to vertical,\r\n // only up and down arrow should function.\r\n // In all other cases only left and right arrow function.\r\n determineOrientation = function (e) {\r\n var key = e.keyCode;\r\n var vertical = tablist.getAttribute(\"aria-orientation\") == \"vertical\";\r\n var proceed = false;\r\n\r\n if (vertical) {\r\n if (key === keys.up || key === keys.down) {\r\n e.preventDefault();\r\n proceed = true;\r\n }\r\n } else {\r\n if (key === keys.left || key === keys.right) {\r\n e.preventDefault();\r\n proceed = true;\r\n }\r\n }\r\n\r\n if (proceed) {\r\n switchTabOnArrowPress(e);\r\n }\r\n },\r\n // Find first parent of el with role=\"tablist\"\r\n getParentTablist = function (el) {\r\n var role = \"tablist\";\r\n while (el && el.parentNode) {\r\n el = el.parentNode;\r\n if (el.getAttribute(\"role\") && el.getAttribute(\"role\") == role) {\r\n return el;\r\n }\r\n }\r\n return null;\r\n },\r\n // Get all siblings of el with class=\"dds__tab-link\"\r\n getSiblingTabs = function () {\r\n var siblingTabs = tablist.querySelectorAll(\".\" + prefix + \"tab-link\");\r\n for (var i = 0; i < siblingTabs.length; i++) {\r\n siblingTabs[i].index = i;\r\n }\r\n return siblingTabs;\r\n },\r\n getTablistPanels = function (tab) {\r\n var controls = tab.getAttribute(\"aria-controls\");\r\n var panelGroup = document.getElementById(controls).parentElement;\r\n var siblingPanels = panelGroup.children;\r\n\r\n return siblingPanels;\r\n },\r\n // Either focus the next, previous, first, or last tab\r\n // depening on key pressed\r\n switchTabOnArrowPress = function (e) {\r\n var pressed = e.keyCode;\r\n each(tabs, function (tab) {\r\n tab.addEventListener(\"focus\", focusEventHandler);\r\n });\r\n\r\n if (direction[pressed]) {\r\n var target = e.target;\r\n if (target.index !== undefined) {\r\n if (tabs[target.index + direction[pressed]]) {\r\n var targetTab = target.index + direction[pressed];\r\n if (overflow) {\r\n if (targetTab < overflow.detail.left) {\r\n overflow.clickLeft();\r\n } else if (targetTab > overflow.detail.right) {\r\n overflow.clickRight();\r\n }\r\n }\r\n setTimeout(function () {\r\n setFocus(tabs[targetTab]);\r\n }, 125);\r\n } else if (pressed === keys.left || pressed === keys.up) {\r\n if (overflow) overflow.clickEnd();\r\n focusLastTab();\r\n } else if (pressed === keys.right || pressed == keys.down) {\r\n if (overflow) overflow.clickHome();\r\n focusFirstTab();\r\n }\r\n }\r\n }\r\n },\r\n // Activates any given tab panel\r\n activateTab = function (tab, needsFocus) {\r\n needsFocus = needsFocus || true;\r\n\r\n // Deactivate all other tabs\r\n deactivateTabs(tab);\r\n\r\n // Remove tabindex attribute\r\n tab.removeAttribute(\"tabindex\");\r\n\r\n // Set the tab as selected\r\n tab.setAttribute(\"aria-selected\", \"true\");\r\n\r\n // Get the value of aria-controls (which is an ID)\r\n var controls = tab.getAttribute(\"aria-controls\");\r\n\r\n tab.classList.add(prefix + \"active\");\r\n\r\n // Remove hidden attribute from tab panel to make it visible\r\n // document.getElementById(controls).removeAttribute('hidden');\r\n document.getElementById(controls).classList.add(prefix + \"active\");\r\n document.getElementById(controls).classList.add(prefix + \"show\");\r\n\r\n // Set focus when required\r\n if (needsFocus) {\r\n setFocus(tab);\r\n }\r\n },\r\n // Deactivate all tabs and tab panels\r\n deactivateTabs = function (tab) {\r\n panels = getTablistPanels(tab);\r\n each(tabs, function (tab) {\r\n tab.setAttribute(\"tabindex\", \"-1\");\r\n tab.setAttribute(\"aria-selected\", \"false\");\r\n tab.removeEventListener(\"focus\", focusEventHandler);\r\n tab.classList.remove(prefix + \"active\");\r\n tab.classList.remove(prefix + \"show\");\r\n });\r\n\r\n each(panels, function (panel) {\r\n // panel.setAttribute('hidden', 'hidden');\r\n panel.classList.remove(prefix + \"active\");\r\n panel.classList.remove(prefix + \"show\");\r\n });\r\n },\r\n // Make a guess\r\n focusFirstTab = function () {\r\n setFocus(tabs[0]);\r\n },\r\n // Make a guess\r\n focusLastTab = function () {\r\n setFocus(tabs[tabs.length - 1]);\r\n },\r\n // Detect if a tab is deletable\r\n determineDeletable = function (e) {\r\n var target = e.target;\r\n\r\n if (target.getAttribute(\"data-deletable\") !== null) {\r\n // Delete target tab\r\n deleteTab(e);\r\n\r\n // Update arrays related to tabs widget\r\n // generateArrays();\r\n\r\n // Activate the closest tab to the one that was just deleted\r\n if (target.index - 1 < 0) {\r\n activateTab(tabs[0]);\r\n } else {\r\n activateTab(tabs[target.index - 1]);\r\n }\r\n }\r\n },\r\n // Deletes a tab and its panel\r\n deleteTab = function (e) {\r\n var target = e.target;\r\n var panel = document.getElementById(target.getAttribute(\"aria-controls\"));\r\n\r\n target.parentElement.removeChild(target);\r\n panel.parentElement.removeChild(panel);\r\n },\r\n // Determine whether there should be a delay\r\n // when user navigates with the arrow keys\r\n determineDelay = function () {\r\n var hasDelay = tablist.hasAttribute(\"data-delay\");\r\n var delay = 0;\r\n\r\n if (hasDelay) {\r\n var delayValue = tablist.getAttribute(\"data-delay\");\r\n if (delayValue) {\r\n delay = delayValue;\r\n } else {\r\n // If no value is specified, default to 300ms\r\n delay = 300;\r\n }\r\n }\r\n\r\n return delay;\r\n },\r\n //\r\n focusEventHandler = function (e) {\r\n var target = e.target;\r\n\r\n setTimeout(checkTabFocus, delay, target);\r\n },\r\n // Only activate tab on focus if it still has focus after the delay\r\n checkTabFocus = function (target) {\r\n var focused = document.activeElement;\r\n\r\n if (target === focused) {\r\n activateTab(target, false);\r\n }\r\n },\r\n // triggers\r\n // unused eslint\r\n // triggerShow = function () {\r\n // setFocus(modalElement);\r\n // },\r\n triggerHide = function () {\r\n modalElement.style.display = \"\";\r\n },\r\n createModal = function () {\r\n var modalBody = modalElement.querySelector(\".\" + prefix + \"modal-body\");\r\n\r\n tabContainer = getClosest(tablist, \".\" + prefix + \"tabs-container\");\r\n var tabContentContainer;\r\n if (overflowContainer) {\r\n tabContentContainer = getClosest(tabContainer, \".\" + prefix + \"tab-content\", false);\r\n } else {\r\n tabContentContainer = tabContainer.querySelector(\".\" + prefix + \"tab-content\");\r\n }\r\n\r\n if (modalBody.firstElementChild) {\r\n tabContentContainer.appendChild(modalBody.firstElementChild);\r\n }\r\n var tab = getClosest(event.target, \".\" + prefix + \"tab-link\");\r\n var controls = tab.getAttribute(\"aria-controls\");\r\n var tabContent = document.getElementById(controls);\r\n\r\n setTimeout(function () {\r\n modalBody.appendChild(tabContent);\r\n }, 50);\r\n },\r\n dismissHandler = function (e) {\r\n if (modalElement.classList.contains(prefix + \"show\")) {\r\n self.hide();\r\n e.preventDefault();\r\n setFocus(activeTab);\r\n }\r\n },\r\n resizeHandler = function () {\r\n if (!smallMediaSize.matches && modalElement.classList.contains(prefix + \"show\")) {\r\n self.hide();\r\n }\r\n },\r\n createAccordions = function () {\r\n accordionWrapper = createElement(\"div\", {\r\n class: prefix + \"accordion \" + prefix + \"mb-3\",\r\n id: tabs[0].id + \"parent\",\r\n });\r\n tabContainer.parentElement.insertBefore(accordionWrapper, tabContainer);\r\n each(tabs, function (tab) {\r\n var card = createElement(\"div\", {\r\n class: prefix + \"accordion-card\",\r\n });\r\n var cardHeader = createElement(\"div\", {\r\n class: prefix + \"accordion-card-header\",\r\n });\r\n var h5 = createElement(\"h5\", {\r\n class: prefix + \"mb-0\",\r\n });\r\n var accordionBtn = createElement(\"button\", {\r\n class: prefix + \"accordion-btn \" + prefix + \"collapsed \" + prefix + \"d-flex\",\r\n type: \"button\",\r\n role: \"button\",\r\n data_toggle: prefix + \"collapse\",\r\n data_target: \"#\" + tab.id + \"accord\", //Need to create IDs\r\n data_parent: \"#\" + tabs[0].id + \"parent\",\r\n aria_controls: tab.id + \"accord\",\r\n aria_expanded: \"false\",\r\n });\r\n var chevron = createElement(\"i\", {\r\n class: prefix + \"icons \" + prefix + \"chevron-right\",\r\n aria_hidden: \"true\",\r\n });\r\n var accordionSpan = createElement(\"span\", {\r\n class: prefix + \"mx-2\",\r\n html: tab.innerText,\r\n id: tab.id + \"header\",\r\n });\r\n\r\n accordionBtn.appendChild(chevron);\r\n accordionBtn.appendChild(accordionSpan);\r\n h5.appendChild(accordionBtn);\r\n cardHeader.appendChild(h5);\r\n card.appendChild(cardHeader);\r\n accordionWrapper.appendChild(card);\r\n var cardBodyWrapper = createElement(\"div\", {\r\n id: tab.id + \"accord\",\r\n class: prefix + \"collapse\",\r\n aria_labelledby: tab.id + \"header\",\r\n role: \"region\",\r\n aria_expanded: \"false\",\r\n });\r\n var cardBody = createElement(\"div\", {\r\n class: prefix + \"accordion-card-body\",\r\n html: document.getElementById(tab.getAttribute(\"aria-controls\")).innerHTML,\r\n });\r\n card.appendChild(cardBodyWrapper);\r\n cardBodyWrapper.appendChild(cardBody);\r\n });\r\n each(withinModal.querySelectorAll(\"[data-toggle='\" + prefix + \"collapse\" + \"']\"), function (accordion) {\r\n new Collapse(accordion);\r\n });\r\n },\r\n handleResizeSmall = function () {\r\n if (thresholdMediaSize.matches) {\r\n var activeTab = tabContainer.querySelector(\"[aria-selected='true']\");\r\n var sisterCollapseStr = activeTab.getAttribute(\"id\") + \"accord\";\r\n var activateCollapse = accordionWrapper.querySelector(\"[data-target='#\" + sisterCollapseStr + \"']\");\r\n if (activateCollapse && activateCollapse.classList.contains(prefix + \"collapsed\")) {\r\n //Need to Activate the collapse\r\n var prevActivated = accordionWrapper.querySelector(\"button[aria-expanded='true']\");\r\n var showBlock;\r\n if (prevActivated) {\r\n prevActivated.setAttribute(\"aria-expanded\", false);\r\n prevActivated.classList.add(prefix + \"collapsed\");\r\n showBlock = getClosest(prevActivated, \".dds__collapse\", false);\r\n showBlock.classList.remove(prefix + \"show\");\r\n showBlock.setAttribute(\"aria-expanded\", \"false\");\r\n }\r\n activateCollapse.setAttribute(\"aria-expanded\", true);\r\n activateCollapse.classList.remove(prefix + \"collapsed\");\r\n showBlock = getClosest(activateCollapse, \".dds__collapse\", false);\r\n showBlock.classList.add(prefix + \"show\");\r\n showBlock.setAttribute(\"aria-expanded\", \"true\");\r\n }\r\n accordionWrapper.classList.remove(prefix + \"d-none\");\r\n tabContainer.classList.add(prefix + \"d-none\");\r\n } else {\r\n var activeCollapse = accordionWrapper.querySelector(\"button[aria-expanded='true']\");\r\n if (activeCollapse) {\r\n var sisterTabStr = activeCollapse.getAttribute(\"aria-controls\").slice(0, -6);\r\n var tabToActivate = document.getElementById(sisterTabStr);\r\n activateTab(tabToActivate);\r\n }\r\n accordionWrapper.classList.add(prefix + \"d-none\");\r\n tabContainer.classList.remove(prefix + \"d-none\");\r\n }\r\n };\r\n\r\n this.show = function () {\r\n if (window.innerWidth > 767.98) {\r\n return;\r\n }\r\n createModal();\r\n modalElement.style.display = \"block\";\r\n modalElement.setAttribute(\"aria-hidden\", false);\r\n modalElement.classList.add(prefix + \"show\");\r\n\r\n if (isSafari && isIOS) {\r\n modalElement.classList.add(prefix + \"is-safari\");\r\n }\r\n\r\n if (DOC.body.classList.contains(prefix + \"modal-open\")) {\r\n nested = true;\r\n } else {\r\n DOC.body.classList.add(prefix + \"modal-open\");\r\n nested = false;\r\n }\r\n\r\n backButton = modalElement && modalElement.querySelector(\"[data-dismiss='\" + prefix + \"modal']\");\r\n backButton.addEventListener(\"click\", dismissHandler, false);\r\n smallMediaSize.addListener(resizeHandler);\r\n setTimeout(function () {\r\n setFocusableElements();\r\n setFocus(backButton);\r\n }, 50);\r\n modalElement.addEventListener(\"keydown\", handleModalKeydown);\r\n };\r\n\r\n this.hide = function () {\r\n //Need to append tab content back to tabContentContainer\r\n var modalBody = modalElement.querySelector(\".\" + prefix + \"modal-body\");\r\n // var tabContainer = getClosest(tablist, \".\" + prefix + \"tabs-container\", true);\r\n var tabContainer = getClosest(tablist, \".\" + prefix + \"tabs-container\");\r\n var tabContentContainer;\r\n if (overflowContainer) {\r\n tabContentContainer = getClosest(tabContainer, \".\" + prefix + \"tab-content\", false);\r\n } else {\r\n tabContentContainer = tabContainer.querySelector(\".\" + prefix + \"tab-content\");\r\n }\r\n if (modalBody.firstElementChild) {\r\n tabContentContainer.appendChild(modalBody.firstElementChild);\r\n }\r\n modalElement.classList.add(prefix + \"slide-right\");\r\n modalElement.classList.remove(prefix + \"show\");\r\n modalElement.setAttribute(\"aria-hidden\", true);\r\n if (isSafari && isIOS && modalElement.classList.contains(prefix + \"is-safari\")) {\r\n modalElement.classList.remove(prefix + \"is-safari\");\r\n }\r\n smallMediaSize.removeListener(resizeHandler);\r\n setTimeout(function () {\r\n triggerHide();\r\n if (!nested) {\r\n DOC.body.classList.remove(prefix + \"modal-open\");\r\n }\r\n backButton.removeEventListener(\"click\", dismissHandler, false);\r\n }, 200);\r\n modalElement.removeEventListener(\"keydown\", handleModalKeydown);\r\n };\r\n\r\n this.lazyLoad = function () {\r\n if (options.lazyload && overflow && !overflow.detail) {\r\n overflow.lazyLoad();\r\n overflow.detail = overflow.getCurrentDetails();\r\n overflowContainer.addEventListener(\"uicOverflowChangeEvent\", handleOverflowEvent, false);\r\n uicoreCustomEvent(\"Tab\", \"LazyLoadEvent\", element, { success: true });\r\n } else {\r\n uicoreCustomEvent(\"Tab\", \"LazyLoadEvent\", element, {\r\n success: false,\r\n msg: \"Tab cannot be lazy loaded. Check usage or avoid mulitple lazy loads.\",\r\n });\r\n }\r\n };\r\n\r\n // init\r\n if (!(stringTab in element)) {\r\n tablist = getParentTablist(element);\r\n modalElement = element.dataset[\"target\"] && DOC.getElementById(element.dataset[\"target\"].substr(1));\r\n delay = determineDelay();\r\n tabs = getSiblingTabs();\r\n // prevent adding event handlers twice\r\n element.addEventListener(\"keydown\", keydownEventListener);\r\n element.addEventListener(\"keyup\", keyupEventListener);\r\n element.addEventListener(\"click\", clickEventListener);\r\n overflowContainer = getClosest(element, \".\" + prefix + \"container-overflow\");\r\n if (overflowContainer) {\r\n if (!(\"overflow\" in tablist)) {\r\n overflow = new Overflow(overflowContainer, {\r\n lazyload: options.lazyload,\r\n });\r\n if (!options.lazyload) {\r\n overflow.detail = overflow.getCurrentDetails();\r\n overflowContainer.addEventListener(\"uicOverflowChangeEvent\", handleOverflowEvent);\r\n }\r\n tablist[\"overflow\"] = overflow;\r\n } else {\r\n overflow = tablist[\"overflow\"];\r\n }\r\n }\r\n tabContainer = getClosest(tablist, \".\" + prefix + \"tabs-container\");\r\n withinModal = getClosest(element, \".\" + prefix + \"modal-offcanvas\", true);\r\n if (withinModal) {\r\n //check if tabs are within Modal\r\n var accordionExist = withinModal.querySelector(\"#\" + element.id + \"accord\"); //check if accordions already been made\r\n if (!accordionExist) {\r\n createAccordions();\r\n if (withinModal.classList.contains(prefix + \"modal-width-25\")) {\r\n thresholdMediaSize = window.matchMedia(\"(max-width: 3071.92px)\"); //3071.92*0.25 = 767.98\r\n } else if (withinModal.classList.contains(prefix + \"modal-width-50\")) {\r\n thresholdMediaSize = window.matchMedia(\"(max-width: 1535.96px)\"); //1535.96*0.5 = 767.98\r\n } else if (withinModal.classList.contains(prefix + \"modal-width-75\")) {\r\n thresholdMediaSize = window.matchMedia(\"(max-width: 1023.97px)\"); //3071.92*0.25 = 767.98\r\n } else {\r\n thresholdMediaSize = window.matchMedia(\"(max-width: 767.98px)\");\r\n }\r\n thresholdMediaSize.addListener(handleResizeSmall);\r\n handleResizeSmall();\r\n }\r\n }\r\n }\r\n\r\n element[stringTab] = self;\r\n}\r\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 var a,\r\n b,\r\n c,\r\n d,\r\n h,\r\n s,\r\n cell,\r\n temp = [[], [], [], []];\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 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 =\r\n columns ||\r\n 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,\r\n 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(\r\n select,\r\n function (column) {\r\n this.remove(column);\r\n },\r\n this\r\n );\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 /* 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 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(\r\n rows,\r\n 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\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,\r\n b,\r\n c,\r\n d,\r\n 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 // 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 // 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,\r\n 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 var txt = getText(tdx);\r\n txt = txt ? txt : \"\";\r\n td.setAttribute(\"data-content\", txt);\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 if (isArray(data)) {\r\n // Check for multiple rows\r\n if (isArray(data[0])) {\r\n each(\r\n data,\r\n 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 },\r\n this\r\n );\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 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}\r\n","import {\r\n DOC,\r\n isObject,\r\n isArray,\r\n isJson,\r\n each,\r\n createElement,\r\n getClosest,\r\n prefix,\r\n classRemove,\r\n classAdd,\r\n getSibling,\r\n uicoreCustomEvent,\r\n validateNum,\r\n renderSvg,\r\n flush,\r\n isEdge,\r\n getText,\r\n extend,\r\n singleLineCSVtoArray,\r\n} from \"./utilities.js\";\r\nimport Pagination from \"./pagination.js\";\r\nimport Columns from \"./helpers/columns.js\";\r\nimport Rows from \"./helpers/rows.js\";\r\nimport Dropdown from \"./dropdown.js\";\r\nimport Modal from \"./modal.js\";\r\n\r\nexport default function TableComplex(element, params) {\r\n element =\r\n element instanceof HTMLElement\r\n ? element\r\n : (function () {\r\n return;\r\n })();\r\n\r\n function validateRow(row, name) {\r\n var hasErrors = \"\";\r\n var rowCount = row.match(/\\{((\\w*|\\d*):?)+\\}/g);\r\n if (rowCount.length < 1 || rowCount.length > 3) {\r\n hasErrors += \"Custom layout for row \" + name + \" was delared with an incorrect set of elements!\\n\";\r\n }\r\n var rowLength = 0;\r\n var localFunctions = [\"placeholder\", \"actions\", \"settings\", \"search\"];\r\n each(rowCount, function (temp) {\r\n var subElements = temp.replace(/\\{|\\}/g, \"\").split(\":\");\r\n if (\r\n subElements.indexOf(\"placeholder\") === -1 &&\r\n !temp.match(/\\{[A-Z,a-z]+:[1,2,3](:(start|center|end))*\\}/g)\r\n ) {\r\n hasErrors +=\r\n \"Custom layout for row \" +\r\n name +\r\n \" has an element \" +\r\n temp +\r\n \", which has been declared incorrectly!\\n\";\r\n }\r\n if (\r\n layoutOptions.indexOf(subElements[0]) === -1 &&\r\n !window[subElements[0]] &&\r\n localFunctions.indexOf(subElements[0]) < 0\r\n ) {\r\n // does custom function exist\r\n hasErrors +=\r\n \"Custom layout for row \" +\r\n name +\r\n \" has an element with custom function '\" +\r\n subElements[0] +\r\n \"' that is not accessible or dosen't exist!\\n\";\r\n }\r\n if (!isNaN(subElements[1].substring(0, 1))) {\r\n rowLength += +subElements[1].substring(0, 1);\r\n }\r\n });\r\n if (rowLength != 3) {\r\n hasErrors +=\r\n \"Custom layout for row \" +\r\n name +\r\n \" is configured with grid length '\" +\r\n rowLength +\r\n \"', which needs to add up to '3'!\\n\";\r\n }\r\n return hasErrors;\r\n }\r\n\r\n var jsonParams = element.dataset.tableData;\r\n if (jsonParams) {\r\n params = JSON.parse(jsonParams);\r\n }\r\n\r\n // init options\r\n var options = {};\r\n var layoutOptions = [\"{actions:1:start}\", \"{search:1:center}\", \"{settings:1:end}\"];\r\n\r\n // Check to see what Javascript options are set or are missing from table element classes\r\n options.sort = typeof params.sort === \"boolean\" ? params.sort : false;\r\n options.expand = typeof params.expand === \"boolean\" ? params.expand : false;\r\n if (options.expand) {\r\n options.expandIcon =\r\n params.expandIcon && typeof params.expandIcon === \"string\" ? params.expandIcon : \"arrow-tri-solid-right\";\r\n if (options.expandIcon.indexOf(prefix) > -1) {\r\n options.expandIcon = options.expandIcon.split(prefix)[1];\r\n }\r\n }\r\n options.showTotal = typeof params.showTotal === \"string\" ? params.showTotal : false;\r\n options.condensed = typeof params.condensed === \"boolean\" ? params.condensed : false;\r\n options.fixedColumns = typeof params.fixedColumns === \"boolean\" ? params.fixedColumns : false;\r\n options.rearrangeableColumns =\r\n typeof params.rearrangeableColumns === \"boolean\" ? params.rearrangeableColumns : false;\r\n options.fixedHeight = typeof params.fixedHeight === \"boolean\" ? params.fixedHeight : false;\r\n options.header = typeof params.header === \"boolean\" ? params.header : true;\r\n //Set Default Batch Actions\r\n options.defaultBatchActions = {};\r\n options.defaultBatchActions.exportCsv =\r\n params.defaultBatchActions && typeof params.defaultBatchActions.exportCsv === \"boolean\"\r\n ? params.defaultBatchActions.exportCsv\r\n : true;\r\n options.defaultBatchActions.exportJson =\r\n params.defaultBatchActions && typeof params.defaultBatchActions.exportJson === \"boolean\"\r\n ? params.defaultBatchActions.exportJson\r\n : true;\r\n options.defaultBatchActions.deleteRow =\r\n params.defaultBatchActions && typeof params.defaultBatchActions.delete === \"boolean\"\r\n ? params.defaultBatchActions.delete\r\n : true;\r\n\r\n // Set all table text to variables\r\n options.text = {};\r\n options.text.apply =\r\n params.text && params.text.apply && typeof params.text.apply === \"string\" ? params.text.apply : \"Apply\";\r\n options.text.cancel =\r\n params.text && params.text.cancel && typeof params.text.cancel === \"string\" ? params.text.cancel : \"Cancel\";\r\n options.text.exportCsv =\r\n params.text && params.text.exportCsv && typeof params.text.exportCsv === \"string\"\r\n ? params.text.exportCsv\r\n : \"Export as csv\";\r\n options.text.exportJson =\r\n params.text && params.text.exportJson && typeof params.text.exportJson === \"string\"\r\n ? params.text.exportJson\r\n : \"Export as json\";\r\n options.text.deleteRow =\r\n params.text && params.text.delete && typeof params.text.delete === \"string\" ? params.text.delete : \"Delete\";\r\n options.text.noEntries =\r\n params.text && params.text.noEntries && typeof params.text.noEntries === \"string\"\r\n ? params.text.noEntries\r\n : \"No entries found\";\r\n options.text.import =\r\n params.text && params.text.import && typeof params.text.import === \"string\" ? params.text.import : \"Import\";\r\n options.text.print =\r\n params.text && params.text.print && typeof params.text.print === \"string\" ? params.text.print : \"Print\";\r\n options.text.columns =\r\n params.text && params.text.columns && typeof params.text.columns === \"string\" ? params.text.columns : \"Columns\";\r\n options.text.batchActions =\r\n params.text && params.text.batchActions && typeof params.text.batchActions === \"string\"\r\n ? params.text.batchActions\r\n : \"Batch Actions\";\r\n options.text.chooseActions =\r\n params.text && params.text.chooseAction && typeof params.text.chooseAction === \"string\"\r\n ? params.text.chooseAction\r\n : \"Choose Actions\";\r\n options.text.allColumns =\r\n params.text && params.text.allColumns && typeof params.text.allColumns === \"string\"\r\n ? params.text.allColumns\r\n : \"All Columns\";\r\n\r\n // Remove the data from the Table element\r\n options.showData = jsonParams && typeof params.showData === \"boolean\" ? params.showData : true;\r\n // Search is either on by default or can be truned off\r\n options.search = typeof params.search === \"boolean\" ? params.search : true;\r\n if (options.search) {\r\n options.text.search = {};\r\n options.text.search.label =\r\n params.text && params.text.search && typeof params.text.search.label === \"string\"\r\n ? params.text.search.label\r\n : false;\r\n options.text.search.placeholder =\r\n params.text && params.text.search && typeof params.text.search.placeholder === \"string\"\r\n ? params.text.search.placeholder\r\n : false;\r\n }\r\n // Settings is either on by default or can be turned off\r\n options.settings = typeof params.settings === \"boolean\" ? params.settings : true;\r\n // Import either on by default or can be turned off\r\n options.import = typeof params.import === \"boolean\" ? params.import : true;\r\n // Printing is either on by default or can be turned off\r\n options.print = typeof params.print === \"boolean\" ? params.print : true;\r\n // Column Management is either on by default or can be turned off\r\n options.column = typeof params.column === \"boolean\" ? params.column : true;\r\n // Export details roww is either on by default or can be turned off\r\n options.exportDetails = typeof params.exportDetails === \"boolean\" ? params.exportDetails : true;\r\n // Control whether to show warning on csv export\r\n options.exportShowWarning = typeof params.exportShowWarning === \"boolean\" ? params.exportShowWarning : true;\r\n\r\n var allowedExtensions = [\".csv\", \".json\", \".js\"];\r\n options.allowedImportExtensions = [];\r\n //is it just one or is it an array\r\n each(params.allowedImportExtensions, function (ext) {\r\n if (typeof ext === \"string\" && allowedExtensions.indexOf(ext) >= -1) {\r\n options.allowedImportExtensions.push(ext);\r\n }\r\n });\r\n if (options.allowedImportExtensions.length === 0) options.allowedImportExtensions = allowedExtensions;\r\n // Bulk Actions\r\n options.actionsSelectFilters = [];\r\n each(params.additionalActions, function (additionalAction) {\r\n if (additionalAction.js) {\r\n var testJs = additionalAction.js;\r\n if (additionalAction.js.indexOf(\"(\") > -1) {\r\n testJs = additionalAction.js.substring(0, additionalAction.js.indexOf(\"(\")).trim();\r\n } else {\r\n additionalAction.js += \"()\";\r\n }\r\n if (!window[testJs]) {\r\n throw new Error(\r\n \"The additional action function \" +\r\n additionalAction.js +\r\n \" could not be accessed, please verify and try again!\"\r\n );\r\n } else {\r\n options.actionsSelectFilters.splice(additionalAction.pos, 0, additionalAction);\r\n }\r\n } else {\r\n options.actionsSelectFilters.splice(additionalAction.pos, 0, additionalAction);\r\n }\r\n });\r\n for (var action in options.defaultBatchActions) {\r\n if (options.defaultBatchActions[action]) {\r\n if (action === \"deleteRow\" && options.actionsSelectFilters[0]) {\r\n //place divider above `delete` action only when other actions are present\r\n options.actionsSelectFilters.push(\"hr\");\r\n }\r\n options.actionsSelectFilters.push(options.text[action]);\r\n }\r\n }\r\n options.select = typeof params.select === \"boolean\" ? params.select : true;\r\n if (!options.select) layoutOptions.splice(layoutOptions.indexOf(\"{actions:1:start}\"), 1, \"{placeholder:1:start}\");\r\n if (!options.search) layoutOptions.splice(layoutOptions.indexOf(\"{search:1:center}\"), 1, \"{placeholder:1:center}\");\r\n if (!options.settings) layoutOptions.splice(layoutOptions.indexOf(\"{settings:1:end}\"), 1, \"{placeholder:1:end}\");\r\n // Customise the layout\r\n if (params.layout) {\r\n var rowCount = 0;\r\n var hasErrors = \"\";\r\n if (params.layout.row1) {\r\n hasErrors += validateRow(params.layout.row1, \"one\");\r\n rowCount++;\r\n }\r\n if (params.layout.row2) {\r\n hasErrors += validateRow(params.layout.row2, \"two\");\r\n rowCount++;\r\n }\r\n if (rowCount === 0) {\r\n hasErrors += \"Custom layout was configured to have no Rows, which it needs to have at least 1!\\n\";\r\n }\r\n if (hasErrors.length > 0) {\r\n throw new Error(hasErrors);\r\n }\r\n }\r\n options.layout = params.layout ? params.layout : { row2: layoutOptions.join(\"\") };\r\n\r\n if (isArray(params.perPageSelect)) {\r\n if (typeof params.perPageSelect[0] === \"number\") {\r\n options.perPageSelect = params.perPageSelect.map(function (i) {\r\n i = Math.abs(parseInt(i));\r\n return i;\r\n });\r\n } else if (validateNum(params.perPageSelect[0])) {\r\n options.perPageSelect = params.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, 48, 96];\r\n }\r\n options.perPage =\r\n options.perPageSelect.indexOf(params.perPage) > -1 ? validateNum(params.perPage) : options.perPageSelect[0];\r\n options.origPerPage = options.perPage;\r\n options.items = validateNum(params.items, 0);\r\n options.buttonLabelLeft =\r\n params.buttonLabelLeft && typeof params.buttonLabelLeft === \"string\" ? params.buttonLabelLeft : \"Previous\";\r\n options.buttonLabelRight =\r\n params.buttonLabelRight && typeof params.buttonLabelRight === \"string\" ? params.buttonLabelRight : \"Next\";\r\n options.disablePaginationInput =\r\n params.disablePaginationInput !== null && typeof params.disablePaginationInput === \"boolean\"\r\n ? params.disablePaginationInput\r\n : false;\r\n\r\n // transfer data\r\n options.data = {};\r\n if (!params.data) {\r\n var msg = \"Missing data parameters for table!\";\r\n console.error(msg);\r\n uicoreCustomEvent(\"Table\", \"Error\", table, { msg: msg });\r\n return false;\r\n }\r\n if (!params.data.headings) {\r\n msg = \"Missing data.headings parameters for table!\";\r\n console.error(msg);\r\n uicoreCustomEvent(\"Table\", \"Error\", table, { msg: msg });\r\n return false;\r\n }\r\n options.data.headings = params.data.headings;\r\n if (!params.data.columns) {\r\n msg = \"Missing data.columns parameters for table!\";\r\n console.error(msg);\r\n uicoreCustomEvent(\"Table\", \"Error\", table, { msg: msg });\r\n return false;\r\n }\r\n options.data.columns = params.data.columns;\r\n if (!params.data.rows) {\r\n msg = \"Missing data.rows parameters for table!\";\r\n console.error(msg);\r\n uicoreCustomEvent(\"Table\", \"Error\", table, { msg: msg });\r\n return false;\r\n }\r\n options.data.rows = params.data.rows;\r\n\r\n options.labels = {\r\n noRows: options.text.noEntries, // Message shown when there are no search results\r\n };\r\n\r\n if (!options.showData) {\r\n delete element.dataset.tableData;\r\n }\r\n\r\n var self = this,\r\n stringTable = \"Table\",\r\n table = element,\r\n body,\r\n head,\r\n header,\r\n wrapper,\r\n container,\r\n bottom,\r\n columnBox,\r\n isIE,\r\n pages,\r\n currentPage,\r\n totalPages,\r\n paginationElement,\r\n pagination,\r\n columnRenderers,\r\n selectedColumns,\r\n labels,\r\n rect,\r\n input,\r\n searching,\r\n dragSrcEl,\r\n sortedColumnIdx,\r\n metHeight = true,\r\n batchId,\r\n allCheckboxId,\r\n searchId,\r\n columnsFixed = false,\r\n initialY,\r\n begOffsetTop,\r\n currentY,\r\n moveableCols = [],\r\n colMoved = false,\r\n // Handlers\r\n handleTouchEvent = function (e) {\r\n if (e.pointerType === \"mouse\") {\r\n return false; //If mouse touch on IE, cancel and use handleDragEvent\r\n } else {\r\n e.preventDefault(); //else prevent default actions, like scrolling\r\n }\r\n var yOffset = 0;\r\n var finOffsetTop;\r\n if (e.type === \"touchstart\" || e.type === \"pointerdown\") {\r\n if (e.type === \"pointerdown\") {\r\n initialY = e.clientY - yOffset;\r\n } else {\r\n initialY = e.touches[0].clientY - yOffset;\r\n }\r\n dragSrcEl = e[\"target\"];\r\n if (dragSrcEl.tagName != \"LI\") {\r\n dragSrcEl = getClosest(dragSrcEl, \".\" + prefix + \"table-cmplx-drag-li\");\r\n }\r\n dragSrcEl.dataTransfer = {};\r\n dragSrcEl.dataTransfer.data = dragSrcEl.outerHTML;\r\n begOffsetTop = dragSrcEl.offsetTop;\r\n if (e.target.type === \"checkbox\" || e.target.parentElement.querySelector(\"input\")) {\r\n var targetEl =\r\n e.target.type === \"checkbox\" ? e.target : e.target.parentElement.querySelector(\"input\");\r\n setTimeout(function () {\r\n handleCheckBoxEvent(targetEl);\r\n }, 250);\r\n }\r\n }\r\n if (e.type === \"touchmove\" || e.type === \"pointermove\") {\r\n e.preventDefault();\r\n var before = false;\r\n if (isIE || isEdge) {\r\n currentY = e.clientY - initialY;\r\n dragSrcEl.addEventListener(\"pointerleave\", handlePointerLeave);\r\n } else {\r\n currentY = e.touches[0].clientY - initialY; //difference btn start and end if you move up it is negative\r\n }\r\n yOffset = currentY;\r\n if (yOffset === 0) {\r\n return false;\r\n }\r\n\r\n if (!dragSrcEl) {\r\n dragSrcEl = e[\"target\"];\r\n if (dragSrcEl.tagName != \"LI\") {\r\n dragSrcEl = getClosest(dragSrcEl, \".\" + prefix + \"table-cmplx-drag-li\");\r\n }\r\n }\r\n\r\n finOffsetTop = begOffsetTop + currentY;\r\n dragSrcEl.style.transform = \"translate3d(0, \" + yOffset + \"px, 0)\";\r\n dragSrcEl.style.opacity = 0.5;\r\n colMoved = true;\r\n each(moveableCols, function (col) {\r\n var startedBelow = col.offsetTop < dragSrcEl.offsetTop;\r\n var startedAbove = col.offsetTop > dragSrcEl.offsetTop;\r\n var endedBelow = col.offsetTop < finOffsetTop;\r\n var endedAbove = col.offsetTop > finOffsetTop;\r\n if (\r\n (endedAbove && startedBelow) || //if started from below and moved above column\r\n (endedBelow && startedAbove)\r\n ) {\r\n //if started from above and moved below column\r\n if (endedAbove) {\r\n //if item is being moved before col\r\n if (col.previousElementSibling) {\r\n //if not the first column\r\n if (finOffsetTop > col.previousElementSibling.offsetTop) {\r\n //if moving up, but not above predecessor\r\n if (col.classList.contains(prefix + \"border-bottom-black\")) {\r\n col.classList.remove(prefix + \"border-bottom-black\");\r\n }\r\n col.classList.add(prefix + \"border-top-black\");\r\n } else if (col.classList.contains(prefix + \"border-top-black\")) {\r\n col.classList.remove(prefix + \"border-top-black\");\r\n } else if (col.classList.contains(prefix + \"border-bottom-black\")) {\r\n col.classList.remove(prefix + \"border-bottom-black\");\r\n }\r\n } else if (finOffsetTop < 0) {\r\n //if being placed before first column\r\n col.classList.add(prefix + \"border-top-black\");\r\n }\r\n } else if (endedBelow) {\r\n //if item is being moved below\r\n if (col.nextElementSibling) {\r\n if (finOffsetTop < col.nextElementSibling.offsetTop) {\r\n if (col.classList.contains(prefix + \"border-top-black\")) {\r\n col.classList.remove(prefix + \"border-top-black\");\r\n }\r\n col.classList.add(prefix + \"border-bottom-black\");\r\n } else if (col.classList.contains(prefix + \"border-bottom-black\")) {\r\n //either should get the styling or should not\r\n col.classList.remove(prefix + \"border-bottom-black\");\r\n } else if (col.classList.contains(prefix + \"border-top-black\")) {\r\n col.classList.remove(prefix + \"border-top-black\");\r\n }\r\n } else if (finOffsetTop > col.offsetTop) {\r\n col.classList.add(prefix + \"border-bottom-black\");\r\n }\r\n }\r\n } else if (\r\n startedBelow &&\r\n col.nextElementSibling &&\r\n col.nextElementSibling.offsetTop > finOffsetTop &&\r\n !col.nextElementSibling.classList.contains(prefix + \"table-cmplx-drag-li\")\r\n ) {\r\n // started from below + moved below a draggable but above a fixed column\r\n col.classList.add(prefix + \"border-bottom-black\");\r\n } else if (\r\n endedAbove &&\r\n startedAbove &&\r\n finOffsetTop > col.previousElementSibling.offsetTop &&\r\n col.previousElementSibling.classList.contains(prefix + \"table-cmplx-li\")\r\n ) {\r\n //if started from above + moved above but below a fixed\r\n col.classList.add(prefix + \"border-top-black\");\r\n } else if (col.classList.contains(prefix + \"border-top-black\")) {\r\n //If it has a border but doesmn't fall into above category, remove it\r\n col.classList.remove(prefix + \"border-top-black\");\r\n } else if (col.classList.contains(prefix + \"border-bottom-black\")) {\r\n //If it has a border but doesmn't fall into above category, remove it\r\n col.classList.remove(prefix + \"border-bottom-black\");\r\n }\r\n });\r\n }\r\n if (e.type === \"touchend\" || e.type === \"pointerup\") {\r\n initialY = currentY;\r\n before = false;\r\n if (!dragSrcEl) {\r\n dragSrcEl = e[\"target\"];\r\n if (dragSrcEl.tagName != \"LI\") {\r\n dragSrcEl = getClosest(dragSrcEl, \".\" + prefix + \"table-cmplx-drag-li\");\r\n }\r\n }\r\n finOffsetTop = begOffsetTop + currentY;\r\n if (colMoved) {\r\n each(moveableCols, function (col) {\r\n if (col != dragSrcEl) {\r\n var startedBelow = col.offsetTop < dragSrcEl.offsetTop;\r\n var startedAbove = col.offsetTop > dragSrcEl.offsetTop;\r\n var endedBelow = col.offsetTop < finOffsetTop;\r\n var endedAbove = col.offsetTop > finOffsetTop;\r\n if (\r\n (endedAbove && startedBelow) ||\r\n (endedBelow && startedAbove) ||\r\n (col.nextElementSibling &&\r\n startedBelow &&\r\n col.nextElementSibling.offsetTop > finOffsetTop &&\r\n !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\r\n (endedAbove &&\r\n startedAbove &&\r\n finOffsetTop > col.previousElementSibling.offsetTop &&\r\n col.previousElementSibling.classList.contains(prefix + \"table-cmplx-li\"))\r\n ) {\r\n if (\r\n (endedAbove && startedBelow) ||\r\n (endedAbove &&\r\n startedAbove &&\r\n finOffsetTop > col.previousElementSibling.offsetTop &&\r\n col.previousElementSibling.classList.contains(prefix + \"table-cmplx-li\"))\r\n ) {\r\n before = true;\r\n if (col.previousElementSibling) {\r\n //if not the first column\r\n if (finOffsetTop > col.previousElementSibling.offsetTop) {\r\n handleTouchEnd(dragSrcEl, before, col);\r\n }\r\n } else if (!col.previousElementSibling && finOffsetTop < 0) {\r\n //if being placed before the first column\r\n handleTouchEnd(dragSrcEl, before, col);\r\n }\r\n } else if (\r\n (endedBelow && startedAbove) ||\r\n (startedBelow &&\r\n col.nextElementSibling &&\r\n col.nextElementSibling.offsetTop > finOffsetTop &&\r\n !col.nextElementSibling.classList.contains(prefix + \"table-cmplx-drag-li\"))\r\n ) {\r\n //if moving column down\r\n if (col.nextElementSibling && finOffsetTop < col.nextElementSibling.offsetTop) {\r\n handleTouchEnd(dragSrcEl, before, col);\r\n } else if (!col.nextElementSibling && finOffsetTop > col.offsetTop) {\r\n //if being placed below last column\r\n handleTouchEnd(dragSrcEl, before, col);\r\n }\r\n }\r\n\r\n col.classList.remove(prefix + \"border-top-black\");\r\n col.classList.remove(prefix + \"border-bottom-black\");\r\n\r\n columnBox.orderChanged = true;\r\n }\r\n }\r\n });\r\n if (dragSrcEl.hasAttribute(\"style\")) {\r\n //set back to origin if doesn't get moved into available slot\r\n dragSrcEl.removeAttribute(\"style\");\r\n }\r\n colMoved = false; //once touch end is over, set colMoved back to false\r\n } else if (dragSrcEl.querySelector(\"input\")) {\r\n if (dragSrcEl.querySelector(\"input\").checked) {\r\n dragSrcEl.querySelector(\"input\").checked = false;\r\n } else {\r\n dragSrcEl.querySelector(\"input\").checked = true;\r\n }\r\n }\r\n var applyButton = columnBox.querySelector(\".\" + prefix + \"btn-primary\");\r\n if (applyButton.disabled) {\r\n applyButton.removeAttribute(\"disabled\");\r\n }\r\n if (isIE || isEdge) {\r\n dragSrcEl.removeEventListener(\"pointerleave\", handlePointerLeave);\r\n }\r\n }\r\n },\r\n handleTouchEnd = function (dragSrcEl, before, col) {\r\n var input = dragSrcEl.querySelector(\"input\");\r\n var checked = input && input.checked;\r\n setTimeout(function () {\r\n var dropElem;\r\n var dropHTML = dragSrcEl.dataTransfer.data;\r\n\r\n dragSrcEl.parentNode.removeChild(dragSrcEl);\r\n if (before) {\r\n col.insertAdjacentHTML(\"beforebegin\", dropHTML);\r\n dropElem = col.previousSibling;\r\n } else {\r\n col.insertAdjacentHTML(\"afterend\", dropHTML);\r\n dropElem = col.nextSibling;\r\n }\r\n\r\n moveableCols.push(dropElem);\r\n moveableCols = moveableCols.filter(function (value) {\r\n return value != dragSrcEl;\r\n });\r\n if (checked) {\r\n dropElem.querySelector(\"input\").checked = true;\r\n }\r\n setupDragEvents(dropElem);\r\n }, 50);\r\n },\r\n handlePointerLeave = function (e) {\r\n setTimeout(function () {\r\n dragSrcEl = e[\"relatedTarget\"];\r\n if (dragSrcEl.tagName != \"LI\") {\r\n dragSrcEl = getClosest(dragSrcEl, \".\" + prefix + \"table-cmplx-drag-li\");\r\n }\r\n if (dragSrcEl.hasAttribute(\"style\")) {\r\n dragSrcEl.removeAttribute(\"style\");\r\n }\r\n each(moveableCols, function (col) {\r\n if (col.classList.contains(prefix + \"border-top-black\")) {\r\n col.classList.remove(prefix + \"border-top-black\");\r\n } else if (col.classList.contains(prefix + \"border-bottom-black\")) {\r\n col.classList.remove(prefix + \"border-bottom-black\");\r\n }\r\n });\r\n }, 50);\r\n },\r\n handleDragEvent = function (e) {\r\n e.stopPropagation();\r\n if (e.type === \"dragstart\") {\r\n dragSrcEl = e[\"target\"];\r\n\r\n dragSrcEl.dataTransfer = {};\r\n dragSrcEl.dataTransfer.data = dragSrcEl.outerHTML;\r\n }\r\n if (e.type === \"dragover\") {\r\n var overEl = e[\"target\"];\r\n if (overEl.tagName != \"LI\") {\r\n overEl = getClosest(overEl, \".\" + prefix + \"table-cmplx-drag-li\");\r\n }\r\n if (dragSrcEl != overEl) {\r\n if (e.preventDefault) {\r\n e.preventDefault(); // Necessary. Allows us to drop.\r\n }\r\n overEl.classList.add(prefix + \"border-bottom-black\");\r\n if (\r\n overEl.previousElementSibling &&\r\n overEl.previousElementSibling.classList.contains(prefix + \"border-bottom-black\")\r\n ) {\r\n overEl.previousElementSibling.classList.remove(prefix + \"border-bottom-black\");\r\n }\r\n if (\r\n overEl.nextElementSibling &&\r\n overEl.nextElementSibling.classList.contains(prefix + \"border-bottom-black\")\r\n ) {\r\n overEl.nextElementSibling.classList.remove(prefix + \"border-bottom-black\");\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n if (e.type === \"dragleave\") {\r\n var leaveEl = e[\"target\"];\r\n if (leaveEl.tagName != \"LI\") {\r\n leaveEl = getClosest(leaveEl, \".\" + prefix + \"table-cmplx-drag-li\");\r\n }\r\n if (dragSrcEl != leaveEl) {\r\n if (e.preventDefault) {\r\n e.preventDefault(); // Necessary. Allows us to drop.\r\n }\r\n\r\n leaveEl.classList.remove(prefix + \"border-bottom-black\");\r\n return false;\r\n }\r\n }\r\n\r\n if (e.type === \"drop\") {\r\n if (e.stopPropagation) {\r\n e.stopPropagation(); // Stops some browsers from redirecting.\r\n }\r\n\r\n var dropTarget = e[\"target\"];\r\n if (dropTarget.tagName != \"LI\") {\r\n dropTarget = getClosest(dropTarget, \".\" + prefix + \"table-cmplx-drag-li\");\r\n }\r\n // Don't do anything if dropping the same column we're dragging.\r\n if (dragSrcEl != dropTarget) {\r\n var checkbox = dragSrcEl.querySelector(\"input\");\r\n var checked = checkbox ? checkbox.checked : false;\r\n var dropHTML = dragSrcEl.dataTransfer.data;\r\n dragSrcEl.parentNode.removeChild(dragSrcEl);\r\n\r\n dropTarget.insertAdjacentHTML(\"afterend\", dropHTML);\r\n var dropElem = dropTarget.nextSibling;\r\n if (checked) {\r\n dropElem.querySelector(\"input\").checked = true;\r\n }\r\n setupDragEvents(dropElem);\r\n dropTarget.classList.remove(prefix + \"border-bottom-black\");\r\n\r\n columnBox.orderChanged = true;\r\n var applyButton = columnBox.querySelector(\".\" + prefix + \"btn-primary\");\r\n // eanble Apply and Cancel\r\n if (applyButton.disabled) {\r\n applyButton.removeAttribute(\"disabled\");\r\n }\r\n }\r\n return false;\r\n }\r\n },\r\n handleImportActionEvent = function (e) {\r\n var t = e.target;\r\n var reader = new FileReader();\r\n var output = \"\"; //placeholder for text output\r\n var type = \"\"; //placeholder for file type\r\n if (t.files && t.files[0]) {\r\n if (!t.files[0].type || t.files[0].type === \"application/json\") {\r\n type = \"json\";\r\n } else if (\r\n t.files[0].type &&\r\n (t.files[0].type === \"application/vnd.ms-excel\" || t.files[0].type === \"text/csv\")\r\n ) {\r\n type = \"csv\";\r\n } else {\r\n var msg = \"The file type for the file selected was not recognizable!\";\r\n console.error(msg);\r\n uicoreCustomEvent(\"Table\", \"Error\", table, { msg: msg });\r\n }\r\n reader.onload = function (e) {\r\n output = e.target.result;\r\n if (type === \"json\") {\r\n if (!isJson(output)) {\r\n msg = \"The file type for the supplied file was not recognizable!\";\r\n console.error(msg);\r\n uicoreCustomEvent(\"Table\", \"Error\", table, { msg: msg });\r\n }\r\n }\r\n var inputOptions = { type: type, data: output, headings: true };\r\n self.import(inputOptions);\r\n t.value = \"\";\r\n }; //end onload()\r\n reader.readAsText(t.files[0]);\r\n } //end if html5 filelist support\r\n e.preventDefault();\r\n },\r\n handleExportActionEvent = function (t) {\r\n var exportFileOptions = {};\r\n if (options.expand && options.select) {\r\n exportFileOptions.skipColumn = [0, 1];\r\n } else if (options.expand || options.select) {\r\n exportFileOptions.skipColumn = [0];\r\n }\r\n\r\n if (t.innerHTML === options.text.exportCsv) {\r\n exportFileOptions.type = \"csv\";\r\n } else {\r\n exportFileOptions.type = \"json\";\r\n }\r\n self.export(exportFileOptions);\r\n },\r\n handleDeleteActionEvent = function () {\r\n self.delete();\r\n },\r\n handleSelectAllChange = function (state) {\r\n if (options.select) {\r\n var actions = wrapper.querySelector(\"[data-target='#cmplxTablesActions']\");\r\n if (state === \"checked\" || (state === \"indeterminate\" && actions.disabled)) {\r\n actions.removeAttribute(\"disabled\");\r\n } else if (state === \"unchecked\" && !actions.disabled && table.selectedRows.length < 1) {\r\n actions.setAttribute(\"disabled\", \"\");\r\n }\r\n }\r\n },\r\n handleCheckBoxEvent = function (t) {\r\n var nodeIndex,\r\n columnBoxCheckboxes = getClosest(t, \".\" + prefix + \"column-box\", true);\r\n if (columnBoxCheckboxes) {\r\n columnBoxCheckboxes = columnBoxCheckboxes.querySelectorAll(\".\" + prefix + \"column-box input\");\r\n }\r\n if (options.select && t.classList.contains(prefix + \"table-cmplx-select-all\")) {\r\n // Header Select All\r\n if (table.hasRows) {\r\n var cellIdx = getHeaderCellIndex(prefix + \"table-cmplx-select-all\");\r\n var check = t.checked;\r\n if (!check || t.state === \"indeterminate\") {\r\n check = false;\r\n t.checked = false;\r\n t.state = \"unchecked\";\r\n } else {\r\n t.state = \"checked\";\r\n check = true;\r\n }\r\n each(pages[currentPage - 1], function (row) {\r\n if (row.cells.length != 1) {\r\n var cell = row.cells[cellIdx];\r\n var input = cell.querySelector(\"input[type='checkbox']\");\r\n var dataInput = table.data[row.dataIndex].cells[cellIdx].querySelector(\r\n \"input[type='checkbox']\"\r\n );\r\n\r\n if (check) {\r\n dataInput.checked = input.checked = true;\r\n table.selectedRows.push(row.dataIndex);\r\n row.classList.add(\"selected\");\r\n if (options.expand) {\r\n row.nextElementSibling.classList.add(\"selected\");\r\n }\r\n t.state = \"checked\";\r\n } else {\r\n dataInput.checked = input.checked = false;\r\n table.selectedRows.pop(row.dataIndex);\r\n row.classList.remove(\"selected\");\r\n if (options.expand) {\r\n row.nextElementSibling.classList.remove(\"selected\");\r\n }\r\n }\r\n }\r\n });\r\n pages[currentPage - 1].selected = t.checked;\r\n handleSelectAllChange(t.state);\r\n } else {\r\n t.checked = false;\r\n }\r\n } else if (options.select && t.parentNode.classList.contains(prefix + \"table-cmplx-row-select\")) {\r\n // Table Cell Select\r\n cellIdx = getHeaderCellIndex(prefix + \"table-cmplx-select-all\");\r\n var tr = getClosest(t, \"tr\", false);\r\n if (t.checked) {\r\n table.data[tr.dataIndex].cells[cellIdx].querySelector(\"input[type='checkbox']\").checked = true;\r\n tr.classList.add(\"selected\");\r\n if (options.expand) {\r\n tr.nextElementSibling.classList.add(\"selected\");\r\n }\r\n if (table.selectedRows.length === 0) {\r\n table.selectedRows.push(tr.dataIndex);\r\n } else {\r\n var newRows = [];\r\n for (var idx = 0; idx < table.selectedRows.length; idx++) {\r\n var value = table.selectedRows[idx];\r\n var less = table.selectedRows[idx - 1];\r\n var more = table.selectedRows[idx + 1];\r\n if (\r\n tr.dataIndex < value &&\r\n (less === undefined || tr.dataIndex > less) &&\r\n newRows.indexOf(tr.dataIndex) === -1\r\n ) {\r\n newRows.push(tr.dataIndex);\r\n newRows.push(value);\r\n } else if (\r\n tr.dataIndex > value &&\r\n (more === undefined || tr.dataIndex < more) &&\r\n newRows.indexOf(tr.dataIndex) === -1\r\n ) {\r\n newRows.push(value);\r\n newRows.push(tr.dataIndex);\r\n } else {\r\n newRows.push(value);\r\n }\r\n }\r\n if (newRows.length > 0) {\r\n table.selectedRows = newRows;\r\n }\r\n }\r\n } else {\r\n table.data[tr.dataIndex].cells[cellIdx].querySelector(\"input[type='checkbox']\").checked = false;\r\n tr.classList.remove(\"selected\");\r\n if (options.expand) {\r\n tr.nextElementSibling.classList.remove(\"selected\");\r\n }\r\n table.selectedRows = table.selectedRows.filter(function (value) {\r\n if (value != tr.dataIndex) {\r\n return \"\" + value;\r\n }\r\n });\r\n each(table.activeHeadings[cellIdx].children, function (el) {\r\n if (el && el.classList.contains(prefix + \"table-cmplx-select-all\")) {\r\n el.checked = false;\r\n }\r\n });\r\n }\r\n var selectAll = wrapper.querySelector(\".\" + prefix + \"table-cmplx-select-all\");\r\n if (\r\n table.selectedRows.length === options.perPage ||\r\n table.selectedRows.length === pages[currentPage - 1].length\r\n ) {\r\n selectAll.indeterminate = false;\r\n selectAll.state = \"checked\";\r\n selectAll.checked = true;\r\n } else if (table.selectedRows.length > 0) {\r\n selectAll.state = \"indeterminate\";\r\n selectAll.indeterminate = true;\r\n } else {\r\n selectAll.state = \"unchecked\";\r\n selectAll.indeterminate = false;\r\n }\r\n handleSelectAllChange(selectAll.state);\r\n } else if (options.column && t.id === allCheckboxId) {\r\n for (nodeIndex = 0; nodeIndex < columnBoxCheckboxes.length; nodeIndex++) {\r\n var thisBox = columnBoxCheckboxes[nodeIndex];\r\n if (thisBox.id !== allCheckboxId) {\r\n if (\r\n getClosest(t, \".\" + prefix + \"column-box\", true).querySelector(\"#\" + allCheckboxId)[\r\n \"checked\"\r\n ]\r\n ) {\r\n toggleBox(thisBox, \"checked\");\r\n } else {\r\n toggleBox(thisBox, \"unchecked\");\r\n }\r\n }\r\n }\r\n } else if (options.column && t.id !== allCheckboxId) {\r\n var checkCount = 0;\r\n var allChk = getClosest(t, \".\" + prefix + \"column-box\", true).querySelector(\"#\" + allCheckboxId);\r\n for (nodeIndex = 0; nodeIndex < columnBoxCheckboxes.length; nodeIndex++) {\r\n var chkbox = columnBoxCheckboxes[nodeIndex];\r\n if (chkbox.id !== allCheckboxId) {\r\n if (chkbox[\"checked\"]) {\r\n checkCount++;\r\n }\r\n }\r\n }\r\n if (columnBoxCheckboxes && checkCount === columnBoxCheckboxes.length - 1) {\r\n toggleBox(allChk, \"checked\");\r\n } else if (checkCount === 0) {\r\n toggleBox(allChk, \"unchecked\");\r\n } else {\r\n toggleBox(allChk);\r\n }\r\n }\r\n },\r\n handleButtonEvent = function (t) {\r\n if (t.innerHTML === options.text.cancel) {\r\n columnBox.classList.remove(prefix + \"show\");\r\n } else if (t.innerHTML === options.text.apply) {\r\n if (columnBox.orderChanged) {\r\n var order = [];\r\n // Make sure we pick up cells for Expandable, Selectable and Labels\r\n for (var h = 0; h < baseCellIdx(); h++) {\r\n order.push(h);\r\n }\r\n // Add fixed columns to order - which should always be first col(s) in table\r\n each(table.activeHeadings, function (th) {\r\n if (th.getAttribute(\"data-fixed\") === \"true\") {\r\n order.push(th.originalCellIndex);\r\n }\r\n });\r\n each(columnBox.getElementsByTagName(\"ul\"), function (unOrderedList) {\r\n each(unOrderedList.children, function (li, indI) {\r\n if (indI > 1) {\r\n // first two li's are for check-all and HR\r\n each(table.headings, function (header) {\r\n if (li.querySelectorAll(\"label\")[0].textContent === header.textContent) {\r\n order.push(header.originalCellIndex);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n columnBox.orderChanged = false;\r\n columns().order(order);\r\n table.hiddenColumns = [];\r\n self.update();\r\n }\r\n\r\n each(columnBox.getElementsByTagName(\"ul\"), function (unOrderedList) {\r\n each(unOrderedList.children, function (li) {\r\n var liCheckbox = li.querySelector(\"input[type='checkbox']\");\r\n if (liCheckbox && liCheckbox.checked && liCheckbox.id !== allCheckboxId) {\r\n each(table.headings, function (header) {\r\n if (li.querySelectorAll(\"label\")[0].textContent === header.textContent) {\r\n columns().show([header.originalCellIndex]);\r\n self.update();\r\n }\r\n });\r\n } else if (liCheckbox && !liCheckbox.checked && liCheckbox.id !== allCheckboxId) {\r\n each(table.headings, function (header) {\r\n if (li.querySelectorAll(\"label\")[0].textContent === header.textContent) {\r\n columns().hide([header.originalCellIndex]);\r\n self.update();\r\n }\r\n });\r\n }\r\n });\r\n\r\n if (searching) {\r\n self.search(input.value);\r\n }\r\n });\r\n columnsFixed = false;\r\n renderHeader();\r\n columnBox.classList.remove(prefix + \"show\");\r\n }\r\n },\r\n handleTableHeaderEvent = function (e, t) {\r\n if (options.sort && t.hasAttribute(\"data-sortable\")) {\r\n if (options.items > 0 && options.items != table.activeRows.length) {\r\n self.deleteAll();\r\n //change column to asc or desc\r\n columns().updateSortDirection(\r\n table.activeHeadings[table.activeHeadings.indexOf(t)],\r\n t.classList.contains(\"asc\") ? \"asc\" : \"desc\"\r\n );\r\n } else {\r\n columns().sort(table.activeHeadings.indexOf(t));\r\n sortedColumnIdx = t.originalCellIndex;\r\n self.update();\r\n e.preventDefault();\r\n }\r\n uicoreCustomEvent(\"Table\", \"SortEvent\", table, {\r\n column: table.activeHeadings.indexOf(t),\r\n direction: t.classList.contains(\"asc\") ? \"ascending\" : \"descending\",\r\n currentPage: currentPage,\r\n perPage: options.perPage,\r\n });\r\n }\r\n t.focus();\r\n },\r\n handleAccordionEvent = function (t) {\r\n if (t.classList.contains(prefix + \"table-cmplx-accordion-btn\")) {\r\n var htmlRow = t.parentNode.parentNode,\r\n currentRow = table.data[htmlRow.dataIndex];\r\n if (currentRow.details) {\r\n var detailsRow = htmlRow.nextElementSibling.children[0];\r\n if (detailsRow.classList.contains(prefix + \"show\")) {\r\n detailsRow.classList.remove(prefix + \"show\");\r\n t.classList.add(prefix + \"collapsed\");\r\n t.setAttribute(\"aria-expanded\", false);\r\n } else {\r\n detailsRow.classList.add(prefix + \"show\");\r\n t.classList.remove(prefix + \"collapsed\");\r\n t.setAttribute(\"aria-expanded\", true);\r\n }\r\n } else {\r\n each(t.querySelector(\"svg\").childNodes, function (use) {\r\n if (use.getAttribute(\"class\").indexOf(prefix + \"show\") > -1) {\r\n classRemove(use, prefix + \"show\");\r\n if (use.getAttribute(\"xlink:href\").indexOf(prefix + \"loading-sqrs\") != -1) {\r\n var row = getClosest(use, \"tr\", false);\r\n table.activeRows[row.dataIndex].event = \"ExpandCancelEvent\";\r\n uicoreCustomEvent(\"Table\", \"ExpandCancelEvent\", table, { rowId: row.dataIndex });\r\n }\r\n } else {\r\n classAdd(use, prefix + \"show\");\r\n if (use.getAttribute(\"xlink:href\").indexOf(prefix + \"loading-sqrs\") != -1) {\r\n row = getClosest(use, \"tr\", false);\r\n table.activeRows[row.dataIndex].event = \"ExpandStartEvent\";\r\n var content = [];\r\n each(table.data[row.dataIndex].cells, function (cell, idx) {\r\n if (options.expand && options.select) {\r\n if (idx >= 2) {\r\n var dt =\r\n '\"' +\r\n labels[idx] +\r\n '\": \"' +\r\n ((cell.hasAttribute(\"data-content\")\r\n ? cell.getAttribute(\"data-content\")\r\n : cell.textContent) +\r\n '\"');\r\n content.push(dt);\r\n }\r\n } else if (options.expand || options.select) {\r\n if (idx >= 1) {\r\n dt =\r\n '\"' +\r\n labels[idx] +\r\n '\": \"' +\r\n ((cell.hasAttribute(\"data-content\")\r\n ? cell.getAttribute(\"data-content\")\r\n : cell.textContent) +\r\n '\"');\r\n content.push(dt);\r\n }\r\n } else {\r\n dt =\r\n '\"' +\r\n labels[idx] +\r\n '\": \"' +\r\n ((cell.hasAttribute(\"data-content\")\r\n ? cell.getAttribute(\"data-content\")\r\n : cell.textContent) +\r\n '\"');\r\n content.push(dt);\r\n }\r\n });\r\n uicoreCustomEvent(\"Table\", \"ExpandStartEvent\", table, {\r\n rowId: row.dataIndex,\r\n content: content,\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n },\r\n setupDragEvents = function (el) {\r\n el.addEventListener(\"dragstart\", handleDragEvent, false);\r\n el.addEventListener(\"dragover\", handleDragEvent, false);\r\n el.addEventListener(\"dragleave\", handleDragEvent, false);\r\n el.addEventListener(\"drop\", handleDragEvent, false);\r\n if (isIE || isEdge) {\r\n el.addEventListener(\"pointerdown\", handleTouchEvent, false);\r\n el.addEventListener(\"pointerup\", handleTouchEvent, false);\r\n el.addEventListener(\"pointermove\", handleTouchEvent, false);\r\n if (isEdge) {\r\n el.addEventListener(\"click\", function (e) {\r\n if (e.pointerType === \"touch\") {\r\n e.preventDefault();\r\n }\r\n });\r\n }\r\n } else {\r\n el.addEventListener(\"touchstart\", handleTouchEvent, false);\r\n el.addEventListener(\"touchend\", handleTouchEvent, false);\r\n el.addEventListener(\"touchmove\", handleTouchEvent, false);\r\n }\r\n },\r\n baseCellIdx = function () {\r\n var baseIdx = 0;\r\n if (table.expand) {\r\n baseIdx++;\r\n }\r\n if (table.select) {\r\n baseIdx++;\r\n }\r\n return baseIdx;\r\n },\r\n columns = function (columns) {\r\n return new Columns(table, columns);\r\n },\r\n rows = function (rows) {\r\n return new Rows(table, rows);\r\n },\r\n // Function used to convert options data to thead and tbody\r\n dataToTable = function () {\r\n var thead = false,\r\n tbody = false;\r\n\r\n table.data = table.data || options.data;\r\n\r\n if (table.data.headings) {\r\n thead = createElement(\"thead\");\r\n var tr = createElement(\"tr\");\r\n\r\n // Add the expandable header for row details\r\n if (options.expand) {\r\n var th = createElement(\"th\", {\r\n title: \"expand details\",\r\n });\r\n tr.appendChild(th);\r\n table.expand = options.expand;\r\n }\r\n if (options.select) {\r\n th = createElement(\"th\");\r\n th.appendChild(\r\n createElement(\"input\", {\r\n type: \"checkbox\",\r\n class: prefix + \"table-cmplx-select-all\",\r\n title: \"select all rows\",\r\n })\r\n );\r\n tr.appendChild(th);\r\n table.select = options.select;\r\n }\r\n each(table.data.headings, function (col) {\r\n var th = createElement(\"th\", {\r\n scope: \"col\",\r\n html: col,\r\n });\r\n tr.appendChild(th);\r\n });\r\n thead.appendChild(tr);\r\n }\r\n\r\n if (table.data.rows && table.data.rows.length) {\r\n tbody = createElement(\"tbody\");\r\n\r\n each(table.data.rows, function (row, idx) {\r\n row.dataIndex = idx;\r\n if (table.data.headings) {\r\n if (options.data.headings.length !== row.data.length) {\r\n throw new Error(\r\n \"Row found at index, [ \" +\r\n idx +\r\n \" ] that does not match the number of headings supplied.\"\r\n );\r\n }\r\n }\r\n\r\n var tr = createElement(\"tr\");\r\n //Add secondary accordion arrow for details\r\n if (options.expand) {\r\n tr.appendChild(renderExpand());\r\n }\r\n //Add selectable checkboxes\r\n if (options.select) {\r\n tr.appendChild(renderSelect());\r\n }\r\n each(row.data, function (value) {\r\n var td = createElement(\"td\", {\r\n html: value,\r\n });\r\n\r\n var textFromValue = getText(value);\r\n var isValueString = typeof textFromValue === \"string\";\r\n td.setAttribute(\"data-content\", isValueString ? textFromValue : \"\");\r\n tr.appendChild(td);\r\n });\r\n\r\n tbody.appendChild(tr);\r\n\r\n if (row.details) {\r\n tr.details = row.details;\r\n }\r\n\r\n // Secondary accordion html for details\r\n if (options.expand) {\r\n tbody.appendChild(renderDetails(tr, table.headings.length));\r\n }\r\n });\r\n }\r\n\r\n if (thead) {\r\n if (table.tHead !== null) {\r\n table.removeChild(table.tHead);\r\n }\r\n table.appendChild(thead);\r\n }\r\n\r\n if (tbody) {\r\n if (table.tBodies.length) {\r\n table.removeChild(table.tBodies[0]);\r\n }\r\n table.appendChild(tbody);\r\n }\r\n },\r\n setRenderColumns = function () {\r\n if (selectedColumns.length) {\r\n each(table.data, function (row) {\r\n each(row.cells, function (cell, i) {\r\n if (selectedColumns.indexOf(i) > -1) {\r\n each(columnRenderers, function (renderers) {\r\n if (renderers.columns === cell.cellIndex) {\r\n cell.innerHTML = renderers.renderer.call(self, cell.data, cell, row);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n },\r\n renderDetails = function (row, length, stripeClass, selected) {\r\n var clazz = prefix + \"table-cmplx-row-details\";\r\n\r\n if (stripeClass) clazz = stripeClass + \" \" + clazz;\r\n if (selected) clazz += \" \" + \"selected\";\r\n\r\n var detailsRow = createElement(\"tr\", {\r\n class: clazz,\r\n });\r\n\r\n var detailsCell = createElement(\"td\", {\r\n class: prefix + \"table-complx-details\",\r\n colspan: length,\r\n });\r\n\r\n var accordionBody = createElement(\"div\", {\r\n class: prefix + \"table-complx-details-body\",\r\n });\r\n\r\n var accordionBodyChild = createElement(\"div\", {\r\n class: prefix + \"table-complx-details-body-child\",\r\n });\r\n\r\n accordionBody.appendChild(accordionBodyChild);\r\n\r\n if (row.details) {\r\n accordionBodyChild.innerHTML = row.details;\r\n } else {\r\n row.details = false;\r\n }\r\n\r\n detailsCell.appendChild(accordionBody);\r\n detailsRow.appendChild(detailsCell);\r\n return detailsRow;\r\n },\r\n renderExpand = function () {\r\n var td = createElement(\"td\");\r\n var showButton = createElement(\"button\", {\r\n class: prefix + \"table-cmplx-accordion-btn \" + prefix + \"collapsed\",\r\n \"aria-expanded\": false,\r\n \"aria-label\": \"expand details\",\r\n }),\r\n svgElem = renderSvg([\r\n { name: options.expandIcon, show: true },\r\n { name: \"loading-sqrs\", show: false },\r\n ]);\r\n showButton.appendChild(svgElem);\r\n td.appendChild(showButton);\r\n return td;\r\n },\r\n renderSelect = function () {\r\n var td = createElement(\"td\", {\r\n class: prefix + \"table-cmplx-row-select\",\r\n });\r\n var inputCheckbox = createElement(\"input\", {\r\n type: \"checkbox\",\r\n title: \"row select\",\r\n });\r\n td.appendChild(inputCheckbox);\r\n return td;\r\n },\r\n renderCustomRow = function (row) {\r\n var template = \"
\";\r\n template += row;\r\n template += \"
\";\r\n\r\n each(row.match(/\\{((\\w*|\\d*):?)+\\}/g), function (el) {\r\n var replace = el;\r\n var clean = el.replace(/[{,}]/g, \"\").split(\":\");\r\n switch (clean[0]) {\r\n case \"actions\":\r\n template = template.replace(replace, renderActions(clean[1], clean[2]));\r\n break;\r\n case \"search\":\r\n template = template.replace(replace, renderSearch(clean[1], clean[2]));\r\n break;\r\n case \"settings\":\r\n template = template.replace(replace, renderSettings(clean[1], clean[2]));\r\n break;\r\n case \"placeholder\":\r\n template = template.replace(replace, renderPlaceholder(clean[1]));\r\n break;\r\n default:\r\n var topCtnr =\r\n \"
\";\r\n topCtnr += window[clean[0]]() + \"
\";\r\n template = template.replace(replace, topCtnr);\r\n }\r\n });\r\n return template;\r\n },\r\n createActionButton = function (html, js, dataToggle, dataTarget) {\r\n var button;\r\n if (dataToggle && dataTarget) {\r\n button = createElement(\"button\", {\r\n class: prefix + \"dropdown-item\",\r\n role: \"menuitem\",\r\n onclick: js ? js : \"javascript: void(0);\",\r\n html: html,\r\n tabindex: \"-1\",\r\n data_toggle: dataToggle,\r\n data_target: dataTarget,\r\n });\r\n } else {\r\n button = createElement(\"button\", {\r\n class: prefix + \"dropdown-item\",\r\n role: \"menuitem\",\r\n onclick: js ? js : \"javascript: void(0);\",\r\n html: html,\r\n tabindex: \"-1\",\r\n });\r\n }\r\n return button;\r\n },\r\n createActionLi = function () {\r\n return createElement(\"li\", {\r\n class: prefix + \"dropdown-list-item\",\r\n role: \"none presentation\",\r\n tabindex: \"0\",\r\n });\r\n },\r\n renderActions = function (flexGrow, justifyContent) {\r\n var topCtnr;\r\n if (options.select) {\r\n topCtnr =\r\n \"
\") : +\">\";\r\n var cmplxAction = createElement(\"div\", {\r\n class: prefix + \"table-cmplx-action\",\r\n });\r\n var cmplxActionLabel = createElement(\"label\", {\r\n class: prefix + \"table-cmplx-action-label\",\r\n html: options.text.batchActions,\r\n for: batchId + \"BatchActions\",\r\n });\r\n cmplxAction.appendChild(cmplxActionLabel);\r\n\r\n var cmplxActionDropdown = createElement(\"div\", {\r\n class: prefix + \"mb-0 \" + prefix + \"btn-dropdown\",\r\n });\r\n var anchor = createElement(\"button\", {\r\n id: batchId + \"BatchActions\",\r\n class: prefix + \"btn \" + prefix + \"btn-secondary \" + prefix + \"table-cmplx-action-button\",\r\n tabindex: \"0\",\r\n \"data-toggle\": prefix + \"dropdown\",\r\n \"data-target\": \"#cmplxTablesActions\",\r\n \"aria-expanded\": \"false\",\r\n \"aria-controls\": \"cmplxTablesActions\",\r\n html: options.text.chooseActions,\r\n });\r\n\r\n var svgElem = renderSvg([{ name: \"arrow-tri-solid-right\", show: true }]);\r\n var svgClass = svgElem.getAttribute(\"class\");\r\n svgElem.setAttribute(\"class\", svgClass + \" \" + prefix + \"arrow-tri-solid-right\");\r\n anchor.appendChild(svgElem);\r\n cmplxActionDropdown.appendChild(anchor);\r\n\r\n var unordered = createElement(\"ul\", {\r\n id: \"cmplxTablesActions\",\r\n class: prefix + \"button-dropdown-container \" + prefix + \"collapse\",\r\n role: \"menu\",\r\n });\r\n\r\n each(options.actionsSelectFilters, function (action) {\r\n if (\"hr\" === action) {\r\n unordered.appendChild(createElement(action, { class: prefix + \"dropdown-divider\" }));\r\n } else {\r\n var actionLI = createActionLi();\r\n var actionLabel;\r\n if (typeof action === \"string\") {\r\n if (action === options.text.exportCsv) {\r\n actionLabel = createActionButton(\r\n action,\r\n null,\r\n \"dds__modal\",\r\n \"#\" + prefix + \"csvSpecialChars\"\r\n );\r\n } else {\r\n actionLabel = createActionButton(action);\r\n }\r\n } else {\r\n actionLabel = createActionButton(action.html, action.js);\r\n }\r\n actionLI.appendChild(actionLabel);\r\n unordered.appendChild(actionLI);\r\n }\r\n });\r\n\r\n anchor.setAttribute(\"disabled\", \"\");\r\n\r\n cmplxActionDropdown.appendChild(unordered);\r\n cmplxAction.appendChild(cmplxActionDropdown);\r\n\r\n topCtnr += cmplxAction.outerHTML + \"
\";\r\n } else {\r\n topCtnr = \"
\";\r\n }\r\n\r\n return topCtnr;\r\n },\r\n renderSearch = function (flexGrow, justifyContent) {\r\n var topCtnr;\r\n if (options.search) {\r\n topCtnr =\r\n \"
\") : +\">\";\r\n var inputGroup = createElement(\"div\", {\r\n class: prefix + \"table-cmplx-input-group\",\r\n });\r\n var searchCtnr = createElement(\"div\", {\r\n class: prefix + \"table-cmplx-search\",\r\n });\r\n var searchIcon = renderSvg([{ name: \"filter\", show: true }]);\r\n var searchInput = createElement(\"input\", {\r\n type: \"search\",\r\n class: prefix + \"form-control \",\r\n \"aria-label\": \"search\",\r\n });\r\n if (options.search && options.text.search.placeholder) {\r\n searchInput.setAttribute(\"placeholder\", options.text.search.placeholder);\r\n }\r\n searchCtnr.appendChild(searchInput);\r\n searchCtnr.appendChild(searchIcon);\r\n if (options.search && options.text.search.label) {\r\n var searchLabel = createElement(\"label\", {\r\n for: searchId + \"Search\",\r\n html: options.text.search.label,\r\n });\r\n searchInput.setAttribute(\"id\", searchId + \"Search\");\r\n inputGroup.appendChild(searchLabel);\r\n inputGroup.appendChild(searchCtnr);\r\n topCtnr += inputGroup.outerHTML + \"
\";\r\n } else {\r\n topCtnr += searchCtnr.outerHTML + \"\";\r\n }\r\n } else {\r\n topCtnr = \"
\";\r\n }\r\n\r\n return topCtnr;\r\n },\r\n renderSettings = function (flexGrow, justifyContent) {\r\n var topCtnr;\r\n if (options.settings) {\r\n topCtnr =\r\n \"
\") : +\">\";\r\n var optGear = \"
\";\r\n\r\n if (options.import) {\r\n optGear +=\r\n \"\";\r\n optGear +=\r\n \"\";\r\n }\r\n if (options.print) {\r\n optGear +=\r\n \"\";\r\n }\r\n if (options.column) {\r\n optGear +=\r\n \"\";\r\n }\r\n\r\n optGear += columnBox = '
\";\r\n topCtnr += optGear + \"
\";\r\n } else {\r\n topCtnr = \"
\";\r\n }\r\n\r\n return topCtnr;\r\n },\r\n renderPlaceholder = function (flexGrow) {\r\n return (\r\n \"
\"\r\n );\r\n },\r\n render = function () {\r\n var template = \"\";\r\n\r\n // Convert data to HTML\r\n if (options.data) {\r\n dataToTable(options.data);\r\n }\r\n\r\n body = table.tBodies[0];\r\n head = table.tHead;\r\n\r\n // Should move this to dataToTable method\r\n if (!body) {\r\n body = createElement(\"tbody\");\r\n table.appendChild(body);\r\n }\r\n\r\n table.hasRows = body.rows.length > 0;\r\n\r\n // Make a tHead if there isn't one (fixes #8)\r\n // Should move this to dataToTable method\r\n if (!head) {\r\n var h = createElement(\"thead\");\r\n var t = createElement(\"tr\");\r\n\r\n if (table.hasRows) {\r\n each(body.rows[0].cells, function () {\r\n t.appendChild(createElement(\"th\"));\r\n });\r\n\r\n h.appendChild(t);\r\n }\r\n\r\n head = h;\r\n\r\n table.insertBefore(head, body);\r\n }\r\n\r\n table.hasHeadings = head.rows.length > 0;\r\n\r\n if (table.hasHeadings) {\r\n header = head.rows[0];\r\n table.headings = [].slice.call(header.cells);\r\n }\r\n\r\n // Header\r\n if (!options.header) {\r\n if (head) {\r\n table.removeChild(table.tHead);\r\n }\r\n }\r\n\r\n // Build\r\n wrapper = createElement(\"div\", {\r\n class: prefix + \"table-cmplx-wrapper\",\r\n });\r\n\r\n //////////////////////////////////////////////////////\r\n // Top template - Begin\r\n //////////////////////////////////////////////////////\r\n\r\n if (options.layout.row1) {\r\n template += renderCustomRow(options.layout.row1);\r\n }\r\n\r\n if (options.layout.row2) {\r\n template += renderCustomRow(options.layout.row2);\r\n }\r\n\r\n //////////////////////////////////////////////////////\r\n // Top template - End\r\n //////////////////////////////////////////////////////\r\n\r\n template += \"
\";\r\n\r\n //////////////////////////////////////////////////////\r\n // Bottom template - Begin\r\n //////////////////////////////////////////////////////\r\n\r\n template += \"
\";\r\n template += \"
\";\r\n\r\n //////////////////////////////////////////////////////\r\n // Bottom template - End\r\n //////////////////////////////////////////////////////\r\n\r\n if (table.hasHeadings) {\r\n // Sortable\r\n renderHeader();\r\n }\r\n\r\n // Add table class\r\n table.classList.add(prefix + \"table-cmplx\");\r\n\r\n wrapper.innerHTML = template;\r\n\r\n container = wrapper.querySelector(\".\" + prefix + \"table-cmplx-container\");\r\n\r\n bottom = wrapper.querySelector(\".\" + prefix + \"table-cmplx-bottom\");\r\n\r\n // Pagination\r\n options.pagination = getSibling(element, \".dds__pagination\") ? true : false;\r\n if (options.pagination) {\r\n paginationElement = getSibling(element, \".dds__pagination\");\r\n bottom.appendChild(paginationElement);\r\n }\r\n\r\n columnBox = wrapper.querySelector(\"[data-toggle='data-column-box']\");\r\n\r\n // Insert in to DOM tree\r\n table.parentNode.replaceChild(wrapper, table);\r\n container.appendChild(table);\r\n\r\n // Store the table dimensions\r\n rect = table.getBoundingClientRect();\r\n\r\n // Convert rows to array for processing\r\n table.data = [];\r\n table.activeRows = [];\r\n\r\n var dataIdx = 0;\r\n each(\r\n body.rows,\r\n function (row, idx) {\r\n if (options.expand) {\r\n if (idx % 2 == 0) {\r\n row.dataIndex = dataIdx++;\r\n table.activeRows.push(row);\r\n table.data.push(row);\r\n }\r\n } else {\r\n row.dataIndex = idx;\r\n table.activeRows.push(row);\r\n table.data.push(row);\r\n }\r\n },\r\n true\r\n );\r\n\r\n table.activeHeadings = table.headings.slice();\r\n\r\n // Update\r\n self.update();\r\n\r\n // Set Columns\r\n setColumns();\r\n\r\n // Fix columns, think this is the only valid call for fixColumns\r\n fixColumns();\r\n\r\n // Options condensed\r\n if (options.condensed) {\r\n wrapper.querySelector(\".\" + prefix + \"table-cmplx\").classList.add(prefix + \"condensed\");\r\n }\r\n\r\n // This needs to run after the options.condensed\r\n if (options.fixedHeight) {\r\n if (options.origPerPage > table.activeRows.length) {\r\n metHeight = false;\r\n } else {\r\n // Fix height\r\n fixHeight();\r\n }\r\n }\r\n\r\n bindEvents();\r\n },\r\n renderPage = function () {\r\n if (options.search && searching === true && table.searchData.length === 0) return;\r\n if (table.hasRows && totalPages) {\r\n // Use a fragment to limit touching the DOM\r\n var index = currentPage - 1,\r\n frag = DOC.createDocumentFragment();\r\n\r\n var page = pages[index];\r\n var selectHeader;\r\n var selectCellIdx;\r\n\r\n if (table.hasHeadings) {\r\n flush(header, isIE);\r\n\r\n each(\r\n table.activeHeadings,\r\n function (th) {\r\n if (options.select) {\r\n each(th.children, function (el) {\r\n if (el && el.classList.contains(prefix + \"table-cmplx-select-all\")) {\r\n selectHeader = el;\r\n selectCellIdx = th.originalCellIndex;\r\n if (page.selected) {\r\n selectHeader.checked = true;\r\n selectHeader.state = \"checked\"; // set the state\r\n } else {\r\n selectHeader.checked = false;\r\n selectHeader.state = \"unchecked\"; // set the state\r\n }\r\n }\r\n });\r\n }\r\n // reest sortable columns\r\n if (th.hasAttribute(\"data-sortable\") && th.originalCellIndex != sortedColumnIdx) {\r\n th.setAttribute(\"aria-sort\", \"none\");\r\n }\r\n header.appendChild(th);\r\n },\r\n this\r\n );\r\n }\r\n\r\n var selectedRows = 0;\r\n each(\r\n page,\r\n function (row, idx) {\r\n //row.className = \"\";\r\n row.removeAttribute(\"class\");\r\n var selected = false;\r\n // redo if previously selected\r\n if (options.select) {\r\n if (\r\n table.data[row.dataIndex].cells[selectCellIdx].querySelector(\"input[type='checkbox']\")\r\n .checked\r\n ) {\r\n row.classList.add(\"selected\");\r\n selected = true;\r\n selectedRows++;\r\n if (!selectHeader.checked) {\r\n selectHeader.indeterminate = true;\r\n selectHeader.state = \"indeterminate\"; // set the state\r\n }\r\n }\r\n }\r\n // redo if stripped table\r\n if (table.classList.contains(prefix + \"table-striped\")) {\r\n var stripeColor =\r\n idx % 2 > 0 ? prefix + \"table-cmplx-row-odd\" : prefix + \"table-cmplx-row-even\";\r\n row.classList.add(stripeColor);\r\n }\r\n frag.appendChild(rows().render(row));\r\n if (options.expand) {\r\n row.querySelector(\".\" + prefix + \"table-cmplx-accordion-btn\").classList.add(\r\n prefix + \"collapsed\"\r\n );\r\n var detailsRow = renderDetails(row, table.headings.length, stripeColor, selected);\r\n detailsRow.children[0].classList.remove(prefix + \"show\");\r\n frag.appendChild(detailsRow);\r\n }\r\n },\r\n this\r\n );\r\n\r\n if (options.select) {\r\n if (selectedRows === page.length) {\r\n selectHeader.indeterminate = false;\r\n selectHeader.checked = true;\r\n selectHeader.state = \"checked\";\r\n } else if (selectedRows === 0 && options.select) {\r\n selectHeader.indeterminate = false;\r\n selectHeader.checked = false;\r\n selectHeader.state = \"unchecked\";\r\n }\r\n handleSelectAllChange(selectHeader.state);\r\n }\r\n self.clear(frag);\r\n } else if (searching && totalPages == 0) {\r\n if (table.hasHeadings) {\r\n flush(header, isIE);\r\n\r\n each(\r\n table.activeHeadings,\r\n function (th) {\r\n header.appendChild(th);\r\n },\r\n this\r\n );\r\n }\r\n } else {\r\n self.clear();\r\n }\r\n if (!metHeight) {\r\n fixHeight();\r\n }\r\n },\r\n renderHeader = function () {\r\n labels = [];\r\n\r\n if (table.headings && table.headings.length) {\r\n each(table.headings, function (th, i) {\r\n labels[i] = th.textContent;\r\n\r\n th.sortable = th.hasAttribute(\"data-sortable\");\r\n\r\n th.originalCellIndex = i;\r\n if (options.sort && th.sortable) {\r\n var sortLabel = createElement(\"label\", {\r\n class: prefix + \"table-cmplx-sorter\",\r\n html: th.textContent,\r\n });\r\n th.textContent = \"\";\r\n th.setAttribute(\"tabindex\", \"0\");\r\n th.appendChild(sortLabel);\r\n }\r\n });\r\n }\r\n\r\n fixColumns();\r\n },\r\n toggleBox = function (box, state) {\r\n box[\"getAttribute\"](\"indeterminate\");\r\n box[\"setAttribute\"](\"indeterminate\", false);\r\n box[\"indeterminate\"] = false;\r\n box.state = null;\r\n box[\"checked\"] = false;\r\n if (state && state === \"checked\") {\r\n box[\"getAttribute\"](\"checked\");\r\n box[\"setAttribute\"](\"checked\", \"checked\");\r\n box[\"checked\"] = true;\r\n } else if (state) {\r\n box[\"getAttribute\"](\"checked\");\r\n box.removeAttribute(\"checked\");\r\n } else {\r\n box.state = \"indeterminate\";\r\n box.indeterminate = true;\r\n }\r\n },\r\n getHeaderCellIndex = function (selector) {\r\n var cellIdx = 0;\r\n each(table.activeHeadings, function (header) {\r\n each(header.children, function (el) {\r\n if (el.classList.contains(selector)) {\r\n cellIdx = header.originalCellIndex;\r\n }\r\n });\r\n });\r\n return cellIdx;\r\n },\r\n bindEvents = function () {\r\n // Batch Actions\r\n if (options.select) {\r\n var actionSelect = wrapper.querySelector(\"#cmplxTablesActions\");\r\n actionSelect.addEventListener(\"keydown\", function (e) {\r\n if (e.keyCode == 13) {\r\n e.preventDefault();\r\n var actionButton = e.target.querySelector(\"button\");\r\n if (actionButton.innerHTML === options.text.deleteRow) {\r\n handleDeleteActionEvent();\r\n } else if (actionButton.innerHTML === options.text.exportCsv) {\r\n if (options.exportShowWarning) createSpecialCharModal();\r\n else handleExportActionEvent(e.target);\r\n } else if (actionButton.innerHTML === options.text.exportJson) {\r\n handleExportActionEvent(e.target);\r\n }\r\n }\r\n });\r\n actionSelect.addEventListener(\"mousedown\", function (e) {\r\n e.preventDefault();\r\n var actionButton = e.target;\r\n if (actionButton.innerHTML === options.text.deleteRow) {\r\n handleDeleteActionEvent();\r\n } else if (actionButton.innerHTML === options.text.exportCsv) {\r\n if (options.exportShowWarning) createSpecialCharModal();\r\n else handleExportActionEvent(e.target);\r\n } else if (actionButton.innerHTML === options.text.exportJson) {\r\n handleExportActionEvent(e.target);\r\n }\r\n });\r\n }\r\n\r\n // Search\r\n if (options.search) {\r\n input = wrapper.querySelector(\".\" + prefix + \"table-cmplx-search\").querySelector(\"input[type=search]\");\r\n if (input) {\r\n input.addEventListener(\r\n \"keyup\",\r\n function (e) {\r\n if (e.keyCode === 9 || e.keyCode === 16 || e.keyCode === 13) return;\r\n self.search(input.value);\r\n e.preventDefault();\r\n },\r\n false\r\n );\r\n input.addEventListener(\r\n \"mouseup\",\r\n function (e) {\r\n var origInput = input.value;\r\n setTimeout(function () {\r\n if (input.value == \"\" && origInput != \"\") {\r\n //the 'x' was pressed and removed the orig query string\r\n self.search(input.value);\r\n }\r\n }, 100);\r\n e.preventDefault();\r\n },\r\n false\r\n );\r\n }\r\n }\r\n\r\n // Settings\r\n if (options.settings) {\r\n var settingsCtnr = wrapper.querySelector(\".\" + prefix + \"table-cmplx-settings\");\r\n if (options.column) {\r\n var button = settingsCtnr.querySelector(\"button[aria-label='table settings columns']\");\r\n button.addEventListener(\r\n \"click\",\r\n function (e) {\r\n if (columnBox.classList.contains(prefix + \"show\")) {\r\n columnBox.classList.remove(prefix + \"show\");\r\n } else {\r\n renderSettingsDropDown();\r\n columnBox.classList.add(prefix + \"show\");\r\n columnBox.addEventListener(\"click\", function (e) {\r\n var t = e.target;\r\n if (t.nodeName.toLowerCase() === \"button\") {\r\n handleButtonEvent(t);\r\n settingsCtnr\r\n .querySelector(\"button[aria-label='table settings columns']\")\r\n .focus();\r\n } else if (t.nodeName.toLowerCase() === \"input\") {\r\n var applyButton = columnBox.querySelector(\".\" + prefix + \"btn-primary\");\r\n if (applyButton.disabled) {\r\n applyButton.removeAttribute(\"disabled\");\r\n }\r\n }\r\n });\r\n }\r\n e.preventDefault();\r\n },\r\n false\r\n );\r\n }\r\n\r\n if (options.print) {\r\n button = settingsCtnr.querySelector(\"button[aria-label='table settings print']\");\r\n button.addEventListener(\r\n \"click\",\r\n function (e) {\r\n self.print();\r\n e.preventDefault();\r\n },\r\n false\r\n );\r\n }\r\n\r\n if (options.import) {\r\n var fileImport = settingsCtnr.querySelector(\".\" + prefix + \"table-cmplx-file-import\");\r\n fileImport.addEventListener(\"change\", handleImportActionEvent, false);\r\n\r\n button = settingsCtnr.querySelector(\"button[aria-label='table settings import']\");\r\n button.addEventListener(\r\n \"click\",\r\n function (e) {\r\n fileImport.click();\r\n e.preventDefault();\r\n },\r\n false\r\n );\r\n }\r\n }\r\n\r\n // All listeners with in the table are should use wrapper.\r\n // Pager(s) / sorting\r\n wrapper.addEventListener(\r\n \"keydown\",\r\n function (e) {\r\n var t = e.target;\r\n // Checks for headers\r\n if (t.nodeName.toLowerCase() === \"th\" && e.keyCode === 13) {\r\n handleTableHeaderEvent(e, t);\r\n }\r\n // Checks for buttons\r\n if (\r\n t.nodeName.toLowerCase() === \"button\" &&\r\n e.keyCode === 13 &&\r\n t.classList.contains(prefix + \"table-cmplx-accordion-btn\")\r\n ) {\r\n handleAccordionEvent(t);\r\n e.preventDefault();\r\n }\r\n },\r\n false\r\n );\r\n\r\n wrapper.addEventListener(\r\n \"click\",\r\n function (e) {\r\n var t = e.target;\r\n // Checks for headers\r\n if (t.classList.contains(prefix + \"table-cmplx-sorter\")) {\r\n handleTableHeaderEvent(e, t.parentNode);\r\n }\r\n // Checks for buttons\r\n if (t.nodeName.toLowerCase() === \"button\") {\r\n handleAccordionEvent(t);\r\n e.preventDefault();\r\n }\r\n // Checks for inputs\r\n if (t.nodeName.toLowerCase() === \"input\") {\r\n if (t.type === \"checkbox\") {\r\n handleCheckBoxEvent(t);\r\n }\r\n }\r\n },\r\n false\r\n );\r\n },\r\n setColumns = function () {\r\n each(table.data, function (row) {\r\n each(row.cells, function (cell) {\r\n cell.data = cell.innerHTML;\r\n });\r\n });\r\n\r\n // Check for the columns option\r\n if (options.data.columns && table.headings.length) {\r\n each(options.data.columns, function (data) {\r\n // convert single column selection to array\r\n if (!isArray(data.select)) {\r\n data.select = [data.select];\r\n }\r\n\r\n if (\r\n Object.prototype.hasOwnProperty.call(data, \"render\") &&\r\n (typeof data.render === \"function\" || (typeof data.render === \"string\" && window[data.render]))\r\n ) {\r\n var nCIdx = parseInt(data.select) + baseCellIdx();\r\n selectedColumns = selectedColumns.concat(nCIdx);\r\n\r\n columnRenderers.push({\r\n columns: nCIdx,\r\n renderer: window[data.render],\r\n });\r\n }\r\n\r\n // Add the data attributes to the th elements\r\n each(data.select, function (column) {\r\n var th = table.headings[baseCellIdx() + column];\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 (options.sort) {\r\n if (Object.prototype.hasOwnProperty.call(data, \"sortable\") && data.sortable) {\r\n th.setAttribute(\"data-sortable\", \"\");\r\n th.setAttribute(\"aria-sort\", \"none\");\r\n }\r\n if (Object.prototype.hasOwnProperty.call(data, \"sort\")) {\r\n th.setAttribute(\"data-sortable\", \"\");\r\n th.setAttribute(\"aria-sort\", \"none\");\r\n }\r\n }\r\n if (Object.prototype.hasOwnProperty.call(data, \"fixed\")) {\r\n th.setAttribute(\"data-fixed\", data.fixed);\r\n }\r\n if (Object.prototype.hasOwnProperty.call(data, \"control\")) {\r\n th.setAttribute(\"data-control\", data.control);\r\n }\r\n if (Object.prototype.hasOwnProperty.call(data, \"hidden\")) {\r\n if (data.hidden) {\r\n columns().hide([baseCellIdx() + column]);\r\n self.update();\r\n }\r\n }\r\n if (Object.prototype.hasOwnProperty.call(data, \"sort\") && data.select.length == 1) {\r\n sortedColumnIdx = baseCellIdx() + data.select[0];\r\n columns().sort(sortedColumnIdx, data.sort);\r\n self.update();\r\n uicoreCustomEvent(\"Table\", \"SortEvent\", table, {\r\n column: sortedColumnIdx,\r\n direction: data.sort === \"asc\" ? \"ascending\" : \"descending\",\r\n currentPage: currentPage,\r\n perPage: options.perPage,\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n if (table.hasRows) {\r\n each(table.data, function (row, idx) {\r\n row.dataIndex = idx;\r\n each(row.cells, function (cell) {\r\n cell.data = cell.innerHTML;\r\n });\r\n });\r\n\r\n setRenderColumns();\r\n columns().rebuild();\r\n self.update();\r\n }\r\n\r\n renderHeader();\r\n },\r\n renderSettingsDropDown = function () {\r\n flush(columnBox, isIE);\r\n var columnContainer = createElement(\"div\", {\r\n class: prefix + \"table-cmplx-column-cntr\",\r\n });\r\n\r\n // set up list variables and add first check/uncheck-all row\r\n var checkableCount = 0,\r\n checkCount = 0;\r\n var unOrderedList = createElement(\"ul\");\r\n var listItem;\r\n var columnLabel;\r\n var columnInput;\r\n var boxLabel;\r\n\r\n // Add column headings to list\r\n each(table.headings, function (header, idx) {\r\n if (\r\n idx >= baseCellIdx() &&\r\n header.dataset[\"fixed\"] !== \"true\" &&\r\n (options.rearrangeableColumns || header.dataset[\"control\"] !== \"false\")\r\n ) {\r\n var listItem;\r\n var dragSvg;\r\n if (options.rearrangeableColumns) {\r\n listItem = createElement(\"li\", {\r\n class: prefix + \"table-cmplx-drag-li\",\r\n draggable: true,\r\n });\r\n dragSvg = renderSvg([{ name: \"handle\", show: true }]);\r\n setupDragEvents(listItem);\r\n moveableCols.push(listItem);\r\n } else {\r\n listItem = createElement(\"li\", {\r\n class: prefix + \"table-cmplx-li\",\r\n });\r\n }\r\n columnLabel = createElement(\"label\", {\r\n for: idx + \"_\" + batchId, // prevent duplicate IDs when using multiple tables per page\r\n class: prefix + \"text-truncate\",\r\n });\r\n boxLabel = createElement(\"span\");\r\n if (header.dataset[\"control\"] !== \"false\") {\r\n checkableCount++;\r\n columnInput = createElement(\"input\", {\r\n id: idx + \"_\" + batchId,\r\n type: \"checkbox\",\r\n });\r\n columnInput.checked = columns().visible(idx);\r\n columnLabel.appendChild(columnInput);\r\n if (columnInput.checked) {\r\n checkCount++;\r\n }\r\n } else {\r\n boxLabel.style.marginLeft = \"1.75rem\";\r\n }\r\n boxLabel.innerHTML = header.textContent;\r\n columnLabel.appendChild(boxLabel);\r\n if (dragSvg) {\r\n listItem.appendChild(dragSvg);\r\n }\r\n listItem.appendChild(columnLabel);\r\n unOrderedList.appendChild(listItem);\r\n columnContainer.appendChild(unOrderedList);\r\n }\r\n });\r\n var defaultAllChecked =\r\n checkCount === checkableCount || checkCount === 0 ? checkCount === checkableCount : null; // all-checked will be true | false | null (indeterminate)\r\n if (checkableCount > 1) {\r\n // Add lightweight hr to list\r\n listItem = createElement(\"li\", {\r\n class: prefix + \"table-cmplx-li\",\r\n });\r\n boxLabel = createElement(\"hr\");\r\n boxLabel.classList.add(prefix + \"tertiary_divider\");\r\n boxLabel.classList.add(prefix + \"mt-1\");\r\n listItem.appendChild(boxLabel);\r\n unOrderedList.insertBefore(listItem, unOrderedList.firstChild);\r\n\r\n // add check-all box to list\r\n listItem = createElement(\"li\", {\r\n class: prefix + \"table-cmplx-li\",\r\n });\r\n columnLabel = createElement(\"label\", {\r\n for: allCheckboxId,\r\n class: prefix + \"text-truncate\",\r\n });\r\n columnInput = createElement(\"input\", {\r\n id: allCheckboxId,\r\n type: \"checkbox\",\r\n });\r\n boxLabel = createElement(\"span\");\r\n boxLabel.innerHTML = options.text.allColumns;\r\n columnLabel.appendChild(columnInput);\r\n columnLabel.appendChild(boxLabel);\r\n listItem.appendChild(columnLabel);\r\n unOrderedList.insertBefore(listItem, unOrderedList.firstChild);\r\n\r\n var allChk = unOrderedList.querySelector(\"#\" + allCheckboxId);\r\n if (defaultAllChecked === true) {\r\n toggleBox(allChk, \"checked\");\r\n } else if (defaultAllChecked === false) {\r\n toggleBox(allChk, \"unchecked\");\r\n } else {\r\n toggleBox(allChk);\r\n }\r\n }\r\n if (columnContainer.querySelectorAll(\"ul\").length === 0) {\r\n var emptySpan = createElement(\"span\", {\r\n class: prefix + \"text-wrap\",\r\n html: \"Cannot rearrange or turn columns on/off.\",\r\n });\r\n columnContainer.appendChild(emptySpan);\r\n }\r\n var buttonContainer = createElement(\"div\", {\r\n class: prefix + \"row \" + prefix + \"no-gutters\",\r\n });\r\n var cancelButton = createElement(\"button\", {\r\n class: prefix + \"btn \" + prefix + \"btn-secondary\",\r\n html: options.text.cancel,\r\n });\r\n var applyButton = createElement(\"button\", {\r\n class: prefix + \"btn \" + prefix + \"btn-primary\",\r\n html: options.text.apply,\r\n disabled: \"\",\r\n });\r\n buttonContainer.appendChild(cancelButton);\r\n buttonContainer.appendChild(applyButton);\r\n columnContainer.appendChild(buttonContainer);\r\n columnBox.appendChild(columnContainer);\r\n },\r\n paginate = function () {\r\n var perPage = options.perPage,\r\n rows = table.activeRows;\r\n\r\n if (searching) {\r\n rows = [];\r\n\r\n each(\r\n table.searchData,\r\n function (index) {\r\n rows.push(table.activeRows[index]);\r\n },\r\n this\r\n );\r\n }\r\n\r\n // Check for hidden columns\r\n pages = rows\r\n .map(function (tr, i) {\r\n return i % perPage === 0 ? rows.slice(i, i + perPage) : null;\r\n })\r\n .filter(function (page) {\r\n return page;\r\n });\r\n\r\n totalPages = pages.length;\r\n self.page(1);\r\n },\r\n fixColumns = function () {\r\n rect = table.getBoundingClientRect();\r\n if (options.fixedColumns && table.activeHeadings && table.activeHeadings.length && !columnsFixed) {\r\n var cells,\r\n hd = false,\r\n reducePx = 0;\r\n\r\n // If we have headings we need only set the widths on them\r\n // otherwise we need a temp header and the widths need applying to all cells\r\n if (table.tHead) {\r\n each(table.activeHeadings, function (cell) {\r\n cell.style.maxWidth = \"\";\r\n cell.style.width = \"\";\r\n });\r\n var expandDone,\r\n selectDone = false;\r\n each(table.activeHeadings, function (cell, i) {\r\n if (i == 0 && options.expand && !expandDone) {\r\n expandDone = true;\r\n cell.style.maxWidth = \"20px\";\r\n cell.style.width = \"20px\";\r\n reducePx += 20;\r\n } else if ((i == 0 || i == 1) && options.select && !selectDone) {\r\n selectDone = true;\r\n cell.style.maxWidth = \"20px\";\r\n cell.style.width = \"20px\";\r\n reducePx += 20;\r\n } else {\r\n var ow = cell.offsetWidth;\r\n var w = (ow / (rect.width - reducePx)) * 100;\r\n cell.style.width = w + \"%\";\r\n }\r\n });\r\n } else {\r\n cells = [];\r\n\r\n // Make temperary headings\r\n hd = createElement(\"thead\");\r\n var r = createElement(\"tr\");\r\n each(table.tBodies[0].rows[0].cells, function () {\r\n var th = createElement(\"th\");\r\n r.appendChild(th);\r\n cells.push(th);\r\n });\r\n\r\n hd.appendChild(r);\r\n table.insertBefore(hd, body);\r\n\r\n var widths = [];\r\n each(\r\n cells,\r\n function (cell, i) {\r\n if (i == 0 && options.expand) {\r\n reducePx += 20;\r\n } else if ((i == 0 || i == 1) && options.select) {\r\n reducePx += 20;\r\n } else {\r\n var ow = cell.offsetWidth;\r\n var w = (ow / (rect.width - reducePx)) * 100;\r\n widths.push(w);\r\n }\r\n },\r\n this\r\n );\r\n\r\n each(\r\n table.data,\r\n function (row) {\r\n each(\r\n row.cells,\r\n function (cell, i) {\r\n if (i == 0 && options.expand) {\r\n cell.style.width = \"20px\";\r\n } else if ((i == 0 || i == 1) && options.select) {\r\n cell.style.width = \"20px\";\r\n } else if (columns().visible(baseCellIdx() + cell.cellIndex))\r\n cell.style.width = widths[i] + \"%\";\r\n },\r\n this\r\n );\r\n },\r\n this\r\n );\r\n\r\n // Discard the temp header\r\n table.removeChild(hd);\r\n }\r\n columnsFixed = true;\r\n }\r\n },\r\n fixHeight = function () {\r\n if (options.fixedHeight) {\r\n container.style.height = null;\r\n rect = container.getBoundingClientRect();\r\n container.style.height = rect.height + \"px\";\r\n }\r\n metHeight = options.origPerPage <= table.activeRows.length && options.perPage == options.origPerPage;\r\n },\r\n resetCollapse = function () {\r\n each(table.activeRows, function (row) {\r\n var button = row.querySelector(\".\" + prefix + \"table-cmplx-accordion-btn\");\r\n if (button && !button.classList.contains(prefix + \"collapsed\")) {\r\n button.classList.add(prefix + \"collapsed\");\r\n }\r\n });\r\n },\r\n insert = function (data) {\r\n var newrows = [];\r\n if (isObject(data)) {\r\n if (data.headings) {\r\n if (!table.hasHeadings && !table.hasRows) {\r\n var tr = createElement(\"tr\"),\r\n th;\r\n each(data.headings, function (heading) {\r\n th = createElement(\"th\", {\r\n html: heading,\r\n });\r\n\r\n tr.appendChild(th);\r\n });\r\n head.appendChild(tr);\r\n\r\n header = tr;\r\n table.headings = [].slice.call(header.cells);\r\n table.hasHeadings = true;\r\n\r\n // Re-enable sorting if it was disabled due\r\n // to missing header\r\n // options.sort = initialSortable;\r\n }\r\n }\r\n\r\n if (data.rows && isArray(data.rows)) {\r\n each(data.rows, function (row, rowIdx) {\r\n var headerCount = [];\r\n for (var l = 0; l < labels.length; l++) {\r\n headerCount.push(l);\r\n }\r\n var padR = 0,\r\n r = [];\r\n if (options.expand) {\r\n r[0] = renderExpand().outerHTML;\r\n padR++;\r\n delete headerCount[0];\r\n }\r\n if (options.select) {\r\n var selectData = renderSelect().outerHTML;\r\n if (options.expand) {\r\n r[1] = selectData;\r\n padR++;\r\n delete headerCount[1];\r\n } else {\r\n r[0] = selectData;\r\n padR++;\r\n }\r\n }\r\n each(row, function (cell, idx) {\r\n var index;\r\n if (data.headings) {\r\n index = labels.indexOf(data.headings[idx]);\r\n delete headerCount[index];\r\n } else {\r\n index = idx;\r\n }\r\n\r\n if (index > -1) {\r\n r[index] = cell;\r\n }\r\n });\r\n for (var z = 0; z < headerCount.length; z++) {\r\n if (headerCount[z]) {\r\n r[headerCount[z]] = \"\";\r\n }\r\n }\r\n if (r.length == (data.headings ? labels.length : padR + labels.length)) {\r\n newrows.push(r);\r\n } else {\r\n var msg = \"Row found at index, [ \" + rowIdx + \" ] that did not match the current headers.\";\r\n console.error(msg);\r\n uicoreCustomEvent(\"Table\", \"Error\", table, { msg: msg });\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (newrows.length) {\r\n if (data.details) {\r\n rows().add(newrows, data.details);\r\n } else {\r\n rows().add(newrows);\r\n }\r\n columns().rebuild();\r\n if (!searching) {\r\n pagination.addItems(newrows.length);\r\n } else {\r\n var query = wrapper.querySelector(\"input[type='search']\").value;\r\n self.search(query);\r\n }\r\n table.hasRows = true;\r\n }\r\n\r\n fixColumns();\r\n setRenderColumns();\r\n columns().rebuild();\r\n self.update();\r\n // fixing pagination\r\n pagination.setItems(table.activeRows.length);\r\n\r\n if (!metHeight) {\r\n fixHeight();\r\n }\r\n },\r\n createSpecialCharModal = function () {\r\n var modal = document.getElementById(prefix + \"csvSpecialChars\");\r\n if (!modal) {\r\n var modalEl = createElement(\"div\", {\r\n class: prefix + \"modal \" + prefix + \"fade\",\r\n role: \"dialog\",\r\n aria_labelledby: prefix + \"modal-title\",\r\n id: prefix + \"csvSpecialChars\",\r\n tabindex: \"-1\",\r\n html:\r\n '
' +\r\n '

CSV with Special Characters

' +\r\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:

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