Skip to content

Commit caf0322

Browse files
committed
Merge pull request #3 from i-like-robots/master
Do not close void elements
2 parents 3c1b2bd + 03ea212 commit caf0322

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

src/index.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,23 @@ const ESC = {
1010

1111
const EMPTY = {};
1212

13+
const VOID_ELEMENTS = [
14+
'area',
15+
'base',
16+
'br',
17+
'col',
18+
'embed',
19+
'hr',
20+
'img',
21+
'input',
22+
'link',
23+
'meta',
24+
'param',
25+
'source',
26+
'track',
27+
'wbr'
28+
];
29+
1330
const HOP = Object.prototype.hasOwnProperty;
1431

1532
let encodeEntities = s => String(s).replace(/[<>"&]/g, escapeChar);
@@ -127,7 +144,10 @@ export default function renderToString(vnode, context, opts, inner) {
127144
}
128145
}
129146

130-
s += `</${nodeName}>`
147+
if (VOID_ELEMENTS.indexOf(nodeName) === -1) {
148+
s += `</${nodeName}>`;
149+
}
150+
131151
return s;
132152
};
133153

test/render.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,20 @@ describe('render', () => {
4141

4242
expect(rendered).to.equal(expected);
4343
});
44+
45+
it('does not close void elements', () => {
46+
let rendered, expected;
47+
48+
rendered = render(<div><input type='text' /><wbr /></div>);
49+
expected = `<div><input type="text"><wbr></div>`;
50+
51+
expect(rendered).to.equal(expected);
52+
53+
rendered = render(<input><p>Hello World</p></input>);
54+
expected = `<input><p>Hello World</p>`;
55+
56+
expect(rendered).to.equal(expected);
57+
});
4458
});
4559

4660
describe('Functional Components', () => {

0 commit comments

Comments
 (0)