efront 4.34.1 → 4.35.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.
Files changed (65) hide show
  1. package/coms/basic/Matrix.js +3 -1
  2. package/coms/basic/color.js +258 -78
  3. package/coms/basic/color_test.js +23 -2
  4. package/coms/basic/crc.js +6 -2
  5. package/coms/basic/data.js +3 -3
  6. package/coms/basic/decodeASN1.js +2 -2
  7. package/coms/basic/math.js +321 -0
  8. package/coms/basic/math.md +265 -0
  9. package/coms/basic/math_test.xht +56 -0
  10. package/coms/basic/pinyin.js +40 -0
  11. package/coms/basic/pinyin_test.js +40 -0
  12. package/coms/basic/wait.js +1 -1
  13. package/coms/basic_/JSON.js +24 -4
  14. package/coms/compile/Html.js +1 -0
  15. package/coms/compile/Javascript.js +14 -0
  16. package/coms/compile/Javascript_test.js +4 -3
  17. package/coms/compile/Program.js +82 -45
  18. package/coms/compile/autoenum.js +498 -138
  19. package/coms/compile/autoenum_test.js +70 -4
  20. package/coms/compile/autoeval.js +616 -18
  21. package/coms/compile/autoeval_test.js +55 -2
  22. package/coms/compile/common.js +27 -15
  23. package/coms/compile/common_test.js +12 -2
  24. package/coms/compile/downLevel.js +60 -7
  25. package/coms/compile/downLevel_test.js +22 -8
  26. package/coms/compile/powermap.js +2 -2
  27. package/coms/compile/rescan.js +2 -2
  28. package/coms/compile/scanner2.js +25 -1
  29. package/coms/compile/translate.js +18 -7
  30. package/coms/compile/unstruct.js +44 -2
  31. package/coms/compile/unstruct_test.js +14 -9
  32. package/coms/compile//347/256/227/345/274/217.js +276 -0
  33. package/coms/compile//347/256/227/345/274/217_test.js +26 -0
  34. package/coms/compile//347/264/240/351/246/250.js +60 -23
  35. package/coms/compile//347/264/240/351/246/250_test.js +8 -3
  36. package/coms/docs/markdown.js +4 -0
  37. package/coms/frame/ChatRTC.js +60 -18
  38. package/coms/frame/chat-rtc.xht +20 -18
  39. package/coms/frame/chat.js +38 -21
  40. package/coms/frame/chat.less +8 -3
  41. package/coms/reptile/colors.js +1 -0
  42. package/coms/zimoli/prompt.js +12 -2
  43. package/coms/zimoli/render.js +0 -1
  44. package/coms//350/214/250/350/217/260//344/270/212/350/211/262.xht +4 -0
  45. package/coms//350/214/250/350/217/260//346/240/207/347/255/276/345/214/226.js +14 -4
  46. package/package.json +24 -24
  47. package/public/efront.js +1 -2
  48. package/public//346/226/207/344/273/266/347/263/273/347/273/237//344/270/273/351/241/265.jsp +2 -2
  49. package/tools/build-efront +22 -0
  50. package/tools/build-efront.bat +22 -0
  51. package/tools/build-efront.js +64 -0
  52. package/tools/build-setup.bat +9 -0
  53. package/tools/buildEmoji.js +17 -0
  54. package/tools/electron.js +37 -0
  55. package/tools/empty.js +11 -0
  56. package/tools/fixBuffer.js +41 -0
  57. package/tools/install-all.js +46 -0
  58. package/tools/makeUseStrict.js +35 -0
  59. package/tools/readHelpersFromTypescript.js +82 -0
  60. package/tools/reload.js +20 -0
  61. package/tools/run-efront.bat +14 -0
  62. package/tools/toCRLF.js +30 -0
  63. package/tools/unwrap-typescript.js +28 -0
  64. package/tools/update-libs.bat +86 -0
  65. package/tools/write-utf8.js +39 -0
@@ -132,18 +132,6 @@
132
132
  </span>
133
133
  </div>
134
134
  <script>
135
- var chatrtc = new ChatRTC;
136
- // fullscreen.open();
137
- var status = function () {
138
- return acceptTime ? i18n`通话中` : rejectTime ? i18n`无应答` : i18n`正在呼叫`
139
- };
140
- var btn = button;
141
- var dvs;
142
- var callingStart = new Date, acceptTime = 0;
143
- var started = false;
144
- var interval = 0;
145
- var timeNode = document.createTextNode("");
146
- var rejectTime = 0;
147
135
  care(this, function ([type, sender, data]) {
148
136
  if (sender !== remoteUser.cid) return;
149
137
  switch (type) {
@@ -161,6 +149,23 @@
161
149
  break;
162
150
  }
163
151
  });
