This is an automated email from the ASF dual-hosted git repository.

gerben pushed a commit to branch import-dom-seek
in repository https://gitbox.apache.org/repos/asf/incubator-annotator.git

commit 610ba79c9aa3e91e4217ef7e8a56bfba19da34de
Author: Gerben <[email protected]>
AuthorDate: Mon Nov 16 23:13:59 2020 +0100

    Factor out chunkRangeToRange
---
 packages/dom/src/chunker.ts             | 15 +++++++++++++++
 packages/dom/src/text-position/match.ts |  6 +-----
 packages/dom/src/text-quote/match.ts    |  9 +--------
 3 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/packages/dom/src/chunker.ts b/packages/dom/src/chunker.ts
index 78b8646..f671b5e 100644
--- a/packages/dom/src/chunker.ts
+++ b/packages/dom/src/chunker.ts
@@ -116,6 +116,21 @@ export class TextNodeChunker implements 
Chunker<PartialTextNode> {
     return { startChunk, startIndex, endChunk, endIndex };
   }
 
+  chunkRangeToRange(chunkRange: ChunkRange<PartialTextNode>): Range {
+    const range = ownerDocument(this.scope).createRange();
+    // The `+…startOffset` parts are only relevant for the first chunk, as it
+    // might start within a text node.
+    range.setStart(
+      chunkRange.startChunk.node,
+      chunkRange.startIndex + chunkRange.startChunk.startOffset,
+    );
+    range.setEnd(
+      chunkRange.endChunk.node,
+      chunkRange.endIndex + chunkRange.endChunk.startOffset,
+    );
+    return range;
+  }
+
   constructor(private scope: Range) {
     this.iter = ownerDocument(scope).createNodeIterator(
       scope.commonAncestorContainer,
diff --git a/packages/dom/src/text-position/match.ts 
b/packages/dom/src/text-position/match.ts
index 985e278..aa5fe49 100644
--- a/packages/dom/src/text-position/match.ts
+++ b/packages/dom/src/text-position/match.ts
@@ -19,7 +19,6 @@
  */
 
 import type { Matcher, TextPositionSelector } from '@annotator/selector';
-import { ownerDocument } from '../owner-document';
 import { TextSeeker, NonEmptyChunker } from '../seek';
 import { CodePointSeeker } from '../code-point-seeker';
 import { Chunk, ChunkRange, TextNodeChunker, PartialTextNode } from 
'../chunker';
@@ -39,10 +38,7 @@ export function createTextPositionSelectorMatcher(
     const matches = abstractMatcher(textChunks as 
NonEmptyChunker<PartialTextNode>);
 
     for await (const abstractMatch of matches) {
-      const match = ownerDocument(scope).createRange();
-      match.setStart(abstractMatch.startChunk.node, 
abstractMatch.startChunk.startOffset + abstractMatch.startIndex);
-      match.setEnd(abstractMatch.endChunk.node, 
abstractMatch.endChunk.startOffset + abstractMatch.endIndex);
-      yield match;
+      yield textChunks.chunkRangeToRange(abstractMatch);
     }
   };
 }
diff --git a/packages/dom/src/text-quote/match.ts 
b/packages/dom/src/text-quote/match.ts
index f7c8da3..37a75ba 100644
--- a/packages/dom/src/text-quote/match.ts
+++ b/packages/dom/src/text-quote/match.ts
@@ -32,14 +32,7 @@ export function createTextQuoteSelectorMatcher(
     const textChunks = new TextNodeChunker(scope);
 
     for await (const abstractMatch of abstractMatcher(textChunks)) {
-      const match = document.createRange();
-      // The `+…startOffset` parts are only relevant for the first chunk, as it
-      // might start within a text node.
-      match.setStart(abstractMatch.startChunk.node,
-        abstractMatch.startIndex + abstractMatch.startChunk.startOffset);
-      match.setEnd(abstractMatch.endChunk.node,
-        abstractMatch.endIndex + abstractMatch.endChunk.startOffset);
-      yield match;
+      yield textChunks.chunkRangeToRange(abstractMatch);
     }
   }
 }

Reply via email to