@modusoperandi/licit 0.1.9 → 0.1.10

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 (698) hide show
  1. package/.babelrc +54 -54
  2. package/.dockerignore +4 -4
  3. package/.eslintignore +3 -3
  4. package/.eslintrc.js +80 -80
  5. package/.flowconfig +37 -37
  6. package/.github/workflows/build.yml +35 -35
  7. package/.github/workflows/lint.yml +30 -30
  8. package/.prettierignore +5 -5
  9. package/.prettierrc +4 -4
  10. package/.stylelintignore +1 -1
  11. package/.stylelintrc.json +13 -13
  12. package/.travis.yml +18 -18
  13. package/CODEOWNERS +40 -40
  14. package/LICENSE +22 -22
  15. package/README.md +286 -286
  16. package/build_collab_server.py +7 -7
  17. package/build_customstyle_server.py +7 -7
  18. package/build_image_server.py +7 -7
  19. package/dist/BlockquoteInsertNewLineCommand.js.flow +55 -55
  20. package/dist/BlockquoteNodeSpec.js +2 -2
  21. package/dist/BlockquoteNodeSpec.js.flow +30 -30
  22. package/dist/BlockquoteToggleCommand.js.flow +34 -34
  23. package/dist/BookmarkNodeSpec.js.flow +39 -39
  24. package/dist/BulletListNodeSpec.js.flow +61 -61
  25. package/dist/CZIProseMirror.js +4 -4
  26. package/dist/CZIProseMirror.js.flow +90 -90
  27. package/dist/CodeBlockCommand.js.flow +43 -43
  28. package/dist/CodeBlockNodeSpec.js.flow +24 -24
  29. package/dist/CodeMarkSpec.js.flow +14 -14
  30. package/dist/ContentPlaceholderPlugin.js.flow +187 -187
  31. package/dist/CursorPlaceholderPlugin.js +2 -2
  32. package/dist/CursorPlaceholderPlugin.js.flow +115 -115
  33. package/dist/DocLayoutCommand.js.flow +94 -94
  34. package/dist/DocNodeSpec.js +1 -1
  35. package/dist/DocNodeSpec.js.flow +64 -64
  36. package/dist/EMMarkSpec.js.flow +14 -14
  37. package/dist/EditorCommands.js +1 -1
  38. package/dist/EditorCommands.js.flow +128 -128
  39. package/dist/EditorKeyMap.js +3 -3
  40. package/dist/EditorKeyMap.js.flow +187 -187
  41. package/dist/EditorMarks.js.flow +71 -71
  42. package/dist/EditorNodes.js.flow +60 -60
  43. package/dist/EditorPageLayoutPlugin.js.flow +67 -67
  44. package/dist/EditorPlugins.js.flow +8 -8
  45. package/dist/EditorSchema.js.flow +12 -12
  46. package/dist/EditorState.js.flow +7 -7
  47. package/dist/FontSizeCommand.js.flow +57 -57
  48. package/dist/FontSizeMarkSpec.js.flow +49 -49
  49. package/dist/FontTypeCommand.js.flow +100 -100
  50. package/dist/FontTypeMarkSpec.js +1 -1
  51. package/dist/FontTypeMarkSpec.js.flow +80 -80
  52. package/dist/HTMLMutator.js.flow +59 -59
  53. package/dist/HardBreakNodeSpec.js.flow +15 -15
  54. package/dist/HeadingCommand.js.flow +51 -51
  55. package/dist/HeadingNodeSpec.js +2 -2
  56. package/dist/HeadingNodeSpec.js.flow +54 -54
  57. package/dist/HistoryRedoCommand.js.flow +20 -20
  58. package/dist/HistoryUndoCommand.js.flow +20 -20
  59. package/dist/HorizontalRuleCommand.js.flow +49 -49
  60. package/dist/HorizontalRuleNodeSpec.js.flow +39 -39
  61. package/dist/ImageFromURLCommand.js.flow +14 -14
  62. package/dist/ImageNodeSpec.js.flow +90 -90
  63. package/dist/ImageSourceCommand.js.flow +117 -117
  64. package/dist/ImageUploadCommand.js.flow +36 -36
  65. package/dist/ImageUploadPlaceholderPlugin.js +1 -1
  66. package/dist/ImageUploadPlaceholderPlugin.js.flow +192 -192
  67. package/dist/IndentCommand.js.flow +41 -41
  68. package/dist/LinkMarkSpec.js.flow +32 -32
  69. package/dist/LinkSetURLCommand.js.flow +103 -103
  70. package/dist/LinkTooltipPlugin.js.flow +203 -203
  71. package/dist/ListItemInsertNewLineCommand.js.flow +55 -55
  72. package/dist/ListItemMergeCommand.js.flow +177 -177
  73. package/dist/ListItemNodeSpec.js.flow +51 -51
  74. package/dist/ListSplitCommand.js.flow +32 -32
  75. package/dist/ListToggleCommand.js +1 -1
  76. package/dist/ListToggleCommand.js.flow +77 -77
  77. package/dist/MarkNames.js +1 -1
  78. package/dist/MarkNames.js.flow +18 -18
  79. package/dist/MarkToggleCommand.js.flow +66 -66
  80. package/dist/MarksClearCommand.js.flow +42 -42
  81. package/dist/MathEditCommand.js.flow +110 -110
  82. package/dist/MathNodeSpec.js.flow +46 -46
  83. package/dist/NodeNames.js.flow +23 -23
  84. package/dist/OrderedListNodeSpec.js.flow +132 -132
  85. package/dist/ParagraphNodeSpec.js +2 -1
  86. package/dist/ParagraphNodeSpec.js.flow +160 -160
  87. package/dist/ParagraphSpacingCommand.js +3 -3
  88. package/dist/ParagraphSpacingCommand.js.flow +121 -121
  89. package/dist/PrintCommand.js.flow +31 -31
  90. package/dist/SelectionPlaceholderPlugin.js +2 -2
  91. package/dist/SelectionPlaceholderPlugin.js.flow +131 -131
  92. package/dist/SpacerMarkSpec.js +1 -1
  93. package/dist/SpacerMarkSpec.js.flow +47 -47
  94. package/dist/StrikeMarkSpec.js.flow +21 -21
  95. package/dist/StrongMarkSpec.js.flow +25 -25
  96. package/dist/StyleView.js.flow +19 -19
  97. package/dist/TableBackgroundColorCommand.js.flow +75 -75
  98. package/dist/TableBorderColorCommand.js.flow +75 -75
  99. package/dist/TableCellColorCommand.js.flow +71 -71
  100. package/dist/TableCellMenuPlugin.js.flow +125 -125
  101. package/dist/TableInsertCommand.js.flow +112 -112
  102. package/dist/TableMergeCellsCommand.js.flow +90 -90
  103. package/dist/TableNodesSpecs.js.flow +78 -78
  104. package/dist/TablePlugins.js.flow +14 -14
  105. package/dist/TableResizePlugin.js +2 -2
  106. package/dist/TableResizePlugin.js.flow +631 -631
  107. package/dist/TextAlignCommand.js +3 -3
  108. package/dist/TextAlignCommand.js.flow +122 -122
  109. package/dist/TextColorCommand.js.flow +87 -87
  110. package/dist/TextColorMarkSpec.js.flow +35 -35
  111. package/dist/TextHighlightCommand.js.flow +91 -91
  112. package/dist/TextHighlightMarkSpec.js.flow +38 -38
  113. package/dist/TextInsertTabSpaceCommand.js.flow +83 -83
  114. package/dist/TextLineSpacingCommand.js +3 -3
  115. package/dist/TextLineSpacingCommand.js.flow +157 -157
  116. package/dist/TextNoWrapMarkSpec.js.flow +14 -14
  117. package/dist/TextNodeSpec.js.flow +7 -7
  118. package/dist/TextSelectionMarkSpec.js.flow +24 -24
  119. package/dist/TextSubMarkSpec.js.flow +20 -20
  120. package/dist/TextSuperMarkSpec.js.flow +20 -20
  121. package/dist/TextUnderlineMarkSpec.js.flow +27 -27
  122. package/dist/Types.js +1 -1
  123. package/dist/Types.js.flow +75 -75
  124. package/dist/WebFontLoader.js.flow +22 -22
  125. package/dist/applyMark.js.flow +61 -61
  126. package/dist/blockQuoteInputRule.js.flow +36 -36
  127. package/dist/bom.xml +4936 -3897
  128. package/dist/browser.js.flow +7 -7
  129. package/dist/buildEditorPlugins.js.flow +51 -51
  130. package/dist/buildInputRules.js.flow +81 -81
  131. package/dist/clearMarks.js +1 -1
  132. package/dist/clearMarks.js.flow +128 -128
  133. package/dist/client/CollabConnector.js.flow +71 -71
  134. package/dist/client/EditorConnection.js.flow +307 -307
  135. package/dist/client/Licit.js +36 -36
  136. package/dist/client/Licit.js.flow +578 -576
  137. package/dist/client/Licit.test.js +16 -15
  138. package/dist/client/Licit.test.js.flow +67 -65
  139. package/dist/client/Reporter.js.flow +37 -37
  140. package/dist/client/SimpleConnector.js +1 -1
  141. package/dist/client/SimpleConnector.js.flow +53 -53
  142. package/dist/client/http.js +3 -3
  143. package/dist/client/http.js.flow +66 -66
  144. package/dist/client/licit.css +12 -12
  145. package/dist/client/throttle.js.flow +27 -27
  146. package/dist/compareNumber.js.flow +11 -11
  147. package/dist/consolidateListNodes.js +29 -29
  148. package/dist/consolidateListNodes.js.flow +281 -281
  149. package/dist/convertFromDOMElement.js.flow +36 -36
  150. package/dist/convertFromHTML.js.flow +19 -19
  151. package/dist/convertFromJSON.js.flow +78 -78
  152. package/dist/convertToCSSPTValue.js +1 -1
  153. package/dist/convertToCSSPTValue.js.flow +22 -22
  154. package/dist/convertToJSON.js.flow +7 -7
  155. package/dist/createCommand.js.flow +40 -40
  156. package/dist/createEditorKeyMap.js.flow +94 -94
  157. package/dist/createEmptyEditorState.js +1 -1
  158. package/dist/createEmptyEditorState.js.flow +35 -35
  159. package/dist/createTableResizingPlugin.js.flow +86 -86
  160. package/dist/findActionableCell.js.flow +74 -74
  161. package/dist/findActiveMark.js.flow +32 -32
  162. package/dist/findNodesWithSameMark.js.flow +89 -89
  163. package/dist/hyphenize.js.flow +17 -17
  164. package/dist/index.js +16 -16
  165. package/dist/index.js.flow +10 -10
  166. package/dist/insertTable.js.flow +56 -56
  167. package/dist/isBulletListNode.js.flow +9 -9
  168. package/dist/isEditorStateEmpty.js.flow +32 -32
  169. package/dist/isInsideListItem.js.flow +13 -13
  170. package/dist/isListNode.js.flow +13 -13
  171. package/dist/isNodeSelectionForNodeType.js.flow +15 -15
  172. package/dist/isOrderedListNode.js.flow +9 -9
  173. package/dist/isTableNode.js.flow +15 -15
  174. package/dist/isTextStyleMarkCommandEnabled.js.flow +49 -49
  175. package/dist/joinDown.js.flow +27 -27
  176. package/dist/joinListNode.js.flow +55 -55
  177. package/dist/joinUp.js.flow +39 -39
  178. package/dist/keymaps.js +2 -2
  179. package/dist/keymaps.js.flow +185 -185
  180. package/dist/lookUpElement.js.flow +14 -14
  181. package/dist/nodeAt.js.flow +12 -12
  182. package/dist/noop.js.flow +5 -5
  183. package/dist/normalizeHTML.js.flow +78 -78
  184. package/dist/patchAnchorElements.js.flow +38 -38
  185. package/dist/patchBreakElements.js.flow +22 -22
  186. package/dist/patchElementInlineStyles.js.flow +92 -92
  187. package/dist/patchListElements.js.flow +276 -276
  188. package/dist/patchMathElements.js.flow +60 -60
  189. package/dist/patchParagraphElements.js.flow +20 -20
  190. package/dist/patchStyleElements.js +1 -1
  191. package/dist/patchStyleElements.js.flow +194 -194
  192. package/dist/patchTableElements.js.flow +89 -89
  193. package/dist/rebaseDocWithSteps.js.flow +42 -42
  194. package/dist/sanitizeURL.js.flow +13 -13
  195. package/dist/splitListItem.js +2 -2
  196. package/dist/splitListItem.js.flow +191 -191
  197. package/dist/styles.css +19 -19
  198. package/dist/styles0.css +29 -29
  199. package/dist/toClosestFontPtSize.js.flow +22 -22
  200. package/dist/toSafeHTMLDocument.js.flow +9 -9
  201. package/dist/toggleBlockquote.js.flow +91 -91
  202. package/dist/toggleCodeBlock.js.flow +102 -102
  203. package/dist/toggleHeading.js +2 -2
  204. package/dist/toggleHeading.js.flow +113 -113
  205. package/dist/toggleList.js +2 -2
  206. package/dist/toggleList.js.flow +450 -450
  207. package/dist/transformAndPreserveTextSelection.js +1 -1
  208. package/dist/transformAndPreserveTextSelection.js.flow +151 -151
  209. package/dist/ui/AlertInfo.js +2 -2
  210. package/dist/ui/AlertInfo.js.flow +64 -64
  211. package/dist/ui/BookmarkNodeView.js.flow +66 -66
  212. package/dist/ui/ColorEditor.js.flow +101 -101
  213. package/dist/ui/CommandButton.js.flow +68 -68
  214. package/dist/ui/CommandMenu.js.flow +75 -75
  215. package/dist/ui/CommandMenuButton.js +2 -2
  216. package/dist/ui/CommandMenuButton.js.flow +131 -131
  217. package/dist/ui/CustomButton.js +3 -1
  218. package/dist/ui/CustomButton.js.flow +33 -33
  219. package/dist/ui/CustomEditorView.js.flow +28 -28
  220. package/dist/ui/CustomMenu.js.flow +17 -17
  221. package/dist/ui/CustomMenuItem.js.flow +36 -36
  222. package/dist/ui/CustomNodeView.js +3 -3
  223. package/dist/ui/CustomNodeView.js.flow +200 -200
  224. package/dist/ui/CustomRadioButton.js +3 -1
  225. package/dist/ui/CustomRadioButton.js.flow +65 -65
  226. package/dist/ui/DocLayoutEditor.js +1 -1
  227. package/dist/ui/DocLayoutEditor.js.flow +146 -146
  228. package/dist/ui/Editor.js +1 -2
  229. package/dist/ui/Editor.js.flow +290 -291
  230. package/dist/ui/EditorFrameset.js +1 -1
  231. package/dist/ui/EditorFrameset.js.flow +81 -81
  232. package/dist/ui/EditorToolbar.js +2 -2
  233. package/dist/ui/EditorToolbar.js.flow +211 -211
  234. package/dist/ui/EditorToolbarConfig.js +1 -1
  235. package/dist/ui/EditorToolbarConfig.js.flow +172 -172
  236. package/dist/ui/FontSizeCommandMenuButton.js.flow +66 -66
  237. package/dist/ui/FontTypeCommandMenuButton.js.flow +49 -49
  238. package/dist/ui/Frag.js.flow +13 -13
  239. package/dist/ui/Icon.js.flow +89 -89
  240. package/dist/ui/ImageAlignEditor.js +1 -1
  241. package/dist/ui/ImageAlignEditor.js.flow +60 -60
  242. package/dist/ui/ImageInlineEditor.js +1 -1
  243. package/dist/ui/ImageInlineEditor.js.flow +67 -67
  244. package/dist/ui/ImageNodeView.js +2 -2
  245. package/dist/ui/ImageNodeView.js.flow +404 -404
  246. package/dist/ui/ImageResizeBox.js +1 -1
  247. package/dist/ui/ImageResizeBox.js.flow +219 -219
  248. package/dist/ui/ImageURLEditor.js +2 -2
  249. package/dist/ui/ImageURLEditor.js.flow +119 -119
  250. package/dist/ui/ImageUploadEditor.js.flow +117 -117
  251. package/dist/ui/KeyCodes.js.flow +12 -12
  252. package/dist/ui/LinkTooltip.js.flow +85 -85
  253. package/dist/ui/LinkURLEditor.js.flow +111 -111
  254. package/dist/ui/ListItemNodeView.js.flow +98 -98
  255. package/dist/ui/ListTypeButton.js +2 -2
  256. package/dist/ui/ListTypeButton.js.flow +131 -131
  257. package/dist/ui/ListTypeCommandButton.js.flow +85 -85
  258. package/dist/ui/ListTypeMenu.js.flow +70 -70
  259. package/dist/ui/LoadingIndicator.js.flow +20 -20
  260. package/dist/ui/MathEditor.js.flow +78 -78
  261. package/dist/ui/MathInlineEditor.js +3 -3
  262. package/dist/ui/MathInlineEditor.js.flow +102 -102
  263. package/dist/ui/MathNodeView.js +2 -2
  264. package/dist/ui/MathNodeView.js.flow +175 -175
  265. package/dist/ui/PasteMenu.js.flow +57 -57
  266. package/dist/ui/PointerSurface.js +1 -1
  267. package/dist/ui/PointerSurface.js.flow +141 -141
  268. package/dist/ui/PopUp.js +1 -1
  269. package/dist/ui/PopUp.js.flow +77 -77
  270. package/dist/ui/PopUpManager.js +1 -1
  271. package/dist/ui/PopUpManager.js.flow +213 -213
  272. package/dist/ui/PopUpPosition.js +3 -3
  273. package/dist/ui/PopUpPosition.js.flow +104 -104
  274. package/dist/ui/ResizeObserver.js +1 -1
  275. package/dist/ui/ResizeObserver.js.flow +106 -106
  276. package/dist/ui/RichTextEditor.js.flow +133 -133
  277. package/dist/ui/SelectionObserver.js.flow +134 -134
  278. package/dist/ui/TableCellMenu.js.flow +38 -38
  279. package/dist/ui/TableGridSizeEditor.js +1 -1
  280. package/dist/ui/TableGridSizeEditor.js.flow +184 -184
  281. package/dist/ui/TableNodeView.js.flow +22 -22
  282. package/dist/ui/TooltipSurface.js.flow +76 -76
  283. package/dist/ui/bindScrollHandler.js.flow +46 -46
  284. package/dist/ui/canUseCSSFont.js.flow +43 -43
  285. package/dist/ui/clamp.js.flow +11 -11
  286. package/dist/ui/createPopUp.js +1 -1
  287. package/dist/ui/createPopUp.js.flow +205 -205
  288. package/dist/ui/czi-animations.css +15 -15
  289. package/dist/ui/czi-body-layout-editor.css +16 -16
  290. package/dist/ui/czi-bookmark-view.css +10 -10
  291. package/dist/ui/czi-color-editor.css +56 -56
  292. package/dist/ui/czi-cursor-placeholder.css +36 -36
  293. package/dist/ui/czi-custom-button.css +93 -93
  294. package/dist/ui/czi-custom-menu-button.css +18 -18
  295. package/dist/ui/czi-custom-menu-item.css +30 -30
  296. package/dist/ui/czi-custom-menu.css +8 -8
  297. package/dist/ui/czi-custom-radio-button.css +80 -80
  298. package/dist/ui/czi-custom-scrollbar.css +21 -21
  299. package/dist/ui/czi-editor-frameset.css +81 -81
  300. package/dist/ui/czi-editor-toolbar.css +122 -122
  301. package/dist/ui/czi-editor.css +220 -220
  302. package/dist/ui/czi-form.css +104 -104
  303. package/dist/ui/czi-frag.css +3 -3
  304. package/dist/ui/czi-heading.css +40 -40
  305. package/dist/ui/czi-icon.css +72 -72
  306. package/dist/ui/czi-image-resize-box.css +165 -165
  307. package/dist/ui/czi-image-upload-editor.css +57 -57
  308. package/dist/ui/czi-image-upload-placeholder.css +50 -50
  309. package/dist/ui/czi-image-url-editor.css +38 -38
  310. package/dist/ui/czi-image-view.css +125 -125
  311. package/dist/ui/czi-indent.css +137 -137
  312. package/dist/ui/czi-inline-editor.css +20 -20
  313. package/dist/ui/czi-link-tooltip.css +71 -71
  314. package/dist/ui/czi-list.css +410 -410
  315. package/dist/ui/czi-loading-indicator.css +111 -111
  316. package/dist/ui/czi-math-view.css +62 -62
  317. package/dist/ui/czi-pop-up.css +32 -32
  318. package/dist/ui/czi-selection-placeholder.css +24 -24
  319. package/dist/ui/czi-table-cell-menu.css +14 -14
  320. package/dist/ui/czi-table-grid-size-editor.css +37 -37
  321. package/dist/ui/czi-table.css +86 -86
  322. package/dist/ui/czi-tooltip-surface.css +45 -45
  323. package/dist/ui/czi-vars.css +46 -46
  324. package/dist/ui/findActiveFontSize.js.flow +58 -58
  325. package/dist/ui/findActiveFontType.js +1 -1
  326. package/dist/ui/findActiveFontType.js.flow +38 -38
  327. package/dist/ui/fonts.css +471 -471
  328. package/dist/ui/handleEditorDrop.js.flow +28 -28
  329. package/dist/ui/handleEditorKeyDown.js.flow +39 -39
  330. package/dist/ui/handleEditorPaste.js.flow +33 -33
  331. package/dist/ui/htmlElementToRect.js +1 -1
  332. package/dist/ui/htmlElementToRect.js.flow +18 -18
  333. package/dist/ui/icon-font.css +10 -10
  334. package/dist/ui/injectStyleSheet.js.flow +42 -42
  335. package/dist/ui/isElementFullyVisible.js.flow +23 -23
  336. package/dist/ui/isOffline.js.flow +8 -8
  337. package/dist/ui/isReactClass.js.flow +12 -12
  338. package/dist/ui/listType.css +21 -21
  339. package/dist/ui/mathquill-editor/MathQuillEditor.js.flow +159 -159
  340. package/dist/ui/mathquill-editor/MathQuillEditorSymbols.js +1 -1
  341. package/dist/ui/mathquill-editor/MathQuillEditorSymbols.js.flow +483 -483
  342. package/dist/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js.flow +48 -48
  343. package/dist/ui/mathquill-editor/czi-mathquill-editor-symbols-panel.css +39 -39
  344. package/dist/ui/mathquill-editor/czi-mathquill-editor.css +50 -50
  345. package/dist/ui/mathquill-editor/mathquill-import-kludge.js.flow +24 -24
  346. package/dist/ui/preventEventDefault.js.flow +5 -5
  347. package/dist/ui/rects.js +3 -3
  348. package/dist/ui/rects.js.flow +47 -47
  349. package/dist/ui/renderLaTeXAsHTML.js.flow +46 -46
  350. package/dist/ui/resolveImage.js +3 -3
  351. package/dist/ui/resolveImage.js.flow +123 -123
  352. package/dist/ui/toCSSColor.js +1 -1
  353. package/dist/ui/toCSSColor.js.flow +51 -51
  354. package/dist/ui/toCSSLineSpacing.js +1 -1
  355. package/dist/ui/toCSSLineSpacing.js.flow +82 -82
  356. package/dist/ui/toHexColor.js.flow +26 -26
  357. package/dist/ui/uuid.js.flow +9 -9
  358. package/dist/updateIndentLevel.js +2 -2
  359. package/dist/updateIndentLevel.js.flow +211 -211
  360. package/dist/uuid.js.flow +9 -9
  361. package/flow-typed/@modusoperandilicit-customstyles.js +5 -5
  362. package/flow-typed/@modusoperandilicit-doc-attrs-step.js +5 -5
  363. package/flow-typed/@molicit-citation.js +5 -5
  364. package/flow-typed/create-emotion.js +5 -5
  365. package/flow-typed/docs-editor.js +3 -3
  366. package/flow-typed/draft-convert.js +3 -3
  367. package/flow-typed/draft-js.js +3 -3
  368. package/flow-typed/flatted.js +5 -5
  369. package/flow-typed/jquery.js +5 -5
  370. package/flow-typed/katex.js +6 -6
  371. package/flow-typed/mathquill.js +5 -5
  372. package/flow-typed/prosemirror-collab.js +5 -5
  373. package/flow-typed/prosemirror-commands.js +5 -5
  374. package/flow-typed/prosemirror-dev-tools.js +5 -5
  375. package/flow-typed/prosemirror-dropcursor.js +5 -5
  376. package/flow-typed/prosemirror-gapcursor.js +5 -5
  377. package/flow-typed/prosemirror-history.js +5 -5
  378. package/flow-typed/prosemirror-inputrules.js +5 -5
  379. package/flow-typed/prosemirror-keymap.js +5 -5
  380. package/flow-typed/prosemirror-model.js +5 -5
  381. package/flow-typed/prosemirror-state.js +5 -5
  382. package/flow-typed/prosemirror-tables.js +5 -5
  383. package/flow-typed/prosemirror-transform.js +5 -5
  384. package/flow-typed/prosemirror-utils.js +5 -5
  385. package/flow-typed/prosemirror-view.js +5 -5
  386. package/flow-typed/resize-observer-polyfill.js +5 -5
  387. package/flow-typed/uuid.js +5 -5
  388. package/jest.setup.js +5 -5
  389. package/licit/client/CustomLicitRuntime.js +95 -95
  390. package/licit/client/CustomStyleRuntime.js +136 -136
  391. package/licit/client/index.js +366 -366
  392. package/licit/index.html +11 -11
  393. package/licit/server/collab/instance.js +221 -221
  394. package/licit/server/collab/route.js +69 -69
  395. package/licit/server/collab/server.js +297 -297
  396. package/licit/server/collab/start.js +13 -13
  397. package/licit/server/customstyles/start.js +184 -184
  398. package/licit/server/image/start.js +58 -58
  399. package/lint.sh +4 -4
  400. package/package.json +165 -165
  401. package/run_collab_server.py +21 -21
  402. package/run_customstyle_server.py +20 -20
  403. package/run_image_server.py +20 -20
  404. package/run_web_server.py +25 -25
  405. package/scripts/build_bin.js +10 -10
  406. package/scripts/build_bin.py +103 -103
  407. package/scripts/ci_check_dist.sh +13 -13
  408. package/scripts/env.js +6 -6
  409. package/scripts/webserver.js +35 -35
  410. package/sonar-project.properties +11 -11
  411. package/src/BlockquoteInsertNewLineCommand.js +55 -55
  412. package/src/BlockquoteNodeSpec.js +30 -30
  413. package/src/BlockquoteToggleCommand.js +34 -34
  414. package/src/BookmarkNodeSpec.js +39 -39
  415. package/src/BulletListNodeSpec.js +61 -61
  416. package/src/CZIProseMirror.js +90 -90
  417. package/src/CodeBlockCommand.js +43 -43
  418. package/src/CodeBlockNodeSpec.js +24 -24
  419. package/src/CodeMarkSpec.js +14 -14
  420. package/src/ContentPlaceholderPlugin.js +187 -187
  421. package/src/CursorPlaceholderPlugin.js +115 -115
  422. package/src/DocLayoutCommand.js +94 -94
  423. package/src/DocNodeSpec.js +64 -64
  424. package/src/EMMarkSpec.js +14 -14
  425. package/src/EditorCommands.js +128 -128
  426. package/src/EditorKeyMap.js +187 -187
  427. package/src/EditorMarks.js +71 -71
  428. package/src/EditorNodes.js +60 -60
  429. package/src/EditorPageLayoutPlugin.js +67 -67
  430. package/src/EditorPlugins.js +8 -8
  431. package/src/EditorSchema.js +12 -12
  432. package/src/EditorState.js +7 -7
  433. package/src/FontSizeCommand.js +57 -57
  434. package/src/FontSizeMarkSpec.js +49 -49
  435. package/src/FontTypeCommand.js +100 -100
  436. package/src/FontTypeMarkSpec.js +80 -80
  437. package/src/HTMLMutator.js +59 -59
  438. package/src/HardBreakNodeSpec.js +15 -15
  439. package/src/HeadingCommand.js +51 -51
  440. package/src/HeadingNodeSpec.js +54 -54
  441. package/src/HistoryRedoCommand.js +20 -20
  442. package/src/HistoryUndoCommand.js +20 -20
  443. package/src/HorizontalRuleCommand.js +49 -49
  444. package/src/HorizontalRuleNodeSpec.js +39 -39
  445. package/src/ImageFromURLCommand.js +14 -14
  446. package/src/ImageNodeSpec.js +90 -90
  447. package/src/ImageSourceCommand.js +117 -117
  448. package/src/ImageUploadCommand.js +36 -36
  449. package/src/ImageUploadPlaceholderPlugin.js +192 -192
  450. package/src/IndentCommand.js +41 -41
  451. package/src/LinkMarkSpec.js +32 -32
  452. package/src/LinkSetURLCommand.js +103 -103
  453. package/src/LinkTooltipPlugin.js +203 -203
  454. package/src/ListItemInsertNewLineCommand.js +55 -55
  455. package/src/ListItemMergeCommand.js +177 -177
  456. package/src/ListItemNodeSpec.js +51 -51
  457. package/src/ListSplitCommand.js +32 -32
  458. package/src/ListToggleCommand.js +77 -77
  459. package/src/MarkNames.js +18 -18
  460. package/src/MarkToggleCommand.js +66 -66
  461. package/src/MarksClearCommand.js +42 -42
  462. package/src/MathEditCommand.js +110 -110
  463. package/src/MathNodeSpec.js +46 -46
  464. package/src/NodeNames.js +23 -23
  465. package/src/OrderedListNodeSpec.js +132 -132
  466. package/src/ParagraphNodeSpec.js +160 -160
  467. package/src/ParagraphSpacingCommand.js +121 -121
  468. package/src/PrintCommand.js +31 -31
  469. package/src/SelectionPlaceholderPlugin.js +131 -131
  470. package/src/SpacerMarkSpec.js +47 -47
  471. package/src/StrikeMarkSpec.js +21 -21
  472. package/src/StrongMarkSpec.js +25 -25
  473. package/src/StyleView.js +19 -19
  474. package/src/TableBackgroundColorCommand.js +75 -75
  475. package/src/TableBorderColorCommand.js +75 -75
  476. package/src/TableCellColorCommand.js +71 -71
  477. package/src/TableCellMenuPlugin.js +125 -125
  478. package/src/TableInsertCommand.js +112 -112
  479. package/src/TableMergeCellsCommand.js +90 -90
  480. package/src/TableNodesSpecs.js +78 -78
  481. package/src/TablePlugins.js +14 -14
  482. package/src/TableResizePlugin.js +631 -631
  483. package/src/TextAlignCommand.js +122 -122
  484. package/src/TextColorCommand.js +87 -87
  485. package/src/TextColorMarkSpec.js +35 -35
  486. package/src/TextHighlightCommand.js +91 -91
  487. package/src/TextHighlightMarkSpec.js +38 -38
  488. package/src/TextInsertTabSpaceCommand.js +83 -83
  489. package/src/TextLineSpacingCommand.js +157 -157
  490. package/src/TextNoWrapMarkSpec.js +14 -14
  491. package/src/TextNodeSpec.js +7 -7
  492. package/src/TextSelectionMarkSpec.js +24 -24
  493. package/src/TextSubMarkSpec.js +20 -20
  494. package/src/TextSuperMarkSpec.js +20 -20
  495. package/src/TextUnderlineMarkSpec.js +27 -27
  496. package/src/Types.js +75 -75
  497. package/src/WebFontLoader.js +22 -22
  498. package/src/applyMark.js +61 -61
  499. package/src/blockQuoteInputRule.js +36 -36
  500. package/src/browser.js +7 -7
  501. package/src/buildEditorPlugins.js +51 -51
  502. package/src/buildInputRules.js +81 -81
  503. package/src/clearMarks.js +128 -128
  504. package/src/client/CollabConnector.js +71 -71
  505. package/src/client/EditorConnection.js +307 -307
  506. package/src/client/Licit.js +578 -576
  507. package/src/client/Licit.test.js +67 -65
  508. package/src/client/Reporter.js +37 -37
  509. package/src/client/SimpleConnector.js +53 -53
  510. package/src/client/http.js +66 -66
  511. package/src/client/licit.css +12 -12
  512. package/src/client/throttle.js +27 -27
  513. package/src/compareNumber.js +11 -11
  514. package/src/consolidateListNodes.js +281 -281
  515. package/src/convertFromDOMElement.js +36 -36
  516. package/src/convertFromHTML.js +19 -19
  517. package/src/convertFromJSON.js +78 -78
  518. package/src/convertToCSSPTValue.js +22 -22
  519. package/src/convertToJSON.js +7 -7
  520. package/src/createCommand.js +40 -40
  521. package/src/createEditorKeyMap.js +94 -94
  522. package/src/createEmptyEditorState.js +35 -35
  523. package/src/createTableResizingPlugin.js +86 -86
  524. package/src/findActionableCell.js +74 -74
  525. package/src/findActiveMark.js +32 -32
  526. package/src/findNodesWithSameMark.js +89 -89
  527. package/src/hyphenize.js +17 -17
  528. package/src/index.js +10 -10
  529. package/src/insertTable.js +56 -56
  530. package/src/isBulletListNode.js +9 -9
  531. package/src/isEditorStateEmpty.js +32 -32
  532. package/src/isInsideListItem.js +13 -13
  533. package/src/isListNode.js +13 -13
  534. package/src/isNodeSelectionForNodeType.js +15 -15
  535. package/src/isOrderedListNode.js +9 -9
  536. package/src/isTableNode.js +15 -15
  537. package/src/isTextStyleMarkCommandEnabled.js +49 -49
  538. package/src/joinDown.js +27 -27
  539. package/src/joinListNode.js +55 -55
  540. package/src/joinUp.js +39 -39
  541. package/src/keymaps.js +185 -185
  542. package/src/lookUpElement.js +14 -14
  543. package/src/nodeAt.js +12 -12
  544. package/src/noop.js +5 -5
  545. package/src/normalizeHTML.js +78 -78
  546. package/src/patchAnchorElements.js +38 -38
  547. package/src/patchBreakElements.js +22 -22
  548. package/src/patchElementInlineStyles.js +92 -92
  549. package/src/patchListElements.js +276 -276
  550. package/src/patchMathElements.js +60 -60
  551. package/src/patchParagraphElements.js +20 -20
  552. package/src/patchStyleElements.js +194 -194
  553. package/src/patchTableElements.js +89 -89
  554. package/src/rebaseDocWithSteps.js +42 -42
  555. package/src/sanitizeURL.js +13 -13
  556. package/src/splitListItem.js +191 -191
  557. package/src/styles.css +19 -19
  558. package/src/styles0.css +29 -29
  559. package/src/toClosestFontPtSize.js +22 -22
  560. package/src/toSafeHTMLDocument.js +9 -9
  561. package/src/toggleBlockquote.js +91 -91
  562. package/src/toggleCodeBlock.js +102 -102
  563. package/src/toggleHeading.js +113 -113
  564. package/src/toggleList.js +450 -450
  565. package/src/transformAndPreserveTextSelection.js +151 -151
  566. package/src/ui/AlertInfo.js +64 -64
  567. package/src/ui/BookmarkNodeView.js +66 -66
  568. package/src/ui/ColorEditor.js +101 -101
  569. package/src/ui/CommandButton.js +68 -68
  570. package/src/ui/CommandMenu.js +75 -75
  571. package/src/ui/CommandMenuButton.js +131 -131
  572. package/src/ui/CustomButton.js +33 -33
  573. package/src/ui/CustomEditorView.js +28 -28
  574. package/src/ui/CustomMenu.js +17 -17
  575. package/src/ui/CustomMenuItem.js +36 -36
  576. package/src/ui/CustomNodeView.js +200 -200
  577. package/src/ui/CustomRadioButton.js +65 -65
  578. package/src/ui/DocLayoutEditor.js +146 -146
  579. package/src/ui/Editor.js +290 -291
  580. package/src/ui/EditorFrameset.js +81 -81
  581. package/src/ui/EditorToolbar.js +211 -211
  582. package/src/ui/EditorToolbarConfig.js +172 -172
  583. package/src/ui/FontSizeCommandMenuButton.js +66 -66
  584. package/src/ui/FontTypeCommandMenuButton.js +49 -49
  585. package/src/ui/Frag.js +13 -13
  586. package/src/ui/Icon.js +89 -89
  587. package/src/ui/ImageAlignEditor.js +60 -60
  588. package/src/ui/ImageInlineEditor.js +67 -67
  589. package/src/ui/ImageNodeView.js +404 -404
  590. package/src/ui/ImageResizeBox.js +219 -219
  591. package/src/ui/ImageURLEditor.js +119 -119
  592. package/src/ui/ImageUploadEditor.js +117 -117
  593. package/src/ui/KeyCodes.js +12 -12
  594. package/src/ui/LinkTooltip.js +85 -85
  595. package/src/ui/LinkURLEditor.js +111 -111
  596. package/src/ui/ListItemNodeView.js +98 -98
  597. package/src/ui/ListTypeButton.js +131 -131
  598. package/src/ui/ListTypeCommandButton.js +85 -85
  599. package/src/ui/ListTypeMenu.js +70 -70
  600. package/src/ui/LoadingIndicator.js +20 -20
  601. package/src/ui/MathEditor.js +78 -78
  602. package/src/ui/MathInlineEditor.js +102 -102
  603. package/src/ui/MathNodeView.js +175 -175
  604. package/src/ui/PasteMenu.js +57 -57
  605. package/src/ui/PointerSurface.js +141 -141
  606. package/src/ui/PopUp.js +77 -77
  607. package/src/ui/PopUpManager.js +213 -213
  608. package/src/ui/PopUpPosition.js +104 -104
  609. package/src/ui/ResizeObserver.js +106 -106
  610. package/src/ui/RichTextEditor.js +133 -133
  611. package/src/ui/SelectionObserver.js +134 -134
  612. package/src/ui/TableCellMenu.js +38 -38
  613. package/src/ui/TableGridSizeEditor.js +184 -184
  614. package/src/ui/TableNodeView.js +22 -22
  615. package/src/ui/TooltipSurface.js +76 -76
  616. package/src/ui/bindScrollHandler.js +46 -46
  617. package/src/ui/canUseCSSFont.js +43 -43
  618. package/src/ui/clamp.js +11 -11
  619. package/src/ui/createPopUp.js +205 -205
  620. package/src/ui/czi-animations.css +15 -15
  621. package/src/ui/czi-body-layout-editor.css +16 -16
  622. package/src/ui/czi-bookmark-view.css +10 -10
  623. package/src/ui/czi-color-editor.css +56 -56
  624. package/src/ui/czi-cursor-placeholder.css +36 -36
  625. package/src/ui/czi-custom-button.css +93 -93
  626. package/src/ui/czi-custom-menu-button.css +18 -18
  627. package/src/ui/czi-custom-menu-item.css +30 -30
  628. package/src/ui/czi-custom-menu.css +8 -8
  629. package/src/ui/czi-custom-radio-button.css +80 -80
  630. package/src/ui/czi-custom-scrollbar.css +21 -21
  631. package/src/ui/czi-editor-frameset.css +81 -81
  632. package/src/ui/czi-editor-toolbar.css +122 -122
  633. package/src/ui/czi-editor.css +220 -220
  634. package/src/ui/czi-form.css +104 -104
  635. package/src/ui/czi-frag.css +3 -3
  636. package/src/ui/czi-heading.css +40 -40
  637. package/src/ui/czi-icon.css +72 -72
  638. package/src/ui/czi-image-resize-box.css +165 -165
  639. package/src/ui/czi-image-upload-editor.css +57 -57
  640. package/src/ui/czi-image-upload-placeholder.css +50 -50
  641. package/src/ui/czi-image-url-editor.css +38 -38
  642. package/src/ui/czi-image-view.css +125 -125
  643. package/src/ui/czi-indent.css +137 -137
  644. package/src/ui/czi-inline-editor.css +20 -20
  645. package/src/ui/czi-link-tooltip.css +71 -71
  646. package/src/ui/czi-list.css +410 -410
  647. package/src/ui/czi-loading-indicator.css +111 -111
  648. package/src/ui/czi-math-view.css +62 -62
  649. package/src/ui/czi-pop-up.css +32 -32
  650. package/src/ui/czi-selection-placeholder.css +24 -24
  651. package/src/ui/czi-table-cell-menu.css +14 -14
  652. package/src/ui/czi-table-grid-size-editor.css +37 -37
  653. package/src/ui/czi-table.css +86 -86
  654. package/src/ui/czi-tooltip-surface.css +45 -45
  655. package/src/ui/czi-vars.css +46 -46
  656. package/src/ui/findActiveFontSize.js +58 -58
  657. package/src/ui/findActiveFontType.js +38 -38
  658. package/src/ui/fonts.css +471 -471
  659. package/src/ui/handleEditorDrop.js +28 -28
  660. package/src/ui/handleEditorKeyDown.js +39 -39
  661. package/src/ui/handleEditorPaste.js +33 -33
  662. package/src/ui/htmlElementToRect.js +18 -18
  663. package/src/ui/icon-font.css +10 -10
  664. package/src/ui/injectStyleSheet.js +42 -42
  665. package/src/ui/isElementFullyVisible.js +23 -23
  666. package/src/ui/isOffline.js +8 -8
  667. package/src/ui/isReactClass.js +12 -12
  668. package/src/ui/listType.css +21 -21
  669. package/src/ui/mathquill-editor/MathQuillEditor.js +159 -159
  670. package/src/ui/mathquill-editor/MathQuillEditorSymbols.js +483 -483
  671. package/src/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js +48 -48
  672. package/src/ui/mathquill-editor/czi-mathquill-editor-symbols-panel.css +39 -39
  673. package/src/ui/mathquill-editor/czi-mathquill-editor.css +50 -50
  674. package/src/ui/mathquill-editor/mathquill-import-kludge.js +24 -24
  675. package/src/ui/preventEventDefault.js +5 -5
  676. package/src/ui/rects.js +47 -47
  677. package/src/ui/renderLaTeXAsHTML.js +46 -46
  678. package/src/ui/resolveImage.js +123 -123
  679. package/src/ui/toCSSColor.js +51 -51
  680. package/src/ui/toCSSLineSpacing.js +82 -82
  681. package/src/ui/toHexColor.js +26 -26
  682. package/src/ui/uuid.js +9 -9
  683. package/src/updateIndentLevel.js +211 -211
  684. package/src/uuid.js +9 -9
  685. package/style-service.Dockerfile +26 -26
  686. package/utils/build_bin.js +9 -9
  687. package/utils/build_customstyle_server.js +71 -71
  688. package/utils/build_image_server.js +71 -71
  689. package/utils/build_licit_collab_server.js +75 -75
  690. package/utils/build_web_server.js +40 -40
  691. package/utils/env.js +6 -6
  692. package/webpack.config.js +126 -126
  693. package/dist/coverage/lcov-report/block-navigation.js +0 -77
  694. package/dist/coverage/lcov-report/block-navigation.js.flow +0 -79
  695. package/dist/coverage/lcov-report/prettify.js +0 -994
  696. package/dist/coverage/lcov-report/prettify.js.flow +0 -2
  697. package/dist/coverage/lcov-report/sorter.js +0 -187
  698. package/dist/coverage/lcov-report/sorter.js.flow +0 -170
