@manuscripts/body-editor 1.6.10 → 1.6.12
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/dist/cjs/commands.js +57 -1
- package/dist/cjs/components/toolbar/LevelSelector.js +2 -2
- package/dist/cjs/index.js +4 -9
- package/dist/cjs/keys/list.js +9 -9
- package/dist/cjs/lib/context-menu.js +81 -163
- package/dist/cjs/menus.js +353 -405
- package/dist/cjs/toolbar.js +30 -34
- package/dist/cjs/views/editable_block.js +12 -4
- package/dist/es/commands.js +57 -2
- package/dist/es/components/toolbar/LevelSelector.js +2 -2
- package/dist/es/index.js +2 -4
- package/dist/es/keys/list.js +7 -7
- package/dist/es/lib/context-menu.js +81 -163
- package/dist/es/menus.js +353 -405
- package/dist/es/toolbar.js +31 -35
- package/dist/es/views/editable_block.js +13 -5
- package/dist/types/commands.d.ts +1 -0
- package/dist/types/components/toolbar/LevelSelector.d.ts +2 -2
- package/dist/types/configs/editor-views.d.ts +14 -14
- package/dist/types/index.d.ts +2 -4
- package/dist/types/keys/list.d.ts +1 -1
- package/dist/types/lib/context-menu.d.ts +0 -7
- package/dist/types/menus.d.ts +2 -3
- package/dist/types/toolbar.d.ts +18 -1
- package/dist/types/views/bibliography_element_editable.d.ts +1 -1
- package/dist/types/views/blockquote_element_editable.d.ts +1 -1
- package/dist/types/views/bullet_list_editable.d.ts +1 -1
- package/dist/types/views/editable_block.d.ts +1 -1
- package/dist/types/views/equation_element_editable.d.ts +1 -1
- package/dist/types/views/figure_element_editable.d.ts +1 -1
- package/dist/types/views/footnote_editable.d.ts +1 -1
- package/dist/types/views/footnotes_element_editable.d.ts +1 -1
- package/dist/types/views/listing_element_editable.d.ts +1 -1
- package/dist/types/views/ordered_list_editable.d.ts +1 -1
- package/dist/types/views/paragraph_editable.d.ts +1 -1
- package/dist/types/views/placeholder_element_editable.d.ts +1 -1
- package/dist/types/views/pullquote_element_editable.d.ts +1 -1
- package/dist/types/views/section_title_editable.d.ts +1 -1
- package/dist/types/views/table_element_editable.d.ts +1 -1
- package/dist/types/views/toc_element_editable.d.ts +1 -1
- package/package.json +3 -5
- package/dist/cjs/components/application-menu/ApplicationMenu.js +0 -63
- package/dist/cjs/components/application-menu/MenuItemContainer.js +0 -127
- package/dist/cjs/components/application-menu/Shortcut.js +0 -63
- package/dist/cjs/components/application-menu/index.js +0 -22
- package/dist/cjs/components/application-menu/menuState.js +0 -49
- package/dist/cjs/components/application-menu/types.js +0 -17
- package/dist/cjs/components/application-menu/useApplicationMenus.js +0 -154
- package/dist/cjs/components/dialog/TableCellBorderOptions.js +0 -64
- package/dist/cjs/components/dialog/TableCellOptions.js +0 -50
- package/dist/cjs/components/dialog/TableOptions.js +0 -31
- package/dist/cjs/components/dialog/commands.js +0 -185
- package/dist/cjs/components/dialog/index.js +0 -26
- package/dist/cjs/components/dialog/shared.js +0 -48
- package/dist/cjs/components/dialog/types.js +0 -9
- package/dist/cjs/components/toolbar/ListStyleSelector.js +0 -150
- package/dist/cjs/components/toolbar/ManuscriptToolbar.js +0 -104
- package/dist/cjs/components/toolbar/OrderListSelector.js +0 -103
- package/dist/cjs/views/EditableBlock.js +0 -37
- package/dist/es/components/application-menu/ApplicationMenu.js +0 -56
- package/dist/es/components/application-menu/MenuItemContainer.js +0 -120
- package/dist/es/components/application-menu/Shortcut.js +0 -56
- package/dist/es/components/application-menu/index.js +0 -17
- package/dist/es/components/application-menu/menuState.js +0 -44
- package/dist/es/components/application-menu/types.js +0 -16
- package/dist/es/components/application-menu/useApplicationMenus.js +0 -148
- package/dist/es/components/dialog/TableCellBorderOptions.js +0 -36
- package/dist/es/components/dialog/TableCellOptions.js +0 -22
- package/dist/es/components/dialog/TableOptions.js +0 -26
- package/dist/es/components/dialog/commands.js +0 -177
- package/dist/es/components/dialog/index.js +0 -18
- package/dist/es/components/dialog/shared.js +0 -21
- package/dist/es/components/dialog/types.js +0 -6
- package/dist/es/components/toolbar/ListStyleSelector.js +0 -120
- package/dist/es/components/toolbar/ManuscriptToolbar.js +0 -97
- package/dist/es/components/toolbar/OrderListSelector.js +0 -72
- package/dist/es/views/EditableBlock.js +0 -29
- package/dist/types/components/application-menu/ApplicationMenu.d.ts +0 -24
- package/dist/types/components/application-menu/MenuItemContainer.d.ts +0 -27
- package/dist/types/components/application-menu/Shortcut.d.ts +0 -26
- package/dist/types/components/application-menu/index.d.ts +0 -18
- package/dist/types/components/application-menu/menuState.d.ts +0 -18
- package/dist/types/components/application-menu/types.d.ts +0 -47
- package/dist/types/components/application-menu/useApplicationMenus.d.ts +0 -12
- package/dist/types/components/dialog/TableCellBorderOptions.d.ts +0 -9
- package/dist/types/components/dialog/TableCellOptions.d.ts +0 -4
- package/dist/types/components/dialog/TableOptions.d.ts +0 -4
- package/dist/types/components/dialog/commands.d.ts +0 -28
- package/dist/types/components/dialog/index.d.ts +0 -4
- package/dist/types/components/dialog/shared.d.ts +0 -16
- package/dist/types/components/dialog/types.d.ts +0 -16
- package/dist/types/components/toolbar/ListStyleSelector.d.ts +0 -36
- package/dist/types/components/toolbar/ManuscriptToolbar.d.ts +0 -50
- package/dist/types/components/toolbar/OrderListSelector.d.ts +0 -14
- package/dist/types/views/EditableBlock.d.ts +0 -19
package/dist/cjs/commands.js
CHANGED
|
@@ -15,13 +15,16 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.updateCommentAnnotationState = exports.addComment = exports.deleteHighlightMarkers = exports.insertHighlight = exports.createAndFillTableElement = exports.selectAllIsolating = exports.ignoreAtomBlockNodeForward = exports.isAtEndOfTextBlock = exports.ignoreAtomBlockNodeBackward = exports.isTextSelection = exports.isAtStartOfTextBlock = exports.ifInTableBody = exports.insertTOCSection = exports.insertBibliographySection = exports.insertSection = exports.insertGraphicalAbstract = exports.insertInlineFootnote = exports.insertInlineEquation = exports.insertCrossReference = exports.insertInlineCitation = exports.insertLink = exports.insertSectionLabel = exports.insertBreak = exports.deleteBlock = exports.insertBlock = exports.insertFileAsFigure = exports.createBlock = exports.createSelection = exports.canInsert = exports.blockActive = exports.isNodeSelection = exports.markActive = void 0;
|
|
18
|
+
exports.updateCommentAnnotationState = exports.addComment = exports.deleteHighlightMarkers = exports.insertHighlight = exports.createAndFillTableElement = exports.selectAllIsolating = exports.ignoreAtomBlockNodeForward = exports.isAtEndOfTextBlock = exports.ignoreAtomBlockNodeBackward = exports.isTextSelection = exports.isAtStartOfTextBlock = exports.ifInTableBody = exports.insertTOCSection = exports.insertBibliographySection = exports.insertList = exports.insertSection = exports.insertGraphicalAbstract = exports.insertInlineFootnote = exports.insertInlineEquation = exports.insertCrossReference = exports.insertInlineCitation = exports.insertLink = exports.insertSectionLabel = exports.insertBreak = exports.deleteBlock = exports.insertBlock = exports.insertFileAsFigure = exports.createBlock = exports.createSelection = exports.canInsert = exports.blockActive = exports.isNodeSelection = exports.markActive = void 0;
|
|
19
19
|
const json_schema_1 = require("@manuscripts/json-schema");
|
|
20
|
+
const track_changes_plugin_1 = require("@manuscripts/track-changes-plugin");
|
|
20
21
|
const transform_1 = require("@manuscripts/transform");
|
|
21
22
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
23
|
+
const prosemirror_schema_list_1 = require("prosemirror-schema-list");
|
|
22
24
|
const prosemirror_state_1 = require("prosemirror-state");
|
|
23
25
|
const prosemirror_transform_1 = require("prosemirror-transform");
|
|
24
26
|
const prosemirror_utils_1 = require("prosemirror-utils");
|
|
27
|
+
const list_1 = require("./keys/list");
|
|
25
28
|
const helpers_1 = require("./lib/helpers");
|
|
26
29
|
const utils_1 = require("./lib/utils");
|
|
27
30
|
const comment_annotation_1 = require("./plugins/comment_annotation");
|
|
@@ -340,6 +343,59 @@ const insertSection = (subsection = false) => (state, dispatch) => {
|
|
|
340
343
|
return true;
|
|
341
344
|
};
|
|
342
345
|
exports.insertSection = insertSection;
|
|
346
|
+
const findSelectedList = (0, prosemirror_utils_1.findParentNodeOfType)([
|
|
347
|
+
transform_1.schema.nodes.ordered_list,
|
|
348
|
+
transform_1.schema.nodes.bullet_list,
|
|
349
|
+
]);
|
|
350
|
+
const findRootList = ($pos) => {
|
|
351
|
+
for (let i = 0; i <= $pos.depth; i++) {
|
|
352
|
+
const node = $pos.node(i);
|
|
353
|
+
if ((0, transform_1.isListNode)(node)) {
|
|
354
|
+
const pos = $pos.start(i);
|
|
355
|
+
return {
|
|
356
|
+
node,
|
|
357
|
+
pos,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
const findListsAtSameLevel = (doc, list) => {
|
|
363
|
+
const $pos = doc.resolve(list.pos + 1);
|
|
364
|
+
const root = findRootList($pos);
|
|
365
|
+
if (!root) {
|
|
366
|
+
return [list];
|
|
367
|
+
}
|
|
368
|
+
const target = $pos.depth;
|
|
369
|
+
const lists = [];
|
|
370
|
+
root.node.descendants((node, pos) => {
|
|
371
|
+
const $pos = doc.resolve(root.pos + pos + 1);
|
|
372
|
+
if ($pos.depth === target && (0, transform_1.isListNode)(node)) {
|
|
373
|
+
lists.push({ node, pos: $pos.before(target) });
|
|
374
|
+
}
|
|
375
|
+
return $pos.depth <= target;
|
|
376
|
+
});
|
|
377
|
+
return lists;
|
|
378
|
+
};
|
|
379
|
+
const insertList = (type, style) => (state, dispatch) => {
|
|
380
|
+
const list = findSelectedList(state.selection);
|
|
381
|
+
if (list) {
|
|
382
|
+
if (!dispatch) {
|
|
383
|
+
return true;
|
|
384
|
+
}
|
|
385
|
+
const nodes = findListsAtSameLevel(state.doc, list);
|
|
386
|
+
const tr = state.tr;
|
|
387
|
+
for (const { node, pos } of nodes) {
|
|
388
|
+
tr.setNodeMarkup(pos, type, Object.assign(Object.assign({}, node.attrs), { listStyleType: style }), node.marks);
|
|
389
|
+
}
|
|
390
|
+
dispatch((0, track_changes_plugin_1.skipTracking)(tr));
|
|
391
|
+
return true;
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
const command = (0, prosemirror_schema_list_1.wrapInList)(type, { listStyleType: style });
|
|
395
|
+
return (0, list_1.skipCommandTracking)(command)(state, dispatch);
|
|
396
|
+
}
|
|
397
|
+
};
|
|
398
|
+
exports.insertList = insertList;
|
|
343
399
|
const insertBibliographySection = (state, dispatch) => {
|
|
344
400
|
return false;
|
|
345
401
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*!
|
|
3
|
-
* ©
|
|
3
|
+
* © 2024 Atypon Systems LLC
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -326,7 +326,7 @@ const buildOptions = (state, dispatch, view) => {
|
|
|
326
326
|
}));
|
|
327
327
|
return [{ options: typeOptions }, { options: sectionOptions }];
|
|
328
328
|
}
|
|
329
|
-
case
|
|
329
|
+
case schema.nodes.bullet_list: {
|
|
330
330
|
return [
|
|
331
331
|
{
|
|
332
332
|
options: [
|
package/dist/cjs/index.js
CHANGED
|
@@ -29,28 +29,23 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
29
29
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
30
30
|
};
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.isHighlightComment = exports.isThereSelector = exports.commentScroll = exports.
|
|
32
|
+
exports.isHighlightComment = exports.isThereSelector = exports.commentScroll = exports.PopperManager = exports.CollabProvider = exports.LevelSelector = exports.OutlineManuscript = exports.OutlineItemIcon = exports.ManuscriptOutline = void 0;
|
|
33
33
|
__exportStar(require("./citation-sources"), exports);
|
|
34
34
|
__exportStar(require("./commands"), exports);
|
|
35
|
-
__exportStar(require("./components/application-menu"), exports);
|
|
36
|
-
var dialog_1 = require("./components/dialog");
|
|
37
|
-
Object.defineProperty(exports, "DialogController", { enumerable: true, get: function () { return dialog_1.DialogController; } });
|
|
38
|
-
Object.defineProperty(exports, "DialogNames", { enumerable: true, get: function () { return dialog_1.DialogNames; } });
|
|
39
35
|
var ManuscriptOutline_1 = require("./components/outline/ManuscriptOutline");
|
|
40
36
|
Object.defineProperty(exports, "ManuscriptOutline", { enumerable: true, get: function () { return ManuscriptOutline_1.ManuscriptOutline; } });
|
|
41
37
|
var Outline_1 = require("./components/outline/Outline");
|
|
42
38
|
Object.defineProperty(exports, "OutlineItemIcon", { enumerable: true, get: function () { return Outline_1.OutlineItemIcon; } });
|
|
43
39
|
var OutlineManuscript_1 = require("./components/outline/OutlineManuscript");
|
|
44
40
|
Object.defineProperty(exports, "OutlineManuscript", { enumerable: true, get: function () { return OutlineManuscript_1.OutlineManuscript; } });
|
|
45
|
-
var
|
|
46
|
-
Object.defineProperty(exports, "
|
|
41
|
+
var LevelSelector_1 = require("./components/toolbar/LevelSelector");
|
|
42
|
+
Object.defineProperty(exports, "LevelSelector", { enumerable: true, get: function () { return LevelSelector_1.LevelSelector; } });
|
|
47
43
|
__exportStar(require("./menus"), exports);
|
|
48
44
|
var collabProvider_1 = require("./classes/collabProvider");
|
|
49
45
|
Object.defineProperty(exports, "CollabProvider", { enumerable: true, get: function () { return collabProvider_1.CollabProvider; } });
|
|
50
46
|
var popper_1 = require("./lib/popper");
|
|
51
47
|
Object.defineProperty(exports, "PopperManager", { enumerable: true, get: function () { return popper_1.PopperManager; } });
|
|
52
|
-
|
|
53
|
-
Object.defineProperty(exports, "toolbar", { enumerable: true, get: function () { return toolbar_1.toolbar; } });
|
|
48
|
+
__exportStar(require("./toolbar"), exports);
|
|
54
49
|
__exportStar(require("./plugins/highlight"), exports);
|
|
55
50
|
var comment_annotation_1 = require("./plugins/comment_annotation");
|
|
56
51
|
Object.defineProperty(exports, "commentScroll", { enumerable: true, get: function () { return comment_annotation_1.commentScroll; } });
|
package/dist/cjs/keys/list.js
CHANGED
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.
|
|
18
|
+
exports.skipCommandTracking = void 0;
|
|
19
19
|
const track_changes_plugin_1 = require("@manuscripts/track-changes-plugin");
|
|
20
20
|
const transform_1 = require("@manuscripts/transform");
|
|
21
21
|
const prosemirror_schema_list_1 = require("prosemirror-schema-list");
|
|
22
|
-
const
|
|
22
|
+
const skipCommandTracking = (command) => (state, dispatch) => {
|
|
23
23
|
command(state, (tr) => {
|
|
24
24
|
if (dispatch) {
|
|
25
25
|
(0, track_changes_plugin_1.skipTracking)(tr);
|
|
@@ -28,7 +28,7 @@ const skipTrackingChanges = (command) => (state, dispatch) => {
|
|
|
28
28
|
});
|
|
29
29
|
return true;
|
|
30
30
|
};
|
|
31
|
-
exports.
|
|
31
|
+
exports.skipCommandTracking = skipCommandTracking;
|
|
32
32
|
const liftToOuterList = (itemType) => {
|
|
33
33
|
return function (state, dispatch) {
|
|
34
34
|
const { $from, $to } = state.selection;
|
|
@@ -49,11 +49,11 @@ const liftToOuterList = (itemType) => {
|
|
|
49
49
|
};
|
|
50
50
|
const listKeymap = {
|
|
51
51
|
Enter: (0, prosemirror_schema_list_1.splitListItem)(transform_1.schema.nodes.list_item),
|
|
52
|
-
'Mod-[': (0, exports.
|
|
53
|
-
'Mod-]': (0, exports.
|
|
54
|
-
'Mod-Alt-o': (0, exports.
|
|
55
|
-
'Mod-Alt-k': (0, exports.
|
|
56
|
-
'Shift-Tab': (0, exports.
|
|
57
|
-
Tab: (0, exports.
|
|
52
|
+
'Mod-[': (0, exports.skipCommandTracking)(liftToOuterList(transform_1.schema.nodes.list_item)),
|
|
53
|
+
'Mod-]': (0, exports.skipCommandTracking)((0, prosemirror_schema_list_1.sinkListItem)(transform_1.schema.nodes.list_item)),
|
|
54
|
+
'Mod-Alt-o': (0, exports.skipCommandTracking)((0, prosemirror_schema_list_1.wrapInList)(transform_1.schema.nodes.ordered_list)),
|
|
55
|
+
'Mod-Alt-k': (0, exports.skipCommandTracking)((0, prosemirror_schema_list_1.wrapInList)(transform_1.schema.nodes.bullet_list)),
|
|
56
|
+
'Shift-Tab': (0, exports.skipCommandTracking)(liftToOuterList(transform_1.schema.nodes.list_item)),
|
|
57
|
+
Tab: (0, exports.skipCommandTracking)((0, prosemirror_schema_list_1.sinkListItem)(transform_1.schema.nodes.list_item)),
|
|
58
58
|
};
|
|
59
59
|
exports.default = listKeymap;
|
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.ContextMenu = exports.sectionLevel = void 0;
|
|
19
19
|
const transform_1 = require("@manuscripts/transform");
|
|
20
|
-
const prosemirror_model_1 = require("prosemirror-model");
|
|
21
20
|
const commands_1 = require("../commands");
|
|
22
21
|
const popper_1 = require("./popper");
|
|
23
22
|
const popper = new popper_1.PopperManager();
|
|
@@ -32,118 +31,96 @@ const sectionLevel = (depth) => {
|
|
|
32
31
|
}
|
|
33
32
|
};
|
|
34
33
|
exports.sectionLevel = sectionLevel;
|
|
34
|
+
const hasAny = (set, ...items) => {
|
|
35
|
+
return items.some((i) => set.has(i));
|
|
36
|
+
};
|
|
35
37
|
class ContextMenu {
|
|
36
38
|
constructor(node, view, getPos, actions = {}) {
|
|
37
|
-
this.suppressibleAttrs = new Map([
|
|
38
|
-
['suppressHeader', 'Header'],
|
|
39
|
-
['suppressFooter', 'Footer'],
|
|
40
|
-
]);
|
|
41
39
|
this.showAddMenu = (target, after) => {
|
|
42
|
-
let _after = after;
|
|
43
|
-
const { nodes } = this.view.state.schema;
|
|
44
40
|
const menu = document.createElement('div');
|
|
45
41
|
menu.className = 'menu';
|
|
46
42
|
const $pos = this.resolvePos();
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
if ((0, transform_1.isInBibliographySection)($pos)) {
|
|
44
|
+
after = false;
|
|
45
|
+
}
|
|
46
|
+
const insertPos = after ? $pos.after($pos.depth) : $pos.before($pos.depth);
|
|
49
47
|
const endPos = $pos.end();
|
|
50
|
-
const
|
|
51
|
-
|
|
48
|
+
const types = this.insertableTypes(after, insertPos, endPos);
|
|
49
|
+
const insertNode = (type, pos) => {
|
|
50
|
+
const { state, dispatch } = this.view;
|
|
51
|
+
if (pos === undefined) {
|
|
52
|
+
pos = after ? this.getPos() + this.node.nodeSize : this.getPos();
|
|
53
|
+
}
|
|
54
|
+
(0, commands_1.createBlock)(type, pos, state, dispatch);
|
|
55
|
+
};
|
|
56
|
+
if (hasAny(types, 'section', 'subsection')) {
|
|
52
57
|
menu.appendChild(this.createMenuSection((section) => {
|
|
53
|
-
const labelPosition = _after ? 'After' : 'Before';
|
|
54
58
|
const sectionTitle = $pos.node($pos.depth).child(0).textContent;
|
|
55
59
|
const itemTitle = sectionTitle
|
|
56
60
|
? `“${this.trimTitle(sectionTitle, 30)}”`
|
|
57
61
|
: 'This Section';
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
if (types.has('section')) {
|
|
63
|
+
const labelPosition = after ? 'After' : 'Before';
|
|
64
|
+
const level = (0, exports.sectionLevel)($pos.depth - 1);
|
|
65
|
+
const label = `New ${level} ${labelPosition} ${itemTitle}`;
|
|
66
|
+
section.appendChild(this.createMenuItem(label, () => {
|
|
67
|
+
insertNode(transform_1.schema.nodes.section, insertPos);
|
|
62
68
|
popper.destroy();
|
|
63
69
|
}));
|
|
64
70
|
}
|
|
65
|
-
if (
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
if (types.has('subsection')) {
|
|
72
|
+
const level = (0, exports.sectionLevel)($pos.depth);
|
|
73
|
+
const label = `New ${level} to ${itemTitle}`;
|
|
74
|
+
section.appendChild(this.createMenuItem(label, () => {
|
|
75
|
+
insertNode(transform_1.schema.nodes.section, endPos);
|
|
69
76
|
popper.destroy();
|
|
70
77
|
}));
|
|
71
78
|
}
|
|
72
79
|
}));
|
|
73
80
|
}
|
|
74
|
-
if (
|
|
75
|
-
'paragraph',
|
|
76
|
-
'orderedList',
|
|
77
|
-
'bulletList',
|
|
78
|
-
])) {
|
|
81
|
+
if (hasAny(types, 'paragraph', 'ordered_list', 'bullet_list')) {
|
|
79
82
|
menu.appendChild(this.createMenuSection((section) => {
|
|
80
|
-
if (
|
|
83
|
+
if (types.has('paragraph')) {
|
|
81
84
|
section.appendChild(this.createMenuItem('Paragraph', () => {
|
|
82
|
-
|
|
85
|
+
insertNode(transform_1.schema.nodes.paragraph);
|
|
83
86
|
popper.destroy();
|
|
84
87
|
}));
|
|
85
88
|
}
|
|
86
|
-
if (
|
|
89
|
+
if (types.has('ordered_list')) {
|
|
87
90
|
section.appendChild(this.createMenuItem('Numbered List', () => {
|
|
88
|
-
|
|
91
|
+
insertNode(transform_1.schema.nodes.ordered_list);
|
|
89
92
|
popper.destroy();
|
|
90
93
|
}));
|
|
91
94
|
}
|
|
92
|
-
if (
|
|
95
|
+
if (types.has('bullet_list')) {
|
|
93
96
|
section.appendChild(this.createMenuItem('Bullet List', () => {
|
|
94
|
-
|
|
97
|
+
insertNode(transform_1.schema.nodes.bullet_list);
|
|
95
98
|
popper.destroy();
|
|
96
99
|
}));
|
|
97
100
|
}
|
|
98
101
|
}));
|
|
99
102
|
}
|
|
100
|
-
if (
|
|
101
|
-
'figure',
|
|
102
|
-
'tableElement',
|
|
103
|
-
'equationElement',
|
|
104
|
-
'listingElement',
|
|
105
|
-
])) {
|
|
103
|
+
if (hasAny(types, 'figure_element', 'equation_element')) {
|
|
106
104
|
menu.appendChild(this.createMenuSection((section) => {
|
|
107
|
-
if (
|
|
105
|
+
if (types.has('figure_element')) {
|
|
108
106
|
section.appendChild(this.createMenuItem('Figure Panel', () => {
|
|
109
|
-
|
|
107
|
+
insertNode(transform_1.schema.nodes.figure_element);
|
|
110
108
|
popper.destroy();
|
|
111
109
|
}));
|
|
112
110
|
}
|
|
113
|
-
if (
|
|
114
|
-
section.appendChild(this.createMenuItem('Table', () => {
|
|
115
|
-
this.addBlock(nodes.table_element, _after);
|
|
116
|
-
popper.destroy();
|
|
117
|
-
}));
|
|
118
|
-
}
|
|
119
|
-
if (insertableTypes.equationElement) {
|
|
111
|
+
if (types.has('equation_element')) {
|
|
120
112
|
section.appendChild(this.createMenuItem('Equation', () => {
|
|
121
|
-
|
|
122
|
-
popper.destroy();
|
|
123
|
-
}));
|
|
124
|
-
}
|
|
125
|
-
if (insertableTypes.listingElement) {
|
|
126
|
-
section.appendChild(this.createMenuItem('Listing', () => {
|
|
127
|
-
this.addBlock(nodes.listing_element, _after);
|
|
113
|
+
insertNode(transform_1.schema.nodes.equation_element);
|
|
128
114
|
popper.destroy();
|
|
129
115
|
}));
|
|
130
116
|
}
|
|
131
117
|
}));
|
|
132
118
|
}
|
|
133
|
-
if (
|
|
134
|
-
'blockquoteElement',
|
|
135
|
-
'pullquoteElement',
|
|
136
|
-
])) {
|
|
119
|
+
if (hasAny(types, 'blockquote_element')) {
|
|
137
120
|
menu.appendChild(this.createMenuSection((section) => {
|
|
138
|
-
if (
|
|
121
|
+
if (types.has('blockquote_element')) {
|
|
139
122
|
section.appendChild(this.createMenuItem('Block Quote', () => {
|
|
140
|
-
|
|
141
|
-
popper.destroy();
|
|
142
|
-
}));
|
|
143
|
-
}
|
|
144
|
-
if (insertableTypes.pullquoteElement) {
|
|
145
|
-
section.appendChild(this.createMenuItem('Pull Quote', () => {
|
|
146
|
-
this.addBlock(nodes.pullquote_element, _after);
|
|
123
|
+
insertNode(transform_1.schema.nodes.blockquote_element);
|
|
147
124
|
popper.destroy();
|
|
148
125
|
}));
|
|
149
126
|
}
|
|
@@ -160,19 +137,18 @@ class ContextMenu {
|
|
|
160
137
|
const menu = document.createElement('div');
|
|
161
138
|
menu.className = 'menu';
|
|
162
139
|
const $pos = this.resolvePos();
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
if (listTypes.includes(nodeType)) {
|
|
140
|
+
const type = this.node.type;
|
|
141
|
+
if (listTypes.includes(type)) {
|
|
166
142
|
menu.appendChild(this.createMenuSection((section) => {
|
|
167
|
-
if (
|
|
143
|
+
if (type === transform_1.schema.nodes.bullet_list) {
|
|
168
144
|
section.appendChild(this.createMenuItem('Change to Numbered List', () => {
|
|
169
|
-
this.changeNodeType(nodes.ordered_list);
|
|
145
|
+
this.changeNodeType(transform_1.schema.nodes.ordered_list);
|
|
170
146
|
popper.destroy();
|
|
171
147
|
}));
|
|
172
148
|
}
|
|
173
|
-
if (
|
|
149
|
+
if (type === transform_1.schema.nodes.ordered_list) {
|
|
174
150
|
section.appendChild(this.createMenuItem('Change to Bullet List', () => {
|
|
175
|
-
this.changeNodeType(nodes.bullet_list);
|
|
151
|
+
this.changeNodeType(transform_1.schema.nodes.bullet_list);
|
|
176
152
|
popper.destroy();
|
|
177
153
|
}));
|
|
178
154
|
}
|
|
@@ -188,34 +164,12 @@ class ContextMenu {
|
|
|
188
164
|
}));
|
|
189
165
|
}));
|
|
190
166
|
}
|
|
191
|
-
|
|
192
|
-
if (suppressOptions.length) {
|
|
193
|
-
menu.appendChild(this.createMenuSection((section) => {
|
|
194
|
-
for (const option of suppressOptions) {
|
|
195
|
-
const label = option.attrs[option.attr]
|
|
196
|
-
? `Show ${option.label}`
|
|
197
|
-
: `Hide ${option.label}`;
|
|
198
|
-
section.appendChild(this.createMenuItem(label, () => {
|
|
199
|
-
this.toggleNodeAttr(option);
|
|
200
|
-
popper.destroy();
|
|
201
|
-
}));
|
|
202
|
-
}
|
|
203
|
-
}));
|
|
204
|
-
}
|
|
205
|
-
if (nodeType === nodes.paragraph && $pos.parent.type === nodes.section) {
|
|
206
|
-
menu.appendChild(this.createMenuSection((section) => {
|
|
207
|
-
section.appendChild(this.createMenuItem(`Split to New ${(0, exports.sectionLevel)($pos.depth)}`, () => {
|
|
208
|
-
this.splitSection();
|
|
209
|
-
popper.destroy();
|
|
210
|
-
}));
|
|
211
|
-
}));
|
|
212
|
-
}
|
|
213
|
-
if (!readonlyTypes.includes(nodeType) &&
|
|
167
|
+
if (!readonlyTypes.includes(type) &&
|
|
214
168
|
!readonlyTypes.includes($pos.parent.type)) {
|
|
215
169
|
menu.appendChild(this.createMenuSection((section) => {
|
|
216
|
-
const nodeName = transform_1.nodeNames.get(
|
|
170
|
+
const nodeName = transform_1.nodeNames.get(type) || '';
|
|
217
171
|
section.appendChild(this.createMenuItem(`Delete ${nodeName}`, () => {
|
|
218
|
-
this.deleteNode(
|
|
172
|
+
this.deleteNode(type);
|
|
219
173
|
popper.destroy();
|
|
220
174
|
}));
|
|
221
175
|
}));
|
|
@@ -227,22 +181,6 @@ class ContextMenu {
|
|
|
227
181
|
});
|
|
228
182
|
this.addPopperEventListeners();
|
|
229
183
|
};
|
|
230
|
-
this.addBlock = (nodeType, after, position) => {
|
|
231
|
-
const { state, dispatch } = this.view;
|
|
232
|
-
if (position === undefined) {
|
|
233
|
-
position = after ? this.getPos() + this.node.nodeSize : this.getPos();
|
|
234
|
-
}
|
|
235
|
-
(0, commands_1.createBlock)(nodeType, position, state, dispatch);
|
|
236
|
-
};
|
|
237
|
-
this.canAddBlock = (nodeType, after, position) => {
|
|
238
|
-
const { state: { doc }, } = this.view;
|
|
239
|
-
if (position === undefined) {
|
|
240
|
-
position = after ? this.getPos() + this.node.nodeSize : this.getPos();
|
|
241
|
-
}
|
|
242
|
-
const $position = doc.resolve(position);
|
|
243
|
-
const index = $position.index();
|
|
244
|
-
return $position.parent.canReplaceWith(index, index, nodeType);
|
|
245
|
-
};
|
|
246
184
|
this.createMenuItem = (contents, handler) => {
|
|
247
185
|
const item = document.createElement('div');
|
|
248
186
|
item.className = 'menu-item';
|
|
@@ -260,22 +198,37 @@ class ContextMenu {
|
|
|
260
198
|
return section;
|
|
261
199
|
};
|
|
262
200
|
this.insertableTypes = (after, insertPos, endPos) => {
|
|
263
|
-
const { nodes } =
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
201
|
+
const { nodes } = transform_1.schema;
|
|
202
|
+
const insertable = new Set();
|
|
203
|
+
const doc = this.view.state.doc;
|
|
204
|
+
const getPos = (pos) => {
|
|
205
|
+
if (pos === undefined) {
|
|
206
|
+
pos = after ? this.getPos() + this.node.nodeSize : this.getPos();
|
|
207
|
+
}
|
|
208
|
+
return pos;
|
|
209
|
+
};
|
|
210
|
+
const canInsertAt = (type, pos) => {
|
|
211
|
+
const $pos = doc.resolve(getPos(pos));
|
|
212
|
+
const index = $pos.index();
|
|
213
|
+
return $pos.parent.canReplaceWith(index, index, type);
|
|
214
|
+
};
|
|
215
|
+
const checkNode = (node, pos) => {
|
|
216
|
+
canInsertAt(nodes[node], pos) && insertable.add(node);
|
|
276
217
|
};
|
|
218
|
+
if (canInsertAt(nodes.section, endPos)) {
|
|
219
|
+
insertable.add('subsection');
|
|
220
|
+
}
|
|
221
|
+
checkNode('section', insertPos);
|
|
222
|
+
checkNode('paragraph');
|
|
223
|
+
checkNode('ordered_list');
|
|
224
|
+
checkNode('bullet_list');
|
|
225
|
+
checkNode('figure_element');
|
|
226
|
+
checkNode('table_element');
|
|
227
|
+
checkNode('equation_element');
|
|
228
|
+
checkNode('blockquote_element');
|
|
229
|
+
checkNode('pullquote_element');
|
|
230
|
+
return insertable;
|
|
277
231
|
};
|
|
278
|
-
this.showMenuSection = (insertableTypes, types) => types.some((type) => insertableTypes[type]);
|
|
279
232
|
this.changeNodeType = (nodeType) => {
|
|
280
233
|
this.view.dispatch(this.view.state.tr.setNodeMarkup(this.getPos(), nodeType, {
|
|
281
234
|
id: this.node.attrs.id,
|
|
@@ -304,41 +257,6 @@ class ContextMenu {
|
|
|
304
257
|
}
|
|
305
258
|
};
|
|
306
259
|
this.resolvePos = () => this.view.state.doc.resolve(this.getPos());
|
|
307
|
-
this.splitSection = () => {
|
|
308
|
-
const { schema, tr } = this.view.state;
|
|
309
|
-
const from = this.getPos();
|
|
310
|
-
const to = from + this.node.nodeSize;
|
|
311
|
-
const slice = new prosemirror_model_1.Slice(prosemirror_model_1.Fragment.from([
|
|
312
|
-
schema.nodes.section.create(),
|
|
313
|
-
schema.nodes.section.create({}, [
|
|
314
|
-
schema.nodes.section_title.create(),
|
|
315
|
-
this.node,
|
|
316
|
-
]),
|
|
317
|
-
]), 1, 1);
|
|
318
|
-
this.view.dispatch(tr.replaceRange(from, to, slice));
|
|
319
|
-
};
|
|
320
|
-
this.toggleNodeAttr = (option) => {
|
|
321
|
-
const { getPos, attr, attrs } = option;
|
|
322
|
-
this.view.dispatch(this.view.state.tr.setNodeMarkup(getPos(), undefined, Object.assign(Object.assign({}, attrs), { [attr]: !attrs[attr] })));
|
|
323
|
-
};
|
|
324
|
-
this.buildSuppressOptions = () => {
|
|
325
|
-
const items = [];
|
|
326
|
-
let attrs = this.node.attrs;
|
|
327
|
-
if (this.node.attrs.suppressTitle === undefined) {
|
|
328
|
-
attrs = Object.assign(this.node.attrs, { suppressTitle: false });
|
|
329
|
-
}
|
|
330
|
-
for (const [attr, label] of this.suppressibleAttrs.entries()) {
|
|
331
|
-
if (attr in attrs) {
|
|
332
|
-
items.push({
|
|
333
|
-
attr,
|
|
334
|
-
attrs,
|
|
335
|
-
label,
|
|
336
|
-
getPos: this.getPos,
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
return items;
|
|
341
|
-
};
|
|
342
260
|
this.addPopperEventListeners = () => {
|
|
343
261
|
const mouseListener = () => {
|
|
344
262
|
window.requestAnimationFrame(() => {
|
|
@@ -356,7 +274,7 @@ class ContextMenu {
|
|
|
356
274
|
window.addEventListener('keydown', keyListener);
|
|
357
275
|
};
|
|
358
276
|
this.trimTitle = (title, max) => {
|
|
359
|
-
return title.length > max ? title.
|
|
277
|
+
return title.length > max ? title.substring(0, max) + '…' : title;
|
|
360
278
|
};
|
|
361
279
|
this.node = node;
|
|
362
280
|
this.view = view;
|