diff --git a/src/index.js b/src/index.js index 75b4ef78..4059359e 100644 --- a/src/index.js +++ b/src/index.js @@ -253,13 +253,9 @@ function _renderToString(vnode, context, opts, inner, isSvgMode, selectValue) { name = 'class'; } else if (isSvgMode && name.match(/^xlink:?./)) { name = name.toLowerCase().replace(/^xlink:?/, 'xlink:'); - } else if (DASHED_ATTRS.test(name)) { - name = name.replace(/([A-Z])/g, (l) => '-' + l.toLowerCase()); - } else if (!CAMEL_ATTRS.test(name)) { - name = name.toLowerCase(); } - if (name === 'htmlfor') { + if (name === 'htmlFor') { if (props.for) continue; name = 'for'; } @@ -282,7 +278,7 @@ function _renderToString(vnode, context, opts, inner, isSvgMode, selectValue) { continue; } - if (name === 'dangerouslysetinnerhtml') { + if (name === 'dangerouslySetInnerHTML') { html = v && v.__html; } else if (nodeName === 'textarea' && name === 'value') { // @@ -305,6 +301,14 @@ function _renderToString(vnode, context, opts, inner, isSvgMode, selectValue) { s += ` selected`; } } + + // Convert attribute names to proper html casing + if (DASHED_ATTRS.test(name)) { + name = name.replace(/([A-Z])/g, (l) => '-' + l.toLowerCase()); + } else if (!CAMEL_ATTRS.test(name)) { + name = name.toLowerCase(); + } + s += ` ${name}="${encodeEntities(v)}"`; } } diff --git a/test/jsx.test.js b/test/jsx.test.js index ec221f8b..733ebaf4 100644 --- a/test/jsx.test.js +++ b/test/jsx.test.js @@ -74,16 +74,6 @@ describe('jsx', () => { `); }); - it('should decamelize attributes', () => { - expect(renderJsx()).to.equal( - `` - ); - }); - - it('should dasherize certain attributes', () => { - expect(renderJsx()).to.equal(``); - }); - it('should skip null and undefined attributes', () => { expect(renderJsx(bar)).to.equal(`bar`); @@ -161,11 +151,11 @@ describe('jsx', () => { it('should skip function names if functionNames=false', () => { expect( renderJsx(
{}} />, { functionNames: false }) - ).to.equal('
'); + ).to.equal('
'); expect( renderJsx(
, { functionNames: false }) - ).to.equal('
'); + ).to.equal('
'); }); it('should render self-closing elements', () => { diff --git a/test/render.test.js b/test/render.test.js index aeae9f58..f7ae6781 100644 --- a/test/render.test.js +++ b/test/render.test.js @@ -89,6 +89,20 @@ describe('render', () => { expect(rendered).to.equal(expected); }); + it('should decamelize attributes', () => { + let rendered = render(), + expected = ``; + + expect(rendered).to.equal(expected); + }); + + it('should dasherize certain attributes', () => { + let rendered = render(), + expected = ``; + + expect(rendered).to.equal(expected); + }); + it('should include boolean aria-* attributes', () => { let rendered = render(
), expected = ``;