roosterjs-content-model-plugins 9.4.1 → 9.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/lib/autoFormat/hyphen/transformHyphen.d.ts +2 -2
- package/lib/autoFormat/hyphen/transformHyphen.js.map +1 -1
- package/lib/autoFormat/link/createLinkAfterSpace.d.ts +2 -2
- package/lib/autoFormat/link/createLinkAfterSpace.js.map +1 -1
- package/lib/autoFormat/list/keyboardListTrigger.d.ts +2 -2
- package/lib/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib/autoFormat/numbers/transformFraction.d.ts +2 -2
- package/lib/autoFormat/numbers/transformFraction.js.map +1 -1
- package/lib/autoFormat/numbers/transformOrdinals.d.ts +2 -2
- package/lib/autoFormat/numbers/transformOrdinals.js.map +1 -1
- package/lib/customReplace/CustomReplacePlugin.d.ts +2 -2
- package/lib/customReplace/CustomReplacePlugin.js.map +1 -1
- package/lib/edit/EditPlugin.d.ts +10 -0
- package/lib/edit/EditPlugin.js +39 -0
- package/lib/edit/EditPlugin.js.map +1 -1
- package/lib/edit/deleteSteps/deleteAllSegmentBefore.js +2 -1
- package/lib/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
- package/lib/edit/deleteSteps/deleteCollapsedSelection.js +5 -4
- package/lib/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
- package/lib/edit/deleteSteps/deleteEmptyQuote.js +33 -29
- package/lib/edit/deleteSteps/deleteEmptyQuote.js.map +1 -1
- package/lib/edit/deleteSteps/deleteWordSelection.js +1 -1
- package/lib/edit/deleteSteps/deleteWordSelection.js.map +1 -1
- package/lib/edit/handleKeyboardEventCommon.d.ts +2 -2
- package/lib/edit/handleKeyboardEventCommon.js.map +1 -1
- package/lib/edit/inputSteps/handleEnterOnList.js +32 -56
- package/lib/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib/edit/inputSteps/handleEnterOnParagraph.d.ts +5 -0
- package/lib/edit/inputSteps/handleEnterOnParagraph.js +22 -0
- package/lib/edit/inputSteps/handleEnterOnParagraph.js.map +1 -0
- package/lib/edit/keyboardDelete.js +1 -1
- package/lib/edit/keyboardDelete.js.map +1 -1
- package/lib/edit/keyboardEnter.d.ts +5 -0
- package/lib/edit/keyboardEnter.js +44 -0
- package/lib/edit/keyboardEnter.js.map +1 -0
- package/lib/edit/keyboardInput.js +4 -18
- package/lib/edit/keyboardInput.js.map +1 -1
- package/lib/edit/keyboardTab.js.map +1 -1
- package/lib/edit/tabUtils/handleTabOnList.d.ts +2 -2
- package/lib/edit/tabUtils/handleTabOnList.js.map +1 -1
- package/lib/edit/tabUtils/handleTabOnParagraph.d.ts +2 -2
- package/lib/edit/tabUtils/handleTabOnParagraph.js +9 -7
- package/lib/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
- package/lib/edit/tabUtils/handleTabOnTable.d.ts +2 -2
- package/lib/edit/tabUtils/handleTabOnTable.js.map +1 -1
- package/lib/edit/tabUtils/handleTabOnTableCell.d.ts +2 -2
- package/lib/edit/tabUtils/handleTabOnTableCell.js +5 -4
- package/lib/edit/tabUtils/handleTabOnTableCell.js.map +1 -1
- package/lib/edit/utils/getLeafSiblingBlock.d.ts +5 -5
- package/lib/edit/utils/getLeafSiblingBlock.js.map +1 -1
- package/lib/edit/utils/splitParagraph.d.ts +9 -0
- package/lib/edit/utils/splitParagraph.js +29 -0
- package/lib/edit/utils/splitParagraph.js.map +1 -0
- package/lib/imageEdit/Cropper/createImageCropper.d.ts +10 -0
- package/lib/imageEdit/Cropper/createImageCropper.js +80 -0
- package/lib/imageEdit/Cropper/createImageCropper.js.map +1 -0
- package/lib/imageEdit/Cropper/cropperContext.d.ts +8 -0
- package/lib/imageEdit/Cropper/cropperContext.js +73 -0
- package/lib/imageEdit/Cropper/cropperContext.js.map +1 -0
- package/lib/imageEdit/ImageEditPlugin.d.ts +66 -0
- package/lib/imageEdit/ImageEditPlugin.js +328 -0
- package/lib/imageEdit/ImageEditPlugin.js.map +1 -0
- package/lib/imageEdit/Resizer/createImageResizer.d.ts +12 -0
- package/lib/imageEdit/Resizer/createImageResizer.js +89 -0
- package/lib/imageEdit/Resizer/createImageResizer.js.map +1 -0
- package/lib/imageEdit/Resizer/resizerContext.d.ts +8 -0
- package/lib/imageEdit/Resizer/resizerContext.js +61 -0
- package/lib/imageEdit/Resizer/resizerContext.js.map +1 -0
- package/lib/imageEdit/Resizer/updateSideHandlesVisibility.d.ts +4 -0
- package/lib/imageEdit/Resizer/updateSideHandlesVisibility.js +17 -0
- package/lib/imageEdit/Resizer/updateSideHandlesVisibility.js.map +1 -0
- package/lib/imageEdit/Rotator/createImageRotator.d.ts +6 -0
- package/lib/imageEdit/Rotator/createImageRotator.js +76 -0
- package/lib/imageEdit/Rotator/createImageRotator.js.map +1 -0
- package/lib/imageEdit/Rotator/rotatorContext.d.ts +8 -0
- package/lib/imageEdit/Rotator/rotatorContext.js +36 -0
- package/lib/imageEdit/Rotator/rotatorContext.js.map +1 -0
- package/lib/imageEdit/Rotator/updateRotateHandle.d.ts +7 -0
- package/lib/imageEdit/Rotator/updateRotateHandle.js +55 -0
- package/lib/imageEdit/Rotator/updateRotateHandle.js.map +1 -0
- package/lib/imageEdit/constants/constants.d.ts +73 -0
- package/lib/imageEdit/constants/constants.js +81 -0
- package/lib/imageEdit/constants/constants.js.map +1 -0
- package/lib/imageEdit/types/DragAndDropContext.d.ts +39 -0
- package/lib/imageEdit/types/DragAndDropContext.js +3 -0
- package/lib/imageEdit/types/DragAndDropContext.js.map +1 -0
- package/lib/imageEdit/types/GeneratedImageSize.d.ts +33 -0
- package/lib/imageEdit/types/GeneratedImageSize.js +3 -0
- package/lib/imageEdit/types/GeneratedImageSize.js.map +1 -0
- package/lib/imageEdit/types/ImageEditElementClass.d.ts +30 -0
- package/lib/imageEdit/types/ImageEditElementClass.js +35 -0
- package/lib/imageEdit/types/ImageEditElementClass.js.map +1 -0
- package/lib/imageEdit/types/ImageEditOptions.d.ts +55 -0
- package/lib/imageEdit/types/ImageEditOptions.js +3 -0
- package/lib/imageEdit/types/ImageEditOptions.js.map +1 -0
- package/lib/imageEdit/types/ImageHtmlOptions.d.ts +18 -0
- package/lib/imageEdit/types/ImageHtmlOptions.js +3 -0
- package/lib/imageEdit/types/ImageHtmlOptions.js.map +1 -0
- package/lib/imageEdit/utils/applyChange.d.ts +12 -0
- package/lib/imageEdit/utils/applyChange.js +77 -0
- package/lib/imageEdit/utils/applyChange.js.map +1 -0
- package/lib/imageEdit/utils/canRegenerateImage.d.ts +8 -0
- package/lib/imageEdit/utils/canRegenerateImage.js +32 -0
- package/lib/imageEdit/utils/canRegenerateImage.js.map +1 -0
- package/lib/imageEdit/utils/checkEditInfoState.d.ts +41 -0
- package/lib/imageEdit/utils/checkEditInfoState.js +54 -0
- package/lib/imageEdit/utils/checkEditInfoState.js.map +1 -0
- package/lib/imageEdit/utils/createImageWrapper.d.ts +18 -0
- package/lib/imageEdit/utils/createImageWrapper.js +87 -0
- package/lib/imageEdit/utils/createImageWrapper.js.map +1 -0
- package/lib/imageEdit/utils/doubleCheckResize.d.ts +12 -0
- package/lib/imageEdit/utils/doubleCheckResize.js +36 -0
- package/lib/imageEdit/utils/doubleCheckResize.js.map +1 -0
- package/lib/imageEdit/utils/generateDataURL.d.ts +13 -0
- package/lib/imageEdit/utils/generateDataURL.js +50 -0
- package/lib/imageEdit/utils/generateDataURL.js.map +1 -0
- package/lib/imageEdit/utils/generateImageSize.d.ts +15 -0
- package/lib/imageEdit/utils/generateImageSize.js +46 -0
- package/lib/imageEdit/utils/generateImageSize.js.map +1 -0
- package/lib/imageEdit/utils/getDropAndDragHelpers.d.ts +10 -0
- package/lib/imageEdit/utils/getDropAndDragHelpers.js +24 -0
- package/lib/imageEdit/utils/getDropAndDragHelpers.js.map +1 -0
- package/lib/imageEdit/utils/getHTMLImageOptions.d.ts +7 -0
- package/lib/imageEdit/utils/getHTMLImageOptions.js +22 -0
- package/lib/imageEdit/utils/getHTMLImageOptions.js.map +1 -0
- package/lib/imageEdit/utils/getSelectedContentModelImage.d.ts +5 -0
- package/lib/imageEdit/utils/getSelectedContentModelImage.js +16 -0
- package/lib/imageEdit/utils/getSelectedContentModelImage.js.map +1 -0
- package/lib/imageEdit/utils/imageEditUtils.d.ts +39 -0
- package/lib/imageEdit/utils/imageEditUtils.js +102 -0
- package/lib/imageEdit/utils/imageEditUtils.js.map +1 -0
- package/lib/imageEdit/utils/updateHandleCursor.d.ts +7 -0
- package/lib/imageEdit/utils/updateHandleCursor.js +34 -0
- package/lib/imageEdit/utils/updateHandleCursor.js.map +1 -0
- package/lib/imageEdit/utils/updateImageEditInfo.d.ts +10 -0
- package/lib/imageEdit/utils/updateImageEditInfo.js +49 -0
- package/lib/imageEdit/utils/updateImageEditInfo.js.map +1 -0
- package/lib/imageEdit/utils/updateWrapper.d.ts +6 -0
- package/lib/imageEdit/utils/updateWrapper.js +87 -0
- package/lib/imageEdit/utils/updateWrapper.js.map +1 -0
- package/lib/index.d.ts +2 -1
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/paste/DefaultSanitizers.d.ts +10 -0
- package/lib/paste/DefaultSanitizers.js +25 -0
- package/lib/paste/DefaultSanitizers.js.map +1 -0
- package/lib/paste/PastePlugin.d.ts +4 -2
- package/lib/paste/PastePlugin.js +26 -1
- package/lib/paste/PastePlugin.js.map +1 -1
- package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js +13 -0
- package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
- package/lib/paste/utils/chainSanitizerCallback.d.ts +9 -0
- package/lib/paste/utils/chainSanitizerCallback.js +36 -0
- package/lib/paste/utils/chainSanitizerCallback.js.map +1 -0
- package/lib/picker/getQueryString.d.ts +2 -2
- package/lib/picker/getQueryString.js.map +1 -1
- package/lib/pluginUtils/splitTextSegment.d.ts +2 -2
- package/lib/pluginUtils/splitTextSegment.js.map +1 -1
- package/lib/tableEdit/editors/TableEditor.d.ts +3 -0
- package/lib/tableEdit/editors/TableEditor.js +4 -0
- package/lib/tableEdit/editors/TableEditor.js.map +1 -1
- package/lib/tableEdit/editors/features/CellResizer.d.ts +39 -1
- package/lib/tableEdit/editors/features/CellResizer.js +27 -11
- package/lib/tableEdit/editors/features/CellResizer.js.map +1 -1
- package/lib/tableEdit/editors/features/TableInserter.d.ts +17 -0
- package/lib/tableEdit/editors/features/TableInserter.js +6 -1
- package/lib/tableEdit/editors/features/TableInserter.js.map +1 -1
- package/lib/tableEdit/editors/features/TableMover.d.ts +2 -2
- package/lib/tableEdit/editors/features/TableMover.js +4 -4
- package/lib/tableEdit/editors/features/TableMover.js.map +1 -1
- package/lib/tableEdit/editors/features/TableResizer.d.ts +40 -1
- package/lib/tableEdit/editors/features/TableResizer.js +25 -7
- package/lib/tableEdit/editors/features/TableResizer.js.map +1 -1
- package/lib/tableEdit/editors/utils/getTableFromContentModel.d.ts +2 -2
- package/lib/tableEdit/editors/utils/getTableFromContentModel.js.map +1 -1
- package/lib-amd/autoFormat/hyphen/transformHyphen.d.ts +2 -2
- package/lib-amd/autoFormat/hyphen/transformHyphen.js.map +1 -1
- package/lib-amd/autoFormat/link/createLinkAfterSpace.d.ts +2 -2
- package/lib-amd/autoFormat/link/createLinkAfterSpace.js.map +1 -1
- package/lib-amd/autoFormat/list/keyboardListTrigger.d.ts +2 -2
- package/lib-amd/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib-amd/autoFormat/numbers/transformFraction.d.ts +2 -2
- package/lib-amd/autoFormat/numbers/transformFraction.js.map +1 -1
- package/lib-amd/autoFormat/numbers/transformOrdinals.d.ts +2 -2
- package/lib-amd/autoFormat/numbers/transformOrdinals.js.map +1 -1
- package/lib-amd/customReplace/CustomReplacePlugin.d.ts +2 -2
- package/lib-amd/customReplace/CustomReplacePlugin.js.map +1 -1
- package/lib-amd/edit/EditPlugin.d.ts +10 -0
- package/lib-amd/edit/EditPlugin.js +38 -1
- package/lib-amd/edit/EditPlugin.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js +2 -1
- package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js +5 -4
- package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteEmptyQuote.js +33 -30
- package/lib-amd/edit/deleteSteps/deleteEmptyQuote.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteWordSelection.js +1 -1
- package/lib-amd/edit/deleteSteps/deleteWordSelection.js.map +1 -1
- package/lib-amd/edit/handleKeyboardEventCommon.d.ts +2 -2
- package/lib-amd/edit/handleKeyboardEventCommon.js.map +1 -1
- package/lib-amd/edit/inputSteps/handleEnterOnList.js +32 -57
- package/lib-amd/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib-amd/edit/inputSteps/handleEnterOnParagraph.d.ts +5 -0
- package/lib-amd/edit/inputSteps/handleEnterOnParagraph.js +22 -0
- package/lib-amd/edit/inputSteps/handleEnterOnParagraph.js.map +1 -0
- package/lib-amd/edit/keyboardDelete.js +1 -1
- package/lib-amd/edit/keyboardDelete.js.map +1 -1
- package/lib-amd/edit/keyboardEnter.d.ts +5 -0
- package/lib-amd/edit/keyboardEnter.js +42 -0
- package/lib-amd/edit/keyboardEnter.js.map +1 -0
- package/lib-amd/edit/keyboardInput.js +5 -17
- package/lib-amd/edit/keyboardInput.js.map +1 -1
- package/lib-amd/edit/keyboardTab.js.map +1 -1
- package/lib-amd/edit/tabUtils/handleTabOnList.d.ts +2 -2
- package/lib-amd/edit/tabUtils/handleTabOnList.js.map +1 -1
- package/lib-amd/edit/tabUtils/handleTabOnParagraph.d.ts +2 -2
- package/lib-amd/edit/tabUtils/handleTabOnParagraph.js +9 -7
- package/lib-amd/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
- package/lib-amd/edit/tabUtils/handleTabOnTable.d.ts +2 -2
- package/lib-amd/edit/tabUtils/handleTabOnTable.js.map +1 -1
- package/lib-amd/edit/tabUtils/handleTabOnTableCell.d.ts +2 -2
- package/lib-amd/edit/tabUtils/handleTabOnTableCell.js +5 -4
- package/lib-amd/edit/tabUtils/handleTabOnTableCell.js.map +1 -1
- package/lib-amd/edit/utils/getLeafSiblingBlock.d.ts +5 -5
- package/lib-amd/edit/utils/getLeafSiblingBlock.js.map +1 -1
- package/lib-amd/edit/utils/splitParagraph.d.ts +9 -0
- package/lib-amd/edit/utils/splitParagraph.js +29 -0
- package/lib-amd/edit/utils/splitParagraph.js.map +1 -0
- package/lib-amd/imageEdit/Cropper/createImageCropper.d.ts +10 -0
- package/lib-amd/imageEdit/Cropper/createImageCropper.js +78 -0
- package/lib-amd/imageEdit/Cropper/createImageCropper.js.map +1 -0
- package/lib-amd/imageEdit/Cropper/cropperContext.d.ts +8 -0
- package/lib-amd/imageEdit/Cropper/cropperContext.js +73 -0
- package/lib-amd/imageEdit/Cropper/cropperContext.js.map +1 -0
- package/lib-amd/imageEdit/ImageEditPlugin.d.ts +66 -0
- package/lib-amd/imageEdit/ImageEditPlugin.js +315 -0
- package/lib-amd/imageEdit/ImageEditPlugin.js.map +1 -0
- package/lib-amd/imageEdit/Resizer/createImageResizer.d.ts +12 -0
- package/lib-amd/imageEdit/Resizer/createImageResizer.js +86 -0
- package/lib-amd/imageEdit/Resizer/createImageResizer.js.map +1 -0
- package/lib-amd/imageEdit/Resizer/resizerContext.d.ts +8 -0
- package/lib-amd/imageEdit/Resizer/resizerContext.js +61 -0
- package/lib-amd/imageEdit/Resizer/resizerContext.js.map +1 -0
- package/lib-amd/imageEdit/Resizer/updateSideHandlesVisibility.d.ts +4 -0
- package/lib-amd/imageEdit/Resizer/updateSideHandlesVisibility.js +19 -0
- package/lib-amd/imageEdit/Resizer/updateSideHandlesVisibility.js.map +1 -0
- package/lib-amd/imageEdit/Rotator/createImageRotator.d.ts +6 -0
- package/lib-amd/imageEdit/Rotator/createImageRotator.js +74 -0
- package/lib-amd/imageEdit/Rotator/createImageRotator.js.map +1 -0
- package/lib-amd/imageEdit/Rotator/rotatorContext.d.ts +8 -0
- package/lib-amd/imageEdit/Rotator/rotatorContext.js +36 -0
- package/lib-amd/imageEdit/Rotator/rotatorContext.js.map +1 -0
- package/lib-amd/imageEdit/Rotator/updateRotateHandle.d.ts +7 -0
- package/lib-amd/imageEdit/Rotator/updateRotateHandle.js +56 -0
- package/lib-amd/imageEdit/Rotator/updateRotateHandle.js.map +1 -0
- package/lib-amd/imageEdit/constants/constants.d.ts +73 -0
- package/lib-amd/imageEdit/constants/constants.js +83 -0
- package/lib-amd/imageEdit/constants/constants.js.map +1 -0
- package/lib-amd/imageEdit/types/DragAndDropContext.d.ts +39 -0
- package/lib-amd/imageEdit/types/DragAndDropContext.js +5 -0
- package/lib-amd/imageEdit/types/DragAndDropContext.js.map +1 -0
- package/lib-amd/imageEdit/types/GeneratedImageSize.d.ts +33 -0
- package/lib-amd/imageEdit/types/GeneratedImageSize.js +5 -0
- package/lib-amd/imageEdit/types/GeneratedImageSize.js.map +1 -0
- package/lib-amd/imageEdit/types/ImageEditElementClass.d.ts +30 -0
- package/lib-amd/imageEdit/types/ImageEditElementClass.js +37 -0
- package/lib-amd/imageEdit/types/ImageEditElementClass.js.map +1 -0
- package/lib-amd/imageEdit/types/ImageEditOptions.d.ts +55 -0
- package/lib-amd/imageEdit/types/ImageEditOptions.js +5 -0
- package/lib-amd/imageEdit/types/ImageEditOptions.js.map +1 -0
- package/lib-amd/imageEdit/types/ImageHtmlOptions.d.ts +18 -0
- package/lib-amd/imageEdit/types/ImageHtmlOptions.js +5 -0
- package/lib-amd/imageEdit/types/ImageHtmlOptions.js.map +1 -0
- package/lib-amd/imageEdit/utils/applyChange.d.ts +12 -0
- package/lib-amd/imageEdit/utils/applyChange.js +75 -0
- package/lib-amd/imageEdit/utils/applyChange.js.map +1 -0
- package/lib-amd/imageEdit/utils/canRegenerateImage.d.ts +8 -0
- package/lib-amd/imageEdit/utils/canRegenerateImage.js +34 -0
- package/lib-amd/imageEdit/utils/canRegenerateImage.js.map +1 -0
- package/lib-amd/imageEdit/utils/checkEditInfoState.d.ts +41 -0
- package/lib-amd/imageEdit/utils/checkEditInfoState.js +55 -0
- package/lib-amd/imageEdit/utils/checkEditInfoState.js.map +1 -0
- package/lib-amd/imageEdit/utils/createImageWrapper.d.ts +18 -0
- package/lib-amd/imageEdit/utils/createImageWrapper.js +86 -0
- package/lib-amd/imageEdit/utils/createImageWrapper.js.map +1 -0
- package/lib-amd/imageEdit/utils/doubleCheckResize.d.ts +12 -0
- package/lib-amd/imageEdit/utils/doubleCheckResize.js +38 -0
- package/lib-amd/imageEdit/utils/doubleCheckResize.js.map +1 -0
- package/lib-amd/imageEdit/utils/generateDataURL.d.ts +13 -0
- package/lib-amd/imageEdit/utils/generateDataURL.js +51 -0
- package/lib-amd/imageEdit/utils/generateDataURL.js.map +1 -0
- package/lib-amd/imageEdit/utils/generateImageSize.d.ts +15 -0
- package/lib-amd/imageEdit/utils/generateImageSize.js +48 -0
- package/lib-amd/imageEdit/utils/generateImageSize.js.map +1 -0
- package/lib-amd/imageEdit/utils/getDropAndDragHelpers.d.ts +10 -0
- package/lib-amd/imageEdit/utils/getDropAndDragHelpers.js +24 -0
- package/lib-amd/imageEdit/utils/getDropAndDragHelpers.js.map +1 -0
- package/lib-amd/imageEdit/utils/getHTMLImageOptions.d.ts +7 -0
- package/lib-amd/imageEdit/utils/getHTMLImageOptions.js +23 -0
- package/lib-amd/imageEdit/utils/getHTMLImageOptions.js.map +1 -0
- package/lib-amd/imageEdit/utils/getSelectedContentModelImage.d.ts +5 -0
- package/lib-amd/imageEdit/utils/getSelectedContentModelImage.js +17 -0
- package/lib-amd/imageEdit/utils/getSelectedContentModelImage.js.map +1 -0
- package/lib-amd/imageEdit/utils/imageEditUtils.d.ts +39 -0
- package/lib-amd/imageEdit/utils/imageEditUtils.js +103 -0
- package/lib-amd/imageEdit/utils/imageEditUtils.js.map +1 -0
- package/lib-amd/imageEdit/utils/updateHandleCursor.d.ts +7 -0
- package/lib-amd/imageEdit/utils/updateHandleCursor.js +36 -0
- package/lib-amd/imageEdit/utils/updateHandleCursor.js.map +1 -0
- package/lib-amd/imageEdit/utils/updateImageEditInfo.d.ts +10 -0
- package/lib-amd/imageEdit/utils/updateImageEditInfo.js +48 -0
- package/lib-amd/imageEdit/utils/updateImageEditInfo.js.map +1 -0
- package/lib-amd/imageEdit/utils/updateWrapper.d.ts +6 -0
- package/lib-amd/imageEdit/utils/updateWrapper.js +82 -0
- package/lib-amd/imageEdit/utils/updateWrapper.js.map +1 -0
- package/lib-amd/index.d.ts +2 -1
- package/lib-amd/index.js +3 -3
- package/lib-amd/index.js.map +1 -1
- package/lib-amd/paste/DefaultSanitizers.d.ts +10 -0
- package/lib-amd/paste/DefaultSanitizers.js +27 -0
- package/lib-amd/paste/DefaultSanitizers.js.map +1 -0
- package/lib-amd/paste/PastePlugin.d.ts +4 -2
- package/lib-amd/paste/PastePlugin.js +24 -2
- package/lib-amd/paste/PastePlugin.js.map +1 -1
- package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js +13 -0
- package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
- package/lib-amd/paste/utils/chainSanitizerCallback.d.ts +9 -0
- package/lib-amd/paste/utils/chainSanitizerCallback.js +38 -0
- package/lib-amd/paste/utils/chainSanitizerCallback.js.map +1 -0
- package/lib-amd/picker/getQueryString.d.ts +2 -2
- package/lib-amd/picker/getQueryString.js.map +1 -1
- package/lib-amd/pluginUtils/splitTextSegment.d.ts +2 -2
- package/lib-amd/pluginUtils/splitTextSegment.js.map +1 -1
- package/lib-amd/tableEdit/editors/TableEditor.d.ts +3 -0
- package/lib-amd/tableEdit/editors/TableEditor.js +4 -0
- package/lib-amd/tableEdit/editors/TableEditor.js.map +1 -1
- package/lib-amd/tableEdit/editors/features/CellResizer.d.ts +39 -1
- package/lib-amd/tableEdit/editors/features/CellResizer.js +27 -11
- package/lib-amd/tableEdit/editors/features/CellResizer.js.map +1 -1
- package/lib-amd/tableEdit/editors/features/TableInserter.d.ts +17 -0
- package/lib-amd/tableEdit/editors/features/TableInserter.js +6 -1
- package/lib-amd/tableEdit/editors/features/TableInserter.js.map +1 -1
- package/lib-amd/tableEdit/editors/features/TableMover.d.ts +2 -2
- package/lib-amd/tableEdit/editors/features/TableMover.js +4 -4
- package/lib-amd/tableEdit/editors/features/TableMover.js.map +1 -1
- package/lib-amd/tableEdit/editors/features/TableResizer.d.ts +40 -1
- package/lib-amd/tableEdit/editors/features/TableResizer.js +25 -7
- package/lib-amd/tableEdit/editors/features/TableResizer.js.map +1 -1
- package/lib-amd/tableEdit/editors/utils/getTableFromContentModel.d.ts +2 -2
- package/lib-amd/tableEdit/editors/utils/getTableFromContentModel.js.map +1 -1
- package/lib-mjs/autoFormat/hyphen/transformHyphen.d.ts +2 -2
- package/lib-mjs/autoFormat/hyphen/transformHyphen.js.map +1 -1
- package/lib-mjs/autoFormat/link/createLinkAfterSpace.d.ts +2 -2
- package/lib-mjs/autoFormat/link/createLinkAfterSpace.js.map +1 -1
- package/lib-mjs/autoFormat/list/keyboardListTrigger.d.ts +2 -2
- package/lib-mjs/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib-mjs/autoFormat/numbers/transformFraction.d.ts +2 -2
- package/lib-mjs/autoFormat/numbers/transformFraction.js.map +1 -1
- package/lib-mjs/autoFormat/numbers/transformOrdinals.d.ts +2 -2
- package/lib-mjs/autoFormat/numbers/transformOrdinals.js.map +1 -1
- package/lib-mjs/customReplace/CustomReplacePlugin.d.ts +2 -2
- package/lib-mjs/customReplace/CustomReplacePlugin.js.map +1 -1
- package/lib-mjs/edit/EditPlugin.d.ts +10 -0
- package/lib-mjs/edit/EditPlugin.js +39 -0
- package/lib-mjs/edit/EditPlugin.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js +3 -2
- package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js +5 -4
- package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.js +34 -30
- package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteWordSelection.js +2 -2
- package/lib-mjs/edit/deleteSteps/deleteWordSelection.js.map +1 -1
- package/lib-mjs/edit/handleKeyboardEventCommon.d.ts +2 -2
- package/lib-mjs/edit/handleKeyboardEventCommon.js.map +1 -1
- package/lib-mjs/edit/inputSteps/handleEnterOnList.js +33 -57
- package/lib-mjs/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib-mjs/edit/inputSteps/handleEnterOnParagraph.d.ts +5 -0
- package/lib-mjs/edit/inputSteps/handleEnterOnParagraph.js +18 -0
- package/lib-mjs/edit/inputSteps/handleEnterOnParagraph.js.map +1 -0
- package/lib-mjs/edit/keyboardDelete.js +1 -1
- package/lib-mjs/edit/keyboardDelete.js.map +1 -1
- package/lib-mjs/edit/keyboardEnter.d.ts +5 -0
- package/lib-mjs/edit/keyboardEnter.js +40 -0
- package/lib-mjs/edit/keyboardEnter.js.map +1 -0
- package/lib-mjs/edit/keyboardInput.js +4 -18
- package/lib-mjs/edit/keyboardInput.js.map +1 -1
- package/lib-mjs/edit/keyboardTab.js.map +1 -1
- package/lib-mjs/edit/tabUtils/handleTabOnList.d.ts +2 -2
- package/lib-mjs/edit/tabUtils/handleTabOnList.js.map +1 -1
- package/lib-mjs/edit/tabUtils/handleTabOnParagraph.d.ts +2 -2
- package/lib-mjs/edit/tabUtils/handleTabOnParagraph.js +9 -7
- package/lib-mjs/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
- package/lib-mjs/edit/tabUtils/handleTabOnTable.d.ts +2 -2
- package/lib-mjs/edit/tabUtils/handleTabOnTable.js.map +1 -1
- package/lib-mjs/edit/tabUtils/handleTabOnTableCell.d.ts +2 -2
- package/lib-mjs/edit/tabUtils/handleTabOnTableCell.js +6 -5
- package/lib-mjs/edit/tabUtils/handleTabOnTableCell.js.map +1 -1
- package/lib-mjs/edit/utils/getLeafSiblingBlock.d.ts +5 -5
- package/lib-mjs/edit/utils/getLeafSiblingBlock.js.map +1 -1
- package/lib-mjs/edit/utils/splitParagraph.d.ts +9 -0
- package/lib-mjs/edit/utils/splitParagraph.js +25 -0
- package/lib-mjs/edit/utils/splitParagraph.js.map +1 -0
- package/lib-mjs/imageEdit/Cropper/createImageCropper.d.ts +10 -0
- package/lib-mjs/imageEdit/Cropper/createImageCropper.js +75 -0
- package/lib-mjs/imageEdit/Cropper/createImageCropper.js.map +1 -0
- package/lib-mjs/imageEdit/Cropper/cropperContext.d.ts +8 -0
- package/lib-mjs/imageEdit/Cropper/cropperContext.js +70 -0
- package/lib-mjs/imageEdit/Cropper/cropperContext.js.map +1 -0
- package/lib-mjs/imageEdit/ImageEditPlugin.d.ts +66 -0
- package/lib-mjs/imageEdit/ImageEditPlugin.js +325 -0
- package/lib-mjs/imageEdit/ImageEditPlugin.js.map +1 -0
- package/lib-mjs/imageEdit/Resizer/createImageResizer.d.ts +12 -0
- package/lib-mjs/imageEdit/Resizer/createImageResizer.js +85 -0
- package/lib-mjs/imageEdit/Resizer/createImageResizer.js.map +1 -0
- package/lib-mjs/imageEdit/Resizer/resizerContext.d.ts +8 -0
- package/lib-mjs/imageEdit/Resizer/resizerContext.js +58 -0
- package/lib-mjs/imageEdit/Resizer/resizerContext.js.map +1 -0
- package/lib-mjs/imageEdit/Resizer/updateSideHandlesVisibility.d.ts +4 -0
- package/lib-mjs/imageEdit/Resizer/updateSideHandlesVisibility.js +13 -0
- package/lib-mjs/imageEdit/Resizer/updateSideHandlesVisibility.js.map +1 -0
- package/lib-mjs/imageEdit/Rotator/createImageRotator.d.ts +6 -0
- package/lib-mjs/imageEdit/Rotator/createImageRotator.js +72 -0
- package/lib-mjs/imageEdit/Rotator/createImageRotator.js.map +1 -0
- package/lib-mjs/imageEdit/Rotator/rotatorContext.d.ts +8 -0
- package/lib-mjs/imageEdit/Rotator/rotatorContext.js +33 -0
- package/lib-mjs/imageEdit/Rotator/rotatorContext.js.map +1 -0
- package/lib-mjs/imageEdit/Rotator/updateRotateHandle.d.ts +7 -0
- package/lib-mjs/imageEdit/Rotator/updateRotateHandle.js +51 -0
- package/lib-mjs/imageEdit/Rotator/updateRotateHandle.js.map +1 -0
- package/lib-mjs/imageEdit/constants/constants.d.ts +73 -0
- package/lib-mjs/imageEdit/constants/constants.js +78 -0
- package/lib-mjs/imageEdit/constants/constants.js.map +1 -0
- package/lib-mjs/imageEdit/types/DragAndDropContext.d.ts +39 -0
- package/lib-mjs/imageEdit/types/DragAndDropContext.js +2 -0
- package/lib-mjs/imageEdit/types/DragAndDropContext.js.map +1 -0
- package/lib-mjs/imageEdit/types/GeneratedImageSize.d.ts +33 -0
- package/lib-mjs/imageEdit/types/GeneratedImageSize.js +2 -0
- package/lib-mjs/imageEdit/types/GeneratedImageSize.js.map +1 -0
- package/lib-mjs/imageEdit/types/ImageEditElementClass.d.ts +30 -0
- package/lib-mjs/imageEdit/types/ImageEditElementClass.js +32 -0
- package/lib-mjs/imageEdit/types/ImageEditElementClass.js.map +1 -0
- package/lib-mjs/imageEdit/types/ImageEditOptions.d.ts +55 -0
- package/lib-mjs/imageEdit/types/ImageEditOptions.js +2 -0
- package/lib-mjs/imageEdit/types/ImageEditOptions.js.map +1 -0
- package/lib-mjs/imageEdit/types/ImageHtmlOptions.d.ts +18 -0
- package/lib-mjs/imageEdit/types/ImageHtmlOptions.js +2 -0
- package/lib-mjs/imageEdit/types/ImageHtmlOptions.js.map +1 -0
- package/lib-mjs/imageEdit/utils/applyChange.d.ts +12 -0
- package/lib-mjs/imageEdit/utils/applyChange.js +73 -0
- package/lib-mjs/imageEdit/utils/applyChange.js.map +1 -0
- package/lib-mjs/imageEdit/utils/canRegenerateImage.d.ts +8 -0
- package/lib-mjs/imageEdit/utils/canRegenerateImage.js +28 -0
- package/lib-mjs/imageEdit/utils/canRegenerateImage.js.map +1 -0
- package/lib-mjs/imageEdit/utils/checkEditInfoState.d.ts +41 -0
- package/lib-mjs/imageEdit/utils/checkEditInfoState.js +50 -0
- package/lib-mjs/imageEdit/utils/checkEditInfoState.js.map +1 -0
- package/lib-mjs/imageEdit/utils/createImageWrapper.d.ts +18 -0
- package/lib-mjs/imageEdit/utils/createImageWrapper.js +83 -0
- package/lib-mjs/imageEdit/utils/createImageWrapper.js.map +1 -0
- package/lib-mjs/imageEdit/utils/doubleCheckResize.d.ts +12 -0
- package/lib-mjs/imageEdit/utils/doubleCheckResize.js +32 -0
- package/lib-mjs/imageEdit/utils/doubleCheckResize.js.map +1 -0
- package/lib-mjs/imageEdit/utils/generateDataURL.d.ts +13 -0
- package/lib-mjs/imageEdit/utils/generateDataURL.js +46 -0
- package/lib-mjs/imageEdit/utils/generateDataURL.js.map +1 -0
- package/lib-mjs/imageEdit/utils/generateImageSize.d.ts +15 -0
- package/lib-mjs/imageEdit/utils/generateImageSize.js +42 -0
- package/lib-mjs/imageEdit/utils/generateImageSize.js.map +1 -0
- package/lib-mjs/imageEdit/utils/getDropAndDragHelpers.d.ts +10 -0
- package/lib-mjs/imageEdit/utils/getDropAndDragHelpers.js +20 -0
- package/lib-mjs/imageEdit/utils/getDropAndDragHelpers.js.map +1 -0
- package/lib-mjs/imageEdit/utils/getHTMLImageOptions.d.ts +7 -0
- package/lib-mjs/imageEdit/utils/getHTMLImageOptions.js +18 -0
- package/lib-mjs/imageEdit/utils/getHTMLImageOptions.js.map +1 -0
- package/lib-mjs/imageEdit/utils/getSelectedContentModelImage.d.ts +5 -0
- package/lib-mjs/imageEdit/utils/getSelectedContentModelImage.js +12 -0
- package/lib-mjs/imageEdit/utils/getSelectedContentModelImage.js.map +1 -0
- package/lib-mjs/imageEdit/utils/imageEditUtils.d.ts +39 -0
- package/lib-mjs/imageEdit/utils/imageEditUtils.js +91 -0
- package/lib-mjs/imageEdit/utils/imageEditUtils.js.map +1 -0
- package/lib-mjs/imageEdit/utils/updateHandleCursor.d.ts +7 -0
- package/lib-mjs/imageEdit/utils/updateHandleCursor.js +30 -0
- package/lib-mjs/imageEdit/utils/updateHandleCursor.js.map +1 -0
- package/lib-mjs/imageEdit/utils/updateImageEditInfo.d.ts +10 -0
- package/lib-mjs/imageEdit/utils/updateImageEditInfo.js +44 -0
- package/lib-mjs/imageEdit/utils/updateImageEditInfo.js.map +1 -0
- package/lib-mjs/imageEdit/utils/updateWrapper.d.ts +6 -0
- package/lib-mjs/imageEdit/utils/updateWrapper.js +83 -0
- package/lib-mjs/imageEdit/utils/updateWrapper.js.map +1 -0
- package/lib-mjs/index.d.ts +2 -1
- package/lib-mjs/index.js +1 -1
- package/lib-mjs/index.js.map +1 -1
- package/lib-mjs/paste/DefaultSanitizers.d.ts +10 -0
- package/lib-mjs/paste/DefaultSanitizers.js +21 -0
- package/lib-mjs/paste/DefaultSanitizers.js.map +1 -0
- package/lib-mjs/paste/PastePlugin.d.ts +4 -2
- package/lib-mjs/paste/PastePlugin.js +27 -2
- package/lib-mjs/paste/PastePlugin.js.map +1 -1
- package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js +13 -0
- package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
- package/lib-mjs/paste/utils/chainSanitizerCallback.d.ts +9 -0
- package/lib-mjs/paste/utils/chainSanitizerCallback.js +32 -0
- package/lib-mjs/paste/utils/chainSanitizerCallback.js.map +1 -0
- package/lib-mjs/picker/getQueryString.d.ts +2 -2
- package/lib-mjs/picker/getQueryString.js.map +1 -1
- package/lib-mjs/pluginUtils/splitTextSegment.d.ts +2 -2
- package/lib-mjs/pluginUtils/splitTextSegment.js.map +1 -1
- package/lib-mjs/tableEdit/editors/TableEditor.d.ts +3 -0
- package/lib-mjs/tableEdit/editors/TableEditor.js +4 -0
- package/lib-mjs/tableEdit/editors/TableEditor.js.map +1 -1
- package/lib-mjs/tableEdit/editors/features/CellResizer.d.ts +39 -1
- package/lib-mjs/tableEdit/editors/features/CellResizer.js +27 -14
- package/lib-mjs/tableEdit/editors/features/CellResizer.js.map +1 -1
- package/lib-mjs/tableEdit/editors/features/TableInserter.d.ts +17 -0
- package/lib-mjs/tableEdit/editors/features/TableInserter.js +5 -0
- package/lib-mjs/tableEdit/editors/features/TableInserter.js.map +1 -1
- package/lib-mjs/tableEdit/editors/features/TableMover.d.ts +2 -2
- package/lib-mjs/tableEdit/editors/features/TableMover.js +5 -5
- package/lib-mjs/tableEdit/editors/features/TableMover.js.map +1 -1
- package/lib-mjs/tableEdit/editors/features/TableResizer.d.ts +40 -1
- package/lib-mjs/tableEdit/editors/features/TableResizer.js +25 -10
- package/lib-mjs/tableEdit/editors/features/TableResizer.js.map +1 -1
- package/lib-mjs/tableEdit/editors/utils/getTableFromContentModel.d.ts +2 -2
- package/lib-mjs/tableEdit/editors/utils/getTableFromContentModel.js.map +1 -1
- package/package.json +5 -5
- package/lib/pluginUtils/Rect/getDOMInsertPointRect.d.ts +0 -7
- package/lib/pluginUtils/Rect/getDOMInsertPointRect.js +0 -57
- package/lib/pluginUtils/Rect/getDOMInsertPointRect.js.map +0 -1
- package/lib-amd/pluginUtils/Rect/getDOMInsertPointRect.d.ts +0 -7
- package/lib-amd/pluginUtils/Rect/getDOMInsertPointRect.js +0 -58
- package/lib-amd/pluginUtils/Rect/getDOMInsertPointRect.js.map +0 -1
- package/lib-mjs/pluginUtils/Rect/getDOMInsertPointRect.d.ts +0 -7
- package/lib-mjs/pluginUtils/Rect/getDOMInsertPointRect.js +0 -53
- package/lib-mjs/pluginUtils/Rect/getDOMInsertPointRect.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DeleteResult, FormatContentModelContext, IEditor, ReadonlyContentModelDocument } from 'roosterjs-content-model-types';
|
|
2
2
|
/**
|
|
3
3
|
* @internal
|
|
4
4
|
* @return True means content is changed, so need to rewrite content model to editor. Otherwise false
|
|
5
5
|
*/
|
|
6
|
-
export declare function handleKeyboardEventResult(editor: IEditor, model:
|
|
6
|
+
export declare function handleKeyboardEventResult(editor: IEditor, model: ReadonlyContentModelDocument, rawEvent: KeyboardEvent, result: DeleteResult, context: FormatContentModelContext): boolean;
|
|
7
7
|
/**
|
|
8
8
|
* @internal
|
|
9
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleKeyboardEventCommon.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/handleKeyboardEventCommon.ts"],"names":[],"mappings":";;;;IAQA;;;OAGG;IACH,SAAgB,yBAAyB,CACrC,MAAe,EACf,
|
|
1
|
+
{"version":3,"file":"handleKeyboardEventCommon.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/handleKeyboardEventCommon.ts"],"names":[],"mappings":";;;;IAQA;;;OAGG;IACH,SAAgB,yBAAyB,CACrC,MAAe,EACf,KAAmC,EACnC,QAAuB,EACvB,MAAoB,EACpB,OAAkC;QAElC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAChC,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC;QAEhC,QAAQ,MAAM,EAAE;YACZ,KAAK,YAAY;gBACb,kHAAkH;gBAClH,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;gBAE/B,6GAA6G;gBAC7G,OAAO,KAAK,CAAC;YAEjB,KAAK,iBAAiB;gBAClB,sFAAsF;gBACtF,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC1B,OAAO,KAAK,CAAC;YAEjB,KAAK,OAAO,CAAC;YACb,KAAK,YAAY;gBACb,kGAAkG;gBAClG,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC1B,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC;gBAE7B,IAAI,MAAM,IAAI,OAAO,EAAE;oBACnB,sEAAsE;oBACtE,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;iBACpC;gBAED,6GAA6G;gBAC7G,oHAAoH;gBACpH,MAAM,CAAC,YAAY,CAAC,uBAAuB,EAAE;oBACzC,QAAQ,UAAA;iBACX,CAAC,CAAC;gBAEH,OAAO,IAAI,CAAC;SACnB;IACL,CAAC;IA1CD,8DA0CC;IAED;;OAEG;IACH,SAAgB,gBAAgB,CAAC,QAAuB,EAAE,KAAc;QACpE,OAAO,CACH,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC/C,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CACnD,CAAC;IACN,CAAC;IALD,4CAKC;IAED;;OAEG;IACH,SAAgB,6BAA6B,CAAC,QAAuB;QACjE,OAAO,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAChD,CAAC;IAFD,sEAEC","sourcesContent":["import { normalizeContentModel } from 'roosterjs-content-model-dom';\nimport type {\n DeleteResult,\n FormatContentModelContext,\n IEditor,\n ReadonlyContentModelDocument,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * @return True means content is changed, so need to rewrite content model to editor. Otherwise false\n */\nexport function handleKeyboardEventResult(\n editor: IEditor,\n model: ReadonlyContentModelDocument,\n rawEvent: KeyboardEvent,\n result: DeleteResult,\n context: FormatContentModelContext\n): boolean {\n context.skipUndoSnapshot = true;\n context.clearModelCache = false;\n\n switch (result) {\n case 'notDeleted':\n // We have not delete anything, we will let browser handle this event, so that current cached model may be invalid\n context.clearModelCache = true;\n\n // Return false here since we didn't do any change to Content Model, so no need to rewrite with Content Model\n return false;\n\n case 'nothingToDelete':\n // We known there is nothing to delete, no need to let browser keep handling the event\n rawEvent.preventDefault();\n return false;\n\n case 'range':\n case 'singleChar':\n // We have deleted what we need from content model, no need to let browser keep handling the event\n rawEvent.preventDefault();\n normalizeContentModel(model);\n\n if (result == 'range') {\n // A range is about to be deleted, so add an undo snapshot immediately\n context.skipUndoSnapshot = false;\n }\n\n // Trigger an event to let plugins know the content is about to be changed by Content Model keyboard editing.\n // So plugins can do proper handling. e.g. UndoPlugin can decide whether take a snapshot before this change happens.\n editor.triggerEvent('beforeKeyboardEditing', {\n rawEvent,\n });\n\n return true;\n }\n}\n\n/**\n * @internal\n */\nexport function shouldDeleteWord(rawEvent: KeyboardEvent, isMac: boolean) {\n return (\n (isMac && rawEvent.altKey && !rawEvent.metaKey) ||\n (!isMac && rawEvent.ctrlKey && !rawEvent.altKey)\n );\n}\n\n/**\n * @internal\n */\nexport function shouldDeleteAllSegmentsBefore(rawEvent: KeyboardEvent) {\n return rawEvent.metaKey && !rawEvent.altKey;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "tslib", "roosterjs-content-model-api", "roosterjs-content-model-dom"], function (require, exports, tslib_1, roosterjs_content_model_api_1, roosterjs_content_model_dom_1) {
|
|
1
|
+
define(["require", "exports", "tslib", "roosterjs-content-model-api", "../utils/splitParagraph", "roosterjs-content-model-dom"], function (require, exports, tslib_1, roosterjs_content_model_api_1, splitParagraph_1, roosterjs_content_model_dom_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.handleEnterOnList = void 0;
|
|
@@ -6,56 +6,36 @@ define(["require", "exports", "tslib", "roosterjs-content-model-api", "roosterjs
|
|
|
6
6
|
* @internal
|
|
7
7
|
*/
|
|
8
8
|
var handleEnterOnList = function (context) {
|
|
9
|
-
var deleteResult = context.deleteResult;
|
|
10
|
-
if (deleteResult == 'nothingToDelete'
|
|
11
|
-
deleteResult == 'notDeleted' ||
|
|
12
|
-
deleteResult == 'range') {
|
|
13
|
-
var insertPoint = context.insertPoint, formatContext = context.formatContext;
|
|
9
|
+
var deleteResult = context.deleteResult, insertPoint = context.insertPoint;
|
|
10
|
+
if (deleteResult == 'notDeleted' || deleteResult == 'nothingToDelete') {
|
|
14
11
|
var path = insertPoint.path;
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var listItem_1 = path[index];
|
|
12
|
+
var index = (0, roosterjs_content_model_dom_1.getClosestAncestorBlockGroupIndex)(path, ['ListItem'], ['TableCell', 'FormatContainer']);
|
|
13
|
+
var readonlyListItem = path[index];
|
|
18
14
|
var listParent = path[index + 1];
|
|
19
|
-
if (
|
|
20
|
-
var
|
|
15
|
+
if ((readonlyListItem === null || readonlyListItem === void 0 ? void 0 : readonlyListItem.blockGroupType) === 'ListItem' && listParent) {
|
|
16
|
+
var listItem = (0, roosterjs_content_model_dom_1.mutateBlock)(readonlyListItem);
|
|
17
|
+
if (isEmptyListItem(listItem)) {
|
|
18
|
+
listItem.levels.pop();
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
listItem = createNewListItem(context, listItem, listParent);
|
|
22
|
+
if (context.formatContext) {
|
|
23
|
+
context.formatContext.announceData = (0, roosterjs_content_model_api_1.getListAnnounceData)((0, tslib_1.__spreadArray)([
|
|
24
|
+
listItem
|
|
25
|
+
], (0, tslib_1.__read)(path.slice(index + 1)), false));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
var listIndex = listParent.blocks.indexOf(listItem);
|
|
21
29
|
var nextBlock = listParent.blocks[listIndex + 1];
|
|
22
|
-
if (
|
|
23
|
-
(0, roosterjs_content_model_dom_1.normalizeContentModel)(listParent);
|
|
30
|
+
if (nextBlock) {
|
|
24
31
|
var nextListItem = listParent.blocks[listIndex + 1];
|
|
25
32
|
if ((0, roosterjs_content_model_dom_1.isBlockGroupOfType)(nextListItem, 'ListItem') &&
|
|
26
33
|
nextListItem.levels[0]) {
|
|
27
|
-
nextListItem.levels.forEach(function (level
|
|
34
|
+
nextListItem.levels.forEach(function (level) {
|
|
28
35
|
level.format.startNumberOverride = undefined;
|
|
29
|
-
level.dataset = listItem_1.levels[index]
|
|
30
|
-
? listItem_1.levels[index].dataset
|
|
31
|
-
: {};
|
|
32
36
|
});
|
|
33
|
-
var lastParagraph = listItem_1.blocks[listItem_1.blocks.length - 1];
|
|
34
|
-
var nextParagraph = nextListItem.blocks[0];
|
|
35
|
-
if (nextParagraph.blockType === 'Paragraph' &&
|
|
36
|
-
lastParagraph.blockType === 'Paragraph' &&
|
|
37
|
-
lastParagraph.segments[lastParagraph.segments.length - 1].segmentType ===
|
|
38
|
-
'SelectionMarker') {
|
|
39
|
-
(0, roosterjs_content_model_dom_1.mutateBlock)(lastParagraph).segments.pop();
|
|
40
|
-
nextParagraph.segments.unshift((0, roosterjs_content_model_dom_1.createSelectionMarker)(insertPoint.marker.format));
|
|
41
|
-
}
|
|
42
|
-
context.lastParagraph = undefined;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
else if (deleteResult !== 'range') {
|
|
46
|
-
if (isEmptyListItem(listItem_1)) {
|
|
47
|
-
(0, roosterjs_content_model_dom_1.mutateBlock)(listItem_1).levels.pop();
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
var newListItem = createNewListItem(context, listItem_1, listParent);
|
|
51
|
-
if (context.formatContext) {
|
|
52
|
-
context.formatContext.announceData = (0, roosterjs_content_model_api_1.getListAnnounceData)((0, tslib_1.__spreadArray)([
|
|
53
|
-
newListItem
|
|
54
|
-
], (0, tslib_1.__read)(path.slice(index + 1)), false));
|
|
55
|
-
}
|
|
56
37
|
}
|
|
57
38
|
}
|
|
58
|
-
rawEvent === null || rawEvent === void 0 ? void 0 : rawEvent.preventDefault();
|
|
59
39
|
context.deleteResult = 'range';
|
|
60
40
|
}
|
|
61
41
|
}
|
|
@@ -69,15 +49,24 @@ define(["require", "exports", "tslib", "roosterjs-content-model-api", "roosterjs
|
|
|
69
49
|
listItem.blocks[0].segments[1].segmentType === 'Br');
|
|
70
50
|
};
|
|
71
51
|
var createNewListItem = function (context, listItem, listParent) {
|
|
52
|
+
var _a;
|
|
72
53
|
var insertPoint = context.insertPoint;
|
|
73
54
|
var listIndex = listParent.blocks.indexOf(listItem);
|
|
74
|
-
var
|
|
55
|
+
var currentPara = insertPoint.paragraph;
|
|
56
|
+
var paraIndex = listItem.blocks.indexOf(currentPara);
|
|
57
|
+
var newParagraph = (0, splitParagraph_1.splitParagraph)(insertPoint);
|
|
75
58
|
var levels = createNewListLevel(listItem);
|
|
76
59
|
var newListItem = (0, roosterjs_content_model_dom_1.createListItem)(levels, insertPoint.marker.format);
|
|
77
60
|
newListItem.blocks.push(newParagraph);
|
|
61
|
+
var remainingBlockCount = listItem.blocks.length - paraIndex - 1;
|
|
62
|
+
if (paraIndex >= 0 && remainingBlockCount > 0) {
|
|
63
|
+
(_a = newListItem.blocks).push.apply(_a, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)((0, roosterjs_content_model_dom_1.mutateBlock)(listItem).blocks.splice(paraIndex + 1, remainingBlockCount)), false));
|
|
64
|
+
}
|
|
78
65
|
insertPoint.paragraph = newParagraph;
|
|
79
|
-
context.lastParagraph = newParagraph;
|
|
80
66
|
(0, roosterjs_content_model_dom_1.mutateBlock)(listParent).blocks.splice(listIndex + 1, 0, newListItem);
|
|
67
|
+
if (context.lastParagraph == currentPara) {
|
|
68
|
+
context.lastParagraph = newParagraph;
|
|
69
|
+
}
|
|
81
70
|
return newListItem;
|
|
82
71
|
};
|
|
83
72
|
var createNewListLevel = function (listItem) {
|
|
@@ -85,19 +74,5 @@ define(["require", "exports", "tslib", "roosterjs-content-model-api", "roosterjs
|
|
|
85
74
|
return (0, roosterjs_content_model_dom_1.createListLevel)(level.listType, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, level.format), { startNumberOverride: undefined, displayForDummyItem: undefined }), level.dataset);
|
|
86
75
|
});
|
|
87
76
|
};
|
|
88
|
-
var createNewParagraph = function (insertPoint) {
|
|
89
|
-
var _a;
|
|
90
|
-
var paragraph = insertPoint.paragraph, marker = insertPoint.marker;
|
|
91
|
-
var newParagraph = (0, roosterjs_content_model_dom_1.createParagraph)(false /*isImplicit*/, paragraph.format, paragraph.segmentFormat);
|
|
92
|
-
var markerIndex = paragraph.segments.indexOf(marker);
|
|
93
|
-
var segments = paragraph.segments.splice(markerIndex, paragraph.segments.length - markerIndex);
|
|
94
|
-
(_a = newParagraph.segments).push.apply(_a, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(segments), false));
|
|
95
|
-
(0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(paragraph);
|
|
96
|
-
if (paragraph.segments.every(function (x) { return x.segmentType == 'SelectionMarker'; })) {
|
|
97
|
-
paragraph.segments.push((0, roosterjs_content_model_dom_1.createBr)(marker.format));
|
|
98
|
-
}
|
|
99
|
-
(0, roosterjs_content_model_dom_1.normalizeParagraph)(newParagraph);
|
|
100
|
-
return newParagraph;
|
|
101
|
-
};
|
|
102
77
|
});
|
|
103
78
|
//# sourceMappingURL=handleEnterOnList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleEnterOnList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleEnterOnList.ts"],"names":[],"mappings":"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","sourcesContent":["import { getListAnnounceData } from 'roosterjs-content-model-api';\nimport {\n createBr,\n createListItem,\n createListLevel,\n createParagraph,\n createSelectionMarker,\n normalizeContentModel,\n normalizeParagraph,\n setParagraphNotImplicit,\n getClosestAncestorBlockGroupIndex,\n isBlockGroupOfType,\n mutateBlock,\n} from 'roosterjs-content-model-dom';\nimport type {\n ContentModelListItem,\n DeleteSelectionStep,\n InsertPoint,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelListItem,\n ShallowMutableContentModelListItem,\n ShallowMutableContentModelParagraph,\n ValidDeleteSelectionContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleEnterOnList: DeleteSelectionStep = context => {\n const { deleteResult } = context;\n if (\n deleteResult == 'nothingToDelete' ||\n deleteResult == 'notDeleted' ||\n deleteResult == 'range'\n ) {\n const { insertPoint, formatContext } = context;\n const { path } = insertPoint;\n const rawEvent = formatContext?.rawEvent;\n const index = getClosestAncestorBlockGroupIndex(path, ['ListItem'], ['TableCell']);\n\n const listItem = path[index];\n const listParent = path[index + 1];\n\n if (listItem && listItem.blockGroupType === 'ListItem' && listParent) {\n const listIndex = listParent.blocks.indexOf(listItem);\n const nextBlock = listParent.blocks[listIndex + 1];\n\n if (deleteResult == 'range' && nextBlock) {\n normalizeContentModel(listParent);\n\n const nextListItem = listParent.blocks[listIndex + 1];\n\n if (\n isBlockGroupOfType<ContentModelListItem>(nextListItem, 'ListItem') &&\n nextListItem.levels[0]\n ) {\n nextListItem.levels.forEach((level, index) => {\n level.format.startNumberOverride = undefined;\n level.dataset = listItem.levels[index]\n ? listItem.levels[index].dataset\n : {};\n });\n\n const lastParagraph = listItem.blocks[listItem.blocks.length - 1];\n const nextParagraph = nextListItem.blocks[0];\n\n if (\n nextParagraph.blockType === 'Paragraph' &&\n lastParagraph.blockType === 'Paragraph' &&\n lastParagraph.segments[lastParagraph.segments.length - 1].segmentType ===\n 'SelectionMarker'\n ) {\n mutateBlock(lastParagraph).segments.pop();\n\n nextParagraph.segments.unshift(\n createSelectionMarker(insertPoint.marker.format)\n );\n }\n\n context.lastParagraph = undefined;\n }\n } else if (deleteResult !== 'range') {\n if (isEmptyListItem(listItem)) {\n mutateBlock(listItem).levels.pop();\n } else {\n const newListItem = createNewListItem(context, listItem, listParent);\n\n if (context.formatContext) {\n context.formatContext.announceData = getListAnnounceData([\n newListItem,\n ...path.slice(index + 1),\n ]);\n }\n }\n }\n\n rawEvent?.preventDefault();\n context.deleteResult = 'range';\n }\n }\n};\n\nconst isEmptyListItem = (listItem: ReadonlyContentModelListItem) => {\n return (\n listItem.blocks.length === 1 &&\n listItem.blocks[0].blockType === 'Paragraph' &&\n listItem.blocks[0].segments.length === 2 &&\n listItem.blocks[0].segments[0].segmentType === 'SelectionMarker' &&\n listItem.blocks[0].segments[1].segmentType === 'Br'\n );\n};\n\nconst createNewListItem = (\n context: ValidDeleteSelectionContext,\n listItem: ReadonlyContentModelListItem,\n listParent: ReadonlyContentModelBlockGroup\n) => {\n const { insertPoint } = context;\n const listIndex = listParent.blocks.indexOf(listItem);\n const newParagraph = createNewParagraph(insertPoint);\n\n const levels = createNewListLevel(listItem);\n const newListItem: ShallowMutableContentModelListItem = createListItem(\n levels,\n insertPoint.marker.format\n );\n newListItem.blocks.push(newParagraph);\n insertPoint.paragraph = newParagraph;\n context.lastParagraph = newParagraph;\n mutateBlock(listParent).blocks.splice(listIndex + 1, 0, newListItem);\n\n return newListItem;\n};\n\nconst createNewListLevel = (listItem: ReadonlyContentModelListItem) => {\n return listItem.levels.map(level => {\n return createListLevel(\n level.listType,\n {\n ...level.format,\n startNumberOverride: undefined,\n displayForDummyItem: undefined, // When ENTER, we should create a new regular list item, so force its dummy item display to undefined\n },\n level.dataset\n );\n });\n};\n\nconst createNewParagraph = (insertPoint: InsertPoint) => {\n const { paragraph, marker } = insertPoint;\n const newParagraph: ShallowMutableContentModelParagraph = createParagraph(\n false /*isImplicit*/,\n paragraph.format,\n paragraph.segmentFormat\n );\n\n const markerIndex = paragraph.segments.indexOf(marker);\n const segments = paragraph.segments.splice(\n markerIndex,\n paragraph.segments.length - markerIndex\n );\n\n newParagraph.segments.push(...segments);\n\n setParagraphNotImplicit(paragraph);\n\n if (paragraph.segments.every(x => x.segmentType == 'SelectionMarker')) {\n paragraph.segments.push(createBr(marker.format));\n }\n\n normalizeParagraph(newParagraph);\n\n return newParagraph;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"handleEnterOnList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleEnterOnList.ts"],"names":[],"mappings":";;;;IAkBA;;OAEG;IACI,IAAM,iBAAiB,GAAwB,UAAA,OAAO;QACjD,IAAA,YAAY,GAAkB,OAAO,aAAzB,EAAE,WAAW,GAAK,OAAO,YAAZ,CAAa;QAE9C,IAAI,YAAY,IAAI,YAAY,IAAI,YAAY,IAAI,iBAAiB,EAAE;YAC3D,IAAA,IAAI,GAAK,WAAW,KAAhB,CAAiB;YAC7B,IAAM,KAAK,GAAG,IAAA,+DAAiC,EAC3C,IAAI,EACJ,CAAC,UAAU,CAAC,EACZ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CACnC,CAAC;YAEF,IAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAEnC,IAAI,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,cAAc,MAAK,UAAU,IAAI,UAAU,EAAE;gBAC/D,IAAI,QAAQ,GAAG,IAAA,yCAAW,EAAC,gBAAgB,CAAC,CAAC;gBAE7C,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE;oBAC3B,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;iBACzB;qBAAM;oBACH,QAAQ,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;oBAE5D,IAAI,OAAO,CAAC,aAAa,EAAE;wBACvB,OAAO,CAAC,aAAa,CAAC,YAAY,GAAG,IAAA,iDAAmB;4BACpD,QAAQ;+CACL,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,UAC1B,CAAC;qBACN;iBACJ;gBAED,IAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACtD,IAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;gBAEnD,IAAI,SAAS,EAAE;oBACX,IAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;oBAEtD,IACI,IAAA,gDAAkB,EAAuB,YAAY,EAAE,UAAU,CAAC;wBAClE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EACxB;wBACE,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,UAAA,KAAK;4BAC7B,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG,SAAS,CAAC;wBACjD,CAAC,CAAC,CAAC;qBACN;iBACJ;gBAED,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;aAClC;SACJ;IACL,CAAC,CAAC;IAjDW,QAAA,iBAAiB,qBAiD5B;IAEF,IAAM,eAAe,GAAG,UAAC,QAAsC;QAC3D,OAAO,CACH,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,WAAW;YAC5C,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YACxC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,iBAAiB;YAChE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CACtD,CAAC;IACN,CAAC,CAAC;IAEF,IAAM,iBAAiB,GAAG,UACtB,OAAoC,EACpC,QAAsC,EACtC,UAA0C;;QAElC,IAAA,WAAW,GAAK,OAAO,YAAZ,CAAa;QAChC,IAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC;QAC1C,IAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACvD,IAAM,YAAY,GAAG,IAAA,+BAAc,EAAC,WAAW,CAAC,CAAC;QAEjD,IAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAM,WAAW,GAAuC,IAAA,4CAAc,EAClE,MAAM,EACN,WAAW,CAAC,MAAM,CAAC,MAAM,CAC5B,CAAC;QAEF,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEtC,IAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC;QAEnE,IAAI,SAAS,IAAI,CAAC,IAAI,mBAAmB,GAAG,CAAC,EAAE;YAC3C,CAAA,KAAA,WAAW,CAAC,MAAM,CAAA,CAAC,IAAI,8DAChB,IAAA,yCAAW,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,mBAAmB,CAAC,WAC5E;SACL;QAED,WAAW,CAAC,SAAS,GAAG,YAAY,CAAC;QACrC,IAAA,yCAAW,EAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;QAErE,IAAI,OAAO,CAAC,aAAa,IAAI,WAAW,EAAE;YACtC,OAAO,CAAC,aAAa,GAAG,YAAY,CAAC;SACxC;QAED,OAAO,WAAW,CAAC;IACvB,CAAC,CAAC;IAEF,IAAM,kBAAkB,GAAG,UAAC,QAAsC;QAC9D,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK;YAC5B,OAAO,IAAA,6CAAe,EAClB,KAAK,CAAC,QAAQ,kDAEP,KAAK,CAAC,MAAM,KACf,mBAAmB,EAAE,SAAS,EAC9B,mBAAmB,EAAE,SAAS,KAElC,KAAK,CAAC,OAAO,CAChB,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAC","sourcesContent":["import { getListAnnounceData } from 'roosterjs-content-model-api';\nimport { splitParagraph } from '../utils/splitParagraph';\nimport {\n createListItem,\n createListLevel,\n getClosestAncestorBlockGroupIndex,\n isBlockGroupOfType,\n mutateBlock,\n} from 'roosterjs-content-model-dom';\nimport type {\n ContentModelListItem,\n DeleteSelectionStep,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelListItem,\n ShallowMutableContentModelListItem,\n ValidDeleteSelectionContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleEnterOnList: DeleteSelectionStep = context => {\n const { deleteResult, insertPoint } = context;\n\n if (deleteResult == 'notDeleted' || deleteResult == 'nothingToDelete') {\n const { path } = insertPoint;\n const index = getClosestAncestorBlockGroupIndex(\n path,\n ['ListItem'],\n ['TableCell', 'FormatContainer']\n );\n\n const readonlyListItem = path[index];\n const listParent = path[index + 1];\n\n if (readonlyListItem?.blockGroupType === 'ListItem' && listParent) {\n let listItem = mutateBlock(readonlyListItem);\n\n if (isEmptyListItem(listItem)) {\n listItem.levels.pop();\n } else {\n listItem = createNewListItem(context, listItem, listParent);\n\n if (context.formatContext) {\n context.formatContext.announceData = getListAnnounceData([\n listItem,\n ...path.slice(index + 1),\n ]);\n }\n }\n\n const listIndex = listParent.blocks.indexOf(listItem);\n const nextBlock = listParent.blocks[listIndex + 1];\n\n if (nextBlock) {\n const nextListItem = listParent.blocks[listIndex + 1];\n\n if (\n isBlockGroupOfType<ContentModelListItem>(nextListItem, 'ListItem') &&\n nextListItem.levels[0]\n ) {\n nextListItem.levels.forEach(level => {\n level.format.startNumberOverride = undefined;\n });\n }\n }\n\n context.deleteResult = 'range';\n }\n }\n};\n\nconst isEmptyListItem = (listItem: ReadonlyContentModelListItem) => {\n return (\n listItem.blocks.length === 1 &&\n listItem.blocks[0].blockType === 'Paragraph' &&\n listItem.blocks[0].segments.length === 2 &&\n listItem.blocks[0].segments[0].segmentType === 'SelectionMarker' &&\n listItem.blocks[0].segments[1].segmentType === 'Br'\n );\n};\n\nconst createNewListItem = (\n context: ValidDeleteSelectionContext,\n listItem: ReadonlyContentModelListItem,\n listParent: ReadonlyContentModelBlockGroup\n) => {\n const { insertPoint } = context;\n const listIndex = listParent.blocks.indexOf(listItem);\n const currentPara = insertPoint.paragraph;\n const paraIndex = listItem.blocks.indexOf(currentPara);\n const newParagraph = splitParagraph(insertPoint);\n\n const levels = createNewListLevel(listItem);\n const newListItem: ShallowMutableContentModelListItem = createListItem(\n levels,\n insertPoint.marker.format\n );\n\n newListItem.blocks.push(newParagraph);\n\n const remainingBlockCount = listItem.blocks.length - paraIndex - 1;\n\n if (paraIndex >= 0 && remainingBlockCount > 0) {\n newListItem.blocks.push(\n ...mutateBlock(listItem).blocks.splice(paraIndex + 1, remainingBlockCount)\n );\n }\n\n insertPoint.paragraph = newParagraph;\n mutateBlock(listParent).blocks.splice(listIndex + 1, 0, newListItem);\n\n if (context.lastParagraph == currentPara) {\n context.lastParagraph = newParagraph;\n }\n\n return newListItem;\n};\n\nconst createNewListLevel = (listItem: ReadonlyContentModelListItem) => {\n return listItem.levels.map(level => {\n return createListLevel(\n level.listType,\n {\n ...level.format,\n startNumberOverride: undefined,\n displayForDummyItem: undefined, // When ENTER, we should create a new regular list item, so force its dummy item display to undefined\n },\n level.dataset\n );\n });\n};\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
define(["require", "exports", "roosterjs-content-model-dom", "../utils/splitParagraph"], function (require, exports, roosterjs_content_model_dom_1, splitParagraph_1) {
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.handleEnterOnParagraph = void 0;
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
var handleEnterOnParagraph = function (context) {
|
|
9
|
+
var _a, _b;
|
|
10
|
+
var _c = context.insertPoint, paragraph = _c.paragraph, path = _c.path;
|
|
11
|
+
var paraIndex = (_b = (_a = path[0]) === null || _a === void 0 ? void 0 : _a.blocks.indexOf(paragraph)) !== null && _b !== void 0 ? _b : -1;
|
|
12
|
+
if (context.deleteResult == 'notDeleted' && paraIndex >= 0) {
|
|
13
|
+
var newPara = (0, splitParagraph_1.splitParagraph)(context.insertPoint);
|
|
14
|
+
(0, roosterjs_content_model_dom_1.mutateBlock)(path[0]).blocks.splice(paraIndex + 1, 0, newPara);
|
|
15
|
+
context.deleteResult = 'range';
|
|
16
|
+
context.lastParagraph = newPara;
|
|
17
|
+
context.insertPoint.paragraph = newPara;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
exports.handleEnterOnParagraph = handleEnterOnParagraph;
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=handleEnterOnParagraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleEnterOnParagraph.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleEnterOnParagraph.ts"],"names":[],"mappings":";;;;IAIA;;OAEG;IACI,IAAM,sBAAsB,GAAwB,UAAA,OAAO;;QACxD,IAAA,KAAsB,OAAO,CAAC,WAAW,EAAvC,SAAS,eAAA,EAAE,IAAI,UAAwB,CAAC;QAChD,IAAM,SAAS,GAAG,MAAA,MAAA,IAAI,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,mCAAI,CAAC,CAAC,CAAC;QAE3D,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,IAAI,SAAS,IAAI,CAAC,EAAE;YACxD,IAAM,OAAO,GAAG,IAAA,+BAAc,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAEpD,IAAA,yCAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAE9D,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;YAC/B,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC;YAChC,OAAO,CAAC,WAAW,CAAC,SAAS,GAAG,OAAO,CAAC;SAC3C;IACL,CAAC,CAAC;IAbW,QAAA,sBAAsB,0BAajC","sourcesContent":["import { mutateBlock } from 'roosterjs-content-model-dom';\nimport { splitParagraph } from '../utils/splitParagraph';\nimport type { DeleteSelectionStep } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleEnterOnParagraph: DeleteSelectionStep = context => {\n const { paragraph, path } = context.insertPoint;\n const paraIndex = path[0]?.blocks.indexOf(paragraph) ?? -1;\n\n if (context.deleteResult == 'notDeleted' && paraIndex >= 0) {\n const newPara = splitParagraph(context.insertPoint);\n\n mutateBlock(path[0]).blocks.splice(paraIndex + 1, 0, newPara);\n\n context.deleteResult = 'range';\n context.lastParagraph = newPara;\n context.insertPoint.paragraph = newPara;\n }\n};\n"]}
|
|
@@ -21,7 +21,7 @@ define(["require", "exports", "./deleteSteps/deleteAllSegmentBefore", "./deleteS
|
|
|
21
21
|
rawEvent: rawEvent,
|
|
22
22
|
changeSource: roosterjs_content_model_dom_1.ChangeSource.Keyboard,
|
|
23
23
|
getChangeData: function () { return rawEvent.which; },
|
|
24
|
-
scrollCaretIntoView:
|
|
24
|
+
scrollCaretIntoView: true,
|
|
25
25
|
apiName: rawEvent.key == 'Delete' ? 'handleDeleteKey' : 'handleBackspaceKey',
|
|
26
26
|
});
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboardDelete.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/keyboardDelete.ts"],"names":[],"mappings":";;;;IAwBA;;;;;;OAMG;IACH,SAAgB,cAAc,CAAC,MAAe,EAAE,QAAuB;QACnE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAM,SAAS,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAE3C,IAAI,4BAA4B,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;YACnD,MAAM,CAAC,kBAAkB,CACrB,UAAC,KAAK,EAAE,OAAO;gBACX,IAAM,MAAM,GAAG,IAAA,6CAAe,EAC1B,KAAK,EACL,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,EACzD,OAAO,CACV,CAAC,YAAY,CAAC;gBAEf,OAAO,GAAG,IAAA,qDAAyB,EAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC9E,OAAO,OAAO,CAAC;YACnB,CAAC,EACD;gBACI,QAAQ,UAAA;gBACR,YAAY,EAAE,0CAAY,CAAC,QAAQ;gBACnC,aAAa,EAAE,cAAM,OAAA,QAAQ,CAAC,KAAK,EAAd,CAAc;gBACnC,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"keyboardDelete.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/keyboardDelete.ts"],"names":[],"mappings":"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","sourcesContent":["import { deleteAllSegmentBefore } from './deleteSteps/deleteAllSegmentBefore';\nimport { deleteEmptyQuote } from './deleteSteps/deleteEmptyQuote';\nimport { deleteList } from './deleteSteps/deleteList';\nimport {\n ChangeSource,\n deleteSelection,\n isModifierKey,\n isNodeOfType,\n} from 'roosterjs-content-model-dom';\nimport {\n handleKeyboardEventResult,\n shouldDeleteAllSegmentsBefore,\n shouldDeleteWord,\n} from './handleKeyboardEventCommon';\nimport {\n backwardDeleteWordSelection,\n forwardDeleteWordSelection,\n} from './deleteSteps/deleteWordSelection';\nimport {\n backwardDeleteCollapsedSelection,\n forwardDeleteCollapsedSelection,\n} from './deleteSteps/deleteCollapsedSelection';\nimport type { DOMSelection, DeleteSelectionStep, IEditor } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Do keyboard event handling for DELETE/BACKSPACE key\n * @param editor The editor object\n * @param rawEvent DOM keyboard event\n * @returns True if the event is handled by content model, otherwise false\n */\nexport function keyboardDelete(editor: IEditor, rawEvent: KeyboardEvent) {\n let handled = false;\n const selection = editor.getDOMSelection();\n\n if (shouldDeleteWithContentModel(selection, rawEvent)) {\n editor.formatContentModel(\n (model, context) => {\n const result = deleteSelection(\n model,\n getDeleteSteps(rawEvent, !!editor.getEnvironment().isMac),\n context\n ).deleteResult;\n\n handled = handleKeyboardEventResult(editor, model, rawEvent, result, context);\n return handled;\n },\n {\n rawEvent,\n changeSource: ChangeSource.Keyboard,\n getChangeData: () => rawEvent.which,\n scrollCaretIntoView: true,\n apiName: rawEvent.key == 'Delete' ? 'handleDeleteKey' : 'handleBackspaceKey',\n }\n );\n }\n\n return handled;\n}\n\nfunction getDeleteSteps(rawEvent: KeyboardEvent, isMac: boolean): (DeleteSelectionStep | null)[] {\n const isForward = rawEvent.key == 'Delete';\n const deleteAllSegmentBeforeStep =\n shouldDeleteAllSegmentsBefore(rawEvent) && !isForward ? deleteAllSegmentBefore : null;\n const deleteWordSelection = shouldDeleteWord(rawEvent, isMac)\n ? isForward\n ? forwardDeleteWordSelection\n : backwardDeleteWordSelection\n : null;\n const deleteCollapsedSelection = isForward\n ? forwardDeleteCollapsedSelection\n : backwardDeleteCollapsedSelection;\n const deleteQuote = !isForward ? deleteEmptyQuote : null;\n return [\n deleteAllSegmentBeforeStep,\n deleteWordSelection,\n isForward ? null : deleteList,\n deleteCollapsedSelection,\n deleteQuote,\n ];\n}\n\nfunction shouldDeleteWithContentModel(selection: DOMSelection | null, rawEvent: KeyboardEvent) {\n if (!selection) {\n return false; // Nothing to delete\n } else if (selection.type != 'range' || !selection.range.collapsed) {\n return true; // Selection is not collapsed, need to delete all selections\n } else {\n const range = selection.range;\n\n // When selection is collapsed and is in middle of text node, no need to use Content Model to delete\n return !(\n isNodeOfType(range.startContainer, 'TEXT_NODE') &&\n !isModifierKey(rawEvent) &&\n (canDeleteBefore(rawEvent, range) || canDeleteAfter(rawEvent, range))\n );\n }\n}\n\nfunction canDeleteBefore(rawEvent: KeyboardEvent, range: Range) {\n return rawEvent.key == 'Backspace' && range.startOffset > 1;\n}\n\nfunction canDeleteAfter(rawEvent: KeyboardEvent, range: Range) {\n return (\n rawEvent.key == 'Delete' &&\n range.startOffset < (range.startContainer.nodeValue?.length ?? 0) - 1\n );\n}\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
define(["require", "exports", "./deleteSteps/deleteEmptyQuote", "roosterjs-content-model-dom", "./inputSteps/handleEnterOnList", "./inputSteps/handleEnterOnParagraph"], function (require, exports, deleteEmptyQuote_1, roosterjs_content_model_dom_1, handleEnterOnList_1, handleEnterOnParagraph_1) {
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.keyboardEnter = void 0;
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
function keyboardEnter(editor, rawEvent, handleNormalEnter) {
|
|
9
|
+
var selection = editor.getDOMSelection();
|
|
10
|
+
editor.formatContentModel(function (model, context) {
|
|
11
|
+
var _a;
|
|
12
|
+
// 1. delete the expanded selection if any, then merge paragraph
|
|
13
|
+
var result = (0, roosterjs_content_model_dom_1.deleteSelection)(model, [], context);
|
|
14
|
+
// 2. Add line break
|
|
15
|
+
if (selection && selection.type != 'table') {
|
|
16
|
+
// For ENTER key, although we may have deleted something, since we still need to split the line, we always treat it as not delete
|
|
17
|
+
// so further delete steps can keep working
|
|
18
|
+
result.deleteResult = 'notDeleted';
|
|
19
|
+
var steps = rawEvent.shiftKey ? [] : [handleEnterOnList_1.handleEnterOnList, deleteEmptyQuote_1.deleteEmptyQuote];
|
|
20
|
+
if (handleNormalEnter) {
|
|
21
|
+
steps.push(handleEnterOnParagraph_1.handleEnterOnParagraph);
|
|
22
|
+
}
|
|
23
|
+
(0, roosterjs_content_model_dom_1.runEditSteps)(steps, result);
|
|
24
|
+
}
|
|
25
|
+
if (result.deleteResult == 'range') {
|
|
26
|
+
// We have deleted something, next input should inherit the segment format from deleted content, so set pending format here
|
|
27
|
+
context.newPendingFormat = (_a = result.insertPoint) === null || _a === void 0 ? void 0 : _a.marker.format;
|
|
28
|
+
(0, roosterjs_content_model_dom_1.normalizeContentModel)(model);
|
|
29
|
+
rawEvent.preventDefault();
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}, {
|
|
36
|
+
rawEvent: rawEvent,
|
|
37
|
+
scrollCaretIntoView: true,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
exports.keyboardEnter = keyboardEnter;
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=keyboardEnter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboardEnter.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/keyboardEnter.ts"],"names":[],"mappings":";;;;IAMA;;OAEG;IACH,SAAgB,aAAa,CACzB,MAAe,EACf,QAAuB,EACvB,iBAA0B;QAE1B,IAAM,SAAS,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAE3C,MAAM,CAAC,kBAAkB,CACrB,UAAC,KAAK,EAAE,OAAO;;YACX,gEAAgE;YAChE,IAAM,MAAM,GAAG,IAAA,6CAAe,EAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YAEnD,oBAAoB;YACpB,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,IAAI,OAAO,EAAE;gBACxC,iIAAiI;gBACjI,2CAA2C;gBAC3C,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;gBAEnC,IAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qCAAiB,EAAE,mCAAgB,CAAC,CAAC;gBAE7E,IAAI,iBAAiB,EAAE;oBACnB,KAAK,CAAC,IAAI,CAAC,+CAAsB,CAAC,CAAC;iBACtC;gBAED,IAAA,0CAAY,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;aAC/B;YAED,IAAI,MAAM,CAAC,YAAY,IAAI,OAAO,EAAE;gBAChC,2HAA2H;gBAC3H,OAAO,CAAC,gBAAgB,GAAG,MAAA,MAAM,CAAC,WAAW,0CAAE,MAAM,CAAC,MAAM,CAAC;gBAE7D,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC;gBAE7B,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;aACf;iBAAM;gBACH,OAAO,KAAK,CAAC;aAChB;QACL,CAAC,EACD;YACI,QAAQ,UAAA;YACR,mBAAmB,EAAE,IAAI;SAC5B,CACJ,CAAC;IACN,CAAC;IA5CD,sCA4CC","sourcesContent":["import { deleteEmptyQuote } from './deleteSteps/deleteEmptyQuote';\nimport { deleteSelection, normalizeContentModel, runEditSteps } from 'roosterjs-content-model-dom';\nimport { handleEnterOnList } from './inputSteps/handleEnterOnList';\nimport { handleEnterOnParagraph } from './inputSteps/handleEnterOnParagraph';\nimport type { IEditor } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function keyboardEnter(\n editor: IEditor,\n rawEvent: KeyboardEvent,\n handleNormalEnter: boolean\n) {\n const selection = editor.getDOMSelection();\n\n editor.formatContentModel(\n (model, context) => {\n // 1. delete the expanded selection if any, then merge paragraph\n const result = deleteSelection(model, [], context);\n\n // 2. Add line break\n if (selection && selection.type != 'table') {\n // For ENTER key, although we may have deleted something, since we still need to split the line, we always treat it as not delete\n // so further delete steps can keep working\n result.deleteResult = 'notDeleted';\n\n const steps = rawEvent.shiftKey ? [] : [handleEnterOnList, deleteEmptyQuote];\n\n if (handleNormalEnter) {\n steps.push(handleEnterOnParagraph);\n }\n\n runEditSteps(steps, result);\n }\n\n if (result.deleteResult == 'range') {\n // We have deleted something, next input should inherit the segment format from deleted content, so set pending format here\n context.newPendingFormat = result.insertPoint?.marker.format;\n\n normalizeContentModel(model);\n\n rawEvent.preventDefault();\n return true;\n } else {\n return false;\n }\n },\n {\n rawEvent,\n scrollCaretIntoView: true,\n }\n );\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "
|
|
1
|
+
define(["require", "exports", "roosterjs-content-model-dom"], function (require, exports, roosterjs_content_model_dom_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.keyboardInput = void 0;
|
|
@@ -11,10 +11,7 @@ define(["require", "exports", "./deleteSteps/deleteEmptyQuote", "roosterjs-conte
|
|
|
11
11
|
editor.takeSnapshot();
|
|
12
12
|
editor.formatContentModel(function (model, context) {
|
|
13
13
|
var _a;
|
|
14
|
-
var result = (0, roosterjs_content_model_dom_1.deleteSelection)(model,
|
|
15
|
-
// We have deleted selection then we will let browser to handle the input.
|
|
16
|
-
// With this combined operation, we don't wan to mass up the cached model so clear it
|
|
17
|
-
context.clearModelCache = true;
|
|
14
|
+
var result = (0, roosterjs_content_model_dom_1.deleteSelection)(model, [], context);
|
|
18
15
|
// Skip undo snapshot here and add undo snapshot before the operation so that we don't add another undo snapshot in middle of this replace operation
|
|
19
16
|
context.skipUndoSnapshot = true;
|
|
20
17
|
if (result.deleteResult == 'range') {
|
|
@@ -28,32 +25,23 @@ define(["require", "exports", "./deleteSteps/deleteEmptyQuote", "roosterjs-conte
|
|
|
28
25
|
return false;
|
|
29
26
|
}
|
|
30
27
|
}, {
|
|
31
|
-
scrollCaretIntoView:
|
|
28
|
+
scrollCaretIntoView: true,
|
|
32
29
|
rawEvent: rawEvent,
|
|
33
30
|
});
|
|
34
31
|
return true;
|
|
35
32
|
}
|
|
36
33
|
}
|
|
37
34
|
exports.keyboardInput = keyboardInput;
|
|
38
|
-
function getInputSteps(selection, rawEvent) {
|
|
39
|
-
return shouldHandleEnterKey(selection, rawEvent) ? [handleEnterOnList_1.handleEnterOnList, deleteEmptyQuote_1.deleteEmptyQuote] : [];
|
|
40
|
-
}
|
|
41
35
|
function shouldInputWithContentModel(selection, rawEvent) {
|
|
42
36
|
if (!selection) {
|
|
43
37
|
return false; // Nothing to delete
|
|
44
38
|
}
|
|
45
|
-
else if (!(0, roosterjs_content_model_dom_1.isModifierKey)(rawEvent) &&
|
|
46
|
-
|
|
47
|
-
return (selection.type != 'range' ||
|
|
48
|
-
!selection.range.collapsed ||
|
|
49
|
-
shouldHandleEnterKey(selection, rawEvent));
|
|
39
|
+
else if (!(0, roosterjs_content_model_dom_1.isModifierKey)(rawEvent) && (rawEvent.key == 'Space' || rawEvent.key.length == 1)) {
|
|
40
|
+
return selection.type != 'range' || !selection.range.collapsed;
|
|
50
41
|
}
|
|
51
42
|
else {
|
|
52
43
|
return false;
|
|
53
44
|
}
|
|
54
45
|
}
|
|
55
|
-
var shouldHandleEnterKey = function (selection, rawEvent) {
|
|
56
|
-
return selection && selection.type == 'range' && rawEvent.key == 'Enter' && !rawEvent.shiftKey;
|
|
57
|
-
};
|
|
58
46
|
});
|
|
59
47
|
//# sourceMappingURL=keyboardInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboardInput.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/keyboardInput.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"keyboardInput.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/keyboardInput.ts"],"names":[],"mappings":";;;;IAGA;;OAEG;IACH,SAAgB,aAAa,CAAC,MAAe,EAAE,QAAuB;QAClE,IAAM,SAAS,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAE3C,IAAI,2BAA2B,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;YAClD,MAAM,CAAC,YAAY,EAAE,CAAC;YAEtB,MAAM,CAAC,kBAAkB,CACrB,UAAC,KAAK,EAAE,OAAO;;gBACX,IAAM,MAAM,GAAG,IAAA,6CAAe,EAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBAEnD,oJAAoJ;gBACpJ,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAEhC,IAAI,MAAM,CAAC,YAAY,IAAI,OAAO,EAAE;oBAChC,2HAA2H;oBAC3H,OAAO,CAAC,gBAAgB,GAAG,MAAA,MAAM,CAAC,WAAW,0CAAE,MAAM,CAAC,MAAM,CAAC;oBAE7D,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC;oBAE7B,sFAAsF;oBACtF,OAAO,IAAI,CAAC;iBACf;qBAAM;oBACH,OAAO,KAAK,CAAC;iBAChB;YACL,CAAC,EACD;gBACI,mBAAmB,EAAE,IAAI;gBACzB,QAAQ,UAAA;aACX,CACJ,CAAC;YAEF,OAAO,IAAI,CAAC;SACf;IACL,CAAC;IAjCD,sCAiCC;IAED,SAAS,2BAA2B,CAAC,SAA8B,EAAE,QAAuB;QACxF,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO,KAAK,CAAC,CAAC,oBAAoB;SACrC;aAAM,IAAI,CAAC,IAAA,2CAAa,EAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE;YAC1F,OAAO,SAAS,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;SAClE;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC","sourcesContent":["import { deleteSelection, isModifierKey, normalizeContentModel } from 'roosterjs-content-model-dom';\nimport type { DOMSelection, IEditor } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function keyboardInput(editor: IEditor, rawEvent: KeyboardEvent) {\n const selection = editor.getDOMSelection();\n\n if (shouldInputWithContentModel(selection, rawEvent)) {\n editor.takeSnapshot();\n\n editor.formatContentModel(\n (model, context) => {\n const result = deleteSelection(model, [], context);\n\n // Skip undo snapshot here and add undo snapshot before the operation so that we don't add another undo snapshot in middle of this replace operation\n context.skipUndoSnapshot = true;\n\n if (result.deleteResult == 'range') {\n // We have deleted something, next input should inherit the segment format from deleted content, so set pending format here\n context.newPendingFormat = result.insertPoint?.marker.format;\n\n normalizeContentModel(model);\n\n // Do not preventDefault since we still want browser to handle the final input for now\n return true;\n } else {\n return false;\n }\n },\n {\n scrollCaretIntoView: true,\n rawEvent,\n }\n );\n\n return true;\n }\n}\n\nfunction shouldInputWithContentModel(selection: DOMSelection | null, rawEvent: KeyboardEvent) {\n if (!selection) {\n return false; // Nothing to delete\n } else if (!isModifierKey(rawEvent) && (rawEvent.key == 'Space' || rawEvent.key.length == 1)) {\n return selection.type != 'range' || !selection.range.collapsed;\n } else {\n return false;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboardTab.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/keyboardTab.ts"],"names":[],"mappings":";;;;IAcA;;OAEG;IACH,SAAgB,WAAW,CAAC,MAAe,EAAE,QAAuB;QAChE,IAAM,SAAS,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAE3C,QAAQ,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,EAAE;YACrB,KAAK,OAAO;gBACR,MAAM,CAAC,kBAAkB,CACrB,UAAC,KAAK,EAAE,OAAO;oBACX,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC/C,CAAC,EACD;oBACI,OAAO,EAAE,cAAc;iBAC1B,CACJ,CAAC;gBAEF,OAAO,IAAI,CAAC;YAChB,KAAK,OAAO;gBACR,MAAM,CAAC,kBAAkB,CACrB,UAAA,KAAK;oBACD,OAAO,IAAA,mCAAgB,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC7C,CAAC,EACD;oBACI,OAAO,EAAE,cAAc;iBAC1B,CACJ,CAAC;gBACF,OAAO,IAAI,CAAC;SACnB;IACL,CAAC;IA1BD,kCA0BC;IAED;;;;;;OAMG;IACH,SAAS,SAAS,CACd,
|
|
1
|
+
{"version":3,"file":"keyboardTab.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/keyboardTab.ts"],"names":[],"mappings":";;;;IAcA;;OAEG;IACH,SAAgB,WAAW,CAAC,MAAe,EAAE,QAAuB;QAChE,IAAM,SAAS,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAE3C,QAAQ,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,EAAE;YACrB,KAAK,OAAO;gBACR,MAAM,CAAC,kBAAkB,CACrB,UAAC,KAAK,EAAE,OAAO;oBACX,OAAO,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC/C,CAAC,EACD;oBACI,OAAO,EAAE,cAAc;iBAC1B,CACJ,CAAC;gBAEF,OAAO,IAAI,CAAC;YAChB,KAAK,OAAO;gBACR,MAAM,CAAC,kBAAkB,CACrB,UAAA,KAAK;oBACD,OAAO,IAAA,mCAAgB,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC7C,CAAC,EACD;oBACI,OAAO,EAAE,cAAc;iBAC1B,CACJ,CAAC;gBACF,OAAO,IAAI,CAAC;SACnB;IACL,CAAC;IA1BD,kCA0BC;IAED;;;;;;OAMG;IACH,SAAS,SAAS,CACd,KAAmC,EACnC,QAAuB,EACvB,OAAkC;QAElC,IAAM,MAAM,GAAG,IAAA,kDAAoB,EAC/B,KAAK,EACL,CAAC,UAAU,EAAE,WAAW,CAAC,EACzB,EAAE,CACL,CAAC;QACF,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,IAAA,iDAAmB,EAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACrE,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;aAAM,IAAI,IAAA,gDAAkB,EAAwB,KAAK,EAAE,WAAW,CAAC,EAAE;YACtE,OAAO,IAAA,2CAAoB,EAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;SACvD;aAAM,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,MAAK,WAAW,EAAE;YACzC,OAAO,IAAA,2CAAoB,EAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;SAChE;aAAM,IAAI,IAAA,gDAAkB,EAAuB,KAAK,EAAE,UAAU,CAAC,EAAE;YACpE,OAAO,IAAA,iCAAe,EAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;SAC3D;QACD,OAAO,KAAK,CAAC;IACjB,CAAC","sourcesContent":["import { getOperationalBlocks, isBlockGroupOfType } from 'roosterjs-content-model-dom';\nimport { handleTabOnList } from './tabUtils/handleTabOnList';\nimport { handleTabOnParagraph } from './tabUtils/handleTabOnParagraph';\nimport { handleTabOnTable } from './tabUtils/handleTabOnTable';\nimport { handleTabOnTableCell } from './tabUtils/handleTabOnTableCell';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport type {\n ContentModelListItem,\n ContentModelTableCell,\n FormatContentModelContext,\n IEditor,\n ReadonlyContentModelDocument,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function keyboardTab(editor: IEditor, rawEvent: KeyboardEvent) {\n const selection = editor.getDOMSelection();\n\n switch (selection?.type) {\n case 'range':\n editor.formatContentModel(\n (model, context) => {\n return handleTab(model, rawEvent, context);\n },\n {\n apiName: 'handleTabKey',\n }\n );\n\n return true;\n case 'table':\n editor.formatContentModel(\n model => {\n return handleTabOnTable(model, rawEvent);\n },\n {\n apiName: 'handleTabKey',\n }\n );\n return true;\n }\n}\n\n/**\n * If multiple blocks are selected, indent or outdent the selected blocks with setModelIndentation.\n * If only one block is selected:\n * - If it is a table cell, call handleTabOnTableCell to handle the tab key.\n * - If it is a paragraph, call handleTabOnParagraph to handle the tab key.\n * - If it is a list item, call handleTabOnList to handle the tab key.\n */\nfunction handleTab(\n model: ReadonlyContentModelDocument,\n rawEvent: KeyboardEvent,\n context: FormatContentModelContext\n) {\n const blocks = getOperationalBlocks<ContentModelListItem | ContentModelTableCell>(\n model,\n ['ListItem', 'TableCell'],\n []\n );\n const block = blocks.length > 0 ? blocks[0].block : undefined;\n\n if (blocks.length > 1) {\n setModelIndentation(model, rawEvent.shiftKey ? 'outdent' : 'indent');\n rawEvent.preventDefault();\n return true;\n } else if (isBlockGroupOfType<ContentModelTableCell>(block, 'TableCell')) {\n return handleTabOnTableCell(model, block, rawEvent);\n } else if (block?.blockType === 'Paragraph') {\n return handleTabOnParagraph(model, block, rawEvent, context);\n } else if (isBlockGroupOfType<ContentModelListItem>(block, 'ListItem')) {\n return handleTabOnList(model, block, rawEvent, context);\n }\n return false;\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FormatContentModelContext, ReadonlyContentModelDocument, ReadonlyContentModelListItem } from 'roosterjs-content-model-types';
|
|
2
2
|
/**
|
|
3
3
|
* 1. When the selection is collapsed and the cursor is at start of a list item, call setModelIndentation.
|
|
4
4
|
* 2. Otherwise call handleTabOnParagraph.
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
7
|
-
export declare function handleTabOnList(model:
|
|
7
|
+
export declare function handleTabOnList(model: ReadonlyContentModelDocument, listItem: ReadonlyContentModelListItem, rawEvent: KeyboardEvent, context?: FormatContentModelContext): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleTabOnList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnList.ts"],"names":[],"mappings":";;;;IAQA;;;;OAIG;IACH,SAAgB,eAAe,CAC3B,
|
|
1
|
+
{"version":3,"file":"handleTabOnList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnList.ts"],"names":[],"mappings":";;;;IAQA;;;;OAIG;IACH,SAAgB,eAAe,CAC3B,KAAmC,EACnC,QAAsC,EACtC,QAAuB,EACvB,OAAmC;QAEnC,IAAM,iBAAiB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC1D,IACI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;YACjC,iBAAiB,CAAC,MAAM,IAAI,CAAC;YAC7B,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,WAAW,EAChD;YACE,OAAO,IAAA,2CAAoB,EAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;SAC/E;aAAM;YACH,IAAA,iDAAmB,EACf,KAAK,EACL,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EACxC,SAAS,CAAC,UAAU,EACpB,OAAO,CACV,CAAC;YACF,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;IACL,CAAC;IAvBD,0CAuBC;IAED,SAAS,sBAAsB,CAAC,QAAsC;QAClE,OAAO,CACH,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,WAAW;YAC3C,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,iBAAiB,CAClE,CAAC;IACN,CAAC;IAED,SAAS,qBAAqB,CAAC,QAAsC;QACjE,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CACzB,UAAA,KAAK;YACD,OAAA,KAAK,CAAC,SAAS,IAAI,WAAW,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAA,OAAO,IAAI,OAAA,OAAO,CAAC,UAAU,EAAlB,CAAkB,CAAC;QAApF,CAAoF,CAC3F,CAAC;IACN,CAAC","sourcesContent":["import { handleTabOnParagraph } from './handleTabOnParagraph';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport type {\n FormatContentModelContext,\n ReadonlyContentModelDocument,\n ReadonlyContentModelListItem,\n} from 'roosterjs-content-model-types';\n\n/**\n * 1. When the selection is collapsed and the cursor is at start of a list item, call setModelIndentation.\n * 2. Otherwise call handleTabOnParagraph.\n * @internal\n */\nexport function handleTabOnList(\n model: ReadonlyContentModelDocument,\n listItem: ReadonlyContentModelListItem,\n rawEvent: KeyboardEvent,\n context?: FormatContentModelContext\n) {\n const selectedParagraph = findSelectedParagraph(listItem);\n if (\n !isMarkerAtStartOfBlock(listItem) &&\n selectedParagraph.length == 1 &&\n selectedParagraph[0].blockType === 'Paragraph'\n ) {\n return handleTabOnParagraph(model, selectedParagraph[0], rawEvent, context);\n } else {\n setModelIndentation(\n model,\n rawEvent.shiftKey ? 'outdent' : 'indent',\n undefined /*length*/,\n context\n );\n rawEvent.preventDefault();\n return true;\n }\n}\n\nfunction isMarkerAtStartOfBlock(listItem: ReadonlyContentModelListItem) {\n return (\n listItem.blocks[0].blockType == 'Paragraph' &&\n listItem.blocks[0].segments[0].segmentType == 'SelectionMarker'\n );\n}\n\nfunction findSelectedParagraph(listItem: ReadonlyContentModelListItem) {\n return listItem.blocks.filter(\n block =>\n block.blockType == 'Paragraph' && block.segments.some(segment => segment.isSelected)\n );\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FormatContentModelContext, ReadonlyContentModelDocument, ReadonlyContentModelParagraph } from 'roosterjs-content-model-types';
|
|
2
2
|
/**
|
|
3
3
|
* @internal
|
|
4
4
|
The handleTabOnParagraph function will handle the tab key in following scenarios:
|
|
@@ -14,4 +14,4 @@ import type { ContentModelDocument, ContentModelParagraph, FormatContentModelCon
|
|
|
14
14
|
* 4. When the selection is not collapsed, replace the selected range with a 4 space.
|
|
15
15
|
* 5. When the selection is not collapsed, but all segments are selected, call setModelIndention function to outdent the whole paragraph
|
|
16
16
|
*/
|
|
17
|
-
export declare function handleTabOnParagraph(model:
|
|
17
|
+
export declare function handleTabOnParagraph(model: ReadonlyContentModelDocument, paragraph: ReadonlyContentModelParagraph, rawEvent: KeyboardEvent, context?: FormatContentModelContext): boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
define(["require", "exports", "roosterjs-content-model-
|
|
1
|
+
define(["require", "exports", "roosterjs-content-model-api", "roosterjs-content-model-dom"], function (require, exports, roosterjs_content_model_api_1, roosterjs_content_model_dom_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.handleTabOnParagraph = void 0;
|
|
@@ -49,7 +49,7 @@ define(["require", "exports", "roosterjs-content-model-dom", "roosterjs-content-
|
|
|
49
49
|
var firstSelectedSegment = paragraph.segments[firstSelectedSegmentIndex_1];
|
|
50
50
|
var spaceText = (0, roosterjs_content_model_dom_1.createText)(rawEvent.shiftKey ? tabSpaces : space, firstSelectedSegment.format);
|
|
51
51
|
var marker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(firstSelectedSegment.format);
|
|
52
|
-
paragraph.segments.splice(firstSelectedSegmentIndex_1, lastSelectedSegmentIndex_1 - firstSelectedSegmentIndex_1 + 1, spaceText, marker);
|
|
52
|
+
(0, roosterjs_content_model_dom_1.mutateBlock)(paragraph).segments.splice(firstSelectedSegmentIndex_1, lastSelectedSegmentIndex_1 - firstSelectedSegmentIndex_1 + 1, spaceText, marker);
|
|
53
53
|
}
|
|
54
54
|
else {
|
|
55
55
|
return false;
|
|
@@ -60,18 +60,20 @@ define(["require", "exports", "roosterjs-content-model-dom", "roosterjs-content-
|
|
|
60
60
|
if (!rawEvent.shiftKey) {
|
|
61
61
|
var markerFormat = paragraph.segments[markerIndex].format;
|
|
62
62
|
var tabText = (0, roosterjs_content_model_dom_1.createText)(tabSpaces, markerFormat);
|
|
63
|
-
paragraph.segments.splice(markerIndex, 0, tabText);
|
|
63
|
+
(0, roosterjs_content_model_dom_1.mutateBlock)(paragraph).segments.splice(markerIndex, 0, tabText);
|
|
64
64
|
}
|
|
65
65
|
else {
|
|
66
66
|
var tabText = paragraph.segments[markerIndex - 1];
|
|
67
67
|
var tabSpacesLength = tabSpaces.length;
|
|
68
68
|
if (tabText.segmentType == 'Text') {
|
|
69
|
-
var
|
|
69
|
+
var tabSpaceTextLength_1 = tabText.text.length - tabSpacesLength;
|
|
70
70
|
if (tabText.text === tabSpaces) {
|
|
71
|
-
paragraph.segments.splice(markerIndex - 1, 1);
|
|
71
|
+
(0, roosterjs_content_model_dom_1.mutateBlock)(paragraph).segments.splice(markerIndex - 1, 1);
|
|
72
72
|
}
|
|
73
|
-
else if (tabText.text.substring(
|
|
74
|
-
|
|
73
|
+
else if (tabText.text.substring(tabSpaceTextLength_1) === tabSpaces) {
|
|
74
|
+
(0, roosterjs_content_model_dom_1.mutateSegment)(paragraph, tabText, function (text) {
|
|
75
|
+
text.text = text.text.substring(0, tabSpaceTextLength_1);
|
|
76
|
+
});
|
|
75
77
|
}
|
|
76
78
|
else {
|
|
77
79
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleTabOnParagraph.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnParagraph.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"handleTabOnParagraph.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnParagraph.ts"],"names":[],"mappings":"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","sourcesContent":["import { setModelIndentation } from 'roosterjs-content-model-api';\nimport {\n createSelectionMarker,\n createText,\n mutateBlock,\n mutateSegment,\n} from 'roosterjs-content-model-dom';\nimport type {\n FormatContentModelContext,\n ReadonlyContentModelDocument,\n ReadonlyContentModelParagraph,\n} from 'roosterjs-content-model-types';\n\nconst tabSpaces = ' ';\nconst space = ' ';\n\n/**\n * @internal\n The handleTabOnParagraph function will handle the tab key in following scenarios:\n * 1. When the selection is collapsed and the cursor is at the end of a paragraph, add 4 spaces.\n * 2. When the selection is collapsed and the cursor is at the start of a paragraph, call setModelIndention function to indent the whole paragraph\n * 3. When the selection is collapsed and the cursor is at the middle of a paragraph, add 4 spaces.\n * 4. When the selection is not collapsed, replace the selected range with a single space.\n * 5. When the selection is not collapsed, but all segments are selected, call setModelIndention function to indent the whole paragraph\n The handleTabOnParagraph function will handle the shift + tab key in a indented paragraph in following scenarios:\n * 1. When the selection is collapsed and the cursor is at the end of a paragraph, remove 4 spaces.\n * 2. When the selection is collapsed and the cursor is at the start of a paragraph, call setModelIndention function to outdent the whole paragraph\n * 3. When the selection is collapsed and the cursor is at the middle of a paragraph, remove 4 spaces.\n * 4. When the selection is not collapsed, replace the selected range with a 4 space.\n * 5. When the selection is not collapsed, but all segments are selected, call setModelIndention function to outdent the whole paragraph\n */\nexport function handleTabOnParagraph(\n model: ReadonlyContentModelDocument,\n paragraph: ReadonlyContentModelParagraph,\n rawEvent: KeyboardEvent,\n context?: FormatContentModelContext\n) {\n const selectedSegments = paragraph.segments.filter(segment => segment.isSelected);\n const isCollapsed =\n selectedSegments.length === 1 && selectedSegments[0].segmentType === 'SelectionMarker';\n const isAllSelected = paragraph.segments.every(segment => segment.isSelected);\n if ((paragraph.segments[0].segmentType === 'SelectionMarker' && isCollapsed) || isAllSelected) {\n const { marginLeft, marginRight, direction } = paragraph.format;\n const isRtl = direction === 'rtl';\n if (\n rawEvent.shiftKey &&\n ((!isRtl && (!marginLeft || marginLeft == '0px')) ||\n (isRtl && (!marginRight || marginRight == '0px')))\n ) {\n return false;\n }\n setModelIndentation(\n model,\n rawEvent.shiftKey ? 'outdent' : 'indent',\n undefined /*length*/,\n context\n );\n } else {\n if (!isCollapsed) {\n let firstSelectedSegmentIndex: number | undefined = undefined;\n let lastSelectedSegmentIndex: number | undefined = undefined;\n\n paragraph.segments.forEach((segment, index) => {\n if (segment.isSelected) {\n if (!firstSelectedSegmentIndex) {\n firstSelectedSegmentIndex = index;\n }\n lastSelectedSegmentIndex = index;\n }\n });\n if (firstSelectedSegmentIndex && lastSelectedSegmentIndex) {\n const firstSelectedSegment = paragraph.segments[firstSelectedSegmentIndex];\n const spaceText = createText(\n rawEvent.shiftKey ? tabSpaces : space,\n firstSelectedSegment.format\n );\n const marker = createSelectionMarker(firstSelectedSegment.format);\n\n mutateBlock(paragraph).segments.splice(\n firstSelectedSegmentIndex,\n lastSelectedSegmentIndex - firstSelectedSegmentIndex + 1,\n spaceText,\n marker\n );\n } else {\n return false;\n }\n } else {\n const markerIndex = paragraph.segments.findIndex(\n segment => segment.segmentType === 'SelectionMarker'\n );\n\n if (!rawEvent.shiftKey) {\n const markerFormat = paragraph.segments[markerIndex].format;\n const tabText = createText(tabSpaces, markerFormat);\n\n mutateBlock(paragraph).segments.splice(markerIndex, 0, tabText);\n } else {\n const tabText = paragraph.segments[markerIndex - 1];\n const tabSpacesLength = tabSpaces.length;\n\n if (tabText.segmentType == 'Text') {\n const tabSpaceTextLength = tabText.text.length - tabSpacesLength;\n\n if (tabText.text === tabSpaces) {\n mutateBlock(paragraph).segments.splice(markerIndex - 1, 1);\n } else if (tabText.text.substring(tabSpaceTextLength) === tabSpaces) {\n mutateSegment(paragraph, tabText, text => {\n text.text = text.text.substring(0, tabSpaceTextLength);\n });\n } else {\n return false;\n }\n }\n }\n }\n }\n rawEvent.preventDefault();\n return true;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ReadonlyContentModelDocument } from 'roosterjs-content-model-types';
|
|
2
2
|
/**
|
|
3
3
|
* When the whole table is selected, indent or outdent the whole table with setModelIndentation.
|
|
4
4
|
* @internal
|
|
5
5
|
*/
|
|
6
|
-
export declare function handleTabOnTable(model:
|
|
6
|
+
export declare function handleTabOnTable(model: ReadonlyContentModelDocument, rawEvent: KeyboardEvent): boolean;
|