|
1 | 1 | import { Origin, type User } from '@annotorious/core'; |
2 | 2 | import { v4 as uuidv4 } from 'uuid'; |
3 | 3 | import type { TextAnnotatorState } from './state'; |
4 | | -import type { TextSelector, TextAnnotationTarget, TextQuoteSelector } from './model'; |
| 4 | +import type { TextSelector, TextAnnotationTarget } from './model'; |
5 | 5 | import { trimRange } from './utils'; |
6 | 6 |
|
7 | | -const rangeToQuoteSelector = (range: Range): TextQuoteSelector => { |
8 | | - const { startContainer, startOffset, endContainer, endOffset } = range; |
9 | | - |
10 | | - const snippetLength = 10; |
11 | | - |
12 | | - const rangePrefix = document.createRange(); |
13 | | - rangePrefix.setStart(startContainer, Math.max(startOffset - snippetLength, 0)); |
14 | | - rangePrefix.setEnd(startContainer, startOffset); |
15 | | - |
16 | | - const rangeSuffix = document.createRange(); |
17 | | - rangeSuffix.setStart(endContainer, endOffset); |
18 | | - rangeSuffix.setEnd(endContainer, Math.min(endOffset + snippetLength, endContainer.textContent.length)); |
19 | | - |
20 | | - return { |
21 | | - quote: range.toString(), |
22 | | - quotePrefix: rangePrefix.toString(), |
23 | | - quoteSuffix: rangeSuffix.toString() |
24 | | - } |
25 | | -} |
26 | | - |
27 | 7 | export const rangeToSelector = (range: Range, container: HTMLElement, offsetReferenceSelector?: string): TextSelector => { |
28 | | - const offsetReference: HTMLElement = offsetReferenceSelector |
29 | | - ? (range.startContainer.parentElement as HTMLElement).closest(offsetReferenceSelector) |
30 | | - : container; |
31 | | - |
32 | | - // Helper range from the start of the contentNode to the start of the selection |
33 | 8 | const rangeBefore = document.createRange(); |
| 9 | + |
| 10 | + const offsetReference: HTMLElement = offsetReferenceSelector ? |
| 11 | + (range.startContainer.parentElement as HTMLElement).closest(offsetReferenceSelector) : container; |
| 12 | + |
| 13 | + // A helper range from the start of the contentNode to the start of the selection |
34 | 14 | rangeBefore.setStart(offsetReference, 0); |
35 | 15 | rangeBefore.setEnd(range.startContainer, range.startOffset); |
36 | 16 |
|
37 | | - const quoteSelector = rangeToQuoteSelector(range); |
| 17 | + const quote = range.toString(); |
38 | 18 | const start = rangeBefore.toString().length; |
39 | | - const end = start + quoteSelector.quote.length; |
| 19 | + const end = start + quote.length; |
40 | 20 |
|
41 | 21 | return offsetReferenceSelector ? |
42 | | - { ...quoteSelector, start, end, range, offsetReference } : |
43 | | - { ...quoteSelector, start, end, range }; |
| 22 | + { quote, start, end, range, offsetReference } : |
| 23 | + { quote, start, end, range }; |
44 | 24 | } |
45 | 25 |
|
46 | 26 | export const SelectionHandler = ( |
47 | 27 | container: HTMLElement, |
48 | 28 | state: TextAnnotatorState, |
49 | | - // Experimental |
50 | 29 | offsetReferenceSelector?: string |
51 | 30 | ) => { |
52 | 31 |
|
|
0 commit comments