From ee719870c84c90769c831ef3a8678aa72a219947 Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Mon, 11 Jul 2022 16:23:50 +0100 Subject: [PATCH] LibWeb: Implement CharacterData.{append,insert,delete}Data --- .../Libraries/LibWeb/DOM/CharacterData.cpp | 21 +++++++++++++++++++ Userland/Libraries/LibWeb/DOM/CharacterData.h | 3 +++ .../Libraries/LibWeb/DOM/CharacterData.idl | 3 +++ 3 files changed, 27 insertions(+) diff --git a/Userland/Libraries/LibWeb/DOM/CharacterData.cpp b/Userland/Libraries/LibWeb/DOM/CharacterData.cpp index 13ba46eacb8..aaf5e79e6f7 100644 --- a/Userland/Libraries/LibWeb/DOM/CharacterData.cpp +++ b/Userland/Libraries/LibWeb/DOM/CharacterData.cpp @@ -103,4 +103,25 @@ ExceptionOr CharacterData::replace_data(size_t offset, size_t count, Strin return {}; } +// https://dom.spec.whatwg.org/#dom-characterdata-appenddata +ExceptionOr CharacterData::append_data(String const& data) +{ + // The appendData(data) method steps are to replace data with node this, offset this’s length, count 0, and data data. + return replace_data(m_data.length(), 0, data); +} + +// https://dom.spec.whatwg.org/#dom-characterdata-insertdata +ExceptionOr CharacterData::insert_data(size_t offset, String const& data) +{ + // The insertData(offset, data) method steps are to replace data with node this, offset offset, count 0, and data data. + return replace_data(offset, 0, data); +} + +// https://dom.spec.whatwg.org/#dom-characterdata-deletedata +ExceptionOr CharacterData::delete_data(size_t offset, size_t count) +{ + // The deleteData(offset, count) method steps are to replace data with node this, offset offset, count count, and data the empty string. + return replace_data(offset, count, String::empty()); +} + } diff --git a/Userland/Libraries/LibWeb/DOM/CharacterData.h b/Userland/Libraries/LibWeb/DOM/CharacterData.h index d72d5bdfc4b..5765ee3f3da 100644 --- a/Userland/Libraries/LibWeb/DOM/CharacterData.h +++ b/Userland/Libraries/LibWeb/DOM/CharacterData.h @@ -28,6 +28,9 @@ public: unsigned length() const { return m_data.length(); } ExceptionOr substring_data(size_t offset, size_t count) const; + ExceptionOr append_data(String const&); + ExceptionOr insert_data(size_t offset, String const&); + ExceptionOr delete_data(size_t offset, size_t count); ExceptionOr replace_data(size_t offset, size_t count, String const&); protected: diff --git a/Userland/Libraries/LibWeb/DOM/CharacterData.idl b/Userland/Libraries/LibWeb/DOM/CharacterData.idl index 15b7af0825e..856f9c16a37 100644 --- a/Userland/Libraries/LibWeb/DOM/CharacterData.idl +++ b/Userland/Libraries/LibWeb/DOM/CharacterData.idl @@ -7,6 +7,9 @@ interface CharacterData : Node { readonly attribute unsigned long length; DOMString substringData(unsigned long offset, unsigned long count); + undefined appendData(DOMString data); + undefined insertData(unsigned long offset, DOMString data); + undefined deleteData(unsigned long offset, unsigned long count); undefined replaceData(unsigned long offset, unsigned long count, DOMString data); readonly attribute Element? nextElementSibling;