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.
Files changed (50) hide show
  1. package/#/345/233/275/351/231/205/345/214/226.yml +638 -47
  2. package/{docs → apps}/drequest/index.html +11 -1
  3. package/{docs → apps}/drequest/main.js +5 -5
  4. package/coms/basic/#loader.js +2 -1
  5. package/coms/basic/YAML.js +3 -3
  6. package/coms/basic/parseYML.js +4 -1
  7. package/coms/basic/parseYML_test.js +3 -1
  8. package/coms/basic/strings.js +22 -15
  9. package/coms/basic_/readme-en.md +112 -0
  10. package/coms/basic_/readme.md +1 -1
  11. package/coms/compile/Javascript.js +4 -2
  12. package/coms/compile/Program.js +0 -2
  13. package/coms/compile/common.js +1 -0
  14. package/coms/compile/downLevel.js +8 -4
  15. package/coms/compile/translate.js +3 -3
  16. package/coms/compile/unstruct.js +107 -67
  17. package/coms/compile/unstruct_test.js +6 -2
  18. package/coms/docs/helps.js +69 -65
  19. package/coms/zimoli/data.js +10 -10
  20. package/coms/zimoli/table.html +4 -4
  21. package/docs/compare-en.md +327 -0
  22. package/docs/components.jsp +1 -1
  23. package/docs/main.xht +18 -18
  24. package/docs/version-desc.md +11 -0
  25. package/docs/welcome.jsp +1 -1
  26. package/docs//345/221/275/344/273/244.xht +12 -6
  27. package/docs//345/267/245/345/205/267//345/233/275/351/231/205/345/214/226.xht +54 -53
  28. 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
  29. package/docs//347/273/204/344/273/266.xht +12 -12
  30. package/package.json +1 -1
  31. package/public/efront.js +1 -1
  32. package/readme-en.md +168 -0
  33. package/readme.md +16 -7
  34. package/_envs/setup.bat +0 -10
  35. package/apis/zimoli/file/checkPermission.js +0 -10
  36. package/apis/zimoli/file/info.js +0 -68
  37. package/apis/zimoli/file/root.js +0 -2
  38. package/apis/zimoli/server/count.js +0 -4
  39. package/apis/zimoli/user/login.js +0 -12
  40. package/apis/zimoli/yuanfen/suggest.js +0 -8
  41. package/coms/zimoli/editor.js +0 -85
  42. package/coms/zimoli/editor.less +0 -64
  43. package/data/i18n/zh-cn.json +0 -21
  44. package/docs/canvas/main.js +0 -5
  45. package/docs/compare/index.html +0 -14
  46. package/docs/compare/main.js +0 -7
  47. package/docs/editor/index.html +0 -30
  48. package/docs/editor/main.js +0 -5
  49. package/docs/editor/main.less +0 -0
  50. /package/{docs → apps}/sample/mycolor.html +0 -0
@@ -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 + 1);
644
+ return getname(i + eqused);
610
645
  };
611
646
  var question = [];
