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;