mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-01-04 07:36:50 +00:00
LibWeb: Implement IntersectionObserver "intersection roots" per spec
In particular, get the implicit root correctly for intersection observers that don't have an explicit root specified. This makes it possible to load the Terminal app on https://puter.com/
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#include <LibWeb/HTML/TraversableNavigable.h>
|
||||
#include <LibWeb/HTML/Window.h>
|
||||
#include <LibWeb/IntersectionObserver/IntersectionObserver.h>
|
||||
#include <LibWeb/Page/Page.h>
|
||||
|
||||
namespace Web::IntersectionObserver {
|
||||
|
||||
@@ -156,11 +157,16 @@ Variant<JS::Handle<DOM::Element>, JS::Handle<DOM::Document>, Empty> Intersection
|
||||
return m_root.value();
|
||||
}
|
||||
|
||||
// https://www.w3.org/TR/intersection-observer/#intersectionobserver-intersection-root
|
||||
Variant<JS::Handle<DOM::Element>, JS::Handle<DOM::Document>> IntersectionObserver::intersection_root() const
|
||||
{
|
||||
if (!m_root.has_value())
|
||||
return JS::make_handle(global_object().navigable()->traversable_navigable()->active_document());
|
||||
return m_root.value();
|
||||
// The intersection root for an IntersectionObserver is the value of its root attribute
|
||||
// if the attribute is non-null;
|
||||
if (m_root.has_value())
|
||||
return m_root.value();
|
||||
|
||||
// otherwise, it is the top-level browsing context’s document node, referred to as the implicit root.
|
||||
return JS::make_handle(global_object().page().top_level_browsing_context().active_document());
|
||||
}
|
||||
|
||||
// https://www.w3.org/TR/intersection-observer/#intersectionobserver-root-intersection-rectangle
|
||||
|
||||
Reference in New Issue
Block a user