diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.cpp b/Userland/Libraries/LibWeb/HTML/Navigable.cpp index c6cd1efcff..e1a464592e 100644 --- a/Userland/Libraries/LibWeb/HTML/Navigable.cpp +++ b/Userland/Libraries/LibWeb/HTML/Navigable.cpp @@ -9,6 +9,7 @@ #include #include #include +#include namespace Web::HTML { @@ -80,4 +81,18 @@ void Navigable::set_container(JS::GCPtr container) m_container = container; } +// https://html.spec.whatwg.org/multipage/document-sequences.html#nav-traversable +JS::GCPtr Navigable::traversable_navigable() +{ + // 1. Let navigable be inputNavigable. + auto navigable = this; + + // 2. While navigable is not a traversable navigable, set navigable to navigable's parent. + while (navigable && !is(*navigable)) + navigable = navigable->parent(); + + // 3. Return navigable. + return static_cast(navigable); +} + } diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.h b/Userland/Libraries/LibWeb/HTML/Navigable.h index e96fe5db0d..553ae256e0 100644 --- a/Userland/Libraries/LibWeb/HTML/Navigable.h +++ b/Userland/Libraries/LibWeb/HTML/Navigable.h @@ -40,6 +40,8 @@ public: JS::GCPtr container() const; void set_container(JS::GCPtr); + JS::GCPtr traversable_navigable(); + protected: Navigable();