From 71819153cb9c97b858c74a36bcfd24dede210a02 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sat, 4 May 2024 14:11:16 +1200 Subject: [PATCH] LibWeb: Implement Element::scroll(HTML::ScrollToOptions) --- .../Text/expected/element-scrollby-event.txt | 7 ++++ .../Text/input/element-scrollby-event.html | 36 +++++++++++++++++++ Userland/Libraries/LibWeb/DOM/Element.cpp | 12 +++++-- Userland/Libraries/LibWeb/DOM/Element.h | 2 +- 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 Tests/LibWeb/Text/expected/element-scrollby-event.txt create mode 100644 Tests/LibWeb/Text/input/element-scrollby-event.html diff --git a/Tests/LibWeb/Text/expected/element-scrollby-event.txt b/Tests/LibWeb/Text/expected/element-scrollby-event.txt new file mode 100644 index 00000000000..c85997941d1 --- /dev/null +++ b/Tests/LibWeb/Text/expected/element-scrollby-event.txt @@ -0,0 +1,7 @@ + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed + cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis + ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum + lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per + inceptos himenaeos. + scroll event fired y=151 x=25 diff --git a/Tests/LibWeb/Text/input/element-scrollby-event.html b/Tests/LibWeb/Text/input/element-scrollby-event.html new file mode 100644 index 00000000000..1c0019e63f6 --- /dev/null +++ b/Tests/LibWeb/Text/input/element-scrollby-event.html @@ -0,0 +1,36 @@ + + + +
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed + cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis + ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum + lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per + inceptos himenaeos. +
+ diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp index b4bccb20116..407f49acc8a 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.cpp +++ b/Userland/Libraries/LibWeb/DOM/Element.cpp @@ -2201,9 +2201,17 @@ void Element::scroll(double x, double y) } // https://drafts.csswg.org/cssom-view/#dom-element-scroll -void Element::scroll(HTML::ScrollToOptions const&) +void Element::scroll(HTML::ScrollToOptions options) { - dbgln("FIXME: Implement Element::scroll(ScrollToOptions)"); + // 1. If invoked with one argument, follow these substeps: + // 1. Let options be the argument. + // 2. Normalize non-finite values for left and top dictionary members of options, if present. + // 3. Let x be the value of the left dictionary member of options, if present, or the element’s current scroll position on the x axis otherwise. + // 4. Let y be the value of the top dictionary member of options, if present, or the element’s current scroll position on the y axis otherwise. + // NOTE: remaining steps performed by Element::scroll(double x, double y) + auto x = options.left.has_value() ? HTML::normalize_non_finite_values(options.left.value()) : scroll_left(); + auto y = options.top.has_value() ? HTML::normalize_non_finite_values(options.top.value()) : scroll_top(); + scroll(x, y); } // https://drafts.csswg.org/cssom-view/#dom-element-scrollby diff --git a/Userland/Libraries/LibWeb/DOM/Element.h b/Userland/Libraries/LibWeb/DOM/Element.h index b1b9a00b343..8f2b56edf3e 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.h +++ b/Userland/Libraries/LibWeb/DOM/Element.h @@ -335,7 +335,7 @@ public: void set_custom_element_state(CustomElementState value) { m_custom_element_state = value; } void setup_custom_element_from_constructor(HTML::CustomElementDefinition& custom_element_definition, Optional const& is_value); - void scroll(HTML::ScrollToOptions const&); + void scroll(HTML::ScrollToOptions); void scroll(double x, double y); void scroll_by(HTML::ScrollToOptions); void scroll_by(double x, double y);