Files
FASS/2.0.0/ref/Map/dist/js/panel.ui.js
T

3 lines
67 KiB
JavaScript
Raw Normal View History

2026-07-14 21:33:39 +08:00
(()=>{var Fe=window,k=Fe.Panel??(Fe.Panel={}),t=k.ui??{};k.ui=t;var W=k.core,j=W?.Panel;if(!j)throw new Error("加载 panel.ui.js 前必须先加载 Panel.core.Panel");var L=W?.util??j.util;if(!L)throw new Error("panel.ui.js 缺少 Panel.core.util");var M=k.config??null,it=k.selects??null,rt=k.activationCode??"",Pe=k.storageKey??"panel:data",f=()=>{},st=B=>{if(!B||B==="invokeAction")return null;let R=t.panel;if(R&&typeof R[B]=="function")return()=>R.invokeAction(B);let N=t[B];return typeof N=="function"&&N!==t.invokeAction?()=>N():null};(()=>{"use strict";let B=()=>{M&&(M.panel&&M.panel.config&&(t.panel.config=L.mergeDeep(t.panel.config,M.panel.config)),M.ui&&(t.ui=L.mergeDeep(t.ui,M.ui)))},R=()=>t.ui.disposers??(t.ui.disposers=[]),N=e=>{let n=t.ui.disposers;if(!Array.isArray(n))return;let o=n.indexOf(e);o>=0&&n.splice(o,1)},_=e=>{if(typeof e!="function")return f;let n=R(),o=!0,i=()=>{o&&(o=!1,N(i),e())};return n.push(i),i},C=(e,n,o,i)=>!e||typeof e.addEventListener!="function"||typeof o!="function"?f:(e.addEventListener(n,o,i),_(()=>e.removeEventListener(n,o,i))),$=new WeakMap,K=(e,n,o,i,r,s)=>{if(!e||!n)return f;let a=$.get(e),c=a?.get(n);if(c&&c(),!o||typeof o.addEventListener!="function"||typeof r!="function")return f;a=$.get(e),a||(a=new Map,$.set(e,a)),o.addEventListener(i,r,s);let u=_(()=>{o.removeEventListener(i,r,s),a.get(n)===u&&a.delete(n),a.size||$.delete(e)});return a.set(n,u),u},Q=(e,n,o,i)=>{if(e?.length)for(let r=0;r<e.length;r++)C(e[r],n,o,i)},O=(e,n,o,i,r)=>{if(!e)return null;let s=E(o,i,r);return C(e,n,s),s},D=(e,n)=>e?.closest(n)??null,Z=(e,n)=>e?.dataset?.[n]??null,ie=()=>t.panel?.getHostWindow?.()??window,Te=()=>{let e=ie().Image||window.Image;return typeof e=="function"?new e:{}},Le=e=>{let n=ie().URL||window.URL;return typeof n?.createObjectURL=="function"?n.createObjectURL(e):""},re=e=>{!e||e._sharedObjectUrl===!0||L.revokeObjectUrl(e._objectUrl||e.src||"")},E=(e,n,o)=>(e[n]||(e[n]=o()),e[n]),ke=()=>{let e=t.ui.disposers;if(!(!Array.isArray(e)||!e.length))for(;e.length;){let n=e.pop();try{n()}catch(o){t.ui.lastDisposeError=o}}},w=(e,n,o)=>{!e||e[n]||(e[n]=requestAnimationFrame(()=>{e[n]=0,o()}))},se=(e,n)=>{!e||!e[n]||(cancelAnimationFrame(e[n]),e[n]=0)},Be=e=>{if(e)for(let n in e)se(e,n)},b=(e,n=document)=>Array.from(n.querySelectorAll(e)),S=[],we=new Map,Ee=new Set(["info","success","warning","error"]),q=W?.uiShapeConfigs??j.uiShapeConfigs??S,V=new Map;for(let e=0;e<q.length;e++){let n=q[e];V.set(n.type,n)}let xe=W?.formActionSchemas??j.formActionSchemas??{},ae=Object.freeze({layer:Object.freeze({panelKey:"layerPanel",listKey:"layerList",stateKey:"layerState",dataAttr:"layer-id",dataKey:"layerId",itemSelector:".layer-item",nameSelector:".layer-name",inputSelector:".layer-input",getEntry:e=>t.panel.getLayer(e),getEntries:()=>t.panel.getLayers(),getActiveId:()=>t.panel.getActiveLayerId(),rename:(e,n)=>t.panel.renameLayer(e,n,{history:!0}),createItem:(e,n,o)=>t.createLayerItem(e,n,o),updateItem:(e,n,o,i)=>t.updateLayerItem(e,n,o,i)}),group:Object.freeze({panelKey:"groupPanel",listKey:"groupList",stateKey:"groupState",dataAttr:"group-id",dataKey:"groupId",itemSelector:".group-item",nameSelector:".group-name",inputSelector:".group-input",getEntry:e=>t.panel.getGroup(e),getEntries:()=>t.panel.getGroups(),getActiveId:()=>t.panel.getActiveGroupId(),rename:(e,n)=>t.panel.renameGroup(e,n,{history:!0}),createItem:(e,n,o)=>t.createGroupItem(e,n,o),updateItem:(e,n,o,i)=>t.updateGroupItem(e,n,o,i)})}),le=Object.freeze(Object.keys(ae)),Me=e=>ae[e]??null,J=[["click","Click"],["dblclick","DblClick"],["keydown","Keydown"],["focusout","FocusOut"]],Re=e=>{let n=new Array(J.length);for(let o=0;o<J.length;o++){let[i,r]=J[o];n[o]=[`${e}Panel${r}`,i,()=>s=>t.handleSettingsPanelEvent(e,i,s)]}return n},ce=Object.freeze([["input","handleFormInput"],["change","handleFormChange"],["click","handleFormClick"]]),Ne=new Set(["setUndo","setRedo","setDeleteActive","setCopyShape","setBooleanUnion","setBooleanIntersect","setBooleanSubtract","setGroup","setUngroup","setRegroup","setReset"]),Ke=new Set(["setSelect","setNodeRect","s
`):n.join(","))}else I(e,n??"")},updateCountBadge:(e,n)=>{if(!e||!e.dataset)return;let o=e.dataset.countTarget;if(!o)return;let i=F(t.ui,"countTargetCache"),r=i.get(o);if(r?.isConnected===!1&&(i.delete(o),r=null),r||(r=document.getElementById(o),r&&i.set(o,r)),!r)return;let s=Array.isArray(n)?n.length:0;h(r,`${s} 项`)},syncThemeSelect:()=>{let e=t.ui.els.themeSelect;!e||!t.panel||t.setInputValue(e,t.panel.getTheme())},applyUiTheme:e=>{let n=document.documentElement;return n.dataset.theme===e||(n.dataset.theme=e),e},getPropertyTabState:(e,n=!1)=>{if(!e)return null;let o=t.ui.propertyTabState;if(o instanceof WeakMap||(o=t.ui.propertyTabState=new WeakMap),!n){let r=o.get(e);if(r)return r}let i={header:e.querySelector(":scope > .property-tab-header"),forms:b(":scope > form",e),buttons:[],activeIndex:-1};return o.set(e,i),i},handleThemeChange:(e,n,o)=>{let i=t.applyUiTheme(e),r=t.ui.els.themeSelect;r&&t.setInputValue(r,i)},setButtonActive:e=>{if(!e||!e.classList.contains("switch"))return;let n=t.ui.els.switchButtons;for(let o=0;o<n.length;o++)n[o].classList.remove("active");e.classList.add("active")},setFormActive:(e,n)=>{h(t.ui.els.propertyTitle,e);let o=t.ui.els.formTabs??S;for(let r=0;r<o.length;r++)ee(o[r],!0);let i=t.getFormTab(n);i&&(ee(i,!1),t.setPropertyTab(i,0))},getFormTab:e=>{if(!e)return null;let n=F(t.ui,"formTabCache");if(n.has(e)){let i=n.get(e);if(i?.isConnected!==!1)return i;n.delete(e)}let o=document.getElementById(e);return o&&n.set(e,o),o},getFormInputs:e=>{if(!e)return S;let n=F(t.ui,"formInputsCache"),o=t.getFormTab(e);if(!o)return n.delete(e),S;let i=n.get(e);if(i?.tab===o)return i.list;let r=b(".bind",o);return n.set(e,{tab:o,list:r}),r},getFormInput:(e,n)=>{if(!e||!n)return null;let o=F(t.ui,"formInputMapCache"),i=`${e}:${n}`;if(o.has(i)){let a=o.get(i);if(a?.isConnected)return a;o.delete(i)}let r=t.getFormInputs(e),s=null;for(let a=0;a<r.length;a++)if(r[a].name===n){s=r[a];break}return s&&o.set(i,s),s},cloneData:e=>structuredClone(e),ensureList:e=>Array.isArray(e)?e:[],getRuntimeSelectList:e=>it?.[e]??S,buildOptionEntries:(e,n)=>{let o=n||{},i=o.valueKey||"value",r=o.textKey||"text",s=Array.isArray(o.fallback)?o.fallback:[],a=new Set,c=[],u=l=>{let d,g;if(typeof l=="string"||typeof l=="number")d=String(l),g=String(l);else if(l&&typeof l=="object")d=l[i]??l.value??l.id??l.code??"",g=l[r]??l.text??l.name??d;else return;if(d===""&&g==="")return;let p=String(d);a.has(p)||(a.add(p),c.push({value:d??"",text:g??""}))};if(Array.isArray(e))for(let l=0;l<e.length;l++)u(e[l]);if(s.length)for(let l=0;l<s.length;l++)u(s[l]);return c},createOption:(e,n)=>{let o=document.createElement("option");return o.value=e??"",h(o,n),o},syncOptionList:(e,n,o,i=!1,r=null)=>{if(!e)return null;let s=o||{},a=t.buildOptionEntries(n,s),c=i?e.value:"",u=String(c),l=document.createDocumentFragment();r!==null&&l.appendChild(t.createOption("",r));let d=!c;for(let g=0;g<a.length;g++){let p=a[g];l.appendChild(t.createOption(p.value,p.text)),!d&&String(p.value)===u&&(d=!0)}return d||l.appendChild(t.createOption(c,c)),e.replaceChildren(l),c&&I(e,c),e},fillSelectOptions:(e,n,o)=>{let i=o||{};return t.syncOptionList(e,n,i,!0,i.placeholder??"")},fillDatalistOptions:(e,n,o)=>t.syncOptionList(e,n,o),fillSelectOrDatalist:(e,n,o)=>{if(!e)return null;if(e.tagName==="SELECT")return t.fillSelectOptions(e,n,o);let i=e.getAttribute("list");if(!i)return null;let r=F(t.ui,"datalistCache"),s=r.get(i);return s?.isConnected===!1&&(r.delete(i),s=null),s||(s=document.getElementById(i),s&&r.set(i,s)),t.fillDatalistOptions(s,n,o)},initActionFormSources:()=>{let e=t.dialogs.actionForm;if(e.sourcesReady)return;let n=t.getDialogForm(e);if(!n)return;e.sourcesReady=!0;let o=t.getField(n,"actionType"),i=t.getField(n,"blockingType"),r=t.getRuntimeSelectList("actionTypes"),s=t.getRuntimeSelectList("blockingTypes");t.fillSelectOrDatalist(o,r,{valueKey:"code",textKey:"name",placeholder:"请选择",fallback:S}),t.fillSelectOrDatalist(i,s,{valueKey:"code",textKey:"name",placeholder:"请选择",fallback:S}),t.initActionParamKeySources()},initActionParamKeySources:()=>{let