efront 3.4.5 → 3.5.1
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.yml +2 -1
- package/apps/pivot/home/welcome.js +4 -4
- package/apps/pivot/main.js +4 -1
- package/apps/pivot/main.less +3 -0
- package/apps/pivot/menu.yml +3 -1
- package/apps/pivot/share/edit.html +10 -0
- package/apps/pivot/share/edit.js +16 -0
- package/apps/pivot/share/list.html +1 -0
- package/apps/pivot/share/list.js +36 -0
- package/coms/layer/glance.js +2 -2
- package/coms/zimoli/alert.js +7 -6
- package/coms/zimoli/appendChild.js +1 -0
- package/coms/zimoli/button.js +5 -0
- package/coms/zimoli/button.less +6 -2
- package/coms/zimoli/checker.html +1 -1
- package/coms/zimoli/checker.less +8 -6
- package/coms/zimoli/color.js +128 -83
- package/coms/zimoli/colorpad.js +2 -4
- package/coms/zimoli/data.js +8 -4
- package/coms/zimoli/gallery.js +2 -12
- package/coms/zimoli/getGenerator.js +16 -10
- package/coms/zimoli/image.less +4 -0
- package/coms/zimoli/list.js +2 -12
- package/coms/zimoli/menu.js +4 -14
- package/coms/zimoli/menuList.js +4 -3
- package/coms/zimoli/on.js +18 -0
- package/coms/zimoli/radio.html +1 -1
- package/coms/zimoli/radio.less +25 -7
- package/coms/zimoli/render.js +97 -101
- package/coms/zimoli/table.html +16 -0
- package/coms/zimoli/table.js +15 -0
- package/coms/zimoli/table.less +57 -40
- package/coms/zimoli/view.less +11 -4
- package/coms/zimoli/zimoli.js +11 -5
- package/package.json +1 -1
- package/public/efront.js +1 -1
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
|
|
2
2
|
var _slider = createElement(div);
|
|
3
|
-
var
|
|
3
|
+
var empty = function (index, item) {
|
|
4
|
+
if (!item) return;
|
|
5
|
+
return document.createElement('empty');
|
|
6
|
+
};
|
|
7
|
+
var getGenerator = function (container) {
|
|
4
8
|
if (!container) return;
|
|
9
|
+
if (!container.childNodes.length) return container.$generator || empty;
|
|
5
10
|
var template = document.createElement("div");
|
|
6
11
|
var templates = [].concat.apply([], container.childNodes).filter(a => {
|
|
7
12
|
if (a.hasAttribute('insert')) {
|
|
@@ -20,26 +25,27 @@ var getGenerator = function (container, parsedSrc) {
|
|
|
20
25
|
appendChild(template, templates);
|
|
21
26
|
container.insertBefore = _slider.insertBefore;
|
|
22
27
|
container.appendChild = _slider.appendChild;
|
|
23
|
-
|
|
28
|
+
var scopes = container.$parentScopes.concat(container.$scope);
|
|
29
|
+
return container.$generator = function (index, com) {
|
|
24
30
|
if (!com) {
|
|
25
31
|
if (!container.src || index >= container.src.length) return;
|
|
26
32
|
com = container.src[index];
|
|
27
33
|
}
|
|
28
34
|
if (!com) return;
|
|
29
|
-
var template1 = template.cloneNode();
|
|
30
|
-
template1.innerHTML = template.innerHTML;
|
|
35
|
+
var template1 = template.cloneNode(true);
|
|
31
36
|
if (!template1.childNodes.length) return template1;
|
|
32
37
|
var item = template1.childNodes[0];
|
|
33
38
|
item.with = [].concat.apply([], template1.childNodes).slice(1);
|
|
39
|
+
var parsedSrc = container.$src;
|
|
34
40
|
if (parsedSrc) {
|
|
35
41
|
var { keyName, itemName, indexName } = parsedSrc;
|
|
36
|
-
var newScope =
|
|
42
|
+
var newScope = {
|
|
37
43
|
[keyName || '$key']: index,
|
|
38
44
|
[itemName || '$item']: com,
|
|
39
45
|
[indexName || '$index']: index
|
|
40
|
-
}
|
|
41
|
-
var newItem = render(item, newScope);
|
|
42
|
-
newItem.with = render(item.with, newScope);
|
|
46
|
+
};
|
|
47
|
+
var newItem = render(item, newScope, scopes);
|
|
48
|
+
if (item.with.length) newItem.with = render(item.with, newScope, scopes);
|
|
43
49
|
} else {
|
|
44
50
|
var newScope = container.src[index];
|
|
45
51
|
if (!isObject(newScope)) newScope = {
|
|
@@ -59,8 +65,8 @@ var getGenerator = function (container, parsedSrc) {
|
|
|
59
65
|
return this.$item;
|
|
60
66
|
}
|
|
61
67
|
}
|
|
62
|
-
var newItem = render(item, newScope,
|
|
63
|
-
newItem.with = render(newItem.with = item.with, newScope,
|
|
68
|
+
var newItem = render(item, newScope, scopes);
|
|
69
|
+
newItem.with = render(newItem.with = item.with, newScope, scopes);
|
|
64
70
|
}
|
|
65
71
|
return newItem;
|
|
66
72
|
};
|
package/coms/zimoli/image.less
CHANGED
package/coms/zimoli/list.js
CHANGED
|
@@ -433,18 +433,8 @@ function list() {
|
|
|
433
433
|
bindSrc = container;
|
|
434
434
|
container = div();
|
|
435
435
|
} else if (container && !generator) {
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
var parsedSrc = render.parseRepeat(src);
|
|
439
|
-
if (!parsedSrc) {
|
|
440
|
-
container.setAttribute("ng-src", src);
|
|
441
|
-
container.removeAttribute("src");
|
|
442
|
-
var generator = getGenerator(container);
|
|
443
|
-
} else {
|
|
444
|
-
container.setAttribute("ng-src", parsedSrc.srcName);
|
|
445
|
-
container.removeAttribute("src");
|
|
446
|
-
var generator = getGenerator(container, parsedSrc);
|
|
447
|
-
}
|
|
436
|
+
if ("$src" in container) {
|
|
437
|
+
generator = getGenerator(container);
|
|
448
438
|
care(container, function () {
|
|
449
439
|
var index = container.index();
|
|
450
440
|
container.clean();
|
package/coms/zimoli/menu.js
CHANGED
|
@@ -110,18 +110,6 @@ function main(elem, mode) {
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
mode = mode ? mode.toLowerCase() : "horizonal";
|
|
113
|
-
var src = elem.getAttribute("src") || elem.getAttribute("ng-src") || elem.getAttribute("v-src");
|
|
114
|
-
if (src) {
|
|
115
|
-
var parsedSrc = render.parseRepeat(src);
|
|
116
|
-
if (!parsedSrc) {
|
|
117
|
-
elem.removeAttribute("src");
|
|
118
|
-
var generator = getGenerator(elem);
|
|
119
|
-
} else {
|
|
120
|
-
elem.removeAttribute("src");
|
|
121
|
-
var generator = getGenerator(elem, parsedSrc);
|
|
122
|
-
}
|
|
123
|
-
elem.setAttribute("ng-src", parsedSrc ? parsedSrc.srcName : src);
|
|
124
|
-
}
|
|
125
113
|
|
|
126
114
|
switch (mode) {
|
|
127
115
|
case "i":
|
|
@@ -130,6 +118,7 @@ function main(elem, mode) {
|
|
|
130
118
|
case "t":
|
|
131
119
|
case "tree":
|
|
132
120
|
if (elem) {
|
|
121
|
+
var generator = getGenerator(elem);
|
|
133
122
|
tree(elem, function (index, item) {
|
|
134
123
|
var e = generator(index, item);
|
|
135
124
|
if (!e || e.children.length) return e;
|
|
@@ -165,9 +154,10 @@ function main(elem, mode) {
|
|
|
165
154
|
var emit = function (item) {
|
|
166
155
|
active(elem, item, item.value);
|
|
167
156
|
};
|
|
168
|
-
if (src) {
|
|
157
|
+
if ("$src" in elem) {
|
|
158
|
+
getGenerator(elem);
|
|
169
159
|
care(elem, function (src) {
|
|
170
|
-
menuList(elem, getTreeFromData(src), emit,
|
|
160
|
+
menuList(elem, getTreeFromData(src), emit, direction);
|
|
171
161
|
});
|
|
172
162
|
} else {
|
|
173
163
|
var nodes = getArrayNodes(elem);
|
package/coms/zimoli/menuList.js
CHANGED
|
@@ -8,7 +8,7 @@ var release = function () {
|
|
|
8
8
|
var clear = function () {
|
|
9
9
|
clearTimeout(releaseTimer);
|
|
10
10
|
};
|
|
11
|
-
function main(page, items, active,
|
|
11
|
+
function main(page, items, active, direction = 'y') {
|
|
12
12
|
if (!isNode(page)) {
|
|
13
13
|
var page = div();
|
|
14
14
|
}
|
|
@@ -21,7 +21,7 @@ function main(page, items, active, generator, direction = 'y') {
|
|
|
21
21
|
if (!item.children || !item.children.length) return;
|
|
22
22
|
var clone = template.cloneNode();
|
|
23
23
|
clone.innerHTML = template.innerHTML;
|
|
24
|
-
var menu = main(clone, item.children, active
|
|
24
|
+
var menu = main(clone, item.children, active);
|
|
25
25
|
mounted_menus.push(menu);
|
|
26
26
|
|
|
27
27
|
page.active = menu;
|
|
@@ -46,7 +46,7 @@ function main(page, items, active, generator, direction = 'y') {
|
|
|
46
46
|
template.innerHTML = page.innerHTML;
|
|
47
47
|
page.tempalte = template;
|
|
48
48
|
}
|
|
49
|
-
if (!
|
|
49
|
+
if (!page.children.length || page.menutype === 1) {
|
|
50
50
|
page.innerHTML = menuList;
|
|
51
51
|
page.menutype = 1;
|
|
52
52
|
var hasIcon = function () {
|
|
@@ -82,6 +82,7 @@ function main(page, items, active, generator, direction = 'y') {
|
|
|
82
82
|
this.$scope.hasIcon = hasIcon();
|
|
83
83
|
});
|
|
84
84
|
} else {
|
|
85
|
+
var generator = getGenerator(page);
|
|
85
86
|
list(page, function (index) {
|
|
86
87
|
var elem = generator(index);
|
|
87
88
|
if (!elem) return;
|
package/coms/zimoli/on.js
CHANGED
|
@@ -144,6 +144,22 @@ function checkKeyNeed(eventtypes, e) {
|
|
|
144
144
|
}
|
|
145
145
|
return true;
|
|
146
146
|
}
|
|
147
|
+
function wrapHandler(h) {
|
|
148
|
+
if (h instanceof Function) {
|
|
149
|
+
return function () {
|
|
150
|
+
var res = h.apply(this, arguments);
|
|
151
|
+
if (res && isFunction(res.then)) {
|
|
152
|
+
this.setAttribute('pending', '');
|
|
153
|
+
var removePending = () => {
|
|
154
|
+
this.removeAttribute('pending');
|
|
155
|
+
};
|
|
156
|
+
res.then(removePending, removePending);
|
|
157
|
+
}
|
|
158
|
+
return res;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return h;
|
|
162
|
+
}
|
|
147
163
|
if (is_addEventListener_enabled) {
|
|
148
164
|
var on = function (k) {
|
|
149
165
|
var on_event_path = "on" + k;
|
|
@@ -151,6 +167,7 @@ if (is_addEventListener_enabled) {
|
|
|
151
167
|
var eventtypes = parseEventTypes(k);
|
|
152
168
|
k = k.replace(eventtypereg, '');
|
|
153
169
|
function addhandler(element, handler, firstmost) {
|
|
170
|
+
handler = wrapHandler(handler);
|
|
154
171
|
if (eventtypes.capture) firstmost = true;
|
|
155
172
|
if (k === changes_key) {
|
|
156
173
|
if (!element.needchanges) element.needchanges = 0;
|
|
@@ -190,6 +207,7 @@ if (is_addEventListener_enabled) {
|
|
|
190
207
|
|
|
191
208
|
if (handlersMap[on_event_path]) return handlersMap[on_event_path];
|
|
192
209
|
function addhandler(element, handler, firstmost = false) {
|
|
210
|
+
handler = wrapHandler(handler);
|
|
193
211
|
if (eventtypes.capture) {
|
|
194
212
|
console.warn("当前运行环境不支持事件capture");
|
|
195
213
|
firstmost = true;
|
package/coms/zimoli/radio.html
CHANGED
package/coms/zimoli/radio.less
CHANGED
|
@@ -6,18 +6,36 @@
|
|
|
6
6
|
font-family: sans-serif;
|
|
7
7
|
display: inline-block;
|
|
8
8
|
position: relative;
|
|
9
|
-
margin-right:
|
|
10
|
-
line-height: 1;
|
|
9
|
+
margin-right: .3em;
|
|
11
10
|
text-align: center;
|
|
11
|
+
vertical-align: middle;
|
|
12
|
+
width: 1em;
|
|
13
|
+
height: 1em;
|
|
14
|
+
border: .1em solid;
|
|
15
|
+
border-radius: 50%;
|
|
12
16
|
|
|
13
17
|
>s {
|
|
14
18
|
display: none;
|
|
15
19
|
position: absolute;
|
|
16
20
|
text-decoration: none;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
overflow: hidden;
|
|
22
|
+
border-radius: 50%;
|
|
23
|
+
width: .4em;
|
|
24
|
+
height: .4em;
|
|
25
|
+
top: 50%;
|
|
26
|
+
left: 50%;
|
|
27
|
+
margin: -.2em;
|
|
28
|
+
|
|
29
|
+
text-indent: -.5em;
|
|
30
|
+
|
|
31
|
+
&:after {
|
|
32
|
+
position: absolute;
|
|
33
|
+
left: 0;
|
|
34
|
+
top: 0;
|
|
35
|
+
display: block;
|
|
36
|
+
content: "";
|
|
37
|
+
border: .3em solid;
|
|
38
|
+
}
|
|
21
39
|
}
|
|
22
40
|
}
|
|
23
41
|
|
|
@@ -25,7 +43,7 @@
|
|
|
25
43
|
&.activate {
|
|
26
44
|
>r {
|
|
27
45
|
>s {
|
|
28
|
-
display:
|
|
46
|
+
display: block;
|
|
29
47
|
}
|
|
30
48
|
}
|
|
31
49
|
}
|
package/coms/zimoli/render.js
CHANGED
|
@@ -55,7 +55,7 @@ var variableReg = /([^\:\,\+\=\-\!%\^\|\/\&\*\!\;\?\>\<~\{\}\s]|\?\s*\.(?=[^\d])
|
|
|
55
55
|
var createGetter = function (search, isprop = true) {
|
|
56
56
|
var [withContext, searchContext] = search;
|
|
57
57
|
if (!searchContext) return function () { };
|
|
58
|
-
var ret =
|
|
58
|
+
var ret = /\;/.test(searchContext) ? "" : "return ";
|
|
59
59
|
if (/\?\s*\.(?=[^\d])/.test(searchContext)) {
|
|
60
60
|
searchContext = searchContext.replace(variableReg, function (context) {
|
|
61
61
|
var dist;
|
|
@@ -144,7 +144,10 @@ var createRepeat = function (search, id = 0) {
|
|
|
144
144
|
throw new Error("数据量过大,取消绘制!");
|
|
145
145
|
}
|
|
146
146
|
var $parentScopes = element.$parentScopes || [];
|
|
147
|
-
|
|
147
|
+
var $struct = element.$struct;
|
|
148
|
+
if (element.$scope) {
|
|
149
|
+
$struct = Object.assign({}, $struct, { context: $struct.context + `with(this.$parentScopes[${$parentScopes.length}])` }), $parentScopes = $parentScopes.concat(element.$scope);
|
|
150
|
+
}
|
|
148
151
|
var clonedElements1 = Object.create(null);
|
|
149
152
|
var cloned = keys.map(function (key, cx) {
|
|
150
153
|
var k = isArrayResult ? cx : key;
|
|
@@ -161,6 +164,7 @@ var createRepeat = function (search, id = 0) {
|
|
|
161
164
|
};
|
|
162
165
|
clone.$scope = $scope;
|
|
163
166
|
clone.$parentScopes = $parentScopes;
|
|
167
|
+
clone.$struct = $struct;
|
|
164
168
|
clone = render(clone, $scope, clone.$parentScopes);
|
|
165
169
|
clonedElements1[k] = clone;
|
|
166
170
|
return clone;
|
|
@@ -302,19 +306,17 @@ var parseIfWithRepeat = function (ifExpression, repeatExpression) {
|
|
|
302
306
|
|
|
303
307
|
var createStructure = function ({ name: ifkey, key, value: ifexp } = {}, { name: forkey, value: repeat } = {}, context) {
|
|
304
308
|
var element = this;
|
|
305
|
-
if (!ifkey) return structures.repeat.call(element, [context, repeat]);
|
|
306
|
-
if (!repeat) return structures[key].call(element, [context, ifexp]);
|
|
309
|
+
if (!ifkey) return element.removeAttribute(forkey), structures.repeat.call(element, [context, repeat]);
|
|
310
|
+
if (!repeat) return element.removeAttribute(ifkey), structures[key].call(element, [context, ifexp]);
|
|
307
311
|
if (!ifexp) {
|
|
308
312
|
element.removeAttribute(ifkey);
|
|
309
313
|
return structures[key].call(element, [context, ifexp]);
|
|
310
314
|
}
|
|
311
315
|
var { before, after } = parseIfWithRepeat(ifexp, repeat);
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
element.setAttribute(ifkey, after.join("&&"));
|
|
316
|
+
element.removeAttribute(ifkey);
|
|
317
|
+
if (after.length) {
|
|
318
|
+
element.setAttribute("a-if", after.join("&&"));
|
|
316
319
|
}
|
|
317
|
-
|
|
318
320
|
if (before.length > 0) {
|
|
319
321
|
// 懒渲染
|
|
320
322
|
createIf.call(element, [context, before.join("&&")], null);
|
|
@@ -367,6 +369,27 @@ var createBinder = function (binder) {
|
|
|
367
369
|
|
|
368
370
|
}
|
|
369
371
|
}
|
|
372
|
+
|
|
373
|
+
var src2 = function (search) {
|
|
374
|
+
var getter = createGetter(search).bind(this);
|
|
375
|
+
var savedValue;
|
|
376
|
+
this.renders.push(function () {
|
|
377
|
+
var origin = getter();
|
|
378
|
+
var temp = origin;
|
|
379
|
+
if (origin instanceof Array) {
|
|
380
|
+
temp = extend([], origin);
|
|
381
|
+
} else if (isObject(origin)) {
|
|
382
|
+
temp = extend({}, origin);
|
|
383
|
+
} else if (isEmpty(origin)) {
|
|
384
|
+
temp = "";
|
|
385
|
+
}
|
|
386
|
+
var changes = getChanges(temp, savedValue);
|
|
387
|
+
if (!changes || isEmpty(origin) && isEmpty(this.src)) return;
|
|
388
|
+
savedValue = temp;
|
|
389
|
+
this.src = origin;
|
|
390
|
+
cast(this, origin);
|
|
391
|
+
});
|
|
392
|
+
}
|
|
370
393
|
var directives = {
|
|
371
394
|
bind: createBinder(text),
|
|
372
395
|
html: createBinder(html),
|
|
@@ -379,47 +402,9 @@ var directives = {
|
|
|
379
402
|
elem.style.display = value ? '' : 'none';
|
|
380
403
|
}),
|
|
381
404
|
style: createBinder(css),
|
|
382
|
-
src(
|
|
383
|
-
var
|
|
384
|
-
|
|
385
|
-
var refresh = function () {
|
|
386
|
-
that.src = savedValue;
|
|
387
|
-
removeClass(that, "pending");
|
|
388
|
-
pending = 0;
|
|
389
|
-
};
|
|
390
|
-
var img = document.createElement("img");
|
|
391
|
-
var that = this;
|
|
392
|
-
this.renders.push(function () {
|
|
393
|
-
var origin = getter();
|
|
394
|
-
var temp = origin;
|
|
395
|
-
if (origin instanceof Array) {
|
|
396
|
-
temp = extend([], origin);
|
|
397
|
-
} else if (isObject(origin)) {
|
|
398
|
-
temp = extend({}, origin);
|
|
399
|
-
} else if (isEmpty(origin)) {
|
|
400
|
-
temp = "";
|
|
401
|
-
}
|
|
402
|
-
var changes = getChanges(temp, savedValue);
|
|
403
|
-
if (!changes) return;
|
|
404
|
-
savedValue = temp;
|
|
405
|
-
if (/^img$/i.test(this.tagName)) {
|
|
406
|
-
if (!isString(origin)) {
|
|
407
|
-
return;
|
|
408
|
-
}
|
|
409
|
-
if (origin) {
|
|
410
|
-
img.src = origin;
|
|
411
|
-
if (img.complete) {
|
|
412
|
-
this.src = origin;
|
|
413
|
-
} else if (!pending) {
|
|
414
|
-
addClass(this, "pending");
|
|
415
|
-
pending = setTimeout(refresh);
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
} else {
|
|
419
|
-
this.src = origin;
|
|
420
|
-
cast(this, origin);
|
|
421
|
-
}
|
|
422
|
-
});
|
|
405
|
+
src([s, src]) {
|
|
406
|
+
var parsedSrc = this.$src;
|
|
407
|
+
return src2.call(this, [s, parsedSrc ? parsedSrc.srcName : src]);
|
|
423
408
|
},
|
|
424
409
|
model(search) {
|
|
425
410
|
var getter = createGetter(search).bind(this);
|
|
@@ -510,6 +495,7 @@ var directives = {
|
|
|
510
495
|
});
|
|
511
496
|
},
|
|
512
497
|
};
|
|
498
|
+
directives.text = directives.bind;
|
|
513
499
|
// property binder
|
|
514
500
|
var binders = {
|
|
515
501
|
_(attr, search) {
|
|
@@ -551,6 +537,7 @@ var emiters = {
|
|
|
551
537
|
var res = getter.call(this, e);
|
|
552
538
|
if (res && isFunction(res.then)) res.then(digest, digest);
|
|
553
539
|
digest();
|
|
540
|
+
return res;
|
|
554
541
|
});
|
|
555
542
|
},
|
|
556
543
|
once(key, search) {
|
|
@@ -559,6 +546,7 @@ var emiters = {
|
|
|
559
546
|
var res = getter.call(this, e);
|
|
560
547
|
if (res && isFunction(res.then)) res.then(digest, digest);
|
|
561
548
|
digest();
|
|
549
|
+
return res;
|
|
562
550
|
});
|
|
563
551
|
}
|
|
564
552
|
};
|
|
@@ -607,10 +595,14 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
607
595
|
if (parentNode) {
|
|
608
596
|
if (parentNode.renderid > 1 || parentNode.isMounted) element.renderid = 2;
|
|
609
597
|
}
|
|
610
|
-
var ons = [];
|
|
611
598
|
|
|
612
599
|
if (isFirstRender) {
|
|
613
|
-
|
|
600
|
+
element.renders = element.renders ? [].concat(element.renders) : [];
|
|
601
|
+
var { ons, copys, attrs, props, binds, context: withContext } = element.$struct;
|
|
602
|
+
delete element.$struct;
|
|
603
|
+
if (binds.src) {
|
|
604
|
+
element.$src = parseRepeat(binds.src);
|
|
605
|
+
}
|
|
614
606
|
var { tagName, parentNode, nextSibling } = element;
|
|
615
607
|
// 替换元素
|
|
616
608
|
var constructor = getFromScopes(tagName, scope, parentScopes);
|
|
@@ -623,13 +615,12 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
623
615
|
constructor = getFromScopes(tagName, scope, parentScopes);
|
|
624
616
|
}
|
|
625
617
|
if (isFunction(constructor)) {
|
|
626
|
-
var attrsMap = {};
|
|
627
618
|
var replacer = constructor.call(scope, element, scope, parentScopes);
|
|
628
619
|
if (isNode(replacer) && element !== replacer) {
|
|
629
620
|
if (nextSibling) appendChild.before(nextSibling, replacer);
|
|
630
621
|
else if (parentNode) appendChild(parentNode, replacer);
|
|
631
622
|
if (element.parentNode === parentNode) remove(element);
|
|
632
|
-
|
|
623
|
+
copys.forEach(function (attr) {
|
|
633
624
|
var { name, value } = attr;
|
|
634
625
|
switch (name.toLowerCase()) {
|
|
635
626
|
case "class":
|
|
@@ -643,62 +634,39 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
643
634
|
replacer[name] = value;
|
|
644
635
|
break;
|
|
645
636
|
default:
|
|
646
|
-
|
|
647
|
-
replacer.setAttribute(name, value);
|
|
648
|
-
} else {
|
|
649
|
-
attrsMap[name] = attr;
|
|
650
|
-
}
|
|
637
|
+
replacer.setAttribute(name, value);
|
|
651
638
|
}
|
|
652
639
|
});
|
|
653
640
|
replacer.renderid = element.renderid;
|
|
641
|
+
replacer.renders = element.renders;
|
|
642
|
+
if (binds.src) replacer.$src = element.$src;
|
|
654
643
|
element = replacer;
|
|
655
644
|
element.$scope = scope;
|
|
656
645
|
element.$parentScopes = parentScopes;
|
|
657
646
|
}
|
|
658
|
-
[].concat.apply([], element.attributes).forEach(attr => {
|
|
659
|
-
if (attrsMap[attr.name]) {
|
|
660
|
-
delete attrsMap[attr.name];
|
|
661
|
-
}
|
|
662
|
-
attrsMap[attr.name] = attr;
|
|
663
|
-
});
|
|
664
|
-
attrs = Object.keys(attrsMap).map(key => attrsMap[key]);
|
|
665
647
|
}
|
|
666
648
|
}
|
|
667
649
|
if (element.children.length) renderElement(element.children, scope, parentScopes);
|
|
668
650
|
if (!isFirstRender) return element;
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
var emiter_reg = /^(?:(v|ng|on|once)\-|v\-on\:|@|once|on)/i;
|
|
673
|
-
attrs.map(function (attr) {
|
|
674
|
-
var { name, value } = attr;
|
|
675
|
-
if (/^(?:class|style|src|\:)$/i.test(name)) return;
|
|
676
|
-
var key = name.replace(/^(ng|v|.*?)\-|^[\:\_\.]/i, "").toLowerCase();
|
|
677
|
-
if (directives.hasOwnProperty(key) && isFunction(directives[key])) {
|
|
678
|
-
directives[key].call(element, [withContext, value]);
|
|
679
|
-
element.removeAttribute(name);
|
|
680
|
-
} else if (emiter_reg.test(name)) {
|
|
681
|
-
var match = emiter_reg.exec(name);
|
|
682
|
-
var ngon = (match[1] || match[0]).toLowerCase() === 'once' ? 'once' : 'on';
|
|
683
|
-
element.removeAttribute(name);
|
|
684
|
-
ons.push([emiters[ngon], name.replace(emiter_reg, ''), value]);
|
|
685
|
-
} else if (/^([\_\:\.]|v\-bind\:)/.test(name)) {
|
|
686
|
-
binders._.call(element, name.replace(/^([\_\:\.]|v\-bind\:)/, ""), [withContext, value]);
|
|
687
|
-
element.removeAttribute(name);
|
|
688
|
-
} else if (/[_@\:\.]$/.test(name)) {
|
|
689
|
-
binders[""].call(element, name.replace(/[_@\:\.]$/, ""), [withContext, value]);
|
|
690
|
-
element.removeAttribute(name);
|
|
691
|
-
} else {
|
|
692
|
-
name = name.replace(/\-(\w)/g, (_, w) => w.toUpperCase());
|
|
693
|
-
try {
|
|
694
|
-
element[name] = value === '' ? true : value;
|
|
695
|
-
} catch (e) {
|
|
696
|
-
}
|
|
651
|
+
for (var k in binds) {
|
|
652
|
+
if (directives.hasOwnProperty(k)) {
|
|
653
|
+
directives[k].call(element, [withContext, binds[k]])
|
|
697
654
|
}
|
|
698
|
-
|
|
699
|
-
|
|
655
|
+
else {
|
|
656
|
+
binders._.call(element, k, [withContext, binds[k]]);
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
for (var k in attrs) {
|
|
660
|
+
binders[""].call(element, k, [withContext, attrs[k]]);
|
|
661
|
+
}
|
|
662
|
+
for (var k in props) {
|
|
663
|
+
try {
|
|
664
|
+
element[k] = props[k];
|
|
665
|
+
} catch (e) { }
|
|
666
|
+
}
|
|
700
667
|
ons.forEach(([on, key, value]) => on.call(element, key, [withContext, value]));
|
|
701
668
|
if (element.renders.length) {
|
|
669
|
+
rebuild(element);
|
|
702
670
|
onappend(element, addRenderElement);
|
|
703
671
|
onremove(element, removeRenderElement);
|
|
704
672
|
if (element.isMounted || element.renderid > 1) addRenderElement.call(element);
|
|
@@ -720,11 +688,19 @@ function renderStructure(element, scope, parentScopes = []) {
|
|
|
720
688
|
}
|
|
721
689
|
var attrs = [].concat.apply([], element.attributes);
|
|
722
690
|
var withContext = parentScopes ? parentScopes.map((_, cx) => `with(this.$parentScopes[${cx}])`).join("") : '';
|
|
723
|
-
attrs = attrs.filter(a => structures.hasOwnProperty(a.name.replace(/^(ng|V|.*?)\-/i, '').toLowerCase()));
|
|
724
691
|
var types = {};
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
692
|
+
var emiter_reg = /^(?:(v|ng|on|once)\-|v\-on\:|@|once|on)/i;
|
|
693
|
+
var ons = [];
|
|
694
|
+
var copys = [];
|
|
695
|
+
var binds = {};
|
|
696
|
+
var attr1 = {};
|
|
697
|
+
var props = {};
|
|
698
|
+
for (var attr of attrs) {
|
|
699
|
+
var { name, value } = attr;
|
|
700
|
+
if (/^(?:class|style|src|\:|placeholder)$/i.test(name)) {
|
|
701
|
+
copys.push(attr);
|
|
702
|
+
continue;
|
|
703
|
+
}
|
|
728
704
|
var key = name.replace(/^(ng|v|.*?)\-/i, "").toLowerCase();
|
|
729
705
|
if (structures.hasOwnProperty(key) && isFunction(structures[key])) {
|
|
730
706
|
if (element.renderid <= -2) {
|
|
@@ -747,9 +723,29 @@ function renderStructure(element, scope, parentScopes = []) {
|
|
|
747
723
|
}
|
|
748
724
|
if (!element.renderid) element.renderid = -1;
|
|
749
725
|
else element.renderid = -2;
|
|
726
|
+
// element.removeAttribute(name);
|
|
727
|
+
}
|
|
728
|
+
if (element.$struct) continue;
|
|
729
|
+
var key = name.replace(/^(ng|v|.*?)\-|^[\:\_\.]|^v\-bind\:/i, "").toLowerCase();
|
|
730
|
+
if (directives.hasOwnProperty(key) || /^([\_\:\.]|v\-bind\:)/.test(name)) {
|
|
731
|
+
binds[key] = value;
|
|
750
732
|
element.removeAttribute(name);
|
|
751
733
|
}
|
|
752
|
-
|
|
734
|
+
else if (emiter_reg.test(name)) {
|
|
735
|
+
var match = emiter_reg.exec(name);
|
|
736
|
+
var ngon = (match[1] || match[0]).toLowerCase() === 'once' ? 'once' : 'on';
|
|
737
|
+
element.removeAttribute(name);
|
|
738
|
+
ons.push([emiters[ngon], name.replace(emiter_reg, ''), value]);
|
|
739
|
+
}
|
|
740
|
+
else if (/[_@\:\.]$/.test(name)) {
|
|
741
|
+
attr1[name.replace(/[_@\:\.]$/, "")] = value;
|
|
742
|
+
element.removeAttribute(name);
|
|
743
|
+
}
|
|
744
|
+
else {
|
|
745
|
+
props[name.replace(/\-(\w)/g, (_, w) => w.toUpperCase())] = value === "" ? true : value;
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
if (!element.$struct) element.$struct = { ons, copys, binds, attrs: attr1, props, context: withContext };
|
|
753
749
|
if (element.renderid <= -1) createStructure.call(element, types.if, types.repeat, withContext);
|
|
754
750
|
}
|
|
755
751
|
function render(element, scope, parentScopes) {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<thead>
|
|
2
|
+
<tr>
|
|
3
|
+
<td -repeat="f in fields"><i -if="f.icon" -class="f.icon"></i></span><span -if="f.name" -html="f.name"></span>
|
|
4
|
+
</td>
|
|
5
|
+
</tr>
|
|
6
|
+
</thead>
|
|
7
|
+
<tbody -src="d in data">
|
|
8
|
+
<tr>
|
|
9
|
+
<td -repeat="f in fields">
|
|
10
|
+
<span -if="f.key" -text="d[f.key]"></span>
|
|
11
|
+
<a on-click="o.do(d)" -if="f.options" -repeat="o in f.options">
|
|
12
|
+
<span -text=o.name></span>
|
|
13
|
+
</a>
|
|
14
|
+
</td>
|
|
15
|
+
</tr>
|
|
16
|
+
</tbody>
|
package/coms/zimoli/table.js
CHANGED
|
@@ -142,6 +142,7 @@ function table(elem) {
|
|
|
142
142
|
var cellMatchManager = function (element) {
|
|
143
143
|
if (!thead) [thead] = table.getElementsByTagName("thead");
|
|
144
144
|
if (table.resizing) return false;
|
|
145
|
+
if (!getTargetIn(thead, element)) return false;
|
|
145
146
|
if (!tdElementReg.test(element.tagName)) return false;
|
|
146
147
|
var savedRowDeltas = [];
|
|
147
148
|
[].map.call(thead.children, function (tr) {
|
|
@@ -153,10 +154,24 @@ function table(elem) {
|
|
|
153
154
|
table.dragbox = function () {
|
|
154
155
|
return thead;
|
|
155
156
|
};
|
|
157
|
+
care(table, function ([fields, data]) {
|
|
158
|
+
this.innerHTML = template;
|
|
159
|
+
render(this, {
|
|
160
|
+
fields,
|
|
161
|
+
tbody: list,
|
|
162
|
+
data,
|
|
163
|
+
a: button,
|
|
164
|
+
}, this.$parentScopes.concat(this.$scope));
|
|
165
|
+
})
|
|
156
166
|
autodragchildren(
|
|
157
167
|
table,
|
|
158
168
|
cellMatchManager,
|
|
159
169
|
function (src, dst, rel, append, parentNode) {
|
|
170
|
+
if (table.src) {
|
|
171
|
+
var [fields] = table.src;
|
|
172
|
+
var [f] = fields.splice(src, 1);
|
|
173
|
+
fields.splice(dst, 0, f);
|
|
174
|
+
}
|
|
160
175
|
var children = parentNode.children;
|
|
161
176
|
var srcElement = children[src];
|
|
162
177
|
var dstElement = children[rel];
|