152
+ var page = this;
153
+ var onCandidate = function (candidate) {
154
+ cast(page, ["didate", candidate]);
155
+ };
156
+ var chatrtc = new ChatRTC(onCandidate);
157
+ // fullscreen.open();
158
+ var status = function () {
159
+ return acceptTime ? i18n`通话中` : rejectTime ? i18n`无应答` : i18n`正在呼叫`
160
+ };
161
+ var btn = button;
162
+ var dvs;
163
+ var callingStart = new Date, acceptTime = 0;
164
+ var started = false;
165
+ var interval = 0;
166
+ var timeNode = document.createTextNode("");
167
+ var rejectTime = 0;
168
+
164
169
  interval = setInterval(function () {
165
170
  var toNum2 = a => a < 10 ? "0" + a : a;
166
171
  var now = new Date;
@@ -231,17 +236,15 @@
231
236
  await start();
232
237
  acceptTime = new Date;
233
238
  };
234
- var onCandidate = function (candidate) {
235
- cast(page, ["didate", candidate]);
236
- };
239
+
237
240
  var start = async function () {
238
241
  try {
239
242
  if (!remoteOffer) {
240
- var offer = await chatrtc.call(onCandidate, remoteOffer);
243
+ var offer = await chatrtc.initOffer();
241
244
  cast(page, ['offer', offer]);
242
245
  }
243
246
  else {
244
- var answer = await chatrtc.call(onCandidate, remoteOffer);
247
+ var answer = await chatrtc.takeOffer(remoteOffer);
245
248
  cast(page, ['accept', answer]);
246
249
  }
247
250
  }
@@ -253,7 +256,6 @@
253
256
  }
254
257
  render.refresh();
255
258
  }
