efront 4.29.0 → 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.
- package/#/345/233/275/351/231/205/345/214/226.yml +9 -0
- package/apps/pivot/main.js +2 -1
- package/coms/compile/Javascript.js +4 -0
- package/coms/compile/Javascript_test.js +3 -2
- package/coms/compile/Program.js +16 -2
- package/coms/compile/common.js +8 -20
- package/coms/compile/common_test.js +1 -0
- package/coms/docs/helps.js +1 -0
- package/coms/kugou/krc.js +3 -2
- package/coms/kugou/musicList.js +9 -0
- package/coms/{frame → pivot}/login.xht +1 -1
- package/coms/zimoli/contextmenu.js +8 -0
- package/coms/zimoli/hookmedia.js +29 -0
- package/coms/zimoli/on.js +16 -6
- package/coms/zimoli/vbox.js +7 -2
- package/coms/zimoli/zimoli.js +3 -3
- package/package.json +2 -2
- package/public/efront.js +1 -1
- package/public//346/226/207/344/273/266/347/263/273/347/273/237//344/270/273/351/241/265.jsp +45 -0
- package/apps//346/226/207/344/273/266/347/263/273/347/273/237/main.js +0 -55
- package/apps//346/226/207/344/273/266/347/263/273/347/273/237//344/270/273/351/241/265.jsp +0 -42
- package/apps//346/226/207/344/273/266/347/263/273/347/273/237//350/265/204/346/272/220/347/256/241/347/220/206/345/231/250.js +0 -1
- package/coms/basic/concatByte.js +0 -15
- package/coms/basic/decodePack.js +0 -203
- package/coms/basic/decodeRange.js +0 -68
- package/coms/basic/encodePack.h +0 -9
- package/coms/basic/encodePack.js +0 -301
- package/coms/basic/encodeRange.h +0 -17
- package/coms/basic/encodeRange.js +0 -107
- package/coms/basic/encodeRange_test.js +0 -40
- package/coms/basic/readBinary.asm +0 -77
- package/coms/basic/readBinary.js +0 -31
- package/coms/basic/writeBinary.js +0 -37
|
@@ -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
|
|
package/apps/pivot/main.js
CHANGED
|
@@ -7,7 +7,8 @@ i18n.setReloader(function () {
|
|
|
7
7
|
zimoli.reload(false);
|
|
8
8
|
});
|
|
9
9
|
data.loadConfig("api.yml");
|
|
10
|
-
user.loginPath = '
|
|
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(),
|
|
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
|
package/coms/compile/Program.js
CHANGED
|
@@ -852,7 +852,7 @@ class Program {
|
|
|
852
852
|
}
|
|
853
853
|
}
|
|
854
854
|
else if (stamp_reg.test(m) && last) {
|
|
855
|
-
if (last.type === STAMP &&
|
|
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 =>
|
|
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
|
);
|
package/coms/compile/common.js
CHANGED
|
@@ -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 (
|
|
891
|
+
if (n1 === o || n1?.entry === "{") o = getnext(n1);
|
|
893
892
|
else o = n1;
|
|
894
893
|
}
|
|
895
894
|
}
|
|
896
895
|
else {
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
if (
|
|
903
|
-
|
|
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 })
|
package/coms/docs/helps.js
CHANGED
|
@@ -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)
|
|
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");
|
package/coms/kugou/musicList.js
CHANGED
|
@@ -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--) {
|
|
@@ -47,6 +47,7 @@ function contextmenu(target, menuItems) {
|
|
|
47
47
|
start(event) {
|
|
48
48
|
if (event.defaultPrevented || event.type === 'mousedown') return;
|
|
49
49
|
clearTimeout(menuHandle);
|
|
50
|
+
if (tm) remove(tm);
|
|
50
51
|
menuHandle = setTimeout(function () {
|
|
51
52
|
var e = createEvent("contextmenu", true);
|
|
52
53
|
e.clientX = event.clientX;
|
|
@@ -77,8 +78,15 @@ function contextmenu(target, menuItems) {
|
|
|
77
78
|
if (document.activeElement === this) return;
|
|
78
79
|
_remove(this);
|
|
79
80
|
}, 60);
|
|
81
|
+
var lastMenuTime = 0;
|
|
80
82
|
on("contextmenu")(target, function (event) {
|
|
81
83
|
if (event.defaultPrevented) return;
|
|
84
|
+
var now = +new Date;
|
|
85
|
+
if (lastMenuTime + 300 > now) {
|
|
86
|
+
event.preventDefault();
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
lastMenuTime = now;
|
|
82
90
|
event.preventDefault();
|
|
83
91
|
if (tm) remove(tm), tm = null;
|
|
84
92
|
tm = showContext(event);
|
|
@@ -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
|
+
};
|
package/coms/zimoli/on.js
CHANGED
|
@@ -491,24 +491,34 @@ var invoke = function (event, type, pointerType) {
|
|
|
491
491
|
var onclick = on("click");
|
|
492
492
|
var onmousedown = on("mousedown");
|
|
493
493
|
var onmousemove = on("mousemove");
|
|
494
|
-
var
|
|
494
|
+
var mouseX, mouseY, touchX, touchY, lasttime_click;
|
|
495
495
|
var needFireClick = false;
|
|
496
496
|
var isClickWithPointer = false;
|
|
497
497
|
var touchendFired = false;
|
|
498
|
-
function clickstart(
|
|
498
|
+
function clickstart() {
|
|
499
499
|
needFireClick = true;
|
|
500
500
|
touchendFired = false;
|
|
501
501
|
isClickWithPointer = true;
|
|
502
502
|
onclick.preventClick = false;
|
|
503
|
-
pointerX = event.clientX, pointerY = event.clientY;
|
|
504
503
|
}
|
|
505
504
|
var dis = (a, b) => a * a + b * b
|
|
506
505
|
function clickcancel(event) {
|
|
507
|
-
if (!event
|
|
506
|
+
if (!event
|
|
507
|
+
|| event.touches && dis(event.clientX - touchX, event.clientY - touchY) >= MOVELOCK_DELTA * MOVELOCK_DELTA
|
|
508
|
+
|| event.which && dis(event.clientX - mouseX, event.clientY - mouseY) >= MOVELOCK_DELTA * MOVELOCK_DELTA
|
|
509
|
+
) {
|
|
508
510
|
onclick.preventClick = true;
|
|
509
511
|
}
|
|
510
512
|
}
|
|
511
|
-
|
|
513
|
+
function mousestart(event) {
|
|
514
|
+
clickstart();
|
|
515
|
+
mouseX = event.clientX, mouseY = event.clientY;
|
|
516
|
+
}
|
|
517
|
+
function touchstart(event) {
|
|
518
|
+
clickstart();
|
|
519
|
+
touchX = event.clientX, touchY = event.clientY;
|
|
520
|
+
}
|
|
521
|
+
onmousedown(window, mousestart, true);
|
|
512
522
|
|
|
513
523
|
onmousemove(window, clickcancel, true);
|
|
514
524
|
if (window.addEventListener) {
|
|
@@ -522,7 +532,7 @@ var invoke = function (event, type, pointerType) {
|
|
|
522
532
|
return;
|
|
523
533
|
}
|
|
524
534
|
extendTouchEvent(event);
|
|
525
|
-
|
|
535
|
+
touchstart.call(this, event);
|
|
526
536
|
}, true);
|
|
527
537
|
window.addEventListener("touchend", function (event) {
|
|
528
538
|
if (event.touches.length > 1) return;
|
package/coms/zimoli/vbox.js
CHANGED
|
@@ -148,12 +148,17 @@ function ybox(generator) {
|
|
|
148
148
|
var wheelTime = 0;
|
|
149
149
|
onmousewheel(_box, function (event) {
|
|
150
150
|
event.preventDefault();
|
|
151
|
-
|
|
152
|
-
|
|
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/coms/zimoli/zimoli.js
CHANGED
|
@@ -382,11 +382,11 @@ function create(pagepath, args, from, needroles, zimolidata) {
|
|
|
382
382
|
_pageback_listener = handler;
|
|
383
383
|
};
|
|
384
384
|
var _page = pg.call(state, args, from);
|
|
385
|
-
_page.realpath = state.realpath;
|
|
386
|
-
_page.basepath = state.basepath;
|
|
387
|
-
_page.pagepath = pagepath;
|
|
388
385
|
if (undefined === args || null === args) args = {};
|
|
389
386
|
if (_page) {
|
|
387
|
+
_page.realpath = state.realpath;
|
|
388
|
+
_page.basepath = state.basepath;
|
|
389
|
+
_page.pagepath = pagepath;
|
|
390
390
|
var page_with = _with_elements.splice(_with_length, _with_elements.length - _with_length);
|
|
391
391
|
if (_page.with && _page.with !== _with_elements) {
|
|
392
392
|
page_with = page_with.concat(_page.with);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "efront",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.30.0",
|
|
4
4
|
"description": "一个开发环境,提供一种自由的前端开发模式,也可作为辅助工具使用。",
|
|
5
5
|
"main": "public/efront.js",
|
|
6
6
|
"directories": {
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"efront": "public/efront.js"
|
|
11
11
|
},
|
|
12
12
|
"scripts": {
|
|
13
|
-
"prepack": "node tools/build-efront.js --node --no-target"
|
|
13
|
+
"prepack": "node tools/build-efront.js --node --no-target&node public/efront build 文件系统.html"
|
|
14
14
|
},
|
|
15
15
|
"repository": {
|
|
16
16
|
"type": "git",
|