diff options
author | Andreas Kling <kling@serenityos.org> | 2020-05-24 21:59:24 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-05-24 23:54:22 +0200 |
commit | 128eaf929555a903abd407467b01ab228f876ae8 (patch) | |
tree | 2927c73b6ec846b76dda3719ba0aba367069ba6c /Libraries | |
parent | 6c409310a8615dfe8614386065d7e8975ac76499 (diff) | |
download | serenity-128eaf929555a903abd407467b01ab228f876ae8.zip |
LibWeb: Add some helpers to the DOM Node class
This patch adds the following things needed by the HTML spec:
- Node::child_text_content()
- Node::is_connected()
- Node::root()
Diffstat (limited to 'Libraries')
-rw-r--r-- | Libraries/LibWeb/DOM/Node.cpp | 26 | ||||
-rw-r--r-- | Libraries/LibWeb/DOM/Node.h | 5 |
2 files changed, 31 insertions, 0 deletions
diff --git a/Libraries/LibWeb/DOM/Node.cpp b/Libraries/LibWeb/DOM/Node.cpp index a7f1871322..778a1cf00c 100644 --- a/Libraries/LibWeb/DOM/Node.cpp +++ b/Libraries/LibWeb/DOM/Node.cpp @@ -155,4 +155,30 @@ void Node::dispatch_event(NonnullRefPtr<Event> event) parent()->dispatch_event(move(event)); } +String Node::child_text_content() const +{ + if (!is<ParentNode>(*this)) + return String::empty(); + + StringBuilder builder; + to<ParentNode>(*this).for_each_child([&](auto& child) { + if (is<Text>(child)) + builder.append(to<Text>(child).text_content()); + }); + return builder.build(); +} + +const Node* Node::root() const +{ + const Node* root = this; + while (root->parent()) + root = root->parent(); + return root; +} + +bool Node::is_connected() const +{ + return root() && root()->is_document(); +} + } diff --git a/Libraries/LibWeb/DOM/Node.h b/Libraries/LibWeb/DOM/Node.h index 479ec8960f..771a87f78d 100644 --- a/Libraries/LibWeb/DOM/Node.h +++ b/Libraries/LibWeb/DOM/Node.h @@ -94,8 +94,13 @@ public: const HTMLAnchorElement* enclosing_link_element() const; const HTMLElement* enclosing_html_element() const; + String child_text_content() const; + virtual bool is_html_element() const { return false; } + const Node* root() const; + bool is_connected() const; + template<typename T> const T* first_child_of_type() const; |