From b24a4349274844cc3a7226fd3aa373912909e6db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sk=C3=B6ld?= Date: Wed, 7 Sep 2016 13:46:36 +0200 Subject: [PATCH 1/3] Added tests for attributes with null/undefined values --- test/attr.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/attr.js b/test/attr.js index 2d55b12..72e2d77 100644 --- a/test/attr.js +++ b/test/attr.js @@ -9,6 +9,24 @@ test('class', function (t) { t.end() }) +test('undefined attribute value', function (t) { + var tree = hx`
` + t.equal(vdom.create(tree).toString(), '
') + t.end() +}) + +test('empty string attribute value', function (t) { + var tree = hx`
` + t.equal(vdom.create(tree).toString(), '
') + t.end() +}) + +test('null attribute value', function (t) { + var tree = hx`
` + t.equal(vdom.create(tree).toString(), '
') + t.end() +}) + test('boolean attribute', function (t) { var tree = hx`` t.equal(vdom.create(tree).toString(), '') From 1b3571a0f1d91c08e48c5b28a9a25512d5e3e4ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sk=C3=B6ld?= Date: Wed, 7 Sep 2016 13:50:53 +0200 Subject: [PATCH 2/3] Added another test using false, using hyperscript instead --- test/attr.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/attr.js b/test/attr.js index 72e2d77..bd2d1aa 100644 --- a/test/attr.js +++ b/test/attr.js @@ -1,5 +1,6 @@ var test = require('tape') var vdom = require('virtual-dom') +var hyperscript = require('hyperscript') var hyperx = require('../') var hx = hyperx(vdom.h) @@ -21,6 +22,15 @@ test('empty string attribute value', function (t) { t.end() }) +// running this test with hyperscript because it +// breaks with virtual-dom (with "str.replace is not a function") +test('false attribute value', function (t) { + var hx = hyperx(hyperscript) + var tree = hx`
` + t.equal(tree.outerHTML, '
') + t.end() +}) + test('null attribute value', function (t) { var tree = hx`
` t.equal(vdom.create(tree).toString(), '
') From c083065aba066badd248df9e580548caa8018a75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sk=C3=B6ld?= Date: Wed, 7 Sep 2016 13:51:35 +0200 Subject: [PATCH 3/3] Fixes falsy attribute values by leaving it to the renderer --- index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 11d6767..5fd948a 100644 --- a/index.js +++ b/index.js @@ -75,7 +75,9 @@ module.exports = function (h, opts) { else cur[1][key] = concat(cur[1][key], parts[i][1]) } else if (parts[i][0] === VAR && (parts[i][1] === ATTR_VALUE || parts[i][1] === ATTR_KEY)) { - if (!cur[1][key]) cur[1][key] = strfn(parts[i][2]) + if (!cur[1][key]) + if (parts[i][1] === ATTR_KEY) cur[1][key] = strfn(parts[i][2]) + else cur[1][key] = parts[i][2] else cur[1][key] = concat(cur[1][key], parts[i][2]) } else { if (key.length && !cur[1][key] && i === j