jj 0.1.1 → 2.1.0
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/LICENSE +21 -0
- package/README.md +36 -7
- package/lib/WC.d.ts +45 -0
- package/lib/WC.js +118 -0
- package/lib/WC.js.map +1 -0
- package/lib/WDF.d.ts +11 -0
- package/lib/WDF.js +31 -0
- package/lib/WDF.js.map +1 -0
- package/lib/WE.d.ts +43 -0
- package/lib/WE.js +133 -0
- package/lib/WE.js.map +1 -0
- package/lib/WHE.d.ts +21 -0
- package/lib/WHE.js +75 -0
- package/lib/WHE.js.map +1 -0
- package/lib/WN-mixin.d.ts +9 -0
- package/lib/WN-mixin.js +59 -0
- package/lib/WN-mixin.js.map +1 -0
- package/lib/WN.d.ts +34 -0
- package/lib/WN.js +145 -0
- package/lib/WN.js.map +1 -0
- package/lib/WSH.d.ts +11 -0
- package/lib/WSH.js +29 -0
- package/lib/WSH.js.map +1 -0
- package/lib/WT.d.ts +12 -0
- package/lib/WT.js +39 -0
- package/lib/WT.js.map +1 -0
- package/lib/bundle.js +706 -0
- package/lib/bundle.js.map +7 -0
- package/lib/bundle.min.js +2 -0
- package/lib/case.d.ts +3 -0
- package/lib/case.js +34 -0
- package/lib/case.js.map +1 -0
- package/lib/case.test.d.ts +1 -0
- package/lib/case.test.js +79 -0
- package/lib/case.test.js.map +1 -0
- package/lib/h.d.ts +3 -0
- package/lib/h.js +9 -0
- package/lib/h.js.map +1 -0
- package/lib/index.d.ts +11 -0
- package/lib/index.js +12 -0
- package/lib/index.js.map +1 -0
- package/lib/util.d.ts +4 -0
- package/lib/util.js +11 -0
- package/lib/util.js.map +1 -0
- package/package.json +56 -26
- package/CSS.js +0 -145
- package/Router.js +0 -89
- package/Selector.js +0 -175
- package/Tag.js +0 -827
- package/control.js +0 -74
- package/dist/jj.js +0 -1580
- package/dist/jj.js.gz +0 -0
- package/dist/jj.min.js +0 -1
- package/dist/jj.min.js.gz +0 -0
- package/dist/jj.min.js.map +0 -1
- package/events.js +0 -16
- package/index.js +0 -26
- package/observer.js +0 -27
- package/rollup.config.js +0 -25
- package/unit.js +0 -78
- package/util.js +0 -153
- package/win.js +0 -11
package/dist/jj.js.gz
DELETED
|
Binary file
|
package/dist/jj.min.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function t(t){return Array.isArray(t)}function e(t){return Array.from(t)}function r(t,e=0){return t<0?"":(t+=e,void 0===r.cache[t]&&(r.cache[t]=" ".repeat(t)),r.cache[t])}function n(t){return t<0?"":"\n"}function s(t,e){return Object.entries(t).map(([r,n])=>e(r,n,t))}function o(t){return t&&"object"==typeof t}function i(t,e=0){return"string"==typeof t&&t.length>=e}function a(t){return"number"==typeof t&&Number.isFinite(t)}function h(t){return"function"==typeof t}function u(t,e,...r){return t+r.join("")+e}function l(...t){return u('"','"',t.join("").replace('"','\\"'))}function c(t){if(i(t))return"&"+t+";";if(a(t)&&Number.isInteger(t))return`&#${t};`;throw new TypeError(`Cannot make HTML entity from ${t}`)}function d(...t){return u("[","]",...t)}function p(t){const e=Math.random().toString(36).substr(2);return i(t)?`${t}-${e}`:e}function f(e,r){const n=e.prototype;function o(t,r){if(void 0!==n[t])throw new Error(`${e.name} already has a method called ${t}`);n[t]=n[r]}s(r,(e,r)=>{t(r)?r.forEach(t=>o(t,e)):o(r,e)})}r.cache=[""," "];const m=Symbol("ran once flag");function g(t,...e){h(t)&&!t[m]&&(t.apply(void 0,e),t[m]=!0)}const w={el:(t,e)=>i(e)?document.createElementNS(e,t):document.createElement(t),frag:()=>document.createDocumentFragment(),text:(...t)=>document.createTextNode(String(t.flat().join(""))),comm:(...t)=>document.createComment(String(t.flat().join(""))),get body(){return document.body},get head(){return document.body.head}};function y(t){return o(t)&&o(t.root)}class b{constructor(t,e){i(t)?this.parse(t):(this.value=t,this.unit=e)}clone(){return new b(this.value,this.unit)}parse(t){const e=t.match(/([-+]?[0-9.]+)([%\w]*)/);if(e){const[,t,r]=e;this.value=t,this.unit=r}throw new SyntaxError(`Could not parse ${t} as a CSS Dimention`)}toString(){return`${this.value}${this.unit}`}[Symbol.toPrimitive](t){return"string"===t?this.toString():this.value}}function v(t){return t instanceof b}function E(t){return new b(t,"%")}function T(t){return new b(t,"em")}function C(t){return new b(t,"rem")}function x(t){return new b(t,"px")}function A(t){return new b(t,"vh")}function S(t){return new b(t,"vw")}function j(t,e,r,n){if(void 0===e&&void 0===r&&void 0===n&&i(t,1))return`#${t}`;throw new Error("TODO: Use case not implemented yet")}f(b,{toString:"toJSON"});class P{constructor(t=""){this.selector=t}toString(){return this.selector}css(t){return{[this.selector]:t}}clone(){return new P(this.selector)}append(...t){return t.length&&(this.selector+=t.map(t=>$(t)?t.selector:t).join("")),this}at(t){return this.append("@",t)}get _(){return this.append(" ")}attr(t,e){return void 0===e?this.append(d(t)):this.append(d(t,"=",l(e)))}attrValArrContains(t,e){return this.append(d(t,"~=",l(e)))}attrValStartsWith(t,e){return this.append(d(t,"^=",l(e)))}attrValEndsWith(t,e){return this.append(d(t,"$=",l(e)))}attrValContains(t,e){return this.append(d(t,"*=",l(e)))}class(...t){return t.forEach(t=>this.append(".",t)),this}BEM(t,e,r){return this.B(t),void 0!==e&&this.E(e),void 0!==r&&this.M(r),this}E(t){return this.append("__",t)}M(t){return this.append("--",t)}id(t){return this.append("#",t)}pClass(t){return this.append(":",t)}pEl(t){return this.append("::",t)}par(...t){return this.append("(",...t,")")}prop(t,e){return this.par(t,":",e)}nthChild(t){return this.pClass(`nth-child(${t})`)}firstChild(){return this.pClass("first-child")}rnd(t=""){return this.append(p(t))}[Symbol.toPrimitive](t){return"string"===t?this.toString():this.value}}function $(t){return t instanceof P}f(P,{class:"B",append:["add","el","tag","com","cond","star","all","sel","concat"]}),s({[Symbol.toPrimitive]:"toString",">":["gt","parentOf"],"*":["star","all"],"~":["tilde","precedes"],"+":["plus","followedBy"],",":["comma","or"],not:["not"],only:["only"],and:["and"]},(t,e)=>{e.forEach(e=>{P.prototype[e]=function(){return this.append(t)}})});const O=new Proxy((function(t){return $(t)?t:new P(t)}),{get(t,e){const r=new P;return e in r?r[e]:(r.append(e),r)}});const N={if(t,e,...r){return t?this.run(e,...r):this},forEach(t,e,...r){return t.forEach(t=>{this.run(e,t,...r)}),this},times(t,e,...r){return this.range(1,t+1,1,e,...r)},range(){const{start:t,end:e,step:r,fn:n,extraParams:s}=function(t){if(t.length<2)throw new TypeError(`Expected at least 2 arguments but got ${t}`);if(!a(t[0]))throw new TypeError(`The first argument must be a number but got ${t[0]}`);if(h(t[1])){const[e,r,...n]=t;return{start:0,end:e,step:1,fn:r,extraParams:n}}if(h(t[2])){const[e,r,n,...s]=t;return{start:e,end:r,step:1,fn:n,extraParams:s}}if(h(t[3])){const[e,r,n,s,...o]=t;return{start:e,end:r,step:n,fn:s,extraParams:o}}throw new TypeError(`Which function do you want to run? Got ${t}`)}(Array.from(arguments));if(!a(t)||!a(e)||!a(r))throw new TypeError(`Expected numbers but got: start=${t}, end=${e}, step=${r}`);if(0===r)throw new Error("The step cannot be zero");if(t<e&&r<0||t>e&&r>0)throw new Error(`This loop will never end: start=${t}, end=${e}, step=${r}`);for(let o=t;o<e;o+=r)this.run(n,o,...s);return this},run(t,...e){return t.call(this,this,...e),this}},L={on(t,e){return this.el.addEventListener(t,e),this},once(t,e){return this.el.addEventListener(t,e,{once:!0}),this},off(t,e){return this.el.removeEventListener(t,e),this}};function D(t){return t.trimLeft().startsWith("@")}function R(e){return i(e)?""===e.trim()?l(e):e:a(e)?String(e):v(e)?String(e):t(e)?e.join(" "):void 0}function M(t,e,r){const n=t<0?":":": ";return e.replace(/([A-Z])/g,t=>"-"+t.toLowerCase())+n+R(r)+";"}class _{constructor(t,e={}){this.selectorTxt=t,this.bodyObj=e}get isEmpty(){return 0===Object.keys(this.bodyObj).length}toString(t=0){if(this.isEmpty)return t>=0?r(t)+`/* ${this.selectorTxt} {} */`:"";let e=r(t)+this.selectorTxt;t>=0&&(e+=" "),e+="{"+n(t);const o=r(t,1);return e+=s(this.bodyObj,(e,r)=>o+M(t,e,r)).join(n(t)),t>=0&&(e+=n(t)+r(t)),e+="}",e}}class q{constructor(t,e){this.selectorTxt=t,this.bodyObj=e}toString(t=0){if(o(this.bodyObj))return function(t,e){const r=new _(t),n=r.bodyObj,o=[r];return s(e,(e,r)=>{const s=R(r);if(void 0!==s)n[e]=s;else if(D(e))o.push(new H(e,{[t]:r}));else{let n=e.replace(/&/g,t);n===e&&(n=t+" "+e),o.push(new q(n,r))}}),o}(this.selectorTxt,this.bodyObj).map(e=>e.toString(t)).join(n(t));const e=R(this.bodyObj);return void 0!==e?r(t)+M(t,this.selectorTxt,e):r(t)+this.selectorTxt}}class H{constructor(t,e){this.selectorTxt=t,this.ruleSet=e}toString(t=0){let e=r(t)+this.selectorTxt;if(o(this.ruleSet)){const s=t>=0?t+1:-1;t>=0&&(e+=" "),e+="{"+n(t),e+=I(this.ruleSet).map(t=>t.toString(s)).join(n(t)),e+=n(t),e+=r(t)+"}"}else e+=";";return e}}function I(t){if(!o(t)){if(!i(t))throw new TypeError(`Invalid style descriptor: ${t}`);t={[t]:null}}return s(t,(t,e)=>D(t)?new H(t,e):new q(t,e))}class F{constructor(t){this.el=t}}Object.assign(F.prototype,L);const k=new F(window);const B=new WeakMap;class W{constructor(t){if(!o(t)||!h(t.run))throw new Error(`Root must have a run method but got ${t}`);this.routes=[],this.root=t,this.isMatched=!1,B.set(t,this);const e=t=>this.runMatches(t);k.on("popstate",e).on("hashchange",e)}addRoute(t,e){if(h(this.defRouteHandler))throw new Error("Cannot add a route after the default route is set");if(!h(e))throw new TypeError(`Expected a route handler function but got ${e}`);const r={regexp:t,handler:e};return this.routes.push(r),this.isMatched||this._runRoute(void 0,r),this}addDefRoute(t){if(h(this.defRouteHandler))throw new Error("There is already a default route handler");if(!h(t))throw new TypeError(`Expected a default route handler function but got ${t}`);return this.defRouteHandler=t,this.isMatched||this._runDefRoute(),this}_runRoute(t,{regexp:e,handler:r},n=window.location.pathname){const s=function(t,e){if(i(t))return console.log("boo",t,e),t===e;if(t instanceof RegExp){return e.match(t)||!1}throw new TypeError(`Invalid route regexp: ${t}`)}(e,n);return s&&(this.isMatched=!0,this.root.run(r,t,s)),!!s}_runDefRoute(){return this.root.run(this.defRouteHandler),this}runMatches(t,e=window.location.pathname){return this.routes.some(r=>this._runRoute(t,r,e))?this:this._runDefRoute()}}function V(t){if(!o(t)||!h(t.run))throw new TypeError(`root should be a Tag instance. Got ${t}`);return B.get(t)||new W(t)}const z=Symbol("jaTag");class G{constructor(t){if(!o(t)||!G.validNodeTypes.includes(t.nodeType))throw new TypeError(`Invalid parameter to Node constructor: ${t}`);this.el=t}mount(t){return X(t).setChild(this)}addTo(t){return X(t).append(this),this}addToHead(){return this.appendTo(document.head)}addToBody(){return this.appendTo(document.body)}preTo(t){return X(t).prepend(this),this}addComment(t){return this.append(w.comm(t)),this.norm()}preComment(t){return this.prepend(w.comm(t)),this.norm()}addChildren(...t){return t.length&&this.el.append(et(...t)),this}preChildren(...t){return t.length&&this.el.prepend(et(...t)),this}rmChildren(...t){if(t.length)t.map(t=>rt(t)).forEach(t=>this.el.removeChild(t));else for(;this.el.firstChild;)this.el.removeChild(this.el.firstChild);return this}setChildren(...t){return this.empty().addChildren(...t),this}getChildren(){return e(this.el.childNodes).map(t=>X(t))}hasChildren(...t){return 0===t.length?this.el.hasChildren:t.every(t=>this.el.contains(rt(t)))}addText(...t){return t.flat().forEach(t=>this.append(w.text(t))),this.norm()}preText(...t){return t.flat().forEach(t=>this.prepend(w.text(t))),this.norm()}rmText(){return this.childNodes.filter(t=>t instanceof Text).forEach(t=>t.remove()),this}setText(...t){return this.rmText().addText(...t)}json(t){return this.setText(JSON.stringify(t,null,2))}getText(){return this.childNodes.map(t=>t instanceof Text?t.wholeText:"").join("")}hasText(){return this.childNodes.some(t=>t instanceof Text)}normText(){return this.el.normalize(),this}queryId(t){const e=this.el.getElementById(t);if(e)return X(e)}query(t){const e=this.el.querySelector(t);if(e)return X(e)}queryAll(t){const r=e(this.el.querySelectorAll(t));if(r)return r.map(t=>X(t))}toString(){return this.el.outerHTML}}f(G,{addTo:["appendTo"],addToHead:"appendToHead",addToBody:"appendToBody",addComment:"comment",preTo:["prependTo"],setChildren:["setChild"],addChildren:["append","children","child","addChild"],preChildren:["prepend","prependChildren","prependChild"],addText:["text"],normText:["norm"],rmChildren:["empty","clear","rmChild"],toString:"stringify"});class J extends G{constructor(){super(w.frag())}clone(t){return new J(this.el.cloneNode(t))}}function U(...t){const e=new J;return e.append(t),e}G.validNodeTypes=[1,9,11];class Z extends G{constructor(t){super(t instanceof Z?t.el:t)}clone(t){return new Z(this.el.cloneNode(t))}get parent(){return X(this.el.parentElement)}get ns(){return this.el.namespaceURI}get classList(){return this.el.classList}get childNodes(){return e(this.el.childNodes)}style(t){return o(t)?s(t,(t,e)=>this.el.style[t]=e):this.rmProp("style"),this}setClasses(...t){this.el.className=t.join(" ")}getClass(){return this.el.className}getClasses(){return e(this.el.className)}hasClasses(...t){return t.every(t=>this.classList.contains(t))}addClasses(...t){return this.classList.add(...t),this}rmClasses(...t){return this.classList.remove(...t),this}mvClass(t,e){return this.classList.replace(t,e),this}mvClasses(t){return s(t,(t,e)=>this.mvClass(t,e)),this}togClass(t,e){return this.classList.toggle(t,e),this}togClassObj(t){return s(t,(t,e)=>this.togClass(t,e)),this}togClasses(...t){return t.forEach(t=>this.togClass(t)),this}setAttr(t,e){return"style"===t.toLowerCase()?this.style(e):(void 0===e&&(e=""),this.el.setAttribute(t,e),this)}setAttrs(t){if(!o(t))throw new TypeError(`Expected an object but got ${t}`);return s(t,(t,e)=>this.setAttr(t,e)),this}getAttr(t){return this.el.getAttribute(t)}getAttrs(...t){return Object.fromEntries(t.map(t=>[t,this.getAttr(t)]))}hasAttrs(...t){return t.every(t=>this.this.el.hasAttribute(t))}rmAttrs(...t){return t.forEach(t=>{this.el.removeAttribute(t)}),this}togAttr(t,e){return this.el.toggleAttribute(t,e),this}setProp(t,e){return"style"===t.toLowerCase()?this.style(e):(this.el[t]=e,this)}setPropsObj(t){return s(t,(t,e)=>this.setProp(t,e)),this}getProp(t){return this.el[t]}getPropsObj(...t){return Object.fromEntries(t.map(t=>[t,this.getProp(t)]))}hasProps(...t){return t.every(t=>t in this.el)}rmProps(...t){return t.forEach(t=>{try{delete this.el[t]}catch(e){this.el[t]=void 0}}),this}togProp(t,e=!1){return 2===arguments.length?this.setProp(t,!!e):this.setProp(t,!!this.getProp(t)),this}setData(t,e){return this.el.dataset[t]=e,this}setDataObj(t){return s(t,(t,e)=>this.setData(t,e)),this}getData(t){return this.el.dataset[t]}getDataObj(...t){return Object.fromEntries(t.map(t=>[t,this.getData(t)]))}hasData(t){return t in this.el.dataset}rmData(t){return delete this.el.dataset[t]}tog(t){return 1===arguments.length?this.togProp("hidden",!t):this.togProp("hidden")}hide(){return this.setProp("hidden",!1)}show(){return this.setProp("hidden",!0)}closest(t){return this.el.closest(t)||void 0}matches(t){return this.el.matches(t)}animFrame(t,...e){const r=()=>{this.isAttached()&&this.run(t,...e),n()},n=()=>{this.animFrameRequestId=window.requestAnimationFrame(r)};return n(),this}clearAnimFrame(){return window.requestAnimationFrame(this.animFrameRequestId),this}route(t,e){return V(this).addRoute(t,e),this}defRoute(t){return V(this).addDefRoute(t),this}css(t,e,r){if(void 0===r&&(r=e,e=void 0),!(t instanceof K))throw new Error(`Expected an instance of StyleTag but got ${t}`);const n=p(e);return this.addClass(n),t.append(O().class(n).css(r)),this}aria(t,e){return this.setAttr(`aria-${t}`,e)}wrap(t){return(t=X(t)).append(this)}swap(t){return this.el.replaceWith(t.el),t}isAttached(){return document.documentElement.contains(this.el)}queryId(t){const e=this.el.querySelector("#"+t);if(e)return X(e)}toString(){return this.el.outerHTML}}Object.assign(Z.prototype,N,L),["alt","aria-role","checked","content","height","hidden","href","htmlFor","id","is","label","lang","name","placeholder","readonly","rel","required","role","selected","src","title","type","value","width"].forEach(t=>{Z.prototype[t]=function(e){return this.setAttr(t,e)}}),["attached","blur","change","click","contextmenu","dblclick","detached","error","focus","focusout","hover","keydown","keydpress","keydup","load","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","resize","scroll","select","submit","unload"].forEach(t=>{Z.prototype[t]=function(...e){return this.on(t,...e),this}}),f(Z,{addClasses:["addClass","class","classes"],class:"className",hasClasses:"hasClass",rmClasses:"rmClass",setClasses:"setClass",togClass:"toggleClass",hasAttrs:"hasAttr",rmAttrs:"rmAttr",setAttr:"attr",setAttrs:"attrs",togAttr:"toggleAttr",hasProps:"hasProp",rmProps:"rmProp",setProp:"prop",setProps:"props",tog:"toggle",swap:["swapWith","replaceWith","replace"],value:"val",htmlFor:"for"});class K{constructor(...t){this.rulesetObjArr=t}get isAttached(){return this._root&&this._root.isAttached()}get root(){return this._root||(this._root=at("style").type("text/css").rel("stylesheet").on("attached",()=>this.update())),this._root}appendToHead(){return document.head.contains(this.root.el)||this.root.appendToHead(),this}append(...t){return t.length&&(t.flat().forEach(t=>this.rulesetObjArr.push(t)),this.isAttached)?this.update():this}get disabled(){return this.root.el.disabled}disable(t=!0){return this.root.el.disabled=t,this}enable(t=!0){return this.disable(!t)}title(t){return this.root.el.title=t,this}rm(){return this.root.rm(),this._root=void 0,this}minified(t){return this.minified=t,this}toString(t=this.minified){const e=t?-1:0,r=n(e);return this.rulesetObjArr.map(t=>I(t).map(t=>t.toString(e)).join(r)).join(r)}update(){const t=this.toString();return this.root.setText(t),this}}function Q(...t){return new K(...t)}function X(t){if(t instanceof Element)return t[z]||new Z(t);if(t instanceof Z)return t;if(y(t))return X(t.root);if(Y(t))return tt(t);throw new Error(`Invalid Tag or Element instance: ${t}`)}function Y(t){return o(t)&&i(t.name)}function tt(e){const{name:r,ns:n}=e,o=w.el(r,n),i=new Z(o);return s(e,(e,r)=>{"name"!==e&&"ns"!==e&&h(i[e])&&(t(r)?i[e](...r):i[e](r))}),i}function et(...e){const r=w.frag();return e.forEach(e=>void 0!==e&&r.appendChild(function(e){if(t(e))return et(...e);return rt(e)}(e))),r}function rt(t){if(0===arguments.length||void 0===t)throw new TypeError(`Cannot convert ${t} to native DOM`);return t instanceof Element||t instanceof Text||t instanceof DocumentFragment||t instanceof Comment?t:t instanceof Z||t instanceof J?t.el:y(t)?rt(t.root):Y(t)?tt(t).el:w.text(t)}function nt(t,e,r){return at(t).setAttrs(e).append(r)}function st(t="svg"){return X(i(t)?w.el(t,"http://www.w3.org/2000/svg"):t)}function ot(t="math"){return X(i(t)?w.el(t,"http://www.w3.org/1998/mathml"):t)}const it={get(t,e){const r=t(e);return function(...t){return r.append(...t)}}},at=new Proxy((function(t="html"){return X(i(t)?w.el(t):t)}),it),ht=new Proxy(st,it),ut=new Proxy(ot,it);function lt(t){return X(document.getElementById(t))}function ct(t,e=document.body){return $(t)&&(t=t.selector),X(e).query(t)}function dt(t,e=document.body){return $(t)&&(t=t.selector),X(e).queryAll(t)}const pt=new Event("attached"),ft=new Event("detached");function mt(t,e){for(var r of t)"childList"==r.type&&(r.addedNodes.forEach(t=>t.dispatchEvent(pt)),r.removedNodes.forEach(t=>t.dispatchEvent(ft)))}var gt;function wt(t){const{document:{readyState:e}}=window;if("complete"===e||"loaded"===e||"interactive"===e)t();else{k.on("DOMContentLoaded",(function e(){k.off("DOMContentLoaded",e),t()}))}}k.on("unload",()=>{gt&>.disconnect()}),wt(()=>function(t=document.documentElement){(gt=new MutationObserver(mt)).observe(t,{childList:!0,subtree:!0})}());export{j as col,Q as css,w as doc,T as em,c as ent,U as frag,nt as h,at as html,v as isDim,$ as isSel,ut as mathMl,ot as mathMlTag,E as perc,x as px,ct as query,dt as queryAll,lt as queryId,l as qut,wt as ready,C as rem,p as rnd,V as router,g as runOnce,O as sel,ht as svg,st as svgTag,X as toTag,A as vh,S as vw};//# sourceMappingURL=jj.min.js.map
|
package/dist/jj.min.js.gz
DELETED
|
Binary file
|
package/dist/jj.min.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jj.min.js","sources":["../util.js","../unit.js","../Selector.js","../control.js","../events.js","../CSS.js","../win.js","../Router.js","../Tag.js","../observer.js","../index.js"],"sourcesContent":["export const INDENT = ' '\nexport const NEWLINE = '\\n'\n\nexport function isArr(x) {\n return Array.isArray(x)\n}\n\nexport function arrFrom(x) {\n return Array.from(x)\n}\n\nexport function toArray(a) {\n return isArr(a) ? a : [a]\n}\n\nexport function ind(indentation, addition = 0) {\n if (indentation < 0) {\n return ''\n }\n indentation += addition\n if (ind.cache[indentation] === undefined) {\n ind.cache[indentation] = INDENT.repeat(indentation)\n }\n return ind.cache[indentation]\n}\nind.cache = ['', INDENT]\n\nexport function nl(indentation) {\n return indentation < 0 ? '' : NEWLINE\n}\n\nexport function mapKeyVal(obj, fn) {\n return Object.entries(obj).map(([k, v]) => fn(k, v, obj))\n}\n\nexport function isObj(a) {\n return a && typeof a === 'object'\n}\n\nexport function isStr(a, minLength = 0) {\n return typeof a === 'string' && a.length >= minLength\n}\n\nexport function isNum(a) {\n return typeof a === 'number' && Number.isFinite(a)\n}\n\nexport function isFn(a) {\n return typeof a === 'function'\n}\n\nexport function isBool(a) {\n return typeof a === 'boolean'\n}\n\nexport function isDef(a) {\n return a !== undefined\n}\n\nexport function camel2kebab(str) {\n return str.replace(/([A-Z])/g, ch => '-' + ch.toLowerCase())\n}\n\nexport function cssValue(v) {\n if (isArr(v)) {\n return v.join(' ')\n }\n return v\n}\n\nfunction embed(start, end, ...contents) {\n return start + contents.join('') + end\n}\n\nexport function par(...strArr) {\n return embed('(', ')', ...strArr)\n}\n\nexport function qut(...strArr) {\n const str = strArr.join('').replace('\"', '\\\\\"')\n return embed('\"', '\"', str)\n}\n\nexport function ent(entity) {\n if (isStr(entity)) {\n return '&' + entity + ';'\n } else if (isNum(entity) && Number.isInteger(entity)) {\n return `&#${entity};`\n }\n throw new TypeError(`Cannot make HTML entity from ${entity}`)\n}\n\nexport function sqBra(...strArr) {\n return embed('[', ']', ...strArr)\n}\n\nexport function rnd(prefix) {\n const randomStr = Math.random().toString(36).substr(2)\n // the resulting string should always start with a letter, otherwise it won't work as class or id\n return isStr(prefix) ? `${prefix}-${randomStr}` : randomStr\n}\n\nexport function alias(obj, aliasDic) {\n const prt = obj.prototype\n\n function assignTarget(dst, src) {\n if (prt[dst] !== undefined) {\n throw new Error(`${obj.name} already has a method called ${dst}`)\n }\n prt[dst] = prt[src]\n }\n\n mapKeyVal(aliasDic, (src, dst) => {\n if (isArr(dst)) {\n dst.forEach(d => assignTarget(d, src))\n } else {\n assignTarget(dst, src)\n }\n })\n}\n\nconst ranOnce = Symbol('ran once flag')\nexport function runOnce(fn, ...args) {\n if (isFn(fn) && !fn[ranOnce]) {\n fn.apply(undefined, args)\n fn[ranOnce] = true\n }\n}\n\nexport const doc = {\n el(tagName, ns) {\n return isStr(ns) ? document.createElementNS(ns, tagName) : document.createElement(tagName)\n },\n frag() {\n return document.createDocumentFragment()\n },\n text(...strArr) {\n return document.createTextNode(String(strArr.flat().join('')))\n },\n comm(...strArr) {\n return document.createComment(String(strArr.flat().join('')))\n },\n get body() {\n return document.body\n },\n get head() {\n return document.body.head\n },\n}\n\nexport function isComponent(obj) {\n return isObj(obj) && isObj(obj.root)\n}\n","import { isStr, alias } from './util.js'\n\nclass Dim {\n constructor(value, unit) {\n if (isStr(value)) {\n this.parse(value)\n } else {\n this.value = value\n this.unit = unit\n }\n }\n\n clone() {\n return new Dim(this.value, this.unit)\n }\n\n parse(str) {\n const parts = str.match(/([-+]?[0-9.]+)([%\\w]*)/)\n if (parts) {\n const [, value, unit] = parts\n this.value = value\n this.unit = unit\n }\n throw new SyntaxError(`Could not parse ${str} as a CSS Dimention`)\n }\n\n toString() {\n return `${this.value}${this.unit}`\n }\n\n [Symbol.toPrimitive](hint) {\n if (hint === 'string') {\n return this.toString()\n }\n return this.value\n }\n}\n\nalias(Dim, {\n toString: 'toJSON'\n})\n\nexport function isDim(val) {\n return val instanceof Dim\n}\n\nexport function perc(num) {\n return new Dim(num, '%')\n}\n\nexport function em(num) {\n return new Dim(num, 'em')\n}\n\nexport function rem(num) {\n return new Dim(num, 'rem')\n}\n\nexport function px(num) {\n return new Dim(num, 'px')\n}\n\nexport function vh(num) {\n return new Dim(num, 'vh')\n}\n\nexport function vw(num) {\n return new Dim(num, 'vw')\n}\n\nexport function col(r, g, b, a) {\n if (g === undefined && b === undefined && a === undefined) {\n if (isStr(r, 1)) {\n return `#${r}`\n }\n }\n throw new Error('TODO: Use case not implemented yet')\n}\n","import { sqBra, qut, alias, rnd, mapKeyVal } from './util.js'\n\nclass Selector {\n constructor(selector = '') {\n this.selector = selector\n }\n\n toString() {\n return this.selector\n }\n\n css(ruleObj) {\n return { [this.selector]: ruleObj }\n }\n\n clone() {\n return new Selector(this.selector)\n }\n\n append(...str) {\n if (str.length) {\n this.selector += str.map(s => isSel(s) ? s.selector : s).join('')\n }\n return this\n }\n\n at(str) {\n return this.append('@', str)\n }\n\n get _() {\n return this.append(' ')\n }\n\n // [attribute]\t[target]\tSelects all elements with a target attribute\n // [attribute=value]\t[target=_blank]\tSelects all elements with target=\"_blank\"\n attr(attrName, attrValue) {\n return attrValue === undefined ?\n this.append(sqBra(attrName)) :\n this.append(sqBra(attrName, '=', qut(attrValue)))\n }\n\n // [attribute~=value]\t[title~=flower]\tSelects all elements with a title attribute containing the word \"flower\"\n attrValArrContains(attrName, attrValue) {\n return this.append(sqBra(attrName, '~=', qut(attrValue)))\n }\n\n // [attribute^=value]\ta[href^=\"https\"]\tSelects every <a> element whose href attribute value begins with \"https\"\n attrValStartsWith(attrName, attrValue) {\n return this.append(sqBra(attrName, '^=', qut(attrValue)))\n }\n\n // [attribute$=value]\ta[href$=\".pdf\"]\tSelects every <a> element whose href attribute value ends with \".pdf\"\n attrValEndsWith(attrName, attrValue) {\n return this.append(sqBra(attrName, '$=', qut(attrValue)))\n }\n\n // [attribute*=value]\ta[href*=\"w3schools\"]\tSelects every <a> element whose href attribute value contains the substring \"w3schools\"\n attrValContains(attrName, attrValue) {\n return this.append(sqBra(attrName, '*=', qut(attrValue)))\n }\n\n class(...classNames) {\n classNames.forEach(c => this.append('.', c))\n return this\n }\n\n BEM(block, element, modifier) {\n this.B(block)\n if (element !== undefined) {\n this.E(element) \n }\n if (modifier !== undefined) {\n this.M(modifier)\n }\n return this\n }\n\n E(element) {\n return this.append('__', element)\n }\n\n M(modifier) {\n return this.append('--', modifier)\n }\n\n id(idString) {\n return this.append('#', idString)\n }\n\n pClass(pseudo) {\n return this.append(':', pseudo)\n }\n\n pEl(pseudo) {\n return this.append('::', pseudo)\n }\n\n par(...str) {\n return this.append('(', ...str, ')')\n }\n\n prop(prop, val) {\n return this.par(prop, ':', val)\n }\n\n nthChild(str) {\n return this.pClass(`nth-child(${str})`)\n }\n\n firstChild() {\n return this.pClass(`first-child`)\n }\n\n rnd(prefix = '') {\n return this.append(rnd(prefix))\n }\n\n [Symbol.toPrimitive](hint) {\n if (hint === 'string') {\n return this.toString()\n }\n return this.value\n }\n}\n\n// B, E, M are for Block Element Modifier: http://getbem.com/introduction/\nalias(Selector, {\n class: 'B',\n append: ['add', 'el', 'tag', 'com', 'cond', 'star', 'all', 'sel', 'concat'],\n})\n\nconst shortHands = {\n [Symbol.toPrimitive]: 'toString',\n '>': ['gt', 'parentOf'],\n '*': ['star', 'all'],\n '~': ['tilde', 'precedes'],\n '+': ['plus', 'followedBy'],\n ',': ['comma', 'or'],\n // TODO: there's :not() pseudo-class as well and that one takes a selector\n 'not': ['not'],\n 'only': ['only'],\n 'and': ['and'],\n}\n\nmapKeyVal(shortHands, (str, vals) => {\n vals.forEach(v => {\n Selector.prototype[v] = function () {\n return this.append(str)\n }\n })\n})\n\nexport function isSel(v) {\n return v instanceof Selector\n}\n\nfunction _sel(param) {\n if (isSel(param)) {\n return param\n }\n return new Selector(param)\n}\n\nexport const sel = new Proxy(_sel, {\n get(_sel, prop) {\n const selector = new Selector()\n if (prop in selector) {\n return selector[prop]\n } else {\n selector.append(prop)\n return selector\n }\n }\n})","import { isFn, isNum } from './util.js'\n\nfunction parseRangeArguments(arr) {\n if (arr.length < 2) {\n throw new TypeError(`Expected at least 2 arguments but got ${arr}`)\n }\n if (!isNum(arr[0])) {\n throw new TypeError(`The first argument must be a number but got ${arr[0]}`)\n }\n if (isFn(arr[1])) {\n // range(end, fn, ...extraParams)\n const [ end, fn, ...extraParams ] = arr\n return { start: 0, end, step: 1, fn, extraParams }\n } else if (isFn(arr[2])) {\n // range(start, end, fn, ...extraParams)\n const [ start, end, fn, ...extraParams ] = arr\n return { start, end, step: 1, fn, extraParams }\n } else if (isFn(arr[3])) {\n // // range(start, end, step, fn, ...extraParams)\n const [ start, end, step, fn, ...extraParams ] = arr\n return { start, end, step, fn, extraParams }\n }\n throw new TypeError(`Which function do you want to run? Got ${arr}`)\n}\n\nexport const control = {\n /**\n * @remark if inside the function you need to refer to the tag (exposed as `this`), just remember\n * to use a classic function instead of an arrow function\n */\n if(condition, fn, ...extraParams) {\n if (condition) {\n return this.run(fn, ...extraParams)\n }\n return this\n },\n\n forEach(arr, fn, ...extraParams) {\n arr.forEach(item => {\n this.run(fn, item, ...extraParams)\n })\n\n return this\n },\n\n times(n, fn, ...extraParams) {\n return this.range(1, n + 1, 1, fn, ...extraParams)\n },\n\n // range(start, end, step, fn, ...extraParams)\n // range(start, end, fn, ...extraParams) // step = 1\n // range(end, fn, ...extraParams) // start = 0, step = 1\n range() {\n const { start, end, step, fn, extraParams } = parseRangeArguments(Array.from(arguments))\n if (!isNum(start) || !isNum(end) || !isNum(step)) {\n throw new TypeError(`Expected numbers but got: start=${start}, end=${end}, step=${step}`)\n }\n if (step === 0) {\n throw new Error(`The step cannot be zero`)\n }\n if ((start < end && step < 0) || (start > end && step > 0)) {\n throw new Error(`This loop will never end: start=${start}, end=${end}, step=${step}`)\n }\n for (let i = start; i < end; i += step) {\n this.run(fn, i, ...extraParams)\n }\n return this\n },\n\n run(fn, ...extraParams) {\n fn.call(this, this, ...extraParams)\n return this\n },\n}\n","export const events = {\n on(eventName, handler) {\n this.el.addEventListener(eventName, handler)\n return this\n },\n\n once(eventName, handler) {\n this.el.addEventListener(eventName, handler, { once: true })\n return this\n },\n\n off(eventName, handler) {\n this.el.removeEventListener(eventName, handler)\n return this\n }\n}\n","import { mapKeyVal, camel2kebab, nl, ind, isObj, isNum, isStr, isArr, qut } from './util.js'\nimport { isDim } from './unit.js'\n\nfunction isAtRule(selectorTxt) {\n return selectorTxt.trimLeft().startsWith('@')\n}\n\nfunction toValue(val) {\n if (isStr(val)) {\n if (val.trim() === '') {\n return qut(val)\n }\n return val\n }\n if (isNum(val)) {\n return String(val)\n }\n if (isDim(val)) {\n return String(val)\n } else if (isArr(val)) {\n return val.join(' ')\n }\n}\n\nfunction extractRules(selectorTxt, bodyObj) {\n const baseRule = new SimpleRule(selectorTxt)\n const ownProps = baseRule.bodyObj\n const nestedRules = [baseRule]\n mapKeyVal(bodyObj, (key, val) => {\n const v = toValue(val)\n if (v !== undefined) {\n ownProps[key] = v\n } else if (isAtRule(key)) {\n nestedRules.push(new WrapperRule(key, { [selectorTxt]: val }))\n } else {\n let nestedSelectorTxt = key.replace(/&/g, selectorTxt)\n if (nestedSelectorTxt === key) {\n // No & was present, so the replacement didn't do anything. Nest the selectors\n nestedSelectorTxt = selectorTxt + ' ' + key\n }\n nestedRules.push(new NestedRule(nestedSelectorTxt, val))\n }\n })\n return nestedRules\n}\n\nfunction propVal(indentation, prop, val) {\n const colon = indentation < 0 ? ':' : ': '\n return camel2kebab(prop)\n + colon\n + toValue(val)\n + ';'\n}\n\nclass SimpleRule {\n constructor(selectorTxt, bodyObj = {}) {\n this.selectorTxt = selectorTxt\n this.bodyObj = bodyObj\n }\n\n get isEmpty() {\n return Object.keys(this.bodyObj).length === 0\n }\n\n toString(indentation = 0) {\n if (this.isEmpty) {\n return indentation >= 0 ? ind(indentation) + `/* ${this.selectorTxt} {} */`: ''\n }\n let ret = ind(indentation) + this.selectorTxt\n if (indentation >= 0) {\n ret += ' '\n }\n ret += '{' + nl(indentation)\n const space = ind(indentation, 1)\n ret += mapKeyVal(this.bodyObj, (key, val) => space + propVal(indentation, key, val))\n .join(nl(indentation))\n if (indentation >= 0) {\n ret += nl(indentation) + ind(indentation)\n }\n ret += '}'\n return ret\n }\n}\n\nclass NestedRule {\n constructor(selectorTxt, bodyObj) {\n this.selectorTxt = selectorTxt\n this.bodyObj = bodyObj\n }\n\n toString(indentation = 0) {\n if (isObj(this.bodyObj)) {\n return extractRules(this.selectorTxt, this.bodyObj)\n .map(rule => rule.toString(indentation))\n .join(nl(indentation))\n }\n const v = toValue(this.bodyObj)\n if (v !== undefined) {\n return ind(indentation) + propVal(indentation, this.selectorTxt, v)\n }\n return ind(indentation) + this.selectorTxt\n }\n}\n\nclass WrapperRule {\n constructor(selectorTxt, ruleSet) {\n this.selectorTxt = selectorTxt\n this.ruleSet = ruleSet\n }\n\n toString(indentation = 0) {\n let ret = ind(indentation) + this.selectorTxt\n if (isObj(this.ruleSet)) {\n const childIndentation = indentation >= 0 ? indentation + 1 : -1\n if (indentation >= 0) {\n ret += ' '\n }\n ret += '{' + nl(indentation)\n ret += objToRulesArr(this.ruleSet)\n .map(rule => rule.toString(childIndentation))\n .join(nl(indentation))\n ret += nl(indentation)\n ret += ind(indentation) + '}'\n } else {\n ret += ';'\n }\n return ret\n }\n}\n\nexport function objToRulesArr(obj) {\n if (!isObj(obj)){\n if (isStr(obj)) {\n obj = { [obj]: null }\n } else {\n throw new TypeError(`Invalid style descriptor: ${obj}`)\n }\n }\n return mapKeyVal(obj, (selectorTxt, bodyObj) => {\n if (isAtRule(selectorTxt)) {\n return new WrapperRule(selectorTxt, bodyObj)\n }\n return new NestedRule(selectorTxt, bodyObj)\n })\n}\n","import { events } from './events.js'\n\nclass Window {\n constructor(windowRef) {\n this.el = windowRef\n }\n}\n\nObject.assign(Window.prototype, events)\n\nexport const win = new Window(window)","import { win } from './win.js'\nimport { isFn, isStr, isObj } from './util.js'\n\nfunction match(regexp, pathname) {\n if(isStr(regexp)) {\n console.log('boo', regexp, pathname)\n return regexp === pathname\n }\n if (regexp instanceof RegExp) {\n const parseResult = pathname.match(regexp)\n return parseResult || false\n } \n throw new TypeError(`Invalid route regexp: ${regexp}`)\n}\n\nconst rootRouterMap = new WeakMap()\n\nclass Router {\n constructor(root) {\n if (!isObj(root) || !isFn(root.run)) {\n throw new Error(`Root must have a run method but got ${root}`)\n }\n this.routes = []\n this.root = root\n this.isMatched = false\n rootRouterMap.set(root, this)\n\n const matchThis = (state) => this.runMatches(state)\n win.on('popstate', matchThis).on('hashchange', matchThis)\n }\n\n addRoute(regexp, handler) {\n if (isFn(this.defRouteHandler)) {\n throw new Error(`Cannot add a route after the default route is set`)\n }\n if (!isFn(handler)) {\n throw new TypeError(`Expected a route handler function but got ${handler}`)\n }\n const newRoute = { regexp, handler }\n this.routes.push(newRoute)\n if (!this.isMatched) {\n this._runRoute(undefined, newRoute)\n }\n return this\n }\n\n addDefRoute(handler) {\n if (isFn(this.defRouteHandler)) {\n throw new Error(`There is already a default route handler`)\n }\n if (!isFn(handler)) {\n throw new TypeError(`Expected a default route handler function but got ${handler}`)\n }\n this.defRouteHandler = handler\n if (!this.isMatched) {\n this._runDefRoute()\n }\n return this\n }\n\n _runRoute(state, { regexp, handler}, pathname = window.location.pathname) {\n const matchResult = match(regexp, pathname)\n if (matchResult) {\n this.isMatched = true\n this.root.run(handler, state, matchResult)\n }\n return !!matchResult\n }\n\n _runDefRoute() {\n this.root.run(this.defRouteHandler)\n return this\n }\n\n runMatches(state, pathname = window.location.pathname) {\n const someRouteMatched = this.routes.some(route => this._runRoute(state, route, pathname))\n if (!someRouteMatched) {\n return this._runDefRoute()\n }\n return this\n }\n}\n\nexport function router(root) {\n if (!isObj(root) || !isFn(root.run)) {\n throw new TypeError(`root should be a Tag instance. Got ${root}`)\n }\n return rootRouterMap.get(root) || new Router(root)\n}","import { mapKeyVal, alias, isArr, arrFrom, isObj, isStr, isComponent, nl, rnd, doc, isFn } from './util.js'\nimport { control } from './control.js'\nimport { events } from './events.js'\nimport { sel, isSel } from './Selector.js'\nimport { objToRulesArr } from './CSS.js'\nimport { router } from './Router.js'\n\nconst HTTP_WWW_W3_ORG = 'http://www.w3.org/'\nconst SVG_NS = HTTP_WWW_W3_ORG + '2000/svg'\nconst MATH_NS = HTTP_WWW_W3_ORG + '1998/mathml'\nconst jaTag = Symbol('jaTag')\n\nconst STYLE = 'style'\nconst HIDDEN = 'hidden'\nconst MOUSE = 'mouse'\n\nclass Node {\n constructor(el) {\n if (isObj(el) && Node.validNodeTypes.includes(el.nodeType)) {\n this.el = el\n } else {\n throw new TypeError(`Invalid parameter to Node constructor: ${el}`)\n }\n }\n\n mount(rootTagOrEl) {\n const root = toTag(rootTagOrEl)\n return root.setChild(this)\n }\n\n addTo(targetElement) {\n toTag(targetElement).append(this)\n return this\n }\n\n addToHead() {\n return this.appendTo(document.head)\n }\n\n addToBody() {\n return this.appendTo(document.body)\n }\n\n preTo(targetElement) {\n toTag(targetElement).prepend(this)\n return this\n }\n\n addComment(str) {\n this.append(doc.comm(str))\n return this.norm()\n }\n\n preComment(str) {\n this.prepend(doc.comm(str))\n return this.norm()\n }\n\n //#region child\n addChildren(...children) {\n if (children.length) {\n this.el.append(toNativeFrag(...children))\n }\n return this\n }\n\n preChildren(...children) {\n if (children.length) {\n this.el.prepend(toNativeFrag(...children))\n }\n return this\n }\n\n // TODO: Clean data and events\n // https://github.com/jquery/jquery/blob/438b1a3e8a52d3e4efd8aba45498477038849c97/src/manipulation.js#L355\n // https://github.com/jquery/jquery/blob/438b1a3e8a52d3e4efd8aba45498477038849c97/src/manipulation.js#L265\n rmChildren(...children) {\n if (children.length) {\n children.map(child => toNativeEl(child)).forEach(nativeChild => this.el.removeChild(nativeChild))\n } else {\n while(this.el.firstChild){\n this.el.removeChild(this.el.firstChild);\n }\n }\n return this\n }\n \n setChildren(...children) {\n this.empty().addChildren(...children)\n return this\n }\n\n getChildren() {\n return arrFrom(this.el.childNodes).map(childNode => toTag(childNode))\n }\n\n hasChildren(...children) {\n if (children.length === 0) {\n return this.el.hasChildren\n }\n return children.every(child => this.el.contains(toNativeEl(child)))\n }\n //#endregion child\n \n //#region text\n addText(...strings) {\n strings.flat().forEach(str => this.append(doc.text(str)))\n return this.norm()\n }\n\n preText(...strings) {\n strings.flat().forEach(str => this.prepend(doc.text(str)))\n return this.norm()\n }\n \n rmText() {\n this.childNodes.filter(c => c instanceof Text).forEach(c => c.remove())\n return this\n }\n \n setText(...strings) {\n return this.rmText().addText(...strings)\n }\n \n json(obj) {\n return this.setText(JSON.stringify(obj, null, 2))\n }\n \n getText() {\n return this.childNodes.map(c => c instanceof Text ? c.wholeText : '').join('')\n }\n \n hasText() {\n return this.childNodes.some(c => c instanceof Text)\n }\n\n normText() {\n this.el.normalize()\n return this\n }\n //#endregion text\n \n //#region query\n queryId(id) {\n const result = this.el.getElementById(id)\n if (result) {\n return toTag(result)\n }\n }\n\n query(selector) {\n const result = this.el.querySelector(selector)\n if (result) {\n return toTag(result)\n }\n }\n\n queryAll(selector) {\n const result = arrFrom(this.el.querySelectorAll(selector))\n if (result) {\n return result.map(r => toTag(r))\n }\n }\n //#endregion query\n\n toString() {\n return this.el.outerHTML\n }\n}\n\nalias(Node, {\n addTo: ['appendTo'],\n addToHead: 'appendToHead',\n addToBody: 'appendToBody',\n addComment: 'comment',\n preTo: ['prependTo'],\n setChildren: ['setChild'],\n addChildren: ['append', 'children', 'child', 'addChild'],\n preChildren: ['prepend', 'prependChildren', 'prependChild'],\n addText: ['text'],\n normText: ['norm'],\n rmChildren: ['empty', 'clear', 'rmChild'],\n toString: 'stringify',\n})\n\nclass Frag extends Node {\n constructor() {\n super(doc.frag())\n }\n\n clone(deep) {\n return new Frag(this.el.cloneNode(deep))\n }\n}\n\nexport function frag(...children) {\n const ret = new Frag()\n ret.append(children)\n return ret\n}\n\n// See: https://developer.mozilla.org/en-US/docs/Web/API/Node\nNode.validNodeTypes = [1, 9, 11]\n\nclass Tag extends Node {\n constructor(x) {\n // TODO if x is a Tag, we're essentially creating two tag objects pointing to the same native element!\n super(x instanceof Tag ? x.el : x)\n }\n\n clone(deep) {\n return new Tag(this.el.cloneNode(deep))\n }\n\n get parent() {\n return toTag(this.el.parentElement)\n }\n\n get ns() {\n return this.el.namespaceURI\n }\n\n get classList() {\n return this.el.classList\n }\n\n get childNodes() {\n return arrFrom(this.el.childNodes)\n }\n\n style(styles) {\n if (isObj(styles)) {\n mapKeyVal(styles, (k, v) => this.el.style[k] = v)\n } else {\n this.rmProp(STYLE)\n }\n return this\n }\n\n //#region class\n setClasses(...classNames) {\n this.el.className = classNames.join(' ')\n }\n\n getClass() {\n return this.el.className\n }\n\n getClasses() {\n return arrFrom(this.el.className)\n }\n\n hasClasses(...classNames) {\n return classNames.every(className => this.classList.contains(className))\n }\n\n addClasses(...classNames) {\n this.classList.add(...classNames)\n return this\n }\n\n rmClasses(...classNames) {\n this.classList.remove(...classNames)\n return this\n }\n\n mvClass(oldClassName, newClassName) {\n this.classList.replace(oldClassName, newClassName)\n return this\n }\n\n mvClasses(classNamesDic) {\n mapKeyVal(classNamesDic, (oldClassName, newClassName) => this.mvClass(oldClassName, newClassName))\n return this\n }\n\n togClass(className, force) {\n this.classList.toggle(className, force)\n return this\n }\n \n togClassObj(classNameDic) {\n mapKeyVal(classNameDic, (className, force) => this.togClass(className, force))\n return this\n }\n\n togClasses(...classNames) {\n classNames.forEach(className => this.togClass(className))\n return this\n }\n //#endregion class\n\n //#region attr\n setAttr(attrName, attrValue) {\n if (attrName.toLowerCase() === STYLE) {\n return this.style(attrValue)\n }\n if (attrValue === undefined) {\n attrValue = ''\n }\n this.el.setAttribute(attrName, attrValue)\n return this\n }\n\n setAttrs(attrsDic) {\n if (!isObj(attrsDic)) {\n throw new TypeError(`Expected an object but got ${attrsDic}`)\n }\n mapKeyVal(attrsDic, (attrName, attrValue) => this.setAttr(attrName, attrValue))\n return this\n }\n\n getAttr(attrName) {\n return this.el.getAttribute(attrName)\n }\n\n getAttrs(...attrNames) {\n return Object.fromEntries(\n attrNames.map(attrName => [attrName, this.getAttr(attrName)])\n )\n }\n\n hasAttrs(...attrNames) {\n return attrNames.every(attrName => this.this.el.hasAttribute(attrName))\n }\n\n rmAttrs(...attrNames) {\n attrNames.forEach((attrName) => {\n this.el.removeAttribute(attrName)\n })\n return this\n }\n\n togAttr(attrName, force) {\n this.el.toggleAttribute(attrName, force)\n return this\n }\n //#endregion attr\n\n //#region prop\n setProp(propName, propValue) {\n if (propName.toLowerCase() === STYLE) {\n return this.style(propValue)\n }\n this.el[propName] = propValue\n return this\n }\n\n setPropsObj(propsDic) {\n mapKeyVal(propsDic, (propName, propValue) => this.setProp(propName, propValue))\n return this\n }\n\n getProp(propName) {\n return this.el[propName]\n }\n\n getPropsObj(...propNames) {\n return Object.fromEntries(\n propNames.map(propName => [propName, this.getProp(propName)])\n )\n }\n\n hasProps(...propNames) {\n return propNames.every(propName => propName in this.el)\n }\n\n rmProps(...propNames) {\n propNames.forEach((propName) => {\n try {\n delete this.el[propName]\n }\n catch (e) {\n this.el[propName] = undefined\n }\n })\n return this\n }\n\n togProp(propName, force = false) {\n if (arguments.length === 2) {\n this.setProp(propName, !!force)\n } else {\n this.setProp(propName, !!this.getProp(propName))\n }\n return this\n }\n //#endregion prop\n \n //#region data\n setData(name, value) {\n this.el.dataset[name] = value\n return this\n }\n\n setDataObj(dataDic) {\n mapKeyVal(dataDic, (name, value) => this.setData(name, value))\n return this\n }\n\n getData(name) {\n return this.el.dataset[name]\n }\n\n getDataObj(...names) {\n return Object.fromEntries(names.map(name => [name, this.getData(name)]))\n }\n\n hasData(name) {\n return name in this.el.dataset\n }\n\n rmData(name) {\n return delete this.el.dataset[name]\n }\n //#endregion data\n\n //#region visibility\n tog(show) {\n if (arguments.length === 1) {\n return this.togProp(HIDDEN, !show)\n }\n return this.togProp(HIDDEN)\n }\n\n hide() {\n return this.setProp(HIDDEN, false)\n }\n \n show() {\n return this.setProp(HIDDEN, true)\n } \n //#endregion visibility\n\n //#region query\n closest(selector) {\n return this.el.closest(selector) || undefined\n }\n\n matches(selector) {\n return this.el.matches(selector)\n }\n //#endregion query\n \n //#reguin animation\n animFrame(fn, ...extraParams) {\n // TODO we should throw if a loop is already running (or merge loops)\n const runFn = () => {\n if (this.isAttached()) {\n this.run(fn, ...extraParams)\n }\n scheduleCall()\n }\n\n const scheduleCall = () => {\n this.animFrameRequestId = window.requestAnimationFrame(runFn)\n }\n\n scheduleCall()\n return this\n }\n\n clearAnimFrame() {\n window.requestAnimationFrame(this.animFrameRequestId)\n return this\n }\n //#endregion animation\n\n //#region routing\n route(regex, fn) {\n router(this).addRoute(regex, fn)\n return this\n }\n\n defRoute(fn) {\n router(this).addDefRoute(fn)\n return this\n }\n //#endregion routing\n\n css(cssRef, prefix, styles) {\n if (styles === undefined) {\n styles = prefix\n prefix = undefined\n }\n if (!(cssRef instanceof StyleTag)) {\n throw new Error(`Expected an instance of StyleTag but got ${cssRef}`)\n }\n const rndClassName = rnd(prefix)\n this.addClass(rndClassName)\n cssRef.append(\n sel().class(rndClassName).css(styles)\n )\n return this\n }\n\n aria(noun, value) {\n return this.setAttr(`aria-${noun}`, value)\n }\n\n wrap(wrapper) {\n wrapper = toTag(wrapper)\n return wrapper.append(this)\n }\n\n swap(otherTag) {\n this.el.replaceWith(otherTag.el)\n return otherTag\n }\n\n isAttached() {\n return document.documentElement.contains(this.el)\n }\n\n queryId(id) {\n const result = this.el.querySelector('#' + id)\n if (result) {\n return toTag(result)\n }\n }\n\n toString() {\n return this.el.outerHTML\n }\n}\n\nObject.assign(Tag.prototype, control, events)\n\nconst attrShorthands = [\n 'alt',\n 'aria-role',\n 'checked',\n 'content',\n 'height',\n HIDDEN,\n 'href',\n 'htmlFor',\n 'id',\n 'is',\n 'label',\n 'lang',\n 'name',\n 'placeholder',\n 'readonly',\n 'rel',\n 'required',\n 'role',\n 'selected',\n 'src',\n 'title',\n 'type',\n 'value',\n 'width',\n]\n\nattrShorthands.forEach(attrName => {\n Tag.prototype[attrName] = function (attrValue) {\n return this.setAttr(attrName, attrValue)\n }\n})\n\nconst eventShorthands = [\n 'attached',\n 'blur',\n 'change',\n 'click',\n 'contextmenu',\n 'dblclick',\n 'detached',\n 'error',\n 'focus',\n 'focusout',\n 'hover',\n 'keydown',\n 'keydpress',\n 'keydup',\n 'load',\n MOUSE + 'down',\n MOUSE + 'enter',\n MOUSE + 'leave',\n MOUSE + 'move',\n MOUSE + 'out',\n MOUSE + 'over',\n MOUSE + 'up',\n 'resize',\n 'scroll',\n 'select',\n 'submit',\n 'unload',\n]\n\neventShorthands.forEach(eventName => {\n Tag.prototype[eventName] = function (...handlers) {\n this.on(eventName, ...handlers)\n return this\n }\n})\n\nalias(Tag, {\n addClasses: ['addClass', 'class', 'classes'],\n class: 'className',\n hasClasses: 'hasClass',\n rmClasses: 'rmClass',\n setClasses: 'setClass',\n togClass: 'toggleClass',\n \n hasAttrs: 'hasAttr',\n rmAttrs: 'rmAttr',\n setAttr: 'attr',\n setAttrs: 'attrs',\n togAttr: 'toggleAttr',\n \n hasProps: 'hasProp',\n rmProps: 'rmProp',\n setProp: 'prop',\n setProps: 'props',\n\n tog: 'toggle',\n swap: ['swapWith', 'replaceWith', 'replace'],\n \n value: 'val',\n htmlFor: 'for',\n})\n\nclass StyleTag {\n constructor(...rulesetObjArr) {\n this.rulesetObjArr = rulesetObjArr\n }\n\n get isAttached() {\n return this._root && this._root.isAttached()\n }\n\n get root() {\n if (!this._root) {\n this._root = html(STYLE)\n .type('text/css')\n .rel('stylesheet')\n .on('attached', () => this.update())\n }\n return this._root\n }\n\n appendToHead() {\n if (!document.head.contains(this.root.el)) {\n this.root.appendToHead()\n }\n return this\n }\n\n append(...rulesetObjArr) {\n if (rulesetObjArr.length) {\n rulesetObjArr.flat().forEach(r => this.rulesetObjArr.push(r))\n if (this.isAttached) {\n return this.update()\n }\n }\n return this\n }\n\n get disabled() {\n return this.root.el.disabled\n }\n\n disable(isDisabled = true) {\n this.root.el.disabled = isDisabled\n return this\n }\n\n enable(isEnabled = true) {\n return this.disable(!isEnabled)\n }\n\n title(tagTitle) {\n this.root.el.title = tagTitle\n return this\n }\n\n rm() {\n this.root.rm()\n this._root = undefined\n return this\n }\n\n minified(val) {\n this.minified = val\n return this\n }\n\n toString(minified = this.minified) {\n const indentation = minified ? -1 : 0\n const separator = nl(indentation)\n return this.rulesetObjArr\n .map(rule => objToRulesArr(rule)\n .map(rule => rule.toString(indentation))\n .join(separator)\n )\n .join(separator)\n }\n\n update() {\n const content = this.toString()\n // Only if successful, empty it\n this.root.setText(content)\n return this\n }\n}\n\nexport function css(...rulesetObjArr) {\n return new StyleTag(...rulesetObjArr)\n}\n\nexport function toTag(x) {\n if (x instanceof Element) {\n return x[jaTag] || new Tag(x)\n }\n if (x instanceof Tag) {\n return x\n }\n if (isComponent(x)) {\n return toTag(x.root)\n }\n if (isTagObj(x)) {\n return objToTag(x)\n }\n throw new Error(`Invalid Tag or Element instance: ${x}`)\n}\n\nfunction isTagObj(x) {\n return isObj(x) && isStr(x.name)\n}\n\nfunction objToTag(x) {\n const { name, ns } = x\n const el = doc.el(name, ns)\n const ret = new Tag(el)\n mapKeyVal(x, (method, param) => {\n if (method !== 'name' && method !== 'ns' && isFn(ret[method])) {\n if (isArr(param)) {\n ret[method](...param)\n } else {\n ret[method](param)\n }\n }\n })\n return ret\n}\n\nfunction toNativeFrag(...xArr) {\n const ret = doc.frag()\n xArr.forEach(x => x !== undefined && ret.appendChild(toNative(x)))\n return ret\n}\n\nfunction toNativeEl(x) {\n if (arguments.length === 0 || x === undefined) {\n throw new TypeError(`Cannot convert ${x} to native DOM`)\n }\n if (x instanceof Element || x instanceof Text || x instanceof DocumentFragment || x instanceof Comment) {\n return x\n }\n if (x instanceof Tag || x instanceof Frag) {\n return x.el\n }\n if (isComponent(x)) {\n return toNativeEl(x.root)\n }\n if (isTagObj(x)) {\n return objToTag(x).el\n }\n // Whatever else will convert to a text node\n return doc.text(x)\n}\n\nfunction toNative(x) {\n if (isArr(x)) {\n return toNativeFrag(...x)\n }\n return toNativeEl(x)\n}\n\nexport function h(tagName, attrs, children) {\n return html(tagName).setAttrs(attrs).append(children)\n}\n\nfunction htmlTag(tagName = 'html') {\n return toTag(isStr(tagName) ? doc.el(tagName) : tagName)\n}\n\nexport function svgTag(tagName = 'svg') {\n return toTag(isStr(tagName) ? doc.el(tagName, SVG_NS) : tagName)\n}\n\nexport function mathMlTag(tagName = 'math') {\n return toTag(isStr(tagName) ? doc.el(tagName, MATH_NS) : tagName)\n}\n\nconst sugarProxy = {\n get(target, tagName) {\n const tag = target(tagName)\n return function proxiedTag(...children) {\n return tag.append(...children)\n }\n }\n}\n\nexport const html = new Proxy(htmlTag, sugarProxy)\nexport const svg = new Proxy(svgTag, sugarProxy)\nexport const mathMl = new Proxy(mathMlTag, sugarProxy)\n\nexport function queryId(elementId) {\n return toTag(document.getElementById(elementId))\n}\n\nexport function query(selector, root = document.body) {\n if (isSel(selector)) {\n selector = selector.selector\n }\n return toTag(root).query(selector)\n}\n\nexport function queryAll(selector, root = document.body) {\n if (isSel(selector)) {\n selector = selector.selector\n }\n return toTag(root).queryAll(selector)\n}\n","// https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events\nexport const attachedEvent = new Event('attached')\nexport const detachedEvent = new Event('detached')\n\nexport function mutationObservationCb(mutationsList, observer) {\n for (var mutation of mutationsList) {\n if (mutation.type == 'childList') {\n mutation.addedNodes.forEach(n => n.dispatchEvent(attachedEvent))\n mutation.removedNodes.forEach(n => n.dispatchEvent(detachedEvent))\n }\n }\n};\n\nvar mo\n\nexport function startObserving(observationRoot = document.documentElement) {\n // https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver\n mo = new MutationObserver(mutationObservationCb)\n const config = { childList: true, subtree: true };\n mo.observe(observationRoot, config); \n}\n\nexport function stopObserving() {\n if (mo) {\n mo.disconnect()\n }\n}","export { rnd, qut, runOnce, ent, doc } from './util.js'\nexport * from './unit.js'\nexport * from './Selector.js'\nexport * from './Tag.js'\nexport * from './Router.js'\nimport { win } from './win.js'\nimport { startObserving, stopObserving } from './observer.js'\n\nconst DOMContentLoaded = 'DOMContentLoaded'\n\nexport function ready(fn) {\n const { document: { readyState } } = window\n if (readyState === 'complete' || readyState === 'loaded' || readyState === 'interactive') {\n fn()\n } else {\n function onReady() {\n win.off(DOMContentLoaded, onReady)\n fn()\n }\n win.on(DOMContentLoaded, onReady)\n }\n}\n\nwin.on('unload', () => stopObserving())\n\nready(() => startObserving())"],"names":["isArr","x","Array","isArray","arrFrom","from","ind","indentation","addition","undefined","cache","repeat","nl","mapKeyVal","obj","fn","Object","entries","map","k","v","isObj","a","isStr","minLength","length","isNum","Number","isFinite","isFn","embed","start","end","contents","join","qut","strArr","replace","ent","entity","isInteger","TypeError","sqBra","rnd","prefix","randomStr","Math","random","toString","substr","alias","aliasDic","prt","prototype","assignTarget","dst","src","Error","name","forEach","d","ranOnce","Symbol","runOnce","args","apply","doc","el","tagName","ns","document","createElementNS","createElement","frag","createDocumentFragment","text","createTextNode","String","flat","comm","createComment","body","head","isComponent","root","Dim","[object Object]","value","unit","this","parse","str","parts","match","SyntaxError","toPrimitive","hint","isDim","val","perc","num","em","rem","px","vh","vw","col","r","g","b","Selector","selector","ruleObj","s","isSel","append","_","attrName","attrValue","classNames","c","block","element","modifier","B","E","M","idString","pseudo","prop","par","pClass","class",">","*","~","+",",","not","only","and","vals","sel","Proxy","param","_sel","control","condition","extraParams","run","arr","item","n","range","step","parseRangeArguments","arguments","i","call","events","eventName","handler","addEventListener","once","removeEventListener","isAtRule","selectorTxt","trimLeft","startsWith","toValue","trim","propVal","colon","ch","toLowerCase","SimpleRule","bodyObj","isEmpty","keys","ret","space","key","NestedRule","baseRule","ownProps","nestedRules","push","WrapperRule","nestedSelectorTxt","extractRules","rule","ruleSet","childIndentation","objToRulesArr","Window","windowRef","assign","win","window","rootRouterMap","WeakMap","Router","routes","isMatched","set","matchThis","state","runMatches","on","regexp","defRouteHandler","newRoute","_runRoute","_runDefRoute","pathname","location","matchResult","console","log","RegExp","some","route","router","get","jaTag","Node","validNodeTypes","includes","nodeType","rootTagOrEl","toTag","setChild","targetElement","appendTo","prepend","norm","children","toNativeFrag","child","toNativeEl","nativeChild","removeChild","firstChild","empty","addChildren","childNodes","childNode","hasChildren","every","contains","strings","filter","Text","remove","rmText","addText","setText","JSON","stringify","wholeText","normalize","id","result","getElementById","querySelector","querySelectorAll","outerHTML","addTo","addToHead","addToBody","addComment","preTo","setChildren","preChildren","normText","rmChildren","Frag","super","deep","cloneNode","Tag","parent","parentElement","namespaceURI","classList","styles","style","rmProp","className","add","oldClassName","newClassName","classNamesDic","mvClass","force","toggle","classNameDic","togClass","setAttribute","attrsDic","setAttr","getAttribute","attrNames","fromEntries","getAttr","hasAttribute","removeAttribute","toggleAttribute","propName","propValue","propsDic","setProp","propNames","getProp","e","dataset","dataDic","setData","names","getData","show","togProp","closest","matches","runFn","isAttached","scheduleCall","animFrameRequestId","requestAnimationFrame","regex","addRoute","addDefRoute","cssRef","StyleTag","rndClassName","addClass","css","noun","wrapper","otherTag","replaceWith","documentElement","MOUSE","handlers","addClasses","hasClasses","rmClasses","setClasses","hasAttrs","rmAttrs","setAttrs","togAttr","hasProps","rmProps","setProps","tog","swap","htmlFor","rulesetObjArr","_root","html","type","rel","update","appendToHead","disabled","isDisabled","isEnabled","disable","tagTitle","title","rm","minified","separator","content","Element","isTagObj","objToTag","method","xArr","appendChild","toNative","DocumentFragment","Comment","h","attrs","svgTag","HTTP_WWW_W3_ORG","mathMlTag","sugarProxy","target","tag","svg","mathMl","queryId","elementId","query","queryAll","attachedEvent","Event","detachedEvent","mutationObservationCb","mutationsList","observer","mutation","addedNodes","dispatchEvent","removedNodes","mo","ready","readyState","onReady","off","disconnect","observationRoot","MutationObserver","observe","childList","subtree","startObserving"],"mappings":"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"}
|
package/events.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export const events = {
|
|
2
|
-
on(eventName, handler) {
|
|
3
|
-
this.el.addEventListener(eventName, handler)
|
|
4
|
-
return this
|
|
5
|
-
},
|
|
6
|
-
|
|
7
|
-
once(eventName, handler) {
|
|
8
|
-
this.el.addEventListener(eventName, handler, { once: true })
|
|
9
|
-
return this
|
|
10
|
-
},
|
|
11
|
-
|
|
12
|
-
off(eventName, handler) {
|
|
13
|
-
this.el.removeEventListener(eventName, handler)
|
|
14
|
-
return this
|
|
15
|
-
}
|
|
16
|
-
}
|
package/index.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export { rnd, qut, runOnce, ent, doc } from './util.js'
|
|
2
|
-
export * from './unit.js'
|
|
3
|
-
export * from './Selector.js'
|
|
4
|
-
export * from './Tag.js'
|
|
5
|
-
export * from './Router.js'
|
|
6
|
-
import { win } from './win.js'
|
|
7
|
-
import { startObserving, stopObserving } from './observer.js'
|
|
8
|
-
|
|
9
|
-
const DOMContentLoaded = 'DOMContentLoaded'
|
|
10
|
-
|
|
11
|
-
export function ready(fn) {
|
|
12
|
-
const { document: { readyState } } = window
|
|
13
|
-
if (readyState === 'complete' || readyState === 'loaded' || readyState === 'interactive') {
|
|
14
|
-
fn()
|
|
15
|
-
} else {
|
|
16
|
-
function onReady() {
|
|
17
|
-
win.off(DOMContentLoaded, onReady)
|
|
18
|
-
fn()
|
|
19
|
-
}
|
|
20
|
-
win.on(DOMContentLoaded, onReady)
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
win.on('unload', () => stopObserving())
|
|
25
|
-
|
|
26
|
-
ready(() => startObserving())
|
package/observer.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
// https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
|
|
2
|
-
export const attachedEvent = new Event('attached')
|
|
3
|
-
export const detachedEvent = new Event('detached')
|
|
4
|
-
|
|
5
|
-
export function mutationObservationCb(mutationsList, observer) {
|
|
6
|
-
for (var mutation of mutationsList) {
|
|
7
|
-
if (mutation.type == 'childList') {
|
|
8
|
-
mutation.addedNodes.forEach(n => n.dispatchEvent(attachedEvent))
|
|
9
|
-
mutation.removedNodes.forEach(n => n.dispatchEvent(detachedEvent))
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
var mo
|
|
15
|
-
|
|
16
|
-
export function startObserving(observationRoot = document.documentElement) {
|
|
17
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
|
|
18
|
-
mo = new MutationObserver(mutationObservationCb)
|
|
19
|
-
const config = { childList: true, subtree: true };
|
|
20
|
-
mo.observe(observationRoot, config);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export function stopObserving() {
|
|
24
|
-
if (mo) {
|
|
25
|
-
mo.disconnect()
|
|
26
|
-
}
|
|
27
|
-
}
|
package/rollup.config.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { terser } from 'rollup-plugin-terser'
|
|
2
|
-
import gzipPlugin from 'rollup-plugin-gzip'
|
|
3
|
-
|
|
4
|
-
module.exports = {
|
|
5
|
-
input: 'index.js',
|
|
6
|
-
plugins: [
|
|
7
|
-
terser({ include: ['jj.min.js', 'esm'] }),
|
|
8
|
-
gzipPlugin()
|
|
9
|
-
],
|
|
10
|
-
output: [
|
|
11
|
-
{
|
|
12
|
-
compact: false,
|
|
13
|
-
indent: false,
|
|
14
|
-
file: 'dist/jj.js',
|
|
15
|
-
format: 'esm'
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
compact: true,
|
|
19
|
-
indent: false,
|
|
20
|
-
sourcemap: true,
|
|
21
|
-
file: 'dist/jj.min.js',
|
|
22
|
-
format: 'esm'
|
|
23
|
-
},
|
|
24
|
-
]
|
|
25
|
-
};
|
package/unit.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { isStr, alias } from './util.js'
|
|
2
|
-
|
|
3
|
-
class Dim {
|
|
4
|
-
constructor(value, unit) {
|
|
5
|
-
if (isStr(value)) {
|
|
6
|
-
this.parse(value)
|
|
7
|
-
} else {
|
|
8
|
-
this.value = value
|
|
9
|
-
this.unit = unit
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
clone() {
|
|
14
|
-
return new Dim(this.value, this.unit)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
parse(str) {
|
|
18
|
-
const parts = str.match(/([-+]?[0-9.]+)([%\w]*)/)
|
|
19
|
-
if (parts) {
|
|
20
|
-
const [, value, unit] = parts
|
|
21
|
-
this.value = value
|
|
22
|
-
this.unit = unit
|
|
23
|
-
}
|
|
24
|
-
throw new SyntaxError(`Could not parse ${str} as a CSS Dimention`)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
toString() {
|
|
28
|
-
return `${this.value}${this.unit}`
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
[Symbol.toPrimitive](hint) {
|
|
32
|
-
if (hint === 'string') {
|
|
33
|
-
return this.toString()
|
|
34
|
-
}
|
|
35
|
-
return this.value
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
alias(Dim, {
|
|
40
|
-
toString: 'toJSON'
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
export function isDim(val) {
|
|
44
|
-
return val instanceof Dim
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export function perc(num) {
|
|
48
|
-
return new Dim(num, '%')
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function em(num) {
|
|
52
|
-
return new Dim(num, 'em')
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export function rem(num) {
|
|
56
|
-
return new Dim(num, 'rem')
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export function px(num) {
|
|
60
|
-
return new Dim(num, 'px')
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export function vh(num) {
|
|
64
|
-
return new Dim(num, 'vh')
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export function vw(num) {
|
|
68
|
-
return new Dim(num, 'vw')
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export function col(r, g, b, a) {
|
|
72
|
-
if (g === undefined && b === undefined && a === undefined) {
|
|
73
|
-
if (isStr(r, 1)) {
|
|
74
|
-
return `#${r}`
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
throw new Error('TODO: Use case not implemented yet')
|
|
78
|
-
}
|
package/util.js
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
export const INDENT = ' '
|
|
2
|
-
export const NEWLINE = '\n'
|
|
3
|
-
|
|
4
|
-
export function isArr(x) {
|
|
5
|
-
return Array.isArray(x)
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export function arrFrom(x) {
|
|
9
|
-
return Array.from(x)
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function toArray(a) {
|
|
13
|
-
return isArr(a) ? a : [a]
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function ind(indentation, addition = 0) {
|
|
17
|
-
if (indentation < 0) {
|
|
18
|
-
return ''
|
|
19
|
-
}
|
|
20
|
-
indentation += addition
|
|
21
|
-
if (ind.cache[indentation] === undefined) {
|
|
22
|
-
ind.cache[indentation] = INDENT.repeat(indentation)
|
|
23
|
-
}
|
|
24
|
-
return ind.cache[indentation]
|
|
25
|
-
}
|
|
26
|
-
ind.cache = ['', INDENT]
|
|
27
|
-
|
|
28
|
-
export function nl(indentation) {
|
|
29
|
-
return indentation < 0 ? '' : NEWLINE
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export function mapKeyVal(obj, fn) {
|
|
33
|
-
return Object.entries(obj).map(([k, v]) => fn(k, v, obj))
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function isObj(a) {
|
|
37
|
-
return a && typeof a === 'object'
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export function isStr(a, minLength = 0) {
|
|
41
|
-
return typeof a === 'string' && a.length >= minLength
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function isNum(a) {
|
|
45
|
-
return typeof a === 'number' && Number.isFinite(a)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function isFn(a) {
|
|
49
|
-
return typeof a === 'function'
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export function isBool(a) {
|
|
53
|
-
return typeof a === 'boolean'
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function isDef(a) {
|
|
57
|
-
return a !== undefined
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function camel2kebab(str) {
|
|
61
|
-
return str.replace(/([A-Z])/g, ch => '-' + ch.toLowerCase())
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export function cssValue(v) {
|
|
65
|
-
if (isArr(v)) {
|
|
66
|
-
return v.join(' ')
|
|
67
|
-
}
|
|
68
|
-
return v
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function embed(start, end, ...contents) {
|
|
72
|
-
return start + contents.join('') + end
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export function par(...strArr) {
|
|
76
|
-
return embed('(', ')', ...strArr)
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export function qut(...strArr) {
|
|
80
|
-
const str = strArr.join('').replace('"', '\\"')
|
|
81
|
-
return embed('"', '"', str)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export function ent(entity) {
|
|
85
|
-
if (isStr(entity)) {
|
|
86
|
-
return '&' + entity + ';'
|
|
87
|
-
} else if (isNum(entity) && Number.isInteger(entity)) {
|
|
88
|
-
return `&#${entity};`
|
|
89
|
-
}
|
|
90
|
-
throw new TypeError(`Cannot make HTML entity from ${entity}`)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export function sqBra(...strArr) {
|
|
94
|
-
return embed('[', ']', ...strArr)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export function rnd(prefix) {
|
|
98
|
-
const randomStr = Math.random().toString(36).substr(2)
|
|
99
|
-
// the resulting string should always start with a letter, otherwise it won't work as class or id
|
|
100
|
-
return isStr(prefix) ? `${prefix}-${randomStr}` : randomStr
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export function alias(obj, aliasDic) {
|
|
104
|
-
const prt = obj.prototype
|
|
105
|
-
|
|
106
|
-
function assignTarget(dst, src) {
|
|
107
|
-
if (prt[dst] !== undefined) {
|
|
108
|
-
throw new Error(`${obj.name} already has a method called ${dst}`)
|
|
109
|
-
}
|
|
110
|
-
prt[dst] = prt[src]
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
mapKeyVal(aliasDic, (src, dst) => {
|
|
114
|
-
if (isArr(dst)) {
|
|
115
|
-
dst.forEach(d => assignTarget(d, src))
|
|
116
|
-
} else {
|
|
117
|
-
assignTarget(dst, src)
|
|
118
|
-
}
|
|
119
|
-
})
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const ranOnce = Symbol('ran once flag')
|
|
123
|
-
export function runOnce(fn, ...args) {
|
|
124
|
-
if (isFn(fn) && !fn[ranOnce]) {
|
|
125
|
-
fn.apply(undefined, args)
|
|
126
|
-
fn[ranOnce] = true
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
export const doc = {
|
|
131
|
-
el(tagName, ns) {
|
|
132
|
-
return isStr(ns) ? document.createElementNS(ns, tagName) : document.createElement(tagName)
|
|
133
|
-
},
|
|
134
|
-
frag() {
|
|
135
|
-
return document.createDocumentFragment()
|
|
136
|
-
},
|
|
137
|
-
text(...strArr) {
|
|
138
|
-
return document.createTextNode(String(strArr.flat().join('')))
|
|
139
|
-
},
|
|
140
|
-
comm(...strArr) {
|
|
141
|
-
return document.createComment(String(strArr.flat().join('')))
|
|
142
|
-
},
|
|
143
|
-
get body() {
|
|
144
|
-
return document.body
|
|
145
|
-
},
|
|
146
|
-
get head() {
|
|
147
|
-
return document.body.head
|
|
148
|
-
},
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
export function isComponent(obj) {
|
|
152
|
-
return isObj(obj) && isObj(obj.root)
|
|
153
|
-
}
|