PageSourceSearch

https://jmsupplies.store/cdn/shop/t/78/assets/jm-homepage-2-0.js?v=178310837098552837251787852473

js jmsupplies.store collected 2026-10-07 13:09:50 UTC 3,332 bytes, 2 lines download raw bytes

1(()=>{const ROOT_SELECTOR="[data-jm-homepage]",INITIALIZED="jmHomepageInitialized",pushEvent=(eventName,detail={})=>{Array.isArray(window.dataLayer)&&window.dataLayer.push({event:eventName,jm_location:"homepage_2_0",...detail})},setVoiceStatus=(status,message,state="info")=>{status&&(status.hidden=!1,status.dataset.state=state,status.textContent=message)},initializeVoice=root=>{const button=root.querySelector("[data-jm-voice-button]"),input=root.querySelector("[data-jm-search-input]"),status=root.querySelector("[data-jm-voice-status]"),label=root.querySelector("[data-jm-voice-label]"),Recognition=window.SpeechRecognition||window.webkitSpeechRecognition;if(!button||!input||!status||!Recognition)return;button.hidden=!1;let recognition=null,isListening=!1;const resetButton=()=>{isListening=!1,button.setAttribute("aria-pressed","false"),label&&(label.textContent="Speak your RC model")};button.addEventListener("click",()=>{if(isListening&&recognition){recognition.stop();return}recognition=new Recognition,recognition.lang=document.documentElement.lang||"en-US",recognition.continuous=!1,recognition.interimResults=!1,recognition.maxAlternatives=1,recognition.addEventListener("start",()=>{isListening=!0,button.setAttribute("aria-pressed","true"),label&&(label.textContent="Stop listening"),setVoiceStatus(status,"Listening\u2026 say your RC brand and model."),pushEvent("jm_voice_search_start")}),recognition.addEventListener("result",event=>{const transcript=event.results?.[0]?.[0]?.transcript?.trim();if(!transcript){setVoiceStatus(status,"We did not catch that. Try again or type your RC model.","error");return}input.value=transcript,input.dispatchEvent(new Event("input",{bubbles:!0})),input.focus(),setVoiceStatus(status,"Review the recognized model before searching."),pushEvent("jm_voice_search_transcript_ready")}),recognition.addEventListener("error",event=>{const denied=event.error==="not-allowed"||event.error==="service-not-allowed";setVoiceStatus(status,denied?"Microphone unavailable. Type your model or use your device keyboard\u2019s dictation.":"We did not catch that. Try again or type your RC model.","error"),pushEvent("jm_voice_search_error",{jm_voice_error:denied?"permission_denied":"recognition_error"})}),recognition.addEventListener("end",resetButton);try{recognition.start()}catch{resetButton(),setVoiceStatus(status,"Microphone unavailable. Type your model or use your device keyboard\u2019s dictation.","error")}})},initializeRoot=root=>{!root||root.dataset[INITIALIZED]==="true"||(root.dataset[INITIALIZED]="true",root.querySelectorAll("[data-jm-search-form]").forEach(form=>{form.addEventListener("submit",()=>{pushEvent("jm_search_submit",{jm_search_method:"typed_or_confirmed_voice"})})}),root.querySelectorAll("[data-jm-cta]").forEach(link=>{link.addEventListener("click",()=>{pushEvent("jm_cta_click",{jm_cta_id:link.dataset.jmCta||"unknown"})})}),initializeVoice(root))},initializeAll=(scope=document)=>{scope.querySelectorAll(ROOT_SELECTOR).forEach(initializeRoot)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>initializeAll(),{once:!0}):initializeAll(),document.addEventListener("shopify:section:load",event=>{initializeAll(event.target)})})();
2//# sourceMappingURL=/cdn/shop/t/78/assets/jm-homepage-2-0.js.map?v=178310837098552837251787852473

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.