@manuscripts/body-editor 1.6.11 → 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.
Files changed (95) hide show
  1. package/dist/cjs/commands.js +57 -1
  2. package/dist/cjs/components/toolbar/LevelSelector.js +2 -2
  3. package/dist/cjs/index.js +4 -9
  4. package/dist/cjs/keys/list.js +9 -9
  5. package/dist/cjs/lib/context-menu.js +81 -163
  6. package/dist/cjs/menus.js +353 -405
  7. package/dist/cjs/toolbar.js +30 -34
  8. package/dist/cjs/views/editable_block.js +12 -4
  9. package/dist/es/commands.js +57 -2
  10. package/dist/es/components/toolbar/LevelSelector.js +2 -2
  11. package/dist/es/index.js +2 -4
  12. package/dist/es/keys/list.js +7 -7
  13. package/dist/es/lib/context-menu.js +81 -163
  14. package/dist/es/menus.js +353 -405
  15. package/dist/es/toolbar.js +31 -35
  16. package/dist/es/views/editable_block.js +13 -5
  17. package/dist/types/commands.d.ts +1 -0
  18. package/dist/types/components/toolbar/LevelSelector.d.ts +2 -2
  19. package/dist/types/configs/editor-views.d.ts +14 -14
  20. package/dist/types/index.d.ts +2 -4
  21. package/dist/types/keys/list.d.ts +1 -1
  22. package/dist/types/lib/context-menu.d.ts +0 -7
  23. package/dist/types/menus.d.ts +2 -3
  24. package/dist/types/toolbar.d.ts +18 -1
  25. package/dist/types/views/bibliography_element_editable.d.ts +1 -1
  26. package/dist/types/views/blockquote_element_editable.d.ts +1 -1
  27. package/dist/types/views/bullet_list_editable.d.ts +1 -1
  28. package/dist/types/views/editable_block.d.ts +1 -1
  29. package/dist/types/views/equation_element_editable.d.ts +1 -1
  30. package/dist/types/views/figure_element_editable.d.ts +1 -1
  31. package/dist/types/views/footnote_editable.d.ts +1 -1
  32. package/dist/types/views/footnotes_element_editable.d.ts +1 -1
  33. package/dist/types/views/listing_element_editable.d.ts +1 -1
  34. package/dist/types/views/ordered_list_editable.d.ts +1 -1
  35. package/dist/types/views/paragraph_editable.d.ts +1 -1
  36. package/dist/types/views/placeholder_element_editable.d.ts +1 -1
  37. package/dist/types/views/pullquote_element_editable.d.ts +1 -1
  38. package/dist/types/views/section_title_editable.d.ts +1 -1
  39. package/dist/types/views/table_element_editable.d.ts +1 -1
  40. package/dist/types/views/toc_element_editable.d.ts +1 -1
  41. package/package.json +2 -4
  42. package/dist/cjs/components/application-menu/ApplicationMenu.js +0 -63
  43. package/dist/cjs/components/application-menu/MenuItemContainer.js +0 -127
  44. package/dist/cjs/components/application-menu/Shortcut.js +0 -63
  45. package/dist/cjs/components/application-menu/index.js +0 -22
  46. package/dist/cjs/components/application-menu/menuState.js +0 -49
  47. package/dist/cjs/components/application-menu/types.js +0 -17
  48. package/dist/cjs/components/application-menu/useApplicationMenus.js +0 -154
  49. package/dist/cjs/components/dialog/TableCellBorderOptions.js +0 -64
  50. package/dist/cjs/components/dialog/TableCellOptions.js +0 -50
  51. package/dist/cjs/components/dialog/TableOptions.js +0 -31
  52. package/dist/cjs/components/dialog/commands.js +0 -185
  53. package/dist/cjs/components/dialog/index.js +0 -26
  54. package/dist/cjs/components/dialog/shared.js +0 -48
  55. package/dist/cjs/components/dialog/types.js +0 -9
  56. package/dist/cjs/components/toolbar/ListStyleSelector.js +0 -150
  57. package/dist/cjs/components/toolbar/ManuscriptToolbar.js +0 -104
  58. package/dist/cjs/components/toolbar/OrderListSelector.js +0 -103
  59. package/dist/cjs/views/EditableBlock.js +0 -37
  60. package/dist/es/components/application-menu/ApplicationMenu.js +0 -56
  61. package/dist/es/components/application-menu/MenuItemContainer.js +0 -120
  62. package/dist/es/components/application-menu/Shortcut.js +0 -56
  63. package/dist/es/components/application-menu/index.js +0 -17
  64. package/dist/es/components/application-menu/menuState.js +0 -44
  65. package/dist/es/components/application-menu/types.js +0 -16
  66. package/dist/es/components/application-menu/useApplicationMenus.js +0 -148
  67. package/dist/es/components/dialog/TableCellBorderOptions.js +0 -36
  68. package/dist/es/components/dialog/TableCellOptions.js +0 -22
  69. package/dist/es/components/dialog/TableOptions.js +0 -26
  70. package/dist/es/components/dialog/commands.js +0 -177
  71. package/dist/es/components/dialog/index.js +0 -18
  72. package/dist/es/components/dialog/shared.js +0 -21
  73. package/dist/es/components/dialog/types.js +0 -6
  74. package/dist/es/components/toolbar/ListStyleSelector.js +0 -120
  75. package/dist/es/components/toolbar/ManuscriptToolbar.js +0 -97
  76. package/dist/es/components/toolbar/OrderListSelector.js +0 -72
  77. package/dist/es/views/EditableBlock.js +0 -29
  78. package/dist/types/components/application-menu/ApplicationMenu.d.ts +0 -24
  79. package/dist/types/components/application-menu/MenuItemContainer.d.ts +0 -27
  80. package/dist/types/components/application-menu/Shortcut.d.ts +0 -26
  81. package/dist/types/components/application-menu/index.d.ts +0 -18
  82. package/dist/types/components/application-menu/menuState.d.ts +0 -18
  83. package/dist/types/components/application-menu/types.d.ts +0 -47
  84. package/dist/types/components/application-menu/useApplicationMenus.d.ts +0 -12
  85. package/dist/types/components/dialog/TableCellBorderOptions.d.ts +0 -9
  86. package/dist/types/components/dialog/TableCellOptions.d.ts +0 -4
  87. package/dist/types/components/dialog/TableOptions.d.ts +0 -4
  88. package/dist/types/components/dialog/commands.d.ts +0 -28
  89. package/dist/types/components/dialog/index.d.ts +0 -4
  90. package/dist/types/components/dialog/shared.d.ts +0 -16
  91. package/dist/types/components/dialog/types.d.ts +0 -16
  92. package/dist/types/components/toolbar/ListStyleSelector.d.ts +0 -36
  93. package/dist/types/components/toolbar/ManuscriptToolbar.d.ts +0 -50
  94. package/dist/types/components/toolbar/OrderListSelector.d.ts +0 -14
  95. package/dist/types/views/EditableBlock.d.ts +0 -19
