efront 4.21.4 → 4.22.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 (85) hide show
  1. package/#/345/233/275/351/231/205/345/214/226.yml +24 -0
  2. package/apps/blank/index.html +1 -1
  3. package/apps/index.jsp +76 -27
  4. package/apps/pay/alipay-query.jsp +1 -1
  5. package/apps/pay/alipay.jsp +1 -1
  6. package/apps/pivot/auth/login.js +2 -2
  7. package/apps/pivot/cert/main.xht +18 -5
  8. package/apps/pivot/db/act.xht +53 -0
  9. package/apps/pivot/db/config.xht +56 -16
  10. package/apps/pivot/home/welcome.html +12 -13
  11. package/apps/pivot/home/welcome.js +6 -6
  12. package/apps/pivot/home/welcome.less +12 -3
  13. package/apps/pivot/link/room.js +1 -1
  14. package/apps/pivot/main.js +3 -2
  15. package/apps/pivot/task/invoke.js +3 -3
  16. package/apps/pivot/task/rsync.js +2 -2
  17. package/apps/pivot/wow/root.js +8 -8
  18. package/coms/basic/#loader.js +9 -8
  19. package/coms/basic/Item.js +2 -2
  20. package/coms/basic/Tree.js +14 -2
  21. package/coms/basic/crc.js +5 -1
  22. package/coms/basic/cross_.js +2 -2
  23. package/coms/basic/decode62S.js +44 -0
  24. package/coms/basic/encode62S.js +40 -0
  25. package/coms/basic/encode62S_test.js +18 -0
  26. package/coms/basic/enrich.js +6 -1
  27. package/coms/basic/refilm_decode.js +40 -20
  28. package/coms/basic/refilm_decode_test.js +4 -0
  29. package/coms/basic/valid.js +4 -0
  30. package/coms/basic_/&Array.js +64 -49
  31. package/coms/basic_/&extends.js +9 -2
  32. package/coms/compile/Javascript.js +1 -1
  33. package/coms/compile/audit.js +23 -1
  34. package/coms/compile/cloneNode.js +3 -1
  35. package/coms/compile/downLevel.js +21 -11
  36. package/coms/compile/downLevel_test.js +52 -14
  37. package/coms/compile/rescan.js +8 -2
  38. package/coms/compile/unstruct.js +9 -9
  39. package/coms/crypt/encode62.js +36 -6
  40. package/coms/crypt/encode62_test.js +8 -48
  41. package/coms/explorer/main.less +1 -5
  42. package/coms/frame/chat.js +2 -2
  43. package/coms/frame/left.html +5 -4
  44. package/coms/frame/left.js +1 -0
  45. package/coms/frame/left.less +5 -3
  46. package/coms/frame/payment.js +2 -2
  47. package/coms/pivot/acme2.js +7 -4
  48. package/coms/pivot/left-footer.xht +25 -0
  49. package/coms/pivot/pedit.js +3 -3
  50. package/coms/pivot/plist.js +2 -2
  51. package/coms/pivot/qrcode.xht +3 -0
  52. package/coms/zimoli/XMLHttpRequest.js +2 -2
  53. package/coms/zimoli/container.js +34 -34
  54. package/coms/zimoli/design.html +6 -13
  55. package/coms/zimoli/design.js +49 -13
  56. package/coms/zimoli/design.less +62 -25
  57. package/coms/zimoli/drag.js +8 -3
  58. package/coms/zimoli/encode62.js +40 -12
  59. package/coms/zimoli/lattice.js +0 -1
  60. package/coms/zimoli/list.js +0 -8
  61. package/coms/zimoli/menu.js +29 -5
  62. package/coms/zimoli/model.js +150 -195
  63. package/coms/zimoli/model.less +4 -8
  64. package/coms/zimoli/on.js +14 -12
  65. package/coms/zimoli/padding.less +1 -0
  66. package/coms/zimoli/progbar.xht +9 -8
  67. package/coms/zimoli/prompt.less +0 -3
  68. package/coms/zimoli/render.js +210 -125
  69. package/coms/zimoli/select.js +9 -4
  70. package/coms/zimoli/select.less +3 -14
  71. package/coms/zimoli/selectList.js +5 -1
  72. package/coms/zimoli/selectList.less +3 -0
  73. package/coms/zimoli/table.html +7 -7
  74. package/coms/zimoli/table.js +12 -9
  75. package/coms/zimoli/table.less +5 -0
  76. package/coms/zimoli/user.js +2 -2
  77. package/coms/zimoli/view.js +3 -4
  78. package/coms/zimoli/watch.js +3 -1
  79. package/coms/zimoli/zimoli.js +6 -2
  80. package/coms//350/214/250/350/217/260/tab.js +26 -2
  81. package/coms//350/214/250/350/217/260//346/240/207/347/255/276/345/214/226.js +1 -1
  82. package/coms//350/214/250/350/217/260//347/274/226/350/276/221/346/241/206.xht +183 -20
  83. package/docs//345/267/245/345/205/267//345/233/275/351/231/205/345/214/226.xht +1 -0
  84. package/package.json +1 -1
  85. package/public/efront.js +1 -1
