@modusoperandi/licit 1.4.3 → 1.4.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.
- package/BlockquoteInsertNewLineCommand.js.flow +70 -70
- package/BlockquoteNodeSpec.js.flow +29 -29
- package/BlockquoteToggleCommand.js.flow +56 -56
- package/BookmarkNodeSpec.js.flow +39 -39
- package/BulletListNodeSpec.js.flow +61 -61
- package/CZIProseMirror.js.flow +90 -90
- package/CodeBlockCommand.js.flow +65 -65
- package/CodeBlockNodeSpec.js.flow +24 -24
- package/CodeMarkSpec.js.flow +14 -14
- package/ContentPlaceholderPlugin.js.flow +183 -183
- package/CursorPlaceholderPlugin.js.flow +113 -113
- package/DocLayoutCommand.js.flow +97 -97
- package/DocNodeSpec.js.flow +62 -62
- package/EMMarkSpec.js.flow +39 -39
- package/EditorCommands.js.flow +124 -124
- package/EditorKeyMap.js.flow +173 -173
- package/EditorMarks.js +4 -2
- package/EditorMarks.js.flow +77 -74
- package/EditorNodes.js.flow +55 -55
- 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 +54 -54
- package/FontTypeMarkSpec.js.flow +89 -89
- package/HTMLMutator.js.flow +58 -58
- package/HangingIndentMarkSpec.js +34 -0
- package/HangingIndentMarkSpec.js.flow +30 -0
- package/HardBreakNodeSpec.js.flow +15 -15
- package/HeadingNodeSpec.js.flow +42 -42
- package/HistoryRedoCommand.js.flow +41 -41
- package/HistoryUndoCommand.js.flow +41 -41
- package/HorizontalRuleCommand.js.flow +71 -71
- package/HorizontalRuleNodeSpec.js.flow +39 -39
- package/ImageUploadPlaceholderPlugin.js.flow +187 -187
- package/LICENSE +22 -22
- package/LinkMarkSpec.js +13 -3
- package/LinkMarkSpec.js.flow +41 -37
- package/LinkSetURLCommand.js.flow +129 -129
- package/LinkTooltipPlugin.js +34 -37
- package/LinkTooltipPlugin.js.flow +207 -217
- package/ListItemInsertNewLineCommand.js.flow +76 -76
- package/ListItemMergeCommand.js.flow +197 -197
- package/ListItemNodeSpec.js.flow +52 -52
- package/ListSplitCommand.js.flow +54 -54
- package/ListToggleCommand.js.flow +99 -99
- package/MarkNames.js +2 -1
- package/MarkNames.js.flow +20 -19
- package/MarksClearCommand.js.flow +66 -66
- package/NodeNames.js.flow +23 -23
- package/OrderedListNodeSpec.js.flow +131 -131
- package/OverrideMarkSpec.js.flow +49 -49
- package/ParagraphNodeSpec.js +21 -2
- package/ParagraphNodeSpec.js.flow +233 -215
- package/ParagraphSpacingCommand.js.flow +139 -139
- package/PrintCommand.js.flow +53 -53
- package/SelectionPlaceholderPlugin.js.flow +129 -129
- package/SpacerMarkSpec.js.flow +47 -47
- package/StrikeMarkSpec.js.flow +24 -24
- package/StrongMarkSpec.js.flow +39 -39
- package/StyleView.js.flow +18 -18
- package/TableBackgroundColorCommand.js.flow +79 -79
- package/TableBorderColorCommand.js +5 -3
- package/TableBorderColorCommand.js.flow +108 -106
- package/TableCellColorCommand.js.flow +73 -73
- package/TableCellMenuPlugin.js.flow +129 -129
- package/TableInsertCommand.js.flow +117 -117
- package/TableMergeCellsCommand.js.flow +113 -113
- package/TableNodesSpecs.js.flow +144 -144
- package/TablePlugins.js.flow +14 -14
- package/TableResizePlugin.js.flow +636 -636
- package/TextColorMarkSpec.js.flow +40 -40
- package/TextHighlightMarkSpec.js.flow +47 -47
- package/TextInsertTabSpaceCommand.js +0 -3
- package/TextInsertTabSpaceCommand.js.flow +103 -106
- package/TextNoWrapMarkSpec.js.flow +14 -14
- package/TextNodeSpec.js.flow +7 -7
- package/TextSelectionMarkSpec.js.flow +24 -24
- package/TextSubMarkSpec.js.flow +28 -28
- package/TextSuperMarkSpec.js.flow +28 -28
- package/TextUnderlineMarkSpec.js.flow +24 -24
- package/Types.js.flow +77 -77
- package/WebFontLoader.js.flow +22 -22
- package/blockQuoteInputRule.js.flow +36 -36
- package/bom.xml +9555 -9683
- package/browser.js.flow +7 -7
- package/buildEditorPlugins.js.flow +48 -48
- package/buildInputRules.js.flow +85 -85
- package/client/CollabConnector.js.flow +90 -90
- package/client/EditorConnection.js.flow +324 -324
- package/client/Licit.js +39 -39
- package/client/Licit.js.flow +649 -649
- package/client/Licit.test.js.flow +104 -104
- package/client/Reporter.js.flow +35 -35
- package/client/SimpleConnector.js.flow +61 -61
- package/client/http.js.flow +60 -60
- package/client/licit.css +12 -12
- package/client/throttle.js.flow +27 -27
- package/convertFromDOMElement.js.flow +33 -33
- package/convertFromHTML.js.flow +15 -15
- package/convertFromJSON.js.flow +53 -53
- package/convertToCSSPTValue.js.flow +19 -19
- package/convertToJSON.js.flow +7 -7
- package/createCommand.js.flow +62 -62
- package/createEditorKeyMap.js.flow +87 -87
- package/createEmptyEditorState.js.flow +29 -29
- 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 +167 -167
- package/index.js.flow +10 -10
- package/insertTable.js.flow +54 -54
- package/isEditorStateEmpty.js.flow +32 -32
- package/isTableNode.js.flow +15 -15
- package/joinDown.js.flow +25 -25
- package/joinListNode.js.flow +55 -55
- package/joinUp.js.flow +37 -37
- package/keymaps.js.flow +175 -175
- package/lookUpElement.js.flow +14 -14
- package/nodeAt.js.flow +12 -12
- package/normalizeHTML.js.flow +80 -80
- package/package.json +152 -152
- package/patchAnchorElements.js.flow +38 -38
- package/patchBreakElements.js.flow +22 -22
- package/patchElementInlineStyles.js.flow +92 -92
- package/patchListElements.js.flow +275 -275
- package/patchMathElements.js.flow +58 -58
- package/patchParagraphElements.js.flow +20 -20
- package/patchStyleElements.js.flow +197 -197
- package/patchTableElements.js.flow +88 -88
- package/rebaseDocWithSteps.js.flow +42 -42
- package/sanitizeURL.js.flow +13 -13
- package/splitListItem.js.flow +191 -191
- package/styles.css +46 -46
- package/toClosestFontPtSize.js.flow +22 -22
- package/toSafeHTMLDocument.js.flow +9 -9
- package/toggleBlockquote.js.flow +101 -101
- package/toggleCodeBlock.js.flow +102 -102
- package/ui/AlertInfo.js.flow +63 -63
- package/ui/BookmarkNodeView.js.flow +64 -64
- package/ui/CommandButton.js.flow +68 -68
- package/ui/CommandMenu.js.flow +74 -74
- package/ui/CommandMenuButton.js.flow +128 -128
- package/ui/CustomEditorView.js.flow +29 -29
- package/ui/CustomMenu.js.flow +14 -14
- package/ui/CustomMenuItem.js.flow +35 -35
- package/ui/CustomNodeView.js.flow +207 -207
- package/ui/CustomRadioButton.js.flow +63 -63
- package/ui/DocLayoutEditor.js.flow +130 -130
- package/ui/Editor.js.flow +281 -281
- package/ui/EditorFrameset.js.flow +79 -79
- package/ui/EditorToolbar.js.flow +197 -197
- package/ui/EditorToolbarConfig.js.flow +162 -162
- package/ui/FontSizeCommandMenuButton.js.flow +66 -66
- package/ui/FontTypeCommandMenuButton.js.flow +60 -60
- package/ui/Frag.js.flow +11 -11
- package/ui/Icon.js.flow +82 -82
- package/ui/ImageInlineEditor.js.flow +66 -66
- package/ui/KeyCodes.js.flow +12 -12
- package/ui/LinkTooltip.js.flow +51 -51
- package/ui/LinkURLEditor.js.flow +227 -227
- package/ui/ListItemNodeView.js.flow +101 -101
- package/ui/ListTypeButton.js.flow +121 -121
- package/ui/ListTypeCommandButton.js.flow +85 -85
- package/ui/ListTypeMenu.js.flow +78 -78
- package/ui/LoadingIndicator.js.flow +19 -19
- package/ui/PasteMenu.js.flow +52 -52
- package/ui/ResizeObserver.js.flow +105 -105
- package/ui/RichTextEditor.js.flow +133 -133
- package/ui/SelectionObserver.js.flow +134 -134
- package/ui/TableCellMenu.js.flow +49 -49
- package/ui/TableGridSizeEditor.js.flow +185 -185
- package/ui/TableNodeView.js.flow +36 -36
- package/ui/bindScrollHandler.js.flow +46 -46
- package/ui/canUseCSSFont.js.flow +42 -42
- 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 +239 -216
- package/ui/czi-form.css +201 -201
- 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 +121 -121
- package/ui/czi-indent.css +137 -137
- package/ui/czi-inline-editor.css +20 -20
- package/ui/czi-link-tooltip.css +112 -112
- package/ui/czi-list.css +406 -406
- package/ui/czi-loading-indicator.css +66 -66
- package/ui/czi-math-view.css +62 -62
- package/ui/czi-selection-placeholder.css +24 -24
- package/ui/czi-table-cell-menu.css +16 -16
- package/ui/czi-table-grid-size-editor.css +37 -37
- package/ui/czi-table.css +89 -89
- package/ui/czi-vars.css +47 -45
- package/ui/findActiveFontSize.js.flow +55 -55
- package/ui/findActiveFontType.js.flow +35 -35
- 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 +40 -40
- package/ui/isElementFullyVisible.js.flow +14 -14
- package/ui/isOffline.js.flow +8 -8
- package/ui/isReactClass.js.flow +12 -12
- package/ui/listType.css +21 -21
- package/ui/resolveImage.js.flow +121 -121
- package/ui/toCSSColor.js.flow +51 -51
- package/ui/toCSSLineSpacing.js.flow +53 -53
- package/ui/toHexColor.js.flow +26 -26
- package/ui/uuid.js.flow +9 -9
- package/uuid.js.flow +9 -9
package/CZIProseMirror.js.flow
CHANGED
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import { EditorView } from 'prosemirror-view';
|
|
4
|
-
|
|
5
|
-
import convertToJSON from './convertToJSON.js';
|
|
6
|
-
import CustomEditorView from './ui/CustomEditorView.js';
|
|
7
|
-
import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
|
|
8
|
-
|
|
9
|
-
const commandsRegistery = new Map();
|
|
10
|
-
const viewsRegistery = new Map();
|
|
11
|
-
|
|
12
|
-
// This file exports methods to help developer to debug editor from web
|
|
13
|
-
// inspector. To use this, add the following lines to export the utility.
|
|
14
|
-
//
|
|
15
|
-
// import * as CZIProseMirror from 'czi-prosemirror/dist/CZIProseMirror';
|
|
16
|
-
// window.CZIProseMirror = CZIProseMirror;
|
|
17
|
-
|
|
18
|
-
export function registeryKeys(): Array<string> {
|
|
19
|
-
return Array.from(viewsRegistery.keys());
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function exportJSON(id: ?string): Object {
|
|
23
|
-
if (!id && viewsRegistery.size) {
|
|
24
|
-
id = registeryKeys()[0];
|
|
25
|
-
console.log(`use default editor id "${id}"`);
|
|
26
|
-
}
|
|
27
|
-
const view = viewsRegistery.get(String(id));
|
|
28
|
-
if (!view) {
|
|
29
|
-
if (!id) {
|
|
30
|
-
id = '';
|
|
31
|
-
}
|
|
32
|
-
throw new Error(`view ${id} does not exist`);
|
|
33
|
-
}
|
|
34
|
-
return convertToJSON(view.state);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export function registerEditorView(id: string, view: EditorView): void {
|
|
38
|
-
if (viewsRegistery.has(id)) {
|
|
39
|
-
throw new Error(`view ${id} already registered`);
|
|
40
|
-
}
|
|
41
|
-
if (!(view instanceof CustomEditorView)) {
|
|
42
|
-
throw new Error(`invalid view ${id}`);
|
|
43
|
-
}
|
|
44
|
-
if (!id) {
|
|
45
|
-
throw new Error('id is required');
|
|
46
|
-
}
|
|
47
|
-
viewsRegistery.set(id, view);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export function releaseEditorView(id: string): void {
|
|
51
|
-
if (!viewsRegistery.has(id)) {
|
|
52
|
-
throw new Error(`view ${id} was released`);
|
|
53
|
-
}
|
|
54
|
-
viewsRegistery.delete(id);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export function findEditorView(id: string): ?EditorView {
|
|
58
|
-
return viewsRegistery.get(id) || null;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export function executeCommand(name: string, viewID: ?string): boolean {
|
|
62
|
-
const command = commandsRegistery.get(name);
|
|
63
|
-
if (command) {
|
|
64
|
-
const view = viewID
|
|
65
|
-
? viewsRegistery.get(viewID)
|
|
66
|
-
: Array.from(viewsRegistery.values())[0];
|
|
67
|
-
if (view) {
|
|
68
|
-
try {
|
|
69
|
-
return command.execute(view.state, view.dispatch, view, null);
|
|
70
|
-
} catch (ex) {
|
|
71
|
-
console.warn(ex);
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export function registerCommand(name: string, command: UICommand): void {
|
|
80
|
-
if (!(command instanceof UICommand)) {
|
|
81
|
-
throw new Error(`invalid command ${name}`);
|
|
82
|
-
}
|
|
83
|
-
if (!name) {
|
|
84
|
-
throw new Error('invalid command name');
|
|
85
|
-
}
|
|
86
|
-
if (commandsRegistery.has(name)) {
|
|
87
|
-
throw new Error(`command ${name} already registered`);
|
|
88
|
-
}
|
|
89
|
-
commandsRegistery.set(name, command);
|
|
90
|
-
}
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import { EditorView } from 'prosemirror-view';
|
|
4
|
+
|
|
5
|
+
import convertToJSON from './convertToJSON.js';
|
|
6
|
+
import CustomEditorView from './ui/CustomEditorView.js';
|
|
7
|
+
import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
|
|
8
|
+
|
|
9
|
+
const commandsRegistery = new Map();
|
|
10
|
+
const viewsRegistery = new Map();
|
|
11
|
+
|
|
12
|
+
// This file exports methods to help developer to debug editor from web
|
|
13
|
+
// inspector. To use this, add the following lines to export the utility.
|
|
14
|
+
//
|
|
15
|
+
// import * as CZIProseMirror from 'czi-prosemirror/dist/CZIProseMirror';
|
|
16
|
+
// window.CZIProseMirror = CZIProseMirror;
|
|
17
|
+
|
|
18
|
+
export function registeryKeys(): Array<string> {
|
|
19
|
+
return Array.from(viewsRegistery.keys());
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function exportJSON(id: ?string): Object {
|
|
23
|
+
if (!id && viewsRegistery.size) {
|
|
24
|
+
id = registeryKeys()[0];
|
|
25
|
+
console.log(`use default editor id "${id}"`);
|
|
26
|
+
}
|
|
27
|
+
const view = viewsRegistery.get(String(id));
|
|
28
|
+
if (!view) {
|
|
29
|
+
if (!id) {
|
|
30
|
+
id = '';
|
|
31
|
+
}
|
|
32
|
+
throw new Error(`view ${id} does not exist`);
|
|
33
|
+
}
|
|
34
|
+
return convertToJSON(view.state);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function registerEditorView(id: string, view: EditorView): void {
|
|
38
|
+
if (viewsRegistery.has(id)) {
|
|
39
|
+
throw new Error(`view ${id} already registered`);
|
|
40
|
+
}
|
|
41
|
+
if (!(view instanceof CustomEditorView)) {
|
|
42
|
+
throw new Error(`invalid view ${id}`);
|
|
43
|
+
}
|
|
44
|
+
if (!id) {
|
|
45
|
+
throw new Error('id is required');
|
|
46
|
+
}
|
|
47
|
+
viewsRegistery.set(id, view);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function releaseEditorView(id: string): void {
|
|
51
|
+
if (!viewsRegistery.has(id)) {
|
|
52
|
+
throw new Error(`view ${id} was released`);
|
|
53
|
+
}
|
|
54
|
+
viewsRegistery.delete(id);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function findEditorView(id: string): ?EditorView {
|
|
58
|
+
return viewsRegistery.get(id) || null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function executeCommand(name: string, viewID: ?string): boolean {
|
|
62
|
+
const command = commandsRegistery.get(name);
|
|
63
|
+
if (command) {
|
|
64
|
+
const view = viewID
|
|
65
|
+
? viewsRegistery.get(viewID)
|
|
66
|
+
: Array.from(viewsRegistery.values())[0];
|
|
67
|
+
if (view) {
|
|
68
|
+
try {
|
|
69
|
+
return command.execute(view.state, view.dispatch, view, null);
|
|
70
|
+
} catch (ex) {
|
|
71
|
+
console.warn(ex);
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function registerCommand(name: string, command: UICommand): void {
|
|
80
|
+
if (!(command instanceof UICommand)) {
|
|
81
|
+
throw new Error(`invalid command ${name}`);
|
|
82
|
+
}
|
|
83
|
+
if (!name) {
|
|
84
|
+
throw new Error('invalid command name');
|
|
85
|
+
}
|
|
86
|
+
if (commandsRegistery.has(name)) {
|
|
87
|
+
throw new Error(`command ${name} already registered`);
|
|
88
|
+
}
|
|
89
|
+
commandsRegistery.set(name, command);
|
|
90
|
+
}
|
package/CodeBlockCommand.js.flow
CHANGED
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import { EditorState } from 'prosemirror-state';
|
|
4
|
-
import { Transform } from 'prosemirror-transform';
|
|
5
|
-
import { findParentNodeOfType } from 'prosemirror-utils';
|
|
6
|
-
import { EditorView } from 'prosemirror-view';
|
|
7
|
-
import * as React from 'react';
|
|
8
|
-
import { CODE_BLOCK } from './NodeNames';
|
|
9
|
-
import { noop } from '@modusoperandi/licit-ui-commands';
|
|
10
|
-
import toggleCodeBlock from './toggleCodeBlock';
|
|
11
|
-
import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
|
|
12
|
-
|
|
13
|
-
class CodeBlockCommand extends UICommand {
|
|
14
|
-
isActive = (state: EditorState): boolean => {
|
|
15
|
-
const result = this._findCodeBlock(state);
|
|
16
|
-
return !!result?.node;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
execute = (
|
|
20
|
-
state: EditorState,
|
|
21
|
-
dispatch: ?(tr: Transform) => void,
|
|
22
|
-
view: ?EditorView
|
|
23
|
-
): boolean => {
|
|
24
|
-
const { selection, schema } = state;
|
|
25
|
-
let { tr } = state;
|
|
26
|
-
tr = tr.setSelection(selection);
|
|
27
|
-
tr = toggleCodeBlock(tr, schema);
|
|
28
|
-
if (tr.docChanged) {
|
|
29
|
-
dispatch && dispatch(tr);
|
|
30
|
-
return true;
|
|
31
|
-
} else {
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
_findCodeBlock(state: EditorState): ?Object {
|
|
37
|
-
const codeBlock = state.schema.nodes[CODE_BLOCK];
|
|
38
|
-
const findCodeBlock = codeBlock ? findParentNodeOfType(codeBlock) : noop;
|
|
39
|
-
return findCodeBlock(state.selection);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
waitForUserInput = (
|
|
43
|
-
_state: EditorState,
|
|
44
|
-
_dispatch: ?(tr: Transform) => void,
|
|
45
|
-
_view: ?EditorView,
|
|
46
|
-
_event: ?React.SyntheticEvent
|
|
47
|
-
): Promise<undefined> => {
|
|
48
|
-
return Promise.resolve(undefined);
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
executeWithUserInput = (
|
|
52
|
-
_state: EditorState,
|
|
53
|
-
_dispatch: ?(tr: Transform) => void,
|
|
54
|
-
_view: ?EditorView,
|
|
55
|
-
_inputs: ?string
|
|
56
|
-
): boolean => {
|
|
57
|
-
return false;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
cancel(): void {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export default CodeBlockCommand;
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import { EditorState } from 'prosemirror-state';
|
|
4
|
+
import { Transform } from 'prosemirror-transform';
|
|
5
|
+
import { findParentNodeOfType } from 'prosemirror-utils';
|
|
6
|
+
import { EditorView } from 'prosemirror-view';
|
|
7
|
+
import * as React from 'react';
|
|
8
|
+
import { CODE_BLOCK } from './NodeNames';
|
|
9
|
+
import { noop } from '@modusoperandi/licit-ui-commands';
|
|
10
|
+
import toggleCodeBlock from './toggleCodeBlock';
|
|
11
|
+
import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
|
|
12
|
+
|
|
13
|
+
class CodeBlockCommand extends UICommand {
|
|
14
|
+
isActive = (state: EditorState): boolean => {
|
|
15
|
+
const result = this._findCodeBlock(state);
|
|
16
|
+
return !!result?.node;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
execute = (
|
|
20
|
+
state: EditorState,
|
|
21
|
+
dispatch: ?(tr: Transform) => void,
|
|
22
|
+
view: ?EditorView
|
|
23
|
+
): boolean => {
|
|
24
|
+
const { selection, schema } = state;
|
|
25
|
+
let { tr } = state;
|
|
26
|
+
tr = tr.setSelection(selection);
|
|
27
|
+
tr = toggleCodeBlock(tr, schema);
|
|
28
|
+
if (tr.docChanged) {
|
|
29
|
+
dispatch && dispatch(tr);
|
|
30
|
+
return true;
|
|
31
|
+
} else {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
_findCodeBlock(state: EditorState): ?Object {
|
|
37
|
+
const codeBlock = state.schema.nodes[CODE_BLOCK];
|
|
38
|
+
const findCodeBlock = codeBlock ? findParentNodeOfType(codeBlock) : noop;
|
|
39
|
+
return findCodeBlock(state.selection);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
waitForUserInput = (
|
|
43
|
+
_state: EditorState,
|
|
44
|
+
_dispatch: ?(tr: Transform) => void,
|
|
45
|
+
_view: ?EditorView,
|
|
46
|
+
_event: ?React.SyntheticEvent
|
|
47
|
+
): Promise<undefined> => {
|
|
48
|
+
return Promise.resolve(undefined);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
executeWithUserInput = (
|
|
52
|
+
_state: EditorState,
|
|
53
|
+
_dispatch: ?(tr: Transform) => void,
|
|
54
|
+
_view: ?EditorView,
|
|
55
|
+
_inputs: ?string
|
|
56
|
+
): boolean => {
|
|
57
|
+
return false;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
cancel(): void {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export default CodeBlockCommand;
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
const PRE_DOM = ['pre', ['code', 0]];
|
|
4
|
-
|
|
5
|
-
// https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js
|
|
6
|
-
// :: NodeSpec A code listing. Disallows marks or non-text inline
|
|
7
|
-
// nodes by default. Represented as a `<pre>` element with a
|
|
8
|
-
// `<code>` element inside of it.
|
|
9
|
-
const CodeBlockNodeSpec = {
|
|
10
|
-
attrs: {
|
|
11
|
-
id: { default: null },
|
|
12
|
-
},
|
|
13
|
-
content: 'inline*',
|
|
14
|
-
group: 'block',
|
|
15
|
-
marks: '_',
|
|
16
|
-
code: true,
|
|
17
|
-
defining: true,
|
|
18
|
-
parseDOM: [{ tag: 'pre', preserveWhitespace: 'full' }],
|
|
19
|
-
toDOM() {
|
|
20
|
-
return PRE_DOM;
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export default CodeBlockNodeSpec;
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
const PRE_DOM = ['pre', ['code', 0]];
|
|
4
|
+
|
|
5
|
+
// https://github.com/ProseMirror/prosemirror-schema-basic/blob/master/src/schema-basic.js
|
|
6
|
+
// :: NodeSpec A code listing. Disallows marks or non-text inline
|
|
7
|
+
// nodes by default. Represented as a `<pre>` element with a
|
|
8
|
+
// `<code>` element inside of it.
|
|
9
|
+
const CodeBlockNodeSpec = {
|
|
10
|
+
attrs: {
|
|
11
|
+
id: { default: null },
|
|
12
|
+
},
|
|
13
|
+
content: 'inline*',
|
|
14
|
+
group: 'block',
|
|
15
|
+
marks: '_',
|
|
16
|
+
code: true,
|
|
17
|
+
defining: true,
|
|
18
|
+
parseDOM: [{ tag: 'pre', preserveWhitespace: 'full' }],
|
|
19
|
+
toDOM() {
|
|
20
|
+
return PRE_DOM;
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export default CodeBlockNodeSpec;
|
package/CodeMarkSpec.js.flow
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import type { MarkSpec } from './Types.js';
|
|
4
|
-
|
|
5
|
-
const CODE_DOM = ['code', 0];
|
|
6
|
-
|
|
7
|
-
const CodeMarkSpec: MarkSpec = {
|
|
8
|
-
parseDOM: [{ tag: 'code' }],
|
|
9
|
-
toDOM() {
|
|
10
|
-
return CODE_DOM;
|
|
11
|
-
},
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export default CodeMarkSpec;
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import type { MarkSpec } from './Types.js';
|
|
4
|
+
|
|
5
|
+
const CODE_DOM = ['code', 0];
|
|
6
|
+
|
|
7
|
+
const CodeMarkSpec: MarkSpec = {
|
|
8
|
+
parseDOM: [{ tag: 'code' }],
|
|
9
|
+
toDOM() {
|
|
10
|
+
return CODE_DOM;
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default CodeMarkSpec;
|