All files / roosterjs-content-model-plugins/lib/imageEdit/utils updateImageEditInfo.ts

94.44% Statements 17/18
78.57% Branches 11/14
100% Functions 6/6
94.44% Lines 17/18

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 681x 1x                     1x         35x       4x 4x       35x       42x                                   1x       7x 7x 7x 7x 7x 7x     7x         7x    
import { getSelectedImage } from './getSelectedImage';
import { mutateSegment, updateImageMetadata } from 'roosterjs-content-model-dom';
 
import type {
    ContentModelImage,
    IEditor,
    ImageMetadataFormat,
} from 'roosterjs-content-model-types';
 
/**
 * @internal
 */
export function updateImageEditInfo(
    contentModelImage: ContentModelImage,
    image: HTMLImageElement,
    newImageMetadata?: ImageMetadataFormat | null | undefined
): ImageMetadataFormat {
    const contentModelMetadata = updateImageMetadata(
        contentModelImage,
        newImageMetadata !== undefined
            ? format => {
                  format = newImageMetadata;
                  return format;
              }
            : undefined
    );
    return { ...getInitialEditInfo(image), ...contentModelMetadata };
}
 
function getInitialEditInfo(image: HTMLImageElement): ImageMetadataFormat {
    return {
        src: image.getAttribute('src') || '',
        widthPx: image.clientWidth,
        heightPx: image.clientHeight,
        naturalWidth: image.naturalWidth,
        naturalHeight: image.naturalHeight,
        leftPercent: 0,
        rightPercent: 0,
        topPercent: 0,
        bottomPercent: 0,
        angleRad: 0,
    };
}
 
/**
 * @internal
 * @returns
 */
export function getSelectedImageMetadata(
    editor: IEditor,
    image: HTMLImageElement
): ImageMetadataFormat {
    let imageMetadata: ImageMetadataFormat = getInitialEditInfo(image);
    editor.formatContentModel(model => {
        const selectedImage = getSelectedImage(model);
        Eif (selectedImage?.image) {
            mutateSegment(selectedImage.paragraph, selectedImage?.image, modelImage => {
                imageMetadata = updateImageEditInfo(modelImage, image);
            });
 
            return true;
        }
        return false;
    });
 
    return imageMetadata;
}