Skip to content

Commit 3cc716d

Browse files
Merge pull request #147 from lakshyaranganath/fix/htmlfor
2 parents f0e18b0 + fce654c commit 3cc716d

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

src/index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,11 @@ function renderToString(vnode, context, opts, inner, isSvgMode, selectValue) {
167167
name = name.toLowerCase().replace(/^xlink:?/, 'xlink:');
168168
}
169169

170+
if (name==='htmlFor') {
171+
if (props.for) continue;
172+
name = 'for';
173+
}
174+
170175
if (name==='style' && v && typeof v==='object') {
171176
v = styleObjToCss(v);
172177
}
@@ -244,7 +249,7 @@ function renderToString(vnode, context, opts, inner, isSvgMode, selectValue) {
244249
if (ret) {
245250
if (pretty) {
246251
let isText = ret.length > 0 && ret[0]!='<';
247-
252+
248253
// We merge adjacent text nodes, otherwise each piece would be printed
249254
// on a new line.
250255
if (lastWasText && isText) {

test/render.js

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,23 @@ describe('render', () => {
573573
});
574574
});
575575

576+
describe('htmlFor / for massaging', () => {
577+
it('should render for using htmlFor', () => {
578+
let rendered = render(<label htmlFor="foo" />);
579+
expect(rendered).to.equal('<label for="foo"></label>');
580+
});
581+
582+
it('should render for using for', () => {
583+
let rendered = render(<label for="foo" />);
584+
expect(rendered).to.equal('<label for="foo"></label>');
585+
});
586+
587+
it('should prefer for over htmlFor', () => {
588+
let rendered = render(<label for="foo" htmlFor="bar" />);
589+
expect(rendered).to.equal('<label for="foo"></label>');
590+
});
591+
});
592+
576593
describe('sortAttributes', () => {
577594
it('should leave attributes unsorted by default', () => {
578595
let rendered = render(<div b1="b1" c="c" a="a" b="b" />);
@@ -602,7 +619,7 @@ describe('render', () => {
602619
expect(renderXml(<div foo={false} bar={0} />)).to.equal(`<div bar="0" />`);
603620
});
604621
});
605-
622+
606623
describe('state locking', () => {
607624
it('should set _dirty and __d to true', () => {
608625
let inst;
@@ -615,9 +632,9 @@ describe('render', () => {
615632
return <div />;
616633
}
617634
}
618-
635+
619636
expect(render(<Foo />)).to.equal('<div></div>');
620-
637+
621638
expect(inst).to.have.property('_dirty', true);
622639
expect(inst).to.have.property('__d', true);
623640
});
@@ -635,9 +652,9 @@ describe('render', () => {
635652
return <Bar count={++count} />;
636653
}
637654
}
638-
655+
639656
expect(render(<Foo />)).to.equal('<div></div>');
640-
657+
641658
expect(Bar).to.have.been.calledOnce.and.calledWithMatch({ count: 1 });
642659
});
643660
});

0 commit comments

Comments
 (0)