diff --git a/Userland/Libraries/LibWeb/HTML/AttributeNames.h b/Userland/Libraries/LibWeb/HTML/AttributeNames.h index fadf5ff90d..d0f4fba2dc 100644 --- a/Userland/Libraries/LibWeb/HTML/AttributeNames.h +++ b/Userland/Libraries/LibWeb/HTML/AttributeNames.h @@ -224,6 +224,7 @@ namespace AttributeNames { __ENUMERATE_HTML_ATTRIBUTE(rowspan) \ __ENUMERATE_HTML_ATTRIBUTE(rules) \ __ENUMERATE_HTML_ATTRIBUTE(scheme) \ + __ENUMERATE_HTML_ATTRIBUTE(scrollamount) \ __ENUMERATE_HTML_ATTRIBUTE(scrolling) \ __ENUMERATE_HTML_ATTRIBUTE(selected) \ __ENUMERATE_HTML_ATTRIBUTE(shadowrootclonable) \ diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMarqueeElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLMarqueeElement.cpp index ce6498875d..45aff94189 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLMarqueeElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLMarqueeElement.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2020, the SerenityOS developers. + * Copyright (c) 2024, Jamie Mansfield * * SPDX-License-Identifier: BSD-2-Clause */ @@ -9,6 +10,7 @@ #include #include #include +#include #include namespace Web::HTML { @@ -41,4 +43,21 @@ void HTMLMarqueeElement::apply_presentational_hints(CSS::StyleProperties& style) }); } +// https://html.spec.whatwg.org/multipage/obsolete.html#dom-marquee-scrollamount +WebIDL::UnsignedLong HTMLMarqueeElement::scroll_amount() +{ + // The scrollAmount IDL attribute must reflect the scrollamount content attribute. The default value is 6. + if (auto scroll_amount_string = get_attribute(HTML::AttributeNames::scrollamount); scroll_amount_string.has_value()) { + if (auto scroll_amount = parse_non_negative_integer(*scroll_amount_string); scroll_amount.has_value()) + return *scroll_amount; + } + return 6; +} + +// https://html.spec.whatwg.org/multipage/obsolete.html#dom-marquee-scrollamount +WebIDL::ExceptionOr HTMLMarqueeElement::set_scroll_amount(WebIDL::UnsignedLong value) +{ + return set_attribute(HTML::AttributeNames::scrollamount, MUST(String::number(value))); +} + } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMarqueeElement.h b/Userland/Libraries/LibWeb/HTML/HTMLMarqueeElement.h index 343f5e1621..79e83e8745 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLMarqueeElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLMarqueeElement.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2020, the SerenityOS developers. + * Copyright (c) 2024, Jamie Mansfield * * SPDX-License-Identifier: BSD-2-Clause */ @@ -7,6 +8,7 @@ #pragma once #include +#include namespace Web::HTML { @@ -18,6 +20,9 @@ class HTMLMarqueeElement final : public HTMLElement { public: virtual ~HTMLMarqueeElement() override; + WebIDL::UnsignedLong scroll_amount(); + WebIDL::ExceptionOr set_scroll_amount(WebIDL::UnsignedLong); + private: HTMLMarqueeElement(DOM::Document&, DOM::QualifiedName); diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMarqueeElement.idl b/Userland/Libraries/LibWeb/HTML/HTMLMarqueeElement.idl index eb84d9ffcd..96bcaf51dd 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLMarqueeElement.idl +++ b/Userland/Libraries/LibWeb/HTML/HTMLMarqueeElement.idl @@ -12,7 +12,7 @@ interface HTMLMarqueeElement : HTMLElement { [CEReactions, Reflect] attribute DOMString height; [CEReactions, Reflect] attribute unsigned long hspace; [FIXME, CEReactions] attribute long loop; - [FIXME, CEReactions] attribute unsigned long scrollAmount; + [CEReactions] attribute unsigned long scrollAmount; [FIXME, CEReactions] attribute unsigned long scrollDelay; [FIXME, CEReactions] attribute boolean trueSpeed; [CEReactions, Reflect] attribute unsigned long vspace;