@modusoperandi/licit 1.4.3 → 1.4.6
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 +4 -2
- package/LinkMarkSpec.js.flow +38 -37
- package/LinkSetURLCommand.js.flow +129 -129
- package/LinkTooltipPlugin.js +31 -37
- package/LinkTooltipPlugin.js.flow +204 -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 +8573 -8650
- 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
|
@@ -1,129 +1,129 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import { EditorState, TextSelection } from 'prosemirror-state';
|
|
4
|
-
import { Transform } from 'prosemirror-transform';
|
|
5
|
-
import { EditorView } from 'prosemirror-view';
|
|
6
|
-
|
|
7
|
-
import { MARK_LINK } from './MarkNames.js';
|
|
8
|
-
import {
|
|
9
|
-
hideSelectionPlaceholder,
|
|
10
|
-
showSelectionPlaceholder,
|
|
11
|
-
} from './SelectionPlaceholderPlugin.js';
|
|
12
|
-
import {
|
|
13
|
-
applyMark,
|
|
14
|
-
findNodesWithSameMark,
|
|
15
|
-
createPopUp,
|
|
16
|
-
} from '@modusoperandi/licit-ui-commands';
|
|
17
|
-
import LinkURLEditor from './ui/LinkURLEditor.js';
|
|
18
|
-
import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
|
|
19
|
-
import { INNER_LINK } from './Types.js';
|
|
20
|
-
|
|
21
|
-
class LinkSetURLCommand extends UICommand {
|
|
22
|
-
_popUp = null;
|
|
23
|
-
|
|
24
|
-
isEnabled = (state: EditorState): boolean => {
|
|
25
|
-
if (!(state.selection instanceof TextSelection)) {
|
|
26
|
-
// Could be a NodeSelection or CellSelection.
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const markType = state.schema.marks[MARK_LINK];
|
|
31
|
-
if (!markType) {
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
const { from, to } = state.selection;
|
|
35
|
-
return from < to;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
showTocList = async (view) => {
|
|
39
|
-
|
|
40
|
-
const stylePromise = view.runtime;
|
|
41
|
-
|
|
42
|
-
if (stylePromise === null || undefined) {
|
|
43
|
-
return [];
|
|
44
|
-
}
|
|
45
|
-
const styles = await stylePromise.fetchStyles();
|
|
46
|
-
|
|
47
|
-
const storeTOCvalue = styles
|
|
48
|
-
.filter(
|
|
49
|
-
(
|
|
50
|
-
style // Added TOT/TOF selected styles to be listed as well
|
|
51
|
-
) =>
|
|
52
|
-
style?.styles?.toc === true ||
|
|
53
|
-
style?.styles?.tot === true ||
|
|
54
|
-
style?.styles?.tof === true
|
|
55
|
-
)
|
|
56
|
-
.map((style) => style?.styleName);
|
|
57
|
-
return stylePromise.fetchInnerLinkSelectionIds(storeTOCvalue); // Fetching the selection IDs for the TOC items from MSD
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
waitForUserInput = async (
|
|
61
|
-
state: EditorState,
|
|
62
|
-
dispatch: ?(tr: Transform) => void,
|
|
63
|
-
view: ?EditorView,
|
|
64
|
-
event: ?SyntheticEvent<>
|
|
65
|
-
): Promise<any> => {
|
|
66
|
-
if (dispatch) {
|
|
67
|
-
dispatch(showSelectionPlaceholder(state));
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const { doc, schema, selection } = state;
|
|
71
|
-
const markType = schema.marks[MARK_LINK];
|
|
72
|
-
if (!markType) {
|
|
73
|
-
return Promise.resolve(undefined);
|
|
74
|
-
}
|
|
75
|
-
const { from, to } = selection;
|
|
76
|
-
const result = findNodesWithSameMark(doc, from, to - 1, markType);
|
|
77
|
-
const href = result ? result.mark.attrs.href : null;
|
|
78
|
-
const tocItemsNode = await this.showTocList(view);
|
|
79
|
-
const viewPops = {
|
|
80
|
-
href_: href,
|
|
81
|
-
TOCselectedNode_: tocItemsNode
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
return new Promise((resolve) => {
|
|
85
|
-
this._popUp = createPopUp(LinkURLEditor, viewPops, {
|
|
86
|
-
modal: true,
|
|
87
|
-
onClose: (val) => {
|
|
88
|
-
if (this._popUp) {
|
|
89
|
-
resolve(val);
|
|
90
|
-
this._popUp = null;
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
executeWithUserInput = (
|
|
98
|
-
state: EditorState,
|
|
99
|
-
dispatch: ?(tr: Transform) => void,
|
|
100
|
-
view: ?EditorView,
|
|
101
|
-
url: ?string
|
|
102
|
-
): boolean => {
|
|
103
|
-
if (dispatch) {
|
|
104
|
-
const { selection, schema } = view.state;
|
|
105
|
-
let { tr } = view.state;
|
|
106
|
-
tr = view ? hideSelectionPlaceholder(view.state) : tr;
|
|
107
|
-
tr = tr.setSelection(selection);
|
|
108
|
-
if (url !== undefined) {
|
|
109
|
-
let selectionId;
|
|
110
|
-
let href;
|
|
111
|
-
if (url.includes(INNER_LINK)) {
|
|
112
|
-
selectionId = url.split(INNER_LINK)[0];
|
|
113
|
-
href = url.split(INNER_LINK)[1];
|
|
114
|
-
} else {
|
|
115
|
-
selectionId = null;
|
|
116
|
-
href = url;
|
|
117
|
-
}
|
|
118
|
-
const markType = schema.marks[MARK_LINK];
|
|
119
|
-
const attrs = url ? { href, selectionId } : null;
|
|
120
|
-
tr = applyMark(tr.setSelection(selection), schema, markType, attrs);
|
|
121
|
-
}
|
|
122
|
-
dispatch(tr);
|
|
123
|
-
}
|
|
124
|
-
view && view.focus();
|
|
125
|
-
return true;
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
export default LinkSetURLCommand;
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import { EditorState, TextSelection } from 'prosemirror-state';
|
|
4
|
+
import { Transform } from 'prosemirror-transform';
|
|
5
|
+
import { EditorView } from 'prosemirror-view';
|
|
6
|
+
|
|
7
|
+
import { MARK_LINK } from './MarkNames.js';
|
|
8
|
+
import {
|
|
9
|
+
hideSelectionPlaceholder,
|
|
10
|
+
showSelectionPlaceholder,
|
|
11
|
+
} from './SelectionPlaceholderPlugin.js';
|
|
12
|
+
import {
|
|
13
|
+
applyMark,
|
|
14
|
+
findNodesWithSameMark,
|
|
15
|
+
createPopUp,
|
|
16
|
+
} from '@modusoperandi/licit-ui-commands';
|
|
17
|
+
import LinkURLEditor from './ui/LinkURLEditor.js';
|
|
18
|
+
import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
|
|
19
|
+
import { INNER_LINK } from './Types.js';
|
|
20
|
+
|
|
21
|
+
class LinkSetURLCommand extends UICommand {
|
|
22
|
+
_popUp = null;
|
|
23
|
+
|
|
24
|
+
isEnabled = (state: EditorState): boolean => {
|
|
25
|
+
if (!(state.selection instanceof TextSelection)) {
|
|
26
|
+
// Could be a NodeSelection or CellSelection.
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const markType = state.schema.marks[MARK_LINK];
|
|
31
|
+
if (!markType) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
const { from, to } = state.selection;
|
|
35
|
+
return from < to;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
showTocList = async (view) => {
|
|
39
|
+
|
|
40
|
+
const stylePromise = view.runtime;
|
|
41
|
+
|
|
42
|
+
if (stylePromise === null || undefined) {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
const styles = await stylePromise.fetchStyles();
|
|
46
|
+
|
|
47
|
+
const storeTOCvalue = styles
|
|
48
|
+
.filter(
|
|
49
|
+
(
|
|
50
|
+
style // Added TOT/TOF selected styles to be listed as well
|
|
51
|
+
) =>
|
|
52
|
+
style?.styles?.toc === true ||
|
|
53
|
+
style?.styles?.tot === true ||
|
|
54
|
+
style?.styles?.tof === true
|
|
55
|
+
)
|
|
56
|
+
.map((style) => style?.styleName);
|
|
57
|
+
return stylePromise.fetchInnerLinkSelectionIds(storeTOCvalue); // Fetching the selection IDs for the TOC items from MSD
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
waitForUserInput = async (
|
|
61
|
+
state: EditorState,
|
|
62
|
+
dispatch: ?(tr: Transform) => void,
|
|
63
|
+
view: ?EditorView,
|
|
64
|
+
event: ?SyntheticEvent<>
|
|
65
|
+
): Promise<any> => {
|
|
66
|
+
if (dispatch) {
|
|
67
|
+
dispatch(showSelectionPlaceholder(state));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const { doc, schema, selection } = state;
|
|
71
|
+
const markType = schema.marks[MARK_LINK];
|
|
72
|
+
if (!markType) {
|
|
73
|
+
return Promise.resolve(undefined);
|
|
74
|
+
}
|
|
75
|
+
const { from, to } = selection;
|
|
76
|
+
const result = findNodesWithSameMark(doc, from, to - 1, markType);
|
|
77
|
+
const href = result ? result.mark.attrs.href : null;
|
|
78
|
+
const tocItemsNode = await this.showTocList(view);
|
|
79
|
+
const viewPops = {
|
|
80
|
+
href_: href,
|
|
81
|
+
TOCselectedNode_: tocItemsNode
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
return new Promise((resolve) => {
|
|
85
|
+
this._popUp = createPopUp(LinkURLEditor, viewPops, {
|
|
86
|
+
modal: true,
|
|
87
|
+
onClose: (val) => {
|
|
88
|
+
if (this._popUp) {
|
|
89
|
+
resolve(val);
|
|
90
|
+
this._popUp = null;
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
executeWithUserInput = (
|
|
98
|
+
state: EditorState,
|
|
99
|
+
dispatch: ?(tr: Transform) => void,
|
|
100
|
+
view: ?EditorView,
|
|
101
|
+
url: ?string
|
|
102
|
+
): boolean => {
|
|
103
|
+
if (dispatch) {
|
|
104
|
+
const { selection, schema } = view.state;
|
|
105
|
+
let { tr } = view.state;
|
|
106
|
+
tr = view ? hideSelectionPlaceholder(view.state) : tr;
|
|
107
|
+
tr = tr.setSelection(selection);
|
|
108
|
+
if (url !== undefined) {
|
|
109
|
+
let selectionId;
|
|
110
|
+
let href;
|
|
111
|
+
if (url.includes(INNER_LINK)) {
|
|
112
|
+
selectionId = url.split(INNER_LINK)[0];
|
|
113
|
+
href = url.split(INNER_LINK)[1];
|
|
114
|
+
} else {
|
|
115
|
+
selectionId = null;
|
|
116
|
+
href = url;
|
|
117
|
+
}
|
|
118
|
+
const markType = schema.marks[MARK_LINK];
|
|
119
|
+
const attrs = url ? { href, selectionId } : null;
|
|
120
|
+
tr = applyMark(tr.setSelection(selection), schema, markType, attrs);
|
|
121
|
+
}
|
|
122
|
+
dispatch(tr);
|
|
123
|
+
}
|
|
124
|
+
view && view.focus();
|
|
125
|
+
return true;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export default LinkSetURLCommand;
|
package/LinkTooltipPlugin.js
CHANGED
|
@@ -19,8 +19,7 @@ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf
|
|
|
19
19
|
import { Plugin, PluginKey, TextSelection } from 'prosemirror-state';
|
|
20
20
|
import { EditorView } from 'prosemirror-view';
|
|
21
21
|
import { MARK_LINK } from './MarkNames.js';
|
|
22
|
-
import { atAnchorTopCenter, createPopUp
|
|
23
|
-
import lookUpElement from './lookUpElement.js';
|
|
22
|
+
import { atAnchorTopCenter, createPopUp } from '@modusoperandi/licit-ui-commands';
|
|
24
23
|
import LinkTooltip from './ui/LinkTooltip.js';
|
|
25
24
|
import scrollIntoView from 'smooth-scroll-into-view-if-needed';
|
|
26
25
|
import sanitizeURL from './sanitizeURL.js';
|
|
@@ -36,11 +35,24 @@ var SPEC = {
|
|
|
36
35
|
mouseout: function mouseout(view, event) {
|
|
37
36
|
var pluginView = view.dom._linkTooltipView;
|
|
38
37
|
return pluginView === null || pluginView === void 0 ? void 0 : pluginView._handleMouseOut.call(view, event);
|
|
39
|
-
},
|
|
40
|
-
click: function click(view, event) {
|
|
41
|
-
var pluginView = view.dom._linkTooltipView;
|
|
42
|
-
return pluginView === null || pluginView === void 0 ? void 0 : pluginView._handleClick.call(view, event);
|
|
43
38
|
}
|
|
39
|
+
},
|
|
40
|
+
// https://prosemirror.net/docs/ref/#view.EditorProps.handleClickOn
|
|
41
|
+
handleClickOn: function handleClickOn(view, pos, node, nodePos, event, direct) {
|
|
42
|
+
var _node$marks;
|
|
43
|
+
if (!direct) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
node = view.state.doc.nodeAt(pos);
|
|
47
|
+
var linkMark = (_node$marks = node.marks) === null || _node$marks === void 0 ? void 0 : _node$marks.find(function (m) {
|
|
48
|
+
var _m$type;
|
|
49
|
+
return (m === null || m === void 0 || (_m$type = m.type) === null || _m$type === void 0 ? void 0 : _m$type.name) === MARK_LINK;
|
|
50
|
+
});
|
|
51
|
+
if (!linkMark) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
var pluginView = view.dom._linkTooltipView;
|
|
55
|
+
return pluginView === null || pluginView === void 0 ? void 0 : pluginView._handleClick(view, linkMark);
|
|
44
56
|
}
|
|
45
57
|
},
|
|
46
58
|
view: function view(editorView) {
|
|
@@ -131,7 +143,7 @@ var LinkTooltipView = /*#__PURE__*/function () {
|
|
|
131
143
|
if ((_this$_view2 = _this._view) !== null && _this$_view2 !== void 0 && (_this$_view2 = _this$_view2.runtime) !== null && _this$_view2 !== void 0 && _this$_view2.openLinkDialog && urlObj.hostname !== window.location.hostname) {
|
|
132
144
|
_this._view.runtime.openLinkDialog(url, popupString);
|
|
133
145
|
} else {
|
|
134
|
-
window.open(url);
|
|
146
|
+
window.open(url, '_blank', 'noopener,noreferrer');
|
|
135
147
|
}
|
|
136
148
|
}
|
|
137
149
|
});
|
|
@@ -181,37 +193,19 @@ var LinkTooltipView = /*#__PURE__*/function () {
|
|
|
181
193
|
}
|
|
182
194
|
}, {
|
|
183
195
|
key: "_handleClick",
|
|
184
|
-
value: function _handleClick(
|
|
185
|
-
var
|
|
186
|
-
var
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}
|
|
196
|
-
var domFound = this.dom._linkTooltipView._view.domAtPos(from);
|
|
197
|
-
if (!domFound) {
|
|
198
|
-
return false;
|
|
199
|
-
}
|
|
200
|
-
var anchor = lookUpElement(domFound.node, function (el) {
|
|
201
|
-
return el.nodeName === 'A';
|
|
202
|
-
});
|
|
203
|
-
if (!anchor) {
|
|
204
|
-
return false;
|
|
205
|
-
}
|
|
206
|
-
var href = anchor.getAttribute('href');
|
|
207
|
-
var selectionId = anchor.getAttribute('selectionid');
|
|
208
|
-
var tocItemPos = this.dom._linkTooltipView.getInnerlinkSelected_position(this.dom._linkTooltipView._view, result.mark.attrs.selectionId);
|
|
209
|
-
if (null === tocItemPos) {
|
|
210
|
-
this.dom._linkTooltipView.openSelectedSection(selectionId);
|
|
211
|
-
event.preventDefault(); // prevent default browser navigation
|
|
212
|
-
return true;
|
|
196
|
+
value: function _handleClick(view, mark) {
|
|
197
|
+
var href = mark.attrs['href'];
|
|
198
|
+
var selectionId = mark.attrs['selectionId'];
|
|
199
|
+
var tocItemPos = null;
|
|
200
|
+
if (selectionId) {
|
|
201
|
+
tocItemPos = this.getInnerlinkSelected_position(view, mark.attrs.selectionId);
|
|
202
|
+
if (null === tocItemPos) {
|
|
203
|
+
this.openSelectedSection(selectionId);
|
|
204
|
+
event.preventDefault(); // prevent default browser navigation
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
213
207
|
}
|
|
214
|
-
this.
|
|
208
|
+
this.jumpLink(view, tocItemPos, href, selectionId);
|
|
215
209
|
event.preventDefault(); // prevent default browser navigation
|
|
216
210
|
return true;
|
|
217
211
|
}
|