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   76x 75x 75x 75x 75x 75x 75x 75x   75x 12x     75x 63x     75x 1x     75x 1x     75x 1x     75x 1x     75x 1x         68x 67x 65x     67x 3x     67x 1x     67x 1x     67x 1x     67x 2x     67x 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;
            }
        }
    },
};