From 24b9d05ea82eae01059314511aef4a140ce3fedd Mon Sep 17 00:00:00 2001 From: Kemal Zebari Date: Fri, 1 Dec 2023 18:59:08 -0800 Subject: [PATCH] LibWeb/HTML: Implement text attribute in HTMLTitleElement --- Tests/LibWeb/Text/expected/title.txt | 22 +++++++++------- Tests/LibWeb/Text/input/title.html | 26 ++++++++++++------- .../LibWeb/HTML/HTMLTitleElement.cpp | 14 ++++++++++ .../Libraries/LibWeb/HTML/HTMLTitleElement.h | 3 +++ .../LibWeb/HTML/HTMLTitleElement.idl | 2 +- 5 files changed, 48 insertions(+), 19 deletions(-) diff --git a/Tests/LibWeb/Text/expected/title.txt b/Tests/LibWeb/Text/expected/title.txt index 1aa8cfe090..1be27b81b1 100644 --- a/Tests/LibWeb/Text/expected/title.txt +++ b/Tests/LibWeb/Text/expected/title.txt @@ -3,12 +3,16 @@ 2b: 1 2c: "This is a title!" 2d: "This is a title!" -3: "" -4a: 3 -4b: "" -4c: "" -4d: "" -4e: 3 -4f: "This is another title!" -4g: "" -4h: "" +3a: "This is a title!" +3b: "This is a title!" +3c: "Another title!" +3d: "Another title!" +4: "" +5a: 3 +5b: "" +5c: "" +5d: "" +5e: 3 +5f: "This is another title!" +5g: "" +5h: "" diff --git a/Tests/LibWeb/Text/input/title.html b/Tests/LibWeb/Text/input/title.html index 8af05865f5..b394665d85 100644 --- a/Tests/LibWeb/Text/input/title.html +++ b/Tests/LibWeb/Text/input/title.html @@ -15,9 +15,17 @@ println(`2c: "${titleElements[0].innerText}"`); println(`2d: "${document.title}"`); + // Getting and setting the title's text attribute. + println(`3a: "${titleElements[0].text}"`); + println(`3b: "${document.title}"`); + + titleElements[0].text = "Another title!"; + println(`3c: "${titleElements[0].text}"`); + println(`3d: "${document.title}"`); + // Removing the title element sets the title back to default. titleElements[0].remove(); - println(`3: "${document.title}"`); + println(`4: "${document.title}"`); // After adding several title elements to the body, setting the title updates the text // content of only the first title element. @@ -26,17 +34,17 @@ document.body.appendChild(document.createElement('title')); titleElements = document.getElementsByTagName('title'); - println(`4a: ${titleElements.length}`) - println(`4b: "${titleElements[0].innerText}"`); - println(`4c: "${titleElements[1].innerText}"`); - println(`4d: "${titleElements[2].innerText}"`); + println(`5a: ${titleElements.length}`) + println(`5b: "${titleElements[0].innerText}"`); + println(`5c: "${titleElements[1].innerText}"`); + println(`5d: "${titleElements[2].innerText}"`); document.title = 'This is another title!'; titleElements = document.getElementsByTagName('title'); - println(`4e: ${titleElements.length}`) - println(`4f: "${titleElements[0].innerText}"`); - println(`4g: "${titleElements[1].innerText}"`); - println(`4h: "${titleElements[2].innerText}"`); + println(`5e: ${titleElements.length}`) + println(`5f: "${titleElements[0].innerText}"`); + println(`5g: "${titleElements[1].innerText}"`); + println(`5h: "${titleElements[2].innerText}"`); }); diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTitleElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLTitleElement.cpp index 0cd2afe57f..b60caf47f0 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLTitleElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLTitleElement.cpp @@ -34,4 +34,18 @@ void HTMLTitleElement::children_changed() } } +// https://html.spec.whatwg.org/multipage/semantics.html#dom-title-text +DeprecatedString HTMLTitleElement::text() +{ + // The text attribute's getter must return this title element's child text content. + return child_text_content(); +} + +// https://html.spec.whatwg.org/multipage/semantics.html#dom-title-text +void HTMLTitleElement::set_text(String const& value) +{ + // The text attribute's setter must string replace all with the given value within this title element. + string_replace_all(value.to_deprecated_string()); +} + } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTitleElement.h b/Userland/Libraries/LibWeb/HTML/HTMLTitleElement.h index b0c4dc42dc..a42bc29516 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLTitleElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLTitleElement.h @@ -17,6 +17,9 @@ class HTMLTitleElement final : public HTMLElement { public: virtual ~HTMLTitleElement() override; + DeprecatedString text(); + void set_text(String const& value); + private: HTMLTitleElement(DOM::Document&, DOM::QualifiedName); diff --git a/Userland/Libraries/LibWeb/HTML/HTMLTitleElement.idl b/Userland/Libraries/LibWeb/HTML/HTMLTitleElement.idl index 2b6030a869..d7b296491f 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLTitleElement.idl +++ b/Userland/Libraries/LibWeb/HTML/HTMLTitleElement.idl @@ -6,6 +6,6 @@ interface HTMLTitleElement : HTMLElement { [HTMLConstructor] constructor(); - // FIXME: [CEReactions] attribute DOMString text; + [CEReactions] attribute DOMString text; };