@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
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = transformAndPreserveTextSelection;
7
6
  exports.bpfrpt_proptype_SelectionMemo = void 0;
7
+ exports.default = transformAndPreserveTextSelection;
8
8
 
9
9
  var _prosemirrorModel = require("prosemirror-model");
10
10
 
@@ -1,151 +1,151 @@
1
- import { Fragment, Schema } from 'prosemirror-model';
2
- import { TextSelection } from 'prosemirror-state';
3
- import { Transform } from 'prosemirror-transform';
4
-
5
- import { MARK_TEXT_SELECTION } from './MarkNames';
6
- import { PARAGRAPH, TEXT } from './NodeNames';
7
- import applyMark from './applyMark';
8
- import uuid from './ui/uuid';
9
-
10
- export type SelectionMemo = {
11
- schema: Schema,
12
- tr: Transform,
13
- };
14
-
15
- // Text used to create temporary selection.
16
- // This assumes that no user could enter such string manually.
17
- const PLACEHOLDER_TEXT = `[\u200b\u2800PLACEHOLDER_TEXT_${uuid()}\u2800\u200b]`;
18
-
19
- // Perform the transform without losing the perceived text selection.
20
- // The way it works is that this will annotate teh current selection with
21
- // temporary marks and restores the selection with those marks after performing
22
- // the transform.
23
- export default function transformAndPreserveTextSelection(
24
- tr: Transform,
25
- schema: Schema,
26
- fn: (memo: SelectionMemo) => Transform
27
- ): Transform {
28
- if (tr.getMeta('dryrun')) {
29
- // There's no need to preserve the selection in dryrun mode.
30
- return fn({ tr, schema });
31
- }
32
-
33
- const { selection, doc } = tr;
34
- const markType = schema.marks[MARK_TEXT_SELECTION];
35
- if (!markType || !selection || !doc) {
36
- return tr;
37
- }
38
-
39
- if (!(selection instanceof TextSelection)) {
40
- return tr;
41
- }
42
-
43
- const { from, to } = selection;
44
-
45
- // Mark current selection so that we could resume the selection later
46
- // after changing the whole list.
47
- let fromOffset = 0;
48
- let toOffset = 0;
49
- let placeholderTextNode;
50
-
51
- if (from === to) {
52
- if (from === 0) {
53
- return tr;
54
- }
55
- // Selection is collapsed, create a temporary selection that the marks can
56
- // be applied to.
57
- const currentNode = tr.doc.nodeAt(from);
58
- const prevNode = tr.doc.nodeAt(from - 1);
59
- const nextNode = tr.doc.nodeAt(from + 1);
60
-
61
- if (
62
- !currentNode &&
63
- prevNode &&
64
- prevNode.type.name === PARAGRAPH &&
65
- !prevNode.firstChild
66
- ) {
67
- // The selection is at a paragraph node which has no content.
68
- // Create a temporary text and move selection into that text.
69
- placeholderTextNode = schema.text(PLACEHOLDER_TEXT);
70
- tr = tr.insert(from, Fragment.from(placeholderTextNode));
71
- toOffset = 1;
72
- } else if (!currentNode && prevNode && prevNode.type.name === TEXT) {
73
- // The selection is at the end of the text node. Select the last
74
- // character instead.
75
- fromOffset = -1;
76
- } else if (prevNode && currentNode && currentNode.type === prevNode.type) {
77
- // Ensure that the mark is applied to the same type of node.
78
- fromOffset = -1;
79
- } else if (nextNode && currentNode && currentNode.type === nextNode.type) {
80
- toOffset = 1;
81
- } else if (nextNode) {
82
- // Could not find the same type of node, assume the next node is safe to use.
83
- toOffset = 1;
84
- } else if (prevNode) {
85
- // Could not find the same type of node, assume the next node is safe to use.
86
- fromOffset = -1;
87
- } else {
88
- // Selection can't be safely preserved.
89
- return tr;
90
- }
91
- tr = tr.setSelection(
92
- // [FS] IRAD-1005 2020-07-29
93
- // Upgrade outdated packages.
94
- // reset selection using the latest doc.
95
- // This fixes IRAD-1023
96
- TextSelection.create(tr.doc, from + fromOffset, to + toOffset)
97
- );
98
- }
99
-
100
- // This is an unique ID (by reference).
101
- const id = {};
102
- const findMark = (mark) => mark.attrs.id === id;
103
-
104
- const findMarkRange = () => {
105
- let markFrom = 0;
106
- let markTo = 0;
107
- tr.doc.descendants((node, pos) => {
108
- if (node.marks && node.marks.find(findMark)) {
109
- markFrom = markFrom === 0 ? pos : markFrom;
110
- markTo = pos + node.nodeSize;
111
- }
112
- return true;
113
- });
114
- return {
115
- from: markFrom,
116
- to: markTo,
117
- };
118
- };
119
-
120
- // TODO: This has side-effect. It will cause `tr.docChanged` to be `true`.
121
- // No matter whether `fn({tr, schema})` did change the doc or not.
122
- tr = applyMark(tr, schema, markType, { id });
123
- tr = fn({ tr, schema });
124
-
125
- const markRange = findMarkRange();
126
- const selectionRange = {
127
- from: Math.max(0, markRange.from - fromOffset),
128
- to: Math.max(0, markRange.to - toOffset),
129
- };
130
-
131
- selectionRange.to = Math.max(0, selectionRange.from, selectionRange.to);
132
-
133
- tr = tr.removeMark(markRange.from, markRange.to, markType);
134
-
135
- if (placeholderTextNode) {
136
- tr.doc.descendants((node, pos) => {
137
- if (node.type.name === TEXT && node.text === PLACEHOLDER_TEXT) {
138
- tr = tr.delete(pos, pos + PLACEHOLDER_TEXT.length);
139
- placeholderTextNode = null;
140
- return false;
141
- }
142
- return true;
143
- });
144
- }
145
-
146
- tr = tr.setSelection(
147
- TextSelection.create(tr.doc, selectionRange.from, selectionRange.to)
148
- );
149
-
150
- return tr;
151
- }
1
+ import { Fragment, Schema } from 'prosemirror-model';
2
+ import { TextSelection } from 'prosemirror-state';
3
+ import { Transform } from 'prosemirror-transform';
4
+
5
+ import { MARK_TEXT_SELECTION } from './MarkNames';
6
+ import { PARAGRAPH, TEXT } from './NodeNames';
7
+ import applyMark from './applyMark';
8
+ import uuid from './ui/uuid';
9
+
10
+ export type SelectionMemo = {
11
+ schema: Schema,
12
+ tr: Transform,
13
+ };
14
+
15
+ // Text used to create temporary selection.
16
+ // This assumes that no user could enter such string manually.
17
+ const PLACEHOLDER_TEXT = `[\u200b\u2800PLACEHOLDER_TEXT_${uuid()}\u2800\u200b]`;
18
+
19
+ // Perform the transform without losing the perceived text selection.
20
+ // The way it works is that this will annotate teh current selection with
21
+ // temporary marks and restores the selection with those marks after performing
22
+ // the transform.
23
+ export default function transformAndPreserveTextSelection(
24
+ tr: Transform,
25
+ schema: Schema,
26
+ fn: (memo: SelectionMemo) => Transform
27
+ ): Transform {
28
+ if (tr.getMeta('dryrun')) {
29
+ // There's no need to preserve the selection in dryrun mode.
30
+ return fn({ tr, schema });
31
+ }
32
+
33
+ const { selection, doc } = tr;
34
+ const markType = schema.marks[MARK_TEXT_SELECTION];
35
+ if (!markType || !selection || !doc) {
36
+ return tr;
37
+ }
38
+
39
+ if (!(selection instanceof TextSelection)) {
40
+ return tr;
41
+ }
42
+
43
+ const { from, to } = selection;
44
+
45
+ // Mark current selection so that we could resume the selection later
46
+ // after changing the whole list.
47
+ let fromOffset = 0;
48
+ let toOffset = 0;
49
+ let placeholderTextNode;
50
+
51
+ if (from === to) {
52
+ if (from === 0) {
53
+ return tr;
54
+ }
55
+ // Selection is collapsed, create a temporary selection that the marks can
56
+ // be applied to.
57
+ const currentNode = tr.doc.nodeAt(from);
58
+ const prevNode = tr.doc.nodeAt(from - 1);
59
+ const nextNode = tr.doc.nodeAt(from + 1);
60
+
61
+ if (
62
+ !currentNode &&
63
+ prevNode &&
64
+ prevNode.type.name === PARAGRAPH &&
65
+ !prevNode.firstChild
66
+ ) {
67
+ // The selection is at a paragraph node which has no content.
68
+ // Create a temporary text and move selection into that text.
69
+ placeholderTextNode = schema.text(PLACEHOLDER_TEXT);
70
+ tr = tr.insert(from, Fragment.from(placeholderTextNode));
71
+ toOffset = 1;
72
+ } else if (!currentNode && prevNode && prevNode.type.name === TEXT) {
73
+ // The selection is at the end of the text node. Select the last
74
+ // character instead.
75
+ fromOffset = -1;
76
+ } else if (prevNode && currentNode && currentNode.type === prevNode.type) {
77
+ // Ensure that the mark is applied to the same type of node.
78
+ fromOffset = -1;
79
+ } else if (nextNode && currentNode && currentNode.type === nextNode.type) {
80
+ toOffset = 1;
81
+ } else if (nextNode) {
82
+ // Could not find the same type of node, assume the next node is safe to use.
83
+ toOffset = 1;
84
+ } else if (prevNode) {
85
+ // Could not find the same type of node, assume the next node is safe to use.
86
+ fromOffset = -1;
87
+ } else {
88
+ // Selection can't be safely preserved.
89
+ return tr;
90
+ }
91
+ tr = tr.setSelection(
92
+ // [FS] IRAD-1005 2020-07-29
93
+ // Upgrade outdated packages.
94
+ // reset selection using the latest doc.
95
+ // This fixes IRAD-1023
96
+ TextSelection.create(tr.doc, from + fromOffset, to + toOffset)
97
+ );
98
+ }
99
+
100
+ // This is an unique ID (by reference).
101
+ const id = {};
102
+ const findMark = (mark) => mark.attrs.id === id;
103
+
104
+ const findMarkRange = () => {
105
+ let markFrom = 0;
106
+ let markTo = 0;
107
+ tr.doc.descendants((node, pos) => {
108
+ if (node.marks && node.marks.find(findMark)) {
109
+ markFrom = markFrom === 0 ? pos : markFrom;
110
+ markTo = pos + node.nodeSize;
111
+ }
112
+ return true;
113
+ });
114
+ return {
115
+ from: markFrom,
116
+ to: markTo,
117
+ };
118
+ };
119
+
120
+ // TODO: This has side-effect. It will cause `tr.docChanged` to be `true`.
121
+ // No matter whether `fn({tr, schema})` did change the doc or not.
122
+ tr = applyMark(tr, schema, markType, { id });
123
+ tr = fn({ tr, schema });
124
+
125
+ const markRange = findMarkRange();
126
+ const selectionRange = {
127
+ from: Math.max(0, markRange.from - fromOffset),
128
+ to: Math.max(0, markRange.to - toOffset),
129
+ };
130
+
131
+ selectionRange.to = Math.max(0, selectionRange.from, selectionRange.to);
132
+
133
+ tr = tr.removeMark(markRange.from, markRange.to, markType);
134
+
135
+ if (placeholderTextNode) {
136
+ tr.doc.descendants((node, pos) => {
137
+ if (node.type.name === TEXT && node.text === PLACEHOLDER_TEXT) {
138
+ tr = tr.delete(pos, pos + PLACEHOLDER_TEXT.length);
139
+ placeholderTextNode = null;
140
+ return false;
141
+ }
142
+ return true;
143
+ });
144
+ }
145
+
146
+ tr = tr.setSelection(
147
+ TextSelection.create(tr.doc, selectionRange.from, selectionRange.to)
148
+ );
149
+
150
+ return tr;
151
+ }
@@ -17,9 +17,9 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
17
17
 
