From 7c47cc19f7169bcf1e9da868e36f56f038ad1010 Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Sun, 1 Apr 2018 16:35:56 -0400 Subject: [PATCH] handle boolean attributes --- src/shared/dom.js | 8 ++++-- .../samples/spread-element-boolean/_config.js | 27 +++++++++++++++++++ .../samples/spread-element-boolean/main.html | 1 + 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 test/runtime/samples/spread-element-boolean/_config.js create mode 100644 test/runtime/samples/spread-element-boolean/main.html diff --git a/src/shared/dom.js b/src/shared/dom.js index efcec97fb3..0eb53585d7 100644 --- a/src/shared/dom.js +++ b/src/shared/dom.js @@ -87,8 +87,12 @@ export function setAttribute(node, attribute, value) { export function setAttributes(node, attributes) { for (var key in attributes) { - if (attributes[key] === undefined) removeAttribute(node, key); - else setAttribute(node, key, attributes[key]); + if (key in node) { + node[key] = attributes[key]; + } else { + if (attributes[key] === undefined) removeAttribute(node, key); + else setAttribute(node, key, attributes[key]); + } } } diff --git a/test/runtime/samples/spread-element-boolean/_config.js b/test/runtime/samples/spread-element-boolean/_config.js new file mode 100644 index 0000000000..83a1590f29 --- /dev/null +++ b/test/runtime/samples/spread-element-boolean/_config.js @@ -0,0 +1,27 @@ +export default { + data: { + props: { + disabled: true + } + }, + + html: ` + + `, + + test(assert, component, target) { + const button = target.querySelector('button'); + + assert.ok(button.disabled); + + component.set({ + props: { disabled: false } + }); + + assert.htmlEqual( + target.innerHTML, + `` + ); + assert.ok(!button.disabled); + }, +}; diff --git a/test/runtime/samples/spread-element-boolean/main.html b/test/runtime/samples/spread-element-boolean/main.html new file mode 100644 index 0000000000..9469dab0d6 --- /dev/null +++ b/test/runtime/samples/spread-element-boolean/main.html @@ -0,0 +1 @@ + \ No newline at end of file