From 089a98607c8f94568ca22617a139a8d3bd7f35c0 Mon Sep 17 00:00:00 2001 From: Bastiaan van der Plaat Date: Tue, 20 Feb 2024 17:06:36 +0100 Subject: [PATCH] LibWeb: Add HTMLPreElement width property --- Tests/LibWeb/Text/expected/HTML/pre-width.txt | 3 ++ Tests/LibWeb/Text/input/HTML/pre-width.html | 29 +++++++++++++++++++ .../Libraries/LibWeb/HTML/HTMLPreElement.cpp | 17 +++++++++++ .../Libraries/LibWeb/HTML/HTMLPreElement.h | 4 +++ .../Libraries/LibWeb/HTML/HTMLPreElement.idl | 2 +- 5 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 Tests/LibWeb/Text/expected/HTML/pre-width.txt create mode 100644 Tests/LibWeb/Text/input/HTML/pre-width.html diff --git a/Tests/LibWeb/Text/expected/HTML/pre-width.txt b/Tests/LibWeb/Text/expected/HTML/pre-width.txt new file mode 100644 index 0000000000..4f893904a9 --- /dev/null +++ b/Tests/LibWeb/Text/expected/HTML/pre-width.txt @@ -0,0 +1,3 @@ +1. 20 +2. 0 +3. 0 diff --git a/Tests/LibWeb/Text/input/HTML/pre-width.html b/Tests/LibWeb/Text/input/HTML/pre-width.html new file mode 100644 index 0000000000..e2598da8cf --- /dev/null +++ b/Tests/LibWeb/Text/input/HTML/pre-width.html @@ -0,0 +1,29 @@ + + diff --git a/Userland/Libraries/LibWeb/HTML/HTMLPreElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLPreElement.cpp index c757acee3e..ee2c2e7cf8 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLPreElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLPreElement.cpp @@ -8,6 +8,7 @@ #include #include #include +#include namespace Web::HTML { @@ -36,4 +37,20 @@ void HTMLPreElement::apply_presentational_hints(CSS::StyleProperties& style) con }); } +// https://html.spec.whatwg.org/multipage/obsolete.html#dom-pre-width +WebIDL::Long HTMLPreElement::width() const +{ + // The width IDL attribute of the pre element must reflect the content attribute of the same name. + if (auto width_string = get_attribute(HTML::AttributeNames::width); width_string.has_value()) { + if (auto width = parse_integer(*width_string); width.has_value()) + return *width; + } + return 0; +} + +WebIDL::ExceptionOr HTMLPreElement::set_width(WebIDL::Long width) +{ + return set_attribute(HTML::AttributeNames::width, MUST(String::number(width))); +} + } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLPreElement.h b/Userland/Libraries/LibWeb/HTML/HTMLPreElement.h index 97ae40f888..8d07a56b89 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLPreElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLPreElement.h @@ -8,6 +8,7 @@ #include #include +#include namespace Web::HTML { @@ -21,6 +22,9 @@ public: // https://www.w3.org/TR/html-aria/#el-pre virtual Optional default_role() const override { return ARIA::Role::generic; } + WebIDL::Long width() const; + WebIDL::ExceptionOr set_width(WebIDL::Long); + private: HTMLPreElement(DOM::Document&, DOM::QualifiedName); diff --git a/Userland/Libraries/LibWeb/HTML/HTMLPreElement.idl b/Userland/Libraries/LibWeb/HTML/HTMLPreElement.idl index c59ad960dc..774c6362e9 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLPreElement.idl +++ b/Userland/Libraries/LibWeb/HTML/HTMLPreElement.idl @@ -7,6 +7,6 @@ interface HTMLPreElement : HTMLElement { [HTMLConstructor] constructor(); // Obsolete - // FIXME: [CEReactions, Reflect] attribute long width; + [CEReactions] attribute long width; };