@@ -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
- * © 2019 Atypon Systems LLC
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 parentElementType.schema.nodes.bullet_list: {
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.toolbar = exports.PopperManager = exports.CollabProvider = exports.ManuscriptToolbar = exports.OutlineManuscript = exports.OutlineItemIcon = exports.ManuscriptOutline = exports.DialogNames = exports.DialogController = void 0;
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 ManuscriptToolbar_1 = require("./components/toolbar/ManuscriptToolbar");
46
- Object.defineProperty(exports, "ManuscriptToolbar", { enumerable: true, get: function () { return ManuscriptToolbar_1.ManuscriptToolbar; } });
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
- var toolbar_1 = require("./toolbar");
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; } });
@@ -15,11 +15,11 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.skipTrackingChanges = void 0;
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 skipTrackingChanges = (command) => (state, dispatch) => {
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.skipTrackingChanges = skipTrackingChanges;
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.skipTrackingChanges)(liftToOuterList(transform_1.schema.nodes.list_item)),
53
- 'Mod-]': (0, exports.skipTrackingChanges)((0, prosemirror_schema_list_1.sinkListItem)(transform_1.schema.nodes.list_item)),
54
- 'Mod-Alt-o': (0, exports.skipTrackingChanges)((0, prosemirror_schema_list_1.wrapInList)(transform_1.schema.nodes.ordered_list)),
55
- 'Mod-Alt-k': (0, exports.skipTrackingChanges)((0, prosemirror_schema_list_1.wrapInList)(transform_1.schema.nodes.bullet_list)),
56
- 'Shift-Tab': (0, exports.skipTrackingChanges)(liftToOuterList(transform_1.schema.nodes.list_item)),
57
- Tab: (0, exports.skipTrackingChanges)((0, prosemirror_schema_list_1.sinkListItem)(transform_1.schema.nodes.list_item)),
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
- _after = (0, transform_1.isInBibliographySection)($pos) ? false : _after;
48
- const insertPos = _after ? $pos.after($pos.depth) : $pos.before($pos.depth);
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 insertableTypes = this.insertableTypes(_after, insertPos, endPos);
51
- if (this.showMenuSection(insertableTypes, ['section', 'subsection'])) {
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
- const itemLabel = `New ${(0, exports.sectionLevel)($pos.depth - 1)} ${labelPosition} ${itemTitle}`;
59
- if (insertableTypes.section) {
60
- section.appendChild(this.createMenuItem(itemLabel, () => {
61
- this.addBlock(nodes.section, _after, insertPos);
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 (insertableTypes.subsection) {
66
- const subItemLabel = `New ${(0, exports.sectionLevel)($pos.depth)} to ${itemTitle}`;
67
- section.appendChild(this.createMenuItem(subItemLabel, () => {
68
- this.addBlock(nodes.section, _after, endPos);
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 (this.showMenuSection(insertableTypes, [
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 (insertableTypes.paragraphElement) {
83
+ if (types.has('paragraph')) {
81
84
  section.appendChild(this.createMenuItem('Paragraph', () => {
82
- this.addBlock(nodes.paragraph, _after);
85
+ insertNode(transform_1.schema.nodes.paragraph);
83
86
  popper.destroy();
84
87
  }));
85
88
  }
86
- if (insertableTypes.orderedList) {
89
+ if (types.has('ordered_list')) {
87
90
  section.appendChild(this.createMenuItem('Numbered List', () => {
88
- this.addBlock(nodes.ordered_list, _after);
91
+ insertNode(transform_1.schema.nodes.ordered_list);
89
92
  popper.destroy();
90
93
  }));
91
94
  }
92
- if (insertableTypes.bulletList) {
95
+ if (types.has('bullet_list')) {
93
96
  section.appendChild(this.createMenuItem('Bullet List', () => {
94
- this.addBlock(nodes.bullet_list, _after);
97
+ insertNode(transform_1.schema.nodes.bullet_list);
95
98
  popper.destroy();
96
99
  }));
97
100
  }
98
101
  }));
99
102
  }
100
- if (this.showMenuSection(insertableTypes, [
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 (insertableTypes.figureElement) {
105
+ if (types.has('figure_element')) {
108
106
  section.appendChild(this.createMenuItem('Figure Panel', () => {
109
- this.addBlock(nodes.figure_element, _after);
107
+ insertNode(transform_1.schema.nodes.figure_element);
110
108
  popper.destroy();
111
109
  }));
112
110
  }
113
- if (insertableTypes.tableElement) {
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
- this.addBlock(nodes.equation_element, _after);
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 (this.showMenuSection(insertableTypes, [
134
- 'blockquoteElement',
135
- 'pullquoteElement',
136
- ])) {
119
+ if (hasAny(types, 'blockquote_element')) {
137
120
  menu.appendChild(this.createMenuSection((section) => {
138
- if (insertableTypes.blockquoteElement) {
121
+ if (types.has('blockquote_element')) {
139
122
  section.appendChild(this.createMenuItem('Block Quote', () => {
140
- this.addBlock(nodes.blockquote_element, _after);
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 nodeType = this.node.type;
164
- const nodes = transform_1.schema.nodes;
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 (nodeType === nodes.bullet_list) {
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 (nodeType === nodes.ordered_list) {
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
- const suppressOptions = this.buildSuppressOptions();
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(nodeType) || '';
170
+ const nodeName = transform_1.nodeNames.get(type) || '';
217
171
  section.appendChild(this.createMenuItem(`Delete ${nodeName}`, () => {
218
- this.deleteNode(nodeType);
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 } = this.view.state.schema;
264
- return {
265
- section: this.canAddBlock(nodes.section, after, insertPos),
266
- subsection: this.canAddBlock(nodes.section, after, endPos),
267
- paragraphElement: this.canAddBlock(nodes.paragraph, after),
268
- orderedList: this.canAddBlock(nodes.ordered_list, after),
269
- bulletList: this.canAddBlock(nodes.bullet_list, after),
270
- figureElement: this.canAddBlock(nodes.figure_element, after),
271
- tableElement: this.canAddBlock(nodes.table_element, after),
272
- equationElement: this.canAddBlock(nodes.equation_element, after),
273
- listingElement: this.canAddBlock(nodes.listing_element, after),
274
- blockquoteElement: this.canAddBlock(nodes.blockquote_element, after),
275
- pullquoteElement: this.canAddBlock(nodes.pullquote_element, after),
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.substr(0, max) + '…' : title;
277
+ return title.length > max ? title.substring(0, max) + '…' : title;
360
278
  };
361
279
  this.node = node;
362
280
  this.view = view;