diff --git a/packages/desktop/src/index.js b/packages/desktop/src/index.js index e6ee2e765..75b838b02 100644 --- a/packages/desktop/src/index.js +++ b/packages/desktop/src/index.js @@ -1,3 +1,32 @@ +const bool_attrs = [ + "allowfullscreen", + "allowpaymentrequest", + "async", + "autofocus", + "autoplay", + "checked", + "controls", + "default", + "defer", + "disabled", + "formnovalidate", + "hidden", + "ismap", + "itemscope", + "loop", + "multiple", + "muted", + "nomodule", + "novalidate", + "open", + "playsinline", + "readonly", + "required", + "reversed", + "selected", + "truespeed", +] + function serialize_event(event) { switch (event.type) { case "copy": @@ -369,36 +398,6 @@ class Interpreter { node.innerHTML = value; break; default: - - const bool_attrs = [ - "allowfullscreen", - "allowpaymentrequest", - "async", - "autofocus", - "autoplay", - "checked", - "controls", - "default", - "defer", - "disabled", - "formnovalidate", - "hidden", - "ismap", - "itemscope", - "loop", - "multiple", - "muted", - "nomodule", - "novalidate", - "open", - "playsinline", - "readonly", - "required", - "reversed", - "selected", - "truespeed", - ] - // https://github.com/facebook/react/blob/8b88ac2592c5f555f315f9440cbb665dd1e7457a/packages/react-dom/src/shared/DOMProperty.js#L352-L364 if (value == "false" && bool_attrs.indexOf(name)) { node.removeAttribute(name); diff --git a/packages/web/src/dom.rs b/packages/web/src/dom.rs index 3f38943d4..364f1a1d7 100644 --- a/packages/web/src/dom.rs +++ b/packages/web/src/dom.rs @@ -348,40 +348,42 @@ impl WebsysDom { } } _ => { - - let bool_attrs = vec![ - "allowfullscreen", - "allowpaymentrequest", - "async", - "autofocus", - "autoplay", - "checked", - "controls", - "default", - "defer", - "disabled", - "formnovalidate", - "hidden", - "ismap", - "itemscope", - "loop", - "multiple", - "muted", - "nomodule", - "novalidate", - "open", - "playsinline", - "readonly", - "required", - "reversed", - "selected", - "truespeed", - ]; - // https://github.com/facebook/react/blob/8b88ac2592c5f555f315f9440cbb665dd1e7457a/packages/react-dom/src/shared/DOMProperty.js#L352-L364 - if value == "false" && bool_attrs.contains(&name) { + if value == "false" { if let Some(el) = node.dyn_ref::() { - let _ = el.remove_attribute(name); + match name { + "allowfullscreen" + | "allowpaymentrequest" + | "async" + | "autofocus" + | "autoplay" + | "checked" + | "controls" + | "default" + | "defer" + | "disabled" + | "formnovalidate" + | "hidden" + | "ismap" + | "itemscope" + | "loop" + | "multiple" + | "muted" + | "nomodule" + | "novalidate" + | "open" + | "playsinline" + | "readonly" + | "required" + | "reversed" + | "selected" + | "truespeed" => { + let _ = el.remove_attribute(name); + } + _ => { + let _ = el.set_attribute(name, value); + } + }; } } else { fallback();