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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 15x 15x 15x 15x 15x 15x 15x 1x 8x 8x 8x 8x 8x 8x 8x 8x 8x 1x 1x 23x 23x | import { addBlock } from '../../modelApi/common/addBlock';
import { addDecorators } from '../../modelApi/common/addDecorators';
import { addSegment } from '../../modelApi/common/addSegment';
import { createGeneralBlock } from '../../modelApi/creators/createGeneralBlock';
import { createGeneralSegment } from '../../modelApi/creators/createGeneralSegment';
import { isBlockElement } from '../utils/isBlockElement';
import { parseFormat } from '../utils/parseFormat';
import { stackFormat } from '../utils/stackFormat';
import type { ElementProcessor } from 'roosterjs-content-model-types';
const generalBlockProcessor: ElementProcessor<HTMLElement> = (group, element, context) => {
const block = createGeneralBlock(element);
const isSelectedBefore = context.isInSelection;
stackFormat(
context,
{
segment: 'empty',
paragraph: 'empty',
link: 'empty',
},
() => {
addBlock(group, block);
parseFormat(element, context.formatParsers.general, block.format, context);
context.elementProcessors.child(block, element, context);
}
);
Iif (isSelectedBefore && context.isInSelection) {
block.isSelected = true;
}
};
const generalSegmentProcessor: ElementProcessor<HTMLElement> = (group, element, context) => {
const segment = createGeneralSegment(element, context.segmentFormat);
const isSelectedBefore = context.isInSelection;
addDecorators(segment, context);
const paragraph = addSegment(group, segment);
context.domIndexer?.onSegment(element, paragraph, [segment]);
stackFormat(
context,
{
segment:
'empty' /*clearFormat, General segment will include all properties and styles when generate back to HTML, so no need to carry over existing segment format*/,
},
() => {
parseFormat(element, context.formatParsers.general, segment.format, context);
context.elementProcessors.child(segment, element, context);
}
);
if (isSelectedBefore && context.isInSelection) {
segment.isSelected = true;
}
};
/**
* @internal
*/
export const generalProcessor: ElementProcessor<HTMLElement> = (group, element, context) => {
const processor = isBlockElement(element) ? generalBlockProcessor : generalSegmentProcessor;
processor(group, element, context);
};
|