瀏覽代碼

LibWeb: Add CharacterData.substringData(offset, count)

Andreas Kling 3 年之前
父節點
當前提交
e50c7de1b2

+ 19 - 0
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);
+}
+
 }

+ 2 - 0
Userland/Libraries/LibWeb/DOM/CharacterData.h

@@ -27,6 +27,8 @@ public:
 
     unsigned length() const { return m_data.length(); }
 
+    ExceptionOr<String> substring_data(size_t offset, size_t count) const;
+
 protected:
     explicit CharacterData(Document&, NodeType, const String&);
 

+ 2 - 0
Userland/Libraries/LibWeb/DOM/CharacterData.idl

@@ -6,6 +6,8 @@ interface CharacterData : Node {
     [LegacyNullToEmptyString] attribute DOMString data;
     readonly attribute unsigned long length;
 
+    DOMString substringData(unsigned long offset, unsigned long count);
+
     readonly attribute Element? nextElementSibling;
     readonly attribute Element? previousElementSibling;