@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 2.31 kB
JavaScript
import{select as b}from"d3";import{getLayerSvg as y}from"../../data/svg";import{floors as p}from"../../data/svg";import{isPathwayLayer as w}from"../../utils/is-pathway-layer";import{Layer as c,LayerMode as n,LayersMode as u}from"../LayerStore";const h=1e3;export function getChildLayers(o,a,l){const f=[];let d=a;return b(y(o)).selectAll(`svg [data-layer="${o.name}"] > [data-layer]`).nodes().filter(i=>i.childNodes.length).forEach(i=>{const e=i.getAttribute("data-layer");let t=new c;t.name=i.getAttribute("data-layer"),t.visible=o.visible,t.description=i.getAttribute("data-layer-description")||e,t.frozen=i.getAttribute("data-layer-isfrozen")==="true",t.rect=o.rect,t.viewbox=o.viewbox,t.mode=n.Unset,t.rootParent=o.rootParent?o.rootParent:o;const r=getChildLayers(t,d,l);d=r.priority+l,t.basePriority=d,r.layers.length&&(t.childLayers=r.layers,f.push(...r.layers)),f.push(t)}),{layers:f,priority:d}}export default function v(o){const{layerStore:a}=o,l=window.__fpLayers;a.mode=window.__fpLayersMode||u.Default;const f=new URLSearchParams(window.location.search).get("layer"),d=(e,t)=>f?t.toLowerCase()===f.toLowerCase():a.mode!==u.Default?e.mode==n.TurnedOn:e.visible;let s=[],i=0;l?l.forEach(e=>{i+=h;let t=new c;t.name=e.name,t.description=e.description,t.frozen=e.frozen,t.visible=d(e,t.shortName),t.rect=e.rect,t.viewbox=e.viewbox,t.mode=e.mode||n.Unset,t.basePriority=i,t.floorIndex=e.floorIndex,s.push(t)}):b(y()).selectAll("svg > [data-layer]").nodes().filter(e=>e.childNodes.length).forEach(e=>{const t=e.getAttribute("data-layer");if(!t.startsWith("WF")){i+=h;let r=new c;r.name=t,r.visible=!0,r.description=e.getAttribute("data-layer-description")||t,r.frozen=e.getAttribute("data-layer-isfrozen")==="true",r.rect=p.filter(m=>m.name===r.name||m.name===r.description)[0]?.rect,r.mode=n.Unset,r.basePriority=i,s.push(r)}}),a.mode!==u.Default&&s.forEach(e=>{e.mode===n.AlwaysHidden?(e.frozen=!0,e.visible=!1):e.mode===n.AlwaysVisible?e.frozen=e.visible=!0:e.mode===n.TurnedOff?(e.frozen=!1,e.visible=!1):e.mode===n.TurnedOn&&(e.frozen=!1,e.visible=!0)});try{s.forEach(e=>{w(e.name)&&(e.frozen=!1,e.visible=!1,e.pathway=!0)})}catch(e){console.warn(e)}s=s.filter(e=>e.pathway||!e.frozen||e.frozen&&e.visible),a.defaultLayer=s.find(e=>e.name===window.__fpDefaultLayer),a.layers=[...a.layers,...s]}