hyperclayjs 1.27.1 → 1.28.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/package.json +1 -1
- package/src/communication/live-sync.js +300 -40
- package/src/hyperclay.js +5 -1
- package/src/ui/prompts.js +4 -6
- package/src/ui/theModal.js +17 -0
- package/src/utilities/mutation.js +26 -2
- package/src/vendor/hyper-morph.vendor.js +2 -2
- package/src/vendor/hypercms.vendor.js +374 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
var HyperMorph=(()=>{var V=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var Y=Object.prototype.hasOwnProperty;var J=(s,o)=>{for(var u in o)V(s,u,{get:o[u],enumerable:!0})},Q=(s,o,u,d)=>{if(o&&typeof o=="object"||typeof o=="function")for(let h of G(o))!Y.call(s,h)&&h!==u&&V(s,h,{get:()=>o[h],enumerable:!(d=K(o,h))||d.enumerable});return s};var X=s=>Q(V({},"__esModule",{value:!0}),s);var pe={};J(pe,{HyperMorph:()=>$,default:()=>he,defaults:()=>fe,morph:()=>de});var F={includeClasses:!0,includeAttributes:["href","src","name","type","role","aria-label","alt","title"],excludeAttributePrefixes:["data-morph-","data-hyper-","data-im-"],textHintLength:64,excludeIds:!0,maxPathDepth:4,landmarks:["HEADER","NAV","MAIN","ASIDE","FOOTER","SECTION","ARTICLE"],weights:{signature:100,pathSegment:10,textMatch:20,textMismatch:25,uniqueCandidate:50,positionPenalty:1},minConfidence:101};function Z(s){let o=5381;for(let u=0;u<s.length;u++)o=(o<<5)+o^s.charCodeAt(u);return Math.abs(o).toString(36)}function ee(s){if(s.classList&&s.classList.length>0)return Array.from(s.classList).sort().join(" ");let o=s.getAttribute?.("class");return o?o.split(/\s+/).filter(Boolean).sort().join(" "):""}function te(s,o){let u=[];for(let d of s.attributes||[]){let h=d.name;h==="id"||h==="class"||o.excludeAttributePrefixes.some(y=>h.startsWith(y))||o.includeAttributes.includes(h)&&u.push(`${h}=${d.value}`)}return u.sort().join("|")}function ne(s,o){return(s.textContent||"").replace(/\s+/g," ").trim().slice(0,o.textHintLength)}function re(s,o){let u=[s.tagName];return o.includeClasses&&u.push(ee(s)),u.push(te(s,o)),Z(u.join("|"))}function se(s){let o=s.tagName,u=1,d=s.previousElementSibling;for(;d;)d.tagName===o&&u++,d=d.previousElementSibling;return u}function ie(s,o){return s.id||s.getAttribute?.("role")?!0:o.landmarks.includes(s.tagName)}function ae(s){if(s.id)return`#${s.id}`;let o=s.getAttribute?.("role");return o?`@${o}`:s.tagName}function oe(s,o){let u=[],d=s;for(;d&&d.tagName&&u.length<o.maxPathDepth;){let h=`${d.tagName}:${se(d)}`;if(u.unshift(h),d!==s&&ie(d,o)){u.unshift(ae(d));break}d=d.parentElement}return u}function ue(s,o){let u=0,d=s.length-1,h=o.length-1;for(;d>=0&&h>=0&&s[d]===o[h];)u++,d--,h--;return u}function C(s,o,u){if(u.has(s))return u.get(s);let d={signature:re(s,o),path:oe(s,o),textHint:ne(s,o)};return u.set(s,d),d}function z(s,o,u,d){if(d.has(s))return d.get(s);let h=new Map,y=s.querySelectorAll("*"),H=0;for(let S of y){let I=C(S,o,u);I.domIndex=H++,h.has(I.signature)||h.set(I.signature,[]),h.get(I.signature).push(S)}return d.set(s,h),h}function ce(s,o,u){u.delete(s),o.delete(s);let d=s.querySelectorAll("*");for(let h of d)o.delete(h)}function q(s,o,u,d,h){let y=C(s,u,d),H=C(o,u,d),S=u.weights,I={},E=0;if(y.signature!==H.signature)return{score:0,breakdown:{rejected:"signature mismatch"}};E+=S.signature,I.signature=S.signature;let T=ue(y.path,H.path)*S.pathSegment;E+=T,I.path=T;let k=!0;if(y.textHint&&H.textHint?y.textHint===H.textHint?(E+=S.textMatch,I.text=S.textMatch):(E-=S.textMismatch,I.text=-S.textMismatch,k=!1):y.textHint!==H.textHint&&(E-=S.textMismatch,I.text=-S.textMismatch,k=!1),h.candidateCount===1&&k&&(E+=S.uniqueCandidate,I.unique=S.uniqueCandidate),typeof y.domIndex=="number"&&typeof H.domIndex=="number"){let N=Math.abs(y.domIndex-H.domIndex),R=Math.min(N*S.positionPenalty,20);E-=R,I.drift=-R}return{score:E,breakdown:I}}function D(s,o,u,d,h){if(u.excludeIds&&s.id)return null;let y=z(o,u,d,h),H=C(s,u,d);if(typeof H.domIndex!="number"){let k=0,N=s.previousElementSibling;for(;N;)k++,N=N.previousElementSibling;H.domIndex=k}let S=y.get(H.signature)||[],I=u.excludeIds?S.filter(k=>!k.id):S;if(I.length===0)return null;let E=null,x=0,T=null;for(let k of I){let{score:N,breakdown:R}=q(s,k,u,d,{candidateCount:I.length});N>x&&(x=N,E=k,T=R)}return x<u.minConfidence?null:{element:E,confidence:x,breakdown:T}}function W(s,o,u,d,h){let y=o.querySelectorAll("*"),H=z(s,u,d,h),S=0;for(let T of y){let k=C(T,u,d);k.domIndex=S++}let I=[];for(let T of y){if(u.excludeIds&&T.id)continue;let k=C(T,u,d),N=H.get(k.signature)||[],R=u.excludeIds?N.filter(B=>!B.id):N;for(let B of R){let{score:l,breakdown:A}=q(T,B,u,d,{candidateCount:R.length});l>=u.minConfidence&&I.push({newEl:T,oldEl:B,score:l,breakdown:A})}}I.sort((T,k)=>k.score-T.score);let E=new Map,x=new Set;for(let{newEl:T,oldEl:k}of I)E.has(T)||x.has(k)||(E.set(T,k),x.add(k));return E}function P(s,o,u,d){let h=C(s,u,d),y=C(o,u,d),{score:H,breakdown:S}=q(s,o,u,d,{candidateCount:1});return{matches:H>=u.minConfidence,score:H,breakdown:S,newMeta:{signature:h.signature,path:h.path,textHint:h.textHint},oldMeta:{signature:y.signature,path:y.path,textHint:y.textHint}}}function U(s={}){let o={...F,...s,weights:{...F.weights,...s.weights}},u=new WeakMap,d=new WeakMap;return{findMatch:(h,y)=>D(h,y,o,u,d),computeMatches:(h,y)=>W(h,y,o,u,d),explain:(h,y)=>P(h,y,o,u),invalidate:h=>ce(h,u,d),session:()=>{let h=new WeakMap,y=new WeakMap;return{findMatch:(H,S)=>D(H,S,o,h,y),computeMatches:(H,S)=>W(H,S,o,h,y),explain:(H,S)=>P(H,S,o,h)}},getConfig:()=>({...o})}}var le=U(),$=(function(){"use strict";let s=()=>{};function o(l){if(!(l instanceof Element))return!1;if(l.hasAttribute("save-ignore"))return!0;if(l.tagName==="LINK"||l.tagName==="SCRIPT"){let A=l.getAttribute("src")||l.getAttribute("href")||"";if(A.startsWith("chrome-extension://")||A.startsWith("moz-extension://")||A.startsWith("safari-web-extension://"))return!0}return!1}function u(l,A){if(A!=="smart")return l.outerHTML;let p=l.getAttribute("src"),v=l.getAttribute("type")||"text/javascript";if(p)try{let b=new URL(p,window.location.href);return`ext:${v}:${b.origin}${b.pathname}${b.search}`}catch{return`ext:${v}:${p}`}else{let b=l.textContent.trim(),g=5381;for(let r=0;r<b.length;r++)g=(g<<5)+g^b.charCodeAt(r);return`inline:${v}:${Math.abs(g).toString(36)}`}}let d={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:s,afterNodeAdded:s,beforeNodeMorphed:s,afterNodeMorphed:s,beforeNodeRemoved:s,afterNodeRemoved:s,beforeAttributeUpdated:s},head:{style:"merge",shouldPreserve:l=>l.getAttribute("im-preserve")==="true",shouldReAppend:l=>l.getAttribute("im-re-append")==="true",shouldRemove:s,afterHeadMorphed:s},scripts:{handle:!1,matchMode:"outerHTML",shouldPreserve:l=>l.getAttribute("im-preserve")==="true",shouldReAppend:l=>l.getAttribute("im-re-append")==="true",shouldRemove:s,afterScriptsHandled:s},restoreFocus:!0},h={computeMatches(l,A){let{computeMatches:p}=le.session();return p(l,A)}};function y(l,A,p={}){l=R(l);let v=B(A),b=N(l,v,p),g=b.scripts.matchMode,r=new Set(Array.from(l.querySelectorAll("script")).map(n=>u(n,g))),c=S(b,()=>x(b,l,v,n=>n.morphStyle==="innerHTML"?(I(n,l,v),Array.from(l.childNodes)):H(n,l,v)));b.pantry.remove();let e=k(l,r,b);return e.length>0?c instanceof Promise?c.then(n=>Promise.all(e).then(()=>n)):Promise.all(e).then(()=>c):c}function H(l,A,p){let v=B(A);return I(l,v,p,A,A.nextSibling),Array.from(v.childNodes)}function S(l,A){if(!l.config.restoreFocus)return A();let p=document.activeElement;if(!(p instanceof HTMLInputElement||p instanceof HTMLTextAreaElement))return A();let{id:v,selectionStart:b,selectionEnd:g}=p,r=A();return v&&v!==document.activeElement?.getAttribute("id")&&(p=l.target.querySelector(`[id="${v}"]`),p?.focus()),p&&!p.selectionEnd&&g!=null&&p.setSelectionRange(b,g),r}let I=(function(){function l(e,n,i,t=null,a=null){n instanceof HTMLTemplateElement&&i instanceof HTMLTemplateElement&&(n=n.content,i=i.content),t||=n.firstChild;for(let f of i.childNodes){if(o(f))continue;if(t&&t!=a){let M=p(e,f,t,a);if(M){M!==t&&b(e,t,M),E(M,f,e),t=M.nextSibling;continue}}if(f instanceof Element){let M=f.getAttribute("id");if(e.persistentIds.has(M)){let w=g(n,M,t,e);E(w,f,e),t=w.nextSibling;continue}if(!e.idMap.has(f)){let w=e.hyperMatches.get(f);if(w&&!e.idMap.has(w)){c(n,w,t),E(w,f,e),t=w.nextSibling;continue}}}let m=A(n,f,t,e);m&&(t=m.nextSibling)}for(;t&&t!=a;){let f=t;t=t.nextSibling,o(f)||v(e,f)}}function A(e,n,i,t){if(t.callbacks.beforeNodeAdded(n)===!1)return null;if(t.idMap.has(n)){let a=document.createElement(n.tagName);return e.insertBefore(a,i),E(a,n,t),t.callbacks.afterNodeAdded(a),a}else{let a=document.importNode(n,!0);return e.insertBefore(a,i),t.callbacks.afterNodeAdded(a),a}}let p=(function(){function e(t,a,f,m){let M=a instanceof Element&&!t.idMap.has(a)?t.hyperMatches.get(a):null,w=null,O=a.nextSibling,j=0,L=f;for(;L&&L!=m;){if(i(L,a)){if(n(t,L,a)||L===M&&!t.idMap.has(L))return L;if(w===null){let _=L instanceof Element&&t.hyperMatchedOldElements.has(L);!t.idMap.has(L)&&!_&&(w=L)}}if(w===null&&O&&i(L,O)&&(j++,O=O.nextSibling,j>=2&&(w=void 0)),t.activeElementAndParents.includes(L))break;L=L.nextSibling}return w||null}function n(t,a,f){let m=t.idMap.get(a),M=t.idMap.get(f);if(!M||!m)return!1;for(let w of m)if(M.has(w))return!0;return!1}function i(t,a){let f=t,m=a;return f.nodeType===m.nodeType&&f.tagName===m.tagName&&(!f.getAttribute?.("id")||f.getAttribute?.("id")===m.getAttribute?.("id"))}return e})();function v(e,n){let i=n instanceof Element&&e.hyperMatchedOldElements.has(n)&&!e.idMap.has(n);if(e.idMap.has(n)||i)c(e.pantry,n,null);else{if(e.callbacks.beforeNodeRemoved(n)===!1)return;n.parentNode?.removeChild(n),e.callbacks.afterNodeRemoved(n)}}function b(e,n,i){let t=n;for(;t&&t!==i;){let a=t;t=t.nextSibling,o(a)||v(e,a)}return t}function g(e,n,i,t){let a=t.target.getAttribute?.("id")===n&&t.target||t.target.querySelector(`[id="${n}"]`)||t.pantry.querySelector(`[id="${n}"]`);return r(a,t),c(e,a,i),a}function r(e,n){let i=e.getAttribute("id");for(;e=e.parentNode;){let t=n.idMap.get(e);t&&(t.delete(i),t.size||n.idMap.delete(e))}}function c(e,n,i){if(e.moveBefore)try{e.moveBefore(n,i)}catch{e.insertBefore(n,i)}else e.insertBefore(n,i)}return l})(),E=(function(){function l(r,c,e){return e.ignoreActive&&r===document.activeElement?null:(e.callbacks.beforeNodeMorphed(r,c)===!1||(r instanceof HTMLHeadElement&&e.head.ignore||(r instanceof HTMLHeadElement&&e.head.style!=="morph"?T(r,c,e):(A(r,c,e),g(r,e)||I(e,r,c))),e.callbacks.afterNodeMorphed(r,c)),r)}function A(r,c,e){let n=c.nodeType;if(n===1){let i=r,t=c,a=i.attributes,f=t.attributes;for(let m of f)b(m.name,i,"update",e)||i.getAttribute(m.name)!==m.value&&i.setAttribute(m.name,m.value);for(let m=a.length-1;0<=m;m--){let M=a[m];if(M&&!t.hasAttribute(M.name)){if(b(M.name,i,"remove",e))continue;i.removeAttribute(M.name)}}g(i,e)||p(i,t,e)}(n===8||n===3)&&r.nodeValue!==c.nodeValue&&(r.nodeValue=c.nodeValue)}function p(r,c,e){if(r instanceof HTMLInputElement&&c instanceof HTMLInputElement&&c.type!=="file"){let n=c.value,i=r.value;v(r,c,"checked",e),v(r,c,"disabled",e),c.hasAttribute("value")?i!==n&&(b("value",r,"update",e)||(r.setAttribute("value",n),r.value=n)):b("value",r,"remove",e)||(r.value="",r.removeAttribute("value"))}else if(r instanceof HTMLOptionElement&&c instanceof HTMLOptionElement)v(r,c,"selected",e);else if(r instanceof HTMLTextAreaElement&&c instanceof HTMLTextAreaElement){let n=c.value,i=r.value;if(b("value",r,"update",e))return;n!==i&&(r.value=n),r.firstChild&&r.firstChild.nodeValue!==n&&(r.firstChild.nodeValue=n)}}function v(r,c,e,n){let i=c[e],t=r[e];if(i!==t){let a=b(e,r,"update",n);a||(r[e]=c[e]),i?a||r.setAttribute(e,""):b(e,r,"remove",n)||r.removeAttribute(e)}}function b(r,c,e,n){return r==="value"&&n.ignoreActiveValue&&c===document.activeElement?!0:n.callbacks.beforeAttributeUpdated(r,c,e)===!1}function g(r,c){return!!c.ignoreActiveValue&&r===document.activeElement&&r!==document.body}return l})();function x(l,A,p,v){if(l.head.block){let b=A.querySelector("head"),g=p.querySelector("head");if(b&&g){let r=T(b,g,l);return Promise.all(r).then(()=>{let c=Object.assign(l,{head:{block:!1,ignore:!0}});return v(c)})}}return v(l)}function T(l,A,p){let v=[],b=[],g=[],r=[],c=p.scripts.matchMode,e=t=>{if(t.tagName==="SCRIPT")return u(t,c);if(t.tagName==="LINK"&&c==="smart"){let a=t.getAttribute("href");if(a)try{let f=new URL(a,window.location.href);return`link:${t.getAttribute("rel")||""}:${f.origin}${f.pathname}${f.search}`}catch{}}return t.outerHTML},n=new Map;for(let t of A.children)o(t)||n.set(e(t),t);for(let t of l.children){let a=e(t),f=n.has(a),m=p.head.shouldReAppend(t),M=p.head.shouldPreserve(t);f||M?m?b.push(t):(n.delete(a),g.push(t)):p.head.style==="append"?m&&(b.push(t),r.push(t)):p.head.shouldRemove(t)!==!1&&!o(t)&&b.push(t)}r.push(...n.values());let i=[];for(let t of r){let a=document.createRange().createContextualFragment(t.outerHTML).firstChild;if(p.callbacks.beforeNodeAdded(a)!==!1){if("href"in a&&a.href||"src"in a&&a.src){let f,m=new Promise(function(M){f=M});a.addEventListener("load",function(){f()}),i.push(m)}l.appendChild(a),p.callbacks.afterNodeAdded(a),v.push(a)}}for(let t of b)p.callbacks.beforeNodeRemoved(t)!==!1&&(l.removeChild(t),p.callbacks.afterNodeRemoved(t));return p.head.afterHeadMorphed(l,{added:v,kept:g,removed:b}),i}function k(l,A,p){if(!p.scripts.handle)return[];let v=[],b=[],g=[],r=[],c=p.scripts.matchMode,e=Array.from(l.querySelectorAll("script"));for(let i of e){let t=u(i,c),a=A.has(t),f=p.scripts.shouldPreserve(i),m=p.scripts.shouldReAppend(i);a||f?m?(b.push(i),r.push(i)):g.push(i):r.push(i)}for(let i of A){let t=e.some(a=>a.outerHTML===i)}let n=[];for(let i of r){if(p.callbacks.beforeNodeAdded(i)===!1)continue;let t=document.createRange().createContextualFragment(i.outerHTML).firstChild;if(t.src){let a,f=new Promise(function(m){a=m});t.addEventListener("load",function(){a()}),t.addEventListener("error",function(){a()}),n.push(f)}i.replaceWith(t),p.callbacks.afterNodeAdded(t),v.push(t)}return p.scripts.afterScriptsHandled(l,{added:v,kept:g,removed:b}),n}let N=(function(){function l(e,n,i){let{persistentIds:t,idMap:a}=r(e,n),f=h.computeMatches(e,n),m=new Set;for(let O of f.values())m.add(O);let M=A(i),w=M.morphStyle||"outerHTML";if(!["innerHTML","outerHTML"].includes(w))throw`Do not understand how to morph style ${w}`;return{target:e,newContent:n,config:M,morphStyle:w,ignoreActive:M.ignoreActive,ignoreActiveValue:M.ignoreActiveValue,restoreFocus:M.restoreFocus,idMap:a,persistentIds:t,hyperMatches:f,hyperMatchedOldElements:m,pantry:p(),activeElementAndParents:v(e),callbacks:M.callbacks,head:M.head,scripts:M.scripts}}function A(e){let n=Object.assign({},d);return Object.assign(n,e),n.callbacks=Object.assign({},d.callbacks,e.callbacks),n.head=Object.assign({},d.head,e.head),n.scripts=Object.assign({},d.scripts,e.scripts),n}function p(){let e=document.createElement("div");return e.hidden=!0,document.body.insertAdjacentElement("afterend",e),e}function v(e){let n=[],i=document.activeElement;if(i?.tagName!=="BODY"&&e.contains(i))for(;i&&(n.push(i),i!==e);)i=i.parentElement;return n}function b(e){let n=Array.from(e.querySelectorAll("[id]"));return e.getAttribute?.("id")&&n.push(e),n}function g(e,n,i,t){for(let a of t){let f=a.getAttribute("id");if(n.has(f)){let m=a;for(;m;){let M=e.get(m);if(M==null&&(M=new Set,e.set(m,M)),M.add(f),m===i)break;m=m.parentElement}}}}function r(e,n){let i=b(e),t=b(n),a=c(i,t),f=new Map;g(f,a,e,i);let m=n.__hyperMorphRoot||n;return g(f,a,m,t),{persistentIds:a,idMap:f}}function c(e,n){let i=new Set,t=new Map;for(let{id:f,tagName:m}of e)t.has(f)?i.add(f):t.set(f,m);let a=new Set;for(let{id:f,tagName:m}of n)a.has(f)?i.add(f):t.get(f)===m&&a.add(f);for(let f of i)a.delete(f);return a}return l})(),{normalizeElement:R,normalizeParent:B}=(function(){let l=new WeakSet;function A(g){return g instanceof Document?g.documentElement:g}function p(g){if(g==null)return document.createElement("div");if(typeof g=="string")return p(b(g));if(l.has(g))return g;if(g instanceof Node){if(g.parentNode)return new v(g);{let r=document.createElement("div");return r.append(g),r}}else{let r=document.createElement("div");for(let c of[...g])r.append(c);return r}}class v{constructor(r){this.originalNode=r,this.realParentNode=r.parentNode,this.previousSibling=r.previousSibling,this.nextSibling=r.nextSibling}get childNodes(){let r=[],c=this.previousSibling?this.previousSibling.nextSibling:this.realParentNode.firstChild;for(;c&&c!=this.nextSibling;)r.push(c),c=c.nextSibling;return r}querySelectorAll(r){return this.childNodes.reduce((c,e)=>{if(e instanceof Element){e.matches(r)&&c.push(e);let n=e.querySelectorAll(r);for(let i=0;i<n.length;i++)c.push(n[i])}return c},[])}insertBefore(r,c){return this.realParentNode.insertBefore(r,c)}moveBefore(r,c){return this.realParentNode.moveBefore(r,c)}get __hyperMorphRoot(){return this.originalNode}}function b(g){let r=new DOMParser,c=g.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,"");if(c.match(/<\/html>/)||c.match(/<\/head>/)||c.match(/<\/body>/)){let e=r.parseFromString(g,"text/html");if(c.match(/<\/html>/))return l.add(e),e;{let n=e.firstChild;return n&&l.add(n),n}}else{let n=r.parseFromString("<body><template>"+g+"</template></body>","text/html").body.querySelector("template").content;return l.add(n),n}}return{normalizeElement:A,normalizeParent:p}})();return{morph:y,defaults:d}})();var de=$.morph,fe=$.defaults,he=$;return X(pe);})();
|
|
1
|
+
var HyperMorph=(()=>{var z=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var se=Object.prototype.hasOwnProperty;var ie=(s,c)=>{for(var a in c)z(s,a,{get:c[a],enumerable:!0})},ae=(s,c,a,d)=>{if(c&&typeof c=="object"||typeof c=="function")for(let h of re(c))!se.call(s,h)&&h!==a&&z(s,h,{get:()=>c[h],enumerable:!(d=ne(c,h))||d.enumerable});return s};var oe=s=>ae(z({},"__esModule",{value:!0}),s);var we={};ie(we,{HyperMorph:()=>W,default:()=>ke,defaults:()=>Se,morph:()=>ye});var J={includeClasses:!0,includeAttributes:["href","src","name","type","role","aria-label","alt","title"],excludeAttributePrefixes:["data-morph-","data-hyper-","data-im-"],textHintLength:64,excludeIds:!0,maxPathDepth:4,landmarks:["HEADER","NAV","MAIN","ASIDE","FOOTER","SECTION","ARTICLE"],weights:{signature:100,pathSegment:10,textMatch:20,textMismatch:25,uniqueCandidate:50,positionPenalty:1,slotMatch:30},minConfidence:101};function ce(s){let c=5381;for(let a=0;a<s.length;a++)c=(c<<5)+c^s.charCodeAt(a);return Math.abs(c).toString(36)}function ue(s){if(s.classList&&s.classList.length>0)return Array.from(s.classList).sort().join(" ");let c=s.getAttribute?.("class");return c?c.split(/\s+/).filter(Boolean).sort().join(" "):""}function le(s,c){let a=[];for(let d of s.attributes||[]){let h=d.name;h==="id"||h==="class"||c.excludeAttributePrefixes.some(w=>h.startsWith(w))||c.includeAttributes.includes(h)&&a.push(`${h}=${d.value}`)}return a.sort().join("|")}function de(s,c){return(s.textContent||"").replace(/\s+/g," ").trim().slice(0,c.textHintLength)}function fe(s,c){let a=[s.tagName];return c.includeClasses&&a.push(ue(s)),a.push(le(s,c)),ce(a.join("|"))}function he(s){let c=s.tagName,a=1,d=s.previousElementSibling;for(;d;)d.tagName===c&&a++,d=d.previousElementSibling;return a}function pe(s,c){return s.id||s.getAttribute?.("role")?!0:c.landmarks.includes(s.tagName)}function me(s){if(s.id)return`#${s.id}`;let c=s.getAttribute?.("role");return c?`@${c}`:s.tagName}function ge(s,c){let a=[],d=s;for(;d&&d.tagName&&a.length<c.maxPathDepth;){let h=`${d.tagName}:${he(d)}`;if(a.unshift(h),d!==s&&pe(d,c)){a.unshift(me(d));break}d=d.parentElement}return a}function be(s,c){let a=0,d=s.length-1,h=c.length-1;for(;d>=0&&h>=0&&s[d]===c[h];)a++,d--,h--;return a}function q(s,c,a){if(a.has(s))return a.get(s);let d={signature:fe(s,c),path:ge(s,c),textHint:de(s,c)};return a.set(s,d),d}function ee(s,c,a,d){if(d.has(s))return d.get(s);let h=new Map,w=s.querySelectorAll("*"),E=0;for(let S of w){let H=q(S,c,a);H.domIndex=E++,h.has(H.signature)||h.set(H.signature,[]),h.get(H.signature).push(S)}return d.set(s,h),h}function Me(s,c,a){a.delete(s),c.delete(s);let d=s.querySelectorAll("*");for(let h of d)c.delete(h)}function U(s,c,a,d,h){let w=q(s,a,d),E=q(c,a,d),S=a.weights,H={},T=0;if(w.signature!==E.signature)return{score:0,breakdown:{rejected:"signature mismatch"}};T+=S.signature,H.signature=S.signature;let k=be(w.path,E.path)*S.pathSegment;T+=k,H.path=k;let v=!0;if(w.textHint&&E.textHint?w.textHint===E.textHint?(T+=S.textMatch,H.text=S.textMatch):(T-=S.textMismatch,H.text=-S.textMismatch,v=!1):w.textHint!==E.textHint&&(T-=S.textMismatch,H.text=-S.textMismatch,v=!1),h.candidateCount===1&&v&&(T+=S.uniqueCandidate,H.unique=S.uniqueCandidate),typeof w.domIndex=="number"&&typeof E.domIndex=="number"){let I=Math.abs(w.domIndex-E.domIndex),L=Math.min(I*S.positionPenalty,20);T-=L,H.drift=-L}return{score:T,breakdown:H}}function Q(s,c,a,d,h){if(a.excludeIds&&s.id)return null;let w=ee(c,a,d,h),E=q(s,a,d);if(typeof E.domIndex!="number"){let v=0,I=s.previousElementSibling;for(;I;)v++,I=I.previousElementSibling;E.domIndex=v}let S=w.get(E.signature)||[],H=a.excludeIds?S.filter(v=>!v.id):S;if(H.length===0)return null;let T=null,O=0,k=null;for(let v of H){let{score:I,breakdown:L}=U(s,v,a,d,{candidateCount:H.length});I>O&&(O=I,T=v,k=L)}return O<a.minConfidence?null:{element:T,confidence:O,breakdown:k}}function ve(s,c,a,d){let h=[],w=a.weights.signature+a.weights.slotMatch,E={slot:w};function S(k){if(k.children)return k.children;let v=k.childNodes;if(!v)return[];let I=[];for(let L=0;L<v.length;L++)v[L].nodeType===1&&I.push(v[L]);return I}function H(k,v){let I=S(k),L=S(v);if(I.length===L.length)for(let C=0;C<I.length;C++){let u=I[C],M=L[C];if(a.excludeIds&&(u.id||M.id)||u.tagName!==M.tagName)continue;let p=q(u,a,d).signature,A=q(M,a,d).signature;p!==A&&h.push({newEl:u,oldEl:M,score:w,breakdown:E}),H(u,M)}}function T(k,v){for(;;){if(k.tagName===v.tagName)return[k,v];let I=S(k);if(!k.tagName&&I.length===1){k=I[0];continue}let L=S(v);if(L.length===1&&L[0].tagName===k.tagName){v=L[0];continue}return null}}let O=T(s,c);return O&&H(O[0],O[1]),h}function X(s,c,a,d,h){let w=c.querySelectorAll("*"),E=ee(s,a,d,h),S=0;for(let k of w){let v=q(k,a,d);v.domIndex=S++}let H=[];for(let k of w){if(a.excludeIds&&k.id)continue;let v=q(k,a,d),I=E.get(v.signature)||[],L=a.excludeIds?I.filter(C=>!C.id):I;for(let C of L){let{score:u,breakdown:M}=U(k,C,a,d,{candidateCount:L.length});u>=a.minConfidence&&H.push({newEl:k,oldEl:C,score:u,breakdown:M})}}if(a.weights.slotMatch>0){let k=ve(c,s,a,d);for(let v of k)H.push(v)}H.sort((k,v)=>v.score-k.score);let T=new Map,O=new Set;for(let{newEl:k,oldEl:v}of H)T.has(k)||O.has(v)||(T.set(k,v),O.add(v));return T}function Z(s,c,a,d){let h=q(s,a,d),w=q(c,a,d),{score:E,breakdown:S}=U(s,c,a,d,{candidateCount:1});return{matches:E>=a.minConfidence,score:E,breakdown:S,newMeta:{signature:h.signature,path:h.path,textHint:h.textHint},oldMeta:{signature:w.signature,path:w.path,textHint:w.textHint}}}function te(s={}){let c={...J,...s,weights:{...J.weights,...s.weights}},a=new WeakMap,d=new WeakMap;return{findMatch:(h,w)=>Q(h,w,c,a,d),computeMatches:(h,w)=>X(h,w,c,a,d),explain:(h,w)=>Z(h,w,c,a),invalidate:h=>Me(h,a,d),session:()=>{let h=new WeakMap,w=new WeakMap;return{findMatch:(E,S)=>Q(E,S,c,h,w),computeMatches:(E,S)=>X(E,S,c,h,w),explain:(E,S)=>Z(E,S,c,h)}},getConfig:()=>({...c})}}var Ae=te(),W=(function(){"use strict";let s=()=>{};function c(u){if(!(u instanceof Element))return!1;if(u.hasAttribute("save-ignore"))return!0;if(u.tagName==="LINK"||u.tagName==="SCRIPT"){let M=u.getAttribute("src")||u.getAttribute("href")||"";if(M.startsWith("chrome-extension://")||M.startsWith("moz-extension://")||M.startsWith("safari-web-extension://"))return!0}return!1}function a(u,M){if(M!=="smart")return u.outerHTML;let p=u.getAttribute("src"),A=u.getAttribute("type")||"text/javascript";if(p)try{let b=new URL(p,window.location.href);return`ext:${A}:${b.origin}${b.pathname}${b.search}`}catch{return`ext:${A}:${p}`}else{let b=u.textContent.trim(),g=5381;for(let r=0;r<b.length;r++)g=(g<<5)+g^b.charCodeAt(r);return`inline:${A}:${Math.abs(g).toString(36)}`}}let d={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:s,afterNodeAdded:s,beforeNodeMorphed:s,afterNodeMorphed:s,beforeNodeRemoved:s,afterNodeRemoved:s,beforeAttributeUpdated:s},head:{style:"merge",shouldPreserve:u=>u.getAttribute("im-preserve")==="true",shouldReAppend:u=>u.getAttribute("im-re-append")==="true",shouldRemove:s,afterHeadMorphed:s},scripts:{handle:!1,matchMode:"outerHTML",shouldPreserve:u=>u.getAttribute("im-preserve")==="true",shouldReAppend:u=>u.getAttribute("im-re-append")==="true",shouldRemove:s,afterScriptsHandled:s},restoreFocus:!0},h={computeMatches(u,M){let{computeMatches:p}=Ae.session();return p(u,M)}};function w(u,M,p={}){u=L(u);let A=C(M),b=I(u,A,p),g=b.scripts.matchMode,r=new Set(Array.from(u.querySelectorAll("script")).map(n=>a(n,g))),l=S(b,()=>O(b,u,A,n=>n.morphStyle==="innerHTML"?(H(n,u,A),Array.from(u.childNodes)):E(n,u,A)));b.pantry.remove();let e=v(u,r,b);return e.length>0?l instanceof Promise?l.then(n=>Promise.all(e).then(()=>n)):Promise.all(e).then(()=>l):l}function E(u,M,p){let A=C(M);return H(u,A,p,M,M.nextSibling),Array.from(A.childNodes)}function S(u,M){if(!u.config.restoreFocus)return M();let p=document.activeElement;if(!(p instanceof HTMLInputElement||p instanceof HTMLTextAreaElement))return M();let{id:A,selectionStart:b,selectionEnd:g}=p,r=M();return A&&A!==document.activeElement?.getAttribute("id")&&(p=u.target.querySelector(`[id="${A}"]`),p?.focus()),p&&!p.selectionEnd&&g!=null&&p.setSelectionRange(b,g),r}let H=(function(){function u(e,n,i,t=null,o=null){n instanceof HTMLTemplateElement&&i instanceof HTMLTemplateElement&&(n=n.content,i=i.content),t||=n.firstChild;for(let f of i.childNodes){if(c(f))continue;if(t&&t!=o){let y=p(e,f,t,o);if(y){y!==t&&b(e,t,y),T(y,f,e),t=y.nextSibling;continue}}if(f instanceof Element){let y=f.getAttribute("id");if(e.persistentIds.has(y)){let N=g(n,y,t,e);T(N,f,e),t=N.nextSibling;continue}if(!e.idMap.has(f)){let N=e.hyperMatches.get(f);if(N&&!e.idMap.has(N)){l(n,N,t),T(N,f,e),t=N.nextSibling;continue}}}let m=M(n,f,t,e);m&&(t=m.nextSibling)}for(;t&&t!=o;){let f=t;t=t.nextSibling,c(f)||A(e,f)}}function M(e,n,i,t){if(t.callbacks.beforeNodeAdded(n)===!1)return null;if(t.idMap.has(n)){let o=document.createElement(n.tagName);return e.insertBefore(o,i),T(o,n,t),t.callbacks.afterNodeAdded(o),o}else{let o=document.importNode(n,!0);return e.insertBefore(o,i),t.callbacks.afterNodeAdded(o),o}}let p=(function(){function e(t,o,f,m){let y=o instanceof Element&&!t.idMap.has(o)?t.hyperMatches.get(o):null,N=null,$=o.nextSibling,D=0,x=f;for(;x&&x!=m;){if(i(x,o)){if(n(t,x,o)||x===y&&!t.idMap.has(x))return x;if(N===null){let V=x instanceof Element&&t.hyperMatchedOldElements.has(x);!t.idMap.has(x)&&!V&&(N=x)}}if(N===null&&$&&i(x,$)&&(D++,$=$.nextSibling,D>=2&&(N=void 0)),t.activeElementAndParents.includes(x))break;x=x.nextSibling}return N||null}function n(t,o,f){let m=t.idMap.get(o),y=t.idMap.get(f);if(!y||!m)return!1;for(let N of m)if(y.has(N))return!0;return!1}function i(t,o){let f=t,m=o;return f.nodeType===m.nodeType&&f.tagName===m.tagName&&(!f.getAttribute?.("id")||f.getAttribute?.("id")===m.getAttribute?.("id"))}return e})();function A(e,n){let i=n instanceof Element&&e.hyperMatchedOldElements.has(n)&&!e.idMap.has(n);if(e.idMap.has(n)||i)l(e.pantry,n,null);else{if(e.callbacks.beforeNodeRemoved(n)===!1)return;n.parentNode?.removeChild(n),e.callbacks.afterNodeRemoved(n)}}function b(e,n,i){let t=n;for(;t&&t!==i;){let o=t;t=t.nextSibling,c(o)||A(e,o)}return t}function g(e,n,i,t){let o=t.target.getAttribute?.("id")===n&&t.target||t.target.querySelector(`[id="${n}"]`)||t.pantry.querySelector(`[id="${n}"]`);return r(o,t),l(e,o,i),o}function r(e,n){let i=e.getAttribute("id");for(;e=e.parentNode;){let t=n.idMap.get(e);t&&(t.delete(i),t.size||n.idMap.delete(e))}}function l(e,n,i){if(e.moveBefore)try{e.moveBefore(n,i)}catch{e.insertBefore(n,i)}else e.insertBefore(n,i)}return u})(),T=(function(){function u(r,l,e){return e.ignoreActive&&r===document.activeElement?null:(e.callbacks.beforeNodeMorphed(r,l)===!1||(r instanceof HTMLHeadElement&&e.head.ignore||(r instanceof HTMLHeadElement&&e.head.style!=="morph"?k(r,l,e):(M(r,l,e),g(r,e)||H(e,r,l))),e.callbacks.afterNodeMorphed(r,l)),r)}function M(r,l,e){let n=l.nodeType;if(n===1){let i=r,t=l,o=i.attributes,f=t.attributes;for(let m of f)b(m.name,i,"update",e)||i.getAttribute(m.name)!==m.value&&i.setAttribute(m.name,m.value);for(let m=o.length-1;0<=m;m--){let y=o[m];if(y&&!t.hasAttribute(y.name)){if(b(y.name,i,"remove",e))continue;i.removeAttribute(y.name)}}g(i,e)||p(i,t,e)}(n===8||n===3)&&r.nodeValue!==l.nodeValue&&(r.nodeValue=l.nodeValue)}function p(r,l,e){if(r instanceof HTMLInputElement&&l instanceof HTMLInputElement&&l.type!=="file"){let n=l.value,i=r.value;A(r,l,"checked",e),A(r,l,"disabled",e),l.hasAttribute("value")?i!==n&&(b("value",r,"update",e)||(r.setAttribute("value",n),r.value=n)):b("value",r,"remove",e)||(r.value="",r.removeAttribute("value"))}else if(r instanceof HTMLOptionElement&&l instanceof HTMLOptionElement)A(r,l,"selected",e);else if(r instanceof HTMLTextAreaElement&&l instanceof HTMLTextAreaElement){let n=l.value,i=r.value;if(b("value",r,"update",e))return;n!==i&&(r.value=n),r.firstChild&&r.firstChild.nodeValue!==n&&(r.firstChild.nodeValue=n)}}function A(r,l,e,n){let i=l[e],t=r[e];if(i!==t){let o=b(e,r,"update",n);o||(r[e]=l[e]),i?o||r.setAttribute(e,""):b(e,r,"remove",n)||r.removeAttribute(e)}}function b(r,l,e,n){return r==="value"&&n.ignoreActiveValue&&l===document.activeElement?!0:n.callbacks.beforeAttributeUpdated(r,l,e)===!1}function g(r,l){return!!l.ignoreActiveValue&&r===document.activeElement&&r!==document.body}return u})();function O(u,M,p,A){if(u.head.block){let b=M.querySelector("head"),g=p.querySelector("head");if(b&&g){let r=k(b,g,u);return Promise.all(r).then(()=>{let l=Object.assign(u,{head:{block:!1,ignore:!0}});return A(l)})}}return A(u)}function k(u,M,p){let A=[],b=[],g=[],r=[],l=p.scripts.matchMode,e=t=>{if(t.tagName==="SCRIPT")return a(t,l);if(t.tagName==="LINK"&&l==="smart"){let o=t.getAttribute("href");if(o)try{let f=new URL(o,window.location.href);return`link:${t.getAttribute("rel")||""}:${f.origin}${f.pathname}${f.search}`}catch{}}return t.outerHTML},n=new Map;for(let t of M.children)c(t)||n.set(e(t),t);for(let t of u.children){let o=e(t),f=n.has(o),m=p.head.shouldReAppend(t),y=p.head.shouldPreserve(t);f||y?m?b.push(t):(n.delete(o),g.push(t)):p.head.style==="append"?m&&(b.push(t),r.push(t)):p.head.shouldRemove(t)!==!1&&!c(t)&&b.push(t)}r.push(...n.values());let i=[];for(let t of r){let o=document.createRange().createContextualFragment(t.outerHTML).firstChild;if(p.callbacks.beforeNodeAdded(o)!==!1){if("href"in o&&o.href||"src"in o&&o.src){let f,m=new Promise(function(y){f=y});o.addEventListener("load",function(){f()}),i.push(m)}u.appendChild(o),p.callbacks.afterNodeAdded(o),A.push(o)}}for(let t of b)p.callbacks.beforeNodeRemoved(t)!==!1&&(u.removeChild(t),p.callbacks.afterNodeRemoved(t));return p.head.afterHeadMorphed(u,{added:A,kept:g,removed:b}),i}function v(u,M,p){if(!p.scripts.handle)return[];let A=[],b=[],g=[],r=[],l=p.scripts.matchMode,e=Array.from(u.querySelectorAll("script"));for(let i of e){let t=a(i,l),o=M.has(t),f=p.scripts.shouldPreserve(i),m=p.scripts.shouldReAppend(i);o||f?m?(b.push(i),r.push(i)):g.push(i):r.push(i)}for(let i of M){let t=e.some(o=>o.outerHTML===i)}let n=[];for(let i of r){if(p.callbacks.beforeNodeAdded(i)===!1)continue;let t=document.createRange().createContextualFragment(i.outerHTML).firstChild;if(t.src){let o,f=new Promise(function(m){o=m});t.addEventListener("load",function(){o()}),t.addEventListener("error",function(){o()}),n.push(f)}i.replaceWith(t),p.callbacks.afterNodeAdded(t),A.push(t)}return p.scripts.afterScriptsHandled(u,{added:A,kept:g,removed:b}),n}let I=(function(){function u(e,n,i){let{persistentIds:t,idMap:o}=r(e,n),f=h.computeMatches(e,n);if(typeof i.key=="function"){let $=new Map,D=new Set,x=R=>{let B=i.key(R);B!=null&&($.has(B)?D.add(B):$.set(B,R))};e instanceof Element&&x(e);for(let R of e.querySelectorAll("*"))x(R);for(let R of D)$.delete(R);let V=new Map;for(let[R,B]of f)V.set(B,R);let P=n.__hyperMorphRoot||n,F=new Map,G=new Set,Y=R=>{let B=i.key(R);B!=null&&(F.has(B)?G.add(B):F.set(B,R))};P instanceof Element&&Y(P);for(let R of P.querySelectorAll("*"))Y(R);for(let R of G)F.delete(R);for(let[R,B]of F){let j=$.get(R);if(!j||j.tagName!==B.tagName)continue;let K=V.get(j);K&&K!==B&&f.delete(K);let _=f.get(B);_&&_!==j&&V.delete(_),f.set(B,j),V.set(j,B)}}let m=new Set;for(let $ of f.values())m.add($);let y=M(i),N=y.morphStyle||"outerHTML";if(!["innerHTML","outerHTML"].includes(N))throw`Do not understand how to morph style ${N}`;return{target:e,newContent:n,config:y,morphStyle:N,ignoreActive:y.ignoreActive,ignoreActiveValue:y.ignoreActiveValue,restoreFocus:y.restoreFocus,idMap:o,persistentIds:t,hyperMatches:f,hyperMatchedOldElements:m,pantry:p(),activeElementAndParents:A(e),callbacks:y.callbacks,head:y.head,scripts:y.scripts}}function M(e){let n=Object.assign({},d);return Object.assign(n,e),n.callbacks=Object.assign({},d.callbacks,e.callbacks),n.head=Object.assign({},d.head,e.head),n.scripts=Object.assign({},d.scripts,e.scripts),n}function p(){let e=document.createElement("div");return e.hidden=!0,document.body.insertAdjacentElement("afterend",e),e}function A(e){let n=[],i=document.activeElement;if(i?.tagName!=="BODY"&&e.contains(i))for(;i&&(n.push(i),i!==e);)i=i.parentElement;return n}function b(e){let n=Array.from(e.querySelectorAll("[id]"));return e.getAttribute?.("id")&&n.push(e),n}function g(e,n,i,t){for(let o of t){let f=o.getAttribute("id");if(n.has(f)){let m=o;for(;m;){let y=e.get(m);if(y==null&&(y=new Set,e.set(m,y)),y.add(f),m===i)break;m=m.parentElement}}}}function r(e,n){let i=b(e),t=b(n),o=l(i,t),f=new Map;g(f,o,e,i);let m=n.__hyperMorphRoot||n;return g(f,o,m,t),{persistentIds:o,idMap:f}}function l(e,n){let i=new Set,t=new Map;for(let{id:f,tagName:m}of e)t.has(f)?i.add(f):t.set(f,m);let o=new Set;for(let{id:f,tagName:m}of n)o.has(f)?i.add(f):t.get(f)===m&&o.add(f);for(let f of i)o.delete(f);return o}return u})(),{normalizeElement:L,normalizeParent:C}=(function(){let u=new WeakSet;function M(g){return g instanceof Document?g.documentElement:g}function p(g){if(g==null)return document.createElement("div");if(typeof g=="string")return p(b(g));if(u.has(g))return g;if(g instanceof Node){if(g.parentNode)return new A(g);{let r=document.createElement("div");return r.append(g),r}}else{let r=document.createElement("div");for(let l of[...g])r.append(l);return r}}class A{constructor(r){this.originalNode=r,this.realParentNode=r.parentNode,this.previousSibling=r.previousSibling,this.nextSibling=r.nextSibling}get childNodes(){let r=[],l=this.previousSibling?this.previousSibling.nextSibling:this.realParentNode.firstChild;for(;l&&l!=this.nextSibling;)r.push(l),l=l.nextSibling;return r}querySelectorAll(r){return this.childNodes.reduce((l,e)=>{if(e instanceof Element){e.matches(r)&&l.push(e);let n=e.querySelectorAll(r);for(let i=0;i<n.length;i++)l.push(n[i])}return l},[])}insertBefore(r,l){return this.realParentNode.insertBefore(r,l)}moveBefore(r,l){return this.realParentNode.moveBefore(r,l)}get __hyperMorphRoot(){return this.originalNode}}function b(g){let r=new DOMParser,l=g.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,"");if(l.match(/<\/html>/)||l.match(/<\/head>/)||l.match(/<\/body>/)){let e=r.parseFromString(g,"text/html");if(l.match(/<\/html>/))return u.add(e),e;{let n=e.firstChild;return n&&u.add(n),n}}else{let n=r.parseFromString("<body><template>"+g+"</template></body>","text/html").body.querySelector("template").content;return u.add(n),n}}return{normalizeElement:M,normalizeParent:p}})();return{morph:w,defaults:d}})();var ye=W.morph,Se=W.defaults,ke=W;return oe(we);})();
|
|
2
2
|
|
|
3
3
|
// Convenience morph wrapper with data-id support
|
|
4
4
|
var morph = function(oldEl, newEl, options = {}) {
|
|
5
5
|
return HyperMorph.morph(oldEl, newEl, {
|
|
6
|
-
key: (el) => el.getAttribute('data-id') || el.id,
|
|
6
|
+
key: (el) => (el.getAttribute && el.getAttribute('data-id')) || el.id || null,
|
|
7
7
|
...options
|
|
8
8
|
});
|
|
9
9
|
};
|