UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

2 lines (1 loc) 2.15 kB
import i from"fontfaceobserver";import{v4 as c}from"uuid";import{FONT_FACE as a}from"../constants";import d from"../utils/browser";import f from"../utils/is-from-designer";import p from"./logger";export async function loadJson(e){return await(await fetch(e,{credentials:"same-origin"})).json()}export function loadCss(e,n){const t=document.createElement("link");t.rel="stylesheet",t.href=e,t.setAttribute("fetchpriority","high"),n.appendChild(t)}export async function loadJs(e){return e=f&&e.indexOf("?")===-1?`${e}?v=${new Date().getMilliseconds()}`:e,new Promise(function(n,t){const o=document.createElement("script");o.src=addVersionToUrl(e),o.setAttribute("fetchpriority","high"),o.onload=n,o.onerror=n,p.log("Injecting script:",o.src),document.head.appendChild(o)})}export async function loadFont(e,n,t){t={style:"normal",weight:"normal",...t||{}};const o=`url("${n}")`;if(!window.FontFace)return e.startsWith("Font Awesome")||l(e,o,t),Promise.resolve();e.indexOf(" ")!==-1&&d.getEngine()?.name==="Gecko"&&(e=`'${e}'`);let r;try{r=new FontFace(e,o,t)}catch{r=new FontFace(`'${e}'`,o,t)}return document.fonts.add(r),r.load()}function l(e,n,t){const o=document.createElement("style");o.appendChild(document.createTextNode(`@font-face { font-family: ${e}; font-weight: ${t.weight}; font-style: ${t.style}; src: ${n} format('woff2'); font-display: swap; }`)),document.head.appendChild(o);const r=document.createElement("div");r.setAttribute("style",`font-family: oswald; font-weight: ${t.weight}; position: fixed; left: -1000px; top: 0; visibility: hidden`),r.innerHTML="Oswald",document.body.appendChild(r)}export async function loadCustomFonts(e){const n=getComputedStyle(document.documentElement).getPropertyValue(a)||e.match(/--expofp-font-face:\s*([^;]*)/)?.[1];if(!n)return;const o=n.replace(/"/g,"").split(", ").map(r=>r.trim()).map(r=>new i(r).load());return Promise.allSettled(o)}export function addVersionToUrl(e){try{let n=window.__fpDataVersion;n||(n=c().replace(/\D/g,""));const[t,o=""]=e.split("?"),r=new URLSearchParams(o);if(r.has("v"))return e;r.set("v",n);const s=r.toString();return s?`${t}?${s}`:t}catch(n){return console.warn(n),e}}