@demos-europe/demosplan-ui 0.4.12 → 0.4.13

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 (265) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/CHANGELOG.md +10 -0
  3. package/babel.config.js +9 -9
  4. package/dist/demosplan-ui.umd.js +1 -1
  5. package/eslint.config.js +104 -0
  6. package/jest/shallowMountWithGlobalMocks.js +8 -6
  7. package/jest.config.js +4 -4
  8. package/package.json +12 -5
  9. package/scripts/buildTokens.js +1 -1
  10. package/scripts/utils/transformTokens.js +2 -2
  11. package/src/components/DpAccordion/DpAccordion.vue +4 -4
  12. package/src/components/DpAnonymizeText/DpAnonymizeText.vue +4 -4
  13. package/src/components/DpBulkEditHeader/DpBulkEditHeader.stories.tsx +1 -1
  14. package/src/components/DpButton/DpButton.vue +51 -43
  15. package/src/components/DpButtonIcon/DpButtonIcon.vue +5 -5
  16. package/src/components/DpButtonRow/DpButtonRow.vue +5 -5
  17. package/src/components/DpCheckbox/DpCheckbox.vue +2 -2
  18. package/src/components/DpCheckboxGroup/DpCheckboxGroup.vue +4 -4
  19. package/src/components/DpColumnSelector/DpColumnSelector.vue +1 -1
  20. package/src/components/DpContextualHelp/DpContextualHelp.vue +4 -4
  21. package/src/components/DpDataTable/DpDataTable.vue +53 -49
  22. package/src/components/DpDataTable/DpResizableColumn.vue +1 -1
  23. package/src/components/DpDataTable/DpTableHeader.vue +6 -4
  24. package/src/components/DpDataTable/DpTableRow.vue +1 -1
  25. package/src/components/DpDataTableExtended/DpDataTableExtended.vue +8 -8
  26. package/src/components/DpDataTableExtended/DpSelectPageItemCount.vue +2 -2
  27. package/src/components/DpDatetimePicker/DpDatetimePicker.vue +6 -6
  28. package/src/components/DpDetails/DpDetails.vue +1 -1
  29. package/src/components/DpDraggable/DpDraggable.vue +10 -12
  30. package/src/components/DpEditor/DpEditor.vue +45 -45
  31. package/src/components/DpEditor/DpResizableImage.vue +6 -6
  32. package/src/components/DpEditor/DpUploadModal.vue +11 -12
  33. package/src/components/DpEditor/MentionList.vue +5 -3
  34. package/src/components/DpEditor/libs/editorObscure.js +2 -2
  35. package/src/components/DpFlyout/DpFlyout.vue +5 -5
  36. package/src/components/DpIcon/util/iconConfig.ts +28 -28
  37. package/src/components/DpInlineNotification/DpInlineNotification.vue +2 -2
  38. package/src/components/DpLabel/DpLabel.vue +5 -3
  39. package/src/components/DpModal/DpModal.vue +5 -5
  40. package/src/components/DpMultiselect/DpMultiselect.vue +23 -25
  41. package/src/components/DpMultistepNav/DpMultistepNav.vue +2 -2
  42. package/src/components/DpPager/DpPager.vue +12 -12
  43. package/src/components/DpResettableInput/DpResettableInput.vue +3 -3
  44. package/src/components/DpSearchField/DpSearchField.vue +7 -2
  45. package/src/components/DpSelect/DpSelect.vue +3 -3
  46. package/src/components/DpSkeletonBox/DpSkeletonBox.vue +1 -1
  47. package/src/components/DpSlidebar/DpSlidebar.vue +2 -2
  48. package/src/components/DpSplitButton/DpSplitButton.vue +2 -2
  49. package/src/components/DpStickyElement/DpStickyElement.vue +1 -1
  50. package/src/components/DpTabs/DpTabs.vue +1 -1
  51. package/src/components/DpTextArea/DpTextArea.vue +4 -4
  52. package/src/components/DpTimePicker/DpTimePicker.vue +14 -14
  53. package/src/components/DpToggle/DpToggle.vue +1 -1
  54. package/src/components/DpTooltip/DpTooltip.vue +4 -2
  55. package/src/components/DpTooltip/utils/tooltip.js +4 -4
  56. package/src/components/DpTooltipIcon/DpTooltipIcon.vue +2 -2
  57. package/src/components/DpTransitionExpand/DpTransitionExpand.vue +1 -1
  58. package/src/components/DpTreeList/DpTreeList.vue +4 -4
  59. package/src/components/DpTreeList/DpTreeListCheckbox.vue +1 -1
  60. package/src/components/DpTreeList/DpTreeListNode.vue +12 -12
  61. package/src/components/DpUploadFiles/DpUpload.vue +2 -2
  62. package/src/components/DpUploadFiles/DpUploadFiles.vue +10 -10
  63. package/src/components/DpUploadFiles/DpUploadedFile.vue +6 -6
  64. package/src/components/DpUploadFiles/DpUploadedFileList.vue +4 -4
  65. package/src/components/DpVideoPlayer/DpVideoPlayer.vue +7 -7
  66. package/src/directives/CleanHtml/CleanHtml.js +1 -1
  67. package/src/directives/Tooltip/Tooltip.js +1 -1
  68. package/src/lib/ActionMenu.js +48 -48
  69. package/src/lib/DpApi.js +2 -2
  70. package/src/lib/FileInfo.js +15 -15
  71. package/src/lib/validation/utils/assignHandlerForTrigger.js +8 -8
  72. package/src/lib/validation/utils/assignHandlersForInputs.js +51 -51
  73. package/src/lib/validation/utils/assignObserver.js +29 -29
  74. package/src/lib/validation/utils/helpers.js +4 -4
  75. package/src/lib/validation/utils/validateForm.js +15 -15
  76. package/src/lib/validation/utils/validateInputField.js +11 -11
  77. package/src/utils/index.js +2 -2
  78. package/tokens/dist/js/boxShadow.js +1 -1
  79. package/tokens/dist/js/breakpoints.js +1 -1
  80. package/tokens/dist/js/color.brand.js +1 -1
  81. package/tokens/dist/js/color.data.js +1 -1
  82. package/tokens/dist/js/color.palette.js +1 -1
  83. package/tokens/dist/js/color.ui.js +1 -1
  84. package/tokens/dist/js/fontSize.js +1 -1
  85. package/tokens/dist/js/rounded.js +1 -1
  86. package/tokens/dist/js/space.js +1 -1
  87. package/tokens/dist/js/zIndex.js +1 -1
  88. package/tokens/dist/scss/_boxShadow.scss +1 -1
  89. package/tokens/dist/scss/_breakpoints.scss +1 -1
  90. package/tokens/dist/scss/_color.brand.scss +1 -1
  91. package/tokens/dist/scss/_color.data.scss +1 -1
  92. package/tokens/dist/scss/_color.palette.scss +1 -1
  93. package/tokens/dist/scss/_color.ui.scss +1 -1
  94. package/tokens/dist/scss/_fontSize.scss +1 -1
  95. package/tokens/dist/scss/_rounded.scss +1 -1
  96. package/tokens/dist/scss/_space.scss +1 -1
  97. package/tokens/dist/scss/_zIndex.scss +1 -1
  98. package/types/icons.ts +26 -26
  99. package/coverage/clover.xml +0 -6
  100. package/coverage/coverage-final.json +0 -1
  101. package/coverage/lcov-report/base.css +0 -224
  102. package/coverage/lcov-report/block-navigation.js +0 -87
  103. package/coverage/lcov-report/components/DpContextualHelp/DpContextualHelp.vue.html +0 -271
  104. package/coverage/lcov-report/components/DpContextualHelp/index.html +0 -116
  105. package/coverage/lcov-report/components/DpDataTableExtended/DataTableSearch.js.html +0 -190
  106. package/coverage/lcov-report/components/DpDataTableExtended/index.html +0 -116
  107. package/coverage/lcov-report/components/DpEditor/libs/handleWordPaste.js.html +0 -1138
  108. package/coverage/lcov-report/components/DpEditor/libs/index.html +0 -116
  109. package/coverage/lcov-report/components/DpIcon/DpIcon.vue.html +0 -256
  110. package/coverage/lcov-report/components/DpIcon/index.html +0 -131
  111. package/coverage/lcov-report/components/DpIcon/index.ts.html +0 -91
  112. package/coverage/lcov-report/components/DpIcon/util/iconVariables.js.html +0 -682
  113. package/coverage/lcov-report/components/DpIcon/util/index.html +0 -116
  114. package/coverage/lcov-report/components/DpTooltip/utils/index.html +0 -116
  115. package/coverage/lcov-report/components/DpTooltip/utils/tooltip.js.html +0 -490
  116. package/coverage/lcov-report/components/shared/index.html +0 -116
  117. package/coverage/lcov-report/components/shared/translations.js.html +0 -490
  118. package/coverage/lcov-report/directives/CleanHtml/CleanHtml.js.html +0 -265
  119. package/coverage/lcov-report/directives/CleanHtml/index.html +0 -116
  120. package/coverage/lcov-report/directives/Tooltip/Tooltip.js.html +0 -349
  121. package/coverage/lcov-report/directives/Tooltip/index.html +0 -116
  122. package/coverage/lcov-report/directives/index.html +0 -116
  123. package/coverage/lcov-report/directives/index.js.html +0 -109
  124. package/coverage/lcov-report/favicon.png +0 -0
  125. package/coverage/lcov-report/index.html +0 -101
  126. package/coverage/lcov-report/jest/index.html +0 -116
  127. package/coverage/lcov-report/jest/shallowMountWithGlobalMocks.js.html +0 -208
  128. package/coverage/lcov-report/prettify.css +0 -1
  129. package/coverage/lcov-report/prettify.js +0 -2
  130. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  131. package/coverage/lcov-report/sorter.js +0 -196
  132. package/coverage/lcov-report/src/components/DpCheckbox/DpCheckbox.vue.html +0 -424
  133. package/coverage/lcov-report/src/components/DpCheckbox/index.html +0 -116
  134. package/coverage/lcov-report/src/components/DpContextualHelp/DpContextualHelp.vue.html +0 -361
  135. package/coverage/lcov-report/src/components/DpContextualHelp/index.html +0 -131
  136. package/coverage/lcov-report/src/components/DpContextualHelp/index.ts.html +0 -91
  137. package/coverage/lcov-report/src/components/DpDataTableExtended/DataTableSearch.js.html +0 -190
  138. package/coverage/lcov-report/src/components/DpDataTableExtended/index.html +0 -116
  139. package/coverage/lcov-report/src/components/DpDraggable/DpDraggable.vue.html +0 -499
  140. package/coverage/lcov-report/src/components/DpDraggable/index.html +0 -131
  141. package/coverage/lcov-report/src/components/DpDraggable/index.ts.html +0 -91
  142. package/coverage/lcov-report/src/components/DpEditor/libs/handleWordPaste.js.html +0 -1153
  143. package/coverage/lcov-report/src/components/DpEditor/libs/index.html +0 -116
  144. package/coverage/lcov-report/src/components/DpIcon/DpIcon.vue.html +0 -256
  145. package/coverage/lcov-report/src/components/DpIcon/index.html +0 -131
  146. package/coverage/lcov-report/src/components/DpIcon/index.ts.html +0 -91
  147. package/coverage/lcov-report/src/components/DpIcon/util/iconVariables.js.html +0 -706
  148. package/coverage/lcov-report/src/components/DpIcon/util/index.html +0 -116
  149. package/coverage/lcov-report/src/components/DpInput/DpInput.vue.html +0 -937
  150. package/coverage/lcov-report/src/components/DpInput/index.html +0 -131
  151. package/coverage/lcov-report/src/components/DpInput/index.ts.html +0 -91
  152. package/coverage/lcov-report/src/components/DpLabel/DpLabel.vue.html +0 -409
  153. package/coverage/lcov-report/src/components/DpLabel/index.html +0 -131
  154. package/coverage/lcov-report/src/components/DpLabel/index.ts.html +0 -91
  155. package/coverage/lcov-report/src/components/DpModal/DpModal.vue.html +0 -739
  156. package/coverage/lcov-report/src/components/DpModal/index.html +0 -131
  157. package/coverage/lcov-report/src/components/DpModal/index.ts.html +0 -91
  158. package/coverage/lcov-report/src/components/DpNotification/DpNotification.vue.html +0 -343
  159. package/coverage/lcov-report/src/components/DpNotification/index.html +0 -131
  160. package/coverage/lcov-report/src/components/DpNotification/index.ts.html +0 -91
  161. package/coverage/lcov-report/src/components/DpObscure/DpObscure.vue.html +0 -148
  162. package/coverage/lcov-report/src/components/DpObscure/index.html +0 -131
  163. package/coverage/lcov-report/src/components/DpObscure/index.ts.html +0 -91
  164. package/coverage/lcov-report/src/components/DpSelect/DpSelect.vue.html +0 -559
  165. package/coverage/lcov-report/src/components/DpSelect/index.html +0 -131
  166. package/coverage/lcov-report/src/components/DpSelect/index.ts.html +0 -91
  167. package/coverage/lcov-report/src/components/DpTooltip/utils/index.html +0 -116
  168. package/coverage/lcov-report/src/components/DpTooltip/utils/tooltip.js.html +0 -490
  169. package/coverage/lcov-report/src/components/DpTreeList/DpTreeList.vue.html +0 -1099
  170. package/coverage/lcov-report/src/components/DpTreeList/DpTreeListCheckbox.vue.html +0 -301
  171. package/coverage/lcov-report/src/components/DpTreeList/DpTreeListNode.vue.html +0 -1144
  172. package/coverage/lcov-report/src/components/DpTreeList/DpTreeListToggle.vue.html +0 -382
  173. package/coverage/lcov-report/src/components/DpTreeList/index.html +0 -161
  174. package/coverage/lcov-report/src/components/DpTreeList/utils/constants.js.html +0 -100
  175. package/coverage/lcov-report/src/components/DpTreeList/utils/index.html +0 -116
  176. package/coverage/lcov-report/src/components/DpUploadFiles/DpUpload.vue.html +0 -979
  177. package/coverage/lcov-report/src/components/DpUploadFiles/DpUploadFiles.vue.html +0 -970
  178. package/coverage/lcov-report/src/components/DpUploadFiles/DpUploadedFile.vue.html +0 -340
  179. package/coverage/lcov-report/src/components/DpUploadFiles/DpUploadedFileList.vue.html +0 -202
  180. package/coverage/lcov-report/src/components/DpUploadFiles/index.html +0 -176
  181. package/coverage/lcov-report/src/components/DpUploadFiles/index.ts.html +0 -91
  182. package/coverage/lcov-report/src/components/DpUploadFiles/utils/UppyTranslations.js.html +0 -151
  183. package/coverage/lcov-report/src/components/DpUploadFiles/utils/index.html +0 -116
  184. package/coverage/lcov-report/src/components/shared/index.html +0 -116
  185. package/coverage/lcov-report/src/components/shared/translations.js.html +0 -508
  186. package/coverage/lcov-report/src/directives/CleanHtml/CleanHtml.js.html +0 -265
  187. package/coverage/lcov-report/src/directives/CleanHtml/index.html +0 -116
  188. package/coverage/lcov-report/src/directives/Tooltip/Tooltip.js.html +0 -349
  189. package/coverage/lcov-report/src/directives/Tooltip/index.html +0 -116
  190. package/coverage/lcov-report/src/directives/index.html +0 -116
  191. package/coverage/lcov-report/src/directives/index.js.html +0 -109
  192. package/coverage/lcov-report/src/lib/ActionMenu.js.html +0 -610
  193. package/coverage/lcov-report/src/lib/Detabinator.js.html +0 -304
  194. package/coverage/lcov-report/src/lib/DpApi.js.html +0 -748
  195. package/coverage/lcov-report/src/lib/DpConfirm.js.html +0 -118
  196. package/coverage/lcov-report/src/lib/DpGetCssVariable.js.html +0 -103
  197. package/coverage/lcov-report/src/lib/FileInfo.js.html +0 -574
  198. package/coverage/lcov-report/src/lib/HighlightHashLink.js.html +0 -160
  199. package/coverage/lcov-report/src/lib/MatchMedia.js.html +0 -220
  200. package/coverage/lcov-report/src/lib/SideNav.js.html +0 -712
  201. package/coverage/lcov-report/src/lib/Sticky.js.html +0 -223
  202. package/coverage/lcov-report/src/lib/TableWrapper.js.html +0 -214
  203. package/coverage/lcov-report/src/lib/index.html +0 -281
  204. package/coverage/lcov-report/src/lib/index.js.html +0 -190
  205. package/coverage/lcov-report/src/lib/validation/utils/assignHandlersForInputs.js.html +0 -400
  206. package/coverage/lcov-report/src/lib/validation/utils/helpers.js.html +0 -523
  207. package/coverage/lcov-report/src/lib/validation/utils/index.html +0 -236
  208. package/coverage/lcov-report/src/lib/validation/utils/validateDatepicker.js.html +0 -160
  209. package/coverage/lcov-report/src/lib/validation/utils/validateEmail.js.html +0 -136
  210. package/coverage/lcov-report/src/lib/validation/utils/validateFieldset.js.html +0 -163
  211. package/coverage/lcov-report/src/lib/validation/utils/validateForm.js.html +0 -205
  212. package/coverage/lcov-report/src/lib/validation/utils/validateInputField.js.html +0 -403
  213. package/coverage/lcov-report/src/lib/validation/utils/validateMultiselect.js.html +0 -121
  214. package/coverage/lcov-report/src/lib/validation/utils/validateTiptap.js.html +0 -160
  215. package/coverage/lcov-report/src/mixins/dpSelectAllMixin.js.html +0 -232
  216. package/coverage/lcov-report/src/mixins/dpValidateMixin.js.html +0 -460
  217. package/coverage/lcov-report/src/mixins/index.html +0 -176
  218. package/coverage/lcov-report/src/mixins/index.js.html +0 -124
  219. package/coverage/lcov-report/src/mixins/prefixClassMixin/index.html +0 -116
  220. package/coverage/lcov-report/src/mixins/prefixClassMixin/prefixClassMixin.js.html +0 -121
  221. package/coverage/lcov-report/src/mixins/sessionStorageMixin.js.html +0 -160
  222. package/coverage/lcov-report/src/mixins/tableSelectAllItems.js.html +0 -427
  223. package/coverage/lcov-report/src/shared/index.html +0 -116
  224. package/coverage/lcov-report/src/shared/index.js.html +0 -103
  225. package/coverage/lcov-report/src/shared/props/index.html +0 -116
  226. package/coverage/lcov-report/src/shared/props/props.js.html +0 -310
  227. package/coverage/lcov-report/src/utils/date.js.html +0 -208
  228. package/coverage/lcov-report/src/utils/debounce.js.html +0 -163
  229. package/coverage/lcov-report/src/utils/deepMerge.js.html +0 -175
  230. package/coverage/lcov-report/src/utils/formatBytes.js.html +0 -133
  231. package/coverage/lcov-report/src/utils/formatString.js.html +0 -109
  232. package/coverage/lcov-report/src/utils/fullscreen.js.html +0 -253
  233. package/coverage/lcov-report/src/utils/getAnimationEventName.js.html +0 -157
  234. package/coverage/lcov-report/src/utils/getScrollTop.js.html +0 -109
  235. package/coverage/lcov-report/src/utils/hasOwnProp.js.html +0 -142
  236. package/coverage/lcov-report/src/utils/hasPermission.js.html +0 -214
  237. package/coverage/lcov-report/src/utils/index.html +0 -341
  238. package/coverage/lcov-report/src/utils/index.js.html +0 -217
  239. package/coverage/lcov-report/src/utils/lengthHint/index.html +0 -116
  240. package/coverage/lcov-report/src/utils/lengthHint/lengthHint.js.html +0 -268
  241. package/coverage/lcov-report/src/utils/prefixClass.js.html +0 -199
  242. package/coverage/lcov-report/src/utils/resistFingerprintingDuckTest.js.html +0 -232
  243. package/coverage/lcov-report/src/utils/sortAlphabetically.js.html +0 -193
  244. package/coverage/lcov-report/src/utils/throttle.js.html +0 -145
  245. package/coverage/lcov-report/src/utils/uniqueArrayByObjectKey.js.html +0 -151
  246. package/coverage/lcov-report/utils/date.js.html +0 -208
  247. package/coverage/lcov-report/utils/debounce.js.html +0 -163
  248. package/coverage/lcov-report/utils/deepMerge.js.html +0 -175
  249. package/coverage/lcov-report/utils/formatBytes.js.html +0 -133
  250. package/coverage/lcov-report/utils/fullscreen.js.html +0 -253
  251. package/coverage/lcov-report/utils/getAnimationEventName.js.html +0 -157
  252. package/coverage/lcov-report/utils/getScrollTop.js.html +0 -109
  253. package/coverage/lcov-report/utils/hasOwnProp.js.html +0 -142
  254. package/coverage/lcov-report/utils/hasPermission.js.html +0 -214
  255. package/coverage/lcov-report/utils/index.html +0 -326
  256. package/coverage/lcov-report/utils/index.js.html +0 -211
  257. package/coverage/lcov-report/utils/lengthHint/index.html +0 -116
  258. package/coverage/lcov-report/utils/lengthHint/lengthHint.js.html +0 -268
  259. package/coverage/lcov-report/utils/prefixClass.js.html +0 -199
  260. package/coverage/lcov-report/utils/resistFingerprintingDuckTest.js.html +0 -232
  261. package/coverage/lcov-report/utils/sortAlphabetically.js.html +0 -193
  262. package/coverage/lcov-report/utils/throttle.js.html +0 -145
  263. package/coverage/lcov-report/utils/uniqueArrayByObjectKey.js.html +0 -151
  264. package/coverage/lcov.info +0 -0
  265. package/style/style.css +0 -1002
