efront 4.0.11 → 4.0.15
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 +638 -47
- package/{docs → apps}/drequest/index.html +11 -1
- package/{docs → apps}/drequest/main.js +5 -5
- package/coms/basic/#loader.js +2 -1
- package/coms/basic/YAML.js +3 -3
- package/coms/basic/parseYML.js +4 -1
- package/coms/basic/parseYML_test.js +3 -1
- package/coms/basic/strings.js +22 -15
- package/coms/basic_/readme-en.md +112 -0
- package/coms/basic_/readme.md +1 -1
- package/coms/compile/Javascript.js +4 -2
- package/coms/compile/Program.js +0 -2
- package/coms/compile/common.js +1 -0
- package/coms/compile/downLevel.js +8 -4
- package/coms/compile/translate.js +3 -3
- package/coms/compile/unstruct.js +107 -67
- package/coms/compile/unstruct_test.js +6 -2
- package/coms/docs/helps.js +69 -65
- package/coms/zimoli/data.js +10 -10
- package/coms/zimoli/table.html +4 -4
- package/docs/compare-en.md +327 -0
- package/docs/components.jsp +1 -1
- package/docs/main.xht +18 -18
- package/docs/version-desc.md +11 -0
- package/docs/welcome.jsp +1 -1
- package/docs//345/221/275/344/273/244.xht +12 -6
- package/docs//345/267/245/345/205/267//345/233/275/351/231/205/345/214/226.xht +54 -53
- package/docs//345/267/245/345/205/267//345/255/227/347/254/246/351/233/206/346/243/200/346/237/245.xht +7 -7
- package/docs//347/273/204/344/273/266.xht +12 -12
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/readme-en.md +168 -0
- package/readme.md +16 -7
- package/_envs/setup.bat +0 -10
- package/apis/zimoli/file/checkPermission.js +0 -10
- package/apis/zimoli/file/info.js +0 -68
- package/apis/zimoli/file/root.js +0 -2
- package/apis/zimoli/server/count.js +0 -4
- package/apis/zimoli/user/login.js +0 -12
- package/apis/zimoli/yuanfen/suggest.js +0 -8
- package/coms/zimoli/editor.js +0 -85
- package/coms/zimoli/editor.less +0 -64
- package/data/i18n/zh-cn.json +0 -21
- package/docs/canvas/main.js +0 -5
- package/docs/compare/index.html +0 -14
- package/docs/compare/main.js +0 -7
- package/docs/editor/index.html +0 -30
- package/docs/editor/main.js +0 -5
- package/docs/editor/main.less +0 -0
- /package/{docs → apps}/sample/mycolor.html +0 -0
package/coms/compile/unstruct.js
CHANGED
|
@@ -21,7 +21,8 @@ var _break = function (body, cx, result, iscontinue) {
|
|
|
21
21
|
var s;
|
|
22
22
|
for (var cx = labels.length - 1; cx >= 0; cx--) {
|
|
23
23
|
var b = labels[cx];
|
|
24
|
-
if (b.type === LABEL && b.text === label) {
|
|
24
|
+
if (b.type === LABEL && b.text === label + ":") {
|
|
25
|
+
if (!s) s = b;
|
|
25
26
|
if (!b.breaks) b.breaks = [];
|
|
26
27
|
var _b = scanner2('return []');
|
|
27
28
|
_b.ret_ = -1;
|
|
@@ -440,7 +441,14 @@ var isEvalScope = function (o) {
|
|
|
440
441
|
return o === h;
|
|
441
442
|
}
|
|
442
443
|
return false;
|
|
443
|
-
}
|
|
444
|
+
};
|
|
445
|
+
var ispropcall = function (o) {
|
|
446
|
+
var n = o.next;
|
|
447
|
+
if (!n || n.type !== SCOPED && n.entry !== '(') return false;
|
|
448
|
+
if (o.type === EXPRESS && snapExpressHead(o) !== o) return true;
|
|
449
|
+
if (o.type === SCOPED && o.entry === '[' && snapExpressHead(o) !== o) return true;
|
|
450
|
+
return false;
|
|
451
|
+
};
|
|
444
452
|
var _invoke = function (t, getname) {
|
|
445
453
|
var nameindex = 0;
|
|
446
454
|
var getdeepname = function (deep = 0) {
|
|
@@ -454,6 +462,12 @@ var _invoke = function (t, getname) {
|
|
|
454
462
|
var bx = 0;
|
|
455
463
|
for (var cx = 0; cx < t.length; cx++) {
|
|
456
464
|
var o = t[cx];
|
|
465
|
+
if (o.type === STRAP && o.text === 'function') {
|
|
466
|
+
while (o && o.entry !== "{") o = o.next;
|
|
467
|
+
cx = t.indexOf(o, cx);
|
|
468
|
+
continue;
|
|
469
|
+
}
|
|
470
|
+
|
|
457
471
|
if (needbreak(o)) {
|
|
458
472
|
var s = splice(t, bx, cx + 1 - bx);
|
|
459
473
|
if (cx > 0) s.name = s[0].text;
|
|
@@ -510,12 +524,12 @@ var _invoke = function (t, getname) {
|
|
|
510
524
|
nameindex++;
|
|
511
525
|
}
|
|
512
526
|
nameindex = _nameindex;
|
|
513
|
-
if (!cache.length) continue;
|
|
527
|
+
// if (!cache.length) continue;
|
|
514
528
|
if (queue.length) flushqueue(result, queue), queue = [];
|
|
515
529
|
for (var c of cache) pushstep(result, c);
|
|
516
530
|
cache = [];
|
|
517
531
|
var n = o.next;
|
|
518
|
-
if (n && !needbreak(n)) {
|
|
532
|
+
if (n && !needbreak(n) && !ispropcall(o)) {
|
|
519
533
|
var h = snapExpressHead(o);
|
|
520
534
|
var hx = t.lastIndexOf(h, cx);
|
|
521
535
|
var fs = splice(t, hx, cx + 1 - hx, { type: EXPRESS, text: getname(nameindex) });
|
|
@@ -579,8 +593,28 @@ var patchname = function (d, getname) {
|
|
|
579
593
|
}
|
|
580
594
|
};
|
|
581
595
|
var clone = function (o) {
|
|
582
|
-
return Object.assign({}, o, { prev: null, next: null });
|
|
596
|
+
return Object.assign(o instanceof Array ? [] : {}, o, { prev: null, next: null });
|
|
583
597
|
};
|
|
598
|
+
var popass = function (explist) {
|
|
599
|
+
var asn = explist.pop();
|
|
600
|
+
var n;
|
|
601
|
+
if (!asn.ret_ && asn.length) {
|
|
602
|
+
asn = createExpressList(asn);
|
|
603
|
+
if (asn.length > 1) {
|
|
604
|
+
explist.push(...asn.slice(0, asn.length - 1));
|
|
605
|
+
asn = asn.pop();
|
|
606
|
+
}
|
|
607
|
+
else {
|
|
608
|
+
n = true;
|
|
609
|
+
asn = asn.pop();
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
else {
|
|
613
|
+
n = asn.name;
|
|
614
|
+
asn = [{ type: EXPRESS, text: n }];
|
|
615
|
+
}
|
|
616
|
+
return [asn, n];
|
|
617
|
+
}
|
|
584
618
|
var popexp = function (explist) {
|
|
585
619
|
var asn = explist[explist.length - 1];
|
|
586
620
|
var n;
|
|
@@ -605,15 +639,19 @@ var popexp = function (explist) {
|
|
|
605
639
|
return [asn, n];
|
|
606
640
|
}
|
|
607
641
|
var ternary = function (body, getname, ret) {
|
|
642
|
+
var eqused = 0;
|
|
608
643
|
var getnextname = function (i) {
|
|
609
|
-
return getname(i +
|
|
644
|
+
return getname(i + eqused);
|
|
610
645
|
};
|
|
611
646
|
var question = [];
|
|
612
|
-
var
|
|
647
|
+
var exphead = [];
|
|
613
648
|
var equalsend = 0;
|
|
614
649
|
var skip = 0;
|
|
615
650
|
var equcount = 0;
|
|
616
651
|
var hascalcequ = false;
|
|
652
|
+
var equals = [];
|
|
653
|
+
var explist = [];
|
|
654
|
+
var hasquestion = false;
|
|
617
655
|
for (var cx = 0, dx = body.length; cx < dx; cx++) {
|
|
618
656
|
var o = body[cx];
|
|
619
657
|
if (o.type === STRAP && /^(var|let|const)$/.test(o.text)) {
|
|
@@ -630,53 +668,59 @@ var ternary = function (body, getname, ret) {
|
|
|
630
668
|
if (!question.length) {
|
|
631
669
|
var b = body.slice(equalsend, bx);
|
|
632
670
|
relink(b);
|
|
633
|
-
var c = toqueue(body.slice(bx + 1, cx),
|
|
634
|
-
var d = toqueue(body.slice(cx + 1),
|
|
635
|
-
patchname(c,
|
|
636
|
-
patchname(d,
|
|
671
|
+
var c = toqueue(body.slice(bx + 1, cx), getnextname, true);
|
|
672
|
+
var d = toqueue(body.slice(cx + 1), getnextname, true);
|
|
673
|
+
patchname(c, getnextname);
|
|
674
|
+
patchname(d, getnextname);
|
|
637
675
|
pushstep(d, stepReturn(1, 0, d));
|
|
638
676
|
pushstep(c, stepReturn(d.length + 1, 0, c));
|
|
639
|
-
pushstep(
|
|
640
|
-
b = ternary(b,
|
|
641
|
-
for (var b of b) pushstep(
|
|
677
|
+
pushstep(explist, scanner2(`if(${getCondition(b, function (b) {
|
|
678
|
+
b = ternary(b, getnextname, true);
|
|
679
|
+
for (var b of b) pushstep(explist, b);
|
|
642
680
|
return b;
|
|
643
681
|
}, true)})return [1,0]`));
|
|
644
|
-
var q =
|
|
645
|
-
var qi =
|
|
682
|
+
var q = explist[explist.length - 1];
|
|
683
|
+
var qi = explist.length - 1;
|
|
646
684
|
var qe = q[q.length - 1];
|
|
647
685
|
if (c.length) {
|
|
648
|
-
pushstep(
|
|
649
|
-
|
|
686
|
+
pushstep(explist, c[0]);
|
|
687
|
+
explist.push(...c.slice(1));
|
|
650
688
|
}
|
|
651
|
-
qe.text = String(
|
|
652
|
-
|
|
689
|
+
qe.text = String(explist.length - qi);
|
|
690
|
+
explist.push(...d);
|
|
691
|
+
hasquestion = true;
|
|
692
|
+
break;
|
|
653
693
|
}
|
|
654
694
|
}
|
|
655
695
|
else if (powermap[o.text] === powermap["="]) {
|
|
696
|
+
var ass = toqueue(body.slice(equalsend, cx), getnextname, false);
|
|
697
|
+
var [ass1, n = ++eqused] = popass(ass);
|
|
698
|
+
exphead.push(...ass);
|
|
699
|
+
equals.push(...ass1, o);
|
|
656
700
|
if (!question.length) equalsend = cx + 1, equcount++;
|
|
657
701
|
if (o.text.length > 1) hascalcequ = true;
|
|
658
702
|
}
|
|
659
703
|
}
|
|
660
|
-
if (!
|
|
704
|
+
if (!hasquestion) {
|
|
661
705
|
var bd = equalsend ? body.slice(equalsend) : body;
|
|
662
706
|
if (!ret && equcount === 1 && !hascalcequ && canbeOnce(bd)) {
|
|
663
|
-
|
|
707
|
+
explist = [bd];
|
|
664
708
|
}
|
|
665
709
|
else if (ret === 1 && !equcount && canbeOnce(bd)) {
|
|
666
|
-
var name =
|
|
710
|
+
var name = getnextname(0);
|
|
667
711
|
var r = [{ type: EXPRESS, text: name }, { type: STAMP, text: '=' }, ...bd]
|
|
668
712
|
r.name = name;
|
|
669
|
-
|
|
713
|
+
explist = [r];
|
|
670
714
|
}
|
|
671
715
|
else {
|
|
672
|
-
|
|
716
|
+
explist = _express(bd, getnextname, equalsend > skip || ret);
|
|
673
717
|
}
|
|
674
718
|
}
|
|
675
719
|
if (equalsend === skip) {
|
|
676
|
-
return
|
|
720
|
+
return explist;
|
|
677
721
|
}
|
|
678
|
-
|
|
679
|
-
|
|
722
|
+
relink(equals);
|
|
723
|
+
explist.unshift(...exphead);
|
|
680
724
|
var q = explist[explist.length - 1];
|
|
681
725
|
// if (!q) throw `语法错误: <red>${createString(body)}</red> \r\n行列位置: ${equals[0].row}:${equals[0].col}`
|
|
682
726
|
var n = q.name;
|
|
@@ -703,26 +747,12 @@ var ternary = function (body, getname, ret) {
|
|
|
703
747
|
}
|
|
704
748
|
else if (n) var asn = [{ type: EXPRESS, text: n }];
|
|
705
749
|
else asn = explist.pop();
|
|
706
|
-
for (var a of ass) {
|
|
707
|
-
if (a.type === SCOPED) {
|
|
708
|
-
if (a.entry === '[') {
|
|
709
|
-
var q = ternary(a, getnextname, true);
|
|
710
|
-
for (var q of q) {
|
|
711
|
-
if (q.length) pushstep(explist, q);
|
|
712
|
-
}
|
|
713
|
-
splice(a, 0, a.length, { type: EXPRESS, text: q.name });
|
|
714
|
-
}
|
|
715
|
-
else if (a.entry === '(') {
|
|
716
|
-
_invoke(a);
|
|
717
|
-
}
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
750
|
var an = '';
|
|
721
751
|
if (eq.text.length > 1) {
|
|
722
752
|
var punc = eq.text.slice(0, eq.text.length - 1);
|
|
723
753
|
var bdtmp = [...ass.map(clone), { type: STAMP, text: punc }, ...asn];
|
|
724
754
|
relink(bdtmp);
|
|
725
|
-
var explist2 = _express(bdtmp,
|
|
755
|
+
var explist2 = _express(bdtmp, getnextname, true);
|
|
726
756
|
if (isSimpleAssign) {
|
|
727
757
|
[asn, an = createString(ass)] = popexp(explist2);
|
|
728
758
|
}
|
|
@@ -737,7 +767,7 @@ var ternary = function (body, getname, ret) {
|
|
|
737
767
|
else an = n;
|
|
738
768
|
ass.push(equals[i], ...asn);
|
|
739
769
|
relink(ass);
|
|
740
|
-
if (evals.length) ass[0].set =
|
|
770
|
+
if (evals.length) ass[0].set = getnextname(0);
|
|
741
771
|
ass.name = an;
|
|
742
772
|
patchstep(ass, ass.length, 0);
|
|
743
773
|
pushstep(explist, ass);
|
|
@@ -953,7 +983,7 @@ var getblock = function (body, cx) {
|
|
|
953
983
|
return b;
|
|
954
984
|
};
|
|
955
985
|
var labels = [];
|
|
956
|
-
var scopes = [];
|
|
986
|
+
var scopes = [null];
|
|
957
987
|
var isbreak = function (o) {
|
|
958
988
|
if (o.type !== STRAP) return false;
|
|
959
989
|
return /^(break|continue)$/.test(o.text) ||
|
|
@@ -971,6 +1001,24 @@ var ifpatch = function (result, autoskip) {
|
|
|
971
1001
|
re.ifbrk = autoskip !== undefined;
|
|
972
1002
|
pushstep(result, re);
|
|
973
1003
|
};
|
|
1004
|
+
var poplabel = function (result) {
|
|
1005
|
+
if (!labels.length) return;
|
|
1006
|
+
var e = labels.pop();
|
|
1007
|
+
if (e.breaks) {
|
|
1008
|
+
while (e.breaks.length) {
|
|
1009
|
+
var b = e.breaks.pop();
|
|
1010
|
+
var end = b;
|
|
1011
|
+
for (var cx = result.length - 1; cx >= 0; cx--) {
|
|
1012
|
+
var r = result[cx];
|
|
1013
|
+
if (r.indexOf(b) >= 0) { break }
|
|
1014
|
+
}
|
|
1015
|
+
if (cx < 0) throw console.log(result.map(r => createString(r)), e.text, createString([b.prev, b])), "break语句异常";
|
|
1016
|
+
end.push({ type: VALUE, text: b.continue ? b.continue.contat - cx : result.length - cx }, { type: STAMP, text: "," }, { type: VALUE, text: "0" });
|
|
1017
|
+
relink(end);
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
};
|
|
1021
|
+
|
|
974
1022
|
function toqueue(body, getname, ret = false, result = []) {
|
|
975
1023
|
var retn = false;
|
|
976
1024
|
var uniftop = function () {
|
|
@@ -1000,23 +1048,9 @@ function toqueue(body, getname, ret = false, result = []) {
|
|
|
1000
1048
|
toqueue(block, getname, true, result);
|
|
1001
1049
|
return result[result.length - 1];
|
|
1002
1050
|
};
|
|
1003
|
-
var
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
if (e.breaks) {
|
|
1007
|
-
while (e.breaks.length) {
|
|
1008
|
-
var b = e.breaks.pop();
|
|
1009
|
-
var end = b;
|
|
1010
|
-
for (var cx = result.length - 1; cx >= 0; cx--) {
|
|
1011
|
-
var r = result[cx];
|
|
1012
|
-
if (r.indexOf(b) >= 0) { break }
|
|
1013
|
-
}
|
|
1014
|
-
if (cx < 0) throw console.log(result.map(r => createString(r)), e.text, createString([b.prev, b])), "break语句异常";
|
|
1015
|
-
end.push({ type: VALUE, text: b.continue ? b.continue.contat - cx : result.length - cx }, { type: STAMP, text: "," }, { type: VALUE, text: "0" });
|
|
1016
|
-
relink(end);
|
|
1017
|
-
}
|
|
1018
|
-
}
|
|
1019
|
-
};
|
|
1051
|
+
var _poplabel = function () {
|
|
1052
|
+
poplabel(result);
|
|
1053
|
+
}
|
|
1020
1054
|
var cx = 0, bx = 0;
|
|
1021
1055
|
var iftop = null;
|
|
1022
1056
|
var brk = function (text, YIELD) {
|
|
@@ -1040,12 +1074,17 @@ function toqueue(body, getname, ret = false, result = []) {
|
|
|
1040
1074
|
var e = labels[labels.length - 1];
|
|
1041
1075
|
if (e.type !== LABEL) break;
|
|
1042
1076
|
if (scopes.lastIndexOf(e.scope) >= 0) break;
|
|
1043
|
-
|
|
1077
|
+
_poplabel();
|
|
1044
1078
|
}
|
|
1045
1079
|
|
|
1046
1080
|
if (o.type === LABEL) {
|
|
1047
1081
|
o.scope = scopes[scopes.length - 1];
|
|
1048
1082
|
labels.push(o);
|
|
1083
|
+
var next = o.next;
|
|
1084
|
+
if (next && next.type === SCOPED && next.entry === '{') {
|
|
1085
|
+
ifpatch(result);
|
|
1086
|
+
o.contat = result.length;
|
|
1087
|
+
}
|
|
1049
1088
|
bx = ++cx;
|
|
1050
1089
|
continue;
|
|
1051
1090
|
}
|
|
@@ -1089,28 +1128,28 @@ function toqueue(body, getname, ret = false, result = []) {
|
|
|
1089
1128
|
if (o.text === 'for') {
|
|
1090
1129
|
labels.push(o);
|
|
1091
1130
|
cx = _for(body, cx, unblock, result);
|
|
1092
|
-
|
|
1131
|
+
_poplabel();
|
|
1093
1132
|
bx = cx;
|
|
1094
1133
|
continue;
|
|
1095
1134
|
}
|
|
1096
1135
|
if (o.text === 'while') {
|
|
1097
1136
|
labels.push(o);
|
|
1098
1137
|
cx = _while(body, cx, unblock, result);
|
|
1099
|
-
|
|
1138
|
+
_poplabel();
|
|
1100
1139
|
bx = cx;
|
|
1101
1140
|
continue;
|
|
1102
1141
|
}
|
|
1103
1142
|
if (o.text === 'do') {
|
|
1104
1143
|
labels.push(o);
|
|
1105
1144
|
cx = _do(body, cx, unblock, result);
|
|
1106
|
-
|
|
1145
|
+
_poplabel();
|
|
1107
1146
|
bx = cx;
|
|
1108
1147
|
continue;
|
|
1109
1148
|
}
|
|
1110
1149
|
if (o.text === 'switch') {
|
|
1111
1150
|
labels.push(o);
|
|
1112
1151
|
cx = _switch(body, cx, unblock, result, getname);
|
|
1113
|
-
|
|
1152
|
+
_poplabel();
|
|
1114
1153
|
bx = cx;
|
|
1115
1154
|
continue;
|
|
1116
1155
|
}
|
|
@@ -1208,6 +1247,7 @@ module.exports = function (body, newname, ret) {
|
|
|
1208
1247
|
return tmpnames[i];
|
|
1209
1248
|
};
|
|
1210
1249
|
var res = toqueue(body, getname, false);
|
|
1250
|
+
while (labels.length) poplabel(res);
|
|
1211
1251
|
ret_ = ret0;
|
|
1212
1252
|
return res;
|
|
1213
1253
|
};
|
|
@@ -86,7 +86,7 @@ test("await new Promise(function(){})", '_ = function () {}; _ = new Promise(_);
|
|
|
86
86
|
test(`onerror({ status: xhr.status, response: "Cookie解析异常!", toString: toResponse })`, '_ = { status: xhr.status, response: "Cookie解析异常!", toString: toResponse }; onerror(_)', true);
|
|
87
87
|
test(`if (!/^https\\:\\/\\/|^s\\/\\//.test(url)) console.warn("请使用https访问如下路径:" + url)`, '_ = /^https\\:\\/\\/|^s\\/\\//.test(url); if (_) return [1, 0]; _ = "请使用https访问如下路径:" + url; _ = console.warn(_); return [1, 0]', true);
|
|
88
88
|
test(`url += (/\\?/.test(url) ? "&" : "?") + datas;`, '_ = /\\?/.test(url); if (!_) return [1, 0]; _ = "&"; return [2, 0];\r\n _ = "?"; return [1, 0];\r\n _ = (_); _ = _ + datas; url = url + _', true);
|
|
89
|
-
test(`a = newname.querySelector("input,textarea").value = c.name.replace(/\\/$/, '')`, `_ = c.name.replace(/\\/$/, '');
|
|
89
|
+
test(`a = newname.querySelector("input,textarea").value = c.name.replace(/\\/$/, '')`, `_ = newname.querySelector("input,textarea"); _0 = c.name.replace(/\\/$/, ''); _.value = _0; a = _0`, true);
|
|
90
90
|
test(`if (selected[f.url]) f.selected = true;`, `_ = f.url; _ = selected[_]; if (!_) return [1, 0]; f.selected = true; return [1, 0]`, true);
|
|
91
91
|
test(`location.protocol + parseURL(a.b).host `, `_ = a.b; _ = parseURL(_); location.protocol + _.host`, true);
|
|
92
92
|
test(`var base = location.protocol + "//" + parseURL(this.$scope.data.host).host + "/";`, `_ = location.protocol + "//", _0 = this.$scope.data.host; _0 = parseURL(_0); _ = _ + _0.host, base = _ + "/"`, true);
|
|
@@ -98,4 +98,8 @@ test("debugger", 'debugger', true);
|
|
|
98
98
|
test("a(b,b+=1)", '_ = b; _0 = b + 1; b = _0; a(_, _0)', true);
|
|
99
99
|
test("while(a){if(b){if(c);else d;continue;}}", 'if (!a) return [4, 0]; if (!b) return [3, 0]; if (!c) return [1, 0]; return [2, 0];\r\n d; return [1, 0];\r\n return [-2, 0];\r\n return [-3, 0]', true);
|
|
100
100
|
test("/*abc*/", '/*abc*/', true);
|
|
101
|
-
test("//aaa", '//aaa', true);
|
|
101
|
+
test("//aaa", '//aaa', true);
|
|
102
|
+
test("menus[0].name+='aaa'", "_ = menus[0]; _0 = _.name + 'aaa'; _.name = _0", true);
|
|
103
|
+
test("menus[a+b].name+='aaa'", "_ = a + b; _ = menus[_]; _0 = _.name + 'aaa'; _.name = _0", true);
|
|
104
|
+
test("menus[a+b]()", "_ = a + b; menus[_]()", true);
|
|
105
|
+
test("loop:{a=b;if(a) continue loop}", "a = b; if (a) return [0, 0]", true);
|
package/coms/docs/helps.js
CHANGED
|
@@ -1,71 +1,75 @@
|
|
|
1
|
-
|
|
1
|
+
// <!--
|
|
2
|
+
if (typeof i18n === "undefined") i18n = a => a;
|
|
3
|
+
// -->
|
|
2
4
|
var helps = [
|
|
3
|
-
"f
|
|
4
|
-
"f
|
|
5
|
-
"f
|
|
6
|
-
"f
|
|
7
|
-
"f
|
|
8
|
-
"m
|
|
9
|
-
"m
|
|
10
|
-
"m
|
|
11
|
-
"m
|
|
12
|
-
"q
|
|
13
|
-
"a
|
|
14
|
-
"a
|
|
15
|
-
"a
|
|
16
|
-
"a
|
|
17
|
-
"q
|
|
18
|
-
"a
|
|
19
|
-
"a
|
|
20
|
-
"a
|
|
21
|
-
"a
|
|
22
|
-
"a
|
|
23
|
-
"z
|
|
24
|
-
"q
|
|
25
|
-
"z
|
|
26
|
-
"
|
|
27
|
-
"a
|
|
28
|
-
"z
|
|
29
|
-
"z
|
|
30
|
-
"z
|
|
31
|
-
"z
|
|
32
|
-
"k
|
|
33
|
-
"k
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
5
|
+
["f", i18n`显示版本号`, "version", "-v", "--version"],
|
|
6
|
+
["f", i18n`显示efront的安装路径`, "path", "--path"],
|
|
7
|
+
["f", i18n`显示帮助信息`, "help", "-h", "--help", "help COMMAND", "-h COMMAND", "--help COMMAND"],
|
|
8
|
+
["f", i18n`启动文档服务器`, "docs"],
|
|
9
|
+
["f", i18n`查看efront自身占用的内存`, "memery", "memory", "-m", "--memery", "--memory"],
|
|
10
|
+
["m", i18n`启动示例项目服务器`, "demo", "demo SRCNAME"],
|
|
11
|
+
["m", i18n`创建应用,项目目录允许创建第二个应用`, "init", "from SRCNAME", "init APPNAME", "init APPNAME from SRCNAME", "from SRCNAME init APPNAME"],
|
|
12
|
+
["m", i18n`创建简单应用,独占项目目录的单应用`, "create", "simple", "create|simple from SRCNAME", "create|simple APPNAME", "create|simple APPNAME from APPNAME"],
|
|
13
|
+
["m", i18n`创建空应用`, "blank", "simple", "from blank", "simple from blank"],
|
|
14
|
+
["q", i18n`自动识别环境并启动开发环境服务器`, "live", "lives", "live HTTP_PORT", "live HTTP_PORT HTTPS_PORT", "lives HTTPS_PORT", "lives HTTPS_PORT HTTP_PORT"],
|
|
15
|
+
["a", i18n`在项目文件夹启动生产环境服务器`, "start", "starts", "start HTTP_PORT", "start HTTP_PORT HTTPS_PORT", "starts HTTPS_PORT", "starts HTTPS_PORT HTTP_PORT"],
|
|
16
|
+
["a", i18n`在项目文件夹启动开发环境服务器`, "dev", "devs", "test", "dev|test HTTP_PORT", "dev|test HTTP_PORT HTTPS_PORT", "devs|tests HTTPS_PORT", "devs|tests HTTPS_PORT HTTP_PORT"],
|
|
17
|
+
["a", i18n`在当前文件夹启动服务器`, "server", "serve|serv|http HTTP_PORT HTTPS_PORT", "serve|serv|http HTTP_PORT", "https HTTPS_PORT HTTP_PORT", "https HTTPS_PORT", "HTTP_PORT HTTPS_PORT", "HTTP_PORT", ""],
|
|
18
|
+
["a", i18n`显示本机ip地址`, "ip", "-ip", "--ip"],
|
|
19
|
+
["q", i18n`编译项目`, "public", "publish", "build", "release"],
|
|
20
|
+
["a", i18n`监测文件变化,自动编译更新的部分并输出到指定目录`, "watch"],
|
|
21
|
+
["a", i18n`关闭efront服务器`, "kill HTTP_PORT|HTTPS_PORT", "close HTTP_PORT|HTTPS_PORT"],
|
|
22
|
+
["a", i18n`连接一台efront服务器,取得连接号`, "link ADDRESS"],
|
|
23
|
+
["a", i18n`用一个连接号登录本机的efront服务器,接收并打印消息`, "care ADDRESS", "care ADDRESS LINKID"],
|
|
24
|
+
["a", i18n`向一个连接号发送消息`, "cast ADDRESS LINKID MESSAGE"],
|
|
25
|
+
["z", i18n`检查文件或文件夹中的外部变量`, "check FILEPATH"],
|
|
26
|
+
["q", i18n`执行按efront方式加载的代码`, "run CODEFILE", "CODEFILE"],
|
|
27
|
+
["z", i18n`查找含有指定的外部变量的文件`, "find VARIABLE", "find VARIABLE FILEPATH"],
|
|
28
|
+
["-", i18n`从指定路径创建压缩文件`, "pack PUBLIC_PATH PACKAGE_PATH"],
|
|
29
|
+
["a", i18n`对json数据进行签名`, "sign JSON_PATH SIGNNAME"],
|
|
30
|
+
["z", i18n`根据模块的搜索路径查找真实路径`, "detect MODULE_PATH"],
|
|
31
|
+
["z", i18n`格式化代码`, "format MODULE_PATH TARGET_PATH TABSIZE"],
|
|
32
|
+
["z", i18n`导出与指定的对象路径关联的代码`, "pick MODULE_PATH TARGET_PATH KEYPATH"],
|
|
33
|
+
["z", i18n`清理代码,删除已声明未使用的代码`, "wash MODULE_PATH TARGET_PATH"],
|
|
34
|
+
["k", i18n`设置环境变量`, "setenv --NAME1=VALUE1 --NAME2=VALUE2", "setenv NAME VALUE", "set --NAME1=VALUE1", "set --NAME="],
|
|
35
|
+
["k", i18n`列出已配置的环境变量`, "listenv", "env"],
|
|
36
|
+
["-", i18n`创建国际化文案表`, "translate APPNAME"],
|
|
37
|
+
["-", i18n`将指定的路径添加到可执行文件的扫描路径`, "pathx PATHNAME"],
|
|
38
|
+
["-", i18n`从可执行文件的扫描路径中移除指定的路径`, "pathxrm PATHNAME"],
|
|
39
|
+
["-", i18n`设置远程访问的密码`, "password"],
|
|
40
|
+
["-", i18n`创建windows平台的一键安装包`, "packwin|packexe PUBLIC_PATH PACKAGE_PATH"],
|
|
41
|
+
["-", i18n`从压缩文件提取源文件`, "unpack PACKAGE_PATH PUBLIC_PATH"]
|
|
40
42
|
];
|
|
41
|
-
helps.forEach((
|
|
42
|
-
var [info, ...
|
|
43
|
-
|
|
44
|
-
var hide = type === "-";
|
|
45
|
-
info = info.slice(1);
|
|
46
|
-
var help = { info, type, hide, commands: _commands, cmds: _commands };
|
|
47
|
-
helps[cx] = help;
|
|
43
|
+
helps.forEach((h, cx) => {
|
|
44
|
+
var [type, info, ...cmds] = h;
|
|
45
|
+
helps[cx] = { type, info, cmds, commands: cmds, hide: type === '-' };
|
|
48
46
|
});
|
|
47
|
+
|
|
49
48
|
var topics = {
|
|
50
|
-
COMMAND:
|
|
51
|
-
APPNAME:
|
|
52
|
-
SRCNAME: "
|
|
53
|
-
HTTP_PORT:
|
|
54
|
-
HTTPS_PORT:
|
|
55
|
-
VARIABLES:
|
|
56
|
-
ADDRESS:
|
|
57
|
-
LINKID:
|
|
58
|
-
MESSAGE:
|
|
59
|
-
PUBLIC_PATH:
|
|
60
|
-
PACKAGE_PATH:
|
|
61
|
-
JSON_PATH:
|
|
62
|
-
SIGNNAME:
|
|
63
|
-
FILEPATH:
|
|
64
|
-
CODEFILE:
|
|
65
|
-
MODULE_PATH:
|
|
66
|
-
TARGET_PATH:
|
|
67
|
-
KEYPATH:
|
|
68
|
-
TABSIZE:
|
|
49
|
+
COMMAND: [i18n`命令名`],
|
|
50
|
+
APPNAME: [i18n`您的应用名`],
|
|
51
|
+
SRCNAME: [i18n`源项目`, "blank", "kugou", "pivot"],
|
|
52
|
+
HTTP_PORT: [i18n` http端口`, 80],
|
|
53
|
+
HTTPS_PORT: [i18n` https端口`, 443],
|
|
54
|
+
VARIABLES: [i18n`变量名`],
|
|
55
|
+
ADDRESS: [i18n`efront服务器地址`],
|
|
56
|
+
LINKID: [i18n`efront服务器提供的连接号`],
|
|
57
|
+
MESSAGE: [i18n`文本消息`],
|
|
58
|
+
PUBLIC_PATH: [i18n`软件发布目录`],
|
|
59
|
+
PACKAGE_PATH: [i18n`安装包的路径`],
|
|
60
|
+
JSON_PATH: [i18n`json文件所在的路径`],
|
|
61
|
+
SIGNNAME: [i18n`签名`],
|
|
62
|
+
FILEPATH: [i18n`文件或文件夹的路径`],
|
|
63
|
+
CODEFILE: [i18n`代码文件的路径`],
|
|
64
|
+
MODULE_PATH: [i18n`源文件的模糊路径`],
|
|
65
|
+
TARGET_PATH: [i18n`目标文件的模糊路径`],
|
|
66
|
+
KEYPATH: [i18n`对象的属性路径`],
|
|
67
|
+
TABSIZE: [i18n`缩进空格数`]
|
|
69
68
|
};
|
|
70
|
-
|
|
69
|
+
Object.keys(topics).forEach(k => {
|
|
70
|
+
var v = topics[k];
|
|
71
|
+
if (v.length === 2) v.default = v.pop();
|
|
72
|
+
else if (v.length > 2) v.default = v[1];
|
|
73
|
+
})
|
|
74
|
+
topics.VARIABLES.push(...Object.keys(topics));
|
|
71
75
|
module.exports = { helps, topics };
|
package/coms/zimoli/data.js
CHANGED
|
@@ -360,7 +360,7 @@ var parseData = function (sourceText) {
|
|
|
360
360
|
sourceText = parseYML(sourceText);
|
|
361
361
|
}
|
|
362
362
|
} catch (e) {
|
|
363
|
-
throw
|
|
363
|
+
throw i18n`数据无法解析`;
|
|
364
364
|
}
|
|
365
365
|
return sourceText;
|
|
366
366
|
};
|
|
@@ -422,7 +422,7 @@ function createApiMap(data) {
|
|
|
422
422
|
fixApi(api, href);
|
|
423
423
|
if (hasOwnProperty.call(apiMap, api.id)) {
|
|
424
424
|
const lastApi = apiMap[api.id];
|
|
425
|
-
console.warn(`多次设置的id相同的api:%c${api.id}`, 'color:red');
|
|
425
|
+
console.warn(i18n`多次设置的id相同的api:%c${api.id}`, 'color:red');
|
|
426
426
|
console.log(`[${api.name}](${lastApi.method} ${api.url})\r\n 被 [${api.name}](${lastApi.method} ${lastApi.url}) 覆盖`);
|
|
427
427
|
}
|
|
428
428
|
apiMap[api.id] = api;
|
|
@@ -534,7 +534,7 @@ var privates = {
|
|
|
534
534
|
}
|
|
535
535
|
if (lacks.length) {
|
|
536
536
|
|
|
537
|
-
console.log(`跳过了缺少参数的请求:${api.id} ${api.name} ${api.url}\r\n缺少参数:${lacks.join(', ')}`);
|
|
537
|
+
console.log(i18n`跳过了缺少参数的请求:${api.id} ${api.name} ${api.url}\r\n缺少参数:${lacks.join(', ')}`);
|
|
538
538
|
return false;
|
|
539
539
|
}
|
|
540
540
|
}
|
|
@@ -544,7 +544,7 @@ var privates = {
|
|
|
544
544
|
return this.getConfigPromise().then((apiMap) => {
|
|
545
545
|
serviceId = serviceId.replace(/[\?\:][\s\S]*$/, "");
|
|
546
546
|
const api = apiMap[serviceId];
|
|
547
|
-
if (!api) throw new Error(`没有找到对应的接口 id ${serviceId}.`);
|
|
547
|
+
if (!api) throw new Error(i18n`没有找到对应的接口 id ${serviceId}.`);
|
|
548
548
|
return extend({}, api, { root: apiMap });
|
|
549
549
|
});
|
|
550
550
|
},
|
|
@@ -632,7 +632,7 @@ var privates = {
|
|
|
632
632
|
getConfigPromise() {
|
|
633
633
|
if (!configPormise) {
|
|
634
634
|
if (!_configfileurl) {
|
|
635
|
-
throw new Error(
|
|
635
|
+
throw new Error(i18n`没有指定配置文件的路径,请使用data.loadConfig加载配置`);
|
|
636
636
|
}
|
|
637
637
|
var p = this.loadIgnoreConfig('get', _configfileurl);
|
|
638
638
|
p.loading.abort = function () { };
|
|
@@ -652,7 +652,7 @@ var getInstanceId = function () {
|
|
|
652
652
|
var error_report = isProduction ? alert : function (error, type) {
|
|
653
653
|
error_report = alert;
|
|
654
654
|
error_report(error, type);
|
|
655
|
-
console.info("
|
|
655
|
+
console.info(i18n`已使用默认的报错工具,您可以使用 ${"data.setReporter(error_reporter,error_finder)"} 替换! 本信息在仅在开发环境显示。`);
|
|
656
656
|
};
|
|
657
657
|
|
|
658
658
|
var error_check = function (data) { };
|
|
@@ -714,8 +714,8 @@ var unbindInstance = function (instanceId, callback) {
|
|
|
714
714
|
delete instanceListenerMap[instanceId];
|
|
715
715
|
}
|
|
716
716
|
};
|
|
717
|
-
var OUTDATE = new Error(
|
|
718
|
-
var ABORTED = new Error(
|
|
717
|
+
var OUTDATE = new Error(i18n`请求被覆盖`);
|
|
718
|
+
var ABORTED = new Error(i18n`请求已取消`);
|
|
719
719
|
var data = {
|
|
720
720
|
decodeStructure,
|
|
721
721
|
encodeStructure,
|
|
@@ -881,7 +881,7 @@ var data = {
|
|
|
881
881
|
},
|
|
882
882
|
asyncInstance(sid, params, parse) {
|
|
883
883
|
// 不同参数的请求互不影响
|
|
884
|
-
if (typeof sid !== "string") throw new Error(
|
|
884
|
+
if (typeof sid !== "string") throw new Error(i18n`serviceId 只能是字符串`);
|
|
885
885
|
var id = parse instanceof Function || params ? getInstanceId() : 0;
|
|
886
886
|
if (id) this.removeInstance(id);
|
|
887
887
|
var response = this.getInstance(id || sid);
|
|
@@ -1133,7 +1133,7 @@ var data = {
|
|
|
1133
1133
|
},
|
|
1134
1134
|
rebuildInstance(instance, data, old = instance) {
|
|
1135
1135
|
if (instance === data) return;
|
|
1136
|
-
if (!isObject(instance)) throw new Error(
|
|
1136
|
+
if (!isObject(instance)) throw new Error(i18n`只支持object类型的数据!`);
|
|
1137
1137
|
if (!isObject(data)) data = { data }, data.toString = data.valueOf = toDataString;
|
|
1138
1138
|
if (instance instanceof Array) instance.splice(0, instance.length);
|
|
1139
1139
|
var sample = new LoadingArray;
|
package/coms/zimoli/table.html
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<thead @mounted="setFixedColumn.call(this.parentNode),setContextMenu(this)">
|
|
2
2
|
<tr inline-block #adapter thead @mounted="resizeT(this)">
|
|
3
|
-
<td draggable="false" fixed row-index
|
|
3
|
+
<td draggable="false" fixed row-index>${i18n`序号`}</td>
|
|
4
4
|
<td fixed:="f.fixed" -repeat="f in fields track by f.id" :style="{width:f.width}" @dblclick="sort(f)"><i
|
|
5
5
|
-if="f.icon" -class="f.icon"></i><span -if="f.name" -html="f.name"></span><template
|
|
6
6
|
-else> </template>
|
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
<tfoot>
|
|
27
27
|
<tr .fade -if="!data||!data.length" style="padding-bottom: 20px;">
|
|
28
28
|
<td style="text-align: center;">
|
|
29
|
-
<template -if="data.is_loading"
|
|
30
|
-
<template -else
|
|
29
|
+
<template -if="data.is_loading">${i18n`加载中`}</template>
|
|
30
|
+
<template -else>${i18n`无数据`}</template>
|
|
31
31
|
</td>
|
|
32
32
|
</tr>
|
|
33
33
|
<tr -elseif="hasFoot">
|
|
34
34
|
<td>
|
|
35
|
-
|
|
35
|
+
${i18n`共${" <span -bind=data.length></span> "}个`}
|
|
36
36
|
</td>
|
|
37
37
|
</tr>
|
|
38
38
|
</tfoot>
|