@modusoperandi/licit 1.0.4 → 1.0.7

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 (360) hide show
  1. package/BlockquoteInsertNewLineCommand.js +16 -18
  2. package/BlockquoteInsertNewLineCommand.js.flow +76 -77
  3. package/BlockquoteNodeSpec.js +3 -4
  4. package/BlockquoteNodeSpec.js.flow +29 -30
  5. package/BlockquoteToggleCommand.js +16 -17
  6. package/BlockquoteToggleCommand.js.flow +56 -56
  7. package/BookmarkNodeSpec.js +2 -2
  8. package/BookmarkNodeSpec.js.flow +39 -39
  9. package/BulletListNodeSpec.js.flow +61 -61
  10. package/CZIProseMirror.js.flow +90 -90
  11. package/CodeBlockCommand.js +17 -18
  12. package/CodeBlockCommand.js.flow +65 -65
  13. package/CodeBlockNodeSpec.js.flow +24 -24
  14. package/CodeMarkSpec.js.flow +14 -14
  15. package/ContentPlaceholderPlugin.js +20 -21
  16. package/ContentPlaceholderPlugin.js.flow +185 -187
  17. package/CursorPlaceholderPlugin.js +11 -11
  18. package/CursorPlaceholderPlugin.js.flow +115 -115
  19. package/DocLayoutCommand.js +18 -21
  20. package/DocLayoutCommand.js.flow +97 -99
  21. package/DocNodeSpec.js.flow +64 -64
  22. package/EMMarkSpec.js.flow +14 -14
  23. package/EditorCommands.js.flow +126 -126
  24. package/EditorKeyMap.js +0 -1
  25. package/EditorKeyMap.js.flow +185 -187
  26. package/EditorMarks.js +2 -2
  27. package/EditorMarks.js.flow +71 -71
  28. package/EditorNodes.js +2 -3
  29. package/EditorNodes.js.flow +58 -59
  30. package/EditorPageLayoutPlugin.js +10 -10
  31. package/EditorPageLayoutPlugin.js.flow +67 -67
  32. package/EditorPlugins.js.flow +8 -8
  33. package/EditorSchema.js.flow +12 -12
  34. package/EditorState.js.flow +7 -7
  35. package/FontSizeMarkSpec.js.flow +49 -49
  36. package/FontTypeMarkSpec.js +1 -1
  37. package/FontTypeMarkSpec.js.flow +80 -80
  38. package/HTMLMutator.js +6 -7
  39. package/HTMLMutator.js.flow +59 -59
  40. package/HardBreakNodeSpec.js.flow +15 -15
  41. package/HeadingNodeSpec.js +3 -13
  42. package/HeadingNodeSpec.js.flow +42 -52
  43. package/HistoryRedoCommand.js +15 -16
  44. package/HistoryRedoCommand.js.flow +41 -41
  45. package/HistoryUndoCommand.js +15 -16
  46. package/HistoryUndoCommand.js.flow +41 -41
  47. package/HorizontalRuleCommand.js +15 -16
  48. package/HorizontalRuleCommand.js.flow +71 -71
  49. package/HorizontalRuleNodeSpec.js.flow +39 -39
  50. package/ImageUploadPlaceholderPlugin.js +15 -17
  51. package/ImageUploadPlaceholderPlugin.js.flow +190 -192
  52. package/LinkMarkSpec.js +6 -1
  53. package/LinkMarkSpec.js.flow +37 -32
  54. package/LinkSetURLCommand.js +130 -60
  55. package/LinkSetURLCommand.js.flow +141 -117
  56. package/LinkTooltipPlugin.js +122 -34
  57. package/LinkTooltipPlugin.js.flow +261 -190
  58. package/ListItemInsertNewLineCommand.js +16 -18
  59. package/ListItemInsertNewLineCommand.js.flow +76 -77
  60. package/ListItemMergeCommand.js +24 -24
  61. package/ListItemMergeCommand.js.flow +198 -199
  62. package/ListItemNodeSpec.js.flow +52 -52
  63. package/ListSplitCommand.js +15 -16
  64. package/ListSplitCommand.js.flow +54 -54
  65. package/ListToggleCommand.js +19 -20
  66. package/ListToggleCommand.js.flow +99 -99
  67. package/MarkNames.js.flow +18 -18
  68. package/MarksClearCommand.js +17 -18
  69. package/MarksClearCommand.js.flow +65 -65
  70. package/MathEditCommand.js +17 -19
  71. package/MathEditCommand.js.flow +119 -120
  72. package/MathNodeSpec.js.flow +46 -46
  73. package/NodeNames.js.flow +23 -23
  74. package/OrderedListNodeSpec.js +2 -2
  75. package/OrderedListNodeSpec.js.flow +132 -132
  76. package/ParagraphNodeSpec.js +11 -2
  77. package/ParagraphNodeSpec.js.flow +163 -156
  78. package/ParagraphSpacingCommand.js +21 -23
  79. package/ParagraphSpacingCommand.js.flow +139 -144
  80. package/PrintCommand.js +17 -18
  81. package/PrintCommand.js.flow +53 -53
  82. package/SelectionPlaceholderPlugin.js +11 -11
  83. package/SelectionPlaceholderPlugin.js.flow +131 -131
  84. package/SpacerMarkSpec.js +2 -2
  85. package/SpacerMarkSpec.js.flow +47 -47
  86. package/StrikeMarkSpec.js.flow +21 -21
  87. package/StrongMarkSpec.js.flow +25 -25
  88. package/StyleView.js +5 -7
  89. package/StyleView.js.flow +18 -19
  90. package/TableBackgroundColorCommand.js +34 -23
  91. package/TableBackgroundColorCommand.js.flow +80 -75
  92. package/TableBorderColorCommand.js +34 -23
  93. package/TableBorderColorCommand.js.flow +81 -75
  94. package/TableCellColorCommand.js +20 -21
  95. package/TableCellColorCommand.js.flow +74 -75
  96. package/TableCellMenuPlugin.js +19 -19
  97. package/TableCellMenuPlugin.js.flow +130 -132
  98. package/TableInsertCommand.js +19 -22
  99. package/TableInsertCommand.js.flow +118 -120
  100. package/TableMergeCellsCommand.js +19 -19
  101. package/TableMergeCellsCommand.js.flow +113 -112
  102. package/TableNodesSpecs.js +4 -2
  103. package/TableNodesSpecs.js.flow +80 -78
  104. package/TablePlugins.js.flow +14 -14
  105. package/TableResizePlugin.js +20 -20
  106. package/TableResizePlugin.js.flow +631 -631
  107. package/TextColorMarkSpec.js.flow +35 -35
  108. package/TextHighlightMarkSpec.js.flow +38 -38
  109. package/TextInsertTabSpaceCommand.js +15 -16
  110. package/TextInsertTabSpaceCommand.js.flow +106 -106
  111. package/TextNoWrapMarkSpec.js.flow +14 -14
  112. package/TextNodeSpec.js.flow +7 -7
  113. package/TextSelectionMarkSpec.js.flow +24 -24
  114. package/TextSubMarkSpec.js.flow +20 -20
  115. package/TextSuperMarkSpec.js.flow +20 -20
  116. package/TextUnderlineMarkSpec.js.flow +27 -27
  117. package/Types.js +6 -0
  118. package/Types.js.flow +77 -75
  119. package/WebFontLoader.js +6 -7
  120. package/WebFontLoader.js.flow +22 -22
  121. package/blockQuoteInputRule.js.flow +36 -36
  122. package/bom.xml +17223 -25722
  123. package/browser.js.flow +7 -7
  124. package/buildEditorPlugins.js +6 -7
  125. package/buildEditorPlugins.js.flow +49 -49
  126. package/buildInputRules.js +8 -4
  127. package/buildInputRules.js.flow +85 -81
  128. package/client/CollabConnector.js +20 -20
  129. package/client/CollabConnector.js.flow +90 -90
  130. package/client/EditorConnection.js +10 -9
  131. package/client/EditorConnection.js.flow +324 -323
  132. package/client/Licit.js +78 -115
  133. package/client/Licit.js.flow +611 -643
  134. package/client/Licit.test.js +49 -39
  135. package/client/Licit.test.js.flow +104 -98
  136. package/client/Reporter.js +5 -6
  137. package/client/Reporter.js.flow +37 -37
  138. package/client/SimpleConnector.js +5 -5
  139. package/client/SimpleConnector.js.flow +61 -61
  140. package/client/http.js +0 -6
  141. package/client/http.js.flow +62 -70
  142. package/client/licit.css +12 -12
  143. package/client/throttle.js +8 -2
  144. package/client/throttle.js.flow +27 -27
  145. package/convertFromDOMElement.js +2 -4
  146. package/convertFromDOMElement.js.flow +33 -36
  147. package/convertFromHTML.js +2 -3
  148. package/convertFromHTML.js.flow +15 -17
  149. package/convertFromJSON.js +1 -2
  150. package/convertFromJSON.js.flow +55 -56
  151. package/convertToCSSPTValue.js +6 -10
  152. package/convertToCSSPTValue.js.flow +19 -22
  153. package/convertToJSON.js.flow +7 -7
  154. package/createCommand.js +16 -17
  155. package/createCommand.js.flow +62 -62
  156. package/createEditorKeyMap.js +2 -2
  157. package/createEditorKeyMap.js.flow +94 -94
  158. package/createEmptyEditorState.js +2 -3
  159. package/createEmptyEditorState.js.flow +29 -31
  160. package/createTableResizingPlugin.js +6 -6
  161. package/createTableResizingPlugin.js.flow +86 -86
  162. package/findActionableCell.js.flow +74 -74
  163. package/findActiveMark.js +1 -1
  164. package/findActiveMark.js.flow +32 -32
  165. package/hyphenize.js.flow +17 -17
  166. package/index.d.ts +165 -165
  167. package/index.js.flow +10 -10
  168. package/insertTable.js +0 -3
  169. package/insertTable.js.flow +54 -56
  170. package/isEditorStateEmpty.js.flow +32 -32
  171. package/isTableNode.js.flow +15 -15
  172. package/joinDown.js +1 -3
  173. package/joinDown.js.flow +25 -27
  174. package/joinListNode.js.flow +55 -55
  175. package/joinUp.js +1 -3
  176. package/joinUp.js.flow +37 -39
  177. package/keymaps.js.flow +185 -185
  178. package/lookUpElement.js +2 -1
  179. package/lookUpElement.js.flow +14 -14
  180. package/nodeAt.js.flow +12 -12
  181. package/normalizeHTML.js +3 -1
  182. package/normalizeHTML.js.flow +80 -78
  183. package/package.json +162 -156
  184. package/patchAnchorElements.js +1 -1
  185. package/patchAnchorElements.js.flow +38 -38
  186. package/patchBreakElements.js +3 -2
  187. package/patchBreakElements.js.flow +22 -22
  188. package/patchElementInlineStyles.js +1 -1
  189. package/patchElementInlineStyles.js.flow +92 -92
  190. package/patchListElements.js +4 -4
  191. package/patchListElements.js.flow +276 -276
  192. package/patchMathElements.js +5 -7
  193. package/patchMathElements.js.flow +58 -60
  194. package/patchParagraphElements.js.flow +20 -20
  195. package/patchStyleElements.js +1 -1
  196. package/patchStyleElements.js.flow +197 -196
  197. package/patchTableElements.js +2 -3
  198. package/patchTableElements.js.flow +88 -89
  199. package/rebaseDocWithSteps.js.flow +42 -42
  200. package/sanitizeURL.js +1 -1
  201. package/sanitizeURL.js.flow +13 -13
  202. package/splitListItem.js +3 -3
  203. package/splitListItem.js.flow +191 -191
  204. package/styles.css +19 -19
  205. package/styles0.css +29 -29
  206. package/toClosestFontPtSize.js.flow +22 -22
  207. package/toSafeHTMLDocument.js.flow +9 -9
  208. package/toggleBlockquote.js +4 -5
  209. package/toggleBlockquote.js.flow +101 -108
  210. package/toggleCodeBlock.js +6 -6
  211. package/toggleCodeBlock.js.flow +102 -102
  212. package/ui/AlertInfo.js +15 -16
  213. package/ui/AlertInfo.js.flow +64 -64
  214. package/ui/BookmarkNodeView.js +20 -21
  215. package/ui/BookmarkNodeView.js.flow +66 -66
  216. package/ui/CommandButton.js +15 -16
  217. package/ui/CommandButton.js.flow +68 -68
  218. package/ui/CommandMenu.js +19 -20
  219. package/ui/CommandMenu.js.flow +75 -75
  220. package/ui/CommandMenuButton.js +23 -25
  221. package/ui/CommandMenuButton.js.flow +130 -131
  222. package/ui/CustomEditorView.js +20 -20
  223. package/ui/CustomEditorView.js.flow +29 -28
  224. package/ui/CustomMenu.js +11 -12
  225. package/ui/CustomMenu.js.flow +17 -17
  226. package/ui/CustomMenuItem.js +16 -18
  227. package/ui/CustomMenuItem.js.flow +36 -36
  228. package/ui/CustomNodeView.js +29 -19
  229. package/ui/CustomNodeView.js.flow +207 -200
  230. package/ui/CustomRadioButton.js +18 -21
  231. package/ui/CustomRadioButton.js.flow +64 -65
  232. package/ui/DocLayoutEditor.js +18 -20
  233. package/ui/DocLayoutEditor.js.flow +145 -146
  234. package/ui/Editor.js +30 -28
  235. package/ui/Editor.js.flow +287 -288
  236. package/ui/EditorFrameset.js +13 -14
  237. package/ui/EditorFrameset.js.flow +81 -81
  238. package/ui/EditorToolbar.js +36 -42
  239. package/ui/EditorToolbar.js.flow +199 -218
  240. package/ui/EditorToolbarConfig.js +5 -5
  241. package/ui/EditorToolbarConfig.js.flow +164 -164
  242. package/ui/FontSizeCommandMenuButton.js +14 -15
  243. package/ui/FontSizeCommandMenuButton.js.flow +66 -66
  244. package/ui/FontTypeCommandMenuButton.js +15 -17
  245. package/ui/FontTypeCommandMenuButton.js.flow +60 -61
  246. package/ui/Frag.js +11 -12
  247. package/ui/Frag.js.flow +13 -13
  248. package/ui/Icon.js +21 -24
  249. package/ui/Icon.js.flow +89 -89
  250. package/ui/ImageInlineEditor.js +14 -15
  251. package/ui/ImageInlineEditor.js.flow +67 -67
  252. package/ui/KeyCodes.js.flow +12 -12
  253. package/ui/LinkTooltip.js +68 -34
  254. package/ui/LinkTooltip.js.flow +118 -85
  255. package/ui/LinkURLEditor.js +160 -43
  256. package/ui/LinkURLEditor.js.flow +243 -117
  257. package/ui/ListItemNodeView.js +6 -7
  258. package/ui/ListItemNodeView.js.flow +98 -98
  259. package/ui/ListTypeButton.js +23 -27
  260. package/ui/ListTypeButton.js.flow +128 -131
  261. package/ui/ListTypeCommandButton.js +14 -15
  262. package/ui/ListTypeCommandButton.js.flow +85 -85
  263. package/ui/ListTypeMenu.js +21 -22
  264. package/ui/ListTypeMenu.js.flow +70 -70
  265. package/ui/LoadingIndicator.js +11 -12
  266. package/ui/LoadingIndicator.js.flow +20 -20
  267. package/ui/MathEditor.js +17 -22
  268. package/ui/MathEditor.js.flow +72 -78
  269. package/ui/MathInlineEditor.js +20 -21
  270. package/ui/MathInlineEditor.js.flow +101 -102
  271. package/ui/MathNodeView.js +29 -30
  272. package/ui/MathNodeView.js.flow +176 -186
  273. package/ui/PasteMenu.js +19 -23
  274. package/ui/PasteMenu.js.flow +53 -57
  275. package/ui/ResizeObserver.js +1 -1
  276. package/ui/ResizeObserver.js.flow +106 -106
  277. package/ui/RichTextEditor.js +17 -18
  278. package/ui/RichTextEditor.js.flow +133 -133
  279. package/ui/SelectionObserver.js +8 -9
  280. package/ui/SelectionObserver.js.flow +134 -134
  281. package/ui/TableCellMenu.js +14 -15
  282. package/ui/TableCellMenu.js.flow +51 -51
  283. package/ui/TableGridSizeEditor.js +30 -33
  284. package/ui/TableGridSizeEditor.js.flow +187 -184
  285. package/ui/TableNodeView.js +18 -17
  286. package/ui/TableNodeView.js.flow +25 -25
  287. package/ui/bindScrollHandler.js +2 -1
  288. package/ui/bindScrollHandler.js.flow +46 -46
  289. package/ui/canUseCSSFont.js +5 -4
  290. package/ui/canUseCSSFont.js.flow +42 -43
  291. package/ui/czi-body-layout-editor.css +16 -16
  292. package/ui/czi-bookmark-view.css +10 -10
  293. package/ui/czi-cursor-placeholder.css +36 -36
  294. package/ui/czi-custom-menu-button.css +18 -18
  295. package/ui/czi-custom-menu-item.css +30 -30
  296. package/ui/czi-custom-menu.css +8 -8
  297. package/ui/czi-custom-radio-button.css +80 -80
  298. package/ui/czi-custom-scrollbar.css +21 -21
  299. package/ui/czi-editor-frameset.css +81 -81
  300. package/ui/czi-editor-toolbar.css +122 -122
  301. package/ui/czi-editor.css +217 -220
  302. package/ui/czi-form.css +201 -107
  303. package/ui/czi-frag.css +3 -3
  304. package/ui/czi-heading.css +40 -40
  305. package/ui/czi-icon.css +72 -72
  306. package/ui/czi-image-resize-box.css +165 -165
  307. package/ui/czi-image-upload-editor.css +57 -57
  308. package/ui/czi-image-upload-placeholder.css +50 -50
  309. package/ui/czi-image-url-editor.css +38 -38
  310. package/ui/czi-image-view.css +121 -125
  311. package/ui/czi-indent.css +137 -137
  312. package/ui/czi-inline-editor.css +20 -20
  313. package/ui/czi-link-tooltip.css +112 -71
  314. package/ui/czi-list.css +406 -410
  315. package/ui/czi-loading-indicator.css +66 -111
  316. package/ui/czi-math-view.css +62 -62
  317. package/ui/czi-selection-placeholder.css +24 -24
  318. package/ui/czi-table-cell-menu.css +16 -14
  319. package/ui/czi-table-grid-size-editor.css +37 -37
  320. package/ui/czi-table.css +87 -87
  321. package/ui/czi-vars.css +2 -2
  322. package/ui/findActiveFontSize.js +2 -1
  323. package/ui/findActiveFontSize.js.flow +55 -58
  324. package/ui/findActiveFontType.js +4 -3
  325. package/ui/findActiveFontType.js.flow +35 -38
  326. package/ui/fonts.css +460 -460
  327. package/ui/handleEditorDrop.js +1 -1
  328. package/ui/handleEditorDrop.js.flow +28 -28
  329. package/ui/handleEditorKeyDown.js +1 -1
  330. package/ui/handleEditorKeyDown.js.flow +39 -39
  331. package/ui/handleEditorPaste.js +1 -1
  332. package/ui/handleEditorPaste.js.flow +33 -33
  333. package/ui/htmlElementToRect.js.flow +18 -18
  334. package/ui/icon-font.css +9 -9
  335. package/ui/injectStyleSheet.js +2 -2
  336. package/ui/injectStyleSheet.js.flow +40 -42
  337. package/ui/isElementFullyVisible.js +1 -10
  338. package/ui/isElementFullyVisible.js.flow +14 -26
  339. package/ui/isOffline.js.flow +8 -8
  340. package/ui/isReactClass.js.flow +12 -12
  341. package/ui/listType.css +21 -21
  342. package/ui/mathquill-editor/MathQuillEditor.js +27 -30
  343. package/ui/mathquill-editor/MathQuillEditor.js.flow +158 -159
  344. package/ui/mathquill-editor/MathQuillEditorSymbols.js.flow +483 -483
  345. package/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js +14 -15
  346. package/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js.flow +50 -50
  347. package/ui/mathquill-editor/czi-mathquill-editor-symbols-panel.css +39 -39
  348. package/ui/mathquill-editor/czi-mathquill-editor.css +50 -50
  349. package/ui/mathquill-editor/mathquill-import-kludge.js +1 -8
  350. package/ui/mathquill-editor/mathquill-import-kludge.js.flow +17 -24
  351. package/ui/renderLaTeXAsHTML.js +4 -4
  352. package/ui/renderLaTeXAsHTML.js.flow +46 -46
  353. package/ui/resolveImage.js +5 -6
  354. package/ui/resolveImage.js.flow +121 -123
  355. package/ui/toCSSColor.js.flow +51 -51
  356. package/ui/toCSSLineSpacing.js +2 -3
  357. package/ui/toCSSLineSpacing.js.flow +53 -55
  358. package/ui/toHexColor.js.flow +26 -26
  359. package/ui/uuid.js.flow +9 -9
  360. package/uuid.js.flow +9 -9
