UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

2 lines (1 loc) 7.51 kB
import{PREVIEW_MODE_ATTRIBUTE as M}from"./constants";import c from"./tools/base-runtime-url";import{loadCss as R,loadFont as g,loadJs as k}from"./tools/loaders";import I from"./tools/logger";import{buildRebookingUrl as T,getRebookingToken as A,retainRebookingToken as F}from"./tools/rebookingUrl";import{initSentry as V}from"./tools/sentry";import{sleep as H}from"./utils";import{initI18n as z}from"./utils/i18n";import G from"./utils/is-debug";import N from"./utils/is-localhost";import U from"./utils/is-webview";import{loadCustomCss as Q}from"./utils/loadCustomCss";import{loadIcons as q}from"./utils/loadIcons";import W from"./utils/mergeExhibitors";import E from"./utils/use-shadow";function t(){throw new Error("FloorPlan not ready")}export default class ${options;renderTarget;_ready;element;eventId;dataUrl;noOverlay;offHistory;ignoreQuery;allowConsent;onInit;disableRuntimeAlerts;viewerMode;maplibre;efpStyleLoadHandler;resolveReady;icons=new Map;enableRotation=!0;alwaysShowSidebar=!1;get ready(){return this._ready}get previewMode(){return this.options.previewMode||this.element.hasAttribute(M)}onBoothClick;onBookmarkClick;onVisitedClick;onCategoryClick;onFpConfigured;onDirection;onDetails;onExhibitorCustomButtonClick;onGetCoordsClick;onMarkerClick;onLeaveEvent;selectBooth(e){t()}selectExhibitor(e){t()}selectRoute(e,r){t()}getOptimizedRoutes(e){t()}selectCurrentPosition(e,r,h){t()}setBookmarks(e){t()}setEntitiesBookmarks(e){t()}setEntitiesVisited(e){t()}setMarkers(e){t()}updateLayerVisibility(e,r){t()}getCenterCoordinates(){t()}applyParameters(e){t()}exhibitorsList(){t()}boothsList(){t()}categoriesList(){t()}selectCategory(e){t()}getVisibility(){t()}setVisibility(e){t()}findLocation(){t()}zoomIn(){t()}zoomOut(){t()}zoomTo(e,r){t()}switchView(){t()}fitBounds(){t()}getBounds(e){t()}getBoothRect(e){t()}convertToGeo(e,r){t()}getGeoConfig(){t()}unstable_destroy(){t()}highlightExhibitors(e){t()}highlightBooths(e){t()}onCurrentPositionChanged(e){t()}search(e){t()}getFloors(){t()}onFloorActivated(e){t()}activateFloor(e){t()}showPathway(e,r){t()}showPathwayOnly(e,r){t()}hidePathways(){t()}showSearch(){t()}changeLanguage(e){t()}isGpsTrackingEnabled(){t()}setGpsTrackingEnabled(e){t()}deselectCurrentPosition(){t()}deselectRoute(){t()}reset(){t()}selectAccessibleRoute(e){t()}constructor(e){this.options=e,this.noOverlay=!!e.noOverlay,this.offHistory=!!e.offHistory,this.ignoreQuery=e.ignoreQuery,this.allowConsent=N&&!G?!1:e.allowConsent,this.onBoothClick=e.onBoothClick,this.onBookmarkClick=e.onBookmarkClick,this.onVisitedClick=e.onVisitedClick,this.onCategoryClick=e.onCategoryClick,this.onDetails=e.onDetails,this.onExhibitorCustomButtonClick=e.onExhibitorCustomButtonClick,this.onGetCoordsClick=e.onGetCoordsClick,this.onMarkerClick=e.onMarkerClick,this.onFpConfigured=e.onFpConfigured,this.onDirection=e.onDirection,this.onInit=e.onInit,this.onCurrentPositionChanged=e.onCurrentPositionChanged,this.onFloorActivated=e.onFloorActivated,this.onLeaveEvent=e.onLeaveEvent,this.viewerMode=!!e.viewerMode,this.disableRuntimeAlerts=e.disableRuntimeAlerts??!0,this.maplibre=e.maplibre,window.__efpMaplibre=e.maplibre,this._ready=new Promise((l,a)=>{this.resolveReady=l});const r=e.element;if(this.element=r,r.__expofp)throw new Error("Element already in use");if(r.__expofp=this,r.getAttribute("data-event-id")||r.getAttribute("data-event"))throw new Error("data-xxx attributes are removed, use options instead");const h=e.expo||e.event;if(!h)throw new Error("`expo` option is required");V({eventId:h||"",isWebview:U}),this.eventId=h,window.__efpEvent=h,window.__efpElement=r;const w=document.createElement("div");w.style.height="100%",w.style.width="100%",r.appendChild(w);let n;if(U&&(this.allowConsent=!0),e.allowConsent===void 0){const a=new URL(window.location.href).searchParams.get("allowConsent");a&&(this.allowConsent=a==="true")}if(E){n=w.attachShadow({mode:"open"});const l=n,a=document;l.createElement=(...i)=>a.createElement(...i),l.createElementNS=(...i)=>a.createElementNS(...i),l.createTextNode=(...i)=>a.createTextNode(...i)}else n=w;const y=document.createElement("div");if(y.style.height="100%",y.style.width="100%",n.appendChild(y),E&&Object.defineProperty(y,"ownerDocument",{value:n}),window.__efpShadowDOMStyleParent=E?n:void 0,this.renderTarget=y,r.getAttribute("data-data-url"))throw new Error("data-xxx attributes are removed, use options instead");const u=e.legacyDataUrlBase;window.__dataUrlBase=u,this.dataUrl=u,I.log("Instantiating ExpoFP floorplan",e.element,h);const S=u+"data.js",L=u+"wf.data.js",x=u+"fp.svg.js",O=[k(L),k(S),k(x)];let v=0;this.efpStyleLoadHandler=function(l){const a=window.__efpStyleElements;for(;v<a.length;){const i=a[v];n.appendChild(i),v++}},window.addEventListener("__efpStyleLoad",this.efpStyleLoadHandler);const b=this;(async function(){await Promise.all(O);let a=0;for(;window.__fpPending&&!window.__fp;)await H(2e3),await k(x+`?v=${++a}`);const i=window.__data;if(!i){const{showEventNotFound:o}=await import("./tools/event-not-found");o(r);return}await z();const m=new URLSearchParams(window.location.search);let f,C;if(i?.trackerUrl)try{f=new URL(i.trackerUrl),C=f.searchParams.get("expoId")}catch(o){console.error(o)}const _=async o=>{if(!f||!C)return Promise.reject(new Error("trackerUrl or expoId is missing"));const s=new URL(o.dataUrl,f.origin),d=await fetch(s.toString(),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({expoId:C,token:decodeURIComponent(m.get("t"))})});let p=[];d.ok&&(p=(await d.json()).map(o.dataMapper)),window.__heatmapDataYah={yah:p}};if(m.get("heatmap")==="true")try{if(m.get("type")==="yah")m.get("subtype")==="kiosk"?await _({dataUrl:"/api/kiosks/list/viewer",dataMapper:o=>({...o,id:o.key,name:`Kiosk ${o.key}`})}):await _({dataUrl:"/api/v1/you-are-here/qr-code/list/viewer",dataMapper:(o,s)=>({...o,name:`QR Code #${s+1}`})});else{const o=new URL("/api/fp-stats/get",f.origin);o.searchParams.set("expoId",C),o.searchParams.set("type","booview"),o.searchParams.set("t",decodeURIComponent(m.get("t")));const s=new URL("api/fp-stats/get",f.origin);s.searchParams.set("expoId",C),s.searchParams.set("type","exview"),s.searchParams.set("t",decodeURIComponent(m.get("t")));const[d,p]=await Promise.all([fetch(o.toString()),fetch(s.toString())]),[P,j]=await Promise.all([d.json(),p.json()]);window.__heatmapData={booths:P,exhibitors:j}}}catch(o){console.error("Heatmap: Initialization error",o)}try{const o=A();if(o){F(o);const s=T("api/rebooking-data",{rt:o,expoKey:h}),d=await fetch(s);if(d.ok){const p=await d.json();W(i,p)}i.isRebooking=d.ok}else i.isRebooking=!1}catch(o){console.error(o)}const B=[R(c+"vendor/sanitize-css/sanitize.css",n),R(c+"vendor/perfect-scrollbar/css/perfect-scrollbar.css",n),g("Oswald",c+"fonts/oswald-v17-cyrillic_latin-300.woff",{weight:300}),g("Oswald",c+"fonts/oswald-v17-cyrillic_latin-500.woff",{weight:500}),g("Inter",c+"fonts/inter-400.woff2",{weight:400}),g("Inter",c+"fonts/inter-500.woff2",{weight:500}),g("Inter",c+"fonts/inter-600.woff2",{weight:600}),g("efp-symbols",c+"fonts/efp-symbols.woff",{weight:400}),Q(i,n),q(b.icons)];await Promise.all(B),b.enableRotation=i?.enableRotation??!1,b.alwaysShowSidebar=i?.alwaysShowSidebar??!1,I.log("Data loaded"),window.__storeInitAllowed=!0;const{default:D}=await import("./floorplan.ready");for(document.querySelectorAll(".expofp-floorplan-loader").forEach(o=>o.remove());r.firstChild&&r.firstChild!==w;)r.removeChild(r.firstChild);Object.setPrototypeOf(b,D.prototype).init()})()}}