1(function(){const accordionButtonSelector=".bde-accordion__content-wrapper > .bde-accordion__title-tag > button[aria-expanded]";const{mergeObjects,isBuilder}=BreakdanceFrontend.utils;class BreakdanceAdvancedAccordion{defaultOptions={accordion:!1,openFirst:!1,ignoreClickEvent:!1};constructor(selector,options){this.selector=selector;this.element=document.querySelector(`${this.selector}`);this.options=mergeObjects(this.defaultOptions,options);this.isBuilder=isBuilder();this.init()} 2init(){this.elements=this.getAccordions();this.handleOnClick=this.onClick.bind(this);if(!this.options.ignoreClickEvent){this.elements.forEach((accordion)=>{accordion.addEventListener("click",this.handleOnClick)})} 3if(this.options.openFirst){this.open(this.elements[0],!0)} 4if(this.isBuilder&&this.elements.length===1){this.open(this.elements[0],!0)}} 5getAccordions(){return Array.from(document.querySelectorAll(`${this.selector} > ${accordionButtonSelector}`))} 6onClick(event){if(this.options.accordion){this.closeAllAccordions()} 7this.toggle(event.currentTarget)} 8isTransitioning(item){return item.classList.contains("is-collapsing")} 9isActive(item){return item.classList.contains("is-active")} 10getOpenAccordion(){return this.elements.find((accordion)=>this.isActive(this.getAccordionContainer(accordion)))} 11getOpenAccordionIndex(){return this.elements.indexOf(this.getOpenAccordion())} 12getAccordionContent(button){const controlsId=button.getAttribute("aria-controls");return this.element.querySelector(`#${controlsId}`)} 13getAccordionContainer(button){return button.closest(".bde-accordion__content-wrapper")} 14async open(button,instant=!1){const containerEl=this.getAccordionContainer(button);const contentEl=this.getAccordionContent(button);if(this.isTransitioning(containerEl))return;if(this.isActive(containerEl))return;const event=new Event("breakdance_play_animations",{bubbles:!0});contentEl.dispatchEvent(event);const complete=()=>{containerEl.classList.add("is-active");containerEl.classList.remove("is-collapsing");contentEl.style.height=""};if(instant){complete();button.setAttribute("aria-expanded",!0);return} 15containerEl.classList.add("is-collapsing");contentEl.style.height="0px";const endHeight=this.getEndHeight(contentEl);contentEl.style.height=`${endHeight}px`;button.setAttribute("aria-expanded",!0);await this.onTransitionEnd(contentEl);complete()} 16async close(button,instant=!1){const containerEl=this.getAccordionContainer(button);const contentEl=this.getAccordionContent(button);if(this.isTransitioning(containerEl))return;if(!this.isActive(containerEl)||this.options.ignoreClickEvent)return;if(instant){containerEl.classList.remove("is-active");button.setAttribute("aria-expanded",!1);return} 17const endHeight=this.getEndHeight(contentEl);contentEl.style.height=`${endHeight}px`;this.reflow(contentEl);containerEl.classList.add("is-collapsing");containerEl.classList.remove("is-active");contentEl.style.height="";button.setAttribute("aria-expanded",!1);await this.onTransitionEnd(contentEl);containerEl.classList.remove("is-collapsing")} 18toggle(button){const containerEl=this.getAccordionContainer(button);if(this.isActive(containerEl)){this.close(button)}else{this.open(button)}} 19closeAllAccordions(){this.elements.forEach((accordion)=>{this.close(accordion)})} 20closeAllItemsExcept(item,instant=!1){this.elements.filter((el)=>el!==item).forEach((el)=>this.close(el,instant))} 21destroy(){this.elements.forEach((accordion)=>{this.close(accordion,!0);accordion.removeEventListener("click",this.handleOnClick)});this.elements=null} 22getEndHeight(element){const height=element.getBoundingClientRect().height;return Math.max(element.scrollHeight,height)} 23reflow(element){element.offsetHeight} 24onTransitionEnd(item){const duration=window.getComputedStyle(item).getPropertyValue("transition-duration");if(duration==="0s"){return Promise.resolve()} 25return new Promise((resolve)=>{item.addEventListener("transitionend",resolve,{once:!0})})} 26update(){this.elements=this.getAccordions();this.destroy();this.init()} 27activateAccordionFromSelector(selector){this.elements=this.getAccordions();const buttonEl=selector.querySelector("button[aria-expanded]");const index=this.elements.indexOf(buttonEl);const item=index!==-1?this.elements[index]:this.elements[0];this.closeAllItemsExcept(item,!0);this.open(this.elements[index],!0)}} 28window.BreakdanceAdvancedAccordion=BreakdanceAdvancedAccordion})()
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.