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.
Files changed (50) hide show
  1. package/#/345/233/275/351/231/205/345/214/226.yml +53 -5
  2. package/apps/pivot/api.yml +3 -0
  3. package/apps/pivot/cert/main.xht +181 -0
  4. package/apps/pivot/cert/orders.xht +144 -0
  5. package/apps/pivot/menu.yml +1 -0
  6. package/coms/basic/assert.js +40 -16
  7. package/coms/basic/cross_.js +20 -3
  8. package/coms/basic/renderTags.js +23 -0
  9. package/coms/basic/shallowClone.js +8 -0
  10. package/coms/basic/shallowEqual.js +13 -4
  11. package/coms/basic/valid.js +15 -2
  12. package/coms/compile//347/264/240/351/246/250.js +2 -1
  13. package/coms/docs/codetext.xht +3 -3
  14. package/coms/frame/chat.js +1 -1
  15. package/coms/kugou/bindScroll.js +1 -1
  16. package/coms/kugou/krc.js +2 -2
  17. package/coms/layer/leftCenter.js +5 -5
  18. package/coms/pivot/acme2.js +185 -0
  19. package/coms/reptile/colored_console.js +5 -17
  20. package/coms/zimoli/appendChild.js +3 -2
  21. package/coms/zimoli/autofocus.js +2 -2
  22. package/coms/zimoli/button.less +4 -3
  23. package/coms/zimoli/checker.js +34 -15
  24. package/coms/zimoli/checker.less +2 -3
  25. package/coms/zimoli/container.js +20 -16
  26. package/coms/zimoli/data.js +64 -46
  27. package/coms/zimoli/field.js +3 -3
  28. package/coms/zimoli/field.less +8 -2
  29. package/coms/zimoli/filterTime.js +39 -8
  30. package/coms/zimoli/fromBase64.js +2 -0
  31. package/coms/zimoli/grid.js +2 -2
  32. package/coms/zimoli/isMounted.js +3 -3
  33. package/coms/zimoli/list.js +3 -3
  34. package/coms/zimoli/maps.js +1 -1
  35. package/coms/zimoli/menuList.js +1 -1
  36. package/coms/zimoli/model.js +41 -5
  37. package/coms/zimoli/on.js +4 -4
  38. package/coms/zimoli/remove.js +3 -3
  39. package/coms/zimoli/render.js +25 -33
  40. package/coms/zimoli/scrollbar.js +52 -19
  41. package/coms/zimoli/scrollbar.less +14 -2
  42. package/coms/zimoli/scrollbar_test.less +1 -0
  43. package/coms/zimoli/select.js +3 -3
  44. package/coms/zimoli/table.js +1 -1
  45. package/coms/zimoli/toBase64.js +16 -6
  46. package/coms/zimoli/view.js +19 -12
  47. package/coms/zimoli/view.less +5 -3
  48. package/docs/loader.js +1 -1
  49. package/package.json +1 -1
  50. package/public/efront.js +1 -1
@@ -168,7 +168,7 @@ function chat(title = '会话窗口') {
168
168
  }
169
169
  }
170
170
  };
171
- page.renders = [function () {
171
+ page.$renders = [function () {
172
172
  this.$scope.resize(this.$scope.body);
173
173
  }];
174
174
  page.localid = localid;
@@ -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.renders) page.renders = [];
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.isMounted) {
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.isMounted) {
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) {
@@ -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.isMounted) appendChild(leftLayer, 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.isMounted) {
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.isMounted) appendChild(leftLayer, child);
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.isMounted) {
63
+ } else if (!leftPage.$mounted) {
64
64
  appendChild(leftLayer, leftPage);
65
65
  }
66
66
  } else {
67
- if (!leftPage.isMounted) appendChild(leftLayer, 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 = /<(\/?)([a-z][\w]*)\>/ig;
35
+ var colorReg = renderTags.reg;
34
36
  var renderColor = function (obj) {
35
- var colorpath = [];
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} 字节` : ''}></megenta>`;
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.isMounted) return;
12
+ if (node.$mounted) return;
13
13
  if (node.nodeType !== 1 && node.nodeType !== 8) return;
14
- node.isMounted = true;
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);
@@ -1,7 +1,7 @@
1
1
  function autofocus(e) {
2
- if (!e.renders) e.renders = [];
2
+ if (!e.$renders) e.$renders = [];
3
3
  var savedElement;
4
- e.renders.push(function () {
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;
@@ -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
  }
@@ -1,15 +1,34 @@
1
- function main(elem = document.createElement("check")) {
2
- var page = elem;
3
- page.innerHTML = checker;
4
- page.setValue = function (value) {
5
- value = !!value;
6
- if (value === this.value) return;
7
- this.value = value;
8
- if (value) {
9
- addClass(page, 'checked');
10
- } else {
11
- removeClass(page, 'checked');
12
- }
13
- };
14
- return page;
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;
@@ -3,14 +3,13 @@
3
3
  width: .8em;
4
4
  position: relative;
5
5
  border: .1em solid;
6
- margin-right: .3em;
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
- margin-top: .15em;
11
+ box-sizing: border-box;
12
12
  border-radius: .12em;
13
- vertical-align: middle;
14
13
 
15
14
  >s {
16
15
  display: none;
@@ -1,34 +1,38 @@
1
- var change = async function (data) {
2
- if (!data) remove(this.with);
3
- else if (isNode(data)) {
4
- if (isElement(data) && this.$struct.copys) {
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(data, c.value);
8
+ addClass(src, c.value);
8
9
  }
9
10
  else if (c.name === 'style') {
10
- css(data, c.value);
11
+ css(src, c.value);
11
12
  }
12
- else data.setAttribute(c.name, c.value);
13
+ else src.setAttribute(c.name, c.value);
13
14
  }
14
15
  }
15
- zimoli.global(data, this);
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
  }