summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/DOM/CharacterData.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibWeb/DOM/CharacterData.cpp')
-rw-r--r--Userland/Libraries/LibWeb/DOM/CharacterData.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/DOM/CharacterData.cpp b/Userland/Libraries/LibWeb/DOM/CharacterData.cpp
index 61016446af..fd08c3cc96 100644
--- a/Userland/Libraries/LibWeb/DOM/CharacterData.cpp
+++ b/Userland/Libraries/LibWeb/DOM/CharacterData.cpp
@@ -26,4 +26,23 @@ void CharacterData::set_data(String data)
document().set_needs_layout();
}
+// https://dom.spec.whatwg.org/#concept-cd-substring
+ExceptionOr<String> CharacterData::substring_data(size_t offset, size_t count) const
+{
+ // 1. Let length be node’s length.
+ auto length = this->length();
+
+ // 2. If offset is greater than length, then throw an "IndexSizeError" DOMException.
+ if (offset > length)
+ return DOM::IndexSizeError::create("Substring offset out of range.");
+
+ // 3. If offset plus count is greater than length, return a string whose value is the code units from the offsetth code unit
+ // to the end of node’s data, and then return.
+ if (offset + count > length)
+ return m_data.substring(offset);
+
+ // 4. Return a string whose value is the code units from the offsetth code unit to the offset+countth code unit in node’s data.
+ return m_data.substring(offset, count);
+}
+
}