roosterjs-content-model-core 0.27.0 → 0.28.1
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/lib/constants/BulletListType.js.map +1 -1
- package/lib/constants/ChangeSource.js.map +1 -1
- package/lib/constants/NumberingListType.js.map +1 -1
- package/lib/constants/TableBorderFormat.js.map +1 -1
- package/lib/coreApi/addUndoSnapshot.js.map +1 -1
- package/lib/coreApi/attachDomEvent.js.map +1 -1
- package/lib/coreApi/createContentModel.js +6 -3
- package/lib/coreApi/createContentModel.js.map +1 -1
- package/lib/coreApi/createEditorContext.js.map +1 -1
- package/lib/coreApi/focus.js +3 -3
- package/lib/coreApi/focus.js.map +1 -1
- package/lib/coreApi/formatContentModel.js +1 -1
- package/lib/coreApi/formatContentModel.js.map +1 -1
- package/lib/coreApi/getDOMSelection.js +1 -1
- package/lib/coreApi/getDOMSelection.js.map +1 -1
- package/lib/coreApi/getVisibleViewport.js +2 -12
- package/lib/coreApi/getVisibleViewport.js.map +1 -1
- package/lib/coreApi/restoreUndoSnapshot.js.map +1 -1
- package/lib/coreApi/setContentModel.js +2 -2
- package/lib/coreApi/setContentModel.js.map +1 -1
- package/lib/coreApi/setDOMSelection.js +1 -1
- package/lib/coreApi/setDOMSelection.js.map +1 -1
- package/lib/coreApi/switchShadowEdit.js.map +1 -1
- package/lib/coreApi/triggerEvent.js.map +1 -1
- package/lib/corePlugin/CachePlugin.js.map +1 -1
- package/lib/corePlugin/ContextMenuPlugin.js.map +1 -1
- package/lib/corePlugin/CopyPastePlugin.js +2 -1
- package/lib/corePlugin/CopyPastePlugin.js.map +1 -1
- package/lib/corePlugin/DOMEventPlugin.js.map +1 -1
- package/lib/corePlugin/EntityPlugin.js +1 -0
- package/lib/corePlugin/EntityPlugin.js.map +1 -1
- package/lib/corePlugin/FormatPlugin.js.map +1 -1
- package/lib/corePlugin/LifecyclePlugin.js.map +1 -1
- package/lib/corePlugin/SelectionPlugin.js.map +1 -1
- package/lib/corePlugin/UndoPlugin.js.map +1 -1
- package/lib/corePlugin/createEditorCorePlugins.js.map +1 -1
- package/lib/corePlugin/utils/addRangeToSelection.js.map +1 -1
- package/lib/corePlugin/utils/applyDefaultFormat.js.map +1 -1
- package/lib/corePlugin/utils/applyPendingFormat.js.map +1 -1
- package/lib/corePlugin/utils/areSameSelection.js.map +1 -1
- package/lib/corePlugin/utils/deleteEmptyList.js +3 -3
- package/lib/corePlugin/utils/deleteEmptyList.js.map +1 -1
- package/lib/corePlugin/utils/domIndexerImpl.js.map +1 -1
- package/lib/corePlugin/utils/entityDelimiterUtils.js.map +1 -1
- package/lib/corePlugin/utils/findAllEntities.js.map +1 -1
- package/lib/corePlugin/utils/textMutationObserver.js.map +1 -1
- package/lib/editor/DOMHelperImpl.js +17 -0
- package/lib/editor/DOMHelperImpl.js.map +1 -1
- package/lib/editor/DarkColorHandlerImpl.js.map +1 -1
- package/lib/editor/Editor.d.ts +4 -8
- package/lib/editor/Editor.js +5 -12
- package/lib/editor/Editor.js.map +1 -1
- package/lib/editor/SnapshotsManagerImpl.js.map +1 -1
- package/lib/editor/coreApiMap.js +3 -7
- package/lib/editor/coreApiMap.js.map +1 -1
- package/lib/editor/createEditorCore.js +5 -3
- package/lib/editor/createEditorCore.js.map +1 -1
- package/lib/editor/createEditorDefaultSettings.js.map +1 -1
- package/lib/index.d.ts +6 -4
- package/lib/index.js +9 -5
- package/lib/index.js.map +1 -1
- package/lib/metadata/definitionCreators.js.map +1 -1
- package/lib/metadata/updateImageMetadata.js.map +1 -1
- package/lib/metadata/updateListMetadata.js.map +1 -1
- package/lib/metadata/updateTableCellMetadata.js.map +1 -1
- package/lib/metadata/updateTableMetadata.js.map +1 -1
- package/lib/modelApi/edit/deleteExpandedSelection.js.map +1 -1
- package/lib/modelApi/edit/deleteSingleChar.js.map +1 -1
- package/lib/override/containerSizeFormatParser.js.map +1 -1
- package/lib/override/pasteCopyBlockEntityParser.js.map +1 -1
- package/lib/override/pasteDisplayFormatParser.js.map +1 -1
- package/lib/override/pasteEntityProcessor.js.map +1 -1
- package/lib/override/pasteGeneralProcessor.js.map +1 -1
- package/lib/override/pasteTextProcessor.js.map +1 -1
- package/lib/override/reducedModelChildProcessor.js.map +1 -1
- package/lib/override/tablePreProcessor.js.map +1 -1
- package/lib/publicApi/color/transformColor.js.map +1 -1
- package/lib/publicApi/domUtils/borderValues.js.map +1 -1
- package/lib/publicApi/domUtils/cacheGetEventData.js.map +1 -1
- package/lib/publicApi/domUtils/eventUtils.js.map +1 -1
- package/lib/publicApi/domUtils/getSegmentTextFormat.js.map +1 -1
- package/lib/publicApi/domUtils/readFile.js.map +1 -1
- package/lib/publicApi/domUtils/stringUtil.js.map +1 -1
- package/lib/publicApi/domUtils/tableCellUtils.js.map +1 -1
- package/lib/publicApi/format/retrieveModelFormatState.js.map +1 -1
- package/lib/publicApi/model/cloneModel.d.ts +1 -24
- package/lib/publicApi/model/cloneModel.js.map +1 -1
- package/lib/publicApi/model/createModelFromHtml.js.map +1 -1
- package/lib/publicApi/model/exportContent.js +1 -1
- package/lib/publicApi/model/exportContent.js.map +1 -1
- package/lib/publicApi/model/getClosestAncestorBlockGroupIndex.js.map +1 -1
- package/lib/publicApi/model/isBlockGroupOfType.js.map +1 -1
- package/lib/publicApi/model/isBold.js.map +1 -1
- package/lib/publicApi/model/mergeModel.js +3 -0
- package/lib/publicApi/model/mergeModel.js.map +1 -1
- package/lib/publicApi/paste/paste.d.ts +8 -0
- package/lib/publicApi/paste/paste.js +42 -0
- package/lib/publicApi/paste/paste.js.map +1 -0
- package/lib/publicApi/selection/collectSelections.js.map +1 -1
- package/lib/publicApi/selection/deleteBlock.js.map +1 -1
- package/lib/publicApi/selection/deleteSegment.js.map +1 -1
- package/lib/publicApi/selection/deleteSelection.js.map +1 -1
- package/lib/publicApi/selection/getSelectionRootNode.js.map +1 -1
- package/lib/publicApi/selection/hasSelectionInBlock.d.ts +1 -1
- package/lib/publicApi/selection/hasSelectionInBlock.js +5 -4
- package/lib/publicApi/selection/hasSelectionInBlock.js.map +1 -1
- package/lib/publicApi/selection/hasSelectionInBlockGroup.d.ts +1 -1
- package/lib/publicApi/selection/hasSelectionInBlockGroup.js +3 -2
- package/lib/publicApi/selection/hasSelectionInBlockGroup.js.map +1 -1
- package/lib/publicApi/selection/hasSelectionInSegment.d.ts +1 -1
- package/lib/publicApi/selection/hasSelectionInSegment.js +3 -2
- package/lib/publicApi/selection/hasSelectionInSegment.js.map +1 -1
- package/lib/publicApi/selection/iterateSelections.js.map +1 -1
- package/lib/publicApi/selection/setSelection.js.map +1 -1
- package/lib/publicApi/table/applyTableFormat.js.map +1 -1
- package/lib/publicApi/table/getSelectedCells.js +1 -1
- package/lib/publicApi/table/getSelectedCells.js.map +1 -1
- package/lib/publicApi/table/normalizeTable.js.map +1 -1
- package/lib/publicApi/table/setTableCellBackgroundColor.js.map +1 -1
- package/lib/publicApi/undo/redo.js.map +1 -1
- package/lib/publicApi/undo/undo.js.map +1 -1
- package/lib/utils/convertInlineCss.js.map +1 -1
- package/lib/utils/createDomToModelContextForSanitizing.js.map +1 -1
- package/lib/utils/createSnapshotSelection.js.map +1 -1
- package/lib/utils/extractClipboardItems.d.ts +0 -1
- package/lib/utils/extractClipboardItems.js +0 -1
- package/lib/utils/extractClipboardItems.js.map +1 -1
- package/lib/utils/getRootComputedStyleForContext.js.map +1 -1
- package/lib/utils/paste/createPasteFragment.js.map +1 -1
- package/lib/utils/paste/generatePasteOptionFromPlugins.d.ts +2 -2
- package/lib/utils/paste/generatePasteOptionFromPlugins.js +4 -5
- package/lib/utils/paste/generatePasteOptionFromPlugins.js.map +1 -1
- package/lib/utils/paste/mergePasteContent.d.ts +6 -2
- package/lib/utils/paste/mergePasteContent.js +19 -4
- package/lib/utils/paste/mergePasteContent.js.map +1 -1
- package/lib/utils/paste/retrieveHtmlInfo.js.map +1 -1
- package/lib/utils/restoreSnapshotColors.js.map +1 -1
- package/lib/utils/restoreSnapshotHTML.js +8 -5
- package/lib/utils/restoreSnapshotHTML.js.map +1 -1
- package/lib/utils/restoreSnapshotSelection.js.map +1 -1
- package/lib/utils/sanitizeElement.js.map +1 -1
- package/lib-amd/constants/BulletListType.js.map +1 -1
- package/lib-amd/constants/ChangeSource.js.map +1 -1
- package/lib-amd/constants/NumberingListType.js.map +1 -1
- package/lib-amd/constants/TableBorderFormat.js.map +1 -1
- package/lib-amd/coreApi/addUndoSnapshot.js.map +1 -1
- package/lib-amd/coreApi/attachDomEvent.js.map +1 -1
- package/lib-amd/coreApi/createContentModel.js +6 -3
- package/lib-amd/coreApi/createContentModel.js.map +1 -1
- package/lib-amd/coreApi/createEditorContext.js.map +1 -1
- package/lib-amd/coreApi/focus.js +3 -3
- package/lib-amd/coreApi/focus.js.map +1 -1
- package/lib-amd/coreApi/formatContentModel.js +1 -1
- package/lib-amd/coreApi/formatContentModel.js.map +1 -1
- package/lib-amd/coreApi/getDOMSelection.js +1 -1
- package/lib-amd/coreApi/getDOMSelection.js.map +1 -1
- package/lib-amd/coreApi/getVisibleViewport.js +2 -13
- package/lib-amd/coreApi/getVisibleViewport.js.map +1 -1
- package/lib-amd/coreApi/restoreUndoSnapshot.js.map +1 -1
- package/lib-amd/coreApi/setContentModel.js +2 -2
- package/lib-amd/coreApi/setContentModel.js.map +1 -1
- package/lib-amd/coreApi/setDOMSelection.js +1 -1
- package/lib-amd/coreApi/setDOMSelection.js.map +1 -1
- package/lib-amd/coreApi/switchShadowEdit.js.map +1 -1
- package/lib-amd/coreApi/triggerEvent.js.map +1 -1
- package/lib-amd/corePlugin/CachePlugin.js.map +1 -1
- package/lib-amd/corePlugin/ContextMenuPlugin.js.map +1 -1
- package/lib-amd/corePlugin/CopyPastePlugin.js +2 -2
- package/lib-amd/corePlugin/CopyPastePlugin.js.map +1 -1
- package/lib-amd/corePlugin/DOMEventPlugin.js.map +1 -1
- package/lib-amd/corePlugin/EntityPlugin.js +1 -0
- package/lib-amd/corePlugin/EntityPlugin.js.map +1 -1
- package/lib-amd/corePlugin/FormatPlugin.js.map +1 -1
- package/lib-amd/corePlugin/LifecyclePlugin.js.map +1 -1
- package/lib-amd/corePlugin/SelectionPlugin.js.map +1 -1
- package/lib-amd/corePlugin/UndoPlugin.js.map +1 -1
- package/lib-amd/corePlugin/createEditorCorePlugins.js.map +1 -1
- package/lib-amd/corePlugin/utils/addRangeToSelection.js.map +1 -1
- package/lib-amd/corePlugin/utils/applyDefaultFormat.js.map +1 -1
- package/lib-amd/corePlugin/utils/applyPendingFormat.js.map +1 -1
- package/lib-amd/corePlugin/utils/areSameSelection.js.map +1 -1
- package/lib-amd/corePlugin/utils/deleteEmptyList.js +3 -3
- package/lib-amd/corePlugin/utils/deleteEmptyList.js.map +1 -1
- package/lib-amd/corePlugin/utils/domIndexerImpl.js.map +1 -1
- package/lib-amd/corePlugin/utils/entityDelimiterUtils.js.map +1 -1
- package/lib-amd/corePlugin/utils/findAllEntities.js.map +1 -1
- package/lib-amd/corePlugin/utils/textMutationObserver.js.map +1 -1
- package/lib-amd/editor/DOMHelperImpl.js +17 -0
- package/lib-amd/editor/DOMHelperImpl.js.map +1 -1
- package/lib-amd/editor/DarkColorHandlerImpl.js.map +1 -1
- package/lib-amd/editor/Editor.d.ts +4 -8
- package/lib-amd/editor/Editor.js +5 -12
- package/lib-amd/editor/Editor.js.map +1 -1
- package/lib-amd/editor/SnapshotsManagerImpl.js.map +1 -1
- package/lib-amd/editor/coreApiMap.js +4 -6
- package/lib-amd/editor/coreApiMap.js.map +1 -1
- package/lib-amd/editor/createEditorCore.js +5 -3
- package/lib-amd/editor/createEditorCore.js.map +1 -1
- package/lib-amd/editor/createEditorDefaultSettings.js.map +1 -1
- package/lib-amd/index.d.ts +6 -4
- package/lib-amd/index.js +7 -5
- package/lib-amd/index.js.map +1 -1
- package/lib-amd/metadata/definitionCreators.js.map +1 -1
- package/lib-amd/metadata/updateImageMetadata.js.map +1 -1
- package/lib-amd/metadata/updateListMetadata.js.map +1 -1
- package/lib-amd/metadata/updateTableCellMetadata.js.map +1 -1
- package/lib-amd/metadata/updateTableMetadata.js.map +1 -1
- package/lib-amd/modelApi/edit/deleteExpandedSelection.js.map +1 -1
- package/lib-amd/modelApi/edit/deleteSingleChar.js.map +1 -1
- package/lib-amd/override/containerSizeFormatParser.js.map +1 -1
- package/lib-amd/override/pasteCopyBlockEntityParser.js.map +1 -1
- package/lib-amd/override/pasteDisplayFormatParser.js.map +1 -1
- package/lib-amd/override/pasteEntityProcessor.js.map +1 -1
- package/lib-amd/override/pasteGeneralProcessor.js.map +1 -1
- package/lib-amd/override/pasteTextProcessor.js.map +1 -1
- package/lib-amd/override/reducedModelChildProcessor.js.map +1 -1
- package/lib-amd/override/tablePreProcessor.js.map +1 -1
- package/lib-amd/publicApi/color/transformColor.js.map +1 -1
- package/lib-amd/publicApi/domUtils/borderValues.js.map +1 -1
- package/lib-amd/publicApi/domUtils/cacheGetEventData.js.map +1 -1
- package/lib-amd/publicApi/domUtils/eventUtils.js.map +1 -1
- package/lib-amd/publicApi/domUtils/getSegmentTextFormat.js.map +1 -1
- package/lib-amd/publicApi/domUtils/readFile.js.map +1 -1
- package/lib-amd/publicApi/domUtils/stringUtil.js.map +1 -1
- package/lib-amd/publicApi/domUtils/tableCellUtils.js.map +1 -1
- package/lib-amd/publicApi/format/retrieveModelFormatState.js.map +1 -1
- package/lib-amd/publicApi/model/cloneModel.d.ts +1 -24
- package/lib-amd/publicApi/model/cloneModel.js.map +1 -1
- package/lib-amd/publicApi/model/createModelFromHtml.js.map +1 -1
- package/lib-amd/publicApi/model/exportContent.js +1 -1
- package/lib-amd/publicApi/model/exportContent.js.map +1 -1
- package/lib-amd/publicApi/model/getClosestAncestorBlockGroupIndex.js.map +1 -1
- package/lib-amd/publicApi/model/isBlockGroupOfType.js.map +1 -1
- package/lib-amd/publicApi/model/isBold.js.map +1 -1
- package/lib-amd/publicApi/model/mergeModel.js +3 -0
- package/lib-amd/publicApi/model/mergeModel.js.map +1 -1
- package/lib-amd/publicApi/paste/paste.d.ts +8 -0
- package/lib-amd/publicApi/paste/paste.js +39 -0
- package/lib-amd/publicApi/paste/paste.js.map +1 -0
- package/lib-amd/publicApi/selection/collectSelections.js.map +1 -1
- package/lib-amd/publicApi/selection/deleteBlock.js.map +1 -1
- package/lib-amd/publicApi/selection/deleteSegment.js.map +1 -1
- package/lib-amd/publicApi/selection/deleteSelection.js.map +1 -1
- package/lib-amd/publicApi/selection/getSelectionRootNode.js.map +1 -1
- package/lib-amd/publicApi/selection/hasSelectionInBlock.d.ts +1 -1
- package/lib-amd/publicApi/selection/hasSelectionInBlock.js +5 -4
- package/lib-amd/publicApi/selection/hasSelectionInBlock.js.map +1 -1
- package/lib-amd/publicApi/selection/hasSelectionInBlockGroup.d.ts +1 -1
- package/lib-amd/publicApi/selection/hasSelectionInBlockGroup.js +3 -2
- package/lib-amd/publicApi/selection/hasSelectionInBlockGroup.js.map +1 -1
- package/lib-amd/publicApi/selection/hasSelectionInSegment.d.ts +1 -1
- package/lib-amd/publicApi/selection/hasSelectionInSegment.js +3 -2
- package/lib-amd/publicApi/selection/hasSelectionInSegment.js.map +1 -1
- package/lib-amd/publicApi/selection/iterateSelections.js.map +1 -1
- package/lib-amd/publicApi/selection/setSelection.js.map +1 -1
- package/lib-amd/publicApi/table/applyTableFormat.js.map +1 -1
- package/lib-amd/publicApi/table/getSelectedCells.js +1 -1
- package/lib-amd/publicApi/table/getSelectedCells.js.map +1 -1
- package/lib-amd/publicApi/table/normalizeTable.js.map +1 -1
- package/lib-amd/publicApi/table/setTableCellBackgroundColor.js.map +1 -1
- package/lib-amd/publicApi/undo/redo.js.map +1 -1
- package/lib-amd/publicApi/undo/undo.js.map +1 -1
- package/lib-amd/utils/convertInlineCss.js.map +1 -1
- package/lib-amd/utils/createDomToModelContextForSanitizing.js.map +1 -1
- package/lib-amd/utils/createSnapshotSelection.js.map +1 -1
- package/lib-amd/utils/extractClipboardItems.d.ts +0 -1
- package/lib-amd/utils/extractClipboardItems.js +0 -1
- package/lib-amd/utils/extractClipboardItems.js.map +1 -1
- package/lib-amd/utils/getRootComputedStyleForContext.js.map +1 -1
- package/lib-amd/utils/paste/createPasteFragment.js.map +1 -1
- package/lib-amd/utils/paste/generatePasteOptionFromPlugins.d.ts +2 -2
- package/lib-amd/utils/paste/generatePasteOptionFromPlugins.js +4 -5
- package/lib-amd/utils/paste/generatePasteOptionFromPlugins.js.map +1 -1
- package/lib-amd/utils/paste/mergePasteContent.d.ts +6 -2
- package/lib-amd/utils/paste/mergePasteContent.js +19 -5
- package/lib-amd/utils/paste/mergePasteContent.js.map +1 -1
- package/lib-amd/utils/paste/retrieveHtmlInfo.js.map +1 -1
- package/lib-amd/utils/restoreSnapshotColors.js.map +1 -1
- package/lib-amd/utils/restoreSnapshotHTML.js +8 -5
- package/lib-amd/utils/restoreSnapshotHTML.js.map +1 -1
- package/lib-amd/utils/restoreSnapshotSelection.js.map +1 -1
- package/lib-amd/utils/sanitizeElement.js.map +1 -1
- package/lib-mjs/constants/BulletListType.js.map +1 -1
- package/lib-mjs/constants/ChangeSource.js.map +1 -1
- package/lib-mjs/constants/NumberingListType.js.map +1 -1
- package/lib-mjs/constants/TableBorderFormat.js.map +1 -1
- package/lib-mjs/coreApi/addUndoSnapshot.js.map +1 -1
- package/lib-mjs/coreApi/attachDomEvent.js.map +1 -1
- package/lib-mjs/coreApi/createContentModel.js +6 -3
- package/lib-mjs/coreApi/createContentModel.js.map +1 -1
- package/lib-mjs/coreApi/createEditorContext.js.map +1 -1
- package/lib-mjs/coreApi/focus.js +3 -3
- package/lib-mjs/coreApi/focus.js.map +1 -1
- package/lib-mjs/coreApi/formatContentModel.js +1 -1
- package/lib-mjs/coreApi/formatContentModel.js.map +1 -1
- package/lib-mjs/coreApi/getDOMSelection.js +1 -1
- package/lib-mjs/coreApi/getDOMSelection.js.map +1 -1
- package/lib-mjs/coreApi/getVisibleViewport.js +1 -11
- package/lib-mjs/coreApi/getVisibleViewport.js.map +1 -1
- package/lib-mjs/coreApi/restoreUndoSnapshot.js.map +1 -1
- package/lib-mjs/coreApi/setContentModel.js +2 -2
- package/lib-mjs/coreApi/setContentModel.js.map +1 -1
- package/lib-mjs/coreApi/setDOMSelection.js +1 -1
- package/lib-mjs/coreApi/setDOMSelection.js.map +1 -1
- package/lib-mjs/coreApi/switchShadowEdit.js.map +1 -1
- package/lib-mjs/coreApi/triggerEvent.js.map +1 -1
- package/lib-mjs/corePlugin/CachePlugin.js.map +1 -1
- package/lib-mjs/corePlugin/ContextMenuPlugin.js.map +1 -1
- package/lib-mjs/corePlugin/CopyPastePlugin.js +2 -1
- package/lib-mjs/corePlugin/CopyPastePlugin.js.map +1 -1
- package/lib-mjs/corePlugin/DOMEventPlugin.js.map +1 -1
- package/lib-mjs/corePlugin/EntityPlugin.js +1 -0
- package/lib-mjs/corePlugin/EntityPlugin.js.map +1 -1
- package/lib-mjs/corePlugin/FormatPlugin.js.map +1 -1
- package/lib-mjs/corePlugin/LifecyclePlugin.js.map +1 -1
- package/lib-mjs/corePlugin/SelectionPlugin.js.map +1 -1
- package/lib-mjs/corePlugin/UndoPlugin.js.map +1 -1
- package/lib-mjs/corePlugin/createEditorCorePlugins.js.map +1 -1
- package/lib-mjs/corePlugin/utils/addRangeToSelection.js.map +1 -1
- package/lib-mjs/corePlugin/utils/applyDefaultFormat.js.map +1 -1
- package/lib-mjs/corePlugin/utils/applyPendingFormat.js.map +1 -1
- package/lib-mjs/corePlugin/utils/areSameSelection.js.map +1 -1
- package/lib-mjs/corePlugin/utils/deleteEmptyList.js +2 -2
- package/lib-mjs/corePlugin/utils/deleteEmptyList.js.map +1 -1
- package/lib-mjs/corePlugin/utils/domIndexerImpl.js.map +1 -1
- package/lib-mjs/corePlugin/utils/entityDelimiterUtils.js.map +1 -1
- package/lib-mjs/corePlugin/utils/findAllEntities.js.map +1 -1
- package/lib-mjs/corePlugin/utils/textMutationObserver.js.map +1 -1
- package/lib-mjs/editor/DOMHelperImpl.js +18 -1
- package/lib-mjs/editor/DOMHelperImpl.js.map +1 -1
- package/lib-mjs/editor/DarkColorHandlerImpl.js.map +1 -1
- package/lib-mjs/editor/Editor.d.ts +4 -8
- package/lib-mjs/editor/Editor.js +5 -12
- package/lib-mjs/editor/Editor.js.map +1 -1
- package/lib-mjs/editor/SnapshotsManagerImpl.js.map +1 -1
- package/lib-mjs/editor/coreApiMap.js +3 -7
- package/lib-mjs/editor/coreApiMap.js.map +1 -1
- package/lib-mjs/editor/createEditorCore.js +5 -3
- package/lib-mjs/editor/createEditorCore.js.map +1 -1
- package/lib-mjs/editor/createEditorDefaultSettings.js.map +1 -1
- package/lib-mjs/index.d.ts +6 -4
- package/lib-mjs/index.js +5 -3
- package/lib-mjs/index.js.map +1 -1
- package/lib-mjs/metadata/definitionCreators.js.map +1 -1
- package/lib-mjs/metadata/updateImageMetadata.js.map +1 -1
- package/lib-mjs/metadata/updateListMetadata.js.map +1 -1
- package/lib-mjs/metadata/updateTableCellMetadata.js.map +1 -1
- package/lib-mjs/metadata/updateTableMetadata.js.map +1 -1
- package/lib-mjs/modelApi/edit/deleteExpandedSelection.js.map +1 -1
- package/lib-mjs/modelApi/edit/deleteSingleChar.js.map +1 -1
- package/lib-mjs/override/containerSizeFormatParser.js.map +1 -1
- package/lib-mjs/override/pasteCopyBlockEntityParser.js.map +1 -1
- package/lib-mjs/override/pasteDisplayFormatParser.js.map +1 -1
- package/lib-mjs/override/pasteEntityProcessor.js.map +1 -1
- package/lib-mjs/override/pasteGeneralProcessor.js.map +1 -1
- package/lib-mjs/override/pasteTextProcessor.js.map +1 -1
- package/lib-mjs/override/reducedModelChildProcessor.js.map +1 -1
- package/lib-mjs/override/tablePreProcessor.js.map +1 -1
- package/lib-mjs/publicApi/color/transformColor.js.map +1 -1
- package/lib-mjs/publicApi/domUtils/borderValues.js.map +1 -1
- package/lib-mjs/publicApi/domUtils/cacheGetEventData.js.map +1 -1
- package/lib-mjs/publicApi/domUtils/eventUtils.js.map +1 -1
- package/lib-mjs/publicApi/domUtils/getSegmentTextFormat.js.map +1 -1
- package/lib-mjs/publicApi/domUtils/readFile.js.map +1 -1
- package/lib-mjs/publicApi/domUtils/stringUtil.js.map +1 -1
- package/lib-mjs/publicApi/domUtils/tableCellUtils.js.map +1 -1
- package/lib-mjs/publicApi/format/retrieveModelFormatState.js.map +1 -1
- package/lib-mjs/publicApi/model/cloneModel.d.ts +1 -24
- package/lib-mjs/publicApi/model/cloneModel.js.map +1 -1
- package/lib-mjs/publicApi/model/createModelFromHtml.js.map +1 -1
- package/lib-mjs/publicApi/model/exportContent.js +1 -1
- package/lib-mjs/publicApi/model/exportContent.js.map +1 -1
- package/lib-mjs/publicApi/model/getClosestAncestorBlockGroupIndex.js.map +1 -1
- package/lib-mjs/publicApi/model/isBlockGroupOfType.js.map +1 -1
- package/lib-mjs/publicApi/model/isBold.js.map +1 -1
- package/lib-mjs/publicApi/model/mergeModel.js +3 -0
- package/lib-mjs/publicApi/model/mergeModel.js.map +1 -1
- package/lib-mjs/publicApi/paste/paste.d.ts +8 -0
- package/lib-mjs/publicApi/paste/paste.js +38 -0
- package/lib-mjs/publicApi/paste/paste.js.map +1 -0
- package/lib-mjs/publicApi/selection/collectSelections.js.map +1 -1
- package/lib-mjs/publicApi/selection/deleteBlock.js.map +1 -1
- package/lib-mjs/publicApi/selection/deleteSegment.js.map +1 -1
- package/lib-mjs/publicApi/selection/deleteSelection.js.map +1 -1
- package/lib-mjs/publicApi/selection/getSelectionRootNode.js.map +1 -1
- package/lib-mjs/publicApi/selection/hasSelectionInBlock.d.ts +1 -1
- package/lib-mjs/publicApi/selection/hasSelectionInBlock.js +3 -3
- package/lib-mjs/publicApi/selection/hasSelectionInBlock.js.map +1 -1
- package/lib-mjs/publicApi/selection/hasSelectionInBlockGroup.d.ts +1 -1
- package/lib-mjs/publicApi/selection/hasSelectionInBlockGroup.js +2 -2
- package/lib-mjs/publicApi/selection/hasSelectionInBlockGroup.js.map +1 -1
- package/lib-mjs/publicApi/selection/hasSelectionInSegment.d.ts +1 -1
- package/lib-mjs/publicApi/selection/hasSelectionInSegment.js +2 -2
- package/lib-mjs/publicApi/selection/hasSelectionInSegment.js.map +1 -1
- package/lib-mjs/publicApi/selection/iterateSelections.js.map +1 -1
- package/lib-mjs/publicApi/selection/setSelection.js.map +1 -1
- package/lib-mjs/publicApi/table/applyTableFormat.js.map +1 -1
- package/lib-mjs/publicApi/table/getSelectedCells.js +1 -1
- package/lib-mjs/publicApi/table/getSelectedCells.js.map +1 -1
- package/lib-mjs/publicApi/table/normalizeTable.js.map +1 -1
- package/lib-mjs/publicApi/table/setTableCellBackgroundColor.js.map +1 -1
- package/lib-mjs/publicApi/undo/redo.js.map +1 -1
- package/lib-mjs/publicApi/undo/undo.js.map +1 -1
- package/lib-mjs/utils/convertInlineCss.js.map +1 -1
- package/lib-mjs/utils/createDomToModelContextForSanitizing.js.map +1 -1
- package/lib-mjs/utils/createSnapshotSelection.js.map +1 -1
- package/lib-mjs/utils/extractClipboardItems.d.ts +0 -1
- package/lib-mjs/utils/extractClipboardItems.js +0 -1
- package/lib-mjs/utils/extractClipboardItems.js.map +1 -1
- package/lib-mjs/utils/getRootComputedStyleForContext.js.map +1 -1
- package/lib-mjs/utils/paste/createPasteFragment.js.map +1 -1
- package/lib-mjs/utils/paste/generatePasteOptionFromPlugins.d.ts +2 -2
- package/lib-mjs/utils/paste/generatePasteOptionFromPlugins.js +4 -5
- package/lib-mjs/utils/paste/generatePasteOptionFromPlugins.js.map +1 -1
- package/lib-mjs/utils/paste/mergePasteContent.d.ts +6 -2
- package/lib-mjs/utils/paste/mergePasteContent.js +17 -3
- package/lib-mjs/utils/paste/mergePasteContent.js.map +1 -1
- package/lib-mjs/utils/paste/retrieveHtmlInfo.js.map +1 -1
- package/lib-mjs/utils/restoreSnapshotColors.js.map +1 -1
- package/lib-mjs/utils/restoreSnapshotHTML.js +8 -5
- package/lib-mjs/utils/restoreSnapshotHTML.js.map +1 -1
- package/lib-mjs/utils/restoreSnapshotSelection.js.map +1 -1
- package/lib-mjs/utils/sanitizeElement.js.map +1 -1
- package/package.json +3 -3
- package/lib/coreApi/hasFocus.d.ts +0 -8
- package/lib/coreApi/hasFocus.js +0 -15
- package/lib/coreApi/hasFocus.js.map +0 -1
- package/lib/coreApi/paste.d.ts +0 -9
- package/lib/coreApi/paste.js +0 -49
- package/lib/coreApi/paste.js.map +0 -1
- package/lib-amd/coreApi/hasFocus.d.ts +0 -8
- package/lib-amd/coreApi/hasFocus.js +0 -17
- package/lib-amd/coreApi/hasFocus.js.map +0 -1
- package/lib-amd/coreApi/paste.d.ts +0 -9
- package/lib-amd/coreApi/paste.js +0 -45
- package/lib-amd/coreApi/paste.js.map +0 -1
- package/lib-mjs/coreApi/hasFocus.d.ts +0 -8
- package/lib-mjs/coreApi/hasFocus.js +0 -11
- package/lib-mjs/coreApi/hasFocus.js.map +0 -1
- package/lib-mjs/coreApi/paste.d.ts +0 -9
- package/lib-mjs/coreApi/paste.js +0 -45
- package/lib-mjs/coreApi/paste.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BulletListType.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"BulletListType.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/constants/BulletListType.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,cAAc,GAAG;IAC1B;;OAEG;IACH,GAAG,EAAE,CAAC;IACN;;OAEG;IACH,IAAI,EAAE,CAAC;IACP;;OAEG;IACH,IAAI,EAAE,CAAC;IACP;;OAEG;IACH,MAAM,EAAE,CAAC;IACT;;OAEG;IACH,UAAU,EAAE,CAAC;IACb;;OAEG;IACH,SAAS,EAAE,CAAC;IACZ;;OAEG;IACH,aAAa,EAAE,CAAC;IAChB;;OAEG;IACH,MAAM,EAAE,CAAC;IACT;;OAEG;IACH,eAAe,EAAE,CAAC;IAClB;;OAEG;IACH,MAAM,EAAE,CAAC;IACT;;OAEG;IACH,GAAG,EAAE,CAAC;CACT,CAAC","sourcesContent":["/**\n * Enum used to control the different types of bullet list\n */\nexport const BulletListType = {\n /**\n * Minimum value of the enum\n */\n Min: 1,\n /**\n * Bullet triggered by *\n */\n Disc: 1,\n /**\n * Bullet triggered by -\n */\n Dash: 2,\n /**\n * Bullet triggered by --\n */\n Square: 3,\n /**\n * Bullet triggered by >\n */\n ShortArrow: 4,\n /**\n * Bullet triggered by ->\n */\n LongArrow: 5,\n /**\n * Bullet triggered by =>\n */\n UnfilledArrow: 6,\n /**\n * Bullet triggered by —\n */\n Hyphen: 7,\n /**\n * Bullet triggered by -->\n */\n DoubleLongArrow: 8,\n /**\n * Bullet type circle\n */\n Circle: 9,\n /**\n * Maximum value of the enum\n */\n Max: 9,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangeSource.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"ChangeSource.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/constants/ChangeSource.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,YAAY,GAAG;IACxB;;OAEG;IACH,QAAQ,EAAE,UAAU;IACpB;;OAEG;IACH,UAAU,EAAE,YAAY;IACxB;;OAEG;IACH,MAAM,EAAE,QAAQ;IAChB;;OAEG;IACH,WAAW,EAAE,aAAa;IAC1B;;OAEG;IACH,KAAK,EAAE,OAAO;IACd;;OAEG;IACH,UAAU,EAAE,YAAY;IACxB;;OAEG;IACH,GAAG,EAAE,KAAK;IACV;;OAEG;IACH,IAAI,EAAE,MAAM;IACZ;;OAEG;IACH,YAAY,EAAE,cAAc;IAC5B;;OAEG;IACH,gBAAgB,EAAE,kBAAkB;IACpC;;OAEG;IACH,iBAAiB,EAAE,mBAAmB;IACtC;;OAEG;IACH,SAAS,EAAE,WAAW;IACtB;;;OAGG;IACH,QAAQ,EAAE,UAAU;CACvB,CAAC","sourcesContent":["/**\n * Possible change sources. Here are the predefined sources.\n * It can also be other string if the change source can't fall into these sources.\n */\nexport const ChangeSource = {\n /**\n * Content changed by auto link\n */\n AutoLink: 'AutoLink',\n /**\n * Content changed by create link\n */\n CreateLink: 'CreateLink',\n /**\n * Content changed by format\n */\n Format: 'Format',\n /**\n * Content changed by image resize\n */\n ImageResize: 'ImageResize',\n /**\n * Content changed by paste\n */\n Paste: 'Paste',\n /**\n * Content changed by setContent API\n */\n SetContent: 'SetContent',\n /**\n * Content changed by cut operation\n */\n Cut: 'Cut',\n /**\n * Content changed by drag & drop operation\n */\n Drop: 'Drop',\n /**\n * Insert a new entity into editor\n */\n InsertEntity: 'InsertEntity',\n /**\n * Editor is switched to dark mode, content color is changed\n */\n SwitchToDarkMode: 'SwitchToDarkMode',\n /**\n * Editor is switched to light mode, content color is changed\n */\n SwitchToLightMode: 'SwitchToLightMode',\n /**\n * List chain reorganized numbers of lists\n */\n ListChain: 'ListChain',\n /**\n * Keyboard event, used by Content Model.\n * Data of this event will be the key code number\n */\n Keyboard: 'Keyboard',\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberingListType.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"NumberingListType.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/constants/NumberingListType.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,iBAAiB,GAAG;IAC7B;;OAEG;IACH,GAAG,EAAE,CAAC;IACN;;OAEG;IACH,OAAO,EAAE,CAAC;IACV;;OAEG;IACH,WAAW,EAAE,CAAC;IACd;;OAEG;IACH,kBAAkB,EAAE,CAAC;IACrB;;OAEG;IACH,wBAAwB,EAAE,CAAC;IAC3B;;OAEG;IACH,UAAU,EAAE,CAAC;IACb;;OAEG;IACH,qBAAqB,EAAE,CAAC;IACxB;;OAEG;IACH,2BAA2B,EAAE,CAAC;IAC9B;;OAEG;IACH,cAAc,EAAE,CAAC;IACjB;;OAEG;IACH,UAAU,EAAE,CAAC;IACb;;OAEG;IACH,qBAAqB,EAAE,EAAE;IACzB;;OAEG;IACH,2BAA2B,EAAE,EAAE;IAC/B;;OAEG;IACH,cAAc,EAAE,EAAE;IAClB;;OAEG;IACH,UAAU,EAAE,EAAE;IACd;;OAEG;IACH,qBAAqB,EAAE,EAAE;IACzB;;OAEG;IACH,2BAA2B,EAAE,EAAE;IAC/B;;OAEG;IACH,cAAc,EAAE,EAAE;IAClB;;OAEG;IACH,UAAU,EAAE,EAAE;IACd;;OAEG;IACH,qBAAqB,EAAE,EAAE;IACzB;;OAEG;IACH,2BAA2B,EAAE,EAAE;IAC/B;;OAEG;IACH,cAAc,EAAE,EAAE;IAClB;;OAEG;IACH,GAAG,EAAE,EAAE;CACV,CAAC","sourcesContent":["/**\n * Enum used to control the different types of numbering list\n */\nexport const NumberingListType = {\n /**\n * Minimum value of the enum\n */\n Min: 1,\n /**\n * Numbering triggered by 1.\n */\n Decimal: 1,\n /**\n * Numbering triggered by 1-\n */\n DecimalDash: 2,\n /**\n * Numbering triggered by 1)\n */\n DecimalParenthesis: 3,\n /**\n * Numbering triggered by (1)\n */\n DecimalDoubleParenthesis: 4,\n /**\n * Numbering triggered by a.\n */\n LowerAlpha: 5,\n /**\n * Numbering triggered by a)\n */\n LowerAlphaParenthesis: 6,\n /**\n * Numbering triggered by (a)\n */\n LowerAlphaDoubleParenthesis: 7,\n /**\n * Numbering triggered by a-\n */\n LowerAlphaDash: 8,\n /**\n * Numbering triggered by A.\n */\n UpperAlpha: 9,\n /**\n * Numbering triggered by A)\n */\n UpperAlphaParenthesis: 10,\n /**\n * Numbering triggered by (A)\n */\n UpperAlphaDoubleParenthesis: 11,\n /**\n * Numbering triggered by A-\n */\n UpperAlphaDash: 12,\n /**\n * Numbering triggered by i.\n */\n LowerRoman: 13,\n /**\n * Numbering triggered by i)\n */\n LowerRomanParenthesis: 14,\n /**\n * Numbering triggered by (i)\n */\n LowerRomanDoubleParenthesis: 15,\n /**\n * Numbering triggered by i-\n */\n LowerRomanDash: 16,\n /**\n * Numbering triggered by I.\n */\n UpperRoman: 17,\n /**\n * Numbering triggered by I)\n */\n UpperRomanParenthesis: 18,\n /**\n * Numbering triggered by (I)\n */\n UpperRomanDoubleParenthesis: 19,\n /**\n * Numbering triggered by I-\n */\n UpperRomanDash: 20,\n /**\n * Maximum value of the enum\n */\n Max: 20,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableBorderFormat.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"TableBorderFormat.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/constants/TableBorderFormat.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,iBAAiB,GAAG;IAC7B;;OAEG;IACH,GAAG,EAAE,CAAC;IAEN;;;;;;OAMG;IACH,OAAO,EAAE,CAAC;IAEV;;;;;;OAMG;IACH,mBAAmB,EAAE,CAAC;IAEtB;;;;;OAKG;IACH,eAAe,EAAE,CAAC;IAElB;;;;;;OAMG;IACH,aAAa,EAAE,CAAC;IAEhB;;;;;;OAMG;IACH,yBAAyB,EAAE,CAAC;IAE5B;;;;;;;OAOG;IACH,aAAa,EAAE,CAAC;IAEhB;;;;;;;OAOG;IACH,aAAa,EAAE,CAAC;IAEhB;;;;;OAKG;IACH,aAAa,EAAE,CAAC;IAEhB;;OAEG;IACH,KAAK,EAAE,CAAC;IAER;;OAEG;IACH,GAAG,EAAE,CAAC;CACT,CAAC","sourcesContent":["/**\n * Table format border\n */\nexport const TableBorderFormat = {\n /**\n * Minimum value\n */\n Min: 0,\n\n /**\n * All border of the table are displayed\n * __ __ __\n * |__|__|__|\n * |__|__|__|\n * |__|__|__|\n */\n Default: 0,\n\n /**\n * Middle vertical border are not displayed\n * __ __ __\n * |__ __ __|\n * |__ __ __|\n * |__ __ __|\n */\n ListWithSideBorders: 1,\n\n /**\n * All borders except header rows borders are displayed\n * __ __ __\n * __|__|__\n * __|__|__\n */\n NoHeaderBorders: 2,\n\n /**\n * The left and right border of the table are not displayed\n * __ __ __\n * __|__|__\n * __|__|__\n * __|__|__\n */\n NoSideBorders: 3,\n\n /**\n * Only the borders that divides the header row, first column and externals are displayed\n * __ __ __\n * |__ __ __|\n * | | |\n * |__|__ __|\n */\n FirstColumnHeaderExternal: 4,\n\n /**\n * The header row has no vertical border, except for the first one\n * The first column has no horizontal border, except for the first one\n * __ __ __\n * |__ __ __\n * | |__|__|\n * | |__|__|\n */\n EspecialType1: 5,\n\n /**\n * The header row has no vertical border, except for the first one\n * The only horizontal border of the table is the top and bottom of header row\n * __ __ __\n * |__ __ __\n * | | |\n * | | |\n */\n EspecialType2: 6,\n\n /**\n * The only borders are the bottom of header row and the right border of first column\n * __ __ __\n * |\n * |\n */\n EspecialType3: 7,\n\n /**\n * No border\n */\n Clear: 8,\n\n /**\n * Maximum value\n */\n Max: 8,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addUndoSnapshot.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"addUndoSnapshot.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/addUndoSnapshot.ts"],"names":[],"mappings":";;;AAAA,4EAA2E;AAG3E;;;;;;;;GAQG;AACI,IAAM,eAAe,GAAoB,UAAC,IAAI,EAAE,kBAAkB,EAAE,YAAY;IAC3E,IAAA,SAAS,GAAyB,IAAI,UAA7B,EAAE,YAAY,GAAW,IAAI,aAAf,EAAE,IAAI,GAAK,IAAI,KAAT,CAAU;IAC/C,IAAI,QAAQ,GAAoB,IAAI,CAAC;IAErC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QAC/B,uIAAuI;QACvI,IAAM,SAAS,GAAG,IAAA,iDAAuB,EAAC,IAAI,CAAC,CAAC;QAChD,IAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC;QAEpC,QAAQ,GAAG;YACP,IAAI,MAAA;YACJ,YAAY,cAAA;YACZ,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU;YAClC,SAAS,WAAA;SACZ,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAClE,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,KAAK,CAAC;KAC/C;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AArBW,QAAA,eAAe,mBAqB1B","sourcesContent":["import { createSnapshotSelection } from '../utils/createSnapshotSelection';\nimport type { AddUndoSnapshot, Snapshot } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Add an undo snapshot to current undo snapshot stack\n * @param core The EditorCore object\n * @param canUndoByBackspace True if this action can be undone when user press Backspace key (aka Auto Complete).\n * @param entityStates @optional Entity states related to this snapshot.\n * Each entity state will cause an EntityOperation event with operation = EntityOperation.UpdateEntityState\n * when undo/redo to this snapshot\n */\nexport const addUndoSnapshot: AddUndoSnapshot = (core, canUndoByBackspace, entityStates) => {\n const { lifecycle, physicalRoot, undo } = core;\n let snapshot: Snapshot | null = null;\n\n if (!lifecycle.shadowEditFragment) {\n // Need to create snapshot selection before retrieve innerHTML since HTML can be changed during creating selection when normalize table\n const selection = createSnapshotSelection(core);\n const html = physicalRoot.innerHTML;\n\n snapshot = {\n html,\n entityStates,\n isDarkMode: !!lifecycle.isDarkMode,\n selection,\n };\n\n undo.snapshotsManager.addSnapshot(snapshot, !!canUndoByBackspace);\n undo.snapshotsManager.hasNewContent = false;\n }\n\n return snapshot;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachDomEvent.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"attachDomEvent.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/attachDomEvent.ts"],"names":[],"mappings":";;;AAAA,2EAA4D;AAG5D;;;;;;;GAOG;AACI,IAAM,cAAc,GAAmB,UAAC,IAAI,EAAE,QAAQ;IACzD,IAAM,SAAS,GAAG,IAAA,2CAAa,EAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAA,GAAG;QAC7C,IAAA,KAAsC,QAAQ,CAAC,GAAG,CAAC,EAAjD,eAAe,qBAAA,EAAE,cAAc,oBAAkB,CAAC;QAC1D,IAAM,SAAS,GAAG,GAAgC,CAAC;QACnD,IAAM,OAAO,GAAG,UAAC,KAA4C;YACzD,IAAI,cAAc,EAAE;gBAChB,cAAc,CAAC,KAAK,CAAC,CAAC;aACzB;YAED,IAAI,eAAe,IAAI,IAAI,EAAE;gBACzB,IAAI,CAAC,GAAG,CAAC,YAAY,CACjB,IAAI,EACS;oBACT,SAAS,EAAE,eAAe;oBAC1B,QAAQ,EAAE,KAAK;iBAClB,EACD,KAAK,CAAC,aAAa,CACtB,CAAC;aACL;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEtD,OAAO;YACH,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,cAAM,OAAA,SAAS,CAAC,OAAO,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS,EAAE,EAAX,CAAW,CAAC,EAA3C,CAA2C,CAAC;AAC7D,CAAC,CAAC;AA7BW,QAAA,cAAc,kBA6BzB","sourcesContent":["import { getObjectKeys } from 'roosterjs-content-model-dom';\nimport type { AttachDomEvent, PluginEvent } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Attach a DOM event to the editor content DIV\n * @param core The EditorCore object\n * @param eventName The DOM event name\n * @param pluginEventType Optional event type. When specified, editor will trigger a plugin event with this name when the DOM event is triggered\n * @param beforeDispatch Optional callback function to be invoked when the DOM event is triggered before trigger plugin event\n */\nexport const attachDomEvent: AttachDomEvent = (core, eventMap) => {\n const disposers = getObjectKeys(eventMap || {}).map(key => {\n const { pluginEventType, beforeDispatch } = eventMap[key];\n const eventName = key as keyof HTMLElementEventMap;\n const onEvent = (event: HTMLElementEventMap[typeof eventName]) => {\n if (beforeDispatch) {\n beforeDispatch(event);\n }\n\n if (pluginEventType != null) {\n core.api.triggerEvent(\n core,\n <PluginEvent>{\n eventType: pluginEventType,\n rawEvent: event,\n },\n false /*broadcast*/\n );\n }\n };\n\n core.logicalRoot.addEventListener(eventName, onEvent);\n\n return () => {\n core.logicalRoot.removeEventListener(eventName, onEvent);\n };\n });\n\n return () => disposers.forEach(disposers => disposers());\n};\n"]}
|
|
@@ -23,12 +23,15 @@ var createContentModel = function (core, option, selectionOverride) {
|
|
|
23
23
|
return cachedModel;
|
|
24
24
|
}
|
|
25
25
|
else {
|
|
26
|
-
var selection = selectionOverride
|
|
26
|
+
var selection = selectionOverride == 'none'
|
|
27
|
+
? undefined
|
|
28
|
+
: selectionOverride || core.api.getDOMSelection(core) || undefined;
|
|
27
29
|
var saveIndex = !option && !selectionOverride;
|
|
28
30
|
var editorContext = core.api.createEditorContext(core, saveIndex);
|
|
31
|
+
var settings = core.environment.domToModelSettings;
|
|
29
32
|
var domToModelContext = option
|
|
30
|
-
? (0, roosterjs_content_model_dom_1.createDomToModelContext)(editorContext,
|
|
31
|
-
: (0, roosterjs_content_model_dom_1.createDomToModelContextWithConfig)(
|
|
33
|
+
? (0, roosterjs_content_model_dom_1.createDomToModelContext)(editorContext, settings.builtIn, settings.customized, option)
|
|
34
|
+
: (0, roosterjs_content_model_dom_1.createDomToModelContextWithConfig)(settings.calculated, editorContext);
|
|
32
35
|
var model = (0, roosterjs_content_model_dom_1.domToContentModel)(core.logicalRoot, domToModelContext, selection);
|
|
33
36
|
if (saveIndex) {
|
|
34
37
|
core.cache.cachedModel = model;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createContentModel.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"createContentModel.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/createContentModel.ts"],"names":[],"mappings":";;;AAAA,4DAA2D;AAC3D,2EAIqC;AAGrC;;;;;;GAMG;AACI,IAAM,kBAAkB,GAAuB,UAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB;;IAClF,6EAA6E;IAC7E,MAAA,IAAI,CAAC,KAAK,CAAC,oBAAoB,0CAAE,cAAc,EAAE,CAAC;IAElD,IAAI,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IAEpE,IAAI,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QAClD,6EAA6E;QAC7E,WAAW,GAAG,IAAA,uBAAU,EAAC,WAAW,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;KACzE;IAED,IAAI,WAAW,EAAE;QACb,OAAO,WAAW,CAAC;KACtB;SAAM;QACH,IAAM,SAAS,GACX,iBAAiB,IAAI,MAAM;YACvB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QAC3E,IAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC;QAChD,IAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpE,IAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;QACrD,IAAM,iBAAiB,GAAG,MAAM;YAC5B,CAAC,CAAC,IAAA,qDAAuB,EAAC,aAAa,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;YACvF,CAAC,CAAC,IAAA,+DAAiC,EAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAE5E,IAAM,KAAK,GAAG,IAAA,+CAAiB,EAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;QAEhF,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC;SAC1C;QAED,OAAO,KAAK,CAAC;KAChB;AACL,CAAC,CAAC;AAlCW,QAAA,kBAAkB,sBAkC7B","sourcesContent":["import { cloneModel } from '../publicApi/model/cloneModel';\nimport {\n createDomToModelContext,\n createDomToModelContextWithConfig,\n domToContentModel,\n} from 'roosterjs-content-model-dom';\nimport type { CreateContentModel } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Create Content Model from DOM tree in this editor\n * @param core The editor core object\n * @param option The option to customize the behavior of DOM to Content Model conversion\n * @param selectionOverride When passed, use this selection range instead of current selection in editor\n */\nexport const createContentModel: CreateContentModel = (core, option, selectionOverride) => {\n // Flush all mutations if any, so that we can get an up-to-date Content Model\n core.cache.textMutationObserver?.flushMutations();\n\n let cachedModel = selectionOverride ? null : core.cache.cachedModel;\n\n if (cachedModel && core.lifecycle.shadowEditFragment) {\n // When in shadow edit, use a cloned model so we won't pollute the cached one\n cachedModel = cloneModel(cachedModel, { includeCachedElement: true });\n }\n\n if (cachedModel) {\n return cachedModel;\n } else {\n const selection =\n selectionOverride == 'none'\n ? undefined\n : selectionOverride || core.api.getDOMSelection(core) || undefined;\n const saveIndex = !option && !selectionOverride;\n const editorContext = core.api.createEditorContext(core, saveIndex);\n const settings = core.environment.domToModelSettings;\n const domToModelContext = option\n ? createDomToModelContext(editorContext, settings.builtIn, settings.customized, option)\n : createDomToModelContextWithConfig(settings.calculated, editorContext);\n\n const model = domToContentModel(core.logicalRoot, domToModelContext, selection);\n\n if (saveIndex) {\n core.cache.cachedModel = model;\n core.cache.cachedSelection = selection;\n }\n\n return model;\n }\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createEditorContext.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"createEditorContext.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/createEditorContext.ts"],"names":[],"mappings":";;;;AAAA,0FAAyF;AAGzF;;;GAGG;AACI,IAAM,mBAAmB,GAAwB,UAAC,IAAI,EAAE,SAAS;;IAC5D,IAAA,SAAS,GAA8D,IAAI,UAAlE,EAAE,MAAM,GAAsD,IAAI,OAA1D,EAAE,gBAAgB,GAAoC,IAAI,iBAAxC,EAAE,WAAW,GAAuB,IAAI,YAA3B,EAAE,KAAK,GAAgB,IAAI,MAApB,EAAE,SAAS,GAAK,IAAI,UAAT,CAAU;IAEpF,IAAM,OAAO,2BACT,UAAU,EAAE,SAAS,CAAC,UAAU,EAChC,aAAa,EAAE,MAAM,CAAC,aAAa,EACnC,aAAa,EAAE,MAAA,MAAM,CAAC,aAAa,mCAAI,SAAS,EAChD,gBAAgB,EAAE,gBAAgB,EAClC,qBAAqB,EAAE,IAAI,EAC3B,iBAAiB,EAAE,IAAI,EACvB,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EACpD,SAAS,EAAE,SAAS,CAAC,kBAAkB,EAAE,IACtC,IAAA,+DAA8B,EAAC,WAAW,CAAC,aAAa,CAAC,CAC/D,CAAC;IAEF,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEnC,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAlBW,QAAA,mBAAmB,uBAkB9B;AAEF,SAAS,YAAY,CAAC,OAAoB,EAAE,OAAsB;;IAC9D,IAAM,KAAK,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC,WAAW,0CAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE5E,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,KAAI,KAAK,EAAE;QAC3B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;KAC5B;AACL,CAAC","sourcesContent":["import { getRootComputedStyleForContext } from '../utils/getRootComputedStyleForContext';\nimport type { EditorContext, CreateEditorContext } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Create a EditorContext object used by ContentModel API\n */\nexport const createEditorContext: CreateEditorContext = (core, saveIndex) => {\n const { lifecycle, format, darkColorHandler, logicalRoot, cache, domHelper } = core;\n\n const context: EditorContext = {\n isDarkMode: lifecycle.isDarkMode,\n defaultFormat: format.defaultFormat,\n pendingFormat: format.pendingFormat ?? undefined,\n darkColorHandler: darkColorHandler,\n addDelimiterForEntity: true,\n allowCacheElement: true,\n domIndexer: saveIndex ? cache.domIndexer : undefined,\n zoomScale: domHelper.calculateZoomScale(),\n ...getRootComputedStyleForContext(logicalRoot.ownerDocument),\n };\n\n checkRootRtl(logicalRoot, context);\n\n return context;\n};\n\nfunction checkRootRtl(element: HTMLElement, context: EditorContext) {\n const style = element?.ownerDocument.defaultView?.getComputedStyle(element);\n\n if (style?.direction == 'rtl') {\n context.isRootRtl = true;\n }\n}\n"]}
|
package/lib/coreApi/focus.js
CHANGED
|
@@ -9,12 +9,12 @@ exports.focus = void 0;
|
|
|
9
9
|
var focus = function (core) {
|
|
10
10
|
var _a;
|
|
11
11
|
if (!core.lifecycle.shadowEditFragment) {
|
|
12
|
-
var api = core.api, selection = core.selection;
|
|
13
|
-
if (!
|
|
12
|
+
var api = core.api, domHelper = core.domHelper, selection = core.selection;
|
|
13
|
+
if (!domHelper.hasFocus() && ((_a = selection.selection) === null || _a === void 0 ? void 0 : _a.type) == 'range') {
|
|
14
14
|
api.setDOMSelection(core, selection.selection, true /*skipSelectionChangedEvent*/);
|
|
15
15
|
}
|
|
16
16
|
// fallback, in case editor still have no focus
|
|
17
|
-
if (!
|
|
17
|
+
if (!domHelper.hasFocus()) {
|
|
18
18
|
core.logicalRoot.focus();
|
|
19
19
|
}
|
|
20
20
|
}
|
package/lib/coreApi/focus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"focus.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/focus.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACI,IAAM,KAAK,GAAU,UAAA,IAAI;;IAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QAC5B,IAAA,GAAG,GAA2B,IAAI,IAA/B,EAAE,SAAS,GAAgB,IAAI,UAApB,EAAE,SAAS,GAAK,IAAI,UAAT,CAAU;QAE3C,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAA,MAAA,SAAS,CAAC,SAAS,0CAAE,IAAI,KAAI,OAAO,EAAE;YAC/D,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;SACtF;QAED,+CAA+C;QAC/C,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE;YACvB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;SAC5B;KACJ;AACL,CAAC,CAAC;AAbW,QAAA,KAAK,SAahB","sourcesContent":["import type { Focus } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Focus to editor. If there is a cached selection range, use it as current selection\n * @param core The EditorCore object\n */\nexport const focus: Focus = core => {\n if (!core.lifecycle.shadowEditFragment) {\n const { api, domHelper, selection } = core;\n\n if (!domHelper.hasFocus() && selection.selection?.type == 'range') {\n api.setDOMSelection(core, selection.selection, true /*skipSelectionChangedEvent*/);\n }\n\n // fallback, in case editor still have no focus\n if (!domHelper.hasFocus()) {\n core.logicalRoot.focus();\n }\n }\n};\n"]}
|
|
@@ -23,7 +23,7 @@ var formatContentModel = function (core, formatter, options) {
|
|
|
23
23
|
rawEvent: rawEvent,
|
|
24
24
|
newImages: [],
|
|
25
25
|
};
|
|
26
|
-
var hasFocus = core.
|
|
26
|
+
var hasFocus = core.domHelper.hasFocus();
|
|
27
27
|
var changed = formatter(model, context);
|
|
28
28
|
var skipUndoSnapshot = context.skipUndoSnapshot, clearModelCache = context.clearModelCache, entityStates = context.entityStates, canUndoByBackspace = context.canUndoByBackspace;
|
|
29
29
|
if (changed) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatContentModel.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"formatContentModel.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/formatContentModel.ts"],"names":[],"mappings":";;;;AAAA,0DAAyD;AAUzD;;;;;;;;;GASG;AACI,IAAM,kBAAkB,GAAuB,UAAC,IAAI,EAAE,SAAS,EAAE,OAAO;;IACrE,IAAA,KACF,OAAO,IAAI,EAAE,EADT,OAAO,aAAA,EAAE,aAAa,mBAAA,EAAE,aAAa,mBAAA,EAAE,YAAY,kBAAA,EAAE,QAAQ,cAAA,EAAE,iBAAiB,uBACvE,CAAC;IAClB,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACzF,IAAM,OAAO,GAA8B;QACvC,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,EAAE;QACnB,QAAQ,UAAA;QACR,SAAS,EAAE,EAAE;KAChB,CAAC;IAEF,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;IAE3C,IAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClC,IAAA,gBAAgB,GAAwD,OAAO,iBAA/D,EAAE,eAAe,GAAuC,OAAO,gBAA9C,EAAE,YAAY,GAAyB,OAAO,aAAhC,EAAE,kBAAkB,GAAK,OAAO,mBAAZ,CAAa;IAExF,IAAI,OAAO,EAAE;QACT,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACpC,IAAM,iBAAiB,GAAG,CAAC,gBAAgB,IAAI,CAAC,QAAQ,CAAC;QACzD,IAAI,SAAS,SAA0B,CAAC;QAExC,IAAI,iBAAiB,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAE1B,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;SACtE;QAED,IAAI;YACA,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAE5B,SAAS;gBACL,MAAA,IAAI,CAAC,GAAG,CAAC,eAAe,CACpB,IAAI,EACJ,KAAK,EACL,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,4EAA4E;gBAC9H,aAAa,CAChB,mCAAI,SAAS,CAAC;YAEnB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAE9C,IAAM,SAAS,GAAwB;gBACnC,SAAS,EAAE,gBAAgB;gBAC3B,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;gBACjD,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gBAClD,MAAM,EAAE,YAAY,IAAI,2BAAY,CAAC,MAAM;gBAC3C,IAAI,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,EAAI;gBACvB,aAAa,EAAE,OAAO;gBACtB,eAAe,EAAE,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC;aACzD,CAAC;YAEF,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAE3D,IAAI,kBAAkB,IAAI,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,OAAO,EAAE;gBAClD,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC;gBACxD,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;aACrD;YAED,IAAI,iBAAiB,EAAE;gBACnB,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;aACtE;iBAAM;gBACH,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,IAAI,CAAC;aACnD;SACJ;gBAAS;YACN,IAAI,CAAC,QAAQ,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;aAC9B;SACJ;KACJ;SAAM;QACH,IAAI,eAAe,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC;SAC1C;QAED,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;KACtE;AACL,CAAC,CAAC;AA3EW,QAAA,kBAAkB,sBA2E7B;AAEF,SAAS,YAAY,CAAC,IAAgB,EAAE,OAAkC;IACtE,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9B,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAEnD,IAAI,QAAQ,EAAE;YACF,IAAA,IAAI,GAAY,QAAQ,KAApB,EAAE,KAAK,GAAK,QAAQ,MAAb,CAAc;YACjC,IAAM,eAAe,GAAG,EAAE,CAAC;YAC3B,IAAM,UAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,eAAe,CAAC,CAAC;YACzD,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,KAAK;gBAC3B,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAM,UAAQ,OAAI,CAAC;YAC5C,CAAC,CAAC,CAAC;SACN;KACJ;AACL,CAAC;AAED,SAAS,mBAAmB,CACxB,IAAgB,EAChB,OAAkC,EAClC,SAA+B;;IAE/B,IAAM,aAAa,GACf,OAAO,CAAC,gBAAgB,IAAI,UAAU;QAClC,CAAC,CAAC,MAAA,IAAI,CAAC,MAAM,CAAC,aAAa,0CAAE,MAAM;QACnC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;IAEnC,IAAI,aAAa,IAAI,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,KAAI,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE;QAC1E,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG;YACxB,MAAM,4BAAO,aAAa,CAAE;YAC5B,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,cAAc;YAC5C,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,WAAW;SACzC,CAAC;KACL;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAkC,EAAE,QAAgB;IAC5E,OAAO,OAAO,CAAC,WAAW;SACrB,GAAG,CACA,UAAC,MAAM,IAAoB,OAAA,CAAC;QACxB,MAAM,QAAA;QACN,SAAS,EAAE,WAAW;QACtB,QAAQ,UAAA;KACX,CAAC,EAJyB,CAIzB,CACL;SACA,MAAM,CACH,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,CAAC;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,UAAA;KACX,CAAC,EAJmC,CAInC,CAAC,CACN,CAAC;AACV,CAAC","sourcesContent":["import { ChangeSource } from '../constants/ChangeSource';\nimport type {\n ChangedEntity,\n ContentChangedEvent,\n DOMSelection,\n FormatContentModel,\n FormatContentModelContext,\n EditorCore,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * The general API to do format change with Content Model\n * It will grab a Content Model for current editor content, and invoke a callback function\n * to do format change. Then according to the return value, write back the modified content model into editor.\n * If there is cached model, it will be used and updated.\n * @param core The EditorCore object\n * @param formatter Formatter function, see ContentModelFormatter\n * @param options More options, see FormatContentModelOptions\n */\nexport const formatContentModel: FormatContentModel = (core, formatter, options) => {\n const { apiName, onNodeCreated, getChangeData, changeSource, rawEvent, selectionOverride } =\n options || {};\n const model = core.api.createContentModel(core, undefined /*option*/, selectionOverride);\n const context: FormatContentModelContext = {\n newEntities: [],\n deletedEntities: [],\n rawEvent,\n newImages: [],\n };\n\n const hasFocus = core.domHelper.hasFocus();\n\n const changed = formatter(model, context);\n const { skipUndoSnapshot, clearModelCache, entityStates, canUndoByBackspace } = context;\n\n if (changed) {\n const isNested = core.undo.isNested;\n const shouldAddSnapshot = !skipUndoSnapshot && !isNested;\n let selection: DOMSelection | undefined;\n\n if (shouldAddSnapshot) {\n core.undo.isNested = true;\n\n core.api.addUndoSnapshot(core, !!canUndoByBackspace, entityStates);\n }\n\n try {\n handleImages(core, context);\n\n selection =\n core.api.setContentModel(\n core,\n model,\n hasFocus ? undefined : { ignoreSelection: true }, // If editor did not have focus before format, do not set focus after format\n onNodeCreated\n ) ?? undefined;\n\n handlePendingFormat(core, context, selection);\n\n const eventData: ContentChangedEvent = {\n eventType: 'contentChanged',\n contentModel: clearModelCache ? undefined : model,\n selection: clearModelCache ? undefined : selection,\n source: changeSource || ChangeSource.Format,\n data: getChangeData?.(),\n formatApiName: apiName,\n changedEntities: getChangedEntities(context, rawEvent),\n };\n\n core.api.triggerEvent(core, eventData, true /*broadcast*/);\n\n if (canUndoByBackspace && selection?.type == 'range') {\n core.undo.posContainer = selection.range.startContainer;\n core.undo.posOffset = selection.range.startOffset;\n }\n\n if (shouldAddSnapshot) {\n core.api.addUndoSnapshot(core, !!canUndoByBackspace, entityStates);\n } else {\n core.undo.snapshotsManager.hasNewContent = true;\n }\n } finally {\n if (!isNested) {\n core.undo.isNested = false;\n }\n }\n } else {\n if (clearModelCache) {\n core.cache.cachedModel = undefined;\n core.cache.cachedSelection = undefined;\n }\n\n handlePendingFormat(core, context, core.api.getDOMSelection(core));\n }\n};\n\nfunction handleImages(core: EditorCore, context: FormatContentModelContext) {\n if (context.newImages.length > 0) {\n const viewport = core.api.getVisibleViewport(core);\n\n if (viewport) {\n const { left, right } = viewport;\n const minMaxImageSize = 10;\n const maxWidth = Math.max(right - left, minMaxImageSize);\n context.newImages.forEach(image => {\n image.format.maxWidth = `${maxWidth}px`;\n });\n }\n }\n}\n\nfunction handlePendingFormat(\n core: EditorCore,\n context: FormatContentModelContext,\n selection?: DOMSelection | null\n) {\n const pendingFormat =\n context.newPendingFormat == 'preserve'\n ? core.format.pendingFormat?.format\n : context.newPendingFormat;\n\n if (pendingFormat && selection?.type == 'range' && selection.range.collapsed) {\n core.format.pendingFormat = {\n format: { ...pendingFormat },\n posContainer: selection.range.startContainer,\n posOffset: selection.range.startOffset,\n };\n }\n}\n\nfunction getChangedEntities(context: FormatContentModelContext, rawEvent?: Event): ChangedEntity[] {\n return context.newEntities\n .map(\n (entity): ChangedEntity => ({\n entity,\n operation: 'newEntity',\n rawEvent,\n })\n )\n .concat(\n context.deletedEntities.map(entry => ({\n entity: entry.entity,\n operation: entry.operation,\n rawEvent,\n }))\n );\n}\n"]}
|
|
@@ -10,7 +10,7 @@ var getDOMSelection = function (core) {
|
|
|
10
10
|
}
|
|
11
11
|
else {
|
|
12
12
|
var selection = core.selection.selection;
|
|
13
|
-
return selection && (selection.type != 'range' || !core.
|
|
13
|
+
return selection && (selection.type != 'range' || !core.domHelper.hasFocus())
|
|
14
14
|
? selection
|
|
15
15
|
: getNewSelection(core);
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDOMSelection.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"getDOMSelection.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/getDOMSelection.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACI,IAAM,eAAe,GAAoB,UAAA,IAAI;IAChD,IAAI,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QACnC,OAAO,IAAI,CAAC;KACf;SAAM;QACH,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAE3C,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YACzE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAC/B;AACL,CAAC,CAAC;AAVW,QAAA,eAAe,mBAU1B;AAEF,SAAS,eAAe,CAAC,IAAgB;;IACrC,IAAM,SAAS,GAAG,MAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,0CAAE,YAAY,EAAE,CAAC;IAC7E,IAAM,KAAK,GAAG,SAAS,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAErF,OAAO,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAC;QACpE,CAAC,CAAC;YACI,IAAI,EAAE,OAAO;YACb,KAAK,OAAA;YACL,UAAU,EAAE,mBAAmB,CAAC,SAAS,CAAC;SAC7C;QACH,CAAC,CAAC,IAAI,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAuC;IAChE,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE;QACvC,IAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtC,OAAO,CACH,CAAC,KAAK,CAAC,SAAS;YAChB,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC,YAAY;YACzC,SAAS,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,CAC3C,CAAC;KACL;IAED,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["import type { DOMSelection, GetDOMSelection, EditorCore } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const getDOMSelection: GetDOMSelection = core => {\n if (core.lifecycle.shadowEditFragment) {\n return null;\n } else {\n const selection = core.selection.selection;\n\n return selection && (selection.type != 'range' || !core.domHelper.hasFocus())\n ? selection\n : getNewSelection(core);\n }\n};\n\nfunction getNewSelection(core: EditorCore): DOMSelection | null {\n const selection = core.logicalRoot.ownerDocument.defaultView?.getSelection();\n const range = selection && selection.rangeCount > 0 ? selection.getRangeAt(0) : null;\n\n return range && core.logicalRoot.contains(range.commonAncestorContainer)\n ? {\n type: 'range',\n range,\n isReverted: isSelectionReverted(selection),\n }\n : null;\n}\n\nfunction isSelectionReverted(selection: Selection | null | undefined): boolean {\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n return (\n !range.collapsed &&\n selection.focusNode != range.endContainer &&\n selection.focusOffset != range.endOffset\n );\n }\n\n return false;\n}\n"]}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getVisibleViewport = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
+
var roosterjs_content_model_dom_1 = require("roosterjs-content-model-dom");
|
|
5
6
|
/**
|
|
6
7
|
* @internal
|
|
7
8
|
* Retrieves the rect of the visible viewport of the editor.
|
|
@@ -42,7 +43,7 @@ exports.getVisibleViewport = getVisibleViewport;
|
|
|
42
43
|
function getIntersectedRect(elements, additionalRects) {
|
|
43
44
|
if (additionalRects === void 0) { additionalRects = []; }
|
|
44
45
|
var rects = elements
|
|
45
|
-
.map(function (element) { return normalizeRect(element.getBoundingClientRect()); })
|
|
46
|
+
.map(function (element) { return (0, roosterjs_content_model_dom_1.normalizeRect)(element.getBoundingClientRect()); })
|
|
46
47
|
.concat(additionalRects)
|
|
47
48
|
.filter(function (rect) { return !!rect; });
|
|
48
49
|
var result = {
|
|
@@ -53,15 +54,4 @@ function getIntersectedRect(elements, additionalRects) {
|
|
|
53
54
|
};
|
|
54
55
|
return result.top < result.bottom && result.left < result.right ? result : null;
|
|
55
56
|
}
|
|
56
|
-
function normalizeRect(clientRect) {
|
|
57
|
-
var _a = clientRect || { left: 0, right: 0, top: 0, bottom: 0 }, left = _a.left, right = _a.right, top = _a.top, bottom = _a.bottom;
|
|
58
|
-
return left === 0 && right === 0 && top === 0 && bottom === 0
|
|
59
|
-
? null
|
|
60
|
-
: {
|
|
61
|
-
left: Math.round(left),
|
|
62
|
-
right: Math.round(right),
|
|
63
|
-
top: Math.round(top),
|
|
64
|
-
bottom: Math.round(bottom),
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
57
|
//# sourceMappingURL=getVisibleViewport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getVisibleViewport.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"getVisibleViewport.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/getVisibleViewport.ts"],"names":[],"mappings":";;;;AAAA,2EAA4D;AAG5D;;;;GAIG;AACI,IAAM,kBAAkB,GAAuB,UAAA,IAAI;IACtD,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IAEtD,OAAO,kBAAkB,CACrB,eAAe,IAAI,IAAI,CAAC,YAAY;QAChC,CAAC,CAAC,CAAC,eAAe,CAAC;QACnB,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAC7C,CAAC;AACN,CAAC,CAAC;AARW,QAAA,kBAAkB,sBAQ7B;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAS,kBAAkB,CAAC,QAAuB,EAAE,eAA4B;IAA5B,gCAAA,EAAA,oBAA4B;IAC7E,IAAM,KAAK,GAAG,QAAQ;SACjB,GAAG,CAAC,UAAA,OAAO,IAAI,OAAA,IAAA,2CAAa,EAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,EAA9C,CAA8C,CAAC;SAC9D,MAAM,CAAC,eAAe,CAAC;SACvB,MAAM,CAAC,UAAC,IAAiB,IAAmB,OAAA,CAAC,CAAC,IAAI,EAAN,CAAM,CAAC,CAAC;IAEzD,IAAM,MAAM,GAAS;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,qDAAQ,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,EAAL,CAAK,CAAC,UAAC;QACvC,MAAM,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,qDAAQ,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,EAAR,CAAQ,CAAC,UAAC;QAC7C,IAAI,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,qDAAQ,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,EAAN,CAAM,CAAC,UAAC;QACzC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,qDAAQ,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,EAAP,CAAO,CAAC,UAAC;KAC9C,CAAC;IAEF,OAAO,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC","sourcesContent":["import { normalizeRect } from 'roosterjs-content-model-dom';\nimport type { GetVisibleViewport, Rect } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Retrieves the rect of the visible viewport of the editor.\n * @param core The EditorCore object\n */\nexport const getVisibleViewport: GetVisibleViewport = core => {\n const scrollContainer = core.domEvent.scrollContainer;\n\n return getIntersectedRect(\n scrollContainer == core.physicalRoot\n ? [scrollContainer]\n : [scrollContainer, core.physicalRoot]\n );\n};\n\n/**\n * Get the intersected Rect of elements provided\n *\n * @example\n * The result of the following Elements Rects would be:\n {\n top: Element2.top,\n bottom: Element1.bottom,\n left: Element2.left,\n right: Element2.right\n }\n +-------------------------+\n | Element 1 |\n | +-----------------+ |\n | | Element2 | |\n | | | |\n | | | |\n +-------------------------+\n | |\n +-----------------+\n\n * @param elements Elements to use.\n * @param additionalRects additional rects to use\n * @returns If the Rect is valid return the rect, if not, return null.\n */\nfunction getIntersectedRect(elements: HTMLElement[], additionalRects: Rect[] = []): Rect | null {\n const rects = elements\n .map(element => normalizeRect(element.getBoundingClientRect()))\n .concat(additionalRects)\n .filter((rect: Rect | null): rect is Rect => !!rect);\n\n const result: Rect = {\n top: Math.max(...rects.map(r => r.top)),\n bottom: Math.min(...rects.map(r => r.bottom)),\n left: Math.max(...rects.map(r => r.left)),\n right: Math.min(...rects.map(r => r.right)),\n };\n\n return result.top < result.bottom && result.left < result.right ? result : null;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restoreUndoSnapshot.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"restoreUndoSnapshot.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/restoreUndoSnapshot.ts"],"names":[],"mappings":";;;AAAA,0DAAyD;AACzD,wEAAuE;AACvE,oEAAmE;AACnE,8EAA6E;AAG7E;;;;;GAKG;AACI,IAAM,mBAAmB,GAAwB,UAAC,IAAI,EAAE,QAAQ;IACnE,IAAI,CAAC,GAAG,CAAC,YAAY,CACjB,IAAI,EACJ;QACI,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,QAAQ,CAAC,IAAI;KAC5B,EACD,IAAI,CAAC,aAAa,CACrB,CAAC;IAEF,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAE7B,IAAA,yCAAmB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpC,IAAA,mDAAwB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzC,IAAA,6CAAqB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEtC,IAAM,OAAK,GAAwB;YAC/B,SAAS,EAAE,gBAAgB;YAC3B,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,MAAM,EAAE,2BAAY,CAAC,UAAU;SAClC,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,OAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;KAC3D;YAAS;QACN,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KACjC;AACL,CAAC,CAAC;AA3BW,QAAA,mBAAmB,uBA2B9B","sourcesContent":["import { ChangeSource } from '../constants/ChangeSource';\nimport { restoreSnapshotColors } from '../utils/restoreSnapshotColors';\nimport { restoreSnapshotHTML } from '../utils/restoreSnapshotHTML';\nimport { restoreSnapshotSelection } from '../utils/restoreSnapshotSelection';\nimport type { ContentChangedEvent, RestoreUndoSnapshot } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Restore an undo snapshot into editor\n * @param core The editor core object\n * @param step Steps to move, can be 0, positive or negative\n */\nexport const restoreUndoSnapshot: RestoreUndoSnapshot = (core, snapshot) => {\n core.api.triggerEvent(\n core,\n {\n eventType: 'beforeSetContent',\n newContent: snapshot.html,\n },\n true /*broadcast*/\n );\n\n try {\n core.undo.isRestoring = true;\n\n restoreSnapshotHTML(core, snapshot);\n restoreSnapshotSelection(core, snapshot);\n restoreSnapshotColors(core, snapshot);\n\n const event: ContentChangedEvent = {\n eventType: 'contentChanged',\n entityStates: snapshot.entityStates,\n source: ChangeSource.SetContent,\n };\n\n core.api.triggerEvent(core, event, false /*broadcast*/);\n } finally {\n core.undo.isRestoring = false;\n }\n};\n"]}
|
|
@@ -13,8 +13,8 @@ var setContentModel = function (core, model, option, onNodeCreated) {
|
|
|
13
13
|
var _a;
|
|
14
14
|
var editorContext = core.api.createEditorContext(core, true /*saveIndex*/);
|
|
15
15
|
var modelToDomContext = option
|
|
16
|
-
? (0, roosterjs_content_model_dom_1.createModelToDomContext)(editorContext, core.modelToDomSettings.builtIn, core.modelToDomSettings.customized, option)
|
|
17
|
-
: (0, roosterjs_content_model_dom_1.createModelToDomContextWithConfig)(core.modelToDomSettings.calculated, editorContext);
|
|
16
|
+
? (0, roosterjs_content_model_dom_1.createModelToDomContext)(editorContext, core.environment.modelToDomSettings.builtIn, core.environment.modelToDomSettings.customized, option)
|
|
17
|
+
: (0, roosterjs_content_model_dom_1.createModelToDomContextWithConfig)(core.environment.modelToDomSettings.calculated, editorContext);
|
|
18
18
|
modelToDomContext.onNodeCreated = onNodeCreated;
|
|
19
19
|
var selection = (0, roosterjs_content_model_dom_1.contentModelToDom)(core.logicalRoot.ownerDocument, core.logicalRoot, model, modelToDomContext);
|
|
20
20
|
if (!core.lifecycle.shadowEditFragment) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setContentModel.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"setContentModel.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/setContentModel.ts"],"names":[],"mappings":";;;AAAA,2EAIqC;AAGrC;;;;;;GAMG;AACI,IAAM,eAAe,GAAoB,UAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa;;IAC/E,IAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7E,IAAM,iBAAiB,GAAG,MAAM;QAC5B,CAAC,CAAC,IAAA,qDAAuB,EACnB,aAAa,EACb,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,OAAO,EAC3C,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,UAAU,EAC9C,MAAM,CACT;QACH,CAAC,CAAC,IAAA,+DAAiC,EAC7B,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,UAAU,EAC9C,aAAa,CAChB,CAAC;IAER,iBAAiB,CAAC,aAAa,GAAG,aAAa,CAAC;IAEhD,IAAM,SAAS,GAAG,IAAA,+CAAiB,EAC/B,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,WAAW,EAChB,KAAK,EACL,iBAAiB,CACpB,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QACpC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,IAAI,SAAS,CAAC;QAEpD,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,CAAA,IAAI,SAAS,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;SAC7C;aAAM;YACH,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;SACxC;QAED,8FAA8F;QAC9F,MAAA,IAAI,CAAC,KAAK,CAAC,oBAAoB,0CAAE,cAAc,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;KAClC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAtCW,QAAA,eAAe,mBAsC1B","sourcesContent":["import {\n contentModelToDom,\n createModelToDomContext,\n createModelToDomContextWithConfig,\n} from 'roosterjs-content-model-dom';\nimport type { SetContentModel } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Set content with content model\n * @param core The editor core object\n * @param model The content model to set\n * @param option Additional options to customize the behavior of Content Model to DOM conversion\n */\nexport const setContentModel: SetContentModel = (core, model, option, onNodeCreated) => {\n const editorContext = core.api.createEditorContext(core, true /*saveIndex*/);\n const modelToDomContext = option\n ? createModelToDomContext(\n editorContext,\n core.environment.modelToDomSettings.builtIn,\n core.environment.modelToDomSettings.customized,\n option\n )\n : createModelToDomContextWithConfig(\n core.environment.modelToDomSettings.calculated,\n editorContext\n );\n\n modelToDomContext.onNodeCreated = onNodeCreated;\n\n const selection = contentModelToDom(\n core.logicalRoot.ownerDocument,\n core.logicalRoot,\n model,\n modelToDomContext\n );\n\n if (!core.lifecycle.shadowEditFragment) {\n core.cache.cachedSelection = selection || undefined;\n\n if (!option?.ignoreSelection && selection) {\n core.api.setDOMSelection(core, selection);\n } else {\n core.selection.selection = selection;\n }\n\n // Clear pending mutations since we will use our latest model object to replace existing cache\n core.cache.textMutationObserver?.flushMutations();\n core.cache.cachedModel = model;\n }\n\n return selection;\n};\n"]}
|
|
@@ -40,7 +40,7 @@ var setDOMSelection = function (core, selection, skipSelectionChangedEvent) {
|
|
|
40
40
|
break;
|
|
41
41
|
case 'range':
|
|
42
42
|
(0, addRangeToSelection_1.addRangeToSelection)(doc, selection.range, selection.isReverted);
|
|
43
|
-
core.selection.selection = core.
|
|
43
|
+
core.selection.selection = core.domHelper.hasFocus() ? null : selection;
|
|
44
44
|
break;
|
|
45
45
|
default:
|
|
46
46
|
core.selection.selection = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setDOMSelection.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/setDOMSelection.ts"],"names":[],"mappings":"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","sourcesContent":["import { addRangeToSelection } from '../corePlugin/utils/addRangeToSelection';\nimport { isNodeOfType, toArray } from 'roosterjs-content-model-dom';\nimport { parseTableCells } from '../publicApi/domUtils/tableCellUtils';\nimport type {\n SelectionChangedEvent,\n SetDOMSelection,\n TableSelection,\n} from 'roosterjs-content-model-types';\n\nconst IMAGE_ID = 'image';\nconst TABLE_ID = 'table';\nconst CONTENT_DIV_ID = 'contentDiv';\nconst DEFAULT_SELECTION_BORDER_COLOR = '#DB626C';\nconst TABLE_CSS_RULE = '{background-color: rgb(198,198,198) !important;}';\nconst CARET_CSS_RULE = '{caret-color: transparent}';\nconst MAX_RULE_SELECTOR_LENGTH = 9000;\n\n/**\n * @internal\n */\nexport const setDOMSelection: SetDOMSelection = (core, selection, skipSelectionChangedEvent) => {\n // We are applying a new selection, so we don't need to apply cached selection in DOMEventPlugin.\n // Set skipReselectOnFocus to skip this behavior\n const skipReselectOnFocus = core.selection.skipReselectOnFocus;\n\n const doc = core.physicalRoot.ownerDocument;\n const sheet = core.selection.selectionStyleNode?.sheet;\n\n core.selection.skipReselectOnFocus = true;\n\n try {\n let selectionRules: string[] | undefined;\n const rootSelector = '#' + addUniqueId(core.physicalRoot, CONTENT_DIV_ID);\n\n switch (selection?.type) {\n case 'image':\n const image = selection.image;\n\n selectionRules = buildImageCSS(\n rootSelector,\n addUniqueId(image, IMAGE_ID),\n core.selection.imageSelectionBorderColor\n );\n core.selection.selection = selection;\n\n setRangeSelection(doc, image);\n break;\n case 'table':\n const { table, firstColumn, firstRow } = selection;\n\n selectionRules = buildTableCss(\n rootSelector,\n addUniqueId(table, TABLE_ID),\n selection\n );\n core.selection.selection = selection;\n\n setRangeSelection(doc, table.rows[firstRow]?.cells[firstColumn]);\n break;\n case 'range':\n addRangeToSelection(doc, selection.range, selection.isReverted);\n\n core.selection.selection = core.api.hasFocus(core) ? null : selection;\n break;\n\n default:\n core.selection.selection = null;\n break;\n }\n\n if (sheet) {\n for (let i = sheet.cssRules.length - 1; i >= 0; i--) {\n sheet.deleteRule(i);\n }\n\n if (selectionRules) {\n for (let i = 0; i < selectionRules.length; i++) {\n sheet.insertRule(selectionRules[i]);\n }\n }\n }\n } finally {\n core.selection.skipReselectOnFocus = skipReselectOnFocus;\n }\n\n if (!skipSelectionChangedEvent) {\n const eventData: SelectionChangedEvent = {\n eventType: 'selectionChanged',\n newSelection: selection,\n };\n\n core.api.triggerEvent(core, eventData, true /*broadcast*/);\n }\n};\n\nfunction buildImageCSS(editorSelector: string, imageId: string, borderColor?: string): string[] {\n const color = borderColor || DEFAULT_SELECTION_BORDER_COLOR;\n\n return [\n `${editorSelector} #${imageId} {outline-style:auto!important;outline-color:${color}!important;}`,\n `${editorSelector} ${CARET_CSS_RULE}`,\n ];\n}\n\nfunction buildTableCss(\n editorSelector: string,\n tableId: string,\n selection: TableSelection\n): string[] {\n const { firstColumn, firstRow, lastColumn, lastRow } = selection;\n const cells = parseTableCells(selection.table);\n const isAllTableSelected =\n firstRow == 0 &&\n firstColumn == 0 &&\n lastRow == cells.length - 1 &&\n lastColumn == (cells[lastRow]?.length ?? 0) - 1;\n const rootSelector = editorSelector + ' #' + tableId;\n const selectors = isAllTableSelected\n ? [rootSelector, `${rootSelector} *`]\n : handleTableSelected(rootSelector, selection, cells);\n\n const cssRules: string[] = [`${editorSelector} ${CARET_CSS_RULE}`];\n let currentRules: string = '';\n\n for (let i = 0; i < selectors.length; i++) {\n currentRules += (currentRules.length > 0 ? ',' : '') + selectors[i] || '';\n\n if (\n currentRules.length + (selectors[0]?.length || 0) > MAX_RULE_SELECTOR_LENGTH ||\n i == selectors.length - 1\n ) {\n cssRules.push(currentRules + ' ' + TABLE_CSS_RULE);\n currentRules = '';\n }\n }\n\n return cssRules;\n}\n\nfunction handleTableSelected(\n rootSelector: string,\n selection: TableSelection,\n cells: (HTMLTableCellElement | null)[][]\n) {\n const { firstRow, firstColumn, lastRow, lastColumn, table } = selection;\n const selectors: string[] = [];\n\n // Get whether table has thead, tbody or tfoot, then Set the start and end of each of the table children,\n // so we can build the selector according the element between the table and the row.\n let cont = 0;\n const indexes = toArray(table.childNodes)\n .filter(\n (node): node is HTMLTableSectionElement =>\n ['THEAD', 'TBODY', 'TFOOT'].indexOf(\n isNodeOfType(node, 'ELEMENT_NODE') ? node.tagName : ''\n ) > -1\n )\n .map(node => {\n const result = {\n el: node.tagName,\n start: cont,\n end: node.childNodes.length + cont,\n };\n\n cont = result.end;\n return result;\n });\n\n cells.forEach((row, rowIndex) => {\n let tdCount = 0;\n\n //Get current TBODY/THEAD/TFOOT\n const midElement = indexes.filter(ind => ind.start <= rowIndex && ind.end > rowIndex)[0];\n const middleElSelector = midElement ? '>' + midElement.el + '>' : '>';\n const currentRow =\n midElement && rowIndex + 1 >= midElement.start\n ? rowIndex + 1 - midElement.start\n : rowIndex + 1;\n\n for (let cellIndex = 0; cellIndex < row.length; cellIndex++) {\n const cell = row[cellIndex];\n\n if (cell) {\n tdCount++;\n\n if (\n rowIndex >= firstRow &&\n rowIndex <= lastRow &&\n cellIndex >= firstColumn &&\n cellIndex <= lastColumn\n ) {\n const selector = `${rootSelector}${middleElSelector} tr:nth-child(${currentRow})>${cell.tagName}:nth-child(${tdCount})`;\n\n selectors.push(selector, selector + ' *');\n }\n }\n }\n });\n\n return selectors;\n}\n\nfunction setRangeSelection(doc: Document, element: HTMLElement | undefined) {\n if (element && doc.contains(element)) {\n const range = doc.createRange();\n\n range.selectNode(element);\n range.collapse();\n\n addRangeToSelection(doc, range);\n }\n}\n\nfunction addUniqueId(element: HTMLElement, idPrefix: string): string {\n idPrefix = element.id || idPrefix;\n\n const doc = element.ownerDocument;\n let i = 0;\n\n while (!element.id || doc.querySelectorAll('#' + element.id).length > 1) {\n element.id = idPrefix + '_' + i++;\n }\n\n return element.id;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"setDOMSelection.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection.ts"],"names":[],"mappings":"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","sourcesContent":["import { addRangeToSelection } from '../corePlugin/utils/addRangeToSelection';\nimport { isNodeOfType, toArray } from 'roosterjs-content-model-dom';\nimport { parseTableCells } from '../publicApi/domUtils/tableCellUtils';\nimport type {\n SelectionChangedEvent,\n SetDOMSelection,\n TableSelection,\n} from 'roosterjs-content-model-types';\n\nconst IMAGE_ID = 'image';\nconst TABLE_ID = 'table';\nconst CONTENT_DIV_ID = 'contentDiv';\nconst DEFAULT_SELECTION_BORDER_COLOR = '#DB626C';\nconst TABLE_CSS_RULE = '{background-color: rgb(198,198,198) !important;}';\nconst CARET_CSS_RULE = '{caret-color: transparent}';\nconst MAX_RULE_SELECTOR_LENGTH = 9000;\n\n/**\n * @internal\n */\nexport const setDOMSelection: SetDOMSelection = (core, selection, skipSelectionChangedEvent) => {\n // We are applying a new selection, so we don't need to apply cached selection in DOMEventPlugin.\n // Set skipReselectOnFocus to skip this behavior\n const skipReselectOnFocus = core.selection.skipReselectOnFocus;\n\n const doc = core.physicalRoot.ownerDocument;\n const sheet = core.selection.selectionStyleNode?.sheet;\n\n core.selection.skipReselectOnFocus = true;\n\n try {\n let selectionRules: string[] | undefined;\n const rootSelector = '#' + addUniqueId(core.physicalRoot, CONTENT_DIV_ID);\n\n switch (selection?.type) {\n case 'image':\n const image = selection.image;\n\n selectionRules = buildImageCSS(\n rootSelector,\n addUniqueId(image, IMAGE_ID),\n core.selection.imageSelectionBorderColor\n );\n core.selection.selection = selection;\n\n setRangeSelection(doc, image);\n break;\n case 'table':\n const { table, firstColumn, firstRow } = selection;\n\n selectionRules = buildTableCss(\n rootSelector,\n addUniqueId(table, TABLE_ID),\n selection\n );\n core.selection.selection = selection;\n\n setRangeSelection(doc, table.rows[firstRow]?.cells[firstColumn]);\n break;\n case 'range':\n addRangeToSelection(doc, selection.range, selection.isReverted);\n\n core.selection.selection = core.domHelper.hasFocus() ? null : selection;\n break;\n\n default:\n core.selection.selection = null;\n break;\n }\n\n if (sheet) {\n for (let i = sheet.cssRules.length - 1; i >= 0; i--) {\n sheet.deleteRule(i);\n }\n\n if (selectionRules) {\n for (let i = 0; i < selectionRules.length; i++) {\n sheet.insertRule(selectionRules[i]);\n }\n }\n }\n } finally {\n core.selection.skipReselectOnFocus = skipReselectOnFocus;\n }\n\n if (!skipSelectionChangedEvent) {\n const eventData: SelectionChangedEvent = {\n eventType: 'selectionChanged',\n newSelection: selection,\n };\n\n core.api.triggerEvent(core, eventData, true /*broadcast*/);\n }\n};\n\nfunction buildImageCSS(editorSelector: string, imageId: string, borderColor?: string): string[] {\n const color = borderColor || DEFAULT_SELECTION_BORDER_COLOR;\n\n return [\n `${editorSelector} #${imageId} {outline-style:auto!important;outline-color:${color}!important;}`,\n `${editorSelector} ${CARET_CSS_RULE}`,\n ];\n}\n\nfunction buildTableCss(\n editorSelector: string,\n tableId: string,\n selection: TableSelection\n): string[] {\n const { firstColumn, firstRow, lastColumn, lastRow } = selection;\n const cells = parseTableCells(selection.table);\n const isAllTableSelected =\n firstRow == 0 &&\n firstColumn == 0 &&\n lastRow == cells.length - 1 &&\n lastColumn == (cells[lastRow]?.length ?? 0) - 1;\n const rootSelector = editorSelector + ' #' + tableId;\n const selectors = isAllTableSelected\n ? [rootSelector, `${rootSelector} *`]\n : handleTableSelected(rootSelector, selection, cells);\n\n const cssRules: string[] = [`${editorSelector} ${CARET_CSS_RULE}`];\n let currentRules: string = '';\n\n for (let i = 0; i < selectors.length; i++) {\n currentRules += (currentRules.length > 0 ? ',' : '') + selectors[i] || '';\n\n if (\n currentRules.length + (selectors[0]?.length || 0) > MAX_RULE_SELECTOR_LENGTH ||\n i == selectors.length - 1\n ) {\n cssRules.push(currentRules + ' ' + TABLE_CSS_RULE);\n currentRules = '';\n }\n }\n\n return cssRules;\n}\n\nfunction handleTableSelected(\n rootSelector: string,\n selection: TableSelection,\n cells: (HTMLTableCellElement | null)[][]\n) {\n const { firstRow, firstColumn, lastRow, lastColumn, table } = selection;\n const selectors: string[] = [];\n\n // Get whether table has thead, tbody or tfoot, then Set the start and end of each of the table children,\n // so we can build the selector according the element between the table and the row.\n let cont = 0;\n const indexes = toArray(table.childNodes)\n .filter(\n (node): node is HTMLTableSectionElement =>\n ['THEAD', 'TBODY', 'TFOOT'].indexOf(\n isNodeOfType(node, 'ELEMENT_NODE') ? node.tagName : ''\n ) > -1\n )\n .map(node => {\n const result = {\n el: node.tagName,\n start: cont,\n end: node.childNodes.length + cont,\n };\n\n cont = result.end;\n return result;\n });\n\n cells.forEach((row, rowIndex) => {\n let tdCount = 0;\n\n //Get current TBODY/THEAD/TFOOT\n const midElement = indexes.filter(ind => ind.start <= rowIndex && ind.end > rowIndex)[0];\n const middleElSelector = midElement ? '>' + midElement.el + '>' : '>';\n const currentRow =\n midElement && rowIndex + 1 >= midElement.start\n ? rowIndex + 1 - midElement.start\n : rowIndex + 1;\n\n for (let cellIndex = 0; cellIndex < row.length; cellIndex++) {\n const cell = row[cellIndex];\n\n if (cell) {\n tdCount++;\n\n if (\n rowIndex >= firstRow &&\n rowIndex <= lastRow &&\n cellIndex >= firstColumn &&\n cellIndex <= lastColumn\n ) {\n const selector = `${rootSelector}${middleElSelector} tr:nth-child(${currentRow})>${cell.tagName}:nth-child(${tdCount})`;\n\n selectors.push(selector, selector + ' *');\n }\n }\n }\n });\n\n return selectors;\n}\n\nfunction setRangeSelection(doc: Document, element: HTMLElement | undefined) {\n if (element && doc.contains(element)) {\n const range = doc.createRange();\n\n range.selectNode(element);\n range.collapse();\n\n addRangeToSelection(doc, range);\n }\n}\n\nfunction addUniqueId(element: HTMLElement, idPrefix: string): string {\n idPrefix = element.id || idPrefix;\n\n const doc = element.ownerDocument;\n let i = 0;\n\n while (!element.id || doc.querySelectorAll('#' + element.id).length > 1) {\n element.id = idPrefix + '_' + i++;\n }\n\n return element.id;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switchShadowEdit.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"switchShadowEdit.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/switchShadowEdit.ts"],"names":[],"mappings":";;;AAAA,8EAA6E;AAC7E,2EAA6D;AAG7D;;;;;GAKG;AACI,IAAM,gBAAgB,GAAqB,UAAC,UAAU,EAAE,IAAI;IAC/D,IAAM,IAAI,GAAG,UAAU,CAAC;IAExB,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QAC7C,IAAI,IAAI,EAAE;YACN,IAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjF,IAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC;YACzE,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE7D,IAAA,4CAAc,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAErC,IAAI,CAAC,GAAG,CAAC,YAAY,CACjB,IAAI,EACJ;gBACI,SAAS,EAAE,mBAAmB;aACjC,EACD,KAAK,CAAC,aAAa,CACtB,CAAC;YAEF,oIAAoI;YACpI,6DAA6D;YAC7D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,EAAE;gBAClC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;aAClC;YAED,IAAI,CAAC,SAAS,CAAC,kBAAkB,GAAG,QAAQ,CAAC;SAChD;aAAM;YACH,IAAI,CAAC,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAEzC,IAAI,CAAC,GAAG,CAAC,YAAY,CACjB,IAAI,EACJ;gBACI,SAAS,EAAE,mBAAmB;aACjC,EACD,KAAK,CAAC,aAAa,CACtB,CAAC;YAEF,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBACxB,iDAAiD;gBACjD,IAAA,qCAAiB,EAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,cAAO,CAAC,CAAC,CAAC;gBAEpD,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;oBACnD,eAAe,EAAE,IAAI,EAAE,qGAAqG;iBAC/H,CAAC,CAAC;aACN;SACJ;KACJ;AACL,CAAC,CAAC;AA/CW,QAAA,gBAAgB,oBA+C3B","sourcesContent":["import { iterateSelections } from '../publicApi/selection/iterateSelections';\nimport { moveChildNodes } from 'roosterjs-content-model-dom';\nimport type { SwitchShadowEdit } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Switch the Shadow Edit mode of editor On/Off\n * @param editorCore The EditorCore object\n * @param isOn True to switch On, False to switch Off\n */\nexport const switchShadowEdit: SwitchShadowEdit = (editorCore, isOn): void => {\n const core = editorCore;\n\n if (isOn != !!core.lifecycle.shadowEditFragment) {\n if (isOn) {\n const model = !core.cache.cachedModel ? core.api.createContentModel(core) : null;\n const fragment = core.logicalRoot.ownerDocument.createDocumentFragment();\n const clonedRoot = core.logicalRoot.cloneNode(true /*deep*/);\n\n moveChildNodes(fragment, clonedRoot);\n\n core.api.triggerEvent(\n core,\n {\n eventType: 'enteredShadowEdit',\n },\n false /*broadcast*/\n );\n\n // This need to be done after EnteredShadowEdit event is triggered since EnteredShadowEdit event will cause a SelectionChanged event\n // if current selection is table selection or image selection\n if (!core.cache.cachedModel && model) {\n core.cache.cachedModel = model;\n }\n\n core.lifecycle.shadowEditFragment = fragment;\n } else {\n core.lifecycle.shadowEditFragment = null;\n\n core.api.triggerEvent(\n core,\n {\n eventType: 'leavingShadowEdit',\n },\n false /*broadcast*/\n );\n\n if (core.cache.cachedModel) {\n // Force clear cached element from selected block\n iterateSelections(core.cache.cachedModel, () => {});\n\n core.api.setContentModel(core, core.cache.cachedModel, {\n ignoreSelection: true, // Do not set focus and selection when quit shadow edit, focus may remain in UI control (picker, ...)\n });\n }\n }\n }\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triggerEvent.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"triggerEvent.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/coreApi/triggerEvent.ts"],"names":[],"mappings":";;;AAOA,IAAM,yBAAyB,GAAsB;IACjD,aAAa;IACb,eAAe;IACf,uBAAuB;IACvB,aAAa;CAChB,CAAC;AAEF;;;;;;GAMG;AACI,IAAM,YAAY,GAAiB,UAAC,IAAI,EAAE,WAAW,EAAE,SAAS;IACnE,IACI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB;QAC/B,yBAAyB,CAAC,OAAO,CAAC,WAAW,CAAC,SAA4B,CAAC,IAAI,CAAC,CAAC;QACrF,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,MAAM,IAAI,OAAA,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,EAAvC,CAAuC,CAAC,CAAC,EACtF;QACE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,MAAM;YACvB,IAAI,MAAM,CAAC,aAAa,EAAE;gBACtB,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;aACrC;QACL,CAAC,CAAC,CAAC;KACN;AACL,CAAC,CAAC;AAZW,QAAA,YAAY,gBAYvB;AAEF,SAAS,kBAAkB,CAAC,KAAkB,EAAE,MAAoB;;IAChE,IAAI,MAAM,CAAC,aAAa,KAAI,MAAA,MAAM,CAAC,0BAA0B,+CAAjC,MAAM,EAA8B,KAAK,CAAC,CAAA,EAAE;QACpE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;KACf;IAED,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["import type {\n EditorPlugin,\n PluginEvent,\n PluginEventType,\n TriggerEvent,\n} from 'roosterjs-content-model-types';\n\nconst allowedEventsInShadowEdit: PluginEventType[] = [\n 'editorReady',\n 'beforeDispose',\n 'extractContentWithDom',\n 'zoomChanged',\n];\n\n/**\n * @internal\n * Trigger a plugin event\n * @param core The EditorCore object\n * @param pluginEvent The event object to trigger\n * @param broadcast Set to true to skip the shouldHandleEventExclusively check\n */\nexport const triggerEvent: TriggerEvent = (core, pluginEvent, broadcast) => {\n if (\n (!core.lifecycle.shadowEditFragment ||\n allowedEventsInShadowEdit.indexOf(pluginEvent.eventType as PluginEventType) >= 0) &&\n (broadcast || !core.plugins.some(plugin => handledExclusively(pluginEvent, plugin)))\n ) {\n core.plugins.forEach(plugin => {\n if (plugin.onPluginEvent) {\n plugin.onPluginEvent(pluginEvent);\n }\n });\n }\n};\n\nfunction handledExclusively(event: PluginEvent, plugin: EditorPlugin): boolean {\n if (plugin.onPluginEvent && plugin.willHandleEventExclusively?.(event)) {\n plugin.onPluginEvent(event);\n return true;\n }\n\n return false;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CachePlugin.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"CachePlugin.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/corePlugin/CachePlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { areSameSelection } from './utils/areSameSelection';\nimport { createTextMutationObserver } from './utils/textMutationObserver';\nimport { domIndexerImpl } from './utils/domIndexerImpl';\nimport type {\n CachePluginState,\n IEditor,\n PluginEvent,\n PluginWithState,\n EditorOptions,\n} from 'roosterjs-content-model-types';\n\n/**\n * ContentModel cache plugin manages cached Content Model, and refresh the cache when necessary\n */\nclass CachePlugin implements PluginWithState<CachePluginState> {\n private editor: IEditor | null = null;\n private state: CachePluginState;\n\n /**\n * Construct a new instance of CachePlugin class\n * @param option The editor option\n * @param contentDiv The editor content DIV\n */\n constructor(option: EditorOptions, contentDiv: HTMLDivElement) {\n this.state = option.cacheModel\n ? {\n domIndexer: domIndexerImpl,\n textMutationObserver: createTextMutationObserver(contentDiv, this.onMutation),\n }\n : {};\n }\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'Cache';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize(editor: IEditor) {\n this.editor = editor;\n this.editor.getDocument().addEventListener('selectionchange', this.onNativeSelectionChange);\n\n this.state.textMutationObserver?.startObserving();\n }\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {\n this.state.textMutationObserver?.stopObserving();\n\n if (this.editor) {\n this.editor\n .getDocument()\n .removeEventListener('selectionchange', this.onNativeSelectionChange);\n this.editor = null;\n }\n }\n\n /**\n * Get plugin state object\n */\n getState(): CachePluginState {\n return this.state;\n }\n\n /**\n * Core method for a plugin. Once an event happens in editor, editor will call this\n * method of each plugin to handle the event as long as the event is not handled\n * exclusively by another plugin.\n * @param event The event to handle:\n */\n onPluginEvent(event: PluginEvent) {\n if (!this.editor) {\n return;\n }\n\n switch (event.eventType) {\n case 'keyDown':\n case 'input':\n if (!this.state.textMutationObserver) {\n // When updating cache is not enabled, need to clear the cache to make sure other plugins can get an up-to-date content model\n this.invalidateCache();\n }\n break;\n\n case 'selectionChanged':\n this.updateCachedModel(this.editor);\n break;\n\n case 'contentChanged':\n const { contentModel, selection } = event;\n\n if (contentModel && this.state.domIndexer) {\n this.state.cachedModel = contentModel;\n this.state.cachedSelection = selection;\n } else {\n this.invalidateCache();\n }\n\n break;\n }\n }\n\n private onMutation = (isTextChangeOnly: boolean) => {\n if (this.editor) {\n if (isTextChangeOnly) {\n this.updateCachedModel(this.editor, true /*forceUpdate*/);\n } else {\n this.invalidateCache();\n }\n }\n };\n\n private onNativeSelectionChange = () => {\n if (this.editor?.hasFocus()) {\n this.updateCachedModel(this.editor);\n }\n };\n\n private invalidateCache() {\n if (!this.editor?.isInShadowEdit()) {\n this.state.cachedModel = undefined;\n this.state.cachedSelection = undefined;\n }\n }\n\n private updateCachedModel(editor: IEditor, forceUpdate?: boolean) {\n const cachedSelection = this.state.cachedSelection;\n this.state.cachedSelection = undefined; // Clear it to force getDOMSelection() retrieve the latest selection range\n\n const newRangeEx = editor.getDOMSelection() || undefined;\n const model = this.state.cachedModel;\n const isSelectionChanged =\n forceUpdate ||\n !cachedSelection ||\n !newRangeEx ||\n !areSameSelection(newRangeEx, cachedSelection);\n\n if (isSelectionChanged) {\n if (\n !model ||\n !newRangeEx ||\n !this.state.domIndexer?.reconcileSelection(model, newRangeEx, cachedSelection)\n ) {\n this.invalidateCache();\n } else {\n this.state.cachedSelection = newRangeEx;\n }\n } else {\n this.state.cachedSelection = cachedSelection;\n }\n }\n}\n\n/**\n * @internal\n * Create a new instance of CachePlugin class.\n * @param option The editor option\n * @param contentDiv The editor content DIV\n */\nexport function createCachePlugin(\n option: EditorOptions,\n contentDiv: HTMLDivElement\n): PluginWithState<CachePluginState> {\n return new CachePlugin(option, contentDiv);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenuPlugin.js","sourceRoot":"","sources":["../../../../packages
|
|
1
|
+
{"version":3,"file":"ContextMenuPlugin.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/corePlugin/ContextMenuPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { getSelectionRootNode } from '../publicApi/selection/getSelectionRootNode';\nimport type {\n ContextMenuPluginState,\n ContextMenuProvider,\n IEditor,\n PluginWithState,\n EditorOptions,\n} from 'roosterjs-content-model-types';\n\nconst ContextMenuButton = 2;\n\n/**\n * Edit Component helps handle Content edit features\n */\nclass ContextMenuPlugin implements PluginWithState<ContextMenuPluginState> {\n private editor: IEditor | null = null;\n private state: ContextMenuPluginState;\n private disposer: (() => void) | null = null;\n\n /**\n * Construct a new instance of EditPlugin\n * @param options The editor options\n */\n constructor(options: EditorOptions) {\n this.state = {\n contextMenuProviders:\n options.plugins?.filter<ContextMenuProvider<any>>(isContextMenuProvider) || [],\n };\n }\n\n /**\n * Get a friendly name of this plugin\n */\n getName() {\n return 'ContextMenu';\n }\n\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n initialize(editor: IEditor) {\n this.editor = editor;\n this.disposer = this.editor.attachDomEvent({\n contextmenu: {\n beforeDispatch: this.onContextMenuEvent,\n },\n });\n }\n\n /**\n * Dispose this plugin\n */\n dispose() {\n this.disposer?.();\n this.disposer = null;\n this.editor = null;\n }\n\n /**\n * Get plugin state object\n */\n getState() {\n return this.state;\n }\n\n private onContextMenuEvent = (e: Event) => {\n if (this.editor) {\n const allItems: any[] = [];\n const mouseEvent = e as MouseEvent;\n\n // ContextMenu event can be triggered from mouse right click or keyboard (e.g. Shift+F10 on Windows)\n // Need to check if this is from keyboard, we need to get target node from selection because in that case\n // event.target is always the element that attached context menu event, here it will be editor content div.\n const targetNode =\n mouseEvent.button == ContextMenuButton\n ? (mouseEvent.target as Node)\n : this.getFocusedNode(this.editor);\n\n if (targetNode) {\n this.state.contextMenuProviders.forEach(provider => {\n const items = provider.getContextMenuItems(targetNode) ?? [];\n if (items?.length > 0) {\n if (allItems.length > 0) {\n allItems.push(null);\n }\n\n allItems.push(...items);\n }\n });\n }\n\n this.editor?.triggerEvent('contextMenu', {\n rawEvent: mouseEvent,\n items: allItems,\n });\n }\n };\n\n private getFocusedNode(editor: IEditor) {\n const selection = editor.getDOMSelection();\n\n if (selection) {\n if (selection.type == 'range') {\n selection.range.collapse(true /*toStart*/);\n }\n\n return getSelectionRootNode(selection) || null;\n } else {\n return null;\n }\n }\n}\n\nfunction isContextMenuProvider(source: unknown): source is ContextMenuProvider<any> {\n return !!(<ContextMenuProvider<any>>source)?.getContextMenuItems;\n}\n\n/**\n * @internal\n * Create a new instance of EditPlugin.\n */\nexport function createContextMenuPlugin(\n options: EditorOptions\n): PluginWithState<ContextMenuPluginState> {\n return new ContextMenuPlugin(options);\n}\n"]}
|
|
@@ -10,6 +10,7 @@ var extractClipboardItems_1 = require("../utils/extractClipboardItems");
|
|
|
10
10
|
var getSelectedCells_1 = require("../publicApi/table/getSelectedCells");
|
|
11
11
|
var iterateSelections_1 = require("../publicApi/selection/iterateSelections");
|
|
12
12
|
var pasteCopyBlockEntityParser_1 = require("../override/pasteCopyBlockEntityParser");
|
|
13
|
+
var paste_1 = require("../publicApi/paste/paste");
|
|
13
14
|
var roosterjs_content_model_dom_1 = require("roosterjs-content-model-dom");
|
|
14
15
|
/**
|
|
15
16
|
* Copy and paste plugin for handling onCopy and onPaste event
|
|
@@ -31,7 +32,7 @@ var CopyPastePlugin = /** @class */ (function () {
|
|
|
31
32
|
event.preventDefault();
|
|
32
33
|
(0, extractClipboardItems_1.extractClipboardItems)((0, roosterjs_content_model_dom_1.toArray)(dataTransfer.items), _this.state.allowedCustomPasteType).then(function (clipboardData) {
|
|
33
34
|
if (!editor_1.isDisposed()) {
|
|
34
|
-
|
|
35
|
+
(0, paste_1.paste)(editor_1, clipboardData, _this.state.defaultPasteType);
|
|
35
36
|
}
|
|
36
37
|
});
|
|
37
38
|
}
|