var app=(()=>{var t={};t.config={sessionToken:!1};t.helpers={};t.helpers.objEquals=(e,o,{title:r,debug:l})=>{let n=JSON.stringify(e),c=JSON.stringify(o),s=n===c;return l&&(console.log(`${r}s are ${s?"equal":"not equal"}`),console.log("obj1:",n),console.log("obj2:",c)),s};t.helpers.evtCounters={};t.helpers.evtCounterInc=(e,o=t.helpers.evtCounters)=>{let r=o[e.type];r||(o[e.type]=r=0),o[e.type]=++r};t.helpers.leafletClsnameFrom=e=>{let o=[[L.Marker,"marker"],[L.CircleMarker,"circlemarker"],[L.Circle,"circle"],[L.Polyline,"polyline"],[L.Polygon,"polygon"],[L.Rectangle,"rectangle"],[L.GeoJSON,"geojson"],[L.LayerGroup,"layergroup"],[L.FeatureGroup,"featuregroup"]];if(!e)return null;for(let[r,l]of o)if(e instanceof r)return l;return null};t.helpers.layerMapFrom=e=>{let o={};return e&&e?.eachLayer(r=>{let l=t.helpers.leafletClsnameFrom(r);if(l=typeof l=="string"&&l.trim().length>0?l.trim():"unknown",!l)return;let n=o[l];n||(o[l]=n=0),o[l]=++n}),o};t.helpers.coordsNormalize=e=>{if(e=e instanceof Array&&e.length>0?e:!1,!e)return;let o=e.length-1;for(;o>=0;){let r=e[o];t.helpers.coordsNormalize(r),r instanceof Array&&r.length===0&&e.splice(o,1),o--}};t.helpers.geojsnFeaturesFrom=(e,o)=>{let r=[];return e&&e?.eachLayer(l=>{try{let n=t.helpers.leafletClsnameFrom(l);if(n=typeof n=="string"&&n.trim().length>0?n.trim():!1,!(n&&o.indexOf(n)>-1))return;let c=l.toGeoJSON(5),s=JSON.stringify(c?.geometry?.coordinates),d=JSON.parse(s);t.helpers.coordsNormalize(d);let a=JSON.stringify(d);if(s!==a&&(c.geometry.coordinates=d),!(d?.length>0))return;r.push(c)}catch(n){console.log("geojsnFeaturesFrom error:",n)}}),r};t.helpers.isPoint=e=>e instanceof Array&&e?.length===2&&typeof e[0]=="number"&&typeof e[1]=="number";t.helpers.isPointWrapper=e=>{if(!(e instanceof Array&&e?.length>0))return!1;for(let o of e)if(!(o instanceof Array&&o?.length>0))return!1;return!0};t.helpers._latlngFromCoords=e=>{if(t.helpers.isPoint(e)){let o=e[0];e[0]=e[1],e[1]=o}else if(t.helpers.isPointWrapper(e))for(let o of e)t.helpers._latlngFromCoords(o);else throw new Error("Invalid coords")};t.helpers.latlngFromCoords=e=>{let o=JSON.parse(JSON.stringify(e));return t.helpers._latlngFromCoords(o),o};t.helpers.featureType2LayerType={Point:"marker",LineString:"polygon",Polygon:"polygon"};t.helpers.layersFromGeojsn=e=>{let o=e?.type==="FeatureCollection"?e.type:!1,r=e.features instanceof Array?e.features:!1;if(!(o&&r.length>=0))throw new Error("Required fields are missing");let l=[];for(let n of r)try{let c=n?.type==="Feature"?n.type:!1,s=typeof n?.geometry=="object"?n.geometry:!1,d=typeof n?.geometry?.type=="string"&&["Point","LineString","Polygon"].indexOf(n.geometry.type)>-1?n.geometry.type:!1,a=typeof n?.geometry?.coordinates=="object"&&n.geometry.coordinates?.length>0?n.geometry.coordinates:!1;if(!(c&&s&&d&&a))throw new Error("Required fields are missing");let i={type:t.helpers.featureType2LayerType[d],props:n?.properties,latlngs:d!=="LineString"?t.helpers.latlngFromCoords(a):[t.helpers.latlngFromCoords(a)]};l.push(i)}catch(c){console.log("layersFromGeojsn error:",c)}return l};t.helpers.tokenFromApi=async e=>{let o=await t.httpclient.apicall({path:"api/tokens",method:"GET",queryStringObject:{tokenId:e}});if(!o.ok)throw new Error(o?.error?.message||"Invalid token");return(await o.json())?.data};t.city2geoloc={Stuttgart:[9.1829,48.7758],M\u00FCnchen:[11.582,48.1351],Berlin:[13.405,52.52],Potsdam:[13.0645,52.3906],Bremen:[8.8017,53.0793],Hamburg:[9.9872,53.5488],Wiesbaden:[8.2398,50.0782],Schwerin:[11.4003,53.6353],Hannover:[9.732,52.3759],D\u00FCsseldorf:[6.7825,51.223],Mainz:[8.2473,49.9929],Saarbr\u00FCcken:[6.9975,49.2382],Dresden:[13.7373,51.0504],Magdeburg:[11.6081,52.1132],Kiel:[10.1228,54.3233],Erfurt:[11.0299,50.9848]};t.randomCity=()=>{let e=Object.keys(t.city2geoloc);return e[Math.floor(Math.random()*e.length)]};t.bodyClassLoggedinToggle=e=>{let o=document.querySelector("body");e?o.classList.add("loggedIn"):o.classList.remove("loggedIn")};t.localstorageRead=e=>{let o=localStorage.getItem(e);try{return JSON.parse(o)}catch(r){return console.log("localstorageRead error:",r),o}};t.localstorageWrite=(e,o)=>{try{let r=JSON.stringify(o);return localStorage.setItem(e,r),!0}catch(r){return console.log("localstorageWrite error:",r),localStorage.setItem(e,""),!1}};t.tokenSet=e=>{t.localstorageWrite("token",e),typeof e=="object"?(t.config.sessionToken=e,t.bodyClassLoggedinToggle(!0)):(t.config.sessionToken=!1,t.bodyClassLoggedinToggle(!1))};t.tokenGet=async()=>{let e=t.windowurlGet(),o=typeof e.searchParams?.tokenId=="string"&&e.searchParams.tokenId.trim().length===20?e.searchParams.tokenId.trim():!1,r=o?await t.helpers.tokenFromApi(o):t.localstorageRead("token");o&&(delete e.searchParams.tokenId,t.windowurlSet(e,"replace")),t.tokenSet(r)};t.windowurlGet=()=>{let e=new URL(window.location.href),o={path:e.pathname,hash:e.hash,searchParams:{}};for(let[r,l]of e.searchParams.entries())o.searchParams[r]=l;return o};t.windowurlSet=({path:e,searchParams:o,hash:r}={},l)=>{let n=new URL(window.location.href);e=typeof e=="string"&&e.trim().length>0?e.trim():!1,r=typeof r=="string"&&r.trim().length>0?r.trim():!1,o=typeof o=="object"?o:{},e&&(n.pathname=e),r&&(n.hash=r);let c=[];if(n.searchParams.keys().forEach(s=>{let d=o[s];d=typeof d=="string"&&d.trim().length>0?d.trim():!1,!d&&c.push(s)}),c.forEach(s=>n.searchParams.delete(s)),Object.entries(o).forEach(([s,d])=>{n.searchParams.set(s,d)}),!l)window.location.href=n.toString();else{let s=n.toString(),d=s.indexOf(e),a=d>-1?s.substring(d):"/";window.history.replaceState(null,"",a)}};t.httpclient={};t.httpclient.apicall=async({headers:e,path:o,method:r,queryStringObject:l,payload:n})=>{e=typeof e=="object"&&e!==null?e:{},o=typeof o=="string"?o:"/",r=typeof r=="string"&&["POST","GET","PUT","PATCH","DELETE"].indexOf(r.toUpperCase())>-1?r.toUpperCase():"GET",l=typeof l=="object"&&l!==null?l:{},n=typeof n=="object"&&n!==null?n:{};let c=o,s={method:r,headers:{"Content-type":"application/json; charset=UTF-8"},body:["GET","DELETE"].indexOf(r)>-1?void 0:JSON.stringify(n)},d=[];for(let a in l)l.hasOwnProperty(a)&&d.push(`${a}=${l[a]}`);d.length>0&&(c+="?"+d.join("&")),typeof l?.tokenId=="string"?s.headers.tokenid=l?.tokenId:t.config.sessionToken&&(s.headers.tokenid=t.config.sessionToken?.tokenId);for(let a in e)e.hasOwnProperty(a)&&(s.headers[a]=e[a]);return await fetch(c,s)};t.logout=e=>{(async()=>{await t.httpclient.apicall({path:"api/tokens",method:"DELETE",queryStringObject:{tokenId:t.config.sessionToken?.tokenId}}),t.tokenSet(!1),typeof e=="string"&&(window.location=e)})().catch(o=>{t.tokenSet(!1),typeof e=="string"&&(window.location=e)})};t.logoutButtonBind=()=>{document.getElementById("logoutButton")?.addEventListener("click",e=>{e.preventDefault(),t.logout("/session/deleted")})};t.forms={};t.forms.submitButtonBind=()=>{let e=document.querySelectorAll("form");if(e=typeof e=="object"&&e?.length>0?e:!1,!!e)for(let o=0;o{l.preventDefault();let n=l.target,c=n?.id;document.querySelector("#"+c+" .formError")&&(document.querySelector("#"+c+" .formError").style.display="none"),document.querySelector("#"+c+" .formSuccess")&&(document.querySelector("#"+c+" .formSuccess").style.display="none");let s={path:n?.action,method:n?.method?.toUpperCase(),payload:{},queryStringObject:{}},d=n?.elements;for(let a=0;a{let a=await t.httpclient.apicall(s),i=await a.json();if(a.ok)await t.forms.submitSuccessProcessor(c,i);else{let p=typeof i?.message=="string"?i?.message:a.statusText;document.querySelector("#"+c+" .formError").innerHTML=p,document.querySelector("#"+c+" .formError").style.display="block",a.status===403&&t.logout()}})().catch(a=>{let i=`${a.name}: ${a.message}`;document.querySelector("#"+c+" .formError").innerHTML=i,document.querySelector("#"+c+" .formError").style.display="block"})})};t.forms.accountCreateSuccess=async(e,o)=>{t.windowurlSet({path:"/account/created",searchParams:{accountCreateSuccessMessage:o?.message}})};t.forms.accountCreate2Success=async(e,o)=>{t.tokenSet(o?.data?.token),window.location="/maps/all"};t.forms.sessionCreateSuccess=async(e,o)=>{t.tokenSet(o?.data),window.location="/maps/all"};t.forms.accountPwdresetSuccess=async(e,o)=>{t.windowurlSet({path:"/account/pwdreseted",searchParams:{}})};t.forms.accountPwdreset2Success=async(e,o)=>{t.tokenSet(o?.data?.token),window.location="/maps/all"};t.forms.accountEdit1Success=async(e,o)=>{document.querySelector("#"+e+" .formSuccess").innerHTML=o?.message,document.querySelector("#"+e+" .formSuccess").style.display="block"};t.forms.accountEdit2Success=async(e,o)=>{document.querySelector("#"+e+" .formSuccess").innerHTML=o?.message,document.querySelector("#"+e+" .formSuccess").style.display="block"};t.forms.accountEdit3Success=async(e,o)=>{t.logout("/account/deleted")};t.forms.mapCreateSuccess=async(e,o)=>{window.location="/maps/all"};t.forms.submitSuccessHandlers={accountCreate:t.forms.accountCreateSuccess,accountCreate2:t.forms.accountCreate2Success,sessionCreate:t.forms.sessionCreateSuccess,accountPwdreset:t.forms.accountPwdresetSuccess,accountPwdreset2:t.forms.accountPwdreset2Success,accountEdit1:t.forms.accountEdit1Success,accountEdit2:t.forms.accountEdit2Success,accountEdit3:t.forms.accountEdit3Success,mapCreate:t.forms.mapCreateSuccess};t.forms.submitSuccessProcessor=async(e,o)=>{let r=t.forms.submitSuccessHandlers[e];typeof r=="function"&&await r(e,o)};t.accountCreatedPageHydrate=async()=>{console.log("accountCreatedPageHydrate/url:",t.windowurlGet())};t.accountPwdreset2PageHydrate=async()=>{try{let e=t.windowurlGet(),o=typeof e.searchParams?.tokenId=="string"&&e.searchParams?.tokenId?.length===20?e.searchParams?.tokenId.trim():!1;if(!o)throw new Error("Missing required fields");let r=await t.helpers.tokenFromApi(o);if(typeof r!="object")throw new Error("Failed to retrieve token data");if(r?.type!=="pwdreset")throw new Error(`Token type is invalid: expected 'pwdreset', got ${r?.type}`);document.querySelector("#accountPwdreset2 .hiddenUserIdInput").value=r.userId,document.querySelector("#accountPwdreset2 .displayUserIdInput").value=r.userId}catch(e){document.querySelector("#accountPwdreset2 .formError").innerHTML=e.message,document.querySelector("#accountPwdreset2 .formError").style.display="block"}};t.accountEmailnewPageHydrate=async()=>{try{let e=t.windowurlGet(),o=typeof e.searchParams?.tokenId=="string"&&e.searchParams?.tokenId?.length===20?e.searchParams?.tokenId.trim():!1;if(!o)throw new Error("Missing required fields");let r=await t.helpers.tokenFromApi(o);if(typeof r!="object")throw new Error("Failed to retrieve token data");if(r?.type!=="emailnew")throw new Error(`Token type is invalid: expected 'usernew', got ${r?.type}`);let l=await t.httpclient.apicall({path:"api/users",method:"PUT",payload:{userId:r.userId,email:"does.not@exists.com"},queryStringObject:{tokenId:r.tokenId}});if(!l.ok)throw new Error(tokenGetRes?.error?.message||"Email update failed");let c=(await l.json())?.data;t.tokenSet(c?.token),document.querySelector(" .blurb").innerHTML=`Email change verified and completed. From now on, your active Yomap email is ${c.email}`}catch(e){document.querySelector(" .blurb").innerHTML=`${e?.message||"Email update failed"}`}};t.accountCreate2PageHydrate=async()=>{try{let e=t.windowurlGet(),o=typeof e.searchParams?.tokenId=="string"&&e.searchParams?.tokenId?.length===20?e.searchParams?.tokenId.trim():!1;if(!o)throw new Error("Missing required fields");let r=await t.helpers.tokenFromApi(o);if(typeof r!="object")throw new Error("Failed to retrieve token data");if(r?.type!=="usernew")throw new Error(`Token type is invalid: expected 'usernew', got ${r?.type}`);document.querySelector("#accountCreate2 .hiddenUserIdInput").value=r.userId,document.querySelector("#accountCreate2 .hiddenTokenIdInput").value=r.tokenId,document.querySelector("#accountCreate2 .displayUserIdInput").value=r.userId}catch(e){document.querySelector("#accountCreate2 .formError").innerHTML=e?.message,document.querySelector("#accountCreate2 .formError").style.display="block"}};t.accountEditPageHydrate=async()=>{let e=typeof t.config.sessionToken?.userId=="string"?t.config.sessionToken.userId:!1;if(!e){t.logout();return}let o=await t.httpclient.apicall({path:"api/users",method:"GET",queryStringObject:{userId:e}});if(!o.ok){t.logout();return}let l=(await o.json()).data;document.querySelector("#accountEdit1 .displayUserIdInput").value=l.userId,document.querySelector("#accountEdit1 .emailInput").value=l.email,document.querySelector("#accountEdit1 .firstNameInput").value=l.firstName||"",document.querySelector("#accountEdit1 .lastNameInput").value=l.lastName||"",document.querySelector("#accountEdit1 .companyNameInput").value=l.companyName||"";let n=document.querySelectorAll("input.hiddenUserIdInput");n=typeof n=="object"&&n.length>0?n:!1;for(let c=0;c{let e=await t.httpclient.apicall({path:"api/maps",method:"GET"});if(!e.ok)return;let r=(await e.json()).data;if(r?.length===0){document.getElementById("noChecksMessage").style.display="table-row";return}let l=document.getElementById("mapsListTable");for(let n of r){let c=l.insertRow(-1);c.classList.add("checkRow"),c.id=`tr_${n.mapId}`,c.insertCell(0).innerHTML=n.mapId,c.insertCell(1).innerHTML=n.description,c.insertCell(2).innerHTML=`
Display Edit Delete
`,document.getElementById(`a_${n.mapId}`)?.addEventListener("click",async s=>{s.preventDefault();let d=s?.target?.id?.substring(2),a;(await t.httpclient.apicall({path:"api/maps",method:"DELETE",queryStringObject:{mapId:d}})).ok?(console.log("map delete success:"),document.getElementById(`tr_${d}`).remove()):(a=tokenGetRes?.error?.message||"Invalid token",console.log("map delete error:",a))})}};t.mapCreatePageHydrate=async()=>{let e=t.randomCity(),o=t.city2geoloc[e];document.querySelector("#mapCreate .hiddenGeoLocationInput").value=JSON.stringify(o),document.querySelector("#mapCreate .geoLocationNameInput").value=e,document.querySelector("#mapCreate .descriptionInput").value=""};t.mapDisplayPageHydrate=async()=>{try{let e=t.windowurlGet(),o=typeof e?.searchParams?.mapId=="string"&&e?.searchParams?.mapId?.trim()?.length===20?e?.searchParams?.mapId?.trim():!1;if(!o)throw new Error("Invalid mapId parameter");document.getElementById("editMode")?.addEventListener("click",i=>{i.preventDefault(),window.location=`/maps/edit?mapId=${o}`});let r=await t.httpclient.apicall({path:"api/maps",method:"GET",queryStringObject:{mapId:o}});if(!r.ok)throw new Error(r?.error?.message||`Map[${o}] retrieval failed`);let n=(await r.json())?.data,c={x:100,y:200,z:13,...n?.mapData},s=L.map("map").setView([c.y,c.x],c.z);L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{maxZoom:18,attribution:"\xA9 OpenStreetMap contributors"}).addTo(s),new L.Control.Geocoder().addTo(s);let d=t.helpers.layersFromGeojsn(n?.geoJson);for(let i of d){let p;if(i.type==="marker")p=L.marker(i.latlngs).addTo(s);else if(i.type==="polygon")p=L.polygon(i.latlngs).addTo(s);else{console.log(`Unsupported layer type[${i.type}]`);continue}console.log("lyaer:",p)}let a=!1;s.on("moveend",()=>{console.log("map changed/old/new",a,!0),a=!0})}catch(e){document.querySelector("#mapDisplay .formError").innerHTML=e.message,document.querySelector("#mapDisplay .formError").style.display="block"}};t.mapEditBtnSave=async(e,o)=>{try{let r=o.editTools.featuresLayer;console.log("collected event counters before save",t.helpers.evtCounters),console.log("collected features before save",t.helpers.layerMapFrom(r));let l=Object.values(t.helpers.evtCounters).reduce((p,u)=>p+u,0);for(let p of Object.keys(t.helpers.evtCounters))t.helpers.evtCounters[p]=0;let n={x:o.getCenter().lng,y:o.getCenter().lat,z:o.getZoom()},c={type:"FeatureCollection",features:t.helpers.geojsnFeaturesFrom(r,["marker","polygon","polyline"])},s=!t.helpers.objEquals(e.geoJson,c,{title:"geoJson",debug:!0}),d=!t.helpers.objEquals(e.mapData,n,{title:"mapData",debug:!0});if(!(s||d))return;e.geoJson=c,e.mapData=n;let a=await t.httpclient.apicall({path:"api/maps",method:"PUT",payload:e,queryStringObject:{}});if(!a.ok)throw new Error(a?.error?.message||"Map update failed");let i=await a.json();e=i?.data,document.querySelector("#mapEdit .formSuccess").innerHTML=i?.message||"Map updated successfully",document.querySelector("#mapEdit .formSuccess").style.display="block"}catch(r){document.querySelector("#mapEdit .formError").innerHTML=r.message,document.querySelector("#mapEdit .formError").style.display="block"}};t.helpers.deleteShape=e=>{try{let o=t.helpers.leafletClsnameFrom(e?.target),r=e.originalEvent.ctrlKey||e.originalEvent.metaKey,l=e?.target?.editEnabled();console.log("deleteShape tType:",o,"ctrlKey:",r,"targetEditEnable:d",l),console.log("deleteShape editor:",e?.target?.editor),r&&l&&(["polyline","polygon"].indexOf(o)>-1?e?.target?.editor?.deleteShapeAt(e.latlng):["marker"].indexOf(o)>-1&&(e?.target?.remove(),e?.target?.removeFrom(e?.target?.editor?.map?.editTools?.featuresLayer)))}catch(o){console.log("deleteShape error:",o)}};t.mapEditPageHydrate=async()=>{try{let e=t.windowurlGet(),o=typeof e?.searchParams?.mapId=="string"&&e?.searchParams?.mapId?.trim()?.length===20?e?.searchParams?.mapId?.trim():!1;if(!o)throw new Error("Invalid mapId parameter");let r=await t.httpclient.apicall({path:"api/maps",method:"GET",queryStringObject:{mapId:o}});if(!r.ok)throw new Error(r?.error?.message||`Map[${o}] retrieval failed`);let n=(await r.json())?.data;document.getElementById("displayMode")?.addEventListener("click",a=>{a.preventDefault(),window.location=`/maps/display?mapId=${o}`}),document.getElementById("saveMap")?.addEventListener("click",async a=>{a.preventDefault(),await t.mapEditBtnSave(n,s)});let c={x:100,y:200,z:13,...n?.mapData},s=L.map("map",{editable:!0}).setView([c.y,c.x],c.z);L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{maxZoom:18,attribution:"\xA9 OpenStreetMap contributors"}).addTo(s),new L.Control.Geocoder().addTo(s),L.EditControl=L.Control.extend({options:{position:"topleft",callback:null,kind:"",html:""},onAdd:function(a){let i=L.DomUtil.create("div","leaflet-control leaflet-bar"),p=L.DomUtil.create("a","",i);return p.href="#",p.title="Create a new "+this.options.kind,p.innerHTML=this.options.html,L.DomEvent.on(p,"click",L.DomEvent.stop).on(p,"click",function(){window.LAYER=this.options.callback.call(a.editTools)},this),i}}),L.NewPolygonControl=L.EditControl.extend({options:{position:"topleft",callback:s.editTools.startPolygon,kind:"polygon",html:"\u25B0"}}),L.NewMarkerControl=L.EditControl.extend({options:{position:"topleft",callback:s.editTools.startMarker,kind:"marker",html:"\u25C9\uFE0E"}}),s.addControl(new L.NewPolygonControl),s.addControl(new L.NewMarkerControl);let d=t.helpers.layersFromGeojsn(n?.geoJson);for(let a of d){let i;if(a.type==="marker")i=L.marker(a.latlngs).addTo(s.editTools.featuresLayer),i.on("click",L.DomEvent.stop).on("click",t.helpers.deleteShape,i),i.enableEdit();else if(a.type==="polygon")i=L.polygon(a.latlngs).addTo(s.editTools.featuresLayer),i.on("dblclick",L.DomEvent.stop).on("dblclick",i.toggleEdit),i.on("click",L.DomEvent.stop).on("click",t.helpers.deleteShape,i),i.enableEdit();else{console.log(`Unsupported layer type[${a.type}]`);continue}}s.editTools.on("editable:editing editable:drawing:move",a=>{t.helpers.evtCounterInc(a)}),s.editTools.on("editable:drawing:commit",a=>{t.helpers.evtCounterInc(a)}),s.on("layeradd",a=>{t.helpers.evtCounterInc(a);let i=t.helpers.leafletClsnameFrom(a?.layer)||"unknown";["marker","polyline","polygon"].indexOf(i)>-1&&a.layer.on("click",L.DomEvent.stop).on("click",t.helpers.deleteShape,a.layer),["polyline","polygon"].indexOf(i)>-1&&a.layer.on("dblclick",L.DomEvent.stop).on("dblclick",a.layer.toggleEdit)}),s.on("layerremove",a=>{t.helpers.evtCounterInc(a)}),s.on("moveend",a=>{t.helpers.evtCounterInc(a)})}catch(e){document.querySelector("#mapEdit .formError").innerHTML=e.message,document.querySelector("#mapEdit .formError").style.display="block"}};t.pageHydrateHandlers={accountCreated:t.accountCreatedPageHydrate,accountCreate2:t.accountCreate2PageHydrate,accountPwdreset2:t.accountPwdreset2PageHydrate,accountEmailnew:t.accountEmailnewPageHydrate,accountEdit:t.accountEditPageHydrate,mapsList:t.mapsListPageHydrate,mapCreate:t.mapCreatePageHydrate,mapDisplay:t.mapDisplayPageHydrate,mapEdit:t.mapEditPageHydrate};t.pageHydrate=async()=>{let e=document.querySelector("body").classList,o=typeof e=="object"&&e.length>0&&typeof e[0]=="string"?e[0]:!1,r=t.pageHydrateHandlers[o];typeof r=="function"&&await r()};t.init=()=>{t.forms.submitButtonBind(),t.logoutButtonBind(),(async()=>{await t.tokenGet(),await t.pageHydrate()})().catch(e=>{console.log("app.pageHydrate failed:",e)})};window.onload=()=>{t.init()};})();