From c82a9ea7f21783b6533d4a941216daac4603d739 Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Sat, 3 Aug 2019 11:58:00 -0400 Subject: [PATCH] omit falsy boolean attributes --- src/compiler/compile/render_ssr/handlers/Element.ts | 4 ++-- src/runtime/internal/ssr.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/compiler/compile/render_ssr/handlers/Element.ts b/src/compiler/compile/render_ssr/handlers/Element.ts index 8b64361c4f..052cfd2e72 100644 --- a/src/compiler/compile/render_ssr/handlers/Element.ts +++ b/src/compiler/compile/render_ssr/handlers/Element.ts @@ -140,7 +140,7 @@ export default function(node: Element, renderer: Renderer, options: RenderOption } else if (attribute.chunks.length === 1 && attribute.chunks[0].type !== 'Text') { const { name } = attribute; const snippet = snip(attribute.chunks[0]); - opening_tag += '${@add_attribute("' + name + '", ' + snippet + ')}'; + opening_tag += '${@add_attribute("' + name + '", ' + snippet + ', ' + (boolean_attributes.has(name) ? 1 : 0) + ')}'; } else { opening_tag += ` ${attribute.name}="${stringify_attribute(attribute, true)}"`; } @@ -164,7 +164,7 @@ export default function(node: Element, renderer: Renderer, options: RenderOption node_contents = '${(' + snippet + ') || ""}'; } else { const snippet = snip(expression); - opening_tag += '${@add_attribute("' + name + '", ' + snippet + ')}'; + opening_tag += '${@add_attribute("' + name + '", ' + snippet + ', 1)}'; } }); diff --git a/src/runtime/internal/ssr.ts b/src/runtime/internal/ssr.ts index 4bc06f4351..887ba97e38 100644 --- a/src/runtime/internal/ssr.ts +++ b/src/runtime/internal/ssr.ts @@ -133,9 +133,9 @@ export function get_store_value(store: Readable): T | undefined { return value; } -export function add_attribute(name, value) { - if (value == null) return ''; - return ` ${name}${value === true ? '' : `=${typeof value === 'string' ? JSON.stringify(value) : `"${value}"`}`}`; +export function add_attribute(name, value, boolean) { + if (value == null || (boolean && !value)) return ''; + return ` ${name}${value === true ? '' : `=${typeof value === 'string' ? JSON.stringify(escape(value)) : `"${value}"`}`}`; } export function add_classes(classes) {