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 | 1x 17x 17x 1x 16x 1x 15x 3x 12x 1x 11x 14x 3x 8x 2x 9x | import type { ReadonlyContentModelBlockGroup } from 'roosterjs-content-model-types';
/**
* A fast way to check if content model is empty
*/
export function isModelEmptyFast(model: ReadonlyContentModelBlockGroup): boolean {
const firstBlock = model.blocks[0];
if (model.blocks.length > 1) {
return false; // Multiple blocks, treat as not empty
} else if (!firstBlock) {
return true; // No block, it is empty
} else if (firstBlock.blockType != 'Paragraph') {
return false; // First block is not paragraph, treat as not empty
} else if (firstBlock.segments.length == 0) {
return true; // No segment, it is empty
} else if (
firstBlock.segments.some(
x =>
x.segmentType == 'Entity' ||
x.segmentType == 'Image' ||
x.segmentType == 'General' ||
(x.segmentType == 'Text' && x.text)
)
) {
return false; // Has meaningful segments, it is not empty
} else if (
(firstBlock.format.marginRight && parseFloat(firstBlock.format.marginRight) > 0) ||
(firstBlock.format.marginLeft && parseFloat(firstBlock.format.marginLeft) > 0)
) {
return false; // Has margin (indentation is changed), it is not empty
} else {
return firstBlock.segments.filter(x => x.segmentType == 'Br').length <= 1; // If there are more than one BR, it is not empty, otherwise it is empty
}
}
|