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 | 1x 1x 1x 1x 15x 15x 15x 15x 12x 36x 12x 12x 12x 12x 3x 1x 12x 12x 12x 2x 12x 12x 12x 24x 12x | import { getListTypeStyle } from './getListTypeStyle'; import { getOperationalBlocks, isBlockGroupOfType } from 'roosterjs-content-model-dom'; import { getListAnnounceData, setListType, setModelListStartNumber, setModelListStyle, } from 'roosterjs-content-model-api'; import type { ContentModelListItem, FormatContentModelContext, ReadonlyContentModelDocument, ShallowMutableContentModelParagraph, } from 'roosterjs-content-model-types'; /** * @internal */ export function keyboardListTrigger( model: ReadonlyContentModelDocument, paragraph: ShallowMutableContentModelParagraph, context: FormatContentModelContext, IshouldSearchForBullet: boolean = true, IshouldSearchForNumbering: boolean = true, removeListMargins?: boolean ) { const listStyleType = getListTypeStyle(model, shouldSearchForBullet, shouldSearchForNumbering); if (listStyleType) { paragraph.segments.splice(0, 1); const { listType, styleType, index } = listStyleType; triggerList(model, listType, styleType, index, removeListMargins); context.canUndoByBackspace = true; setAnnounceData(model, context); return true; } return false; } const triggerList = ( model: ReadonlyContentModelDocument, listType: 'OL' | 'UL', styleType: number, index?: number, removeListMargins?: boolean ) => { setListType(model, listType, removeListMargins); const isOrderedList = listType == 'OL'; if (index && index > 0 && isOrderedList) { setModelListStartNumber(model, index); } setModelListStyle( model, isOrderedList ? { orderedStyleType: styleType, applyListStyleFromLevel: false, } : { unorderedStyleType: styleType, applyListStyleFromLevel: false, } ); }; function setAnnounceData(model: ReadonlyContentModelDocument, context: FormatContentModelContext) { const [paragraphOrListItems] = getOperationalBlocks<ContentModelListItem>( model, ['ListItem'], [] // Set stop types to be empty so we can find list items even cross the boundary of table, then we can always operation on the list item if any ); Eif (paragraphOrListItems && isBlockGroupOfType(paragraphOrListItems.block, 'ListItem')) { const { path, block } = paragraphOrListItems; context.announceData = getListAnnounceData([block, ...path]); } } |