From 4e8b5c8d814df867adffa47adf43aba9a1a14c4d Mon Sep 17 00:00:00 2001 From: Titus Wormer Date: Wed, 18 Jul 2018 14:47:26 -0400 Subject: [PATCH] Fix bug in non-boolean attributes being collapsed 665a075 introduced a change where non-boolean HTML attributes (such as `title="title"`) would be stringified as booleans (such as `title`) if their value was the same as their attribute name. --- lib/element.js | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/element.js b/lib/element.js index 6652d0b..8064a56 100644 --- a/lib/element.js +++ b/lib/element.js @@ -139,25 +139,33 @@ function attribute(ctx, key, value) { var schema = ctx.schema var space = schema.space var info = find(schema, key) - var name + var name = info.attribute + + if (info.overloadedBoolean && (value === name || value === '')) { + value = true + } else if ( + info.boolean || + (info.overloadedBoolean && typeof value !== 'string') + ) { + value = Boolean(value) + } if ( value == null || value === false || - (typeof value === 'number' && isNaN(value)) || - (!value && info.boolean) + (typeof value === 'number' && isNaN(value)) ) { return EMPTY } - name = attributeName(ctx, info.attribute) + name = attributeName(ctx, name) - if (value === true || (value && info.boolean)) { - value = name - } + if (value === true) { + if (space === 'html') { + return name + } - if (space === 'html' && value === name) { - return name + value = name } return name + attributeValue(ctx, key, value, info)