612
- var res = [];
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), getname, true);
634
- var d = toqueue(body.slice(cx + 1), getname, true);
635
- patchname(c, getname);
636
- patchname(d, getname);
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(res, scanner2(`if(${getCondition(b, function (b) {
640
- b = ternary(b, getname, true);
641
- for (var b of b) pushstep(res, b);
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 = res[res.length - 1];
645
- var qi = res.length - 1;
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(res, c[0]);
649
- res.push(...c.slice(1));
686
+ pushstep(explist, c[0]);
687
+ explist.push(...c.slice(1));
650
688
  }
651
- qe.text = String(res.length - qi);
652
- res.push(...d);
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 (!res.length) {
704
+ if (!hasquestion) {
661
705
  var bd = equalsend ? body.slice(equalsend) : body;
662
706
  if (!ret && equcount === 1 && !hascalcequ && canbeOnce(bd)) {
663
- res = [bd];
707
+ explist = [bd];
664
708
  }
665
709
  else if (ret === 1 && !equcount && canbeOnce(bd)) {
666
- var name = getname(0);
710
+ var name = getnextname(0);
667
711
  var r = [{ type: EXPRESS, text: name }, { type: STAMP, text: '=' }, ...bd]
668
712
  r.name = name;
669
- res = [r];
713
+ explist = [r];
670
714
  }
671
715
  else {
672
- res = _express(bd, getname, equalsend > skip || ret);
716
+ explist = _express(bd, getnextname, equalsend > skip || ret);
673
717
  }
674
718
  }
675
719
  if (equalsend === skip) {
676
- return res;
720
+ return explist;
677
721
  }
678
- var equals = body.slice(skip, equalsend);
679
- var explist = res;
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, getname, true);
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 = getname(0);
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 poplabel = function () {
1004
- if (!labels.length) return;
1005
- var e = labels.pop();
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
- poplabel();
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
- poplabel();
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
- poplabel();
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
- poplabel();
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
- poplabel();
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(/\\/$/, ''); newname.querySelector("input,textarea").value = _; a = _`, true);
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);
@@ -1,71 +1,75 @@
1
-
1
+ // <!--
2
+ if (typeof i18n === "undefined") i18n = a => a;
3
+ // -->
2
4
  var helps = [
3
- "f显示版本号,version,-v,--version",
4
- "f显示efront的安装路径,path,--path",
5
- "f显示帮助信息,help,-h,--help,help COMMAND,-h COMMAND,--help COMMAND",
6
- "f启动文档服务器,docs",
7
- "f查看efront自身占用的内存,memery,memory,-m,--memery,--memory",
8
- "m启动示例项目服务器,demo,demo SRCNAME",
9
- "m创建应用,项目目录允许创建第二个应用,init,from SRCNAME,init APPNAME,init APPNAME from SRCNAME,from SRCNAME init APPNAME",
10
- "m创建简单应用,独占项目目录的单应用,create,simple,create|simple from SRCNAME,create|simple APPNAME,create|simple APPNAME from APPNAME",
11
- "m创建空应用,blank,simple,from blank,simple from blank",
12
- "q自动识别环境并启动开发环境服务器,live,lives,live HTTP_PORT,live HTTP_PORT HTTPS_PORT,lives HTTPS_PORT,lives HTTPS_PORT HTTP_PORT",
13
- "a在项目文件夹启动生产环境服务器,start,starts,start HTTP_PORT,start HTTP_PORT HTTPS_PORT,starts HTTPS_PORT,starts HTTPS_PORT HTTP_PORT",
14
- "a在项目文件夹启动开发环境服务器,dev,devs,test,dev|test HTTP_PORT,dev|test HTTP_PORT HTTPS_PORT,devs|tests HTTPS_PORT,devs|tests HTTPS_PORT HTTP_PORT",
15
- "a在当前文件夹启动服务器,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,",
16
- "a显示本机ip地址,ip,-ip,--ip",
17
- "q编译项目,public,publish,build,release",
18
- "a监测文件变化,自动编译更新的部分并输出到指定目录,watch",
19
- "a关闭efront服务器,kill HTTP_PORT|HTTPS_PORT,close HTTP_PORT|HTTPS_PORT",
20
- "a连接一台efront服务器,取得连接号,link ADDRESS",
21
- "a用一个连接号登录本机的efront服务器,接收并打印消息,care ADDRESS,care ADDRESS LINKID",
22
- "a向一个连接号发送消息,cast ADDRESS LINKID MESSAGE",
23
- "z检查文件或文件夹中的外部变量,check FILEPATH",
24
- "q执行按efront方式加载的代码,run CODEFILE,CODEFILE",
25
- "z查找含有指定的外部变量的文件,find VARIABLE,find VARIABLE FILEPATH",
26
- "-从指定路径创建压缩文件,pack PUBLIC_PATH PACKAGE_PATH",
27
- "ajson数据进行签名,sign JSON_PATH SIGNNAME",
28
- "z根据模块的搜索路径查找真实路径,detect MODULE_PATH",
29
- "z格式化代码,format MODULE_PATH TARGET_PATH TABSIZE",
30
- "z导出与指定的对象路径关联的代码,pick MODULE_PATH TARGET_PATH KEYPATH",
31
- "z清理代码,删除已声明未使用的代码,wash MODULE_PATH TARGET_PATH",
32
- "k设置环境变量,setenv --NAME1=VALUE1 --NAME2=VALUE2,setenv NAME VALUE,set --NAME1=VALUE1,set --NAME=",
33
- "k列出已配置的环境变量,listenv,env",
34
- "-创建国际化文案表,translate APPNAME",
35
- "-将指定的路径添加到可执行文件的扫描路径,pathx PATHNAME",
36
- "-从可执行文件的扫描路径中移除指定的路径,pathxrm PATHNAME",
37
- "-设置远程访问的密码,password",
38
- "-创建windows平台的一键安装包,packwin|packexe PUBLIC_PATH PACKAGE_PATH",
39
- "-从压缩文件提取源文件,unpack PACKAGE_PATH PUBLIC_PATH",
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((str, cx) => {
42
- var [info, ..._commands] = str.split(",");
43
- var type = info.charAt(0);
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: "源项目|blank,blank,kugou,pivot",
53
- HTTP_PORT: " http 端口|80",
54
- HTTPS_PORT: " https 端口|443",
55
- VARIABLES: "变量名",
56
- ADDRESS: "efront服务器地址",
57
- LINKID: "efront服务器提供的连接号",
58
- MESSAGE: "文本消息",
59
- PUBLIC_PATH: "软件发布目录",
60
- PACKAGE_PATH: "安装包的路径",
61
- JSON_PATH: "json文件所在的路径",
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
- topics.VARIABLES += "," + Object.keys(topics);
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 };
@@ -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("没有指定配置文件的路径,请使用data.loadConfig加载配置");
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("已使用默认的报错工具,您可以使用 data.setReporter(error_reporter,error_finder) 替换! 本信息在仅在开发环境显示。");
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("serviceId 只能是字符串");
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("只支持object类型的数据!");
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;
@@ -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>序号</td>
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>&nbsp;</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">加载中</template>
30
- <template -else>无数据</template>
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
- 共&nbsp;<span -bind="data.length"></span>&nbsp;个
35
+ ${i18n`共${"&nbsp;<span -bind=data.length></span>&nbsp;"}个`}
36
36
  </td>
37
37
  </tr>
38
38
  </tfoot>