@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
|
@@ -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,27 @@ 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
|
+
if (!node) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
var linkMark = (_node$marks = node.marks) === null || _node$marks === void 0 ? void 0 : _node$marks.find(function (m) {
|
|
51
|
+
var _m$type;
|
|
52
|
+
return (m === null || m === void 0 || (_m$type = m.type) === null || _m$type === void 0 ? void 0 : _m$type.name) === MARK_LINK;
|
|
53
|
+
});
|
|
54
|
+
if (!linkMark) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
var pluginView = view.dom._linkTooltipView;
|
|
58
|
+
return pluginView === null || pluginView === void 0 ? void 0 : pluginView._handleClick(view, linkMark);
|
|
44
59
|
}
|
|
45
60
|
},
|
|
46
61
|
view: function view(editorView) {
|
|
@@ -131,7 +146,7 @@ var LinkTooltipView = /*#__PURE__*/function () {
|
|
|
131
146
|
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
147
|
_this._view.runtime.openLinkDialog(url, popupString);
|
|
133
148
|
} else {
|
|
134
|
-
window.open(url);
|
|
149
|
+
window.open(url, '_blank', 'noopener,noreferrer');
|
|
135
150
|
}
|
|
136
151
|
}
|
|
137
152
|
});
|
|
@@ -181,37 +196,19 @@ var LinkTooltipView = /*#__PURE__*/function () {
|
|
|
181
196
|
}
|
|
182
197
|
}, {
|
|
183
198
|
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;
|
|
199
|
+
value: function _handleClick(view, mark) {
|
|
200
|
+
var href = mark.attrs['href'];
|
|
201
|
+
var selectionId = mark.attrs['selectionId'];
|
|
202
|
+
var tocItemPos = null;
|
|
203
|
+
if (selectionId) {
|
|
204
|
+
tocItemPos = this.getInnerlinkSelected_position(view, mark.attrs.selectionId);
|
|
205
|
+
if (null === tocItemPos) {
|
|
206
|
+
this.openSelectedSection(selectionId);
|
|
207
|
+
event.preventDefault(); // prevent default browser navigation
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
213
210
|
}
|
|
214
|
-
this.
|
|
211
|
+
this.jumpLink(view, tocItemPos, href, selectionId);
|
|
215
212
|
event.preventDefault(); // prevent default browser navigation
|
|
216
213
|
return true;
|
|
217
214
|
}
|