@@ -1,450 +1,450 @@
1
- // @flow
2
-
3
- import consolidateListNodes from './consolidateListNodes';
4
- import compareNumber from './compareNumber';
5
- import nullthrows from 'nullthrows';
6
- import { Fragment, Node, NodeType, Schema } from 'prosemirror-model';
7
- import { TextSelection } from 'prosemirror-state';
8
- import { Transform } from 'prosemirror-transform';
9
- import { findParentNodeOfType } from 'prosemirror-utils';
10
-
11
- import { HEADING, LIST_ITEM, PARAGRAPH } from './NodeNames';
12
- import isListNode from './isListNode';
13
- import transformAndPreserveTextSelection from './transformAndPreserveTextSelection';
14
-
15
- import type { SelectionMemo } from './transformAndPreserveTextSelection';
16
-
17
- export default function toggleList(
18
- tr: Transform,
19
- schema: Schema,
20
- listNodeType: NodeType,
21
- listStyleType: string
22
- ): Transform {
23
- const { selection, doc } = tr;
24
- if (!selection || !doc) {
25
- return tr;
26
- }
27
-
28
- // [FS][04-AUG-2020][IRAD-955]
29
- // Fix Unable to apply list using Ctrl+A selection
30
- let { from } = selection;
31
- let { to } = selection;
32
- let newselection = selection;
33
-
34
- if (0 === from && 0 != to) {
35
- // In here when Ctrl+A is pressed.
36
- let startPos = -1;
37
- let endPos = -1;
38
-
39
- tr.doc.descendants((node, pos) => {
40
- if (-1 === startPos) {
41
- startPos = pos;
42
- } else {
43
- endPos = pos + 1;
44
- }
45
- });
46
-
47
- // validate endPos. Both start & end pos can't be -ve.
48
- endPos = -1 == endPos ? to : endPos;
49
-
50
- // Actual starting position similar when manually selecting
51
- startPos = 0 < to - endPos ? to - endPos : 0;
52
-
53
- from = startPos;
54
- to = 0 < endPos ? endPos : 0;
55
-
56
- newselection = TextSelection.create(doc, from, to);
57
- tr = tr.setSelection(newselection);
58
- }
59
-
60
- const fromSelection = TextSelection.create(doc, from, from);
61
- const paragraph = schema.nodes[PARAGRAPH];
62
- const heading = schema.nodes[HEADING];
63
- const result = findParentNodeOfType(listNodeType)(fromSelection);
64
- const p = findParentNodeOfType(paragraph)(fromSelection);
65
- const h = findParentNodeOfType(heading)(fromSelection);
66
-
67
- if (result) {
68
- tr = unwrapNodesFromList(tr, schema, result.pos);
69
- } else if (paragraph && p) {
70
- tr = wrapNodesWithList(
71
- tr,
72
- schema,
73
- listNodeType,
74
- listStyleType,
75
- newselection
76
- );
77
- } else if (heading && h) {
78
- tr = wrapNodesWithList(
79
- tr,
80
- schema,
81
- listNodeType,
82
- listStyleType,
83
- newselection
84
- );
85
- }
86
- return tr;
87
- }
88
-
89
- export function unwrapNodesFromList(
90
- tr: Transform,
91
- schema: Schema,
92
- listNodePos: number,
93
- unwrapParagraphNode?: ?(Node) => Node
94
- ): Transform {
95
- return transformAndPreserveTextSelection(tr, schema, (memo) => {
96
- return consolidateListNodes(
97
- unwrapNodesFromListInternal(memo, listNodePos, unwrapParagraphNode)
98
- );
99
- });
100
- }
101
-
102
- function wrapNodesWithList(
103
- tr: Transform,
104
- schema: Schema,
105
- listNodeType: NodeType,
106
- listStyleType: string,
107
- newselection = null
108
- ): Transform {
109
- return transformAndPreserveTextSelection(tr, schema, (memo) => {
110
- // [FS][04-AUG-2020][IRAD-955]
111
- // Fix Unable to apply list using Ctrl+A selection
112
- return consolidateListNodes(
113
- wrapNodesWithListInternal(memo, listNodeType, listStyleType, newselection)
114
- );
115
- });
116
- }
117
-
118
- function wrapNodesWithListInternal(
119
- memo: SelectionMemo,
120
- listNodeType: NodeType,
121
- listStyleType: string,
122
- newselection = null
123
- ): Transform {
124
- const { schema } = memo;
125
- let { tr } = memo;
126
- const { doc, selection } = tr;
127
- let { from, to } = selection;
128
- if (!tr || !selection) {
129
- return tr;
130
- }
131
- if (newselection) {
132
- from = newselection.from;
133
- to = newselection.to;
134
- }
135
-
136
- const paragraph = schema.nodes[PARAGRAPH];
137
- const heading = schema.nodes[HEADING];
138
-
139
- let items = null;
140
- let lists = [];
141
- doc.nodesBetween(from, to, (node, pos) => {
142
- const nodeType = node.type;
143
- const nodeName = nodeType.name;
144
- if (isListNode(node)) {
145
- if (node.type !== listNodeType) {
146
- const listNodeAttrs = {
147
- ...node.attrs,
148
- listNodeType: null,
149
- };
150
- tr = tr.setNodeMarkup(pos, listNodeType, listNodeAttrs, node.marks);
151
- }
152
- items && lists.push(items);
153
- items = null;
154
- return false;
155
- }
156
-
157
- if (/table/.test(nodeName)) {
158
- items && lists.push(items);
159
- items = null;
160
- return true;
161
- }
162
-
163
- if (nodeType === heading || nodeType === paragraph) {
164
- items = items || [];
165
- items.push({ node, pos });
166
- } else {
167
- items && items.length && lists.push(items);
168
- items = null;
169
- }
170
- return true;
171
- });
172
- items && items.length && lists.push(items);
173
-
174
- lists = lists.filter((items) => items.length > 0);
175
- if (!lists.length) {
176
- return tr;
177
- }
178
-
179
- lists.sort((a, b) => {
180
- const pa = nullthrows(a[0]).pos;
181
- const pb = nullthrows(b[0]).pos;
182
- return pa >= pb ? 1 : -1;
183
- });
184
-
185
- lists.reverse();
186
-
187
- lists.forEach((items) => {
188
- tr = wrapItemsWithListInternal(
189
- tr,
190
- schema,
191
- listNodeType,
192
- items,
193
- listStyleType
194
- );
195
- });
196
-
197
- return tr;
198
- }
199
-
200
- function wrapItemsWithListInternal(
201
- tr: Transform,
202
- schema: Schema,
203
- listNodeType: NodeType,
204
- items: Array<{ node: Node, pos: number }>,
205
- listStyleType: string
206
- ): Transform {
207
- const initialTr = tr;
208
- const paragraph = schema.nodes[PARAGRAPH];
209
- const listItem = schema.nodes[LIST_ITEM];
210
-
211
- if (!paragraph || !listItem) {
212
- return tr;
213
- }
214
-
215
- const paragraphNodes = [];
216
- items.forEach((item) => {
217
- const { node, pos } = item;
218
- // Temporarily annotate each node with an unique ID.
219
- const uniqueID = {};
220
- const nodeAttrs = { ...node.attrs, id: uniqueID };
221
- // Replace the original node with the node annotated by the uniqueID.
222
- tr = tr.setNodeMarkup(pos, paragraph, nodeAttrs, node.marks);
223
- paragraphNodes.push(tr.doc.nodeAt(pos));
224
- });
225
-
226
- const firstNode = paragraphNodes[0];
227
- const lastNode = paragraphNodes[paragraphNodes.length - 1];
228
- if (!firstNode || !lastNode) {
229
- return initialTr;
230
- }
231
-
232
- const firstNodeID = firstNode.attrs.id;
233
- const lastNodeID = lastNode.attrs.id;
234
- if (!firstNodeID || !lastNodeID) {
235
- return initialTr;
236
- }
237
-
238
- let fromPos = null;
239
- let toPos = null;
240
- tr.doc.descendants((node, pos) => {
241
- const nodeID = node.attrs.id;
242
- if (nodeID === firstNodeID) {
243
- fromPos = pos;
244
- }
245
- if (nodeID === lastNodeID) {
246
- toPos = pos + node.nodeSize;
247
- }
248
- return fromPos === null || toPos === null;
249
- });
250
-
251
- if (fromPos === null || toPos === null) {
252
- return initialTr;
253
- }
254
-
255
- const listItemNodes = [];
256
- items.forEach((item) => {
257
- const { node } = item;
258
- // Restore the annotated nodes with the copy of the original ones.
259
- const paragraphNode = paragraph.create(
260
- node.attrs,
261
- node.content,
262
- node.marks
263
- );
264
- const listItemNode = listItem.create(
265
- node.attrs,
266
- Fragment.from(paragraphNode)
267
- );
268
- listItemNodes.push(listItemNode);
269
- });
270
-
271
- const listNodeAttrs = { indent: 0, start: 1, type: listStyleType };
272
-
273
- const $fromPos = tr.doc.resolve(fromPos);
274
- const $toPos = tr.doc.resolve(toPos);
275
-
276
- const hasSameListNodeBefore =
277
- $fromPos.nodeBefore &&
278
- $fromPos.nodeBefore.type === listNodeType &&
279
- $fromPos.nodeBefore.attrs.indent === 0;
280
-
281
- const hasSameListNodeAfter =
282
- $toPos.nodeAfter &&
283
- $toPos.nodeAfter.type === listNodeType &&
284
- $toPos.nodeAfter.attrs.indent === 0;
285
-
286
- if (hasSameListNodeBefore) {
287
- tr = tr.delete(fromPos, toPos);
288
- tr = tr.insert(fromPos - 1, Fragment.from(listItemNodes));
289
- if (hasSameListNodeAfter) {
290
- tr = tr.delete(toPos + 1, toPos + 3);
291
- }
292
- } else if (hasSameListNodeAfter) {
293
- tr = tr.delete(fromPos, toPos);
294
- tr = tr.insert(fromPos + 1, Fragment.from(listItemNodes));
295
- } else {
296
- const listNode = listNodeType.create(
297
- listNodeAttrs,
298
- Fragment.from(listItemNodes)
299
- );
300
- tr = tr.delete(fromPos, toPos);
301
- tr = tr.insert(fromPos, Fragment.from(listNode));
302
- }
303
-
304
- return tr;
305
- }
306
-
307
- // [FS] IRAD-966 2020-05-20
308
- // Fix: Toggling issue for Multi-level list.
309
-
310
- function unwrapNodesFromSelection(
311
- tr: Transform,
312
- listNodePos: number,
313
- nodes: Node,
314
- unwrapParagraphNode?: Node,
315
- from: number,
316
- to: number
317
- ): Transform {
318
- const contentBlocksBefore = [];
319
- const contentBlocksSelected = [];
320
- const contentBlocksAfter = [];
321
- const paragraph = nodes[PARAGRAPH];
322
- const listItem = nodes[LIST_ITEM];
323
- const listNode = tr.doc.nodeAt(listNodePos);
324
-
325
- tr.doc.nodesBetween(
326
- listNodePos,
327
- listNodePos + listNode.nodeSize,
328
- (node, pos, parentNode, index) => {
329
- if (node.type !== paragraph) {
330
- return true;
331
- }
332
- const block = {
333
- node,
334
- pos,
335
- parentNode,
336
- index,
337
- };
338
-
339
- if (pos + node.nodeSize <= from) {
340
- contentBlocksBefore.push(block);
341
- } else if (pos > to) {
342
- contentBlocksAfter.push(block);
343
- } else {
344
- contentBlocksSelected.push(block);
345
- }
346
- return false;
347
- }
348
- );
349
-
350
- if (!contentBlocksSelected.length) {
351
- return tr;
352
- }
353
-
354
- tr = tr.delete(listNodePos, listNodePos + listNode.nodeSize);
355
-
356
- const listNodeType = listNode.type;
357
- const attrs = { indent: listNode.attrs.indent, start: 1 };
358
-
359
- if (contentBlocksAfter.length) {
360
- const nodes = contentBlocksAfter.map((block) => {
361
- return listItem.create({}, Fragment.from(block.node));
362
- });
363
- const frag = Fragment.from(
364
- listNodeType.create(attrs, Fragment.from(nodes))
365
- );
366
- tr = tr.insert(listNodePos, frag);
367
- }
368
-
369
- if (contentBlocksSelected.length) {
370
- const nodes = contentBlocksSelected.map((block) => {
371
- if (unwrapParagraphNode) {
372
- return unwrapParagraphNode(block.node);
373
- } else {
374
- return block.node;
375
- }
376
- });
377
- const frag = Fragment.from(nodes);
378
- tr = tr.insert(listNodePos, frag);
379
- }
380
-
381
- if (contentBlocksBefore.length) {
382
- const nodes = contentBlocksBefore.map((block) => {
383
- return listItem.create({}, Fragment.from(block.node));
384
- });
385
- const frag = Fragment.from(
386
- listNodeType.create(attrs, Fragment.from(nodes))
387
- );
388
- tr = tr.insert(listNodePos, frag);
389
- }
390
-
391
- return tr;
392
- }
393
-
394
- function unwrapNodesFromListInternal(
395
- memo: SelectionMemo,
396
- listNodePos: number,
397
- unwrapParagraphNode?: ?(Node) => Node
398
- ): Transform {
399
- const { schema } = memo;
400
- let { tr } = memo;
401
-
402
- if (!tr.doc || !tr.selection) {
403
- return tr;
404
- }
405
-
406
- const { nodes } = schema;
407
- const paragraph = nodes[PARAGRAPH];
408
- const listItem = nodes[LIST_ITEM];
409
-
410
- if (!listItem || !paragraph) {
411
- return tr;
412
- }
413
-
414
- const listNode = tr.doc.nodeAt(listNodePos);
415
- if (!isListNode(listNode)) {
416
- return tr;
417
- }
418
-
419
- const initialSelection = tr.selection;
420
- const { from, to } = initialSelection;
421
-
422
- const listNodePoses = [];
423
-
424
- // keep all list type nodes starting position
425
- tr.doc.nodesBetween(from, to, (node, pos) => {
426
- if (isListNode(node)) {
427
- listNodePoses.push(pos);
428
- }
429
- });
430
-
431
- if (from === to && from < 1) {
432
- return tr;
433
- }
434
- // Unwraps all selected list
435
- listNodePoses
436
- .sort(compareNumber)
437
- .reverse()
438
- .forEach((pos) => {
439
- tr = unwrapNodesFromSelection(
440
- tr,
441
- pos,
442
- nodes,
443
- unwrapParagraphNode,
444
- from,
445
- to
446
- );
447
- });
448
-
449
- return tr;
450
- }
1
+ // @flow
2
+
3
+ import consolidateListNodes from './consolidateListNodes';
4
+ import compareNumber from './compareNumber';
5
+ import nullthrows from 'nullthrows';
6
+ import { Fragment, Node, NodeType, Schema } from 'prosemirror-model';
7
+ import { TextSelection } from 'prosemirror-state';
8
+ import { Transform } from 'prosemirror-transform';
9
+ import { findParentNodeOfType } from 'prosemirror-utils';
10
+
11
+ import { HEADING, LIST_ITEM, PARAGRAPH } from './NodeNames';
12
+ import isListNode from './isListNode';
13
+ import transformAndPreserveTextSelection from './transformAndPreserveTextSelection';
14
+
15
+ import type { SelectionMemo } from './transformAndPreserveTextSelection';
16
+
17
+ export default function toggleList(
18
+ tr: Transform,
19
+ schema: Schema,
20
+ listNodeType: NodeType,
21
+ listStyleType: string
22
+ ): Transform {
23
+ const { selection, doc } = tr;
24
+ if (!selection || !doc) {
25
+ return tr;
26
+ }
27
+
28
+ // [FS][04-AUG-2020][IRAD-955]
29
+ // Fix Unable to apply list using Ctrl+A selection
30
+ let { from } = selection;
31
+ let { to } = selection;
32
+ let newselection = selection;
33
+
34
+ if (0 === from && 0 != to) {
35
+ // In here when Ctrl+A is pressed.
36
+ let startPos = -1;
37
+ let endPos = -1;
38
+
39
+ tr.doc.descendants((node, pos) => {
40
+ if (-1 === startPos) {
41
+ startPos = pos;
42
+ } else {
43
+ endPos = pos + 1;
44
+ }
45
+ });
46
+
47
+ // validate endPos. Both start & end pos can't be -ve.
48
+ endPos = -1 == endPos ? to : endPos;
49
+
50
+ // Actual starting position similar when manually selecting
51
+ startPos = 0 < to - endPos ? to - endPos : 0;
52
+
53
+ from = startPos;
54
+ to = 0 < endPos ? endPos : 0;
55
+
56
+ newselection = TextSelection.create(doc, from, to);
57
+ tr = tr.setSelection(newselection);
58
+ }
59
+
60
+ const fromSelection = TextSelection.create(doc, from, from);
61
+ const paragraph = schema.nodes[PARAGRAPH];
62
+ const heading = schema.nodes[HEADING];
63
+ const result = findParentNodeOfType(listNodeType)(fromSelection);
64
+ const p = findParentNodeOfType(paragraph)(fromSelection);
65
+ const h = findParentNodeOfType(heading)(fromSelection);
66
+
67
+ if (result) {
68
+ tr = unwrapNodesFromList(tr, schema, result.pos);
69
+ } else if (paragraph && p) {
70
+ tr = wrapNodesWithList(
71
+ tr,
72
+ schema,
73
+ listNodeType,
74
+ listStyleType,
75
+ newselection
76
+ );
77
+ } else if (heading && h) {
78
+ tr = wrapNodesWithList(
79
+ tr,
80
+ schema,
81
+ listNodeType,
82
+ listStyleType,
83
+ newselection
84
+ );
85
+ }
86
+ return tr;
87
+ }
88
+
89
+ export function unwrapNodesFromList(
90
+ tr: Transform,
91
+ schema: Schema,
92
+ listNodePos: number,
93
+ unwrapParagraphNode?: ?(Node) => Node
94
+ ): Transform {
95
+ return transformAndPreserveTextSelection(tr, schema, (memo) => {
96
+ return consolidateListNodes(
97
+ unwrapNodesFromListInternal(memo, listNodePos, unwrapParagraphNode)
98
+ );
99
+ });
100
+ }
101
+
102
+ function wrapNodesWithList(
103
+ tr: Transform,
104
+ schema: Schema,
105
+ listNodeType: NodeType,
106
+ listStyleType: string,
107
+ newselection = null
108
+ ): Transform {
109
+ return transformAndPreserveTextSelection(tr, schema, (memo) => {
110
+ // [FS][04-AUG-2020][IRAD-955]
111
+ // Fix Unable to apply list using Ctrl+A selection
112
+ return consolidateListNodes(
113
+ wrapNodesWithListInternal(memo, listNodeType, listStyleType, newselection)
114
+ );
115
+ });
116
+ }
117
+
118
+ function wrapNodesWithListInternal(
119
+ memo: SelectionMemo,
120
+ listNodeType: NodeType,
121
+ listStyleType: string,
122
+ newselection = null
123
+ ): Transform {
124
+ const { schema } = memo;
125
+ let { tr } = memo;
126
+ const { doc, selection } = tr;
127
+ let { from, to } = selection;
128
+ if (!tr || !selection) {
129
+ return tr;
130
+ }
131
+ if (newselection) {
132
+ from = newselection.from;
133
+ to = newselection.to;
134
+ }
135
+
136
+ const paragraph = schema.nodes[PARAGRAPH];
137
+ const heading = schema.nodes[HEADING];
138
+
139
+ let items = null;
140
+ let lists = [];
141
+ doc.nodesBetween(from, to, (node, pos) => {
142
+ const nodeType = node.type;
143
+ const nodeName = nodeType.name;
144
+ if (isListNode(node)) {
145
+ if (node.type !== listNodeType) {
146
+ const listNodeAttrs = {
147
+ ...node.attrs,
148
+ listNodeType: null,
149
+ };
150
+ tr = tr.setNodeMarkup(pos, listNodeType, listNodeAttrs, node.marks);
151
+ }
152
+ items && lists.push(items);
153
+ items = null;
154
+ return false;
155
+ }
156
+
157
+ if (/table/.test(nodeName)) {
158
+ items && lists.push(items);
159
+ items = null;
160
+ return true;
161
+ }
162
+
163
+ if (nodeType === heading || nodeType === paragraph) {
164
+ items = items || [];
165
+ items.push({ node, pos });
166
+ } else {
167
+ items && items.length && lists.push(items);
168
+ items = null;
169
+ }
170
+ return true;
171
+ });
172
+ items && items.length && lists.push(items);
173
+
174
+ lists = lists.filter((items) => items.length > 0);
175
+ if (!lists.length) {
176
+ return tr;
177
+ }
178
+
179
+ lists.sort((a, b) => {
180
+ const pa = nullthrows(a[0]).pos;
181
+ const pb = nullthrows(b[0]).pos;
182
+ return pa >= pb ? 1 : -1;
183
+ });
184
+
185
+ lists.reverse();
186
+
187
+ lists.forEach((items) => {
188
+ tr = wrapItemsWithListInternal(
189
+ tr,
190
+ schema,
191
+ listNodeType,
192
+ items,
193
+ listStyleType
194
+ );
195
+ });
196
+
197
+ return tr;
198
+ }
199
+
200
+ function wrapItemsWithListInternal(
201
+ tr: Transform,
202
+ schema: Schema,
203
+ listNodeType: NodeType,
204
+ items: Array<{ node: Node, pos: number }>,
205
+ listStyleType: string
206
+ ): Transform {
207
+ const initialTr = tr;
208
+ const paragraph = schema.nodes[PARAGRAPH];
209
+ const listItem = schema.nodes[LIST_ITEM];
210
+
211
+ if (!paragraph || !listItem) {
212
+ return tr;
213
+ }
214
+
215
+ const paragraphNodes = [];
216
+ items.forEach((item) => {
217
+ const { node, pos } = item;
218
+ // Temporarily annotate each node with an unique ID.
219
+ const uniqueID = {};
220
+ const nodeAttrs = { ...node.attrs, id: uniqueID };
221
+ // Replace the original node with the node annotated by the uniqueID.
222
+ tr = tr.setNodeMarkup(pos, paragraph, nodeAttrs, node.marks);
223
+ paragraphNodes.push(tr.doc.nodeAt(pos));
224
+ });
225
+
226
+ const firstNode = paragraphNodes[0];
227
+ const lastNode = paragraphNodes[paragraphNodes.length - 1];
228
+ if (!firstNode || !lastNode) {
229
+ return initialTr;
230
+ }
231
+
232
+ const firstNodeID = firstNode.attrs.id;
233
+ const lastNodeID = lastNode.attrs.id;
234
+ if (!firstNodeID || !lastNodeID) {
235
+ return initialTr;
236
+ }
237
+
238
+ let fromPos = null;
239
+ let toPos = null;
240
+ tr.doc.descendants((node, pos) => {
241
+ const nodeID = node.attrs.id;
242
+ if (nodeID === firstNodeID) {
243
+ fromPos = pos;
244
+ }
245
+ if (nodeID === lastNodeID) {
246
+ toPos = pos + node.nodeSize;
247
+ }
248
+ return fromPos === null || toPos === null;
249
+ });
250
+
251
+ if (fromPos === null || toPos === null) {
252
+ return initialTr;
253
+ }
254
+
255
+ const listItemNodes = [];
256
+ items.forEach((item) => {
257
+ const { node } = item;
258
+ // Restore the annotated nodes with the copy of the original ones.
259
+ const paragraphNode = paragraph.create(
260
+ node.attrs,
261
+ node.content,
262
+ node.marks
263
+ );
264
+ const listItemNode = listItem.create(
265
+ node.attrs,
266
+ Fragment.from(paragraphNode)
267
+ );
268
+ listItemNodes.push(listItemNode);
269
+ });
270
+
271
+ const listNodeAttrs = { indent: 0, start: 1, type: listStyleType };
272
+
273
+ const $fromPos = tr.doc.resolve(fromPos);
274
+ const $toPos = tr.doc.resolve(toPos);
275
+
276
+ const hasSameListNodeBefore =
277
+ $fromPos.nodeBefore &&
278
+ $fromPos.nodeBefore.type === listNodeType &&
279
+ $fromPos.nodeBefore.attrs.indent === 0;
280
+
281
+ const hasSameListNodeAfter =
282
+ $toPos.nodeAfter &&
283
+ $toPos.nodeAfter.type === listNodeType &&
284
+ $toPos.nodeAfter.attrs.indent === 0;
285
+
286
+ if (hasSameListNodeBefore) {
287
+ tr = tr.delete(fromPos, toPos);
288
+ tr = tr.insert(fromPos - 1, Fragment.from(listItemNodes));
289
+ if (hasSameListNodeAfter) {
290
+ tr = tr.delete(toPos + 1, toPos + 3);
291
+ }
292
+ } else if (hasSameListNodeAfter) {
293
+ tr = tr.delete(fromPos, toPos);
294
+ tr = tr.insert(fromPos + 1, Fragment.from(listItemNodes));
295
+ } else {
296
+ const listNode = listNodeType.create(
297
+ listNodeAttrs,
298
+ Fragment.from(listItemNodes)
299
+ );
300
+ tr = tr.delete(fromPos, toPos);
301
+ tr = tr.insert(fromPos, Fragment.from(listNode));
302
+ }
303
+
304
+ return tr;
305
+ }
306
+
307
+ // [FS] IRAD-966 2020-05-20
308
+ // Fix: Toggling issue for Multi-level list.
309
+
310
+ function unwrapNodesFromSelection(
311
+ tr: Transform,
312
+ listNodePos: number,
313
+ nodes: Node,
314
+ unwrapParagraphNode?: Node,
315
+ from: number,
316
+ to: number
317
+ ): Transform {
318
+ const contentBlocksBefore = [];
319
+ const contentBlocksSelected = [];
320
+ const contentBlocksAfter = [];
321
+ const paragraph = nodes[PARAGRAPH];
322
+ const listItem = nodes[LIST_ITEM];
323
+ const listNode = tr.doc.nodeAt(listNodePos);
324
+
325
+ tr.doc.nodesBetween(
326
+ listNodePos,
327
+ listNodePos + listNode.nodeSize,
328
+ (node, pos, parentNode, index) => {
329
+ if (node.type !== paragraph) {
330
+ return true;
331
+ }
332
+ const block = {
333
+ node,
334
+ pos,
335
+ parentNode,
336
+ index,
337
+ };
338
+
339
+ if (pos + node.nodeSize <= from) {
340
+ contentBlocksBefore.push(block);
341
+ } else if (pos > to) {
342
+ contentBlocksAfter.push(block);
343
+ } else {
344
+ contentBlocksSelected.push(block);
345
+ }
346
+ return false;
347
+ }
348
+ );
349
+
350
+ if (!contentBlocksSelected.length) {
351
+ return tr;
352
+ }
353
+
354
+ tr = tr.delete(listNodePos, listNodePos + listNode.nodeSize);
355
+
356
+ const listNodeType = listNode.type;
357
+ const attrs = { indent: listNode.attrs.indent, start: 1 };
358
+
359
+ if (contentBlocksAfter.length) {
360
+ const nodes = contentBlocksAfter.map((block) => {
361
+ return listItem.create({}, Fragment.from(block.node));
362
+ });
363
+ const frag = Fragment.from(
364
+ listNodeType.create(attrs, Fragment.from(nodes))
365
+ );
366
+ tr = tr.insert(listNodePos, frag);
367
+ }
368
+
369
+ if (contentBlocksSelected.length) {
370
+ const nodes = contentBlocksSelected.map((block) => {
371
+ if (unwrapParagraphNode) {
372
+ return unwrapParagraphNode(block.node);
373
+ } else {
374
+ return block.node;
375
+ }
376
+ });
377
+ const frag = Fragment.from(nodes);
378
+ tr = tr.insert(listNodePos, frag);
379
+ }
380
+
381
+ if (contentBlocksBefore.length) {
382
+ const nodes = contentBlocksBefore.map((block) => {
383
+ return listItem.create({}, Fragment.from(block.node));
384
+ });
385
+ const frag = Fragment.from(
386
+ listNodeType.create(attrs, Fragment.from(nodes))
387
+ );
388
+ tr = tr.insert(listNodePos, frag);
389
+ }
390
+
391
+ return tr;
392
+ }
393
+
394
+ function unwrapNodesFromListInternal(
395
+ memo: SelectionMemo,
396
+ listNodePos: number,
397
+ unwrapParagraphNode?: ?(Node) => Node
398
+ ): Transform {
399
+ const { schema } = memo;
400
+ let { tr } = memo;
401
+
402
+ if (!tr.doc || !tr.selection) {
403
+ return tr;
404
+ }
405
+
406
+ const { nodes } = schema;
407
+ const paragraph = nodes[PARAGRAPH];
408
+ const listItem = nodes[LIST_ITEM];
409
+
410
+ if (!listItem || !paragraph) {
411
+ return tr;
412
+ }
413
+
414
+ const listNode = tr.doc.nodeAt(listNodePos);
415
+ if (!isListNode(listNode)) {
416
+ return tr;
417
+ }
418
+
419
+ const initialSelection = tr.selection;
420
+ const { from, to } = initialSelection;
421
+
422
+ const listNodePoses = [];
423
+
424
+ // keep all list type nodes starting position
425
+ tr.doc.nodesBetween(from, to, (node, pos) => {
426
+ if (isListNode(node)) {
427
+ listNodePoses.push(pos);
428
+ }
429
+ });
430
+
431
+ if (from === to && from < 1) {
432
+ return tr;
433
+ }
434
+ // Unwraps all selected list
435
+ listNodePoses
436
+ .sort(compareNumber)
437
+ .reverse()
438
+ .forEach((pos) => {
439
+ tr = unwrapNodesFromSelection(
440
+ tr,
441
+ pos,
442
+ nodes,
443
+ unwrapParagraphNode,
444
+ from,
445
+ to
446
+ );
447
+ });
448
+
449
+ return tr;
450
+ }