diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..a7d7aa43 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +src/third-party +examples/static/js/ehtml/third-party \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 190257cf..b0a65eeb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ -# Release 1.0.196 +# Release 2.0.0 -7ba22df update version in package.json to 1.0.196 (guseyn, Wed Dec 11 13:39:46 2024 +0400) -6afd2ea add some state around dynamic attributes (guseyn, Wed Dec 11 13:39:09 2024 +0400) -caf9589 fix badge (guseyn, Tue Dec 10 21:47:54 2024 +0400) +0808838 update version in package.json to 2.0.0 (guseyn, Wed Apr 23 22:39:56 2025 +0400) +18a3ba0 finish no build integration (guseyn, Wed Apr 23 22:39:51 2025 +0400) +8cb21d3 almost everything is ok except custom elms, which is sad :( I tried, no sense to continue... will think about it (guseyn, Mon Apr 21 20:09:48 2025 +0400) +a661456 esm for showdown -> some hope -> but just does works with mutations (guseyn, Mon Apr 21 18:37:27 2025 +0400) +c063ade some more progress, but showdown does not work normally with esm, everything is fucked up (guseyn, Mon Apr 21 18:14:29 2025 +0400) +2f3e7ed progress (guseyn, Mon Apr 21 02:28:23 2025 +0400) +9880591 first steps (guseyn, Sun Apr 20 00:25:10 2025 +0400) diff --git a/README.md b/README.md index 2a24e5e1..37ca28c0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -**v1.0.196** +**v2.0.0** [![EHTML CI](https://github.com/Guseyn/EHTML/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/Guseyn/EHTML/actions/workflows/ci.yml) diff --git a/build.js b/build.js deleted file mode 100644 index 11135f45..00000000 --- a/build.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict' - -const { AsyncObject } = require('@cuties/cutie') -const { SpawnedCommand } = require('@cuties/spawn') -const { CopiedFile } = require('@cuties/fs') - -class LoggedToOutput extends AsyncObject { - constructor (log) { - super(log) - } - - asyncCall () { - return (log, callback) => { - callback(null, log) - } - } -} - -process.env.LIGHT_MODE = process.env.LIGHT_MODE || 'false' - -const minFileName = process.env.LIGHT_MODE === 'true' ? 'ehtml.light.bundle.min.js' : 'ehtml.bundle.min.js' - -console.log(minFileName, typeof process.env.LIGHT_MODE) - -class BuiltJSFiles { - constructor (jsMainFileName, jsMinBundleName) { - return new SpawnedCommand( - './node_modules/.bin/esbuild', - [ jsMainFileName, '--bundle', '--minify', `--outfile=${jsMinBundleName}`, `--define:LIGHT_VERSION=${process.env.LIGHT_MODE}` ] - ).after( - new CopiedFile(jsMinBundleName, `./examples/static/js/${jsMinBundleName}`).after( - new LoggedToOutput( - `build for ${jsMinBundleName} is successful` - ) - ) - ) - } -} - -new BuiltJSFiles( - 'src/main.js', minFileName -).call() diff --git a/ehtml.bundle.min.js b/ehtml.bundle.min.js deleted file mode 100644 index 2a25ad9c..00000000 --- a/ehtml.bundle.min.js +++ /dev/null @@ -1,810 +0,0 @@ -(()=>{var X=(e,l)=>()=>(l||e((l={exports:{}}).exports,l),l.exports);var Nr=X((p5,Qc)=>{var G3=(e,l,a)=>{let E={},b=new XMLHttpRequest;b.open(e.method,e.url,!0,e.user||null,e.password||null),b.withCredentials=e.withCredentials||!1,b.timeout=e.timeout||0,e.downloadResponseBodyAsFileWithName&&(b.responseType="blob"),e.overrideMimeType!==void 0&&b.overrideMimeType(e.overrideMimeType);let B=e.headers||{};for(let x in B)b.setRequestHeader(x,B[x]);b.onreadystatechange=function(){if(b.readyState===b.DONE){let x=b.getAllResponseHeaders().trim(),F={};if(x.split(/[\r\n]+/).forEach($=>{let W=$.split(/:\s*/),de=W.shift(),ce=W.join(": ");F[de]=ce}),E.statusCode=b.status,E.headers=F,E.body=b.response,e.downloadResponseBodyAsFileWithName)if(E.statusCode===200){let $=window.URL.createObjectURL(E.body),W=document.createElement("a");W.href=$,W.download=e.downloadResponseBodyAsFileWithName,document.body.appendChild(W),W.click(),W.remove(),a(null,E)}else b.response.text().then($=>{try{E.body=JSON.parse($)}catch{E.body=$}a(null,E)});else a(null,E)}},e.progressEvent&&b.addEventListener("progress",e.progressEvent),e.loadStartEvent&&b.addEventListener("loadstart",e.loadStartEvent),e.loadEndEvent&&b.addEventListener("loadend",e.loadEndEvent),e.uploadProgressEvent&&b.upload.addEventListener("progress",e.uploadProgressEvent),e.uploadStartEvent&&b.upload.addEventListener("loadstart",e.loadStartEvent),e.uploadEndEvent&&b.upload.addEventListener("loadend",e.loadEndEvent),b.send(l)};Qc.exports=G3});var Rr=X((_5,Xc)=>{var q3=/\${([^}]+)}/g;Xc.exports=(e,l,a)=>e?(l=l||{},e.replace(q3,(E,b)=>{let B=b.replace(/\n/g," "),F=new Function("state","thisElement",` - with (state) { - return (${B}); - } - `)(l,a);return typeof F=="object"?JSON.stringify(F):F})):null});var $r=X((g5,Zc)=>{Zc.exports=(e,l)=>{new Function("thisElement",` - (() => { - ${e} - })() - `)(l)}});var an=X((f5,jc)=>{jc.exports=e=>{let l=document.createDocumentFragment();for(;e.firstChild;){let a=e.removeChild(e.firstChild);l.appendChild(a)}return e.parentNode.replaceChild(l,e),l}});var Wr=X((h5,e0)=>{function Jc(){if(window.location.hash.length>1){let e=document.getElementById(window.location.hash.split("#")[1]);e&&e.scrollIntoView({behaviour:"smooth"})}}window.scrollToHash=Jc;e0.exports=Jc});var n0=X((E5,a0)=>{var z3=Nr(),t0=Rr(),r0=$r(),Y3=an(),H3=Wr();a0.exports=e=>{if(e.hasAttribute("data-actions-on-progress-start")&&r0(e.getAttribute("data-actions-on-progress-start"),e),!e.hasAttribute("data-src"))throw new Error('e-html must have "data-src" attribute');z3({url:encodeURI(t0(e.getAttribute("data-src"),e.__ehtmlState__,e)),method:"GET",headers:JSON.parse(t0(e.getAttribute("data-request-headers"),e.__ehtmlState__,e)||"{}")},void 0,(l,a)=>{if(l)throw l;let E=a.body;e.innerHTML=E,Y3(e),e.hasAttribute("data-actions-on-progress-end")&&r0(e.getAttribute("data-actions-on-progress-end"),e),H3()})}});var So=X((S5,i0)=>{i0.exports=(e,l,a,E)=>{let b=` - const thisElement = node - const ${l} = resObj - ${e} - `;new Function("node","resObj",b)(E,a)}});var l0=X((b5,u0)=>{var V3=Nr(),bo=Rr(),s0=$r(),To=So(),vo=an(),o0=Wr();u0.exports=e=>{let l=e.getAttribute("data-ajax-icon"),a=document.querySelector(l);a&&(a.style.display="");let E=e.getAttribute("data-socket");if(E){if(!window.__ehtmlState__.webSockets||!window.__ehtmlState__.webSockets[E])throw new Error(`socket with name "${E}" is not defined or not opened yet`);window.__ehtmlState__.webSockets[E].addEventListener("message",V=>{let $=JSON.parse(V.data);To(e.getAttribute("data-actions-on-response"),e.getAttribute("data-response-name"),$,e)}),vo(e);return}let b=e.getAttribute("data-cache-from");if(b){let F=bo(b,e.__ehtmlState__,e);if(F!=="undefined"&&F!=="null"){let V=JSON.parse(F);if(V){To(e.getAttribute("data-actions-on-response"),e.getAttribute("data-response-name"),V,e),vo(e),o0();return}}}let B=e.getAttribute("data-progress-bar"),x=document.querySelector(B);if(x&&(x.max=100,x.value=0,x.style.display="none"),e.hasAttribute("data-actions-on-progress-start")&&s0(e.getAttribute("data-actions-on-progress-start"),e),!e.hasAttribute("data-src"))throw new Error(`e-json must have "data-src" attribute if it's not connected to a socket`);V3({url:encodeURI(bo(e.getAttribute("data-src"),e.__ehtmlState__,e)),method:"GET",headers:JSON.parse(bo(e.getAttribute("data-request-headers")||"{}",e.__ehtmlState__,e)),progressEvent:F=>{if(x&&F.lengthComputable){x.style.display="";let V=parseInt(F.loaded/F.total*100);x.value=V,x.value===100&&(x.style.display="none")}}},void 0,(F,V)=>{if(F)throw F;a&&(a.style.display="none");let $=V.body,W=JSON.parse($.toString("utf-8",0,$.length));To(e.getAttribute("data-actions-on-response"),e.getAttribute("data-response-name"),{body:W,statusCode:V.statusCode,headers:V.headers},e),vo(e),e.hasAttribute("data-actions-on-progress-end")&&s0(e.getAttribute("data-actions-on-progress-end"),e),o0()})}});var Tr=X((T5,c0)=>{c0.exports=e=>typeof e=="string"?document.querySelector(e):e});var p0=X((v5,m0)=>{var $3=Tr();function d0(e,l){$3(e).innerHTML+=l}window.addHTMLInto=d0;m0.exports=d0});var Fa=X((C5,_0)=>{_0.exports=e=>typeof e=="string"?document.querySelectorAll(e):[e]});var h0=X((y5,f0)=>{var W3=Fa();function g0(...e){e.forEach(l=>{if(l){let a=W3(l);for(let E=0;E{var K3=Fa();function E0(...e){e.forEach(l=>{if(l){let a=K3(l);for(let E=0;E{var Q3=Tr(),X3=Nr();function T0(e,l,a){X3({url:encodeURI(l),method:"GET",headers:a||{}},null,(E,b)=>{if(E)throw E;let B=b.body;Q3(e).innerHTML+=B})}window.loadAndAddHTMLInto=T0;v0.exports=T0});var N0=X((R5,A0)=>{var Z3=Tr(),j3=Nr();function y0(e,l,a){j3({url:encodeURI(l),method:"GET",headers:a||{}},null,(E,b)=>{if(E)throw E;let B=b.body;Z3(e).textContent=B})}window.loadTextInto=y0;A0.exports=y0});var D0=X((O5,O0)=>{function R0(){window.location.reload()}window.reload=R0;O0.exports=R0});var x0=X((D5,I0)=>{var J3=Fa();function w0(...e){e.forEach(l=>{if(l){let a=J3(l);for(let E=0;E{var e4=Tr();function M0(e,l){e4(e).textContent+=l}window.addTextInto=M0;L0.exports=M0});var F0=X((I5,B0)=>{var t4=Fa();function P0(...e){e.forEach(l=>{if(l){let a=t4(l);for(let E=0;E{var r4=Tr();function U0(e,l){r4(e).innerHTML=l}window.insertHTMLInto=U0;G0.exports=U0});var H0=X((M5,Y0)=>{var a4=Tr(),n4=Nr();function z0(e,l,a){n4({url:encodeURI(l),method:"GET",headers:a||{}},null,(E,b)=>{if(E)throw E;let B=b.body;a4(e).textContent+=B})}window.loadAndAddTxtInto=z0;Y0.exports=z0});var kn=X((L5,V0)=>{V0.exports=e=>e.nodeName.toLowerCase()==="template"});var Pn=X((k5,$0)=>{var i4=kn();$0.exports=(e,l)=>{if(i4(e)){let a=e.getAttribute("is");return a?a===l:!1}return!1}});var Co=X((P5,W0)=>{var s4=/\${([^}]+)}/g;W0.exports=(e,l)=>e?e.replace(s4,(a,E)=>{let b=E.replace(/\n/g," "),x=new Function("thisElement",`return (${b});`)(l);return typeof x=="object"?JSON.stringify(x):x}):null});var yo=X((B5,Q0)=>{var o4=["data-actions-on-response","data-list-to-iterate","data-item-name","data-bound-to","data-cache-from","data-src","data-request-headers","data-request-url","data-socket"],K0=["audio","embed","iframe","img","input","script","source","track","video","midi-player"],u4=Co(),l4=Rr();Q0.exports=(e,l)=>{if(e.attributes){let a=Array.from(e.attributes);for(let E=0;E=0||b.name==="data-src"&&K0.indexOf(e.tagName.toLowerCase())===-1,x=/\$\{([^${}]+)\}/gm.test(b.value),F=!B&&x;if(B&&x&&(e.__ehtmlState__=l),!!F){if(e.setAttribute(b.name,l?l4(b.value,l,e):u4(b.value,e)),b.name==="data-text"){let V=document.createTextNode(b.value);e.childNodes.length===0?e.appendChild(V):e.insertBefore(V,e.childNodes[0]),e.removeAttribute("data-text");continue}if(b.name==="data-value"){e.value=b.value,e.removeAttribute("data-value");continue}if(b.name==="data-src"&&K0.indexOf(e.tagName.toLowerCase())!==-1){e.setAttribute("src",e.getAttribute("data-src")),e.removeAttribute("data-src");continue}if(b.name==="data-inner-html"){e.innerHTML=b.value,e.removeAttribute("data-inner-html");continue}if(b.name==="disabled"&&b.value==="false"){e.removeAttribute("disabled");continue}}}}}});var Z0=X((F5,X0)=>{var c4=Pn();X0.exports=(e,l)=>{if(c4(e,"e-reusable"))if(e.hasAttribute("data-prepend-to")){let a=document.querySelector(e.getAttribute("data-prepend-to"));if(!a)throw new Error('element is not found by the selector in the attribute "data-prepend-to"');a.prepend(l)}else if(e.hasAttribute("data-append-to")){let a=document.querySelector(e.getAttribute("data-append-to"));if(!a)throw new Error('element is not found by the selector in the attribute "data-append-to"');a.append(l)}else if(e.hasAttribute("data-insert-into")){let a=document.querySelector(e.getAttribute("data-insert-into"));if(!a)throw new Error('element is not found by the selector in the attribute "data-insert-into"');a.innerHTML="",a.append(l)}else e.parentNode.insertBefore(l,e);else e.parentNode.replaceChild(l,e)}});var Ri=X((U5,rd)=>{var d4=Tr(),j0=kn(),Ni=Pn(),m4=yo(),J0=Rr(),p4=Z0();function ed(e,l){let a=d4(e);if(a==null)throw new Error("Mapping element is not found");if(!j0(a))throw new Error("Mapping element must be