From 467a647e52558258f5efba3315924fc482b9c39a Mon Sep 17 00:00:00 2001 From: "Johnsonmach6@gmail.com" Date: Thu, 7 Sep 2023 05:54:03 +0100 Subject: [PATCH] v2.5.0 --- README.md | 7 +- index.html | 4 +- modules/index.html | 2 +- .../beta/xjsx.2.5.0.js | 7 +- xjsx.js | 739 +----------------- 5 files changed, 21 insertions(+), 738 deletions(-) rename modules/xjsx.2.2.0.js => release/beta/xjsx.2.5.0.js (99%) diff --git a/README.md b/README.md index d482f90..24e9da9 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,9 @@ B: [Option B](advance/README.B.md) is also recommended, as both patterns are treated as comments by HTML rendering engines. ## Installation -To start using XJSX, simply include the [source file or URL](https://owens94819.github.io/XJSX/release/beta/xjsx.2.1.2.js) in your HTML head: +To start using XJSX, simply include the [source file or +URL](https://owens94819.github.io/XJSX/release/beta/xjsx.2.2.0.js) in your HTML +head: ```xml @@ -53,7 +55,8 @@ To start using XJSX, simply include the [source file or URL](https://owens94819. ``` - ***Download XJSX [`here`](https://owens94819.github.io/XJSX/release/beta/xjsx.2.1.2.js)*** + ***Download XJSX + [`here`](https://owens94819.github.io/XJSX/release/beta/xjsx.2.2.0.js)*** ## XJSX Keywords diff --git a/index.html b/index.html index 18741af..6ca1fce 100644 --- a/index.html +++ b/index.html @@ -1,7 +1,9 @@ - + + + xjsx diff --git a/modules/index.html b/modules/index.html index 845e986..42b836f 100644 --- a/modules/index.html +++ b/modules/index.html @@ -24,7 +24,7 @@ } - + diff --git a/modules/xjsx.2.2.0.js b/release/beta/xjsx.2.5.0.js similarity index 99% rename from modules/xjsx.2.2.0.js rename to release/beta/xjsx.2.5.0.js index e5aa6d0..18e03b5 100644 --- a/modules/xjsx.2.2.0.js +++ b/release/beta/xjsx.2.5.0.js @@ -1,9 +1,8 @@ -/*! XJSX v ?.?.? - 2-09-2023* */ +/* XJSX v 2.5.0 - 2-09-2023 */ /*** - * updated - * fix property name convention between (_remove & removed) @core.CALLBACK_PROTOTYPE & @core._observer & @core.XJSXNodeList>append... - * for-each eval bug fixed + * + * */ (function (window,exec) { diff --git a/xjsx.js b/xjsx.js index adf0ee6..18e03b5 100644 --- a/xjsx.js +++ b/xjsx.js @@ -1,12 +1,10 @@ -/*! XJSX v 2.2.0 - 7-09-2023* */ +/* XJSX v 2.5.0 - 2-09-2023 */ /*** * * */ - - (function (window,exec) { var MICRO = 0xA; var METHOD = 0xB; @@ -17,7 +15,6 @@ var time = 0; - var __core__ = { _observer: (window.MutationObserver && @@ -1400,731 +1397,6 @@ }, ]); - /** use-effect √ **/ - __core__.createModule([ - { - /*keyword: "animate",*/ - keyword: "use-effect", - callback: function (arg, node) { - try { - arg = this.eval("[" + arg + "]"); - var param = arg[0]; - if (node) { - var put = node.putChild; - var id=Date.now()+"-"+Math.random(); - var doc; - node.putChild = function (n) { - doc = document.createElement("x-fragment"); - if (n instanceof NodeList) { - while (n[0]) { - doc.appendChild(n[0]); - } - } else { - doc.appendChild(n); - } - doc.XJSXEffectId=id - // console.log(node.id); - var obj={previousElement:void 0} - obj.resolve = node.x_addChild(doc); - obj.newElement = doc - - var pr=doc.previousSibling; - if (pr&&(pr=pr.XJSXEffectId)) { - obj.previousElement= doc.previousSibling - } - - obj.arguments =arg - - __core__.effect[param] && - // __core__.effect[param](doc, r, arg); - __core__.effect[param](obj); - }; - } else { - throw "Unexpected token 'animate'"; - } - } catch (err) { - console.error("animate:", this.micro_parameter, err + ""); - } - }, - type: MICRO, - }, - ]); - - /** html-element **/ - __core__.createModule([ - { - keyword: "html-element", - type: KEYWORD, - onload: function (arg) { - var elm; - var e = __core__.parseParameter(arg, this.eval); - var params = e.parameter; - - var _arg = [this.global.elm = elm = document.createElement(params[0])] - - if ("object" === typeof params[1]) { - for (var att in params[1]) { - var v = params[1][att] - if (v instanceof Object /*elm[att]!==void 0*/ /*elm.hasOwnProperty(att)*/) { - elm[att] = v - } else { - elm.setAttribute(att, v) - } - } - } - - - for (var i = 0; i < e.arguments.length; i++) { - this.eval(_arg[i], e.arguments[i]); - } - }, - onprogress: function () { - - }, - callback: function () { - this.appendAllTo(this.global.elm) - this.putChild(this.global.elm) - } - } - ]) - - /** if **/ - __core__.createModule([ - { - keyword: "if", - type: KEYWORD, - onload: function (q) { - try { - !(this.global.q = this.eval("(" + q + ")") ? true : false) && - this.killProcess(); - } catch (e) { - return console.error("if:", q, e + ""); - } - }, - onprogress: function () { - !this.global.q && this.delete(); - }, - callback: function () { - if (this.global.q) { - this.global.done = true; - } - - - }, - }, - { - keyword: "else-if", - onload: function (q) { - if (this.global.q || this.global.done) { - this.global.q = false; - this.killProcess(); - return; - } - try { - !(this.global.q = this.eval("(" + q + ")") ? true : false) && - this.killProcess(); - } catch (e) { - return console.error("if,else-if", q, e + ""); - } - }, - onprogress: function () { - !this.global.q && this.delete(); - }, - callback: function () { - if (this.global.q) { - this.global.done = true; - } - }, - }, - { - keyword: "else", - onload: function () { - if (this.global.done) { - this.global.q = false; - this.killProcess(); - } else { - this.global.q = true; - } - }, - onprogress: function () { - !this.global.q && this.delete(); - }, - callback: function () { - this.terminate(); - - }, - }, - ]); - - /** print √ **/ - __core__.createModule([ - { - keyword: "print", - callback: function (e, node, exec) { - try { - node.putChild(exec("[" + e + "][0]")); - } catch (err) { - console.error("print:", e, err + ""); - e = ""; - } - }, - type: METHOD, - }, - ]); - - /** print-html **/ - __core__.createModule([ - { - keyword: "print-html", - callback: function (e, node, exec) { - if (e != 0) { - try { - var tmp = - __core__.tmp || (__core__.tmp = document.createElement("span")); - tmp.innerHTML = exec(e); - - node.putChild(tmp.childNodes); - } catch (err) { - console.error("print-html:", e, err + ""); - } - } - }, - type: METHOD, - }, - ]); - - /** parse-json **/ - __core__.createModule([ - { - keyword: "parse-json", - callback: function (e, node, exec) { - if (e != 0) { - try { - exec("(" + e + ")=JSON.parse(" + e + ")", ""); - } catch (err) { - console.error("parse-json:", e, err + ""); - } - } - node.remove(); - }, - type: METHOD, - }, - ]); - - /** use-template √ **/ - __core__.createModule([ - { - keyword: "use-template", - callback: function (tmp, node, exec) { - var e = tmp; - var snapshot; - - try { - (tmp = exec("[" + e + "]")), (snapshot = tmp[1]), (tmp = tmp[0]); - if (("string" === typeof tmp) && (tmp in __core__.customTemplates)) { - console.warn("alpha implementation "); - tmp = __core__.customTemplates[tmp]; - tmp instanceof HTMLTemplateElement && (tmp = tmp.content || tmp) || - !(tmp instanceof Node) && (tmp = document.createTextNode(tmp + "")); - } else if (tmp instanceof Node) { - tmp instanceof HTMLTemplateElement && (tmp = tmp.content || tmp); - } else { - tmp = document.querySelector('template[id="' + tmp + '"]'); - if (tmp) { - tmp = tmp.content || tmp; - } - } - - if (!tmp) { - throw "could not render such template"; - } - - if (snapshot || snapshot === 0) { - console.warn( - "use-template:...; " + snapshot, - " alpha implementation" - ); - /** disabling this for now **/ - if (tmp.fragment) { - /* - console.log(tmp); - delete tmp.disabled - delete tmp.fromXJSXCore - console.log(tmp.fragment.parentNode); - tmp.fragment.remove() - */ - snapshot === 0 && tmp.fragment.remove(); - - /*__core__.XJSXCompiler(tmp.fragment, eval)*/ - tmp.fragment = tmp.fragment.cloneNode(true); - } else { - tmp.fragment = document.createElement("x-fragment"); - tmp.fragment.appendChild(tmp.cloneNode(true)); - __core__.XJSXCompiler(tmp.fragment, exec); - } - node.putChild(tmp.fragment); - } else { - node.putChild(__core__.XJSXCompiler(tmp.cloneNode(true), exec)); - } - } catch (err) { - - console.error("use-template:", e, err + ""); - } - }, - type: METHOD, - }, - ]); - - /** eval √ **/ - __core__.createModule([ - { - keyword: "eval", - callback: function (e, node, exec) { - try { - exec(e.trim().replace(/^"([^]+)"$/g, "$1")); - } catch (err) { - console.error("eval:", e, err.toString()); - } - node.remove(); - }, - type: METHOD, - }, - ]); - - /** console-log √ **/ - __core__.createModule([ - { - keyword: "console-log", - callback: function (e, node, exec) { - e = e.trim(); - if (!e) { - return; - } - try { - exec("console.log(" + e + ")"); - } catch (err) { - console.error("console-log:", e, err.toString()); - } - node.remove(); - }, - type: METHOD, - }, - ]); - - /** data √ **/ - __core__.createModule([ - { - keyword: "data", - callback: function (e, node, exec) { - try { - e = exec("[" + e + "][0]"); - __core__.addEventListener("data/" + e, function (ev) { - (node.isVisible() && !node.putChild(ev.detail)) || - removeEventListener("data/" + e, arguments.callee); - }); - } catch (err) { - console.error("data:", e, err + ""); - } - }, - type: METHOD, - }, - ]); - - /** fetch √ **/ - __core__.createModule([ - { - keyword: "fetch", - onload: function (arg) { - var opt; - var url; - var http = new XMLHttpRequest(); - this.global.http = http; - try { - arg = this.eval("[" + arg + "]"); - url = arg[0]; - if ("object" === typeof arg[1]) { - opt = arg[1]; - } - } catch (e) { - return console.error(this.parentParams.join(":"), e); - } - - http.open((opt && opt.method) || "get", url); - - opt && - (opt.type && (http.responseType = opt.type), - opt.withCredentials && (http.withCredentials = opt.withCredentials)); - if (opt && opt.headers) { - for (var header in opt.headers) { - http.setRequestHeader(header, opt.headers[header]); - } - } - - try { - http.send(opt && opt.body); - } catch (error) { - setTimeout(function () { - __core__.dispatcher(http, "error") - }, 0); - } - }, - type: FUNCTION, - }, - { - keyword: "then", - onload: function () { - this.killProcess(); - }, - onprogress: function () { - this.disable(); - }, - callback: function (p) { - var self = this; - var http = this.global.http; - var doc = document.createDocumentFragment(); - this.appendAllTo(doc); - - http.addEventListener("load", function () { - p = p.split(","); - - var argument; - try { - argument = [ - { - responseURL: http.responseURL, - status: http.status, - statusText: http.statusText, - response: http.response || "", - responseType: http.responseType, - toString: function () { - return this.response + "" - } - } - ]; - } catch (e) { - argument = [http.response || ""]; - console.error( - self.parentParams.join(":") + - "\nresponse could not be converted to " + - http.responseType + - " type" - ); - } - http.abort(); - http = delete self.global.http; - - try { - /* code */ - for (var i = 0; i < p.length; i++) { - self.eval(argument[i], p[i]); - } - } catch (err) { - console.error( - self.parentParams.join(":") + "...then:", - p.join(","), - err + "" - ); - } - self.putChild(__core__.XJSXCompiler(doc, self.eval)); - }); - }, - }, - { - keyword: "catch", - onload: function () { - this.killProcess(); - }, - onprogress: function () { - this.disable(); - }, - callback: function (p) { - var self = this; - var http = this.global.http; - var doc = document.createDocumentFragment(); - this.appendAllTo(doc); - http.addEventListener("error", function () { - p = p.split(","); - - try { - for (var i = 0; i < p.length; i++) { - self.eval(void 0, p[i]); - } - } catch (err) { - console.error( - self.parentParams.join(":") + "...catch:", - p.join(","), - err + "" - ); - } - http = delete self.global.http; - - self.putChild(__core__.XJSXCompiler(doc, self.eval)); - }); - !http.readyState && __core__.dispatcher(http, "error"); - }, - }, - ]); - - /** include**/ - __core__.createModule([ - { - keyword: "include", - callback: function (url) { - var url; - try { - if (!(url = this.eval("[" + url + "][0]"))) { - throw "'" + url + "'" + " is not a valid argument"; - } - - var self = this; - /*XRequest(url,function() { - - self.putChild(__core__.XJSXCompiler(__core__.domParser(arguments[0]),self.eval).childNodes) - },true)*/ - - var http = new XMLHttpRequest(); - self.global.http = http; - http.addEventListener("load", function () { - /*if (!http.response) { - __core__.dispatcher(http,"error") - console.error(url+"\npath could not be included"+"\nmake sure the provided url is a valid html file") - return - } - */ - - self.putChild( - __core__.XJSXCompiler( - __core__.domParser(http.response, http.abort()), - self.eval - ).childNodes - ); - }); - - http.open("get", url); - http.send(); - } catch (e) { - console.error("include:", url, e); - } - }, - type: FUNCTION, - }, - { - keyword: "catch", - onload: function () { - this.killProcess(); - }, - onprogress: function () { - this.disable(); - }, - callback: function () { - var self = this; - var doc = document.createDocumentFragment(); - this.appendAllTo(doc); - - if (!self.global.http) { - self.putChild(__core__.XJSXCompiler(doc, self.eval)); - console.error(self.parentParams.join(":"), "uncaught error"); - return; - } - self.global.http.addEventListener("error", function () { - - self.putChild(__core__.XJSXCompiler(doc, self.eval)); - this.abort(); - delete self.global.http; - }); - }, - }, - ]); - - /** for-each √ **/ - __core__.createModule([ - { - keyword: "for-each", - type: FKEYWORD, - onload: function (p) { - this.global.callback = []; - - this.global.p = __core__.parseParameter(p, this.eval); - - - this.killProcess(); - }, - onprogress: function () { - this.disable(); - }, - onend: function (arg) { - try { - - var self = this; - // var exec = this.eval() - var p = this.global.p; - var data = p.parameter[0]; - var useDelay = p.parameter[1]; - - - var foo = function () { - var exec = self.eval() - for (var i = 0; i < p.arguments.length; i++) { - exec(arguments[i], p.arguments[i]); - } - - for (var i = 0; i < self.global.callback.length; i++) { - self.global.callback[i].addChild( - __core__.XJSXCompiler( - self.global.callback[i].e.cloneNode(true), - exec - ), - true - ); - /**self.global.callback[i]();**/ - } - }; - - - /* if (data && "object" !== typeof data) { - throw "not an Object."; - } - - */ - if (!self.isVisible()) { - // self.terminate(); - return; - } - if (!useDelay&&useDelay!==0) { - if ("number" === typeof data) { - for (var i = 0; i < data; i++) { - foo(i); - } - } else if (data instanceof Array) { - for (var i = 0; i < data.length; i++) { - foo(data[i], i); - } - } else if (data instanceof Object) { - for (var prop in data) { - foo(data[prop], prop); - } - } else { - throw data + " has no properties."; - } - } else { - - var lp = __core__.loop(data, foo, useDelay, self); - - "number" === typeof data && !lp.nm() - || - data instanceof Array && !lp.arr() - || - data instanceof Object && !lp.obj() - || (function () { - //has no properties - throw data + " has no properties." - })() - } - } catch (err) { - // console.log(err); - console.error( - "for-each:", - arg, - err + "" - ); - self.remove(); - } - }, - callback: function () { - - // var self = this; - - this.appendAllTo((this.e = document.createDocumentFragment())); - /* if (1 > self.d.childNodes.length) { - return; - }*/ - - this.global.callback.push(this); - /* return - self.global.callback.push(function () { - self.addChild( - __core__.XJSXCompiler(doc.cloneNode(true), self.eval), - true - ); - });*/ - }, - }, - { - keyword: "break", - }, - { - keyword: "continue", - onload: function (p) { - this.killProcess(); - }, - onprogress: function () { - this.disable(); - }, - callback: function () { - // var self = this; - this.appendAllTo((this.e = document.createDocumentFragment())); - - this.global.callback.push(this); - /* return - self.global.callback.push(function () { - self.addChild( - __core__.XJSXCompiler(doc.cloneNode(true), self.eval), - true - ); - });*/ - }, - }, - ]); - - /** on √ **/ - __core__.createModule([ - { - keyword: "on", - type: FUNCTION, - onload: function () { - this.killProcess(); - }, - onprogress: function () { - this.disable(); - }, - callback: function (a) { - try { - var e = __core__.parseParameter(a, this.eval); - // console.log(e); - var param = e.parameter[0]; - e.parameter = void 0; - if (!param) { - throw "empty parameter"; - } - - /* handle here */ - - var self = this; - var doc = document.createDocumentFragment(), - _doc; - self.appendAllTo(doc); - - __core__.addEventListener(param, function () { - if (self.isVisible()) { - for (var i = 0; i < e.arguments.length; i++) { - self.eval(arguments[i], e.arguments[i]); - } - self.putChild( - __core__.XJSXCompiler(doc.cloneNode(true), self.eval) - ); - } else { - removeEventListener(param, arguments.callee); - } - }); - } catch (err) { - - console.error("on:", a, err + ""); - } - }, - }, - ]); - - !window.DISABLE_XJSX/*||!document.documentElement.attributes.xjsx*/ && { @@ -2185,7 +1457,12 @@ }) }, customTemplates: __core__.customTemplates, + getEffect:function(n){ + return __core__.effect[n] + }, eval: __core__._eval(exec), + domParser: __core__.domParser, + dispatcher: __core__.dispatcher, event: { emit: __core__.dispatchEvent, on: __core__.addEventListener, @@ -2247,7 +1524,9 @@ }, }; }, - __createModule__: __core__.createModule, + __createModule__: function () { + __core__.createModule(arguments[0]) + }, __XJSXCORE__:function(){ return __core__; }