@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,112 +1,113 @@
1
- // @flow
2
-
3
- import { Schema } from 'prosemirror-model';
4
- import { Node } from 'prosemirror-model';
5
- import { EditorState } from 'prosemirror-state';
6
- import { CellSelection, mergeCells } from 'prosemirror-tables';
7
- import { Transform } from 'prosemirror-transform';
8
- import { EditorView } from 'prosemirror-view';
9
- import * as React from 'react';
10
- import { PARAGRAPH, TABLE_CELL, TEXT } from './NodeNames.js';
11
- import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
12
-
13
- function isBlankParagraphNode(node: ?Node): boolean {
14
- if (!node) {
15
- return false;
16
- }
17
- if (node.type.name !== PARAGRAPH) {
18
- return false;
19
- }
20
- const { firstChild, lastChild } = node;
21
- if (!firstChild) {
22
- return true;
23
- }
24
- if (firstChild !== lastChild) {
25
- return false;
26
- }
27
- return firstChild.type.name === TEXT && firstChild.text === ' ';
28
- }
29
-
30
- function purgeConsecutiveBlankParagraphNodes(
31
- tr: Transform,
32
- schema: Schema
33
- ): Transform {
34
- const paragraph = schema.nodes[PARAGRAPH];
35
- const cell = schema.nodes[TABLE_CELL];
36
- if (!paragraph || !cell) {
37
- return tr;
38
- }
39
- const { doc, selection } = tr;
40
- if (!(selection instanceof CellSelection)) {
41
- return tr;
42
- }
43
- const { from, to } = selection;
44
- const paragraphPoses = [];
45
- doc.nodesBetween(from, to, (node, pos, parentNode) => {
46
- if (node.type === paragraph && parentNode.type === cell) {
47
- if (isBlankParagraphNode(node)) {
48
- const $pos = tr.doc.resolve(pos);
49
- if (isBlankParagraphNode($pos.nodeBefore)) {
50
- paragraphPoses.push(pos);
51
- }
52
- }
53
- return false;
54
- } else {
55
- return true;
56
- }
57
- });
58
- paragraphPoses.reverse().forEach((pos) => {
59
- const cell = tr.doc.nodeAt(pos);
60
- tr = tr.delete(pos, pos + cell.nodeSize);
61
- });
62
- return tr;
63
- }
64
-
65
- class TableMergeCellsCommand extends UICommand {
66
- execute = (
67
- state: EditorState,
68
- dispatch: ?(tr: Transform) => void,
69
- view: ?EditorView
70
- ): boolean => {
71
- const { tr, schema, selection } = state;
72
- let endTr = tr;
73
- if (selection instanceof CellSelection) {
74
- mergeCells(
75
- state,
76
- (nextTr) => {
77
- endTr = nextTr;
78
- },
79
- view
80
- );
81
- // Also merge onsecutive blank paragraphs into one.
82
- endTr = purgeConsecutiveBlankParagraphNodes(endTr, schema);
83
- }
84
- const changed = endTr.docChanged || endTr !== tr;
85
- changed && dispatch && dispatch(endTr);
86
- return changed;
87
- };
88
-
89
- waitForUserInput = (
90
- _state: EditorState,
91
- _dispatch: ?(tr: Transform) => void,
92
- _view: ?EditorView,
93
- _event: ?React.SyntheticEvent
94
- ): Promise<undefined> => {
95
- return Promise.resolve(undefined);
96
- };
97
-
98
- executeWithUserInput = (
99
- _state: EditorState,
100
- _dispatch: ?(tr: Transform) => void,
101
- _view: ?EditorView,
102
- _inputs: ?string
103
- ): boolean => {
104
- return false;
105
- };
106
-
107
- cancel(): void {
108
- return null;
109
- }
110
- }
111
-
112
- export default TableMergeCellsCommand;
1
+ // @flow
2
+
3
+ import { Schema, Node } from 'prosemirror-model';
4
+ import { EditorState } from 'prosemirror-state';
5
+ import { CellSelection, mergeCells } from 'prosemirror-tables';
6
+ import { Transform } from 'prosemirror-transform';
7
+ import { EditorView } from 'prosemirror-view';
8
+ import * as React from 'react';
9
+ import { PARAGRAPH, TABLE_CELL, TEXT } from './NodeNames.js';
10
+ import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
11
+
12
+ function isBlankParagraphNode(node: ?Node): boolean {
13
+ if (!node) {
14
+ return false;
15
+ }
16
+ if (node.type.name !== PARAGRAPH) {
17
+ return false;
18
+ }
19
+ const { firstChild, lastChild } = node;
20
+ if (!firstChild) {
21
+ return true;
22
+ }
23
+ if (firstChild !== lastChild) {
24
+ return false;
25
+ }
26
+ return firstChild.type.name === TEXT && firstChild.text === ' ';
27
+ }
28
+
29
+ function purgeConsecutiveBlankParagraphNodes(
30
+ tr: Transform,
31
+ schema: Schema
32
+ ): Transform {
33
+ const paragraph = schema.nodes[PARAGRAPH];
34
+ const cell = schema.nodes[TABLE_CELL];
35
+ if (!paragraph || !cell) {
36
+ return tr;
37
+ }
38
+ const { doc, selection } = tr;
39
+ if (!(selection instanceof CellSelection)) {
40
+ return tr;
41
+ }
42
+ const { from, to } = selection;
43
+ const paragraphPoses = [];
44
+ doc.nodesBetween(from, to, (node, pos, parentNode) => {
45
+ if (node.type === paragraph && parentNode.type === cell) {
46
+ if (isBlankParagraphNode(node)) {
47
+ const $pos = tr.doc.resolve(pos);
48
+ if (isBlankParagraphNode($pos.nodeBefore)) {
49
+ paragraphPoses.push(pos);
50
+ }
51
+ }
52
+ return false;
53
+ } else {
54
+ return true;
55
+ }
56
+ });
57
+ paragraphPoses.reverse();
58
+ const reversedParagraphPoses = paragraphPoses;
59
+ reversedParagraphPoses.forEach((pos) => {
60
+ const cell = tr.doc.nodeAt(pos);
61
+ tr = tr.delete(pos, pos + cell.nodeSize);
62
+ });
63
+ return tr;
64
+ }
65
+
66
+ class TableMergeCellsCommand extends UICommand {
67
+ execute = (
68
+ state: EditorState,
69
+ dispatch: ?(tr: Transform) => void,
70
+ view: ?EditorView
71
+ ): boolean => {
72
+ const { tr, schema, selection } = state;
73
+ let endTr = tr;
74
+ if (selection instanceof CellSelection) {
75
+ mergeCells(
76
+ state,
77
+ (nextTr) => {
78
+ endTr = nextTr;
79
+ },
80
+ view
81
+ );
82
+ // Also merge onsecutive blank paragraphs into one.
83
+ endTr = purgeConsecutiveBlankParagraphNodes(endTr, schema);
84
+ }
85
+ const changed = endTr.docChanged || endTr !== tr;
86
+ changed && dispatch && dispatch(endTr);
87
+ return changed;
88
+ };
89
+
90
+ waitForUserInput = (
91
+ _state: EditorState,
92
+ _dispatch: ?(tr: Transform) => void,
93
+ _view: ?EditorView,
94
+ _event: ?React.SyntheticEvent
95
+ ): Promise<undefined> => {
96
+ return Promise.resolve(undefined);
97
+ };
98
+
99
+ executeWithUserInput = (
100
+ _state: EditorState,
101
+ _dispatch: ?(tr: Transform) => void,
102
+ _view: ?EditorView,
103
+ _inputs: ?string
104
+ ): boolean => {
105
+ return false;
106
+ };
107
+
108
+ cancel(): void {
109
+ return null;
110
+ }
111
+ }
112
+
113
+ export default TableMergeCellsCommand;
@@ -21,7 +21,8 @@ var TableNodesSpecs = tableNodes({
21
21
  },
22
22
  setDOMAttr: function setDOMAttr(value, attrs) {
23
23
  if (value) {
24
- attrs.style = (attrs.style || '') + ";border-color: ".concat(value, ";");
24
+ var colorValue = String(value);
25
+ attrs.style = (attrs.style || '') + ";border-color: ".concat(colorValue, ";");
25
26
  }
26
27
  }
27
28
  },
