@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 1.45 kB
JavaScript
import v from"../utils/is-webview";import{BROADCAST_CHANNEL_NAME as f,MESSAGE_CACHE as p,MESSAGE_CACHE_BUNDLE as y,MESSAGE_REFRESH as E}from"./constants";export async function initOfflineManager(r,t,i=[]){try{let c=function(e){o.has(e.data?.type)&&e.data?.payload&&o.delete(e.data?.type)},g=function(e){return r?`${r}${e}`:e},d=function(){if(navigator.serviceWorker.controller){const e="expofp_cache_refresh_ready";localStorage.getItem(e)==="1"?n({type:E}):localStorage.setItem(e,"1")}};if(!("serviceWorker"in navigator)||v||!await navigator.serviceWorker.getRegistration())return;navigator.serviceWorker.controller||await navigator.serviceWorker.ready;const a=new BroadcastChannel(f),o=new Set;u(),a.removeEventListener("message",c),a.addEventListener("message",c),n({type:p,payload:t}),n({type:y,payload:g("bundle.json")}),d();async function n(e){const l=()=>{!navigator.serviceWorker.controller||o.has(e.type)||!navigator.onLine||(a.postMessage(e),o.add(e.type))};l(),navigator.serviceWorker.controller||navigator.serviceWorker.addEventListener("controllerchange",l,{once:!0})}}catch(s){console.error(s)}}function u(){const r="expofp_persisted_storage_requested";if(sessionStorage.getItem(r)||!navigator.storage)return;const t=()=>{navigator.storage.persisted().then(i=>!i&&navigator.storage.persist()).catch(console.warn).finally(()=>{sessionStorage.setItem(r,"true"),window.removeEventListener("click",t)})};window.addEventListener("click",t)}