1export default class DropdownToggle{constructor(dropdownElement){this.dropdown=dropdownElement;this.trigger=this.dropdown.querySelector(".js-dropdown__trigger");this.content=this.dropdown.querySelector(".js-dropdown__content");if(!this.trigger||!this.content){console.error("Dropdownu chyb\u00ed spou\u0161t\u011b\u010d nebo obsah.",this.dropdown);return}this.triggerType=this.trigger.dataset.dropdownTrigger||"click";const closeOutside=this.dropdown.dataset.dropdownCloseOutside;this.closeOnOutsideClick= 2closeOutside!=="false";this.storeState=this.dropdown.dataset.storeState||null;this.isInitialized=false;this.toggle=this.toggle.bind(this);this.open=this.open.bind(this);this.close=this.close.bind(this);this.handleDocumentClick=this.handleDocumentClick.bind(this);this.handleEscapeKey=this.handleEscapeKey.bind(this);this.handleTouchStart=this.handleTouchStart.bind(this)}init(){if(this.isInitialized)return;this.isInitialized=true;this.dropdown.setAttribute("data-dropdown-initialized","true");this.trigger.addEventListener("touchstart", 3this.handleTouchStart,{passive:false});if(this.triggerType==="hover"){this.dropdown.addEventListener("mouseenter",this.open);this.dropdown.addEventListener("mouseleave",this.close)}else this.trigger.addEventListener("click",this.toggle);if(this.storeState==="open")this.open(false);else if(this.storeState==="closed")this.close(false)}handleTouchStart(event){const isExpanded=this.trigger.getAttribute("aria-expanded")==="true";if(!isExpanded){event.preventDefault();this.open()}}toggle(event){if(event)event.preventDefault(); 4const isExpanded=this.trigger.getAttribute("aria-expanded")==="true";isExpanded?this.close():this.open()}open(){if(this.trigger.getAttribute("aria-expanded")==="true")return;this.trigger.setAttribute("aria-expanded","true");this.content.setAttribute("data-visible","true");if(this.storeState!==null)this.dropdown.dataset.storeState="open";if(this.closeOnOutsideClick)document.addEventListener("click",this.handleDocumentClick);document.addEventListener("keydown",this.handleEscapeKey);setTimeout(()=>this.focusFirstElement(), 50)}close(returnFocus=false){this.trigger.setAttribute("aria-expanded","false");this.content.setAttribute("data-visible","false");if(this.storeState!==null)this.dropdown.dataset.storeState="closed";document.removeEventListener("click",this.handleDocumentClick);document.removeEventListener("keydown",this.handleEscapeKey);if(returnFocus)this.trigger.focus()}focusFirstElement(){const focusableElements=this.content.querySelectorAll('.fd-menu input, .fd-menu button, .fd-menu a[href], .fd-menu [tabindex]:not([tabindex\x3d"-1"])'); 6if(focusableElements.length>0)focusableElements[0].focus();else this.content.focus()}handleDocumentClick(event){if(!this.dropdown.contains(event.target))this.close()}handleEscapeKey(event){if(event.key==="Escape")this.close(true)}};
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.