efront 4.0.11 → 4.0.13

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.
@@ -1,137 +1,155 @@
1
- - zh-CN: 服务器异常$1
1
+ - zh-CN: 文件路径
2
+ en: File Path
3
+
4
+ - zh-CN: 用户名
5
+ en: user name
6
+
7
+ - zh-CN: 游客
8
+ en: tourist
9
+
10
+ - zh-CN: 登录中
11
+ en: Logging in
12
+
13
+ - zh-CN: 确定
14
+ en: confirm
15
+
16
+ - zh-CN: 取消
17
+ en: cancel
18
+
19
+ - zh-CN: 服务器异常$1
2
20
  en: Server Exception $1
3
21
 
4
- - zh-CN: $1之前需要使用$2命令在$3上设置$4
22
+ - zh-CN: $1之前需要使用$2命令在$3上设置$4
5
23
  en: Before $1, you need to use the $2 command to set $4 on $3
6
24
 
7
- - zh-CN: 请输入服务器密码
25
+ - zh-CN: 请输入服务器密码
8
26
  en: Please enter the server password
9
27
 
10
- - zh-CN: 登录
28
+ - zh-CN: 登录
11
29
  en: Sign in
12
30
 
13
- - zh-CN: 文本超长,无法翻译
31
+ - zh-CN: 文本超长,无法翻译
14
32
  en: The text is too long to be translated
15
33
 
16
- - zh-CN: 没有权限!
34
+ - zh-CN: 没有权限!
17
35
  en: No permission!
18
36
 
19
- - zh-CN: 未找到指定的资源
37
+ - zh-CN: 未找到指定的资源
20
38
  en: The specified resource was not found
21
39
 
22
- - zh-CN: 原始名称
40
+ - zh-CN: 原始名称
23
41
  en: Original Name
24
42
 
25
- - zh-CN: 输入新名称
43
+ - zh-CN: 输入新名称
26
44
  en: Enter a new name
27
45
 
28
- - zh-CN: 请过一段时间再试
46
+ - zh-CN: 请过一段时间再试
29
47
  en: Please try again later
30
48
 
31
- - zh-CN: 服务器取消了您的请求
49
+ - zh-CN: 服务器取消了您的请求
32
50
  en: The server canceled your request
33
51
 
34
- - zh-CN: 文件
52
+ - zh-CN: 文件
35
53
  en: file
36
54
 
37
- - zh-CN: 键名
55
+ - zh-CN: 键名
38
56
  en: Key Name
39
57
 
40
- - zh-CN: 显示名
58
+ - zh-CN: 显示名
41
59
  en: Display Name
42
60
 
43
- - zh-CN: 密钥
61
+ - zh-CN: 密钥
44
62
  en: secret key
45
63
 
46
- - zh-CN: 备注
64
+ - zh-CN: 备注
47
65
  en: remarks
48
66
 
49
- - zh-CN: 任务ID
67
+ - zh-CN: 任务ID
50
68
  en: Task ID
51
69
 
52
- - zh-CN: 任务名
70
+ - zh-CN: 任务名
53
71
  en: Task Name
54
72
 
55
- - zh-CN: 是否启用
73
+ - zh-CN: 是否启用
56
74
  en: Enabled or not
57
75
 
58
- - zh-CN: 任务代码
76
+ - zh-CN: 任务代码
59
77
  en: Task Code
60
78
 
61
- - zh-CN: 标识
79
+ - zh-CN: 标识
62
80
  en: identification
63
81
 
64
- - zh-CN: 应用名
82
+ - zh-CN: 应用名
65
83
  en: App Name
66
84
 
67
- - zh-CN: 路径
85
+ - zh-CN: 路径
68
86
  en: route
69
87
 
70
- - zh-CN: 代理路径
88
+ - zh-CN: 代理路径
71
89
  en: Proxy Path
72
90
 
73
- - zh-CN: 二维码
91
+ - zh-CN: 二维码
74
92
  en: QR code
75
93
 
76
- - zh-CN: 真实路径
94
+ - zh-CN: 真实路径
77
95
  en: Real path
78
96
 
79
- - zh-CN: 动作
97
+ - zh-CN: 动作
80
98
  en: action
81
99
 
82
- - zh-CN: 状态
100
+ - zh-CN: 状态
83
101
  en: state
84
102
 
85
- - zh-CN: 地址
103
+ - zh-CN: 地址
86
104
  en: address
87
105
 
