Comparing version 2.0.0 to 2.0.1
37
index.js
@@ -7,2 +7,3 @@ var attrToProp = require('hyperscript-attribute-to-property') | ||
var ATTR_VALUE_SQ = 9, ATTR_VALUE_DQ = 10 | ||
var ATTR_EQ = 11, ATTR_BREAK = 12 | ||
@@ -60,3 +61,3 @@ module.exports = function (h, opts) { | ||
if (typeof parts[i][2] === 'object' && !key) { | ||
for(copyKey in parts[i][2]) { | ||
for (copyKey in parts[i][2]) { | ||
if (parts[i][2].hasOwnProperty(copyKey) && !cur[1][copyKey]) { | ||
@@ -71,11 +72,18 @@ cur[1][copyKey] = parts[i][2][copyKey] | ||
} | ||
if (parts[i][0] === ATTR_EQ) i++ | ||
var j = i | ||
for (; i < parts.length; i++) { | ||
if (parts[i][0] === ATTR_VALUE) { | ||
if (parts[i][0] === ATTR_VALUE || parts[i][0] === ATTR_KEY) { | ||
if (!cur[1][key]) cur[1][key] = strfn(parts[i][1]) | ||
else cur[1][key] = concat(cur[1][key], parts[i][1]) | ||
} else if (parts[i][0] === VAR && parts[i][1] === ATTR_VALUE) { | ||
} 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]) | ||
else cur[1][key] = concat(cur[1][key], parts[i][2]) | ||
} else { | ||
i-- | ||
if (key.length && !cur[1][key] && parts[i][0] === CLOSE && i === j) { | ||
// https://html.spec.whatwg.org/multipage/infrastructure.html#boolean-attributes | ||
// empty string is falsy, not well behaved value in browser | ||
cur[1][key] = key.toLowerCase() | ||
} | ||
break | ||
@@ -106,2 +114,4 @@ } | ||
cur[2].push(p[1]) | ||
} else if (s === ATTR_EQ || s === ATTR_BREAK) { | ||
// no-op | ||
} else { | ||
@@ -122,2 +132,6 @@ throw new Error('unhandled: ' + s) | ||
} | ||
if (Array.isArray(tree[2][0]) && typeof tree[2][0][0] === 'string' | ||
&& Array.isArray(tree[2][0][2])) { | ||
tree[2][0] = h(tree[2][0][0], tree[2][0][1], tree[2][0][2]) | ||
} | ||
return tree[2][0] | ||
@@ -156,2 +170,4 @@ | ||
reg = c | ||
} else if (state === ATTR && /\s/.test(c)) { | ||
res.push([ATTR_BREAK]) | ||
} else if (state === ATTR_KEY && /\s/.test(c)) { | ||
@@ -162,3 +178,3 @@ res.push([ATTR_KEY,reg]) | ||
} else if (state === ATTR_KEY && c === '=') { | ||
res.push([ATTR_KEY,reg]) | ||
res.push([ATTR_KEY,reg],[ATTR_EQ]) | ||
reg = '' | ||
@@ -169,6 +185,7 @@ state = ATTR_VALUE_W | ||
} else if (state === ATTR_KEY_W && c === '=') { | ||
res.push([ATTR_EQ]) | ||
state = ATTR_VALUE_W | ||
} else if (state === ATTR_KEY_W && !/\s/.test(c)) { | ||
} else if ((state === ATTR_KEY_W || state === ATTR) && !/\s/.test(c)) { | ||
res.push([ATTR_EQ]) | ||
state = ATTR | ||
i-- | ||
} else if (state === ATTR_VALUE_W && c === '"') { | ||
@@ -179,7 +196,7 @@ state = ATTR_VALUE_DQ | ||
} else if (state === ATTR_VALUE_DQ && c === '"') { | ||
res.push([ATTR_VALUE,reg]) | ||
res.push([ATTR_VALUE,reg],[ATTR_BREAK]) | ||
reg = '' | ||
state = ATTR | ||
} else if (state === ATTR_VALUE_SQ && c === "'") { | ||
res.push([ATTR_VALUE,reg]) | ||
res.push([ATTR_VALUE,reg],[ATTR_BREAK]) | ||
reg = '' | ||
@@ -191,3 +208,3 @@ state = ATTR | ||
} else if (state === ATTR_VALUE && /\s/.test(c)) { | ||
res.push([ATTR_VALUE,reg]) | ||
res.push([ATTR_BREAK],[ATTR_VALUE,reg]) | ||
reg = '' | ||
@@ -194,0 +211,0 @@ state = ATTR |
{ | ||
"name": "hyperx", | ||
"version": "2.0.0", | ||
"version": "2.0.1", | ||
"description": "tagged template string virtual dom builder", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -11,1 +11,7 @@ var test = require('tape') | ||
}) | ||
test('boolean attribute', function (t) { | ||
var tree = hx`<video autoplay></video>` | ||
t.equal(vdom.create(tree).toString(), '<video autoplay="autoplay"></video>') | ||
t.end() | ||
}) |
@@ -38,2 +38,10 @@ var test = require('tape') | ||
test('boolean key', function (t) { | ||
var key = 'checked' | ||
var tree = hx`<input type="checkbox" ${key}>` | ||
t.equal(vdom.create(tree).toString(), | ||
'<input type="checkbox" checked="checked" />') | ||
t.end() | ||
}) | ||
test('multiple keys', function (t) { | ||
@@ -40,0 +48,0 @@ var props = { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
29514
747