@@ -1,199 +1,198 @@
1
- // @flow
2
-
3
- import nullthrows from 'nullthrows';
4
- import { Fragment, Schema } from 'prosemirror-model';
5
- import { EditorState } from 'prosemirror-state';
6
- import { TextSelection } from 'prosemirror-state';
7
- import { Transform } from 'prosemirror-transform';
8
- import { findParentNodeOfType } from 'prosemirror-utils';
9
- import { EditorView } from 'prosemirror-view';
10
- import * as React from 'react';
11
- import { HEADING, LIST_ITEM, PARAGRAPH } from './NodeNames.js';
12
- import nodeAt from './nodeAt.js';
13
- import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
14
-
15
- function mergeListItemUp(tr: Transform, schema: Schema): Transform {
16
- // This merge a list item to is previous list item of the selection is at the
17
- // beginning of the list item.
18
- const { selection } = tr;
19
- if (!selection) {
20
- return tr;
21
- }
22
- const nodeType = schema.nodes[LIST_ITEM];
23
- if (!nodeType) {
24
- return tr;
25
- }
26
- const { from, empty } = selection;
27
- if (!empty) {
28
- // Selection is collapsed.
29
- return tr;
30
- }
31
- const result = findParentNodeOfType(nodeType)(selection);
32
- if (!result) {
33
- return tr;
34
- }
35
- const { pos, node } = result;
36
- if (from !== pos + 2) {
37
- // Selection is not at the begining of the list item.
38
- return tr;
39
- }
40
- const $pos = tr.doc.resolve(pos);
41
- const prevNode = $pos.nodeBefore;
42
- if (!prevNode || prevNode.type !== nodeType) {
43
- return tr;
44
- }
45
- if (node.childCount !== 1) {
46
- // list item should only have one child (paragraph).
47
- return tr;
48
- }
49
-
50
- const paragraphNode = node.firstChild;
51
- const textNode = schema.text(' ');
52
-
53
- // Delete the list item
54
- tr = tr.delete(pos - 2, pos + node.nodeSize);
55
- // Append extra space character to its previous list item.
56
- tr = tr.insert(pos - 2, Fragment.from(textNode));
57
- // Move the content to its previous list item.
58
- tr = tr.insert(pos - 1, Fragment.from(paragraphNode.content));
59
- tr = tr.setSelection(TextSelection.create(tr.doc, pos - 1, pos - 1));
60
- return tr;
61
- }
62
-
63
- function mergeListItemDown(tr: Transform, schema: Schema): Transform {
64
- // This merge a list item to is next list item of the selection is at the
65
- // beginning of the list item.
66
- const { selection } = tr;
67
- if (!selection) {
68
- return tr;
69
- }
70
- const listItem = schema.nodes[LIST_ITEM];
71
- if (!listItem) {
72
- return tr;
73
- }
74
- const { from, empty } = selection;
75
- if (!empty) {
76
- // Selection is collapsed.
77
- return tr;
78
- }
79
- const result = findParentNodeOfType(listItem)(selection);
80
- if (!result) {
81
- return tr;
82
- }
83
- const { pos, node } = result;
84
- if (from !== pos + node.content.size) {
85
- // Selection is not at the begining of the list item.
86
- return tr;
87
- }
88
-
89
- const $pos = tr.doc.resolve(pos);
90
- const list = $pos.parent.type;
91
- const listResult = findParentNodeOfType(list)(selection);
92
- if (!listResult) {
93
- return tr;
94
- }
95
- const nextFrom = pos + node.nodeSize;
96
- let nextNode = nodeAt(tr.doc, nextFrom);
97
- let deleteFrom = nextFrom;
98
- if (listResult.start + listResult.node.content.size === nextFrom) {
99
- // It's at the end of the last list item. It shall bring the content of the
100
- // block after the list.
101
- nextNode = nodeAt(tr.doc, nextFrom + 1);
102
- deleteFrom += 1;
103
- }
104
-
105
- if (!nextNode) {
106
- return tr;
107
- }
108
-
109
- let nextContent;
110
-
111
- switch (nextNode.type) {
112
- case listItem:
113
- // List item should only have one child (paragraph).
114
- const paragraphNode = nullthrows(nextNode.firstChild);
115
- nextContent = Fragment.from(paragraphNode.content);
116
- break;
117
-
118
- case schema.nodes[HEADING]:
119
- case schema.nodes[PARAGRAPH]:
120
- // Will bring in the content of the next block.
121
- nextContent = Fragment.from(nextNode.content);
122
- break;
123
- }
124
-
125
- if (!nextContent) {
126
- return tr;
127
- }
128
-
129
- const textNode = schema.text(' ');
130
- // Delete the next node.
131
- tr = tr.delete(deleteFrom, deleteFrom + nextNode.nodeSize);
132
- // Append extra space character to its previous list item.
133
- tr = tr.insert(nextFrom - 2, nextContent);
134
- // Move the content to the list item.
135
- tr = tr.insert(nextFrom - 2, Fragment.from(textNode));
136
- tr = tr.setSelection(
137
- TextSelection.create(tr.doc, nextFrom - 2, nextFrom - 2)
138
- );
139
- return tr;
140
- }
141
-
142
- class ListItemMergeCommand extends UICommand {
143
- _direction = '';
144
-
145
- constructor(direction: string) {
146
- super();
147
- this._direction = direction;
148
- }
149
-
150
- isActive = (state: EditorState): boolean => {
151
- return false;
152
- };
153
-
154
- execute = (
155
- state: EditorState,
156
- dispatch: ?(tr: Transform) => void,
157
- view: ?EditorView
158
- ): boolean => {
159
- const { selection, schema } = state;
160
- let { tr } = state;
161
- const direction = this._direction;
162
- if (direction === 'down') {
163
- tr = mergeListItemDown(tr.setSelection(selection), schema);
164
- } else if (direction === 'up') {
165
- tr = mergeListItemUp(tr.setSelection(selection), schema);
166
- }
167
-
168
- if (tr.docChanged) {
169
- dispatch && dispatch(tr);
170
- return true;
171
- } else {
172
- return false;
173
- }
174
- };
175
-
176
- waitForUserInput = (
177
- _state: EditorState,
178
- _dispatch: ?(tr: Transform) => void,
179
- _view: ?EditorView,
180
- _event: ?React.SyntheticEvent
181
- ): Promise<undefined> => {
182
- return Promise.resolve(undefined);
183
- };
184
-
185
- executeWithUserInput = (
186
- _state: EditorState,
187
- _dispatch: ?(tr: Transform) => void,
188
- _view: ?EditorView,
189
- _inputs: ?string
190
- ): boolean => {
191
- return false;
192
- };
193
-
194
- cancel(): void {
195
- return null;
196
- }
197
- }
198
-
199
- export default ListItemMergeCommand;
1
+ // @flow
2
+
3
+ import nullthrows from 'nullthrows';
4
+ import { Fragment, Schema } from 'prosemirror-model';
5
+ import { EditorState, TextSelection } from 'prosemirror-state';
6
+ import { Transform } from 'prosemirror-transform';
7
+ import { findParentNodeOfType } from 'prosemirror-utils';
8
+ import { EditorView } from 'prosemirror-view';
9
+ import * as React from 'react';
10
+ import { HEADING, LIST_ITEM, PARAGRAPH } from './NodeNames.js';
11
+ import nodeAt from './nodeAt.js';
12
+ import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
13
+
14
+ function mergeListItemUp(tr: Transform, schema: Schema): Transform {
15
+ // This merge a list item to is previous list item of the selection is at the
16
+ // beginning of the list item.
17
+ const { selection } = tr;
18
+ if (!selection) {
19
+ return tr;
20
+ }
21
+ const nodeType = schema.nodes[LIST_ITEM];
22
+ if (!nodeType) {
23
+ return tr;
24
+ }
25
+ const { from, empty } = selection;
26
+ if (!empty) {
27
+ // Selection is collapsed.
28
+ return tr;
29
+ }
30
+ const result = findParentNodeOfType(nodeType)(selection);
31
+ if (!result) {
32
+ return tr;
33
+ }
34
+ const { pos, node } = result;
35
+ if (from !== pos + 2) {
36
+ // Selection is not at the begining of the list item.
37
+ return tr;
38
+ }
39
+ const $pos = tr.doc.resolve(pos);
40
+ const prevNode = $pos.nodeBefore;
41
+ if (!prevNode || prevNode.type !== nodeType) {
42
+ return tr;
43
+ }
44
+ if (node.childCount !== 1) {
45
+ // list item should only have one child (paragraph).
46
+ return tr;
47
+ }
48
+
49
+ const paragraphNode = node.firstChild;
50
+ const textNode = schema.text(' ');
51
+
52
+ // Delete the list item
53
+ tr = tr.delete(pos - 2, pos + node.nodeSize);
54
+ // Append extra space character to its previous list item.
55
+ tr = tr.insert(pos - 2, Fragment.from(textNode));
56
+ // Move the content to its previous list item.
57
+ tr = tr.insert(pos - 1, Fragment.from(paragraphNode.content));
58
+ tr = tr.setSelection(TextSelection.create(tr.doc, pos - 1, pos - 1));
59
+ return tr;
60
+ }
61
+
62
+ function mergeListItemDown(tr: Transform, schema: Schema): Transform {
63
+ // This merge a list item to is next list item of the selection is at the
64
+ // beginning of the list item.
65
+ const { selection } = tr;
66
+ if (!selection) {
67
+ return tr;
68
+ }
69
+ const listItem = schema.nodes[LIST_ITEM];
70
+ if (!listItem) {
71
+ return tr;
72
+ }
73
+ const { from, empty } = selection;
74
+ if (!empty) {
75
+ // Selection is collapsed.
76
+ return tr;
77
+ }
78
+ const result = findParentNodeOfType(listItem)(selection);
79
+ if (!result) {
80
+ return tr;
81
+ }
82
+ const { pos, node } = result;
83
+ if (from !== pos + node.content.size) {
84
+ // Selection is not at the begining of the list item.
85
+ return tr;
86
+ }
87
+
88
+ const $pos = tr.doc.resolve(pos);
89
+ const list = $pos.parent.type;
90
+ const listResult = findParentNodeOfType(list)(selection);
91
+ if (!listResult) {
92
+ return tr;
93
+ }
94
+ const nextFrom = pos + node.nodeSize;
95
+ let nextNode = nodeAt(tr.doc, nextFrom);
96
+ let deleteFrom = nextFrom;
97
+ if (listResult.start + listResult.node.content.size === nextFrom) {
98
+ // It's at the end of the last list item. It shall bring the content of the
99
+ // block after the list.
100
+ nextNode = nodeAt(tr.doc, nextFrom + 1);
101
+ deleteFrom += 1;
102
+ }
103
+
104
+ if (!nextNode) {
105
+ return tr;
106
+ }
107
+
108
+ let nextContent;
109
+
110
+ switch (nextNode.type) {
111
+ case listItem: {
112
+ // List item should only have one child (paragraph).
113
+ const paragraphNode = nullthrows(nextNode.firstChild);
114
+ nextContent = Fragment.from(paragraphNode.content);
115
+ break;
116
+ }
117
+ case schema.nodes[HEADING]:
118
+ case schema.nodes[PARAGRAPH]:
119
+ // Will bring in the content of the next block.
120
+ nextContent = Fragment.from(nextNode.content);
121
+ break;
122
+ }
123
+
124
+ if (!nextContent) {
125
+ return tr;
126
+ }
127
+
128
+ const textNode = schema.text(' ');
129
+ // Delete the next node.
130
+ tr = tr.delete(deleteFrom, deleteFrom + nextNode.nodeSize);
131
+ // Append extra space character to its previous list item.
132
+ tr = tr.insert(nextFrom - 2, nextContent);
133
+ // Move the content to the list item.
134
+ tr = tr.insert(nextFrom - 2, Fragment.from(textNode));
135
+ tr = tr.setSelection(
136
+ TextSelection.create(tr.doc, nextFrom - 2, nextFrom - 2)
137
+ );
138
+ return tr;
139
+ }
140
+
141
+ class ListItemMergeCommand extends UICommand {
142
+ _direction = '';
143
+
144
+ constructor(direction: string) {
145
+ super();
146
+ this._direction = direction;
147
+ }
148
+
149
+ isActive = (state: EditorState): boolean => {
150
+ return false;
151
+ };
152
+
153
+ execute = (
154
+ state: EditorState,
155
+ dispatch: ?(tr: Transform) => void,
156
+ view: ?EditorView
157
+ ): boolean => {
158
+ const { selection, schema } = state;
159
+ let { tr } = state;
160
+ const direction = this._direction;
161
+ if (direction === 'down') {
162
+ tr = mergeListItemDown(tr.setSelection(selection), schema);
163
+ } else if (direction === 'up') {
164
+ tr = mergeListItemUp(tr.setSelection(selection), schema);
165
+ }
166
+
167
+ if (tr.docChanged) {
168
+ dispatch && dispatch(tr);
169
+ return true;
170
+ } else {
171
+ return false;
172
+ }
173
+ };
174
+
175
+ waitForUserInput = (
176
+ _state: EditorState,
177
+ _dispatch: ?(tr: Transform) => void,
178
+ _view: ?EditorView,
179
+ _event: ?React.SyntheticEvent
180
+ ): Promise<undefined> => {
181
+ return Promise.resolve(undefined);
182
+ };
183
+
184
+ executeWithUserInput = (
185
+ _state: EditorState,
186
+ _dispatch: ?(tr: Transform) => void,
187
+ _view: ?EditorView,
188
+ _inputs: ?string
189
+ ): boolean => {
190
+ return false;
191
+ };
192
+
193
+ cancel(): void {
194
+ return null;
195
+ }
196
+ }
197
+
198
+ export default ListItemMergeCommand;
@@ -1,52 +1,52 @@
1
- // @flow
2
-
3
- import { Node } from 'prosemirror-model';
4
-
5
- import type { NodeSpec } from './Types.js';
6
-
7
- export const ATTRIBUTE_LIST_STYLE_TYPE = 'data-list-style-type';
8
-
9
- const ALIGN_PATTERN = /(left|right|center|justify)/;
10
-
11
- function getAttrs(dom: HTMLElement) {
12
- const attrs = {};
13
- const { textAlign } = dom.style;
14
- let align = dom.getAttribute('data-align') || textAlign || '';
15
- align = ALIGN_PATTERN.test(align) ? align : null;
16
-
17
- if (align) {
18
- attrs.align = align;
19
- }
20
- return attrs;
21
- }
22
-
23
- const ListItemNodeSpec: NodeSpec = {
24
- attrs: {
25
- align: { default: null },
26
- },
27
-
28
- // NOTE:
29
- // This spec does not support nested lists (e.g. `'paragraph block*'`)
30
- // as content because of the complexity of dealing with indentation
31
- // (context: https://github.com/ProseMirror/prosemirror/issues/92).
32
- // content: '(bullet_list|paragraph)+',
33
- content: 'paragraph block*',
34
-
35
- parseDOM: [{ tag: 'li', getAttrs }],
36
-
37
- // NOTE:
38
- // This method only defines the minimum HTML attributes needed when the node
39
- // is serialized to HTML string. Usually this is called when user copies
40
- // the node to clipboard.
41
- // The actual DOM rendering logic is defined at `src/ui/ListItemNodeView.js`.
42
- toDOM(node: Node): Array<any> {
43
- const attrs = {};
44
- const { align } = node.attrs;
45
- if (align) {
46
- attrs['data-align'] = align;
47
- }
48
- return ['li', attrs, 0];
49
- },
50
- };
51
-
52
- export default ListItemNodeSpec;
1
+ // @flow
2
+
3
+ import { Node } from 'prosemirror-model';
4
+
5
+ import type { NodeSpec } from './Types.js';
6
+
7
+ export const ATTRIBUTE_LIST_STYLE_TYPE = 'data-list-style-type';
8
+
9
+ const ALIGN_PATTERN = /(left|right|center|justify)/;
10
+
11
+ function getAttrs(dom: HTMLElement) {
12
+ const attrs = {};
13
+ const { textAlign } = dom.style;
14
+ let align = dom.getAttribute('data-align') || textAlign || '';
15
+ align = ALIGN_PATTERN.test(align) ? align : null;
16
+
17
+ if (align) {
18
+ attrs.align = align;
19
+ }
20
+ return attrs;
21
+ }
22
+
23
+ const ListItemNodeSpec: NodeSpec = {
24
+ attrs: {
25
+ align: { default: null },
26
+ },
27
+
28
+ // NOTE:
29
+ // This spec does not support nested lists (e.g. `'paragraph block*'`)
30
+ // as content because of the complexity of dealing with indentation
31
+ // (context: https://github.com/ProseMirror/prosemirror/issues/92).
32
+ // content: '(bullet_list|paragraph)+',
33
+ content: 'paragraph block*',
34
+
35
+ parseDOM: [{ tag: 'li', getAttrs }],
36
+
37
+ // NOTE:
38
+ // This method only defines the minimum HTML attributes needed when the node
39
+ // is serialized to HTML string. Usually this is called when user copies
40
+ // the node to clipboard.
41
+ // The actual DOM rendering logic is defined at `src/ui/ListItemNodeView.js`.
42
+ toDOM(node: Node): Array<any> {
43
+ const attrs = {};
44
+ const { align } = node.attrs;
45
+ if (align) {
46
+ attrs['data-align'] = align;
47
+ }
48
+ return ['li', attrs, 0];
49
+ },
50
+ };
51
+
52
+ export default ListItemNodeSpec;
@@ -1,16 +1,16 @@
1
1
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
4
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
2
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
3
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
4
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
5
5
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
6
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
6
+ function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
7
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
7
8
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
8
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
9
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
10
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
11
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
12
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
9
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
10
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
11
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
12
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
14
14
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
15
  import { Schema } from 'prosemirror-model';
