efront 4.25.2 → 4.26.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 +9 -3
- package/coms/basic/i18n-supports.js +3 -1
- package/coms/compile/Javascript.js +1 -0
- package/coms/compile/Javascript_test.js +1 -0
- package/coms/compile/Program.js +11 -6
- package/coms/compile/common.js +227 -188
- package/coms/compile/createExpressList_test.js +7 -2
- package/coms/compile/unstruct.js +32 -8
- package/coms/compile/unstruct_test.js +6 -5
- package/coms/zimoli/password.js +43 -8
- package/coms/zimoli/password.less +44 -4
- package/coms//350/214/250/350/217/260//350/257/255/350/250/200.js +1 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
|
@@ -2,7 +2,7 @@ var { createExpressList, createString } = common;
|
|
|
2
2
|
var test = function (text) {
|
|
3
3
|
var code = scanner2(text);
|
|
4
4
|
var exps = createExpressList(code);
|
|
5
|
-
console.log(code.isExpressQueue(),exps.map(createString))
|
|
5
|
+
console.log(code.isExpressQueue(), exps.map(createString))
|
|
6
6
|
};
|
|
7
7
|
test('a')
|
|
8
8
|
test('a+b=c')
|
|
@@ -17,4 +17,9 @@ test('try{}catch{}\r\nfinally{}\r\n if(m)c=d+a;else aa debugger\r\n a')
|
|
|
17
17
|
test('var a')
|
|
18
18
|
test('var a,b,c=1;')
|
|
19
19
|
test('a:')
|
|
20
|
-
test('a`b`,a`aa{s}`,c;')
|
|
20
|
+
test('a`b`,a`aa{s}`,c;')
|
|
21
|
+
test('case 1?2:3:{}case 2:default:``')
|
|
22
|
+
test('a: b,c,d;')
|
|
23
|
+
test('a: var b,c,d;')
|
|
24
|
+
test('a: if(){}')
|
|
25
|
+
test('a: a=1, b: b=2;')
|
package/coms/compile/unstruct.js
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
var {
|
|
1
|
+
var {
|
|
2
|
+
SPACE, COMMENT, EXPRESS, STRAP, QUOTED, STAMP, SCOPED, VALUE, LABEL,
|
|
3
|
+
canbeTemp: _canbeTemp, isEval,
|
|
4
|
+
createString, createScoped,
|
|
5
|
+
skipAssignment,
|
|
6
|
+
pickSentence,
|
|
7
|
+
skipSentenceQueue,
|
|
8
|
+
splice, relink,
|
|
9
|
+
createExpressList,
|
|
10
|
+
snapExpressHead, snapExpressFoot
|
|
11
|
+
} = require("./common");
|
|
2
12
|
var scanner2 = require("./scanner2");
|
|
3
13
|
var returnText = function () { return this.text };
|
|
4
14
|
var NodeNotClone = o => Object.assign(Object.create(null), o, { toString: returnText });
|
|
@@ -560,6 +570,7 @@ var _invoke = function (t, getname) {
|
|
|
560
570
|
remove_end_comma(o);
|
|
561
571
|
var iseval = o.iseval = isEval(o);
|
|
562
572
|
var constStart = 0;
|
|
573
|
+
var constNames = Object.create(null);
|
|
563
574
|
if (!iseval) {
|
|
564
575
|
for (var cy = 0; cy < o.length; cy++) {
|
|
565
576
|
while (cy < o.length && o[cy].type & (SPACE | COMMENT)) cy++;
|
|
@@ -567,10 +578,19 @@ var _invoke = function (t, getname) {
|
|
|
567
578
|
cy = skipAssignment(o, cy);
|
|
568
579
|
if (cy === ay || ay >= o.length) continue;
|
|
569
580
|
var m = o[ay];
|
|
570
|
-
|
|
581
|
+
var isexp = m.type === EXPRESS && (strip || !/[\.\[]/.test(m.text));
|
|
582
|
+
if (cy === ay + 1 && (isexp || m.type === VALUE || m.type === QUOTED && !m.length)) {
|
|
583
|
+
if (isexp) constNames[m.text] = true;
|
|
571
584
|
continue;
|
|
572
585
|
}
|
|
573
|
-
|
|
586
|
+
var s = createScoped(cloneNode(o.slice(ay, cy)));
|
|
587
|
+
for (var k in s.used) {
|
|
588
|
+
if (k in constNames) {
|
|
589
|
+
constStart = cy + 1;
|
|
590
|
+
break;
|
|
591
|
+
}
|
|
592
|
+
constNames[k] = true;
|
|
593
|
+
}
|
|
574
594
|
}
|
|
575
595
|
}
|
|
576
596
|
for (var cy = 0; cy < o.length; cy++) {
|
|
@@ -581,9 +601,13 @@ var _invoke = function (t, getname) {
|
|
|
581
601
|
var ey = cy;
|
|
582
602
|
if (ay === ey || ay >= o.length) continue;
|
|
583
603
|
var m = o.slice(ay, ey);
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
604
|
+
var isexp = m.length === 1 && (
|
|
605
|
+
m[0].type === EXPRESS && !/[\.\[]/.test(m[0].text)
|
|
606
|
+
&& ay >= constStart// 防止变量的值被后文修改
|
|
607
|
+
|| m[0].type === QUOTED && !m[0].length
|
|
608
|
+
|| m[0].type === VALUE
|
|
609
|
+
);
|
|
610
|
+
if (isexp) continue;
|
|
587
611
|
if (!iseval || m[m.length - 1] === o.last) {
|
|
588
612
|
var q = toqueue(m, getdeepname, 1);
|
|
589
613
|
if (q.length > 1 && queue.length) {
|
|
@@ -820,7 +844,7 @@ var ternary = function (body, getname, ret) {
|
|
|
820
844
|
else if (ret === 1 && !equcount && canbeOnce(bd)) {
|
|
821
845
|
var name = getnextname(0);
|
|
822
846
|
var r = [{ type: EXPRESS, text: name }, { type: STAMP, text: '=' }, ...bd]
|
|
823
|
-
r.name =
|
|
847
|
+
r.name = [r[0]];
|
|
824
848
|
explist = [r];
|
|
825
849
|
}
|
|
826
850
|
else {
|
|
@@ -863,7 +887,7 @@ var ternary = function (body, getname, ret) {
|
|
|
863
887
|
var punc = eq.text.slice(0, eq.text.length - 1);
|
|
864
888
|
var bdtmp = [...ass.map(cloneNode), { type: STAMP, text: punc }, ...asn];
|
|
865
889
|
relink(bdtmp);
|
|
866
|
-
eqused++;
|
|
890
|
+
if (eqused) eqused++;
|
|
867
891
|
var explist2 = _express(bdtmp, getnextname, true);
|
|
868
892
|
if (isSimpleAssign) {
|
|
869
893
|
[asn, an = cloneNode(ass)] = popexp(explist2);
|
|
@@ -165,9 +165,10 @@ test(`while (a && b);`, '_ = a; if (!_) return [1, 0]; _ = b;\r\n if (!_) return
|
|
|
165
165
|
test(`while (a < b);`, '_ = a < b; if (!_) return [1, 0]; return [0, 0]', true);
|
|
166
166
|
test(`if (a() > a+b);`, '_ = a(), _0 = a + b, _ = _ > _0; if (!_) return [1, 0]; return [1, 0]', true);
|
|
167
167
|
test(`index > start && result.length < pageSize`, '_ = index > start; if (!_) return [1, 0]; _ = result.length, _ < pageSize', true);
|
|
168
|
-
test(`menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 =
|
|
169
|
-
test(`a.b.c += menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 =
|
|
170
|
-
test(`menus[0].c += menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = menus[0]; _1 =
|
|
171
|
-
unstruct.debug = true; r++;
|
|
168
|
+
test(`menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = version[0]; _0 = [str__v_, _0, str__v_1]; _0 = _0[str_join](""); _1 = _[str_name], _1 = _1 + _0; _[str_name] = _1`);
|
|
169
|
+
test(`a.b.c += menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = version[0]; _0 = [str__v_, _0, str__v_1]; _0 = _0[str_join](""); _1 = _[str_name], _1 = _1 + _0; _[str_name] = _1; _2 = a.b.c, _2 = _2 + _1; a.b.c = _2`);
|
|
170
|
+
test(`menus[0].c += menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = menus[0]; _1 = version[0]; _1 = [str__v_, _1, str__v_1]; _1 = _1[str_join](""); _2 = _0[str_name], _2 = _2 + _1; _0[str_name] = _2; _3 = _.c, _3 = _3 + _2; _.c = _3`);
|
|
172
171
|
test(`new Array(2).join("") + 1`, `_0 = new Array(2); _ = _0.join(""), _ + 1`);
|
|
173
|
-
test(`new window.Array(2).join("") + 1`, `_0 = new window.Array(2); _ = _0.join(""), _ + 1`);
|
|
172
|
+
test(`new window.Array(2).join("") + 1`, `_0 = new window.Array(2); _ = _0.join(""), _ + 1`);
|
|
173
|
+
unstruct.debug = true; r++;
|
|
174
|
+
test(`readbuff(h, offset += 2, length)`, `_ = offset + 2; offset = _; readbuff(h, _, length)`);
|
package/coms/zimoli/password.js
CHANGED
|
@@ -1,24 +1,59 @@
|
|
|
1
|
+
|
|
1
2
|
function password() {
|
|
2
3
|
var element = div();
|
|
4
|
+
var capslock = null, numhide = null;
|
|
5
|
+
bind('keydown')(element, function (event) {
|
|
6
|
+
var which = event.which;
|
|
7
|
+
switch (which) {
|
|
8
|
+
case 144/*numlock*/:
|
|
9
|
+
if (numhide !== null) numhide = !numhide; break;
|
|
10
|
+
case 20/*capslock*/: if (capslock !== null) capslock = !capslock; break;
|
|
11
|
+
}
|
|
12
|
+
if (!numhide && /^Numpad/.test(event.code)) {
|
|
13
|
+
numhide = which < 96;
|
|
14
|
+
}
|
|
15
|
+
if (which >= 65 && which <= 90) {
|
|
16
|
+
var key = event.key;
|
|
17
|
+
capslock = event.shiftKey ^ (key >= "A" && key <= "Z");
|
|
18
|
+
}
|
|
19
|
+
updatetips();
|
|
20
|
+
});
|
|
3
21
|
var saved_value = element.value = "";
|
|
4
22
|
var savedKeyCodes = [];
|
|
5
|
-
element.innerHTML = "<input type=password /><insert></insert><holder></holder>";
|
|
6
|
-
var [_input,
|
|
7
|
-
var
|
|
8
|
-
|
|
23
|
+
element.innerHTML = "<tips></tips><input type=password /><text><insert></insert></text><holder></holder>";
|
|
24
|
+
var [tips, _input, text, holder] = element.children;
|
|
25
|
+
var textNode = document.createTextNode('');
|
|
26
|
+
text.insertBefore(textNode, text.firstChild);
|
|
9
27
|
var build = function () {
|
|
10
28
|
element.value = String.fromCharCode(...savedKeyCodes);
|
|
11
29
|
if (!savedKeyCodes.length && element.placeholder) {
|
|
12
30
|
element.appendChild(holder);
|
|
13
31
|
holder.innerText = element.placeholder;
|
|
14
|
-
element.insertBefore(insert, holder);
|
|
15
32
|
} else {
|
|
16
33
|
holder.parentNode === element && element.removeChild(holder);
|
|
17
|
-
element.appendChild(insert);
|
|
18
34
|
}
|
|
19
|
-
|
|
20
|
-
element.scrollLeft = insert.offsetLeft + insert.offsetWidth + element.clientTop + 2;
|
|
35
|
+
textNode.nodeValue = savedKeyCodes.map(e => "●").join("");
|
|
21
36
|
};
|
|
37
|
+
bind('focus')(element, function () {
|
|
38
|
+
capslock = null;
|
|
39
|
+
numhide = null;
|
|
40
|
+
updatetips();
|
|
41
|
+
});
|
|
42
|
+
bind('blur')(element, function () {
|
|
43
|
+
capslock = null;
|
|
44
|
+
numhide = null;
|
|
45
|
+
updatetips();
|
|
46
|
+
})
|
|
47
|
+
var updatetips = function () {
|
|
48
|
+
var tip = [];
|
|
49
|
+
if (capslock) {
|
|
50
|
+
tip.push(i18n`大写锁定已打开`);
|
|
51
|
+
}
|
|
52
|
+
if (numhide) {
|
|
53
|
+
tip.push(i18n`数字键盘已关闭`);
|
|
54
|
+
}
|
|
55
|
+
tips.innerText = tip.join(', ');
|
|
56
|
+
}
|
|
22
57
|
element.onfocus = function () {
|
|
23
58
|
addClass(element, 'focus');
|
|
24
59
|
saved_value = element.value;
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
line-height: 26px;
|
|
25
25
|
border-radius: 3px;
|
|
26
26
|
font-size: 16px;
|
|
27
|
-
|
|
27
|
+
appearance: none;
|
|
28
28
|
box-shadow: none;
|
|
29
29
|
outline: none;
|
|
30
30
|
background-color: #fff;
|
|
@@ -32,17 +32,57 @@
|
|
|
32
32
|
vertical-align: middle;
|
|
33
33
|
position: relative;
|
|
34
34
|
overflow: auto;
|
|
35
|
-
|
|
35
|
+
border: 1px solid transparent;
|
|
36
|
+
overflow: visible;
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
&.focus {
|
|
39
|
+
>input {
|
|
40
|
+
border-color: transparent;
|
|
41
|
+
outline: none;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
outline: none;
|
|
45
|
+
border-color: #29c;
|
|
46
|
+
|
|
47
|
+
>tips:not(:empty) {
|
|
48
|
+
display: block;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
>tips {
|
|
54
|
+
display: none;
|
|
55
|
+
position: absolute;
|
|
56
|
+
left: 2px;
|
|
57
|
+
border: 1px solid;
|
|
58
|
+
border-bottom: none;
|
|
59
|
+
background: #FFF;
|
|
60
|
+
top: -12px;
|
|
61
|
+
line-height: 12px;
|
|
62
|
+
font-size: 12px;
|
|
63
|
+
height: 12px;
|
|
64
|
+
padding: 2px 4px 0 4px;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
insert {
|
|
38
68
|
display: inline;
|
|
39
69
|
border-left: .75pt solid;
|
|
40
70
|
opacity: 0;
|
|
41
71
|
white-space: nowrap;
|
|
42
72
|
}
|
|
43
73
|
|
|
74
|
+
>text {
|
|
75
|
+
position: relative;
|
|
76
|
+
overflow: hidden;
|
|
77
|
+
text-overflow: clip;
|
|
78
|
+
white-space: nowrap;
|
|
79
|
+
width: 100%;
|
|
80
|
+
display: block;
|
|
81
|
+
}
|
|
82
|
+
|
|
44
83
|
>holder {
|
|
45
84
|
color: #777;
|
|
85
|
+
position: relative;
|
|
46
86
|
}
|
|
47
87
|
|
|
48
88
|
>input[type=password] {
|
|
@@ -64,7 +104,7 @@
|
|
|
64
104
|
height: auto;
|
|
65
105
|
}
|
|
66
106
|
|
|
67
|
-
|
|
107
|
+
&.focus insert {
|
|
68
108
|
animation: flash-opacity 1s linear 0s infinite;
|
|
69
109
|
}
|
|
70
110
|
}
|