Skip to content

Commit 85cc721

Browse files
author
Steven Orvell
committed
hostAttributes now does not override existing instance attributes; additionally class is unsupported in host attributes.
1 parent 5816dd7 commit 85cc721

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

src/micro/attributes.html

+7-1
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,15 @@
6767
}
6868
},
6969

70+
/* apply attributes to node but avoid overriding existing values */
7071
_applyAttributes: function(node, attr$) {
7172
for (var n in attr$) {
72-
this.serializeValueToAttribute(attr$[n], n, this);
73+
// NOTE: never allow 'class' to be set in hostAttributes
74+
// since shimming classes would make it work
75+
// inconsisently under native SD
76+
if (!this.hasAttribute(n) && (n !== 'class')) {
77+
this.serializeValueToAttribute(attr$[n], n, this);
78+
}
7379
}
7480
},
7581

test/unit/attributes-elements.html

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
hostAttributes: {
55
attr1: 'this is attr 1',
66
attr2: 42,
7+
attr3: 'host',
78
'aria-role': 'button',
89
title: 'awesome',
910
'attr-object': {foo: 'bar', nested: {'meaning': 42}, arr: [0, 'foo', true]},

test/unit/attributes.html

+10-7
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<body>
1919

2020

21-
<x-basic id="basicDefault"></x-basic>
21+
<x-basic id="basicDefault" attr3="instance"></x-basic>
2222

2323
<x-compose id="compose"></x-compose>
2424

@@ -253,15 +253,17 @@
253253
test('hostAttributes set correctly', function() {
254254
assert.strictEqual(basicDefault.getAttribute('attr1'), 'this is attr 1');
255255
assert.strictEqual(basicDefault.getAttribute('attr2'), '42');
256+
assert.strictEqual(basicDefault.getAttribute('attr3'), 'instance', 'host attribute overrode instance attribute and should not');
256257
assert.strictEqual(basicDefault.getAttribute('aria-role'), 'button');
257258
assert.strictEqual(basicDefault.getAttribute('title'), 'awesome');
258259
assert.strictEqual(basicDefault.title, 'awesome');
259260
assert.equal(basicDefault.getAttribute('attr-object'),
260261
JSON.stringify(configuredObject));
261262
assert.equal(basicDefault.hasAttribute('attr-stupid'), false);
262-
assert(basicDefault.classList.contains('foo'));
263-
assert(basicDefault.classList.contains('bar'));
264-
assert(basicDefault.classList.contains('baz'));
263+
// class not is not serialized
264+
assert.notOk(basicDefault.classList.contains('foo'));
265+
assert.notOk(basicDefault.classList.contains('bar'));
266+
assert.notOk(basicDefault.classList.contains('baz'));
265267
});
266268

267269
test('hostAttributes set correctly in composed element', function() {
@@ -273,9 +275,10 @@
273275
assert.equal(compose.$.basic.getAttribute('attr-object'),
274276
JSON.stringify(configuredObject));
275277
assert.equal(compose.$.basic.hasAttribute('attr-stupid'), false);
276-
assert(compose.$.basic.classList.contains('foo'));
277-
assert(compose.$.basic.classList.contains('bar'));
278-
assert(compose.$.basic.classList.contains('baz'));
278+
// class not is not serialized
279+
assert.notOk(compose.$.basic.classList.contains('foo'));
280+
assert.notOk(compose.$.basic.classList.contains('bar'));
281+
assert.notOk(compose.$.basic.classList.contains('baz'));
279282
if (!Polymer.Settings.useNativeShadow) {
280283
assert(compose.$.basic.classList.contains('style-scope'));
281284
assert(compose.$.basic.classList.contains('x-compose'));

0 commit comments

Comments
 (0)