roosterjs-content-model-plugins 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{lib-mjs/autoFormat/ContentModelAutoFormatPlugin.d.ts → lib/autoFormat/AutoFormatPlugin.d.ts} +53 -53
- package/lib/autoFormat/{ContentModelAutoFormatPlugin.js → AutoFormatPlugin.js} +81 -81
- package/lib/autoFormat/AutoFormatPlugin.js.map +1 -0
- package/lib/autoFormat/keyboardListTrigger.d.ts +5 -5
- package/lib/autoFormat/keyboardListTrigger.js +45 -45
- package/lib/autoFormat/keyboardListTrigger.js.map +1 -1
- package/lib/autoFormat/utils/convertAlphaToDecimals.d.ts +7 -7
- package/lib/autoFormat/utils/convertAlphaToDecimals.js +22 -22
- package/lib/autoFormat/utils/convertAlphaToDecimals.js.map +1 -1
- package/lib/autoFormat/utils/getIndex.d.ts +4 -4
- package/lib/autoFormat/utils/getIndex.js +13 -13
- package/lib/autoFormat/utils/getIndex.js.map +1 -1
- package/lib/autoFormat/utils/getListTypeStyle.d.ts +14 -14
- package/lib/autoFormat/utils/getListTypeStyle.js +87 -79
- package/lib/autoFormat/utils/getListTypeStyle.js.map +1 -1
- package/lib/autoFormat/utils/getNumberingListStyle.d.ts +4 -4
- package/lib/autoFormat/utils/getNumberingListStyle.js +153 -152
- package/lib/autoFormat/utils/getNumberingListStyle.js.map +1 -1
- package/{lib-amd/edit/ContentModelEditPlugin.d.ts → lib/edit/EditPlugin.d.ts} +39 -35
- package/lib/edit/EditPlugin.js +129 -0
- package/lib/edit/EditPlugin.js.map +1 -0
- package/lib/edit/deleteSteps/deleteAllSegmentBefore.d.ts +5 -5
- package/lib/edit/deleteSteps/deleteAllSegmentBefore.js +22 -22
- package/lib/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
- package/lib/edit/deleteSteps/deleteCollapsedSelection.d.ts +9 -9
- package/lib/edit/deleteSteps/deleteCollapsedSelection.js +93 -93
- package/lib/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
- package/lib/edit/deleteSteps/deleteList.d.ts +5 -5
- package/lib/edit/deleteSteps/deleteList.js +23 -23
- package/lib/edit/deleteSteps/deleteList.js.map +1 -1
- package/lib/edit/deleteSteps/deleteWordSelection.d.ts +9 -9
- package/lib/edit/deleteSteps/deleteWordSelection.js +173 -173
- package/lib/edit/deleteSteps/deleteWordSelection.js.map +1 -1
- package/lib/edit/handleKeyboardEventCommon.d.ts +14 -14
- package/lib/edit/handleKeyboardEventCommon.js +54 -54
- package/lib/edit/handleKeyboardEventCommon.js.map +1 -1
- package/lib/edit/inputSteps/handleEnterOnList.d.ts +5 -0
- package/lib/edit/inputSteps/handleEnterOnList.js +68 -0
- package/lib/edit/inputSteps/handleEnterOnList.js.map +1 -0
- package/lib/edit/keyboardDelete.d.ts +9 -8
- package/lib/edit/keyboardDelete.js +71 -74
- package/lib/edit/keyboardDelete.js.map +1 -1
- package/lib/edit/keyboardInput.d.ts +5 -5
- package/lib/edit/keyboardInput.js +58 -50
- package/lib/edit/keyboardInput.js.map +1 -1
- package/lib/edit/keyboardTab.d.ts +5 -0
- package/lib/edit/keyboardTab.js +35 -0
- package/lib/edit/keyboardTab.js.map +1 -0
- package/lib/edit/utils/getLeafSiblingBlock.d.ts +23 -23
- package/lib/edit/utils/getLeafSiblingBlock.js +75 -75
- package/lib/edit/utils/getLeafSiblingBlock.js.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.js +9 -9
- package/lib/index.js.map +1 -1
- package/lib/paste/Excel/processPastedContentFromExcel.d.ts +12 -12
- package/lib/paste/Excel/processPastedContentFromExcel.js +82 -82
- package/lib/paste/Excel/processPastedContentFromExcel.js.map +1 -1
- package/{lib-amd/paste/ContentModelPastePlugin.d.ts → lib/paste/PastePlugin.d.ts} +43 -43
- package/lib/paste/{ContentModelPastePlugin.js → PastePlugin.js} +131 -131
- package/lib/paste/PastePlugin.js.map +1 -0
- package/lib/paste/PowerPoint/processPastedContentFromPowerPoint.d.ts +7 -7
- package/lib/paste/PowerPoint/processPastedContentFromPowerPoint.js +19 -19
- package/lib/paste/PowerPoint/processPastedContentFromPowerPoint.js.map +1 -1
- package/lib/paste/WacComponents/constants.d.ts +48 -48
- package/lib/paste/WacComponents/constants.js +62 -62
- package/lib/paste/WacComponents/constants.js.map +1 -1
- package/lib/paste/WacComponents/processPastedContentWacComponents.d.ts +9 -9
- package/lib/paste/WacComponents/processPastedContentWacComponents.js +188 -188
- package/lib/paste/WacComponents/processPastedContentWacComponents.js.map +1 -1
- package/lib/paste/WordDesktop/WordMetadata.d.ts +9 -9
- package/lib/paste/WordDesktop/WordMetadata.js +2 -2
- package/lib/paste/WordDesktop/WordMetadata.js.map +1 -1
- package/lib/paste/WordDesktop/getStyleMetadata.d.ts +23 -23
- package/lib/paste/WordDesktop/getStyleMetadata.js +78 -78
- package/lib/paste/WordDesktop/getStyleMetadata.js.map +1 -1
- package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.d.ts +7 -7
- package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js +58 -58
- package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
- package/lib/paste/WordDesktop/processWordComments.d.ts +7 -7
- package/lib/paste/WordDesktop/processWordComments.js +21 -21
- package/lib/paste/WordDesktop/processWordComments.js.map +1 -1
- package/lib/paste/WordDesktop/processWordLists.d.ts +11 -11
- package/lib/paste/WordDesktop/processWordLists.js +179 -179
- package/lib/paste/WordDesktop/processWordLists.js.map +1 -1
- package/lib/paste/WordDesktop/removeNegativeTextIndentParser.d.ts +5 -5
- package/lib/paste/WordDesktop/removeNegativeTextIndentParser.js +13 -13
- package/lib/paste/WordDesktop/removeNegativeTextIndentParser.js.map +1 -1
- package/lib/paste/pasteSourceValidations/constants.d.ts +17 -17
- package/lib/paste/pasteSourceValidations/constants.js +20 -20
- package/lib/paste/pasteSourceValidations/constants.js.map +1 -1
- package/lib/paste/pasteSourceValidations/documentContainWacElements.d.ts +8 -8
- package/lib/paste/pasteSourceValidations/documentContainWacElements.js +15 -15
- package/lib/paste/pasteSourceValidations/documentContainWacElements.js.map +1 -1
- package/lib/paste/pasteSourceValidations/getPasteSource.d.ts +27 -27
- package/lib/paste/pasteSourceValidations/getPasteSource.js +43 -43
- package/lib/paste/pasteSourceValidations/getPasteSource.js.map +1 -1
- package/lib/paste/pasteSourceValidations/isExcelDesktopDocument.d.ts +8 -8
- package/lib/paste/pasteSourceValidations/isExcelDesktopDocument.js +17 -17
- package/lib/paste/pasteSourceValidations/isExcelDesktopDocument.js.map +1 -1
- package/lib/paste/pasteSourceValidations/isExcelOnlineDocument.d.ts +8 -8
- package/lib/paste/pasteSourceValidations/isExcelOnlineDocument.js +19 -19
- package/lib/paste/pasteSourceValidations/isExcelOnlineDocument.js.map +1 -1
- package/lib/paste/pasteSourceValidations/isGoogleSheetDocument.d.ts +8 -8
- package/lib/paste/pasteSourceValidations/isGoogleSheetDocument.js +15 -15
- package/lib/paste/pasteSourceValidations/isGoogleSheetDocument.js.map +1 -1
- package/lib/paste/pasteSourceValidations/isPowerPointDesktopDocument.d.ts +8 -8
- package/lib/paste/pasteSourceValidations/isPowerPointDesktopDocument.js +15 -15
- package/lib/paste/pasteSourceValidations/isPowerPointDesktopDocument.js.map +1 -1
- package/lib/paste/pasteSourceValidations/isWordDesktopDocument.d.ts +8 -8
- package/lib/paste/pasteSourceValidations/isWordDesktopDocument.js +19 -19
- package/lib/paste/pasteSourceValidations/isWordDesktopDocument.js.map +1 -1
- package/lib/paste/pasteSourceValidations/shouldConvertToSingleImage.d.ts +9 -9
- package/lib/paste/pasteSourceValidations/shouldConvertToSingleImage.js +18 -18
- package/lib/paste/pasteSourceValidations/shouldConvertToSingleImage.js.map +1 -1
- package/lib/paste/utils/addParser.d.ts +5 -5
- package/lib/paste/utils/addParser.js +16 -16
- package/lib/paste/utils/addParser.js.map +1 -1
- package/lib/paste/utils/deprecatedColorParser.d.ts +5 -5
- package/lib/paste/utils/deprecatedColorParser.js +19 -19
- package/lib/paste/utils/deprecatedColorParser.js.map +1 -1
- package/lib/paste/utils/getStyles.d.ts +6 -6
- package/lib/paste/utils/getStyles.js +22 -22
- package/lib/paste/utils/getStyles.js.map +1 -1
- package/lib/paste/utils/linkParser.d.ts +5 -5
- package/lib/paste/utils/linkParser.js +27 -27
- package/lib/paste/utils/linkParser.js.map +1 -1
- package/lib/paste/utils/setProcessor.d.ts +5 -5
- package/lib/paste/utils/setProcessor.js +13 -13
- package/lib/paste/utils/setProcessor.js.map +1 -1
- package/lib/pluginUtils/CreateElement/CreateElementData.d.ts +35 -0
- package/lib/pluginUtils/CreateElement/CreateElementData.js +3 -0
- package/lib/pluginUtils/CreateElement/CreateElementData.js.map +1 -0
- package/lib/pluginUtils/CreateElement/createElement.d.ts +9 -0
- package/lib/pluginUtils/CreateElement/createElement.js +51 -0
- package/lib/pluginUtils/CreateElement/createElement.js.map +1 -0
- package/lib/pluginUtils/Disposable.d.ts +10 -0
- package/lib/pluginUtils/Disposable.js +3 -0
- package/lib/pluginUtils/Disposable.js.map +1 -0
- package/lib/pluginUtils/DragAndDrop/DragAndDropHandler.d.ts +45 -0
- package/lib/pluginUtils/DragAndDrop/DragAndDropHandler.js +3 -0
- package/lib/pluginUtils/DragAndDrop/DragAndDropHandler.js.map +1 -0
- package/lib/pluginUtils/DragAndDrop/DragAndDropHelper.d.ts +39 -0
- package/lib/pluginUtils/DragAndDrop/DragAndDropHelper.js +120 -0
- package/lib/pluginUtils/DragAndDrop/DragAndDropHelper.js.map +1 -0
- package/lib/pluginUtils/Rect/getIntersectedRect.d.ts +27 -0
- package/lib/pluginUtils/Rect/getIntersectedRect.js +45 -0
- package/lib/pluginUtils/Rect/getIntersectedRect.js.map +1 -0
- package/lib/pluginUtils/Rect/normalizeRect.d.ts +7 -0
- package/lib/pluginUtils/Rect/normalizeRect.js +20 -0
- package/lib/pluginUtils/Rect/normalizeRect.js.map +1 -0
- package/lib-amd/autoFormat/{ContentModelAutoFormatPlugin.d.ts → AutoFormatPlugin.d.ts} +53 -53
- package/lib-amd/autoFormat/{ContentModelAutoFormatPlugin.js → AutoFormatPlugin.js} +82 -82
- package/lib-amd/autoFormat/AutoFormatPlugin.js.map +1 -0
- package/lib-amd/autoFormat/keyboardListTrigger.d.ts +5 -5
- package/lib-amd/autoFormat/keyboardListTrigger.js +43 -43
- package/lib-amd/autoFormat/keyboardListTrigger.js.map +1 -1
- package/lib-amd/autoFormat/utils/convertAlphaToDecimals.d.ts +7 -7
- package/lib-amd/autoFormat/utils/convertAlphaToDecimals.js +24 -24
- package/lib-amd/autoFormat/utils/convertAlphaToDecimals.js.map +1 -1
- package/lib-amd/autoFormat/utils/getIndex.d.ts +4 -4
- package/lib-amd/autoFormat/utils/getIndex.js +14 -14
- package/lib-amd/autoFormat/utils/getIndex.js.map +1 -1
- package/lib-amd/autoFormat/utils/getListTypeStyle.d.ts +14 -14
- package/lib-amd/autoFormat/utils/getListTypeStyle.js +86 -78
- package/lib-amd/autoFormat/utils/getListTypeStyle.js.map +1 -1
- package/lib-amd/autoFormat/utils/getNumberingListStyle.d.ts +4 -4
- package/lib-amd/autoFormat/utils/getNumberingListStyle.js +153 -152
- package/lib-amd/autoFormat/utils/getNumberingListStyle.js.map +1 -1
- package/{lib-mjs/edit/ContentModelEditPlugin.d.ts → lib-amd/edit/EditPlugin.d.ts} +39 -35
- package/lib-amd/edit/EditPlugin.js +128 -0
- package/lib-amd/edit/EditPlugin.js.map +1 -0
- package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.d.ts +5 -5
- package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js +23 -23
- package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.d.ts +9 -9
- package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js +92 -92
- package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteList.d.ts +5 -5
- package/lib-amd/edit/deleteSteps/deleteList.js +24 -24
- package/lib-amd/edit/deleteSteps/deleteList.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteWordSelection.d.ts +9 -9
- package/lib-amd/edit/deleteSteps/deleteWordSelection.js +172 -172
- package/lib-amd/edit/deleteSteps/deleteWordSelection.js.map +1 -1
- package/lib-amd/edit/handleKeyboardEventCommon.d.ts +14 -14
- package/lib-amd/edit/handleKeyboardEventCommon.js +55 -55
- package/lib-amd/edit/handleKeyboardEventCommon.js.map +1 -1
- package/lib-amd/edit/inputSteps/handleEnterOnList.d.ts +5 -0
- package/lib-amd/edit/inputSteps/handleEnterOnList.js +67 -0
- package/lib-amd/edit/inputSteps/handleEnterOnList.js.map +1 -0
- package/lib-amd/edit/keyboardDelete.d.ts +9 -8
- package/lib-amd/edit/keyboardDelete.js +66 -69
- package/lib-amd/edit/keyboardDelete.js.map +1 -1
- package/lib-amd/edit/keyboardInput.d.ts +5 -5
- package/lib-amd/edit/keyboardInput.js +57 -50
- package/lib-amd/edit/keyboardInput.js.map +1 -1
- package/lib-amd/edit/keyboardTab.d.ts +5 -0
- package/lib-amd/edit/keyboardTab.js +35 -0
- package/lib-amd/edit/keyboardTab.js.map +1 -0
- package/lib-amd/edit/utils/getLeafSiblingBlock.d.ts +23 -23
- package/lib-amd/edit/utils/getLeafSiblingBlock.js +75 -75
- package/lib-amd/edit/utils/getLeafSiblingBlock.js.map +1 -1
- package/lib-amd/index.d.ts +3 -3
- package/lib-amd/index.js +8 -8
- package/lib-amd/index.js.map +1 -1
- package/lib-amd/paste/Excel/processPastedContentFromExcel.d.ts +12 -12
- package/lib-amd/paste/Excel/processPastedContentFromExcel.js +80 -80
- package/lib-amd/paste/Excel/processPastedContentFromExcel.js.map +1 -1
- package/{lib/paste/ContentModelPastePlugin.d.ts → lib-amd/paste/PastePlugin.d.ts} +43 -43
- package/lib-amd/paste/{ContentModelPastePlugin.js → PastePlugin.js} +123 -123
- package/lib-amd/paste/PastePlugin.js.map +1 -0
- package/lib-amd/paste/PowerPoint/processPastedContentFromPowerPoint.d.ts +7 -7
- package/lib-amd/paste/PowerPoint/processPastedContentFromPowerPoint.js +20 -20
- package/lib-amd/paste/PowerPoint/processPastedContentFromPowerPoint.js.map +1 -1
- package/lib-amd/paste/WacComponents/constants.d.ts +48 -48
- package/lib-amd/paste/WacComponents/constants.js +63 -63
- package/lib-amd/paste/WacComponents/constants.js.map +1 -1
- package/lib-amd/paste/WacComponents/processPastedContentWacComponents.d.ts +9 -9
- package/lib-amd/paste/WacComponents/processPastedContentWacComponents.js +185 -185
- package/lib-amd/paste/WacComponents/processPastedContentWacComponents.js.map +1 -1
- package/lib-amd/paste/WordDesktop/WordMetadata.d.ts +9 -9
- package/lib-amd/paste/WordDesktop/WordMetadata.js +4 -4
- package/lib-amd/paste/WordDesktop/WordMetadata.js.map +1 -1
- package/lib-amd/paste/WordDesktop/getStyleMetadata.d.ts +23 -23
- package/lib-amd/paste/WordDesktop/getStyleMetadata.js +78 -78
- package/lib-amd/paste/WordDesktop/getStyleMetadata.js.map +1 -1
- package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.d.ts +7 -7
- package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js +53 -53
- package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
- package/lib-amd/paste/WordDesktop/processWordComments.d.ts +7 -7
- package/lib-amd/paste/WordDesktop/processWordComments.js +22 -22
- package/lib-amd/paste/WordDesktop/processWordComments.js.map +1 -1
- package/lib-amd/paste/WordDesktop/processWordLists.d.ts +11 -11
- package/lib-amd/paste/WordDesktop/processWordLists.js +177 -177
- package/lib-amd/paste/WordDesktop/processWordLists.js.map +1 -1
- package/lib-amd/paste/WordDesktop/removeNegativeTextIndentParser.d.ts +5 -5
- package/lib-amd/paste/WordDesktop/removeNegativeTextIndentParser.js +15 -15
- package/lib-amd/paste/WordDesktop/removeNegativeTextIndentParser.js.map +1 -1
- package/lib-amd/paste/pasteSourceValidations/constants.d.ts +17 -17
- package/lib-amd/paste/pasteSourceValidations/constants.js +22 -22
- package/lib-amd/paste/pasteSourceValidations/constants.js.map +1 -1
- package/lib-amd/paste/pasteSourceValidations/documentContainWacElements.d.ts +8 -8
- package/lib-amd/paste/pasteSourceValidations/documentContainWacElements.js +16 -16
- package/lib-amd/paste/pasteSourceValidations/documentContainWacElements.js.map +1 -1
- package/lib-amd/paste/pasteSourceValidations/getPasteSource.d.ts +27 -27
- package/lib-amd/paste/pasteSourceValidations/getPasteSource.js +38 -38
- package/lib-amd/paste/pasteSourceValidations/getPasteSource.js.map +1 -1
- package/lib-amd/paste/pasteSourceValidations/isExcelDesktopDocument.d.ts +8 -8
- package/lib-amd/paste/pasteSourceValidations/isExcelDesktopDocument.js +18 -18
- package/lib-amd/paste/pasteSourceValidations/isExcelDesktopDocument.js.map +1 -1
- package/lib-amd/paste/pasteSourceValidations/isExcelOnlineDocument.d.ts +8 -8
- package/lib-amd/paste/pasteSourceValidations/isExcelOnlineDocument.js +20 -20
- package/lib-amd/paste/pasteSourceValidations/isExcelOnlineDocument.js.map +1 -1
- package/lib-amd/paste/pasteSourceValidations/isGoogleSheetDocument.d.ts +8 -8
- package/lib-amd/paste/pasteSourceValidations/isGoogleSheetDocument.js +16 -16
- package/lib-amd/paste/pasteSourceValidations/isGoogleSheetDocument.js.map +1 -1
- package/lib-amd/paste/pasteSourceValidations/isPowerPointDesktopDocument.d.ts +8 -8
- package/lib-amd/paste/pasteSourceValidations/isPowerPointDesktopDocument.js +16 -16
- package/lib-amd/paste/pasteSourceValidations/isPowerPointDesktopDocument.js.map +1 -1
- package/lib-amd/paste/pasteSourceValidations/isWordDesktopDocument.d.ts +8 -8
- package/lib-amd/paste/pasteSourceValidations/isWordDesktopDocument.js +20 -20
- package/lib-amd/paste/pasteSourceValidations/isWordDesktopDocument.js.map +1 -1
- package/lib-amd/paste/pasteSourceValidations/shouldConvertToSingleImage.d.ts +9 -9
- package/lib-amd/paste/pasteSourceValidations/shouldConvertToSingleImage.js +20 -20
- package/lib-amd/paste/pasteSourceValidations/shouldConvertToSingleImage.js.map +1 -1
- package/lib-amd/paste/utils/addParser.d.ts +5 -5
- package/lib-amd/paste/utils/addParser.js +18 -18
- package/lib-amd/paste/utils/addParser.js.map +1 -1
- package/lib-amd/paste/utils/deprecatedColorParser.d.ts +5 -5
- package/lib-amd/paste/utils/deprecatedColorParser.js +20 -20
- package/lib-amd/paste/utils/deprecatedColorParser.js.map +1 -1
- package/lib-amd/paste/utils/getStyles.d.ts +6 -6
- package/lib-amd/paste/utils/getStyles.js +24 -24
- package/lib-amd/paste/utils/getStyles.js.map +1 -1
- package/lib-amd/paste/utils/linkParser.d.ts +5 -5
- package/lib-amd/paste/utils/linkParser.js +28 -28
- package/lib-amd/paste/utils/linkParser.js.map +1 -1
- package/lib-amd/paste/utils/setProcessor.d.ts +5 -5
- package/lib-amd/paste/utils/setProcessor.js +15 -15
- package/lib-amd/paste/utils/setProcessor.js.map +1 -1
- package/lib-amd/pluginUtils/CreateElement/CreateElementData.d.ts +35 -0
- package/lib-amd/pluginUtils/CreateElement/CreateElementData.js +5 -0
- package/lib-amd/pluginUtils/CreateElement/CreateElementData.js.map +1 -0
- package/lib-amd/pluginUtils/CreateElement/createElement.d.ts +9 -0
- package/lib-amd/pluginUtils/CreateElement/createElement.js +52 -0
- package/lib-amd/pluginUtils/CreateElement/createElement.js.map +1 -0
- package/lib-amd/pluginUtils/Disposable.d.ts +10 -0
- package/lib-amd/pluginUtils/Disposable.js +5 -0
- package/lib-amd/pluginUtils/Disposable.js.map +1 -0
- package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHandler.d.ts +45 -0
- package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHandler.js +5 -0
- package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHandler.js.map +1 -0
- package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHelper.d.ts +39 -0
- package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHelper.js +121 -0
- package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHelper.js.map +1 -0
- package/lib-amd/pluginUtils/Rect/getIntersectedRect.d.ts +27 -0
- package/lib-amd/pluginUtils/Rect/getIntersectedRect.js +45 -0
- package/lib-amd/pluginUtils/Rect/getIntersectedRect.js.map +1 -0
- package/lib-amd/pluginUtils/Rect/normalizeRect.d.ts +7 -0
- package/lib-amd/pluginUtils/Rect/normalizeRect.js +22 -0
- package/lib-amd/pluginUtils/Rect/normalizeRect.js.map +1 -0
- package/{lib/autoFormat/ContentModelAutoFormatPlugin.d.ts → lib-mjs/autoFormat/AutoFormatPlugin.d.ts} +53 -53
- package/lib-mjs/autoFormat/{ContentModelAutoFormatPlugin.js → AutoFormatPlugin.js} +78 -78
- package/lib-mjs/autoFormat/AutoFormatPlugin.js.map +1 -0
- package/lib-mjs/autoFormat/keyboardListTrigger.d.ts +5 -5
- package/lib-mjs/autoFormat/keyboardListTrigger.js +41 -41
- package/lib-mjs/autoFormat/keyboardListTrigger.js.map +1 -1
- package/lib-mjs/autoFormat/utils/convertAlphaToDecimals.d.ts +7 -7
- package/lib-mjs/autoFormat/utils/convertAlphaToDecimals.js +18 -18
- package/lib-mjs/autoFormat/utils/convertAlphaToDecimals.js.map +1 -1
- package/lib-mjs/autoFormat/utils/getIndex.d.ts +4 -4
- package/lib-mjs/autoFormat/utils/getIndex.js +9 -9
- package/lib-mjs/autoFormat/utils/getIndex.js.map +1 -1
- package/lib-mjs/autoFormat/utils/getListTypeStyle.d.ts +14 -14
- package/lib-mjs/autoFormat/utils/getListTypeStyle.js +83 -75
- package/lib-mjs/autoFormat/utils/getListTypeStyle.js.map +1 -1
- package/lib-mjs/autoFormat/utils/getNumberingListStyle.d.ts +4 -4
- package/lib-mjs/autoFormat/utils/getNumberingListStyle.js +149 -148
- package/lib-mjs/autoFormat/utils/getNumberingListStyle.js.map +1 -1
- package/{lib/edit/ContentModelEditPlugin.d.ts → lib-mjs/edit/EditPlugin.d.ts} +39 -35
- package/lib-mjs/edit/EditPlugin.js +126 -0
- package/lib-mjs/edit/EditPlugin.js.map +1 -0
- package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.d.ts +5 -5
- package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js +18 -18
- package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.d.ts +9 -9
- package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js +90 -90
- package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteList.d.ts +5 -5
- package/lib-mjs/edit/deleteSteps/deleteList.js +19 -19
- package/lib-mjs/edit/deleteSteps/deleteList.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteWordSelection.d.ts +9 -9
- package/lib-mjs/edit/deleteSteps/deleteWordSelection.js +170 -170
- package/lib-mjs/edit/deleteSteps/deleteWordSelection.js.map +1 -1
- package/lib-mjs/edit/handleKeyboardEventCommon.d.ts +14 -14
- package/lib-mjs/edit/handleKeyboardEventCommon.js +48 -48
- package/lib-mjs/edit/handleKeyboardEventCommon.js.map +1 -1
- package/lib-mjs/edit/inputSteps/handleEnterOnList.d.ts +5 -0
- package/lib-mjs/edit/inputSteps/handleEnterOnList.js +64 -0
- package/lib-mjs/edit/inputSteps/handleEnterOnList.js.map +1 -0
- package/lib-mjs/edit/keyboardDelete.d.ts +9 -8
- package/lib-mjs/edit/keyboardDelete.js +67 -70
- package/lib-mjs/edit/keyboardDelete.js.map +1 -1
- package/lib-mjs/edit/keyboardInput.d.ts +5 -5
- package/lib-mjs/edit/keyboardInput.js +54 -46
- package/lib-mjs/edit/keyboardInput.js.map +1 -1
- package/lib-mjs/edit/keyboardTab.d.ts +5 -0
- package/lib-mjs/edit/keyboardTab.js +31 -0
- package/lib-mjs/edit/keyboardTab.js.map +1 -0
- package/lib-mjs/edit/utils/getLeafSiblingBlock.d.ts +23 -23
- package/lib-mjs/edit/utils/getLeafSiblingBlock.js +71 -71
- package/lib-mjs/edit/utils/getLeafSiblingBlock.js.map +1 -1
- package/lib-mjs/index.d.ts +3 -3
- package/lib-mjs/index.js +3 -3
- package/lib-mjs/index.js.map +1 -1
- package/lib-mjs/paste/Excel/processPastedContentFromExcel.d.ts +12 -12
- package/lib-mjs/paste/Excel/processPastedContentFromExcel.js +77 -77
- package/lib-mjs/paste/Excel/processPastedContentFromExcel.js.map +1 -1
- package/lib-mjs/paste/{ContentModelPastePlugin.d.ts → PastePlugin.d.ts} +43 -43
- package/lib-mjs/paste/{ContentModelPastePlugin.js → PastePlugin.js} +128 -128
- package/lib-mjs/paste/PastePlugin.js.map +1 -0
- package/lib-mjs/paste/PowerPoint/processPastedContentFromPowerPoint.d.ts +7 -7
- package/lib-mjs/paste/PowerPoint/processPastedContentFromPowerPoint.js +15 -15
- package/lib-mjs/paste/PowerPoint/processPastedContentFromPowerPoint.js.map +1 -1
- package/lib-mjs/paste/WacComponents/constants.d.ts +48 -48
- package/lib-mjs/paste/WacComponents/constants.js +59 -59
- package/lib-mjs/paste/WacComponents/constants.js.map +1 -1
- package/lib-mjs/paste/WacComponents/processPastedContentWacComponents.d.ts +9 -9
- package/lib-mjs/paste/WacComponents/processPastedContentWacComponents.js +184 -184
- package/lib-mjs/paste/WacComponents/processPastedContentWacComponents.js.map +1 -1
- package/lib-mjs/paste/WordDesktop/WordMetadata.d.ts +9 -9
- package/lib-mjs/paste/WordDesktop/WordMetadata.js +1 -1
- package/lib-mjs/paste/WordDesktop/WordMetadata.js.map +1 -1
- package/lib-mjs/paste/WordDesktop/getStyleMetadata.d.ts +23 -23
- package/lib-mjs/paste/WordDesktop/getStyleMetadata.js +75 -75
- package/lib-mjs/paste/WordDesktop/getStyleMetadata.js.map +1 -1
- package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.d.ts +7 -7
- package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js +54 -54
- package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
- package/lib-mjs/paste/WordDesktop/processWordComments.d.ts +7 -7
- package/lib-mjs/paste/WordDesktop/processWordComments.js +17 -17
- package/lib-mjs/paste/WordDesktop/processWordComments.js.map +1 -1
- package/lib-mjs/paste/WordDesktop/processWordLists.d.ts +11 -11
- package/lib-mjs/paste/WordDesktop/processWordLists.js +175 -175
- package/lib-mjs/paste/WordDesktop/processWordLists.js.map +1 -1
- package/lib-mjs/paste/WordDesktop/removeNegativeTextIndentParser.d.ts +5 -5
- package/lib-mjs/paste/WordDesktop/removeNegativeTextIndentParser.js +9 -9
- package/lib-mjs/paste/WordDesktop/removeNegativeTextIndentParser.js.map +1 -1
- package/lib-mjs/paste/pasteSourceValidations/constants.d.ts +17 -17
- package/lib-mjs/paste/pasteSourceValidations/constants.js +17 -17
- package/lib-mjs/paste/pasteSourceValidations/constants.js.map +1 -1
- package/lib-mjs/paste/pasteSourceValidations/documentContainWacElements.d.ts +8 -8
- package/lib-mjs/paste/pasteSourceValidations/documentContainWacElements.js +11 -11
- package/lib-mjs/paste/pasteSourceValidations/documentContainWacElements.js.map +1 -1
- package/lib-mjs/paste/pasteSourceValidations/getPasteSource.d.ts +27 -27
- package/lib-mjs/paste/pasteSourceValidations/getPasteSource.js +39 -39
- package/lib-mjs/paste/pasteSourceValidations/getPasteSource.js.map +1 -1
- package/lib-mjs/paste/pasteSourceValidations/isExcelDesktopDocument.d.ts +8 -8
- package/lib-mjs/paste/pasteSourceValidations/isExcelDesktopDocument.js +13 -13
- package/lib-mjs/paste/pasteSourceValidations/isExcelDesktopDocument.js.map +1 -1
- package/lib-mjs/paste/pasteSourceValidations/isExcelOnlineDocument.d.ts +8 -8
- package/lib-mjs/paste/pasteSourceValidations/isExcelOnlineDocument.js +15 -15
- package/lib-mjs/paste/pasteSourceValidations/isExcelOnlineDocument.js.map +1 -1
- package/lib-mjs/paste/pasteSourceValidations/isGoogleSheetDocument.d.ts +8 -8
- package/lib-mjs/paste/pasteSourceValidations/isGoogleSheetDocument.js +11 -11
- package/lib-mjs/paste/pasteSourceValidations/isGoogleSheetDocument.js.map +1 -1
- package/lib-mjs/paste/pasteSourceValidations/isPowerPointDesktopDocument.d.ts +8 -8
- package/lib-mjs/paste/pasteSourceValidations/isPowerPointDesktopDocument.js +11 -11
- package/lib-mjs/paste/pasteSourceValidations/isPowerPointDesktopDocument.js.map +1 -1
- package/lib-mjs/paste/pasteSourceValidations/isWordDesktopDocument.d.ts +8 -8
- package/lib-mjs/paste/pasteSourceValidations/isWordDesktopDocument.js +15 -15
- package/lib-mjs/paste/pasteSourceValidations/isWordDesktopDocument.js.map +1 -1
- package/lib-mjs/paste/pasteSourceValidations/shouldConvertToSingleImage.d.ts +9 -9
- package/lib-mjs/paste/pasteSourceValidations/shouldConvertToSingleImage.js +14 -14
- package/lib-mjs/paste/pasteSourceValidations/shouldConvertToSingleImage.js.map +1 -1
- package/lib-mjs/paste/utils/addParser.d.ts +5 -5
- package/lib-mjs/paste/utils/addParser.js +13 -13
- package/lib-mjs/paste/utils/addParser.js.map +1 -1
- package/lib-mjs/paste/utils/deprecatedColorParser.d.ts +5 -5
- package/lib-mjs/paste/utils/deprecatedColorParser.js +15 -15
- package/lib-mjs/paste/utils/deprecatedColorParser.js.map +1 -1
- package/lib-mjs/paste/utils/getStyles.d.ts +6 -6
- package/lib-mjs/paste/utils/getStyles.js +18 -18
- package/lib-mjs/paste/utils/getStyles.js.map +1 -1
- package/lib-mjs/paste/utils/linkParser.d.ts +5 -5
- package/lib-mjs/paste/utils/linkParser.js +23 -23
- package/lib-mjs/paste/utils/linkParser.js.map +1 -1
- package/lib-mjs/paste/utils/setProcessor.d.ts +5 -5
- package/lib-mjs/paste/utils/setProcessor.js +9 -9
- package/lib-mjs/paste/utils/setProcessor.js.map +1 -1
- package/lib-mjs/pluginUtils/CreateElement/CreateElementData.d.ts +35 -0
- package/lib-mjs/pluginUtils/CreateElement/CreateElementData.js +2 -0
- package/lib-mjs/pluginUtils/CreateElement/CreateElementData.js.map +1 -0
- package/lib-mjs/pluginUtils/CreateElement/createElement.d.ts +9 -0
- package/lib-mjs/pluginUtils/CreateElement/createElement.js +48 -0
- package/lib-mjs/pluginUtils/CreateElement/createElement.js.map +1 -0
- package/lib-mjs/pluginUtils/Disposable.d.ts +10 -0
- package/lib-mjs/pluginUtils/Disposable.js +2 -0
- package/lib-mjs/pluginUtils/Disposable.js.map +1 -0
- package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHandler.d.ts +45 -0
- package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHandler.js +2 -0
- package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHandler.js.map +1 -0
- package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHelper.d.ts +39 -0
- package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHelper.js +118 -0
- package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHelper.js.map +1 -0
- package/lib-mjs/pluginUtils/Rect/getIntersectedRect.d.ts +27 -0
- package/lib-mjs/pluginUtils/Rect/getIntersectedRect.js +42 -0
- package/lib-mjs/pluginUtils/Rect/getIntersectedRect.js.map +1 -0
- package/lib-mjs/pluginUtils/Rect/normalizeRect.d.ts +7 -0
- package/lib-mjs/pluginUtils/Rect/normalizeRect.js +17 -0
- package/lib-mjs/pluginUtils/Rect/normalizeRect.js.map +1 -0
- package/package.json +5 -5
- package/lib/autoFormat/ContentModelAutoFormatPlugin.js.map +0 -1
- package/lib/edit/ContentModelEditPlugin.js +0 -74
- package/lib/edit/ContentModelEditPlugin.js.map +0 -1
- package/lib/paste/ContentModelPastePlugin.js.map +0 -1
- package/lib-amd/autoFormat/ContentModelAutoFormatPlugin.js.map +0 -1
- package/lib-amd/edit/ContentModelEditPlugin.js +0 -74
- package/lib-amd/edit/ContentModelEditPlugin.js.map +0 -1
- package/lib-amd/paste/ContentModelPastePlugin.js.map +0 -1
- package/lib-mjs/autoFormat/ContentModelAutoFormatPlugin.js.map +0 -1
- package/lib-mjs/edit/ContentModelEditPlugin.js +0 -71
- package/lib-mjs/edit/ContentModelEditPlugin.js.map +0 -1
- package/lib-mjs/paste/ContentModelPastePlugin.js.map +0 -1
|
@@ -1,186 +1,186 @@
|
|
|
1
|
-
define(["require", "exports", "tslib", "../utils/addParser", "roosterjs-content-model-dom", "../utils/setProcessor", "./constants"], function (require, exports, tslib_1, addParser_1, roosterjs_content_model_dom_1, setProcessor_1, constants_1) {
|
|
2
|
-
"use strict";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.processPastedContentWacComponents = void 0;
|
|
5
|
-
var LIST_ELEMENT_TAGS = ['UL', 'OL', 'LI'];
|
|
6
|
-
var LIST_ELEMENT_SELECTOR = LIST_ELEMENT_TAGS.join(',');
|
|
7
|
-
/**
|
|
8
|
-
* Wac components do not use sub and super tags, instead only add vertical align to a span.
|
|
9
|
-
* This parser normalize the content for content model
|
|
10
|
-
*/
|
|
11
|
-
var wacSubSuperParser = function (format, element) {
|
|
12
|
-
var verticalAlign = element.style.verticalAlign;
|
|
13
|
-
if (verticalAlign === 'super') {
|
|
14
|
-
format.superOrSubScriptSequence = 'super';
|
|
15
|
-
}
|
|
16
|
-
if (verticalAlign === 'sub') {
|
|
17
|
-
format.superOrSubScriptSequence = 'sub';
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* This processor does:
|
|
22
|
-
* 1) Remove the display and margin of the element.
|
|
23
|
-
* 2) When an element should be ignored but should handle the child elements call the default child processor.
|
|
24
|
-
* 3) Removes the End of Paragraph element to avoid empty lines, we should only remove this if the previous element of the EOP is an EmptyTextRun
|
|
25
|
-
* 4) Finally call the default processor.
|
|
26
|
-
* @returns
|
|
27
|
-
*/
|
|
28
|
-
var wacElementProcessor = function (group, element, context) {
|
|
29
|
-
var elementTag = element.tagName;
|
|
30
|
-
if (element.matches(constants_1.WAC_IDENTIFY_SELECTOR)) {
|
|
31
|
-
element.style.removeProperty('display');
|
|
32
|
-
element.style.removeProperty('margin');
|
|
33
|
-
}
|
|
34
|
-
if (element.classList.contains(constants_1.LIST_CONTAINER_ELEMENT_CLASS_NAME)) {
|
|
35
|
-
context.elementProcessors.child(group, element, context);
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
if (constants_1.TEMP_ELEMENTS_CLASSES.some(function (className) { return element.classList.contains(className); })) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
else if (shouldClearListContext(elementTag, element, context)) {
|
|
42
|
-
var listFormat = context.listFormat;
|
|
43
|
-
listFormat.levels = [];
|
|
44
|
-
listFormat.listParent = undefined;
|
|
45
|
-
}
|
|
46
|
-
context.defaultElementProcessors.element(group, element, context);
|
|
47
|
-
};
|
|
48
|
-
/**
|
|
49
|
-
* This processor calls the default list processor and then sets the correct list level and list bullet.
|
|
50
|
-
*/
|
|
51
|
-
var wacLiElementProcessor = function (group, element, context) {
|
|
52
|
-
var _a, _b, _c, _d, _e;
|
|
53
|
-
var level = parseInt((_a = element.getAttribute('data-aria-level')) !== null && _a !== void 0 ? _a : '');
|
|
54
|
-
var listFormat = context.listFormat;
|
|
55
|
-
var listType = ((_b = listFormat.levels[context.listFormat.levels.length - 1]) === null || _b === void 0 ? void 0 : _b.listType) ||
|
|
56
|
-
((_c = element.closest('ol,ul')) === null || _c === void 0 ? void 0 : _c.tagName.toUpperCase());
|
|
57
|
-
var newLevel = (0, roosterjs_content_model_dom_1.createListLevel)(listType, context.blockFormat);
|
|
58
|
-
(0, roosterjs_content_model_dom_1.parseFormat)(element, context.formatParsers.listLevelThread, newLevel.format, context);
|
|
59
|
-
(0, roosterjs_content_model_dom_1.parseFormat)(element, context.formatParsers.listLevel, newLevel.format, context);
|
|
60
|
-
context.listFormat.levels = listFormat.currentListLevels || context.listFormat.levels;
|
|
61
|
-
if (level > 0) {
|
|
62
|
-
if (level > context.listFormat.levels.length) {
|
|
63
|
-
while (level != context.listFormat.levels.length) {
|
|
64
|
-
context.listFormat.levels.push(newLevel);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
context.listFormat.levels.splice(level, context.listFormat.levels.length - 1);
|
|
69
|
-
context.listFormat.levels[level - 1] = newLevel;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
(_e = (_d = context.defaultElementProcessors).li) === null || _e === void 0 ? void 0 : _e.call(_d, group, element, context);
|
|
73
|
-
var listParent = listFormat.listParent;
|
|
74
|
-
if (listParent) {
|
|
75
|
-
var lastblock = listParent.blocks[listParent.blocks.length - 1];
|
|
76
|
-
if (lastblock.blockType == 'BlockGroup' && lastblock.blockGroupType == 'ListItem') {
|
|
77
|
-
var currentLevel = lastblock.levels[lastblock.levels.length - 1];
|
|
78
|
-
updateStartOverride(currentLevel, element, context);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
var newLevels = [];
|
|
82
|
-
listFormat.levels.forEach(function (v) {
|
|
83
|
-
var newValue = {
|
|
84
|
-
dataset: (0, tslib_1.__assign)({}, v.dataset),
|
|
85
|
-
format: (0, tslib_1.__assign)({}, v.format),
|
|
86
|
-
listType: v.listType,
|
|
87
|
-
};
|
|
88
|
-
newLevels.push(newValue);
|
|
89
|
-
});
|
|
90
|
-
listFormat.currentListLevels = newLevels;
|
|
91
|
-
listFormat.levels = [];
|
|
92
|
-
};
|
|
93
|
-
/**
|
|
94
|
-
* This parsers does:
|
|
95
|
-
* 1) Sets the display for dummy item to undefined when the current style is block.
|
|
96
|
-
* 2) Removes the Margin Left
|
|
97
|
-
*/
|
|
98
|
-
var wacListItemParser = function (format, element) {
|
|
99
|
-
if (element.style.display === 'block') {
|
|
100
|
-
format.displayForDummyItem = undefined;
|
|
101
|
-
}
|
|
102
|
-
format.marginLeft = undefined;
|
|
103
|
-
};
|
|
104
|
-
/**
|
|
105
|
-
* Wac usually adds padding to lists which is unwanted so remove it.
|
|
106
|
-
*/
|
|
107
|
-
var wacListLevelParser = function (format) {
|
|
108
|
-
format.marginLeft = undefined;
|
|
109
|
-
format.paddingLeft = undefined;
|
|
110
|
-
};
|
|
111
|
-
/**
|
|
112
|
-
* This function returns whether we need to clear the list format.
|
|
113
|
-
* Word Online wraps lists inside divs to have this structure:
|
|
114
|
-
*
|
|
115
|
-
* <div class='ListContainerWrapper'>
|
|
116
|
-
* <ol>...</ol>
|
|
117
|
-
* </div>
|
|
118
|
-
* <div>
|
|
119
|
-
* <p>...</p>
|
|
120
|
-
* <div>
|
|
121
|
-
* <div class='ListContainerWrapper'>
|
|
122
|
-
* <ol>...</ol>
|
|
123
|
-
* </div>
|
|
124
|
-
*
|
|
125
|
-
* So if a elements is not contained inside of a list we should clear the list context to prevent normal text to be
|
|
126
|
-
* transformed into list
|
|
127
|
-
* For the above scenario, if we do not clear the format, the content inside of the second div would be transformed to a list too.
|
|
128
|
-
*/
|
|
129
|
-
function shouldClearListContext(elementTag, element, context) {
|
|
130
|
-
return (context.listFormat.levels.length > 0 &&
|
|
131
|
-
LIST_ELEMENT_TAGS.every(function (tag) { return tag != elementTag; }) &&
|
|
132
|
-
!element.closest(LIST_ELEMENT_SELECTOR));
|
|
133
|
-
}
|
|
134
|
-
var wacCommentParser = function (format, element) {
|
|
135
|
-
if (element.className.includes(constants_1.COMMENT_HIGHLIGHT_CLASS) ||
|
|
136
|
-
element.className.includes(constants_1.COMMENT_HIGHLIGHT_CLICKED_CLASS)) {
|
|
137
|
-
delete format.backgroundColor;
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
/**
|
|
141
|
-
* @internal
|
|
142
|
-
* Convert pasted content from Office Online
|
|
143
|
-
* Once it is known that the document is from WAC
|
|
144
|
-
* We need to remove the display property and margin from all the list item
|
|
145
|
-
* @param ev
|
|
146
|
-
*/
|
|
147
|
-
function processPastedContentWacComponents(ev) {
|
|
148
|
-
(0, addParser_1.default)(ev.domToModelOption, 'segment', wacSubSuperParser);
|
|
149
|
-
(0, addParser_1.default)(ev.domToModelOption, 'listItemThread', wacListItemParser);
|
|
150
|
-
(0, addParser_1.default)(ev.domToModelOption, 'listLevel', wacListLevelParser);
|
|
151
|
-
(0, addParser_1.default)(ev.domToModelOption, 'container', wacContainerParser);
|
|
152
|
-
(0, addParser_1.default)(ev.domToModelOption, 'table', wacContainerParser);
|
|
153
|
-
(0, addParser_1.default)(ev.domToModelOption, 'segment', wacCommentParser);
|
|
154
|
-
(0, setProcessor_1.setProcessor)(ev.domToModelOption, 'element', wacElementProcessor);
|
|
155
|
-
(0, setProcessor_1.setProcessor)(ev.domToModelOption, 'li', wacLiElementProcessor);
|
|
156
|
-
}
|
|
157
|
-
exports.processPastedContentWacComponents = processPastedContentWacComponents;
|
|
158
|
-
var wacContainerParser = function (format, element) {
|
|
159
|
-
if (element.style.marginLeft.startsWith('-')) {
|
|
160
|
-
delete format.marginLeft;
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
function updateStartOverride(currentLevel, element, ctx) {
|
|
164
|
-
if (!currentLevel || currentLevel.listType == 'UL') {
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
var list = element.closest('ol');
|
|
168
|
-
var listFormat = ctx.listFormat;
|
|
169
|
-
var _a = (0, tslib_1.__read)(extractWordListMetadata(list, element), 2), start = _a[0], listLevel = _a[1];
|
|
170
|
-
if (!listFormat.listItemThread) {
|
|
171
|
-
listFormat.listItemThread = [];
|
|
172
|
-
}
|
|
173
|
-
var thread = listFormat.listItemThread[listLevel];
|
|
174
|
-
if (thread && start - thread != 1) {
|
|
175
|
-
currentLevel.format.startNumberOverride = start;
|
|
176
|
-
}
|
|
177
|
-
listFormat.listItemThread[listLevel] = start;
|
|
178
|
-
}
|
|
179
|
-
function extractWordListMetadata(list, item) {
|
|
180
|
-
var itemIndex = item && Array.from((list === null || list === void 0 ? void 0 : list.querySelectorAll('li')) || []).indexOf(item);
|
|
181
|
-
var start = parseInt((list === null || list === void 0 ? void 0 : list.getAttribute('start')) || '1') + (itemIndex && itemIndex > 0 ? itemIndex : 0);
|
|
182
|
-
var listLevel = parseInt((item === null || item === void 0 ? void 0 : item.getAttribute('data-aria-level')) || '');
|
|
183
|
-
return [start, listLevel];
|
|
184
|
-
}
|
|
185
|
-
});
|
|
1
|
+
define(["require", "exports", "tslib", "../utils/addParser", "roosterjs-content-model-dom", "../utils/setProcessor", "./constants"], function (require, exports, tslib_1, addParser_1, roosterjs_content_model_dom_1, setProcessor_1, constants_1) {
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.processPastedContentWacComponents = void 0;
|
|
5
|
+
var LIST_ELEMENT_TAGS = ['UL', 'OL', 'LI'];
|
|
6
|
+
var LIST_ELEMENT_SELECTOR = LIST_ELEMENT_TAGS.join(',');
|
|
7
|
+
/**
|
|
8
|
+
* Wac components do not use sub and super tags, instead only add vertical align to a span.
|
|
9
|
+
* This parser normalize the content for content model
|
|
10
|
+
*/
|
|
11
|
+
var wacSubSuperParser = function (format, element) {
|
|
12
|
+
var verticalAlign = element.style.verticalAlign;
|
|
13
|
+
if (verticalAlign === 'super') {
|
|
14
|
+
format.superOrSubScriptSequence = 'super';
|
|
15
|
+
}
|
|
16
|
+
if (verticalAlign === 'sub') {
|
|
17
|
+
format.superOrSubScriptSequence = 'sub';
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* This processor does:
|
|
22
|
+
* 1) Remove the display and margin of the element.
|
|
23
|
+
* 2) When an element should be ignored but should handle the child elements call the default child processor.
|
|
24
|
+
* 3) Removes the End of Paragraph element to avoid empty lines, we should only remove this if the previous element of the EOP is an EmptyTextRun
|
|
25
|
+
* 4) Finally call the default processor.
|
|
26
|
+
* @returns
|
|
27
|
+
*/
|
|
28
|
+
var wacElementProcessor = function (group, element, context) {
|
|
29
|
+
var elementTag = element.tagName;
|
|
30
|
+
if (element.matches(constants_1.WAC_IDENTIFY_SELECTOR)) {
|
|
31
|
+
element.style.removeProperty('display');
|
|
32
|
+
element.style.removeProperty('margin');
|
|
33
|
+
}
|
|
34
|
+
if (element.classList.contains(constants_1.LIST_CONTAINER_ELEMENT_CLASS_NAME)) {
|
|
35
|
+
context.elementProcessors.child(group, element, context);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (constants_1.TEMP_ELEMENTS_CLASSES.some(function (className) { return element.classList.contains(className); })) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
else if (shouldClearListContext(elementTag, element, context)) {
|
|
42
|
+
var listFormat = context.listFormat;
|
|
43
|
+
listFormat.levels = [];
|
|
44
|
+
listFormat.listParent = undefined;
|
|
45
|
+
}
|
|
46
|
+
context.defaultElementProcessors.element(group, element, context);
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* This processor calls the default list processor and then sets the correct list level and list bullet.
|
|
50
|
+
*/
|
|
51
|
+
var wacLiElementProcessor = function (group, element, context) {
|
|
52
|
+
var _a, _b, _c, _d, _e;
|
|
53
|
+
var level = parseInt((_a = element.getAttribute('data-aria-level')) !== null && _a !== void 0 ? _a : '');
|
|
54
|
+
var listFormat = context.listFormat;
|
|
55
|
+
var listType = ((_b = listFormat.levels[context.listFormat.levels.length - 1]) === null || _b === void 0 ? void 0 : _b.listType) ||
|
|
56
|
+
((_c = element.closest('ol,ul')) === null || _c === void 0 ? void 0 : _c.tagName.toUpperCase());
|
|
57
|
+
var newLevel = (0, roosterjs_content_model_dom_1.createListLevel)(listType, context.blockFormat);
|
|
58
|
+
(0, roosterjs_content_model_dom_1.parseFormat)(element, context.formatParsers.listLevelThread, newLevel.format, context);
|
|
59
|
+
(0, roosterjs_content_model_dom_1.parseFormat)(element, context.formatParsers.listLevel, newLevel.format, context);
|
|
60
|
+
context.listFormat.levels = listFormat.currentListLevels || context.listFormat.levels;
|
|
61
|
+
if (level > 0) {
|
|
62
|
+
if (level > context.listFormat.levels.length) {
|
|
63
|
+
while (level != context.listFormat.levels.length) {
|
|
64
|
+
context.listFormat.levels.push(newLevel);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
context.listFormat.levels.splice(level, context.listFormat.levels.length - 1);
|
|
69
|
+
context.listFormat.levels[level - 1] = newLevel;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
(_e = (_d = context.defaultElementProcessors).li) === null || _e === void 0 ? void 0 : _e.call(_d, group, element, context);
|
|
73
|
+
var listParent = listFormat.listParent;
|
|
74
|
+
if (listParent) {
|
|
75
|
+
var lastblock = listParent.blocks[listParent.blocks.length - 1];
|
|
76
|
+
if (lastblock.blockType == 'BlockGroup' && lastblock.blockGroupType == 'ListItem') {
|
|
77
|
+
var currentLevel = lastblock.levels[lastblock.levels.length - 1];
|
|
78
|
+
updateStartOverride(currentLevel, element, context);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
var newLevels = [];
|
|
82
|
+
listFormat.levels.forEach(function (v) {
|
|
83
|
+
var newValue = {
|
|
84
|
+
dataset: (0, tslib_1.__assign)({}, v.dataset),
|
|
85
|
+
format: (0, tslib_1.__assign)({}, v.format),
|
|
86
|
+
listType: v.listType,
|
|
87
|
+
};
|
|
88
|
+
newLevels.push(newValue);
|
|
89
|
+
});
|
|
90
|
+
listFormat.currentListLevels = newLevels;
|
|
91
|
+
listFormat.levels = [];
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* This parsers does:
|
|
95
|
+
* 1) Sets the display for dummy item to undefined when the current style is block.
|
|
96
|
+
* 2) Removes the Margin Left
|
|
97
|
+
*/
|
|
98
|
+
var wacListItemParser = function (format, element) {
|
|
99
|
+
if (element.style.display === 'block') {
|
|
100
|
+
format.displayForDummyItem = undefined;
|
|
101
|
+
}
|
|
102
|
+
format.marginLeft = undefined;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Wac usually adds padding to lists which is unwanted so remove it.
|
|
106
|
+
*/
|
|
107
|
+
var wacListLevelParser = function (format) {
|
|
108
|
+
format.marginLeft = undefined;
|
|
109
|
+
format.paddingLeft = undefined;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* This function returns whether we need to clear the list format.
|
|
113
|
+
* Word Online wraps lists inside divs to have this structure:
|
|
114
|
+
*
|
|
115
|
+
* <div class='ListContainerWrapper'>
|
|
116
|
+
* <ol>...</ol>
|
|
117
|
+
* </div>
|
|
118
|
+
* <div>
|
|
119
|
+
* <p>...</p>
|
|
120
|
+
* <div>
|
|
121
|
+
* <div class='ListContainerWrapper'>
|
|
122
|
+
* <ol>...</ol>
|
|
123
|
+
* </div>
|
|
124
|
+
*
|
|
125
|
+
* So if a elements is not contained inside of a list we should clear the list context to prevent normal text to be
|
|
126
|
+
* transformed into list
|
|
127
|
+
* For the above scenario, if we do not clear the format, the content inside of the second div would be transformed to a list too.
|
|
128
|
+
*/
|
|
129
|
+
function shouldClearListContext(elementTag, element, context) {
|
|
130
|
+
return (context.listFormat.levels.length > 0 &&
|
|
131
|
+
LIST_ELEMENT_TAGS.every(function (tag) { return tag != elementTag; }) &&
|
|
132
|
+
!element.closest(LIST_ELEMENT_SELECTOR));
|
|
133
|
+
}
|
|
134
|
+
var wacCommentParser = function (format, element) {
|
|
135
|
+
if (element.className.includes(constants_1.COMMENT_HIGHLIGHT_CLASS) ||
|
|
136
|
+
element.className.includes(constants_1.COMMENT_HIGHLIGHT_CLICKED_CLASS)) {
|
|
137
|
+
delete format.backgroundColor;
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* @internal
|
|
142
|
+
* Convert pasted content from Office Online
|
|
143
|
+
* Once it is known that the document is from WAC
|
|
144
|
+
* We need to remove the display property and margin from all the list item
|
|
145
|
+
* @param ev BeforePasteEvent
|
|
146
|
+
*/
|
|
147
|
+
function processPastedContentWacComponents(ev) {
|
|
148
|
+
(0, addParser_1.default)(ev.domToModelOption, 'segment', wacSubSuperParser);
|
|
149
|
+
(0, addParser_1.default)(ev.domToModelOption, 'listItemThread', wacListItemParser);
|
|
150
|
+
(0, addParser_1.default)(ev.domToModelOption, 'listLevel', wacListLevelParser);
|
|
151
|
+
(0, addParser_1.default)(ev.domToModelOption, 'container', wacContainerParser);
|
|
152
|
+
(0, addParser_1.default)(ev.domToModelOption, 'table', wacContainerParser);
|
|
153
|
+
(0, addParser_1.default)(ev.domToModelOption, 'segment', wacCommentParser);
|
|
154
|
+
(0, setProcessor_1.setProcessor)(ev.domToModelOption, 'element', wacElementProcessor);
|
|
155
|
+
(0, setProcessor_1.setProcessor)(ev.domToModelOption, 'li', wacLiElementProcessor);
|
|
156
|
+
}
|
|
157
|
+
exports.processPastedContentWacComponents = processPastedContentWacComponents;
|
|
158
|
+
var wacContainerParser = function (format, element) {
|
|
159
|
+
if (element.style.marginLeft.startsWith('-')) {
|
|
160
|
+
delete format.marginLeft;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
function updateStartOverride(currentLevel, element, ctx) {
|
|
164
|
+
if (!currentLevel || currentLevel.listType == 'UL') {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
var list = element.closest('ol');
|
|
168
|
+
var listFormat = ctx.listFormat;
|
|
169
|
+
var _a = (0, tslib_1.__read)(extractWordListMetadata(list, element), 2), start = _a[0], listLevel = _a[1];
|
|
170
|
+
if (!listFormat.listItemThread) {
|
|
171
|
+
listFormat.listItemThread = [];
|
|
172
|
+
}
|
|
173
|
+
var thread = listFormat.listItemThread[listLevel];
|
|
174
|
+
if (thread && start - thread != 1) {
|
|
175
|
+
currentLevel.format.startNumberOverride = start;
|
|
176
|
+
}
|
|
177
|
+
listFormat.listItemThread[listLevel] = start;
|
|
178
|
+
}
|
|
179
|
+
function extractWordListMetadata(list, item) {
|
|
180
|
+
var itemIndex = item && Array.from((list === null || list === void 0 ? void 0 : list.querySelectorAll('li')) || []).indexOf(item);
|
|
181
|
+
var start = parseInt((list === null || list === void 0 ? void 0 : list.getAttribute('start')) || '1') + (itemIndex && itemIndex > 0 ? itemIndex : 0);
|
|
182
|
+
var listLevel = parseInt((item === null || item === void 0 ? void 0 : item.getAttribute('data-aria-level')) || '');
|
|
183
|
+
return [start, listLevel];
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
186
|
//# sourceMappingURL=processPastedContentWacComponents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processPastedContentWacComponents.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-plugins/lib/paste/WacComponents/processPastedContentWacComponents.ts"],"names":[],"mappings":"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","sourcesContent":["import addParser from '../utils/addParser';\nimport { createListLevel, parseFormat } from 'roosterjs-content-model-dom';\nimport { setProcessor } from '../utils/setProcessor';\nimport {\n COMMENT_HIGHLIGHT_CLASS,\n COMMENT_HIGHLIGHT_CLICKED_CLASS,\n LIST_CONTAINER_ELEMENT_CLASS_NAME,\n TEMP_ELEMENTS_CLASSES,\n WAC_IDENTIFY_SELECTOR,\n} from './constants';\nimport type {\n BeforePasteEvent,\n ContentModelBlockFormat,\n ContentModelBlockGroup,\n ContentModelListItemLevelFormat,\n ContentModelListLevel,\n ContentModelSegmentFormat,\n DomToModelContext,\n DomToModelListFormat,\n ElementProcessor,\n FormatParser,\n} from 'roosterjs-content-model-types';\n\nconst LIST_ELEMENT_TAGS = ['UL', 'OL', 'LI'];\nconst LIST_ELEMENT_SELECTOR = LIST_ELEMENT_TAGS.join(',');\n\ninterface WacContext extends DomToModelListFormat {\n /**\n * Current list levels\n */\n currentListLevels?: ContentModelListLevel[];\n /**\n * Array to keep the start of the lists and determine if the start override should be set.\n */\n listItemThread?: number[];\n}\n\n/**\n * Wac components do not use sub and super tags, instead only add vertical align to a span.\n * This parser normalize the content for content model\n */\nconst wacSubSuperParser: FormatParser<ContentModelSegmentFormat> = (\n format: ContentModelSegmentFormat,\n element: HTMLElement\n): void => {\n const verticalAlign = element.style.verticalAlign;\n if (verticalAlign === 'super') {\n format.superOrSubScriptSequence = 'super';\n }\n if (verticalAlign === 'sub') {\n format.superOrSubScriptSequence = 'sub';\n }\n};\n\n/**\n * This processor does:\n * 1) Remove the display and margin of the element.\n * 2) When an element should be ignored but should handle the child elements call the default child processor.\n * 3) Removes the End of Paragraph element to avoid empty lines, we should only remove this if the previous element of the EOP is an EmptyTextRun\n * 4) Finally call the default processor.\n * @returns\n */\nconst wacElementProcessor: ElementProcessor<HTMLElement> = (\n group: ContentModelBlockGroup,\n element: HTMLElement,\n context: DomToModelContext\n): void => {\n const elementTag = element.tagName;\n\n if (element.matches(WAC_IDENTIFY_SELECTOR)) {\n element.style.removeProperty('display');\n element.style.removeProperty('margin');\n }\n\n if (element.classList.contains(LIST_CONTAINER_ELEMENT_CLASS_NAME)) {\n context.elementProcessors.child(group, element, context);\n return;\n }\n\n if (TEMP_ELEMENTS_CLASSES.some(className => element.classList.contains(className))) {\n return;\n } else if (shouldClearListContext(elementTag, element, context)) {\n const { listFormat } = context;\n listFormat.levels = [];\n listFormat.listParent = undefined;\n }\n\n context.defaultElementProcessors.element(group, element, context);\n};\n\n/**\n * This processor calls the default list processor and then sets the correct list level and list bullet.\n */\nconst wacLiElementProcessor: ElementProcessor<HTMLLIElement> = (\n group: ContentModelBlockGroup,\n element: HTMLLIElement,\n context: DomToModelContext\n): void => {\n const level = parseInt(element.getAttribute('data-aria-level') ?? '');\n const listFormat = context.listFormat as WacContext;\n const listType =\n listFormat.levels[context.listFormat.levels.length - 1]?.listType ||\n (element.closest('ol,ul')?.tagName.toUpperCase() as 'UL' | 'OL');\n const newLevel: ContentModelListLevel = createListLevel(listType, context.blockFormat);\n parseFormat(element, context.formatParsers.listLevelThread, newLevel.format, context);\n parseFormat(element, context.formatParsers.listLevel, newLevel.format, context);\n context.listFormat.levels = listFormat.currentListLevels || context.listFormat.levels;\n\n if (level > 0) {\n if (level > context.listFormat.levels.length) {\n while (level != context.listFormat.levels.length) {\n context.listFormat.levels.push(newLevel);\n }\n } else {\n context.listFormat.levels.splice(level, context.listFormat.levels.length - 1);\n context.listFormat.levels[level - 1] = newLevel;\n }\n }\n\n context.defaultElementProcessors.li?.(group, element, context);\n\n const listParent = listFormat.listParent;\n if (listParent) {\n const lastblock = listParent.blocks[listParent.blocks.length - 1];\n if (lastblock.blockType == 'BlockGroup' && lastblock.blockGroupType == 'ListItem') {\n const currentLevel = lastblock.levels[lastblock.levels.length - 1];\n updateStartOverride(currentLevel, element, context);\n }\n }\n\n const newLevels: ContentModelListLevel[] = [];\n listFormat.levels.forEach(v => {\n const newValue: ContentModelListLevel = {\n dataset: { ...v.dataset },\n format: { ...v.format },\n listType: v.listType,\n };\n newLevels.push(newValue);\n });\n listFormat.currentListLevels = newLevels;\n listFormat.levels = [];\n};\n\n/**\n * This parsers does:\n * 1) Sets the display for dummy item to undefined when the current style is block.\n * 2) Removes the Margin Left\n */\nconst wacListItemParser: FormatParser<ContentModelListItemLevelFormat> = (\n format: ContentModelListItemLevelFormat,\n element: HTMLElement\n): void => {\n if (element.style.display === 'block') {\n format.displayForDummyItem = undefined;\n }\n\n format.marginLeft = undefined;\n};\n\n/**\n * Wac usually adds padding to lists which is unwanted so remove it.\n */\nconst wacListLevelParser: FormatParser<ContentModelListItemLevelFormat> = (\n format: ContentModelListItemLevelFormat\n): void => {\n format.marginLeft = undefined;\n format.paddingLeft = undefined;\n};\n\n/**\n * This function returns whether we need to clear the list format.\n * Word Online wraps lists inside divs to have this structure:\n *\n * <div class='ListContainerWrapper'>\n * <ol>...</ol>\n * </div>\n * <div>\n * <p>...</p>\n * <div>\n * <div class='ListContainerWrapper'>\n * <ol>...</ol>\n * </div>\n *\n * So if a elements is not contained inside of a list we should clear the list context to prevent normal text to be\n * transformed into list\n * For the above scenario, if we do not clear the format, the content inside of the second div would be transformed to a list too.\n */\nfunction shouldClearListContext(\n elementTag: string,\n element: HTMLElement,\n context: DomToModelContext\n) {\n return (\n context.listFormat.levels.length > 0 &&\n LIST_ELEMENT_TAGS.every(tag => tag != elementTag) &&\n !element.closest(LIST_ELEMENT_SELECTOR)\n );\n}\n\nconst wacCommentParser: FormatParser<ContentModelSegmentFormat> = (\n format: ContentModelSegmentFormat,\n element: HTMLElement\n): void => {\n if (\n element.className.includes(COMMENT_HIGHLIGHT_CLASS) ||\n element.className.includes(COMMENT_HIGHLIGHT_CLICKED_CLASS)\n ) {\n delete format.backgroundColor;\n }\n};\n/**\n * @internal\n * Convert pasted content from Office Online\n * Once it is known that the document is from WAC\n * We need to remove the display property and margin from all the list item\n * @param ev ContentModelBeforePasteEvent\n */\nexport function processPastedContentWacComponents(ev: BeforePasteEvent) {\n addParser(ev.domToModelOption, 'segment', wacSubSuperParser);\n addParser(ev.domToModelOption, 'listItemThread', wacListItemParser);\n addParser(ev.domToModelOption, 'listLevel', wacListLevelParser);\n addParser(ev.domToModelOption, 'container', wacContainerParser);\n addParser(ev.domToModelOption, 'table', wacContainerParser);\n addParser(ev.domToModelOption, 'segment', wacCommentParser);\n\n setProcessor(ev.domToModelOption, 'element', wacElementProcessor);\n setProcessor(ev.domToModelOption, 'li', wacLiElementProcessor);\n}\n\nconst wacContainerParser: FormatParser<ContentModelBlockFormat> = (\n format: ContentModelBlockFormat,\n element: HTMLElement\n) => {\n if (element.style.marginLeft.startsWith('-')) {\n delete format.marginLeft;\n }\n};\n\nfunction updateStartOverride(\n currentLevel: ContentModelListLevel | undefined,\n element: HTMLLIElement,\n ctx: DomToModelContext\n) {\n if (!currentLevel || currentLevel.listType == 'UL') {\n return;\n }\n\n const list = element.closest('ol');\n const listFormat = ctx.listFormat as WacContext;\n const [start, listLevel] = extractWordListMetadata(list, element);\n\n if (!listFormat.listItemThread) {\n listFormat.listItemThread = [];\n }\n\n const thread: number | undefined = listFormat.listItemThread[listLevel];\n if (thread && start - thread != 1) {\n currentLevel.format.startNumberOverride = start;\n }\n listFormat.listItemThread[listLevel] = start;\n}\nfunction extractWordListMetadata(\n list: HTMLElement | null | undefined,\n item: HTMLElement | null | undefined\n) {\n const itemIndex =\n item && Array.from(list?.querySelectorAll('li') || []).indexOf(item as HTMLLIElement);\n const start =\n parseInt(list?.getAttribute('start') || '1') + (itemIndex && itemIndex > 0 ? itemIndex : 0);\n const listLevel = parseInt(item?.getAttribute('data-aria-level') || '');\n\n return [start, listLevel];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"processPastedContentWacComponents.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-plugins/lib/paste/WacComponents/processPastedContentWacComponents.ts"],"names":[],"mappings":";;;;IAuBA,IAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,IAAM,qBAAqB,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAa1D;;;OAGG;IACH,IAAM,iBAAiB,GAA4C,UAC/D,MAAiC,EACjC,OAAoB;QAEpB,IAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;QAClD,IAAI,aAAa,KAAK,OAAO,EAAE;YAC3B,MAAM,CAAC,wBAAwB,GAAG,OAAO,CAAC;SAC7C;QACD,IAAI,aAAa,KAAK,KAAK,EAAE;YACzB,MAAM,CAAC,wBAAwB,GAAG,KAAK,CAAC;SAC3C;IACL,CAAC,CAAC;IAEF;;;;;;;OAOG;IACH,IAAM,mBAAmB,GAAkC,UACvD,KAA6B,EAC7B,OAAoB,EACpB,OAA0B;QAE1B,IAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;QAEnC,IAAI,OAAO,CAAC,OAAO,CAAC,iCAAqB,CAAC,EAAE;YACxC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;SAC1C;QAED,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,6CAAiC,CAAC,EAAE;YAC/D,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACzD,OAAO;SACV;QAED,IAAI,iCAAqB,CAAC,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAArC,CAAqC,CAAC,EAAE;YAChF,OAAO;SACV;aAAM,IAAI,sBAAsB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;YACrD,IAAA,UAAU,GAAK,OAAO,WAAZ,CAAa;YAC/B,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;YACvB,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC;SACrC;QAED,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC,CAAC;IAEF;;OAEG;IACH,IAAM,qBAAqB,GAAoC,UAC3D,KAA6B,EAC7B,OAAsB,EACtB,OAA0B;;QAE1B,IAAM,KAAK,GAAG,QAAQ,CAAC,MAAA,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,mCAAI,EAAE,CAAC,CAAC;QACtE,IAAM,UAAU,GAAG,OAAO,CAAC,UAAwB,CAAC;QACpD,IAAM,QAAQ,GACV,CAAA,MAAA,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,QAAQ;aAChE,MAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,0CAAE,OAAO,CAAC,WAAW,EAAkB,CAAA,CAAC;QACrE,IAAM,QAAQ,GAA0B,IAAA,6CAAe,EAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACvF,IAAA,yCAAW,EAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtF,IAAA,yCAAW,EAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChF,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,iBAAiB,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAEtF,IAAI,KAAK,GAAG,CAAC,EAAE;YACX,IAAI,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE;gBAC1C,OAAO,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE;oBAC9C,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC5C;aACJ;iBAAM;gBACH,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC9E,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;aACnD;SACJ;QAED,MAAA,MAAA,OAAO,CAAC,wBAAwB,EAAC,EAAE,mDAAG,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE/D,IAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QACzC,IAAI,UAAU,EAAE;YACZ,IAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClE,IAAI,SAAS,CAAC,SAAS,IAAI,YAAY,IAAI,SAAS,CAAC,cAAc,IAAI,UAAU,EAAE;gBAC/E,IAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnE,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;aACvD;SACJ;QAED,IAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC;YACvB,IAAM,QAAQ,GAA0B;gBACpC,OAAO,4BAAO,CAAC,CAAC,OAAO,CAAE;gBACzB,MAAM,4BAAO,CAAC,CAAC,MAAM,CAAE;gBACvB,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACvB,CAAC;YACF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACzC,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;IAC3B,CAAC,CAAC;IAEF;;;;OAIG;IACH,IAAM,iBAAiB,GAAkD,UACrE,MAAuC,EACvC,OAAoB;QAEpB,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE;YACnC,MAAM,CAAC,mBAAmB,GAAG,SAAS,CAAC;SAC1C;QAED,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IAClC,CAAC,CAAC;IAEF;;OAEG;IACH,IAAM,kBAAkB,GAAkD,UACtE,MAAuC;QAEvC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;IACnC,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,sBAAsB,CAC3B,UAAkB,EAClB,OAAoB,EACpB,OAA0B;QAE1B,OAAO,CACH,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACpC,iBAAiB,CAAC,KAAK,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,IAAI,UAAU,EAAjB,CAAiB,CAAC;YACjD,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAC1C,CAAC;IACN,CAAC;IAED,IAAM,gBAAgB,GAA4C,UAC9D,MAAiC,EACjC,OAAoB;QAEpB,IACI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,mCAAuB,CAAC;YACnD,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,2CAA+B,CAAC,EAC7D;YACE,OAAO,MAAM,CAAC,eAAe,CAAC;SACjC;IACL,CAAC,CAAC;IACF;;;;;;OAMG;IACH,SAAgB,iCAAiC,CAAC,EAAoB;QAClE,IAAA,mBAAS,EAAC,EAAE,CAAC,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAC7D,IAAA,mBAAS,EAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QACpE,IAAA,mBAAS,EAAC,EAAE,CAAC,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAChE,IAAA,mBAAS,EAAC,EAAE,CAAC,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAChE,IAAA,mBAAS,EAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAC5D,IAAA,mBAAS,EAAC,EAAE,CAAC,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAE5D,IAAA,2BAAY,EAAC,EAAE,CAAC,gBAAgB,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;QAClE,IAAA,2BAAY,EAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC;IACnE,CAAC;IAVD,8EAUC;IAED,IAAM,kBAAkB,GAA0C,UAC9D,MAA+B,EAC/B,OAAoB;QAEpB,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC1C,OAAO,MAAM,CAAC,UAAU,CAAC;SAC5B;IACL,CAAC,CAAC;IAEF,SAAS,mBAAmB,CACxB,YAA+C,EAC/C,OAAsB,EACtB,GAAsB;QAEtB,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,QAAQ,IAAI,IAAI,EAAE;YAChD,OAAO;SACV;QAED,IAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,IAAM,UAAU,GAAG,GAAG,CAAC,UAAwB,CAAC;QAC1C,IAAA,KAAA,oBAAqB,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAA,EAA1D,KAAK,QAAA,EAAE,SAAS,QAA0C,CAAC;QAElE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;YAC5B,UAAU,CAAC,cAAc,GAAG,EAAE,CAAC;SAClC;QAED,IAAM,MAAM,GAAuB,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACxE,IAAI,MAAM,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE;YAC/B,YAAY,CAAC,MAAM,CAAC,mBAAmB,GAAG,KAAK,CAAC;SACnD;QACD,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;IACjD,CAAC;IACD,SAAS,uBAAuB,CAC5B,IAAoC,EACpC,IAAoC;QAEpC,IAAM,SAAS,GACX,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,CAAC,IAAI,CAAC,KAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAqB,CAAC,CAAC;QAC1F,IAAM,KAAK,GACP,QAAQ,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC,OAAO,CAAC,KAAI,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,IAAM,SAAS,GAAG,QAAQ,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC,iBAAiB,CAAC,KAAI,EAAE,CAAC,CAAC;QAExE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9B,CAAC","sourcesContent":["import addParser from '../utils/addParser';\r\nimport { createListLevel, parseFormat } from 'roosterjs-content-model-dom';\r\nimport { setProcessor } from '../utils/setProcessor';\r\nimport {\r\n COMMENT_HIGHLIGHT_CLASS,\r\n COMMENT_HIGHLIGHT_CLICKED_CLASS,\r\n LIST_CONTAINER_ELEMENT_CLASS_NAME,\r\n TEMP_ELEMENTS_CLASSES,\r\n WAC_IDENTIFY_SELECTOR,\r\n} from './constants';\r\nimport type {\r\n BeforePasteEvent,\r\n ContentModelBlockFormat,\r\n ContentModelBlockGroup,\r\n ContentModelListItemLevelFormat,\r\n ContentModelListLevel,\r\n ContentModelSegmentFormat,\r\n DomToModelContext,\r\n DomToModelListFormat,\r\n ElementProcessor,\r\n FormatParser,\r\n} from 'roosterjs-content-model-types';\r\n\r\nconst LIST_ELEMENT_TAGS = ['UL', 'OL', 'LI'];\r\nconst LIST_ELEMENT_SELECTOR = LIST_ELEMENT_TAGS.join(',');\r\n\r\ninterface WacContext extends DomToModelListFormat {\r\n /**\r\n * Current list levels\r\n */\r\n currentListLevels?: ContentModelListLevel[];\r\n /**\r\n * Array to keep the start of the lists and determine if the start override should be set.\r\n */\r\n listItemThread?: number[];\r\n}\r\n\r\n/**\r\n * Wac components do not use sub and super tags, instead only add vertical align to a span.\r\n * This parser normalize the content for content model\r\n */\r\nconst wacSubSuperParser: FormatParser<ContentModelSegmentFormat> = (\r\n format: ContentModelSegmentFormat,\r\n element: HTMLElement\r\n): void => {\r\n const verticalAlign = element.style.verticalAlign;\r\n if (verticalAlign === 'super') {\r\n format.superOrSubScriptSequence = 'super';\r\n }\r\n if (verticalAlign === 'sub') {\r\n format.superOrSubScriptSequence = 'sub';\r\n }\r\n};\r\n\r\n/**\r\n * This processor does:\r\n * 1) Remove the display and margin of the element.\r\n * 2) When an element should be ignored but should handle the child elements call the default child processor.\r\n * 3) Removes the End of Paragraph element to avoid empty lines, we should only remove this if the previous element of the EOP is an EmptyTextRun\r\n * 4) Finally call the default processor.\r\n * @returns\r\n */\r\nconst wacElementProcessor: ElementProcessor<HTMLElement> = (\r\n group: ContentModelBlockGroup,\r\n element: HTMLElement,\r\n context: DomToModelContext\r\n): void => {\r\n const elementTag = element.tagName;\r\n\r\n if (element.matches(WAC_IDENTIFY_SELECTOR)) {\r\n element.style.removeProperty('display');\r\n element.style.removeProperty('margin');\r\n }\r\n\r\n if (element.classList.contains(LIST_CONTAINER_ELEMENT_CLASS_NAME)) {\r\n context.elementProcessors.child(group, element, context);\r\n return;\r\n }\r\n\r\n if (TEMP_ELEMENTS_CLASSES.some(className => element.classList.contains(className))) {\r\n return;\r\n } else if (shouldClearListContext(elementTag, element, context)) {\r\n const { listFormat } = context;\r\n listFormat.levels = [];\r\n listFormat.listParent = undefined;\r\n }\r\n\r\n context.defaultElementProcessors.element(group, element, context);\r\n};\r\n\r\n/**\r\n * This processor calls the default list processor and then sets the correct list level and list bullet.\r\n */\r\nconst wacLiElementProcessor: ElementProcessor<HTMLLIElement> = (\r\n group: ContentModelBlockGroup,\r\n element: HTMLLIElement,\r\n context: DomToModelContext\r\n): void => {\r\n const level = parseInt(element.getAttribute('data-aria-level') ?? '');\r\n const listFormat = context.listFormat as WacContext;\r\n const listType =\r\n listFormat.levels[context.listFormat.levels.length - 1]?.listType ||\r\n (element.closest('ol,ul')?.tagName.toUpperCase() as 'UL' | 'OL');\r\n const newLevel: ContentModelListLevel = createListLevel(listType, context.blockFormat);\r\n parseFormat(element, context.formatParsers.listLevelThread, newLevel.format, context);\r\n parseFormat(element, context.formatParsers.listLevel, newLevel.format, context);\r\n context.listFormat.levels = listFormat.currentListLevels || context.listFormat.levels;\r\n\r\n if (level > 0) {\r\n if (level > context.listFormat.levels.length) {\r\n while (level != context.listFormat.levels.length) {\r\n context.listFormat.levels.push(newLevel);\r\n }\r\n } else {\r\n context.listFormat.levels.splice(level, context.listFormat.levels.length - 1);\r\n context.listFormat.levels[level - 1] = newLevel;\r\n }\r\n }\r\n\r\n context.defaultElementProcessors.li?.(group, element, context);\r\n\r\n const listParent = listFormat.listParent;\r\n if (listParent) {\r\n const lastblock = listParent.blocks[listParent.blocks.length - 1];\r\n if (lastblock.blockType == 'BlockGroup' && lastblock.blockGroupType == 'ListItem') {\r\n const currentLevel = lastblock.levels[lastblock.levels.length - 1];\r\n updateStartOverride(currentLevel, element, context);\r\n }\r\n }\r\n\r\n const newLevels: ContentModelListLevel[] = [];\r\n listFormat.levels.forEach(v => {\r\n const newValue: ContentModelListLevel = {\r\n dataset: { ...v.dataset },\r\n format: { ...v.format },\r\n listType: v.listType,\r\n };\r\n newLevels.push(newValue);\r\n });\r\n listFormat.currentListLevels = newLevels;\r\n listFormat.levels = [];\r\n};\r\n\r\n/**\r\n * This parsers does:\r\n * 1) Sets the display for dummy item to undefined when the current style is block.\r\n * 2) Removes the Margin Left\r\n */\r\nconst wacListItemParser: FormatParser<ContentModelListItemLevelFormat> = (\r\n format: ContentModelListItemLevelFormat,\r\n element: HTMLElement\r\n): void => {\r\n if (element.style.display === 'block') {\r\n format.displayForDummyItem = undefined;\r\n }\r\n\r\n format.marginLeft = undefined;\r\n};\r\n\r\n/**\r\n * Wac usually adds padding to lists which is unwanted so remove it.\r\n */\r\nconst wacListLevelParser: FormatParser<ContentModelListItemLevelFormat> = (\r\n format: ContentModelListItemLevelFormat\r\n): void => {\r\n format.marginLeft = undefined;\r\n format.paddingLeft = undefined;\r\n};\r\n\r\n/**\r\n * This function returns whether we need to clear the list format.\r\n * Word Online wraps lists inside divs to have this structure:\r\n *\r\n * <div class='ListContainerWrapper'>\r\n * <ol>...</ol>\r\n * </div>\r\n * <div>\r\n * <p>...</p>\r\n * <div>\r\n * <div class='ListContainerWrapper'>\r\n * <ol>...</ol>\r\n * </div>\r\n *\r\n * So if a elements is not contained inside of a list we should clear the list context to prevent normal text to be\r\n * transformed into list\r\n * For the above scenario, if we do not clear the format, the content inside of the second div would be transformed to a list too.\r\n */\r\nfunction shouldClearListContext(\r\n elementTag: string,\r\n element: HTMLElement,\r\n context: DomToModelContext\r\n) {\r\n return (\r\n context.listFormat.levels.length > 0 &&\r\n LIST_ELEMENT_TAGS.every(tag => tag != elementTag) &&\r\n !element.closest(LIST_ELEMENT_SELECTOR)\r\n );\r\n}\r\n\r\nconst wacCommentParser: FormatParser<ContentModelSegmentFormat> = (\r\n format: ContentModelSegmentFormat,\r\n element: HTMLElement\r\n): void => {\r\n if (\r\n element.className.includes(COMMENT_HIGHLIGHT_CLASS) ||\r\n element.className.includes(COMMENT_HIGHLIGHT_CLICKED_CLASS)\r\n ) {\r\n delete format.backgroundColor;\r\n }\r\n};\r\n/**\r\n * @internal\r\n * Convert pasted content from Office Online\r\n * Once it is known that the document is from WAC\r\n * We need to remove the display property and margin from all the list item\r\n * @param ev BeforePasteEvent\r\n */\r\nexport function processPastedContentWacComponents(ev: BeforePasteEvent) {\r\n addParser(ev.domToModelOption, 'segment', wacSubSuperParser);\r\n addParser(ev.domToModelOption, 'listItemThread', wacListItemParser);\r\n addParser(ev.domToModelOption, 'listLevel', wacListLevelParser);\r\n addParser(ev.domToModelOption, 'container', wacContainerParser);\r\n addParser(ev.domToModelOption, 'table', wacContainerParser);\r\n addParser(ev.domToModelOption, 'segment', wacCommentParser);\r\n\r\n setProcessor(ev.domToModelOption, 'element', wacElementProcessor);\r\n setProcessor(ev.domToModelOption, 'li', wacLiElementProcessor);\r\n}\r\n\r\nconst wacContainerParser: FormatParser<ContentModelBlockFormat> = (\r\n format: ContentModelBlockFormat,\r\n element: HTMLElement\r\n) => {\r\n if (element.style.marginLeft.startsWith('-')) {\r\n delete format.marginLeft;\r\n }\r\n};\r\n\r\nfunction updateStartOverride(\r\n currentLevel: ContentModelListLevel | undefined,\r\n element: HTMLLIElement,\r\n ctx: DomToModelContext\r\n) {\r\n if (!currentLevel || currentLevel.listType == 'UL') {\r\n return;\r\n }\r\n\r\n const list = element.closest('ol');\r\n const listFormat = ctx.listFormat as WacContext;\r\n const [start, listLevel] = extractWordListMetadata(list, element);\r\n\r\n if (!listFormat.listItemThread) {\r\n listFormat.listItemThread = [];\r\n }\r\n\r\n const thread: number | undefined = listFormat.listItemThread[listLevel];\r\n if (thread && start - thread != 1) {\r\n currentLevel.format.startNumberOverride = start;\r\n }\r\n listFormat.listItemThread[listLevel] = start;\r\n}\r\nfunction extractWordListMetadata(\r\n list: HTMLElement | null | undefined,\r\n item: HTMLElement | null | undefined\r\n) {\r\n const itemIndex =\r\n item && Array.from(list?.querySelectorAll('li') || []).indexOf(item as HTMLLIElement);\r\n const start =\r\n parseInt(list?.getAttribute('start') || '1') + (itemIndex && itemIndex > 0 ? itemIndex : 0);\r\n const listLevel = parseInt(item?.getAttribute('data-aria-level') || '');\r\n\r\n return [start, listLevel];\r\n}\r\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @internal
|
|
3
|
-
* Metadata used when processing word desktop lists
|
|
4
|
-
*/
|
|
5
|
-
export interface WordMetadata {
|
|
6
|
-
readonly 'mso-level-number-format'?: string;
|
|
7
|
-
readonly 'mso-level-start-at'?: string;
|
|
8
|
-
readonly 'mso-level-text'?: string;
|
|
9
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @internal
|
|
3
|
+
* Metadata used when processing word desktop lists
|
|
4
|
+
*/
|
|
5
|
+
export interface WordMetadata {
|
|
6
|
+
readonly 'mso-level-number-format'?: string;
|
|
7
|
+
readonly 'mso-level-start-at'?: string;
|
|
8
|
+
readonly 'mso-level-text'?: string;
|
|
9
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
define(["require", "exports"], function (require, exports) {
|
|
2
|
-
"use strict";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
});
|
|
1
|
+
define(["require", "exports"], function (require, exports) {
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
});
|
|
5
5
|
//# sourceMappingURL=WordMetadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WordMetadata.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-plugins/lib/paste/WordDesktop/WordMetadata.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * @internal\n * Metadata used when processing word desktop lists\n */\nexport interface WordMetadata {\n readonly 'mso-level-number-format'?: string;\n readonly 'mso-level-start-at'?: string;\n readonly 'mso-level-text'?: string;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"WordMetadata.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-plugins/lib/paste/WordDesktop/WordMetadata.ts"],"names":[],"mappings":"","sourcesContent":["/**\r\n * @internal\r\n * Metadata used when processing word desktop lists\r\n */\r\nexport interface WordMetadata {\r\n readonly 'mso-level-number-format'?: string;\r\n readonly 'mso-level-start-at'?: string;\r\n readonly 'mso-level-text'?: string;\r\n}\r\n"]}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import type { WordMetadata } from './WordMetadata';
|
|
2
|
-
import type { BeforePasteEvent } from 'roosterjs-content-model-types';
|
|
3
|
-
/**
|
|
4
|
-
* @internal
|
|
5
|
-
* Word Desktop content has a style tag that contains data for the lists.
|
|
6
|
-
* So this function query that style tag and extract the data from the innerHTML, since it is not available from the HTMLStyleElement.sheet.
|
|
7
|
-
*
|
|
8
|
-
* The format is like:
|
|
9
|
-
* example of style element content
|
|
10
|
-
* @list l0:level1 {
|
|
11
|
-
* styleTag: styleValue;
|
|
12
|
-
* ...
|
|
13
|
-
* }
|
|
14
|
-
*
|
|
15
|
-
* To extract the data:
|
|
16
|
-
* 1. Substring the value of the style selector, using @ index and { index
|
|
17
|
-
* 2. Substring the value of the style rules by Substring the content between { and }
|
|
18
|
-
* 3. Split the value of the rules using ; as separator { styleTag: styleValue; styleTag1: StyleValue1 } = ['styleTag: styleValue', 'styleTag1: StyleValue1']
|
|
19
|
-
* 4. Split the value of the rule using : as separator: styleTag: styleValue = [styleTag, styleValue]
|
|
20
|
-
* 5. Save data in record and only use the required information.
|
|
21
|
-
*
|
|
22
|
-
*/
|
|
23
|
-
export default function getStyleMetadata(ev: BeforePasteEvent, trustedHTMLHandler: (val: string) => string): Map<string, WordMetadata>;
|
|
1
|
+
import type { WordMetadata } from './WordMetadata';
|
|
2
|
+
import type { BeforePasteEvent } from 'roosterjs-content-model-types';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
* Word Desktop content has a style tag that contains data for the lists.
|
|
6
|
+
* So this function query that style tag and extract the data from the innerHTML, since it is not available from the HTMLStyleElement.sheet.
|
|
7
|
+
*
|
|
8
|
+
* The format is like:
|
|
9
|
+
* example of style element content
|
|
10
|
+
* @list l0:level1 {
|
|
11
|
+
* styleTag: styleValue;
|
|
12
|
+
* ...
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* To extract the data:
|
|
16
|
+
* 1. Substring the value of the style selector, using @ index and { index
|
|
17
|
+
* 2. Substring the value of the style rules by Substring the content between { and }
|
|
18
|
+
* 3. Split the value of the rules using ; as separator { styleTag: styleValue; styleTag1: StyleValue1 } = ['styleTag: styleValue', 'styleTag1: StyleValue1']
|
|
19
|
+
* 4. Split the value of the rule using : as separator: styleTag: styleValue = [styleTag, styleValue]
|
|
20
|
+
* 5. Save data in record and only use the required information.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
export default function getStyleMetadata(ev: BeforePasteEvent, trustedHTMLHandler: (val: string) => string): Map<string, WordMetadata>;
|