88
- - zh-CN: 地理位置
106
+ - zh-CN: 地理位置
89
107
  en: geographical position
90
108
 
91
- - zh-CN: 启动时间
109
+ - zh-CN: 启动时间
92
110
  en: Start time
93
111
 
94
- - zh-CN: 端口
112
+ - zh-CN: 端口
95
113
  en: port
96
114
 
97
- - zh-CN: 版本
115
+ - zh-CN: 版本
98
116
  en: edition
99
117
 
100
- - zh-CN: 进程
118
+ - zh-CN: 进程
101
119
  en: process
102
120
 
103
- - zh-CN: 访问量
121
+ - zh-CN: 访问量
104
122
  en: Visits
105
123
 
106
- - zh-CN: 房间名
124
+ - zh-CN: 房间名
107
125
  en: Room name
108
126
 
109
- - zh-CN: 数值
127
+ - zh-CN: 数值
110
128
  en: numerical value
111
129
 
112
- - zh-CN: 文本
130
+ - zh-CN: 文本
113
131
  en: text
114
132
 
115
- - zh-CN: 字典ID
133
+ - zh-CN: 字典ID
116
134
  en: Dictionary ID
117
135
 
118
- - zh-CN: 字典名
136
+ - zh-CN: 字典名
119
137
  en: Dictionary name
120
138
 
121
- - zh-CN: 字典数据
139
+ - zh-CN: 字典数据
122
140
  en: Dictionary data
123
141
 
124
- - zh-CN: 名称
142
+ - zh-CN: 名称
125
143
  en: name
126
144
 
127
- - zh-CN: 服务器
145
+ - zh-CN: 服务器
128
146
  en: The server
129
147
 
130
- - zh-CN: 服务器地址
148
+ - zh-CN: 服务器地址
131
149
  en: server address
132
150
 
133
- - zh-CN: 密码
151
+ - zh-CN: 密码
134
152
  en: password
135
153
 
136
- - zh-CN: 这是一个空白项目
154
+ - zh-CN: 这是一个空白项目
137
155
  en: This is a blank project
@@ -9,6 +9,6 @@
9
9
  <meta name="viewport" content="user-scalable=no,initial-scale=1,maximum-scale=1,width=device-width" />
10
10
  </head>
11
11
  <body>
12
- <script src=/main.js></script>
12
+ <script efrontloader deleteoncompile></script>
13
13
  </body>
14
14
  </html>
@@ -1,11 +1,11 @@
1
1
  titlebar("请求计时工具", [], false);
2
- var _input = createElement(input);
2
+ var _input = input();
3
3
  css(_input, "width:100%;height:50px;margin:10px 0;");
4
- var request_time_count = createElement(_input);
4
+ var request_time_count = _input.cloneNode();
5
5
  request_time_count.setAttribute("placeholder", "输入请求次数");
6
- var request_time_url = createElement(_input);
6
+ var request_time_url = _input.cloneNode();
7
7
  request_time_url.setAttribute("placeholder", "输入url");
8
- var request_time_label = createElement(div);
8
+ var request_time_label = div();
9
9
  var request_time_button = button("请求");
10
10
  var request_stop_button = button("停止");
11
11
  css(request_time_button, "background-color:#f34;width:100%;height:50px;margin:10px 0;color:#fff;")
@@ -45,7 +45,7 @@ onclick(request_time_button, request)
45
45
  onclick(request_stop_button, function () {
46
46
  stoped = true;
47
47
  });
48
- var page = createElement(div);
48
+ var page = div();
49
49
  css(page, "padding-top:50px;");
50
50
  appendChild(page, request_time_count, request_time_label, request_time_url, request_time_button, request_stop_button);
