From 07c72f65d9037dc3292a9d4e829a2007c84c103a Mon Sep 17 00:00:00 2001 From: iska Date: Sun, 8 Jan 2017 08:07:47 +0100 Subject: [PATCH] Add HTML Range methods for contained nodes --- Sources/HTMLRange.m | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Sources/HTMLRange.m b/Sources/HTMLRange.m index 1617584..15f30c7 100644 --- a/Sources/HTMLRange.m +++ b/Sources/HTMLRange.m @@ -273,6 +273,34 @@ NS_INLINE NSComparisonResult CompareBoundaries(HTMLNode *startNode, NSUInteger s return NO; } +- (BOOL)containsNode:(HTMLNode *)node +{ + return CompareBoundaries(_startContainer, _startOffset, node, 0) == NSOrderedAscending && + CompareBoundaries(_endContainer, _endOffset, node, node.length) == NSOrderedDescending; +} + +- (BOOL)partiallyContainsNode:(HTMLNode *)node +{ + return [GetAncestorNodes(_startContainer) containsObject:node] || [GetAncestorNodes(_endContainer) containsObject:node]; +} + +- (NSArray *)containedNodes +{ + HTMLNode *commonAncestor = self.commonAncestorContainer; + + NSMutableArray *containedNodes = [NSMutableArray array]; + [commonAncestor.childNodes enumerateObjectsUsingBlock:^(HTMLNode * _Nonnull node, NSUInteger idx, BOOL * _Nonnull stop) { + if (node.nodeType == HTMLNodeDocumentType) { + [NSException raise:HTMLKitHierarchyRequestError format:@"Hierarchy Request Error, encountered a DOCTYPE contained in range: %@", self]; + } + if ([self containsNode:node]) { + [containedNodes addObject:node]; + } + }]; + + return containedNodes; +} + #pragma mark - Update Callbacks - (void)didRemoveCharacterDataInNode:(HTMLCharacterData *)node atOffset:(NSUInteger)offset withLength:(NSUInteger)length