@modusoperandi/licit 1.4.2 → 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 +1 -1
- package/LinkSetURLCommand.js.flow +129 -129
- package/LinkTooltipPlugin.js +32 -38
- 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 +8645 -8637
- 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 +40 -40
- package/client/Licit.js.flow +649 -648
- 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 +1 -1
- 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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
2
|
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
3
|
-
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) {
|
|
3
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
4
4
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
5
5
|
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
6
6
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
@@ -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
|
}
|