Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 1x 1x 1x 13x 13x 13x 12x 12x 1x 11x 6x 6x 5x | import { ChangeSource } from 'roosterjs-content-model-dom';
import { formatTextSegmentBeforeSelectionMarker, promoteLink } from 'roosterjs-content-model-api';
import type {
ContentModelLink,
IEditor,
ContentModelText,
AutoLinkOptions,
} from 'roosterjs-content-model-types';
/**
* @internal
*/
export function createLink(editor: IEditor, autoLinkOptions: AutoLinkOptions) {
let anchorNode: Node | null = null;
const links: ContentModelLink[] = [];
formatTextSegmentBeforeSelectionMarker(
editor,
(_model, segment, paragraph) => {
let promotedSegment: ContentModelText | null = null;
if (segment.link) {
return false;
} else if (
(promotedSegment = promoteLink(segment, paragraph, autoLinkOptions)) &&
promotedSegment.link
) {
links.push(promotedSegment.link);
return true;
} else {
return false;
}
},
{
changeSource: ChangeSource.AutoLink,
onNodeCreated: (modelElement, node) => {
if (!anchorNode && links.indexOf(modelElement as ContentModelLink) >= 0) {
anchorNode = node;
}
},
getChangeData: () => anchorNode,
}
);
}
|