All files / roosterjs-content-model-dom/lib/formatHandlers/segment linkFormatHandler.ts

100% Statements 39/39
100% Branches 35/35
100% Functions 2/2
100% Lines 39/39

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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 801x             1x   50x 49x 49x 49x 49x 49x 49x 49x   49x 10x     49x 39x     49x 1x     49x 1x     49x 1x     49x 1x     49x 1x         44x 43x 42x     43x 2x     43x 1x     43x 1x     43x 1x     43x 2x     43x 1x          
import { isElementOfType } from '../../domUtils/isElementOfType';
import type { FormatHandler } from '../FormatHandler';
import type { LinkFormat } from 'roosterjs-content-model-types';
 
/**
 * @internal
 */
export const linkFormatHandler: FormatHandler<LinkFormat> = {
    parse: (format, element) => {
        if (isElementOfType(element, 'a')) {
            const name = element.name;
            const href = element.getAttribute('href'); // Use getAttribute to get original HREF but not the resolved absolute url
            const target = element.target;
            const rel = element.rel;
            const id = element.id;
            const className = element.className;
            const title = element.title;
 
            if (name) {
                format.name = name;
            }
 
            if (href) {
                format.href = href;
            }
 
            if (target) {
                format.target = target;
            }
 
            if (id) {
                format.anchorId = id;
            }
 
            if (rel) {
                format.relationship = rel;
            }
 
            if (title) {
                format.anchorTitle = title;
            }
 
            if (className) {
                format.anchorClass = className;
            }
        }
    },
    apply: (format, element) => {
        if (isElementOfType(element, 'a') && (format.href || format.name)) {
            if (format.href) {
                element.href = format.href;
            }
 
            if (format.name) {
                element.name = format.name;
            }
 
            if (format.target) {
                element.target = format.target;
            }
 
            if (format.anchorId) {
                element.id = format.anchorId;
            }
 
            if (format.anchorClass) {
                element.className = format.anchorClass;
            }
 
            if (format.anchorTitle) {
                element.title = format.anchorTitle;
            }
 
            if (format.relationship) {
                element.rel = format.relationship;
            }
        }
    },
};