Преглед изворни кода

LibWeb: Implement `Node.nodeValue` DOM attribute

Adam Hodgen пре 3 година
родитељ
комит
c6dd8a1f66

+ 26 - 0
Userland/Libraries/LibWeb/DOM/Node.cpp

@@ -145,6 +145,32 @@ void Node::set_text_content(String const& content)
     set_needs_style_update(true);
     set_needs_style_update(true);
 }
 }
 
 
+// https://dom.spec.whatwg.org/#dom-node-nodevalue
+String Node::node_value() const
+{
+    if (is<Attribute>(this)) {
+        return verify_cast<Attribute>(this)->value();
+    }
+    if (is<CharacterData>(this)) {
+        return verify_cast<CharacterData>(this)->data();
+    }
+
+    return {};
+}
+
+// https://dom.spec.whatwg.org/#ref-for-dom-node-nodevalue%E2%91%A0
+void Node::set_node_value(const String& value)
+{
+
+    if (is<Attribute>(this)) {
+        verify_cast<Attribute>(this)->set_value(value);
+    } else if (is<CharacterData>(this)) {
+        verify_cast<CharacterData>(this)->set_data(value);
+    }
+
+    // Otherwise: Do nothing.
+}
+
 void Node::invalidate_style()
 void Node::invalidate_style()
 {
 {
     for_each_in_inclusive_subtree_of_type<Element>([&](auto& element) {
     for_each_in_inclusive_subtree_of_type<Element>([&](auto& element) {

+ 3 - 0
Userland/Libraries/LibWeb/DOM/Node.h

@@ -111,6 +111,9 @@ public:
     String text_content() const;
     String text_content() const;
     void set_text_content(String const&);
     void set_text_content(String const&);
 
 
+    String node_value() const;
+    void set_node_value(String const&);
+
     Document& document() { return *m_document; }
     Document& document() { return *m_document; }
     const Document& document() const { return *m_document; }
     const Document& document() const { return *m_document; }
 
 

+ 1 - 0
Userland/Libraries/LibWeb/DOM/Node.idl

@@ -19,6 +19,7 @@ interface Node : EventTarget {
     readonly attribute Document? ownerDocument;
     readonly attribute Document? ownerDocument;
     Node getRootNode(optional GetRootNodeOptions options = {});
     Node getRootNode(optional GetRootNodeOptions options = {});
 
 
+    [CEReactions] attribute DOMString? nodeValue;
     // FIXME: [LegacyNullToEmptyString] is not allowed on nullable types as per the Web IDL spec.
     // FIXME: [LegacyNullToEmptyString] is not allowed on nullable types as per the Web IDL spec.
     //        However, we only apply it to setters, so this works as a stop gap.
     //        However, we only apply it to setters, so this works as a stop gap.
     //        Replace this with something like a special cased [LegacyNullToEmptyString].
     //        Replace this with something like a special cased [LegacyNullToEmptyString].