marko 5.32.10 → 5.32.11
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/runtime/vdom/VElement.js +73 -117
- package/dist/runtime/vdom/VNode.js +13 -15
- package/dist/runtime/vdom/VText.js +4 -4
- package/dist/runtime/vdom/hot-reload.js +2 -2
- package/dist/runtime/vdom/morphdom/fragment.js +3 -3
- package/dist/runtime/vdom/morphdom/helpers.js +1 -1
- package/dist/runtime/vdom/morphdom/index.js +19 -18
- package/dist/runtime/vdom/vdom.js +2 -2
- package/package.json +2 -2
- package/src/runtime/vdom/VElement.js +76 -120
- package/src/runtime/vdom/VNode.js +0 -2
- package/src/runtime/vdom/morphdom/index.js +9 -8
- package/dist/runtime/vdom/morphdom/specialElHandlers.js +0 -106
- package/dist/runtime/vdom/preserve-attrs.js +0 -15
- package/src/runtime/vdom/morphdom/specialElHandlers.js +0 -106
- package/src/runtime/vdom/preserve-attrs.js +0 -15
@@ -22,28 +22,51 @@ var FLAG_SIMPLE_ATTRS = 1;
|
|
22
22
|
var FLAG_CUSTOM_ELEMENT = 2;
|
23
23
|
var FLAG_SPREAD_ATTRS = 4;
|
24
24
|
|
25
|
-
var defineProperty = Object.defineProperty;
|
26
|
-
|
27
25
|
var ATTR_HREF = "href";
|
28
|
-
var EMPTY_OBJECT = Object.freeze(
|
26
|
+
var EMPTY_OBJECT = Object.freeze(Object.create(null));
|
27
|
+
var specialElHandlers = {
|
28
|
+
option: {
|
29
|
+
selected: function (fromEl, value) {
|
30
|
+
fromEl.selected = value !== undefined;
|
31
|
+
}
|
32
|
+
},
|
33
|
+
input: {
|
34
|
+
value: function (fromEl, value) {
|
35
|
+
fromEl.value = value === undefined ? "" : value;
|
36
|
+
},
|
37
|
+
checked: function (fromEl, value) {
|
38
|
+
fromEl.checked = value !== undefined;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
};
|
29
42
|
|
30
|
-
function
|
43
|
+
function normalizeValue(value) {
|
31
44
|
if (value === true) {
|
32
45
|
return "";
|
33
|
-
}
|
34
|
-
switch (value.toString) {
|
35
|
-
case Object.prototype.toString:
|
36
|
-
case Array.prototype.toString:
|
37
|
-
// eslint-disable-next-line no-constant-condition
|
46
|
+
}
|
38
47
|
|
48
|
+
if (value == null || value === false) {
|
49
|
+
return;
|
50
|
+
}
|
39
51
|
|
52
|
+
switch (typeof value) {
|
53
|
+
case "string":
|
54
|
+
return value;
|
55
|
+
case "object":
|
56
|
+
switch (value.toString) {
|
57
|
+
case Object.prototype.toString:
|
58
|
+
case Array.prototype.toString:
|
59
|
+
// eslint-disable-next-line no-constant-condition
|
40
60
|
|
41
61
|
|
42
62
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
63
|
+
|
64
|
+
|
65
|
+
return JSON.stringify(value);
|
66
|
+
case RegExp.prototype.toString:
|
67
|
+
return value.source;
|
68
|
+
}
|
69
|
+
break;
|
47
70
|
}
|
48
71
|
|
49
72
|
return value + "";
|
@@ -57,22 +80,6 @@ function assign(a, b) {
|
|
57
80
|
}
|
58
81
|
}
|
59
82
|
|
60
|
-
function setAttribute(el, namespaceURI, name, value) {
|
61
|
-
if (namespaceURI === null) {
|
62
|
-
el.setAttribute(name, value);
|
63
|
-
} else {
|
64
|
-
el.setAttributeNS(namespaceURI, name, value);
|
65
|
-
}
|
66
|
-
}
|
67
|
-
|
68
|
-
function removeAttribute(el, namespaceURI, name) {
|
69
|
-
if (namespaceURI === null) {
|
70
|
-
el.removeAttribute(name);
|
71
|
-
} else {
|
72
|
-
el.removeAttributeNS(namespaceURI, name);
|
73
|
-
}
|
74
|
-
}
|
75
|
-
|
76
83
|
function VElementClone(other) {
|
77
84
|
this.bW_ = other.bW_;
|
78
85
|
this.bT_ = null;
|
@@ -177,19 +184,11 @@ VElement.prototype = {
|
|
177
184
|
assign(el, attributes);
|
178
185
|
} else {
|
179
186
|
for (var attrName in attributes) {
|
180
|
-
var attrValue = attributes[attrName];
|
181
|
-
|
182
|
-
if (attrValue !== false && attrValue != null) {
|
183
|
-
var type = typeof attrValue;
|
184
|
-
|
185
|
-
if (type !== "string") {
|
186
|
-
// Special attributes aren't copied to the real DOM. They are only
|
187
|
-
// kept in the virtual attributes map
|
188
|
-
attrValue = convertAttrValue(type, attrValue);
|
189
|
-
}
|
187
|
+
var attrValue = normalizeValue(attributes[attrName]);
|
190
188
|
|
189
|
+
if (attrValue !== undefined) {
|
191
190
|
if (attrName == ATTR_XLINK_HREF) {
|
192
|
-
|
191
|
+
el.setAttributeNS(NS_XLINK, ATTR_HREF, attrValue);
|
193
192
|
} else {
|
194
193
|
el.setAttribute(attrName, attrValue);
|
195
194
|
}
|
@@ -197,7 +196,7 @@ VElement.prototype = {
|
|
197
196
|
}
|
198
197
|
|
199
198
|
if (tagName === "textarea") {
|
200
|
-
el.defaultValue =
|
199
|
+
el.defaultValue = this.bZ_;
|
201
200
|
}
|
202
201
|
}
|
203
202
|
|
@@ -217,39 +216,7 @@ VElement.prototype = {
|
|
217
216
|
|
218
217
|
inherit(VElement, VNode);
|
219
218
|
|
220
|
-
|
221
|
-
|
222
|
-
["checked", "selected", "disabled"].forEach(function (name) {
|
223
|
-
defineProperty(proto, name, {
|
224
|
-
get: function () {
|
225
|
-
var value = this.bX_[name];
|
226
|
-
return value !== false && value != null;
|
227
|
-
}
|
228
|
-
});
|
229
|
-
});
|
230
|
-
|
231
|
-
defineProperty(proto, "e_", {
|
232
|
-
get: function () {
|
233
|
-
var value = this.bZ_;
|
234
|
-
if (value == null) {
|
235
|
-
value = this.bX_.value;
|
236
|
-
}
|
237
|
-
return value != null && value !== false ?
|
238
|
-
value + "" :
|
239
|
-
this.bX_.type === "checkbox" ||
|
240
|
-
this.bX_.type === "radio" ?
|
241
|
-
"on" :
|
242
|
-
"";
|
243
|
-
}
|
244
|
-
});
|
245
|
-
|
246
|
-
VElement.cc_ = function (attrs) {
|
247
|
-
// By default this static method is a no-op, but if there are any
|
248
|
-
// compiled components that have "no-update" attributes then
|
249
|
-
// `preserve-attrs.js` will be imported and this method will be replaced
|
250
|
-
// with a method that actually does something
|
251
|
-
return attrs;
|
252
|
-
};
|
219
|
+
VElementClone.prototype = VElement.prototype;
|
253
220
|
|
254
221
|
function virtualizeElement(node, virtualizeChildNodes, ownerComponent) {
|
255
222
|
var attributes = node.attributes;
|
@@ -300,23 +267,18 @@ function virtualizeElement(node, virtualizeChildNodes, ownerComponent) {
|
|
300
267
|
return vdomEl;
|
301
268
|
}
|
302
269
|
|
303
|
-
VElement.
|
304
|
-
|
305
|
-
VElement.ce_ = function (fromEl, vFromEl, toEl) {
|
306
|
-
var removePreservedAttributes = VElement.cc_;
|
270
|
+
VElement.cc_ = virtualizeElement;
|
307
271
|
|
272
|
+
VElement.cd_ = function (fromEl, vFromEl, toEl) {
|
308
273
|
var fromFlags = vFromEl.t_;
|
309
274
|
var toFlags = toEl.t_;
|
310
|
-
|
311
|
-
vElementByDOMNode.set(fromEl, toEl);
|
312
|
-
|
313
275
|
var attrs = toEl.bX_;
|
314
|
-
var props = toEl._L_;
|
315
276
|
|
316
277
|
if (toFlags & FLAG_CUSTOM_ELEMENT) {
|
317
278
|
return assign(fromEl, attrs);
|
318
279
|
}
|
319
280
|
|
281
|
+
var props = toEl._L_;
|
320
282
|
var attrName;
|
321
283
|
|
322
284
|
// We use expando properties to associate the previous HTML
|
@@ -329,16 +291,12 @@ VElement.ce_ = function (fromEl, vFromEl, toEl) {
|
|
329
291
|
|
330
292
|
var oldAttrs = vFromEl.bX_;
|
331
293
|
|
332
|
-
if (oldAttrs) {
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
return;
|
339
|
-
} else {
|
340
|
-
oldAttrs = removePreservedAttributes(oldAttrs, props);
|
341
|
-
}
|
294
|
+
if (oldAttrs === attrs) {
|
295
|
+
// For constant attributes the same object will be provided
|
296
|
+
// every render and we can use that to our advantage to
|
297
|
+
// not waste time diffing a constant, immutable attribute
|
298
|
+
// map.
|
299
|
+
return;
|
342
300
|
}
|
343
301
|
|
344
302
|
var attrValue;
|
@@ -356,36 +314,32 @@ VElement.ce_ = function (fromEl, vFromEl, toEl) {
|
|
356
314
|
return;
|
357
315
|
}
|
358
316
|
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
// so it's as if they never existed.
|
363
|
-
attrs = removePreservedAttributes(attrs, props, true);
|
364
|
-
|
365
|
-
var namespaceURI;
|
317
|
+
var preserve = props && props.pa || EMPTY_OBJECT;
|
318
|
+
var specialAttrs = specialElHandlers[toEl.bY_] || EMPTY_OBJECT;
|
319
|
+
var specialAttr;
|
366
320
|
|
367
321
|
// Loop over all of the attributes in the attribute map and compare
|
368
322
|
// them to the value in the old map. However, if the value is
|
369
323
|
// null/undefined/false then we want to remove the attribute
|
370
324
|
for (attrName in attrs) {
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
if (
|
385
|
-
|
325
|
+
if (
|
326
|
+
!preserve[attrName] &&
|
327
|
+
normalizeValue(oldAttrs[attrName]) !== (
|
328
|
+
attrValue = normalizeValue(attrs[attrName])))
|
329
|
+
{
|
330
|
+
if (specialAttr = specialAttrs[attrName]) {
|
331
|
+
specialAttr(fromEl, attrValue);
|
332
|
+
} else if (attrName === ATTR_XLINK_HREF) {
|
333
|
+
if (attrValue === undefined) {
|
334
|
+
fromEl.removeAttributeNS(NS_XLINK, ATTR_HREF);
|
335
|
+
} else {
|
336
|
+
fromEl.setAttributeNS(NS_XLINK, ATTR_HREF, attrValue);
|
337
|
+
}
|
338
|
+
} else if (attrValue === undefined) {
|
339
|
+
fromEl.removeAttribute(attrName);
|
340
|
+
} else {
|
341
|
+
fromEl.setAttribute(attrName, attrValue);
|
386
342
|
}
|
387
|
-
|
388
|
-
setAttribute(fromEl, namespaceURI, attrName, attrValue);
|
389
343
|
}
|
390
344
|
}
|
391
345
|
|
@@ -402,7 +356,9 @@ VElement.ce_ = function (fromEl, vFromEl, toEl) {
|
|
402
356
|
if (toEl.bR_ === null || fromFlags & FLAG_SPREAD_ATTRS) {
|
403
357
|
for (attrName in oldAttrs) {
|
404
358
|
if (!(attrName in attrs)) {
|
405
|
-
if (
|
359
|
+
if (specialAttr = specialAttrs[attrName]) {
|
360
|
+
specialAttr(fromEl, undefined);
|
361
|
+
} else if (attrName === ATTR_XLINK_HREF) {
|
406
362
|
fromEl.removeAttributeNS(ATTR_XLINK_HREF, ATTR_HREF);
|
407
363
|
} else {
|
408
364
|
fromEl.removeAttribute(attrName);
|
@@ -3,10 +3,10 @@ function VNode() {}
|
|
3
3
|
|
4
4
|
VNode.prototype = {
|
5
5
|
bQ_: function (finalChildCount, ownerComponent) {
|
6
|
-
this.
|
7
|
-
this.
|
6
|
+
this.ce_ = finalChildCount;
|
7
|
+
this.cf_ = 0;
|
8
8
|
this.bW_ = null;
|
9
|
-
this.
|
9
|
+
this.cg_ = null;
|
10
10
|
this.bT_ = null;
|
11
11
|
this.bU_ = null;
|
12
12
|
this._J_ = ownerComponent;
|
@@ -21,24 +21,24 @@ VNode.prototype = {
|
|
21
21
|
// If the DocumentFragment node has a first child then we will return that.
|
22
22
|
// Otherwise, the DocumentFragment node is not *really* the first child and
|
23
23
|
// we need to skip to its next sibling
|
24
|
-
return nestedFirstChild || firstChild.
|
24
|
+
return nestedFirstChild || firstChild.ch_;
|
25
25
|
}
|
26
26
|
|
27
27
|
return firstChild;
|
28
28
|
},
|
29
29
|
|
30
|
-
get
|
30
|
+
get ch_() {
|
31
31
|
var nextSibling = this.bU_;
|
32
32
|
|
33
33
|
if (nextSibling) {
|
34
34
|
if (nextSibling.bV_) {
|
35
35
|
var firstChild = nextSibling.ay_;
|
36
|
-
return firstChild || nextSibling.
|
36
|
+
return firstChild || nextSibling.ch_;
|
37
37
|
}
|
38
38
|
} else {
|
39
39
|
var parentNode = this.bT_;
|
40
40
|
if (parentNode && parentNode.bV_) {
|
41
|
-
return parentNode.
|
41
|
+
return parentNode.ch_;
|
42
42
|
}
|
43
43
|
}
|
44
44
|
|
@@ -46,19 +46,17 @@ VNode.prototype = {
|
|
46
46
|
},
|
47
47
|
|
48
48
|
bI_: function (child) {
|
49
|
-
this.
|
49
|
+
this.cf_++;
|
50
50
|
|
51
51
|
if (this.bY_ === "textarea") {
|
52
|
-
if (child.
|
53
|
-
var childValue = child.
|
52
|
+
if (child.ci_) {
|
53
|
+
var childValue = child.cj_;
|
54
54
|
this.bZ_ = (this.bZ_ || "") + childValue;
|
55
|
-
} else if (child.aa_ || child.a__) {
|
56
|
-
this.cl_ = true;
|
57
55
|
} else {
|
58
56
|
throw TypeError();
|
59
57
|
}
|
60
58
|
} else {
|
61
|
-
var lastChild = this.
|
59
|
+
var lastChild = this.cg_;
|
62
60
|
|
63
61
|
child.bT_ = this;
|
64
62
|
|
@@ -68,14 +66,14 @@ VNode.prototype = {
|
|
68
66
|
this.bW_ = child;
|
69
67
|
}
|
70
68
|
|
71
|
-
this.
|
69
|
+
this.cg_ = child;
|
72
70
|
}
|
73
71
|
|
74
72
|
return child;
|
75
73
|
},
|
76
74
|
|
77
75
|
ca_: function finishChild() {
|
78
|
-
if (this.
|
76
|
+
if (this.cf_ === this.ce_ && this.bT_) {
|
79
77
|
return this.bT_.ca_();
|
80
78
|
} else {
|
81
79
|
return this;
|
@@ -3,20 +3,20 @@ var VNode = require("./VNode");
|
|
3
3
|
|
4
4
|
function VText(value, ownerComponent) {
|
5
5
|
this.bQ_(-1 /* no children */, ownerComponent);
|
6
|
-
this.
|
6
|
+
this.cj_ = value;
|
7
7
|
}
|
8
8
|
|
9
9
|
VText.prototype = {
|
10
|
-
|
10
|
+
ci_: true,
|
11
11
|
|
12
12
|
bS_: 3,
|
13
13
|
|
14
14
|
bP_: function (host) {
|
15
|
-
return (host.ownerDocument || host).createTextNode(this.
|
15
|
+
return (host.ownerDocument || host).createTextNode(this.cj_);
|
16
16
|
},
|
17
17
|
|
18
18
|
bJ_: function () {
|
19
|
-
return new VText(this.
|
19
|
+
return new VText(this.cj_);
|
20
20
|
}
|
21
21
|
};
|
22
22
|
|
@@ -44,7 +44,7 @@ exports.t = runtime.t = function (typeName) {
|
|
44
44
|
instance.P_(input, out);
|
45
45
|
};
|
46
46
|
|
47
|
-
instance.
|
47
|
+
instance.ck_ = true;
|
48
48
|
instance.am_();
|
49
49
|
instance._t_ = false;
|
50
50
|
|
@@ -78,7 +78,7 @@ registry._C_ = function (typeName, id) {
|
|
78
78
|
if (instances) {
|
79
79
|
instances.add(instance);
|
80
80
|
instance.once("destroy", function () {
|
81
|
-
if (!instance.
|
81
|
+
if (!instance.ck_) {
|
82
82
|
instances.delete(instance);
|
83
83
|
}
|
84
84
|
});
|
@@ -80,8 +80,8 @@ function createFragmentNode(startNode, nextNode, parentNode) {
|
|
80
80
|
|
81
81
|
function beginFragmentNode(startNode, parentNode) {
|
82
82
|
var fragment = createFragmentNode(startNode, null, parentNode);
|
83
|
-
fragment.
|
84
|
-
fragment.
|
83
|
+
fragment.cl_ = function (nextNode) {
|
84
|
+
fragment.cl_ = null;
|
85
85
|
insertBefore(
|
86
86
|
fragment.endNode,
|
87
87
|
nextNode,
|
@@ -92,4 +92,4 @@ function beginFragmentNode(startNode, parentNode) {
|
|
92
92
|
}
|
93
93
|
|
94
94
|
exports._h_ = createFragmentNode;
|
95
|
-
exports.
|
95
|
+
exports.cm_ = beginFragmentNode;
|
@@ -11,9 +11,8 @@ var KeySequence = require("../../components/KeySequence");
|
|
11
11
|
var VElement = require("../vdom").br_;
|
12
12
|
var fragment = require("./fragment");
|
13
13
|
var helpers = require("./helpers");
|
14
|
-
var
|
15
|
-
var
|
16
|
-
var morphAttrs = VElement.ce_;
|
14
|
+
var virtualizeElement = VElement.cc_;
|
15
|
+
var morphAttrs = VElement.cd_;
|
17
16
|
var keysByDOMNode = domData._G_;
|
18
17
|
var componentByDOMNode = domData._l_;
|
19
18
|
var vElementByDOMNode = domData._H_;
|
@@ -21,11 +20,11 @@ var detachedByDOMNode = domData.aT_;
|
|
21
20
|
|
22
21
|
var insertBefore = helpers.bc_;
|
23
22
|
var insertAfter = helpers.bd_;
|
24
|
-
var nextSibling = helpers.
|
23
|
+
var nextSibling = helpers.ch_;
|
25
24
|
var firstChild = helpers.ay_;
|
26
25
|
var removeChild = helpers.be_;
|
27
26
|
var createFragmentNode = fragment._h_;
|
28
|
-
var beginFragmentNode = fragment.
|
27
|
+
var beginFragmentNode = fragment.cm_;
|
29
28
|
|
30
29
|
var ELEMENT_NODE = 1;
|
31
30
|
var TEXT_NODE = 3;
|
@@ -162,7 +161,7 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
162
161
|
var fromComponent;
|
163
162
|
|
164
163
|
outer: while (curToNodeChild) {
|
165
|
-
toNextSibling = curToNodeChild.
|
164
|
+
toNextSibling = curToNodeChild.ch_;
|
166
165
|
curToNodeType = curToNodeChild.bS_;
|
167
166
|
curToNodeKey = curToNodeChild.bR_;
|
168
167
|
|
@@ -598,11 +597,11 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
598
597
|
toNextSibling.bS_ === TEXT_NODE)
|
599
598
|
{
|
600
599
|
fromNextSibling = curFromNodeChild.splitText(
|
601
|
-
curToNodeChild.
|
600
|
+
curToNodeChild.cj_.length
|
602
601
|
);
|
603
602
|
}
|
604
|
-
if (curFromNodeChild.nodeValue !== curToNodeChild.
|
605
|
-
curFromNodeChild.nodeValue = curToNodeChild.
|
603
|
+
if (curFromNodeChild.nodeValue !== curToNodeChild.cj_) {
|
604
|
+
curFromNodeChild.nodeValue = curToNodeChild.cj_;
|
606
605
|
}
|
607
606
|
}
|
608
607
|
}
|
@@ -636,10 +635,10 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
636
635
|
}
|
637
636
|
|
638
637
|
// We have processed all of the "to nodes".
|
639
|
-
if (fromNode.
|
638
|
+
if (fromNode.cl_) {
|
640
639
|
// If we are in an unfinished fragment, we have reached the end of the nodes
|
641
640
|
// we were matching up and need to end the fragment
|
642
|
-
fromNode.
|
641
|
+
fromNode.cl_(curFromNodeChild);
|
643
642
|
} else {
|
644
643
|
// If curFromNodeChild is non-null then we still have some from nodes
|
645
644
|
// left over that need to be removed
|
@@ -680,8 +679,9 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
680
679
|
|
681
680
|
function morphEl(fromEl, vFromEl, toEl, parentComponent) {
|
682
681
|
var nodeName = toEl.bY_;
|
683
|
-
|
684
682
|
var constId = toEl.c__;
|
683
|
+
vElementByDOMNode.set(fromEl, toEl);
|
684
|
+
|
685
685
|
if (constId !== undefined && vFromEl.c__ === constId) {
|
686
686
|
return;
|
687
687
|
}
|
@@ -692,14 +692,15 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
692
692
|
return;
|
693
693
|
}
|
694
694
|
|
695
|
-
if (nodeName
|
695
|
+
if (nodeName === "textarea") {
|
696
|
+
var newValue = toEl.bZ_ || "";
|
697
|
+
var oldValue = vFromEl.bZ_ || "";
|
698
|
+
if (oldValue !== newValue) {
|
699
|
+
fromEl.value = newValue;
|
700
|
+
}
|
701
|
+
} else {
|
696
702
|
morphChildren(fromEl, toEl, parentComponent);
|
697
703
|
}
|
698
|
-
|
699
|
-
var specialElHandler = specialElHandlers[nodeName];
|
700
|
-
if (specialElHandler !== undefined) {
|
701
|
-
specialElHandler(fromEl, toEl);
|
702
|
-
}
|
703
704
|
} // END: morphEl(...)
|
704
705
|
|
705
706
|
// eslint-disable-next-line no-constant-condition
|
@@ -19,7 +19,7 @@ function virtualizeChildNodes(node, vdomParent, ownerComponent) {
|
|
19
19
|
function virtualize(node, ownerComponent) {
|
20
20
|
switch (node.nodeType) {
|
21
21
|
case 1:
|
22
|
-
return VElement.
|
22
|
+
return VElement.cc_(node, virtualizeChildNodes, ownerComponent);
|
23
23
|
case 3:
|
24
24
|
return new VText(node.nodeValue, ownerComponent);
|
25
25
|
case 11:
|
@@ -78,5 +78,5 @@ exports.br_ = VElement;
|
|
78
78
|
exports.bt_ = VText;
|
79
79
|
exports.bu_ = VComponent;
|
80
80
|
exports.bv_ = VFragment;
|
81
|
-
exports.
|
81
|
+
exports.cc_ = virtualize;
|
82
82
|
exports.bw_ = virtualizeHTML;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "marko",
|
3
|
-
"version": "5.32.
|
3
|
+
"version": "5.32.11",
|
4
4
|
"description": "UI Components + streaming, async, high performance, HTML templating for Node.js and the browser.",
|
5
5
|
"keywords": [
|
6
6
|
"front-end",
|
@@ -65,7 +65,7 @@
|
|
65
65
|
},
|
66
66
|
"dependencies": {
|
67
67
|
"@marko/compiler": "^5.34.7",
|
68
|
-
"@marko/translator-default": "^5.31.
|
68
|
+
"@marko/translator-default": "^5.31.16",
|
69
69
|
"app-module-path": "^2.2.0",
|
70
70
|
"argly": "^1.2.0",
|
71
71
|
"browser-refresh-client": "1.1.4",
|
@@ -22,28 +22,51 @@ var FLAG_SIMPLE_ATTRS = 1;
|
|
22
22
|
var FLAG_CUSTOM_ELEMENT = 2;
|
23
23
|
var FLAG_SPREAD_ATTRS = 4;
|
24
24
|
|
25
|
-
var defineProperty = Object.defineProperty;
|
26
|
-
|
27
25
|
var ATTR_HREF = "href";
|
28
|
-
var EMPTY_OBJECT = Object.freeze(
|
26
|
+
var EMPTY_OBJECT = Object.freeze(Object.create(null));
|
27
|
+
var specialElHandlers = {
|
28
|
+
option: {
|
29
|
+
selected: function (fromEl, value) {
|
30
|
+
fromEl.selected = value !== undefined;
|
31
|
+
},
|
32
|
+
},
|
33
|
+
input: {
|
34
|
+
value: function (fromEl, value) {
|
35
|
+
fromEl.value = value === undefined ? "" : value;
|
36
|
+
},
|
37
|
+
checked: function (fromEl, value) {
|
38
|
+
fromEl.checked = value !== undefined;
|
39
|
+
},
|
40
|
+
},
|
41
|
+
};
|
29
42
|
|
30
|
-
function
|
43
|
+
function normalizeValue(value) {
|
31
44
|
if (value === true) {
|
32
45
|
return "";
|
33
|
-
}
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
46
|
+
}
|
47
|
+
|
48
|
+
if (value == null || value === false) {
|
49
|
+
return;
|
50
|
+
}
|
51
|
+
|
52
|
+
switch (typeof value) {
|
53
|
+
case "string":
|
54
|
+
return value;
|
55
|
+
case "object":
|
56
|
+
switch (value.toString) {
|
57
|
+
case Object.prototype.toString:
|
58
|
+
case Array.prototype.toString:
|
59
|
+
// eslint-disable-next-line no-constant-condition
|
60
|
+
if ("MARKO_DEBUG") {
|
61
|
+
complain(
|
62
|
+
"Relying on JSON.stringify for attribute values is deprecated, in future versions of Marko these will be cast to strings instead.",
|
63
|
+
);
|
64
|
+
}
|
65
|
+
return JSON.stringify(value);
|
66
|
+
case RegExp.prototype.toString:
|
67
|
+
return value.source;
|
68
|
+
}
|
69
|
+
break;
|
47
70
|
}
|
48
71
|
|
49
72
|
return value + "";
|
@@ -57,22 +80,6 @@ function assign(a, b) {
|
|
57
80
|
}
|
58
81
|
}
|
59
82
|
|
60
|
-
function setAttribute(el, namespaceURI, name, value) {
|
61
|
-
if (namespaceURI === null) {
|
62
|
-
el.setAttribute(name, value);
|
63
|
-
} else {
|
64
|
-
el.setAttributeNS(namespaceURI, name, value);
|
65
|
-
}
|
66
|
-
}
|
67
|
-
|
68
|
-
function removeAttribute(el, namespaceURI, name) {
|
69
|
-
if (namespaceURI === null) {
|
70
|
-
el.removeAttribute(name);
|
71
|
-
} else {
|
72
|
-
el.removeAttributeNS(namespaceURI, name);
|
73
|
-
}
|
74
|
-
}
|
75
|
-
|
76
83
|
function VElementClone(other) {
|
77
84
|
this.___firstChildInternal = other.___firstChildInternal;
|
78
85
|
this.___parentNode = null;
|
@@ -177,19 +184,11 @@ VElement.prototype = {
|
|
177
184
|
assign(el, attributes);
|
178
185
|
} else {
|
179
186
|
for (var attrName in attributes) {
|
180
|
-
var attrValue = attributes[attrName];
|
181
|
-
|
182
|
-
if (attrValue !== false && attrValue != null) {
|
183
|
-
var type = typeof attrValue;
|
184
|
-
|
185
|
-
if (type !== "string") {
|
186
|
-
// Special attributes aren't copied to the real DOM. They are only
|
187
|
-
// kept in the virtual attributes map
|
188
|
-
attrValue = convertAttrValue(type, attrValue);
|
189
|
-
}
|
187
|
+
var attrValue = normalizeValue(attributes[attrName]);
|
190
188
|
|
189
|
+
if (attrValue !== undefined) {
|
191
190
|
if (attrName == ATTR_XLINK_HREF) {
|
192
|
-
|
191
|
+
el.setAttributeNS(NS_XLINK, ATTR_HREF, attrValue);
|
193
192
|
} else {
|
194
193
|
el.setAttribute(attrName, attrValue);
|
195
194
|
}
|
@@ -197,7 +196,7 @@ VElement.prototype = {
|
|
197
196
|
}
|
198
197
|
|
199
198
|
if (tagName === "textarea") {
|
200
|
-
el.defaultValue =
|
199
|
+
el.defaultValue = this.___valueInternal;
|
201
200
|
}
|
202
201
|
}
|
203
202
|
|
@@ -217,39 +216,7 @@ VElement.prototype = {
|
|
217
216
|
|
218
217
|
inherit(VElement, VNode);
|
219
218
|
|
220
|
-
|
221
|
-
|
222
|
-
["checked", "selected", "disabled"].forEach(function (name) {
|
223
|
-
defineProperty(proto, name, {
|
224
|
-
get: function () {
|
225
|
-
var value = this.___attributes[name];
|
226
|
-
return value !== false && value != null;
|
227
|
-
},
|
228
|
-
});
|
229
|
-
});
|
230
|
-
|
231
|
-
defineProperty(proto, "___value", {
|
232
|
-
get: function () {
|
233
|
-
var value = this.___valueInternal;
|
234
|
-
if (value == null) {
|
235
|
-
value = this.___attributes.value;
|
236
|
-
}
|
237
|
-
return value != null && value !== false
|
238
|
-
? value + ""
|
239
|
-
: this.___attributes.type === "checkbox" ||
|
240
|
-
this.___attributes.type === "radio"
|
241
|
-
? "on"
|
242
|
-
: "";
|
243
|
-
},
|
244
|
-
});
|
245
|
-
|
246
|
-
VElement.___removePreservedAttributes = function (attrs) {
|
247
|
-
// By default this static method is a no-op, but if there are any
|
248
|
-
// compiled components that have "no-update" attributes then
|
249
|
-
// `preserve-attrs.js` will be imported and this method will be replaced
|
250
|
-
// with a method that actually does something
|
251
|
-
return attrs;
|
252
|
-
};
|
219
|
+
VElementClone.prototype = VElement.prototype;
|
253
220
|
|
254
221
|
function virtualizeElement(node, virtualizeChildNodes, ownerComponent) {
|
255
222
|
var attributes = node.attributes;
|
@@ -303,20 +270,15 @@ function virtualizeElement(node, virtualizeChildNodes, ownerComponent) {
|
|
303
270
|
VElement.___virtualize = virtualizeElement;
|
304
271
|
|
305
272
|
VElement.___morphAttrs = function (fromEl, vFromEl, toEl) {
|
306
|
-
var removePreservedAttributes = VElement.___removePreservedAttributes;
|
307
|
-
|
308
273
|
var fromFlags = vFromEl.___flags;
|
309
274
|
var toFlags = toEl.___flags;
|
310
|
-
|
311
|
-
vElementByDOMNode.set(fromEl, toEl);
|
312
|
-
|
313
275
|
var attrs = toEl.___attributes;
|
314
|
-
var props = toEl.___properties;
|
315
276
|
|
316
277
|
if (toFlags & FLAG_CUSTOM_ELEMENT) {
|
317
278
|
return assign(fromEl, attrs);
|
318
279
|
}
|
319
280
|
|
281
|
+
var props = toEl.___properties;
|
320
282
|
var attrName;
|
321
283
|
|
322
284
|
// We use expando properties to associate the previous HTML
|
@@ -329,16 +291,12 @@ VElement.___morphAttrs = function (fromEl, vFromEl, toEl) {
|
|
329
291
|
|
330
292
|
var oldAttrs = vFromEl.___attributes;
|
331
293
|
|
332
|
-
if (oldAttrs) {
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
return;
|
339
|
-
} else {
|
340
|
-
oldAttrs = removePreservedAttributes(oldAttrs, props);
|
341
|
-
}
|
294
|
+
if (oldAttrs === attrs) {
|
295
|
+
// For constant attributes the same object will be provided
|
296
|
+
// every render and we can use that to our advantage to
|
297
|
+
// not waste time diffing a constant, immutable attribute
|
298
|
+
// map.
|
299
|
+
return;
|
342
300
|
}
|
343
301
|
|
344
302
|
var attrValue;
|
@@ -356,36 +314,32 @@ VElement.___morphAttrs = function (fromEl, vFromEl, toEl) {
|
|
356
314
|
return;
|
357
315
|
}
|
358
316
|
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
// so it's as if they never existed.
|
363
|
-
attrs = removePreservedAttributes(attrs, props, true);
|
364
|
-
|
365
|
-
var namespaceURI;
|
317
|
+
var preserve = (props && props.pa) || EMPTY_OBJECT;
|
318
|
+
var specialAttrs = specialElHandlers[toEl.___nodeName] || EMPTY_OBJECT;
|
319
|
+
var specialAttr;
|
366
320
|
|
367
321
|
// Loop over all of the attributes in the attribute map and compare
|
368
322
|
// them to the value in the old map. However, if the value is
|
369
323
|
// null/undefined/false then we want to remove the attribute
|
370
324
|
for (attrName in attrs) {
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
if (
|
385
|
-
|
325
|
+
if (
|
326
|
+
!preserve[attrName] &&
|
327
|
+
normalizeValue(oldAttrs[attrName]) !==
|
328
|
+
(attrValue = normalizeValue(attrs[attrName]))
|
329
|
+
) {
|
330
|
+
if ((specialAttr = specialAttrs[attrName])) {
|
331
|
+
specialAttr(fromEl, attrValue);
|
332
|
+
} else if (attrName === ATTR_XLINK_HREF) {
|
333
|
+
if (attrValue === undefined) {
|
334
|
+
fromEl.removeAttributeNS(NS_XLINK, ATTR_HREF);
|
335
|
+
} else {
|
336
|
+
fromEl.setAttributeNS(NS_XLINK, ATTR_HREF, attrValue);
|
337
|
+
}
|
338
|
+
} else if (attrValue === undefined) {
|
339
|
+
fromEl.removeAttribute(attrName);
|
340
|
+
} else {
|
341
|
+
fromEl.setAttribute(attrName, attrValue);
|
386
342
|
}
|
387
|
-
|
388
|
-
setAttribute(fromEl, namespaceURI, attrName, attrValue);
|
389
343
|
}
|
390
344
|
}
|
391
345
|
|
@@ -402,7 +356,9 @@ VElement.___morphAttrs = function (fromEl, vFromEl, toEl) {
|
|
402
356
|
if (toEl.___key === null || fromFlags & FLAG_SPREAD_ATTRS) {
|
403
357
|
for (attrName in oldAttrs) {
|
404
358
|
if (!(attrName in attrs)) {
|
405
|
-
if (
|
359
|
+
if ((specialAttr = specialAttrs[attrName])) {
|
360
|
+
specialAttr(fromEl, undefined);
|
361
|
+
} else if (attrName === ATTR_XLINK_HREF) {
|
406
362
|
fromEl.removeAttributeNS(ATTR_XLINK_HREF, ATTR_HREF);
|
407
363
|
} else {
|
408
364
|
fromEl.removeAttribute(attrName);
|
@@ -52,8 +52,6 @@ VNode.prototype = {
|
|
52
52
|
if (child.___Text) {
|
53
53
|
var childValue = child.___nodeValue;
|
54
54
|
this.___valueInternal = (this.___valueInternal || "") + childValue;
|
55
|
-
} else if (child.___preserve || child.___preserveBody) {
|
56
|
-
this.___preserveTextAreaValue = true;
|
57
55
|
} else {
|
58
56
|
throw TypeError();
|
59
57
|
}
|
@@ -11,7 +11,6 @@ var KeySequence = require("../../components/KeySequence");
|
|
11
11
|
var VElement = require("../vdom").___VElement;
|
12
12
|
var fragment = require("./fragment");
|
13
13
|
var helpers = require("./helpers");
|
14
|
-
var specialElHandlers = require("./specialElHandlers");
|
15
14
|
var virtualizeElement = VElement.___virtualize;
|
16
15
|
var morphAttrs = VElement.___morphAttrs;
|
17
16
|
var keysByDOMNode = domData.___keyByDOMNode;
|
@@ -680,8 +679,9 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
680
679
|
|
681
680
|
function morphEl(fromEl, vFromEl, toEl, parentComponent) {
|
682
681
|
var nodeName = toEl.___nodeName;
|
683
|
-
|
684
682
|
var constId = toEl.___constId;
|
683
|
+
vElementByDOMNode.set(fromEl, toEl);
|
684
|
+
|
685
685
|
if (constId !== undefined && vFromEl.___constId === constId) {
|
686
686
|
return;
|
687
687
|
}
|
@@ -692,14 +692,15 @@ function morphdom(fromNode, toNode, host, componentsContext) {
|
|
692
692
|
return;
|
693
693
|
}
|
694
694
|
|
695
|
-
if (nodeName
|
695
|
+
if (nodeName === "textarea") {
|
696
|
+
var newValue = toEl.___valueInternal || "";
|
697
|
+
var oldValue = vFromEl.___valueInternal || "";
|
698
|
+
if (oldValue !== newValue) {
|
699
|
+
fromEl.value = newValue;
|
700
|
+
}
|
701
|
+
} else {
|
696
702
|
morphChildren(fromEl, toEl, parentComponent);
|
697
703
|
}
|
698
|
-
|
699
|
-
var specialElHandler = specialElHandlers[nodeName];
|
700
|
-
if (specialElHandler !== undefined) {
|
701
|
-
specialElHandler(fromEl, toEl);
|
702
|
-
}
|
703
704
|
} // END: morphEl(...)
|
704
705
|
|
705
706
|
// eslint-disable-next-line no-constant-condition
|
@@ -1,106 +0,0 @@
|
|
1
|
-
"use strict";function syncBooleanAttrProp(fromEl, toEl, name) {
|
2
|
-
if (fromEl[name] !== toEl[name]) {
|
3
|
-
fromEl[name] = toEl[name];
|
4
|
-
if (fromEl[name]) {
|
5
|
-
fromEl.setAttribute(name, "");
|
6
|
-
} else {
|
7
|
-
fromEl.removeAttribute(name, "");
|
8
|
-
}
|
9
|
-
}
|
10
|
-
}
|
11
|
-
|
12
|
-
function forEachOption(el, fn, i) {
|
13
|
-
var curChild = el.ay_;
|
14
|
-
|
15
|
-
while (curChild) {
|
16
|
-
if (curChild.bY_ === "option") {
|
17
|
-
fn(curChild, ++i);
|
18
|
-
} else {
|
19
|
-
i = forEachOption(curChild, fn, i);
|
20
|
-
}
|
21
|
-
|
22
|
-
curChild = curChild.ci_;
|
23
|
-
}
|
24
|
-
|
25
|
-
return i;
|
26
|
-
}
|
27
|
-
|
28
|
-
// We use a JavaScript class to benefit from fast property lookup
|
29
|
-
function SpecialElHandlers() {}
|
30
|
-
SpecialElHandlers.prototype = {
|
31
|
-
/**
|
32
|
-
* Needed for IE. Apparently IE doesn't think that "selected" is an
|
33
|
-
* attribute when reading over the attributes using selectEl.attributes
|
34
|
-
*/
|
35
|
-
option: function (fromEl, toEl) {
|
36
|
-
syncBooleanAttrProp(fromEl, toEl, "selected");
|
37
|
-
},
|
38
|
-
button: function (fromEl, toEl) {
|
39
|
-
syncBooleanAttrProp(fromEl, toEl, "disabled");
|
40
|
-
},
|
41
|
-
/**
|
42
|
-
* The "value" attribute is special for the <input> element since it sets
|
43
|
-
* the initial value. Changing the "value" attribute without changing the
|
44
|
-
* "value" property will have no effect since it is only used to the set the
|
45
|
-
* initial value. Similar for the "checked" attribute, and "disabled".
|
46
|
-
*/
|
47
|
-
input: function (fromEl, toEl) {
|
48
|
-
syncBooleanAttrProp(fromEl, toEl, "checked");
|
49
|
-
syncBooleanAttrProp(fromEl, toEl, "disabled");
|
50
|
-
|
51
|
-
if (fromEl.value != toEl.e_) {
|
52
|
-
fromEl.value = toEl.e_;
|
53
|
-
}
|
54
|
-
|
55
|
-
if (fromEl.hasAttribute("value") && !toEl.cb_("value")) {
|
56
|
-
fromEl.removeAttribute("value");
|
57
|
-
}
|
58
|
-
},
|
59
|
-
|
60
|
-
textarea: function (fromEl, toEl) {
|
61
|
-
if (toEl.cl_) {
|
62
|
-
return;
|
63
|
-
}
|
64
|
-
|
65
|
-
var newValue = toEl.e_;
|
66
|
-
if (fromEl.value != newValue) {
|
67
|
-
fromEl.value = newValue;
|
68
|
-
}
|
69
|
-
|
70
|
-
var firstChild = fromEl.firstChild;
|
71
|
-
if (firstChild) {
|
72
|
-
// Needed for IE. Apparently IE sets the placeholder as the
|
73
|
-
// node value and vise versa. This ignores an empty update.
|
74
|
-
var oldValue = firstChild.nodeValue;
|
75
|
-
|
76
|
-
if (
|
77
|
-
oldValue == newValue ||
|
78
|
-
!newValue && oldValue == fromEl.placeholder)
|
79
|
-
{
|
80
|
-
return;
|
81
|
-
}
|
82
|
-
|
83
|
-
firstChild.nodeValue = newValue;
|
84
|
-
}
|
85
|
-
},
|
86
|
-
select: function (fromEl, toEl) {
|
87
|
-
if (!toEl.cb_("multiple")) {
|
88
|
-
var selected = 0;
|
89
|
-
forEachOption(
|
90
|
-
toEl,
|
91
|
-
function (option, i) {
|
92
|
-
if (option.cb_("selected")) {
|
93
|
-
selected = i;
|
94
|
-
}
|
95
|
-
},
|
96
|
-
-1
|
97
|
-
);
|
98
|
-
|
99
|
-
if (fromEl.selectedIndex !== selected) {
|
100
|
-
fromEl.selectedIndex = selected;
|
101
|
-
}
|
102
|
-
}
|
103
|
-
}
|
104
|
-
};
|
105
|
-
|
106
|
-
module.exports = new SpecialElHandlers();
|
@@ -1,15 +0,0 @@
|
|
1
|
-
"use strict";var extend = require("raptor-util/extend");
|
2
|
-
|
3
|
-
function removePreservedAttributes(attrs, props) {
|
4
|
-
var preservedAttrs = props && props.pa;
|
5
|
-
if (preservedAttrs) {
|
6
|
-
attrs = extend({}, attrs);
|
7
|
-
preservedAttrs.forEach(function (preservedAttrName) {
|
8
|
-
delete attrs[preservedAttrName];
|
9
|
-
});
|
10
|
-
}
|
11
|
-
|
12
|
-
return attrs;
|
13
|
-
}
|
14
|
-
|
15
|
-
require("./VElement").cc_ = removePreservedAttributes;
|
@@ -1,106 +0,0 @@
|
|
1
|
-
function syncBooleanAttrProp(fromEl, toEl, name) {
|
2
|
-
if (fromEl[name] !== toEl[name]) {
|
3
|
-
fromEl[name] = toEl[name];
|
4
|
-
if (fromEl[name]) {
|
5
|
-
fromEl.setAttribute(name, "");
|
6
|
-
} else {
|
7
|
-
fromEl.removeAttribute(name, "");
|
8
|
-
}
|
9
|
-
}
|
10
|
-
}
|
11
|
-
|
12
|
-
function forEachOption(el, fn, i) {
|
13
|
-
var curChild = el.___firstChild;
|
14
|
-
|
15
|
-
while (curChild) {
|
16
|
-
if (curChild.___nodeName === "option") {
|
17
|
-
fn(curChild, ++i);
|
18
|
-
} else {
|
19
|
-
i = forEachOption(curChild, fn, i);
|
20
|
-
}
|
21
|
-
|
22
|
-
curChild = curChild.___nextSibling;
|
23
|
-
}
|
24
|
-
|
25
|
-
return i;
|
26
|
-
}
|
27
|
-
|
28
|
-
// We use a JavaScript class to benefit from fast property lookup
|
29
|
-
function SpecialElHandlers() {}
|
30
|
-
SpecialElHandlers.prototype = {
|
31
|
-
/**
|
32
|
-
* Needed for IE. Apparently IE doesn't think that "selected" is an
|
33
|
-
* attribute when reading over the attributes using selectEl.attributes
|
34
|
-
*/
|
35
|
-
option: function (fromEl, toEl) {
|
36
|
-
syncBooleanAttrProp(fromEl, toEl, "selected");
|
37
|
-
},
|
38
|
-
button: function (fromEl, toEl) {
|
39
|
-
syncBooleanAttrProp(fromEl, toEl, "disabled");
|
40
|
-
},
|
41
|
-
/**
|
42
|
-
* The "value" attribute is special for the <input> element since it sets
|
43
|
-
* the initial value. Changing the "value" attribute without changing the
|
44
|
-
* "value" property will have no effect since it is only used to the set the
|
45
|
-
* initial value. Similar for the "checked" attribute, and "disabled".
|
46
|
-
*/
|
47
|
-
input: function (fromEl, toEl) {
|
48
|
-
syncBooleanAttrProp(fromEl, toEl, "checked");
|
49
|
-
syncBooleanAttrProp(fromEl, toEl, "disabled");
|
50
|
-
|
51
|
-
if (fromEl.value != toEl.___value) {
|
52
|
-
fromEl.value = toEl.___value;
|
53
|
-
}
|
54
|
-
|
55
|
-
if (fromEl.hasAttribute("value") && !toEl.___hasAttribute("value")) {
|
56
|
-
fromEl.removeAttribute("value");
|
57
|
-
}
|
58
|
-
},
|
59
|
-
|
60
|
-
textarea: function (fromEl, toEl) {
|
61
|
-
if (toEl.___preserveTextAreaValue) {
|
62
|
-
return;
|
63
|
-
}
|
64
|
-
|
65
|
-
var newValue = toEl.___value;
|
66
|
-
if (fromEl.value != newValue) {
|
67
|
-
fromEl.value = newValue;
|
68
|
-
}
|
69
|
-
|
70
|
-
var firstChild = fromEl.firstChild;
|
71
|
-
if (firstChild) {
|
72
|
-
// Needed for IE. Apparently IE sets the placeholder as the
|
73
|
-
// node value and vise versa. This ignores an empty update.
|
74
|
-
var oldValue = firstChild.nodeValue;
|
75
|
-
|
76
|
-
if (
|
77
|
-
oldValue == newValue ||
|
78
|
-
(!newValue && oldValue == fromEl.placeholder)
|
79
|
-
) {
|
80
|
-
return;
|
81
|
-
}
|
82
|
-
|
83
|
-
firstChild.nodeValue = newValue;
|
84
|
-
}
|
85
|
-
},
|
86
|
-
select: function (fromEl, toEl) {
|
87
|
-
if (!toEl.___hasAttribute("multiple")) {
|
88
|
-
var selected = 0;
|
89
|
-
forEachOption(
|
90
|
-
toEl,
|
91
|
-
function (option, i) {
|
92
|
-
if (option.___hasAttribute("selected")) {
|
93
|
-
selected = i;
|
94
|
-
}
|
95
|
-
},
|
96
|
-
-1,
|
97
|
-
);
|
98
|
-
|
99
|
-
if (fromEl.selectedIndex !== selected) {
|
100
|
-
fromEl.selectedIndex = selected;
|
101
|
-
}
|
102
|
-
}
|
103
|
-
},
|
104
|
-
};
|
105
|
-
|
106
|
-
module.exports = new SpecialElHandlers();
|
@@ -1,15 +0,0 @@
|
|
1
|
-
var extend = require("raptor-util/extend");
|
2
|
-
|
3
|
-
function removePreservedAttributes(attrs, props) {
|
4
|
-
var preservedAttrs = props && props.pa;
|
5
|
-
if (preservedAttrs) {
|
6
|
-
attrs = extend({}, attrs);
|
7
|
-
preservedAttrs.forEach(function (preservedAttrName) {
|
8
|
-
delete attrs[preservedAttrName];
|
9
|
-
});
|
10
|
-
}
|
11
|
-
|
12
|
-
return attrs;
|
13
|
-
}
|
14
|
-
|
15
|
-
require("./VElement").___removePreservedAttributes = removePreservedAttributes;
|