@@ -33,7 +34,8 @@ var TableNodesSpecs = tableNodes({
33
34
  },
34
35
  setDOMAttr: function setDOMAttr(value, attrs) {
35
36
  if (value) {
36
- attrs.style = (attrs.style || '') + ";background-color: ".concat(value, ";");
37
+ var colorValue = String(value);
38
+ attrs.style = (attrs.style || '') + ";background-color: ".concat(colorValue, ";");
37
39
  }
38
40
  }
39
41
  }
@@ -1,78 +1,80 @@
1
- // @flow
2
-
3
- import toCSSColor from './ui/toCSSColor.js';
4
- import { Node } from 'prosemirror-model';
5
- import { tableNodes } from 'prosemirror-tables';
6
-
7
- const NO_VISIBLE_BORDER_WIDTH = new Set(['0pt', '0px']);
8
-
9
- // https://github.com/ProseMirror/prosemirror-tables/blob/master/demo.js
10
- const TableNodesSpecs = tableNodes({
11
- tableGroup: 'block',
12
- cellContent: 'block+',
13
- cellAttributes: {
14
- borderColor: {
15
- default: null,
16
- getFromDOM(dom) {
17
- const { borderColor, borderWidth } = dom.style;
18
-
19
- if (NO_VISIBLE_BORDER_WIDTH.has(borderWidth)) {
20
- return 'transparent';
21
- }
22
-
23
- return (borderColor && toCSSColor(borderColor)) || null;
24
- },
25
- setDOMAttr(value, attrs) {
26
- if (value) {
27
- attrs.style = (attrs.style || '') + `;border-color: ${value};`;
28
- }
29
- },
30
- },
31
- background: {
32
- default: null,
33
- // TODO: Move these to a table helper.
34
- getFromDOM(dom) {
35
- return dom.style.backgroundColor || null;
36
- },
37
- setDOMAttr(value, attrs) {
38
- if (value) {
39
- attrs.style = (attrs.style || '') + `;background-color: ${value};`;
40
- }
41
- },
42
- },
43
- },
44
- });
45
-
46
- // Override the default table node spec to support custom attributes.
47
- const TableNodeSpec = Object.assign({}, TableNodesSpecs.table, {
48
- attrs: {
49
- marginLeft: { default: null },
50
- },
51
- parseDOM: [
52
- {
53
- tag: 'table',
54
- getAttrs(dom: HTMLElement): ?Object {
55
- const { marginLeft } = dom.style;
56
- if (marginLeft && /\d+px/.test(marginLeft)) {
57
- return { marginLeft: parseFloat(marginLeft) };
58
- }
59
- return null;
60
- },
61
- },
62
- ],
63
- toDOM(node: Node): Array<any> {
64
- // Normally, the DOM structure of the table node is rendered by
65
- // `TableNodeView`. This method is only called when user selects a
66
- // table node and copies it, which triggers the "serialize to HTML" flow
67
- // that calles this method.
68
- const { marginLeft } = node.attrs;
69
- const domAttrs = {};
70
- if (marginLeft) {
71
- domAttrs.style = `margin-left: ${marginLeft}px`;
72
- }
73
- return ['table', domAttrs, 0];
74
- },
75
- });
76
- Object.assign(TableNodesSpecs, { table: TableNodeSpec });
77
-
78
- export default TableNodesSpecs;
1
+ // @flow
2
+
3
+ import toCSSColor from './ui/toCSSColor.js';
4
+ import { Node } from 'prosemirror-model';
5
+ import { tableNodes } from 'prosemirror-tables';
6
+
7
+ const NO_VISIBLE_BORDER_WIDTH = new Set(['0pt', '0px']);
8
+
9
+ // https://github.com/ProseMirror/prosemirror-tables/blob/master/demo.js
10
+ const TableNodesSpecs = tableNodes({
11
+ tableGroup: 'block',
12
+ cellContent: 'block+',
13
+ cellAttributes: {
14
+ borderColor: {
15
+ default: null,
16
+ getFromDOM(dom) {
17
+ const { borderColor, borderWidth } = dom.style;
18
+
19
+ if (NO_VISIBLE_BORDER_WIDTH.has(borderWidth)) {
20
+ return 'transparent';
21
+ }
22
+
23
+ return (borderColor && toCSSColor(borderColor)) || null;
24
+ },
25
+ setDOMAttr(value, attrs) {
26
+ if (value) {
27
+ const colorValue = String(value);
28
+ attrs.style = (attrs.style || '') + `;border-color: ${colorValue};`;
29
+ }
30
+ },
31
+ },
32
+ background: {
33
+ default: null,
34
+ // TODO: Move these to a table helper.
35
+ getFromDOM(dom) {
36
+ return dom.style.backgroundColor || null;
37
+ },
38
+ setDOMAttr(value, attrs) {
39
+ if (value) {
40
+ const colorValue = String(value);
41
+ attrs.style = (attrs.style || '') + `;background-color: ${colorValue};`;
42
+ }
43
+ },
44
+ },
45
+ },
46
+ });
47
+
48
+ // Override the default table node spec to support custom attributes.
49
+ const TableNodeSpec = Object.assign({}, TableNodesSpecs.table, {
50
+ attrs: {
51
+ marginLeft: { default: null },
52
+ },
53
+ parseDOM: [
54
+ {
55
+ tag: 'table',
56
+ getAttrs(dom: HTMLElement): ?Object {
57
+ const { marginLeft } = dom.style;
58
+ if (marginLeft && /\d+px/.test(marginLeft)) {
59
+ return { marginLeft: parseFloat(marginLeft) };
60
+ }
61
+ return null;
62
+ },
63
+ },
64
+ ],
65
+ toDOM(node: Node): Array<any> {
66
+ // Normally, the DOM structure of the table node is rendered by
67
+ // `TableNodeView`. This method is only called when user selects a
68
+ // table node and copies it, which triggers the "serialize to HTML" flow
69
+ // that calles this method.
70
+ const { marginLeft } = node.attrs;
71
+ const domAttrs = {};
72
+ if (marginLeft) {
73
+ domAttrs.style = `margin-left: ${marginLeft}px`;
74
+ }
75
+ return ['table', domAttrs, 0];
76
+ },
77
+ });
78
+ Object.assign(TableNodesSpecs, { table: TableNodeSpec });
79
+
80
+ export default TableNodesSpecs;
@@ -1,14 +1,14 @@
1
- // @flow
2
-
3
- import { tableEditing } from 'prosemirror-tables';
4
-
5
- import TableCellMenuPlugin from './TableCellMenuPlugin.js';
6
- import TableResizePlugin from './TableResizePlugin.js';
7
-
8
- // Tables
9
- // https://github.com/ProseMirror/prosemirror-tables/blob/master/demo.js
10
- export default [
11
- new TableCellMenuPlugin(),
12
- new TableResizePlugin(),
13
- tableEditing(),
14
- ];
1
+ // @flow
2
+
3
+ import { tableEditing } from 'prosemirror-tables';
4
+
5
+ import TableCellMenuPlugin from './TableCellMenuPlugin.js';
6
+ import TableResizePlugin from './TableResizePlugin.js';
7
+
8
+ // Tables
9
+ // https://github.com/ProseMirror/prosemirror-tables/blob/master/demo.js
10
+ export default [
11
+ new TableCellMenuPlugin(),
12
+ new TableResizePlugin(),
13
+ tableEditing(),
14
+ ];
@@ -1,18 +1,18 @@
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
2
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
3
- 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); }
4
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
3
+ 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); }
4
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
5
5
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
6
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
7
- 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); }
8
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
6
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
7
+ 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); }
8
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
9
9
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
10
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
12
- 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); } }
13
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
14
- 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; }
15
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
11
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
12
+ 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); } }
13
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
14
+ 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; }
15
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
16
16
  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); }
