All files / roosterjs-content-model-plugins/lib/autoFormat/link createLink.ts

81.25% Statements 13/16
60% Branches 6/10
50% Functions 2/4
81.25% Lines 13/16

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 461x 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,
        }
    );
}