efront 2.44.8 → 2.46.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/coms/basic/BitTree.js +1 -1
- package/coms/basic/crypt.js +1 -1
- package/coms/basic/decodeRange.js +0 -1
- package/coms/basic/loader.js +3 -2
- package/coms/basic/parseURL_test.js +32 -0
- package/coms/basic/refilm_decode.js +13 -2
- package/coms/basic/valid.js +10 -0
- package/coms/compile/scanner2.js +1 -1
- package/coms/zimoli/alert.js +12 -7
- package/coms/zimoli/appendChild.js +1 -0
- package/coms/zimoli/autodragchildren.js +96 -116
- package/coms/zimoli/avatar.js +0 -1
- package/coms/zimoli/button.js +5 -0
- package/coms/zimoli/button.less +6 -2
- package/coms/zimoli/checker.less +13 -14
- package/coms/zimoli/color.js +128 -83
- package/coms/zimoli/colorpad.js +2 -4
- package/coms/zimoli/cross.js +1 -1
- package/coms/zimoli/css.js +1 -0
- package/coms/zimoli/data.js +16 -9
- package/coms/zimoli/drag.js +2 -1
- package/coms/zimoli/encode62.js +13 -0
- package/coms/zimoli/field.html +2 -0
- package/coms/zimoli/field.js +41 -17
- package/coms/zimoli/field.less +19 -0
- package/coms/zimoli/form.js +8 -0
- package/coms/zimoli/gallery.js +2 -12
- package/coms/zimoli/getGenerator.js +16 -10
- package/coms/zimoli/getTreeFromData.js +9 -3
- package/coms/zimoli/image.less +4 -0
- package/coms/zimoli/list.js +2 -12
- package/coms/zimoli/menu.js +14 -14
- package/coms/zimoli/menu.less +1 -1
- package/coms/zimoli/menuItem.js +4 -1
- package/coms/zimoli/menuList.js +4 -3
- package/coms/zimoli/model.js +1 -0
- package/coms/zimoli/on.js +18 -0
- package/coms/zimoli/radio.html +1 -3
- package/coms/zimoli/radio.less +22 -16
- package/coms/zimoli/render.js +118 -151
- package/coms/zimoli/renderDefaults.js +1 -0
- package/coms/zimoli/submit.js +41 -0
- package/coms/zimoli/table.html +16 -0
- package/coms/zimoli/table.js +23 -1
- package/coms/zimoli/table.less +57 -39
- package/coms/zimoli/tree.js +4 -4
- package/coms/zimoli/view.js +0 -5
- package/coms/zimoli/view.less +21 -11
- package/coms/zimoli/zimoli.js +21 -13
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/coms/zimoli/beian.html +0 -1
- package/coms/zimoli/beian.js +0 -5
- package/coms/zimoli/beian.less +0 -13
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
|
@@ -101,19 +101,15 @@ function main(elem, mode) {
|
|
|
101
101
|
// }
|
|
102
102
|
// elem.setAttribute('browser', os);
|
|
103
103
|
var mode = elem.getAttribute('mode') || elem.getAttribute('type');
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
if (
|
|
109
|
-
elem.
|
|
110
|
-
var generator = getGenerator(elem);
|
|
111
|
-
} else {
|
|
112
|
-
elem.removeAttribute("src");
|
|
113
|
-
var generator = getGenerator(elem, parsedSrc);
|
|
104
|
+
if (!mode) {
|
|
105
|
+
if (/^[xyhvtci]/i.test(elem.tagName)) {
|
|
106
|
+
mode = elem.tagName.slice(0, 1);
|
|
107
|
+
}
|
|
108
|
+
else if (/[xyhvtci]$/i.test(elem.tagName)) {
|
|
109
|
+
mode = elem.tagName.slice(0, 1);
|
|
114
110
|
}
|
|
115
|
-
elem.setAttribute("ng-src", parsedSrc ? parsedSrc.srcName : src);
|
|
116
111
|
}
|
|
112
|
+
mode = mode ? mode.toLowerCase() : "horizonal";
|
|
117
113
|
|
|
118
114
|
switch (mode) {
|
|
119
115
|
case "i":
|
|
@@ -122,6 +118,7 @@ function main(elem, mode) {
|
|
|
122
118
|
case "t":
|
|
123
119
|
case "tree":
|
|
124
120
|
if (elem) {
|
|
121
|
+
var generator = getGenerator(elem);
|
|
125
122
|
tree(elem, function (index, item) {
|
|
126
123
|
var e = generator(index, item);
|
|
127
124
|
if (!e || e.children.length) return e;
|
|
@@ -133,12 +130,14 @@ function main(elem, mode) {
|
|
|
133
130
|
});
|
|
134
131
|
elem.renders.push(function () {
|
|
135
132
|
var src = this.src;
|
|
133
|
+
var hasIcon = false;
|
|
136
134
|
for (var cx = 0, dx = src; cx < dx; cx++) {
|
|
137
135
|
if (src[cx].icon) {
|
|
136
|
+
hasIcon = true;
|
|
138
137
|
break;
|
|
139
138
|
}
|
|
140
139
|
}
|
|
141
|
-
elem.useIcon =
|
|
140
|
+
elem.useIcon = hasIcon;
|
|
142
141
|
});
|
|
143
142
|
} else {
|
|
144
143
|
var nodes = getTreeNodes(elem);
|
|
@@ -155,9 +154,10 @@ function main(elem, mode) {
|
|
|
155
154
|
var emit = function (item) {
|
|
156
155
|
active(elem, item, item.value);
|
|
157
156
|
};
|
|
158
|
-
if (src) {
|
|
157
|
+
if ("$src" in elem) {
|
|
158
|
+
getGenerator(elem);
|
|
159
159
|
care(elem, function (src) {
|
|
160
|
-
menuList(elem, getTreeFromData(src), emit,
|
|
160
|
+
menuList(elem, getTreeFromData(src), emit, direction);
|
|
161
161
|
});
|
|
162
162
|
} else {
|
|
163
163
|
var nodes = getArrayNodes(elem);
|
package/coms/zimoli/menu.less
CHANGED
package/coms/zimoli/menuItem.js
CHANGED
|
@@ -2,7 +2,10 @@ function main(elem, scope, hasIcon) {
|
|
|
2
2
|
var item = elem || document.createElement('menu-item');
|
|
3
3
|
item.innerHTML = menuItem;
|
|
4
4
|
if (isObject(scope) && scope !== elem.$scope) {
|
|
5
|
-
render(item, { menu: scope, useIcon: hasIcon })
|
|
5
|
+
render(item, { menu: scope, useIcon: hasIcon, hasIcon })
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
extendIfNeeded(elem.$scope, { useIcon: false, hasIcon: false })
|
|
6
9
|
}
|
|
7
10
|
return item;
|
|
8
11
|
}
|
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/model.js
CHANGED
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
|
@@ -1,38 +1,44 @@
|
|
|
1
|
-
& {
|
|
2
|
-
vertical-align: top;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
1
|
>a {
|
|
6
2
|
line-height: inherit;
|
|
7
3
|
margin-right: 10px;
|
|
8
|
-
vertical-align: top;
|
|
9
4
|
|
|
10
5
|
>r {
|
|
6
|
+
font-family: sans-serif;
|
|
11
7
|
display: inline-block;
|
|
12
|
-
height: 1em;
|
|
13
|
-
width: 1em;
|
|
14
|
-
border-radius: 50%;
|
|
15
|
-
border: .1em solid;
|
|
16
8
|
position: relative;
|
|
9
|
+
margin-right: .3em;
|
|
10
|
+
text-align: center;
|
|
17
11
|
vertical-align: middle;
|
|
18
|
-
|
|
12
|
+
width: 1em;
|
|
13
|
+
height: 1em;
|
|
14
|
+
border: .1em solid;
|
|
15
|
+
border-radius: 50%;
|
|
19
16
|
|
|
20
17
|
>s {
|
|
21
18
|
display: none;
|
|
19
|
+
position: absolute;
|
|
20
|
+
text-decoration: none;
|
|
21
|
+
overflow: hidden;
|
|
22
22
|
border-radius: 50%;
|
|
23
|
-
border: .2em solid;
|
|
24
23
|
width: .4em;
|
|
25
24
|
height: .4em;
|
|
26
|
-
position: absolute;
|
|
27
|
-
margin: -.2em;
|
|
28
25
|
top: 50%;
|
|
29
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
|
+
}
|
|
30
39
|
}
|
|
31
40
|
}
|
|
32
41
|
|
|
33
|
-
>span {
|
|
34
|
-
vertical-align: middle;
|
|
35
|
-
}
|
|
36
42
|
|
|
37
43
|
&.activate {
|
|
38
44
|
>r {
|
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;
|
|
@@ -71,7 +71,7 @@ var createGetter = function (search, isprop = true) {
|
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
if (isprop) {
|
|
74
|
-
return new Function('event',
|
|
74
|
+
return new Function('event', `${withContext}with(this.$scope){${ret}${searchContext}}`);
|
|
75
75
|
}
|
|
76
76
|
return new Function("event", `${withContext}with(this.$scope){${/([\=\(\+\-])/.test(searchContext) ? ret + searchContext : `${ret}${searchContext}.call(this.$scope,event)`}}`);
|
|
77
77
|
};
|
|
@@ -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);
|
|
@@ -346,60 +348,13 @@ var structures = {
|
|
|
346
348
|
};
|
|
347
349
|
structures["else-if"] = structures.elseif = structures.else;
|
|
348
350
|
structures["for-each"] = structures.foreach = structures.for = structures.each = structures.repeat;
|
|
349
|
-
var
|
|
350
|
-
|
|
351
|
-
};
|
|
352
|
-
var directives = {
|
|
353
|
-
src(search) {
|
|
354
|
-
var getter = createGetter(search).bind(this);
|
|
355
|
-
var savedValue, savedOrigin, pending;
|
|
356
|
-
var refresh = function () {
|
|
357
|
-
that.src = savedValue;
|
|
358
|
-
removeClass(that, "pending");
|
|
359
|
-
pending = 0;
|
|
360
|
-
};
|
|
361
|
-
var img = document.createElement("img");
|
|
362
|
-
var that = this;
|
|
363
|
-
this.renders.push(function () {
|
|
364
|
-
var origin = getter();
|
|
365
|
-
var temp = origin;
|
|
366
|
-
if (origin instanceof Array) {
|
|
367
|
-
temp = extend([], origin);
|
|
368
|
-
} else if (isObject(origin)) {
|
|
369
|
-
temp = extend({}, origin);
|
|
370
|
-
} else if (isEmpty(origin)) {
|
|
371
|
-
temp = "";
|
|
372
|
-
}
|
|
373
|
-
var changes = getChanges(temp, savedValue);
|
|
374
|
-
if (!changes) return;
|
|
375
|
-
savedOrigin = origin;
|
|
376
|
-
savedValue = temp;
|
|
377
|
-
if (/^img$/i.test(this.tagName)) {
|
|
378
|
-
// this.setAttribute("src", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=");
|
|
379
|
-
if (!isString(origin)) {
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
|
-
if (origin) {
|
|
383
|
-
img.src = origin;
|
|
384
|
-
if (img.complete) {
|
|
385
|
-
this.src = origin;
|
|
386
|
-
} else if (!pending) {
|
|
387
|
-
addClass(this, "pending");
|
|
388
|
-
pending = setTimeout(refresh);
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
} else {
|
|
392
|
-
this.src = origin;
|
|
393
|
-
cast(this, origin);
|
|
394
|
-
}
|
|
395
|
-
});
|
|
396
|
-
},
|
|
397
|
-
bind(search) {
|
|
351
|
+
var createBinder = function (binder) {
|
|
352
|
+
return function (search) {
|
|
398
353
|
var getter = createGetter(search).bind(this);
|
|
399
354
|
var oldValue;
|
|
400
355
|
this.renders.push(function () {
|
|
401
356
|
var value = getter();
|
|
402
|
-
if (deepEqual(value, oldValue)) return;
|
|
357
|
+
if (deepEqual.shallow(value, oldValue)) return;
|
|
403
358
|
oldValue = value;
|
|
404
359
|
if (isNode(value) || isArray(value)) {
|
|
405
360
|
if (value !== this.firstChild) {
|
|
@@ -407,9 +362,49 @@ var directives = {
|
|
|
407
362
|
appendChild(this, value);
|
|
408
363
|
}
|
|
409
364
|
} else {
|
|
410
|
-
if (
|
|
365
|
+
if (isEmpty(value)) value = '';
|
|
366
|
+
if (binder(this) !== value) binder(this, value);
|
|
411
367
|
}
|
|
412
368
|
});
|
|
369
|
+
|
|
370
|
+
}
|
|
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
|
+
}
|
|
393
|
+
var directives = {
|
|
394
|
+
bind: createBinder(text),
|
|
395
|
+
html: createBinder(html),
|
|
396
|
+
hide: createBinder(function (elem, value) {
|
|
397
|
+
if (arguments.length === 1) return elem.style.display === 'none';
|
|
398
|
+
elem.style.display = value ? 'none' : '';
|
|
399
|
+
}),
|
|
400
|
+
show: createBinder(function (elem, value) {
|
|
401
|
+
if (arguments.length === 1) return elem.style.display !== 'none';
|
|
402
|
+
elem.style.display = value ? '' : 'none';
|
|
403
|
+
}),
|
|
404
|
+
style: createBinder(css),
|
|
405
|
+
src([s, src]) {
|
|
406
|
+
var parsedSrc = this.$src;
|
|
407
|
+
return src2.call(this, [s, parsedSrc ? parsedSrc.srcName : src]);
|
|
413
408
|
},
|
|
414
409
|
model(search) {
|
|
415
410
|
var getter = createGetter(search).bind(this);
|
|
@@ -462,35 +457,6 @@ var directives = {
|
|
|
462
457
|
}
|
|
463
458
|
var onchange = change;
|
|
464
459
|
eventsHandlers.map(on => on(this, onchange));
|
|
465
|
-
eventsHandlers.map(on => on(this, changed));
|
|
466
|
-
},
|
|
467
|
-
hide(search) {
|
|
468
|
-
var getter = createGetter(search).bind(this);
|
|
469
|
-
var oldValue;
|
|
470
|
-
this.renders.push(function () {
|
|
471
|
-
var value = !!getter();
|
|
472
|
-
if (deepEqual(oldValue, value)) return;
|
|
473
|
-
oldValue = value;
|
|
474
|
-
if (value) {
|
|
475
|
-
this.style.display = "none";
|
|
476
|
-
} else {
|
|
477
|
-
this.style.display = "";
|
|
478
|
-
}
|
|
479
|
-
});
|
|
480
|
-
},
|
|
481
|
-
show(search) {
|
|
482
|
-
var getter = createGetter(search).bind(this);
|
|
483
|
-
var oldValue;
|
|
484
|
-
this.renders.push(function () {
|
|
485
|
-
var value = !!getter();
|
|
486
|
-
if (deepEqual(oldValue, value)) return;
|
|
487
|
-
oldValue = value;
|
|
488
|
-
if (value) {
|
|
489
|
-
this.style.display = "";
|
|
490
|
-
} else {
|
|
491
|
-
this.style.display = "none";
|
|
492
|
-
}
|
|
493
|
-
});
|
|
494
460
|
},
|
|
495
461
|
|
|
496
462
|
"class"(search) {
|
|
@@ -528,17 +494,8 @@ var directives = {
|
|
|
528
494
|
}
|
|
529
495
|
});
|
|
530
496
|
},
|
|
531
|
-
style(search) {
|
|
532
|
-
var getter = createGetter(search).bind(this);
|
|
533
|
-
var oldValue;
|
|
534
|
-
this.renders.push(function () {
|
|
535
|
-
var stylesheet = getter();
|
|
536
|
-
if (deepEqual(oldValue, stylesheet)) return;
|
|
537
|
-
oldValue = stylesheet;
|
|
538
|
-
css(this, stylesheet);
|
|
539
|
-
});
|
|
540
|
-
}
|
|
541
497
|
};
|
|
498
|
+
directives.text = directives.bind;
|
|
542
499
|
// property binder
|
|
543
500
|
var binders = {
|
|
544
501
|
_(attr, search) {
|
|
@@ -580,6 +537,7 @@ var emiters = {
|
|
|
580
537
|
var res = getter.call(this, e);
|
|
581
538
|
if (res && isFunction(res.then)) res.then(digest, digest);
|
|
582
539
|
digest();
|
|
540
|
+
return res;
|
|
583
541
|
});
|
|
584
542
|
},
|
|
585
543
|
once(key, search) {
|
|
@@ -588,6 +546,7 @@ var emiters = {
|
|
|
588
546
|
var res = getter.call(this, e);
|
|
589
547
|
if (res && isFunction(res.then)) res.then(digest, digest);
|
|
590
548
|
digest();
|
|
549
|
+
return res;
|
|
591
550
|
});
|
|
592
551
|
}
|
|
593
552
|
};
|
|
@@ -636,10 +595,14 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
636
595
|
if (parentNode) {
|
|
637
596
|
if (parentNode.renderid > 1 || parentNode.isMounted) element.renderid = 2;
|
|
638
597
|
}
|
|
639
|
-
var ons = [];
|
|
640
598
|
|
|
641
599
|
if (isFirstRender) {
|
|
642
|
-
|
|
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
|
+
}
|
|
643
606
|
var { tagName, parentNode, nextSibling } = element;
|
|
644
607
|
// 替换元素
|
|
645
608
|
var constructor = getFromScopes(tagName, scope, parentScopes);
|
|
@@ -652,13 +615,12 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
652
615
|
constructor = getFromScopes(tagName, scope, parentScopes);
|
|
653
616
|
}
|
|
654
617
|
if (isFunction(constructor)) {
|
|
655
|
-
var attrsMap = {};
|
|
656
618
|
var replacer = constructor.call(scope, element, scope, parentScopes);
|
|
657
619
|
if (isNode(replacer) && element !== replacer) {
|
|
658
620
|
if (nextSibling) appendChild.before(nextSibling, replacer);
|
|
659
621
|
else if (parentNode) appendChild(parentNode, replacer);
|
|
660
622
|
if (element.parentNode === parentNode) remove(element);
|
|
661
|
-
|
|
623
|
+
copys.forEach(function (attr) {
|
|
662
624
|
var { name, value } = attr;
|
|
663
625
|
switch (name.toLowerCase()) {
|
|
664
626
|
case "class":
|
|
@@ -672,62 +634,39 @@ function renderElement(element, scope = element.$scope, parentScopes = element.$
|
|
|
672
634
|
replacer[name] = value;
|
|
673
635
|
break;
|
|
674
636
|
default:
|
|
675
|
-
|
|
676
|
-
replacer.setAttribute(name, value);
|
|
677
|
-
} else {
|
|
678
|
-
attrsMap[name] = attr;
|
|
679
|
-
}
|
|
637
|
+
replacer.setAttribute(name, value);
|
|
680
638
|
}
|
|
681
639
|
});
|
|
682
640
|
replacer.renderid = element.renderid;
|
|
641
|
+
replacer.renders = element.renders;
|
|
642
|
+
if (binds.src) replacer.$src = element.$src;
|
|
683
643
|
element = replacer;
|
|
684
644
|
element.$scope = scope;
|
|
685
645
|
element.$parentScopes = parentScopes;
|
|
686
646
|
}
|
|
687
|
-
[].concat.apply([], element.attributes).forEach(attr => {
|
|
688
|
-
if (attrsMap[attr.name]) {
|
|
689
|
-
delete attrsMap[attr.name];
|
|
690
|
-
}
|
|
691
|
-
attrsMap[attr.name] = attr;
|
|
692
|
-
});
|
|
693
|
-
attrs = Object.keys(attrsMap).map(key => attrsMap[key]);
|
|
694
647
|
}
|
|
695
648
|
}
|
|
696
649
|
if (element.children.length) renderElement(element.children, scope, parentScopes);
|
|
697
650
|
if (!isFirstRender) return element;
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
var emiter_reg = /^(?:(v|ng|on|once)\-|v\-on\:|@|once|on)/i;
|
|
702
|
-
attrs.map(function (attr) {
|
|
703
|
-
var { name, value } = attr;
|
|
704
|
-
if (/^(?:class|style|src|\:)$/i.test(name)) return;
|
|
705
|
-
var key = name.replace(/^(ng|v|.*?)\-|^[\:\_\.]/i, "").toLowerCase();
|
|
706
|
-
if (directives.hasOwnProperty(key) && isFunction(directives[key])) {
|
|
707
|
-
directives[key].call(element, [withContext, value]);
|
|
708
|
-
element.removeAttribute(name);
|
|
709
|
-
} else if (emiter_reg.test(name)) {
|
|
710
|
-
var match = emiter_reg.exec(name);
|
|
711
|
-
var ngon = (match[1] || match[0]).toLowerCase() === 'once' ? 'once' : 'on';
|
|
712
|
-
element.removeAttribute(name);
|
|
713
|
-
ons.push([emiters[ngon], name.replace(emiter_reg, ''), value]);
|
|
714
|
-
} else if (/^([\_\:\.]|v\-bind\:)/.test(name)) {
|
|
715
|
-
binders._.call(element, name.replace(/^([\_\:\.]|v\-bind\:)/, ""), [withContext, value]);
|
|
716
|
-
element.removeAttribute(name);
|
|
717
|
-
} else if (/[_@\:\.]$/.test(name)) {
|
|
718
|
-
binders[""].call(element, name.replace(/[_@\:\.]$/, ""), [withContext, value]);
|
|
719
|
-
element.removeAttribute(name);
|
|
720
|
-
} else {
|
|
721
|
-
name = name.replace(/\-(\w)/g, (_, w) => w.toUpperCase());
|
|
722
|
-
try {
|
|
723
|
-
element[name] = value === '' ? true : value;
|
|
724
|
-
} catch (e) {
|
|
725
|
-
}
|
|
651
|
+
for (var k in binds) {
|
|
652
|
+
if (directives.hasOwnProperty(k)) {
|
|
653
|
+
directives[k].call(element, [withContext, binds[k]])
|
|
726
654
|
}
|
|
727
|
-
|
|
728
|
-
|
|
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
|
+
}
|
|
729
667
|
ons.forEach(([on, key, value]) => on.call(element, key, [withContext, value]));
|
|
730
668
|
if (element.renders.length) {
|
|
669
|
+
rebuild(element);
|
|
731
670
|
onappend(element, addRenderElement);
|
|
732
671
|
onremove(element, removeRenderElement);
|
|
733
672
|
if (element.isMounted || element.renderid > 1) addRenderElement.call(element);
|
|
@@ -749,11 +688,19 @@ function renderStructure(element, scope, parentScopes = []) {
|
|
|
749
688
|
}
|
|
750
689
|
var attrs = [].concat.apply([], element.attributes);
|
|
751
690
|
var withContext = parentScopes ? parentScopes.map((_, cx) => `with(this.$parentScopes[${cx}])`).join("") : '';
|
|
752
|
-
attrs = attrs.filter(a => structures.hasOwnProperty(a.name.replace(/^(ng|V|.*?)\-/i, '').toLowerCase()));
|
|
753
691
|
var types = {};
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
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
|
+
}
|
|
757
704
|
var key = name.replace(/^(ng|v|.*?)\-/i, "").toLowerCase();
|
|
758
705
|
if (structures.hasOwnProperty(key) && isFunction(structures[key])) {
|
|
759
706
|
if (element.renderid <= -2) {
|
|
@@ -776,9 +723,29 @@ function renderStructure(element, scope, parentScopes = []) {
|
|
|
776
723
|
}
|
|
777
724
|
if (!element.renderid) element.renderid = -1;
|
|
778
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;
|
|
779
732
|
element.removeAttribute(name);
|
|
780
733
|
}
|
|
781
|
-
|
|
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 };
|
|
782
749
|
if (element.renderid <= -1) createStructure.call(element, types.if, types.repeat, withContext);
|
|
783
750
|
}
|
|
784
751
|
function render(element, scope, parentScopes) {
|