From 4127295c02fbfd87e019d311c08170f9a81529d3 Mon Sep 17 00:00:00 2001 From: Ryan Christian Date: Thu, 16 Jun 2022 16:46:31 -0500 Subject: [PATCH 1/3] fix: Serialize defaultChecked as checked attr --- src/index.js | 4 +++- test/render.test.js | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 6c2b24aa..f202910f 100644 --- a/src/index.js +++ b/src/index.js @@ -263,10 +263,12 @@ function _renderToString(vnode, context, opts, inner, isSvgMode, selectValue) { if (name === 'defaultValue') { name = 'value'; + } else if (name === 'defaultChecked') { + name = 'checked'; } else if (name === 'className') { if (typeof props.class !== 'undefined') continue; name = 'class'; - } else if (isSvgMode && name.match(/^xlink:?./)) { + } else if (isSvgMode && /^xlink:?./.test(name)) { name = name.toLowerCase().replace(/^xlink:?/, 'xlink:'); } diff --git a/test/render.test.js b/test/render.test.js index 4ef1ce41..d35cdf6d 100644 --- a/test/render.test.js +++ b/test/render.test.js @@ -95,6 +95,13 @@ describe('render', () => { expect(rendered).to.equal(expected); }); + it('should serialize defaultChecked prop to the checked attribute', () => { + let rendered = render(), + expected = ``; + + expect(rendered).to.equal(expected); + }); + it('should include boolean aria-* attributes', () => { let rendered = render(
), expected = ``; From b340af4033302dbb69873c988144c4237cb0f263 Mon Sep 17 00:00:00 2001 From: Ryan Christian Date: Thu, 16 Jun 2022 17:09:12 -0500 Subject: [PATCH 2/3] docs: Adding changeset --- .changeset/cyan-students-unite.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cyan-students-unite.md diff --git a/.changeset/cyan-students-unite.md b/.changeset/cyan-students-unite.md new file mode 100644 index 00000000..6f50e81b --- /dev/null +++ b/.changeset/cyan-students-unite.md @@ -0,0 +1,5 @@ +--- +'preact-render-to-string': patch +--- + +Ensures `defaultChecked` is serialized as `checked` attribute From d4e23864edf67b728bb4f5f75f4089ec326c3c55 Mon Sep 17 00:00:00 2001 From: Ryan Christian Date: Wed, 6 Jul 2022 11:35:48 -0500 Subject: [PATCH 3/3] fix: Serialize defaultSelected as selected attr --- src/index.js | 5 ++++- test/render.test.js | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index f202910f..1dc17b4d 100644 --- a/src/index.js +++ b/src/index.js @@ -15,7 +15,8 @@ const SHALLOW = { shallow: true }; // components without names, kept as a hash for later comparison to return consistent UnnamedComponentXX names. const UNNAMED = []; -const VOID_ELEMENTS = /^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/; +const VOID_ELEMENTS = + /^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/; const UNSAFE_NAME = /[\s\n\\/='"\0<>]/; @@ -265,6 +266,8 @@ function _renderToString(vnode, context, opts, inner, isSvgMode, selectValue) { name = 'value'; } else if (name === 'defaultChecked') { name = 'checked'; + } else if (name === 'defaultSelected') { + name = 'selected'; } else if (name === 'className') { if (typeof props.class !== 'undefined') continue; name = 'class'; diff --git a/test/render.test.js b/test/render.test.js index d35cdf6d..fe3e9bf0 100644 --- a/test/render.test.js +++ b/test/render.test.js @@ -102,6 +102,13 @@ describe('render', () => { expect(rendered).to.equal(expected); }); + it('should serialize defaultSelected prop to the selected attribute', () => { + let rendered = render(`; + + expect(rendered).to.equal(expected); + }); + it('should include boolean aria-* attributes', () => { let rendered = render(
), expected = ``;