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.
Files changed (463) hide show
  1. package/{lib-mjs/autoFormat/ContentModelAutoFormatPlugin.d.ts → lib/autoFormat/AutoFormatPlugin.d.ts} +53 -53
  2. package/lib/autoFormat/{ContentModelAutoFormatPlugin.js → AutoFormatPlugin.js} +81 -81
  3. package/lib/autoFormat/AutoFormatPlugin.js.map +1 -0
  4. package/lib/autoFormat/keyboardListTrigger.d.ts +5 -5
  5. package/lib/autoFormat/keyboardListTrigger.js +45 -45
  6. package/lib/autoFormat/keyboardListTrigger.js.map +1 -1
  7. package/lib/autoFormat/utils/convertAlphaToDecimals.d.ts +7 -7
  8. package/lib/autoFormat/utils/convertAlphaToDecimals.js +22 -22
  9. package/lib/autoFormat/utils/convertAlphaToDecimals.js.map +1 -1
  10. package/lib/autoFormat/utils/getIndex.d.ts +4 -4
  11. package/lib/autoFormat/utils/getIndex.js +13 -13
  12. package/lib/autoFormat/utils/getIndex.js.map +1 -1
  13. package/lib/autoFormat/utils/getListTypeStyle.d.ts +14 -14
  14. package/lib/autoFormat/utils/getListTypeStyle.js +87 -79
  15. package/lib/autoFormat/utils/getListTypeStyle.js.map +1 -1
  16. package/lib/autoFormat/utils/getNumberingListStyle.d.ts +4 -4
  17. package/lib/autoFormat/utils/getNumberingListStyle.js +153 -152
  18. package/lib/autoFormat/utils/getNumberingListStyle.js.map +1 -1
  19. package/{lib-amd/edit/ContentModelEditPlugin.d.ts → lib/edit/EditPlugin.d.ts} +39 -35
  20. package/lib/edit/EditPlugin.js +129 -0
  21. package/lib/edit/EditPlugin.js.map +1 -0
  22. package/lib/edit/deleteSteps/deleteAllSegmentBefore.d.ts +5 -5
  23. package/lib/edit/deleteSteps/deleteAllSegmentBefore.js +22 -22
  24. package/lib/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
  25. package/lib/edit/deleteSteps/deleteCollapsedSelection.d.ts +9 -9
  26. package/lib/edit/deleteSteps/deleteCollapsedSelection.js +93 -93
  27. package/lib/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
  28. package/lib/edit/deleteSteps/deleteList.d.ts +5 -5
  29. package/lib/edit/deleteSteps/deleteList.js +23 -23
  30. package/lib/edit/deleteSteps/deleteList.js.map +1 -1
  31. package/lib/edit/deleteSteps/deleteWordSelection.d.ts +9 -9
  32. package/lib/edit/deleteSteps/deleteWordSelection.js +173 -173
  33. package/lib/edit/deleteSteps/deleteWordSelection.js.map +1 -1
  34. package/lib/edit/handleKeyboardEventCommon.d.ts +14 -14
  35. package/lib/edit/handleKeyboardEventCommon.js +54 -54
  36. package/lib/edit/handleKeyboardEventCommon.js.map +1 -1
  37. package/lib/edit/inputSteps/handleEnterOnList.d.ts +5 -0
  38. package/lib/edit/inputSteps/handleEnterOnList.js +68 -0
  39. package/lib/edit/inputSteps/handleEnterOnList.js.map +1 -0
  40. package/lib/edit/keyboardDelete.d.ts +9 -8
  41. package/lib/edit/keyboardDelete.js +71 -74
  42. package/lib/edit/keyboardDelete.js.map +1 -1
  43. package/lib/edit/keyboardInput.d.ts +5 -5
  44. package/lib/edit/keyboardInput.js +58 -50
  45. package/lib/edit/keyboardInput.js.map +1 -1
  46. package/lib/edit/keyboardTab.d.ts +5 -0
  47. package/lib/edit/keyboardTab.js +35 -0
  48. package/lib/edit/keyboardTab.js.map +1 -0
  49. package/lib/edit/utils/getLeafSiblingBlock.d.ts +23 -23
  50. package/lib/edit/utils/getLeafSiblingBlock.js +75 -75
  51. package/lib/edit/utils/getLeafSiblingBlock.js.map +1 -1
  52. package/lib/index.d.ts +3 -3
  53. package/lib/index.js +9 -9
  54. package/lib/index.js.map +1 -1
  55. package/lib/paste/Excel/processPastedContentFromExcel.d.ts +12 -12
  56. package/lib/paste/Excel/processPastedContentFromExcel.js +82 -82
  57. package/lib/paste/Excel/processPastedContentFromExcel.js.map +1 -1
  58. package/{lib-amd/paste/ContentModelPastePlugin.d.ts → lib/paste/PastePlugin.d.ts} +43 -43
  59. package/lib/paste/{ContentModelPastePlugin.js → PastePlugin.js} +131 -131
  60. package/lib/paste/PastePlugin.js.map +1 -0
  61. package/lib/paste/PowerPoint/processPastedContentFromPowerPoint.d.ts +7 -7
  62. package/lib/paste/PowerPoint/processPastedContentFromPowerPoint.js +19 -19
  63. package/lib/paste/PowerPoint/processPastedContentFromPowerPoint.js.map +1 -1
  64. package/lib/paste/WacComponents/constants.d.ts +48 -48
  65. package/lib/paste/WacComponents/constants.js +62 -62
  66. package/lib/paste/WacComponents/constants.js.map +1 -1
  67. package/lib/paste/WacComponents/processPastedContentWacComponents.d.ts +9 -9
  68. package/lib/paste/WacComponents/processPastedContentWacComponents.js +188 -188
  69. package/lib/paste/WacComponents/processPastedContentWacComponents.js.map +1 -1
  70. package/lib/paste/WordDesktop/WordMetadata.d.ts +9 -9
  71. package/lib/paste/WordDesktop/WordMetadata.js +2 -2
  72. package/lib/paste/WordDesktop/WordMetadata.js.map +1 -1
  73. package/lib/paste/WordDesktop/getStyleMetadata.d.ts +23 -23
  74. package/lib/paste/WordDesktop/getStyleMetadata.js +78 -78
  75. package/lib/paste/WordDesktop/getStyleMetadata.js.map +1 -1
  76. package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.d.ts +7 -7
  77. package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js +58 -58
  78. package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
  79. package/lib/paste/WordDesktop/processWordComments.d.ts +7 -7
  80. package/lib/paste/WordDesktop/processWordComments.js +21 -21
  81. package/lib/paste/WordDesktop/processWordComments.js.map +1 -1
  82. package/lib/paste/WordDesktop/processWordLists.d.ts +11 -11
  83. package/lib/paste/WordDesktop/processWordLists.js +179 -179
  84. package/lib/paste/WordDesktop/processWordLists.js.map +1 -1
  85. package/lib/paste/WordDesktop/removeNegativeTextIndentParser.d.ts +5 -5
  86. package/lib/paste/WordDesktop/removeNegativeTextIndentParser.js +13 -13
  87. package/lib/paste/WordDesktop/removeNegativeTextIndentParser.js.map +1 -1
  88. package/lib/paste/pasteSourceValidations/constants.d.ts +17 -17
  89. package/lib/paste/pasteSourceValidations/constants.js +20 -20
  90. package/lib/paste/pasteSourceValidations/constants.js.map +1 -1
  91. package/lib/paste/pasteSourceValidations/documentContainWacElements.d.ts +8 -8
  92. package/lib/paste/pasteSourceValidations/documentContainWacElements.js +15 -15
  93. package/lib/paste/pasteSourceValidations/documentContainWacElements.js.map +1 -1
  94. package/lib/paste/pasteSourceValidations/getPasteSource.d.ts +27 -27
  95. package/lib/paste/pasteSourceValidations/getPasteSource.js +43 -43
  96. package/lib/paste/pasteSourceValidations/getPasteSource.js.map +1 -1
  97. package/lib/paste/pasteSourceValidations/isExcelDesktopDocument.d.ts +8 -8
  98. package/lib/paste/pasteSourceValidations/isExcelDesktopDocument.js +17 -17
  99. package/lib/paste/pasteSourceValidations/isExcelDesktopDocument.js.map +1 -1
  100. package/lib/paste/pasteSourceValidations/isExcelOnlineDocument.d.ts +8 -8
  101. package/lib/paste/pasteSourceValidations/isExcelOnlineDocument.js +19 -19
  102. package/lib/paste/pasteSourceValidations/isExcelOnlineDocument.js.map +1 -1
  103. package/lib/paste/pasteSourceValidations/isGoogleSheetDocument.d.ts +8 -8
  104. package/lib/paste/pasteSourceValidations/isGoogleSheetDocument.js +15 -15
  105. package/lib/paste/pasteSourceValidations/isGoogleSheetDocument.js.map +1 -1
  106. package/lib/paste/pasteSourceValidations/isPowerPointDesktopDocument.d.ts +8 -8
  107. package/lib/paste/pasteSourceValidations/isPowerPointDesktopDocument.js +15 -15
  108. package/lib/paste/pasteSourceValidations/isPowerPointDesktopDocument.js.map +1 -1
  109. package/lib/paste/pasteSourceValidations/isWordDesktopDocument.d.ts +8 -8
  110. package/lib/paste/pasteSourceValidations/isWordDesktopDocument.js +19 -19
  111. package/lib/paste/pasteSourceValidations/isWordDesktopDocument.js.map +1 -1
  112. package/lib/paste/pasteSourceValidations/shouldConvertToSingleImage.d.ts +9 -9
  113. package/lib/paste/pasteSourceValidations/shouldConvertToSingleImage.js +18 -18
  114. package/lib/paste/pasteSourceValidations/shouldConvertToSingleImage.js.map +1 -1
  115. package/lib/paste/utils/addParser.d.ts +5 -5
  116. package/lib/paste/utils/addParser.js +16 -16
  117. package/lib/paste/utils/addParser.js.map +1 -1
  118. package/lib/paste/utils/deprecatedColorParser.d.ts +5 -5
  119. package/lib/paste/utils/deprecatedColorParser.js +19 -19
  120. package/lib/paste/utils/deprecatedColorParser.js.map +1 -1
  121. package/lib/paste/utils/getStyles.d.ts +6 -6
  122. package/lib/paste/utils/getStyles.js +22 -22
  123. package/lib/paste/utils/getStyles.js.map +1 -1
  124. package/lib/paste/utils/linkParser.d.ts +5 -5
  125. package/lib/paste/utils/linkParser.js +27 -27
  126. package/lib/paste/utils/linkParser.js.map +1 -1
  127. package/lib/paste/utils/setProcessor.d.ts +5 -5
  128. package/lib/paste/utils/setProcessor.js +13 -13
  129. package/lib/paste/utils/setProcessor.js.map +1 -1
  130. package/lib/pluginUtils/CreateElement/CreateElementData.d.ts +35 -0
  131. package/lib/pluginUtils/CreateElement/CreateElementData.js +3 -0
  132. package/lib/pluginUtils/CreateElement/CreateElementData.js.map +1 -0
  133. package/lib/pluginUtils/CreateElement/createElement.d.ts +9 -0
  134. package/lib/pluginUtils/CreateElement/createElement.js +51 -0
  135. package/lib/pluginUtils/CreateElement/createElement.js.map +1 -0
  136. package/lib/pluginUtils/Disposable.d.ts +10 -0
  137. package/lib/pluginUtils/Disposable.js +3 -0
  138. package/lib/pluginUtils/Disposable.js.map +1 -0
  139. package/lib/pluginUtils/DragAndDrop/DragAndDropHandler.d.ts +45 -0
  140. package/lib/pluginUtils/DragAndDrop/DragAndDropHandler.js +3 -0
  141. package/lib/pluginUtils/DragAndDrop/DragAndDropHandler.js.map +1 -0
  142. package/lib/pluginUtils/DragAndDrop/DragAndDropHelper.d.ts +39 -0
  143. package/lib/pluginUtils/DragAndDrop/DragAndDropHelper.js +120 -0
  144. package/lib/pluginUtils/DragAndDrop/DragAndDropHelper.js.map +1 -0
  145. package/lib/pluginUtils/Rect/getIntersectedRect.d.ts +27 -0
  146. package/lib/pluginUtils/Rect/getIntersectedRect.js +45 -0
  147. package/lib/pluginUtils/Rect/getIntersectedRect.js.map +1 -0
  148. package/lib/pluginUtils/Rect/normalizeRect.d.ts +7 -0
  149. package/lib/pluginUtils/Rect/normalizeRect.js +20 -0
  150. package/lib/pluginUtils/Rect/normalizeRect.js.map +1 -0
  151. package/lib-amd/autoFormat/{ContentModelAutoFormatPlugin.d.ts → AutoFormatPlugin.d.ts} +53 -53
  152. package/lib-amd/autoFormat/{ContentModelAutoFormatPlugin.js → AutoFormatPlugin.js} +82 -82
  153. package/lib-amd/autoFormat/AutoFormatPlugin.js.map +1 -0
  154. package/lib-amd/autoFormat/keyboardListTrigger.d.ts +5 -5
  155. package/lib-amd/autoFormat/keyboardListTrigger.js +43 -43
  156. package/lib-amd/autoFormat/keyboardListTrigger.js.map +1 -1
  157. package/lib-amd/autoFormat/utils/convertAlphaToDecimals.d.ts +7 -7
  158. package/lib-amd/autoFormat/utils/convertAlphaToDecimals.js +24 -24
  159. package/lib-amd/autoFormat/utils/convertAlphaToDecimals.js.map +1 -1
  160. package/lib-amd/autoFormat/utils/getIndex.d.ts +4 -4
  161. package/lib-amd/autoFormat/utils/getIndex.js +14 -14
  162. package/lib-amd/autoFormat/utils/getIndex.js.map +1 -1
  163. package/lib-amd/autoFormat/utils/getListTypeStyle.d.ts +14 -14
  164. package/lib-amd/autoFormat/utils/getListTypeStyle.js +86 -78
  165. package/lib-amd/autoFormat/utils/getListTypeStyle.js.map +1 -1
  166. package/lib-amd/autoFormat/utils/getNumberingListStyle.d.ts +4 -4
  167. package/lib-amd/autoFormat/utils/getNumberingListStyle.js +153 -152
  168. package/lib-amd/autoFormat/utils/getNumberingListStyle.js.map +1 -1
  169. package/{lib-mjs/edit/ContentModelEditPlugin.d.ts → lib-amd/edit/EditPlugin.d.ts} +39 -35
  170. package/lib-amd/edit/EditPlugin.js +128 -0
  171. package/lib-amd/edit/EditPlugin.js.map +1 -0
  172. package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.d.ts +5 -5
  173. package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js +23 -23
  174. package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
  175. package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.d.ts +9 -9
  176. package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js +92 -92
  177. package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
  178. package/lib-amd/edit/deleteSteps/deleteList.d.ts +5 -5
  179. package/lib-amd/edit/deleteSteps/deleteList.js +24 -24
  180. package/lib-amd/edit/deleteSteps/deleteList.js.map +1 -1
  181. package/lib-amd/edit/deleteSteps/deleteWordSelection.d.ts +9 -9
  182. package/lib-amd/edit/deleteSteps/deleteWordSelection.js +172 -172
  183. package/lib-amd/edit/deleteSteps/deleteWordSelection.js.map +1 -1
  184. package/lib-amd/edit/handleKeyboardEventCommon.d.ts +14 -14
  185. package/lib-amd/edit/handleKeyboardEventCommon.js +55 -55
  186. package/lib-amd/edit/handleKeyboardEventCommon.js.map +1 -1
  187. package/lib-amd/edit/inputSteps/handleEnterOnList.d.ts +5 -0
  188. package/lib-amd/edit/inputSteps/handleEnterOnList.js +67 -0
  189. package/lib-amd/edit/inputSteps/handleEnterOnList.js.map +1 -0
  190. package/lib-amd/edit/keyboardDelete.d.ts +9 -8
  191. package/lib-amd/edit/keyboardDelete.js +66 -69
  192. package/lib-amd/edit/keyboardDelete.js.map +1 -1
  193. package/lib-amd/edit/keyboardInput.d.ts +5 -5
  194. package/lib-amd/edit/keyboardInput.js +57 -50
  195. package/lib-amd/edit/keyboardInput.js.map +1 -1
  196. package/lib-amd/edit/keyboardTab.d.ts +5 -0
  197. package/lib-amd/edit/keyboardTab.js +35 -0
  198. package/lib-amd/edit/keyboardTab.js.map +1 -0
  199. package/lib-amd/edit/utils/getLeafSiblingBlock.d.ts +23 -23
  200. package/lib-amd/edit/utils/getLeafSiblingBlock.js +75 -75
  201. package/lib-amd/edit/utils/getLeafSiblingBlock.js.map +1 -1
  202. package/lib-amd/index.d.ts +3 -3
  203. package/lib-amd/index.js +8 -8
  204. package/lib-amd/index.js.map +1 -1
  205. package/lib-amd/paste/Excel/processPastedContentFromExcel.d.ts +12 -12
  206. package/lib-amd/paste/Excel/processPastedContentFromExcel.js +80 -80
  207. package/lib-amd/paste/Excel/processPastedContentFromExcel.js.map +1 -1
  208. package/{lib/paste/ContentModelPastePlugin.d.ts → lib-amd/paste/PastePlugin.d.ts} +43 -43
  209. package/lib-amd/paste/{ContentModelPastePlugin.js → PastePlugin.js} +123 -123
  210. package/lib-amd/paste/PastePlugin.js.map +1 -0
  211. package/lib-amd/paste/PowerPoint/processPastedContentFromPowerPoint.d.ts +7 -7
  212. package/lib-amd/paste/PowerPoint/processPastedContentFromPowerPoint.js +20 -20
  213. package/lib-amd/paste/PowerPoint/processPastedContentFromPowerPoint.js.map +1 -1
  214. package/lib-amd/paste/WacComponents/constants.d.ts +48 -48
  215. package/lib-amd/paste/WacComponents/constants.js +63 -63
  216. package/lib-amd/paste/WacComponents/constants.js.map +1 -1
  217. package/lib-amd/paste/WacComponents/processPastedContentWacComponents.d.ts +9 -9
  218. package/lib-amd/paste/WacComponents/processPastedContentWacComponents.js +185 -185
  219. package/lib-amd/paste/WacComponents/processPastedContentWacComponents.js.map +1 -1
  220. package/lib-amd/paste/WordDesktop/WordMetadata.d.ts +9 -9
  221. package/lib-amd/paste/WordDesktop/WordMetadata.js +4 -4
  222. package/lib-amd/paste/WordDesktop/WordMetadata.js.map +1 -1
  223. package/lib-amd/paste/WordDesktop/getStyleMetadata.d.ts +23 -23
  224. package/lib-amd/paste/WordDesktop/getStyleMetadata.js +78 -78
  225. package/lib-amd/paste/WordDesktop/getStyleMetadata.js.map +1 -1
  226. package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.d.ts +7 -7
  227. package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js +53 -53
  228. package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
  229. package/lib-amd/paste/WordDesktop/processWordComments.d.ts +7 -7
  230. package/lib-amd/paste/WordDesktop/processWordComments.js +22 -22
  231. package/lib-amd/paste/WordDesktop/processWordComments.js.map +1 -1
  232. package/lib-amd/paste/WordDesktop/processWordLists.d.ts +11 -11
  233. package/lib-amd/paste/WordDesktop/processWordLists.js +177 -177
  234. package/lib-amd/paste/WordDesktop/processWordLists.js.map +1 -1
  235. package/lib-amd/paste/WordDesktop/removeNegativeTextIndentParser.d.ts +5 -5
  236. package/lib-amd/paste/WordDesktop/removeNegativeTextIndentParser.js +15 -15
  237. package/lib-amd/paste/WordDesktop/removeNegativeTextIndentParser.js.map +1 -1
  238. package/lib-amd/paste/pasteSourceValidations/constants.d.ts +17 -17
  239. package/lib-amd/paste/pasteSourceValidations/constants.js +22 -22
  240. package/lib-amd/paste/pasteSourceValidations/constants.js.map +1 -1
  241. package/lib-amd/paste/pasteSourceValidations/documentContainWacElements.d.ts +8 -8
  242. package/lib-amd/paste/pasteSourceValidations/documentContainWacElements.js +16 -16
  243. package/lib-amd/paste/pasteSourceValidations/documentContainWacElements.js.map +1 -1
  244. package/lib-amd/paste/pasteSourceValidations/getPasteSource.d.ts +27 -27
  245. package/lib-amd/paste/pasteSourceValidations/getPasteSource.js +38 -38
  246. package/lib-amd/paste/pasteSourceValidations/getPasteSource.js.map +1 -1
  247. package/lib-amd/paste/pasteSourceValidations/isExcelDesktopDocument.d.ts +8 -8
  248. package/lib-amd/paste/pasteSourceValidations/isExcelDesktopDocument.js +18 -18
  249. package/lib-amd/paste/pasteSourceValidations/isExcelDesktopDocument.js.map +1 -1
  250. package/lib-amd/paste/pasteSourceValidations/isExcelOnlineDocument.d.ts +8 -8
  251. package/lib-amd/paste/pasteSourceValidations/isExcelOnlineDocument.js +20 -20
  252. package/lib-amd/paste/pasteSourceValidations/isExcelOnlineDocument.js.map +1 -1
  253. package/lib-amd/paste/pasteSourceValidations/isGoogleSheetDocument.d.ts +8 -8
  254. package/lib-amd/paste/pasteSourceValidations/isGoogleSheetDocument.js +16 -16
  255. package/lib-amd/paste/pasteSourceValidations/isGoogleSheetDocument.js.map +1 -1
  256. package/lib-amd/paste/pasteSourceValidations/isPowerPointDesktopDocument.d.ts +8 -8
  257. package/lib-amd/paste/pasteSourceValidations/isPowerPointDesktopDocument.js +16 -16
  258. package/lib-amd/paste/pasteSourceValidations/isPowerPointDesktopDocument.js.map +1 -1
  259. package/lib-amd/paste/pasteSourceValidations/isWordDesktopDocument.d.ts +8 -8
  260. package/lib-amd/paste/pasteSourceValidations/isWordDesktopDocument.js +20 -20
  261. package/lib-amd/paste/pasteSourceValidations/isWordDesktopDocument.js.map +1 -1
  262. package/lib-amd/paste/pasteSourceValidations/shouldConvertToSingleImage.d.ts +9 -9
  263. package/lib-amd/paste/pasteSourceValidations/shouldConvertToSingleImage.js +20 -20
  264. package/lib-amd/paste/pasteSourceValidations/shouldConvertToSingleImage.js.map +1 -1
  265. package/lib-amd/paste/utils/addParser.d.ts +5 -5
  266. package/lib-amd/paste/utils/addParser.js +18 -18
  267. package/lib-amd/paste/utils/addParser.js.map +1 -1
  268. package/lib-amd/paste/utils/deprecatedColorParser.d.ts +5 -5
  269. package/lib-amd/paste/utils/deprecatedColorParser.js +20 -20
  270. package/lib-amd/paste/utils/deprecatedColorParser.js.map +1 -1
  271. package/lib-amd/paste/utils/getStyles.d.ts +6 -6
  272. package/lib-amd/paste/utils/getStyles.js +24 -24
  273. package/lib-amd/paste/utils/getStyles.js.map +1 -1
  274. package/lib-amd/paste/utils/linkParser.d.ts +5 -5
  275. package/lib-amd/paste/utils/linkParser.js +28 -28
  276. package/lib-amd/paste/utils/linkParser.js.map +1 -1
  277. package/lib-amd/paste/utils/setProcessor.d.ts +5 -5
  278. package/lib-amd/paste/utils/setProcessor.js +15 -15
  279. package/lib-amd/paste/utils/setProcessor.js.map +1 -1
  280. package/lib-amd/pluginUtils/CreateElement/CreateElementData.d.ts +35 -0
  281. package/lib-amd/pluginUtils/CreateElement/CreateElementData.js +5 -0
  282. package/lib-amd/pluginUtils/CreateElement/CreateElementData.js.map +1 -0
  283. package/lib-amd/pluginUtils/CreateElement/createElement.d.ts +9 -0
  284. package/lib-amd/pluginUtils/CreateElement/createElement.js +52 -0
  285. package/lib-amd/pluginUtils/CreateElement/createElement.js.map +1 -0
  286. package/lib-amd/pluginUtils/Disposable.d.ts +10 -0
  287. package/lib-amd/pluginUtils/Disposable.js +5 -0
  288. package/lib-amd/pluginUtils/Disposable.js.map +1 -0
  289. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHandler.d.ts +45 -0
  290. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHandler.js +5 -0
  291. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHandler.js.map +1 -0
  292. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHelper.d.ts +39 -0
  293. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHelper.js +121 -0
  294. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHelper.js.map +1 -0
  295. package/lib-amd/pluginUtils/Rect/getIntersectedRect.d.ts +27 -0
  296. package/lib-amd/pluginUtils/Rect/getIntersectedRect.js +45 -0
  297. package/lib-amd/pluginUtils/Rect/getIntersectedRect.js.map +1 -0
  298. package/lib-amd/pluginUtils/Rect/normalizeRect.d.ts +7 -0
  299. package/lib-amd/pluginUtils/Rect/normalizeRect.js +22 -0
  300. package/lib-amd/pluginUtils/Rect/normalizeRect.js.map +1 -0
  301. package/{lib/autoFormat/ContentModelAutoFormatPlugin.d.ts → lib-mjs/autoFormat/AutoFormatPlugin.d.ts} +53 -53
  302. package/lib-mjs/autoFormat/{ContentModelAutoFormatPlugin.js → AutoFormatPlugin.js} +78 -78
  303. package/lib-mjs/autoFormat/AutoFormatPlugin.js.map +1 -0
  304. package/lib-mjs/autoFormat/keyboardListTrigger.d.ts +5 -5
  305. package/lib-mjs/autoFormat/keyboardListTrigger.js +41 -41
  306. package/lib-mjs/autoFormat/keyboardListTrigger.js.map +1 -1
  307. package/lib-mjs/autoFormat/utils/convertAlphaToDecimals.d.ts +7 -7
  308. package/lib-mjs/autoFormat/utils/convertAlphaToDecimals.js +18 -18
  309. package/lib-mjs/autoFormat/utils/convertAlphaToDecimals.js.map +1 -1
  310. package/lib-mjs/autoFormat/utils/getIndex.d.ts +4 -4
  311. package/lib-mjs/autoFormat/utils/getIndex.js +9 -9
  312. package/lib-mjs/autoFormat/utils/getIndex.js.map +1 -1
  313. package/lib-mjs/autoFormat/utils/getListTypeStyle.d.ts +14 -14
  314. package/lib-mjs/autoFormat/utils/getListTypeStyle.js +83 -75
  315. package/lib-mjs/autoFormat/utils/getListTypeStyle.js.map +1 -1
  316. package/lib-mjs/autoFormat/utils/getNumberingListStyle.d.ts +4 -4
  317. package/lib-mjs/autoFormat/utils/getNumberingListStyle.js +149 -148
  318. package/lib-mjs/autoFormat/utils/getNumberingListStyle.js.map +1 -1
  319. package/{lib/edit/ContentModelEditPlugin.d.ts → lib-mjs/edit/EditPlugin.d.ts} +39 -35
  320. package/lib-mjs/edit/EditPlugin.js +126 -0
  321. package/lib-mjs/edit/EditPlugin.js.map +1 -0
  322. package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.d.ts +5 -5
  323. package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js +18 -18
  324. package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
  325. package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.d.ts +9 -9
  326. package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js +90 -90
  327. package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
  328. package/lib-mjs/edit/deleteSteps/deleteList.d.ts +5 -5
  329. package/lib-mjs/edit/deleteSteps/deleteList.js +19 -19
  330. package/lib-mjs/edit/deleteSteps/deleteList.js.map +1 -1
  331. package/lib-mjs/edit/deleteSteps/deleteWordSelection.d.ts +9 -9
  332. package/lib-mjs/edit/deleteSteps/deleteWordSelection.js +170 -170
  333. package/lib-mjs/edit/deleteSteps/deleteWordSelection.js.map +1 -1
  334. package/lib-mjs/edit/handleKeyboardEventCommon.d.ts +14 -14
  335. package/lib-mjs/edit/handleKeyboardEventCommon.js +48 -48
  336. package/lib-mjs/edit/handleKeyboardEventCommon.js.map +1 -1
  337. package/lib-mjs/edit/inputSteps/handleEnterOnList.d.ts +5 -0
  338. package/lib-mjs/edit/inputSteps/handleEnterOnList.js +64 -0
  339. package/lib-mjs/edit/inputSteps/handleEnterOnList.js.map +1 -0
  340. package/lib-mjs/edit/keyboardDelete.d.ts +9 -8
  341. package/lib-mjs/edit/keyboardDelete.js +67 -70
  342. package/lib-mjs/edit/keyboardDelete.js.map +1 -1
  343. package/lib-mjs/edit/keyboardInput.d.ts +5 -5
  344. package/lib-mjs/edit/keyboardInput.js +54 -46
  345. package/lib-mjs/edit/keyboardInput.js.map +1 -1
  346. package/lib-mjs/edit/keyboardTab.d.ts +5 -0
  347. package/lib-mjs/edit/keyboardTab.js +31 -0
  348. package/lib-mjs/edit/keyboardTab.js.map +1 -0
  349. package/lib-mjs/edit/utils/getLeafSiblingBlock.d.ts +23 -23
  350. package/lib-mjs/edit/utils/getLeafSiblingBlock.js +71 -71
  351. package/lib-mjs/edit/utils/getLeafSiblingBlock.js.map +1 -1
  352. package/lib-mjs/index.d.ts +3 -3
  353. package/lib-mjs/index.js +3 -3
  354. package/lib-mjs/index.js.map +1 -1
  355. package/lib-mjs/paste/Excel/processPastedContentFromExcel.d.ts +12 -12
  356. package/lib-mjs/paste/Excel/processPastedContentFromExcel.js +77 -77
  357. package/lib-mjs/paste/Excel/processPastedContentFromExcel.js.map +1 -1
  358. package/lib-mjs/paste/{ContentModelPastePlugin.d.ts → PastePlugin.d.ts} +43 -43
  359. package/lib-mjs/paste/{ContentModelPastePlugin.js → PastePlugin.js} +128 -128
  360. package/lib-mjs/paste/PastePlugin.js.map +1 -0
  361. package/lib-mjs/paste/PowerPoint/processPastedContentFromPowerPoint.d.ts +7 -7
  362. package/lib-mjs/paste/PowerPoint/processPastedContentFromPowerPoint.js +15 -15
  363. package/lib-mjs/paste/PowerPoint/processPastedContentFromPowerPoint.js.map +1 -1
  364. package/lib-mjs/paste/WacComponents/constants.d.ts +48 -48
  365. package/lib-mjs/paste/WacComponents/constants.js +59 -59
  366. package/lib-mjs/paste/WacComponents/constants.js.map +1 -1
  367. package/lib-mjs/paste/WacComponents/processPastedContentWacComponents.d.ts +9 -9
  368. package/lib-mjs/paste/WacComponents/processPastedContentWacComponents.js +184 -184
  369. package/lib-mjs/paste/WacComponents/processPastedContentWacComponents.js.map +1 -1
  370. package/lib-mjs/paste/WordDesktop/WordMetadata.d.ts +9 -9
  371. package/lib-mjs/paste/WordDesktop/WordMetadata.js +1 -1
  372. package/lib-mjs/paste/WordDesktop/WordMetadata.js.map +1 -1
  373. package/lib-mjs/paste/WordDesktop/getStyleMetadata.d.ts +23 -23
  374. package/lib-mjs/paste/WordDesktop/getStyleMetadata.js +75 -75
  375. package/lib-mjs/paste/WordDesktop/getStyleMetadata.js.map +1 -1
  376. package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.d.ts +7 -7
  377. package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js +54 -54
  378. package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
  379. package/lib-mjs/paste/WordDesktop/processWordComments.d.ts +7 -7
  380. package/lib-mjs/paste/WordDesktop/processWordComments.js +17 -17
  381. package/lib-mjs/paste/WordDesktop/processWordComments.js.map +1 -1
  382. package/lib-mjs/paste/WordDesktop/processWordLists.d.ts +11 -11
  383. package/lib-mjs/paste/WordDesktop/processWordLists.js +175 -175
  384. package/lib-mjs/paste/WordDesktop/processWordLists.js.map +1 -1
  385. package/lib-mjs/paste/WordDesktop/removeNegativeTextIndentParser.d.ts +5 -5
  386. package/lib-mjs/paste/WordDesktop/removeNegativeTextIndentParser.js +9 -9
  387. package/lib-mjs/paste/WordDesktop/removeNegativeTextIndentParser.js.map +1 -1
  388. package/lib-mjs/paste/pasteSourceValidations/constants.d.ts +17 -17
  389. package/lib-mjs/paste/pasteSourceValidations/constants.js +17 -17
  390. package/lib-mjs/paste/pasteSourceValidations/constants.js.map +1 -1
  391. package/lib-mjs/paste/pasteSourceValidations/documentContainWacElements.d.ts +8 -8
  392. package/lib-mjs/paste/pasteSourceValidations/documentContainWacElements.js +11 -11
  393. package/lib-mjs/paste/pasteSourceValidations/documentContainWacElements.js.map +1 -1
  394. package/lib-mjs/paste/pasteSourceValidations/getPasteSource.d.ts +27 -27
  395. package/lib-mjs/paste/pasteSourceValidations/getPasteSource.js +39 -39
  396. package/lib-mjs/paste/pasteSourceValidations/getPasteSource.js.map +1 -1
  397. package/lib-mjs/paste/pasteSourceValidations/isExcelDesktopDocument.d.ts +8 -8
  398. package/lib-mjs/paste/pasteSourceValidations/isExcelDesktopDocument.js +13 -13
  399. package/lib-mjs/paste/pasteSourceValidations/isExcelDesktopDocument.js.map +1 -1
  400. package/lib-mjs/paste/pasteSourceValidations/isExcelOnlineDocument.d.ts +8 -8
  401. package/lib-mjs/paste/pasteSourceValidations/isExcelOnlineDocument.js +15 -15
  402. package/lib-mjs/paste/pasteSourceValidations/isExcelOnlineDocument.js.map +1 -1
  403. package/lib-mjs/paste/pasteSourceValidations/isGoogleSheetDocument.d.ts +8 -8
  404. package/lib-mjs/paste/pasteSourceValidations/isGoogleSheetDocument.js +11 -11
  405. package/lib-mjs/paste/pasteSourceValidations/isGoogleSheetDocument.js.map +1 -1
  406. package/lib-mjs/paste/pasteSourceValidations/isPowerPointDesktopDocument.d.ts +8 -8
  407. package/lib-mjs/paste/pasteSourceValidations/isPowerPointDesktopDocument.js +11 -11
  408. package/lib-mjs/paste/pasteSourceValidations/isPowerPointDesktopDocument.js.map +1 -1
  409. package/lib-mjs/paste/pasteSourceValidations/isWordDesktopDocument.d.ts +8 -8
  410. package/lib-mjs/paste/pasteSourceValidations/isWordDesktopDocument.js +15 -15
  411. package/lib-mjs/paste/pasteSourceValidations/isWordDesktopDocument.js.map +1 -1
  412. package/lib-mjs/paste/pasteSourceValidations/shouldConvertToSingleImage.d.ts +9 -9
  413. package/lib-mjs/paste/pasteSourceValidations/shouldConvertToSingleImage.js +14 -14
  414. package/lib-mjs/paste/pasteSourceValidations/shouldConvertToSingleImage.js.map +1 -1
  415. package/lib-mjs/paste/utils/addParser.d.ts +5 -5
  416. package/lib-mjs/paste/utils/addParser.js +13 -13
  417. package/lib-mjs/paste/utils/addParser.js.map +1 -1
  418. package/lib-mjs/paste/utils/deprecatedColorParser.d.ts +5 -5
  419. package/lib-mjs/paste/utils/deprecatedColorParser.js +15 -15
  420. package/lib-mjs/paste/utils/deprecatedColorParser.js.map +1 -1
  421. package/lib-mjs/paste/utils/getStyles.d.ts +6 -6
  422. package/lib-mjs/paste/utils/getStyles.js +18 -18
  423. package/lib-mjs/paste/utils/getStyles.js.map +1 -1
  424. package/lib-mjs/paste/utils/linkParser.d.ts +5 -5
  425. package/lib-mjs/paste/utils/linkParser.js +23 -23
  426. package/lib-mjs/paste/utils/linkParser.js.map +1 -1
  427. package/lib-mjs/paste/utils/setProcessor.d.ts +5 -5
  428. package/lib-mjs/paste/utils/setProcessor.js +9 -9
  429. package/lib-mjs/paste/utils/setProcessor.js.map +1 -1
  430. package/lib-mjs/pluginUtils/CreateElement/CreateElementData.d.ts +35 -0
  431. package/lib-mjs/pluginUtils/CreateElement/CreateElementData.js +2 -0
  432. package/lib-mjs/pluginUtils/CreateElement/CreateElementData.js.map +1 -0
  433. package/lib-mjs/pluginUtils/CreateElement/createElement.d.ts +9 -0
  434. package/lib-mjs/pluginUtils/CreateElement/createElement.js +48 -0
  435. package/lib-mjs/pluginUtils/CreateElement/createElement.js.map +1 -0
  436. package/lib-mjs/pluginUtils/Disposable.d.ts +10 -0
  437. package/lib-mjs/pluginUtils/Disposable.js +2 -0
  438. package/lib-mjs/pluginUtils/Disposable.js.map +1 -0
  439. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHandler.d.ts +45 -0
  440. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHandler.js +2 -0
  441. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHandler.js.map +1 -0
  442. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHelper.d.ts +39 -0
  443. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHelper.js +118 -0
  444. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHelper.js.map +1 -0
  445. package/lib-mjs/pluginUtils/Rect/getIntersectedRect.d.ts +27 -0
  446. package/lib-mjs/pluginUtils/Rect/getIntersectedRect.js +42 -0
  447. package/lib-mjs/pluginUtils/Rect/getIntersectedRect.js.map +1 -0
  448. package/lib-mjs/pluginUtils/Rect/normalizeRect.d.ts +7 -0
  449. package/lib-mjs/pluginUtils/Rect/normalizeRect.js +17 -0
  450. package/lib-mjs/pluginUtils/Rect/normalizeRect.js.map +1 -0
  451. package/package.json +5 -5
  452. package/lib/autoFormat/ContentModelAutoFormatPlugin.js.map +0 -1
  453. package/lib/edit/ContentModelEditPlugin.js +0 -74
  454. package/lib/edit/ContentModelEditPlugin.js.map +0 -1
  455. package/lib/paste/ContentModelPastePlugin.js.map +0 -1
  456. package/lib-amd/autoFormat/ContentModelAutoFormatPlugin.js.map +0 -1
  457. package/lib-amd/edit/ContentModelEditPlugin.js +0 -74
  458. package/lib-amd/edit/ContentModelEditPlugin.js.map +0 -1
  459. package/lib-amd/paste/ContentModelPastePlugin.js.map +0 -1
  460. package/lib-mjs/autoFormat/ContentModelAutoFormatPlugin.js.map +0 -1
  461. package/lib-mjs/edit/ContentModelEditPlugin.js +0 -71
  462. package/lib-mjs/edit/ContentModelEditPlugin.js.map +0 -1
  463. 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 ContentModelBeforePasteEvent
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":"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","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>;