efront 3.17.2 → 3.18.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/api/edit.js +1 -0
- package/apps/pivot/api/list.js +20 -0
- package/apps/pivot/api.yml +8 -4
- package/apps/pivot/dict/edit.js +1 -0
- package/apps/pivot/dict/list.js +12 -0
- package/apps/pivot/link/chat.js +29 -0
- package/apps/pivot/link/chat.less +5 -0
- package/apps/pivot/link/list.html +8 -3
- package/apps/pivot/link/list.js +23 -2
- package/apps/pivot/link/list.less +3 -0
- package/apps/pivot/menu.yml +4 -1
- package/apps/pivot/proxy/list.js +9 -8
- package/apps/pivot/task/list.js +1 -1
- package/apps/pivot/user/api.html +2 -0
- package/apps/pivot/user/api.js +14 -0
- package/apps/pivot/user/api.less +0 -0
- package/coms/basic/Speed.js +0 -1
- package/coms/basic/assert.js +5 -3
- package/coms/basic/lazy.js +19 -9
- package/coms/basic/lazy_test.js +62 -0
- package/coms/basic/parseURL.js +21 -2
- package/coms/basic/refilm_decode.js +4 -2
- package/coms/frame/chat.html +13 -0
- package/coms/frame/chat.js +39 -0
- package/coms/frame/chat.less +125 -0
- package/coms/frame/design.html +7 -0
- package/coms/frame/design.js +23 -0
- package/coms/frame/design.less +17 -0
- package/coms/frame/dict.js +21 -0
- package/coms/frame/edit.js +1 -1
- package/coms/frame/list.js +1 -1
- package/coms/frame/route.js +1 -0
- package/coms/kugou/song.html +1 -1
- package/coms/kugou/song.js +2 -1
- package/coms/pivot/pedit.js +3 -3
- package/coms/pivot/plist.js +2 -2
- package/coms/zimoli/cloneVisible.js +1 -0
- package/coms/zimoli/data.js +26 -12
- package/coms/zimoli/design.html +5 -4
- package/coms/zimoli/design.less +8 -3
- package/coms/zimoli/drag.js +1 -1
- package/coms/zimoli/field.html +1 -1
- package/coms/zimoli/list.js +5 -5
- package/coms/zimoli/model.js +4 -3
- package/coms/zimoli/render.js +49 -25
- package/coms/zimoli/vbox.js +2 -2
- package/package.json +1 -1
- package/public/efront.js +1 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
function design(fields, types) {
|
|
2
|
+
|
|
3
|
+
var e = document.createElement("fields-designer");
|
|
4
|
+
e.innerHTML = template;
|
|
5
|
+
var e = view(e);
|
|
6
|
+
renderWithDefaults(e, {
|
|
7
|
+
fields: fields ? JSAM.parse(JSAM.stringify(fields)) : [],
|
|
8
|
+
design() {
|
|
9
|
+
return zimoli$design(this.fields, types);
|
|
10
|
+
},
|
|
11
|
+
remove() {
|
|
12
|
+
remove(e);
|
|
13
|
+
},
|
|
14
|
+
save() {
|
|
15
|
+
e.value = this.fields;
|
|
16
|
+
dispatch(e, 'changed');
|
|
17
|
+
remove(e);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
drag.on(e.firstChild, e);
|
|
21
|
+
resize.on(e);
|
|
22
|
+
return e;
|
|
23
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
function main(types, elem) {
|
|
2
|
+
var { field, data, readonly } = elem;
|
|
3
|
+
elem.innerHTML = `<span -text="text()"></span>` + (readonly ? "" : '<a @click="edit()">修改</a>');
|
|
4
|
+
renderWithDefaults(elem.children, {
|
|
5
|
+
text() {
|
|
6
|
+
if (data[field.key]) return data[field.key].map(k => `${k.name} ${isEmpty(k.key) ? "" : `(${k.key})`}`).join(", ");
|
|
7
|
+
return '';
|
|
8
|
+
},
|
|
9
|
+
edit() {
|
|
10
|
+
var editer = frame$design(data[field.key], types);
|
|
11
|
+
css(editer, { position: 'absolute' });
|
|
12
|
+
popup(editer);
|
|
13
|
+
move.bindPosition(editer, [.5, .5]);
|
|
14
|
+
on("changed")(editer, function () {
|
|
15
|
+
console.log(this.value, field)
|
|
16
|
+
data[field.key] = this.value;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
})
|
|
20
|
+
return elem;
|
|
21
|
+
};
|
package/coms/frame/edit.js
CHANGED
package/coms/frame/list.js
CHANGED
package/coms/frame/route.js
CHANGED
package/coms/kugou/song.html
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
<div class="song" ng-model=song.songMarked></div>
|
|
4
4
|
<div class="singer" ng-model=song.singerMarked></div>
|
|
5
5
|
<div class="filterTime(song.timeLength)"></div>
|
|
6
|
-
<div class="play-state" ng-if="song.hash===musicList.active_hash" ng-class={error:playState.error}>
|
|
6
|
+
<div refresh class="play-state" ng-if="song.hash===musicList.active_hash" ng-class={error:playState.error}>
|
|
7
7
|
<div ng-style="{width:playState.width}"></div>
|
|
8
8
|
</div>
|
package/coms/kugou/song.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
function main(elem) {
|
|
2
2
|
elem = elem || document.createElement("song");
|
|
3
|
+
elem.renderid = 9;
|
|
3
4
|
var $scope = {
|
|
4
5
|
filterTime,
|
|
5
6
|
png: img,
|
|
@@ -23,7 +24,7 @@ function main(elem) {
|
|
|
23
24
|
songMarked: mark(songName, elem.mark),
|
|
24
25
|
singerMarked: mark(singerName, elem.mark)
|
|
25
26
|
};
|
|
26
|
-
render(elem.children, $scope);
|
|
27
|
+
render(elem.children, $scope, 0);
|
|
27
28
|
});
|
|
28
29
|
return block(elem);
|
|
29
30
|
}
|
package/coms/pivot/pedit.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
function main(title, type, params) {
|
|
1
|
+
function main(title, type, params, idkey = params.fields[0].key) {
|
|
2
2
|
return frame$edit(title, {
|
|
3
3
|
submit(a, fields) {
|
|
4
4
|
a = submit(fields, a);
|
|
5
|
-
return data.from("edit", {
|
|
5
|
+
return data.from(params.data ? "edit" : "add", {
|
|
6
6
|
type,
|
|
7
|
-
key: encode62.timeencode(a
|
|
7
|
+
key: encode62.timeencode(a[idkey]),
|
|
8
8
|
value: encode62.timeencode(JSON.stringify(a)),
|
|
9
9
|
}).loading_promise;
|
|
10
10
|
},
|
package/coms/pivot/plist.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
|
|
2
|
-
function main(title, type, fields, edit_ref, options) {
|
|
2
|
+
function main(title, type, fields, edit_ref, options, idkey = fields[0].key) {
|
|
3
3
|
return frame$list(title, {
|
|
4
4
|
load() {
|
|
5
5
|
return data.from("list", { type }, a => JSAM.parse(encode62.timedecode(a || '')));
|
|
6
6
|
},
|
|
7
7
|
remove(o) {
|
|
8
|
-
return data.from("edit", { type, key: encode62.timeencode(o
|
|
8
|
+
return data.from("edit", { type, key: encode62.timeencode(o[idkey]), value: encode62.timeencode("") }).loading_promise;
|
|
9
9
|
},
|
|
10
10
|
fields,
|
|
11
11
|
options,
|
|
@@ -88,6 +88,7 @@ var isMaybeVisible = function (node) {
|
|
|
88
88
|
}
|
|
89
89
|
if (node.offsetParent) {
|
|
90
90
|
var parent = node.offsetParent;
|
|
91
|
+
if (getComputedStyle(parent).overflow === 'visible') return true;
|
|
91
92
|
return !(node.offsetLeft + node.offsetWidth - parent.scrollLeft <= parent.clientLeft ||
|
|
92
93
|
node.offsetTop + node.offsetHeight - parent.scrollTop <= parent.clientTop ||
|
|
93
94
|
node.offsetLeft - parent.scrollLeft >= (parent.clientWidth || parent.offsetWidth) ||
|
package/coms/zimoli/data.js
CHANGED
|
@@ -433,15 +433,11 @@ function LoadingArray_then(ok, oh) {
|
|
|
433
433
|
else if (this.is_errored) oh(this.error_message);
|
|
434
434
|
else ok();
|
|
435
435
|
}
|
|
436
|
+
function LoadingArray_abort(ok, oh) {
|
|
437
|
+
if (this.loading) this.loading.abort();
|
|
438
|
+
}
|
|
436
439
|
|
|
437
440
|
var privates = {
|
|
438
|
-
loadAfterConfig(serviceId, params) {
|
|
439
|
-
var promise = this.getApi(serviceId).then((api) => {
|
|
440
|
-
params = this.pack(serviceId, params);
|
|
441
|
-
return this.fromApi(api, params);
|
|
442
|
-
});
|
|
443
|
-
return promise;
|
|
444
|
-
},
|
|
445
441
|
pack(serviceId, params) {
|
|
446
442
|
if (/\?/.test(serviceId)) {
|
|
447
443
|
params = extend({}, getParamsFromUrl(serviceId), params);
|
|
@@ -565,12 +561,13 @@ var privates = {
|
|
|
565
561
|
var promise = cachedLoadingPromise[id];
|
|
566
562
|
var temp = JSON.stringify(params);
|
|
567
563
|
var currentTime = +new Date;
|
|
564
|
+
var loading = null;
|
|
568
565
|
if (!promise || currentTime - promise.time > 60 || temp !== promise.params || promise.search !== search) {
|
|
569
566
|
var promise = new Promise(function (ok, oh) {
|
|
570
567
|
if (headers) {
|
|
571
568
|
headers = seekFromSource(headers, api.base);
|
|
572
569
|
}
|
|
573
|
-
cross(realmethod, uri, headers).send(params).done(e => {
|
|
570
|
+
loading = cross(realmethod, uri, headers).send(params).done(e => {
|
|
574
571
|
ok(e.response || e.responseText);
|
|
575
572
|
}).error(xhr => {
|
|
576
573
|
try {
|
|
@@ -581,12 +578,13 @@ var privates = {
|
|
|
581
578
|
}
|
|
582
579
|
});
|
|
583
580
|
});
|
|
581
|
+
promise.loading = loading;
|
|
584
582
|
promise.search = search;
|
|
585
583
|
promise.params = temp;
|
|
586
584
|
promise.time = currentTime;
|
|
587
585
|
cachedLoadingPromise[id] = promise;
|
|
588
586
|
}
|
|
589
|
-
|
|
587
|
+
var p = promise.then(function (response) {
|
|
590
588
|
if (/\*$/.test(coinmethod)) return response;
|
|
591
589
|
var data = parseData(response);
|
|
592
590
|
var checked = error_check(data);
|
|
@@ -598,6 +596,8 @@ var privates = {
|
|
|
598
596
|
}
|
|
599
597
|
return data;
|
|
600
598
|
});
|
|
599
|
+
p.loading = loading;
|
|
600
|
+
return p;
|
|
601
601
|
},
|
|
602
602
|
|
|
603
603
|
getConfigPromise() {
|
|
@@ -659,6 +659,7 @@ var data = {
|
|
|
659
659
|
response.is_loaded = true;
|
|
660
660
|
response.is_loading = false;
|
|
661
661
|
if (response.then === LoadingArray_then) delete response.then;
|
|
662
|
+
if (response.abort === LoadingArray_abort) delete response.abort;
|
|
662
663
|
}
|
|
663
664
|
},
|
|
664
665
|
responseCrash,
|
|
@@ -667,6 +668,7 @@ var data = {
|
|
|
667
668
|
response.is_loaded = false;
|
|
668
669
|
response.is_loading = true;
|
|
669
670
|
response.then = LoadingArray_then;
|
|
671
|
+
response.abort = LoadingArray_abort;
|
|
670
672
|
}
|
|
671
673
|
},
|
|
672
674
|
setReporter(report, checker) {
|
|
@@ -758,7 +760,10 @@ var data = {
|
|
|
758
760
|
var response = this.getInstance(id || url);
|
|
759
761
|
if (!isObject(response)) response = new LoadingArray;
|
|
760
762
|
this.responseLoading(response);
|
|
761
|
-
var p =
|
|
763
|
+
var p = privates.fromApi(api, params);
|
|
764
|
+
response.loading = p.loading;
|
|
765
|
+
p = response.loading_promise = p.then((data) => {
|
|
766
|
+
response.loading = null;
|
|
762
767
|
if (id) {
|
|
763
768
|
data = parse(data);
|
|
764
769
|
this.setInstance(id, data, false);
|
|
@@ -781,7 +786,10 @@ var data = {
|
|
|
781
786
|
var response = this.getInstance(id || url);
|
|
782
787
|
if (!isObject(response)) response = new LoadingArray;
|
|
783
788
|
this.responseLoading(response);
|
|
784
|
-
var p =
|
|
789
|
+
var p = privates.loadIgnoreConfig('get', url);
|
|
790
|
+
response.loading = p.loading;
|
|
791
|
+
p = response.loading_promise = p.then((data) => {
|
|
792
|
+
response.loading = null;
|
|
785
793
|
if (id) {
|
|
786
794
|
data = parse(data);
|
|
787
795
|
this.setInstance(id, data, false);
|
|
@@ -806,7 +814,13 @@ var data = {
|
|
|
806
814
|
var response = this.getInstance(id || sid);
|
|
807
815
|
if (!isObject(response)) response = new LoadingArray;
|
|
808
816
|
this.responseLoading(response);
|
|
809
|
-
var p = response.loading_promise = privates.
|
|
817
|
+
var p = response.loading_promise = privates.getApi(sid).then((api) => {
|
|
818
|
+
params = privates.pack(sid, params);
|
|
819
|
+
var p = privates.fromApi(api, params);
|
|
820
|
+
response.loading = p.loading;
|
|
821
|
+
return p;
|
|
822
|
+
}).then((data) => {
|
|
823
|
+
response.loading = null;
|
|
810
824
|
if (id) {
|
|
811
825
|
data = parse instanceof Function ? parse(data) : data;
|
|
812
826
|
this.setInstance(id, data, false);
|
package/coms/zimoli/design.html
CHANGED
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
<padding>
|
|
6
6
|
<div class="field-item">
|
|
7
7
|
<span class="index" ng-bind='field.id'></span>
|
|
8
|
-
<input @focus="focus(this.parentNode)" @blur="blur(this.parentNode)" placeholder="
|
|
8
|
+
<input @focus="focus(this.parentNode)" @blur="blur(this.parentNode)" placeholder="显示名称"
|
|
9
9
|
ng-model=field.name />
|
|
10
|
-
<
|
|
11
|
-
|
|
10
|
+
<input @focus="focus(this.parentNode)" @blur="blur(this.parentNode)" placeholder="键名" ng-model=field.key />
|
|
11
|
+
<select @focus="focus(this.parentNode)" -model="field.type" @blur="blur(this.parentNode)"
|
|
12
|
+
ng-model=field.type >
|
|
12
13
|
<option value="">请选择字段类型</option>
|
|
13
|
-
<option ng-repeat="type in types"></option>
|
|
14
|
+
<option _value="type.key" ng-repeat="type in types" -text="type.name"></option>
|
|
14
15
|
</select>
|
|
15
16
|
<btn ng-click=remove(field)>移除</btn>
|
|
16
17
|
</div>
|
package/coms/zimoli/design.less
CHANGED
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
>.options {
|
|
11
11
|
text-align: right;
|
|
12
12
|
padding: 0 16px;
|
|
13
|
-
width:
|
|
13
|
+
width: 412px;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
.padding {
|
|
17
17
|
display: block;
|
|
18
|
-
padding: 8px
|
|
18
|
+
padding: 8px 0 0;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
.field-item {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
border-radius: 3px;
|
|
38
38
|
text-align: right;
|
|
39
39
|
display: block;
|
|
40
|
-
width:
|
|
40
|
+
width: 390px;
|
|
41
41
|
max-width: 100%;
|
|
42
42
|
position: relative;
|
|
43
43
|
border: 1px solid #0006;
|
|
@@ -70,6 +70,11 @@
|
|
|
70
70
|
>input {
|
|
71
71
|
border-radius: 3px 0 0 3px;
|
|
72
72
|
padding-left: 6px;
|
|
73
|
+
width: 130px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
>select {
|
|
77
|
+
width: 80px;
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
>btn {
|
package/coms/zimoli/drag.js
CHANGED
|
@@ -33,7 +33,7 @@ var setZIndex = function () {
|
|
|
33
33
|
}
|
|
34
34
|
};
|
|
35
35
|
function drag(target, initialEvent, preventOverflow, isMovingSource) {
|
|
36
|
-
if (/^(?:select|input|textarea)$/i.test(initialEvent.target.tagName)) return;
|
|
36
|
+
if (/^(?:select|input|textarea)$/i.test(initialEvent.target.tagName) || getTargetIn(a => a.nodrag || a.hasAttribute('nodrag') || a.dragable === false, initialEvent.target)) return;
|
|
37
37
|
if (target.dragable === false) return;
|
|
38
38
|
initialEvent.preventDefault();
|
|
39
39
|
if (isArray(target)) {
|
package/coms/zimoli/field.html
CHANGED
package/coms/zimoli/list.js
CHANGED
|
@@ -379,12 +379,12 @@ function ylist(container, generator, $Y) {
|
|
|
379
379
|
if (deltay >= delta) {
|
|
380
380
|
return false;
|
|
381
381
|
}
|
|
382
|
-
if (deltay <
|
|
383
|
-
else if (deltay > count || deltay > 3) {
|
|
384
|
-
y = last_y + Math.max(2 * (target_y > last_y ? .8 : -.8));
|
|
385
|
-
}
|
|
382
|
+
if (deltay < 2) y = target_y;
|
|
386
383
|
else {
|
|
387
|
-
|
|
384
|
+
var speed = Math.abs(spd.read()[0]);
|
|
385
|
+
if (speed < 1) speed = 1;
|
|
386
|
+
if (deltay < 3) speed = .5;
|
|
387
|
+
y = last_y + (target_y > last_y ? speed : -speed);
|
|
388
388
|
}
|
|
389
389
|
list.Top(y);
|
|
390
390
|
if (target_y === y) {
|
package/coms/zimoli/model.js
CHANGED
|
@@ -212,9 +212,9 @@ function main(elem) {
|
|
|
212
212
|
if (create) {
|
|
213
213
|
var e = create(elem, data, field_ref);
|
|
214
214
|
if (isNode(e)) {
|
|
215
|
-
appendChild(elem, e);
|
|
215
|
+
if (e !== elem) appendChild(elem, e);
|
|
216
216
|
}
|
|
217
|
-
else {
|
|
217
|
+
else if (!isEmpty(e)) {
|
|
218
218
|
elem.innerHTML = e;
|
|
219
219
|
}
|
|
220
220
|
return;
|
|
@@ -222,6 +222,7 @@ function main(elem) {
|
|
|
222
222
|
elem.innerHTML = '<span ng-bind=get()></span>';
|
|
223
223
|
render(elem, {
|
|
224
224
|
get() {
|
|
225
|
+
if (!field.key) return;
|
|
225
226
|
var value = seek(data, field.key);
|
|
226
227
|
if (field.options) {
|
|
227
228
|
if (!field.optionsMap) {
|
|
@@ -243,7 +244,7 @@ function main(elem) {
|
|
|
243
244
|
}
|
|
244
245
|
} else {
|
|
245
246
|
var create = field_type === "function" ? field_editor : constructors[field_type];
|
|
246
|
-
var ipt = create ? create(elem, field_ref) : input();
|
|
247
|
+
var ipt = create ? create(elem, field_ref) : field.key ? input() : null;
|
|
247
248
|
|
|
248
249
|
if (ipt) {
|
|
249
250
|
if (ipt !== elem) appendChild(elem, ipt);
|
package/coms/zimoli/render.js
CHANGED
|
@@ -10,7 +10,7 @@ presets.template = function (t) {
|
|
|
10
10
|
node.innerHTML = t.innerHTML;
|
|
11
11
|
comment.with = [].slice.call(node.childNodes, 0);
|
|
12
12
|
appendChild.after(comment, comment.with);
|
|
13
|
-
renderElement(comment.with, comment.$scope, comment.$parentScopes);
|
|
13
|
+
renderElement(comment.with, comment.$scope, comment.$parentScopes, this.renderid === 9);
|
|
14
14
|
});
|
|
15
15
|
return comment;
|
|
16
16
|
};
|
|
@@ -20,8 +20,11 @@ var renderidClosed = 0;
|
|
|
20
20
|
var addRenderElement = function () {
|
|
21
21
|
var element = this;
|
|
22
22
|
if (!isNode(element)) return;
|
|
23
|
-
if (element.renderid
|
|
24
|
-
|
|
23
|
+
if (element.renderid !== 9) {
|
|
24
|
+
// 只渲染一次
|
|
25
|
+
if (element.renderid < 10 && element.renderid > 0) element.renderid = ++renderidOffset;
|
|
26
|
+
renderElements[element.renderid] = element;
|
|
27
|
+
}
|
|
25
28
|
rebuild(element);
|
|
26
29
|
};
|
|
27
30
|
var removeRenderElement = function () {
|
|
@@ -78,12 +81,19 @@ var createGetter = function (search, isprop = true) {
|
|
|
78
81
|
var initialComment = function (renders, type, expression) {
|
|
79
82
|
var comment = document.createComment(`${type} ${expression}`);
|
|
80
83
|
comment.renders = renders;
|
|
81
|
-
comment.renderid = ++renderidOffset;
|
|
82
|
-
onappend(comment, addRenderElement);
|
|
83
|
-
onremove(comment, removeRenderElement);
|
|
84
84
|
appendChild.after(this, comment);
|
|
85
85
|
if (!/if/i.test(type)) remove(this);
|
|
86
|
-
|
|
86
|
+
if (!this.$struct.once) {
|
|
87
|
+
comment.renderid = ++renderidOffset;
|
|
88
|
+
onmounted(comment, addRenderElement);
|
|
89
|
+
onremove(comment, removeRenderElement);
|
|
90
|
+
if (isMounted(comment) || eagermount) rebuild(comment);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
comment.renderid = 9;
|
|
94
|
+
rebuild(comment);
|
|
95
|
+
remove(comment);
|
|
96
|
+
}
|
|
87
97
|
return comment;
|
|
88
98
|
};
|
|
89
99
|
var parseRepeat = function (expression) {
|
|
@@ -442,7 +452,7 @@ var directives = {
|
|
|
442
452
|
} else if (/^(select|input|textarea)$/i.test(this.tagName) || "value" in this) {
|
|
443
453
|
this.renders.push(setter || function () {
|
|
444
454
|
var value = getter();
|
|
445
|
-
if (value
|
|
455
|
+
if (isEmpty(value)) value = "";
|
|
446
456
|
if (deepEqual(oldValue, value)) return;
|
|
447
457
|
oldValue = value;
|
|
448
458
|
if (this.value !== value) this.value = value;
|
|
@@ -599,17 +609,17 @@ function getFromScopes(key, scope, parentScopes) {
|
|
|
599
609
|
}
|
|
600
610
|
}
|
|
601
611
|
|
|
602
|
-
function renderElement(element, scope = element.$scope, parentScopes = element.$parentScopes,
|
|
612
|
+
function renderElement(element, scope = element.$scope, parentScopes = element.$parentScopes, once) {
|
|
603
613
|
if (!isNode(element) && element.length) {
|
|
604
614
|
return [].concat.apply([], element).map(function (element) {
|
|
605
|
-
return renderElement(element, scope, parentScopes);
|
|
615
|
+
return renderElement(element, scope, parentScopes, once);
|
|
606
616
|
});
|
|
607
617
|
}
|
|
608
618
|
if (!isElement(element)) {
|
|
609
619
|
return element;
|
|
610
620
|
}
|
|
611
621
|
if (!isNumber(element.renderid)) {
|
|
612
|
-
renderStructure(element, scope, parentScopes);
|
|
622
|
+
renderStructure(element, scope, parentScopes, once);
|
|
613
623
|
}
|
|
614
624
|
var elementid = element.getAttribute("renderid") || element.getAttribute("elementid") || element.getAttribute("id");
|
|
615
625
|
if (elementid) {
|
|
@@ -631,7 +641,8 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
631
641
|
if (parentNode.renderid > 1 || isMounted(parentNode)) element.renderid = 2;
|
|
632
642
|
}
|
|
633
643
|
element.renders = element.renders ? [].concat(element.renders) : [];
|
|
634
|
-
var { ons, copys, attrs, props, binds, context: withContext, ids } = element.$struct;
|
|
644
|
+
var { ons, copys, attrs, props, binds, context: withContext, ids, once } = element.$struct;
|
|
645
|
+
if (once) element.renderid = 9;
|
|
635
646
|
delete element.$struct;
|
|
636
647
|
if (binds.src) {
|
|
637
648
|
element.$src = parseRepeat(binds.src);
|
|
@@ -679,7 +690,7 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
679
690
|
}
|
|
680
691
|
}
|
|
681
692
|
}
|
|
682
|
-
if (element.children && element.children.length) renderElement(element.children, scope, parentScopes);
|
|
693
|
+
if (element.children && element.children.length) renderElement(element.children, scope, parentScopes, once);
|
|
683
694
|
if (!isFirstRender) return element;
|
|
684
695
|
for (var k in binds) {
|
|
685
696
|
if (directives.hasOwnProperty(k)) {
|
|
@@ -699,10 +710,15 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
699
710
|
}
|
|
700
711
|
ons.forEach(([on, key, value]) => on.call(element, key, [withContext, value]));
|
|
701
712
|
if (element.renders.length) {
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
713
|
+
if (element.renderid !== 9) {
|
|
714
|
+
onmounted(element, addRenderElement);
|
|
715
|
+
onremove(element, removeRenderElement);
|
|
716
|
+
if (isMounted(element) || element.renderid > 1) addRenderElement.call(element);
|
|
717
|
+
else if (eagermount) rebuild(element);
|
|
718
|
+
}
|
|
719
|
+
else {
|
|
720
|
+
rebuild(element);
|
|
721
|
+
}
|
|
706
722
|
}
|
|
707
723
|
if (elementid) scope[elementid] = element;
|
|
708
724
|
for (var id of ids) {
|
|
@@ -710,7 +726,7 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
710
726
|
}
|
|
711
727
|
return element;
|
|
712
728
|
}
|
|
713
|
-
function renderStructure(element, scope, parentScopes = []) {
|
|
729
|
+
function renderStructure(element, scope, parentScopes = [], once) {
|
|
714
730
|
// 处理结构流
|
|
715
731
|
if (parentScopes !== null && !isArray(parentScopes)) {
|
|
716
732
|
throw new Error('父级作用域链应以数组的类型传入');
|
|
@@ -791,25 +807,33 @@ function renderStructure(element, scope, parentScopes = []) {
|
|
|
791
807
|
if (!/\-/.test(name) || value === '') {
|
|
792
808
|
copys.push(attr);
|
|
793
809
|
}
|
|
794
|
-
|
|
810
|
+
var k = name.replace(/\-(\w)/g, (_, w) => w.toUpperCase());
|
|
811
|
+
if (!(k in element)) {
|
|
812
|
+
props[k] = value === "" ? true : value;
|
|
813
|
+
}
|
|
814
|
+
else {
|
|
815
|
+
props[k] = element[k];
|
|
816
|
+
}
|
|
795
817
|
}
|
|
796
818
|
}
|
|
797
|
-
if (
|
|
819
|
+
if (props["zimoli"] || props["fresh"] || props["once"]) once = true;
|
|
820
|
+
else if (props["refresh"] || props["digest"] || props["mount"]) once = false;
|
|
821
|
+
if (!element.$struct) element.$struct = { ons, copys, binds, attrs: attr1, props, context: withContext, ids, once };
|
|
798
822
|
if (element.renderid <= -1) createStructure.call(element, types.if, types.repeat, withContext);
|
|
799
823
|
}
|
|
800
824
|
var eagermount = false, renderlock = false;
|
|
801
825
|
function render(element, scope, parentScopes, lazy = true) {
|
|
802
826
|
var if_top_length = if_top.length;
|
|
803
827
|
var haslock = false;
|
|
828
|
+
if (isFinite(scope) && arguments.length === 2) lazy = scope, scope = undefined;
|
|
829
|
+
else if (isFinite(parentScopes) && arguments.length === 3) lazy = parentScopes, parentScopes = undefined;
|
|
830
|
+
var renderonce = lazy === 0;
|
|
804
831
|
if (!renderlock) {
|
|
805
832
|
haslock = true;
|
|
806
833
|
renderlock = true;
|
|
807
|
-
|
|
808
|
-
else if (isBoolean(parentScopes) && arguments.length === 3) lazy = +parentScopes, parentScopes = undefined;
|
|
809
|
-
else lazy = +lazy;
|
|
810
|
-
eagermount = !lazy;
|
|
834
|
+
eagermount = !+lazy;
|
|
811
835
|
}
|
|
812
|
-
var e = renderElement(element, scope, parentScopes);
|
|
836
|
+
var e = renderElement(element, scope, parentScopes, renderonce);
|
|
813
837
|
if (haslock) {
|
|
814
838
|
renderlock = false;
|
|
815
839
|
eagermount = false;
|
package/coms/zimoli/vbox.js
CHANGED
|
@@ -84,7 +84,7 @@ function ybox(generator) {
|
|
|
84
84
|
var stop = _box.stopY;
|
|
85
85
|
var stop2 = lazy(function () {
|
|
86
86
|
scrollY.smooth(stop);
|
|
87
|
-
},
|
|
87
|
+
}, 40);
|
|
88
88
|
var decrease = function () {
|
|
89
89
|
var res = _decrease(increaser_t) + _decrease(increaser_b);
|
|
90
90
|
if (!res) {
|
|
@@ -128,7 +128,7 @@ function ybox(generator) {
|
|
|
128
128
|
} else {
|
|
129
129
|
var wheelTime = 0;
|
|
130
130
|
onmousewheel(_box, function (event) {
|
|
131
|
-
if (event.timeStamp - wheelTime >
|
|
131
|
+
if (event.timeStamp - wheelTime > 40 && Math.abs(event.deltaY) < 12) {
|
|
132
132
|
wheelTime = event.timeStamp;
|
|
133
133
|
return;
|
|
134
134
|
}
|