This is an automated email from the ASF dual-hosted git repository. gerben pushed a commit to branch dom-tests in repository https://gitbox.apache.org/repos/asf/incubator-annotator.git
commit e3efb3b9aefd82c55a01fd5cf8810b2f35207c01 Author: Gerben <[email protected]> AuthorDate: Fri May 22 19:34:20 2020 +0200 Remove superfluous seek, tidy up code --- packages/dom/src/text-quote/match.ts | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/packages/dom/src/text-quote/match.ts b/packages/dom/src/text-quote/match.ts index 3104ad3..7e869f0 100644 --- a/packages/dom/src/text-quote/match.ts +++ b/packages/dom/src/text-quote/match.ts @@ -27,9 +27,8 @@ import { ownerDocument, rangeFromScope } from '../scope'; export function createTextQuoteSelectorMatcher(selector: TextQuoteSelector): DomMatcher { return async function* matchAll(scope: DomScope) { const document = ownerDocument(scope); - const range = rangeFromScope(scope); - const root = range.commonAncestorContainer; - const text = range.toString(); + const scopeAsRange = rangeFromScope(scope); + const fullText = scopeAsRange.toString(); const exact = selector.exact; const prefix = selector.prefix || ''; @@ -37,27 +36,26 @@ export function createTextQuoteSelectorMatcher(selector: TextQuoteSelector): Dom const pattern = prefix + exact + suffix; const iter = document.createNodeIterator( - root, + scopeAsRange.commonAncestorContainer, NodeFilter.SHOW_TEXT, { acceptNode(node: Text) { // Only reveal nodes within the range; and skip any empty text nodes. - return range.intersectsNode(node) && node.length > 0 + return scopeAsRange.intersectsNode(node) && node.length > 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT }, }, ); - let fromIndex = 0; - let referenceNodeIndex = 0; - - if (isTextNode(range.startContainer)) { - referenceNodeIndex -= range.startOffset; - } + // The index of the first character of iter.referenceNode inside the text. + let referenceNodeIndex = isTextNode(scopeAsRange.startContainer) + ? -scopeAsRange.startOffset + : 0; - while (fromIndex < text.length) { - const patternStartIndex = text.indexOf(pattern, fromIndex); + let fromIndex = 0; + while (fromIndex < fullText.length) { + const patternStartIndex = fullText.indexOf(pattern, fromIndex); if (patternStartIndex === -1) return; const match = document.createRange(); @@ -82,11 +80,10 @@ export function createTextQuoteSelectorMatcher(selector: TextQuoteSelector): Dom // Advance the search forward. fromIndex = matchStartIndex + 1; - referenceNodeIndex += seek(iter, fromIndex - referenceNodeIndex); } }; } function isTextNode(node: Node): node is Text { - return node.nodeType === Node.TEXT_NODE + return node.nodeType === Node.TEXT_NODE; }
