efront 4.9.1 → 4.9.3
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 +6 -0
- package/coms/basic/filterTime.js +19 -11
- package/coms/basic/filterTime_test.js +11 -0
- package/coms/docs/codecolor.js +6 -6
- package/coms/docs/codetext.xht +1 -0
- package/coms/zimoli/SpeechRecognition_test.js +1 -1
- package/coms/zimoli/container.js +30 -30
- package/coms/zimoli/createElement.js +3 -0
- package/coms/zimoli/slider.js +2 -1
- package/coms/zimoli/slider_test.js +1 -1
- package/coms/zimoli/slider_test.less +4 -2
- package/docs//347/273/204/344/273/266.xht +49 -5
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/coms/zimoli/robot.js +0 -7
- package/coms/zimoli/robot_test.js +0 -4
- /package/coms/zimoli/{SpeechReconigition_test.html → SpeechRecognition_test.html} +0 -0
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
- zh-CN: 这个文件的内容不能在非nodejs环境中运行
|
|
2
|
+
en: The content of this file cannot be run in a non nodejs environment
|
|
3
|
+
|
|
4
|
+
- zh-CN: 这个文件的内容不能在线运行
|
|
5
|
+
en: The content of this file cannot be run online
|
|
6
|
+
|
|
1
7
|
- zh-CN: 这个文件内的测试代码暂不支持在线查看
|
|
2
8
|
en: The test code in this file does not currently support online viewing
|
|
3
9
|
|
package/coms/basic/filterTime.js
CHANGED
|
@@ -87,7 +87,8 @@ function filterTime(time, formater) {
|
|
|
87
87
|
var [year1, month1, date1, hour1, minute1, second1, milli1, day1] = getSplitedDate(now);
|
|
88
88
|
var today = new Date(year1, month1 - 1, date1);
|
|
89
89
|
var thatday = new Date(year, month - 1, date);
|
|
90
|
-
var delta = (today - thatday) / 24 / 3600000;
|
|
90
|
+
var delta = (today - thatday) / 24 / 3600000 | 0;
|
|
91
|
+
var deltaSeconds = (new Date(year1, month1 - 1, date1, hour1, minute1, second1) - new Date(year, month - 1, date, hour, minute, second)) / 1000;
|
|
91
92
|
if (minute === 0 && second === 0) var time = hour + "点整";
|
|
92
93
|
else if (minute === 30 && second === 0) time = hour + "点半";
|
|
93
94
|
else time = `${hour}:${fixLength(minute)}`;
|
|
@@ -103,18 +104,25 @@ function filterTime(time, formater) {
|
|
|
103
104
|
}
|
|
104
105
|
return `星期` + days[day] + time;
|
|
105
106
|
}
|
|
107
|
+
if (deltaSeconds >= 0 && deltaSeconds < 60) {
|
|
108
|
+
return `刚刚`;
|
|
109
|
+
}
|
|
110
|
+
if (deltaSeconds < 0) {
|
|
111
|
+
if (deltaSeconds > -60) {
|
|
112
|
+
return `${-deltaSeconds | 0}秒后`;
|
|
113
|
+
}
|
|
114
|
+
if (deltaSeconds >= -3600) {
|
|
115
|
+
return `还有${-deltaSeconds / 60 | 0}分钟`;
|
|
116
|
+
}
|
|
117
|
+
if (deltaSeconds > -86400) {
|
|
118
|
+
var a = -deltaSeconds / 3600 | 0;
|
|
119
|
+
var b = (-deltaSeconds + (deltaSeconds / 3600 | 0) * 3600) / 60 | 0;
|
|
120
|
+
if (b === 0) return `还有${a}小时`;
|
|
121
|
+
return `还有${a}小时${b}分钟`;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
106
124
|
switch (delta) {
|
|
107
125
|
case 0:
|
|
108
|
-
if (minute === minute1 && hour === hour1) {
|
|
109
|
-
if (second <= second1) return `刚刚`;
|
|
110
|
-
return `${second - second1}秒后`;
|
|
111
|
-
}
|
|
112
|
-
else if (value > now) {
|
|
113
|
-
if (hour === hour1) {
|
|
114
|
-
return `${minute - minute1}分钟后`;
|
|
115
|
-
}
|
|
116
|
-
return `还有${hour - hour1}小时${minute - minute1}分钟`;
|
|
117
|
-
}
|
|
118
126
|
return time;
|
|
119
127
|
case -1:
|
|
120
128
|
return "明天" + time;
|
|
@@ -2,6 +2,17 @@ assert(filterTime(''), ``);
|
|
|
2
2
|
assert(filterTime(null), '');
|
|
3
3
|
assert(filterTime(undefined), '');
|
|
4
4
|
assert(filterTime("我出生的第二年"), `我出生的第二年`);
|
|
5
|
+
assert(filterTime(+new Date + 86300000), '还有23小时58分钟');
|
|
6
|
+
assert(filterTime(+new Date + 110000), '还有1分钟');
|
|
7
|
+
assert(filterTime(+new Date + 120000), '还有2分钟');
|
|
8
|
+
assert(filterTime(+new Date + 60000), '还有1分钟');
|
|
9
|
+
assert(filterTime(+new Date + 59000), '59秒后');
|
|
10
|
+
assert(filterTime(+new Date + 58000), '58秒后');
|
|
11
|
+
assert(filterTime(+new Date + 8000), '8秒后');
|
|
12
|
+
assert(filterTime(+new Date + 1000), '1秒后');
|
|
13
|
+
assert(filterTime(+new Date), '刚刚');
|
|
14
|
+
assert(filterTime(+new Date), '刚刚');
|
|
15
|
+
assert(filterTime(+new Date - 59000), '刚刚');
|
|
5
16
|
assert(filterTime(new Date(2024, 3, 3), `y年M月d日 h:mm`), '2024年4月3日 0:00');
|
|
6
17
|
assert(filterTime(new Date(2024, 3, 3), `y年M月d日 h:mm`), '2024年4月3日 0:00');
|
|
7
18
|
assert(filterTime(new Date(2024, 3, 3, 19, 26, 2, 100), `y年M月d日 h:mm:ss.SSS`), '2024年4月3日 19:26:02.100');
|
package/coms/docs/codecolor.js
CHANGED
|
@@ -11,18 +11,18 @@ var codecolor = function (c, encode) {
|
|
|
11
11
|
var deep = 0;
|
|
12
12
|
var used = c.used;
|
|
13
13
|
var setExpress = function (o, label) {
|
|
14
|
-
|
|
14
|
+
if (!o.text) return;
|
|
15
15
|
var keys = o.text.split(".");
|
|
16
16
|
var next = o.next;
|
|
17
17
|
if (next && next.type === SCOPED && next.entry === '(') {
|
|
18
|
-
keys[keys.length - 1] = `<invoke>${keys[keys.length - 1]}</invoke>`;
|
|
18
|
+
if (!/^\</.test(keys[keys.length - 1])) keys[keys.length - 1] = `<invoke>${keys[keys.length - 1]}</invoke>`;
|
|
19
19
|
}
|
|
20
|
-
var [name0] = text.split(".");
|
|
21
20
|
var [name] = keys;
|
|
22
|
-
if (
|
|
23
|
-
else if (/^(
|
|
21
|
+
if (/^\</.test(name));
|
|
22
|
+
else if (c.program?.strap_reg.test(name) || c.program?.value_reg.test(name) || /^(this|arguments)$/.test(name)) name = `<strap>${name}</strap>`;
|
|
23
|
+
else name = `<${label}>${name}</${label}>`;
|
|
24
24
|
keys[0] = name;
|
|
25
|
-
o.text = keys.map(k => /^\</.test(k) || !k ? k :
|
|
25
|
+
o.text = keys.map(k => /^\</.test(k) || !k ? k : `<express>${k}</express>`).join(".");
|
|
26
26
|
}
|
|
27
27
|
var setPredef = o => setExpress(o, 'predef');
|
|
28
28
|
var setOutside = o => setExpress(o, 'outside');
|
package/coms/docs/codetext.xht
CHANGED
package/coms/zimoli/container.js
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
if (
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
function container(element) {
|
|
2
|
+
var change = lazy(async function (src) {
|
|
3
|
+
if (src !== this.$src) return;
|
|
4
|
+
if (!src) remove(this.with);
|
|
5
|
+
else if (isNode(src)) {
|
|
6
|
+
if (isElement(src) && this.$struct.copys) {
|
|
7
|
+
for (var c of this.$struct.copys) {
|
|
8
|
+
if (c.name === 'class') {
|
|
9
|
+
addClass(src, c.value);
|
|
10
|
+
}
|
|
11
|
+
else if (c.name === 'style') {
|
|
12
|
+
css(src, c.value);
|
|
13
|
+
}
|
|
14
|
+
else src.setAttribute(c.name, c.value);
|
|
12
15
|
}
|
|
13
|
-
else src.setAttribute(c.name, c.value);
|
|
14
16
|
}
|
|
17
|
+
zimoli.global(src, this);
|
|
15
18
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
zimoli.go(this.$src, params, this);
|
|
32
|
-
});
|
|
33
|
-
function container(element) {
|
|
19
|
+
else if (isString(src) || +src < 0) {
|
|
20
|
+
watch(this, 'params', onparams);
|
|
21
|
+
onparams.call(this, this.params);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
var gosrc = function (src) {
|
|
25
|
+
if (!isHandled(this.$src) && !isHandled(src)) return;
|
|
26
|
+
if (src !== this.$src) {
|
|
27
|
+
this.$src = src;
|
|
28
|
+
change.call(this, src);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
var onparams = lazy(function (params) {
|
|
32
|
+
zimoli.go(this.$src, params, this);
|
|
33
|
+
});
|
|
34
34
|
var comment = document.createComment('container');
|
|
35
35
|
comment.$struct = element.$struct;
|
|
36
36
|
care(comment, gosrc);
|
|
@@ -27,7 +27,10 @@ var prototype = {
|
|
|
27
27
|
return child;
|
|
28
28
|
},
|
|
29
29
|
appendChild(child) {
|
|
30
|
+
var _appendChild = this.appendChild
|
|
31
|
+
delete this.appendChild;
|
|
30
32
|
appendChild(this, child, false);
|
|
33
|
+
if (_appendChild) this.appendChild = _appendChild;
|
|
31
34
|
return child;
|
|
32
35
|
},
|
|
33
36
|
appendTo(target) {
|
package/coms/zimoli/slider.js
CHANGED
|
@@ -12,7 +12,7 @@ var abs = Math.abs;
|
|
|
12
12
|
*/
|
|
13
13
|
function slider() {
|
|
14
14
|
var [autoplay, circle = true] = arguments;
|
|
15
|
-
var outter =
|
|
15
|
+
var outter = null;
|
|
16
16
|
{
|
|
17
17
|
for (let cx = 0, dx = arguments.length; cx < dx; cx++) {
|
|
18
18
|
let arg = arguments[cx];
|
|
@@ -25,6 +25,7 @@ function slider() {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
+
if (!outter) outter = container.cloneNode();
|
|
28
29
|
var _imageMain = _slider.cloneNode();
|
|
29
30
|
var _imageHelp = _slider.cloneNode();
|
|
30
31
|
outter.src = function (index) {
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
& {
|
|
2
|
-
height: 100px;
|
|
3
2
|
width: 100%;
|
|
4
3
|
background: #000;
|
|
5
4
|
color: #fff;
|
|
6
5
|
text-align: center;
|
|
7
6
|
line-height: 100px;
|
|
8
7
|
font-size: 60px;
|
|
9
|
-
position:
|
|
8
|
+
position: relative;
|
|
10
9
|
>div{
|
|
11
10
|
position: relative;
|
|
12
11
|
display: inline-block;
|
|
@@ -14,6 +13,9 @@
|
|
|
14
13
|
height: 80px;
|
|
15
14
|
}
|
|
16
15
|
}
|
|
16
|
+
btn{
|
|
17
|
+
font-size: 14px;
|
|
18
|
+
}
|
|
17
19
|
|
|
18
20
|
.slider {
|
|
19
21
|
width: 100%;
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
z-index: 1;
|
|
100
100
|
}
|
|
101
101
|
</style>
|
|
102
|
-
<form
|
|
102
|
+
<form onsubmit="event.preventDefault()">
|
|
103
103
|
<xmenu -src="(t,i) in tags" @active="saveTagIndex(i)"></xmenu>
|
|
104
104
|
<h2 head>
|
|
105
105
|
<span -bind="name"></span>
|
|
@@ -125,8 +125,8 @@
|
|
|
125
125
|
</span>
|
|
126
126
|
</p4>
|
|
127
127
|
</div>
|
|
128
|
-
<div body onkeyup="!event.isComposing&&updatecode()" onkeydown.tab="keytab(event)"
|
|
129
|
-
-elseif="tags[1].actived">
|
|
128
|
+
<div body onkeyup="!event.isComposing&&updatecode(event)" onkeydown.tab="keytab(event)" onkeyup.enter="ontab(false)"
|
|
129
|
+
#coder codearea -elseif="tags[1].actived">
|
|
130
130
|
</div>
|
|
131
131
|
<resultpad -if="tags[1].actived" .result #coderesult></resultpad>
|
|
132
132
|
<div foot -if="tags[1].actived">
|
|
@@ -193,9 +193,10 @@
|
|
|
193
193
|
render.refresh();
|
|
194
194
|
if (tags[1].actived) loadcode();
|
|
195
195
|
});
|
|
196
|
+
var modName = '';
|
|
196
197
|
var loadcode = async function () {
|
|
197
198
|
jschanged = false;
|
|
198
|
-
|
|
199
|
+
modName = name.replace(/\.js$/i, '_test');
|
|
199
200
|
if (doc.test) {
|
|
200
201
|
var lessdata = [], htmldata = [];
|
|
201
202
|
jstext = [];
|
|
@@ -370,7 +371,41 @@
|
|
|
370
371
|
c.contentEditable = true;
|
|
371
372
|
};
|
|
372
373
|
var trimspace = (_, a) => a ? "" : " ";
|
|
373
|
-
var
|
|
374
|
+
var ensp = s => Array(s + 1).join("\u2002"/*&ensp*/);
|
|
375
|
+
var getEnspBefore = function (node) {
|
|
376
|
+
if (!node) return 0;
|
|
377
|
+
while (node && (node.nodeType !== 1 || !/^br$/i.test(node.tagName))) {
|
|
378
|
+
node = node.previousSibling;
|
|
379
|
+
}
|
|
380
|
+
if (node) {
|
|
381
|
+
var next = node.nextSibling;
|
|
382
|
+
if (next) {
|
|
383
|
+
next = /^\u2002+/.exec(next.nodeValue);
|
|
384
|
+
if (next) return next[0].length;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
};
|
|
388
|
+
var ontab = function (forcetab) {
|
|
389
|
+
var selection = document.getSelection();
|
|
390
|
+
var { anchorNode, anchorOffset } = selection;
|
|
391
|
+
if (anchorNode.nodeType === 1) {
|
|
392
|
+
var child = anchorNode.childNodes[anchorOffset];
|
|
393
|
+
var spaceSize = 4;
|
|
394
|
+
if (child.nodeType === 1) spaceSize = getEnspBefore(child?.previousSibling?.previousSibling || anchorNode);
|
|
395
|
+
if (!spaceSize && forcetab !== false) spaceSize = 4;
|
|
396
|
+
if (!spaceSize) return;
|
|
397
|
+
var space = document.createTextNode(ensp(spaceSize));
|
|
398
|
+
anchorNode.insertBefore(space, child);
|
|
399
|
+
selection.setBaseAndExtent(space, spaceSize, space, spaceSize);
|
|
400
|
+
}
|
|
401
|
+
else if (anchorNode.nodeType === 3) {
|
|
402
|
+
if (forcetab === 0) return;
|
|
403
|
+
anchorNode.nodeValue = anchorNode.nodeValue.slice(0, anchorOffset) + ensp(4) + anchorNode.nodeValue.slice(anchorOffset);
|
|
404
|
+
anchorOffset += 4;
|
|
405
|
+
selection.setBaseAndExtent(anchorNode, anchorOffset, anchorNode, anchorOffset);
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
var updatecode = lazy(function (event) {
|
|
374
409
|
var trimreg = /[\s\u00a0\u2002\u0080]+([\}\{\;\[\]\(\)\,\>\<\+\-\*\&\^\/%!~:?])*/g;
|
|
375
410
|
var innerText = coder.innerText;
|
|
376
411
|
if (jstext.replace(trimreg, trimspace).trim() === innerText.replace(trimreg, trimspace).trim()) return;
|
|
@@ -393,6 +428,14 @@
|
|
|
393
428
|
data.patchInstance("docscode", { codetext: jstext })
|
|
394
429
|
var code = compile$scanner2(jstext);
|
|
395
430
|
var envs = code.envs;
|
|
431
|
+
if (envs.require && !window.require) {
|
|
432
|
+
throw i18n`这个文件的内容不能在非nodejs环境中运行`;
|
|
433
|
+
}
|
|
434
|
+
for (var k in envs) {
|
|
435
|
+
if (/\_test/i.test(k) && k !== modName) {
|
|
436
|
+
if (isProduction) throw i18n`这个文件的内容不能在线运行`;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
396
439
|
var argNames = Object.keys(envs);
|
|
397
440
|
var args = await Promise.all(argNames.map(a => init(a + "*" + live, null, { ["init*" + live]: init, ["put*" + live]: put, ["zimoli*" + live]: zimoli, ["appendChild*" + live]: appendChild, ["remove*" + live]: remove, ["render*" + live]: render })));
|
|
398
441
|
var func = createFunction("", jstext, argNames, code.async, code.yield);
|
|
@@ -424,6 +467,7 @@
|
|
|
424
467
|
};
|
|
425
468
|
var keytab = function (event) {
|
|
426
469
|
event.preventDefault();
|
|
470
|
+
ontab();
|
|
427
471
|
};
|
|
428
472
|
|
|
429
473
|
var saveTagIndex = function (i) {
|