efront 4.36.1 → 4.36.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 +24 -0
- package/apps/pivot/menu.yml +1 -0
- package/apps/pivot/todo/edit.xht +38 -0
- package/apps/pivot/todo/list.xht +136 -0
- package/apps/pivot/token/list.js +1 -0
- package/coms/basic/$split.js +4 -5
- package/coms/basic/Table.js +1 -1
- package/coms/basic/cross_.js +2 -0
- package/coms/basic/data.js +280 -266
- package/coms/basic/enrich.js +2 -1
- package/coms/basic/i18n.js +6 -2
- package/coms/basic/math.js +177 -60
- package/coms/basic/math.md +26 -12
- package/coms/basic/str2array.js +1 -1
- package/coms/basic_/Promise.js +1 -1
- package/coms/compile/Html.js +1 -0
- package/coms/compile/Html_test.js +9 -1
- package/coms/compile/Program.js +1 -1
- package/coms/compile/common.js +1 -0
- package/coms/compile/polyfill.js +23 -6
- package/coms/compile//347/256/227/345/274/217.js +17 -1
- package/coms/docs/helps.js +1 -1
- package/coms/frame/top.html +1 -1
- package/coms/pivot/DB.js +51 -0
- package/coms/pivot/todo.xht +69 -0
- package/coms/reptile/cross.js +8 -9
- package/coms/reptile/window.js +0 -1
- package/coms/zimoli/autodragchildren.js +20 -12
- package/package.json +1 -1
- 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 +2 -2
package/coms/basic/enrich.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var document = this.document;
|
|
2
3
|
var bindObjK = function (obj, k, resolve, _object) {
|
|
3
4
|
Object.defineProperty(_object, k, {
|
|
4
5
|
get() {
|
|
@@ -38,4 +39,4 @@ var enrich = function enrich(obj) {
|
|
|
38
39
|
for (var k in obj) bindObjK(obj, k, resolve, _object);
|
|
39
40
|
return _object;
|
|
40
41
|
};
|
|
41
|
-
|
|
42
|
+
return enrich;
|
package/coms/basic/i18n.js
CHANGED
|
@@ -7,7 +7,10 @@ var languageMap = {};
|
|
|
7
7
|
var languageIndex = 0;
|
|
8
8
|
function i18n() {
|
|
9
9
|
var [arg] = arguments;
|
|
10
|
-
if (
|
|
10
|
+
if (arg.raw) return arg[0] + arg.slice(1).map((a, i) => {
|
|
11
|
+
return arguments[i + 1] + a;
|
|
12
|
+
}).join('');
|
|
13
|
+
if (typeof arg === 'string' || typeof arg === 'function') arg = arguments;
|
|
11
14
|
return isFinite(this) ? arg[this] : arg[languageIndex];
|
|
12
15
|
};
|
|
13
16
|
|
|
@@ -66,4 +69,5 @@ var { localStorage } = this;
|
|
|
66
69
|
var i = +localStorage?.getItem('language-index');
|
|
67
70
|
if (i >= 0) i18n.setIndex(i);
|
|
68
71
|
else i18n.setIndex(languageIndex);
|
|
69
|
-
var supports;
|
|
72
|
+
var supports;
|
|
73
|
+
module.exports = i18n;
|
package/coms/basic/math.js
CHANGED
|
@@ -106,7 +106,7 @@ var mtable = function (args, prefix, postfix) {
|
|
|
106
106
|
if (prefix) prefix = `<mo>${prefix}</mo>`;
|
|
107
107
|
if (postfix) postfix = `<mo>${postfix}</mo>`;
|
|
108
108
|
if (args.length === 1) return [prefix, args[0], postfix].join('');
|
|
109
|
-
return `${prefix}<mtable
|
|
109
|
+
return `${prefix}<mtable>${args.join("")}</mtable>${postfix}`;
|
|
110
110
|
}
|
|
111
111
|
var funcmap = {
|
|
112
112
|
"+"(...args) {
|
|
@@ -158,8 +158,8 @@ var funcmap = {
|
|
|
158
158
|
remove(m);
|
|
159
159
|
return `<mover>${A}<mo stretchy=true symmetric=true fence=true accent=true>${sp}</mo></mover>`
|
|
160
160
|
},
|
|
161
|
-
abs(
|
|
162
|
-
return
|
|
161
|
+
abs(a) {
|
|
162
|
+
return `<mo>|</mo>${a}<mo>|</mo>`;
|
|
163
163
|
},
|
|
164
164
|
log(x, n) {
|
|
165
165
|
return `<msub><mo>log</mo>${n}</msub>${x}`
|
|
@@ -186,14 +186,6 @@ var funcmap = {
|
|
|
186
186
|
Sigma: Series,
|
|
187
187
|
Series,
|
|
188
188
|
series,
|
|
189
|
-
"{"(...args) {
|
|
190
|
-
return mtable(args, '{', '');
|
|
191
|
-
// return `<mo>{</mo><mtable columnalign="left"><mtr><mtd>${args.join("</mtd></mtr><mtr><mtd>")}</mtd></mtr></mtable>`
|
|
192
|
-
},
|
|
193
|
-
"["(...args) {
|
|
194
|
-
return mtable(args, '[', ']');
|
|
195
|
-
// return `<mo>[</mo><mtable><mtr>${args.join("</mtr><mtr>")}</mtr></mtable><mo>]</mo>`;
|
|
196
|
-
},
|
|
197
189
|
'!='(...args) {
|
|
198
190
|
return mo3("≉", args);
|
|
199
191
|
},
|
|
@@ -219,7 +211,7 @@ var funcmap = {
|
|
|
219
211
|
return args.map(a => a + `<mo>!</mo>`).join('');
|
|
220
212
|
}
|
|
221
213
|
};
|
|
222
|
-
funcmap["
|
|
214
|
+
funcmap["&|"] = funcmap.abs;
|
|
223
215
|
var unary = (u, a) => `<ms>${u}</ms>${a}`;
|
|
224
216
|
var unarymap = {
|
|
225
217
|
"+"(a) {
|
|
@@ -332,7 +324,7 @@ var 希腊 = {
|
|
|
332
324
|
var lineBroken = false;
|
|
333
325
|
var br = function () {
|
|
334
326
|
lineBroken = true;
|
|
335
|
-
return '</mtd></mtr><mtr><mtd>';
|
|
327
|
+
return '</mtd></mtr><mtr><mtd style="text-align:left">';
|
|
336
328
|
};
|
|
337
329
|
var Number_isFinite = Number.isFinite;
|
|
338
330
|
var isPostFinite = function (n) {
|
|
@@ -347,6 +339,96 @@ var isFinite = function (n, post) {
|
|
|
347
339
|
if (n[".."]) return !post || isPostFinite(n);
|
|
348
340
|
return false;
|
|
349
341
|
}
|
|
342
|
+
var toCell = function (eq, k) {
|
|
343
|
+
var left, right;
|
|
344
|
+
var res = [];
|
|
345
|
+
if (eq instanceof Array) {
|
|
346
|
+
left = toString(eq[0], 0, 0);
|
|
347
|
+
right = toString(eq.slice(1), 0, 0);
|
|
348
|
+
}
|
|
349
|
+
else left = ``, right = toString(eq);
|
|
350
|
+
if (left instanceof Array) left = left.join("  ");
|
|
351
|
+
else if (right instanceof Array) right = right.join(`<mi>${k}</mi>`);
|
|
352
|
+
res.push(
|
|
353
|
+
`<mtd style="text-align:right;text-align:-webkit-right;padding-right:0;">`,
|
|
354
|
+
left,
|
|
355
|
+
`</mtd><mtd><mi>${k}</mi></mtd><mtd style="text-align:left;padding-left:0;">`,
|
|
356
|
+
right,
|
|
357
|
+
'</mtd>',
|
|
358
|
+
);
|
|
359
|
+
return res.join("");
|
|
360
|
+
};
|
|
361
|
+
var num = function (prefix, rep, dots, e, s, p, deep) {
|
|
362
|
+
prefix = String(prefix).replace(/^\-/, '–');
|
|
363
|
+
if (typeof rep === 'number') rep = String(rep);
|
|
364
|
+
if (rep && !/\./.test(prefix)) prefix += '.';
|
|
365
|
+
if (typeof e === 'number') e = String(e);
|
|
366
|
+
if (!rep) rep = '';
|
|
367
|
+
else if (rep.length === 1) {
|
|
368
|
+
rep = mdot(rep);
|
|
369
|
+
}
|
|
370
|
+
else if (rep.length >= 2) {
|
|
371
|
+
rep = mdot(rep.charAt(0)) + mn(rep.slice(1, rep.length - 1)) + mdot(rep.charAt(rep.length - 1));
|
|
372
|
+
}
|
|
373
|
+
else rep = mn(rep);
|
|
374
|
+
if (dots) dots = mn(dots);
|
|
375
|
+
else dots = '';
|
|
376
|
+
if (e) e = `<mo>×</mo><msup><mn>10</mn><mn>${String(e).replace(/^\-/, '–')}</mn></msup>`;
|
|
377
|
+
else e = '';
|
|
378
|
+
if (s) s = `<mi>${s}</mi>`;
|
|
379
|
+
else s = '';
|
|
380
|
+
prefix = mn(prefix);
|
|
381
|
+
return mrow([prefix, rep, dots, e, s].join(''), e ? p >= pmap["*"] : false, deep);
|
|
382
|
+
|
|
383
|
+
}
|
|
384
|
+
var makemap = {
|
|
385
|
+
".."(origin, p, deep) {
|
|
386
|
+
var [prefix, rep, dots, e, s] = origin;
|
|
387
|
+
return num(prefix, rep, dots, e, s, p, deep);
|
|
388
|
+
},
|
|
389
|
+
"."(origin, p, deep) {
|
|
390
|
+
var [prefix, e, s] = origin;
|
|
391
|
+
if (/[^\d]$/.test(e)) s = e, e = '';
|
|
392
|
+
return num(prefix, '', '', e, s, p, deep);
|
|
393
|
+
},
|
|
394
|
+
"@"(origin, p, deep) {
|
|
395
|
+
return mrow(tabs.circle(origin), -1, deep);
|
|
396
|
+
},
|
|
397
|
+
"$"(origin, p, deep) {
|
|
398
|
+
return mrow(tabs.roman(origin), -1, deep);
|
|
399
|
+
},
|
|
400
|
+
tab(origin, p, deep) {
|
|
401
|
+
var k = origin.shift();
|
|
402
|
+
if (!origin.length || !(k in tabs)) {
|
|
403
|
+
var args = origin.map(a => toString(a, 0, deep));
|
|
404
|
+
return mrow(`<ms>(</ms>${k}${args.length ? "<ms>,</ms>" + args.join('<ms>,</ms>') : ''}<ms>)</ms>`, -1, deep);
|
|
405
|
+
}
|
|
406
|
+
return mrow(tabs[k](...origin), -1, deep);
|
|
407
|
+
},
|
|
408
|
+
"{"(origin, p, deep) {
|
|
409
|
+
return mrow(mtable(origin.map(toRows), "{", ''), false, 0);
|
|
410
|
+
},
|
|
411
|
+
"^:"(origin, p, deep) {
|
|
412
|
+
return `<ms style="font-weight:bolder">${origin}</ms>`;
|
|
413
|
+
},
|
|
414
|
+
"["(origin, p, deep) {
|
|
415
|
+
return toMatrix(origin, '[', ']');
|
|
416
|
+
},
|
|
417
|
+
"^|"(origin, p, deep) {
|
|
418
|
+
console.log(origin);
|
|
419
|
+
if (origin instanceof Array) return toMatrix(origin, '|', '|');
|
|
420
|
+
return mrow(funcmap.abs(toString(origin[0])), false, 0);
|
|
421
|
+
},
|
|
422
|
+
};
|
|
423
|
+
var toMatrix = function (origin, prev, post) {
|
|
424
|
+
var res = origin.map(o => {
|
|
425
|
+
if (o instanceof Array) return `<mtr><mtd>${o.map(a => {
|
|
426
|
+
return toString(a);
|
|
427
|
+
}).join('</mtd><mtd>')}</mtd></mtr>`
|
|
428
|
+
return `<mtr><mtd>${toString(o)}</mtd></mtr>`;
|
|
429
|
+
});
|
|
430
|
+
return mrow(mtable(res, prev, post), false, 0);
|
|
431
|
+
}
|
|
350
432
|
function toString(obj, p, deep) {
|
|
351
433
|
if (obj instanceof Array) {
|
|
352
434
|
deep++;
|
|
@@ -367,32 +449,8 @@ function toString(obj, p, deep) {
|
|
|
367
449
|
for (var k in obj) break;
|
|
368
450
|
if (!k) return '';
|
|
369
451
|
var origin = obj[k];
|
|
370
|
-
if (k
|
|
371
|
-
|
|
372
|
-
var [prefix, e, s] = origin;
|
|
373
|
-
if (/[^\d]$/.test(e)) s = e, e = '';
|
|
374
|
-
}
|
|
375
|
-
else var [prefix, rep, dots, e, s] = origin;
|
|
376
|
-
prefix = String(prefix).replace(/^\-/, '–');
|
|
377
|
-
if (typeof rep === 'number') rep = String(rep);
|
|
378
|
-
if (rep && !/\./.test(prefix)) prefix += '.';
|
|
379
|
-
if (typeof e === 'number') e = String(e);
|
|
380
|
-
if (!rep) rep = '';
|
|
381
|
-
else if (rep.length === 1) {
|
|
382
|
-
rep = mdot(rep);
|
|
383
|
-
}
|
|
384
|
-
else if (rep.length >= 2) {
|
|
385
|
-
rep = mdot(rep.charAt(0)) + mn(rep.slice(1, rep.length - 1)) + mdot(rep.charAt(rep.length - 1));
|
|
386
|
-
}
|
|
387
|
-
else rep = mn(rep);
|
|
388
|
-
if (dots) dots = mn(dots);
|
|
389
|
-
else dots = '';
|
|
390
|
-
if (e) e = `<mo>×</mo><msup><mn>10</mn><mn>${String(e).replace(/^\-/, '–')}</mn></msup>`;
|
|
391
|
-
else e = '';
|
|
392
|
-
if (s) s = `<mi>${s}</mi>`;
|
|
393
|
-
else s = '';
|
|
394
|
-
prefix = mn(prefix);
|
|
395
|
-
return mrow([prefix, rep, dots, e, s].join(''), e ? p >= pmap["*"] : false, deep);
|
|
452
|
+
if (k in makemap) {
|
|
453
|
+
return makemap[k](origin, p, deep);
|
|
396
454
|
}
|
|
397
455
|
if (k === '**') {
|
|
398
456
|
if (origin instanceof Array) {
|
|
@@ -406,17 +464,7 @@ function toString(obj, p, deep) {
|
|
|
406
464
|
}
|
|
407
465
|
}
|
|
408
466
|
}
|
|
409
|
-
|
|
410
|
-
return mrow(tabs[k](origin), -1, deep);
|
|
411
|
-
}
|
|
412
|
-
if (k === 'tab') {
|
|
413
|
-
k = origin.shift();
|
|
414
|
-
if (!origin.length || !(k in tabs)) {
|
|
415
|
-
var args = origin.map(a => toString(a, 0, deep));
|
|
416
|
-
return mrow(`<ms>(</ms>${k}${args.length ? "<ms>,</ms>" + args.join('<ms>,</ms>') : ''}<ms>)</ms>`, -1, deep);
|
|
417
|
-
}
|
|
418
|
-
return mrow(tabs[k](...origin), -1, deep);
|
|
419
|
-
}
|
|
467
|
+
|
|
420
468
|
if (k in 三角函数) {
|
|
421
469
|
if (origin instanceof Array) {
|
|
422
470
|
var args = origin.map(a => toString(a, pmap["*"], 0));
|
|
@@ -483,25 +531,94 @@ function toString(obj, p, deep) {
|
|
|
483
531
|
return mrow(mn(obj), -1, deep);
|
|
484
532
|
}
|
|
485
533
|
if (/^[\s,;]+$/.test(obj)) {
|
|
486
|
-
obj = obj.replace(/(\r\n|\r|\n)
|
|
534
|
+
obj = obj.replace(/(\r\n|\r|\n)\s*/g, br);
|
|
487
535
|
if (lineBroken) return obj;
|
|
488
536
|
obj = obj.replace(/\s/g, ' ');
|
|
489
|
-
return `<
|
|
537
|
+
return `<ms>${obj}</ms>`;
|
|
490
538
|
}
|
|
491
539
|
if (isCap && obj.length === 1) return mrow(ms(obj), -1, deep);
|
|
492
540
|
obj = String(obj).replace(/\-/g, '–');
|
|
493
541
|
return mrow(obj ? mi(obj) : '', -1, deep);
|
|
494
542
|
}
|
|
495
|
-
function
|
|
496
|
-
if (mathObj.tagName) return mathObj;
|
|
497
|
-
lineBroken = false;
|
|
543
|
+
function toRows(args) {
|
|
498
544
|
var res = [];
|
|
499
|
-
|
|
500
|
-
|
|
545
|
+
var row = [];
|
|
546
|
+
var q = true;
|
|
547
|
+
var br = lineBroken;
|
|
548
|
+
lineBroken = false;
|
|
549
|
+
var inBlock = false;
|
|
550
|
+
var inLine = false;
|
|
551
|
+
var prevIsEqual = false;
|
|
552
|
+
var prevIsBroken = false;
|
|
553
|
+
for (var a of args) {
|
|
554
|
+
if (a instanceof Object && !(a instanceof Array)) {
|
|
555
|
+
for (var k in a) break;
|
|
556
|
+
if (pmap[k] === pmap['=']) {
|
|
557
|
+
if (row.length) {
|
|
558
|
+
if (prevIsBroken) {
|
|
559
|
+
var row1 = row.pop();
|
|
560
|
+
res.push(`<mtd style="text-align:left">`, row.join(''));
|
|
561
|
+
row1 = row1.replace(/\<mtd[^\>]*\>$/, '');
|
|
562
|
+
res.push(row1);
|
|
563
|
+
}
|
|
564
|
+
else {
|
|
565
|
+
res.push('<mtd style="text-align:left">', row.join(''), '</mtd>');
|
|
566
|
+
}
|
|
567
|
+
if (!prevIsEqual) {
|
|
568
|
+
res.push('<mtable><mtr>');
|
|
569
|
+
inBlock = true;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
prevIsEqual = true;
|
|
573
|
+
row = [];
|
|
574
|
+
var r = toCell(a[k], k);
|
|
575
|
+
res.push(r);
|
|
576
|
+
q = true;
|
|
577
|
+
continue;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
if (a instanceof Object) {
|
|
582
|
+
if (!q) row.push('<ms> </ms>');
|
|
583
|
+
if (inBlock) {
|
|
584
|
+
row.push("</mtr></mtable>");
|
|
585
|
+
inBlock = false;
|
|
586
|
+
}
|
|
587
|
+
q = false;
|
|
588
|
+
prevIsEqual = false;
|
|
589
|
+
var r = toString(a, 0, 1);
|
|
590
|
+
row.push(r);
|
|
591
|
+
}
|
|
592
|
+
else if (/^,/.test(a)) {
|
|
593
|
+
row.push('<ms>, </ms>'), q = true;
|
|
594
|
+
}
|
|
595
|
+
else if (a === ' ') {
|
|
596
|
+
row.push(`<ms> </ms>`), q = true;
|
|
597
|
+
}
|
|
598
|
+
else {
|
|
599
|
+
if (!q) row.push('<ms> </ms>');
|
|
600
|
+
var r = toString(a, 0, 1);
|
|
601
|
+
row.push(r);
|
|
602
|
+
var prevIsBroken = lineBroken && /<mtd[^\>]*>$/i.test(r);
|
|
603
|
+
if (prevIsBroken) q = true;
|
|
604
|
+
}
|
|
501
605
|
}
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
res = `<mtable style="text-align:justify"><mtr><mtd>${res}</mtd></mtr></mtable>`;
|
|
606
|
+
if (inBlock) {
|
|
607
|
+
row.push('</mtr></mtable>');
|
|
505
608
|
}
|
|
609
|
+
if (!res.length && !lineBroken) {
|
|
610
|
+
res = row.join('');
|
|
611
|
+
}
|
|
612
|
+
else {
|
|
613
|
+
if (row.length) res.push(`<mtd style="text-align:left">`, row.join(""), `</mtd>`);
|
|
614
|
+
res = `<mtr>${res.join('')}</mtr>`;
|
|
615
|
+
}
|
|
616
|
+
lineBroken = br;
|
|
617
|
+
return res;
|
|
618
|
+
};
|
|
619
|
+
function math(mathObj) {
|
|
620
|
+
if (mathObj.tagName) return mathObj;
|
|
621
|
+
var res = toRows(arguments);
|
|
622
|
+
if (/^\<mtr/.test(res)) res = `<mtable>${res}</mtable>`;
|
|
506
623
|
return `<math>${res}</math>`;
|
|
507
624
|
}
|
package/coms/basic/math.md
CHANGED
|
@@ -64,20 +64,14 @@ math`S=sqrt(p*(p-a)*(p-b)*(p-c))`
|
|
|
64
64
|
* 加减,正负,
|
|
65
65
|
```mathscript
|
|
66
66
|
a +- 2;
|
|
67
|
-
a -+ 2;
|
|
68
67
|
+-a;
|
|
69
|
-
-+a;
|
|
70
68
|
// 分开写将识别为运算符加正负号
|
|
71
69
|
a + -2;
|
|
72
|
-
a - +2;
|
|
73
70
|
```
|
|
74
71
|
```math
|
|
75
72
|
a +- 2;
|
|
76
|
-
a -+ 2;
|
|
77
73
|
+-a;
|
|
78
|
-
-+a;
|
|
79
74
|
a + -2;
|
|
80
|
-
a - +2;
|
|
81
75
|
```
|
|
82
76
|
* 乘法
|
|
83
77
|
```mathscript
|
|
@@ -105,12 +99,20 @@ mul(a,b),Mul(a,b),MUL(a,b)
|
|
|
105
99
|
```
|
|
106
100
|
* 分数
|
|
107
101
|
```mathscript
|
|
108
|
-
|
|
109
|
-
|
|
102
|
+
分子/分母
|
|
103
|
+
1/(2/3),1/2/3;
|
|
104
|
+
例: 计算 1/2+(1/3)*(3/4);
|
|
105
|
+
解: 原式=1/2+1/4;
|
|
106
|
+
= 2/4+1/4;
|
|
107
|
+
= 3/4;
|
|
110
108
|
```
|
|
111
109
|
```math
|
|
112
110
|
分子/分母
|
|
113
|
-
|
|
111
|
+
1/(2/3),1/2/3;
|
|
112
|
+
例: 计算 1/2+(1/3)*(3/4);
|
|
113
|
+
解: 原式=1/2+1/4;
|
|
114
|
+
= 2/4+1/4;
|
|
115
|
+
= 3/4;
|
|
114
116
|
```
|
|
115
117
|
* 以除号表示除法
|
|
116
118
|
```mathscript
|
|
@@ -121,6 +123,7 @@ mul(a,b),Mul(a,b),MUL(a,b)
|
|
|
121
123
|
```
|
|
122
124
|
* 绝对值
|
|
123
125
|
```mathscript
|
|
126
|
+
// 内部是数值或运算结果为数值
|
|
124
127
|
|a|;
|
|
125
128
|
|1+|a||*2;
|
|
126
129
|
```
|
|
@@ -130,10 +133,20 @@ mul(a,b),Mul(a,b),MUL(a,b)
|
|
|
130
133
|
```
|
|
131
134
|
* 行列式
|
|
132
135
|
```mathscript
|
|
136
|
+
|[1,2,3,4;5,6,7,8]|;
|
|
133
137
|
|1,2,3,4;5,6,7,8|;
|
|
138
|
+
// 一阶行列式不可去掉中括号,否则识别为绝对值
|
|
139
|
+
|[1]|;// 这种写法识别为一阶行列式
|
|
140
|
+
一阶行列式与绝对值对比:
|
|
141
|
+
|[1]|,|1|;
|
|
134
142
|
```
|
|
135
143
|
```math
|
|
144
|
+
|[1,2,3,4;5,6,7,8]|;
|
|
136
145
|
|1,2,3,4;5,6,7,8|;
|
|
146
|
+
// 一阶行列式不可去掉中括号,否则识别为绝对值
|
|
147
|
+
|[1]|;// 这种写法识别为一阶行列式
|
|
148
|
+
一阶行列式与绝对值对比:
|
|
149
|
+
|[1]|,|1|;
|
|
137
150
|
```
|
|
138
151
|
* 阶乘: n!
|
|
139
152
|
```mathscript
|
|
@@ -355,13 +368,14 @@ Series(公式主体,n=1,+Infinity)
|
|
|
355
368
|
{
|
|
356
369
|
a+1=b;
|
|
357
370
|
a+b**2=3;
|
|
358
|
-
}
|
|
371
|
+
};
|
|
372
|
+
|
|
359
373
|
```
|
|
360
374
|
* 标号
|
|
361
375
|
```mathscript
|
|
362
376
|
tab(1); // 带小括号的数字
|
|
363
377
|
@1,@2,@3,@4,@20,@50; // 带圆圈的数字
|
|
364
|
-
$1,$2,$3,$4,$5,$
|
|
378
|
+
$1,$2,$3,$4,$5,$38; //罗马数字
|
|
365
379
|
{// 方程组中使用
|
|
366
380
|
x+y=10, @1;
|
|
367
381
|
x*y=25, @2;
|
|
@@ -370,7 +384,7 @@ Series(公式主体,n=1,+Infinity)
|
|
|
370
384
|
```math
|
|
371
385
|
tab(1); // 带小括号的数字
|
|
372
386
|
@1,@2,@3,@4,@20,@50; // 带圆圈的数字
|
|
373
|
-
$1,$2,$3,$4,$5,$
|
|
387
|
+
$1,$2,$3,$4,$5,$38; //罗马数字
|
|
374
388
|
{// 方程组中使用
|
|
375
389
|
x+y=10, @1;
|
|
376
390
|
x*y=25, @2;
|
package/coms/basic/str2array.js
CHANGED
package/coms/basic_/Promise.js
CHANGED
package/coms/compile/Html.js
CHANGED
|
@@ -46,4 +46,12 @@ test(`<meta charset="utf-8" />`);
|
|
|
46
46
|
test('a><a></a>', 'a > <a></a>');
|
|
47
47
|
test('X', 'X');
|
|
48
48
|
test('<input -class="{actived:actived===f}"/>', 'scoped.envs.actived', true);
|
|
49
|
-
test('<i>>_</i>', '<i>>_</i>');
|
|
49
|
+
test('<i>>_</i>', '<i>>_</i>');
|
|
50
|
+
test('<i -src="[f,data]"></i>', 'scoped.envs', {
|
|
51
|
+
f: true,
|
|
52
|
+
data: true
|
|
53
|
+
});
|
|
54
|
+
test('<i -src=[f,data]></i>', 'scoped.envs', {
|
|
55
|
+
f: true,
|
|
56
|
+
data: true
|
|
57
|
+
});
|
package/coms/compile/Program.js
CHANGED
|
@@ -1086,7 +1086,7 @@ class Program {
|
|
|
1086
1086
|
push_stamp();
|
|
1087
1087
|
}
|
|
1088
1088
|
var last = queue.last;
|
|
1089
|
-
if (last && last.type & ~(STAMP | STRAP) && !last.ion) {
|
|
1089
|
+
if (last && last.type & ~(STAMP | STRAP | LABEL | PROPERTY) && !last.ion) {
|
|
1090
1090
|
if (last.isExpress && !last.istype) break scope;
|
|
1091
1091
|
}
|
|
1092
1092
|
}
|
package/coms/compile/common.js
CHANGED
package/coms/compile/polyfill.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
var { SCOPED } = require("./common");
|
|
2
2
|
var backEach = require("../basic/backEach");
|
|
3
|
-
|
|
4
|
-
var polyfills = Object.assign(Object.create(null), {
|
|
3
|
+
var Object_polyfills = Object.assign(Object.create(null), {
|
|
5
4
|
"Object.assign": '&extend'
|
|
6
5
|
});
|
|
7
|
-
var
|
|
6
|
+
var Object_polyfill = function (o, i, used) {
|
|
8
7
|
var v = o.text;
|
|
9
|
-
if (v in
|
|
10
|
-
var p =
|
|
8
|
+
if (v in Object_polyfills) {
|
|
9
|
+
var p = Object_polyfills[v];
|
|
11
10
|
var n = o.next;
|
|
12
11
|
if (n && n.type === SCOPED && n.entry === '(') {
|
|
13
12
|
if (!this.used[p]) {
|
|
@@ -20,12 +19,30 @@ var polyfill = function (o, i, used) {
|
|
|
20
19
|
}
|
|
21
20
|
}
|
|
22
21
|
};
|
|
22
|
+
var Date_polyfill = function (o, i, used) {
|
|
23
|
+
var v = o.text;
|
|
24
|
+
if (v !== 'Date') return
|
|
25
|
+
var n = o.next;
|
|
26
|
+
if (!n || n.type !== SCOPED || n.entry !== "(") return;
|
|
27
|
+
var f = n.first;
|
|
28
|
+
if (!f || f !== n.last || f.type !== QUOTED || f.length) return;
|
|
29
|
+
var dateString = strings.decode(f.text);
|
|
30
|
+
var dateTime = +new Date(dateString);
|
|
31
|
+
if (Number.isFinite(dateTime)) {
|
|
32
|
+
f.type = VALUE;
|
|
33
|
+
f.isdigit = true;
|
|
34
|
+
f.text = String(dateTime);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
23
37
|
|
|
24
38
|
module.exports = function (body) {
|
|
25
39
|
var envs = body.envs;
|
|
26
40
|
if (envs.Object) {
|
|
27
|
-
backEach(body.used.Object,
|
|
41
|
+
backEach(body.used.Object, Object_polyfill, body);
|
|
28
42
|
if (!body.used.Object.length) delete body.used.Object, delete body.envs.Object;
|
|
29
43
|
}
|
|
44
|
+
if (envs.Date) {
|
|
45
|
+
backEach(body.used.Date, Date_polyfill, body);
|
|
46
|
+
}
|
|
30
47
|
return body;
|
|
31
48
|
}
|
|
@@ -261,7 +261,19 @@ var toFlat = function (exp) {
|
|
|
261
261
|
left.push(make("{", null, getRows(e)));
|
|
262
262
|
}
|
|
263
263
|
else if (e.entry === '|') {
|
|
264
|
-
|
|
264
|
+
var f = e.first;
|
|
265
|
+
if (f.type === SCOPED && f === e.last) {
|
|
266
|
+
left.push({ "^|": getRows(f) });
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
var args = getRows(e);
|
|
270
|
+
if (args.length === 1 && !(args[0] instanceof Array)) {
|
|
271
|
+
left.push(make("&|", args[0]));
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
left.push(make("^|", args));
|
|
275
|
+
}
|
|
276
|
+
}
|
|
265
277
|
}
|
|
266
278
|
}
|
|
267
279
|
else {
|
|
@@ -323,6 +335,10 @@ var toFlat = function (exp) {
|
|
|
323
335
|
if (e.type === QUOTED) {
|
|
324
336
|
text = strings.decode(text);
|
|
325
337
|
}
|
|
338
|
+
if (e.type === LABEL) {
|
|
339
|
+
left.push({ "^:": text });
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
326
342
|
left.push(text);
|
|
327
343
|
}
|
|
328
344
|
}
|
package/coms/docs/helps.js
CHANGED
package/coms/frame/top.html
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
↻
|
|
13
13
|
</btn>
|
|
14
14
|
<btn class="menu-item" @title="option.name" ng-click="open(option)" ng-repeat="option in options" pop>
|
|
15
|
-
<i class="fa" ng-class="option.icon"></i>
|
|
15
|
+
<i class="fa" ng-class="option.icon" -bind="option.sign"></i>
|
|
16
16
|
<span class="badge" ng-if="option.tip" ng-bind="option.tip"></span>
|
|
17
17
|
</btn>
|
|
18
18
|
</div>
|
package/coms/pivot/DB.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
var bind = function (hostname) {
|
|
2
|
+
var host = parseURL(hostname);
|
|
3
|
+
var obj = parseURL(location.href);
|
|
4
|
+
host = (host.protocol || obj.protocol) + '//' + (host.host || obj.host) + "/";
|
|
5
|
+
var dbbase = k => host + k;
|
|
6
|
+
// <!--
|
|
7
|
+
dbbase = k => host + k;
|
|
8
|
+
// -->
|
|
9
|
+
var api = {
|
|
10
|
+
headers: {
|
|
11
|
+
authorization: ''
|
|
12
|
+
},
|
|
13
|
+
base: host,
|
|
14
|
+
};
|
|
15
|
+
host += '/';
|
|
16
|
+
var cross = data.cross;
|
|
17
|
+
var DB = function (type, id) {
|
|
18
|
+
var url = dbbase(type);
|
|
19
|
+
if (id) url += '/' + id;
|
|
20
|
+
return cross("get", url, null, api);
|
|
21
|
+
};
|
|
22
|
+
DB.load = function (type, size, idstart) {
|
|
23
|
+
return DB(`${idstart || ''},${size},`);
|
|
24
|
+
};
|
|
25
|
+
DB.info = function (type) {
|
|
26
|
+
return DB(type);
|
|
27
|
+
};
|
|
28
|
+
DB.save = function (type, data) {
|
|
29
|
+
return data.id ? DB.update(type, data) : DB.create(type, data);
|
|
30
|
+
}
|
|
31
|
+
DB.create = function (type, data) {
|
|
32
|
+
return cross("put", dbbase(type) + "/", data, api);
|
|
33
|
+
};
|
|
34
|
+
DB.update = function (type, data) {
|
|
35
|
+
return cross("post", dbbase(type) + "/" + data.id, data, api);
|
|
36
|
+
};
|
|
37
|
+
DB.delete = function (type, data) {
|
|
38
|
+
return cross('delete', dbbase(type) + '/' + data.id, data, api);
|
|
39
|
+
};
|
|
40
|
+
DB.search = function (type, searchObj, size = 20, searchtext, searchstart) {
|
|
41
|
+
if (searchObj) searchObj = "?" + serialize(searchObj);
|
|
42
|
+
return DB(type, `${searchstart || ''},${size},${searchtext}${searchObj || ''}`);
|
|
43
|
+
};
|
|
44
|
+
DB.query = function (type, queryObj, size = 100, queryStart) {
|
|
45
|
+
return DB.search(type, queryObj, size, '', queryStart);
|
|
46
|
+
};
|
|
47
|
+
return DB;
|
|
48
|
+
};
|
|
49
|
+
var db = bind(location.host || location.href);
|
|
50
|
+
db.rebind = bind;
|
|
51
|
+
return db;
|