mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 08:08:12 +00:00
LibHTML: Add Node::first_ancestor_of_type<T>()
Here's another helper for finding the first ancestor of a Node of a specific type.
This commit is contained in:
parent
03725c6135
commit
a239ef34d5
2 changed files with 15 additions and 6 deletions
|
@ -56,16 +56,12 @@ RefPtr<LayoutNode> Node::create_layout_tree(const StyleResolver& resolver, const
|
||||||
|
|
||||||
const HTMLAnchorElement* Node::enclosing_link_element() const
|
const HTMLAnchorElement* Node::enclosing_link_element() const
|
||||||
{
|
{
|
||||||
if (is<HTMLAnchorElement>(*this))
|
return first_ancestor_of_type<HTMLAnchorElement>();
|
||||||
return static_cast<const HTMLAnchorElement*>(this);
|
|
||||||
return parent() ? parent()->enclosing_link_element() : nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const HTMLElement* Node::enclosing_html_element() const
|
const HTMLElement* Node::enclosing_html_element() const
|
||||||
{
|
{
|
||||||
if (is_html_element())
|
return first_ancestor_of_type<HTMLElement>();
|
||||||
return static_cast<const HTMLElement*>(this);
|
|
||||||
return parent() ? parent()->enclosing_html_element() : nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String Node::text_content() const
|
String Node::text_content() const
|
||||||
|
|
|
@ -50,6 +50,9 @@ public:
|
||||||
template<typename T>
|
template<typename T>
|
||||||
const T* first_child_of_type() const;
|
const T* first_child_of_type() const;
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
const T* first_ancestor_of_type() const;
|
||||||
|
|
||||||
virtual void inserted_into(Node&) {}
|
virtual void inserted_into(Node&) {}
|
||||||
virtual void removed_from(Node&) {}
|
virtual void removed_from(Node&) {}
|
||||||
|
|
||||||
|
@ -130,3 +133,13 @@ inline const T* Node::first_child_of_type() const
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
inline const T* Node::first_ancestor_of_type() const
|
||||||
|
{
|
||||||
|
for (auto* ancestor = parent(); ancestor; ancestor = ancestor->parent()) {
|
||||||
|
if (is<T>(*ancestor))
|
||||||
|
return to<T>(ancestor);
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue