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 71 72 73 74 75 76 77 78 79 | 1x 1x 2038x 2038x 2038x 20x 2x 18x 20x 2038x 365x 267x 1673x 66x 1673x 2038x | import { ensureParagraph } from './ensureParagraph';
import type {
ContentModelBlockFormat,
ContentModelBlockGroup,
ContentModelParagraph,
ContentModelSegment,
ContentModelSegmentFormat,
ShallowMutableContentModelBlockGroup,
ShallowMutableContentModelParagraph,
} from 'roosterjs-content-model-types';
/**
* Add a given segment into a paragraph from its parent group. If the last block of the given group is not paragraph, create a new paragraph.
* @param group The parent block group of the paragraph to add segment into
* @param newSegment The segment to add
* @param blockFormat The block format used for creating a new paragraph when need
* @returns The parent paragraph where the segment is added to
*/
export function addSegment(
group: ContentModelBlockGroup,
newSegment: ContentModelSegment,
blockFormat?: ContentModelBlockFormat,
segmentFormat?: ContentModelSegmentFormat
): ContentModelParagraph;
/**
* Add a given segment into a paragraph from its parent group. If the last block of the given group is not paragraph, create a new paragraph. (Shallow mutable)
* @param group The parent block group of the paragraph to add segment into
* @param newSegment The segment to add
* @param blockFormat The block format used for creating a new paragraph when need
* @returns The parent paragraph where the segment is added to
*/
export function addSegment(
group: ShallowMutableContentModelBlockGroup,
newSegment: ContentModelSegment,
blockFormat?: ContentModelBlockFormat,
segmentFormat?: ContentModelSegmentFormat
): ShallowMutableContentModelParagraph;
export function addSegment(
group: ShallowMutableContentModelBlockGroup,
newSegment: ContentModelSegment,
blockFormat?: ContentModelBlockFormat,
segmentFormat?: ContentModelSegmentFormat
): ShallowMutableContentModelParagraph {
const paragraph = ensureParagraph(group, blockFormat, segmentFormat);
const lastSegment = paragraph.segments[paragraph.segments.length - 1];
if (blockFormat?.textIndent) {
// For a new paragraph, if current text indent is already applied to previous block in the same level,
// we need to ignore it according to browser rendering behavior
if (blockFormat.isTextIndentApplied && paragraph.segments.length == 0) {
delete paragraph.format.textIndent;
} else {
blockFormat.isTextIndentApplied = true;
}
delete paragraph.format.isTextIndentApplied;
}
if (newSegment.segmentType == 'SelectionMarker') {
if (!lastSegment || !lastSegment.isSelected || !newSegment.isSelected) {
paragraph.segments.push(newSegment);
}
} else {
if (
newSegment.isSelected &&
lastSegment?.segmentType == 'SelectionMarker' &&
lastSegment.isSelected
) {
paragraph.segments.pop();
}
paragraph.segments.push(newSegment);
}
return paragraph;
}
|