Skip to content

Commit 8f4aa84

Browse files
committed
feat: bool attr white list
1 parent 4f1894f commit 8f4aa84

File tree

3 files changed

+67
-2
lines changed

3 files changed

+67
-2
lines changed

examples/disabled.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ fn app(cx: Scope) -> Element {
1818
disabled: "{disabled}",
1919
"lower button"
2020
}
21+
22+
input {
23+
value: "false",
24+
}
25+
2126
}
2227
})
2328
}

packages/desktop/src/index.js

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,38 @@ class Interpreter {
369369
node.innerHTML = value;
370370
break;
371371
default:
372+
373+
const bool_attrs = [
374+
"allowfullscreen",
375+
"allowpaymentrequest",
376+
"async",
377+
"autofocus",
378+
"autoplay",
379+
"checked",
380+
"controls",
381+
"default",
382+
"defer",
383+
"disabled",
384+
"formnovalidate",
385+
"hidden",
386+
"ismap",
387+
"itemscope",
388+
"loop",
389+
"multiple",
390+
"muted",
391+
"nomodule",
392+
"novalidate",
393+
"open",
394+
"playsinline",
395+
"readonly",
396+
"required",
397+
"reversed",
398+
"selected",
399+
"truespeed",
400+
]
401+
372402
// https://github.com/facebook/react/blob/8b88ac2592c5f555f315f9440cbb665dd1e7457a/packages/react-dom/src/shared/DOMProperty.js#L352-L364
373-
if (value == "false" && name != "capture" && name != "download") {
403+
if (value == "false" && bool_attrs.indexOf(name)) {
374404
node.removeAttribute(name);
375405
} else {
376406
node.setAttribute(name, value);

packages/web/src/dom.rs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,38 @@ impl WebsysDom {
348348
}
349349
}
350350
_ => {
351+
352+
let bool_attrs = vec![
353+
"allowfullscreen",
354+
"allowpaymentrequest",
355+
"async",
356+
"autofocus",
357+
"autoplay",
358+
"checked",
359+
"controls",
360+
"default",
361+
"defer",
362+
"disabled",
363+
"formnovalidate",
364+
"hidden",
365+
"ismap",
366+
"itemscope",
367+
"loop",
368+
"multiple",
369+
"muted",
370+
"nomodule",
371+
"novalidate",
372+
"open",
373+
"playsinline",
374+
"readonly",
375+
"required",
376+
"reversed",
377+
"selected",
378+
"truespeed",
379+
];
380+
351381
// https://github.com/facebook/react/blob/8b88ac2592c5f555f315f9440cbb665dd1e7457a/packages/react-dom/src/shared/DOMProperty.js#L352-L364
352-
if value == "false" && ((name != "capture") && (name != "download")) {
382+
if value == "false" && bool_attrs.contains(&name) {
353383
if let Some(el) = node.dyn_ref::<Element>() {
354384
let _ = el.remove_attribute(name);
355385
}

0 commit comments

Comments
 (0)