-;(()=>{const d=document.currentScript;if(!d||d.src||(d.type&&d.type.toLowerCase()==="module")){if(!/^(localhost|127\.0\.0\.1|::1)$/.test(location.hostname))return}const e=document.documentElement,{connection:n}=navigator;window.obs=window.obs||{};const o=(window.obs&&window.obs.config)||{},a=o.observeChanges!==!1,u=t=>Number.isFinite(t)?Math.ceil(t/25)*25:null,c=t=>Number.isFinite(t)?t<75?"low":t<=275?"medium":"high":null,l=t=>Number.isFinite(t)?Math.ceil(t):null,s=()=>{const t=window.obs||{},n=typeof t.downlinkBucket==="number"?t.downlinkBucket:null,o=t.rttCategory==="low",a=t.rttCategory==="high",s=n!=null&&n>=8,i=n!=null&&n<=5;t.connectionCapability=o&&s?"strong":a||i?"weak":"moderate";const r=t.dataSaver===!0||t.batteryLow===!0;t.conservationPreference=r?"conserve":"neutral";const m=!r&&t.connectionCapability==="strong",h=r||t.connectionCapability==="weak";t.deliveryMode=m?"rich":h?"lite":"cautious",t.canShowRichMedia=t.deliveryMode==="rich",t.shouldAvoidRichMedia=t.deliveryMode==="lite",["strong","moderate","weak"].forEach(r=>{e.classList.remove(`has-connection-capability-${r}`)}),e.classList.add(`has-connection-capability-${t.connectionCapability}`),["conserve","neutral"].forEach(r=>{e.classList.remove(`has-conservation-preference-${r}`)}),e.classList.add(`has-conservation-preference-${t.conservationPreference}`),["rich","cautious","lite"].forEach(r=>{e.classList.remove(`has-delivery-mode-${r}`)}),e.classList.add(`has-delivery-mode-${t.deliveryMode}`)},r=()=>{if(!n)return;const{saveData:t,rtt:o,downlink:a}=n;window.obs.dataSaver=!!t,e.classList.toggle("has-data-saver",!!t);const i=u(o);i!=null&&(window.obs.rttBucket=i);const r=c(o);r&&(window.obs.rttCategory=r,["low","medium","high"].forEach(t=>e.classList.remove(`has-latency-${t}`)),e.classList.add(`has-latency-${r}`));const m=l(a);if(m!=null){window.obs.downlinkBucket=m;const t=m<=5,n=m>=8;e.classList.toggle("has-bandwidth-low",t),e.classList.toggle("has-bandwidth-high",n)}"downlinkMax"in n&&(window.obs.downlinkMax=n.downlinkMax),s()},m=t=>{if(!t)return;const{level:n,charging:o}=t,i=Number.isFinite(n)?n<=.05:null;window.obs.batteryCritical=i;const a=Number.isFinite(n)?n<=.2:null;window.obs.batteryLow=a,["critical","low"].forEach(t=>e.classList.remove(`has-battery-${t}`)),i?e.classList.add("has-battery-critical"):a&&e.classList.add("has-battery-low");const c=!!o;window.obs.batteryCharging=c,e.classList.toggle("has-battery-charging",c),s()};r(),a&&n&&typeof n.addEventListener==="function"&&n.addEventListener("change",r),"getBattery"in navigator&&navigator.getBattery().then(t=>{m(t),a&&typeof t.addEventListener==="function"&&(t.addEventListener("levelchange",()=>m(t)),t.addEventListener("chargingchange",()=>m(t)))}).catch(()=>{})})();
0 commit comments