You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OneAuth/oa/front/vyes.js

182 lines
6.1 KiB
JavaScript

const y = [], I = [];
setInterval(() => {
let e = new Set(I.splice(0));
for (let t of e)
y[t][0] && y[t][1]();
}, 25);
function L() {
const e = performance.now().toString(36), t = Math.random().toString(36).substring(2, 5);
return `${e}-${t}`;
}
function $() {
for (let e of y)
e[0] && e[1]();
}
var g = [];
function C(e) {
let t = y.length;
return g.push(t), y.push([!0, e]), e(), g.pop(), t;
}
function j(e, t) {
let i = e.getAttribute("vbind-fns"), n = C(t);
i ? i += "," + n : i = String(n), e.setAttribute("vbind-fns", i);
}
const x = Symbol("isProxy"), S = Symbol("DataID");
window.$u = (e) => {
y[e][1]();
};
function E(e) {
return A({ value: e });
}
function A(e, t = !1) {
const i = L();
let n = !1;
Object.prototype.toString.call(e) === "[object Array]" && (n = !0);
const l = {}, d = {
get(r, s, a) {
if (s === x)
return !0;
if (s === S)
return i;
const u = Reflect.get(r, s, a);
if (typeof u == "object" && u !== null) {
if (u[x])
return u;
{
let f = A(u, t);
return Reflect.set(r, s, f, a), f;
}
}
let c = -1;
if (g.length > 0) {
let f = s;
c = g[g.length - 1], n && (f = ""), l[f] ? l[f].indexOf(c) == -1 && l[f].push(c) : l[f] = [c];
}
return t && console.log(`${i} get ${s.toString()}:${u} ${c}`), u;
},
set(r, s, a, u) {
const c = Reflect.set(r, s, a, u);
if (t && console.log(`${i} set ${s.toString()} ${a}`, l, c), c && g.length === 0) {
let f = s;
if (n && (f = ""), l[f])
for (let b of l[f])
I.push(b);
}
return c;
},
deleteProperty(r, s) {
return Reflect.deleteProperty(r, s);
}
};
return new Proxy(e, d);
}
const h = { Watch: A, Listen: C, Ref: E, DomListen: j, ForceUpdate: $, DataID: S, GenUniqueID: L }, R = ["div", "img", "span", "p", "a", "input"], U = (e, t, i) => (typeof e == "string" && (R.indexOf(e) >= 0 ? e = { typ: e } : e = { class: e }), t && (e.children = t), i && (e.attrs = i), w(e)), M = (e, t, i) => w({ typ: "span", class: t, children: [e], attrs: i }), w = (e) => {
let t = document.createElement(e.typ || "div");
if (e.id && (t.id = e.id), e.class && t.classList.add(...e.class.split(" ")), e.vclass)
for (let i of e.vclass) {
let n = [];
h.DomListen(t, () => {
t.classList.remove(...n), n = i().split(" "), t.classList.add(...n);
});
}
if (e.attrs)
for (let i in e.attrs) {
let n = e.attrs[i];
typeof n == "function" ? h.DomListen(t, () => {
t.setAttribute(i, n());
}) : t.setAttribute(i, String(n));
}
if (e.onclick && (t.onclick = e.onclick), e.children && p(t, e.children, !0), e.style) {
const i = /([a-zA-Z-]+)\s*:\s*([^;]+);?/g;
let n;
for (; (n = i.exec(e.style)) !== null; ) {
const l = n[1].trim(), d = n[2].trim();
t.style.setProperty(l, d);
}
}
return t.setAttribute("voa", "1"), e.updator && h.DomListen(t, () => {
e.updator(t);
}), e.vbind && e.typ === "input" && (h.DomListen(t, () => {
t.setAttribute("value", Reflect.get(e.vbind[0], e.vbind[1]));
}), t.addEventListener("input", (i) => {
Reflect.set(e.vbind[0], e.vbind[1], i.target.value);
})), t;
};
function p(e, t, i = !1, n = !1) {
if (i && (e.innerHTML = ""), typeof t == "function")
n ? p(e, t(), i, !0) : h.DomListen(e, () => {
p(e, t(), i, !0);
});
else if (typeof t == "string" || typeof t == "number")
e.innerHTML = String(t);
else if (Array.isArray(t))
for (let l of t)
p(e, l, i && t.length === 1, n);
else t && t.iterID ? B(e, t, n) : t && t.ifID ? P(e, t, n) : t instanceof Element ? e.appendChild(t) : typeof t > "u" || t === null || console.warn("unknown child type", t);
}
function P(e, t, i = !1) {
let n = () => {
let l = O();
for (let o of t.rules) {
let r = !!o[0];
if (typeof o[0] == "function" && (r = !!o[0]()), r) {
typeof o[1] == "function" ? l = o[1]() : l = o[1];
break;
}
}
let d = null;
for (let o of e.children)
o.getAttribute("vbind-if") === t.ifID && (d = o);
l.setAttribute("vbind-if", t.ifID), d ? e.replaceChild(l, d) : e.appendChild(l);
};
i ? n() : h.DomListen(e, n);
}
const k = (e, t, i, n) => {
n || (n = h.GenUniqueID());
let l = document.createElement("div");
return l.style.display = "none", l.style.visibility = "hidden", l.style.height = "0", l.style.width = "0", i && (l = i()), l.setAttribute("vbind-iternone", n), {
obj: e,
fn: t,
iterID: n,
ifnone: l
};
};
function B(e, t, i = !1) {
let n = () => {
let l = [];
for (let r = 0; r < t.obj.length; r++) {
let s = t.obj[r], a = s[h.DataID] || "", u = "";
r < t.obj.length - 1 && (u = t.obj[r + 1][h.DataID] || ""), l.push(a);
let c = -1, f = null, b = null, m = !1;
for (let D = 0; D < e.children.length; D++) {
let v = e.children[D];
if (v.getAttribute("vbind-iter") === t.iterID)
m = !0, v.getAttribute("vbind-iteridx") === a ? (c = D, f = v) : v.getAttribute("vbind-iteridx") === u && u != "" && (b = v);
else if (v.getAttribute("vbind-iternone") === t.iterID)
c == -1 && (b = v);
else if (m) {
b || (b = v);
break;
}
}
c == -1 ? (f = t.fn(s, r), f.setAttribute("vbind-iteridx", a), f.setAttribute("vbind-iter", t.iterID), b ? e.insertBefore(f, b) : e.appendChild(f)) : b && e.insertBefore(f, b);
}
let d = !1, o = [];
for (let r of e.children)
r.getAttribute("vbind-iter") === t.iterID && l.indexOf(r.getAttribute("vbind-iteridx") || "") == -1 && o.push(r), r.getAttribute("vbind-iternone") === t.iterID && (d = !0);
o.forEach((r) => r.remove()), t.obj.length == 0 ? d || e.appendChild(t.ifnone) : d && e.removeChild(t.ifnone);
};
i ? n() : h.DomListen(e, n);
}
function O() {
let e = document.createElement("div");
return e.style.display = "none", e.style.visibility = "hidden", e.style.height = "0", e.style.width = "0", e;
}
export {
U as default,
h as proxy,
U as v,
k as vfor,
M as vspan
};