efront 4.33.3 → 4.34.1

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.
@@ -40,6 +40,18 @@
40
40
  - zh-CN: 禁用
41
41
  en: Disable
42
42
 
43
+ - zh-CN: 复制失败!
44
+ en: Copy failed!
45
+
46
+ - zh-CN: 允许
47
+ en: allow
48
+
49
+ - zh-CN: 不允许
50
+ en: not allowed
51
+
52
+ - zh-CN: 是否允许来自$1($2)的公网会话?
53
+ en: Will you allow public network sessions from $1 ($2)?
54
+
43
55
  - zh-CN: 压缩算法不支持
44
56
  en: Compression algorithm not supported
45
57
 
package/apps/_index.html CHANGED
@@ -1,10 +1,7 @@
1
1
  <!DOCTYPE html>
2
2
  <!--
3
3
  http://efront.cc
4
- 乌鸦不是钟楼燕
5
- 筑巢不下尖尾檐
6
- 雨打风摇三冬寒
7
- 不去南方不需还
4
+ 没有有效限制措施的条文不是法律,而是愚弄民众的说辞。
8
5
  -->
9
6
  <html lang="zh-CN">
10
7
 
@@ -3,7 +3,7 @@ async function link(id, page) {
3
3
  id = await data.from("link");
4
4
  }
5
5
  if (!page.name) $scoped.get(page).title = `会话窗口(<span nodrag>${id}</span>)`;
6
- page.roomid = id;
6
+ page.clientid = id;
7
7
  var removed = false;
