efront 4.4.2 → 4.4.5
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/coms/basic_/atob.js +1 -1
- package/coms/basic_/btoa.js +1 -0
- package/coms/compile/Javascript.js +9 -6
- package/coms/compile/Program.js +2 -1
- package/coms/compile/common.js +11 -8
- package/coms/compile/common_test.js +4 -0
- package/coms/compile/unstruct_test.js +2 -2
- package/coms/pivot/qrcode.xht +13 -2
- package/coms/zimoli/container.js +3 -8
- package/coms/zimoli/fromBase64.js +8 -14
- package/coms/zimoli/render.js +21 -22
- package/coms/zimoli/toBase64.js +10 -14
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/coms/zimoli/btoa.js +0 -1
package/coms/basic_/atob.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
fromBase64
|
|
1
|
+
b => decodeUTF8(fromBase64(b));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
a => toBase64(encodeUTF8(String(a)));
|
|
@@ -62,7 +62,9 @@ Javascript.prototype.isProperty = function (o) {
|
|
|
62
62
|
if (prev.isprop) return true;
|
|
63
63
|
return /^(\+\+|\-\-|;)$/.test(prev.text);
|
|
64
64
|
}
|
|
65
|
-
if (prev.type === EXPRESS && !/\.$/.test(prev.text))
|
|
65
|
+
if (prev.type === EXPRESS && !/\.$/.test(prev.text)) {
|
|
66
|
+
return prev.text !== 'async' || o.text !== 'function';
|
|
67
|
+
}
|
|
66
68
|
if (prev.type & (SCOPED | VALUE | QUOTED | PROPERTY)) return true;
|
|
67
69
|
}
|
|
68
70
|
if (!prev) return false;
|
|
@@ -341,6 +343,11 @@ Javascript.prototype.setType = function (o) {
|
|
|
341
343
|
last.type = EXPRESS;
|
|
342
344
|
return false;
|
|
343
345
|
}
|
|
346
|
+
if (last) {
|
|
347
|
+
if (o.type === STRAP && o.text === "function") {
|
|
348
|
+
if (last.text === 'async') last.type = last.isend ? EXPRESS : STRAP;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
344
351
|
this.fixType(o);
|
|
345
352
|
var queue = o.queue;
|
|
346
353
|
if (queue.isObject || queue.isClass) {
|
|
@@ -371,14 +378,10 @@ Javascript.prototype.setType = function (o) {
|
|
|
371
378
|
}
|
|
372
379
|
}
|
|
373
380
|
if (o.type === PROPERTY || o.isprop);
|
|
374
|
-
else if (o.type === STRAP && /^(get|set|static)
|
|
381
|
+
else if (o.type === STRAP && /^(get|set|static|async)$/.test(o.text)) {
|
|
375
382
|
o.type = EXPRESS;
|
|
376
383
|
}
|
|
377
384
|
if (last) {
|
|
378
|
-
if (!o.isprop && last.type === STRAP) {
|
|
379
|
-
if (last.text === 'async' && o.text !== "function")
|
|
380
|
-
last.type = EXPRESS;
|
|
381
|
-
}
|
|
382
385
|
if (o.type === STAMP && o.text === "=>") {
|
|
383
386
|
var pp = last.prev;
|
|
384
387
|
if (pp && pp.type === EXPRESS && pp.text === 'async') {
|
package/coms/compile/Program.js
CHANGED
|
@@ -111,7 +111,7 @@ class Program {
|
|
|
111
111
|
Code = Array;
|
|
112
112
|
transive_reg = /^(new|void|case|break|continue|return|throw|extends|import)$/
|
|
113
113
|
straps = "if,for".split(',');
|
|
114
|
-
forceend_reg = /^(return|break|continue)$/;
|
|
114
|
+
forceend_reg = /^(return|break|continue|async)$/;
|
|
115
115
|
classstrap_reg = /^(class)$/;
|
|
116
116
|
extends_reg = /^(extends)$/;
|
|
117
117
|
spaces = spaceDefined;
|
|
@@ -444,6 +444,7 @@ class Program {
|
|
|
444
444
|
if (last.type === QUOTED && !last.tag) break test;
|
|
445
445
|
if (last.type === SCOPED && queue.inExpress) break test;
|
|
446
446
|
if (lasttype === STAMP && m === last.text) break test;
|
|
447
|
+
if (last.type === STAMP && /^(\+\+|\-\-)$/.test(last.text)) break test;
|
|
447
448
|
}
|
|
448
449
|
var scope = [];
|
|
449
450
|
scope.type = this.comment_entry.test(m) ? COMMENT : QUOTED;
|
package/coms/compile/common.js
CHANGED
|
@@ -125,7 +125,15 @@ var skipAssignment = function (o, cx) {
|
|
|
125
125
|
break;
|
|
126
126
|
case STRAP:
|
|
127
127
|
if (needpunc) {
|
|
128
|
-
if (!/^(in|instanceof|of|else|as|from)$/.test(o.text))
|
|
128
|
+
if (!/^(in|instanceof|of|else|as|from|catch|finally)$/.test(o.text)) {
|
|
129
|
+
break loop;
|
|
130
|
+
}
|
|
131
|
+
if (o.text === 'catch') {
|
|
132
|
+
next();
|
|
133
|
+
if (o && o.entry === '(') next();
|
|
134
|
+
needpunc = false;
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
129
137
|
if (o.text === 'else') {
|
|
130
138
|
if (!ifdeep) break loop;
|
|
131
139
|
ifdeep--;
|
|
@@ -134,21 +142,16 @@ var skipAssignment = function (o, cx) {
|
|
|
134
142
|
next();
|
|
135
143
|
needpunc = false;
|
|
136
144
|
}
|
|
137
|
-
else if (/^(try|catch|finally)$/.test(o.text)) {
|
|
138
|
-
next();
|
|
139
|
-
if (o.entry === "(") next();
|
|
140
|
-
next();
|
|
141
|
-
}
|
|
142
145
|
else if (o.text === 'else') {
|
|
143
146
|
if (ifdeep <= 0) break loop;
|
|
144
147
|
ifdeep--;
|
|
145
148
|
needpunc = false;
|
|
146
149
|
next();
|
|
147
150
|
}
|
|
148
|
-
else if (/^(if|while|with|switch)$/.test(o.text)) {
|
|
151
|
+
else if (/^(if|while|with|switch|try)$/.test(o.text)) {
|
|
149
152
|
if (o.text === 'if') ifdeep++;
|
|
150
153
|
next();
|
|
151
|
-
next();
|
|
154
|
+
if (o.entry === "(") next();
|
|
152
155
|
}
|
|
153
156
|
else if (o.text === 'do') {
|
|
154
157
|
next();
|
|
@@ -34,6 +34,10 @@ testPickSentence(`a+b\r\n++c`, 5, "++c")
|
|
|
34
34
|
testPickSentence(`a+b++\r\nc`, 5, "c")
|
|
35
35
|
testPickSentence(`a+b++\r\nc`, 5, "c")
|
|
36
36
|
testPickSentence(`a+b++\r\n+c`, 6, "a + b++\r\n+ c")
|
|
37
|
+
testPickSentence(`if(a)try{}catch{}a;`, 0, "if (a) try {} catch {}")
|
|
38
|
+
testPickSentence(`if(a)try{}catch(a){}a;`, 0, "if (a) try {} catch (a) {}")
|
|
39
|
+
testPickSentence(`if(a)try{}catch{} else a;`, 0, "if (a) try {} catch {} else a")
|
|
40
|
+
testPickSentence(`if(a)try{}catch{} else if(a);`, 0, "if (a) try {} catch {} else if (a)")
|
|
37
41
|
assert(common.createString(common.pickArgument(scanner2(`a={a:1,c:d}`)[2][4])), 'c: d')
|
|
38
42
|
assert(common.createString(common.pickArgument(scanner2(`a=class{a=1\r\nc=d}`)[3][4])), 'c = d')
|
|
39
43
|
assert(common.createString(common.pickArgument(scanner2(`(a=1,c=d)`)[0][4])), 'c = d')
|
|
@@ -125,7 +125,6 @@ test("menus[a+b]()", "_ = a + b; menus[_]()", true);
|
|
|
125
125
|
test(`switch(a){default: a;case 1:b;}`, 'if (a === 1) return [2, 0]; return [1, 0];\r\n a; return [1, 0];\r\n b; return [1, 0]', true);
|
|
126
126
|
test("loop:{a=b;if(a) continue loop}", "a = b; if (a) return [0, 0]", true);
|
|
127
127
|
test("if(a)try{}finally{}else a;", 'if (!a) return [4, 0]; return [1, 8];\r\n return [0, 9];\r\n return [1, 9];\r\n return [2, 0];\r\n a; return [1, 0]')
|
|
128
|
-
test("if(a)try{}finally{}else;", 'if (!a) return [4, 0]; return [1, 8];\r\n return [0, 9];\r\n return [1, 9];\r\n return [1, 0]');
|
|
129
128
|
test("b:while(t){switch(a){case c:break b;}}", 'if (!t) return [1, 0]; if (a === c) return [1, 0]; return [0, 0]');
|
|
130
129
|
test("predef[key[1]](r.slice(key[0].length).trim())", '_ = key[1]; _0 = key[0].length; _0 = r.slice(_0); _0 = _0.trim(); predef[_](_0)');
|
|
131
130
|
test("predef[key[1]](r.slice())(r.slice())", '_ = key[1]; _0 = r.slice(); _ = predef[_](_0); _0 = r.slice(); _(_0)');
|
|
@@ -149,7 +148,8 @@ test(`a[0]-- > 1`, "_ = a[0]--, _ > 1");
|
|
|
149
148
|
test(`c=b\r\n++a`, "c = b; ++a");
|
|
150
149
|
test(`c=b+\r\n++a`, "_ =\r\n++a, c = b + _");
|
|
151
150
|
test(`c=b+ ++a`, "_ = ++a, c = b + _");
|
|
152
|
-
unstruct.debug = true; r++;
|
|
153
151
|
test(`c=b+ +a`, "_ = +a, c = b + _");
|
|
154
152
|
test(`c=b+ !a`, "_ = !a, c = b + _");
|
|
155
153
|
test(`do {var loadcount = 0;} while (loadcount !== 0);`, `loadcount = 0; _ = loadcount !== 0; if (_) return [0, 0]`);
|
|
154
|
+
unstruct.debug = true; r++;
|
|
155
|
+
test("if(a)try{a}catch{};a;", 'if (!a) return [4, 0]; return [1, 7];\r\n a; return [0, 9];\r\n return [1, 9];\r\n return [1, 0];\r\n a');
|
package/coms/pivot/qrcode.xht
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
<style>
|
|
2
|
+
&[empty] {
|
|
3
|
+
opacity: .3;
|
|
4
|
+
}
|
|
5
|
+
</style>
|
|
1
6
|
<canvas width="240" height="240" style="width:240px;height:240px;image-rendering: pixelated;" />
|
|
2
7
|
<script>
|
|
3
8
|
async function loadQRCode() {
|
|
4
|
-
this.innerHTML = template;
|
|
5
9
|
var o = this.target.data;
|
|
10
|
+
var url = o?.url;
|
|
11
|
+
if (!url) return;
|
|
12
|
+
this.innerHTML = template;
|
|
6
13
|
var canvas = this.firstElementChild;
|
|
7
|
-
var url = o.url;
|
|
8
14
|
var host = data.getInstance("base");
|
|
9
15
|
var href = host.base + url.replace(/^[\/\\]/, '');
|
|
10
16
|
var qrcode = await init("thirdParty$qrcode");
|
|
@@ -20,7 +26,12 @@
|
|
|
20
26
|
var v = document.createElement("qrcode");
|
|
21
27
|
select(element, v);
|
|
22
28
|
oncemount(v, loadQRCode);
|
|
29
|
+
oncemount(element, function () {
|
|
30
|
+
if (this.data?.url) return;
|
|
31
|
+
this.setAttribute('empty', '');
|
|
32
|
+
});
|
|
23
33
|
v.tabIndex = 0;
|
|
24
34
|
v.onclick = e => e.preventDefault();
|
|
35
|
+
return element;
|
|
25
36
|
}
|
|
26
37
|
</script>
|
package/coms/zimoli/container.js
CHANGED
|
@@ -21,19 +21,14 @@ var gosrc = function () {
|
|
|
21
21
|
if (this.hasAttribute && this.hasAttribute('src')) {
|
|
22
22
|
src = this.getAttribute('src');
|
|
23
23
|
}
|
|
24
|
-
if (src !== this
|
|
24
|
+
if (src !== this.$src) {
|
|
25
25
|
change.call(this, src);
|
|
26
|
-
this
|
|
26
|
+
this.$src = src;
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
function container(element) {
|
|
30
|
-
var src;
|
|
31
|
-
if (element && element.hasAttribute('src')) {
|
|
32
|
-
src = element.getAttribute('src');
|
|
33
|
-
}
|
|
34
30
|
var comment = document.createComment('container');
|
|
35
|
-
comment.src = src;
|
|
36
31
|
comment.$struct = element.$struct;
|
|
37
|
-
comment
|
|
32
|
+
care(comment, gosrc);
|
|
38
33
|
return comment;
|
|
39
34
|
}
|
|
@@ -8,20 +8,14 @@ var decodeMap = function () {
|
|
|
8
8
|
return map;
|
|
9
9
|
}();
|
|
10
10
|
function fromBase64(input) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
buffer = str.charAt(idx++);
|
|
17
|
-
// character found in table? initialize bit storage and add its ascii value;
|
|
18
|
-
~buffer && (bs = bc % 4 ? (bs << 6) + buffer : buffer,
|
|
19
|
-
// and if not first of each 4 characters,
|
|
20
|
-
// convert the first 8 bits to one ascii character
|
|
21
|
-
bc++ % 4) ? output.push(255 & bs >> (-2 * bc & 6)) : 0
|
|
22
|
-
) {
|
|
23
|
-
// try to find character in table (0-63, not found => -1)
|
|
24
|
-
buffer = decodeMap[buffer];
|
|
11
|
+
input = String(input).replace(/\=+$/, '');
|
|
12
|
+
var output = [];
|
|
13
|
+
for (var cx = 0, dx = input.length; cx < dx;) {
|
|
14
|
+
var block = decodeMap[input.charAt(cx++)] << 18 | decodeMap[input.charAt(cx++)] << 12 | decodeMap[input.charAt(cx++)] << 6 | decodeMap[input.charAt(cx++)];
|
|
15
|
+
output.push(block >> 16, block >> 8 & 0xff, block & 0xff);
|
|
25
16
|
}
|
|
17
|
+
cx -= dx;
|
|
18
|
+
if (cx > 1) output.pop();
|
|
19
|
+
if (cx > 0) output.pop();
|
|
26
20
|
return output;
|
|
27
21
|
}
|
package/coms/zimoli/render.js
CHANGED
|
@@ -71,13 +71,16 @@ var removeRenderElement = function () {
|
|
|
71
71
|
function refresh(root) {
|
|
72
72
|
var rest = [];
|
|
73
73
|
var body = document.documentElement;
|
|
74
|
-
|
|
75
|
-
var
|
|
76
|
-
|
|
74
|
+
if (root && root.renders) {
|
|
75
|
+
for (var k in renderElements) {
|
|
76
|
+
var element = renderElements[k];
|
|
77
77
|
if (
|
|
78
78
|
getTargetIn(root, element)
|
|
79
79
|
) rebuild(element);
|
|
80
|
-
}
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
for (var k in renderElements) {
|
|
83
|
+
var element = renderElements[k];
|
|
81
84
|
rebuild(element);
|
|
82
85
|
if (!getTargetIn(body, element)) {
|
|
83
86
|
rest.push(element);
|
|
@@ -697,18 +700,22 @@ var emiters = {
|
|
|
697
700
|
};
|
|
698
701
|
emiters.v = emiters.ng = emiters.on;
|
|
699
702
|
|
|
703
|
+
var keyAdapters = [
|
|
704
|
+
key => key,
|
|
705
|
+
key => key.toLowerCase(),
|
|
706
|
+
key => key.replace(/\-+([a-z])/g, (_, w) => w.toUpperCase()),
|
|
707
|
+
key => key.replace(/^([a-z])/g, (_, w) => w.toUpperCase())
|
|
708
|
+
];
|
|
700
709
|
function getFromScopes(key, scope, parentScopes) {
|
|
701
|
-
if (
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
var
|
|
706
|
-
|
|
707
|
-
return o[key];
|
|
710
|
+
if (!isHandled(key)) return;
|
|
711
|
+
for (var ka of keyAdapters) {
|
|
712
|
+
key = ka(key);
|
|
713
|
+
if (scope && key in scope) return scope[key];
|
|
714
|
+
if (parentScopes) for (var cx = parentScopes.length - 1; cx >= 0; cx--) {
|
|
715
|
+
var o = parentScopes[cx];
|
|
716
|
+
if (o && key in o) return o[key];
|
|
708
717
|
}
|
|
709
|
-
|
|
710
|
-
if (key in presets) {
|
|
711
|
-
return presets[key];
|
|
718
|
+
if (key in presets) return presets[key];
|
|
712
719
|
}
|
|
713
720
|
}
|
|
714
721
|
|
|
@@ -788,14 +795,6 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
788
795
|
var { tagName, parentNode, nextSibling } = element;
|
|
789
796
|
// 替换元素
|
|
790
797
|
var constructor = getFromScopes(tagName, scope, parentScopes);
|
|
791
|
-
if (!constructor) {
|
|
792
|
-
tagName = tagName.toLowerCase();
|
|
793
|
-
constructor = getFromScopes(tagName, scope, parentScopes);
|
|
794
|
-
}
|
|
795
|
-
if (!constructor) {
|
|
796
|
-
tagName = tagName.replace(/(?:^|\-+)([a-z])/ig, (_, w) => w.toUpperCase());
|
|
797
|
-
constructor = getFromScopes(tagName, scope, parentScopes);
|
|
798
|
-
}
|
|
799
798
|
if (isFunction(constructor)) {
|
|
800
799
|
var replacer = constructor.call(scope, element, scope, parentScopes);
|
|
801
800
|
if (isNode(replacer) && element !== replacer) {
|
package/coms/zimoli/toBase64.js
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
var encoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
|
1
|
+
var encoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
|
|
3
2
|
function toBase64(input) {
|
|
4
|
-
for (
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
output.push(encoding.charAt(63 & block >> 8 - idx % 1 * 8))
|
|
13
|
-
) {
|
|
14
|
-
charCode = input[parseInt(idx += 3 / 4)];
|
|
15
|
-
block = block << 8 | charCode;
|
|
3
|
+
for (var cx = 0, block, output = [], dx = input.length; cx < dx;) {
|
|
4
|
+
block = input[cx++] << 16 | input[cx++] << 8 | input[cx++];
|
|
5
|
+
output.push(
|
|
6
|
+
encoding[block >> 18],
|
|
7
|
+
encoding[block >> 12 & 0b111111],
|
|
8
|
+
encoding[block >> 6 & 0b111111],
|
|
9
|
+
encoding[block & 0b111111]
|
|
10
|
+
);
|
|
16
11
|
}
|
|
12
|
+
for (cx = output.length + dx - cx, dx = output.length; cx < dx; cx++) output[cx] = '=';
|
|
17
13
|
return output.join("");
|
|
18
14
|
}
|