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 | 1x 1x 54x 54x 54x 54x 54x 51x 51x 51x 49x 49x 49x 54x 54x | import { getSelectedSegmentsAndParagraphs, mutateSegment } from 'roosterjs-content-model-dom'; import type { ContentModelSegmentFormat, ContentModelText, FormatContentModelContext, FormatContentModelOptions, IEditor, ShallowMutableContentModelDocument, ShallowMutableContentModelParagraph, } from 'roosterjs-content-model-types'; /** * Invoke a callback to format the text segment before the selection marker using Content Model * @param editor The editor object * @param callback The callback to format the text segment. * @returns True if the segment before cursor is found and callback is called, otherwise false */ export function formatTextSegmentBeforeSelectionMarker( editor: IEditor, callback: ( model: ShallowMutableContentModelDocument, previousSegment: ContentModelText, paragraph: ShallowMutableContentModelParagraph, markerFormat: ContentModelSegmentFormat, context: FormatContentModelContext ) => boolean, options?: FormatContentModelOptions ): boolean { let result = false; editor.formatContentModel((model, context) => { const selectedSegmentsAndParagraphs = getSelectedSegmentsAndParagraphs( model, false /*includeFormatHolder*/ ); let rewrite = false; if ( selectedSegmentsAndParagraphs.length > 0 && selectedSegmentsAndParagraphs[0][0].segmentType == 'SelectionMarker' && selectedSegmentsAndParagraphs[0][1] ) { mutateSegment( selectedSegmentsAndParagraphs[0][1], selectedSegmentsAndParagraphs[0][0], (marker, paragraph, markerIndex) => { const previousSegment = paragraph.segments[markerIndex - 1]; if (previousSegment && previousSegment.segmentType === 'Text') { result = true; // Preserve pending format if any when format text segment, so if there is pending format (e.g. from paste) // and some auto action happens after paste, the pending format will still take effect context.newPendingFormat = 'preserve'; rewrite = callback( model, previousSegment, paragraph, marker.format, context ); } } ); } return rewrite; }, options); return result; } |