efront 4.4.13 → 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 +54 -6
- 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/i18n.md +4 -2
- 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/common.js +23 -0
- package/coms/compile/translate.js +29 -11
- package/coms/compile/translate_test.js +8 -0
- 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 +40 -9
- 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/compile/common.js
CHANGED
|
@@ -1374,6 +1374,28 @@ var canbeTemp = function (body, strip = false) {
|
|
|
1374
1374
|
if (!o) return false;
|
|
1375
1375
|
return o.type === EXPRESS && (strip || !/[\.\[]/.test(o.text)) || o.type === VALUE || o.type === QUOTED && !o.length;
|
|
1376
1376
|
};
|
|
1377
|
+
var canbeDuplicate = function (body) {
|
|
1378
|
+
for (var b of body) {
|
|
1379
|
+
switch (b.type) {
|
|
1380
|
+
case EXPRESS:
|
|
1381
|
+
if (/[\.\[]/.test(b.text)) return false;
|
|
1382
|
+
break;
|
|
1383
|
+
case SCOPED:
|
|
1384
|
+
if (b.isObject || b.isClass || b.entry === '[') return false;
|
|
1385
|
+
if (!isEval(b)) return false;
|
|
1386
|
+
if (!canbeTemp(b)) return false;
|
|
1387
|
+
break;
|
|
1388
|
+
case QUOTED:
|
|
1389
|
+
if (b.length && !canbeTemp(b)) return false;
|
|
1390
|
+
break;
|
|
1391
|
+
case STAMP:
|
|
1392
|
+
if (/^(\+\+|\-\-)$|^([^\=\>\<]+|>>>?|<<)?\=$/.test(b.text)) return false;
|
|
1393
|
+
break;
|
|
1394
|
+
case ELEMENT: return false;
|
|
1395
|
+
}
|
|
1396
|
+
}
|
|
1397
|
+
return true;
|
|
1398
|
+
};
|
|
1377
1399
|
var pickArgument = function (o) {
|
|
1378
1400
|
var res = [];
|
|
1379
1401
|
var t = o && o.prev, p = o;
|
|
@@ -1457,6 +1479,7 @@ module.exports = {
|
|
|
1457
1479
|
setqueue,
|
|
1458
1480
|
replace,
|
|
1459
1481
|
canbeTemp,
|
|
1482
|
+
canbeDuplicate,
|
|
1460
1483
|
skipFunction,
|
|
1461
1484
|
isHalfSentence,
|
|
1462
1485
|
splice,
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
var scanner2 = require("./scanner2");
|
|
2
|
-
var { SCOPED, QUOTED, SCOPED, PROPERTY, STAMP, PIECE, setqueue, splice, relink, number_reg, replace, createString } = require("./common");
|
|
2
|
+
var { SCOPED, QUOTED, SCOPED, PROPERTY, STAMP, PIECE, setqueue, splice, relink, number_reg, replace, canbeDuplicate, createString } = require("./common");
|
|
3
3
|
var strings = require("../basic/strings");
|
|
4
4
|
var program = null;
|
|
5
5
|
var patchTranslate = function (c) {
|
|
6
6
|
if (c.length) {
|
|
7
|
-
|
|
7
|
+
var canbeDup = true;
|
|
8
|
+
c.translate = c.map((o, i) => {
|
|
9
|
+
if (o.type === PIECE) return strings.decode(`\`${o.text}\``);
|
|
10
|
+
if (canbeDup && !canbeDuplicate(o)) canbeDup = false;
|
|
11
|
+
return `$${i + 1 >> 1}`;
|
|
12
|
+
}).join('').replace(/\r\n|\r|\n/g, '\r\n');
|
|
13
|
+
c.nodup = !canbeDup;
|
|
8
14
|
}
|
|
9
15
|
else {
|
|
10
16
|
if (/^['"`]/.test(c.text) && c.text.length > 2) {
|
|
@@ -74,7 +80,7 @@ var ctn = function (tt, t) {
|
|
|
74
80
|
if (a in t) return `\${${a}}`;
|
|
75
81
|
return _;
|
|
76
82
|
}));
|
|
77
|
-
tn[
|
|
83
|
+
(tn[0].type === SCOPED ? tn[0] : tn[1]).forEach(n => {
|
|
78
84
|
if (n.type !== QUOTED || !n.length) return;
|
|
79
85
|
n.forEach((a, i) => {
|
|
80
86
|
if (a.type !== SCOPED) return;
|
|
@@ -91,13 +97,25 @@ function translate([imap, supports], code) {
|
|
|
91
97
|
if (a.start > b.start && a.end < b.end) return -1;
|
|
92
98
|
return 0;
|
|
93
99
|
});
|
|
94
|
-
var getm = function (tt, warn) {
|
|
95
|
-
|
|
96
|
-
|
|
100
|
+
var getm = function (tt, nodup, warn) {
|
|
101
|
+
var mq = /^(\s*)([\s\S]*?)(\s*)$/.exec(tt);
|
|
102
|
+
var mq = [mq[1] || '', mq[2], mq[3] || ''];
|
|
103
|
+
var tt = mq[1];
|
|
104
|
+
var wrap = m => {
|
|
105
|
+
mq[1] = m || tt;
|
|
106
|
+
return strings.encode(mq.join(''), '`');
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
var imp = imap[tt];
|
|
110
|
+
if (!imp) {
|
|
97
111
|
if (warn !== false) console.warn(`<yellow>${i18n`国际化翻译缺失:`}</yellow>${tt}`);
|
|
98
|
-
imap[tt] = supports.map(_ => tt);
|
|
112
|
+
imp = imap[tt] = supports.map(_ => tt);
|
|
99
113
|
}
|
|
100
|
-
|
|
114
|
+
if (nodup && imp.length <= 1) nodup = false;
|
|
115
|
+
var mp = nodup ? m => "()=>" + wrap(m) : m => wrap(m);
|
|
116
|
+
var m = `(${imp.map(mp)})`;
|
|
117
|
+
if (nodup) m += '()';
|
|
118
|
+
return m;
|
|
101
119
|
};
|
|
102
120
|
var used = code.used;
|
|
103
121
|
for (var t of texts) {
|
|
@@ -109,8 +127,8 @@ function translate([imap, supports], code) {
|
|
|
109
127
|
p.leave = ")";
|
|
110
128
|
}
|
|
111
129
|
var tt = t.translate;
|
|
112
|
-
var tn = ctn(
|
|
113
|
-
replace(t, tn
|
|
130
|
+
var tn = ctn(getm(tt, t.nodup), t);
|
|
131
|
+
replace(t, ...tn);
|
|
114
132
|
}
|
|
115
133
|
else if (t.transtype === 字段名) {
|
|
116
134
|
var i = t.queue.indexOf(t.prev);
|
|
@@ -138,7 +156,7 @@ function translate([imap, supports], code) {
|
|
|
138
156
|
if (a in t) v = t[a];
|
|
139
157
|
else v = scanner2(JSON.stringify(v));
|
|
140
158
|
}
|
|
141
|
-
else if (k === 'name') v = ctn(
|
|
159
|
+
else if (k === 'name') v = ctn('i18n' + getm(v, t.nodup, t.warn), t);
|
|
142
160
|
else v = scanner2(JSON.stringify(v));
|
|
143
161
|
o.push({ type: PROPERTY, isprop: true, text: JSON.stringify(k) }, { type: STAMP, text: ':' }, ...v, { type: STAMP, text: ',' });
|
|
144
162
|
})
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
var test = function (src, text, expact) {
|
|
2
|
+
var code = scanner2(text);
|
|
3
|
+
translate([src, Object.keys(src)], code);
|
|
4
|
+
assert(code.toString(), expact);
|
|
5
|
+
};
|
|
6
|
+
test({ "a$1b": ["a$1b", "c$1d"] }, 'i18n`a${a}b`', 'i18n(`a${a}b`, `c${a}d`)')
|
|
7
|
+
test({ "a$1b": ["a$1b", "c$1d"] }, 'i18n`a${a++}b`', 'i18n(() => `a${a++}b`, () => `c${a++}d`)()')
|
|
8
|
+
test({ "a$1b": ["c$1d"] }, 'i18n`a${a++}b`', 'i18n(`c${a++}d`)')
|
|
@@ -401,7 +401,6 @@ var getFromScopeList = function (name, varsList, value = name) {
|
|
|
401
401
|
};
|
|
402
402
|
var removeSelectorSpace = a => a.trim().replace(/\s*([\+~\>])\s*/g, "$1");
|
|
403
403
|
var fixBase = function (b, a) {
|
|
404
|
-
var s = splitParams(a);
|
|
405
404
|
return splitParams(a).map(a => {
|
|
406
405
|
if (presets.test(a)) a = `@{${a}}`;
|
|
407
406
|
var replaced = false;
|
|
@@ -426,9 +425,11 @@ function evalscoped(scoped, base = '') {
|
|
|
426
425
|
base = removeSelectorSpace(base);
|
|
427
426
|
var smaps = scoped.maps;
|
|
428
427
|
var root = smaps[":root"], scope = smaps[":scope"];
|
|
428
|
+
var and = smaps["&"];
|
|
429
429
|
var vars = extend(Object.create(null), scoped.vars);
|
|
430
430
|
if (root) root.forEach(r => extend(vars, r.vars));
|
|
431
431
|
if (scope) scope.forEach(s => extend(vars, s.vars));
|
|
432
|
+
if (and) and.forEach(a => extend(vars, a.vars));
|
|
432
433
|
var vlist = [vars];
|
|
433
434
|
var mlist = [macros];
|
|
434
435
|
var clist = [smaps];
|
package/coms/docs/codetext.xht
CHANGED
|
@@ -109,8 +109,8 @@
|
|
|
109
109
|
case QUOTED:
|
|
110
110
|
if (o.length || !o.text) {
|
|
111
111
|
o.forEach(setcolor);
|
|
112
|
-
o.entry = "<text>" + o.entry;
|
|
113
|
-
o.leave = o.leave + "</text>";
|
|
112
|
+
o.entry = "<text>" + o.entry + "</text>";
|
|
113
|
+
o.leave = "<text>" + o.leave + "</text>";
|
|
114
114
|
break;
|
|
115
115
|
}
|
|
116
116
|
case PIECE:
|
|
@@ -299,7 +299,7 @@
|
|
|
299
299
|
}
|
|
300
300
|
}
|
|
301
301
|
if (minSpace > 0) codes = codes.map(c => /^\s+/.test(c) ? c.slice(minSpace) : c);
|
|
302
|
-
return `<code type=${type}>${codes.join("<br/>").replace(/\t/g, Array(5).join(' ')).replace(/\s/g, ' ')}</code
|
|
302
|
+
return `<code type=${type}>${codes.join("<br/>").replace(/\t/g, Array(5).join(' ')).replace(/\s/g, ' ')}</code>`;
|
|
303
303
|
}
|
|
304
304
|
codetext.encode = encode;
|
|
305
305
|
</script>
|
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
|
}
|