mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-12 14:12:52 +00:00
LibWeb: Implement Range.comparePoint
This commit is contained in:
parent
62b76e0658
commit
ad5fb1fd7e
Notes:
sideshowbarker
2024-07-17 18:14:07 +09:00
Author: https://github.com/Lubrsi
Commit: ad5fb1fd7e
Pull-request: https://github.com/SerenityOS/serenity/pull/12774
3 changed files with 31 additions and 0 deletions
|
@ -473,4 +473,33 @@ ExceptionOr<bool> Range::is_point_in_range(Node const& node, u32 offset) const
|
|||
return true;
|
||||
}
|
||||
|
||||
// https://dom.spec.whatwg.org/#dom-range-comparepoint
|
||||
ExceptionOr<i16> Range::compare_point(Node const& node, u32 offset) const
|
||||
{
|
||||
// 1. If node’s root is different from this’s root, then throw a "WrongDocumentError" DOMException.
|
||||
if (&node.root() != &root())
|
||||
return WrongDocumentError::create("Given node is not in the same document as the range.");
|
||||
|
||||
// 2. If node is a doctype, then throw an "InvalidNodeTypeError" DOMException.
|
||||
if (is<DocumentType>(node))
|
||||
return InvalidNodeTypeError::create("Node cannot be a DocumentType.");
|
||||
|
||||
// 3. If offset is greater than node’s length, then throw an "IndexSizeError" DOMException.
|
||||
if (offset > node.length())
|
||||
return IndexSizeError::create(String::formatted("Node does not contain a child at offset {}", offset));
|
||||
|
||||
// 4. If (node, offset) is before start, return −1.
|
||||
auto relative_position_to_start = position_of_boundary_point_relative_to_other_boundary_point(node, offset, m_start_container, m_start_offset);
|
||||
if (relative_position_to_start == RelativeBoundaryPointPosition::Before)
|
||||
return -1;
|
||||
|
||||
// 5. If (node, offset) is after end, return 1.
|
||||
auto relative_position_to_end = position_of_boundary_point_relative_to_other_boundary_point(node, offset, m_end_container, m_end_offset);
|
||||
if (relative_position_to_end == RelativeBoundaryPointPosition::After)
|
||||
return 1;
|
||||
|
||||
// 6. Return 0.
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue