efront 4.29.1 → 4.30.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.
@@ -40,6 +40,15 @@
40
40
  - zh-CN: 禁用
41
41
  en: Disable
42
42
 
43
+ - zh-CN: 压缩算法不支持
44
+ en: Compression algorithm not supported
45
+
46
+ - zh-CN: 数据解码异常!
47
+ en: Data decoding exception!
48
+
49
+ - zh-CN: 压缩到zip文件
50
+ en: Compress to zip file
51
+
43
52
  - zh-CN: 无法下载!
44
53
  en: Cannot download!
45
54
 
@@ -7,7 +7,8 @@ i18n.setReloader(function () {
7
7
  zimoli.reload(false);
8
8
  });
9
9
  data.loadConfig("api.yml");
10
- user.loginPath = 'frame$login';
10
+ user.loginPath = 'pivot$login';
11
+ pivot$login;
11
12
  cross.addReform(relogin(user.loginPath))
12
13
  data.setReporter(function (m, t) {
13
14
  alert(m, t);
@@ -220,6 +220,10 @@ var fixType = function (o) {
220
220
  type = EXPRESS;
221
221
  break;
222
222
  }
223
+ if (last.type === EXPRESS && last === queue[queue.length - 1]) {
224
+ type = STRAP;
225
+ break;
226
+ }
223
227
  var qp = queue.prev;
224
228
  if (qp?.type === STRAP && qp.text === 'await') qp = qp.prev;
225
229
  if (qp?.type === STRAP && qp.text === 'for') type = STRAP;
@@ -59,9 +59,9 @@ var ts = new Javascript;
59
59
  ts.straps.push('interface', 'implements', "declare", "module", "readonly", "enum", 'type');
60
60
  ts.tags[0].push("{")
61
61
  ts.lbtype = false;
62
- var testTypescript = function (text) {
62
+ var testTypescript = function (text, exp = text) {
63
63
  var s = scanner2(text, ts);
64
- return assert(s.toString(), text);
64
+ return assert(s.toString(), exp);
65
65
  }
66
66
  testTypescript(`const strict: Omit<typeof assert, 'equal' | 'notEqual' | 'deepEqual' | 'notDeepEqual' | 'ok' | 'strictEqual' | 'deepStrictEqual' | 'ifError' | 'strict'> & {
67
67
  (value: unknown, message?: string | Error): asserts value;
@@ -124,6 +124,7 @@ a ? function () {} : function () {}
124
124
  declare module 'buffer' {}
125
125
  a <= 1;
126
126
  `)
127
+ testTypescript(`;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r)`, "; (t = ~~t) < 0 ? (t += r) < 0 && (t = 0) : t > r && (t = r)")
127
128
  testTypescript(`
128
129
  var a: TypeA
129
130
  var a: TypeA, b: TypeB
@@ -852,7 +852,7 @@ class Program {
852
852
  }
853
853
  }
854
854
  else if (stamp_reg.test(m) && last) {
855
- if (last.type === STAMP && m === last.text) break test;
855
+ if (last.type === STAMP && last === cache_stamp && powermap.hasOwnProperty(last.text + m)) break test;
856
856
  if (last.istype || last.isprop || last.isargl) {
857
857
  isTypeTag = true;
858
858
  }
@@ -891,6 +891,10 @@ class Program {
891
891
  case EXPRESS:
892
892
  break test;
893
893
  case SCOPED:
894
+ if (last.isExpress && powermap[m] <= powermap["++"]) {
895
+ break test;
896
+ }
897
+ console.log(last.isExpress, queue.inExpress, last.entry, last.prev?.text, m);
894
898
  if (queue.inExpress && !iscomment) break test;
895
899
  break;
896
900
  case STAMP:
@@ -952,6 +956,7 @@ class Program {
952
956
  continue;
953
957
  }
954
958
  if (space_reg.test(m)) {
959
+ if (cache_stamp) push_stamp();
955
960
  if (/[\r\n\u2028\u2029]/.test(m)) {
956
961
  if (last && last.isend === false) {
957
962
  last.isend = true;
@@ -1109,6 +1114,15 @@ class Program {
1109
1114
  }
1110
1115
  }
1111
1116
  if (!last || last.type !== STRAP && last.isExpress || last.transive) queue.inExpress = true;
1117
+ else if (last.type === STAMP) {
1118
+ if (last.text === "*") {
1119
+ var lp = last.prev;
1120
+ if (lp.type !== STRAP || !/^(async|function)$/.test(lp.text)) queue.inExpress = true;
1121
+ }
1122
+ else {
1123
+ queue.inExpress = true;
1124
+ }
1125
+ }
1112
1126
  scope.isExpress = queue.inExpress;
1113
1127
  scope.inExpress = true;
1114
1128
  }
@@ -1159,7 +1173,7 @@ class Program {
1159
1173
  var last = queue.last || queue;
1160
1174
  console.warn(
1161
1175
  "代码异常结束", createString(origin.slice(0, 30)),
1162
- `\r\n - 祖先标记: ${parents.slice(1).map(p => `<red2>${p.tag || p.text || ""}${p.entry || ""}</red2><gray>${p.row}:${p.col}</gray>`).join('')}`,
1176
+ `\r\n - 祖先标记: ${parents.slice(1).map(p => `${p.entry || ""}<red2>${p.tag || p.text || ""}</red2><gray>${p.row}:${p.col}</gray>`).join('')}`,
1163
1177
  `\r\n - 内层入口: <yellow>${this.mindpath}</yellow>:${last.row}:${last.col} ${last.text || last.entry}`,
1164
1178
  `\r\n ----- 快照: ${createString(pickAssignment(queue.last || queue))}`,
1165
1179
  );
@@ -886,32 +886,20 @@ var createScoped = function (parsed, wash) {
886
886
  else if (isArraw) {
887
887
  var n = skipAssignment(o);
888
888
  scoped.arraw = o;
889
- var u = o;
890
889
  while (o !== n) {
891
890
  var n1 = run(o, 0);
892
- if (o === n1 || n1 && n1.entry === '{') o = getnext(n1);
891
+ if (n1 === o || n1?.entry === "{") o = getnext(n1);
893
892
  else o = n1;
894
893
  }
895
894
  }
896
895
  else {
897
- do {
898
- if (o.type === STAMP && o.text === ";") break;
899
- o = run(o, 0);
900
- if (!o) break;
901
- var n = getnext(o);
902
- if (!n) break;
903
- var e = o;
904
- var p = getprev(o);
905
- if (o.type === STAMP && /^(\+\+|\-\-)$/.test(o.text) && p?.type === EXPRESS
906
- || (VALUE | QUOTED | SCOPED) & o.type
907
- || EXPRESS === o.type && !needfoot_reg.test(o.text)) {
908
- if ((VALUE | QUOTED | PROPERTY | LABEL) & n.type) break;
909
- if (EXPRESS === n.type && !/^[\.\[]/.test(n.text)) break;
910
- if (n.type === SCOPED && n.brace) break;
911
- if (n.type === STRAP && !n.isExpress) break;
912
- }
913
- o = n;
914
- } while (o);
896
+ var n = skipAssignment(o);
897
+ var n1 = o;
898
+ while (n1 && n1 !== n) {
899
+ o = n1;
900
+ n1 = run(n1, 0);
901
+ if (n1) n1 = getnext(n1);
902
+ }
915
903
  }
916
904
  var map = isFunction ? vars : lets;
917
905
  var keepscope = !!scoped.body || !!scoped.head;
@@ -43,3 +43,4 @@ testPickSentence(`if(a)try{}catch{} else if(a);`, 0, "if (a) try {} catch {} els
43
43
  assert(common.createString(common.pickArgument(scanner2(`a={a:1,c:d}`)[2][4])), 'c: d')
44
44
  assert(common.createString(common.pickArgument(scanner2(`a=class{a=1\r\nc=d}`)[3][4])), 'c = d')
45
45
  assert(common.createString(common.pickArgument(scanner2(`(a=1,c=d)`)[0][4])), 'c = d')
46
+ assert(scanner2(`for (let len of codeLengths) if (len) count[len]++;`).envs, { len: undefined })
@@ -42,6 +42,7 @@ var helps = [
42
42
  ["-", i18n`从可执行文件的扫描路径中移除指定的路径`, "pathxrm PATHNAME"],
43
43
  ["-", i18n`设置远程访问的密码`, "password"],
44
44
  ["-", i18n`创建windows平台的一键安装包`, "packwin|packexe PUBLIC_PATH PACKAGE_PATH"],
45
+ ["-", i18n`压缩到zip文件`, "packzip|zip PUBLIC_PATH PACKAGE_PATH"],
45
46
  ["-", i18n`从压缩文件提取源文件`, "unpack PACKAGE_PATH PUBLIC_PATH"]
46
47
  ];
47
48
  helps.forEach((h, cx) => {
package/coms/kugou/krc.js CHANGED
@@ -129,7 +129,7 @@ function createLRC(lrc) {
129
129
  krcList.rows = saved_rows;
130
130
  return krcList;
131
131
  }
132
-
132
+ var metadata = hookmedia() || document;
133
133
  function setClass(krcList, index) {
134
134
  var ele = krcList[index];
135
135
  krcList.slice(0, index).map(function (a, cx, arr) {
@@ -139,7 +139,8 @@ function setClass(krcList, index) {
139
139
  removeClass(ele, "after before after-active before-active");
140
140
  addClass(krcList[index - 1], 'before-active');
141
141
  addClass(ele, "active");
142
- if (ele.innerText) document.title = ele.innerText;
142
+ if (ele.innerText) metadata.title = ele.innerText;
143
+ else metadata.title = '';
143
144
  krcList.slice(index + 1).map(function (a) {
144
145
  removeClass(a, "before active after-active before-active");
145
146
  addClass(a, "after");
@@ -16,6 +16,8 @@ var isSameSong = function (m1, m2) {
16
16
  m1.url && String(m1.url).replace(/#[\s\S]*$/, '') === String(m2.url).replace(/#[\s\S]*$/, '');
17
17
  };
18
18
 
19
+ var metadata = hookmedia();
20
+
19
21
  function addMethod(name, func) {
20
22
  Object.defineProperty(musicList, name, {
21
23
  value: func,
@@ -29,6 +31,13 @@ addMethod("setActive", function (m) {
29
31
  }
30
32
  actived = m;
31
33
  }
34
+ if (actived && metadata) {
35
+ metadata.title = actived.songName || actived.name || actived.title;
36
+ metadata.artist = actived.singerName || actived.singer;
37
+ if (actived.avatar) metadata.artwork = [{
38
+ src: actived.avatar
39
+ }]
40
+ }
32
41
  });
33
42
  addMethod("remove", function (music) {
34
43
  for (var cx = this.length - 1; cx >= 0; cx--) {
@@ -0,0 +1,29 @@
1
+ var hooked = false;
2
+ var keydown = code => function () {
3
+ var event = document.createEvent("KeyboardEvent");
4
+ Object.defineProperty(event, 'keyCode', { value: code });
5
+ event.initEvent("keydown", false, false);
6
+ dispatch(window, event);
7
+ };
8
+ try {
9
+ var { mediaSession } = navigator;
10
+ } catch { }
11
+ if (!mediaSession) return function () { };
12
+ var metadata = window.MediaMetadata ? new window.MediaMetadata : null;
13
+ return function () {
14
+ if (hooked) return metadata;
15
+ hooked = true;
16
+ var Next = 176;
17
+ var Prev = 177;
18
+ var pause = 179;
19
+ var play = 179;
20
+ var volumeup = 175;
21
+ var volumedown = 174;
22
+ var mute = 173;
23
+ mediaSession.setActionHandler('play', keydown(play));
24
+ mediaSession.setActionHandler('pause', keydown(pause));
25
+ mediaSession.setActionHandler("nexttrack", keydown(Next));
26
+ mediaSession.setActionHandler("previoustrack", keydown(Prev));
27
+ if (metadata) mediaSession.metadata = metadata;
28
+ return metadata;
29
+ };
@@ -148,12 +148,17 @@ function ybox(generator) {
148
148
  var wheelTime = 0;
149
149
  onmousewheel(_box, function (event) {
150
150
  event.preventDefault();
151
- if (event.timeStamp - wheelTime > 40 && Math.abs(event.deltaY) < 12) {
152
- wheelTime = event.timeStamp;
151
+ var isNew = event.timeStamp - wheelTime > 120;
152
+ wheelTime = event.timeStamp;
153
+ var absY = Math.abs(event.deltaY);
154
+ if (isNew && absY < 12) {
153
155
  return;
154
156
  }
155
157
  if (event.moveLocked) return;
156
158
  var deltay = -event.deltaY;
159
+ if (isNew && absY > 80 && (absY | 0) === absY) {
160
+ deltay /= 3;
161
+ }
157
162
  if (!deltay && _box.bindX) deltay = -event.deltaX;
158
163
  event.moveLocked = true;
159
164
  var box;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.29.1",
3
+ "version": "4.30.0",
4
4
  "description": "一个开发环境,提供一种自由的前端开发模式,也可作为辅助工具使用。",
5
5
  "main": "public/efront.js",
6
6
  "directories": {