16
16
  import { EditorState } from 'prosemirror-state';
@@ -20,12 +20,11 @@ import * as React from 'react';
20
20
  import splitListItem from './splitListItem.js';
21
21
  import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
22
22
  var ListSplitCommand = /*#__PURE__*/function (_UICommand) {
23
- _inherits(ListSplitCommand, _UICommand);
24
23
  function ListSplitCommand(_schema) {
25
24
  var _this;
26
25
  _classCallCheck(this, ListSplitCommand);
27
26
  _this = _callSuper(this, ListSplitCommand);
28
- _defineProperty(_assertThisInitialized(_this), "execute", function (state, dispatch, view) {
27
+ _defineProperty(_this, "execute", function (state, dispatch, view) {
29
28
  var selection = state.selection,
30
29
  schema = state.schema;
31
30
  var tr = splitListItem(state.tr.setSelection(selection), schema);
@@ -36,20 +35,20 @@ var ListSplitCommand = /*#__PURE__*/function (_UICommand) {
36
35
  return false;
37
36
  }
38
37
  });
39
- _defineProperty(_assertThisInitialized(_this), "waitForUserInput", function (_state, _dispatch, _view, _event) {
38
+ _defineProperty(_this, "waitForUserInput", function (_state, _dispatch, _view, _event) {
40
39
  return Promise.resolve(undefined);
41
40
  });
42
- _defineProperty(_assertThisInitialized(_this), "executeWithUserInput", function (_state, _dispatch, _view, _inputs) {
41
+ _defineProperty(_this, "executeWithUserInput", function (_state, _dispatch, _view, _inputs) {
43
42
  return false;
44
43
  });
45
44
  return _this;
46
45
  }
47
- _createClass(ListSplitCommand, [{
46
+ _inherits(ListSplitCommand, _UICommand);
47
+ return _createClass(ListSplitCommand, [{
48
48
  key: "cancel",
49
49
  value: function cancel() {
50
50
  return null;
51
51
  }
52
52
  }]);
53
- return ListSplitCommand;
54
53
  }(UICommand);
55
54
  export default ListSplitCommand;