From 01ea470e70c039e152419f53c40f975d69a6ce0f Mon Sep 17 00:00:00 2001 From: Glen Chao Date: Thu, 23 Mar 2023 13:37:17 -0700 Subject: [PATCH 1/4] Enumerate draggable attribute --- package.json | 12 ++++++------ src/index.js | 9 +++++++-- test/render.test.js | 7 +++++++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index a73962e3..0855bbfa 100644 --- a/package.json +++ b/package.json @@ -26,17 +26,17 @@ "./package.json": "./package.json" }, "scripts": { - "bench": "BABEL_ENV=test node -r @babel/register benchmarks index.js", - "bench:v8": "BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs", + "bench": "cross-env BABEL_ENV=test node -r @babel/register benchmarks index.js", + "bench:v8": "cross-env BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs", "build": "npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition", "postbuild": "node ./config/node-13-exports.js && node ./config/node-commonjs.js", "transpile": "microbundle src/index.js -f es,cjs,umd --target web --external preact", "transpile:jsx": "microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact", "copy-typescript-definition": "copyfiles -f src/*.d.ts dist", "test": "eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench", - "test:mocha": "BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js", - "test:mocha:compat": "BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'", - "test:mocha:debug": "BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'", + "test:mocha": "cross-env BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js", + "test:mocha:compat": "cross-env BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'", + "test:mocha:debug": "cross-env BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'", "format": "prettier src/**/*.{d.ts,js} test/**/*.js --write", "prepublishOnly": "npm run build", "release": "npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish" @@ -149,4 +149,4 @@ "pre-commit": "lint-staged" } } -} +} \ No newline at end of file diff --git a/src/index.js b/src/index.js index a9309ec2..31bae09c 100644 --- a/src/index.js +++ b/src/index.js @@ -311,8 +311,13 @@ function _renderToString(vnode, context, isSvgMode, selectValue, parent) { name = name.toLowerCase().replace(XLINK_REPLACE_REGEX, 'xlink:'); } else if (UNSAFE_NAME.test(name)) { continue; - } else if (name[0] === 'a' && name[1] === 'r' && v != null) { - // serialize boolean aria-xyz attribute values as strings + } else if ( + ((name[0] === 'a' && name[1] === 'r') || name === 'draggable') && + v != null + ) { + // serialize boolean aria-xyz or draggable attribute values as strings + // `draggable` is an enumerated attribute and not Boolean. A value of `true` or `false` is mandatory + // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/draggable v += ''; } } diff --git a/test/render.test.js b/test/render.test.js index 7ab0bcf8..0b501dd2 100644 --- a/test/render.test.js +++ b/test/render.test.js @@ -135,6 +135,13 @@ describe('render', () => { expect(rendered).to.equal(expected); }); + it('should include boolean draggable attribute', () => { + let rendered = render(
), + expected = `
`; + + expect(rendered).to.equal(expected); + }); + describe('attribute name sanitization', () => { it('should omit attributes with invalid names', () => { let rendered = render( From b21bfbee38cd44364bfca8a1c9ba0b66ee0e7026 Mon Sep 17 00:00:00 2001 From: Glen Chao Date: Thu, 23 Mar 2023 14:44:56 -0700 Subject: [PATCH 2/4] Restore cross-env changes --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0855bbfa..201e702e 100644 --- a/package.json +++ b/package.json @@ -26,17 +26,17 @@ "./package.json": "./package.json" }, "scripts": { - "bench": "cross-env BABEL_ENV=test node -r @babel/register benchmarks index.js", - "bench:v8": "cross-env BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs", + "bench": "BABEL_ENV=test node -r @babel/register benchmarks index.js", + "bench:v8": "BABEL_ENV=test microbundle benchmarks/index.js -f modern --alias benchmarkjs-pretty=benchmarks/lib/benchmark-lite.js --external none --target node --no-compress --no-sourcemap --raw -o benchmarks/.v8.mjs && v8 --module benchmarks/.v8.mjs", "build": "npm run -s transpile && npm run -s transpile:jsx && npm run -s copy-typescript-definition", "postbuild": "node ./config/node-13-exports.js && node ./config/node-commonjs.js", "transpile": "microbundle src/index.js -f es,cjs,umd --target web --external preact", "transpile:jsx": "microbundle src/jsx.js -o dist/jsx.js --target web --external preact && microbundle dist/jsx.js -o dist/jsx.js -f cjs --external preact", "copy-typescript-definition": "copyfiles -f src/*.d.ts dist", "test": "eslint src test && tsc && npm run test:mocha && npm run test:mocha:compat && npm run test:mocha:debug && npm run bench", - "test:mocha": "cross-env BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js", - "test:mocha:compat": "cross-env BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'", - "test:mocha:debug": "cross-env BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'", + "test:mocha": "BABEL_ENV=test mocha -r @babel/register -r test/setup.js test/*.test.js", + "test:mocha:compat": "BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/compat/index.test.js'", + "test:mocha:debug": "BABEL_ENV=test mocha -r @babel/register -r test/setup.js 'test/debug/index.test.js'", "format": "prettier src/**/*.{d.ts,js} test/**/*.js --write", "prepublishOnly": "npm run build", "release": "npm run build && git commit -am $npm_package_version && git tag $npm_package_version && git push && git push --tags && npm publish" From a9f57efa3081f95adc824d25ba6d3d6da2c923fd Mon Sep 17 00:00:00 2001 From: Glen Chao Date: Thu, 23 Mar 2023 14:48:24 -0700 Subject: [PATCH 3/4] Restore package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 201e702e..a73962e3 100644 --- a/package.json +++ b/package.json @@ -149,4 +149,4 @@ "pre-commit": "lint-staged" } } -} \ No newline at end of file +} From 0dfd5de8b64215fb0bfcbf69d27a7e6976f67d61 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Fri, 24 Mar 2023 08:34:38 +0100 Subject: [PATCH 4/4] Create .changeset/fifty-hounds-press.md --- .changeset/fifty-hounds-press.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fifty-hounds-press.md diff --git a/.changeset/fifty-hounds-press.md b/.changeset/fifty-hounds-press.md new file mode 100644 index 00000000..ae5133b9 --- /dev/null +++ b/.changeset/fifty-hounds-press.md @@ -0,0 +1,5 @@ +--- +"preact-render-to-string": patch +--- + +Enumerate draggable attribute, so the output isn't `draggable` but `draggable="true"`