1function debounce(fn,wait=300){let t;return(...args)=>{clearTimeout(t);t=setTimeout(()=>fn.apply(this,args),wait)}} 2if(!customElements.get('speech-search-button')){class SpeechSearchButton extends HTMLElement{constructor(){super();this.recognition=null;this.isListening=!1;this.form=null;this.searchInput=null;this.predictiveSearch=this.closest('predictive-search');const userAgent=window.navigator.userAgent.toLowerCase();if('webkitSpeechRecognition' in window&&userAgent.indexOf('chrome')>-1&&!!window.chrome&&userAgent.indexOf('edg/')===-1){this.init();this.bindEvents()}else if(this.predictiveSearch){this.predictiveSearch.classList.add('speech-search--failed')}} 3bindEvents(){this.recognition.addEventListener('result',debounce((evt)=>{if(evt.results){const term=evt.results[0][0].transcript;this.searchInput.value=term;if(this.searchInput.getAttribute('role')==='combobox'){this.searchInput.dispatchEvent(new Event('input'))}else{this.form.submit()}}},300));this.recognition.addEventListener('audiostart',()=>{this.isListening=!0;this.classList.add('search__speech-listening')});this.recognition.addEventListener('audioend',()=>{this.isListening=!1;this.classList.remove('search__speech-listening')});this.addEventListener('click',this.toggleListen);this.addEventListener('keydown',(e)=>{if(e.code==='Space'||e.code==='Enter'){this.toggleListen(e)}})} 4init(){this.classList.remove('hidden');this.recognition=new window.webkitSpeechRecognition();this.recognition.continuous=!1;this.recognition.interimResults=!1;this.form=this.closest('form');this.searchInput=this.form.querySelector('.js-search-input');if(this.predictiveSearch)this.predictiveSearch.classList.add('speech-search--enabled');} 5toggleListen(evt){evt.preventDefault();if(this.isListening){this.recognition.stop()}else{this.recognition.start()}}} 6customElements.define('speech-search-button',SpeechSearchButton)}
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.