Prechádzať zdrojové kódy

LibWeb: Ensure that radio group is updated when radio is checked from JS

Fixes test 56 in Acid3.

Farewell, radio eyes, you will be missed. :^(
sin-ack 3 rokov pred
rodič
commit
57a85b1017

+ 12 - 0
Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp

@@ -70,6 +70,18 @@ void HTMLInputElement::set_checked(bool checked, ChangeSource change_source)
     set_needs_style_update(true);
 }
 
+void HTMLInputElement::set_checked_binding(bool checked)
+{
+    if (type() == "radio") {
+        if (checked)
+            set_checked_within_group();
+        else
+            set_checked(false, ChangeSource::Programmatic);
+    } else {
+        set_checked(checked, ChangeSource::Programmatic);
+    }
+}
+
 // https://html.spec.whatwg.org/multipage/input.html#input-activation-behavior
 void HTMLInputElement::run_input_activation_behavior()
 {

+ 3 - 0
Userland/Libraries/LibWeb/HTML/HTMLInputElement.h

@@ -69,6 +69,9 @@ public:
     };
     void set_checked(bool, ChangeSource = ChangeSource::Programmatic);
 
+    bool checked_binding() const { return checked(); }
+    void set_checked_binding(bool);
+
     void did_edit_text_node(Badge<BrowsingContext>);
 
     virtual bool is_focusable() const override;

+ 1 - 1
Userland/Libraries/LibWeb/HTML/HTMLInputElement.idl

@@ -21,7 +21,7 @@ interface HTMLInputElement : HTMLElement {
 
     [LegacyNullToEmptyString] attribute DOMString value;
 
-    attribute boolean checked;
+    [ImplementedAs=checked_binding] attribute boolean checked;
 
     [Reflect] attribute boolean disabled;
     [Reflect=checked] attribute boolean defaultChecked;