18
18
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
19
 
20
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
20
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
21
21
 
22
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
22
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
23
23
 
24
24
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
25
25
 
@@ -1,64 +1,64 @@
1
- // @flow
2
-
3
- import * as React from 'react';
4
- import PropTypes from 'prop-types';
5
- import './czi-form.css';
6
-
7
- class AlertInfo extends React.PureComponent<any, any> {
8
- _unmounted = false;
9
-
10
- constructor(props: any) {
11
- super(props);
12
- }
13
-
14
- // [FS] IRAD-1005 2020-07-07
15
- // Upgrade outdated packages.
16
- // To take care of the property type declaration.
17
- static propsTypes = {
18
- initialValue: PropTypes.object,
19
- close: function (props: any, propName: string) {
20
- const fn = props[propName];
21
- if (
22
- !fn.prototype ||
23
- (typeof fn.prototype.constructor !== 'function' &&
24
- fn.prototype.constructor.length !== 1)
25
- ) {
26
- return new Error(
27
- propName + ' must be a function with 1 arg of type ImageLike'
28
- );
29
- }
30
- return null;
31
- },
32
- };
33
-
34
- state = {
35
- ...(this.props.initialValue || {}),
36
- validValue: null,
37
- };
38
-
39
- componentWillUnmount(): void {
40
- this._unmounted = true;
41
- }
42
-
43
- render(): React.Element<any> {
44
- const title = this.props.title || 'Document Error!';
45
- const content =
46
- this.props.content ||
47
- 'Unable to load the document. Have issues in Json format, please verify...';
48
- return (
49
- <div className="licit-alert">
50
- <span className="closebtn" onClick={this._cancel}>
51
- &times;
52
- </span>
53
- <strong>{title}</strong>
54
- <span>{content}</span>
55
- </div>
56
- );
57
- }
58
-
59
- _cancel = (): void => {
60
- this.props.close();
61
- };
62
- }
63
-
64
- export default AlertInfo;
1
+ // @flow
2
+
3
+ import * as React from 'react';
4
+ import PropTypes from 'prop-types';
5
+ import './czi-form.css';
6
+
7
+ class AlertInfo extends React.PureComponent<any, any> {
8
+ _unmounted = false;
9
+
10
+ constructor(props: any) {
11
+ super(props);
12
+ }
13
+
14
+ // [FS] IRAD-1005 2020-07-07
15
+ // Upgrade outdated packages.
16
+ // To take care of the property type declaration.
17
+ static propsTypes = {
18
+ initialValue: PropTypes.object,
19
+ close: function (props: any, propName: string) {
20
+ const fn = props[propName];
21
+ if (
22
+ !fn.prototype ||
23
+ (typeof fn.prototype.constructor !== 'function' &&
24
+ fn.prototype.constructor.length !== 1)
25
+ ) {
26
+ return new Error(
27
+ propName + ' must be a function with 1 arg of type ImageLike'
28
+ );
29
+ }
30
+ return null;
31
+ },
32
+ };
33
+
34
+ state = {
35
+ ...(this.props.initialValue || {}),
36
+ validValue: null,
37
+ };
38
+
39
+ componentWillUnmount(): void {
40
+ this._unmounted = true;
41
+ }
42
+
43
+ render(): React.Element<any> {
44
+ const title = this.props.title || 'Document Error!';
45
+ const content =
46
+ this.props.content ||
47
+ 'Unable to load the document. Have issues in Json format, please verify...';
48
+ return (
49
+ <div className="licit-alert">
50
+ <span className="closebtn" onClick={this._cancel}>
51
+ &times;
52
+ </span>
53
+ <strong>{title}</strong>
54
+ <span>{content}</span>
55
+ </div>
56
+ );
57
+ }
58
+
59
+ _cancel = (): void => {
60
+ this.props.close();
61
+ };
62
+ }
63
+
64
+ export default AlertInfo;
@@ -1,66 +1,66 @@
1
- // @flow
2
-
3
- import { Node } from 'prosemirror-model';
4
- import { Decoration } from 'prosemirror-view';
5
- import * as React from 'react';
6
-
7
- import {
8
- ATTRIBUTE_BOOKMARK_ID,
9
- ATTRIBUTE_BOOKMARK_VISIBLE,
10
- } from './../BookmarkNodeSpec';
11
- import CustomNodeView from './CustomNodeView';
12
- import Icon from './Icon';
13
-
14
- import './czi-bookmark-view.css';
15
-
16
- import type { NodeViewProps } from './CustomNodeView';
17
-
18
- class BookmarkViewBody extends React.PureComponent<any, any> {
19
- props: NodeViewProps;
20
-
21
- render(): React.Element<any> {
22
- const { id, visible } = this.props.node.attrs;
23
- const icon = id && visible ? Icon.get('bookmark') : null;
24
- return <span onClick={this._onClick}>{icon}</span>;
25
- }
26
-
27
- _onClick = (e: SyntheticEvent<>): void => {
28
- e.preventDefault();
29
- const { id } = this.props.node.attrs;
30
- const hash = '#' + id;
31
- if (window.location.hash !== hash) {
32
- window.location.hash = hash;
33
- }
34
- };
35
- }
36
-
37
- class BookmarkNodeView extends CustomNodeView {
38
- // @override
39
- createDOMElement(): HTMLElement {
40
- const el = document.createElement('a');
41
- el.className = 'czi-bookmark-view';
42
- this._updateDOM(el);
43
- return el;
44
- }
45
-
46
- // @override
47
- update(node: Node, decorations: Array<Decoration>): boolean {
48
- super.update(node, decorations);
49
- return true;
50
- }
51
-
52
- // @override
53
- renderReactComponent(): React.Element<any> {
54
- return <BookmarkViewBody {...this.props} />;
55
- }
56
-
57
- _updateDOM(el: HTMLElement): void {
58
- const { id, visible } = this.props.node.attrs;
59
- el.setAttribute('id', id);
60
- el.setAttribute('title', id);
61
- el.setAttribute(ATTRIBUTE_BOOKMARK_ID, id);
62
- visible && el.setAttribute(ATTRIBUTE_BOOKMARK_VISIBLE, 'true');
63
- }
64
- }
65
-
66
- export default BookmarkNodeView;
1
+ // @flow
2
+
3
+ import { Node } from 'prosemirror-model';
4
+ import { Decoration } from 'prosemirror-view';
5
+ import * as React from 'react';
6
+
7
+ import {
8
+ ATTRIBUTE_BOOKMARK_ID,
9
+ ATTRIBUTE_BOOKMARK_VISIBLE,
10
+ } from './../BookmarkNodeSpec';
11
+ import CustomNodeView from './CustomNodeView';
12
+ import Icon from './Icon';
13
+
14
+ import './czi-bookmark-view.css';
15
+
16
+ import type { NodeViewProps } from './CustomNodeView';
17
+
18
+ class BookmarkViewBody extends React.PureComponent<any, any> {
19
+ props: NodeViewProps;
20
+
21
+ render(): React.Element<any> {
22
+ const { id, visible } = this.props.node.attrs;
23
+ const icon = id && visible ? Icon.get('bookmark') : null;
24
+ return <span onClick={this._onClick}>{icon}</span>;
25
+ }
26
+
27
+ _onClick = (e: SyntheticEvent<>): void => {
28
+ e.preventDefault();
29
+ const { id } = this.props.node.attrs;
30
+ const hash = '#' + id;
31
+ if (window.location.hash !== hash) {
32
+ window.location.hash = hash;
33
+ }
34
+ };
35
+ }
36
+
37
+ class BookmarkNodeView extends CustomNodeView {
38
+ // @override
39
+ createDOMElement(): HTMLElement {
40
+ const el = document.createElement('a');
41
+ el.className = 'czi-bookmark-view';
42
+ this._updateDOM(el);
43
+ return el;
44
+ }
45
+
46
+ // @override
47
+ update(node: Node, decorations: Array<Decoration>): boolean {
48
+ super.update(node, decorations);
49
+ return true;
50
+ }
51
+
52
+ // @override
53
+ renderReactComponent(): React.Element<any> {
54
+ return <BookmarkViewBody {...this.props} />;
55
+ }
56
+
57
+ _updateDOM(el: HTMLElement): void {
58
+ const { id, visible } = this.props.node.attrs;
59
+ el.setAttribute('id', id);
60
+ el.setAttribute('title', id);
61
+ el.setAttribute(ATTRIBUTE_BOOKMARK_ID, id);
62
+ visible && el.setAttribute(ATTRIBUTE_BOOKMARK_VISIBLE, 'true');
63
+ }
64
+ }
65
+
66
+ export default BookmarkNodeView;