-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmachine.min.js
More file actions
1 lines (1 loc) · 2.4 KB
/
Copy pathmachine.min.js
File metadata and controls
1 lines (1 loc) · 2.4 KB
1
var $=(()=>{const e=new WeakMap,t=Array.from,n=Promise.resolve.bind(Promise),s=(e,t)=>e.constructor===t||t.prototype.isPrototypeOf(e),o=(t,n,s,o,i=e.get(t)??{})=>{r(t,n,o.name),t.addEventListener(n,(i[n]??={})[o.name]=o,...[{"*":{passive:!s},"#":{capture:!s}}[s]]??[]),e.set(t,i)},r=(n,s,o,r=e.get(n))=>{r&&s in r&&o in r[s]&&(n.removeEventListener(s,r[s][o]),delete r[s][o]&&(t(r[s]).length||delete r[s])&&(t(r).length||e.delete(n)))};return Object.assign(((e,t=document)=>e?t.querySelector(e):t),{all:(e,n=document)=>e?t(n.querySelectorAll(e)):[n],Machine:class{constructor(t){const n=Object.seal(t);e.set(this,{es:{},state:Object.seal(t)});for(const e in n)Object.defineProperty(this,e,{get:()=>n[e],set:t=>n[e]=t});return Object.seal(this)}state(){return e.get(this).state}on(t,n){return(e.get(this).es[t]??=new Map).set(n.name,n),this}stop(t,n=t){const{es:s}=e.get(this);return s[t]?.delete(n)&&(s[t].size||delete s[t]),this}emit(t,...n){const s={};return e.get(this).es[t]?.forEach((e=>s[e.name]=e.apply(this,n))),s}emitAsync(t,...s){let o=n({});return e.get(this).es[t]?.forEach((e=>o=o.then((t=>n(e.apply(this,s)).then((n=>({...t,[e.name]:n}))))))),o}},pipe:(i={},(e,...t)=>i[e]=(i[e]??n()).then((e=>Promise.all(t.map((t=>s(t,Array)&&Promise.race(t.map((t=>t(e))))||s(t,Function)&&t(e))))))),targets(e,t=window){for(const n in e)if(s(e[n],Function))s(t,$.Machine)?n.split(" ").forEach((s=>t.on(s,e[n]))):s(t,EventTarget)&&n.split(" ").forEach((s=>o(t,...s.match(/([^*#]*)(\*|#)?/).slice(1),e[n].bind(t))));else if(s(e[n],String))s(t,$.Machine)?n.split(" ").forEach((s=>t.stop(s,e[n]))):s(t,EventTarget)&&n.split(" ").forEach((s=>r(t,s,"bound "+e[n])));else if(n in t)$.targets(e[n],t[n]);else for(const s in t)s.match(new RegExp(`^${n}$`))&&$.targets(e[n],t[s])},queries(e,t){for(const n in e){const i=""===n?[t]:$.all(n,t);if(i.length)for(const t in e[n])s(e[n][t],Function)?t.split(" ").forEach((s=>i.forEach((r=>o(r,s,!1,e[n][t].bind(r)))))):s(e[n][t],String)&&t.split(" ").forEach((s=>i.forEach((o=>r(o,s,"bound "+e[n][t])))))}},load:(e,n="body",s)=>$.all(n,s).map((n=>t($("template#"+e).content.cloneNode(!0).children).map((e=>n.appendChild(e))))),loadWc(e,{constructor:t,options:n,...s},o=[]){class r extends HTMLElement{static get observedAttributes(){return o}constructor(...s){super(),this.attachShadow(n??{mode:"open"}).appendChild($("#"+e).content.cloneNode(!0)),t?.apply(this,s)}}Object.assign(r.prototype,s),customElements.define(e,r)}})})()