17
17
  // Copyright (C) 2015-2016 by Marijn Haverbeke <marijnh@gmail.com> and others
18
18
  // Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -70,7 +70,7 @@ var ResizeState = /*#__PURE__*/function () {
70
70
  this.draggingInfo = draggingInfo;
71
71
  this.forMarginLeft = forMarginLeft;
72
72
  }
73
- _createClass(ResizeState, [{
73
+ return _createClass(ResizeState, [{
74
74
  key: "apply",
75
75
  value: function apply(tr) {
76
76
  var state = this;
@@ -91,7 +91,6 @@ var ResizeState = /*#__PURE__*/function () {
91
91
  return state;
92
92
  }
93
93
  }]);
94
- return ResizeState;
95
94
  }(); // Function that handles the mousemove event inside table cell.
96
95
  function handleMouseMove(view, event) {
97
96
  var resizeState = PLUGIN_KEY.getState(view.state);
@@ -144,19 +143,20 @@ function handleMouseLeave(view) {
144
143
 
145
144
  // Function that handles the mousedown event from the table cell.
146
145
  function handleMouseDown(view, event) {
147
- var _this = this;
146
+ var _cancelDrag,
147
+ _this = this;
148
148
  // It's possible that the resize action that happened earlier was inturrupted
149
149
  // while its dependent mouse events were stopped or prevented by others.
150
150
  // We need to stop the previous resize action if it did not finish.
151
- cancelDrag && cancelDrag(event);
151
+ (_cancelDrag = cancelDrag) === null || _cancelDrag === void 0 || _cancelDrag(event);
152
152
  var resizeState = PLUGIN_KEY.getState(view.state);
153
153
  if (resizeState.cellPos === -1 || resizeState.draggingInfo) {
154
154
  return false;
155
155
  }
156
156
  var dragStarted = false;
157
157
  var dragMoveHandler = null;
158
- var finish = function finish(event) {
159
- window.removeEventListener('mouseup', finish, true);
158
+ var _finish = function finish(event) {
159
+ window.removeEventListener('mouseup', _finish, true);
160
160
  window.removeEventListener('mousemove', _this.move, true);
161
161
  dragStarted && handleDragEnd(view, event);
162
162
  cancelDrag = null;
@@ -172,11 +172,11 @@ function handleMouseDown(view, event) {
172
172
  dragMoveHandler = dragMoveHandler || batchMouseHandler(handleDragMove);
173
173
  dragMoveHandler(view, event);
174
174
  } else {
175
- finish(event);
175
+ _finish(event);
176
176
  }
177
177
  };
178
- cancelDrag = finish;
179
- window.addEventListener('mouseup', finish, true);
178
+ cancelDrag = _finish;
179
+ window.addEventListener('mouseup', _finish, true);
180
180
  window.addEventListener('mousemove', move, true);
181
181
  event.preventDefault();
182
182
  return true;
@@ -494,7 +494,6 @@ function compareNumbersList(one, two) {
494
494
 
495
495
  // Plugin that supports table columns resizing.
496
496
  var TableResizePlugin = /*#__PURE__*/function (_Plugin) {
497
- _inherits(TableResizePlugin, _Plugin);
498
497
  // [FS] IRAD-1005 2020-07-07
499
498
  // Upgrade outdated packages.
500
499
  //spec: Object;
@@ -538,6 +537,7 @@ var TableResizePlugin = /*#__PURE__*/function (_Plugin) {
538
537
  }
539
538
  }]);
540
539
  }
540
+ _inherits(TableResizePlugin, _Plugin);
541
541
  return _createClass(TableResizePlugin);
542
542
  }(Plugin);
543
543
  export { TableResizePlugin as default };