256
- var page = this;
257
259
  var hangup = async function () {
258
260
  cast(page, ['hangup']);
259
261
  remove(page);
@@ -111,17 +111,30 @@ var dragpage = {
111
111
  }
112
112
 
113
113
  var rtcMap = Object.create(null);
114
- var getRtc = function (userid) {
114
+ var getRtc = function (userid, scope, offer) {
115
115
  var rtc = rtcMap[userid];
116
- if (!rtc) rtc = rtcMap[userid] = new ChatRTC;
116
+ if (!rtc) {
117
+ rtc = rtcMap[userid] = new ChatRTC(function (date) {
118
+ scope.send("didate", date, userid);
119
+
120
+ });
121
+ if (offer) rtc.takeOffer(offer).then(answer => {
122
+ scope.send('takeup', answer, userid);
123
+ });
124
+ }
117
125
  return rtc;
118
126
  }
127
+ var channelId = 0;
119
128
  async function pullFileWithRTC(scope, file) {
120
129
  var rid = scope.remoteUser.cid;
121
- var rtc = getRtc(rid);
130
+ var rtc = getRtc(rid, scope);
131
+ var pullid = Math.random().toString(36).slice(2, 6) + "-" + ++channelId;
122
132
  var h = await window.showSaveFilePicker({ suggestedName: file.name });
123
133
  var writable = await h.createWritable();
124
- var channel = await rtc.createChannel();
134
+ /**
135
+ * @type {RTCDataChannel}
136
+ */
137
+ var channel = await rtc.createChannel(pullid);
125
138
  channel.binaryType = 'arraybuffer';
126
139
  var writed = 0;
127
140
  var span = document.createElement('div');
@@ -159,40 +172,34 @@ async function pullFileWithRTC(scope, file) {
159
172
  channel.onerror = function (event) {
160
173
  // <!-- console.log('接收端异常',event) -->
161
174
  };
162
- var ondate = function (date) {
163
- scope.send("didate", date, rid);
164
- };
165
- var offer = await rtc.init(ondate);
166
- scope.send('accept', { file: file.id, channel: channel.id, offer })
175
+ var offer = await rtc.initOffer();
176
+ scope.send('accept', { file: file.id, channel: pullid, offer })
167
177
  channel.onmessage = async function (event) {
168
178
  var buff = new Uint8Array(event.data);
169
179
  writed += buff.length;
170
180
  // <!-- console.log('接收端收到', writed, file.size); -->
171
181
  await writable.write(buff);
172
182
  report();
173
- if (writed >= file.size) {
174
- writable.close();
175
- }
176
183
  }
184
+
177
185
  }
178
186
  /**
179
187
  * @param {File} file
180
188
  */
181
189
  async function pushFileWithRTC(scope, file, msg) {
182
190
  var sender = msg.sender;
183
- var rtc = getRtc(sender);
191
+ var rtc = getRtc(sender, scope, msg.offer);
184
192
  var reader = file.stream().getReader();
185
- var ondate = function (date) {
186
- scope.send("didate", date, sender);
187
- }
188
- var answer = await rtc.init(ondate, msg.offer);
189
- scope.send('takeup', answer, sender);
190
- var remote = await rtc.waitChannel();
193
+ /**
194
+ * @type {RTCDataChannel}
195
+ */
196
+ var remote = await rtc.waitChannel(msg.channel);
191
197
  remote.binaryType = 'arraybuffer';
192
198
  var writed = 0, reported = 0;
193
199
  var readed = reader.read();
194
200
  var sizeLimit = 65536;
195
201
  remote.onmessage = async function (event) {
202
+ if (!opened) opened = true;
196
203
  var [low, high] = new Uint32Array(event.data);
197
204
  reported = high * 0x100000000 + low;
198
205
  // <!-- console.log('发送端收到', size(writed), size(reported)); -->
@@ -200,8 +207,8 @@ async function pushFileWithRTC(scope, file, msg) {
200
207
  var readed1 = readed;
201
208
  readed = reader.read();
202
209
  var { done, value } = await readed1;
203
- if (done) {
204
- if (writed < file.size) console.error('发送未完成', size(file.size), size(writed), value);
210
+ if (done || writed >= file.size) {
211
+ if (writed !== file.size) console.error('发送异常', size(file.size), size(writed), value);
205
212
  remote.close();
206
213
  return;
207
214
  }
@@ -217,9 +224,18 @@ async function pushFileWithRTC(scope, file, msg) {
217
224
  remote.onerror = function (event) {
218
225
  // <!-- console.log("发送端异常",event) -->
219
226
  }
227
+ var opened = false;
220
228
  remote.onopen = async function () {
221
229
  // <!-- console.log("发送端打开") -->
230
+ opened = true;
222
231
  };
232
+ if (remote.readyState === 'open') {
233
+ await wait(20);
234
+ if (!opened) {
235
+ opened = true;
236
+ remote.send(new Uint8Array(0));
237
+ }
238
+ }
223
239
  }
224
240
  var shakeing = [];
225
241
  var shakeUser = async function (page, shakes) {
@@ -475,6 +491,7 @@ function chat(title = '会话窗口') {
475
491
  },
476
492
  async qr(canvas) {
477
493
  var qrcode = await init("thirdParty$qrcode");
494
+ if (!this.cid) await wait(() => this.cid, 12000);
478
495
  var qr = qrcode(0, 'L');
479
496
  var href = this.linkurl;
480
497
  qr.addData(href);
@@ -157,16 +157,21 @@ padding {
157
157
  }
158
158
  }
159
159
 
160
+ padding{
161
+ padding: 0 20px;
162
+ }
160
163
  msg {
164
+ max-width: 100%;
161
165
  display: block;
162
166
  border-radius: 4px;
163
167
  padding: 6px 12px;
164
168
  line-height: 20px;
165
169
  white-space: normal;
166
170
  word-break: break-all;
167
- background: #fff;
171
+ @color-remote:lch(60 30 90);
172
+ background: @color-remote;
168
173
  position: relative;
169
- margin: 0 10px;
174
+ margin: 0 -10px;
170
175
  float: left;
171
176
  user-select: text;
172
177
 
@@ -181,7 +186,7 @@ msg {
181
186
 
182
187
  &:not([self]):before {
183
188
  left: 0;
184
- border-right-color: #fff;
189
+ border-right-color: @color-remote;
185
190
  }
186
191
 
187
192
  &[self] {
@@ -49,6 +49,7 @@ colors.outside = colors.FgCyan;
49
49
  colors.stamp = colors.FgGray;
50
50
  colors.regexp = colors.FgRed2;
51
51
  colors.text = colors.FgRed;
52
+ colors.danger = colors.Underscore + colors.BgRed + colors.FgWhite2;
52
53
  colors.flow = colors.FgPurple;
53
54
  colors.digit = colors.FgGreen2;
54
55
  colors.deep0 = colors.FgYellow;
@@ -30,7 +30,7 @@ var fixContainer = function (elem, ipt) {
30
30
  move.fixPosition(elem);
31
31
  };
32
32
  function prompt() {
33
- var msg, check, ipt;
33
+ var msg, check, ipt, info;
34
34
  var opts = [];
35
35
  var submit = null;
36
36
  var wrap = false;
@@ -53,6 +53,7 @@ function prompt() {
53
53
  if (isFunction(arg.check)) check = arg.check;
54
54
  if (isFunction(arg.submit)) submit = arg;
55
55
  if (isString(arg.msg || arg.title)) msg = arg.msg || arg.title;
56
+ if (isHandled(arg.info)) info = arg.info;
56
57
  if (isHandled(arg.value)) value = arg.value;
57
58
  for (var k in attrs) {
58
59
  if (k in arg) attrs[k] = arg[k];
@@ -94,7 +95,16 @@ function prompt() {
94
95
  on('input')(ipt, setDisable);
95
96
  }
96
97
  var body = document.createElement("div");
97
- appendChild(body, [ipt, tip]);
98
+ var content = [ipt, tip];
99
+ if (info) {
100
+ if (isNode(info)) content.push(info);
101
+ else {
102
+ var info_node = document.createElement('div');
103
+ info_node.innerHTML = info;
104
+ content.push(info_node);
105
+ }
106
+ }
107
+ appendChild(body, content);
98
108
  var c = confirm(msg, body, buttons, async function (_) {
99
109
  if (_ === buttons[0]) {
100
110
  var value = getValue();
@@ -722,7 +722,6 @@ class Model {
722
722
  return;
723
723
  }
724
724
  this.ss.call(this.target, value);
725
- console.log(value, this.value, this.gs.call(this.target))
726
725
  this.value = value;
727
726
  this.bd.value = this.gs.call(this.target, value);
728
727
  if (isFunction(this.emit?.call)) {
@@ -90,6 +90,10 @@
90
90
  color: #4fc1ff;
91
91
  }
92
92
 
93
+ danger {
94
+ color: #da0c2e;
95
+ }
96
+
93
97
  comment {
94
98
  color: #6a9955;
95
99
  }
@@ -13,14 +13,22 @@ var amp = a => `&#${a.charCodeAt()};`;
13
13
  var encodeAmp = function (a) {
14
14
  return a.replace(/[\<\>\|&]/g, amp);
15
15
  };
16
- var codecolor = function (c, encode) {
17
- var wrap = arguments[2];
18
- if (encode?.length === 2) wrap = encode, encode = arguments[2];
16
+ var codecolor = function (c) {
17
+ var envs, wrap, encode;
18
+ for (var cx = 1, dx = arguments.length; cx < dx; cx++) {
19
+ var a = arguments[cx];
20
+ switch (typeof a) {
21
+ case "object": envs = a; break;
22
+ case "function":
23
+ if (!wrap && a.length === 2) wrap = a;
24
+ else encode = a;
25
+ break;
26
+ }
27
+ }
19
28
  if (!wrap) {
20
29
  wrap = wrapLabel;
21
30
  if (!encode) encode = encodeAmp;
22
31
  }
23
- var envs = c.envs;
24
32
  var deep = 0;
25
33
  var used = c.used;
26
34
  var scoped = c.scoped;
@@ -69,6 +77,7 @@ var codecolor = function (c, encode) {
69
77
  if (pdot) keys.shift();
70
78
  var invoked = null;
71
79
  var endi = keys.length - 1;
80
+ if (o.danger) var danger = wrap(keys[0], 'danger');
72
81
  if (isInvoke(o)) {
73
82
  if (!/^[\?]/.test(keys[endi])) invoked = wrap(keys[endi], "invoke");
74
83
  }
@@ -84,6 +93,7 @@ var codecolor = function (c, encode) {
84
93
  keys[cx] = /^[\?]/.test(k) || !k ? k : wrap(k, 'express');
85
94
  }
86
95
  if (endi === keys.length - 1) keys[endi] = invoked;
96
+ if (danger) keys[0] = danger;
87
97
  keys = keys.join(".");
88
98
  if (pdot) keys = "." + keys;
89
99
  o.text = keys;
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
- {
2
- "name": "efront",
3
- "version": "4.34.1",
4
- "description": "一个开发环境,提供一种自由的前端开发模式,也可作为辅助工具使用。",
5
- "main": "public/efront.js",
6
- "directories": {
7
- "test": "test"
8
- },
9
- "bin": {
10
- "efront": "public/efront.js"
11
- },
12
- "scripts": {
13
- "prepack": "node tools/build-efront.js --node --no-target&node public/efront build 文件系统.html"
14
- },
15
- "repository": {
16
- "type": "git",
17
- "url": "https://github.com/yunxu1019/efront.git"
18
- },
19
- "keywords": [
20
- "efront"
21
- ],
22
- "author": "yunxu1019",
23
- "license": "MIT"
24
- }
1
+ {
2
+ "name": "efront",
3
+ "version": "4.35.0",
4
+ "description": "一个开发环境,提供一种自由的前端开发模式,也可作为辅助工具使用。",
5
+ "main": "./coms/efront",
6
+ "directories": {
7
+ "test": "test"
8
+ },
9
+ "bin": {
10
+ "efront": "tools/run-efront.bat"
11
+ },
12
+ "scripts": {
13
+ "prepack": "node tools/build-efront.js --node --no-target&node public/efront build 文件系统.html"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/yunxu1019/efront.git"
18
+ },
19
+ "keywords": [
20
+ "efront"
21
+ ],
22
+ "author": "yunxu1019",
23
+ "license": "MIT"
24
+ }