mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 11:37:34 +00:00
LibWeb: Add initial implementation of IntersectionObserver
The main missing features are rootMargin, proper nested browsing context support and content clip/clip-path support. This makes images appear on some sites, such as YouTube and howstuffworks.com.
This commit is contained in:
parent
6f8afd8cd9
commit
165abafb80
16 changed files with 664 additions and 22 deletions
|
@ -488,6 +488,11 @@ public:
|
|||
HTML::ListOfAvailableImages& list_of_available_images();
|
||||
HTML::ListOfAvailableImages const& list_of_available_images() const;
|
||||
|
||||
void register_intersection_observer(Badge<IntersectionObserver::IntersectionObserver>, IntersectionObserver::IntersectionObserver&);
|
||||
void unregister_intersection_observer(Badge<IntersectionObserver::IntersectionObserver>, IntersectionObserver::IntersectionObserver&);
|
||||
|
||||
void run_the_update_intersection_observations_steps(HighResolutionTime::DOMHighResTimeStamp time);
|
||||
|
||||
protected:
|
||||
virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
|
||||
virtual void visit_edges(Cell::Visitor&) override;
|
||||
|
@ -504,6 +509,9 @@ private:
|
|||
|
||||
WebIDL::ExceptionOr<void> run_the_document_write_steps(DeprecatedString);
|
||||
|
||||
void queue_intersection_observer_task();
|
||||
void queue_an_intersection_observer_entry(IntersectionObserver::IntersectionObserver&, HighResolutionTime::DOMHighResTimeStamp time, JS::NonnullGCPtr<Geometry::DOMRectReadOnly> root_bounds, JS::NonnullGCPtr<Geometry::DOMRectReadOnly> bounding_client_rect, JS::NonnullGCPtr<Geometry::DOMRectReadOnly> intersection_rect, bool is_intersecting, double intersection_ratio, JS::NonnullGCPtr<Element> target);
|
||||
|
||||
OwnPtr<CSS::StyleComputer> m_style_computer;
|
||||
JS::GCPtr<CSS::StyleSheetList> m_style_sheets;
|
||||
JS::GCPtr<Node> m_hovered_node;
|
||||
|
@ -655,6 +663,13 @@ private:
|
|||
|
||||
// https://html.spec.whatwg.org/multipage/images.html#list-of-available-images
|
||||
OwnPtr<HTML::ListOfAvailableImages> m_list_of_available_images;
|
||||
|
||||
// NOTE: Not in the spec per say, but Document must be able to access all IntersectionObservers whose root is in the document.
|
||||
OrderedHashTable<JS::NonnullGCPtr<IntersectionObserver::IntersectionObserver>> m_intersection_observers;
|
||||
|
||||
// https://www.w3.org/TR/intersection-observer/#document-intersectionobservertaskqueued
|
||||
// Each document has an IntersectionObserverTaskQueued flag which is initialized to false.
|
||||
bool m_intersection_observer_task_queued { false };
|
||||
};
|
||||
|
||||
template<>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue