1.2.39 recover window
This commit is contained in:
50
dist/sigpro.esm.js
vendored
50
dist/sigpro.esm.js
vendored
@@ -1,12 +1,12 @@
|
|||||||
// src/sigpro.js
|
// src/sigpro.js
|
||||||
var isFunc = (f) => typeof f == "function";
|
var isF = (f) => typeof f == "function";
|
||||||
var isObj = (o) => o && typeof o == "object";
|
var isO = (o) => o && typeof o == "object";
|
||||||
var isArr = Array.isArray;
|
var isA = Array.isArray;
|
||||||
var doc = typeof document < "u" ? document : null;
|
var doc = typeof document < "u" ? document : null;
|
||||||
var txt = (s) => doc.createTextNode(s == null ? "" : String(s));
|
var txt = (s) => doc.createTextNode(s == null ? "" : String(s));
|
||||||
var toNd = (n) => n?._rt ? n._cnt : n instanceof Node ? n : txt(n);
|
var toNd = (n) => n?._rt ? n._cnt : n instanceof Node ? n : txt(n);
|
||||||
var Fragment = (p) => p.children;
|
var Fragment = (p) => p.children;
|
||||||
var val = (v) => isFunc(v) ? v() : v;
|
var val = (v) => isF(v) ? v() : v;
|
||||||
var aEff = null;
|
var aEff = null;
|
||||||
var aOwn = null;
|
var aOwn = null;
|
||||||
var isFlushing = 0;
|
var isFlushing = 0;
|
||||||
@@ -122,7 +122,7 @@ var trkUpd = (s, trg = 0) => {
|
|||||||
};
|
};
|
||||||
var $ = (v, k = null) => {
|
var $ = (v, k = null) => {
|
||||||
let s = new Set;
|
let s = new Set;
|
||||||
if (isFunc(v)) {
|
if (isF(v)) {
|
||||||
let c, cp = () => {
|
let c, cp = () => {
|
||||||
if (cp._dt) {
|
if (cp._dt) {
|
||||||
let p = aEff;
|
let p = aEff;
|
||||||
@@ -153,7 +153,7 @@ var $ = (v, k = null) => {
|
|||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
return (...a) => {
|
return (...a) => {
|
||||||
if (a.length) {
|
if (a.length) {
|
||||||
let n = isFunc(a[0]) ? a[0](v) : a[0];
|
let n = isF(a[0]) ? a[0](v) : a[0];
|
||||||
if (!Object.is(v, n)) {
|
if (!Object.is(v, n)) {
|
||||||
v = n;
|
v = n;
|
||||||
if (k)
|
if (k)
|
||||||
@@ -167,7 +167,7 @@ var $ = (v, k = null) => {
|
|||||||
};
|
};
|
||||||
var watch = (src, cb) => {
|
var watch = (src, cb) => {
|
||||||
let e = createEffect(cb ? () => {
|
let e = createEffect(cb ? () => {
|
||||||
let v = isArr(src) ? src.map((s) => s()) : src();
|
let v = isA(src) ? src.map((s) => s()) : src();
|
||||||
untrack(() => cb(v));
|
untrack(() => cb(v));
|
||||||
} : src);
|
} : src);
|
||||||
e();
|
e();
|
||||||
@@ -184,24 +184,24 @@ var clnNd = (n) => {
|
|||||||
};
|
};
|
||||||
var valAtt = (k, v) => v == null || v === false ? null : (DANG_ATTR.has(k) || k.startsWith("on")) && /^\s*(javascript|data|vbscript):/i.test(String(v)) ? "#" : v;
|
var valAtt = (k, v) => v == null || v === false ? null : (DANG_ATTR.has(k) || k.startsWith("on")) && /^\s*(javascript|data|vbscript):/i.test(String(v)) ? "#" : v;
|
||||||
var h = (tag, prp = {}, ch = []) => {
|
var h = (tag, prp = {}, ch = []) => {
|
||||||
if (prp instanceof Node || isArr(prp) || !isObj(prp)) {
|
if (prp instanceof Node || isA(prp) || !isO(prp)) {
|
||||||
ch = prp;
|
ch = prp;
|
||||||
prp = {};
|
prp = {};
|
||||||
}
|
}
|
||||||
if (isFunc(tag)) {
|
if (isF(tag)) {
|
||||||
let e = createEffect(() => e._res = tag(prp, { children: ch, emit: (ev, ...a) => prp[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...a) }));
|
let e = createEffect(() => e._res = tag(prp, { children: ch, emit: (ev, ...a) => prp[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...a) }));
|
||||||
e();
|
e();
|
||||||
if (e._res == null)
|
if (e._res == null)
|
||||||
return null;
|
return null;
|
||||||
let nd = e._res instanceof Node || isArr(e._res) && e._res.every((n) => n instanceof Node) ? e._res : txt(e._res);
|
let nd = e._res instanceof Node || isA(e._res) && e._res.every((n) => n instanceof Node) ? e._res : txt(e._res);
|
||||||
let att = (n) => {
|
let att = (n) => {
|
||||||
if (isObj(n) && !n._rt) {
|
if (isO(n) && !n._rt) {
|
||||||
n._m = e._m || [];
|
n._m = e._m || [];
|
||||||
n._c = e._c || new Set;
|
n._c = e._c || new Set;
|
||||||
n._oE = e;
|
n._oE = e;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
isArr(nd) ? nd.forEach(att) : att(nd);
|
isA(nd) ? nd.forEach(att) : att(nd);
|
||||||
return nd;
|
return nd;
|
||||||
}
|
}
|
||||||
let isS = SVG_TAGS.has(tag), el = isS ? doc.createElementNS(SVG_NS, tag) : doc.createElement(tag);
|
let isS = SVG_TAGS.has(tag), el = isS ? doc.createElementNS(SVG_NS, tag) : doc.createElement(tag);
|
||||||
@@ -209,7 +209,7 @@ var h = (tag, prp = {}, ch = []) => {
|
|||||||
for (let k in prp) {
|
for (let k in prp) {
|
||||||
let v = prp[k];
|
let v = prp[k];
|
||||||
if (k === "ref") {
|
if (k === "ref") {
|
||||||
isFunc(v) ? v(el) : v.current = el;
|
isF(v) ? v(el) : v.current = el;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (isS && k.startsWith("xlink:")) {
|
if (isS && k.startsWith("xlink:")) {
|
||||||
@@ -223,7 +223,7 @@ var h = (tag, prp = {}, ch = []) => {
|
|||||||
let off = () => el.removeEventListener(ev, v);
|
let off = () => el.removeEventListener(ev, v);
|
||||||
el._c.add(off);
|
el._c.add(off);
|
||||||
onUnmount(off);
|
onUnmount(off);
|
||||||
} else if (isFunc(v)) {
|
} else if (isF(v)) {
|
||||||
let e = createEffect(() => {
|
let e = createEffect(() => {
|
||||||
let r = valAtt(k, v());
|
let r = valAtt(k, v());
|
||||||
if (k === "class")
|
if (k === "class")
|
||||||
@@ -256,13 +256,13 @@ var h = (tag, prp = {}, ch = []) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const app = (c) => {
|
const app = (c) => {
|
||||||
if (isArr(c))
|
if (isA(c))
|
||||||
return c.forEach(app);
|
return c.forEach(app);
|
||||||
if (isFunc(c)) {
|
if (isF(c)) {
|
||||||
let anc = txt(""), cur = [];
|
let anc = txt(""), cur = [];
|
||||||
el.appendChild(anc);
|
el.appendChild(anc);
|
||||||
let e = createEffect(() => {
|
let e = createEffect(() => {
|
||||||
let r = c(), nxt = (isArr(r) ? r : [r]).map(toNd), ref = anc;
|
let r = c(), nxt = (isA(r) ? r : [r]).map(toNd), ref = anc;
|
||||||
cur.forEach((n) => {
|
cur.forEach((n) => {
|
||||||
n._rt ? n._del() : clnNd(n);
|
n._rt ? n._del() : clnNd(n);
|
||||||
if (n.parentNode)
|
if (n.parentNode)
|
||||||
@@ -303,7 +303,7 @@ var render = (rFn) => {
|
|||||||
if (r._rt) {
|
if (r._rt) {
|
||||||
c.add(r._del);
|
c.add(r._del);
|
||||||
cnt.appendChild(r._cnt);
|
cnt.appendChild(r._cnt);
|
||||||
} else if (isArr(r))
|
} else if (isA(r))
|
||||||
r.forEach(pRes);
|
r.forEach(pRes);
|
||||||
else
|
else
|
||||||
cnt.appendChild(r instanceof Node ? r : txt(r));
|
cnt.appendChild(r instanceof Node ? r : txt(r));
|
||||||
@@ -367,27 +367,29 @@ var mount = (c, tgt) => {
|
|||||||
return;
|
return;
|
||||||
if (MOUNTED.has(t))
|
if (MOUNTED.has(t))
|
||||||
MOUNTED.get(t)._del();
|
MOUNTED.get(t)._del();
|
||||||
let i = render(isFunc(c) ? c : () => c);
|
let i = render(isF(c) ? c : () => c);
|
||||||
t.replaceChildren(i._cnt);
|
t.replaceChildren(i._cnt);
|
||||||
MOUNTED.set(t, i);
|
MOUNTED.set(t, i);
|
||||||
return i;
|
return i;
|
||||||
};
|
};
|
||||||
if (typeof window < "u") {
|
var SigPro = { $, watch, batch, h, Fragment, render, mount, when, each, onUnmount, val, isA, isF, isO };
|
||||||
|
if (typeof window !== "undefined") {
|
||||||
|
window.SigPro = SigPro;
|
||||||
"a abbr article aside audio b blockquote br button canvas caption cite code col colgroup datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr i iframe img input ins kbd label legend li main mark meter nav object ol optgroup option output p picture pre progress section select slot small source span strong sub summary sup svg table tbody td template textarea tfoot th thead time tr u ul video".split(" ").forEach((t) => window[t] = (p, c) => h(t, p, c));
|
"a abbr article aside audio b blockquote br button canvas caption cite code col colgroup datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr i iframe img input ins kbd label legend li main mark meter nav object ol optgroup option output p picture pre progress section select slot small source span strong sub summary sup svg table tbody td template textarea tfoot th thead time tr u ul video".split(" ").forEach((t) => window[t] = (p, c) => h(t, p, c));
|
||||||
}
|
}
|
||||||
export {
|
export {
|
||||||
when,
|
|
||||||
watch,
|
watch,
|
||||||
val,
|
val,
|
||||||
render,
|
render,
|
||||||
onUnmount,
|
onUnmount,
|
||||||
mount,
|
mount,
|
||||||
isObj,
|
isO,
|
||||||
isFunc,
|
isF,
|
||||||
isArr,
|
isA,
|
||||||
h,
|
h,
|
||||||
each,
|
each,
|
||||||
batch,
|
batch,
|
||||||
|
SigPro,
|
||||||
Fragment,
|
Fragment,
|
||||||
$
|
$
|
||||||
};
|
};
|
||||||
|
|||||||
1
dist/sigpro.esm.min.js
vendored
1
dist/sigpro.esm.min.js
vendored
File diff suppressed because one or more lines are too long
113
dist/sigpro.js
vendored
113
dist/sigpro.js
vendored
@@ -1,13 +1,45 @@
|
|||||||
(() => {
|
(() => {
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __returnValue = (v) => v;
|
||||||
|
function __exportSetter(name, newValue) {
|
||||||
|
this[name] = __returnValue.bind(null, newValue);
|
||||||
|
}
|
||||||
|
var __export = (target, all) => {
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, {
|
||||||
|
get: all[name],
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true,
|
||||||
|
set: __exportSetter.bind(all, name)
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// src/sigpro.js
|
// src/sigpro.js
|
||||||
var isFunc = (f) => typeof f == "function";
|
var exports_sigpro = {};
|
||||||
var isObj = (o) => o && typeof o == "object";
|
__export(exports_sigpro, {
|
||||||
var isArr = Array.isArray;
|
watch: () => watch,
|
||||||
|
val: () => val,
|
||||||
|
render: () => render,
|
||||||
|
onUnmount: () => onUnmount,
|
||||||
|
mount: () => mount,
|
||||||
|
isO: () => isO,
|
||||||
|
isF: () => isF,
|
||||||
|
isA: () => isA,
|
||||||
|
h: () => h,
|
||||||
|
each: () => each,
|
||||||
|
batch: () => batch,
|
||||||
|
SigPro: () => SigPro,
|
||||||
|
Fragment: () => Fragment,
|
||||||
|
$: () => $
|
||||||
|
});
|
||||||
|
var isF = (f) => typeof f == "function";
|
||||||
|
var isO = (o) => o && typeof o == "object";
|
||||||
|
var isA = Array.isArray;
|
||||||
var doc = typeof document < "u" ? document : null;
|
var doc = typeof document < "u" ? document : null;
|
||||||
var txt = (s) => doc.createTextNode(s == null ? "" : String(s));
|
var txt = (s) => doc.createTextNode(s == null ? "" : String(s));
|
||||||
var toNd = (n) => n?._rt ? n._cnt : n instanceof Node ? n : txt(n);
|
var toNd = (n) => n?._rt ? n._cnt : n instanceof Node ? n : txt(n);
|
||||||
var Fragment = (p) => p.children;
|
var Fragment = (p) => p.children;
|
||||||
var val = (v) => isFunc(v) ? v() : v;
|
var val = (v) => isF(v) ? v() : v;
|
||||||
var aEff = null;
|
var aEff = null;
|
||||||
var aOwn = null;
|
var aOwn = null;
|
||||||
var isFlushing = 0;
|
var isFlushing = 0;
|
||||||
@@ -123,7 +155,7 @@
|
|||||||
};
|
};
|
||||||
var $ = (v, k = null) => {
|
var $ = (v, k = null) => {
|
||||||
let s = new Set;
|
let s = new Set;
|
||||||
if (isFunc(v)) {
|
if (isF(v)) {
|
||||||
let c, cp = () => {
|
let c, cp = () => {
|
||||||
if (cp._dt) {
|
if (cp._dt) {
|
||||||
let p = aEff;
|
let p = aEff;
|
||||||
@@ -154,7 +186,7 @@
|
|||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
return (...a) => {
|
return (...a) => {
|
||||||
if (a.length) {
|
if (a.length) {
|
||||||
let n = isFunc(a[0]) ? a[0](v) : a[0];
|
let n = isF(a[0]) ? a[0](v) : a[0];
|
||||||
if (!Object.is(v, n)) {
|
if (!Object.is(v, n)) {
|
||||||
v = n;
|
v = n;
|
||||||
if (k)
|
if (k)
|
||||||
@@ -168,7 +200,7 @@
|
|||||||
};
|
};
|
||||||
var watch = (src, cb) => {
|
var watch = (src, cb) => {
|
||||||
let e = createEffect(cb ? () => {
|
let e = createEffect(cb ? () => {
|
||||||
let v = isArr(src) ? src.map((s) => s()) : src();
|
let v = isA(src) ? src.map((s) => s()) : src();
|
||||||
untrack(() => cb(v));
|
untrack(() => cb(v));
|
||||||
} : src);
|
} : src);
|
||||||
e();
|
e();
|
||||||
@@ -185,24 +217,24 @@
|
|||||||
};
|
};
|
||||||
var valAtt = (k, v) => v == null || v === false ? null : (DANG_ATTR.has(k) || k.startsWith("on")) && /^\s*(javascript|data|vbscript):/i.test(String(v)) ? "#" : v;
|
var valAtt = (k, v) => v == null || v === false ? null : (DANG_ATTR.has(k) || k.startsWith("on")) && /^\s*(javascript|data|vbscript):/i.test(String(v)) ? "#" : v;
|
||||||
var h = (tag, prp = {}, ch = []) => {
|
var h = (tag, prp = {}, ch = []) => {
|
||||||
if (prp instanceof Node || isArr(prp) || !isObj(prp)) {
|
if (prp instanceof Node || isA(prp) || !isO(prp)) {
|
||||||
ch = prp;
|
ch = prp;
|
||||||
prp = {};
|
prp = {};
|
||||||
}
|
}
|
||||||
if (isFunc(tag)) {
|
if (isF(tag)) {
|
||||||
let e = createEffect(() => e._res = tag(prp, { children: ch, emit: (ev, ...a) => prp[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...a) }));
|
let e = createEffect(() => e._res = tag(prp, { children: ch, emit: (ev, ...a) => prp[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...a) }));
|
||||||
e();
|
e();
|
||||||
if (e._res == null)
|
if (e._res == null)
|
||||||
return null;
|
return null;
|
||||||
let nd = e._res instanceof Node || isArr(e._res) && e._res.every((n) => n instanceof Node) ? e._res : txt(e._res);
|
let nd = e._res instanceof Node || isA(e._res) && e._res.every((n) => n instanceof Node) ? e._res : txt(e._res);
|
||||||
let att = (n) => {
|
let att = (n) => {
|
||||||
if (isObj(n) && !n._rt) {
|
if (isO(n) && !n._rt) {
|
||||||
n._m = e._m || [];
|
n._m = e._m || [];
|
||||||
n._c = e._c || new Set;
|
n._c = e._c || new Set;
|
||||||
n._oE = e;
|
n._oE = e;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
isArr(nd) ? nd.forEach(att) : att(nd);
|
isA(nd) ? nd.forEach(att) : att(nd);
|
||||||
return nd;
|
return nd;
|
||||||
}
|
}
|
||||||
let isS = SVG_TAGS.has(tag), el = isS ? doc.createElementNS(SVG_NS, tag) : doc.createElement(tag);
|
let isS = SVG_TAGS.has(tag), el = isS ? doc.createElementNS(SVG_NS, tag) : doc.createElement(tag);
|
||||||
@@ -210,7 +242,7 @@
|
|||||||
for (let k in prp) {
|
for (let k in prp) {
|
||||||
let v = prp[k];
|
let v = prp[k];
|
||||||
if (k === "ref") {
|
if (k === "ref") {
|
||||||
isFunc(v) ? v(el) : v.current = el;
|
isF(v) ? v(el) : v.current = el;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (isS && k.startsWith("xlink:")) {
|
if (isS && k.startsWith("xlink:")) {
|
||||||
@@ -224,7 +256,7 @@
|
|||||||
let off = () => el.removeEventListener(ev, v);
|
let off = () => el.removeEventListener(ev, v);
|
||||||
el._c.add(off);
|
el._c.add(off);
|
||||||
onUnmount(off);
|
onUnmount(off);
|
||||||
} else if (isFunc(v)) {
|
} else if (isF(v)) {
|
||||||
let e = createEffect(() => {
|
let e = createEffect(() => {
|
||||||
let r = valAtt(k, v());
|
let r = valAtt(k, v());
|
||||||
if (k === "class")
|
if (k === "class")
|
||||||
@@ -257,13 +289,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const app = (c) => {
|
const app = (c) => {
|
||||||
if (isArr(c))
|
if (isA(c))
|
||||||
return c.forEach(app);
|
return c.forEach(app);
|
||||||
if (isFunc(c)) {
|
if (isF(c)) {
|
||||||
let anc = txt(""), cur = [];
|
let anc = txt(""), cur = [];
|
||||||
el.appendChild(anc);
|
el.appendChild(anc);
|
||||||
let e = createEffect(() => {
|
let e = createEffect(() => {
|
||||||
let r = c(), nxt = (isArr(r) ? r : [r]).map(toNd), ref = anc;
|
let r = c(), nxt = (isA(r) ? r : [r]).map(toNd), ref = anc;
|
||||||
cur.forEach((n) => {
|
cur.forEach((n) => {
|
||||||
n._rt ? n._del() : clnNd(n);
|
n._rt ? n._del() : clnNd(n);
|
||||||
if (n.parentNode)
|
if (n.parentNode)
|
||||||
@@ -304,7 +336,7 @@
|
|||||||
if (r._rt) {
|
if (r._rt) {
|
||||||
c.add(r._del);
|
c.add(r._del);
|
||||||
cnt.appendChild(r._cnt);
|
cnt.appendChild(r._cnt);
|
||||||
} else if (isArr(r))
|
} else if (isA(r))
|
||||||
r.forEach(pRes);
|
r.forEach(pRes);
|
||||||
else
|
else
|
||||||
cnt.appendChild(r instanceof Node ? r : txt(r));
|
cnt.appendChild(r instanceof Node ? r : txt(r));
|
||||||
@@ -368,16 +400,26 @@
|
|||||||
return;
|
return;
|
||||||
if (MOUNTED.has(t))
|
if (MOUNTED.has(t))
|
||||||
MOUNTED.get(t)._del();
|
MOUNTED.get(t)._del();
|
||||||
let i = render(isFunc(c) ? c : () => c);
|
let i = render(isF(c) ? c : () => c);
|
||||||
t.replaceChildren(i._cnt);
|
t.replaceChildren(i._cnt);
|
||||||
MOUNTED.set(t, i);
|
MOUNTED.set(t, i);
|
||||||
return i;
|
return i;
|
||||||
};
|
};
|
||||||
if (typeof window < "u") {
|
var SigPro = { $, watch, batch, h, Fragment, render, mount, when, each, onUnmount, val, isA, isF, isO };
|
||||||
|
if (typeof window !== "undefined") {
|
||||||
|
window.SigPro = SigPro;
|
||||||
"a abbr article aside audio b blockquote br button canvas caption cite code col colgroup datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr i iframe img input ins kbd label legend li main mark meter nav object ol optgroup option output p picture pre progress section select slot small source span strong sub summary sup svg table tbody td template textarea tfoot th thead time tr u ul video".split(" ").forEach((t) => window[t] = (p, c) => h(t, p, c));
|
"a abbr article aside audio b blockquote br button canvas caption cite code col colgroup datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr i iframe img input ins kbd label legend li main mark meter nav object ol optgroup option output p picture pre progress section select slot small source span strong sub summary sup svg table tbody td template textarea tfoot th thead time tr u ul video".split(" ").forEach((t) => window[t] = (p, c) => h(t, p, c));
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/sigpro.utils.js
|
// src/sigpro.utils.js
|
||||||
|
var exports_sigpro_utils = {};
|
||||||
|
__export(exports_sigpro_utils, {
|
||||||
|
t: () => t,
|
||||||
|
setLocale: () => setLocale,
|
||||||
|
router: () => router,
|
||||||
|
db: () => db,
|
||||||
|
addLang: () => addLang
|
||||||
|
});
|
||||||
var router = (routes) => {
|
var router = (routes) => {
|
||||||
const getHash = () => window.location.hash.slice(1) || "/";
|
const getHash = () => window.location.hash.slice(1) || "/";
|
||||||
const path = $(getHash());
|
const path = $(getHash());
|
||||||
@@ -400,7 +442,7 @@
|
|||||||
params[p.slice(1)] = cur.split("/").filter(Boolean)[i];
|
params[p.slice(1)] = cur.split("/").filter(Boolean)[i];
|
||||||
});
|
});
|
||||||
router.params(params);
|
router.params(params);
|
||||||
currentView = render(() => isFunc(route.component) ? route.component(params) : route.component);
|
currentView = render(() => isF(route.component) ? route.component(params) : route.component);
|
||||||
hook.replaceChildren(currentView.container);
|
hook.replaceChildren(currentView.container);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -414,6 +456,26 @@
|
|||||||
router.to = (p) => window.location.hash = p.replace(/^#?\/?/, "#/");
|
router.to = (p) => window.location.hash = p.replace(/^#?\/?/, "#/");
|
||||||
router.back = () => window.history.back();
|
router.back = () => window.history.back();
|
||||||
router.path = () => window.location.hash.replace(/^#/, "") || "/";
|
router.path = () => window.location.hash.replace(/^#/, "") || "/";
|
||||||
|
var db = async (url, data = {}, loading = null) => {
|
||||||
|
if (loading)
|
||||||
|
loading(true);
|
||||||
|
try {
|
||||||
|
const res = await fetch(url, {
|
||||||
|
method: "POST",
|
||||||
|
headers: { "Content-Type": "application/json" },
|
||||||
|
body: JSON.stringify(data),
|
||||||
|
credentials: "include"
|
||||||
|
});
|
||||||
|
if (!res.ok) {
|
||||||
|
const errorText = await res.text();
|
||||||
|
throw new Error(`Error ${res.status}: ${errorText}`);
|
||||||
|
}
|
||||||
|
return await res.json();
|
||||||
|
} finally {
|
||||||
|
if (loading)
|
||||||
|
loading(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
var currentLocale = $("en");
|
var currentLocale = $("en");
|
||||||
var translations = {};
|
var translations = {};
|
||||||
var addLang = (obj) => {
|
var addLang = (obj) => {
|
||||||
@@ -423,12 +485,19 @@
|
|||||||
Object.assign(translations[locale], obj[locale]);
|
Object.assign(translations[locale], obj[locale]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
var setLocale = (locale) => {
|
||||||
|
if (locale && translations[locale]) {
|
||||||
|
currentLocale(locale);
|
||||||
|
}
|
||||||
|
};
|
||||||
var t = (key) => {
|
var t = (key) => {
|
||||||
return () => translations[currentLocale()]?.[key] ?? key;
|
return () => translations[currentLocale()]?.[key] ?? key;
|
||||||
};
|
};
|
||||||
|
|
||||||
// src/build_umd.js
|
// src/build_umd.js
|
||||||
if (typeof window !== "undefined") {
|
if (typeof window !== "undefined") {
|
||||||
Object.assign(window, { $, watch, h, Fragment, when, each, router, addLang, t, mount, batch, isArr, isFunc, isObj });
|
const SigPro2 = { ...exports_sigpro, ...exports_sigpro_utils };
|
||||||
|
window.SigPro = SigPro2;
|
||||||
|
Object.assign(window, SigPro2);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|||||||
1
dist/sigpro.min.js
vendored
1
dist/sigpro.min.js
vendored
File diff suppressed because one or more lines are too long
318
dist/sigpro.utils.js
vendored
318
dist/sigpro.utils.js
vendored
@@ -1,319 +1,5 @@
|
|||||||
// src/sigpro.js
|
|
||||||
var isFunc = (f) => typeof f == "function";
|
|
||||||
var isObj = (o) => o && typeof o == "object";
|
|
||||||
var isArr = Array.isArray;
|
|
||||||
var doc = typeof document < "u" ? document : null;
|
|
||||||
var txt = (s) => doc.createTextNode(s == null ? "" : String(s));
|
|
||||||
var toNd = (n) => n?._rt ? n._cnt : n instanceof Node ? n : txt(n);
|
|
||||||
var aEff = null;
|
|
||||||
var aOwn = null;
|
|
||||||
var isFlushing = 0;
|
|
||||||
var bDepth = 0;
|
|
||||||
var eQ = new Set;
|
|
||||||
var MOUNTED = new WeakMap;
|
|
||||||
var SVG_NS = "http://www.w3.org/2000/svg";
|
|
||||||
var XLINK = "http://www.w3.org/1999/xlink";
|
|
||||||
var SVG_TAGS = new Set("svg,path,circle,rect,line,polyline,polygon,g,defs,text,textPath,tspan,use,symbol,image,marker,ellipse".split(","));
|
|
||||||
var DANG_ATTR = new Set(["src", "href", "formaction", "action", "background", "code", "archive"]);
|
|
||||||
var clr = (s) => {
|
|
||||||
if (s) {
|
|
||||||
s.forEach((f) => f());
|
|
||||||
s.clear();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var dispose = (e) => {
|
|
||||||
if (!e || e._x)
|
|
||||||
return;
|
|
||||||
e._x = 1;
|
|
||||||
let st = [e], c;
|
|
||||||
while (c = st.pop()) {
|
|
||||||
clr(c._c);
|
|
||||||
if (c._ch) {
|
|
||||||
c._ch.forEach((x) => st.push(x));
|
|
||||||
c._ch.clear();
|
|
||||||
}
|
|
||||||
if (c._d) {
|
|
||||||
c._d.forEach((d) => d.delete(c));
|
|
||||||
c._d.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var onUnmount = (f) => aOwn && (aOwn._c ||= new Set).add(f);
|
|
||||||
var untrack = (f) => {
|
|
||||||
let p = aEff;
|
|
||||||
aEff = null;
|
|
||||||
try {
|
|
||||||
return f();
|
|
||||||
} finally {
|
|
||||||
aEff = p;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var createEffect = (f, isC = 0) => {
|
|
||||||
const e = () => {
|
|
||||||
if (e._x)
|
|
||||||
return;
|
|
||||||
if (e._d)
|
|
||||||
e._d.forEach((s) => s.delete(e));
|
|
||||||
clr(e._c);
|
|
||||||
let pE = aEff, pO = aOwn;
|
|
||||||
aEff = aOwn = e;
|
|
||||||
try {
|
|
||||||
return e._res = f();
|
|
||||||
} catch (err) {
|
|
||||||
console.error("[SigPro]", err);
|
|
||||||
} finally {
|
|
||||||
aEff = pE;
|
|
||||||
aOwn = pO;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
e._d = e._c = e._ch = null;
|
|
||||||
e._x = 0;
|
|
||||||
e._iC = isC;
|
|
||||||
e._dp = aEff ? aEff._dp + 1 : 0;
|
|
||||||
e._m = [];
|
|
||||||
e._p = aOwn;
|
|
||||||
if (aOwn)
|
|
||||||
(aOwn._ch ||= new Set).add(e);
|
|
||||||
return e;
|
|
||||||
};
|
|
||||||
var flush = () => {
|
|
||||||
if (isFlushing)
|
|
||||||
return;
|
|
||||||
isFlushing = 1;
|
|
||||||
let q = [...eQ].sort((a, b) => a._dp - b._dp);
|
|
||||||
eQ.clear();
|
|
||||||
for (let e of q)
|
|
||||||
if (!e._x)
|
|
||||||
e();
|
|
||||||
isFlushing = 0;
|
|
||||||
};
|
|
||||||
var trkUpd = (s, trg = 0) => {
|
|
||||||
if (!trg && aEff && !aEff._x) {
|
|
||||||
s.add(aEff);
|
|
||||||
(aEff._d ||= new Set).add(s);
|
|
||||||
} else if (trg && s.size) {
|
|
||||||
let q = 0;
|
|
||||||
for (let e of s) {
|
|
||||||
if (e === aEff || e._x)
|
|
||||||
continue;
|
|
||||||
if (e._iC) {
|
|
||||||
e._dt = 1;
|
|
||||||
if (e._sb)
|
|
||||||
trkUpd(e._sb, 1);
|
|
||||||
} else {
|
|
||||||
eQ.add(e);
|
|
||||||
q = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (q && !isFlushing && !bDepth)
|
|
||||||
queueMicrotask(flush);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var $ = (v, k = null) => {
|
|
||||||
let s = new Set;
|
|
||||||
if (isFunc(v)) {
|
|
||||||
let c, cp = () => {
|
|
||||||
if (cp._dt) {
|
|
||||||
let p = aEff;
|
|
||||||
aEff = cp;
|
|
||||||
try {
|
|
||||||
let n = v();
|
|
||||||
if (!Object.is(c, n)) {
|
|
||||||
c = n;
|
|
||||||
trkUpd(s, 1);
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
aEff = p;
|
|
||||||
}
|
|
||||||
cp._dt = 0;
|
|
||||||
}
|
|
||||||
trkUpd(s);
|
|
||||||
return c;
|
|
||||||
};
|
|
||||||
cp._iC = cp._dt = 1;
|
|
||||||
cp._sb = s;
|
|
||||||
cp._d = null;
|
|
||||||
cp._x = 0;
|
|
||||||
return cp;
|
|
||||||
}
|
|
||||||
if (k)
|
|
||||||
try {
|
|
||||||
v = JSON.parse(localStorage.getItem(k)) ?? v;
|
|
||||||
} catch (e) {}
|
|
||||||
return (...a) => {
|
|
||||||
if (a.length) {
|
|
||||||
let n = isFunc(a[0]) ? a[0](v) : a[0];
|
|
||||||
if (!Object.is(v, n)) {
|
|
||||||
v = n;
|
|
||||||
if (k)
|
|
||||||
localStorage.setItem(k, JSON.stringify(v));
|
|
||||||
trkUpd(s, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
trkUpd(s);
|
|
||||||
return v;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
var watch = (src, cb) => {
|
|
||||||
let e = createEffect(cb ? () => {
|
|
||||||
let v = isArr(src) ? src.map((s) => s()) : src();
|
|
||||||
untrack(() => cb(v));
|
|
||||||
} : src);
|
|
||||||
e();
|
|
||||||
return () => dispose(e);
|
|
||||||
};
|
|
||||||
var clnNd = (n) => {
|
|
||||||
if (!n)
|
|
||||||
return;
|
|
||||||
clr(n._c);
|
|
||||||
if (n._oE)
|
|
||||||
dispose(n._oE);
|
|
||||||
if (n.childNodes)
|
|
||||||
n.childNodes.forEach(clnNd);
|
|
||||||
};
|
|
||||||
var valAtt = (k, v) => v == null || v === false ? null : (DANG_ATTR.has(k) || k.startsWith("on")) && /^\s*(javascript|data|vbscript):/i.test(String(v)) ? "#" : v;
|
|
||||||
var h = (tag, prp = {}, ch = []) => {
|
|
||||||
if (prp instanceof Node || isArr(prp) || !isObj(prp)) {
|
|
||||||
ch = prp;
|
|
||||||
prp = {};
|
|
||||||
}
|
|
||||||
if (isFunc(tag)) {
|
|
||||||
let e = createEffect(() => e._res = tag(prp, { children: ch, emit: (ev, ...a) => prp[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...a) }));
|
|
||||||
e();
|
|
||||||
if (e._res == null)
|
|
||||||
return null;
|
|
||||||
let nd = e._res instanceof Node || isArr(e._res) && e._res.every((n) => n instanceof Node) ? e._res : txt(e._res);
|
|
||||||
let att = (n) => {
|
|
||||||
if (isObj(n) && !n._rt) {
|
|
||||||
n._m = e._m || [];
|
|
||||||
n._c = e._c || new Set;
|
|
||||||
n._oE = e;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
isArr(nd) ? nd.forEach(att) : att(nd);
|
|
||||||
return nd;
|
|
||||||
}
|
|
||||||
let isS = SVG_TAGS.has(tag), el = isS ? doc.createElementNS(SVG_NS, tag) : doc.createElement(tag);
|
|
||||||
el._c = new Set;
|
|
||||||
for (let k in prp) {
|
|
||||||
let v = prp[k];
|
|
||||||
if (k === "ref") {
|
|
||||||
isFunc(v) ? v(el) : v.current = el;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (isS && k.startsWith("xlink:")) {
|
|
||||||
let cv = valAtt(k.slice(6), v);
|
|
||||||
cv == null ? el.removeAttributeNS(XLINK, k.slice(6)) : el.setAttributeNS(XLINK, k.slice(6), cv);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (k.startsWith("on")) {
|
|
||||||
let ev = k.slice(2).toLowerCase();
|
|
||||||
el.addEventListener(ev, v);
|
|
||||||
let off = () => el.removeEventListener(ev, v);
|
|
||||||
el._c.add(off);
|
|
||||||
onUnmount(off);
|
|
||||||
} else if (isFunc(v)) {
|
|
||||||
let e = createEffect(() => {
|
|
||||||
let r = valAtt(k, v());
|
|
||||||
if (k === "class")
|
|
||||||
el.className = r || "";
|
|
||||||
else if (r == null)
|
|
||||||
el.removeAttribute(k);
|
|
||||||
else if (k === "style" && typeof r == "string")
|
|
||||||
el.setAttribute("style", r);
|
|
||||||
else if (k in el && !isS)
|
|
||||||
el[k] = r;
|
|
||||||
else
|
|
||||||
el.setAttribute(k, r === true ? "" : r);
|
|
||||||
});
|
|
||||||
e();
|
|
||||||
el._c.add(() => dispose(e));
|
|
||||||
onUnmount(() => dispose(e));
|
|
||||||
if (/^(INPUT|TEXTAREA|SELECT)$/.test(el.tagName) && (k === "value" || k === "checked")) {
|
|
||||||
el.addEventListener(k === "checked" ? "change" : "input", (ev) => v(ev.target[k]));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let r = valAtt(k, v);
|
|
||||||
if (r != null) {
|
|
||||||
if (k === "style" && typeof r == "string")
|
|
||||||
el.setAttribute("style", r);
|
|
||||||
else if (k in el && !isS)
|
|
||||||
el[k] = r;
|
|
||||||
else
|
|
||||||
el.setAttribute(k, r === true ? "" : r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const app = (c) => {
|
|
||||||
if (isArr(c))
|
|
||||||
return c.forEach(app);
|
|
||||||
if (isFunc(c)) {
|
|
||||||
let anc = txt(""), cur = [];
|
|
||||||
el.appendChild(anc);
|
|
||||||
let e = createEffect(() => {
|
|
||||||
let r = c(), nxt = (isArr(r) ? r : [r]).map(toNd), ref = anc;
|
|
||||||
cur.forEach((n) => {
|
|
||||||
n._rt ? n._del() : clnNd(n);
|
|
||||||
if (n.parentNode)
|
|
||||||
n.remove();
|
|
||||||
});
|
|
||||||
for (let i = nxt.length - 1;i >= 0; i--) {
|
|
||||||
let nd = nxt[i];
|
|
||||||
if (nd.parentNode !== ref.parentNode)
|
|
||||||
ref.parentNode?.insertBefore(nd, ref);
|
|
||||||
if (nd._m)
|
|
||||||
nd._m.forEach((f) => f());
|
|
||||||
ref = nd;
|
|
||||||
}
|
|
||||||
cur = nxt;
|
|
||||||
});
|
|
||||||
e();
|
|
||||||
el._c.add(() => dispose(e));
|
|
||||||
onUnmount(() => dispose(e));
|
|
||||||
} else {
|
|
||||||
let nd = toNd(c);
|
|
||||||
el.appendChild(nd);
|
|
||||||
if (nd._m)
|
|
||||||
nd._m.forEach((f) => f());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
app(ch);
|
|
||||||
return el;
|
|
||||||
};
|
|
||||||
var render = (rFn) => {
|
|
||||||
let c = new Set, pO = aOwn, pE = aEff, cnt = doc.createElement("div");
|
|
||||||
cnt.style.display = "contents";
|
|
||||||
cnt.setAttribute("role", "presentation");
|
|
||||||
aOwn = { _c: c };
|
|
||||||
aEff = null;
|
|
||||||
const pRes = (r) => {
|
|
||||||
if (!r)
|
|
||||||
return;
|
|
||||||
if (r._rt) {
|
|
||||||
c.add(r._del);
|
|
||||||
cnt.appendChild(r._cnt);
|
|
||||||
} else if (isArr(r))
|
|
||||||
r.forEach(pRes);
|
|
||||||
else
|
|
||||||
cnt.appendChild(r instanceof Node ? r : txt(r));
|
|
||||||
};
|
|
||||||
try {
|
|
||||||
pRes(rFn({ onCleanup: (f) => c.add(f) }));
|
|
||||||
} finally {
|
|
||||||
aOwn = pO;
|
|
||||||
aEff = pE;
|
|
||||||
}
|
|
||||||
return { _rt: 1, _cnt: cnt, _del: () => {
|
|
||||||
clr(c);
|
|
||||||
clnNd(cnt);
|
|
||||||
cnt.remove();
|
|
||||||
} };
|
|
||||||
};
|
|
||||||
if (typeof window < "u") {
|
|
||||||
"a abbr article aside audio b blockquote br button canvas caption cite code col colgroup datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr i iframe img input ins kbd label legend li main mark meter nav object ol optgroup option output p picture pre progress section select slot small source span strong sub summary sup svg table tbody td template textarea tfoot th thead time tr u ul video".split(" ").forEach((t) => window[t] = (p, c) => h(t, p, c));
|
|
||||||
}
|
|
||||||
|
|
||||||
// src/sigpro.utils.js
|
// src/sigpro.utils.js
|
||||||
|
import { h, watch, $, render, isF } from "./sigpro.js";
|
||||||
var router = (routes) => {
|
var router = (routes) => {
|
||||||
const getHash = () => window.location.hash.slice(1) || "/";
|
const getHash = () => window.location.hash.slice(1) || "/";
|
||||||
const path = $(getHash());
|
const path = $(getHash());
|
||||||
@@ -336,7 +22,7 @@ var router = (routes) => {
|
|||||||
params[p.slice(1)] = cur.split("/").filter(Boolean)[i];
|
params[p.slice(1)] = cur.split("/").filter(Boolean)[i];
|
||||||
});
|
});
|
||||||
router.params(params);
|
router.params(params);
|
||||||
currentView = render(() => isFunc(route.component) ? route.component(params) : route.component);
|
currentView = render(() => isF(route.component) ? route.component(params) : route.component);
|
||||||
hook.replaceChildren(currentView.container);
|
hook.replaceChildren(currentView.container);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
113
docs/sigpro.js
113
docs/sigpro.js
@@ -1,13 +1,45 @@
|
|||||||
(() => {
|
(() => {
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __returnValue = (v) => v;
|
||||||
|
function __exportSetter(name, newValue) {
|
||||||
|
this[name] = __returnValue.bind(null, newValue);
|
||||||
|
}
|
||||||
|
var __export = (target, all) => {
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, {
|
||||||
|
get: all[name],
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true,
|
||||||
|
set: __exportSetter.bind(all, name)
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// src/sigpro.js
|
// src/sigpro.js
|
||||||
var isFunc = (f) => typeof f == "function";
|
var exports_sigpro = {};
|
||||||
var isObj = (o) => o && typeof o == "object";
|
__export(exports_sigpro, {
|
||||||
var isArr = Array.isArray;
|
watch: () => watch,
|
||||||
|
val: () => val,
|
||||||
|
render: () => render,
|
||||||
|
onUnmount: () => onUnmount,
|
||||||
|
mount: () => mount,
|
||||||
|
isO: () => isO,
|
||||||
|
isF: () => isF,
|
||||||
|
isA: () => isA,
|
||||||
|
h: () => h,
|
||||||
|
each: () => each,
|
||||||
|
batch: () => batch,
|
||||||
|
SigPro: () => SigPro,
|
||||||
|
Fragment: () => Fragment,
|
||||||
|
$: () => $
|
||||||
|
});
|
||||||
|
var isF = (f) => typeof f == "function";
|
||||||
|
var isO = (o) => o && typeof o == "object";
|
||||||
|
var isA = Array.isArray;
|
||||||
var doc = typeof document < "u" ? document : null;
|
var doc = typeof document < "u" ? document : null;
|
||||||
var txt = (s) => doc.createTextNode(s == null ? "" : String(s));
|
var txt = (s) => doc.createTextNode(s == null ? "" : String(s));
|
||||||
var toNd = (n) => n?._rt ? n._cnt : n instanceof Node ? n : txt(n);
|
var toNd = (n) => n?._rt ? n._cnt : n instanceof Node ? n : txt(n);
|
||||||
var Fragment = (p) => p.children;
|
var Fragment = (p) => p.children;
|
||||||
var val = (v) => isFunc(v) ? v() : v;
|
var val = (v) => isF(v) ? v() : v;
|
||||||
var aEff = null;
|
var aEff = null;
|
||||||
var aOwn = null;
|
var aOwn = null;
|
||||||
var isFlushing = 0;
|
var isFlushing = 0;
|
||||||
@@ -123,7 +155,7 @@
|
|||||||
};
|
};
|
||||||
var $ = (v, k = null) => {
|
var $ = (v, k = null) => {
|
||||||
let s = new Set;
|
let s = new Set;
|
||||||
if (isFunc(v)) {
|
if (isF(v)) {
|
||||||
let c, cp = () => {
|
let c, cp = () => {
|
||||||
if (cp._dt) {
|
if (cp._dt) {
|
||||||
let p = aEff;
|
let p = aEff;
|
||||||
@@ -154,7 +186,7 @@
|
|||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
return (...a) => {
|
return (...a) => {
|
||||||
if (a.length) {
|
if (a.length) {
|
||||||
let n = isFunc(a[0]) ? a[0](v) : a[0];
|
let n = isF(a[0]) ? a[0](v) : a[0];
|
||||||
if (!Object.is(v, n)) {
|
if (!Object.is(v, n)) {
|
||||||
v = n;
|
v = n;
|
||||||
if (k)
|
if (k)
|
||||||
@@ -168,7 +200,7 @@
|
|||||||
};
|
};
|
||||||
var watch = (src, cb) => {
|
var watch = (src, cb) => {
|
||||||
let e = createEffect(cb ? () => {
|
let e = createEffect(cb ? () => {
|
||||||
let v = isArr(src) ? src.map((s) => s()) : src();
|
let v = isA(src) ? src.map((s) => s()) : src();
|
||||||
untrack(() => cb(v));
|
untrack(() => cb(v));
|
||||||
} : src);
|
} : src);
|
||||||
e();
|
e();
|
||||||
@@ -185,24 +217,24 @@
|
|||||||
};
|
};
|
||||||
var valAtt = (k, v) => v == null || v === false ? null : (DANG_ATTR.has(k) || k.startsWith("on")) && /^\s*(javascript|data|vbscript):/i.test(String(v)) ? "#" : v;
|
var valAtt = (k, v) => v == null || v === false ? null : (DANG_ATTR.has(k) || k.startsWith("on")) && /^\s*(javascript|data|vbscript):/i.test(String(v)) ? "#" : v;
|
||||||
var h = (tag, prp = {}, ch = []) => {
|
var h = (tag, prp = {}, ch = []) => {
|
||||||
if (prp instanceof Node || isArr(prp) || !isObj(prp)) {
|
if (prp instanceof Node || isA(prp) || !isO(prp)) {
|
||||||
ch = prp;
|
ch = prp;
|
||||||
prp = {};
|
prp = {};
|
||||||
}
|
}
|
||||||
if (isFunc(tag)) {
|
if (isF(tag)) {
|
||||||
let e = createEffect(() => e._res = tag(prp, { children: ch, emit: (ev, ...a) => prp[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...a) }));
|
let e = createEffect(() => e._res = tag(prp, { children: ch, emit: (ev, ...a) => prp[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...a) }));
|
||||||
e();
|
e();
|
||||||
if (e._res == null)
|
if (e._res == null)
|
||||||
return null;
|
return null;
|
||||||
let nd = e._res instanceof Node || isArr(e._res) && e._res.every((n) => n instanceof Node) ? e._res : txt(e._res);
|
let nd = e._res instanceof Node || isA(e._res) && e._res.every((n) => n instanceof Node) ? e._res : txt(e._res);
|
||||||
let att = (n) => {
|
let att = (n) => {
|
||||||
if (isObj(n) && !n._rt) {
|
if (isO(n) && !n._rt) {
|
||||||
n._m = e._m || [];
|
n._m = e._m || [];
|
||||||
n._c = e._c || new Set;
|
n._c = e._c || new Set;
|
||||||
n._oE = e;
|
n._oE = e;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
isArr(nd) ? nd.forEach(att) : att(nd);
|
isA(nd) ? nd.forEach(att) : att(nd);
|
||||||
return nd;
|
return nd;
|
||||||
}
|
}
|
||||||
let isS = SVG_TAGS.has(tag), el = isS ? doc.createElementNS(SVG_NS, tag) : doc.createElement(tag);
|
let isS = SVG_TAGS.has(tag), el = isS ? doc.createElementNS(SVG_NS, tag) : doc.createElement(tag);
|
||||||
@@ -210,7 +242,7 @@
|
|||||||
for (let k in prp) {
|
for (let k in prp) {
|
||||||
let v = prp[k];
|
let v = prp[k];
|
||||||
if (k === "ref") {
|
if (k === "ref") {
|
||||||
isFunc(v) ? v(el) : v.current = el;
|
isF(v) ? v(el) : v.current = el;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (isS && k.startsWith("xlink:")) {
|
if (isS && k.startsWith("xlink:")) {
|
||||||
@@ -224,7 +256,7 @@
|
|||||||
let off = () => el.removeEventListener(ev, v);
|
let off = () => el.removeEventListener(ev, v);
|
||||||
el._c.add(off);
|
el._c.add(off);
|
||||||
onUnmount(off);
|
onUnmount(off);
|
||||||
} else if (isFunc(v)) {
|
} else if (isF(v)) {
|
||||||
let e = createEffect(() => {
|
let e = createEffect(() => {
|
||||||
let r = valAtt(k, v());
|
let r = valAtt(k, v());
|
||||||
if (k === "class")
|
if (k === "class")
|
||||||
@@ -257,13 +289,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const app = (c) => {
|
const app = (c) => {
|
||||||
if (isArr(c))
|
if (isA(c))
|
||||||
return c.forEach(app);
|
return c.forEach(app);
|
||||||
if (isFunc(c)) {
|
if (isF(c)) {
|
||||||
let anc = txt(""), cur = [];
|
let anc = txt(""), cur = [];
|
||||||
el.appendChild(anc);
|
el.appendChild(anc);
|
||||||
let e = createEffect(() => {
|
let e = createEffect(() => {
|
||||||
let r = c(), nxt = (isArr(r) ? r : [r]).map(toNd), ref = anc;
|
let r = c(), nxt = (isA(r) ? r : [r]).map(toNd), ref = anc;
|
||||||
cur.forEach((n) => {
|
cur.forEach((n) => {
|
||||||
n._rt ? n._del() : clnNd(n);
|
n._rt ? n._del() : clnNd(n);
|
||||||
if (n.parentNode)
|
if (n.parentNode)
|
||||||
@@ -304,7 +336,7 @@
|
|||||||
if (r._rt) {
|
if (r._rt) {
|
||||||
c.add(r._del);
|
c.add(r._del);
|
||||||
cnt.appendChild(r._cnt);
|
cnt.appendChild(r._cnt);
|
||||||
} else if (isArr(r))
|
} else if (isA(r))
|
||||||
r.forEach(pRes);
|
r.forEach(pRes);
|
||||||
else
|
else
|
||||||
cnt.appendChild(r instanceof Node ? r : txt(r));
|
cnt.appendChild(r instanceof Node ? r : txt(r));
|
||||||
@@ -368,16 +400,26 @@
|
|||||||
return;
|
return;
|
||||||
if (MOUNTED.has(t))
|
if (MOUNTED.has(t))
|
||||||
MOUNTED.get(t)._del();
|
MOUNTED.get(t)._del();
|
||||||
let i = render(isFunc(c) ? c : () => c);
|
let i = render(isF(c) ? c : () => c);
|
||||||
t.replaceChildren(i._cnt);
|
t.replaceChildren(i._cnt);
|
||||||
MOUNTED.set(t, i);
|
MOUNTED.set(t, i);
|
||||||
return i;
|
return i;
|
||||||
};
|
};
|
||||||
if (typeof window < "u") {
|
var SigPro = { $, watch, batch, h, Fragment, render, mount, when, each, onUnmount, val, isA, isF, isO };
|
||||||
|
if (typeof window !== "undefined") {
|
||||||
|
window.SigPro = SigPro;
|
||||||
"a abbr article aside audio b blockquote br button canvas caption cite code col colgroup datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr i iframe img input ins kbd label legend li main mark meter nav object ol optgroup option output p picture pre progress section select slot small source span strong sub summary sup svg table tbody td template textarea tfoot th thead time tr u ul video".split(" ").forEach((t) => window[t] = (p, c) => h(t, p, c));
|
"a abbr article aside audio b blockquote br button canvas caption cite code col colgroup datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr i iframe img input ins kbd label legend li main mark meter nav object ol optgroup option output p picture pre progress section select slot small source span strong sub summary sup svg table tbody td template textarea tfoot th thead time tr u ul video".split(" ").forEach((t) => window[t] = (p, c) => h(t, p, c));
|
||||||
}
|
}
|
||||||
|
|
||||||
// src/sigpro.utils.js
|
// src/sigpro.utils.js
|
||||||
|
var exports_sigpro_utils = {};
|
||||||
|
__export(exports_sigpro_utils, {
|
||||||
|
t: () => t,
|
||||||
|
setLocale: () => setLocale,
|
||||||
|
router: () => router,
|
||||||
|
db: () => db,
|
||||||
|
addLang: () => addLang
|
||||||
|
});
|
||||||
var router = (routes) => {
|
var router = (routes) => {
|
||||||
const getHash = () => window.location.hash.slice(1) || "/";
|
const getHash = () => window.location.hash.slice(1) || "/";
|
||||||
const path = $(getHash());
|
const path = $(getHash());
|
||||||
@@ -400,7 +442,7 @@
|
|||||||
params[p.slice(1)] = cur.split("/").filter(Boolean)[i];
|
params[p.slice(1)] = cur.split("/").filter(Boolean)[i];
|
||||||
});
|
});
|
||||||
router.params(params);
|
router.params(params);
|
||||||
currentView = render(() => isFunc(route.component) ? route.component(params) : route.component);
|
currentView = render(() => isF(route.component) ? route.component(params) : route.component);
|
||||||
hook.replaceChildren(currentView.container);
|
hook.replaceChildren(currentView.container);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -414,6 +456,26 @@
|
|||||||
router.to = (p) => window.location.hash = p.replace(/^#?\/?/, "#/");
|
router.to = (p) => window.location.hash = p.replace(/^#?\/?/, "#/");
|
||||||
router.back = () => window.history.back();
|
router.back = () => window.history.back();
|
||||||
router.path = () => window.location.hash.replace(/^#/, "") || "/";
|
router.path = () => window.location.hash.replace(/^#/, "") || "/";
|
||||||
|
var db = async (url, data = {}, loading = null) => {
|
||||||
|
if (loading)
|
||||||
|
loading(true);
|
||||||
|
try {
|
||||||
|
const res = await fetch(url, {
|
||||||
|
method: "POST",
|
||||||
|
headers: { "Content-Type": "application/json" },
|
||||||
|
body: JSON.stringify(data),
|
||||||
|
credentials: "include"
|
||||||
|
});
|
||||||
|
if (!res.ok) {
|
||||||
|
const errorText = await res.text();
|
||||||
|
throw new Error(`Error ${res.status}: ${errorText}`);
|
||||||
|
}
|
||||||
|
return await res.json();
|
||||||
|
} finally {
|
||||||
|
if (loading)
|
||||||
|
loading(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
var currentLocale = $("en");
|
var currentLocale = $("en");
|
||||||
var translations = {};
|
var translations = {};
|
||||||
var addLang = (obj) => {
|
var addLang = (obj) => {
|
||||||
@@ -423,12 +485,19 @@
|
|||||||
Object.assign(translations[locale], obj[locale]);
|
Object.assign(translations[locale], obj[locale]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
var setLocale = (locale) => {
|
||||||
|
if (locale && translations[locale]) {
|
||||||
|
currentLocale(locale);
|
||||||
|
}
|
||||||
|
};
|
||||||
var t = (key) => {
|
var t = (key) => {
|
||||||
return () => translations[currentLocale()]?.[key] ?? key;
|
return () => translations[currentLocale()]?.[key] ?? key;
|
||||||
};
|
};
|
||||||
|
|
||||||
// src/build_umd.js
|
// src/build_umd.js
|
||||||
if (typeof window !== "undefined") {
|
if (typeof window !== "undefined") {
|
||||||
Object.assign(window, { $, watch, h, Fragment, when, each, router, addLang, t, mount, batch, isArr, isFunc, isObj });
|
const SigPro2 = { ...exports_sigpro, ...exports_sigpro_utils };
|
||||||
|
window.SigPro = SigPro2;
|
||||||
|
Object.assign(window, SigPro2);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|||||||
28
package.json
28
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "sigpro",
|
"name": "sigpro",
|
||||||
"version": "1.2.38",
|
"version": "1.2.39",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"author": {
|
"author": {
|
||||||
@@ -9,22 +9,18 @@
|
|||||||
"url": "https://sigpro.natxocc.com"
|
"url": "https://sigpro.natxocc.com"
|
||||||
},
|
},
|
||||||
"main": "./dist/sigpro.esm.js",
|
"main": "./dist/sigpro.esm.js",
|
||||||
"module": "./dist/sigpro.esm.min.js",
|
"module": "./dist/sigpro.esm.js",
|
||||||
"unpkg": "./dist/sigpro.min.js",
|
"unpkg": "./dist/sigpro.js",
|
||||||
"jsdelivr": "./dist/sigpro.min.js",
|
"jsdelivr": "./dist/sigpro.js",
|
||||||
"types": "./sigpro.d.ts",
|
"types": "./sigpro.d.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": {
|
".": {
|
||||||
|
"types": "./sigpro.d.ts",
|
||||||
"import": "./dist/sigpro.esm.js",
|
"import": "./dist/sigpro.esm.js",
|
||||||
"script": "./dist/sigpro.min.js",
|
"default": "./dist/sigpro.js"
|
||||||
"types": "./sigpro.d.ts"
|
|
||||||
},
|
},
|
||||||
"./utils": {
|
"./utils": "./dist/sigpro.utils.js",
|
||||||
"import": "./dist/sigpro.utils.js"
|
"./vite": "./dist/sigpro.vite.js"
|
||||||
},
|
|
||||||
"./vite": {
|
|
||||||
"import": "./dist/sigpro.vite.js"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist/",
|
"dist/",
|
||||||
@@ -46,14 +42,12 @@
|
|||||||
"clean": "rm -rf dist",
|
"clean": "rm -rf dist",
|
||||||
"prebuild": "npm run clean",
|
"prebuild": "npm run clean",
|
||||||
"build:convert": "bun build ./src/convert.js --bundle --outfile=./docs/convert.js --format=iife",
|
"build:convert": "bun build ./src/convert.js --bundle --outfile=./docs/convert.js --format=iife",
|
||||||
"build:iife": "bun build ./src/build_umd.js --bundle --outfile=./dist/sigpro.js --format=iife --global-name=sp",
|
"build:iife": "bun build ./src/build_umd.js --bundle --outfile=./dist/sigpro.js --format=iife --global-name=SigPro",
|
||||||
"build:iife:min": "bun build ./src/build_umd.js --bundle --outfile=./dist/sigpro.min.js --format=iife --global-name=sp --minify",
|
|
||||||
"build:esm": "bun build ./src/sigpro.js --bundle --outfile=./dist/sigpro.esm.js --format=esm",
|
"build:esm": "bun build ./src/sigpro.js --bundle --outfile=./dist/sigpro.esm.js --format=esm",
|
||||||
"build:esm:min": "bun build ./src/sigpro.js --bundle --outfile=./dist/sigpro.esm.min.js --format=esm --minify",
|
"build:utils": "bun build ./src/sigpro.utils.js --bundle --outfile=./dist/sigpro.utils.js --format=esm --external './src/sigpro.js'",
|
||||||
"build:utils": "bun build ./src/sigpro.utils.js --bundle --outfile=./dist/sigpro.utils.js --format=esm",
|
|
||||||
"build:vite": "bun build ./src/sigpro.vite.js --bundle --outfile=./dist/sigpro.vite.js --format=esm --external:fs --external:path",
|
"build:vite": "bun build ./src/sigpro.vite.js --bundle --outfile=./dist/sigpro.vite.js --format=esm --external:fs --external:path",
|
||||||
"build:copy": "cp ./dist/sigpro.js ./docs/sigpro.js",
|
"build:copy": "cp ./dist/sigpro.js ./docs/sigpro.js",
|
||||||
"build": "bun run build:iife && bun run build:iife:min && bun run build:esm && bun run build:esm:min && bun run build:utils && bun run build:vite && bun run build:convert && bun run build:copy",
|
"build": "bun run build:iife && bun run build:esm && bun run build:utils && bun run build:vite && bun run build:convert && bun run build:copy",
|
||||||
"docs": "bun x serve docs"
|
"docs": "bun x serve docs"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
import { $, watch, batch, h, Fragment, mount, when, each, isArr, isFunc, isObj } from "./sigpro.js"
|
import * as core from "./sigpro.js"
|
||||||
import { router, addLang, t } from "./sigpro.utils.js"
|
import * as utils from "./sigpro.utils.js"
|
||||||
|
|
||||||
if (typeof window !== "undefined") {
|
if (typeof window !== "undefined") {
|
||||||
Object.assign(window, { $, watch, h, Fragment, when, each, router, addLang, t, mount, batch, isArr, isFunc, isObj })
|
const SigPro = { ...core, ...utils };
|
||||||
|
|
||||||
|
window.SigPro = SigPro;
|
||||||
|
|
||||||
|
Object.assign(window, SigPro);
|
||||||
}
|
}
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
const isFunc = f => typeof f == "function";
|
export const isF = f => typeof f == "function";
|
||||||
const isObj = o => o && typeof o == "object";
|
export const isO = o => o && typeof o == "object";
|
||||||
const isArr = Array.isArray;
|
export const isA = Array.isArray;
|
||||||
const doc = typeof document < "u" ? document : null;
|
const doc = typeof document < "u" ? document : null;
|
||||||
const txt = s => doc.createTextNode(s == null ? "" : String(s));
|
const txt = s => doc.createTextNode(s == null ? "" : String(s));
|
||||||
const toNd = n => n?._rt ? n._cnt : (n instanceof Node ? n : txt(n));
|
const toNd = n => n?._rt ? n._cnt : (n instanceof Node ? n : txt(n));
|
||||||
const Fragment = p => p.children;
|
export const Fragment = p => p.children;
|
||||||
const val = v => isFunc(v) ? v() : v;
|
export const val = v => isF(v) ? v() : v;
|
||||||
|
|
||||||
let aEff = null, aOwn = null, isFlushing = 0, bDepth = 0;
|
let aEff = null, aOwn = null, isFlushing = 0, bDepth = 0;
|
||||||
const eQ = new Set(), MOUNTED = new WeakMap();
|
const eQ = new Set(), MOUNTED = new WeakMap();
|
||||||
|
|
||||||
const SVG_NS = "http://www.w3.org/2000/svg", XLINK = "http://www.w3.org/1999/xlink";
|
const SVG_NS = "http://www.w3.org/2000/svg", XLINK = "http://www.w3.org/1999/xlink";
|
||||||
const SVG_TAGS = new Set("svg,path,circle,rect,line,polyline,polygon,g,defs,text,textPath,tspan,use,symbol,image,marker,ellipse".split(","));
|
const SVG_TAGS = new Set("svg,path,circle,rect,line,polyline,polygon,g,defs,text,textPath,tspan,use,symbol,image,marker,ellipse".split(","));
|
||||||
const DANG_ATTR = new Set(["src","href","formaction","action","background","code","archive"]);
|
const DANG_ATTR = new Set(["src", "href", "formaction", "action", "background", "code", "archive"]);
|
||||||
|
|
||||||
const clr = s => { if(s){ s.forEach(f => f()); s.clear(); } };
|
const clr = s => { if (s) { s.forEach(f => f()); s.clear(); } };
|
||||||
const dispose = e => {
|
const dispose = e => {
|
||||||
if (!e || e._x) return;
|
if (!e || e._x) return;
|
||||||
e._x = 1;
|
e._x = 1;
|
||||||
@@ -26,7 +26,7 @@ const dispose = e => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const onUnmount = f => aOwn && (aOwn._c ||= new Set()).add(f);
|
export const onUnmount = f => aOwn && (aOwn._c ||= new Set()).add(f);
|
||||||
const untrack = f => { let p = aEff; aEff = null; try { return f() } finally { aEff = p } };
|
const untrack = f => { let p = aEff; aEff = null; try { return f() } finally { aEff = p } };
|
||||||
|
|
||||||
const createEffect = (f, isC = 0) => {
|
const createEffect = (f, isC = 0) => {
|
||||||
@@ -57,7 +57,7 @@ const flush = () => {
|
|||||||
isFlushing = 0;
|
isFlushing = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
const batch = f => {
|
export const batch = f => {
|
||||||
bDepth++;
|
bDepth++;
|
||||||
try { return f() } finally { if (!--bDepth && eQ.size && !isFlushing) flush() }
|
try { return f() } finally { if (!--bDepth && eQ.size && !isFlushing) flush() }
|
||||||
};
|
};
|
||||||
@@ -77,9 +77,9 @@ const trkUpd = (s, trg = 0) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const $ = (v, k = null) => {
|
export const $ = (v, k = null) => {
|
||||||
let s = new Set();
|
let s = new Set();
|
||||||
if (isFunc(v)) {
|
if (isF(v)) {
|
||||||
let c, cp = () => {
|
let c, cp = () => {
|
||||||
if (cp._dt) {
|
if (cp._dt) {
|
||||||
let p = aEff; aEff = cp;
|
let p = aEff; aEff = cp;
|
||||||
@@ -92,18 +92,18 @@ const $ = (v, k = null) => {
|
|||||||
cp._iC = cp._dt = 1; cp._sb = s; cp._d = null; cp._x = 0;
|
cp._iC = cp._dt = 1; cp._sb = s; cp._d = null; cp._x = 0;
|
||||||
return cp;
|
return cp;
|
||||||
}
|
}
|
||||||
if (k) try { v = JSON.parse(localStorage.getItem(k)) ?? v } catch(e){}
|
if (k) try { v = JSON.parse(localStorage.getItem(k)) ?? v } catch (e) { }
|
||||||
return (...a) => {
|
return (...a) => {
|
||||||
if (a.length) {
|
if (a.length) {
|
||||||
let n = isFunc(a[0]) ? a[0](v) : a[0];
|
let n = isF(a[0]) ? a[0](v) : a[0];
|
||||||
if (!Object.is(v, n)) { v = n; if (k) localStorage.setItem(k, JSON.stringify(v)); trkUpd(s, 1); }
|
if (!Object.is(v, n)) { v = n; if (k) localStorage.setItem(k, JSON.stringify(v)); trkUpd(s, 1); }
|
||||||
}
|
}
|
||||||
trkUpd(s); return v;
|
trkUpd(s); return v;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const watch = (src, cb) => {
|
export const watch = (src, cb) => {
|
||||||
let e = createEffect(cb ? () => { let v = isArr(src) ? src.map(s=>s()) : src(); untrack(() => cb(v)) } : src);
|
let e = createEffect(cb ? () => { let v = isA(src) ? src.map(s => s()) : src(); untrack(() => cb(v)) } : src);
|
||||||
e(); return () => dispose(e);
|
e(); return () => dispose(e);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -117,16 +117,16 @@ const clnNd = n => {
|
|||||||
const valAtt = (k, v) => (v == null || v === false) ? null :
|
const valAtt = (k, v) => (v == null || v === false) ? null :
|
||||||
(DANG_ATTR.has(k) || k.startsWith("on")) && /^\s*(javascript|data|vbscript):/i.test(String(v)) ? '#' : v;
|
(DANG_ATTR.has(k) || k.startsWith("on")) && /^\s*(javascript|data|vbscript):/i.test(String(v)) ? '#' : v;
|
||||||
|
|
||||||
const h = (tag, prp = {}, ch = []) => {
|
export const h = (tag, prp = {}, ch = []) => {
|
||||||
if (prp instanceof Node || isArr(prp) || !isObj(prp)) { ch = prp; prp = {}; }
|
if (prp instanceof Node || isA(prp) || !isO(prp)) { ch = prp; prp = {}; }
|
||||||
|
|
||||||
if (isFunc(tag)) {
|
if (isF(tag)) {
|
||||||
let e = createEffect(() => e._res = tag(prp, { children: ch, emit: (ev, ...a) => prp[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...a) }));
|
let e = createEffect(() => e._res = tag(prp, { children: ch, emit: (ev, ...a) => prp[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...a) }));
|
||||||
e();
|
e();
|
||||||
if (e._res == null) return null;
|
if (e._res == null) return null;
|
||||||
let nd = e._res instanceof Node || (isArr(e._res) && e._res.every(n => n instanceof Node)) ? e._res : txt(e._res);
|
let nd = e._res instanceof Node || (isA(e._res) && e._res.every(n => n instanceof Node)) ? e._res : txt(e._res);
|
||||||
let att = n => { if (isObj(n) && !n._rt) { n._m = e._m || []; n._c = e._c || new Set(); n._oE = e; } };
|
let att = n => { if (isO(n) && !n._rt) { n._m = e._m || []; n._c = e._c || new Set(); n._oE = e; } };
|
||||||
isArr(nd) ? nd.forEach(att) : att(nd);
|
isA(nd) ? nd.forEach(att) : att(nd);
|
||||||
return nd;
|
return nd;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@ const h = (tag, prp = {}, ch = []) => {
|
|||||||
|
|
||||||
for (let k in prp) {
|
for (let k in prp) {
|
||||||
let v = prp[k];
|
let v = prp[k];
|
||||||
if (k === "ref") { isFunc(v) ? v(el) : (v.current = el); continue; }
|
if (k === "ref") { isF(v) ? v(el) : (v.current = el); continue; }
|
||||||
if (isS && k.startsWith("xlink:")) {
|
if (isS && k.startsWith("xlink:")) {
|
||||||
let cv = valAtt(k.slice(6), v);
|
let cv = valAtt(k.slice(6), v);
|
||||||
cv == null ? el.removeAttributeNS(XLINK, k.slice(6)) : el.setAttributeNS(XLINK, k.slice(6), cv);
|
cv == null ? el.removeAttributeNS(XLINK, k.slice(6)) : el.setAttributeNS(XLINK, k.slice(6), cv);
|
||||||
@@ -144,7 +144,7 @@ const h = (tag, prp = {}, ch = []) => {
|
|||||||
if (k.startsWith("on")) {
|
if (k.startsWith("on")) {
|
||||||
let ev = k.slice(2).toLowerCase(); el.addEventListener(ev, v);
|
let ev = k.slice(2).toLowerCase(); el.addEventListener(ev, v);
|
||||||
let off = () => el.removeEventListener(ev, v); el._c.add(off); onUnmount(off);
|
let off = () => el.removeEventListener(ev, v); el._c.add(off); onUnmount(off);
|
||||||
} else if (isFunc(v)) {
|
} else if (isF(v)) {
|
||||||
let e = createEffect(() => {
|
let e = createEffect(() => {
|
||||||
let r = valAtt(k, v());
|
let r = valAtt(k, v());
|
||||||
if (k === "class") el.className = r || "";
|
if (k === "class") el.className = r || "";
|
||||||
@@ -168,11 +168,11 @@ const h = (tag, prp = {}, ch = []) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const app = c => {
|
const app = c => {
|
||||||
if (isArr(c)) return c.forEach(app);
|
if (isA(c)) return c.forEach(app);
|
||||||
if (isFunc(c)) {
|
if (isF(c)) {
|
||||||
let anc = txt(""), cur = []; el.appendChild(anc);
|
let anc = txt(""), cur = []; el.appendChild(anc);
|
||||||
let e = createEffect(() => {
|
let e = createEffect(() => {
|
||||||
let r = c(), nxt = (isArr(r) ? r : [r]).map(toNd), ref = anc;
|
let r = c(), nxt = (isA(r) ? r : [r]).map(toNd), ref = anc;
|
||||||
cur.forEach(n => { n._rt ? n._del() : clnNd(n); if (n.parentNode) n.remove(); });
|
cur.forEach(n => { n._rt ? n._del() : clnNd(n); if (n.parentNode) n.remove(); });
|
||||||
for (let i = nxt.length - 1; i >= 0; i--) {
|
for (let i = nxt.length - 1; i >= 0; i--) {
|
||||||
let nd = nxt[i];
|
let nd = nxt[i];
|
||||||
@@ -190,14 +190,14 @@ const h = (tag, prp = {}, ch = []) => {
|
|||||||
app(ch); return el;
|
app(ch); return el;
|
||||||
};
|
};
|
||||||
|
|
||||||
const render = rFn => {
|
export const render = rFn => {
|
||||||
let c = new Set(), pO = aOwn, pE = aEff, cnt = doc.createElement("div");
|
let c = new Set(), pO = aOwn, pE = aEff, cnt = doc.createElement("div");
|
||||||
cnt.style.display = "contents"; cnt.setAttribute("role", "presentation");
|
cnt.style.display = "contents"; cnt.setAttribute("role", "presentation");
|
||||||
aOwn = { _c: c }; aEff = null;
|
aOwn = { _c: c }; aEff = null;
|
||||||
const pRes = r => {
|
const pRes = r => {
|
||||||
if (!r) return;
|
if (!r) return;
|
||||||
if (r._rt) { c.add(r._del); cnt.appendChild(r._cnt); }
|
if (r._rt) { c.add(r._del); cnt.appendChild(r._cnt); }
|
||||||
else if (isArr(r)) r.forEach(pRes);
|
else if (isA(r)) r.forEach(pRes);
|
||||||
else cnt.appendChild(r instanceof Node ? r : txt(r));
|
else cnt.appendChild(r instanceof Node ? r : txt(r));
|
||||||
};
|
};
|
||||||
try { pRes(rFn({ onCleanup: f => c.add(f) })); } finally { aOwn = pO; aEff = pE; }
|
try { pRes(rFn({ onCleanup: f => c.add(f) })); } finally { aOwn = pO; aEff = pE; }
|
||||||
@@ -214,11 +214,11 @@ const when = (c, Y, N = null) => {
|
|||||||
onUnmount(() => v?._del()); return rt;
|
onUnmount(() => v?._del()); return rt;
|
||||||
};
|
};
|
||||||
|
|
||||||
const each = (s, fn, kF) => {
|
export const each = (s, fn, kF) => {
|
||||||
let anc = txt(""), rt = h("div", { style: "display:contents" }, [anc]), cch = new Map();
|
let anc = txt(""), rt = h("div", { style: "display:contents" }, [anc]), cch = new Map();
|
||||||
watch(() => val(s) || [], it => {
|
watch(() => val(s) || [], it => {
|
||||||
let nCc = new Map(), nOd = [];
|
let nCc = new Map(), nOd = [];
|
||||||
for (let i = 0, l = (it||[]).length; i < l; i++) {
|
for (let i = 0, l = (it || []).length; i < l; i++) {
|
||||||
let t = it[i], k = kF ? (t?.[kF] ?? i) : (t?.id ?? i), v = cch.get(k);
|
let t = it[i], k = kF ? (t?.[kF] ?? i) : (t?.id ?? i), v = cch.get(k);
|
||||||
if (!v) v = render(() => fn(t, i)); else cch.delete(k);
|
if (!v) v = render(() => fn(t, i)); else cch.delete(k);
|
||||||
nCc.set(k, v); nOd.push(v);
|
nCc.set(k, v); nOd.push(v);
|
||||||
@@ -234,17 +234,17 @@ const each = (s, fn, kF) => {
|
|||||||
return rt;
|
return rt;
|
||||||
};
|
};
|
||||||
|
|
||||||
const mount = (c, tgt) => {
|
export const mount = (c, tgt) => {
|
||||||
let t = typeof tgt == "string" ? doc.querySelector(tgt) : tgt;
|
let t = typeof tgt == "string" ? doc.querySelector(tgt) : tgt;
|
||||||
if (!t) return;
|
if (!t) return;
|
||||||
if (MOUNTED.has(t)) MOUNTED.get(t)._del();
|
if (MOUNTED.has(t)) MOUNTED.get(t)._del();
|
||||||
let i = render(isFunc(c) ? c : () => c);
|
let i = render(isF(c) ? c : () => c);
|
||||||
t.replaceChildren(i._cnt); MOUNTED.set(t, i); return i;
|
t.replaceChildren(i._cnt); MOUNTED.set(t, i); return i;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (typeof window < "u") {
|
export const SigPro = { $, watch, batch, h, Fragment, render, mount, when, each, onUnmount, val, isA, isF, isO };
|
||||||
|
if (typeof window !== "undefined") {
|
||||||
|
window.SigPro = SigPro;
|
||||||
"a abbr article aside audio b blockquote br button canvas caption cite code col colgroup datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr i iframe img input ins kbd label legend li main mark meter nav object ol optgroup option output p picture pre progress section select slot small source span strong sub summary sup svg table tbody td template textarea tfoot th thead time tr u ul video"
|
"a abbr article aside audio b blockquote br button canvas caption cite code col colgroup datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr i iframe img input ins kbd label legend li main mark meter nav object ol optgroup option output p picture pre progress section select slot small source span strong sub summary sup svg table tbody td template textarea tfoot th thead time tr u ul video"
|
||||||
.split(" ").forEach(t => window[t] = (p, c) => h(t, p, c));
|
.split(" ").forEach(t => window[t] = (p, c) => h(t, p, c));
|
||||||
}
|
}
|
||||||
|
|
||||||
export { $, watch, batch, h, Fragment, render, mount, when, each, onUnmount, val, isArr, isFunc, isObj };
|
|
||||||
7
src/sigpro.tags.js
Normal file
7
src/sigpro.tags.js
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { h } from "./sigpro.js";
|
||||||
|
|
||||||
|
if (typeof window < "u") {
|
||||||
|
"a abbr article aside audio b blockquote br button canvas caption cite code col colgroup datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr i iframe img input ins kbd label legend li main mark meter nav object ol optgroup option output p picture pre progress section select slot small source span strong sub summary sup svg table tbody td template textarea tfoot th thead time tr u ul video"
|
||||||
|
.split(" ").forEach(t => window[t] = (p, c) => h(t, p, c));
|
||||||
|
Object.assign(window, { $, watch, h, Fragment, when, each, onUnmount, mount, batch, val, isA, isF, isO })
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
// plus
|
// plus
|
||||||
import { h, watch, $, render, isFunc } from './sigpro';
|
import { h, watch, $, render, isF } from './sigpro.js';
|
||||||
|
|
||||||
// router
|
// router
|
||||||
export const router = routes => {
|
export const router = routes => {
|
||||||
@@ -26,7 +26,7 @@ export const router = routes => {
|
|||||||
if (p[0] === ":") params[p.slice(1)] = cur.split("/").filter(Boolean)[i];
|
if (p[0] === ":") params[p.slice(1)] = cur.split("/").filter(Boolean)[i];
|
||||||
});
|
});
|
||||||
router.params(params);
|
router.params(params);
|
||||||
currentView = render(() => isFunc(route.component) ? route.component(params) : route.component);
|
currentView = render(() => isF(route.component) ? route.component(params) : route.component);
|
||||||
hook.replaceChildren(currentView.container);
|
hook.replaceChildren(currentView.container);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user