// @requirements REQ-GOOGLE-MODE REQ-PRODUCT-MOBILE REQ-PRODUCT-A11Y import {createConsent,mountControls} from '/assets/runtime/index.js'; import {registerGoogleBasic} from '/assets/runtime/google-basic.js'; const root=document.querySelector('[data-google-example]'); try{ const response=await fetch(root.dataset.config);if(!response.ok)throw Error('Configuration unavailable.');const config=await response.json(),consent=createConsent(config);let starts=0,events=0,google,connected=false;const commands=[]; const render=()=>{if(!google)return;const snapshot=google.getSnapshot(),labels={blocked:'Blocked',loading:'Starting locally',active:'Active locally','reload-required':'Reload required',closed:'Closed'};document.querySelector('[data-google-state]').textContent=labels[snapshot.state];document.querySelector('[data-google-starts]').textContent=String(starts);document.querySelector('[data-google-events]').textContent=String(events);for(const output of document.querySelectorAll('[data-google-signal]'))output.textContent=snapshot.signals[output.dataset.googleSignal]==='granted'?'Granted':'Denied';const eventButton=document.querySelector('[data-google-event]'),reviewButton=document.querySelector('[data-google-review]'),reloadButton=document.querySelector('[data-google-reload]'),focused=document.activeElement;eventButton.disabled=snapshot.state!=='active';reviewButton.disabled=false;reloadButton.hidden=snapshot.state!=='reload-required';document.querySelector('[data-google-status]').textContent=({blocked:'Measurement stays off until your choice allows it.',loading:'Your choice allows measurement. The local tag is starting; page views still wait.',active:'Measurement is allowed. Page views still need an explicit action.','reload-required':'This adapter has stopped. Your saved choice is separate; reload to reset the tag context.',closed:'This adapter is closed. Reload to try again.'})[snapshot.state];if(focused===eventButton&&eventButton.disabled||focused===reloadButton&&reloadButton.hidden)(reloadButton.hidden?reviewButton:reloadButton).focus();}; const environment={connect(){if(connected)throw Error('One simulator per page.');connected=true;return {command(...args){commands.push(args);if(args[0]==='event')events++;const li=document.createElement('li'),label=document.createElement('strong'),code=document.createElement('code');label.textContent=String(commands.length).padStart(2,'0')+' / '+args.slice(0,args[0]==='consent'?2:1).join(' ยท ');code.textContent=JSON.stringify(args);li.append(label,code);const list=document.querySelector('[data-google-commands]');if(commands.length===1)list.replaceChildren();list.append(li);render();},enable(){},stop(){},async load(){starts++;render();}};}}; google=registerGoogleBasic({consent,serviceId:'google-measurement'},environment);google.subscribe(render);mountControls(document.getElementById('google-controls'),{consent});document.querySelector('[data-google-event]').addEventListener('click',()=>{google.event('page_view',{page_title:'Reviewed sample page'});render();});document.querySelector('[data-google-review]').addEventListener('click',()=>consent.openPreferences());document.querySelector('[data-google-reload]').addEventListener('click',()=>location.reload()); }catch{document.querySelector('[data-google-status]').textContent='This example could not start. No Google tag was loaded. Reload to try again.';}