PageSourceSearch

https://www.kayak.com.au/news/wp-content/plugins/r9-components/public/HeaderSubMenu/scripts.js?ver=36699431923

js kayak.com.au collected 2026-10-02 04:15:05 UTC 5,068 bytes, 2 lines download raw bytes

1(()=>{"use strict";class t{constructor(t,e={}){this.el=t;this.options=Object.assign({triggerSelector:".accordion-link",targetSelector:".accordion-content",focusElOnShow:null,focusTrap:!1},e),this.trigger=null,this.target=null,this.isOpen=!1,this.boundHandleFocusTrap=this.handleFocusTrap.bind(this),this.init()}init(){this.trigger=this.el.querySelector(this.options.triggerSelector),this.target=this.el.querySelector(this.options.targetSelector),this.trigger&&this.target&&(this.trigger.addEventListener("click",t=>{t.stopPropagation(),JSON.parse(this.trigger.getAttribute("aria-expanded"))?this.hide():this.show()}),window.addEventListener("click",this.handleClosure.bind(this)),window.addEventListener("focusin",this.handleClosure.bind(this)),window.addEventListener("keyup",this.handleClosure.bind(this)))}show(){this.options.focusTrap&&this.target.addEventListener("keydown",this.boundHandleFocusTrap),this.trigger.setAttribute("aria-expanded",!0),this.target.setAttribute("aria-hidden",!1),this.el.classList.add("open"),this.target.classList.remove("is-hidden"),this.target.classList.add("transition-show"),setTimeout(()=>{this.isOpen=!0,this.target.classList.remove("transition-show"),this.target.classList.add("is-shown"),this.options.focusElOnShow&&this.options.focusElOnShow.focus()},300)}hide(){this.isOpen&&(this.options.focusTrap&&this.target.removeEventListener("keydown",this.boundHandleFocusTrap),this.target.classList.remove("is-shown"),this.target.classList.add("transition-hide"),setTimeout(()=>{this.isOpen=!1,this.el.classList.remove("open"),this.target.classList.remove("transition-hide"),this.target.classList.add("is-hidden"),this.trigger.setAttribute("aria-expanded",!1),this.target.setAttribute("aria-hidden",!0),this.options.focusTrap&&this.trigger.focus()},200))}handleClosure(t){return"keyup"===t.type&&"Escape"===t.code?(this.hide(),!1):!this.el.contains(t.target)&&this.hide()}handleFocusTrap(t){"Tab"===t.key&&(t.shiftKey?document.activeElement===this.getFirstFocusableTargetElement()&&(t.preventDefault(),this.getLastFocusableTargetElement().focus()):document.activeElement===this.getLastFocusableTargetElement()&&(t.preventDefault(),this.getFirstFocusableTargetElement().focus()))}getLastFocusableTargetElement(){const t=this.getFocusableTargetElements();return t[t.length-1]}getFirstFocusableTargetElement(){return this.getFocusableTargetElements()[0]}getFocusableTargetElements(){return this.target.querySelectorAll('a:not([disabled]), button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), details:not([disabled]), [tabindex]:not([tabindex="-1"])')}}const e=".collapse-toggle",s=".collapse-panel",i=s;class r{constructor(t,e={}){this.el=t;let s={menuSelector:".menu.menu--js-accordion-toggle",menuItemSelector:".accordion-item",collapseSelector:i};this.options=Object.assign(s,e),this.init()}init(){this.hasMenuCollapse()&&this.initMenuCollapse();const t=this.selectMenus();t&&this.initMenuItemsTogglers(t)}hasMenuCollapse(){return this.el.querySelectorAll(this.options.collapseSelector).length>0}selectMenus(){return this.el.querySelectorAll(this.options.menuSelector)}initMenuCollapse(){const i=this.el.querySelectorAll(e);[].forEach.call(i,i=>{const r=i.parentElement;i.classList.contains("header-sub-menu-search-collapse-toggle")?new t(r,{triggerSelector:e,targetSelector:s,focusElOnShow:r.querySelector('input[type="search"]'),focusTrap:!0}):new t(r,{triggerSelector:e,targetSelector:s})})}initMenuItemsTogglers(e){[].forEach.call(e,e=>{const s=e.querySelectorAll(this.options.menuItemSelector);[].forEach.call(s,e=>{new t(e)})})}}const n={submitSelector:'button[type="submit"]',inputSelector:'input[type="search"]'};class o{constructor(t,e={}){this.el=t,this.options=Object.assign(n,e),this.isTouched=!1,this.input=null,this.submit=null,this.init()}init(){return this.submit=this.el.querySelector(this.options.submitSelector),this.input=this.el.querySelector(this.options.inputSelector),!(!this.el||!this.input||(this.el.addEventListener("submit",this.onSubmit.bind(this)),0))}onSubmit(t){if(!1===this.isTouched&&(this.input.addEventListener("input",this.onInput.bind(this)),this.isTouched=!0),!this.isValidInput(this.input.value))return t.preventDefault(),void this.setElsOnError();this.submit&&(this.submit.style.width=this.submit.getBoundingClientRect().width+"px"),this.el.classList.add("is-processing")}onInput(t){if(!this.isValidInput(t.target.value))return this.resetEls(),void this.setElsOnError();this.resetEls()}isValidInput(t){return t.length>2}setElsOnError(){this.input.classList.add("error"),this.submit&&this.submit.setAttribute("disabled",!0)}resetEls(){this.el.classList.remove("is-processing"),this.input.classList.remove("error"),this.submit&&this.submit.removeAttribute("disabled")}}(()=>{const t=document.querySelectorAll(".header.header--header-sub-menu");[].forEach.call(t,t=>{new r(t)})})(),(()=>{const t=document.querySelectorAll(".header.header--header-sub-menu form.search-form");[].forEach.call(t,t=>{new o(t)})})()})();
2//# sourceMappingURL=scripts.js.map

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.