@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/browser.js.flow
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
const browser = {
|
|
4
|
-
isMac: () => true,
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
export default browser;
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
const browser = {
|
|
4
|
+
isMac: () => true,
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export default browser;
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
import { baseKeymap } from 'prosemirror-commands';
|
|
3
|
-
import { dropCursor } from 'prosemirror-dropcursor';
|
|
4
|
-
import { gapCursor } from 'prosemirror-gapcursor';
|
|
5
|
-
import { history } from 'prosemirror-history';
|
|
6
|
-
import { keymap } from 'prosemirror-keymap';
|
|
7
|
-
import { Schema } from 'prosemirror-model';
|
|
8
|
-
import { Plugin, PluginKey } from 'prosemirror-state';
|
|
9
|
-
import ContentPlaceholderPlugin from './ContentPlaceholderPlugin.js';
|
|
10
|
-
import CursorPlaceholderPlugin from './CursorPlaceholderPlugin.js';
|
|
11
|
-
import EditorPageLayoutPlugin from './EditorPageLayoutPlugin.js';
|
|
12
|
-
import LinkTooltipPlugin from './LinkTooltipPlugin.js';
|
|
13
|
-
import SelectionPlaceholderPlugin from './SelectionPlaceholderPlugin.js';
|
|
14
|
-
import TablePlugins from './TablePlugins.js';
|
|
15
|
-
import buildInputRules from './buildInputRules.js';
|
|
16
|
-
import createEditorKeyMap from './createEditorKeyMap.js';
|
|
17
|
-
// Creates the default plugin for the editor.
|
|
18
|
-
export default class DefaultEditorPlugins {
|
|
19
|
-
plugins: Array<Plugin>;
|
|
20
|
-
|
|
21
|
-
constructor(schema: Schema) {
|
|
22
|
-
this.plugins = [
|
|
23
|
-
new ContentPlaceholderPlugin(),
|
|
24
|
-
new CursorPlaceholderPlugin(),
|
|
25
|
-
new EditorPageLayoutPlugin(),
|
|
26
|
-
new LinkTooltipPlugin(),
|
|
27
|
-
new SelectionPlaceholderPlugin(),
|
|
28
|
-
this.setPluginKey(buildInputRules(schema), 'InputRules'),
|
|
29
|
-
this.setPluginKey(dropCursor(), 'DropCursor'),
|
|
30
|
-
this.setPluginKey(gapCursor(), 'GapCursor'),
|
|
31
|
-
history(),
|
|
32
|
-
this.setPluginKey(keymap(createEditorKeyMap()), 'EditorKeyMap'),
|
|
33
|
-
this.setPluginKey(keymap(baseKeymap), 'BaseKeymap'),
|
|
34
|
-
].concat(TablePlugins);
|
|
35
|
-
}
|
|
36
|
-
// [FS] IRAD-1005 2020-07-07
|
|
37
|
-
// Upgrade outdated packages.
|
|
38
|
-
// set plugin keys so that to avoid duplicate key error when keys are assigned automatically.
|
|
39
|
-
setPluginKey(plugin: Plugin, key: string) {
|
|
40
|
-
plugin.spec.key = new PluginKey(key + 'Plugin');
|
|
41
|
-
plugin.key = plugin.spec.key.key;
|
|
42
|
-
return plugin;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
get(): Array<Plugin> {
|
|
46
|
-
return this.plugins;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
1
|
+
// @flow
|
|
2
|
+
import { baseKeymap } from 'prosemirror-commands';
|
|
3
|
+
import { dropCursor } from 'prosemirror-dropcursor';
|
|
4
|
+
import { gapCursor } from 'prosemirror-gapcursor';
|
|
5
|
+
import { history } from 'prosemirror-history';
|
|
6
|
+
import { keymap } from 'prosemirror-keymap';
|
|
7
|
+
import { Schema } from 'prosemirror-model';
|
|
8
|
+
import { Plugin, PluginKey } from 'prosemirror-state';
|
|
9
|
+
import ContentPlaceholderPlugin from './ContentPlaceholderPlugin.js';
|
|
10
|
+
import CursorPlaceholderPlugin from './CursorPlaceholderPlugin.js';
|
|
11
|
+
import EditorPageLayoutPlugin from './EditorPageLayoutPlugin.js';
|
|
12
|
+
import LinkTooltipPlugin from './LinkTooltipPlugin.js';
|
|
13
|
+
import SelectionPlaceholderPlugin from './SelectionPlaceholderPlugin.js';
|
|
14
|
+
import TablePlugins from './TablePlugins.js';
|
|
15
|
+
import buildInputRules from './buildInputRules.js';
|
|
16
|
+
import createEditorKeyMap from './createEditorKeyMap.js';
|
|
17
|
+
// Creates the default plugin for the editor.
|
|
18
|
+
export default class DefaultEditorPlugins {
|
|
19
|
+
plugins: Array<Plugin>;
|
|
20
|
+
|
|
21
|
+
constructor(schema: Schema) {
|
|
22
|
+
this.plugins = [
|
|
23
|
+
new ContentPlaceholderPlugin(),
|
|
24
|
+
new CursorPlaceholderPlugin(),
|
|
25
|
+
new EditorPageLayoutPlugin(),
|
|
26
|
+
new LinkTooltipPlugin(),
|
|
27
|
+
new SelectionPlaceholderPlugin(),
|
|
28
|
+
this.setPluginKey(buildInputRules(schema), 'InputRules'),
|
|
29
|
+
this.setPluginKey(dropCursor(), 'DropCursor'),
|
|
30
|
+
this.setPluginKey(gapCursor(), 'GapCursor'),
|
|
31
|
+
history(),
|
|
32
|
+
this.setPluginKey(keymap(createEditorKeyMap()), 'EditorKeyMap'),
|
|
33
|
+
this.setPluginKey(keymap(baseKeymap), 'BaseKeymap'),
|
|
34
|
+
].concat(TablePlugins);
|
|
35
|
+
}
|
|
36
|
+
// [FS] IRAD-1005 2020-07-07
|
|
37
|
+
// Upgrade outdated packages.
|
|
38
|
+
// set plugin keys so that to avoid duplicate key error when keys are assigned automatically.
|
|
39
|
+
setPluginKey(plugin: Plugin, key: string) {
|
|
40
|
+
plugin.spec.key = new PluginKey(key + 'Plugin');
|
|
41
|
+
plugin.key = plugin.spec.key.key;
|
|
42
|
+
return plugin;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
get(): Array<Plugin> {
|
|
46
|
+
return this.plugins;
|
|
47
|
+
}
|
|
48
|
+
}
|
package/buildInputRules.js.flow
CHANGED
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
InputRule,
|
|
5
|
-
ellipsis,
|
|
6
|
-
emDash,
|
|
7
|
-
inputRules,
|
|
8
|
-
smartQuotes,
|
|
9
|
-
textblockTypeInputRule,
|
|
10
|
-
wrappingInputRule,
|
|
11
|
-
} from 'prosemirror-inputrules';
|
|
12
|
-
import { NodeType, Schema } from 'prosemirror-model';
|
|
13
|
-
|
|
14
|
-
import blockQuoteInputRule from './blockQuoteInputRule.js';
|
|
15
|
-
|
|
16
|
-
// This file is forked from
|
|
17
|
-
// // https://github.com/ProseMirror/prosemirror-example-setup/blob/master/src/inputrules.js
|
|
18
|
-
|
|
19
|
-
// : (NodeType) → InputRule
|
|
20
|
-
// Given a list node type, returns an input rule that turns a number
|
|
21
|
-
// followed by a dot at the start of a textblock into an ordered list.
|
|
22
|
-
function orderedListRule(nodeType: NodeType): InputRule {
|
|
23
|
-
return wrappingInputRule(
|
|
24
|
-
/^(\d+)\.\s$/,
|
|
25
|
-
nodeType,
|
|
26
|
-
(match) => ({ order: +match[1] }),
|
|
27
|
-
(match, node) => node.childCount + node.attrs.order == +match[1]
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// : (NodeType) → InputRule
|
|
32
|
-
// Given a list node type, returns an input rule that turns a bullet
|
|
33
|
-
// (dash, plush, or asterisk) at the start of a textblock into a
|
|
34
|
-
// bullet list.
|
|
35
|
-
function bulletListRule(nodeType: NodeType): InputRule {
|
|
36
|
-
return wrappingInputRule(/^\s*([-+*])\s$/, nodeType);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// : (NodeType) → InputRule
|
|
40
|
-
// Given a code block node type, returns an input rule that turns a
|
|
41
|
-
// textblock starting with three backticks into a code block.
|
|
42
|
-
function codeBlockRule(nodeType: NodeType): InputRule {
|
|
43
|
-
return textblockTypeInputRule(/^```$/, nodeType);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// : (NodeType, number) → InputRule
|
|
47
|
-
// Given a node type and a maximum level, creates an input rule that
|
|
48
|
-
// turns up to that number of `#` characters followed by a space at
|
|
49
|
-
// the start of a textblock into a heading whose level corresponds to
|
|
50
|
-
// the number of `#` signs.
|
|
51
|
-
function headingRule(nodeType: NodeType, maxLevel: number): InputRule {
|
|
52
|
-
return textblockTypeInputRule(
|
|
53
|
-
new RegExp('^(#{1,' + maxLevel + '})\\s$'),
|
|
54
|
-
nodeType,
|
|
55
|
-
(match) => ({ level: match[1].length })
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// : (Schema) → Plugin
|
|
60
|
-
// A set of input rules for creating the basic block quotes, lists,
|
|
61
|
-
// code blocks, and heading.
|
|
62
|
-
export default function buildInputRules(schema: Schema) {
|
|
63
|
-
const rules = smartQuotes.concat(ellipsis, emDash);
|
|
64
|
-
let type;
|
|
65
|
-
if (schema.nodes.blockquote) {
|
|
66
|
-
rules.push(blockQuoteInputRule());
|
|
67
|
-
}
|
|
68
|
-
type = schema.nodes.ordered_list;
|
|
69
|
-
if (type) {
|
|
70
|
-
rules.push(orderedListRule(type));
|
|
71
|
-
}
|
|
72
|
-
type = schema.nodes.bullet_list;
|
|
73
|
-
if (type) {
|
|
74
|
-
rules.push(bulletListRule(type));
|
|
75
|
-
}
|
|
76
|
-
type = schema.nodes.code_block;
|
|
77
|
-
if (type) {
|
|
78
|
-
rules.push(codeBlockRule(type));
|
|
79
|
-
}
|
|
80
|
-
type = schema.nodes.heading;
|
|
81
|
-
if (type) {
|
|
82
|
-
rules.push(headingRule(type, 6));
|
|
83
|
-
}
|
|
84
|
-
return inputRules({ rules });
|
|
85
|
-
}
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
InputRule,
|
|
5
|
+
ellipsis,
|
|
6
|
+
emDash,
|
|
7
|
+
inputRules,
|
|
8
|
+
smartQuotes,
|
|
9
|
+
textblockTypeInputRule,
|
|
10
|
+
wrappingInputRule,
|
|
11
|
+
} from 'prosemirror-inputrules';
|
|
12
|
+
import { NodeType, Schema } from 'prosemirror-model';
|
|
13
|
+
|
|
14
|
+
import blockQuoteInputRule from './blockQuoteInputRule.js';
|
|
15
|
+
|
|
16
|
+
// This file is forked from
|
|
17
|
+
// // https://github.com/ProseMirror/prosemirror-example-setup/blob/master/src/inputrules.js
|
|
18
|
+
|
|
19
|
+
// : (NodeType) → InputRule
|
|
20
|
+
// Given a list node type, returns an input rule that turns a number
|
|
21
|
+
// followed by a dot at the start of a textblock into an ordered list.
|
|
22
|
+
function orderedListRule(nodeType: NodeType): InputRule {
|
|
23
|
+
return wrappingInputRule(
|
|
24
|
+
/^(\d+)\.\s$/,
|
|
25
|
+
nodeType,
|
|
26
|
+
(match) => ({ order: +match[1] }),
|
|
27
|
+
(match, node) => node.childCount + node.attrs.order == +match[1]
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// : (NodeType) → InputRule
|
|
32
|
+
// Given a list node type, returns an input rule that turns a bullet
|
|
33
|
+
// (dash, plush, or asterisk) at the start of a textblock into a
|
|
34
|
+
// bullet list.
|
|
35
|
+
function bulletListRule(nodeType: NodeType): InputRule {
|
|
36
|
+
return wrappingInputRule(/^\s*([-+*])\s$/, nodeType);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// : (NodeType) → InputRule
|
|
40
|
+
// Given a code block node type, returns an input rule that turns a
|
|
41
|
+
// textblock starting with three backticks into a code block.
|
|
42
|
+
function codeBlockRule(nodeType: NodeType): InputRule {
|
|
43
|
+
return textblockTypeInputRule(/^```$/, nodeType);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// : (NodeType, number) → InputRule
|
|
47
|
+
// Given a node type and a maximum level, creates an input rule that
|
|
48
|
+
// turns up to that number of `#` characters followed by a space at
|
|
49
|
+
// the start of a textblock into a heading whose level corresponds to
|
|
50
|
+
// the number of `#` signs.
|
|
51
|
+
function headingRule(nodeType: NodeType, maxLevel: number): InputRule {
|
|
52
|
+
return textblockTypeInputRule(
|
|
53
|
+
new RegExp('^(#{1,' + maxLevel + '})\\s$'),
|
|
54
|
+
nodeType,
|
|
55
|
+
(match) => ({ level: match[1].length })
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// : (Schema) → Plugin
|
|
60
|
+
// A set of input rules for creating the basic block quotes, lists,
|
|
61
|
+
// code blocks, and heading.
|
|
62
|
+
export default function buildInputRules(schema: Schema) {
|
|
63
|
+
const rules = smartQuotes.concat(ellipsis, emDash);
|
|
64
|
+
let type;
|
|
65
|
+
if (schema.nodes.blockquote) {
|
|
66
|
+
rules.push(blockQuoteInputRule());
|
|
67
|
+
}
|
|
68
|
+
type = schema.nodes.ordered_list;
|
|
69
|
+
if (type) {
|
|
70
|
+
rules.push(orderedListRule(type));
|
|
71
|
+
}
|
|
72
|
+
type = schema.nodes.bullet_list;
|
|
73
|
+
if (type) {
|
|
74
|
+
rules.push(bulletListRule(type));
|
|
75
|
+
}
|
|
76
|
+
type = schema.nodes.code_block;
|
|
77
|
+
if (type) {
|
|
78
|
+
rules.push(codeBlockRule(type));
|
|
79
|
+
}
|
|
80
|
+
type = schema.nodes.heading;
|
|
81
|
+
if (type) {
|
|
82
|
+
rules.push(headingRule(type, 6));
|
|
83
|
+
}
|
|
84
|
+
return inputRules({ rules });
|
|
85
|
+
}
|
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import { Transform } from 'prosemirror-transform';
|
|
4
|
-
import { Schema } from 'prosemirror-model';
|
|
5
|
-
import { Plugin, EditorState } from 'prosemirror-state';
|
|
6
|
-
import SimpleConnector from './SimpleConnector.js';
|
|
7
|
-
import type { SetStateCall } from './SimpleConnector.js';
|
|
8
|
-
import EditorConnection from './EditorConnection.js';
|
|
9
|
-
import Reporter from './Reporter.js';
|
|
10
|
-
import ReactDOM from 'react-dom';
|
|
11
|
-
|
|
12
|
-
type IdStrict = string;
|
|
13
|
-
|
|
14
|
-
class CollabConnector extends SimpleConnector {
|
|
15
|
-
_clientID: string;
|
|
16
|
-
_connected: boolean;
|
|
17
|
-
_connection: EditorConnection;
|
|
18
|
-
_docID: IdStrict;
|
|
19
|
-
_stepKeys: Object;
|
|
20
|
-
|
|
21
|
-
constructor(
|
|
22
|
-
editorState: EditorState,
|
|
23
|
-
setState: SetStateCall,
|
|
24
|
-
config: {
|
|
25
|
-
docID: IdStrict,
|
|
26
|
-
collabServiceURL: string,
|
|
27
|
-
},
|
|
28
|
-
schema: Schema,
|
|
29
|
-
plugins: Array<Plugin>,
|
|
30
|
-
onReady: Function
|
|
31
|
-
) {
|
|
32
|
-
super(editorState, setState);
|
|
33
|
-
const { docID, collabServiceURL } = config;
|
|
34
|
-
this._docID = docID;
|
|
35
|
-
|
|
36
|
-
// [FS] IRAD-1553 2021-08-26
|
|
37
|
-
// Configurable Collaboration Service URL.
|
|
38
|
-
const url = collabServiceURL + '/docs/' + docID;
|
|
39
|
-
this._connection = new EditorConnection(
|
|
40
|
-
onReady,
|
|
41
|
-
new Reporter(),
|
|
42
|
-
url,
|
|
43
|
-
plugins,
|
|
44
|
-
schema
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
this._connection.view = {
|
|
48
|
-
updateState: (s) => {
|
|
49
|
-
setState({ editorState: s }, () => {});
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
cleanUp = () => {
|
|
55
|
-
// remove collab plugin
|
|
56
|
-
if (this._connection) {
|
|
57
|
-
const cpIdx = this._editorState.plugins.findIndex((plugin) => {
|
|
58
|
-
return 'collab$' === plugin.spec.key.key;
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
if (-1 != cpIdx) {
|
|
62
|
-
this._editorState.plugins.splice(cpIdx, 1);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
this._connection.close();
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
onEdit = (transaction: Transform): void => {
|
|
70
|
-
if (!this._connection.ready) {
|
|
71
|
-
console.warn('not ready');
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
ReactDOM.unstable_batchedUpdates(() => {
|
|
75
|
-
this._connection.dispatch({ type: 'transaction', transaction });
|
|
76
|
-
});
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
// FS IRAD-1040 2020-09-02
|
|
80
|
-
// Send the modified schema to server
|
|
81
|
-
updateSchema = (schema: Schema, data: any) => {
|
|
82
|
-
this._connection.updateSchema(schema, data, this._dataDefined);
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
updateContent = (data: any) => {
|
|
86
|
-
this._connection.start(data, this._dataDefined);
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export default CollabConnector;
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import { Transform } from 'prosemirror-transform';
|
|
4
|
+
import { Schema } from 'prosemirror-model';
|
|
5
|
+
import { Plugin, EditorState } from 'prosemirror-state';
|
|
6
|
+
import SimpleConnector from './SimpleConnector.js';
|
|
7
|
+
import type { SetStateCall } from './SimpleConnector.js';
|
|
8
|
+
import EditorConnection from './EditorConnection.js';
|
|
9
|
+
import Reporter from './Reporter.js';
|
|
10
|
+
import ReactDOM from 'react-dom';
|
|
11
|
+
|
|
12
|
+
type IdStrict = string;
|
|
13
|
+
|
|
14
|
+
class CollabConnector extends SimpleConnector {
|
|
15
|
+
_clientID: string;
|
|
16
|
+
_connected: boolean;
|
|
17
|
+
_connection: EditorConnection;
|
|
18
|
+
_docID: IdStrict;
|
|
19
|
+
_stepKeys: Object;
|
|
20
|
+
|
|
21
|
+
constructor(
|
|
22
|
+
editorState: EditorState,
|
|
23
|
+
setState: SetStateCall,
|
|
24
|
+
config: {
|
|
25
|
+
docID: IdStrict,
|
|
26
|
+
collabServiceURL: string,
|
|
27
|
+
},
|
|
28
|
+
schema: Schema,
|
|
29
|
+
plugins: Array<Plugin>,
|
|
30
|
+
onReady: Function
|
|
31
|
+
) {
|
|
32
|
+
super(editorState, setState);
|
|
33
|
+
const { docID, collabServiceURL } = config;
|
|
34
|
+
this._docID = docID;
|
|
35
|
+
|
|
36
|
+
// [FS] IRAD-1553 2021-08-26
|
|
37
|
+
// Configurable Collaboration Service URL.
|
|
38
|
+
const url = collabServiceURL + '/docs/' + docID;
|
|
39
|
+
this._connection = new EditorConnection(
|
|
40
|
+
onReady,
|
|
41
|
+
new Reporter(),
|
|
42
|
+
url,
|
|
43
|
+
plugins,
|
|
44
|
+
schema
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
this._connection.view = {
|
|
48
|
+
updateState: (s) => {
|
|
49
|
+
setState({ editorState: s }, () => {});
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
cleanUp = () => {
|
|
55
|
+
// remove collab plugin
|
|
56
|
+
if (this._connection) {
|
|
57
|
+
const cpIdx = this._editorState.plugins.findIndex((plugin) => {
|
|
58
|
+
return 'collab$' === plugin.spec.key.key;
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
if (-1 != cpIdx) {
|
|
62
|
+
this._editorState.plugins.splice(cpIdx, 1);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
this._connection.close();
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
onEdit = (transaction: Transform): void => {
|
|
70
|
+
if (!this._connection.ready) {
|
|
71
|
+
console.warn('not ready');
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
ReactDOM.unstable_batchedUpdates(() => {
|
|
75
|
+
this._connection.dispatch({ type: 'transaction', transaction });
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// FS IRAD-1040 2020-09-02
|
|
80
|
+
// Send the modified schema to server
|
|
81
|
+
updateSchema = (schema: Schema, data: any) => {
|
|
82
|
+
this._connection.updateSchema(schema, data, this._dataDefined);
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
updateContent = (data: any) => {
|
|
86
|
+
this._connection.start(data, this._dataDefined);
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export default CollabConnector;
|