All files / roosterjs-content-model-dom/lib/modelApi/common normalizeSegmentFormat.ts

100% Statements 15/15
75% Branches 6/8
100% Functions 1/1
100% Lines 15/15

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 481x 1x 1x 1x 1x                           1x       127x 127x   127x     127x     127x   127x               127x   127x   127x    
import { createContentModelDocument } from '../creators/createContentModelDocument';
import { createText } from '../creators/createText';
import { ensureParagraph } from './ensureParagraph';
import { createModelToDomContextWithConfig } from '../../modelToDom/context/createModelToDomContext';
import { createDomToModelContextWithConfig } from '../../domToModel/context/createDomToModelContext';
import type {
    ContentModelSegmentFormat,
    DomToModelContext,
    EditorEnvironment,
    ModelToDomContext,
} from 'roosterjs-content-model-types';
 
/**
 * Some format values can be changed when apply to DOM, such as font family.
 * This function will normalize the format and return the same string after DOM modification.
 * @param format The format to be normalized
 * @return Normalized format
 */
export function normalizeSegmentFormat(
    format: ContentModelSegmentFormat,
    environment: EditorEnvironment
): ContentModelSegmentFormat {
    const span = document.createElement('span');
    const segment = createText('text', format);
 
    const domToModelContext: DomToModelContext = createDomToModelContextWithConfig(
        environment.domToModelSettings.calculated
    );
    const modelToDomContext: ModelToDomContext = createModelToDomContextWithConfig(
        environment.modelToDomSettings.calculated
    );
    const model = createContentModelDocument();
 
    modelToDomContext.modelHandlers.segment(
        span.ownerDocument,
        span,
        segment,
        modelToDomContext,
        []
    );
 
    domToModelContext.elementProcessors.element(model, span, domToModelContext);
 
    const paragraph = ensureParagraph(model);
 
    return paragraph.segments[0]?.format ?? format;
}