@modusoperandi/licit 1.0.4 → 1.0.5
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.
- package/BlockquoteInsertNewLineCommand.js +7 -8
- package/BlockquoteInsertNewLineCommand.js.flow +77 -77
- package/BlockquoteNodeSpec.js +1 -1
- package/BlockquoteNodeSpec.js.flow +30 -30
- package/BlockquoteToggleCommand.js +8 -9
- package/BlockquoteToggleCommand.js.flow +56 -56
- package/BookmarkNodeSpec.js +1 -1
- package/BookmarkNodeSpec.js.flow +39 -39
- package/BulletListNodeSpec.js.flow +61 -61
- package/CZIProseMirror.js.flow +90 -90
- package/CodeBlockCommand.js +8 -9
- package/CodeBlockCommand.js.flow +65 -65
- package/CodeBlockNodeSpec.js.flow +24 -24
- package/CodeMarkSpec.js.flow +14 -14
- package/ContentPlaceholderPlugin.js +3 -4
- package/ContentPlaceholderPlugin.js.flow +187 -187
- package/CursorPlaceholderPlugin.js +4 -4
- package/CursorPlaceholderPlugin.js.flow +115 -115
- package/DocLayoutCommand.js +9 -10
- package/DocLayoutCommand.js.flow +99 -99
- package/DocNodeSpec.js.flow +64 -64
- package/EMMarkSpec.js.flow +14 -14
- package/EditorCommands.js.flow +126 -126
- package/EditorKeyMap.js.flow +187 -187
- package/EditorMarks.js +1 -1
- package/EditorMarks.js.flow +71 -71
- package/EditorNodes.js +1 -1
- package/EditorNodes.js.flow +59 -59
- package/EditorPageLayoutPlugin.js +2 -2
- package/EditorPageLayoutPlugin.js.flow +67 -67
- package/EditorPlugins.js.flow +8 -8
- package/EditorSchema.js.flow +12 -12
- package/EditorState.js.flow +7 -7
- package/FontSizeMarkSpec.js.flow +49 -49
- package/FontTypeMarkSpec.js.flow +80 -80
- package/HTMLMutator.js +2 -3
- package/HTMLMutator.js.flow +59 -59
- package/HardBreakNodeSpec.js.flow +15 -15
- package/HeadingNodeSpec.js +1 -1
- package/HeadingNodeSpec.js.flow +52 -52
- package/HistoryRedoCommand.js +7 -8
- package/HistoryRedoCommand.js.flow +41 -41
- package/HistoryUndoCommand.js +7 -8
- package/HistoryUndoCommand.js.flow +41 -41
- package/HorizontalRuleCommand.js +7 -8
- package/HorizontalRuleCommand.js.flow +71 -71
- package/HorizontalRuleNodeSpec.js.flow +39 -39
- package/ImageUploadPlaceholderPlugin.js +2 -2
- package/ImageUploadPlaceholderPlugin.js.flow +192 -192
- package/LinkMarkSpec.js.flow +32 -32
- package/LinkSetURLCommand.js +8 -9
- package/LinkSetURLCommand.js.flow +117 -117
- package/LinkTooltipPlugin.js +3 -4
- package/LinkTooltipPlugin.js.flow +190 -190
- package/ListItemInsertNewLineCommand.js +7 -8
- package/ListItemInsertNewLineCommand.js.flow +77 -77
- package/ListItemMergeCommand.js +9 -10
- package/ListItemMergeCommand.js.flow +199 -199
- package/ListItemNodeSpec.js.flow +52 -52
- package/ListSplitCommand.js +7 -8
- package/ListSplitCommand.js.flow +54 -54
- package/ListToggleCommand.js +11 -12
- package/ListToggleCommand.js.flow +99 -99
- package/MarkNames.js.flow +18 -18
- package/MarksClearCommand.js +9 -10
- package/MarksClearCommand.js.flow +65 -65
- package/MathEditCommand.js +8 -9
- package/MathEditCommand.js.flow +120 -120
- package/MathNodeSpec.js.flow +46 -46
- package/NodeNames.js.flow +23 -23
- package/OrderedListNodeSpec.js +1 -1
- package/OrderedListNodeSpec.js.flow +132 -132
- package/ParagraphNodeSpec.js.flow +156 -156
- package/ParagraphSpacingCommand.js +9 -10
- package/ParagraphSpacingCommand.js.flow +144 -144
- package/PrintCommand.js +9 -10
- package/PrintCommand.js.flow +53 -53
- package/SelectionPlaceholderPlugin.js +4 -4
- package/SelectionPlaceholderPlugin.js.flow +131 -131
- package/SpacerMarkSpec.js +1 -1
- package/SpacerMarkSpec.js.flow +47 -47
- package/StrikeMarkSpec.js.flow +21 -21
- package/StrongMarkSpec.js.flow +25 -25
- package/StyleView.js +2 -3
- package/StyleView.js.flow +19 -19
- package/TableBackgroundColorCommand.js +25 -12
- package/TableBackgroundColorCommand.js.flow +83 -75
- package/TableBorderColorCommand.js +25 -12
- package/TableBorderColorCommand.js.flow +86 -75
- package/TableCellColorCommand.js +11 -11
- package/TableCellColorCommand.js.flow +75 -75
- package/TableCellMenuPlugin.js +3 -4
- package/TableCellMenuPlugin.js.flow +132 -132
- package/TableInsertCommand.js +9 -10
- package/TableInsertCommand.js.flow +120 -120
- package/TableMergeCellsCommand.js +7 -8
- package/TableMergeCellsCommand.js.flow +112 -112
- package/TableNodesSpecs.js.flow +78 -78
- package/TablePlugins.js.flow +14 -14
- package/TableResizePlugin.js +3 -4
- package/TableResizePlugin.js.flow +631 -631
- package/TextColorMarkSpec.js.flow +35 -35
- package/TextHighlightMarkSpec.js.flow +38 -38
- package/TextInsertTabSpaceCommand.js +7 -8
- package/TextInsertTabSpaceCommand.js.flow +106 -106
- package/TextNoWrapMarkSpec.js.flow +14 -14
- package/TextNodeSpec.js.flow +7 -7
- package/TextSelectionMarkSpec.js.flow +24 -24
- package/TextSubMarkSpec.js.flow +20 -20
- package/TextSuperMarkSpec.js.flow +20 -20
- package/TextUnderlineMarkSpec.js.flow +27 -27
- package/Types.js +5 -0
- package/Types.js.flow +80 -75
- package/WebFontLoader.js +2 -3
- package/WebFontLoader.js.flow +22 -22
- package/blockQuoteInputRule.js.flow +36 -36
- package/bom.xml +21569 -23179
- package/browser.js.flow +7 -7
- package/buildEditorPlugins.js +2 -3
- package/buildEditorPlugins.js.flow +49 -49
- package/buildInputRules.js.flow +81 -81
- package/client/CollabConnector.js +12 -12
- package/client/CollabConnector.js.flow +90 -90
- package/client/EditorConnection.js +2 -3
- package/client/EditorConnection.js.flow +323 -323
- package/client/Licit.js +59 -60
- package/client/Licit.js.flow +643 -643
- package/client/Licit.test.js +2 -2
- package/client/Licit.test.js.flow +98 -98
- package/client/Reporter.js +2 -3
- package/client/Reporter.js.flow +37 -37
- package/client/SimpleConnector.js +1 -1
- package/client/SimpleConnector.js.flow +61 -61
- package/client/http.js.flow +70 -70
- package/client/licit.css +12 -12
- package/client/throttle.js.flow +27 -27
- package/convertFromDOMElement.js.flow +36 -36
- package/convertFromHTML.js.flow +17 -17
- package/convertFromJSON.js.flow +56 -56
- package/convertToCSSPTValue.js.flow +22 -22
- package/convertToJSON.js.flow +7 -7
- package/createCommand.js +8 -9
- package/createCommand.js.flow +62 -62
- package/createEditorKeyMap.js +1 -1
- package/createEditorKeyMap.js.flow +94 -94
- package/createEmptyEditorState.js.flow +31 -31
- package/createTableResizingPlugin.js.flow +86 -86
- package/findActionableCell.js.flow +74 -74
- package/findActiveMark.js.flow +32 -32
- package/hyphenize.js.flow +17 -17
- package/index.d.ts +165 -165
- package/index.js.flow +10 -10
- package/insertTable.js.flow +56 -56
- package/isEditorStateEmpty.js.flow +32 -32
- package/isTableNode.js.flow +15 -15
- package/joinDown.js.flow +27 -27
- package/joinListNode.js.flow +55 -55
- package/joinUp.js.flow +39 -39
- package/keymaps.js.flow +185 -185
- package/lookUpElement.js.flow +14 -14
- package/nodeAt.js.flow +12 -12
- package/normalizeHTML.js.flow +78 -78
- package/package.json +156 -155
- package/patchAnchorElements.js.flow +38 -38
- package/patchBreakElements.js.flow +22 -22
- package/patchElementInlineStyles.js.flow +92 -92
- package/patchListElements.js.flow +276 -276
- package/patchMathElements.js.flow +60 -60
- package/patchParagraphElements.js.flow +20 -20
- package/patchStyleElements.js.flow +196 -196
- package/patchTableElements.js.flow +89 -89
- package/rebaseDocWithSteps.js.flow +42 -42
- package/sanitizeURL.js.flow +13 -13
- package/splitListItem.js +1 -1
- package/splitListItem.js.flow +191 -191
- package/styles.css +19 -19
- package/styles0.css +29 -29
- package/toClosestFontPtSize.js.flow +22 -22
- package/toSafeHTMLDocument.js.flow +9 -9
- package/toggleBlockquote.js.flow +108 -108
- package/toggleCodeBlock.js.flow +102 -102
- package/ui/AlertInfo.js +7 -8
- package/ui/AlertInfo.js.flow +64 -64
- package/ui/BookmarkNodeView.js +8 -10
- package/ui/BookmarkNodeView.js.flow +66 -66
- package/ui/CommandButton.js +7 -8
- package/ui/CommandButton.js.flow +68 -68
- package/ui/CommandMenu.js +8 -9
- package/ui/CommandMenu.js.flow +75 -75
- package/ui/CommandMenuButton.js +13 -14
- package/ui/CommandMenuButton.js.flow +131 -131
- package/ui/CustomEditorView.js +8 -9
- package/ui/CustomEditorView.js.flow +28 -28
- package/ui/CustomMenu.js +3 -4
- package/ui/CustomMenu.js.flow +17 -17
- package/ui/CustomMenuItem.js +6 -8
- package/ui/CustomMenuItem.js.flow +36 -36
- package/ui/CustomNodeView.js +2 -3
- package/ui/CustomNodeView.js.flow +200 -200
- package/ui/CustomRadioButton.js +6 -7
- package/ui/CustomRadioButton.js.flow +65 -65
- package/ui/DocLayoutEditor.js +9 -10
- package/ui/DocLayoutEditor.js.flow +146 -146
- package/ui/Editor.js +15 -16
- package/ui/Editor.js.flow +288 -288
- package/ui/EditorFrameset.js +5 -6
- package/ui/EditorFrameset.js.flow +81 -81
- package/ui/EditorToolbar.js +13 -14
- package/ui/EditorToolbar.js.flow +218 -218
- package/ui/EditorToolbarConfig.js.flow +164 -164
- package/ui/FontSizeCommandMenuButton.js +5 -6
- package/ui/FontSizeCommandMenuButton.js.flow +66 -66
- package/ui/FontTypeCommandMenuButton.js +5 -6
- package/ui/FontTypeCommandMenuButton.js.flow +61 -61
- package/ui/Frag.js +3 -4
- package/ui/Frag.js.flow +13 -13
- package/ui/Icon.js +9 -12
- package/ui/Icon.js.flow +89 -89
- package/ui/ImageInlineEditor.js +6 -7
- package/ui/ImageInlineEditor.js.flow +67 -67
- package/ui/KeyCodes.js.flow +12 -12
- package/ui/LinkTooltip.js +9 -10
- package/ui/LinkTooltip.js.flow +85 -85
- package/ui/LinkURLEditor.js +9 -10
- package/ui/LinkURLEditor.js.flow +117 -117
- package/ui/ListItemNodeView.js +2 -3
- package/ui/ListItemNodeView.js.flow +98 -98
- package/ui/ListTypeButton.js +13 -14
- package/ui/ListTypeButton.js.flow +131 -131
- package/ui/ListTypeCommandButton.js +5 -6
- package/ui/ListTypeCommandButton.js.flow +85 -85
- package/ui/ListTypeMenu.js +11 -12
- package/ui/ListTypeMenu.js.flow +70 -70
- package/ui/LoadingIndicator.js +3 -4
- package/ui/LoadingIndicator.js.flow +20 -20
- package/ui/MathEditor.js +10 -11
- package/ui/MathEditor.js.flow +78 -78
- package/ui/MathInlineEditor.js +8 -9
- package/ui/MathInlineEditor.js.flow +102 -102
- package/ui/MathNodeView.js +14 -16
- package/ui/MathNodeView.js.flow +186 -186
- package/ui/PasteMenu.js +10 -11
- package/ui/PasteMenu.js.flow +57 -57
- package/ui/ResizeObserver.js.flow +106 -106
- package/ui/RichTextEditor.js +9 -10
- package/ui/RichTextEditor.js.flow +133 -133
- package/ui/SelectionObserver.js +2 -3
- package/ui/SelectionObserver.js.flow +134 -134
- package/ui/TableCellMenu.js +6 -7
- package/ui/TableCellMenu.js.flow +51 -51
- package/ui/TableGridSizeEditor.js +19 -21
- package/ui/TableGridSizeEditor.js.flow +184 -184
- package/ui/TableNodeView.js +3 -4
- package/ui/TableNodeView.js.flow +25 -25
- package/ui/bindScrollHandler.js.flow +46 -46
- package/ui/canUseCSSFont.js.flow +43 -43
- package/ui/czi-body-layout-editor.css +16 -16
- package/ui/czi-bookmark-view.css +10 -10
- package/ui/czi-cursor-placeholder.css +36 -36
- package/ui/czi-custom-menu-button.css +18 -18
- package/ui/czi-custom-menu-item.css +30 -30
- package/ui/czi-custom-menu.css +8 -8
- package/ui/czi-custom-radio-button.css +80 -80
- package/ui/czi-custom-scrollbar.css +21 -21
- package/ui/czi-editor-frameset.css +81 -81
- package/ui/czi-editor-toolbar.css +122 -122
- package/ui/czi-editor.css +220 -220
- package/ui/czi-form.css +107 -107
- package/ui/czi-frag.css +3 -3
- package/ui/czi-heading.css +40 -40
- package/ui/czi-icon.css +72 -72
- package/ui/czi-image-resize-box.css +165 -165
- package/ui/czi-image-upload-editor.css +57 -57
- package/ui/czi-image-upload-placeholder.css +50 -50
- package/ui/czi-image-url-editor.css +38 -38
- package/ui/czi-image-view.css +125 -125
- package/ui/czi-indent.css +137 -137
- package/ui/czi-inline-editor.css +20 -20
- package/ui/czi-link-tooltip.css +71 -71
- package/ui/czi-list.css +410 -410
- package/ui/czi-loading-indicator.css +111 -111
- package/ui/czi-math-view.css +62 -62
- package/ui/czi-selection-placeholder.css +24 -24
- package/ui/czi-table-cell-menu.css +14 -14
- package/ui/czi-table-grid-size-editor.css +37 -37
- package/ui/czi-table.css +87 -87
- package/ui/czi-vars.css +2 -2
- package/ui/findActiveFontSize.js.flow +58 -58
- package/ui/findActiveFontType.js.flow +38 -38
- package/ui/fonts.css +460 -460
- package/ui/handleEditorDrop.js.flow +28 -28
- package/ui/handleEditorKeyDown.js.flow +39 -39
- package/ui/handleEditorPaste.js.flow +33 -33
- package/ui/htmlElementToRect.js.flow +18 -18
- package/ui/icon-font.css +9 -9
- package/ui/injectStyleSheet.js.flow +42 -42
- package/ui/isElementFullyVisible.js.flow +26 -26
- package/ui/isOffline.js.flow +8 -8
- package/ui/isReactClass.js.flow +12 -12
- package/ui/listType.css +21 -21
- package/ui/mathquill-editor/MathQuillEditor.js +15 -17
- package/ui/mathquill-editor/MathQuillEditor.js.flow +159 -159
- package/ui/mathquill-editor/MathQuillEditorSymbols.js.flow +483 -483
- package/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js +6 -7
- package/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js.flow +50 -50
- package/ui/mathquill-editor/czi-mathquill-editor-symbols-panel.css +39 -39
- package/ui/mathquill-editor/czi-mathquill-editor.css +50 -50
- package/ui/mathquill-editor/mathquill-import-kludge.js.flow +24 -24
- package/ui/renderLaTeXAsHTML.js +1 -1
- package/ui/renderLaTeXAsHTML.js.flow +46 -46
- package/ui/resolveImage.js +1 -1
- package/ui/resolveImage.js.flow +123 -123
- package/ui/toCSSColor.js.flow +51 -51
- package/ui/toCSSLineSpacing.js.flow +55 -55
- package/ui/toHexColor.js.flow +26 -26
- package/ui/uuid.js.flow +9 -9
- package/uuid.js.flow +9 -9
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import nullthrows from 'nullthrows';
|
|
4
|
-
import { EditorState } from 'prosemirror-state';
|
|
5
|
-
import { TextSelection } from 'prosemirror-state';
|
|
6
|
-
import { Transform } from 'prosemirror-transform';
|
|
7
|
-
import { EditorView } from 'prosemirror-view';
|
|
8
|
-
import { Fragment } from 'prosemirror-model';
|
|
9
|
-
import insertTable from './insertTable.js';
|
|
10
|
-
import { atAnchorRight } from '@modusoperandi/licit-ui-commands';
|
|
11
|
-
import TableGridSizeEditor from './ui/TableGridSizeEditor.js';
|
|
12
|
-
import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
|
|
13
|
-
import { createPopUp } from '@modusoperandi/licit-ui-commands';
|
|
14
|
-
import {
|
|
15
|
-
PARAGRAPH
|
|
16
|
-
} from './NodeNames.js';
|
|
17
|
-
import type {
|
|
18
|
-
TableGridSizeEditorValue
|
|
19
|
-
} from './ui/TableGridSizeEditor.js';
|
|
20
|
-
|
|
21
|
-
class TableInsertCommand extends UICommand {
|
|
22
|
-
_popUp = null;
|
|
23
|
-
|
|
24
|
-
shouldRespondToUIEvent = (e: SyntheticEvent<> | MouseEvent): boolean => {
|
|
25
|
-
return e.type === UICommand.EventType.MOUSEENTER;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
isEnabled = (state: EditorState): boolean => {
|
|
29
|
-
const tr = state;
|
|
30
|
-
let bOK = false;
|
|
31
|
-
const { selection } = tr;
|
|
32
|
-
if (selection instanceof TextSelection) {
|
|
33
|
-
bOK = selection.from === selection.to;
|
|
34
|
-
// [FS] IRAD-1065 2020-09-18
|
|
35
|
-
// Disable create table menu if the selection is inside a table.
|
|
36
|
-
if (bOK) {
|
|
37
|
-
const $head = selection.$head;
|
|
38
|
-
for (let d = $head.depth; d > 0; d--) {
|
|
39
|
-
if ($head.node(d).type.spec.tableRole == 'row') {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return bOK;
|
|
45
|
-
}
|
|
46
|
-
return bOK;
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
waitForUserInput = (
|
|
50
|
-
state: EditorState,
|
|
51
|
-
dispatch: ?(tr: Transform) => void,
|
|
52
|
-
view: ?EditorView,
|
|
53
|
-
event: ?SyntheticEvent<>
|
|
54
|
-
): Promise<any> => {
|
|
55
|
-
if (this._popUp) {
|
|
56
|
-
return Promise.resolve(undefined);
|
|
57
|
-
}
|
|
58
|
-
const target = nullthrows(event).currentTarget;
|
|
59
|
-
if (!(target instanceof HTMLElement)) {
|
|
60
|
-
return Promise.resolve(undefined);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const anchor = event ? event.currentTarget : null;
|
|
64
|
-
return new Promise((resolve) => {
|
|
65
|
-
this._popUp = createPopUp(TableGridSizeEditor, null, {
|
|
66
|
-
anchor,
|
|
67
|
-
position: atAnchorRight,
|
|
68
|
-
onClose: (val) => {
|
|
69
|
-
if (this._popUp) {
|
|
70
|
-
this._popUp = null;
|
|
71
|
-
resolve(val);
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
executeWithUserInput = (
|
|
79
|
-
state: EditorState,
|
|
80
|
-
dispatch: ?(tr: Transform) => void,
|
|
81
|
-
view: ?EditorView,
|
|
82
|
-
inputs: ?TableGridSizeEditorValue
|
|
83
|
-
): boolean => {
|
|
84
|
-
if (dispatch) {
|
|
85
|
-
const { selection, schema } = state;
|
|
86
|
-
let { tr } = state;
|
|
87
|
-
if (inputs) {
|
|
88
|
-
const { rows, cols } = inputs;
|
|
89
|
-
tr = tr.setSelection(selection);
|
|
90
|
-
tr = insertTable(tr, schema, rows, cols);
|
|
91
|
-
tr = insertParagraph(state, tr);
|
|
92
|
-
}
|
|
93
|
-
dispatch(tr);
|
|
94
|
-
}
|
|
95
|
-
return false;
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
cancel(): void {
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// [FS] 2021-04-01
|
|
104
|
-
// Add empty line after table drop
|
|
105
|
-
// To make easier to enter a line after table
|
|
106
|
-
function insertParagraph(state, tr) {
|
|
107
|
-
const paragraph = state.schema.nodes[PARAGRAPH];
|
|
108
|
-
const textNode = state.schema.text(' ');
|
|
109
|
-
const { from, to } = tr.selection;
|
|
110
|
-
if (from !== to) {
|
|
111
|
-
return tr;
|
|
112
|
-
}
|
|
113
|
-
const paragraphNode = paragraph.create({}, textNode, null);
|
|
114
|
-
tr = tr.insert(
|
|
115
|
-
from + tr.selection.$head.node(1).nodeSize - 4,
|
|
116
|
-
Fragment.from(paragraphNode)
|
|
117
|
-
);
|
|
118
|
-
return tr;
|
|
119
|
-
}
|
|
120
|
-
export default TableInsertCommand;
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import nullthrows from 'nullthrows';
|
|
4
|
+
import { EditorState } from 'prosemirror-state';
|
|
5
|
+
import { TextSelection } from 'prosemirror-state';
|
|
6
|
+
import { Transform } from 'prosemirror-transform';
|
|
7
|
+
import { EditorView } from 'prosemirror-view';
|
|
8
|
+
import { Fragment } from 'prosemirror-model';
|
|
9
|
+
import insertTable from './insertTable.js';
|
|
10
|
+
import { atAnchorRight } from '@modusoperandi/licit-ui-commands';
|
|
11
|
+
import TableGridSizeEditor from './ui/TableGridSizeEditor.js';
|
|
12
|
+
import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
|
|
13
|
+
import { createPopUp } from '@modusoperandi/licit-ui-commands';
|
|
14
|
+
import {
|
|
15
|
+
PARAGRAPH
|
|
16
|
+
} from './NodeNames.js';
|
|
17
|
+
import type {
|
|
18
|
+
TableGridSizeEditorValue
|
|
19
|
+
} from './ui/TableGridSizeEditor.js';
|
|
20
|
+
|
|
21
|
+
class TableInsertCommand extends UICommand {
|
|
22
|
+
_popUp = null;
|
|
23
|
+
|
|
24
|
+
shouldRespondToUIEvent = (e: SyntheticEvent<> | MouseEvent): boolean => {
|
|
25
|
+
return e.type === UICommand.EventType.MOUSEENTER;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
isEnabled = (state: EditorState): boolean => {
|
|
29
|
+
const tr = state;
|
|
30
|
+
let bOK = false;
|
|
31
|
+
const { selection } = tr;
|
|
32
|
+
if (selection instanceof TextSelection) {
|
|
33
|
+
bOK = selection.from === selection.to;
|
|
34
|
+
// [FS] IRAD-1065 2020-09-18
|
|
35
|
+
// Disable create table menu if the selection is inside a table.
|
|
36
|
+
if (bOK) {
|
|
37
|
+
const $head = selection.$head;
|
|
38
|
+
for (let d = $head.depth; d > 0; d--) {
|
|
39
|
+
if ($head.node(d).type.spec.tableRole == 'row') {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return bOK;
|
|
45
|
+
}
|
|
46
|
+
return bOK;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
waitForUserInput = (
|
|
50
|
+
state: EditorState,
|
|
51
|
+
dispatch: ?(tr: Transform) => void,
|
|
52
|
+
view: ?EditorView,
|
|
53
|
+
event: ?SyntheticEvent<>
|
|
54
|
+
): Promise<any> => {
|
|
55
|
+
if (this._popUp) {
|
|
56
|
+
return Promise.resolve(undefined);
|
|
57
|
+
}
|
|
58
|
+
const target = nullthrows(event).currentTarget;
|
|
59
|
+
if (!(target instanceof HTMLElement)) {
|
|
60
|
+
return Promise.resolve(undefined);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const anchor = event ? event.currentTarget : null;
|
|
64
|
+
return new Promise((resolve) => {
|
|
65
|
+
this._popUp = createPopUp(TableGridSizeEditor, null, {
|
|
66
|
+
anchor,
|
|
67
|
+
position: atAnchorRight,
|
|
68
|
+
onClose: (val) => {
|
|
69
|
+
if (this._popUp) {
|
|
70
|
+
this._popUp = null;
|
|
71
|
+
resolve(val);
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
executeWithUserInput = (
|
|
79
|
+
state: EditorState,
|
|
80
|
+
dispatch: ?(tr: Transform) => void,
|
|
81
|
+
view: ?EditorView,
|
|
82
|
+
inputs: ?TableGridSizeEditorValue
|
|
83
|
+
): boolean => {
|
|
84
|
+
if (dispatch) {
|
|
85
|
+
const { selection, schema } = state;
|
|
86
|
+
let { tr } = state;
|
|
87
|
+
if (inputs) {
|
|
88
|
+
const { rows, cols } = inputs;
|
|
89
|
+
tr = tr.setSelection(selection);
|
|
90
|
+
tr = insertTable(tr, schema, rows, cols);
|
|
91
|
+
tr = insertParagraph(state, tr);
|
|
92
|
+
}
|
|
93
|
+
dispatch(tr);
|
|
94
|
+
}
|
|
95
|
+
return false;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
cancel(): void {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// [FS] 2021-04-01
|
|
104
|
+
// Add empty line after table drop
|
|
105
|
+
// To make easier to enter a line after table
|
|
106
|
+
function insertParagraph(state, tr) {
|
|
107
|
+
const paragraph = state.schema.nodes[PARAGRAPH];
|
|
108
|
+
const textNode = state.schema.text(' ');
|
|
109
|
+
const { from, to } = tr.selection;
|
|
110
|
+
if (from !== to) {
|
|
111
|
+
return tr;
|
|
112
|
+
}
|
|
113
|
+
const paragraphNode = paragraph.create({}, textNode, null);
|
|
114
|
+
tr = tr.insert(
|
|
115
|
+
from + tr.selection.$head.node(1).nodeSize - 4,
|
|
116
|
+
Fragment.from(paragraphNode)
|
|
117
|
+
);
|
|
118
|
+
return tr;
|
|
119
|
+
}
|
|
120
|
+
export default TableInsertCommand;
|
|
@@ -4,13 +4,13 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
|
|
|
4
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; }
|
|
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
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); }
|
|
7
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
7
8
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
8
9
|
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
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
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
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 :
|
|
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 { Node } from 'prosemirror-model';
|
|
@@ -73,7 +73,6 @@ function purgeConsecutiveBlankParagraphNodes(tr, schema) {
|
|
|
73
73
|
return tr;
|
|
74
74
|
}
|
|
75
75
|
var TableMergeCellsCommand = /*#__PURE__*/function (_UICommand) {
|
|
76
|
-
_inherits(TableMergeCellsCommand, _UICommand);
|
|
77
76
|
function TableMergeCellsCommand() {
|
|
78
77
|
var _this;
|
|
79
78
|
_classCallCheck(this, TableMergeCellsCommand);
|
|
@@ -81,7 +80,7 @@ var TableMergeCellsCommand = /*#__PURE__*/function (_UICommand) {
|
|
|
81
80
|
args[_key] = arguments[_key];
|
|
82
81
|
}
|
|
83
82
|
_this = _callSuper(this, TableMergeCellsCommand, [].concat(args));
|
|
84
|
-
_defineProperty(
|
|
83
|
+
_defineProperty(_this, "execute", function (state, dispatch, view) {
|
|
85
84
|
var tr = state.tr,
|
|
86
85
|
schema = state.schema,
|
|
87
86
|
selection = state.selection;
|
|
@@ -97,20 +96,20 @@ var TableMergeCellsCommand = /*#__PURE__*/function (_UICommand) {
|
|
|
97
96
|
changed && dispatch && dispatch(endTr);
|
|
98
97
|
return changed;
|
|
99
98
|
});
|
|
100
|
-
_defineProperty(
|
|
99
|
+
_defineProperty(_this, "waitForUserInput", function (_state, _dispatch, _view, _event) {
|
|
101
100
|
return Promise.resolve(undefined);
|
|
102
101
|
});
|
|
103
|
-
_defineProperty(
|
|
102
|
+
_defineProperty(_this, "executeWithUserInput", function (_state, _dispatch, _view, _inputs) {
|
|
104
103
|
return false;
|
|
105
104
|
});
|
|
106
105
|
return _this;
|
|
107
106
|
}
|
|
108
|
-
|
|
107
|
+
_inherits(TableMergeCellsCommand, _UICommand);
|
|
108
|
+
return _createClass(TableMergeCellsCommand, [{
|
|
109
109
|
key: "cancel",
|
|
110
110
|
value: function cancel() {
|
|
111
111
|
return null;
|
|
112
112
|
}
|
|
113
113
|
}]);
|
|
114
|
-
return TableMergeCellsCommand;
|
|
115
114
|
}(UICommand);
|
|
116
115
|
export default TableMergeCellsCommand;
|
|
@@ -1,112 +1,112 @@
|
|
|
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 } 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;
|