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

100% Statements 19/19
70% Branches 7/10
100% Functions 4/4
100% Lines 16/16

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 301x 1x 1x 1x     129x 129x     129x 129x 129x 129x 129x 129x               1x 17x 129x 129x      
const PI = Math.PI;
const DIRECTIONS = 8;
const DirectionRad = (PI * 2) / DIRECTIONS;
const DirectionOrder = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];
 
function handleRadIndexCalculator(angleRad: number): number {
    const idx = Math.round(angleRad / DirectionRad) % DIRECTIONS;
    return idx < 0 ? idx + DIRECTIONS : idx;
}
 
function rotateHandles(angleRad: number, Iy: string = '', Ix: string = ''): string {
    const radIndex = handleRadIndexCalculator(angleRad);
    const originalDirection = y + x;
    const originalIndex = DirectionOrder.indexOf(originalDirection);
    const rotatedIndex = originalIndex >= 0 && originalIndex + radIndex;
    return rotatedIndex ? DirectionOrder[rotatedIndex % DIRECTIONS] : '';
}
/**
 * @internal
 * Rotate the resizer and cropper handles according to the image position.
 * @param handles The resizer handles.
 * @param angleRad The angle that the image was rotated.
 */
export function updateHandleCursor(handles: HTMLElement[], angleRad: number) {
    handles.forEach(handle => {
        const { y, x } = handle.dataset;
        handle.style.cursor = `${rotateHandles(angleRad, y, x)}-resize`;
    });
}