@@ -68,6 +68,11 @@ td {
68
68
 
69
69
  thead {
70
70
 
71
+ th,
72
+ td {
73
+ z-index: 1;
74
+ }
75
+
71
76
  .y-ing,
72
77
  .x-ing {
73
78
  >mask {
@@ -51,9 +51,9 @@ var proto = {
51
51
  },
52
52
  getPassport() {
53
53
  if (!passport) {
54
- passport = encode62.timeencode(encode62.decode62(user._passport, user.session));
54
+ passport = encode62.packencode(encode62.decode62(user._passport, user.session));
55
55
  }
56
- return passport = encode62.timeupdate(passport);
56
+ return passport = encode62.packupdate(passport);
57
57
  },
58
58
  Login(userinfo) {
59
59
  this.login(userinfo);
@@ -117,7 +117,7 @@ var resize2 = function () {
117
117
  changed = true;
118
118
  css(foot, {
119
119
  marginTop: fromOffset(-height)
120
- })
120
+ });
121
121
  css(body, {
122
122
  paddingBottom: fromOffset(body.clientTop + body.clientHeight + body.offsetTop - foot.offsetTop)
123
123
  });
@@ -129,7 +129,7 @@ function view(element) {
129
129
  extend(w, prototype);
130
130
  if (w !== element) {
131
131
  extend(w, element);
132
- once("append")(w, function () {
132
+ oncemount(w, function () {
133
133
  if (w.draggable !== true && w.draggable !== false) {
134
134
  w.draggable = /^(fixed|absolute)$/i.test(getComputedStyle(w).position);
135
135
  }
@@ -138,8 +138,7 @@ function view(element) {
138
138
  if (w.resizable) resize.on(w);
139
139
  }
140
140
  resizingList.set(w, resize2);
141
- w.renders = [resize2];
142
141
  w.reshape = lazy(resize2);
143
- onmounted(w, w.reshape);
142
+ w.$digest = resize2;
144
143
  return w;
145
144
  }
@@ -2,8 +2,10 @@ function watcher({ changes }) {
2
2
  var watches = this.$watches;
3
3
  for (var k in changes) {
4
4
  if (k in watches) {
5
+ var h = watches[k];
5
6
  var { current, previous } = changes[k];
6
- watches[k].call(this, current, previous);
7
+ if (h instanceof Function) h.call(this, current, previous);
8
+ else if (h instanceof Array) h.forEach(h => h.call(this, current, previous));
7
9
  }
8
10
  }
9
11
  }
@@ -431,7 +431,7 @@ function create(pagepath, args, from, needroles) {
431
431
  var zimoliid = 0, zimoliad = 0;
432
432
  function zimoli(pagepath, args, history_name, oldpagepath) {
433
433
  if (arguments.length === 0) {
434
- if (zimoliid !== zimoliad && zimoli.caller === go) return;
434
+ if (zimoliid !== zimoliad) return;
435
435
  history_name = current_history;
436
436
  var _history = history[history_name] || [];
437
437
  root_path = _history[0] || "/main";
@@ -592,9 +592,13 @@ function addGlobal(element, name = null, isBack) {
592
592
  if (isFunction(body.layer)) {
593
593
  body.layer(element, oldElement, history);
594
594
  } else if (body !== element) {
595
+ if (oldElement) {
596
+ var oldPrev = oldElement.previousSibling, oldPare = oldElement.parentNode;
597
+ remove(oldElement);
598
+ oldElement = oldPrev || oldPare.firstChild;
599
+ }
595
600
  if (isBack || !oldElement) appendChild.insert(body, element);
596
601
  else appendChild.after(oldElement, element);
597
- remove(oldElement);
598
602
  }
599
603
  global[name] = element;
600
604
  } else if (isNode(name)) {
@@ -1,4 +1,4 @@
1
- var ensp = s => Array(s + 1).join("\u2002"/*&ensp*/);
1
+ var ensp = s => Array(s + 1).join(" "/*&ensp*/);
2
2
  var getEnspBefore = function (node) {
3
3
  if (!node) return 0;
4
4
  while (node && (node.nodeType !== 1 || !/^br$/i.test(node.tagName))) {
@@ -14,7 +14,31 @@ var getEnspBefore = function (node) {
14
14
  };
15
15
  return function (forcetab) {
16
16
  var selection = document.getSelection();
17
- var { anchorNode, anchorOffset } = selection;
17
+ var { anchorNode, anchorOffset, focusNode, focusOffset } = selection;
18
+ if (anchorNode !== focusNode || anchorOffset !== focusOffset) return;
19
+ if (forcetab < 0) {
20
+ var tempNode = anchorNode;
21
+ var space = ensp(4);
22
+ while (tempNode) {
23
+ if (tempNode.nodeType === 1) {
24
+ if (/^br$/i.test(tempNode.tagName)) return;
25
+ tempNode = tempNode.lastChild || tempNode.previousSibling;
26
+ continue;
27
+ }
28
+ if (tempNode.nodeValue.indexOf(space) >= 0) {
29
+ tempNode.nodeValue = tempNode.nodeValue.replace(space, '');
30
+ if (tempNode === anchorNode) {
31
+ anchorOffset -= 4;
32
+ if (anchorOffset < 0) anchorOffset = 0;
33
+ selection.setBaseAndExtent(tempNode, anchorOffset, tempNode, anchorOffset);
34
+ }
35
+ return;
36
+ }
37
+ if (/[\r\n\u2028\u2029]/.test(tempNode.nodeValue)) return;
38
+ tempNode = tempNode.previousSibling || tempNode.parentNode?.previousSibling;
39
+ }
40
+ return;
41
+ }
18
42
  if (anchorNode.nodeType === 1) {
19
43
  var child = anchorNode.childNodes[anchorOffset];
20
44
  var spaceSize = 4;
@@ -63,7 +63,7 @@ var codecolor = function (c, encode) {
63
63
  used[k].forEach(k in predefs ? setPredef : setOutside);
64
64
  }
65
65
  if (c.program) var { space_exp: spaceReg, control_reg } = c.program;
66
- if (spaceReg) var unspaceReg = new RegExp(`(?:${spaces.avoid()})+`, 'g');
66
+ if (spaceReg) var unspaceReg = new RegExp(`(?:[^${光标}])+`, 'g');
67
67
  var wraptext = function (t, l) {
68
68
  if (unspaceReg) t = t.replace(unspaceReg, a => {
69
69
  a = encode(a);
@@ -7,12 +7,37 @@
7
7
  display: block;
8
8
  padding: 6px 0;
9
9
  }
10
+
11
+ &.noinput {
12
+ &:before {
13
+ position: absolute;
14
+ background: #c24;
15
+ color: #fff;
16
+ left: 0;
17
+ right: 0;
18
+ top: 0;
19
+ height: 20px;
20
+ line-height: 20px;
21
+ font-size: 16px;
22
+ display: block;
23
+ content: "当前浏览器编辑会造成异常";
24
+ }
25
+ }
10
26
  </style>
11
- <编辑框 e-class="上色.className" e-style="{whiteSpace:'pre'}" onkeyup="!event.isComposing&&updatecode(event)"
12
- onkeydown.tab="keytab(event)" onkeyup.enter="tab(false)">
27
+ <编辑框 spellcheck=false e-class="上色.className" e-style="{whiteSpace:'pre'}" onkeydown="updatechar"
28
+ onkeydown.tab.prevent.only="keytab(1)" onkeydown.tab.shift.prevent.only="keytab(-1)" onkeyup.enter.only="tab(false)"
29
+ oninput='!event.isComposing&&updatecode(event)' onkeydown.space.only='fixpace'>
13
30
  </编辑框>
14
31
  <script>
15
32
  var coder = this;
33
+ if (!('oninput' in document)) {
34
+ on('focus')(this, function () {
35
+ if (this.contentEditable) addClass(this, "noinput");
36
+ });
37
+ on('blur')(this, function () {
38
+ removeClass(this, 'noinput');
39
+ })
40
+ }
16
41
  var coderid = 0;
17
42
  care(coder, async function ([text, type]) {
18
43
  try {
@@ -29,9 +54,9 @@
29
54
  coder.innerHTML = colored;
30
55
  };
31
56
  coder.getValue = function () {
32
- return coder.innerText.replace(/[\u00a0\u2002]/g, ' ');
57
+ return coder.innerText;
33
58
  };
34
- var markAnchorOffset = function () {
59
+ var markAnchorOffset = function (光标) {
35
60
  var { anchorNode, anchorOffset } = document.getSelection();
36
61
  if (!anchorNode || !coder) return;
37
62
  var [c] = coder.children;
@@ -123,32 +148,170 @@
123
148
  return document.getSelection().setBaseAndExtent(child, offset, child, offset);
124
149
  }
125
150
  var trimspace = (_, a) => a ? "" : " ";
126
- var jstext = "";
127
151
  var 更新 = function (colored) {
128
152
  var { scrollTop, scrollLeft } = coder;
129
153
  coder.innerHTML = colored;
130
154
  coder.scrollTop = scrollTop;
131
155
  coder.scrollLeft = scrollLeft;
156
+ unmarkAnchorOffset();
132
157
  };
133
- var updatecode = lazy(async function (event) {
134
- var id = ++coderid;
135
- var trimreg = /[\s\u00a0\u2002\u0080]+([\}\{\;\[\]\(\)\,\>\<\+\-\*\&\^\/%!~:?])*/g;
136
- var innerText = coder.innerText;
137
- if (jstext.replace(trimreg, trimspace).trim() === innerText.replace(trimreg, trimspace).trim()) return;
138
- jstext = innerText;
139
- markAnchorOffset();
140
- var innerText = coder.innerText;
158
+ var anchorChar = null, inText = false;
159
+ var followChar = null, beforeText = false;
160
+ var fixpace = function (event) {
161
+ event.preventDefault();
162
+ document.execCommand('insertText', false, ' ');
163
+ };
164
+ var updatechar = function (event) {
165
+ coderid++;
166
+ var { anchorNode, anchorOffset } = document.getSelection();
167
+ if (!coder || !anchorNode) return;
168
+ while (anchorNode.nodeType === 1 || anchorOffset === 0) {
169
+ if (anchorNode.nodeType === 1) {
170
+ var { childNodes } = anchorNode;
171
+ if (childNodes.length > 0) {
172
+ if (anchorOffset >= childNodes.length) {
173
+ anchorNode = anchorNode.lastChild;
174
+ if (anchorNode.nodeType === 1) anchorOffset = anchorNode.childNodes.length;
175
+ else anchorOffset = anchorNode.nodeValue.length;
176
+ }
177
+ else {
178
+ anchorNode = childNodes[anchorOffset];
179
+ anchorOffset = 0;
180
+ }
181
+ }
182
+ else {
183
+ anchorNode = anchorNode.previousSibling;
184
+ if (anchorNode.nodeType === 1) anchorOffset = anchorNode.childNodes.length;
185
+ else anchorOffset = anchorNode.nodeValue.length;
186
+ }
187
+ }
188
+ if (anchorOffset === 0) {
189
+ anchorNode = anchorNode.previousSibling || anchorNode.parentNode.previousSibling;
190
+ if (!anchorNode) return;
191
+ do {
192
+ if (anchorNode.nodeType === 1) {
193
+ if (anchorNode.lastChild) {
194
+ anchorOffset = anchorNode.childNodes.length;
195
+ }
196
+ else {
197
+ anchorNode = anchorNode.previousSibling;
198
+ }
199
+ }
200
+ else {
201
+ if (anchorNode.nodeValue) {
202
+ anchorOffset = anchorNode.nodeValue.length;
203
+ break;
204
+ }
205
+ else {
206
+ anchorNode = anchorNode.previousSibling || anchorNode.parentNode.previousSibling;
207
+ }
208
+ }
209
+ } while (anchorChar?.nodeType === 3 || anchorOffset === 0);
210
+ }
211
+ if (!anchorNode) return;
212
+ }
213
+ if (anchorNode.nodeType === 3) {
214
+ inText = /^text$/i.test(anchorNode.parentNode.tagName);
215
+ beforeText = inText;
216
+ if (anchorOffset > 0) {
217
+ anchorChar = anchorNode.nodeValue.charAt(anchorOffset - 1);
218
+ }
219
+ else {
220
+ anchorChar = '';
221
+ }
222
+ if (anchorOffset >= anchorNode.nodeValue.length) {
223
+ followChar = anchorNode.nextSibling || anchorNode.parentNode.nextSibling;
224
+ if (followChar.nodeType === 1) {
225
+ beforeText = /^text$/i.test(followChar.tagName);
226
+ followChar = followChar.innerText.charAt(0);
227
+ }
228
+ else if (followChar.nodeType === 3) {
229
+ beforeText = /^text$/i.test(followChar.parentNode.tagName);
230
+ followChar = followChar.nodeValue.charAt(0);
231
+ }
232
+ else {
233
+ followChar = '';
234
+ }
235
+ }
236
+ else {
237
+ followChar = anchorNode.nodeValue.charAt(anchorOffset);
238
+ }
239
+
240
+ }
241
+ else {
242
+ inText = false;
243
+ beforeText = false;
244
+ followChar = '';
245
+ }
246
+
247
+ };
248
+ var pairsmap = Object.create(null);
249
+ [
250
+ `""`,
251
+ "''",
252
+ '``',
253
+ "()",
254
+ "[]",
255
+ "{}",
256
+ ].forEach(a => {
257
+ var [k, p] = a.split('');
258
+ pairsmap[k] = p;
259
+ });
260
+ var codeHistory = [];
261
+ var historyIndex = 0;
262
+ var updatecode = function (event) {
263
+ var { data, inputType } = event;
264
+ coderid++;
265
+ var patchAfter = '';
266
+ console.log("follow-char", followChar, 'data', data, 'anchor-char', anchorChar);
267
+ switch (inputType) {
268
+ case "insertText":
269
+ if (data === ' ') return;
270
+ if (anchorChar in pairsmap) {
271
+ if (followChar === pairsmap[anchorChar] && data === followChar) {
272
+ document.execCommand('forwardDelete');
273
+ }
274
+ else if (data in pairsmap) {
275
+ if (inText || beforeText) return;
276
+ patchAfter = pairsmap[data];
277
+ }
278
+ }
279
+ else {
280
+ if (data in pairsmap) {
281
+ if (inText || beforeText) return;
282
+ patchAfter = pairsmap[data];
283
+ }
284
+ }
285
+ break;
286
+ case "insertParagraph": return;
287
+ case "deleteContentForward": return;
288
+ case "deleteContentBackward":
289
+ if (anchorChar in pairsmap && followChar === pairsmap[anchorChar]) {
290
+ document.execCommand('forwardDelete');
291
+ }
292
+ if (inText) return;
293
+ updatechar();
294
+ if (inText) return;
295
+ break;
296
+
297
+ }
298
+ markAnchorOffset(光标 + patchAfter);
299
+ var markedText = coder.innerText;
300
+ historyIndex = codeHistory.length;
301
+ codeHistory.push(coder.innerHTML);
141
302
  unmarkAnchorOffset();
142
- var text = await 上色.text(coder.type, innerText);
303
+ updateonly(coderid, markedText);
304
+ };
305
+ var updateonly = lazy(async function (id, markedText) {
143
306
  if (coderid !== id) return;
144
- 更新(text);
145
- unmarkAnchorOffset();
307
+ markedText = await 上色.text(coder.type, markedText);
308
+ if (coderid !== id) return;
309
+ 更新(markedText);
146
310
  dispatch(coder, 'change');
147
311
  return;
148
- });
149
- var keytab = function (event) {
150
- event.preventDefault();
151
- tab();
312
+ }, -60);
313
+ var keytab = function (direction) {
314
+ tab(direction);
152
315
  };
153
316
 
154
317
  </script>
@@ -611,6 +611,7 @@
611
611
  }
612
612
  }
613
613
  msg.setText(i18n`正在提取字符串..`);
614
+ css(msg, 'text-align:left');
614
615
  css(msg.firstElementChild, 'text-align:left');
615
616
  var textMap = Object.create(null);
616
617
  已找到的字符串.is_loading = true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.21.4",
3
+ "version": "4.22.0",
4
4
  "description": "一个开发环境,提供一种自由的前端开发模式,也可作为辅助工具使用。",
5
5
  "main": "public/efront.js",
6
6
  "directories": {