Merge pull request #1104 from Demonthos/fix-booleans-with-boolean-attributes

Fix boolean attributes with raw boolean values
This commit is contained in:
Jon Kelley authored and GitHub committed 2023-06-30 12:11:22 -07:00
commit 4145e50bbf
2 files changed
+14 -7

No files matched your search

+8 -4
View File
@@ -48,21 +48,25 @@ export function setAttributeInner(node, field, value, ns) {
node.defaultValue = value; node.defaultValue = value;
break; break;
case "checked": case "checked":
node.checked = value === "true" || value === true; node.checked = truthy(value);
break; break;
case "selected": case "selected":
node.selected = value === "true" || value === true; node.selected = truthy(value);
break; break;
case "dangerous_inner_html": case "dangerous_inner_html":
node.innerHTML = value; node.innerHTML = value;
break; break;
default: default:
// https://github.com/facebook/react/blob/8b88ac2592c5f555f315f9440cbb665dd1e7457a/packages/react-dom/src/shared/DOMProperty.js#L352-L364 // https://github.com/facebook/react/blob/8b88ac2592c5f555f315f9440cbb665dd1e7457a/packages/react-dom/src/shared/DOMProperty.js#L352-L364
if (value === "false" && bool_attrs.hasOwnProperty(name)) { if (!truthy(value) && bool_attrs.hasOwnProperty(name)) {
node.removeAttribute(name); node.removeAttribute(name);
} else { } else {
node.setAttribute(name, value); node.setAttribute(name, value);
} }
} }
} }
} }
function truthy(val) {
return val === "true" || val === true;
}
@@ -78,17 +78,17 @@ mod js {
node.defaultValue = value; node.defaultValue = value;
break; break;
case "checked": case "checked":
node.checked = value === "true"; node.checked = truthy(value);
break; break;
case "selected": case "selected":
node.selected = value === "true"; node.selected = truthy(value);
break; break;
case "dangerous_inner_html": case "dangerous_inner_html":
node.innerHTML = value; node.innerHTML = value;
break; break;
default: default:
// https://github.com/facebook/react/blob/8b88ac2592c5f555f315f9440cbb665dd1e7457a/packages/react-dom/src/shared/DOMProperty.js#L352-L364 // https://github.com/facebook/react/blob/8b88ac2592c5f555f315f9440cbb665dd1e7457a/packages/react-dom/src/shared/DOMProperty.js#L352-L364
if (value === "false" && bool_attrs.hasOwnProperty(name)) { if (!truthy(value) && bool_attrs.hasOwnProperty(name)) {
node.removeAttribute(name); node.removeAttribute(name);
} else { } else {
node.setAttribute(name, value); node.setAttribute(name, value);
@@ -164,6 +164,9 @@ mod js {
selected: true, selected: true,
truespeed: true, truespeed: true,
}; };
function truthy(val) {
return val === "true" || val === true;
}
"#; "#;
extern "C" { extern "C" {