campfire.js
Version:
a cozy web framework
2 lines (1 loc) • 8.81 kB
JavaScript
var b=Object.defineProperty,G=Object.defineProperties,J=Object.getOwnPropertyDescriptor,Q=Object.getOwnPropertyDescriptors,U=Object.getOwnPropertyNames,k=Object.getOwnPropertySymbols;var N=Object.prototype.hasOwnProperty,W=Object.prototype.propertyIsEnumerable;var C=(t,e,r)=>e in t?b(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,E=(t,e)=>{for(var r in e||(e={}))N.call(e,r)&&C(t,r,e[r]);if(k)for(var r of k(e))W.call(e,r)&&C(t,r,e[r]);return t},q=(t,e)=>G(t,Q(e));var X=(t,e)=>{for(var r in e)b(t,r,{get:e[r],enumerable:!0})},Y=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of U(e))!N.call(t,n)&&n!==r&&b(t,n,{get:()=>e[n],enumerable:!(s=J(e,n))||s.enumerable});return t};var ee=t=>Y(b({},"__esModule",{value:!0}),t);var ae={};X(ae,{ListStore:()=>m,MapStore:()=>d,Store:()=>o,default:()=>oe,empty:()=>M,escape:()=>p,extend:()=>h,html:()=>L,insert:()=>x,mustache:()=>v,nu:()=>O,onload:()=>S,r:()=>D,rm:()=>R,select:()=>w,seq:()=>j,store:()=>A,template:()=>H,unescape:()=>_});module.exports=ee(ae);var x=(t,e)=>{if(Object.keys(e).length!==1)throw new Error("Too many or too few positions specified.");let s="beforeend",n;return"after"in e?(s="afterend",n=e.after):"before"in e?(s="beforebegin",n=e.before):("into"in e&&e.at==="start"&&(s="afterbegin"),n=e.into),n.insertAdjacentElement(s,t),t},S=t=>globalThis.addEventListener("DOMContentLoaded",t),w=({selector:t,all:e,from:r})=>(r!=null||(r=document),e?Array.from(r.querySelectorAll(t)):[r.querySelector(t)]),R=t=>t.remove(),M=t=>{t.innerHTML=""};var p=t=>t?t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"):"",_=t=>{if(!t)return"";let e=/&(?:amp|lt|gt|quot|#(0+)?39);/g,r={"&":"&","<":"<",">":">",""":'"',"'":"'"};return t.replace(e,s=>r[s]||"'")},j=(...t)=>{let e=0,r=t[0],s=1;typeof t[1]!="undefined"&&(e=t[0],r=t[1]),t[2]&&(s=t[2]);let n=[];for(let i=e;i<r;i+=s)n.push(i);return n},$=t=>{let e=["<"];return e.push(t.tagName.toLowerCase()),t.id&&e.push(`#${t.id}`),t.className.trim()&&e.push(`.${t.className.split(" ").join(".")}`),e.push(...Array.from(t.attributes).map(r=>`${r.name}="${r.value}"`).slice(0,3).join(" ")),e.join("")},K=()=>{let t=new MutationObserver(e=>{var r,s,n;for(let i of e)for(let a of i.addedNodes){if(!(a instanceof HTMLElement))continue;let f=i.target;if(!f.hasAttribute("data-cf-deps")||f.hasAttribute("data-cf-fg-updates"))continue;let T=(s=(r=a.querySelectorAll)==null?void 0:r.call(a,"[data-cf-deps]").length)!=null?s:0;!((n=a.hasAttribute)!=null&&n.call(a,"data-cf-deps"))&&T===0||console.warn(`[Campfire] \u26A0\uFE0F A reactive node ${$(a)} was inserted into a reactive container ${$(f)} This may cause it to be wiped on re-render.`)}});document.body.hasAttribute("cf-disable-mo")||t.observe(document.body,{childList:!0,subtree:!0})};var te=t=>document.createElement(t),re=t=>{var s;let e=t?t.match(/([0-9a-zA-Z\-]*)?(#[0-9a-zA-Z\-]*)?((.[0-9a-zA-Z\-]+)*)/):void 0,r=e?(s=e.slice(1,4))==null?void 0:s.map(n=>n?n.trim():void 0):Array(3).fill(void 0);return r&&r[1]&&(r[1]=r[1].replace(/#*/g,"")),e?{tag:r[0]||void 0,id:r[1]||void 0,classes:r[2]?r[2].split(".").filter(n=>n.trim()):void 0}:{}},y=class{constructor(e,r){this.props={};r&&(this.props=r),this.info=e}done(){let{tag:e,id:r,classes:s=[]}=re(this.info);if(s!=null&&s.some(i=>i.includes("#")))throw new Error("Error: Found # in a class name. Did you mean to do elt#id.classes instead of elt.classes#id?");e||(e="div");let n=te(e);return r&&(n.id=r),s.forEach(i=>n.classList.add(i)),h(n,this.props)}content(e){return this.props.contents=e,this}attr(e,r){var s;return(s=this.props).attrs||(s.attrs={}),this.props.attrs[e]=r.toString(),this}attrs(e){return this.props.attrs=e,this}raw(e){return this.props.raw=e,this}misc(e,r){var s;return(s=this.props).misc||(s.misc={}),typeof e=="object"?this.props.misc=e:this.props.misc[e]=r,this}style(e,r){var s;return(s=this.props).style||(s.style={}),this.props.style[e]=r,this}styles(e){return this.props.style=e,this}on(e,r){var s;return(s=this.props).on||(s.on={}),this.props.on[e]=r,this}gimme(e){var r;return(r=this.props).gimme||(r.gimme=[]),Array.isArray(e)?this.props.gimme=e:this.props.gimme.push(e),this}deps(e){return this.props.deps=e,this}};"MutationObserver"in globalThis?K():console.warn("MutationObserver was not found in your browser. Campfire will","not be able to warn you of destructive mutations!");var F=t=>{let e={};for(let r in t){let s=t[r].value;s instanceof Map?e[r]=Object.fromEntries(s.entries()):e[r]=s.valueOf()}return e},se=t=>!(!t||typeof t!="function"),h=(t,e={})=>{let{contents:r,misc:s,style:n,on:i={},attrs:a={},raw:f,gimme:T=[],deps:g={}}=e,c="";if(se(r)){Object.entries(g).forEach(([l,V])=>{V.any(Z=>{let I=r(F(g),{event:q(E({},Z),{triggeredBy:l}),elt:t});I!==void 0&&(t.innerHTML=I)})});let u=r(F(g),{elt:t});typeof u=="undefined"?t.setAttribute("data-cf-fg-updates","true"):t.removeAttribute("data-cf-fg-updates"),c=u||""}else typeof r=="string"&&(c=r);c!=null&&c.trim()&&(t.innerHTML=f?c:p(c)),Object.values(g).map(u=>u.id).length?t.setAttribute("data-cf-reactive","true"):t.removeAttribute("data-cf-reactive"),s&&Object.assign(t,s),n&&Object.assign(t.style,n),Object.entries(i).forEach(([u,l])=>t.addEventListener(u,l)),Object.entries(a).forEach(([u,l])=>t.setAttribute(u,l));let P=[];for(let u of T){let l=t.querySelector(u);P.push(l)}return[t,...P]},O=(t,e)=>new y(t,e);var z=new Set,B=()=>"cf-"+Math.random().toString(36).slice(2,8),ne=()=>{let t=B();for(;z.has(t);)t=B();return z.add(t),t},o=class{constructor(e){this.id=ne();this._subscribers={};this._subscriberCounts={};this._dead=!1;typeof e!="undefined"&&e!==null&&(this.value=e)}on(e,r,s=!1){var n,i;return this._subscriberCounts[e]=this._subscriberCounts[e]||0,(i=(n=this._subscribers)[e])!=null||(n[e]={}),this._subscribers[e][this._subscriberCounts[e]]=r,s&&!["push","remove","mutation","setAt"].includes(e)&&r({type:"change",value:this.value}),this._subscriberCounts[e]++}any(e){this.on("append",e),this.on("change",e),this.on("clear",e),this.on("deletion",e)}unsubscribe(e,r){var s;(s=this._subscribers[e])==null||delete s[r]}update(e){this._dead||(this.value=e,this._sendEvent({type:"change",value:e}))}_sendEvent(e){if(this._dead)return;this._subscribers[e.type]=this._subscribers[e.type]||{};let r=this._subscribers[e.type];if(r)for(let s in Object.keys(r))r[s](e)}dispose(){this._dead=!0,this._subscribers={},this._subscriberCounts={}}valueOf(){return structuredClone(this.value)}};var m=class extends o{constructor(e){super(e)}clear(){this.value=[],this._sendEvent({type:"clear"})}push(e){return this.value.push(e),this._sendEvent({type:"append",value:e,idx:this.value.length-1}),this.value.length}remove(e){if(e<0||e>=this.value.length)throw new RangeError("Invalid index.");this._sendEvent({type:"deletion",idx:e,value:this.value.splice(e,1)[0]})}get(e){if(e<0||e>=this.value.length)throw new RangeError("Invalid index.");return this.value[e]}set(e,r){if(e<0||e>=this.value.length)throw new RangeError("Invalid index.");this.value[e]=r,this._sendEvent({type:"change",value:r,idx:e})}get length(){return this.value.length}};var d=class extends o{constructor(e){super(new Map);for(let[r,s]of Object.entries(e||{}))this.value.set(r,s)}set(e,r){this.value.set(e,r),this._sendEvent({key:e,value:r,type:"change"})}update(){}remove(e){this.value.delete(e),this._sendEvent({key:e,value:this.value,type:"deletion"})}clear(){this.value=new Map,this._sendEvent({type:"clear"})}transform(e,r){let s=this.value.get(e);if(!s)throw new Error(`ERROR: key ${e} does not exist in store!`);let n=r(s);this.set(e,n),this._sendEvent({type:"change",value:n,key:e})}get(e){return this.value.get(e)}has(e){return this.value.has(e)}entries(){return this.value.entries()}};function A(t){if("type"in t){if(t.type==="list")return new m(t.value);if(t.type==="map")return new d(t.value)}return new o(t.value)}var D=(t,e)=>{var r;return{raw:!0,contents:Array.isArray(t)?t.join((r=e==null?void 0:e.joiner)!=null?r:" "):t.toString()}},L=(t,...e)=>{let r=[];for(let s=0;s<t.length;s++){r.push(t[s]||"");let n=e[s];typeof n!="undefined"&&typeof n!="object"?r.push(p((n||"").toString())):r.push((n==null?void 0:n.contents)||"")}return r.join("")};var ie=(t,e={})=>{let r=new RegExp("\\\\({{\\s*"+Object.keys(e).join("|")+"\\s*}})","gi");return new RegExp(Object.keys(e).join("|"),"gi"),t.replace(new RegExp("(^|[^\\\\]){{\\s*("+Object.keys(e).join("|")+")\\s*}}","gi"),function(s,n,i){return`${n||""}${e[i]}`}).replace(r,"$1")},v=(t,e={},r=!0)=>{let s=E({},e);return r&&(s=Object.fromEntries(Object.entries(s).map(([n,i])=>[n,p(i)]))),ie(t,s)},H=(t,e=!0)=>r=>v(t,r,e);var oe={ListStore:m,MapStore:d,Store:o,store:A,nu:O,mustache:v,template:H,escape:p,unescape:_,extend:h,insert:x,empty:M,rm:R,select:w,onload:S,html:L,r:D,seq:j};