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;
 }

Reply via email to