efront 4.11.6 → 4.12.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/apps/pivot/task/invoke.html +1 -1
- package/apps/pivot/task/invoke.js +1 -0
- package/apps/pivot/task/invoke.less +7 -4
- package/coms/compile/unstruct.js +20 -7
- package/coms/compile/unstruct_test.js +1 -0
- package/coms/compile//347/264/240/351/246/250.js +243 -218
- package/coms/compile//347/264/240/351/246/250_test.js +3 -0
- package/coms/zimoli/field.less +11 -4
- package/coms/zimoli/render.js +10 -6
- package/coms/zimoli/tree.js +11 -0
- package/coms/zimoli/view.js +11 -6
- package/coms//350/214/250/350/217/260//346/270/262/346/237/223.js +1 -1
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/readme-en.md +7 -0
- package/readme.md +7 -0
|
@@ -18,6 +18,10 @@ var replaceHReg = new RegExp(numberReg.source + /\s*([\/\*])\s*/.source + number
|
|
|
18
18
|
var replaceLReg = new RegExp(numberReg.source + /(\s*[\+\-]\s+|[\+\-])/.source + numberReg.source, 'gi');
|
|
19
19
|
var replaceTReg = new RegExp(numberReg.source + /\s*[\/\*\+\-]\s*/.source + numberReg.source, 'i');
|
|
20
20
|
var remove_quote = a => a.replace(/~\s*(['"`])((?:\\[\s\S]|[^'"`\\])*?)\1/g, '$2');
|
|
21
|
+
var keepdot = function (a) {
|
|
22
|
+
var g = Math.pow(10, Math.log10(a) | 0) * 1000;
|
|
23
|
+
return (a * g | 0) / g;
|
|
24
|
+
}
|
|
21
25
|
var replace_punc = function (a) {
|
|
22
26
|
if (typeof a !== "string") return a;
|
|
23
27
|
a = remove_quote(a);
|
|
@@ -31,11 +35,11 @@ var replace_punc = function (a) {
|
|
|
31
35
|
d2 = eval(d2);
|
|
32
36
|
if (c === '*') {
|
|
33
37
|
replaced = true;
|
|
34
|
-
return d1 * d2 + p1;
|
|
38
|
+
return keepdot(d1 * d2) + p1;
|
|
35
39
|
}
|
|
36
40
|
if (c === '/') {
|
|
37
41
|
replaced = true;
|
|
38
|
-
return d1 / d2 + p1;
|
|
42
|
+
return keepdot(d1 / d2) + p1;
|
|
39
43
|
}
|
|
40
44
|
}
|
|
41
45
|
return _;
|
|
@@ -50,11 +54,11 @@ var replace_punc = function (a) {
|
|
|
50
54
|
c = c.trim();
|
|
51
55
|
if (c === "+") {
|
|
52
56
|
replaced = true;
|
|
53
|
-
return (+d1 + +d2) + p1;
|
|
57
|
+
return keepdot(+d1 + +d2) + p1;
|
|
54
58
|
}
|
|
55
59
|
if (c === '-') {
|
|
56
60
|
replaced = true;
|
|
57
|
-
return (d1 - d2) + p1;
|
|
61
|
+
return keepdot(d1 - d2) + p1;
|
|
58
62
|
}
|
|
59
63
|
}
|
|
60
64
|
return _;
|
|
@@ -124,7 +128,7 @@ var createArgMap = function (args, split = ',', equal = ':') {
|
|
|
124
128
|
var o = args.first;
|
|
125
129
|
var args = [];
|
|
126
130
|
while (o) {
|
|
127
|
-
if (!(o.type & (PROPERTY | EXPRESS))) {
|
|
131
|
+
if (!(o.type & (VALUE | STRAP | QUOTED | PROPERTY | EXPRESS))) {
|
|
128
132
|
throw new Error(i18n`参数异常!`);
|
|
129
133
|
}
|
|
130
134
|
var k = o.text;
|
|
@@ -227,12 +231,18 @@ macros[""] = function (a) {
|
|
|
227
231
|
return a;
|
|
228
232
|
};
|
|
229
233
|
|
|
230
|
-
macros.each = function (
|
|
234
|
+
macros.each = function () {
|
|
235
|
+
if (arguments.length !== 2) {
|
|
236
|
+
body = arguments[arguments.length - 1];
|
|
237
|
+
list = Array.prototype.slice.call(arguments, 0, arguments.length - 1).join(',');
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
var [list, body] = arguments;
|
|
241
|
+
}
|
|
231
242
|
var match = /^(?:\s*[#\.]?\(([\s\S]*?)\))?\s*\{([\s\S]*)\}$/.exec(body);
|
|
232
243
|
if (!match) throw new Error(i18n`each参数异常!`);
|
|
233
244
|
var [_, args, content] = match;
|
|
234
245
|
if (!content) return;
|
|
235
|
-
content = 素馨(content);
|
|
236
246
|
if (args) args = args.split(",").map(a => a.trim());
|
|
237
247
|
else args = [];
|
|
238
248
|
if (args.length < 1) args.push("@value");
|
|
@@ -245,17 +255,12 @@ macros.each = function (list, body) {
|
|
|
245
255
|
if (args.indexOf("@value") < 0) args.push("@value");
|
|
246
256
|
if (args.indexOf("@key") < 0) args.push("@key");
|
|
247
257
|
if (args.indexOf("@index") < 0) args.push("@index");
|
|
248
|
-
var reg = new RegExp(args.join("|") + /|@\{[^@\{]+\}/.source, 'g');
|
|
249
258
|
var defaults = list.defaults;
|
|
250
259
|
var argsMap = null;
|
|
251
|
-
var
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
return a;
|
|
256
|
-
}
|
|
257
|
-
if (a in argsMap) return argsMap[a];
|
|
258
|
-
return a;
|
|
260
|
+
var match = /^(\s*)([\S\s]*?)(\s*)$/.exec(content);
|
|
261
|
+
if (match) var [, b, c, f] = match;
|
|
262
|
+
var replace = _ => {
|
|
263
|
+
return b + 素馨(args.map(a => a + ":" + argsMap[a] + ';').join('') + c, base, true) + f;
|
|
259
264
|
};
|
|
260
265
|
if (defaults) list = list.map(function (a, i) {
|
|
261
266
|
argsMap = {
|
|
@@ -266,15 +271,18 @@ macros.each = function (list, body) {
|
|
|
266
271
|
[args[1]]: a,
|
|
267
272
|
[args[2]]: i + 1,
|
|
268
273
|
};
|
|
269
|
-
return
|
|
274
|
+
return replace();
|
|
270
275
|
});
|
|
271
276
|
else list = list.map(function (a, i) {
|
|
272
277
|
argsMap = {
|
|
273
278
|
"@value": a,
|
|
274
279
|
"@key": i + 1,
|
|
275
280
|
"@index": i + 1,
|
|
281
|
+
[args[0]]: a,
|
|
282
|
+
[args[1]]: i,
|
|
283
|
+
[args[2]]: i + 1,
|
|
276
284
|
};
|
|
277
|
-
return
|
|
285
|
+
return replace();
|
|
278
286
|
});
|
|
279
287
|
return list;
|
|
280
288
|
};
|
|
@@ -318,80 +326,89 @@ class 素心 extends Program {
|
|
|
318
326
|
}
|
|
319
327
|
};
|
|
320
328
|
|
|
321
|
-
|
|
322
|
-
var
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
if (
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
s.splice(cx, 1);
|
|
330
|
-
}
|
|
331
|
-
else {
|
|
332
|
-
if (!used) used = [];
|
|
333
|
-
used.push({ p: k, v });
|
|
334
|
-
}
|
|
329
|
+
var setVarsUsed = function (s) {
|
|
330
|
+
var vars = null, used = null;
|
|
331
|
+
for (var cx = s.length - 1; cx >= 0; cx--) {
|
|
332
|
+
var { p: k, v } = s[cx];
|
|
333
|
+
if (/^\-\-|^@[^\{]/.test(k) && !("used" in v) && v.length) {
|
|
334
|
+
if (!vars) vars = Object.create(null);
|
|
335
|
+
vars[k] = v.join(" ");
|
|
336
|
+
s.splice(cx, 1);
|
|
335
337
|
}
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
338
|
+
else {
|
|
339
|
+
if (!used) used = [];
|
|
340
|
+
used.push({ p: k, v });
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if (used) used.reverse();
|
|
344
|
+
s.used = used;
|
|
345
|
+
s.vars = vars;
|
|
346
|
+
};
|
|
347
|
+
var createScoped = function (code) {
|
|
348
|
+
var props = [];
|
|
349
|
+
var propmap = Object.create(null);
|
|
350
|
+
for (var cx = 0, dx = code.length; cx < dx; cx++) {
|
|
351
|
+
var o = code[cx];
|
|
352
|
+
if (o && (o.type & (SPACE | COMMENT) || o.type === STAMP && o.text === ';')) continue;
|
|
353
|
+
if (!o.isprop) {
|
|
354
|
+
console.log(createString([o]), o.type, createString(code))
|
|
355
|
+
throw new Error(i18n`结构异常`);
|
|
356
|
+
}
|
|
357
|
+
var p = [], v = [];
|
|
358
|
+
while (o && (o.type !== SCOPED || o.entry !== "{")) {
|
|
359
|
+
if (o.type === STAMP && !o.isprop) break;
|
|
360
|
+
p.push(o);
|
|
361
|
+
a: if (o.type === SCOPED && o.entry === '(') {
|
|
362
|
+
var n = o.next;
|
|
363
|
+
if (n) {
|
|
364
|
+
if (n.type === STAMP && n.text === ';') break a;
|
|
365
|
+
if (n.type === SCOPED && n.entry === "{") break a;
|
|
366
|
+
if (p[0].type === PROPERTY && !/^@/.test(p[0].text)) {
|
|
367
|
+
o = n;
|
|
361
368
|
break;
|
|
362
369
|
}
|
|
363
|
-
tmp.push(n);
|
|
364
|
-
n = code[++cx];
|
|
365
370
|
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
371
|
+
}
|
|
372
|
+
o = code[++cx];
|
|
373
|
+
}
|
|
374
|
+
if (o && o.type === STAMP && o.text === ':') {
|
|
375
|
+
var n = code[++cx];
|
|
376
|
+
var tmp = [];
|
|
377
|
+
while (n && (n.type !== STAMP || n.text !== ";")) {
|
|
378
|
+
if (n.type === SCOPED && n.entry === '{') {
|
|
379
|
+
break;
|
|
373
380
|
}
|
|
374
|
-
|
|
381
|
+
tmp.push(n);
|
|
382
|
+
n = code[++cx];
|
|
375
383
|
}
|
|
376
|
-
|
|
377
|
-
|
|
384
|
+
if (n && n.type === SCOPED) {
|
|
385
|
+
o.unary = true;
|
|
386
|
+
p.push(o, ...tmp);
|
|
387
|
+
v = createScoped(n);
|
|
378
388
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
var vs = [];
|
|
382
|
-
if (v.used === undefined) {
|
|
383
|
-
if (v.length) vs.push(createString(v).trim());
|
|
389
|
+
else {
|
|
390
|
+
v = tmp;
|
|
384
391
|
}
|
|
385
|
-
|
|
386
|
-
props.push({ p: pj, v: vs })
|
|
387
|
-
propmap[pj].push(vs);
|
|
392
|
+
o = n;
|
|
388
393
|
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
+
else if (o && o.type === SCOPED && o.entry === "{") {
|
|
395
|
+
v = createScoped(o);
|
|
396
|
+
}
|
|
397
|
+
var pj = createString(p).trim();
|
|
398
|
+
if (!propmap[pj]) propmap[pj] = [];
|
|
399
|
+
var vs = [];
|
|
400
|
+
if (v.used === undefined) {
|
|
401
|
+
if (v.length) vs.push(createString(v).trim());
|
|
402
|
+
}
|
|
403
|
+
else vs.used = v.used, vs.vars = v.vars;
|
|
404
|
+
props.push({ p: pj, v: vs })
|
|
405
|
+
propmap[pj].push(vs);
|
|
406
|
+
}
|
|
407
|
+
props.maps = propmap;
|
|
408
|
+
setVarsUsed(props);
|
|
409
|
+
return props;
|
|
394
410
|
};
|
|
411
|
+
素心.prototype.createScoped = createScoped;
|
|
395
412
|
素心.prototype.createString = createString;
|
|
396
413
|
var getFromScopeList = function (name, varsList, value = name) {
|
|
397
414
|
name = name.replace(/^@\{\s*(\S*)\s*\}$/g, '@$1');
|
|
@@ -401,7 +418,9 @@ var getFromScopeList = function (name, varsList, value = name) {
|
|
|
401
418
|
if (name in o) queue = [];
|
|
402
419
|
while (name in o) {
|
|
403
420
|
name = o[name];
|
|
404
|
-
if (typeof name !==
|
|
421
|
+
if (typeof name !== 'string') return name;
|
|
422
|
+
name = strings.decode(name);
|
|
423
|
+
if (!/^\-\-|^@[^\{]/.test(name)) return name;
|
|
405
424
|
if (queue.indexOf(name) >= 0) throw `变量环形引用,无法初始化:${queue}`;
|
|
406
425
|
queue.push(name);
|
|
407
426
|
}
|
|
@@ -430,8 +449,141 @@ var fixBase = function (b, a) {
|
|
|
430
449
|
}).join(",");
|
|
431
450
|
}).join(",");
|
|
432
451
|
}
|
|
433
|
-
|
|
434
|
-
|
|
452
|
+
var Method = function () {
|
|
453
|
+
var valueMap = Object.create(null);
|
|
454
|
+
if (!this.base) this.base = base;
|
|
455
|
+
vlist.push(valueMap);
|
|
456
|
+
var argDefaults = this.args.defaults;
|
|
457
|
+
this.args.forEach((k, i) => {
|
|
458
|
+
var a = arguments[i];
|
|
459
|
+
if (a === undefined || a === null) a = seprateFunc(calcvars(argDefaults[k])).map(evalproc).join('');
|
|
460
|
+
valueMap[k] = a;
|
|
461
|
+
});
|
|
462
|
+
var replace = text => text.replace(this.reg, function (name) {
|
|
463
|
+
if (/^\@\{/.test(name)) {
|
|
464
|
+
var key = "@" + name.slice(2, -1);
|
|
465
|
+
if (key in valueMap) return strings.decode(valueMap[key]);
|
|
466
|
+
}
|
|
467
|
+
else if (name in valueMap) return valueMap[name];
|
|
468
|
+
return name;
|
|
469
|
+
});
|
|
470
|
+
var vars = this.vars;
|
|
471
|
+
if (vars) Object.keys(vars).forEach(k => {
|
|
472
|
+
valueMap[k] = seprateFunc(replace(calcvars(vars[k]))).map(evalproc).join('');
|
|
473
|
+
});
|
|
474
|
+
var body = evalthis(this);
|
|
475
|
+
var rest = body.rest.map(a => a.map(replace));
|
|
476
|
+
var body = body.map(replace);
|
|
477
|
+
body.rest = rest;
|
|
478
|
+
vlist.pop();
|
|
479
|
+
return body;
|
|
480
|
+
}
|
|
481
|
+
var vlist = [], mlist = [macros], clist = [], base = '';
|
|
482
|
+
var calcvars = function (v) {
|
|
483
|
+
return v.replace(/@[^\s\{\}\(\)\[\]\:\+\*\/,;\!\>\$\=\&\%\#\@'"`\?\.\/\|~#]+|@\{[^\}@]*\}/g, function (m) {
|
|
484
|
+
return getFromScopeList(m, vlist, m);
|
|
485
|
+
}).replace(/(^|\s|[\]\)\(\[\-\+\*\/,;])(?:var\s*\(([\s\S]*?)\)|(--\S+))/g, function (m, q, a, b) {
|
|
486
|
+
return q + getFromScopeList(b || a.trim(), vlist, m.slice(q.length));
|
|
487
|
+
});
|
|
488
|
+
};
|
|
489
|
+
var initvars = function (vars) {
|
|
490
|
+
for (var k in vars) {
|
|
491
|
+
var v = vars[k];
|
|
492
|
+
vars[k] = replace_punc(calcvars(v));
|
|
493
|
+
}
|
|
494
|
+
};
|
|
495
|
+
var evalthis = function (p) {
|
|
496
|
+
var temp = base;
|
|
497
|
+
base = p.base;
|
|
498
|
+
var res = eval2(p.used);
|
|
499
|
+
base = temp;
|
|
500
|
+
return res;
|
|
501
|
+
};
|
|
502
|
+
var evalproc = function (k, retnoparam) {
|
|
503
|
+
var match = (retnoparam !== false ? /^([^\(\)\s,;:]*)(?:\s*\(([\s\S]*)\))$/ : /^([^\(\)\s,;:]+)(?:\s*\(([\s\S]*)\))?$/).exec(k);
|
|
504
|
+
if (!match) return calcvars(k);
|
|
505
|
+
var [, name, params] = match;
|
|
506
|
+
var method = getFromScopeList(name, mlist);
|
|
507
|
+
if (!isFunction(method)) {
|
|
508
|
+
if (/^@/.test(name)) return calcvars(k);
|
|
509
|
+
var block = getFromScopeList(name, clist, null);
|
|
510
|
+
if (block) {
|
|
511
|
+
var res = [];
|
|
512
|
+
var rest = [];
|
|
513
|
+
block.map(eval2).forEach(e => {
|
|
514
|
+
res = res.concat(e);
|
|
515
|
+
rest = rest.concat(e.rest);
|
|
516
|
+
});
|
|
517
|
+
return res.concat(rest).join('');
|
|
518
|
+
}
|
|
519
|
+
else return k;
|
|
520
|
+
};
|
|
521
|
+
params = splitParams(params);
|
|
522
|
+
params = params.map(evalproc).map(replace_punc);
|
|
523
|
+
return method.apply(null, params);
|
|
524
|
+
};
|
|
525
|
+
var eval2 = function (props) {
|
|
526
|
+
var rest = [];
|
|
527
|
+
var result = [];
|
|
528
|
+
var methods = Object.create(null);
|
|
529
|
+
mlist.push(methods);
|
|
530
|
+
if (props.maps) clist.push(props.maps);
|
|
531
|
+
|
|
532
|
+
for (var { p: k, v: p } of props) {
|
|
533
|
+
if (p.used) {
|
|
534
|
+
var match = /^([@\.#][^\s,]+)\s*\(([\s\S]*?)\)\s*$/.exec(k);
|
|
535
|
+
if (!match) continue;
|
|
536
|
+
if (presets.test(match[1])) continue;
|
|
537
|
+
var [, name, args] = match;
|
|
538
|
+
args = createArgMap(args);
|
|
539
|
+
p.args = args;
|
|
540
|
+
p.reg = new RegExp(args.join("|") + /|@\{[^\}@]+\}/.source, 'g');
|
|
541
|
+
if (!methods[name]) methods[name] = [];
|
|
542
|
+
var argDefaults = args.defaults;
|
|
543
|
+
Object.keys(argDefaults).forEach(k => {
|
|
544
|
+
argDefaults[k] = calcvars(argDefaults[k]);
|
|
545
|
+
});
|
|
546
|
+
methods[name] = Method.bind(p);
|
|
547
|
+
p.isMethod = true;
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
for (var { p: k, v: p } of props) {
|
|
551
|
+
if (p.isMethod) continue;
|
|
552
|
+
if (p.used) {
|
|
553
|
+
k = calcvars(k);
|
|
554
|
+
k = removeSelectorSpace(k);
|
|
555
|
+
if (base && !p.rooted) p.base = fixBase(base, k);
|
|
556
|
+
else p.base = presets.test(k) ? `@{${k}}` : k;
|
|
557
|
+
var vars = shallowClone(p.vars);
|
|
558
|
+
if (vars) vlist.push(vars);
|
|
559
|
+
initvars(vars);
|
|
560
|
+
var value = evalthis(p);
|
|
561
|
+
if (vars) vlist.pop();
|
|
562
|
+
if (value.rest.length) rest = rest.concat(value.rest);
|
|
563
|
+
if (value.length) rest.push([p.base, '{', value.join(""), "}"]);
|
|
564
|
+
}
|
|
565
|
+
else if (p.length) {
|
|
566
|
+
k = calcvars(k);
|
|
567
|
+
p = calcvars(p.join(" "));
|
|
568
|
+
p = replace_punc(seprateFunc(p).map(evalproc).join(''));
|
|
569
|
+
result.push(k, ":", p, ';');
|
|
570
|
+
}
|
|
571
|
+
else {
|
|
572
|
+
var res = evalproc(k, false);
|
|
573
|
+
if (res instanceof Array) {
|
|
574
|
+
if (res.rest && res.rest.length) rest = rest.concat(res.rest);
|
|
575
|
+
if (res.length) result = result.concat(res);
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
mlist.pop();
|
|
580
|
+
if (props.maps) clist.pop();
|
|
581
|
+
result.rest = rest;
|
|
582
|
+
return result;
|
|
583
|
+
};
|
|
584
|
+
function evalscoped(scoped, scopeName = '') {
|
|
585
|
+
var _base = base;
|
|
586
|
+
base = removeSelectorSpace(scopeName);
|
|
435
587
|
var smaps = scoped.maps;
|
|
436
588
|
var root = smaps[":root"], scope = smaps[":scope"];
|
|
437
589
|
var and = smaps["&"];
|
|
@@ -439,140 +591,13 @@ function evalscoped(scoped, base = '') {
|
|
|
439
591
|
if (root) root.forEach(r => extend(vars, r.vars));
|
|
440
592
|
if (scope) scope.forEach(s => extend(vars, s.vars));
|
|
441
593
|
if (and) and.forEach(a => extend(vars, a.vars));
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
var clist = [smaps];
|
|
445
|
-
var calcvars = function (v) {
|
|
446
|
-
return v.replace(/(^|\s|[\]\)\(\[\-\+\*\/,;])(?:var\s*\(([\s\S]*?)\)|(--\S+|@[^\s\{\}\(\)\[\]\:\+\*\/,;\!\>\$\=\&\%\#\@'"`\?\.\/\|~#]+|@\{[^\}@]*\}))/g, function (m, q, a, b) {
|
|
447
|
-
return q + getFromScopeList(b || a.trim(), vlist, m.slice(q.length));
|
|
448
|
-
});
|
|
449
|
-
};
|
|
450
|
-
var initvars = function (vars) {
|
|
451
|
-
for (var k in vars) {
|
|
452
|
-
var v = vars[k];
|
|
453
|
-
vars[k] = replace_punc(calcvars(v));
|
|
454
|
-
}
|
|
455
|
-
};
|
|
594
|
+
vlist.push(vars);
|
|
595
|
+
clist.push(smaps);
|
|
456
596
|
initvars(vars);
|
|
457
|
-
|
|
458
|
-
var eval2 = function (props) {
|
|
459
|
-
var rest = [];
|
|
460
|
-
var result = [];
|
|
461
|
-
var methods = Object.create(null);
|
|
462
|
-
mlist.push(methods);
|
|
463
|
-
if (props.maps) clist.push(props.maps);
|
|
464
|
-
var evalthis = function (p) {
|
|
465
|
-
var temp = base;
|
|
466
|
-
base = p.base;
|
|
467
|
-
var res = eval2(p.used);
|
|
468
|
-
base = temp;
|
|
469
|
-
return res;
|
|
470
|
-
};
|
|
471
|
-
var evalproc = function (k, retnoparam) {
|
|
472
|
-
var match = (retnoparam !== false ? /^([^\(\)\s,;:]*)(?:\s*\(([\s\S]*)\))$/ : /^([^\(\)\s,;:]+)(?:\s*\(([\s\S]*)\))?$/).exec(k);
|
|
473
|
-
if (!match) return calcvars(k);
|
|
474
|
-
var [, name, params] = match;
|
|
475
|
-
var method = getFromScopeList(name, mlist);
|
|
476
|
-
if (!isFunction(method)) {
|
|
477
|
-
if (/^@/.test(name)) return calcvars(k);
|
|
478
|
-
var block = getFromScopeList(name, clist, null);
|
|
479
|
-
if (block) {
|
|
480
|
-
var res = [];
|
|
481
|
-
var rest = [];
|
|
482
|
-
block.map(eval2).forEach(e => {
|
|
483
|
-
res = res.concat(e);
|
|
484
|
-
rest = rest.concat(e.rest);
|
|
485
|
-
});
|
|
486
|
-
return res.concat(rest).join('');
|
|
487
|
-
}
|
|
488
|
-
else return k;
|
|
489
|
-
};
|
|
490
|
-
params = splitParams(params);
|
|
491
|
-
params = params.map(evalproc).map(replace_punc);
|
|
492
|
-
return method.apply(null, params);
|
|
493
|
-
};
|
|
494
|
-
|
|
495
|
-
for (var { p: k, v: p } of props) {
|
|
496
|
-
if (p.used) {
|
|
497
|
-
var match = /^([@\.#][^\s,]+)\s*\(([\s\S]*?)\)\s*$/.exec(k);
|
|
498
|
-
if (!match) continue;
|
|
499
|
-
if (presets.test(match[1])) continue;
|
|
500
|
-
var [, name, args] = match;
|
|
501
|
-
args = createArgMap(args);
|
|
502
|
-
p.args = args;
|
|
503
|
-
p.reg = new RegExp(args.join("|") + /|@\{[^\}@]+\}/.source, 'g');
|
|
504
|
-
if (!methods[name]) methods[name] = [];
|
|
505
|
-
var argDefaults = args.defaults;
|
|
506
|
-
Object.keys(argDefaults).forEach(k => {
|
|
507
|
-
argDefaults[k] = calcvars(argDefaults[k]);
|
|
508
|
-
});
|
|
509
|
-
methods[name] = function () {
|
|
510
|
-
var valueMap = Object.create(null);
|
|
511
|
-
this.base = p.base || base;
|
|
512
|
-
vlist.push(valueMap);
|
|
513
|
-
var argDefaults = this.args.defaults;
|
|
514
|
-
this.args.forEach((k, i) => {
|
|
515
|
-
var a = arguments[i];
|
|
516
|
-
if (a === undefined || a === null) a = seprateFunc(calcvars(argDefaults[k])).map(evalproc).join('');
|
|
517
|
-
valueMap[k] = a;
|
|
518
|
-
});
|
|
519
|
-
var replace = text => text.replace(this.reg, function (name) {
|
|
520
|
-
if (/^\@\{/.test(name)) {
|
|
521
|
-
var key = "@" + name.slice(2, -1);
|
|
522
|
-
if (key in valueMap) return strings.decode(valueMap[key]);
|
|
523
|
-
}
|
|
524
|
-
else if (name in valueMap) return valueMap[name];
|
|
525
|
-
return name;
|
|
526
|
-
});
|
|
527
|
-
var vars = this.vars;
|
|
528
|
-
if (vars) Object.keys(vars).forEach(k => {
|
|
529
|
-
valueMap[k] = seprateFunc(replace(calcvars(vars[k]))).map(evalproc).join('');
|
|
530
|
-
});
|
|
531
|
-
var body = evalthis(this);
|
|
532
|
-
var rest = body.rest.map(a => a.map(replace));
|
|
533
|
-
var body = body.map(replace);
|
|
534
|
-
body.rest = rest;
|
|
535
|
-
vlist.pop();
|
|
536
|
-
return body;
|
|
537
|
-
}.bind(p);
|
|
538
|
-
p.isMethod = true;
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
for (var { p: k, v: p } of props) {
|
|
542
|
-
if (p.isMethod) continue;
|
|
543
|
-
if (p.used) {
|
|
544
|
-
k = calcvars(k);
|
|
545
|
-
k = removeSelectorSpace(k);
|
|
546
|
-
if (base && !p.rooted) p.base = fixBase(base, k);
|
|
547
|
-
else p.base = presets.test(k) ? `@{${k}}` : k;
|
|
548
|
-
var vars = shallowClone(p.vars);
|
|
549
|
-
if (vars) vlist.push(vars);
|
|
550
|
-
initvars(vars);
|
|
551
|
-
var value = evalthis(p);
|
|
552
|
-
if (vars) vlist.pop();
|
|
553
|
-
if (value.rest.length) rest = rest.concat(value.rest);
|
|
554
|
-
if (value.length) rest.push([p.base, '{', value.join(""), "}"]);
|
|
555
|
-
}
|
|
556
|
-
else if (p.length) {
|
|
557
|
-
k = calcvars(k);
|
|
558
|
-
p = calcvars(p.join(" "));
|
|
559
|
-
p = replace_punc(seprateFunc(p).map(evalproc).join(''));
|
|
560
|
-
result.push(k, ":", p, ';');
|
|
561
|
-
}
|
|
562
|
-
else {
|
|
563
|
-
var res = evalproc(k, false);
|
|
564
|
-
if (res instanceof Array) {
|
|
565
|
-
if (res.rest && res.rest.length) rest = rest.concat(res.rest);
|
|
566
|
-
if (res.length) result = result.concat(res);
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
mlist.pop();
|
|
571
|
-
if (props.maps) clist.pop();
|
|
572
|
-
result.rest = rest;
|
|
573
|
-
return result;
|
|
574
|
-
}
|
|
575
597
|
var result = eval2(scoped, [vars]);
|
|
598
|
+
vlist.pop();
|
|
599
|
+
clist.pop();
|
|
600
|
+
base = _base;
|
|
576
601
|
return result;
|
|
577
602
|
}
|
|
578
603
|
var rcss = null;
|
|
@@ -593,7 +618,7 @@ function 素馨(text, scopeName, compress) {
|
|
|
593
618
|
queried = [];
|
|
594
619
|
return b;
|
|
595
620
|
}
|
|
596
|
-
return result.rest.map(a => a.join(""))
|
|
621
|
+
return result.concat(result.rest.map(a => a.join(""))).map(a => {
|
|
597
622
|
var ats = [];
|
|
598
623
|
a = a.replace(/\s*@\{(@[^\}]*)\}/g, function (_, q) {
|
|
599
624
|
q = q.replace(/((?:\s|\))(?:and|or))\(/g, '$1 (');
|
|
@@ -75,6 +75,9 @@ assert(素馨(`@media screen and(max-width:100px){&.a{b:1}}`, 'a'), `@media scre
|
|
|
75
75
|
assert(素馨(`b{:not([resizing], [dragging]) {transition: padding .2s, margin .2s;}}`), `b :not([resizing], [dragging]){transition:padding .2s, margin .2s;}`);
|
|
76
76
|
assert(素馨(`@a(@b){a@b{@w:@b/2;c:@w;}} @a(1); @a(2); @a(3)`), `a1{c:0.5;}\r\na2{c:1;}\r\na3{c:1.5;}`);
|
|
77
77
|
assert(素馨(`a{filter:grayscale(.9)}`), `a{filter:grayscale(.9);}`);
|
|
78
|
+
assert(素馨(`a{each(1,2,3,4,5,(@a){a:@a})}`), `a{a:1;a:2;a:3;a:4;a:5;}`);
|
|
79
|
+
assert(素馨(`each(1,(@a){a{a:@a}})a>b{b:2}`), `a{a:1;}\r\na>b{b:2;}`);
|
|
80
|
+
assert(素馨(`each(2,(@a){@b:1/@a;a{a:@b}})`), `a{a:0.5;}`);
|
|
78
81
|
assert(scanner2(`-0.2em .3em -0.2em 0`, new 素馨.素心)[0].text, '-0.2em');
|
|
79
82
|
assert(scanner2(`-0.2em .3em -0.2em 0`, new 素馨.素心)[0].isdigit, true);
|
|
80
83
|
assert(scanner2(`-0.2em .3em -0.2em 0`, new 素馨.素心)[2].text, ".3em");
|
package/coms/zimoli/field.less
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
box-shadow: none !important;
|
|
4
4
|
display: block;
|
|
5
5
|
line-height: 22px;
|
|
6
|
-
|
|
6
|
+
padding: 8px 0;
|
|
7
|
+
border-bottom: 1px solid #0001;
|
|
7
8
|
}
|
|
8
9
|
|
|
9
10
|
>.head,
|
|
10
11
|
>.foot {
|
|
11
|
-
padding:
|
|
12
|
+
padding: 2px 16px;
|
|
12
13
|
vertical-align: top;
|
|
13
14
|
display: inline-block;
|
|
14
15
|
position: absolute;
|
|
@@ -24,6 +25,12 @@ model {
|
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
>.head {
|
|
28
|
+
font-weight: 600;
|
|
29
|
+
font-family: "宋体";
|
|
30
|
+
|
|
31
|
+
&:after {
|
|
32
|
+
content: ":";
|
|
33
|
+
}
|
|
27
34
|
|
|
28
35
|
.image {
|
|
29
36
|
margin: 10px 0;
|
|
@@ -35,10 +42,10 @@ model {
|
|
|
35
42
|
margin: 10px 0;
|
|
36
43
|
}
|
|
37
44
|
|
|
45
|
+
min-height: 30px;
|
|
38
46
|
vertical-align: top;
|
|
39
|
-
padding:
|
|
47
|
+
padding: 2px 16px;
|
|
40
48
|
height: 100%;
|
|
41
|
-
border-bottom: 1px solid #0001;
|
|
42
49
|
display: inline-block;
|
|
43
50
|
width: 100%;
|
|
44
51
|
text-align: left;
|
package/coms/zimoli/render.js
CHANGED
|
@@ -543,7 +543,7 @@ var directives = {
|
|
|
543
543
|
var parsedSrc = this.$src;
|
|
544
544
|
return src2.call(this, parsedSrc && /[\{\[\s]/.test(src) ? parsedSrc.srcName : src);
|
|
545
545
|
},
|
|
546
|
-
model(search, target) {
|
|
546
|
+
model(search, target, change) {
|
|
547
547
|
var getter = createGetter(this, search);
|
|
548
548
|
var oldValue;
|
|
549
549
|
var getstr = target.getValue instanceof Function ? "this.getValue()" : "";
|
|
@@ -561,12 +561,12 @@ var directives = {
|
|
|
561
561
|
oldValue = value;
|
|
562
562
|
this[key] = value;
|
|
563
563
|
};
|
|
564
|
-
if (
|
|
565
|
-
this.$renders.push(setter || setter2.bind(target, 'checked'));
|
|
566
|
-
var change = getstr || "this.checked";
|
|
567
|
-
} else if (("value" in target || target.getValue instanceof Function) && target.setValue instanceof Function) {
|
|
564
|
+
if (("value" in target || target.getValue instanceof Function) && target.setValue instanceof Function) {
|
|
568
565
|
this.$renders.push(setter);
|
|
569
566
|
var change = getstr || "this.value";
|
|
567
|
+
} else if (/^input$/i.test(target.tagName) && /^checkbox$/i.test(target.type) || /^checkbox$/i.test(target.tagName)) {
|
|
568
|
+
this.$renders.push(setter || setter2.bind(target, 'checked'));
|
|
569
|
+
var change = getstr || "this.checked";
|
|
570
570
|
} else if (/^(select|input|textarea)$/i.test(target.tagName) || "value" in target) {
|
|
571
571
|
this.$renders.push(setter || setter2.bind(target, 'value'));
|
|
572
572
|
var change = getstr || "this.value";
|
|
@@ -580,6 +580,7 @@ var directives = {
|
|
|
580
580
|
});
|
|
581
581
|
var change = getstr || "'value' in this?this.value:this.innerHTML";
|
|
582
582
|
}
|
|
583
|
+
if (change === false) return;
|
|
583
584
|
setter2 = null;
|
|
584
585
|
var changeme = $$eval.bind(this, search + "=" + change, getScopeList(this));
|
|
585
586
|
var onchange = function () {
|
|
@@ -593,6 +594,9 @@ var directives = {
|
|
|
593
594
|
};
|
|
594
595
|
eventsBinders.forEach(on => on(target, onchange, true));
|
|
595
596
|
},
|
|
597
|
+
value(search, target) {
|
|
598
|
+
directives.model.call(this, search, target, false);
|
|
599
|
+
},
|
|
596
600
|
|
|
597
601
|
};
|
|
598
602
|
// property binder
|
|
@@ -993,7 +997,7 @@ function createStructure(element, useExists) {
|
|
|
993
997
|
}
|
|
994
998
|
// ng-html,ng-src,ng-text,ng-model,ng-style,ng-class,...
|
|
995
999
|
var key = name.replace(/^(ng|v|[^\_\:\.]*?)\-|^[\:\_\.]|^v\-bind\:/i, "").toLowerCase();
|
|
996
|
-
if (directives.hasOwnProperty(key) || /^([\_\:\.]|v\-bind\:)/.test(name)) {
|
|
1000
|
+
if (key.length !== name.length && directives.hasOwnProperty(key) || /^([\_\:\.]|v\-bind\:)/.test(name)) {
|
|
997
1001
|
if (value) binds[key] = value;
|
|
998
1002
|
element.removeAttribute(name);
|
|
999
1003
|
}
|