@@ -1,1138 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for components/DpEditor/libs/handleWordPaste.js</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../../prettify.css" />
9
- <link rel="stylesheet" href="../../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../../index.html">All files</a> / <a href="index.html">components/DpEditor/libs</a> handleWordPaste.js</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">99% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>100/101</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">94.33% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>50/53</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>19/19</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">98.97% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>97/98</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
418
- <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-neutral">&nbsp;</span>
423
- <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-neutral">&nbsp;</span>
427
- <span class="cline-any cline-neutral">&nbsp;</span>
428
- <span class="cline-any cline-neutral">&nbsp;</span>
429
- <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-neutral">&nbsp;</span>
431
- <span class="cline-any cline-neutral">&nbsp;</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-neutral">&nbsp;</span>
435
- <span class="cline-any cline-neutral">&nbsp;</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-yes">3x</span>
439
- <span class="cline-any cline-neutral">&nbsp;</span>
440
- <span class="cline-any cline-neutral">&nbsp;</span>
441
- <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-neutral">&nbsp;</span>
443
- <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-neutral">&nbsp;</span>
445
- <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-neutral">&nbsp;</span>
447
- <span class="cline-any cline-neutral">&nbsp;</span>
448
- <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-yes">3x</span>
450
- <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-neutral">&nbsp;</span>
452
- <span class="cline-any cline-neutral">&nbsp;</span>
453
- <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-neutral">&nbsp;</span>
456
- <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-neutral">&nbsp;</span>
459
- <span class="cline-any cline-neutral">&nbsp;</span>
460
- <span class="cline-any cline-neutral">&nbsp;</span>
461
- <span class="cline-any cline-neutral">&nbsp;</span>
462
- <span class="cline-any cline-neutral">&nbsp;</span>
463
- <span class="cline-any cline-neutral">&nbsp;</span>
464
- <span class="cline-any cline-yes">22x</span>
465
- <span class="cline-any cline-yes">22x</span>
466
- <span class="cline-any cline-yes">22x</span>
467
- <span class="cline-any cline-yes">22x</span>
468
- <span class="cline-any cline-neutral">&nbsp;</span>
469
- <span class="cline-any cline-yes">22x</span>
470
- <span class="cline-any cline-neutral">&nbsp;</span>
471
- <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-neutral">&nbsp;</span>
474
- <span class="cline-any cline-neutral">&nbsp;</span>
475
- <span class="cline-any cline-neutral">&nbsp;</span>
476
- <span class="cline-any cline-neutral">&nbsp;</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-neutral">&nbsp;</span>
480
- <span class="cline-any cline-neutral">&nbsp;</span>
481
- <span class="cline-any cline-neutral">&nbsp;</span>
482
- <span class="cline-any cline-neutral">&nbsp;</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-neutral">&nbsp;</span>
486
- <span class="cline-any cline-yes">18x</span>
487
- <span class="cline-any cline-yes">18x</span>
488
- <span class="cline-any cline-yes">18x</span>
489
- <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-neutral">&nbsp;</span>
491
- <span class="cline-any cline-neutral">&nbsp;</span>
492
- <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-yes">18x</span>
494
- <span class="cline-any cline-yes">18x</span>
495
- <span class="cline-any cline-yes">18x</span>
496
- <span class="cline-any cline-neutral">&nbsp;</span>
497
- <span class="cline-any cline-yes">18x</span>
498
- <span class="cline-any cline-neutral">&nbsp;</span>
499
- <span class="cline-any cline-neutral">&nbsp;</span>
500
- <span class="cline-any cline-neutral">&nbsp;</span>
501
- <span class="cline-any cline-neutral">&nbsp;</span>
502
- <span class="cline-any cline-neutral">&nbsp;</span>
503
- <span class="cline-any cline-neutral">&nbsp;</span>
504
- <span class="cline-any cline-neutral">&nbsp;</span>
505
- <span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-neutral">&nbsp;</span>
507
- <span class="cline-any cline-neutral">&nbsp;</span>
508
- <span class="cline-any cline-neutral">&nbsp;</span>
509
- <span class="cline-any cline-neutral">&nbsp;</span>
510
- <span class="cline-any cline-neutral">&nbsp;</span>
511
- <span class="cline-any cline-neutral">&nbsp;</span>
512
- <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-yes">1x</span>
514
- <span class="cline-any cline-yes">2x</span>
515
- <span class="cline-any cline-yes">2x</span>
516
- <span class="cline-any cline-yes">2x</span>
517
- <span class="cline-any cline-yes">2x</span>
518
- <span class="cline-any cline-neutral">&nbsp;</span>
519
- <span class="cline-any cline-neutral">&nbsp;</span>
520
- <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-neutral">&nbsp;</span>
522
- <span class="cline-any cline-neutral">&nbsp;</span>
523
- <span class="cline-any cline-neutral">&nbsp;</span>
524
- <span class="cline-any cline-yes">2x</span>
525
- <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-neutral">&nbsp;</span>
530
- <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-yes">18x</span>
532
- <span class="cline-any cline-yes">7x</span>
533
- <span class="cline-any cline-yes">7x</span>
534
- <span class="cline-any cline-yes">7x</span>
535
- <span class="cline-any cline-yes">7x</span>
536
- <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-yes">18x</span>
539
- <span class="cline-any cline-yes">3x</span>
540
- <span class="cline-any cline-neutral">&nbsp;</span>
541
- <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-yes">18x</span>
543
- <span class="cline-any cline-yes">18x</span>
544
- <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-yes">2x</span>
548
- <span class="cline-any cline-yes">81x</span>
549
- <span class="cline-any cline-yes">9x</span>
550
- <span class="cline-any cline-yes">6x</span>
551
- <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-yes">15x</span>
554
- <span class="cline-any cline-yes">15x</span>
555
- <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-yes">6x</span>
558
- <span class="cline-any cline-yes">15x</span>
559
- <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-neutral">&nbsp;</span>
562
- <span class="cline-any cline-neutral">&nbsp;</span>
563
- <span class="cline-any cline-neutral">&nbsp;</span>
564
- <span class="cline-any cline-neutral">&nbsp;</span>
565
- <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-neutral">&nbsp;</span>
569
- <span class="cline-any cline-yes">9x</span>
570
- <span class="cline-any cline-neutral">&nbsp;</span>
571
- <span class="cline-any cline-neutral">&nbsp;</span>
572
- <span class="cline-any cline-yes">2x</span>
573
- <span class="cline-any cline-neutral">&nbsp;</span>
574
- <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-neutral">&nbsp;</span>
577
- <span class="cline-any cline-yes">1x</span>
578
- <span class="cline-any cline-neutral">&nbsp;</span>
579
- <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-neutral">&nbsp;</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-neutral">&nbsp;</span>
586
- <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-neutral">&nbsp;</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-neutral">&nbsp;</span>
590
- <span class="cline-any cline-yes">3x</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-yes">3x</span>
593
- <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-yes">3x</span>
597
- <span class="cline-any cline-yes">40x</span>
598
- <span class="cline-any cline-neutral">&nbsp;</span>
599
- <span class="cline-any cline-yes">40x</span>
600
- <span class="cline-any cline-yes">5x</span>
601
- <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-yes">40x</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-yes">40x</span>
607
- <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-yes">3x</span>
613
- <span class="cline-any cline-yes">1x</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-yes">3x</span>
617
- <span class="cline-any cline-neutral">&nbsp;</span>
618
- <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-neutral">&nbsp;</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-neutral">&nbsp;</span>
624
- <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-yes">5x</span>
632
- <span class="cline-any cline-yes">5x</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-yes">5x</span>
635
- <span class="cline-any cline-yes">40x</span>
636
- <span class="cline-any cline-yes">40x</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-yes">40x</span>
639
- <span class="cline-any cline-yes">40x</span>
640
- <span class="cline-any cline-yes">40x</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-yes">40x</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-yes">15x</span>
645
- <span class="cline-any cline-yes">15x</span>
646
- <span class="cline-any cline-neutral">&nbsp;</span>
647
- <span class="cline-any cline-yes">25x</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-yes">40x</span>
651
- <span class="cline-any cline-neutral">&nbsp;</span>
652
- <span class="cline-any cline-yes">8x</span>
653
- <span class="cline-any cline-yes">8x</span>
654
- <span class="cline-any cline-yes">10x</span>
655
- <span class="cline-any cline-yes">10x</span>
656
- <span class="cline-any cline-yes">10x</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-yes">40x</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-yes">5x</span>
662
- <span class="cline-any cline-yes">6x</span>
663
- <span class="cline-any cline-yes">6x</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-yes">5x</span>
669
- <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-yes">5x</span>
671
- <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-neutral">&nbsp;</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-yes">1x</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-neutral">&nbsp;</span>
692
- <span class="cline-any cline-neutral">&nbsp;</span>
693
- <span class="cline-any cline-neutral">&nbsp;</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-yes">18x</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-yes">18x</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-neutral">&nbsp;</span>
709
- <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-neutral">&nbsp;</span>
711
- <span class="cline-any cline-yes">3x</span>
712
- <span class="cline-any cline-yes">3x</span>
713
- <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-yes">3x</span>
715
- <span class="cline-any cline-no">&nbsp;</span>
716
- <span class="cline-any cline-neutral">&nbsp;</span>
717
- <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-yes">3x</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-neutral">&nbsp;</span>
722
- <span class="cline-any cline-yes">3x</span>
723
- <span class="cline-any cline-yes">1x</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-neutral">&nbsp;</span>
726
- <span class="cline-any cline-yes">3x</span>
727
- <span class="cline-any cline-yes">3x</span>
728
- <span class="cline-any cline-neutral">&nbsp;</span>
729
- <span class="cline-any cline-yes">3x</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-neutral">&nbsp;</span>
734
- <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-yes">3x</span>
736
- <span class="cline-any cline-neutral">&nbsp;</span>
737
- <span class="cline-any cline-yes">5x</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-yes">5x</span>
741
- <span class="cline-any cline-yes">3x</span>
742
- <span class="cline-any cline-neutral">&nbsp;</span>
743
- <span class="cline-any cline-yes">2x</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-neutral">&nbsp;</span>
747
- <span class="cline-any cline-yes">5x</span>
748
- <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-neutral">&nbsp;</span>
750
- <span class="cline-any cline-yes">40x</span>
751
- <span class="cline-any cline-yes">22x</span>
752
- <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-yes">18x</span>
754
- <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-neutral">&nbsp;</span>
756
- <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-neutral">&nbsp;</span>
758
- <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-yes">3x</span>
760
- <span class="cline-any cline-neutral">&nbsp;</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-neutral">&nbsp;</span>
763
- <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-neutral">&nbsp;</span>
766
- <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-neutral">&nbsp;</span>
768
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { v4 as uuid } from 'uuid'
769
- &nbsp;
770
- /**
771
- * This parser should manage to detect if an clipbaord content comes from microsoft word (mso) or office365 (o365)
772
- * And them clean and transform the data into something, that tiptap can display nested (un)orderen lists
773
- *
774
- * Because Microsoft is quite special the way they store data in their XML, its likely that this functions
775
- * have to be adjusted to optimize special cases and not tested versions.
776
- *
777
- * The main method "handleWordContent" is designed to increase and in the future may handle images or tables as well
778
- *
779
- */
780
- &nbsp;
781
- /**
782
- * Try to determin if the snippet from the clipboard comes from MS Office
783
- *
784
- * @param snippet{string}
785
- *
786
- * @return {boolean}
787
- */
788
- function checkIfMso (snippet) {
789
- return (/class="?Mso|style="[^"]*\bmso-|style='[^']*\bmso-|w:WordDocument|office:wo/i).test(snippet)
790
- }
791
- &nbsp;
792
- /**
793
- * Try to determine if the snippet from the clipboard comes from Office365.
794
- *
795
- * @param snippet{string}
796
- *
797
- * @return {boolean}
798
- */
799
- function checkIfOffice365 (snippet) {
800
- return (/class="OutlineElement/).test(snippet)
801
- }
802
- &nbsp;
803
- /**
804
- * Transforms a list item from office365 to a readable internal exchange Object
805
- *
806
- * Office365 stores the information for lists on the li items with a bunch of "data" and "data-aria" attributes
807
- * instead of nesting them.
808
- * To make the data handleable, we axtract that infos to a "Plain old Javascript Object"
809
- *
810
- * @param li{Element}
811
- *
812
- * @returns {Object&lt;listId, indent, type, content&gt;}
813
- */
814
- function createItemFrom365List (li) {
815
- const indent = parseInt(li.getAttribute('data-aria-level')) // Current level of indentation
816
- const listId = parseInt(li.getAttribute('data-listid')) // List ID
817
- const type = li.parentElement.nodeName // Can be 'ul' or 'ol'
818
- const content = li.innerHTML.replace(/&amp;nbsp;/gmi, ' ')
819
- &nbsp;
820
- return { listId, indent, type, content }
821
- }
822
- &nbsp;
823
- /**
824
- * Transforms a list item from Mso to a readable and manageable object
825
- *
826
- * Microsoft Office stores all items in a kind of plain structure, List items too.
827
- * The information, if an item is a list item is defined by the class name "[class^=MsoList]".
828
- * Level and List-Id is put in the style attribute.
829
- * To determin if its an ordered list, we have to check the leading listStyleType.
830
- *
831
- * @param li{Element}
832
- *
833
- * @returns {Object&lt;listId, indent, type, content, listStyleType&gt;}
834
- */
835
- function createItemFromMsoList (li) {
836
- // "listInfo" is expected to be something something like "mso-list: l1 level1 lfo1"
837
- const listInfo = li.getAttribute('style').match(/mso-list:([^'|^"|^;]*)/i)[0] // Find ListInfo
838
- const indent = parseInt(listInfo.match(/level\d+/i)[0].slice(5)) // Strip "level" // current level of indentation
839
- const listId = listInfo.match(/lfo\d+/i)[0] || <span class="branch-1 cbranch-no" title="branch not covered" >'' </span>// List ID
840
- /*
841
- * To define if its an OL or UL, we first have to create the whole List.
842
- * Defining the type will be managed in `redefineMsoOrderedLists()` later in the transformation process
843
- */
844
- const type = 'ul'
845
- const listStyleType = li.querySelector('[data-val-supportLists]')?.getAttribute('data-val-supportLists') || <span class="branch-1 cbranch-no" title="branch not covered" >''</span>
846
- const content = li.innerHTML
847
- &nbsp;
848
- return { listId, indent, type, content, listStyleType }
849
- }
850
- &nbsp;
851
- /**
852
- * Because Ms Word doesn't stores the information about the list type in such a way, that we can easily access it,
853
- * we have to handle it manually.
854
- * The approach is to take the structured list and step through each "sublist" (nested list).
855
- * Within each list we compare the "listStyleTypes" of two elements to find out if they have the same style or not.
856
- * If so, the list have to be unordered.
857
- * For lists with just one element an additional check is implemented.
858
- *
859
- * @param listItemObjects
860
- *
861
- * @return {Object&lt;listItemObjects&gt;}
862
- */
863
- function redefineMsoOrderedLists (listItemObjects) {
864
- Object.values(listItemObjects).forEach(list =&gt; {
865
- let sublistId = uuid()
866
- const sublistIdsAtPosition = [sublistId]
867
- const sublistIds = [sublistId]
868
- let pos = 0
869
- &nbsp;
870
- /*
871
- * Group sublists by uuid.
872
- * Due to the nesting, we can't know all siblings by just checking the previous, next items
873
- * To make them groupable, lets add a sublistId to each element.
874
- */
875
- listItemObjects[list[0].listId].forEach((li, i) =&gt; {
876
- /*
877
- * If we "dive" into the next nesting level, we need a new uuid.
878
- * But if we already have been in this level, but in another sublist,
879
- * We have to keep the ID from the previous list.
880
- * Therefore we have to store the IDs in two different ways.
881
- */
882
- if (i &gt; 0 &amp;&amp; list[i - 1].indent &lt; list[i].indent) {
883
- sublistId = uuid()
884
- pos++
885
- sublistIdsAtPosition[pos] = sublistId
886
- sublistIds.push(sublistId)
887
- }
888
- &nbsp;
889
- if (i &gt; 0 &amp;&amp; list[i - 1].indent &gt; list[i].indent) {
890
- pos--
891
- }
892
- &nbsp;
893
- li.sublistId = sublistIdsAtPosition[pos]
894
- li.idx = i
895
- })
896
- &nbsp;
897
- // Check for each sublist (again) if its (un-)ordered
898
- sublistIds.forEach(sublistId =&gt; {
899
- const sublist = list.filter(el =&gt; el.sublistId === sublistId)
900
- if (sublist.length &gt; 1) {
901
- const mappedItems = sublist
902
- .map(el =&gt; {
903
- // We assume, that if two items in one List have the same listStyleType, it is an unordered list
904
- const type = sublist[0].listStyleType === sublist[1].listStyleType ? 'ul' : 'ol'
905
- return { ...el, type: type }
906
- })
907
- &nbsp;
908
- mappedItems.forEach(li =&gt; {
909
- listItemObjects[list[0].listId][li.idx] = li
910
- })
911
- }
912
- &nbsp;
913
- /*
914
- * If we have just one list item we assume that a number or letter indicates an ordred list
915
- * Only if listStyleType is an "o". Than we assume that its more likely that its an
916
- * unordered list, than an ordered one because mso uses the "o" a outlined bullit.
917
- *
918
- * since the default is 'ul', we just have to change it to 'ol' if neccesary
919
- */
920
- if (sublist.length === 1 &amp;&amp;
921
- (/(\d+|\w+)/i).test(sublist[0].listStyleType) &amp;&amp;
922
- sublist[0].listStyleType !== 'o') {
923
- listItemObjects[list[0].listId][sublist[0].idx].type = 'ol'
924
- }
925
- })
926
- })
927
- &nbsp;
928
- return listItemObjects
929
- }
930
- &nbsp;
931
- /**
932
- * Create objects that hold the information about the list items
933
- * to be used for creating a nested list from that data.
934
- *
935
- * @param parsedDom{DOMTokenList}
936
- * @param isMso{Boolean}
937
- *
938
- * @return {Object}
939
- */
940
- function createLists (parsedDom, isMso) {
941
- let listItemObjects = {}
942
- &nbsp;
943
- const listItems = isMso
944
- ? parsedDom.querySelectorAll('[class^=MsoList]')
945
- : parsedDom.querySelectorAll('li')
946
- &nbsp;
947
- listItems.forEach(li =&gt; {
948
- const item = isMso ? createItemFromMsoList(li) : createItemFrom365List(li)
949
- &nbsp;
950
- if (Object.keys(listItemObjects).includes(item.listId.toString()) === false) {
951
- listItemObjects[item.listId] = []
952
- }
953
- &nbsp;
954
- // Set data-attribute as Hook to find it back later on
955
- li.setAttribute('data-list-indicator', item.listId)
956
- &nbsp;
957
- listItemObjects[item.listId].push(item)
958
- })
959
- &nbsp;
960
- /*
961
- * Dirty part to determine if (mso) lists are ordered or not
962
- */
963
- if (isMso) {
964
- listItemObjects = redefineMsoOrderedLists(listItemObjects)
965
- }
966
- &nbsp;
967
- return listItemObjects
968
- }
969
- &nbsp;
970
- /**
971
- * Takes the flat list of list item objects and creates a HTML-String for that list
972
- *
973
- * @param list{Array&lt;Object{indent, type, content, ?listStyleType}&gt;}
974
- *
975
- * @return {string}
976
- */
977
- function buildListAsHtmlString (list) {
978
- /*
979
- * `nesting` holds the type of lists for nested lists
980
- * It starts with the first indentation level and may be filled if there are lists in lists
981
- */
982
- const nesting = [list[0].type]
983
- let htmlList = `&lt;${list[0].type}&gt;`
984
- &nbsp;
985
- for (let i = 0; i &lt; list.length; i++) {
986
- const item = list[i]
987
- htmlList += `&lt;li&gt;${item.content}`
988
- &nbsp;
989
- const hasChildren = i + 1 &lt; list.length &amp;&amp; list[i + 1].indent &gt; item.indent
990
- const isLastChild = i + 1 &lt; list.length &amp;&amp; list[i + 1].indent &lt; item.indent
991
- const isLastElement = i + 1 === list.length
992
- &nbsp;
993
- if (hasChildren) {
994
- // If the next Element is a child-Element the closing Tag follows when closing the Child List
995
- htmlList += `&lt;${list[i + 1].type}&gt;`
996
- nesting.unshift(list[i + 1].type)
997
- } else {
998
- htmlList += '&lt;/li&gt;'
999
- }
1000
- &nbsp;
1001
- if (isLastChild) {
1002
- // Close the List and the Parent, for following elements that are intended above
1003
- let c = 0
1004
- while (list[i + 1].indent + c &lt; item.indent) {
1005
- htmlList += `&lt;/${nesting[0]}&gt;&lt;/li&gt;`
1006
- nesting.shift()
1007
- c++
1008
- }
1009
- }
1010
- if (isLastElement) {
1011
- // Close all open Tags if its the last Element
1012
- for (let h = item.indent; h &gt; 1; h--) {
1013
- htmlList += `&lt;/${nesting[0]}&gt;&lt;/li&gt;`
1014
- nesting.shift()
1015
- }
1016
- }
1017
- }
1018
- &nbsp;
1019
- htmlList += `&lt;/${list[0].type}&gt;`
1020
- &nbsp;
1021
- return htmlList
1022
- }
1023
- &nbsp;
1024
- /**
1025
- * Remove code which would make the DomParser fail
1026
- * and store the "bullet" tht it can be checked later on.
1027
- *
1028
- * @param slice{string}
1029
- *
1030
- * @return {string}
1031
- */
1032
- function prepareDataBeforeParsingMso (slice) {
1033
- return slice
1034
- // Strip line breaks
1035
- .replace(/(&amp;nbsp;|\r|\n)/gmi, ' ')
1036
- // Strip head
1037
- .replace(/&lt;head&gt;(.|\n|\r)*?&lt;\/head&gt;/mi, '')
1038
- // Strip html wrapper and remove conentless and non html like elements "&lt;o:p&gt;"
1039
- .replace(/&lt;(\/)?(html|o:p)[^&gt;]*&gt;/gmi, '')
1040
- /*
1041
- * Remove Microsoft IF comments and replace it with empty spans holding the data, that it can be processed later on
1042
- * to determine if that one listStyleType may be part of an ordered or unordered list.
1043
- */
1044
- .replace(/&lt;!\[if !(.*?)\]&gt;(.*?)&lt;span(.*?)style='mso-list:Ignore'&gt;(.*?)&lt;!\[endif\]&gt;/gmi, (match, p1, p2, p3, p4) =&gt; {
1045
- // Try to remove spacing spans
1046
- const listStyleType = p4
1047
- .replace(/&lt;span[^&gt;]*&gt;/gmi, '')
1048
- .replace(/&lt;\/span&gt;/gmi, '')
1049
- .replace(/(&amp;nbsp;|\s|\\r|\\n|\r|\n)/gmi, '')
1050
- return `&lt;span data-val-${p1}="${listStyleType}" /&gt;`
1051
- })
1052
- }
1053
- &nbsp;
1054
- /**
1055
- * Parses Clippboard content from Word to fix List ordering.
1056
- *
1057
- * @param slice{String}
1058
- *
1059
- * @return {string}
1060
- */
1061
- function handleWordPaste (slice) {
1062
- const isMso = checkIfMso(slice)
1063
- const isOffice365 = checkIfOffice365(slice)
1064
- &nbsp;
1065
- <span class="missing-if-branch" title="if path not taken" >I</span>if ((isMso || isOffice365) === false) {
1066
- <span class="cstat-no" title="statement not covered" > return slice</span>
1067
- }
1068
- &nbsp;
1069
- // Strip meta though its not closed and would break the parser
1070
- slice = slice.replace(/&lt;meta[^&gt;]*&gt;/mi, '')
1071
- &nbsp;
1072
- // If its Mso-Content: Before the parser can be applied, some noise has to be reduced
1073
- if (isMso) {
1074
- slice = prepareDataBeforeParsingMso(slice)
1075
- }
1076
- // For a better handling all the Stuff gets converted to html
1077
- const parser = new DOMParser()
1078
- const parsedDom = parser.parseFromString(slice, 'text/html')
1079
- &nbsp;
1080
- const listItemObjects = createLists(parsedDom, isMso)
1081
- &nbsp;
1082
- /**
1083
- * After collecting the list, we go to each list and add a well formatted list before the found one.
1084
- * Until that we need the old list as dom hook to paste the new one, afterwards it is removed.
1085
- */
1086
- Object.keys(listItemObjects).forEach(listId =&gt; {
1087
- // Get the first Element of current List
1088
- const context = parsedDom.querySelector('[data-list-indicator="' + listId + '"]')
1089
- &nbsp;
1090
- // Instert new List before the original one
1091
- if (context.parentElement.nodeName.toLowerCase() === 'ul' || context.parentElement.nodeName.toLowerCase() === 'ol') {
1092
- context.parentElement.before(buildListAsHtmlString(listItemObjects[listId]))
1093
- } else {
1094
- context.before(buildListAsHtmlString(listItemObjects[listId]))
1095
- }
1096
- &nbsp;
1097
- // Remove old Elements
1098
- parsedDom
1099
- .querySelectorAll('[data-list-indicator="' + listId + '"]')
1100
- .forEach(el =&gt; {
1101
- if (el.parentElement.nodeName.toLowerCase() === 'ul' || el.parentElement.nodeName.toLowerCase() === 'ol') {
1102
- el.parentElement.remove()
1103
- } else {
1104
- el.remove()
1105
- }
1106
- })
1107
- })
1108
- &nbsp;
1109
- // Clear List item collection for the next run.
1110
- return parsedDom.documentElement.outerHTML
1111
- .replace(/&amp;gt;/gmi, '&gt;')
1112
- .replace(/&amp;lt;/gmi, '&lt;')
1113
- // Remove empty list wrapper
1114
- .replace(/&lt;div[^&gt;]*?class="ListContainerWrapper[^&gt;]*?&gt;&lt;ul[^&gt;]*?&gt;&lt;\/ul&gt;&lt;\/div&gt;/gm, '')
1115
- .replace(/&lt;ul[^&gt;]*?&gt;&lt;\/ul&gt;/gm, '')
1116
- }
1117
- &nbsp;
1118
- export { handleWordPaste }
1119
- &nbsp;</pre></td></tr></table></pre>
1120
-
1121
- <div class='push'></div><!-- for sticky footer -->
1122
- </div><!-- /wrapper -->
1123
- <div class='footer quiet pad2 space-top1 center small'>
1124
- Code coverage generated by
1125
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1126
- at 2024-12-02T14:15:30.967Z
1127
- </div>
1128
- <script src="../../../prettify.js"></script>
1129
- <script>
1130
- window.onload = function () {
1131
- prettyPrint();
1132
- };
1133
- </script>
1134
- <script src="../../../sorter.js"></script>
1135
- <script src="../../../block-navigation.js"></script>
1136
- </body>
1137
- </html>
1138
-