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   60x 59x 59x 59x 59x 59x 59x 59x   59x 10x     59x 49x     59x 1x     59x 1x     59x 1x     59x 1x     59x 1x         60x 59x 58x     59x 2x     59x 1x     59x 1x     59x 1x     59x 2x     59x 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;
            }
        }
    },
};