efront 4.0.56 → 4.0.58
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/coms/compile/Javascript.js +1 -1
- package/coms/compile/common.js +10 -9
- package/coms/compile/richcss.js +113 -104
- package/coms/compile/richcss_test.js +26 -1
- package/coms/docs/codetext.xht +3 -1
- package/coms/zimoli/HexEditor.less +7 -4
- package/coms/zimoli/menu_test.js +3 -3
- package/coms/zimoli/menu_test.less +1 -1
- package/coms/zimoli/random.js +6 -4
- package/docs//347/273/204/344/273/266.xht +2 -2
- package/package.json +2 -2
- package/public/efront.js +1 -1
|
@@ -384,7 +384,7 @@ Javascript.prototype.setType = function (o) {
|
|
|
384
384
|
}
|
|
385
385
|
}
|
|
386
386
|
if (o.type === STAMP) {
|
|
387
|
-
if (!last || last.type & (STAMP | STRAP)) {
|
|
387
|
+
if (!last || last.type & (STAMP | STRAP) || last.type === SCOPED && /^[\{\[]$/.test(last.entry) && !last.isExpress) {
|
|
388
388
|
o.unary = /^[^=;,\*]$|.[^\=\>\<\|\&\^]$/.test(o.text);
|
|
389
389
|
}
|
|
390
390
|
}
|
package/coms/compile/common.js
CHANGED
|
@@ -404,7 +404,7 @@ var createScoped = function (parsed, wash) {
|
|
|
404
404
|
var function_obj = null;
|
|
405
405
|
if (o.type === STAMP && equal_reg.test(o.text)) {
|
|
406
406
|
var p = snapExpressHead(o.prev);
|
|
407
|
-
if (!p || p.type & (STRAP | STAMP)) {
|
|
407
|
+
if (!p || p.type & (STRAP | STAMP) || !p.isExpress) {
|
|
408
408
|
let n = o.next;
|
|
409
409
|
if (n && n.type & (EXPRESS | VALUE)) {
|
|
410
410
|
n.equal = o;
|
|
@@ -1001,6 +1001,7 @@ var setqueue = function (list, queue = list) {
|
|
|
1001
1001
|
var createString = function (parsed) {
|
|
1002
1002
|
var autospace = parsed.autospace !== false;
|
|
1003
1003
|
var keepspace = parsed.keepspace !== false;
|
|
1004
|
+
var patchspace = autospace && keepspace;
|
|
1004
1005
|
var helpcode = parsed.helpcode;
|
|
1005
1006
|
var lasttype = SPACE;
|
|
1006
1007
|
var uncomment = parsed.comment === false;
|
|
@@ -1008,7 +1009,7 @@ var createString = function (parsed) {
|
|
|
1008
1009
|
var helpcolor = parsed.keepcolor === false;
|
|
1009
1010
|
var run = (o, i, a) => {
|
|
1010
1011
|
var prev = o.prev;
|
|
1011
|
-
if (!((SPACE | COMMENT | STAMP | PIECE | SCOPED) & o.type) && prev && lasttype !== SPACE &&
|
|
1012
|
+
if (!((SPACE | COMMENT | STAMP | PIECE | SCOPED) & o.type) && prev && lasttype !== SPACE && patchspace) {
|
|
1012
1013
|
if ((QUOTED | SCOPED | STRAP | LABEL | COMMENT) & lasttype
|
|
1013
1014
|
|| prev.type === STAMP && !prev.unary
|
|
1014
1015
|
) {
|
|
@@ -1049,7 +1050,7 @@ var createString = function (parsed) {
|
|
|
1049
1050
|
}
|
|
1050
1051
|
}
|
|
1051
1052
|
if (keepspace && !opentmp) {
|
|
1052
|
-
if (
|
|
1053
|
+
if (patchspace && lasttype !== SPACE && lasttype !== EXPRESS) result.push(" ");
|
|
1053
1054
|
result.push(tmp);
|
|
1054
1055
|
}
|
|
1055
1056
|
break;
|
|
@@ -1069,21 +1070,21 @@ var createString = function (parsed) {
|
|
|
1069
1070
|
break;
|
|
1070
1071
|
}
|
|
1071
1072
|
case SCOPED:
|
|
1072
|
-
if (
|
|
1073
|
+
if (patchspace && o.type !== QUOTED && (lasttype & (STRAP | COMMENT | STAMP)
|
|
1073
1074
|
&& (!o.prev || !/[\+\-\~\!]$/.test(o.prev.text) || /[\+\-]$/.test(o.prev.text) && (!o.prev.prev || !((STAMP | STRAP) & o.prev.prev.type)))
|
|
1074
1075
|
|| lasttype === SCOPED && o.entry === "{"
|
|
1075
1076
|
)) result.push(" ");
|
|
1076
1077
|
result.push(o.entry);
|
|
1077
1078
|
if (o.length > 0) {
|
|
1078
1079
|
if (o.entry === "{" && o[0].type !== SPACE) {
|
|
1079
|
-
if (
|
|
1080
|
+
if (patchspace && lasttype !== PIECE) {
|
|
1080
1081
|
result.push(" ");
|
|
1081
1082
|
}
|
|
1082
1083
|
}
|
|
1083
1084
|
lasttype = SPACE;
|
|
1084
1085
|
o.forEach(run);
|
|
1085
1086
|
if (o.prev && o.prev.type === STRAP && /^for$/.test(o.prev.text));
|
|
1086
|
-
else if (/^[,;]$/.test(result[result.length - 1]) && !keepspace) {
|
|
1087
|
+
else if (/^[,;]$/.test(result[result.length - 1]) && autospace && !keepspace) {
|
|
1087
1088
|
var last = o.last;
|
|
1088
1089
|
var lp = last && last.prev;
|
|
1089
1090
|
if (!lp) result.pop();
|
|
@@ -1094,7 +1095,7 @@ var createString = function (parsed) {
|
|
|
1094
1095
|
}
|
|
1095
1096
|
}
|
|
1096
1097
|
if (o.leave === "}" && o.entry === "{" && o[o.length - 1].type !== SPACE) {
|
|
1097
|
-
if (
|
|
1098
|
+
if (patchspace) result.push(" ");
|
|
1098
1099
|
}
|
|
1099
1100
|
}
|
|
1100
1101
|
result.push(o.leave);
|
|
@@ -1120,10 +1121,10 @@ var createString = function (parsed) {
|
|
|
1120
1121
|
}
|
|
1121
1122
|
|
|
1122
1123
|
else if (o.text === '*') {
|
|
1123
|
-
if (
|
|
1124
|
+
if (patchspace && lasttype !== SPACE && (lasttype !== STRAP || o.prev && o.prev.text !== 'function')) result.push(" ");
|
|
1124
1125
|
}
|
|
1125
1126
|
else if (!/^(\+\+|\-\-)$/.test(o.text) || o.prev && o.prev.type & (STAMP | STRAP)) {
|
|
1126
|
-
if (
|
|
1127
|
+
if (patchspace && lasttype !== SPACE) result.push(" ");
|
|
1127
1128
|
}
|
|
1128
1129
|
}
|
|
1129
1130
|
if (o.type === VALUE) {
|
package/coms/compile/richcss.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
var { STAMP, PROPERTY, SCOPED, VALUE, EXPRESS, QUOTED, SPACE, COMMENT, createString } = require("./common");
|
|
1
|
+
var { STAMP, PROPERTY, SCOPED, VALUE, EXPRESS, QUOTED, SPACE, COMMENT, createString: _createString, splice } = require("./common");
|
|
2
|
+
var createString = function (a) {
|
|
3
|
+
a.autospace = false;
|
|
4
|
+
return _createString(a);
|
|
5
|
+
};
|
|
2
6
|
class Richarg extends Program {
|
|
3
7
|
straps = ["and"];
|
|
4
|
-
stamps = '
|
|
8
|
+
stamps = ',:;>+~&!/'.split("");
|
|
5
9
|
quotes = this.quotes.slice(0, 2).concat();
|
|
6
10
|
keepspace = true;
|
|
7
11
|
scopes = [["(", ")"], ["{", "}"]];
|
|
@@ -9,49 +13,87 @@ class Richarg extends Program {
|
|
|
9
13
|
|
|
10
14
|
var rarg = new Richarg;
|
|
11
15
|
rarg.quotes.push(["url(", ")"]);
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
16
|
+
var numberReg = /((?:[\+\-]+)?(?:\d+(?:\.\d*)?|\.\d+))(?:\s*(px|%|pt|pc|in|cm|mm|r?em|deg|rad|vw|vh|%))?/;
|
|
17
|
+
var replaceHReg = new RegExp(numberReg.source + /\s*([\/\*])\s*/.source + numberReg.source, 'gi');
|
|
18
|
+
var replaceLReg = new RegExp(numberReg.source + /(\s*[\+\-]\s+|[\+\-])/.source + numberReg.source, 'gi');
|
|
19
|
+
var replaceTReg = new RegExp(numberReg.source + /\s*[\/\*\+\-]\s*/.source + numberReg.source, 'i');
|
|
20
|
+
var remove_quote = a => a.replace(/~\s*(['"`])((?:\\[\s\S]|[^'"`\\])*?)\1/g, '$2');
|
|
21
|
+
var replace_punc = function (a) {
|
|
22
|
+
if (typeof a !== "string") return a;
|
|
23
|
+
a = remove_quote(a);
|
|
24
|
+
if (/\(/.test(a)) return a;
|
|
25
|
+
do {
|
|
26
|
+
var replaced = false;
|
|
27
|
+
a = a.replace(replaceHReg, function (_, d1, p1, c, d2, p2) {
|
|
28
|
+
if (!p2 || !p1) {
|
|
29
|
+
p1 = p1 || p2 || '';
|
|
30
|
+
d1 = eval(d1);
|
|
31
|
+
d2 = eval(d2);
|
|
32
|
+
if (c === '*') {
|
|
33
|
+
replaced = true;
|
|
34
|
+
return d1 * d2 + p1;
|
|
35
|
+
}
|
|
36
|
+
if (c === '/') {
|
|
37
|
+
replaced = true;
|
|
38
|
+
return d1 / d2 + p1;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return _;
|
|
42
|
+
});
|
|
43
|
+
} while (replaced);
|
|
44
|
+
do {
|
|
45
|
+
var replaced = false;
|
|
46
|
+
a = a.replace(replaceLReg, function (_, d1, p1 = '', c, d2, p2 = '') {
|
|
47
|
+
if (p1 === p2) {
|
|
48
|
+
d1 = eval(d1);
|
|
49
|
+
d2 = eval(d2);
|
|
50
|
+
c = c.trim();
|
|
51
|
+
if (c === "+") {
|
|
52
|
+
replaced = true;
|
|
53
|
+
return (+d1 + +d2) + p1;
|
|
54
|
+
}
|
|
55
|
+
if (c === '-') {
|
|
56
|
+
replaced = true;
|
|
57
|
+
return (d1 - d2) + p1;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return _;
|
|
61
|
+
});
|
|
62
|
+
} while (replaced);
|
|
63
|
+
return a;
|
|
64
|
+
}
|
|
65
|
+
var killcalc = a => replace_punc(createString(a));
|
|
33
66
|
var seprateFunc = function (express) {
|
|
34
67
|
var express = scanner2(express, rarg);
|
|
35
68
|
var sps = [];
|
|
36
69
|
var sp = [];
|
|
37
|
-
sp.autospace = false;
|
|
38
70
|
for (var cx = 0, dx = express.length; cx < dx; cx++) {
|
|
39
71
|
var o = express[cx];
|
|
40
72
|
if (o.type === SCOPED && o.entry === '(') {
|
|
41
|
-
if (!sp.length) continue;
|
|
42
73
|
var p = sp[sp.length - 1];
|
|
43
|
-
if (p
|
|
74
|
+
if (!p) {
|
|
75
|
+
sp.push(o);
|
|
76
|
+
sps.push(killcalc(sp));
|
|
77
|
+
sp.splice(0, sp.length);
|
|
78
|
+
}
|
|
79
|
+
else if (p.type & (EXPRESS | PROPERTY)) {
|
|
44
80
|
sp.pop();
|
|
45
81
|
if (sp.length) sps.push(killcalc(sp));
|
|
46
82
|
sp.splice(0, sp.length, p, o);
|
|
47
83
|
sps.push(createString(sp));
|
|
48
84
|
sp.splice(0, sp.length);
|
|
49
85
|
}
|
|
86
|
+
else {
|
|
87
|
+
sps.push(killcalc(sp));
|
|
88
|
+
sp.splice(0, sp.length, o);
|
|
89
|
+
sps.push(createString(sp));
|
|
90
|
+
sp.splice(0, sp.length);
|
|
91
|
+
}
|
|
50
92
|
}
|
|
51
|
-
else if (o.type === QUOTED) {
|
|
93
|
+
else if (o.type === QUOTED && !/^['"`]/.test(o.text)) {
|
|
52
94
|
if (sp.length) sps.push(killcalc(sp));
|
|
53
95
|
sp.splice(0, sp.length);
|
|
54
|
-
sps.push(
|
|
96
|
+
sps.push(o.text);
|
|
55
97
|
}
|
|
56
98
|
else sp.push(o);
|
|
57
99
|
}
|
|
@@ -61,21 +103,18 @@ var seprateFunc = function (express) {
|
|
|
61
103
|
var splitParams = function (params) {
|
|
62
104
|
if (!params) return [];
|
|
63
105
|
params = scanner2(params, rarg);
|
|
64
|
-
var
|
|
65
|
-
var params = [];
|
|
66
|
-
|
|
67
|
-
var
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
p.push(o);
|
|
74
|
-
o = o.next;
|
|
106
|
+
var code = params;
|
|
107
|
+
var params = [], p = [];
|
|
108
|
+
for (var cx = 0, dx = code.length; cx < dx; cx++) {
|
|
109
|
+
var o = code[cx];
|
|
110
|
+
if (o.type === STAMP && o.text === ',') {
|
|
111
|
+
params.push(createString(p));
|
|
112
|
+
p = [];
|
|
113
|
+
continue;
|
|
75
114
|
}
|
|
76
|
-
p.
|
|
77
|
-
params.push(createString(p));
|
|
115
|
+
p.push(o);
|
|
78
116
|
}
|
|
117
|
+
if (p.length) params.push(createString(p));
|
|
79
118
|
return params;
|
|
80
119
|
}
|
|
81
120
|
var createArgMap = function (args, split = ',', equal = ':') {
|
|
@@ -107,6 +146,10 @@ var createArgMap = function (args, split = ',', equal = ':') {
|
|
|
107
146
|
};
|
|
108
147
|
|
|
109
148
|
var macros = Object.create(null);
|
|
149
|
+
macros.calc = function (a) {
|
|
150
|
+
if (replaceTReg.test(a)) return `calc(${a})`;
|
|
151
|
+
return a;
|
|
152
|
+
};
|
|
110
153
|
macros.range = function () {
|
|
111
154
|
if (arguments.length === 1) {
|
|
112
155
|
return ArrayFill(arguments[0], 0).map((a, i) => i + 1);
|
|
@@ -161,6 +204,9 @@ var wrapColor = function (f) {
|
|
|
161
204
|
return f;
|
|
162
205
|
}
|
|
163
206
|
}
|
|
207
|
+
macros[""] = function (a) {
|
|
208
|
+
return a;
|
|
209
|
+
};
|
|
164
210
|
macros.saturate = wrapColor(color.strurate);
|
|
165
211
|
macros.desaturate = wrapColor(color.desaturate);
|
|
166
212
|
macros.lighten = wrapColor(color.lighten);
|
|
@@ -230,7 +276,7 @@ macros.each = function (list, body) {
|
|
|
230
276
|
|
|
231
277
|
class Richcss extends Program {
|
|
232
278
|
straps = ["and"];
|
|
233
|
-
stamps =
|
|
279
|
+
stamps = `;:,>+~&!/`.split("");
|
|
234
280
|
quotes = rarg.quotes;
|
|
235
281
|
keepspace = true;
|
|
236
282
|
scopes = [["{", "}"], ["(", ")"]]
|
|
@@ -245,42 +291,21 @@ Richcss.prototype.setType = function (o) {
|
|
|
245
291
|
o.type = PROPERTY;
|
|
246
292
|
return;
|
|
247
293
|
}
|
|
294
|
+
if (p.type === PROPERTY && o.type !== STAMP && o.type !== SCOPED) {
|
|
295
|
+
o.type = PROPERTY;
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
248
298
|
}
|
|
249
299
|
if (!p) return;
|
|
250
|
-
var q = o.queue;
|
|
251
|
-
if (o.type & (PROPERTY | EXPRESS) && p && p === q[q.length - 1] && p.type & (PROPERTY | EXPRESS)) {
|
|
252
|
-
return false;
|
|
253
|
-
}
|
|
254
300
|
if (o.type === SCOPED && o.entry === "{") {
|
|
255
301
|
if (p && p.type & (PROPERTY | EXPRESS) && /@$/.test(p.text)) {
|
|
256
302
|
return false;
|
|
257
303
|
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
304
|
+
while (p && (p.type !== SCOPED || p.entry !== "{") && (p.type !== STAMP || p.text !== ';')) {
|
|
305
|
+
p.isprop = true;
|
|
306
|
+
if (p.type !== SCOPED) p.type = PROPERTY;
|
|
261
307
|
p = p.prev;
|
|
262
308
|
}
|
|
263
|
-
if (pps.length > 1) {
|
|
264
|
-
var i = q.lastIndexOf(p = pps.pop());
|
|
265
|
-
q.splice(i + 1, q.length);
|
|
266
|
-
p.type = PROPERTY;
|
|
267
|
-
p.end = pps[0].end;
|
|
268
|
-
q.last = p;
|
|
269
|
-
return;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
if (!q.entry && o.type !== SCOPED) {
|
|
273
|
-
var p = q.last;
|
|
274
|
-
if (p && p.type === STAMP && p.text === ':') {
|
|
275
|
-
if (p.keep) return;
|
|
276
|
-
}
|
|
277
|
-
else if (o.type === STAMP && o.text === ':') {
|
|
278
|
-
if (p.type & (EXPRESS | PROPERTY)) {
|
|
279
|
-
o.keep = true;
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
if (o.type === STAMP && o.text !== ";") return false;
|
|
284
309
|
}
|
|
285
310
|
};
|
|
286
311
|
|
|
@@ -309,7 +334,10 @@ Richcss.prototype.createScoped = function (code) {
|
|
|
309
334
|
for (var cx = 0, dx = code.length; cx < dx; cx++) {
|
|
310
335
|
var o = code[cx];
|
|
311
336
|
if (o && (o.type & (SPACE | COMMENT) || o.type === STAMP && o.text === ';')) continue;
|
|
312
|
-
if (o.type !== PROPERTY)
|
|
337
|
+
if (o.type !== PROPERTY) {
|
|
338
|
+
console.log(createString([o]), o.type, createString(code))
|
|
339
|
+
throw new Error("结构异常");
|
|
340
|
+
}
|
|
313
341
|
var p = [], v = [];
|
|
314
342
|
while (o && (o.type !== SCOPED || o.entry !== "{")) {
|
|
315
343
|
if (o.type === STAMP) break;
|
|
@@ -336,10 +364,9 @@ Richcss.prototype.createScoped = function (code) {
|
|
|
336
364
|
}
|
|
337
365
|
o = n;
|
|
338
366
|
}
|
|
339
|
-
else if (o) {
|
|
367
|
+
else if (o && o.type === SCOPED) {
|
|
340
368
|
v = run(o);
|
|
341
369
|
}
|
|
342
|
-
p.autospace = false;
|
|
343
370
|
var pj = createString(p).trim();
|
|
344
371
|
if (!propmap[pj]) propmap[pj] = [];
|
|
345
372
|
var vs = [];
|
|
@@ -377,7 +404,9 @@ var fixBase = function (b, a) {
|
|
|
377
404
|
if (presets.test(a)) a = `@{${a}}`;
|
|
378
405
|
var replaced = false;
|
|
379
406
|
return b.split(/\s*,\s*/).map(b => {
|
|
380
|
-
|
|
407
|
+
b = b.replace(/^(&|\:scope|\:root)\s*/g, "");
|
|
408
|
+
if (!b) return a;
|
|
409
|
+
var a1 = a.replace(/&|\:scope|\:root/g, function (match) {
|
|
381
410
|
replaced = true;
|
|
382
411
|
return b;
|
|
383
412
|
});
|
|
@@ -391,19 +420,12 @@ var fixBase = function (b, a) {
|
|
|
391
420
|
}).join(",");
|
|
392
421
|
}).join(",");
|
|
393
422
|
}
|
|
394
|
-
function evalscoped(scoped,
|
|
423
|
+
function evalscoped(scoped, base = '') {
|
|
395
424
|
var smaps = scoped.maps;
|
|
396
|
-
var root = smaps[":root"], scope = smaps[":scope"]
|
|
425
|
+
var root = smaps[":root"], scope = smaps[":scope"];
|
|
397
426
|
var vars = extend(Object.create(null), scoped.vars);
|
|
398
427
|
if (root) root.forEach(r => extend(vars, r.vars));
|
|
399
428
|
if (scope) scope.forEach(s => extend(vars, s.vars));
|
|
400
|
-
if (and) and.forEach(s => extend(vars, s.vars));
|
|
401
|
-
scopeNames.forEach(s => {
|
|
402
|
-
var ss = smaps[s];
|
|
403
|
-
if (ss) ss.forEach(s => {
|
|
404
|
-
extend(vars, s.vars), s.rooted = true;
|
|
405
|
-
})
|
|
406
|
-
});
|
|
407
429
|
var vlist = [vars];
|
|
408
430
|
var mlist = [macros];
|
|
409
431
|
var clist = [smaps];
|
|
@@ -435,10 +457,9 @@ function evalscoped(scoped, scopeNames, base = '') {
|
|
|
435
457
|
});
|
|
436
458
|
};
|
|
437
459
|
var evalproc = function (k, retnoparam) {
|
|
438
|
-
var match = (retnoparam !== false ? /^([^\(\)\s,;:]
|
|
460
|
+
var match = (retnoparam !== false ? /^([^\(\)\s,;:]*)(?:\s*\(([\s\S]*)\))$/ : /^([^\(\)\s,;:]+)(?:\s*\(([\s\S]*)\))?$/).exec(k);
|
|
439
461
|
if (!match) return calcvars(k);
|
|
440
462
|
var [, name, params] = match;
|
|
441
|
-
params = splitParams(params);
|
|
442
463
|
var method = getFromScopeList(name, mlist);
|
|
443
464
|
if (!isFunction(method)) {
|
|
444
465
|
if (/^@/.test(name)) return calcvars(k);
|
|
@@ -454,7 +475,8 @@ function evalscoped(scoped, scopeNames, base = '') {
|
|
|
454
475
|
}
|
|
455
476
|
else return k;
|
|
456
477
|
};
|
|
457
|
-
params = params
|
|
478
|
+
params = splitParams(params);
|
|
479
|
+
params = params.map(evalproc).map(replace_punc);
|
|
458
480
|
return method.apply(null, params);
|
|
459
481
|
};
|
|
460
482
|
|
|
@@ -464,7 +486,6 @@ function evalscoped(scoped, scopeNames, base = '') {
|
|
|
464
486
|
if (!match) continue;
|
|
465
487
|
if (presets.test(match[1])) continue;
|
|
466
488
|
var [, name, args] = match;
|
|
467
|
-
p.base = base;
|
|
468
489
|
args = createArgMap(args);
|
|
469
490
|
p.args = args;
|
|
470
491
|
p.reg = new RegExp(args.join("|") + /|@\{[^\}@]+\}/.source, 'g');
|
|
@@ -475,6 +496,7 @@ function evalscoped(scoped, scopeNames, base = '') {
|
|
|
475
496
|
});
|
|
476
497
|
methods[name] = function () {
|
|
477
498
|
var valueMap = Object.create(null);
|
|
499
|
+
this.base = p.base || base;
|
|
478
500
|
vlist.push(valueMap);
|
|
479
501
|
var argDefaults = this.args.defaults;
|
|
480
502
|
this.args.forEach((k, i) => {
|
|
@@ -492,7 +514,7 @@ function evalscoped(scoped, scopeNames, base = '') {
|
|
|
492
514
|
});
|
|
493
515
|
var vars = this.vars;
|
|
494
516
|
if (vars) Object.keys(vars).forEach(k => {
|
|
495
|
-
valueMap[k] = replace(calcvars(vars[k]));
|
|
517
|
+
valueMap[k] = seprateFunc(replace(calcvars(vars[k]))).map(evalproc).join('');
|
|
496
518
|
});
|
|
497
519
|
var body = evalthis(this);
|
|
498
520
|
var rest = body.rest.map(a => a.map(replace));
|
|
@@ -519,7 +541,7 @@ function evalscoped(scoped, scopeNames, base = '') {
|
|
|
519
541
|
else if (p.length) {
|
|
520
542
|
k = calcvars(k);
|
|
521
543
|
p = calcvars(p.join(" "));
|
|
522
|
-
p = seprateFunc(p).map(evalproc).join('');
|
|
544
|
+
p = replace_punc(seprateFunc(p).map(evalproc).join(''));
|
|
523
545
|
result.push(k, ":", p, ';');
|
|
524
546
|
}
|
|
525
547
|
else {
|
|
@@ -543,21 +565,8 @@ function richcss(text, scopeName, compress) {
|
|
|
543
565
|
if (!rcss) rcss = new Richcss;
|
|
544
566
|
rcss.debug = true;
|
|
545
567
|
var code = scanner2(text, rcss);
|
|
546
|
-
var scopeNames = [];
|
|
547
|
-
if (scopeName) code.forEach(c => {
|
|
548
|
-
if (c.type === PROPERTY) {
|
|
549
|
-
var replaced = false;
|
|
550
|
-
c.text = c.text.replace(/\:(scope|root)|&/g, function () {
|
|
551
|
-
replaced = true;
|
|
552
|
-
return scopeName;
|
|
553
|
-
});
|
|
554
|
-
if (replaced) {
|
|
555
|
-
scopeNames.push(c.text);
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
})
|
|
559
568
|
var { scoped } = code;
|
|
560
|
-
var result = evalscoped(scoped,
|
|
569
|
+
var result = evalscoped(scoped, scopeName);
|
|
561
570
|
var queried = [];
|
|
562
571
|
var getquried = function () {
|
|
563
572
|
if (!queried.length) return "";
|
|
@@ -574,7 +583,7 @@ function richcss(text, scopeName, compress) {
|
|
|
574
583
|
a = a.replace(/@\{(@[^\}]*)\}\s*/g, function (_, q) {
|
|
575
584
|
ats.push(q);
|
|
576
585
|
return ''
|
|
577
|
-
})
|
|
586
|
+
});
|
|
578
587
|
if (!a) return '';
|
|
579
588
|
var atk = ats.join(';');
|
|
580
589
|
if (queried.key !== atk) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var test = function (data, expect) {
|
|
2
2
|
assert(richcss(data), expect);
|
|
3
3
|
};
|
|
4
|
-
test(`&{--a:1
|
|
4
|
+
test(`&{--a:1;a{opacity:--a}}`, `a{opacity:1;}`);
|
|
5
5
|
test(`:root{--a:1}a{opacity:--a}`, `a{opacity:1;}`);
|
|
6
6
|
test(`:scope{--a:1}a{opacity:--a}`, `a{opacity:1;}`);
|
|
7
7
|
test(`:scope{--b:--a;--a:1;}a{opacity:--b}`, `a{opacity:1;}`);
|
|
@@ -25,6 +25,20 @@ test(`@a:1;a{@a:2;@{a}:@a}`, `a{2:2;}`);
|
|
|
25
25
|
test(`@a:1;@a{@a:2;@{a}:@a}`, `1{2:2;}`);
|
|
26
26
|
test(`@b(@a:1){@a{a:b}}@b(2)`, `2{a:b;}`);
|
|
27
27
|
test(`@a:1; a{a:@a/2}`, `a{a:0.5;}`);
|
|
28
|
+
test(`@a:1; a{a:(@a/2)}`, `a{a:0.5;}`);
|
|
29
|
+
test(`@a:1; a{a:(@a/2)+1}`, `a{a:1.5;}`);
|
|
30
|
+
test(`@a:1; a{a:(@a/2) + 1}`, `a{a:1.5;}`);
|
|
31
|
+
test(`@a:1px; a{a:(@a/2) +1px}`, `a{a:0.5px +1px;}`);
|
|
32
|
+
test(`@a:1px; a{a:(@a/2) -1px}`, `a{a:0.5px -1px;}`);
|
|
33
|
+
test(`@a:1px; a{a:(@a/2)-1px}`, `a{a:-0.5px;}`);
|
|
34
|
+
test(`@a:1px; a{a:1px+ (@a/2)}`, `a{a:1.5px;}`);
|
|
35
|
+
test(`&{a:calc(100% - 1px)}`, `&{a:calc(100% - 1px);}`);
|
|
36
|
+
test(`&{a:calc(~"100% - 1px")}`, `&{a:calc(100% - 1px);}`);
|
|
37
|
+
test(`&{a:calc(~"100vw - 1px")}`, `&{a:calc(100vw - 1px);}`);
|
|
38
|
+
test(`&{a:calc(~"100px - 1px")}`, `&{a:99px;}`);
|
|
39
|
+
test(`&{a:url(~"100px - 1px")}`, `&{a:url(100px - 1px);}`);
|
|
40
|
+
test(`&{a:url("100px - 1px")}`, `&{a:url("100px - 1px");}`);
|
|
41
|
+
test(`&{a:calc(100px - 1px)}`, `&{a:99px;}`);
|
|
28
42
|
test(`.a(){b{a:2}} .a();`, `b{a:2;}`);
|
|
29
43
|
test(`#a(){b{a:2}} #a();`, `b{a:2;}`);
|
|
30
44
|
test(`#a{a:1}`, `#a{a:1;}`);
|
|
@@ -38,3 +52,14 @@ test(`b{a:darken(#fff,10%)}`, `b{a:#f5f5f5;}`);
|
|
|
38
52
|
test(`b{a:darken(hsl(90, 80%, 50%), 20%)}`, `b{a:#6cd205;}`);
|
|
39
53
|
test(`b{a:darken(#6cd205, 20%)}`, `b{a:#58be00;}`);
|
|
40
54
|
test(`b{a:darken(#7ff,10%)}`, `b{a:#6df5f5;}`);
|
|
55
|
+
|
|
56
|
+
test(`:not(a):not(b){c:d}`, `:not(a):not(b){c:d;}`);
|
|
57
|
+
assert(richcss(`:not(a):not(b){c:d}`, 'abc'), `abc :not(a):not(b){c:d;}`);
|
|
58
|
+
assert(richcss(`&:not(a):not(b){c:d}`, 'abc'), `abc:not(a):not(b){c:d;}`);
|
|
59
|
+
assert(richcss(`:scope{&:not(a):not(b){c:d}}`, 'abc'), `abc:not(a):not(b){c:d;}`);
|
|
60
|
+
assert(richcss(`:root{&:not(a):not(b){c:d}}`, 'abc'), `abc:not(a):not(b){c:d;}`);
|
|
61
|
+
assert(richcss(`&{&:not(a):not(b){c:d}}`, 'abc'), `abc:not(a):not(b){c:d;}`);
|
|
62
|
+
assert(richcss(`:root>a{&:not(a):not(b){c:d}}`, '.abc-'), `.abc->a:not(a):not(b){c:d;}`);
|
|
63
|
+
assert(richcss(`a>:root{&:not(a):not(b){c:d}}`, '.abc-'), `a>.abc-:not(a):not(b){c:d;}`);
|
|
64
|
+
|
|
65
|
+
assert(richcss(`.a (){ &:after{abc:1}} .b{.a();}`, '.abc-'), `.abc- .b:after{abc:1;}`);
|
package/coms/docs/codetext.xht
CHANGED
|
@@ -167,11 +167,13 @@
|
|
|
167
167
|
}
|
|
168
168
|
var typescript = new compile$Javascript;
|
|
169
169
|
typescript.straps = typescript.straps.concat("interface", "implements", "declare", "module", "readonly", "enum");
|
|
170
|
+
var js = new compile$Javascript;
|
|
171
|
+
js.keepspace = true;
|
|
170
172
|
var codesupports = {
|
|
171
173
|
javascript(a, blink) {
|
|
172
174
|
if (blink) var index = a.indexOf(blink);
|
|
173
175
|
if (index >= 0) a = a.slice(0, index) + a.slice(index + 1);
|
|
174
|
-
var c = compile$scanner2(a);
|
|
176
|
+
var c = compile$scanner2(a, js);
|
|
175
177
|
if (index >= 0) {
|
|
176
178
|
var patched = patchBlink(c, index, blink);
|
|
177
179
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
*{
|
|
1
|
+
* {
|
|
2
2
|
box-sizing: border-box;
|
|
3
3
|
}
|
|
4
|
+
|
|
4
5
|
& {
|
|
5
6
|
background: #fff;
|
|
6
7
|
display: inline-block;
|
|
@@ -8,9 +9,10 @@
|
|
|
8
9
|
font-size: 16px;
|
|
9
10
|
position: relative;
|
|
10
11
|
min-height: 100px;
|
|
11
|
-
padding: 0
|
|
12
|
+
padding: 0 4px 10px 16px;
|
|
12
13
|
font-family: 宋体;
|
|
13
|
-
width:
|
|
14
|
+
width: 440px;
|
|
15
|
+
border: 1.2px solid #000;
|
|
14
16
|
|
|
15
17
|
>a {
|
|
16
18
|
display: inline-block;
|
|
@@ -40,10 +42,11 @@
|
|
|
40
42
|
word-spacing: 2px;
|
|
41
43
|
font-size: inherit;
|
|
42
44
|
line-height: 30px;
|
|
43
|
-
margin: 0 -
|
|
45
|
+
margin: 0 -4px 10px -16px;
|
|
44
46
|
padding: 0 16px 0 16px;
|
|
45
47
|
position: sticky;
|
|
46
48
|
top: 0;
|
|
49
|
+
text-transform: uppercase;
|
|
47
50
|
background: #333;
|
|
48
51
|
content: "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f";
|
|
49
52
|
display: block;
|
package/coms/zimoli/menu_test.js
CHANGED
|
@@ -12,12 +12,12 @@ function main() {
|
|
|
12
12
|
var page = div();
|
|
13
13
|
page.innerHTML = template;
|
|
14
14
|
var data = random([{
|
|
15
|
-
name: '一级目录',
|
|
15
|
+
name: '${inc} 一级目录',
|
|
16
16
|
children: [{
|
|
17
|
-
name: "二级目录",
|
|
17
|
+
name: "${inc} 二级目录",
|
|
18
18
|
children: [
|
|
19
19
|
{
|
|
20
|
-
name: "三级目录"
|
|
20
|
+
name: "${inc} 三级目录"
|
|
21
21
|
}
|
|
22
22
|
]
|
|
23
23
|
}]
|
package/coms/zimoli/random.js
CHANGED
|
@@ -13,7 +13,7 @@ function singleSource(_, type) {
|
|
|
13
13
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
function random(source, decimal) {
|
|
16
|
+
function random(source, decimal, ...deeprand) {
|
|
17
17
|
if (!source) {
|
|
18
18
|
if (arguments.length > 1) {
|
|
19
19
|
return random(arguments[Math.random() * arguments.length | 0]);
|
|
@@ -45,8 +45,10 @@ function random(source, decimal) {
|
|
|
45
45
|
return random(source[Math.random() * source.length | 0]);
|
|
46
46
|
} else {
|
|
47
47
|
var dst = [];
|
|
48
|
-
for (var cx = 0, dx = decimal >
|
|
49
|
-
|
|
48
|
+
for (var cx = 0, dx = decimal > 0 ? decimal | 0 : Math.random() * 10 | 1; cx < dx; cx++) {
|
|
49
|
+
var arg = deeprand;
|
|
50
|
+
if (!arg.length) arg = [[0, Math.random() * 2 | 0, Math.random() * 5 | 0, Math.random() * 10 | 0, Math.random() * 20 | 0, Math.random() * 50 | 0, Math.random() * 100 | 0][Math.random() * 7 | 0]];
|
|
51
|
+
dst.push(random(source[source.length * Math.random() | 0], ...arg))
|
|
50
52
|
}
|
|
51
53
|
return dst;
|
|
52
54
|
}
|
|
@@ -58,7 +60,7 @@ function random(source, decimal) {
|
|
|
58
60
|
var dst = {};
|
|
59
61
|
for (var k in source) {
|
|
60
62
|
var v = source[k];
|
|
61
|
-
dst[k] = v[0] instanceof Object ? random(v,
|
|
63
|
+
dst[k] = v[0] instanceof Object ? random(v, decimal) : random(v, 0);
|
|
62
64
|
}
|
|
63
65
|
return dst;
|
|
64
66
|
}
|
|
@@ -214,7 +214,7 @@
|
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
216
|
else {
|
|
217
|
-
if (code.isExpressQueue()) codetext = "return " + codetext;
|
|
217
|
+
if (code.isExpressQueue()) codetext = "return " + codetext.trim();
|
|
218
218
|
else if (vars.main) codetext += '\r\nreturn main';
|
|
219
219
|
else if (vars.Main) codetext += '\r\nreturn Main';
|
|
220
220
|
else if (vars.MAIN) codetext += "\r\nreturn MAIN";
|
|
@@ -365,7 +365,7 @@
|
|
|
365
365
|
var code = compile$scanner2(codetext);
|
|
366
366
|
var envs = code.envs;
|
|
367
367
|
var argNames = Object.keys(envs);
|
|
368
|
-
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 })));
|
|
368
|
+
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 })));
|
|
369
369
|
var func = createFunction("", codetext, argNames, code.async, code.yield);
|
|
370
370
|
var res = func.apply(window, args);
|
|
371
371
|
if (isFunction(res)) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "efront",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.58",
|
|
4
4
|
"description": "简化前端开发,优化web性能",
|
|
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 --uplevel --node --deno",
|
|
13
|
+
"prepack": "node tools/build-efront.js --uplevel --node --deno --no-target",
|
|
14
14
|
"start": "efront ./efront/ --libs=typescript,esprima,escodegen,esmangle,pngjs,less-node"
|
|
15
15
|
},
|
|
16
16
|
"repository": {
|