Bläddra i källkod

LibWeb: Make HTMLSelectElement a FormAssociatedElement

Andreas Kling 4 år sedan
förälder
incheckning
e454e1a45d

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

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2020, The SerenityOS developers.
+ * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -24,6 +25,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <LibWeb/HTML/HTMLFormElement.h>
 #include <LibWeb/HTML/HTMLSelectElement.h>
 
 namespace Web::HTML {
@@ -37,4 +39,14 @@ HTMLSelectElement::~HTMLSelectElement()
 {
 }
 
+void HTMLSelectElement::inserted()
+{
+    set_form(first_ancestor_of_type<HTMLFormElement>());
+}
+
+void HTMLSelectElement::removed_from(DOM::Node*)
+{
+    set_form(nullptr);
+}
+
 }

+ 9 - 1
Userland/Libraries/LibWeb/HTML/HTMLSelectElement.h

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2020, The SerenityOS developers.
+ * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -26,16 +27,23 @@
 
 #pragma once
 
+#include <LibWeb/HTML/FormAssociatedElement.h>
 #include <LibWeb/HTML/HTMLElement.h>
 
 namespace Web::HTML {
 
-class HTMLSelectElement final : public HTMLElement {
+class HTMLSelectElement final
+    : public HTMLElement
+    , public FormAssociatedElement {
 public:
     using WrapperType = Bindings::HTMLSelectElementWrapper;
 
     HTMLSelectElement(DOM::Document&, QualifiedName);
     virtual ~HTMLSelectElement() override;
+
+private:
+    virtual void inserted() override;
+    virtual void removed_from(DOM::Node*) override;
 };
 
 }