efront 3.16.1 → 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/log/boot.js +13 -10
- package/apps/pivot/main.less +1 -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 +2 -3
- package/coms/basic/assert.js +5 -3
- package/coms/basic/lazy.js +21 -7
- 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/left.html +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 +4 -3
- package/coms/pivot/pedit.js +3 -3
- package/coms/pivot/plist.js +2 -2
- package/coms/zimoli/Item.js +40 -25
- package/coms/zimoli/appendChild.js +6 -8
- package/coms/zimoli/cloneVisible.js +1 -0
- package/coms/zimoli/container.js +10 -0
- package/coms/zimoli/createItemTarget.js +7 -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 +5 -3
- package/coms/zimoli/field.html +1 -1
- package/coms/zimoli/getGenerator.js +4 -4
- package/coms/zimoli/getTreeFromData.js +3 -0
- package/coms/zimoli/list.js +5 -5
- package/coms/zimoli/menu.js +16 -13
- package/coms/zimoli/menuItem.js +2 -2
- package/coms/zimoli/menuList.html +1 -1
- package/coms/zimoli/menuList.js +14 -14
- package/coms/zimoli/menuList.less +1 -1
- package/coms/zimoli/model.js +4 -3
- package/coms/zimoli/on.js +1 -1
- package/coms/zimoli/once.js +6 -5
- package/coms/zimoli/onmounted.js +1 -1
- package/coms/zimoli/render.js +61 -24
- package/coms/zimoli/renderDefaults.js +1 -0
- package/coms/zimoli/resize.js +18 -0
- package/coms/zimoli/scrollbar.js +20 -8
- package/coms/zimoli/scrollbar.less +22 -1
- package/coms/zimoli/tree.js +3 -3
- package/coms/zimoli/vbox.js +7 -3
- package/coms/zimoli/zimoli.js +1 -1
- package/package.json +1 -1
- package/public/efront.js +1 -1
|
@@ -47,8 +47,8 @@ var getGenerator = function (container, tagName = 'item') {
|
|
|
47
47
|
[itemName || '$item']: com,
|
|
48
48
|
[indexName || '$index']: index
|
|
49
49
|
};
|
|
50
|
-
var newItem = render(element, newScope, scopes);
|
|
51
|
-
if (element.with) newItem.with = render(element.with, newScope, scopes);
|
|
50
|
+
var newItem = render(element, newScope, scopes, false);
|
|
51
|
+
if (element.with) newItem.with = render(element.with, newScope, scopes, false);
|
|
52
52
|
} else {
|
|
53
53
|
var newScope = container.src[index];
|
|
54
54
|
if (!isObject(newScope)) newScope = {
|
|
@@ -68,8 +68,8 @@ var getGenerator = function (container, tagName = 'item') {
|
|
|
68
68
|
return this.$item;
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
-
var newItem = render(element, newScope, scopes);
|
|
72
|
-
if (element.with) newItem.with = render(newItem.with = element.with, newScope, scopes);
|
|
71
|
+
var newItem = render(element, newScope, scopes, false);
|
|
72
|
+
if (element.with) newItem.with = render(newItem.with = element.with, newScope, scopes, false);
|
|
73
73
|
}
|
|
74
74
|
return newItem;
|
|
75
75
|
};
|
|
@@ -5,8 +5,10 @@ function getTreeFromData(array) {
|
|
|
5
5
|
root.count = 0;
|
|
6
6
|
var map = {};
|
|
7
7
|
array = array.filter(a => !!a);
|
|
8
|
+
var active_item = null;
|
|
8
9
|
array.forEach(function (data) {
|
|
9
10
|
var item = new Item(data);
|
|
11
|
+
if (!active_item && item.isActived()) active_item = item;
|
|
10
12
|
if (data.id) {
|
|
11
13
|
map[data.id] = item;
|
|
12
14
|
} else {
|
|
@@ -46,5 +48,6 @@ function getTreeFromData(array) {
|
|
|
46
48
|
return item.count = count;
|
|
47
49
|
};
|
|
48
50
|
run(root);
|
|
51
|
+
root.actived = active_item;
|
|
49
52
|
return root;
|
|
50
53
|
}
|
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 + (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/menu.js
CHANGED
|
@@ -90,7 +90,11 @@ var getTreeNodes = function (elem) {
|
|
|
90
90
|
[].forEach.call(elem.children, run);
|
|
91
91
|
return nodes;
|
|
92
92
|
};
|
|
93
|
-
|
|
93
|
+
var emitEvent = function (item, event) {
|
|
94
|
+
event.preventDefault(true);
|
|
95
|
+
if (item.disabled) return;
|
|
96
|
+
active(this, item, item, createItemTarget.call(this, item));
|
|
97
|
+
}
|
|
94
98
|
function bindGlobalkey(elem, keymap, emit) {
|
|
95
99
|
if (elem.keymap) {
|
|
96
100
|
for (var off of elem.keyoff) {
|
|
@@ -99,14 +103,6 @@ function bindGlobalkey(elem, keymap, emit) {
|
|
|
99
103
|
}
|
|
100
104
|
if (!keymap) return;
|
|
101
105
|
var keyoff = [];
|
|
102
|
-
var emitEvent = function (item, event) {
|
|
103
|
-
event.preventDefault(true);
|
|
104
|
-
var $scope = {};
|
|
105
|
-
var { itemName } = this.$src;
|
|
106
|
-
if (itemName) $scope[itemName] = item;
|
|
107
|
-
else $scope.menu = item, $scope.$item = item;
|
|
108
|
-
emit(item, { $scope });
|
|
109
|
-
}
|
|
110
106
|
for (let k in keymap) {
|
|
111
107
|
keyoff.push(bind("keydown." + k)(elem, emitEvent.bind(elem, keymap[k])));
|
|
112
108
|
}
|
|
@@ -153,10 +149,10 @@ function main(elem, mode) {
|
|
|
153
149
|
mode = "inline";
|
|
154
150
|
if (elem) {
|
|
155
151
|
var generator = getGenerator(elem, 'menu-item');
|
|
156
|
-
tree(elem, function (index, item) {
|
|
152
|
+
tree(elem, function (index, item, menu) {
|
|
157
153
|
var e = generator(index, item);
|
|
158
154
|
if (!e || e.children.length) return e;
|
|
159
|
-
var m = menuItem(e,
|
|
155
|
+
var m = menuItem(e, menu, elem.useIcon);
|
|
160
156
|
return m;
|
|
161
157
|
});
|
|
162
158
|
care(elem, function (data) {
|
|
@@ -198,8 +194,8 @@ function main(elem, mode) {
|
|
|
198
194
|
case "y":
|
|
199
195
|
case "vertical":
|
|
200
196
|
if (!direction) mode = "vertical", direction = 'y';
|
|
201
|
-
var emit = function (item
|
|
202
|
-
active(elem, item.value, item,
|
|
197
|
+
var emit = function (item) {
|
|
198
|
+
active(elem, item.value, item, createItemTarget.call(elem, item.value));
|
|
203
199
|
};
|
|
204
200
|
if ("$src" in elem) {
|
|
205
201
|
getGenerator(elem, 'menu-item');
|
|
@@ -209,6 +205,13 @@ function main(elem, mode) {
|
|
|
209
205
|
bindGlobalkey(elem, src.keymap, emit);
|
|
210
206
|
src0.splice(0, src0.length);
|
|
211
207
|
var s = getTreeFromData(src);
|
|
208
|
+
if (s.actived) {
|
|
209
|
+
elem.selected = s.actived;
|
|
210
|
+
}
|
|
211
|
+
else if (direction === 't') {
|
|
212
|
+
elem.selected = s[0];
|
|
213
|
+
if (elem.selected) elem.selected.setActive(true);
|
|
214
|
+
}
|
|
212
215
|
var i = 0;
|
|
213
216
|
while (i < s.length) {
|
|
214
217
|
src0.push.apply(src0, s.slice(i, i += 1000));
|
package/coms/zimoli/menuItem.js
CHANGED
|
@@ -4,7 +4,7 @@ function main(elem, scope, hasIcon) {
|
|
|
4
4
|
item.innerHTML = menuItem;
|
|
5
5
|
if (isObject(scope) && scope !== item.$scope) {
|
|
6
6
|
}
|
|
7
|
-
else {
|
|
7
|
+
else if (item.$scope) {
|
|
8
8
|
var scope = item.$scope;
|
|
9
9
|
}
|
|
10
10
|
if (scope.menu) scope = scope.menu;
|
|
@@ -17,7 +17,7 @@ function main(elem, scope, hasIcon) {
|
|
|
17
17
|
else {
|
|
18
18
|
item.removeAttribute("disabled");
|
|
19
19
|
}
|
|
20
|
-
render(item.children, scope, hasIcon instanceof Array ? hasIcon : [{ useIcon: hasIcon, hasIcon, name, icon }]);
|
|
20
|
+
render(item.children, scope, hasIcon instanceof Array ? hasIcon : [{ useIcon: hasIcon, hasIcon, name, icon }], false);
|
|
21
21
|
if (scope.line) item.setAttribute("line", ''), on("click")(item, preventDefault);
|
|
22
22
|
if (scope.hotkey) bindAccesskey(item, scope.hotkey);
|
|
23
23
|
return item;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<menu-item ng-repeat="menu in menus" ng-if="!menu.hidden" ng-click="open.call(this)" ng-mouseleave="cancel()"
|
|
2
2
|
ng-mouseenter="popMenu.call(this)" ng-mousedown="popMenu1.call(this,event)" ng-class="{'has-children':menu.children&&menu.children.length,
|
|
3
3
|
'warn':menu.type==='danger'||menu.type==='warn'||menu.type==='red',
|
|
4
|
-
'
|
|
4
|
+
'actived':menu.isActived()
|
|
5
5
|
}">
|
|
6
6
|
</menu-item>
|
package/coms/zimoli/menuList.js
CHANGED
|
@@ -166,18 +166,19 @@ function register() {
|
|
|
166
166
|
}
|
|
167
167
|
function main(page, items, active, direction = 'y') {
|
|
168
168
|
if (!isNode(page)) {
|
|
169
|
-
var page =
|
|
169
|
+
var page = document.createElement("menu-list");
|
|
170
170
|
}
|
|
171
171
|
var main = this;
|
|
172
172
|
if (direction == 'y') page.ispop = true;
|
|
173
173
|
var istoolbar = direction === 't';
|
|
174
|
-
function popMenu(item, target) {
|
|
174
|
+
function popMenu(item, target, emptyFocus) {
|
|
175
175
|
if (page.actived) {
|
|
176
176
|
clear();
|
|
177
177
|
remove(page.actived);
|
|
178
178
|
}
|
|
179
|
+
if (emptyFocus !== false) page.setFocus(target);
|
|
180
|
+
if (!item.length) return;
|
|
179
181
|
page.setFocus(target);
|
|
180
|
-
if (!item.children || !item.children.length) return;
|
|
181
182
|
var clone = template.cloneNode();
|
|
182
183
|
clone.$parentScopes = page.$parentScopes;
|
|
183
184
|
clone.$scope = page.$scope;
|
|
@@ -188,7 +189,6 @@ function main(page, items, active, direction = 'y') {
|
|
|
188
189
|
page.actived = menu;
|
|
189
190
|
menu.root = page.root || page;
|
|
190
191
|
popup(menu, target);
|
|
191
|
-
menu.setFocus(menu.firstMenu);
|
|
192
192
|
if (page.ispop === true) {
|
|
193
193
|
} else {
|
|
194
194
|
page.ispop = 1;
|
|
@@ -234,18 +234,19 @@ function main(page, items, active, direction = 'y') {
|
|
|
234
234
|
var pop = active(this.menu, this);
|
|
235
235
|
if (pop === false) return;
|
|
236
236
|
var root = page.root || page;
|
|
237
|
-
if (root.direction === 't') {
|
|
237
|
+
if (root.direction === 't' || root.selected) {
|
|
238
238
|
var menu = this.menu;
|
|
239
|
+
if (root.selected) root.selected.setActive(false);
|
|
239
240
|
if (root !== page) {
|
|
240
|
-
delete menu.children;
|
|
241
241
|
var target = root.actived.target;
|
|
242
|
-
|
|
242
|
+
if (isObject(menu.value)) delete menu.value.children;
|
|
243
|
+
target.menu.extends(menu.value);
|
|
244
|
+
menu = target.menu;
|
|
243
245
|
}
|
|
244
246
|
else {
|
|
245
247
|
target = this;
|
|
246
248
|
}
|
|
247
|
-
|
|
248
|
-
menu.selected = true;
|
|
249
|
+
menu.setActive(true);
|
|
249
250
|
root.selected = target.menu;
|
|
250
251
|
}
|
|
251
252
|
if (root.ispop === 1) root.ispop = false;
|
|
@@ -253,7 +254,7 @@ function main(page, items, active, direction = 'y') {
|
|
|
253
254
|
while (mounted_menus.length && mounted_menus[mounted_menus.length - 1] !== page.actived) remove(mounted_menus.pop());
|
|
254
255
|
if (!mounted_menus.length) {
|
|
255
256
|
if (byMousedown === false) return;
|
|
256
|
-
popMenu(this.menu, this);
|
|
257
|
+
popMenu(this.menu, this, false);
|
|
257
258
|
}
|
|
258
259
|
else {
|
|
259
260
|
remove(mounted_menus.pop());
|
|
@@ -262,7 +263,7 @@ function main(page, items, active, direction = 'y') {
|
|
|
262
263
|
else {
|
|
263
264
|
while (mounted_menus.length && mounted_menus[mounted_menus.length - 1] !== page) remove(mounted_menus.pop());
|
|
264
265
|
if (byMousedown === false) return;
|
|
265
|
-
popMenu(this.menu, this);
|
|
266
|
+
popMenu(this.menu, this, false);
|
|
266
267
|
if (!page.actived) {
|
|
267
268
|
(page.root || page).blur();
|
|
268
269
|
}
|
|
@@ -286,7 +287,7 @@ function main(page, items, active, direction = 'y') {
|
|
|
286
287
|
var $scope = {
|
|
287
288
|
"menu-item"(e, s) {
|
|
288
289
|
var a = button(
|
|
289
|
-
menuItem(e, s, this.hasIcon)
|
|
290
|
+
menuItem(e, s.value, this.hasIcon)
|
|
290
291
|
);
|
|
291
292
|
if (!page.firstMenu) {
|
|
292
293
|
page.firstMenu = a;
|
|
@@ -307,14 +308,13 @@ function main(page, items, active, direction = 'y') {
|
|
|
307
308
|
var itemName = src.itemName;
|
|
308
309
|
var className = `{'has-children':${itemName}.children&&${itemName}.children.length,
|
|
309
310
|
'warn':${itemName}.type==='danger'||${itemName}.type==='warn'||${itemName}.type==='red',
|
|
310
|
-
|
|
311
|
+
actived:${itemName}.isActived()
|
|
311
312
|
}`;
|
|
312
313
|
var notHidden = `!${itemName}.hidden`;
|
|
313
314
|
var generator = getGenerator(page, 'menu-item');
|
|
314
315
|
list(page, function (index) {
|
|
315
316
|
var item = items[index];
|
|
316
317
|
if (!item) return;
|
|
317
|
-
if (item instanceof Item) item = item.value;
|
|
318
318
|
var a = $scope["menu-item"](null, item);
|
|
319
319
|
if (src.itemName) a.setAttribute("e-if", notHidden);
|
|
320
320
|
a.setAttribute("e-class", className);
|
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/on.js
CHANGED
|
@@ -253,7 +253,7 @@ var checkroot = function (element, k) {
|
|
|
253
253
|
if (!(k in element)) {
|
|
254
254
|
if (element === window && k in document) {
|
|
255
255
|
element = document;
|
|
256
|
-
if (!checkroot[k]) checkroot[k] = true, console.warn("
|
|
256
|
+
if (!checkroot[k]) checkroot[k] = true, console.warn("使用 document 的", k, "替代 window 的");
|
|
257
257
|
}
|
|
258
258
|
}
|
|
259
259
|
return element;
|
package/coms/zimoli/once.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var oncetree = {};
|
|
2
3
|
function _once(key) {
|
|
3
4
|
if (oncetree[key]) return oncetree[key];
|
|
4
|
-
return oncetree[key] = function (target, handler) {
|
|
5
|
-
var off = on(key)(target, function (event) {
|
|
5
|
+
return oncetree[key] = function (target, handler, firstmost) {
|
|
6
|
+
var off = on(key).call(this, target, function (event) {
|
|
6
7
|
off();
|
|
7
8
|
return handler.call(this, event);
|
|
8
|
-
});
|
|
9
|
+
}, firstmost);
|
|
9
10
|
return off;
|
|
10
11
|
};
|
|
11
12
|
}
|
|
12
|
-
function once(key, target, handler) {
|
|
13
|
-
if (isFunction(handler) && isNode(target)) return _once(key)(target, handler);
|
|
13
|
+
function once(key, target, handler, firstmost) {
|
|
14
|
+
if (isFunction(handler) && isNode(target)) return _once(key).call(this, target, handler, firstmost);
|
|
14
15
|
return _once(key);
|
|
15
16
|
}
|
package/coms/zimoli/onmounted.js
CHANGED
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) {
|
|
@@ -228,7 +238,7 @@ var createIf = function (search, id = 0) {
|
|
|
228
238
|
appendChild.before(this, element);
|
|
229
239
|
if (element.renderid < 0) {
|
|
230
240
|
element.renderid = id;
|
|
231
|
-
elements[cx] = render(element);
|
|
241
|
+
elements[cx] = render(element, this.$scope, this.$parentScopes);
|
|
232
242
|
}
|
|
233
243
|
}
|
|
234
244
|
else {
|
|
@@ -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,19 +807,40 @@ 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;
|
|
825
|
+
function render(element, scope, parentScopes, lazy = true) {
|
|
801
826
|
var if_top_length = if_top.length;
|
|
802
|
-
var
|
|
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;
|
|
831
|
+
if (!renderlock) {
|
|
832
|
+
haslock = true;
|
|
833
|
+
renderlock = true;
|
|
834
|
+
eagermount = !+lazy;
|
|
835
|
+
}
|
|
836
|
+
var e = renderElement(element, scope, parentScopes, renderonce);
|
|
837
|
+
if (haslock) {
|
|
838
|
+
renderlock = false;
|
|
839
|
+
eagermount = false;
|
|
840
|
+
}
|
|
803
841
|
if (if_top_length < if_top.length) if_top.splice(if_top_length, if_top.length - if_top_length);
|
|
804
842
|
return e;
|
|
805
843
|
}
|
|
806
|
-
|
|
807
844
|
var digest = lazy(refresh, -{});
|
|
808
845
|
render.digest = render.apply = render.refresh = digest;
|
|
809
846
|
render.parseRepeat = parseRepeat;
|
package/coms/zimoli/resize.js
CHANGED
|
@@ -142,6 +142,7 @@ function resize(elem, initialEvent) {
|
|
|
142
142
|
}
|
|
143
143
|
moveupon(window, handle);
|
|
144
144
|
|
|
145
|
+
|
|
145
146
|
resize.on = function (elem, dragHandle) {
|
|
146
147
|
if (elem) {
|
|
147
148
|
elem.dragHandle = dragHandle;
|
|
@@ -150,6 +151,23 @@ resize.on = function (elem, dragHandle) {
|
|
|
150
151
|
var off = onmousemove(window, getResizer);
|
|
151
152
|
onremove(elem, off);
|
|
152
153
|
});
|
|
154
|
+
var computed = getComputedStyle(elem);
|
|
155
|
+
var resizeh = function () {
|
|
156
|
+
var elem = this;
|
|
157
|
+
if (elem.scrollWidth > elem.clientWidth) {
|
|
158
|
+
css(elem, { width: elem.offsetWidth });
|
|
159
|
+
dispatch(elem, 'resize');
|
|
160
|
+
}
|
|
161
|
+
if (elem.scrollHeight > elem.clientHeight) {
|
|
162
|
+
css(elem, { height: elem.offsetHeight });
|
|
163
|
+
dispatch(elem, 'resize');
|
|
164
|
+
}
|
|
165
|
+
if (unbind && parseInt(computed.height) && parseInt(computed.width)) {
|
|
166
|
+
unbind();
|
|
167
|
+
unbind = null;
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
if (!parseInt(computed.height) || !parseInt(computed.width)) var unbind = bind('render')(elem, resizeh);
|
|
153
171
|
if (!~resizingElements.indexOf(elem)) {
|
|
154
172
|
resizingElements.push(elem);
|
|
155
173
|
once('remove')(elem, function () {
|
package/coms/zimoli/scrollbar.js
CHANGED
|
@@ -2,7 +2,7 @@ var scrollbary = function () {
|
|
|
2
2
|
var reshape = function (scrollHeight, offsetHeight) {
|
|
3
3
|
var target = this.target;
|
|
4
4
|
if (target) {
|
|
5
|
-
this
|
|
5
|
+
css(this, { height: target.offsetHeight });
|
|
6
6
|
}
|
|
7
7
|
var scrollbarHeight = this.offsetHeight;
|
|
8
8
|
var ratio = offsetHeight / scrollHeight;
|
|
@@ -10,11 +10,14 @@ var scrollbary = function () {
|
|
|
10
10
|
if (thumbHeight < 14) thumbHeight = 14;
|
|
11
11
|
if (thumbHeight < 0) thumbHeight = 0;
|
|
12
12
|
this.restHeight = scrollHeight - offsetHeight;
|
|
13
|
-
this.thumb
|
|
13
|
+
css(this.thumb, {
|
|
14
|
+
height: thumbHeight
|
|
15
|
+
});
|
|
14
16
|
if (thumbHeight >= this.clientHeight) {
|
|
15
17
|
this.style.opacity = 0;
|
|
16
18
|
} else {
|
|
17
19
|
this.style.opacity = 1;
|
|
20
|
+
this.autoshow();
|
|
18
21
|
}
|
|
19
22
|
};
|
|
20
23
|
var getTop = function () {
|
|
@@ -59,7 +62,7 @@ var scrollbary = function () {
|
|
|
59
62
|
deltaY = targetY - thumbTop;
|
|
60
63
|
moving.y += deltaY;
|
|
61
64
|
if (targetY !== thumbTop) {
|
|
62
|
-
thumb
|
|
65
|
+
css(thumb, { top: targetY });
|
|
63
66
|
dispatch(target, "change");
|
|
64
67
|
}
|
|
65
68
|
};
|
|
@@ -138,7 +141,7 @@ var scrollbary = function () {
|
|
|
138
141
|
return { Height, height };
|
|
139
142
|
};
|
|
140
143
|
|
|
141
|
-
function bindTarget(_container) {
|
|
144
|
+
function bindTarget(_container, followResize = _container) {
|
|
142
145
|
var _scrollbar = this;
|
|
143
146
|
_container.with = _scrollbar;
|
|
144
147
|
onappend(_container, _scrollbar.reshape);
|
|
@@ -146,24 +149,33 @@ var scrollbary = function () {
|
|
|
146
149
|
on("scroll")(_container, function () {
|
|
147
150
|
var top = getTargetTop(_container);
|
|
148
151
|
_scrollbar.scrollTo(top);
|
|
152
|
+
_scrollbar.autoshow();
|
|
149
153
|
});
|
|
150
154
|
on("change")(_scrollbar, function () {
|
|
151
155
|
var top = _scrollbar.Top();
|
|
152
156
|
setTargetTop(_container, top);
|
|
153
157
|
});
|
|
154
|
-
_scrollbar.reshape
|
|
158
|
+
if (followResize) on("resize")(followResize, _scrollbar.reshape);
|
|
155
159
|
}
|
|
156
|
-
function scrollbar() {
|
|
157
|
-
var _scrollbar =
|
|
160
|
+
function scrollbar(elem) {
|
|
161
|
+
var _scrollbar = elem || document.createElement("scrollbar");
|
|
158
162
|
_scrollbar.reshape = function () {
|
|
159
163
|
var _container = _scrollbar.target;
|
|
160
164
|
var { Height, height } = getTargetHeight(_container);
|
|
161
165
|
reshape.call(_scrollbar, Height, height);
|
|
162
166
|
};
|
|
163
167
|
_scrollbar.scrollTo = scrollTo;
|
|
164
|
-
var _handler =
|
|
168
|
+
var _handler = document.createElement("scrollbar-thumb");
|
|
165
169
|
_handler.className = "thumb";
|
|
166
170
|
_scrollbar.Top = getTop;
|
|
171
|
+
_scrollbar.autohide = lazy(function () {
|
|
172
|
+
this.thumb.style.opacity = 0;
|
|
173
|
+
}, 600);
|
|
174
|
+
_scrollbar.autoshow = function () {
|
|
175
|
+
this.autohide();
|
|
176
|
+
this.thumb.style.opacity = 1;
|
|
177
|
+
};
|
|
178
|
+
|
|
167
179
|
moveupon(_handler, {
|
|
168
180
|
start: mousedown,
|
|
169
181
|
move: mousemove,
|
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
& {
|
|
2
2
|
position: absolute;
|
|
3
|
-
width:
|
|
3
|
+
width: 6px;
|
|
4
4
|
background-color: rgba(0, 0, 0, .1);
|
|
5
5
|
border-radius: 7px;
|
|
6
6
|
height: 100px;
|
|
7
|
+
border-left: 3px solid transparent;
|
|
8
|
+
|
|
9
|
+
&:hover {
|
|
10
|
+
>.thumb {
|
|
11
|
+
opacity: 1 !important;
|
|
12
|
+
overflow: visible;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
7
16
|
>.thumb {
|
|
17
|
+
&:after {
|
|
18
|
+
position: absolute;
|
|
19
|
+
top: 0;
|
|
20
|
+
bottom: 0;
|
|
21
|
+
left: -4px;
|
|
22
|
+
right: -4px;
|
|
23
|
+
width: auto;
|
|
24
|
+
display: block;
|
|
25
|
+
content: "";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
transition: opacity .2s;
|
|
8
29
|
position: absolute;
|
|
9
30
|
border-radius: 7px;
|
|
10
31
|
height: 100%;
|