efront 4.4.14 → 4.5.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/#/345/233/275/351/231/205/345/214/226.yml +53 -5
- package/apps/pivot/api.yml +3 -0
- package/apps/pivot/cert/main.xht +181 -0
- package/apps/pivot/cert/orders.xht +144 -0
- package/apps/pivot/menu.yml +1 -0
- package/coms/basic/assert.js +40 -16
- package/coms/basic/cross_.js +20 -3
- package/coms/basic/renderTags.js +23 -0
- package/coms/basic/shallowClone.js +8 -0
- package/coms/basic/shallowEqual.js +13 -4
- package/coms/basic/valid.js +15 -2
- package/coms/compile//347/264/240/351/246/250.js +2 -1
- package/coms/docs/codetext.xht +3 -3
- package/coms/frame/chat.js +1 -1
- package/coms/kugou/bindScroll.js +1 -1
- package/coms/kugou/krc.js +2 -2
- package/coms/layer/leftCenter.js +5 -5
- package/coms/pivot/acme2.js +185 -0
- package/coms/reptile/colored_console.js +5 -17
- package/coms/zimoli/appendChild.js +3 -2
- package/coms/zimoli/autofocus.js +2 -2
- package/coms/zimoli/button.less +4 -3
- package/coms/zimoli/checker.js +34 -15
- package/coms/zimoli/checker.less +2 -3
- package/coms/zimoli/container.js +20 -16
- package/coms/zimoli/data.js +64 -46
- package/coms/zimoli/field.js +3 -3
- package/coms/zimoli/field.less +8 -2
- package/coms/zimoli/filterTime.js +39 -8
- package/coms/zimoli/fromBase64.js +2 -0
- package/coms/zimoli/grid.js +2 -2
- package/coms/zimoli/isMounted.js +3 -3
- package/coms/zimoli/list.js +3 -3
- package/coms/zimoli/maps.js +1 -1
- package/coms/zimoli/menuList.js +1 -1
- package/coms/zimoli/model.js +41 -5
- package/coms/zimoli/on.js +4 -4
- package/coms/zimoli/remove.js +3 -3
- package/coms/zimoli/render.js +25 -33
- package/coms/zimoli/scrollbar.js +52 -19
- package/coms/zimoli/scrollbar.less +14 -2
- package/coms/zimoli/scrollbar_test.less +1 -0
- package/coms/zimoli/select.js +3 -3
- package/coms/zimoli/table.js +1 -1
- package/coms/zimoli/toBase64.js +16 -6
- package/coms/zimoli/view.js +19 -12
- package/coms/zimoli/view.less +5 -3
- package/docs/loader.js +1 -1
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/frame/chat.js
CHANGED
package/coms/kugou/bindScroll.js
CHANGED
|
@@ -53,6 +53,6 @@ function bindScroll(titlebar, page) {
|
|
|
53
53
|
setOpacity(label, 1 - (titlebar.offsetHeight - topHeight) / (offsetHeight - topHeight));
|
|
54
54
|
return {};
|
|
55
55
|
};
|
|
56
|
-
if (!page
|
|
56
|
+
if (!page.$renders) page.$renders = [];
|
|
57
57
|
page.onscroll = refresh;
|
|
58
58
|
}
|
package/coms/kugou/krc.js
CHANGED
|
@@ -72,7 +72,7 @@ function createLRC(lrc) {
|
|
|
72
72
|
setClass(krcList, index);
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
|
-
if (ele && firstChild && firstChild
|
|
75
|
+
if (ele && firstChild && firstChild.$mounted) {
|
|
76
76
|
var marginTop = (firstChild.parentNode.offsetHeight - ele.offsetHeight >> 1) - ele.offsetTop + firstChild.offsetTop;
|
|
77
77
|
css(firstChild, `margin-top:${marginTop | 0}px;`);
|
|
78
78
|
}
|
|
@@ -140,7 +140,7 @@ function createKRC(krc) {
|
|
|
140
140
|
var current_row_word = current_words[current_row_index];
|
|
141
141
|
var ele = krcList[index];
|
|
142
142
|
var firstChild = krcList[0];
|
|
143
|
-
if (ele && firstChild && firstChild
|
|
143
|
+
if (ele && firstChild && firstChild.$mounted) {
|
|
144
144
|
var marginTop = (firstChild.parentNode.offsetHeight - ele.offsetHeight >> 1) - ele.offsetTop + firstChild.offsetTop;
|
|
145
145
|
if (index > 0) {
|
|
146
146
|
if (markerLabel.parentNode !== ele) {
|
package/coms/layer/leftCenter.js
CHANGED
|
@@ -38,12 +38,12 @@ function setCurrentPage(page) {
|
|
|
38
38
|
var currentLayer = getCurrentLayer();
|
|
39
39
|
if (page !== leftPage) {
|
|
40
40
|
if (currentLayer !== leftLayer) {
|
|
41
|
-
if (!leftPage
|
|
41
|
+
if (!leftPage.$mounted) appendChild(leftLayer, leftPage);
|
|
42
42
|
} else {
|
|
43
43
|
remove(leftPage, false);
|
|
44
44
|
}
|
|
45
45
|
if (page.parentNode !== currentLayer) appendChild(currentLayer, page, false);
|
|
46
|
-
} else if (!leftPage
|
|
46
|
+
} else if (!leftPage.$mounted) {
|
|
47
47
|
appendChild(leftLayer, leftPage, false);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
@@ -54,16 +54,16 @@ function main(_leftPage) {
|
|
|
54
54
|
layer.layer = function (child, old) {
|
|
55
55
|
remove(old);
|
|
56
56
|
if (child === leftPage) {
|
|
57
|
-
if (!leftPage
|
|
57
|
+
if (!leftPage.$mounted) appendChild(leftLayer, child);
|
|
58
58
|
} else if (child) {
|
|
59
59
|
var currentLayer = getCurrentLayer();
|
|
60
60
|
appendChild(currentLayer, child);
|
|
61
61
|
if (currentLayer === leftLayer) {
|
|
62
62
|
if (arguments.length > 1) remove(leftPage);
|
|
63
|
-
} else if (!leftPage
|
|
63
|
+
} else if (!leftPage.$mounted) {
|
|
64
64
|
appendChild(leftLayer, leftPage);
|
|
65
65
|
}
|
|
66
66
|
} else {
|
|
67
|
-
if (!leftPage
|
|
67
|
+
if (!leftPage.$mounted) appendChild(leftLayer, leftPage);
|
|
68
68
|
}
|
|
69
69
|
};
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
var acmebase = `https://acme-v02.api.letsencrypt.org/`;
|
|
2
|
+
// <!-- acmebase=`https://acme-staging-v02.api.letsencrypt.org/` -->
|
|
3
|
+
var data1 = data.enrich(parseYML(`
|
|
4
|
+
${acmebase}:
|
|
5
|
+
directory: get directory
|
|
6
|
+
${acmebase}acme/ Content-Type=application/jose+json:
|
|
7
|
+
key-change: get key-change
|
|
8
|
+
new-account: post:^efront-location new-acct
|
|
9
|
+
get-account: get acct/:aid
|
|
10
|
+
new-order: post:^efront-location new-order
|
|
11
|
+
get-order|: get order/:aid/:oid
|
|
12
|
+
new-nonce: head:^Replay-Nonce new-nonce
|
|
13
|
+
revert-cert: post:^efront-location revert-cert
|
|
14
|
+
`));
|
|
15
|
+
var publicKey, privateKey;
|
|
16
|
+
var private_key, public_key;
|
|
17
|
+
var RSASSA_PKCS1_v1_5 = "RSASSA-PKCS1-v1_5";
|
|
18
|
+
var base64url = function (params) {
|
|
19
|
+
var data = JSON.stringify(params);
|
|
20
|
+
return toBase64(encodeUTF8(data), true);
|
|
21
|
+
};
|
|
22
|
+
var accountApi = await data1.getApi('get-account');
|
|
23
|
+
var orderApi = await data1.getApi('get-order');
|
|
24
|
+
|
|
25
|
+
var request = async function (id, params) {
|
|
26
|
+
var api = await data1.getApi(id);
|
|
27
|
+
if (/^(get|head)$/i.test(api.method)) return data1.from(id, params);
|
|
28
|
+
var protected = {
|
|
29
|
+
url: api.base + api.path,
|
|
30
|
+
};
|
|
31
|
+
var rest;
|
|
32
|
+
[protected.url, rest] = data.prepareURL(protected.url, params);
|
|
33
|
+
var restparams = {};
|
|
34
|
+
rest.forEach(k => { restparams[k] = params[k]; delete params[k]; });
|
|
35
|
+
var jwk = await subtle.exportKey("jwk", publicKey);
|
|
36
|
+
protected.alg = jwk.alg;
|
|
37
|
+
if (/new-account|revert-cert/i.test(id)) {
|
|
38
|
+
protected.jwk = {
|
|
39
|
+
e: jwk.e,
|
|
40
|
+
kty: jwk.kty,
|
|
41
|
+
n: jwk.n
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
protected.kid = acme2.kid;
|
|
46
|
+
}
|
|
47
|
+
protected.nonce = await data1.from("new-nonce");
|
|
48
|
+
var payload = isEmpty(params) ? '' : base64url(params);
|
|
49
|
+
protected = base64url(protected);
|
|
50
|
+
var params = {
|
|
51
|
+
protected,
|
|
52
|
+
payload,
|
|
53
|
+
signature: toBase64(new Uint8Array(await subtle.sign({ name: RSASSA_PKCS1_v1_5, saltLength: 32 }, privateKey, new Uint8Array(encodeUTF8([protected, '.', payload].join(''))))), true)
|
|
54
|
+
};
|
|
55
|
+
extend(params, restparams);
|
|
56
|
+
var account = await data1.from(id, params);
|
|
57
|
+
return account;
|
|
58
|
+
};
|
|
59
|
+
var subtle = this.crypto?.subtle;
|
|
60
|
+
var acme2 = new class {
|
|
61
|
+
email = '';
|
|
62
|
+
kid = '';
|
|
63
|
+
aid = '';
|
|
64
|
+
oid = '';
|
|
65
|
+
domain = '';
|
|
66
|
+
termsOfServiceAgreed = false;
|
|
67
|
+
orders = [];
|
|
68
|
+
public_key = '';
|
|
69
|
+
get enabled() {
|
|
70
|
+
return !!subtle;
|
|
71
|
+
}
|
|
72
|
+
async initUnique() {
|
|
73
|
+
//https://www.w3.org/TR/WebCryptoAPI/ 第20章 只有RSASSA-PKCS1-v1_5的jwk的alg才是rs256
|
|
74
|
+
var k = await subtle.generateKey({
|
|
75
|
+
name: RSASSA_PKCS1_v1_5,
|
|
76
|
+
modulusLength: 4096,
|
|
77
|
+
publicExponent: new Uint8Array([1, 0, 1]),
|
|
78
|
+
hash: "SHA-256",
|
|
79
|
+
}, true, ["sign", "verify"]);
|
|
80
|
+
var { publicKey, privateKey } = k;
|
|
81
|
+
private_key = await subtle.exportKey("pkcs8", privateKey);
|
|
82
|
+
public_key = await subtle.exportKey("spki", publicKey);
|
|
83
|
+
private_key = toBase64(new Uint8Array(private_key));
|
|
84
|
+
public_key = toBase64(new Uint8Array(public_key));
|
|
85
|
+
var unique = [private_key, public_key].join(',');
|
|
86
|
+
await acme2.makeUnique(unique);
|
|
87
|
+
}
|
|
88
|
+
async makeUnique(unique) {
|
|
89
|
+
if (!unique) return;
|
|
90
|
+
var avme2 = this;
|
|
91
|
+
var extra;
|
|
92
|
+
[private_key, public_key, extra] = unique.split(',');
|
|
93
|
+
if (extra) {
|
|
94
|
+
extra = JSON.parse(decodeUTF8(fromBase64(extra)));
|
|
95
|
+
avme2.email = extra.email;
|
|
96
|
+
avme2.kid = extra.kid;
|
|
97
|
+
if (extra.kid) {
|
|
98
|
+
var account = data.getUrlParamsForApi(accountApi, extra.kid);
|
|
99
|
+
avme2.aid = account.aid;
|
|
100
|
+
}
|
|
101
|
+
avme2.domain = extra.domain;
|
|
102
|
+
avme2.termsOfServiceAgreed = extra.termsOfServiceAgreed;
|
|
103
|
+
avme2.orders = extra.orders;
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
privateKey = await subtle.importKey("pkcs8", new Uint8Array(fromBase64(private_key)), {
|
|
107
|
+
name: RSASSA_PKCS1_v1_5,
|
|
108
|
+
hash: "SHA-256",
|
|
109
|
+
}, true, ["sign"]);
|
|
110
|
+
publicKey = await subtle.importKey("spki", new Uint8Array(fromBase64(public_key)), {
|
|
111
|
+
name: RSASSA_PKCS1_v1_5,
|
|
112
|
+
hash: "SHA-256",
|
|
113
|
+
}, true, ["verify"]);
|
|
114
|
+
|
|
115
|
+
avme2.public_key = public_key;
|
|
116
|
+
} catch (e) { alert("加载服务器公钥异常!", "error"); throw e }
|
|
117
|
+
}
|
|
118
|
+
pickUnique() {
|
|
119
|
+
var avme2 = this;
|
|
120
|
+
var extra = {
|
|
121
|
+
kid: avme2.kid,
|
|
122
|
+
email: avme2.email,
|
|
123
|
+
domain: avme2.domain,
|
|
124
|
+
orders: avme2.orders,
|
|
125
|
+
termsOfServiceAgreed: avme2.termsOfServiceAgreed
|
|
126
|
+
};
|
|
127
|
+
return [private_key, public_key, base64url(extra)].join(",");
|
|
128
|
+
}
|
|
129
|
+
async getTermsOfService() {
|
|
130
|
+
var data = await data1.from("directory");
|
|
131
|
+
var termsOfService = data?.meta?.termsOfService;
|
|
132
|
+
return termsOfService;
|
|
133
|
+
}
|
|
134
|
+
async newAccount(params) {
|
|
135
|
+
var account = await request("new-account", {
|
|
136
|
+
"contact": [
|
|
137
|
+
"mailto:" + params.email
|
|
138
|
+
],
|
|
139
|
+
// onlyReturnExisting: false,// 可选
|
|
140
|
+
// externalAccountBinding: {},// 可选
|
|
141
|
+
"termsOfServiceAgreed": params.termsOfServiceAgreed
|
|
142
|
+
});
|
|
143
|
+
this.email = params.email;
|
|
144
|
+
this.termsOfServiceAgreed = params.termsOfServiceAgreed;
|
|
145
|
+
this.kid = account;
|
|
146
|
+
var a = data.getUrlParamsForApi(accountApi, account);
|
|
147
|
+
this.aid = a.aid;
|
|
148
|
+
return account;
|
|
149
|
+
}
|
|
150
|
+
async newOrder(params) {
|
|
151
|
+
var params = {
|
|
152
|
+
"identifiers": params.domain.trim().split(/[,;+,;\r\n\u2029\u2028\s]+/).map(n => {
|
|
153
|
+
if (/^\d+(\.\d+){3}$|^\[[\da-f\:]+\]$|^[\da-f\:]+$/i.test(n)) return { type: "ipv4", value: n };
|
|
154
|
+
return { type: "dns", value: n };
|
|
155
|
+
})
|
|
156
|
+
};
|
|
157
|
+
var order = await request("new-order", params);
|
|
158
|
+
this.domain = params.domain;
|
|
159
|
+
if (!this.orders) this.orders = [];
|
|
160
|
+
if (this.orders.indexOf(order) < 0) this.orders.unshift(order);
|
|
161
|
+
return order;
|
|
162
|
+
}
|
|
163
|
+
parseOrder(o) {
|
|
164
|
+
if (typeof o !== 'string') return o;
|
|
165
|
+
var order = data.getUrlParamsForApi(orderApi, o);
|
|
166
|
+
order.name = order.oid;
|
|
167
|
+
return order;
|
|
168
|
+
}
|
|
169
|
+
async getOrder(o) {
|
|
170
|
+
var r = await data.from(orderApi, o);
|
|
171
|
+
if (r.expires) r.expires = new Date(r.expires);
|
|
172
|
+
return r;
|
|
173
|
+
}
|
|
174
|
+
async thumbprint() {
|
|
175
|
+
var jwk = await subtle.exportKey('jwk', publicKey);
|
|
176
|
+
jwk = `{"e":"${jwk.e}","kty":"${jwk.kty}","n":"${jwk.n}"}`;
|
|
177
|
+
console.log(JSON.parse(jwk))
|
|
178
|
+
var thumb = await subtle.digest("SHA-256", new Uint8Array(encodeUTF8(jwk)));
|
|
179
|
+
thumb = toBase64(new Uint8Array(thumb), true);
|
|
180
|
+
return thumb;
|
|
181
|
+
}
|
|
182
|
+
async audit(url) {
|
|
183
|
+
return data.fromURL(url);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
var colored = Object.create(null);
|
|
3
3
|
var lazy = require("../basic/lazy");
|
|
4
4
|
var colors = require("./colors");
|
|
5
|
+
var renderTags = require("../basic/renderTags");
|
|
5
6
|
var strings = require("../basic/strings");
|
|
6
7
|
var lastLogLength = 0;
|
|
7
8
|
var needNextLine = false;
|
|
8
9
|
var getColor = function (c) {
|
|
10
|
+
if (!c) return colors.Reset;
|
|
9
11
|
switch (c) {
|
|
10
12
|
case "red":
|
|
11
13
|
case "error":
|
|
@@ -30,23 +32,9 @@ var getColor = function (c) {
|
|
|
30
32
|
}
|
|
31
33
|
return '';
|
|
32
34
|
};
|
|
33
|
-
var colorReg =
|
|
35
|
+
var colorReg = renderTags.reg;
|
|
34
36
|
var renderColor = function (obj) {
|
|
35
|
-
|
|
36
|
-
return String(obj).replace(colorReg, function (_, e, c) {
|
|
37
|
-
if (!c || c.length < 3 || !getColor(c)) return _;
|
|
38
|
-
if (e) {
|
|
39
|
-
colorpath.pop();
|
|
40
|
-
c = colorpath[colorpath.length - 1];
|
|
41
|
-
}
|
|
42
|
-
else colorpath.push(c);
|
|
43
|
-
if (c) var color = getColor(c);
|
|
44
|
-
var res = [];
|
|
45
|
-
if (e) res.push(colors.Reset);
|
|
46
|
-
if (color) res.push(color);
|
|
47
|
-
if (res.length) return res.join('');
|
|
48
|
-
return _;
|
|
49
|
-
});
|
|
37
|
+
return renderTags(obj, getColor);
|
|
50
38
|
};
|
|
51
39
|
|
|
52
40
|
var write = function (hasNewLine, str) {
|
|
@@ -195,7 +183,7 @@ var format = function (arg, deep = 0) {
|
|
|
195
183
|
}
|
|
196
184
|
if (arg instanceof Buffer || arg instanceof ArrayBuffer || arg instanceof SharedArrayBuffer) {
|
|
197
185
|
var data = new Uint8Array(arg.buffer || arg, arg.byteOffset || 0, arg.byteLength);
|
|
198
|
-
return `<magenta><${arg.constructor.name} ${Array.prototype.slice.call(data, 0, 20).map(a => a < 16 ? "0" + a.toString(16) : a.toString(16)).join(' ')}${arg.byteLength > 20 ? ` ... 其他 ${arg.byteLength - 20} 字节` : ''}></
|
|
186
|
+
return `<magenta><${arg.constructor.name} ${Array.prototype.slice.call(data, 0, 20).map(a => a < 16 ? "0" + a.toString(16) : a.toString(16)).join(' ')}${arg.byteLength > 20 ? ` ... 其他 ${arg.byteLength - 20} 字节` : ''}></magenta>`;
|
|
199
187
|
}
|
|
200
188
|
else if (isFinite(arg.length)) {
|
|
201
189
|
var entry = "[";
|
|
@@ -9,9 +9,9 @@ function hasEnterStyle(e) {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
function _onappend(node, append = createEvent("append"), mount = createEvent("mounted")) {
|
|
12
|
-
if (node
|
|
12
|
+
if (node.$mounted) return;
|
|
13
13
|
if (node.nodeType !== 1 && node.nodeType !== 8) return;
|
|
14
|
-
node
|
|
14
|
+
node.$mounted = true;
|
|
15
15
|
dispatch(node, append);
|
|
16
16
|
var children = Array.apply(null, node.childNodes);
|
|
17
17
|
for (var c of children) {
|
|
@@ -71,6 +71,7 @@ function insertAfter(alreadyMounted, obj, transition) {
|
|
|
71
71
|
children = children.reverse();
|
|
72
72
|
for (var cx = 0, dx = children.length; cx < dx; cx++) {
|
|
73
73
|
var o = release(children[cx]);
|
|
74
|
+
if (!o) continue;
|
|
74
75
|
if (o.removeTimer) clearTimeout(o.removeTimer);
|
|
75
76
|
parent.insertBefore(o, alreadyMounted.nextSibling);
|
|
76
77
|
o.with && insertBefore(alreadyMounted.nextSibling, o.with, transition);
|
package/coms/zimoli/autofocus.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
function autofocus(e) {
|
|
2
|
-
if (!e
|
|
2
|
+
if (!e.$renders) e.$renders = [];
|
|
3
3
|
var savedElement;
|
|
4
|
-
e
|
|
4
|
+
e.$renders.push(function () {
|
|
5
5
|
var parent = rootElements[rootElements.length - 1] || document.body;
|
|
6
6
|
if (savedElement === this) {
|
|
7
7
|
if (this !== parent || getTargetIn(parent, document.activeElement)) return;
|
package/coms/zimoli/button.less
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
@default-color: #0092cc;
|
|
2
2
|
|
|
3
|
+
:not(button, a)& {
|
|
4
|
+
display: inline-block;
|
|
5
|
+
}
|
|
6
|
+
|
|
3
7
|
& {
|
|
4
|
-
font-size: 14px;
|
|
5
8
|
width: auto;
|
|
6
9
|
line-height: 28px;
|
|
7
10
|
background-color: @default-color;
|
|
@@ -11,7 +14,6 @@
|
|
|
11
14
|
position: relative;
|
|
12
15
|
border: none;
|
|
13
16
|
margin: 0;
|
|
14
|
-
display: inline-block;
|
|
15
17
|
white-space: nowrap;
|
|
16
18
|
text-align: center;
|
|
17
19
|
overflow: hidden;
|
|
@@ -179,7 +181,6 @@
|
|
|
179
181
|
content: "↻";
|
|
180
182
|
font-family: 'Times New Roman', Times, serif;
|
|
181
183
|
display: inline-block;
|
|
182
|
-
vertical-align: middle;
|
|
183
184
|
position: absolute;
|
|
184
185
|
animation: busy-pending 2s linear 0s infinite;
|
|
185
186
|
}
|
package/coms/zimoli/checker.js
CHANGED
|
@@ -1,15 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return
|
|
15
|
-
|
|
1
|
+
var falseMap = Object.create(null);
|
|
2
|
+
falseMap["off"] = "on";
|
|
3
|
+
falseMap["false"] = "true";
|
|
4
|
+
falseMap["null"] = "true";
|
|
5
|
+
falseMap["0"] = "1";
|
|
6
|
+
var trueMap = Object.create(null);
|
|
7
|
+
for (var k in falseMap) trueMap[falseMap[k]] = falseMap[k];
|
|
8
|
+
var isTrue = function (v) {
|
|
9
|
+
return !!+v || v in trueMap;
|
|
10
|
+
};
|
|
11
|
+
var changeValue = function (value) {
|
|
12
|
+
if (typeof value === 'boolean') return !value;
|
|
13
|
+
if (value & 1 === value) return 1 - value;
|
|
14
|
+
if (value in trueMap) return trueMap[value];
|
|
15
|
+
if (typeof value === 'number') return +!+value;
|
|
16
|
+
return !+value;
|
|
17
|
+
};
|
|
18
|
+
var setValue = function (value) {
|
|
19
|
+
if (value === this.value) return;
|
|
20
|
+
this.value = value;
|
|
21
|
+
value = isTrue(value);
|
|
22
|
+
if (value) {
|
|
23
|
+
addClass(this, 'checked');
|
|
24
|
+
} else {
|
|
25
|
+
removeClass(this, 'checked');
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
function checker(ck = document.createElement('check')) {
|
|
29
|
+
ck.innerHTML = template;
|
|
30
|
+
ck.setValue = setValue;
|
|
31
|
+
return ck;
|
|
32
|
+
}
|
|
33
|
+
checker.isTrue = isTrue;
|
|
34
|
+
checker.changeValue = changeValue;
|
package/coms/zimoli/checker.less
CHANGED
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
width: .8em;
|
|
4
4
|
position: relative;
|
|
5
5
|
border: .1em solid;
|
|
6
|
-
margin
|
|
6
|
+
margin: -0.06em .3em -0.06em 0;
|
|
7
7
|
font-family: sans-serif;
|
|
8
8
|
display: inline-block;
|
|
9
9
|
line-height: 1;
|
|
10
10
|
text-align: center;
|
|
11
|
-
|
|
11
|
+
box-sizing: border-box;
|
|
12
12
|
border-radius: .12em;
|
|
13
|
-
vertical-align: middle;
|
|
14
13
|
|
|
15
14
|
>s {
|
|
16
15
|
display: none;
|
package/coms/zimoli/container.js
CHANGED
|
@@ -1,34 +1,38 @@
|
|
|
1
|
-
var change = async function (
|
|
2
|
-
if (
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
var change = lazy(async function (src) {
|
|
2
|
+
if (src !== this.$src) return;
|
|
3
|
+
if (!src) remove(this.with);
|
|
4
|
+
else if (isNode(src)) {
|
|
5
|
+
if (isElement(src) && this.$struct.copys) {
|
|
5
6
|
for (var c of this.$struct.copys) {
|
|
6
7
|
if (c.name === 'class') {
|
|
7
|
-
addClass(
|
|
8
|
+
addClass(src, c.value);
|
|
8
9
|
}
|
|
9
10
|
else if (c.name === 'style') {
|
|
10
|
-
css(
|
|
11
|
+
css(src, c.value);
|
|
11
12
|
}
|
|
12
|
-
else
|
|
13
|
+
else src.setAttribute(c.name, c.value);
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
|
-
zimoli.global(
|
|
16
|
-
}
|
|
17
|
-
else if (isString(data) || +data < 0) zimoli.go(data, this.params, this);
|
|
18
|
-
};
|
|
19
|
-
var gosrc = function () {
|
|
20
|
-
var { src } = this;
|
|
21
|
-
if (this.hasAttribute && this.hasAttribute('src')) {
|
|
22
|
-
src = this.getAttribute('src');
|
|
16
|
+
zimoli.global(src, this);
|
|
23
17
|
}
|
|
18
|
+
else if (isString(src) || +src < 0) zimoli.go(src, this.params, this);
|
|
19
|
+
});
|
|
20
|
+
var gosrc = function (src) {
|
|
24
21
|
if (src !== this.$src) {
|
|
25
|
-
change.call(this, src);
|
|
26
22
|
this.$src = src;
|
|
23
|
+
change.call(this, src);
|
|
27
24
|
}
|
|
28
25
|
};
|
|
29
26
|
function container(element) {
|
|
30
27
|
var comment = document.createComment('container');
|
|
31
28
|
comment.$struct = element.$struct;
|
|
32
29
|
care(comment, gosrc);
|
|
30
|
+
if (element.hasAttribute && element.hasAttribute('src')) {
|
|
31
|
+
var src = element.getAttribute('src');
|
|
32
|
+
if (src) oncemount(comment, function () {
|
|
33
|
+
if ("$src" in this) return;
|
|
34
|
+
gosrc.call(this, src);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
33
37
|
return comment;
|
|
34
38
|
}
|