efront 4.21.4 → 4.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/#/345/233/275/351/231/205/345/214/226.yml +24 -0
- package/apps/blank/index.html +1 -1
- package/apps/index.jsp +76 -27
- package/apps/pay/alipay-query.jsp +1 -1
- package/apps/pay/alipay.jsp +1 -1
- package/apps/pivot/auth/login.js +2 -2
- package/apps/pivot/cert/main.xht +18 -5
- package/apps/pivot/db/act.xht +53 -0
- package/apps/pivot/db/config.xht +56 -16
- package/apps/pivot/home/welcome.html +12 -13
- package/apps/pivot/home/welcome.js +6 -6
- package/apps/pivot/home/welcome.less +12 -3
- package/apps/pivot/link/room.js +1 -1
- package/apps/pivot/main.js +3 -2
- package/apps/pivot/task/invoke.js +3 -3
- package/apps/pivot/task/rsync.js +2 -2
- package/apps/pivot/wow/root.js +8 -8
- package/coms/basic/#loader.js +9 -8
- package/coms/basic/Item.js +2 -2
- package/coms/basic/Tree.js +14 -2
- package/coms/basic/crc.js +5 -1
- package/coms/basic/cross_.js +2 -2
- package/coms/basic/decode62S.js +44 -0
- package/coms/basic/encode62S.js +40 -0
- package/coms/basic/encode62S_test.js +18 -0
- package/coms/basic/enrich.js +6 -1
- package/coms/basic/refilm_decode.js +40 -20
- package/coms/basic/refilm_decode_test.js +4 -0
- package/coms/basic/valid.js +4 -0
- package/coms/basic_/&Array.js +64 -49
- package/coms/basic_/&extends.js +9 -2
- package/coms/compile/Javascript.js +1 -1
- package/coms/compile/audit.js +23 -1
- package/coms/compile/cloneNode.js +3 -1
- package/coms/compile/downLevel.js +21 -11
- package/coms/compile/downLevel_test.js +52 -14
- package/coms/compile/rescan.js +8 -2
- package/coms/compile/unstruct.js +9 -9
- package/coms/crypt/encode62.js +36 -6
- package/coms/crypt/encode62_test.js +8 -48
- package/coms/explorer/main.less +1 -5
- package/coms/frame/chat.js +2 -2
- package/coms/frame/left.html +5 -4
- package/coms/frame/left.js +1 -0
- package/coms/frame/left.less +5 -3
- package/coms/frame/payment.js +2 -2
- package/coms/pivot/acme2.js +7 -4
- package/coms/pivot/left-footer.xht +25 -0
- package/coms/pivot/pedit.js +3 -3
- package/coms/pivot/plist.js +2 -2
- package/coms/pivot/qrcode.xht +3 -0
- package/coms/zimoli/XMLHttpRequest.js +2 -2
- package/coms/zimoli/container.js +34 -34
- package/coms/zimoli/design.html +6 -13
- package/coms/zimoli/design.js +49 -13
- package/coms/zimoli/design.less +62 -25
- package/coms/zimoli/drag.js +8 -3
- package/coms/zimoli/encode62.js +40 -12
- package/coms/zimoli/lattice.js +0 -1
- package/coms/zimoli/list.js +0 -8
- package/coms/zimoli/menu.js +29 -5
- package/coms/zimoli/model.js +150 -195
- package/coms/zimoli/model.less +4 -8
- package/coms/zimoli/on.js +14 -12
- package/coms/zimoli/padding.less +1 -0
- package/coms/zimoli/progbar.xht +9 -8
- package/coms/zimoli/prompt.less +0 -3
- package/coms/zimoli/render.js +210 -125
- package/coms/zimoli/select.js +9 -4
- package/coms/zimoli/select.less +3 -14
- package/coms/zimoli/selectList.js +5 -1
- package/coms/zimoli/selectList.less +3 -0
- package/coms/zimoli/table.html +7 -7
- package/coms/zimoli/table.js +12 -9
- package/coms/zimoli/table.less +5 -0
- package/coms/zimoli/user.js +2 -2
- package/coms/zimoli/view.js +3 -4
- package/coms/zimoli/watch.js +3 -1
- package/coms/zimoli/zimoli.js +6 -2
- package/coms//350/214/250/350/217/260/tab.js +26 -2
- package/coms//350/214/250/350/217/260//346/240/207/347/255/276/345/214/226.js +1 -1
- package/coms//350/214/250/350/217/260//347/274/226/350/276/221/346/241/206.xht +183 -20
- package/docs//345/267/245/345/205/267//345/233/275/351/231/205/345/214/226.xht +1 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/zimoli/render.js
CHANGED
|
@@ -35,7 +35,7 @@ var createTemplateNodes = function (text) {
|
|
|
35
35
|
this.with = Array.apply(null, node.childNodes);
|
|
36
36
|
}
|
|
37
37
|
appendChild.after(this, this.with);
|
|
38
|
-
this.with =
|
|
38
|
+
this.with = render(this.with, this.$scope, this.$parentScopes, this.$renderid !== 9);
|
|
39
39
|
};
|
|
40
40
|
presets.template = function (t) {
|
|
41
41
|
var comment = document.createComment('template');
|
|
@@ -52,7 +52,9 @@ presets.template = function (t) {
|
|
|
52
52
|
}
|
|
53
53
|
return comment;
|
|
54
54
|
};
|
|
55
|
-
|
|
55
|
+
// <!--
|
|
56
|
+
window.renderElements = renderElements;
|
|
57
|
+
// -->
|
|
56
58
|
var renderidOffset = 10;
|
|
57
59
|
var renderidClosed = 0;
|
|
58
60
|
var addRenderElement = function () {
|
|
@@ -63,7 +65,7 @@ var addRenderElement = function () {
|
|
|
63
65
|
if (element.$renderid < 10 && element.$renderid > 0) element.$renderid = ++renderidOffset;
|
|
64
66
|
renderElements[element.$renderid] = element;
|
|
65
67
|
}
|
|
66
|
-
|
|
68
|
+
buildFirst(element);
|
|
67
69
|
};
|
|
68
70
|
var removeRenderElement = function () {
|
|
69
71
|
var element = this;
|
|
@@ -88,25 +90,53 @@ function refresh(root) {
|
|
|
88
90
|
}
|
|
89
91
|
}
|
|
90
92
|
}
|
|
93
|
+
callDigest();
|
|
91
94
|
if (rest.length) rest.forEach(a => removeRenderElement.call(a));
|
|
92
95
|
}
|
|
93
|
-
function
|
|
96
|
+
function fireChanges(element, changes) {
|
|
97
|
+
var event = createEvent('changes');
|
|
98
|
+
event.changes = changes;
|
|
99
|
+
dispatch(event, element);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function buildFirst(element) {
|
|
103
|
+
rebuild(element, '$ready' in element);
|
|
104
|
+
}
|
|
105
|
+
var digests = [];
|
|
106
|
+
function callDigest() {
|
|
107
|
+
var d = digests;
|
|
108
|
+
digests = [];
|
|
109
|
+
d.forEach(a => {
|
|
110
|
+
a.$digest();
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
function getWatchData(element) {
|
|
114
|
+
var { $watches } = element;
|
|
115
|
+
var props = {};
|
|
116
|
+
for (var key in $watches) {
|
|
117
|
+
var data = element[key];
|
|
118
|
+
props[key] = isObject(data) && !isFunction(data) && !isDate(data) && !isNode(data) ? extend(data instanceof Array ? [] : {}, data) : data;
|
|
119
|
+
}
|
|
120
|
+
return props;
|
|
121
|
+
}
|
|
122
|
+
function rebuild(element, isFirstRender) {
|
|
123
|
+
if (isFirstRender) delete element.$ready;
|
|
124
|
+
if (element.$digest) digests.push(element);
|
|
94
125
|
if (!element.$needchanges) {
|
|
95
126
|
element.$renders.forEach(a => a.call(element));
|
|
96
127
|
return;
|
|
97
128
|
}
|
|
98
|
-
var props = {};
|
|
99
|
-
Object.keys(element).forEach(function (key) {
|
|
100
|
-
var data = element[key];
|
|
101
|
-
props[key] = isObject(data) && !isFunction(data) && !isDate(data) && !isNode(data) ? extend(data instanceof Array ? [] : {}, data) : data;
|
|
102
|
-
});
|
|
129
|
+
var props = getWatchData(isFirstRender ? { $watches: element.$watches } : element);
|
|
103
130
|
element.$renders.forEach(a => a.call(element));
|
|
104
|
-
var
|
|
105
|
-
|
|
106
|
-
var
|
|
107
|
-
|
|
108
|
-
|
|
131
|
+
var capture = null;
|
|
132
|
+
for (var k in props) {
|
|
133
|
+
var current = element[k];
|
|
134
|
+
var previous = props[k];
|
|
135
|
+
if (shallowEqual(current, previous)) continue;
|
|
136
|
+
if (!capture) capture = {};
|
|
137
|
+
capture[k] = { current, previous };
|
|
109
138
|
}
|
|
139
|
+
if (capture) fireChanges(element, capture);
|
|
110
140
|
}
|
|
111
141
|
var variableReg = /([^\:\,\+\=\-\!%\^\|\/\&\*\!\;\?\>\<~\{\}\s\[\]\(\)]|\?\s*\.(?=[^\d])|\s*\.\s*)+/g;
|
|
112
142
|
var variableOnlyReg = new RegExp(`^${variableReg.source}$`);
|
|
@@ -474,18 +504,42 @@ var createMapper = function (write, mapper) {
|
|
|
474
504
|
});
|
|
475
505
|
}
|
|
476
506
|
}
|
|
507
|
+
|
|
508
|
+
class Binder {
|
|
509
|
+
constructor(getter, write) {
|
|
510
|
+
this.gt = getter;
|
|
511
|
+
this.st = write;
|
|
512
|
+
}
|
|
513
|
+
call(elem) {
|
|
514
|
+
var value = this.gt.call(elem);
|
|
515
|
+
var oldv = elem.$value;
|
|
516
|
+
if (shallowEqual(oldv, value)) return;
|
|
517
|
+
elem.$value = value;
|
|
518
|
+
if (!isHandled(value)) value = '';
|
|
519
|
+
this.st.call(elem, value, oldv);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
class Binder2 {
|
|
523
|
+
constructor(getter, write, oldValue) {
|
|
524
|
+
this.get = getter;
|
|
525
|
+
this.set = write;
|
|
526
|
+
this.value = oldValue;
|
|
527
|
+
}
|
|
528
|
+
call(elem) {
|
|
529
|
+
var value = this.get.call(elem);
|
|
530
|
+
var oldv = this.value;
|
|
531
|
+
if (shallowEqual(oldv, value)) return;
|
|
532
|
+
this.value = value;
|
|
533
|
+
if (!isHandled(value)) value = '';
|
|
534
|
+
this.set.call(elem, value, oldv);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
|
|
477
538
|
var createBinder2 = function (write, read) {
|
|
478
539
|
return function (search) {
|
|
479
540
|
var getter = createGetter(this, search);
|
|
480
541
|
var oldValue = isFunction(read) ? read(this) : undefined;
|
|
481
|
-
this.$renders.push(
|
|
482
|
-
var value = getter(this);
|
|
483
|
-
if (shallowEqual(value, oldValue)) return;
|
|
484
|
-
var oldv = oldValue;
|
|
485
|
-
oldValue = value;
|
|
486
|
-
if (!isHandled(value)) value = '';
|
|
487
|
-
write(this, value, oldv);
|
|
488
|
-
});
|
|
542
|
+
this.$renders.push(new Binder2(getter, write, oldValue));
|
|
489
543
|
};
|
|
490
544
|
}
|
|
491
545
|
|
|
@@ -507,43 +561,98 @@ var src2 = function (search) {
|
|
|
507
561
|
cast(this, origin);
|
|
508
562
|
});
|
|
509
563
|
}
|
|
510
|
-
|
|
564
|
+
var gtValue = function () { return this.value };
|
|
565
|
+
var stValue = function (v) { this.value = v };
|
|
566
|
+
var gtChecked = function () { return this.checked };
|
|
567
|
+
var stChecked = function (v) { this.checked = v };
|
|
568
|
+
var gtHtml = function () { return this.innerHTML };
|
|
569
|
+
var stHtml = function (v) { this.innerHTML = v };
|
|
570
|
+
class Model {
|
|
571
|
+
constructor(getScope, setScope, target) {
|
|
572
|
+
this.gs = getScope;
|
|
573
|
+
this.ss = setScope;
|
|
574
|
+
var getValue = target.getValue;
|
|
575
|
+
var setValue = target.setValue;
|
|
576
|
+
if (getValue && setValue);
|
|
577
|
+
else if (("value" in target || target.getValue instanceof Function) && target.setValue instanceof Function) {
|
|
578
|
+
if (!getValue) getValue = gtValue;
|
|
579
|
+
if (!setValue) setValue = stValue;
|
|
580
|
+
} else if (/^input$/i.test(target.tagName) && /^checkbox$/i.test(target.type) || /^checkbox$/i.test(target.tagName)) {
|
|
581
|
+
if (!getValue) getValue = gtChecked;
|
|
582
|
+
if (!setValue) setValue = stChecked;
|
|
583
|
+
} else if (/^(select|input|textarea)$/i.test(target.tagName) || "value" in target) {
|
|
584
|
+
if (!getValue) getValue = gtValue;
|
|
585
|
+
if (!setValue) setValue = stValue;
|
|
586
|
+
} else {
|
|
587
|
+
if (!getValue) getValue = gtHtml;
|
|
588
|
+
if (!setValue) setValue = stHtml;
|
|
589
|
+
}
|
|
590
|
+
this.gv = getValue;
|
|
591
|
+
this.sv = setValue;
|
|
592
|
+
this.target = target;
|
|
593
|
+
}
|
|
594
|
+
call(elem) {
|
|
595
|
+
var value = this.gv.call(elem);
|
|
596
|
+
if (value === this.value) {
|
|
597
|
+
return;
|
|
598
|
+
}
|
|
599
|
+
this.ss.call(this.target, value);
|
|
600
|
+
this.value = value;
|
|
601
|
+
this.bd.value = this.gs.call(this.target, value);
|
|
602
|
+
userChanged = true;
|
|
603
|
+
}
|
|
604
|
+
hook(elem, emit) {
|
|
605
|
+
var binder = new Binder2(this.gs, this.target !== elem ? this.sv.bind(this.target) : this.sv);
|
|
606
|
+
elem.$renders.push(binder);
|
|
607
|
+
binder.call(elem);
|
|
608
|
+
this.bd = binder;
|
|
609
|
+
if (emit) {
|
|
610
|
+
eventsBinders.forEach(on => on(this.target, this, true));
|
|
611
|
+
this.value = this.gv.call(elem);
|
|
612
|
+
this.target = elem;
|
|
613
|
+
}
|
|
614
|
+
return binder;
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
var createSetter = function (elem, search) {
|
|
618
|
+
return $$eval.bind(elem, search + "=arguments[2]", getScopeList(elem), elem);
|
|
619
|
+
};
|
|
511
620
|
var directives = {
|
|
512
|
-
text: createBinder2(function (
|
|
621
|
+
text: createBinder2(function (value) {
|
|
513
622
|
if (isNode(value) || isArray(value)) {
|
|
514
|
-
if (value !==
|
|
515
|
-
remove(
|
|
516
|
-
appendChild(
|
|
623
|
+
if (value !== this.firstChild) {
|
|
624
|
+
remove(this.childNodes);
|
|
625
|
+
appendChild(this, value);
|
|
517
626
|
}
|
|
518
627
|
}
|
|
519
628
|
else {
|
|
520
|
-
|
|
629
|
+
this.innerText = value;
|
|
521
630
|
}
|
|
522
631
|
}),
|
|
523
|
-
html: createBinder2(function (
|
|
632
|
+
html: createBinder2(function (value) {
|
|
524
633
|
if (isNode(value) || isArray(value)) {
|
|
525
|
-
if (value !==
|
|
526
|
-
remove(
|
|
527
|
-
appendChild(
|
|
634
|
+
if (value !== this.firstChild) {
|
|
635
|
+
remove(this.childNodes);
|
|
636
|
+
appendChild(this, value);
|
|
528
637
|
}
|
|
529
638
|
}
|
|
530
639
|
else {
|
|
531
|
-
|
|
640
|
+
this.innerHTML = value;
|
|
532
641
|
}
|
|
533
642
|
}),
|
|
534
|
-
hide: createBinder2(function (
|
|
643
|
+
hide: createBinder2(function (value) {
|
|
535
644
|
var display = value ? 'none' : '';
|
|
536
|
-
var style =
|
|
645
|
+
var style = this.style;
|
|
537
646
|
if (style.display !== display) style.display = display;
|
|
538
|
-
}, function (
|
|
539
|
-
return
|
|
647
|
+
}, function () {
|
|
648
|
+
return this.style.display === 'none';
|
|
540
649
|
}),
|
|
541
|
-
show: createBinder2(function (
|
|
650
|
+
show: createBinder2(function (value) {
|
|
542
651
|
var display = value ? '' : 'none';
|
|
543
|
-
var style =
|
|
652
|
+
var style = this.style;
|
|
544
653
|
if (style.display !== display) style.display = display;
|
|
545
|
-
}, function (
|
|
546
|
-
return
|
|
654
|
+
}, function () {
|
|
655
|
+
return this.style.display !== 'none';
|
|
547
656
|
}),
|
|
548
657
|
style: createMapper(css, css.styleToMap),
|
|
549
658
|
class: createMapper(addClass, addClass.classToMap),
|
|
@@ -553,54 +662,9 @@ var directives = {
|
|
|
553
662
|
},
|
|
554
663
|
model(search, target, change) {
|
|
555
664
|
var getter = createGetter(this, search);
|
|
556
|
-
var
|
|
557
|
-
var
|
|
558
|
-
|
|
559
|
-
var value = getter(this);
|
|
560
|
-
if (value === undefined) value = "";
|
|
561
|
-
if (deepEqual(oldValue, value)) return;
|
|
562
|
-
oldValue = value;
|
|
563
|
-
this.setValue(value);
|
|
564
|
-
} : null;
|
|
565
|
-
var setter2 = function (key) {
|
|
566
|
-
var value = getter(this);
|
|
567
|
-
if (value === undefined) value = "";
|
|
568
|
-
if (deepEqual(oldValue, value)) return;
|
|
569
|
-
oldValue = value;
|
|
570
|
-
this[key] = value;
|
|
571
|
-
};
|
|
572
|
-
if (("value" in target || target.getValue instanceof Function) && target.setValue instanceof Function) {
|
|
573
|
-
this.$renders.push(setter);
|
|
574
|
-
var change = getstr || "this.value";
|
|
575
|
-
} else if (/^input$/i.test(target.tagName) && /^checkbox$/i.test(target.type) || /^checkbox$/i.test(target.tagName)) {
|
|
576
|
-
this.$renders.push(setter || setter2.bind(target, 'checked'));
|
|
577
|
-
var change = getstr || "this.checked";
|
|
578
|
-
} else if (/^(select|input|textarea)$/i.test(target.tagName) || "value" in target) {
|
|
579
|
-
this.$renders.push(setter || setter2.bind(target, 'value'));
|
|
580
|
-
var change = getstr || "this.value";
|
|
581
|
-
} else {
|
|
582
|
-
this.$renders.push(setter || function () {
|
|
583
|
-
var value = getter(this);
|
|
584
|
-
if (value === undefined) value = "";
|
|
585
|
-
if (deepEqual(oldValue, value)) return;
|
|
586
|
-
oldValue = value;
|
|
587
|
-
if (html(this) !== value) html(this, value);
|
|
588
|
-
});
|
|
589
|
-
var change = getstr || "'value' in this?this.value:this.innerHTML";
|
|
590
|
-
}
|
|
591
|
-
if (change === false) return;
|
|
592
|
-
setter2 = null;
|
|
593
|
-
var changeme = $$eval.bind(this, search + "=" + change, getScopeList(this));
|
|
594
|
-
var onchange = function () {
|
|
595
|
-
changeme(this);
|
|
596
|
-
var value = getter(this);
|
|
597
|
-
if (value === oldValue) {
|
|
598
|
-
return;
|
|
599
|
-
}
|
|
600
|
-
oldValue = value;
|
|
601
|
-
userChanged = true;
|
|
602
|
-
};
|
|
603
|
-
eventsBinders.forEach(on => on(target, onchange, true));
|
|
665
|
+
var setter = createSetter(this, search);
|
|
666
|
+
var model = new Model(getter, setter, target);
|
|
667
|
+
model.hook(this, change !== false ? target : null);
|
|
604
668
|
},
|
|
605
669
|
value(search, target) {
|
|
606
670
|
directives.model.call(this, search, target, false);
|
|
@@ -622,7 +686,7 @@ var binders = {
|
|
|
622
686
|
if (this[attr] !== value) {
|
|
623
687
|
this[attr] = this[attr.replace(/\-[a-z]/g, a => a.toUpperCase())] = value;
|
|
624
688
|
}
|
|
625
|
-
}
|
|
689
|
+
};
|
|
626
690
|
this.$renders.push(hook);
|
|
627
691
|
return hook;
|
|
628
692
|
},
|
|
@@ -737,14 +801,11 @@ function renderProp(elem, props) {
|
|
|
737
801
|
|
|
738
802
|
function renderBinds(element, binds, init) {
|
|
739
803
|
var bind = binders._;
|
|
740
|
-
var hs = [];
|
|
741
804
|
for (var k in binds) {
|
|
742
|
-
if (k === 'src') continue;
|
|
743
805
|
if (directives.hasOwnProperty(k)) continue;
|
|
744
806
|
var h = bind.call(element, k, binds[k]);
|
|
745
|
-
|
|
807
|
+
h.call(element);
|
|
746
808
|
}
|
|
747
|
-
return hs;
|
|
748
809
|
}
|
|
749
810
|
|
|
750
811
|
function renderRest(element, struct, replacer = element) {
|
|
@@ -756,14 +817,25 @@ function renderRest(element, struct, replacer = element) {
|
|
|
756
817
|
}
|
|
757
818
|
element.$renders = [];
|
|
758
819
|
var { attrs, binds } = struct;
|
|
759
|
-
|
|
760
|
-
|
|
820
|
+
var bindWatch = !!element.$needchanges;
|
|
821
|
+
for (var k in binds) {
|
|
822
|
+
if (k in directives) {
|
|
823
|
+
if (k !== 'src') directives[k].call(element, binds[k], replacer);
|
|
824
|
+
}
|
|
825
|
+
else {
|
|
826
|
+
if (element !== replacer) replacer[k] = element[k];
|
|
827
|
+
if (bindWatch) {
|
|
828
|
+
var watches = element.$watches;
|
|
829
|
+
if (!watches) watches = element.$watches = {};
|
|
830
|
+
if (!watches[k]) watches[k] = true;
|
|
831
|
+
}
|
|
832
|
+
}
|
|
761
833
|
}
|
|
762
834
|
for (var k in struct.attrs) {
|
|
763
835
|
binders[""].call(element, k, attrs[k]);
|
|
764
836
|
}
|
|
765
|
-
if (binds.src) directives.src.call(element, binds.src);
|
|
766
837
|
if (renders && renders.length) element.$renders.push.apply(element.$renders, renders);
|
|
838
|
+
if (binds.src) directives.src.call(element, binds.src);
|
|
767
839
|
if (!isElement(replacer)) replacer = element;
|
|
768
840
|
struct.ons.forEach(([on, key, value]) => on.call(element, replacer, key, value));
|
|
769
841
|
}
|
|
@@ -850,23 +922,16 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
850
922
|
if (!replacer || element === replacer) {
|
|
851
923
|
if (element.children && element.children.length) renderElement(element.children, scope, parentScopes, once);
|
|
852
924
|
}
|
|
853
|
-
if (
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
}
|
|
860
|
-
if (element.$renders.length) {
|
|
861
|
-
if (element.$renderid !== 9) {
|
|
862
|
-
on("append")(element, addRenderElement);
|
|
863
|
-
onremove(element, removeRenderElement);
|
|
864
|
-
if (isMounted(element));
|
|
865
|
-
else if (element.$renderid > 1) addRenderElement.call(element);
|
|
866
|
-
else if (eagermount) rebuild(element);
|
|
925
|
+
if (isFirstRender) {
|
|
926
|
+
renderRest(element, $struct, replacer);
|
|
927
|
+
if (isNode(replacer) && replacer !== element) {
|
|
928
|
+
if (!replacer.$renders) replacer.$renders = [];
|
|
929
|
+
replacer.$renders.push.apply(replacer.$renders, element.$renders);
|
|
930
|
+
element = replacer;
|
|
867
931
|
}
|
|
868
|
-
|
|
869
|
-
|
|
932
|
+
if (element.$digest || element.$renders.length) {
|
|
933
|
+
element.$ready = true;
|
|
934
|
+
renderlock.push(element);
|
|
870
935
|
}
|
|
871
936
|
}
|
|
872
937
|
return element;
|
|
@@ -1104,24 +1169,42 @@ function createStructure(element, useExists) {
|
|
|
1104
1169
|
element.$eval = $eval;
|
|
1105
1170
|
return element.$struct = new Struct(ons, types, copys, binds, attr1, props, ids, once);
|
|
1106
1171
|
}
|
|
1107
|
-
|
|
1172
|
+
function renderUnlock() {
|
|
1173
|
+
var locked = renderlock.reverse();
|
|
1174
|
+
renderlock = null;
|
|
1175
|
+
locked.forEach(element => {
|
|
1176
|
+
if (element.$renderid !== 9) {
|
|
1177
|
+
on("append")(element, addRenderElement);
|
|
1178
|
+
onremove(element, removeRenderElement);
|
|
1179
|
+
if (isMounted(element));
|
|
1180
|
+
else if (element.$renderid > 1) addRenderElement.call(element);
|
|
1181
|
+
else if (eagermount) buildFirst(element);
|
|
1182
|
+
}
|
|
1183
|
+
else {
|
|
1184
|
+
buildFirst(element);
|
|
1185
|
+
}
|
|
1186
|
+
});
|
|
1187
|
+
eagermount = false;
|
|
1188
|
+
}
|
|
1189
|
+
function renderLock() {
|
|
1190
|
+
if (!renderlock) {
|
|
1191
|
+
renderlock = [];
|
|
1192
|
+
return true;
|
|
1193
|
+
}
|
|
1194
|
+
return false;
|
|
1195
|
+
}
|
|
1196
|
+
var eagermount = false, renderlock = null;
|
|
1108
1197
|
function render(element, scope, parentScopes, lazy = true) {
|
|
1198
|
+
var haslock = renderLock();
|
|
1109
1199
|
var if_top_length = if_top.length;
|
|
1110
|
-
var haslock = false;
|
|
1111
1200
|
if (isFinite(scope) && arguments.length === 2) lazy = scope, scope = undefined;
|
|
1112
1201
|
else if (isFinite(parentScopes) && arguments.length === 3) lazy = parentScopes, parentScopes = undefined;
|
|
1113
1202
|
var renderonce = lazy === 0;
|
|
1114
|
-
if (
|
|
1115
|
-
haslock = true;
|
|
1116
|
-
renderlock = true;
|
|
1117
|
-
eagermount = !+lazy;
|
|
1118
|
-
}
|
|
1203
|
+
if (haslock) eagermount = !+lazy;
|
|
1119
1204
|
var e = renderElement(element, scope, parentScopes, renderonce);
|
|
1120
|
-
if (haslock)
|
|
1121
|
-
renderlock = false;
|
|
1122
|
-
eagermount = false;
|
|
1123
|
-
}
|
|
1205
|
+
if (haslock) renderUnlock(element);
|
|
1124
1206
|
if (if_top_length < if_top.length) initIf(if_top.splice(if_top_length, if_top.length - if_top_length));
|
|
1207
|
+
if (haslock) callDigest();
|
|
1125
1208
|
return e;
|
|
1126
1209
|
}
|
|
1127
1210
|
var digest = lazy(refresh, -{});
|
|
@@ -1153,4 +1236,6 @@ render.register = function (key, name) {
|
|
|
1153
1236
|
};
|
|
1154
1237
|
render.getFromScopes = getFromScopes;
|
|
1155
1238
|
render.struct = createStructure;
|
|
1156
|
-
render.mergeStruct = mergeStruct;
|
|
1239
|
+
render.mergeStruct = mergeStruct;
|
|
1240
|
+
render.Binder = Binder;
|
|
1241
|
+
render.Model = Model;
|
package/coms/zimoli/select.js
CHANGED
|
@@ -165,16 +165,19 @@ function select() {
|
|
|
165
165
|
var $name = 'name';
|
|
166
166
|
var template = target.$template;
|
|
167
167
|
var isIndexedKey = false;
|
|
168
|
-
|
|
168
|
+
var $item = '';
|
|
169
|
+
if (template) a: {
|
|
169
170
|
var { attrs, binds } = template.childNodes[0].$struct;
|
|
170
|
-
if (attrs.value
|
|
171
|
+
if (!attrs.value && !binds.value) break a;
|
|
172
|
+
$key = attrs.value || binds.value;
|
|
171
173
|
if ($key === target.$src.indexName || $key === target.$src.keyName) isIndexedKey = true;
|
|
172
174
|
$name = binds.bind || binds.html || binds.text || $name;
|
|
175
|
+
$item = target.$src.itemName;
|
|
173
176
|
}
|
|
174
177
|
var initList2 = function (src) {
|
|
175
178
|
if (isIndexedKey) optionsMap = src;
|
|
176
179
|
else src.forEach(s => {
|
|
177
|
-
optionsMap[seek(s, $key)] = s;
|
|
180
|
+
optionsMap[seek($item ? { [$item]: s } : s, $key)] = s;
|
|
178
181
|
if (isObject(s)) s.selected = s.key === target.value;
|
|
179
182
|
});
|
|
180
183
|
list = selectList(generator, src, !!target.multiple, !!target.editable);
|
|
@@ -263,9 +266,11 @@ function select() {
|
|
|
263
266
|
}
|
|
264
267
|
};
|
|
265
268
|
if (!target.$renders) {
|
|
266
|
-
target.$renders = [
|
|
269
|
+
target.$renders = [];
|
|
267
270
|
}
|
|
268
271
|
target.$renders.push(setIcon);
|
|
272
|
+
if (!isNode(list)) target.$renders.push(setEmpty, setFocus);
|
|
273
|
+
|
|
269
274
|
onclick(target, mousedown);
|
|
270
275
|
return target;
|
|
271
276
|
}
|
package/coms/zimoli/select.less
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
& {
|
|
2
|
-
background: #fff;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
1
|
select& {
|
|
6
2
|
border: 1px solid #00000033;
|
|
7
3
|
-webkit-appearance: none;
|
|
@@ -23,13 +19,11 @@ select& {
|
|
|
23
19
|
}
|
|
24
20
|
|
|
25
21
|
&:hover {
|
|
26
|
-
color: #
|
|
27
|
-
background-color: #2ca2f9;
|
|
22
|
+
border-color: #2ca2f9;
|
|
28
23
|
}
|
|
29
24
|
|
|
30
25
|
&:active {
|
|
31
|
-
color: #
|
|
32
|
-
background-color: #1c82c9;
|
|
26
|
+
border-color: #1c82c9;
|
|
33
27
|
}
|
|
34
28
|
|
|
35
29
|
&[iconed] {
|
|
@@ -46,10 +40,5 @@ model>& {
|
|
|
46
40
|
}
|
|
47
41
|
|
|
48
42
|
&[empty] {
|
|
49
|
-
color: #
|
|
50
|
-
|
|
51
|
-
&:hover,
|
|
52
|
-
&:active {
|
|
53
|
-
color: #fff9;
|
|
54
|
-
}
|
|
43
|
+
color: #0008;
|
|
55
44
|
}
|
|
@@ -79,6 +79,7 @@ function main() {
|
|
|
79
79
|
var key = isEmpty(option.key) ? option.value : option.key;
|
|
80
80
|
if (key in itemMap) return itemMap[key];
|
|
81
81
|
var item = itemMap[key] = document.createElement('div');
|
|
82
|
+
if (isEmpty(key)) item.setAttribute('empty', '');
|
|
82
83
|
item.setAttribute("item", '');
|
|
83
84
|
item.innerHTML = option.innerHTML || option.name;
|
|
84
85
|
item.name = option.name || option.innerHTML;
|
|
@@ -216,7 +217,10 @@ function main() {
|
|
|
216
217
|
page.go(0);
|
|
217
218
|
appendChild(page, adder);
|
|
218
219
|
});
|
|
219
|
-
|
|
220
|
+
on("remove")(edit, function () {
|
|
221
|
+
page.with = null;
|
|
222
|
+
});
|
|
223
|
+
popup(edit, [.5, .5], true);
|
|
220
224
|
break;
|
|
221
225
|
}
|
|
222
226
|
});
|
package/coms/zimoli/table.html
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
<thead @mounted="setFixedColumn.call(this.parentNode),setContextMenu(this)">
|
|
2
|
-
<tr inline-block #adapter thead @
|
|
2
|
+
<tr inline-block #adapter thead @append="resizeT(this)">
|
|
3
3
|
<td draggable="false" fixed row-index>
|
|
4
4
|
<mask></mask>${i18n`序号`}
|
|
5
5
|
</td>
|
|
6
|
-
<td fixed:="f.fixed" -repeat="f in fields track by f.id"
|
|
7
|
-
swapped_="f.summary">
|
|
6
|
+
<td fixed:="f.fixed" -repeat="f in fields track by f.id" once-append="this.style.width=f.width_p"
|
|
7
|
+
@dblclick="sort(f)" swapped_="f.summary">
|
|
8
8
|
<mask></mask><i -if="f.icon" -class="f.icon"></i><span -if="f.name" -html="f.name"
|
|
9
9
|
type@="typeof f.type==='string'?f.type:''"></span><template -else> </template>
|
|
10
10
|
</td>
|
|
11
11
|
<td style="min-width: 0;" draggable="false"> </td>
|
|
12
12
|
</tr>
|
|
13
13
|
</thead>
|
|
14
|
-
<tbody -src="(d,i) in data" :style="tbodyHeight(this,hasFoot)">
|
|
15
|
-
<tr inline-block
|
|
16
|
-
<td fixed row-index
|
|
14
|
+
<tbody -src="(d,i) in data" :style="tbodyHeight(this,hasFoot,adapter.offsetWidth)">
|
|
15
|
+
<tr inline-block @click="rowClick(d,i,event)" once-mounted="resizeR(this)">
|
|
16
|
+
<td fixed row-index @append="this.style=adapter.firstChild.getAttribute('style')">
|
|
17
17
|
<mask></mask><span -bind="i+1"></span>
|
|
18
18
|
</td>
|
|
19
|
-
<td fixed:="f.fixed" -repeat="(f,i) in fields"
|
|
19
|
+
<td fixed:="f.fixed" -repeat="(f,i) in fields" once-append="this.style=adapter.children[i+1].getAttribute('style')">
|
|
20
20
|
<mask></mask>
|
|
21
21
|
<model -if="!isEmpty(f.key)" :field=f :data=d readonly></model>
|
|
22
22
|
<template -else> </template>
|
package/coms/zimoli/table.js
CHANGED
|
@@ -219,7 +219,10 @@ var trElementReg = /^tr$/i;
|
|
|
219
219
|
var id = 0;
|
|
220
220
|
function enrichField(f) {
|
|
221
221
|
if (!f.id) f.id = ++id;
|
|
222
|
-
if (f.width)
|
|
222
|
+
if (f.width) {
|
|
223
|
+
f.width_p = fromPixel(f.width);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
223
226
|
var width;
|
|
224
227
|
if (f.size) {
|
|
225
228
|
width = f.size;
|
|
@@ -250,13 +253,17 @@ function enrichField(f) {
|
|
|
250
253
|
}
|
|
251
254
|
if (width > 600) width = 600;
|
|
252
255
|
f.width = parseFloat(width) + 60;
|
|
256
|
+
f.width_p = fromPixel(f.width);
|
|
253
257
|
if (!f.key && f.options && isEmpty(f.fixed)) {
|
|
254
258
|
f.fixed = true;
|
|
255
259
|
}
|
|
256
260
|
}
|
|
257
|
-
var tbodyHeight = function (tbody, hasFoot) {
|
|
261
|
+
var tbodyHeight = function (tbody, hasFoot, width) {
|
|
258
262
|
var rowHeight = calcPixel(36);
|
|
259
|
-
return {
|
|
263
|
+
return {
|
|
264
|
+
'max-height': ((innerHeight - (!!hasFoot ? rowHeight : 6) - getScreenPosition(tbody).top - 10) / rowHeight | 0) * rowHeight,
|
|
265
|
+
width
|
|
266
|
+
}
|
|
260
267
|
};
|
|
261
268
|
|
|
262
269
|
var setFixed = function (children, scrolled, left, borderRight) {
|
|
@@ -336,7 +343,6 @@ var setFixedColumn = function (remark) {
|
|
|
336
343
|
css(tfoot, { left: this.scrollLeft });
|
|
337
344
|
}
|
|
338
345
|
};
|
|
339
|
-
var setLazyFixedColumn = lazy(setFixedColumn, 0);
|
|
340
346
|
var setClass = function (tds, cls, old) {
|
|
341
347
|
tds.forEach(td => td[cls] = true);
|
|
342
348
|
old.forEach(td => { if (!td[cls]) removeClass(td, cls) });
|
|
@@ -402,7 +408,6 @@ function setContextMenu(thead) {
|
|
|
402
408
|
if (td.offsetWidth > width) css(td, { width });
|
|
403
409
|
}
|
|
404
410
|
});
|
|
405
|
-
setLazyFixedColumn.call(thead.parentNode, true)
|
|
406
411
|
};
|
|
407
412
|
var menuItems = fields.map((f, i) => ({ name: f.name || " ", index: i, width: f.width, key: f.key, checked: !f.hidden, do: _do }));
|
|
408
413
|
var scope = this;
|
|
@@ -544,7 +549,7 @@ function table(elem) {
|
|
|
544
549
|
tbody() {
|
|
545
550
|
var e = list.apply(null, arguments);
|
|
546
551
|
css(e, tbodyHeight(e, this.hasFoot));
|
|
547
|
-
css(e, { width: this.adapter.
|
|
552
|
+
css(e, { width: this.adapter.style.width, display: 'block' });
|
|
548
553
|
this.tbody0 = e;
|
|
549
554
|
return e;
|
|
550
555
|
},
|
|
@@ -574,13 +579,13 @@ function table(elem) {
|
|
|
574
579
|
pagination
|
|
575
580
|
};
|
|
576
581
|
render(this, $scope, this.$parentScopes.concat(this.$scope));
|
|
577
|
-
if (isMounted(table)) setFixedColumn.call(table);
|
|
578
582
|
await data;
|
|
579
583
|
if (!data.is_errored) $scope.data = Table.from(fields, data);
|
|
580
584
|
$scope.data.callback = function () {
|
|
581
585
|
render.digest();
|
|
582
586
|
};
|
|
583
587
|
})
|
|
588
|
+
|
|
584
589
|
autodragchildren(
|
|
585
590
|
table,
|
|
586
591
|
cellMatchManager,
|
|
@@ -630,10 +635,8 @@ function table(elem) {
|
|
|
630
635
|
}
|
|
631
636
|
markThead();
|
|
632
637
|
markedRows = true;
|
|
633
|
-
setLazyFixedColumn.call(table);
|
|
634
638
|
}
|
|
635
639
|
);
|
|
636
640
|
resizingList.set(table, setFixedColumn);
|
|
637
|
-
on("scroll")(table, setFixedColumn);
|
|
638
641
|
return table;
|
|
639
642
|
}
|