8
8
  on("remove")(page, function () {
9
9
  removed = true;
@@ -21,8 +21,8 @@ function main(params) {
21
21
  else id = params;
22
22
  var page = frame$chat(name);
23
23
  if (name) page.name = name;
24
- care(page, 'send', function (msg) {
25
- data.from("cast", { id: page.roomid, msg });
24
+ care(page, 'send', function ([sendto, msg]) {
25
+ data.from("cast", { id: sendto, msg });
26
26
  });
27
27
  link(id, page);
28
28
  return page;
@@ -19,7 +19,7 @@
19
19
  ${i18n`自动刷新`}
20
20
  </span>
21
21
  <swap -model="autoreload"></swap>
22
- <btn @click="chat()">${i18n`新建连接`}</btn>
22
+ <!-- <btn @click="chat()">${i18n`新建连接`}</btn> -->
23
23
  </div>
24
24
  <div class="clusters">
25
25
  <a -repeat="(c,i) in clusters" ng-class="{current:i===index.index}" @click="active(i,c)">
@@ -43,7 +43,7 @@ function joinsharp(sharped, ctx) {
43
43
  if (sharped[sharped.length - 1] === '.') sharped[sharped.length - 1] = "";
44
44
  for (var cx = 0, dx = sharped.length; cx < dx; cx++) {
45
45
  var s = sharped[cx];
46
- var plus = /^\//.test(s);
46
+ var plus = /^;/.test(s);
47
47
  if (plus) s = s.slice(1);
48
48
  call = will;
49
49
  will = willcall[cx + 1];
@@ -172,7 +172,7 @@ function main(express, autodef = true) {
172
172
  if (/^[\[\("'`]/.test(s)) e = e.replace(/\.$/, '');
173
173
  }
174
174
  else if (!cache.length) {
175
- return exp.push('/' + s);
175
+ return exp.push(';' + s);
176
176
  }
177
177
  e += s;
178
178
  exp[exp.length - 1] = e;
@@ -17,3 +17,4 @@ assert(renderExpress("[]?.()"), "(function(a,_){return a==_?_:a()}([]))")
17
17
  assert(renderExpress("[]?.[]"), "(function(a,_){return a==_?_:a[]}([]))")
18
18
  assert(renderExpress("a['a?.a']"), "a['a?.a']")
19
19
  assert(renderExpress("a?.['a?.a']?.b"), "(typeof a==='undefined'||a===null?void 0:function(a,_){if(a==_)return;a=a['a?.a'];if(a==_)return;a=a.b;return a}(a))")
20
+ assert(renderExpress("/\?(\w+)$/.exec(location.href)?.[1]"), "(function(a,_){return a==_?_:a[1]}(/?(w+)$/.exec(location.href)))")
@@ -1,24 +1,29 @@
1
1
  var Symbol = this.Symbol || function () {
2
+ var symbolid = 0;
2
3
  function Symbol(a) {
3
- if (this instanceof Symbol) {
4
- this.symbol = String(a);
4
+ this.id = ++symbolid;
5
+ this.name = String(a);
6
+ }
7
+ function Symbol1(a) {
8
+ if (this instanceof Symbol1) {
9
+ throw new Error('Symbol不是构造方法!');
5
10
  } else if (a instanceof Symbol) {
6
- return a;
11
+ throw new Error('无法将Symbol类型转换成字符串!');
7
12
  } else {
8
13
  return new Symbol(a);
9
14
  }
10
15
  }
11
16
  var prototype = new Symbol;
12
17
  prototype.toString = function () {
13
- return 'Symbol(' + this.symbol + ")";
18
+ return `Symbol(${this.name}/${this.id})`;
14
19
  };
15
20
  prototype.valueOf = function () {
16
21
  return this;
17
22
  };
18
23
 
19
24
  Symbol.prototype = prototype;
20
- Symbol.iterator = Symbol('iterator');
21
- Symbol.asyncIterator = Symbol('asyncIterator');
25
+ Symbol.iterator = Symbol1('iterator');
26
+ Symbol.asyncIterator = Symbol1('asyncIterator');
22
27
  var iterator = function () {
23
28
  var arr = this, cx = 0;
24
29
  return {
@@ -33,5 +38,5 @@ var Symbol = this.Symbol || function () {
33
38
  } catch {
34
39
  Array.prototype[Symbol.iterator] = iterator;
35
40
  }
36
- return Symbol;
41
+ return Symbol1;
37
42
  }();
@@ -56,11 +56,12 @@ var createRefId = function (o) {
56
56
  return ids.join('');
57
57
  }
58
58
  var ignore = Symbol("ignore");
59
+ var mapkey = null;
59
60
  var maplist = function (u) {
60
61
  var map = Object.create(null);
61
62
  for (var o of u) {
62
- if (o.maped) continue;
63
- o.maped = true;
63
+ if (o[mapkey]) continue;
64
+ o[mapkey] = true;
64
65
  var r = createRefId(o);
65
66
  if (!map[r]) {
66
67
  map[r] = [];
@@ -180,7 +181,21 @@ function inCondition(o) {
180
181
  return incondition;
181
182
 
182
183
  }
183
-
184
+ var noVarOutOfFor = function (os, qq, sb, su) {
185
+ if (qq === sb) return true;
186
+ if (enumtype & REFMOVE) return false;
187
+ var [o] = os;
188
+ var us = su[o.tack];
189
+ if (!us) return false;
190
+ var otext = o.text;
191
+ var c = 0;
192
+ for (var u of us) {
193
+ if (u.text === otext) {
194
+ c++;
195
+ }
196
+ }
197
+ return c === os.length;
198
+ };
184
199
  function enumref(refitem, scoped) {
185
200
  if (enumtype === REFMOVE) {
186
201
  var c = 0;
@@ -204,7 +219,7 @@ function enumref(refitem, scoped) {
204
219
  if (o.queue.kind) break;
205
220
  var q = o.queue;
206
221
  if (q !== scoped.body) {
207
- if (q.entry === '(' && q.queue === scoped.body) {
222
+ if (q.entry === '(' && noVarOutOfFor(os, q.queue, scoped.body, scoped.used)) {
208
223
  var qp = q.prev;
209
224
  if (qp?.type === EXPRESS) qp = qp.prev;
210
225
  if (qp && qp.type === STRAP && qp.text === "await") qp = qp.prev;
@@ -285,10 +300,16 @@ function enumref(refitem, scoped) {
285
300
  }
286
301
  function atuoenum(scoped) {
287
302
  var { used, caps } = scoped;
303
+ mapkey = Symbol('enumed');
288
304
  for (var k in caps) {
289
305
  var rs = maplist(used[k]);
290
306
  enumref(rs, scoped);
291
307
  }
308
+ for (var k in caps) {
309
+ for (var o of used[k]) {
310
+ delete o[mapkey];
311
+ }
312
+ }
292
313
  }
293
314
  var enumtype = 0;
294
315
  var exports = module.exports = function main(code, type = REFMOVE) {
@@ -1,7 +1,7 @@
1
1
  var scanner2 = require("./scanner2");
2
2
  var strings = require("../basic/strings");
3
3
  var Program = scanner2.Program;
4
- var { STAMP, SCOPED, STRAP, EXPRESS, pickAssignment, COMMENT, SPACE, PROPERTY, VALUE, LABEL, QUOTED, snapExpressFoot, isEval, canbeTemp, rename, isHalfSentence, skipFunction, getDeclared, skipAssignment, skipSentenceQueue, createScoped, createString, splice, relink, rolink, pickSentence, snapExpressHead, needBreakBetween } = require("./common");
4
+ var { STAMP, SCOPED, STRAP, EXPRESS, mergeTo, pickAssignment, COMMENT, SPACE, PROPERTY, VALUE, LABEL, QUOTED, snapExpressFoot, isEval, canbeTemp, rename, isHalfSentence, skipFunction, getDeclared, skipAssignment, skipSentenceQueue, createScoped, createString, splice, relink, rolink, pickSentence, snapExpressHead, needBreakBetween } = require("./common");
5
5
  var splice2 = function (q, from, to, ...a) {
6
6
  var cx = q.indexOf(from);
7
7
  if (cx < 0) throw console.log(splice2.caller, console.format(`\r\n<red2>${i18n`自`}</red2>`), from && createString([from]), console.format(`\r\n<yellow>${i18n`至`}</yellow>`), to && createString([to]), console.format(`\r\n<cyan>${i18n`码列`}</cyan>`), createString(pickSentence(from))), i18n`结构异常`;
@@ -1783,28 +1783,34 @@ var down = function (scoped) {
1783
1783
  };
1784
1784
  var precode = function (text) {
1785
1785
  if (!scoped.body) return;
1786
- var codelist = typeof text === 'string' ? scanner2(text) : text;
1787
- var first = codelist[0];
1788
- var last = codelist[codelist.length - 1];
1786
+ var newcode = typeof text === 'string' ? scanner2(text) : text;
1787
+ var first = newcode[0];
1788
+ var last = newcode[newcode.length - 1];
1789
1789
  var top = scoped.first;
1790
1790
  if (top) top.prev = last;
1791
1791
  if (last) last.next = top;
1792
1792
  if (first) delete first.prev;
1793
1793
  scoped.body.first = first || top;
1794
- scoped.body.unshift.apply(scoped.body, codelist);
1794
+ scoped.body.unshift.apply(scoped.body, newcode);
1795
+ mergeTo(scoped.used, newcode.used);
1795
1796
  };
1796
1797
 
1797
1798
  var markcodes = [];
1799
+ var { caps } = scoped;
1798
1800
  if (scoped.isfunc && scoped.caps.this && (funcMark || scoped.insett)) {
1799
1801
  let tn = _getname("this_");
1800
1802
  rename(scoped.caps, "this", tn);
1801
- scoped.caps.this.forEach(o => o.origin = 'this');
1803
+ caps.this.forEach(o => o.origin = 'this');
1804
+ caps[tn] = caps.this;
1805
+ delete caps.this;
1802
1806
  markcodes.push(`${tn}=this`);
1803
1807
  }
1804
1808
  if (scoped.isfunc && scoped.caps.arguments && (funcMark || scoped.inseta)) {
1805
1809
  let an = _getname("arguments_");
1806
- scoped.caps.arguments.forEach(o => o.origin = 'arguments');
1807
- rename(scoped.caps, "arguments", an);
1810
+ caps.arguments.forEach(o => (o.origin = 'arguments', o.type = EXPRESS));
1811
+ rename(caps, "arguments", an);
1812
+ caps[an] = caps.arguments;
1813
+ delete caps.arguments;
1808
1814
  markcodes.push(`${an}=arguments`);
1809
1815
  }
1810
1816
  var fordeep = 0;
@@ -145,7 +145,7 @@
145
145
  var timeNode = document.createTextNode("");
146
146
  var rejectTime = 0;
147
147
  care(this, function ([type, sender, data]) {
148
- if (sender !== remoteUser.id) return;
148
+ if (sender !== remoteUser.cid) return;
149
149
  switch (type) {
150
150
  case "rtc-close":
151
151
  if (acceptTime) return remove(this);
@@ -9,17 +9,17 @@
9
9
  <i></i>
10
10
  <i></i>
11
11
  </btn>
12
- <template -if="user">
13
- <span -bind="user.name"></span>
14
- &nbsp;<span class="id">(<span -bind="user.id"></span>)</span>
15
- <a left -if="user.id!==localid" @click="call()">呼叫</a>
12
+ <template -if="remoteUser">
13
+ <span -bind="remoteUser.name"></span>
14
+ &nbsp;<span class="id">(<span -bind="remoteUser.id"></span>)</span>
15
+ <a left -if="rid!==cid" disabled_="!!remoteUser.shaking" @click="call()">呼叫</a>
16
16
  </template>
17
17
  <template -elseif="title" -src="title"> </template>
18
18
  <close @click="remove()"></close>
19
19
  </div>
20
20
  <list -if="users.length>0" -src="u in users">
21
- <btn class="user" @click="user=u" type_="u===user?'default':'white'">
22
- <avatar -if="user.icon" -style="{'background-image':'url(\'icons/'+u.icon+'.ico\')'}"></avatar>
21
+ <btn class="user" @click="remoteUser=u" type_="u===remoteUser?'default':'white'" -class="{fade:u.shaking}">
22
+ <avatar -if="u.icon" -style="{'background-image':'url(\'icons/'+u.icon+'.ico\')'}"></avatar>
23
23
  <avatar -else>
24
24
  </avatar>
25
25
  <span -text="u.name"></span>&nbsp;
@@ -29,9 +29,17 @@
29
29
  <div>
30
30
  <span class="id" -text="u.id"></span>
31
31
  </div>
32
- <span class="local" -if="u.id===localid">本机</span>
32
+ <span class="local" -if="cid&&u.cid===cid">本机</span>
33
33
  </btn>
34
34
  </list>
35
+
36
+ <div .qrcode -if="rid===cid">
37
+ <canvas @append="qr(this)"></canvas>
38
+ <p>扫码以开启<a target="_blank" href_="linkurl" @click="event.preventDefault();cplink()">公网会话</a></p>
39
+ <p @click="autoAllow=!autoAllow">
40
+ <checker -model="autoAllow"></checker>自动允许会话请求
41
+ </p>
42
+ </div>
35
43
  <grid #body disabled>
36
44
  <chat -src="m in msglist">
37
45
  <padding>
@@ -40,15 +48,16 @@
40
48
  </padding>
41
49
  </chat>
42
50
  <div textarea @mousedown="this.firstChild.focus()">
43
- <div @keydown.alt.enter="send('html',text)" contenteditable="true" -model="text"></div>
51
+ <div @keydown.alt.enter="send('html',text)" contenteditable@="rid!==cid" -model="text"></div>
44
52
  </div>
45
53
  </grid>
46
- <div foot>
47
- <a class="file" @click="chooseFile()" -if="user">
54
+
55
+ <div foot -style="{opacity:rid===cid?0.2:1}">
56
+ <a disabled_="rid===cid||!!remoteUser?.shaking" class="file" @click="chooseFile()" -if="remoteUser">
48
57
  <template -src="fileIcon"></template>
49
58
  <span>
50
59
  ${i18n`文件`}
51
60
  </span>
52
61
  </a>
53
- <a @click="send('html',text);">${i18n`发送`}</a>
62
+ <a disabled_="rid===cid||!!remoteUser?.shaking" @click="send('html',text);">${i18n`发送`}</a>
54
63
  </div>