it-tools/dist/client/assets/chunks/chunk-978d89fe.js
2024-04-28 00:48:29 +08:00

1 line
2.7 KiB
JavaScript

const A=["script","style","noscript"],v=["base","title","titleTemplate","bodyAttrs","htmlAttrs"],w=["og:image","og:video","og:audio","og:locale:alternate","video:actor","video:director","video:writer","video:tag","article:author","article:tag","book:tag","book:author","music:album","music:musician"];function k(s){const{props:c,tag:a}=s;if(v.includes(a))return a;if(a==="link"&&c.rel==="canonical")return"canonical";if(c.charset)return"charset";const r=["id"];a==="meta"&&r.push("name","property","http-equiv");for(const n of r)if(typeof c[n]<"u"){const b=String(c[n]);return w.findIndex(e=>b.startsWith(e))!==-1?!1:`${a}:${n}:${b}`}return!1}async function S(s,c={}){const a={shouldRender:!0};if(await s.hooks.callHook("dom:beforeRender",a),!a.shouldRender)return;const r=c.document||window.document,n=s._popSideEffectQueue();s.headEntries().map(e=>e._sde).forEach(e=>{Object.entries(e).forEach(([u,o])=>{n[u]=o})});const b=(e,u)=>{if(e.tag==="title"&&e.children)return r.title=e.children,r.head.querySelector("title");const o=(t,h)=>{t=`${e._d||e._p}:${t}`,u._sde[t]=h,delete n[t]},f=(t,h=!0)=>{Object.entries(e.props).forEach(([i,l])=>{l=String(l);const p=`attr:${i}`;if(i==="class"){for(const y of l.split(" ")){const E=`${p}:${y}`;h&&o(E,()=>t.classList.remove(y)),t.classList.contains(y)||t.classList.add(y)}return}h&&!i.startsWith("data-h-")&&o(p,()=>t.removeAttribute(i)),t.getAttribute(i)!==l&&t.setAttribute(i,l)}),A.includes(e.tag)&&(t.innerHTML=e.children||"")};if(e.tag==="htmlAttrs"||e.tag==="bodyAttrs"){const t=r[e.tag==="htmlAttrs"?"documentElement":"body"];return f(t),t}let d=r.createElement(e.tag);f(d,!1);let m;for(const t of r[e.tagPosition?.startsWith("body")?"body":"head"].children)if((t.getAttribute("data-h-key")||k({tag:t.tagName.toLowerCase(),props:Array.from(t.attributes).map(i=>[i.name,i.value]).reduce((i,[l,p])=>({...i,[l]:p}),{})}))===e._d||t.isEqualNode(d)){m=t;break}if(m)return o("el",()=>{m?.remove()}),f(m,!1),m;switch(e.tagPosition){case"bodyClose":d=r.body.appendChild(d);break;case"bodyOpen":d=r.body.insertBefore(d,r.body.firstChild);break;case"head":default:d=r.head.appendChild(d);break}return o("el",()=>d?.remove()),d};for(const e of await s.resolveTags()){const u=s.headEntries().find(f=>f._i===Number(e._e)),o={$el:null,shouldRender:!0,tag:e,entry:u,queuedSideEffects:n};await s.hooks.callHook("dom:beforeRenderTag",o),o.shouldRender&&(o.$el=b(o.tag,o.entry),await s.hooks.callHook("dom:renderTag",o))}Object.values(n).forEach(e=>e())}let g=null;async function T(s,c={}){function a(){return g=null,S(s,c)}const r=c.delayFn||(n=>setTimeout(n,10));return g=g||new Promise(n=>r(()=>n(a())))}export{T as debouncedRenderDOMHead,g as domUpdatePromise,S as renderDOMHead};