51
51
  function main() {
@@ -35,7 +35,7 @@ instanceof`.trim().split(/[,\s]+/);
35
35
  class Javascript extends Program {
36
36
  straps = straps;
37
37
  value_reg = /^(false|true|null|Infinity|NaN|undefined|eval)$/
38
- transive_reg = /^(new|var|let|const|yield|void|in|of|typeof|delete|case|return|await|export|default|instanceof|throw|extends|import|from)$/
38
+ transive_reg = /^(new|var|let|const|yield|void|in|of|typeof|delete|case|return|await|default|instanceof|throw|extends|import|from)$/
39
39
  strapexp_reg = /^(new|void|typeof|delete|class|function|await)/;
40
40
  forceend_reg = /^(return|yield|break|continue|debugger)$/;
41
41
  classstrap_reg = /^(class|function|async)$/;
@@ -571,7 +571,9 @@ var removeExport = function (c, i, code) {
571
571
  code.splice(i + 1, 0, ...scan(`=`));
572
572
  var nn = n.next;
573
573
  var d = nn.text;
574
- if (used[d]) used[d].forEach(a => a.text = `exports.${d}`);
574
+ if (used[d]) used[d].forEach(a => {
575
+ if (!a.kind) a.text = `exports.${d}`;
576
+ });
575
577
  delete used[d];
576
578
  delete envs[d];
577
579
  return;
@@ -151,7 +151,6 @@ class Program {
151
151
  forceend_reg = /^(return|break|continue)$/;
152
152
  classstrap_reg = /^(class)$/;
153
153
  extends_reg = /^(extends)$/;
154
- export_reg = /^(export)$/;
155
154
  spaces = spaceDefined;
156
155
  nocase = false
157
156
  lastIndex = 0
@@ -585,7 +584,6 @@ class Program {
585
584
  }
586
585
  else if (last.type === STRAP) {
587
586
  if (last.isend);
588
- else if (this.export_reg.test(last.text));
589
587
  else scope.isObject = queue.inExpress;
590
588
  }
591
589
  }
@@ -454,6 +454,12 @@ var _invoke = function (t, getname) {
454
454
  var bx = 0;
455
455
  for (var cx = 0; cx < t.length; cx++) {
456
456
  var o = t[cx];
457
+ if (o.type === STRAP && o.text === 'function') {
458
+ while (o && o.entry !== "{") o = o.next;
459
+ cx = t.indexOf(o, cx);
460
+ continue;
461
+ }
462
+
457
463
  if (needbreak(o)) {
458
464
  var s = splice(t, bx, cx + 1 - bx);
459
465
  if (cx > 0) s.name = s[0].text;
@@ -510,7 +516,7 @@ var _invoke = function (t, getname) {
510
516
  nameindex++;
511
517
  }
512
518
  nameindex = _nameindex;
513
- if (!cache.length) continue;
519
+ // if (!cache.length) continue;
514
520
  if (queue.length) flushqueue(result, queue), queue = [];
515
521
  for (var c of cache) pushstep(result, c);
516
522
  cache = [];
@@ -579,8 +585,28 @@ var patchname = function (d, getname) {
579
585
  }
580
586
  };
581
587
  var clone = function (o) {
582
- return Object.assign({}, o, { prev: null, next: null });
588
+ return Object.assign(o instanceof Array ? [] : {}, o, { prev: null, next: null });
583
589
  };
590
+ var popass = function (explist) {
591
+ var asn = explist.pop();
592
+ var n;
593
+ if (!asn.ret_ && asn.length) {
594
+ asn = createExpressList(asn);
595
+ if (asn.length > 1) {
596
+ explist.push(...asn.slice(0, asn.length - 1));
597
+ asn = asn.pop();
598
+ }
599
+ else {
600
+ n = true;
601
+ asn = asn.pop();
602
+ }
603
+ }
604
+ else {
605
+ n = asn.name;
606
+ asn = [{ type: EXPRESS, text: n }];
607
+ }
608
+ return [asn, n];
609
+ }
584
610
  var popexp = function (explist) {
585
611
  var asn = explist[explist.length - 1];
586
612
  var n;
@@ -605,15 +631,19 @@ var popexp = function (explist) {
605
631
  return [asn, n];
606
632
  }
607
633
  var ternary = function (body, getname, ret) {
634
+ var eqused = 0;
608
635
  var getnextname = function (i) {
609
- return getname(i + 1);
636
+ return getname(i + eqused);
610
637
  };
611
638
  var question = [];
612
- var res = [];
639
+ var exphead = [];
613
640
  var equalsend = 0;
614
641
  var skip = 0;
615
642
  var equcount = 0;
616
643
  var hascalcequ = false;
644
+ var equals = [];
645
+ var explist = [];
646
+ var hasquestion = false;
617
647
  for (var cx = 0, dx = body.length; cx < dx; cx++) {
618
648
  var o = body[cx];
619
649
  if (o.type === STRAP && /^(var|let|const)$/.test(o.text)) {
@@ -630,53 +660,59 @@ var ternary = function (body, getname, ret) {
630
660
  if (!question.length) {
631
661
  var b = body.slice(equalsend, bx);
632
662
  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);
663
+ var c = toqueue(body.slice(bx + 1, cx), getnextname, true);
664
+ var d = toqueue(body.slice(cx + 1), getnextname, true);
665
+ patchname(c, getnextname);
666
+ patchname(d, getnextname);
637
667
  pushstep(d, stepReturn(1, 0, d));
638
668
  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);
669
+ pushstep(explist, scanner2(`if(${getCondition(b, function (b) {
670
+ b = ternary(b, getnextname, true);
671
+ for (var b of b) pushstep(explist, b);
642
672
  return b;
643
673
  }, true)})return [1,0]`));
644
- var q = res[res.length - 1];
645
- var qi = res.length - 1;
674
+ var q = explist[explist.length - 1];
675
+ var qi = explist.length - 1;
646
676
  var qe = q[q.length - 1];
647
677
  if (c.length) {
648
- pushstep(res, c[0]);
649
- res.push(...c.slice(1));
678
+ pushstep(explist, c[0]);
679
+ explist.push(...c.slice(1));
650
680
  }
651
- qe.text = String(res.length - qi);
652
- res.push(...d);
681
+ qe.text = String(explist.length - qi);
682
+ explist.push(...d);
683
+ hasquestion = true;
684
+ break;
653
685
  }
654
686
  }
655
687
  else if (powermap[o.text] === powermap["="]) {
688
+ var ass = toqueue(body.slice(equalsend, cx), getnextname, false);
689
+ var [ass1, n = ++eqused] = popass(ass);
690
+ exphead.push(...ass);
691
+ equals.push(...ass1, o);
656
692
  if (!question.length) equalsend = cx + 1, equcount++;
657
693
  if (o.text.length > 1) hascalcequ = true;
658
694
  }
659
695
  }
660
- if (!res.length) {
696
+ if (!hasquestion) {
661
697
  var bd = equalsend ? body.slice(equalsend) : body;
662
698
  if (!ret && equcount === 1 && !hascalcequ && canbeOnce(bd)) {
663
- res = [bd];
699
+ explist = [bd];
664
700
  }
665
701
  else if (ret === 1 && !equcount && canbeOnce(bd)) {
666
- var name = getname(0);
702
+ var name = getnextname(0);
667
703
  var r = [{ type: EXPRESS, text: name }, { type: STAMP, text: '=' }, ...bd]
668
704
  r.name = name;
669
- res = [r];
705
+ explist = [r];
670
706
  }
671
707
  else {
672
- res = _express(bd, getname, equalsend > skip || ret);
708
+ explist = _express(bd, getnextname, equalsend > skip || ret);
673
709
  }
674
710
  }
675
711
  if (equalsend === skip) {
676
- return res;
712
+ return explist;
677
713
  }
678
- var equals = body.slice(skip, equalsend);
679
- var explist = res;
714
+ relink(equals);
715
+ explist.unshift(...exphead);
680
716
  var q = explist[explist.length - 1];
681
717
  // if (!q) throw `语法错误: <red>${createString(body)}</red> \r\n行列位置: ${equals[0].row}:${equals[0].col}`
682
718
  var n = q.name;
@@ -703,26 +739,12 @@ var ternary = function (body, getname, ret) {
703
739
  }
704
740
  else if (n) var asn = [{ type: EXPRESS, text: n }];
705
741
  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
742
  var an = '';
721
743
  if (eq.text.length > 1) {
722
744
  var punc = eq.text.slice(0, eq.text.length - 1);
723
745
  var bdtmp = [...ass.map(clone), { type: STAMP, text: punc }, ...asn];
724
746
  relink(bdtmp);
725
- var explist2 = _express(bdtmp, getname, true);
747
+ var explist2 = _express(bdtmp, getnextname, true);
726
748
  if (isSimpleAssign) {
727
749
  [asn, an = createString(ass)] = popexp(explist2);
728
750
  }
@@ -737,7 +759,7 @@ var ternary = function (body, getname, ret) {
737
759
  else an = n;
738
760
  ass.push(equals[i], ...asn);
739
761
  relink(ass);
740
- if (evals.length) ass[0].set = getname(0);
762
+ if (evals.length) ass[0].set = getnextname(0);
741
763
  ass.name = an;
742
764
  patchstep(ass, ass.length, 0);
743
765
  pushstep(explist, ass);
@@ -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,6 @@ 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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.0.11",
3
+ "version": "4.0.13",
4
4
  "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {