@manuscripts/body-editor 2.3.3-LEAN-4053.1 → 2.5.1
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 +207 -94
- package/dist/cjs/components/views/DeleteFootnoteDialog.js +2 -2
- package/dist/cjs/components/views/FootnotesSelector.js +18 -17
- package/dist/cjs/configs/editor-plugins.js +2 -0
- package/dist/cjs/configs/editor-views.js +4 -6
- package/dist/cjs/index.js +0 -1
- package/dist/cjs/lib/context-menu.js +91 -13
- package/dist/cjs/lib/doc.js +4 -27
- package/dist/cjs/lib/footnotes.js +122 -31
- package/dist/cjs/menus.js +11 -1
- package/dist/cjs/plugins/footnotes/index.js +215 -0
- package/dist/cjs/plugins/footnotes/widgets.js +136 -0
- package/dist/cjs/plugins/placeholder.js +12 -19
- package/dist/cjs/plugins/table-footnote.js +46 -0
- package/dist/cjs/testing/default-editor-data.js +1 -1
- package/dist/cjs/testing/setup-editor.js +0 -1
- package/dist/cjs/versions.js +1 -1
- package/dist/cjs/views/editable_block.js +1 -1
- package/dist/cjs/views/footnote.js +15 -85
- package/dist/cjs/views/footnote_editable.js +21 -0
- package/dist/cjs/views/footnotes_element.js +2 -8
- package/dist/cjs/views/footnotes_element_editable.js +22 -0
- package/dist/cjs/views/inline_footnote.js +124 -78
- package/dist/cjs/views/section_title.js +6 -1
- package/dist/cjs/views/table_element_footer.js +5 -2
- package/dist/cjs/views/table_element_footer_editable.js +20 -0
- package/dist/es/commands.js +204 -93
- package/dist/es/components/views/DeleteFootnoteDialog.js +2 -2
- package/dist/es/components/views/FootnotesSelector.js +18 -17
- package/dist/es/configs/editor-plugins.js +2 -0
- package/dist/es/configs/editor-views.js +2 -4
- package/dist/es/index.js +0 -1
- package/dist/es/lib/context-menu.js +91 -16
- package/dist/es/lib/doc.js +4 -25
- package/dist/es/lib/footnotes.js +116 -28
- package/dist/es/menus.js +12 -2
- package/dist/es/plugins/footnotes/index.js +211 -0
- package/dist/es/plugins/footnotes/widgets.js +127 -0
- package/dist/es/plugins/placeholder.js +11 -20
- package/dist/es/plugins/table-footnote.js +44 -0
- package/dist/es/testing/default-editor-data.js +1 -1
- package/dist/es/testing/setup-editor.js +0 -1
- package/dist/es/versions.js +1 -1
- package/dist/es/views/editable_block.js +1 -1
- package/dist/es/views/footnote.js +15 -86
- package/dist/es/views/footnote_editable.js +19 -0
- package/dist/es/views/footnotes_element.js +2 -8
- package/dist/es/views/footnotes_element_editable.js +20 -0
- package/dist/es/views/inline_footnote.js +128 -82
- package/dist/es/views/section_title.js +6 -1
- package/dist/es/views/table_element_footer.js +5 -4
- package/dist/es/views/table_element_footer_editable.js +18 -0
- package/dist/types/commands.d.ts +14 -9
- package/dist/types/components/views/DeleteFootnoteDialog.d.ts +2 -0
- package/dist/types/components/views/FootnotesSelector.d.ts +6 -7
- package/dist/types/configs/editor-views.d.ts +35 -22
- package/dist/types/index.d.ts +0 -1
- package/dist/types/lib/context-menu.d.ts +3 -1
- package/dist/types/lib/doc.d.ts +0 -2
- package/dist/types/lib/footnotes.d.ts +19 -8
- package/dist/types/plugins/{footnotes.d.ts → footnotes/index.d.ts} +10 -16
- package/dist/types/plugins/footnotes/widgets.d.ts +22 -0
- package/dist/types/plugins/placeholder.d.ts +2 -0
- package/dist/types/plugins/table-footnote.d.ts +3 -0
- package/dist/types/versions.d.ts +1 -1
- package/dist/types/views/footnote.d.ts +6 -12
- package/dist/types/views/footnote_editable.d.ts +51 -0
- package/dist/types/views/footnotes_element.d.ts +0 -1
- package/dist/types/views/footnotes_element_editable.d.ts +51 -0
- package/dist/types/views/inline_footnote.d.ts +14 -8
- package/dist/types/views/table_element_footer.d.ts +2 -2
- package/dist/types/views/{general_table_footnote.d.ts → table_element_footer_editable.d.ts} +2 -10
- package/package.json +2 -2
- package/styles/AdvancedEditor.css +10 -3
- package/styles/Editor.css +64 -33
- package/dist/cjs/icons.js +0 -8
- package/dist/cjs/plugins/footnotes.js +0 -177
- package/dist/cjs/views/general_table_footnote.js +0 -78
- package/dist/es/icons.js +0 -5
- package/dist/es/plugins/footnotes.js +0 -174
- package/dist/es/views/general_table_footnote.js +0 -71
- package/dist/types/icons.d.ts +0 -2
package/dist/cjs/commands.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.autoComplete = exports.mergeCellsWithSpace = exports.addColumns = exports.addRows = exports.addInlineComment = exports.addNodeComment = exports.createAndFillTableElement = exports.selectAllIsolating = exports.ignoreAtomBlockNodeForward = exports.isAtEndOfTextBlock = exports.ignoreMetaNodeBackspaceCommand = exports.ignoreAtomBlockNodeBackward = exports.isTextSelection = exports.isAtStartOfTextBlock = exports.insertTOCSection = exports.insertBibliographySection = exports.insertList = exports.insertKeywords = exports.insertContributors = exports.insertAbstract = exports.insertBackMatterSection = exports.insertSection = exports.insertGraphicalAbstract = exports.insertInlineFootnote = exports.
|
|
18
|
+
exports.autoComplete = exports.mergeCellsWithSpace = exports.addColumns = exports.addRows = exports.insertBoxElement = exports.insertTableFootnote = exports.addInlineComment = exports.addNodeComment = exports.createAndFillTableElement = exports.selectAllIsolating = exports.ignoreAtomBlockNodeForward = exports.isAtEndOfTextBlock = exports.ignoreMetaNodeBackspaceCommand = exports.ignoreAtomBlockNodeBackward = exports.isTextSelection = exports.isAtStartOfTextBlock = exports.insertTOCSection = exports.insertBibliographySection = exports.insertList = exports.insertKeywords = exports.insertContributors = exports.insertAbstract = exports.insertBackMatterSection = exports.insertSection = exports.insertGraphicalAbstract = exports.insertInlineFootnote = exports.insertFootnote = exports.createFootnote = exports.insertInlineEquation = exports.insertCrossReference = exports.insertInlineCitation = exports.insertLink = exports.insertSectionLabel = exports.findPosBeforeFirstSubsection = exports.insertBreak = exports.deleteBlock = exports.insertBlock = exports.insertSupplement = exports.insertTable = exports.insertFigure = exports.insertGeneralFootnote = exports.undoFootnoteDelete = exports.createBlock = exports.createSelection = exports.canInsert = exports.blockActive = exports.isNodeSelection = exports.markActive = exports.addToStart = void 0;
|
|
19
19
|
const json_schema_1 = require("@manuscripts/json-schema");
|
|
20
20
|
const track_changes_plugin_1 = require("@manuscripts/track-changes-plugin");
|
|
21
21
|
const transform_1 = require("@manuscripts/transform");
|
|
@@ -34,6 +34,7 @@ const track_changes_utils_1 = require("./lib/track-changes-utils");
|
|
|
34
34
|
const utils_1 = require("./lib/utils");
|
|
35
35
|
const comments_2 = require("./plugins/comments");
|
|
36
36
|
const editor_props_1 = require("./plugins/editor-props");
|
|
37
|
+
const footnotes_2 = require("./plugins/footnotes");
|
|
37
38
|
const autocompletion_1 = require("./plugins/section_title/autocompletion");
|
|
38
39
|
const addToStart = (state, dispatch) => {
|
|
39
40
|
const { selection } = state;
|
|
@@ -91,7 +92,8 @@ exports.blockActive = blockActive;
|
|
|
91
92
|
const canInsert = (type) => (state) => {
|
|
92
93
|
var _a;
|
|
93
94
|
const { $from, $to } = state.selection;
|
|
94
|
-
if ($from.node().type === transform_1.schema.nodes.title
|
|
95
|
+
if (($from.node().type === transform_1.schema.nodes.title || $from.node().type === transform_1.schema.nodes.section_title) &&
|
|
96
|
+
$from.pos === $to.pos) {
|
|
95
97
|
return false;
|
|
96
98
|
}
|
|
97
99
|
const initDepth = ((_a = (0, prosemirror_utils_1.findParentNodeOfType)(transform_1.schema.nodes.box_element)(state.selection)) === null || _a === void 0 ? void 0 : _a.depth) ||
|
|
@@ -159,40 +161,48 @@ const createBlock = (nodeType, position, state, dispatch, attrs) => {
|
|
|
159
161
|
}
|
|
160
162
|
};
|
|
161
163
|
exports.createBlock = createBlock;
|
|
162
|
-
const
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
if (!table) {
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
168
|
-
if (!dispatch) {
|
|
169
|
-
return true;
|
|
170
|
-
}
|
|
171
|
-
return (0, exports.insertInlineFootnote)(state, dispatch);
|
|
164
|
+
const undoFootnoteDelete = (tr, footnote, position) => {
|
|
165
|
+
const updatedAttrs = Object.assign(Object.assign({}, footnote.node.attrs), { dataTracked: null });
|
|
166
|
+
tr.setNodeMarkup(position, undefined, updatedAttrs, footnote.node.marks);
|
|
172
167
|
};
|
|
173
|
-
exports.
|
|
174
|
-
const
|
|
175
|
-
const
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
168
|
+
exports.undoFootnoteDelete = undoFootnoteDelete;
|
|
169
|
+
const insertGeneralFootnote = (tableElementNode, position, view, tableElementFooter) => {
|
|
170
|
+
const { state, dispatch } = view;
|
|
171
|
+
const paragraph = state.schema.nodes.paragraph.create({
|
|
172
|
+
placeholder: 'Add general note here',
|
|
173
|
+
});
|
|
174
|
+
const generalNote = state.schema.nodes.general_table_footnote.create({}, [
|
|
175
|
+
paragraph,
|
|
176
|
+
]);
|
|
177
|
+
const tableColGroup = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.table_colgroup)[0];
|
|
178
|
+
const table = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.table)[0];
|
|
179
|
+
const tr = state.tr;
|
|
180
|
+
const pos = (tableElementFooter === null || tableElementFooter === void 0 ? void 0 : tableElementFooter.length)
|
|
181
|
+
? position + tableElementFooter[0].pos + 2
|
|
182
|
+
: position +
|
|
183
|
+
(!tableColGroup
|
|
184
|
+
? table.pos + table.node.nodeSize
|
|
185
|
+
: tableColGroup.pos + tableColGroup.node.nodeSize);
|
|
186
|
+
if (tableElementFooter === null || tableElementFooter === void 0 ? void 0 : tableElementFooter.length) {
|
|
187
|
+
if ((0, track_changes_utils_1.isDeleted)(tableElementFooter[0].node)) {
|
|
188
|
+
const tableElementFooterPos = tr.mapping.map(position + tableElementFooter[0].pos + 1);
|
|
189
|
+
(0, exports.undoFootnoteDelete)(tr, tableElementFooter[0], tableElementFooterPos);
|
|
190
|
+
}
|
|
191
|
+
tr.insert(pos, generalNote);
|
|
180
192
|
}
|
|
181
|
-
|
|
182
|
-
|
|
193
|
+
else {
|
|
194
|
+
const tableElementFooter = transform_1.schema.nodes.table_element_footer.create({
|
|
195
|
+
id: (0, transform_1.generateNodeID)(transform_1.schema.nodes.table_element_footer),
|
|
196
|
+
}, [generalNote]);
|
|
197
|
+
tr.insert(pos, tableElementFooter);
|
|
198
|
+
}
|
|
199
|
+
if (dispatch && pos) {
|
|
200
|
+
const selection = (0, exports.createSelection)(state.schema.nodes.paragraph, pos, tr.doc);
|
|
201
|
+
view === null || view === void 0 ? void 0 : view.focus();
|
|
202
|
+
dispatch(tr.setSelection(selection).scrollIntoView());
|
|
183
203
|
}
|
|
184
|
-
const tr = state.tr;
|
|
185
|
-
const footer = (0, exports.insertTableElementFooter)(tr, [container.node, container.pos]);
|
|
186
|
-
const pos = footer.pos + 1;
|
|
187
|
-
const node = transform_1.schema.nodes.general_table_footnote.create({}, [
|
|
188
|
-
transform_1.schema.nodes.paragraph.create(),
|
|
189
|
-
]);
|
|
190
|
-
tr.insert(pos, node);
|
|
191
|
-
const selection = prosemirror_state_1.TextSelection.create(tr.doc, pos + 1);
|
|
192
|
-
tr.setSelection(selection).scrollIntoView();
|
|
193
|
-
dispatch(tr);
|
|
194
204
|
};
|
|
195
|
-
exports.
|
|
205
|
+
exports.insertGeneralFootnote = insertGeneralFootnote;
|
|
196
206
|
const insertFigure = (file, state, dispatch) => {
|
|
197
207
|
const position = findBlockInsertPosition(state);
|
|
198
208
|
if (position === null || !dispatch) {
|
|
@@ -393,83 +403,88 @@ const insertInlineEquation = (state, dispatch) => {
|
|
|
393
403
|
return true;
|
|
394
404
|
};
|
|
395
405
|
exports.insertInlineEquation = insertInlineEquation;
|
|
396
|
-
const
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
reinstateNode(tr, footer.node, pos);
|
|
402
|
-
}
|
|
403
|
-
return {
|
|
404
|
-
node: footer.node,
|
|
405
|
-
pos,
|
|
406
|
-
};
|
|
407
|
-
}
|
|
408
|
-
const pos = tr.mapping.map(table[1] + table[0].nodeSize - 2);
|
|
409
|
-
const node = transform_1.schema.nodes.table_element_footer.create();
|
|
410
|
-
tr.insert(pos, node);
|
|
411
|
-
return {
|
|
412
|
-
node,
|
|
413
|
-
pos,
|
|
414
|
-
};
|
|
406
|
+
const createFootnote = (state, kind) => {
|
|
407
|
+
return transform_1.schema.nodes.footnote.createAndFill({
|
|
408
|
+
id: (0, transform_1.generateNodeID)(transform_1.schema.nodes.footnote),
|
|
409
|
+
kind,
|
|
410
|
+
});
|
|
415
411
|
};
|
|
416
|
-
exports.
|
|
417
|
-
const
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
412
|
+
exports.createFootnote = createFootnote;
|
|
413
|
+
const insertFootnote = (state, tr, footnote) => {
|
|
414
|
+
const footnotesSection = (0, prosemirror_utils_1.findChildrenByType)(tr.doc, transform_1.schema.nodes.footnotes_section)[0];
|
|
415
|
+
let selectionPos = 0;
|
|
416
|
+
if (!footnotesSection) {
|
|
417
|
+
const section = state.schema.nodes.footnotes_section.create({}, [
|
|
418
|
+
state.schema.nodes.section_title.create({}, state.schema.text('Footnotes')),
|
|
419
|
+
state.schema.nodes.footnotes_element.create({}, footnote),
|
|
420
|
+
]);
|
|
421
|
+
const backmatter = (0, prosemirror_utils_1.findChildrenByType)(tr.doc, transform_1.schema.nodes.backmatter)[0];
|
|
422
|
+
const sectionPos = backmatter.pos + 1;
|
|
423
|
+
tr.insert(sectionPos, section);
|
|
424
|
+
let footnotePos = 0;
|
|
425
|
+
section.descendants((n, pos) => {
|
|
426
|
+
if ((0, transform_1.isFootnoteNode)(n)) {
|
|
427
|
+
footnotePos = pos;
|
|
428
|
+
n.descendants((childNode, childPos) => {
|
|
429
|
+
if ((0, transform_1.isParagraphNode)(childNode)) {
|
|
430
|
+
footnotePos += childPos;
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
});
|
|
435
|
+
selectionPos = sectionPos + footnotePos;
|
|
422
436
|
}
|
|
423
437
|
else {
|
|
424
|
-
const
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
const
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
const footnote = !hasUnusedFootnotes && (0, footnotes_1.createFootnote)();
|
|
439
|
-
const node = transform_1.schema.nodes.inline_footnote.create({
|
|
440
|
-
rids: footnote ? [footnote.attrs.id] : [],
|
|
441
|
-
});
|
|
442
|
-
tr.insert(pos, node);
|
|
443
|
-
if (footnote) {
|
|
444
|
-
let element;
|
|
445
|
-
if (fn) {
|
|
446
|
-
element = [fn.element[0], tr.mapping.map(fn.element[1])];
|
|
438
|
+
const footnoteElement = (0, prosemirror_utils_1.findChildrenByType)(footnotesSection.node, transform_1.schema.nodes.footnotes_element).pop();
|
|
439
|
+
if (footnoteElement) {
|
|
440
|
+
if ((0, track_changes_utils_1.isDeleted)(footnoteElement.node)) {
|
|
441
|
+
const footnoteElementPos = footnotesSection.pos + footnoteElement.pos + 1;
|
|
442
|
+
(0, exports.undoFootnoteDelete)(tr, footnoteElement, footnoteElementPos);
|
|
443
|
+
const updatedAttrs = Object.assign(Object.assign({}, footnoteElement.node.attrs), { dataTracked: null });
|
|
444
|
+
tr.setNodeMarkup(footnoteElementPos, undefined, updatedAttrs, footnoteElement.node.marks);
|
|
445
|
+
}
|
|
446
|
+
const pos = footnotesSection.pos +
|
|
447
|
+
footnoteElement.pos +
|
|
448
|
+
footnoteElement.node.nodeSize -
|
|
449
|
+
1;
|
|
450
|
+
tr.insert(pos, footnote);
|
|
451
|
+
selectionPos = pos + 2;
|
|
447
452
|
}
|
|
448
453
|
else {
|
|
449
|
-
|
|
454
|
+
const footnoteElement = transform_1.schema.nodes.footnotes_element.create({}, footnote);
|
|
455
|
+
const pos = footnotesSection.pos + footnotesSection.node.nodeSize - 1;
|
|
456
|
+
tr.insert(pos, footnoteElement);
|
|
457
|
+
selectionPos = pos + 2;
|
|
450
458
|
}
|
|
451
|
-
if ((0, track_changes_utils_1.isDeleted)(element[0])) {
|
|
452
|
-
reinstateNode(tr, element[0], element[1]);
|
|
453
|
-
}
|
|
454
|
-
const fnPos = element[1] + element[0].nodeSize - 1;
|
|
455
|
-
tr.insert(fnPos, footnote);
|
|
456
|
-
const selection = prosemirror_state_1.TextSelection.create(tr.doc, fnPos + 2);
|
|
457
|
-
tr.setSelection(selection).scrollIntoView();
|
|
458
459
|
}
|
|
459
|
-
|
|
460
|
-
const selection = prosemirror_state_1.
|
|
460
|
+
if (selectionPos) {
|
|
461
|
+
const selection = prosemirror_state_1.TextSelection.near(tr.doc.resolve(selectionPos));
|
|
461
462
|
tr.setSelection(selection).scrollIntoView();
|
|
462
463
|
}
|
|
464
|
+
return tr;
|
|
465
|
+
};
|
|
466
|
+
exports.insertFootnote = insertFootnote;
|
|
467
|
+
const insertInlineFootnote = (kind) => (state, dispatch) => {
|
|
468
|
+
const fnState = footnotes_2.footnotesKey.getState(state);
|
|
469
|
+
const hasUnusedNodes = fnState && fnState.unusedFootnotes.size > 0;
|
|
470
|
+
const footnote = !hasUnusedNodes
|
|
471
|
+
? (0, exports.createFootnote)(state, kind)
|
|
472
|
+
: null;
|
|
473
|
+
const insertedAt = state.selection.to;
|
|
474
|
+
let tr = state.tr;
|
|
475
|
+
const node = state.schema.nodes.inline_footnote.create({
|
|
476
|
+
rids: footnote ? [footnote.attrs.id] : [],
|
|
477
|
+
});
|
|
478
|
+
tr.insert(insertedAt, node);
|
|
479
|
+
if (footnote) {
|
|
480
|
+
tr = (0, exports.insertFootnote)(state, tr, footnote);
|
|
481
|
+
}
|
|
463
482
|
if (dispatch) {
|
|
464
483
|
dispatch(tr);
|
|
465
484
|
}
|
|
466
485
|
return true;
|
|
467
486
|
};
|
|
468
487
|
exports.insertInlineFootnote = insertInlineFootnote;
|
|
469
|
-
const reinstateNode = (tr, node, pos) => {
|
|
470
|
-
const attrs = Object.assign(Object.assign({}, node.attrs), { dataTracked: null });
|
|
471
|
-
tr.setNodeMarkup(pos, null, attrs);
|
|
472
|
-
};
|
|
473
488
|
const insertGraphicalAbstract = (state, dispatch, view) => {
|
|
474
489
|
if ((0, utils_1.getChildOfType)(state.doc, transform_1.schema.nodes.graphical_abstract_section, true)) {
|
|
475
490
|
return false;
|
|
@@ -1004,6 +1019,104 @@ const addInlineComment = (state, dispatch) => {
|
|
|
1004
1019
|
return false;
|
|
1005
1020
|
};
|
|
1006
1021
|
exports.addInlineComment = addInlineComment;
|
|
1022
|
+
const insertTableFootnote = (tableElementNode, position, view, inlineFootnote) => {
|
|
1023
|
+
const { state, dispatch } = view;
|
|
1024
|
+
const tr = state.tr;
|
|
1025
|
+
const footnote = transform_1.schema.nodes.footnote.createAndFill({
|
|
1026
|
+
id: (0, transform_1.generateNodeID)(transform_1.schema.nodes.footnote),
|
|
1027
|
+
kind: 'footnote',
|
|
1028
|
+
});
|
|
1029
|
+
const insertedAt = state.selection.to;
|
|
1030
|
+
let footnoteIndex;
|
|
1031
|
+
if (inlineFootnote) {
|
|
1032
|
+
const contents = inlineFootnote.node.attrs.contents.split(',').map(Number);
|
|
1033
|
+
footnoteIndex = Math.max(...contents) + 1;
|
|
1034
|
+
tr.setNodeMarkup(inlineFootnote.pos, undefined, {
|
|
1035
|
+
rids: [...inlineFootnote.node.attrs.rids, footnote.attrs.id],
|
|
1036
|
+
contents: inlineFootnote.node.attrs.contents + ',' + footnoteIndex,
|
|
1037
|
+
});
|
|
1038
|
+
}
|
|
1039
|
+
else {
|
|
1040
|
+
const inlineFootnotes = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.inline_footnote);
|
|
1041
|
+
footnoteIndex =
|
|
1042
|
+
inlineFootnotes.filter(({ pos }) => position + pos <= insertedAt).length +
|
|
1043
|
+
1;
|
|
1044
|
+
const inlineFootnoteNode = state.schema.nodes.inline_footnote.create({
|
|
1045
|
+
rids: [footnote.attrs.id],
|
|
1046
|
+
contents: footnoteIndex === -1 ? inlineFootnotes.length : footnoteIndex,
|
|
1047
|
+
});
|
|
1048
|
+
tr.insert(insertedAt, inlineFootnoteNode);
|
|
1049
|
+
}
|
|
1050
|
+
let insertionPos = position;
|
|
1051
|
+
const footnotesElement = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.footnotes_element).pop();
|
|
1052
|
+
if (footnotesElement) {
|
|
1053
|
+
if ((0, track_changes_utils_1.isDeleted)(footnotesElement.node)) {
|
|
1054
|
+
const footnotesElementPos = tr.mapping.map(position + footnotesElement.pos + 1);
|
|
1055
|
+
(0, exports.undoFootnoteDelete)(tr, footnotesElement, footnotesElementPos);
|
|
1056
|
+
}
|
|
1057
|
+
const footnotePos = (0, footnotes_1.getNewFootnotePos)(footnotesElement, footnoteIndex);
|
|
1058
|
+
insertionPos = tr.mapping.map(position + footnotePos);
|
|
1059
|
+
tr.insert(insertionPos, footnote);
|
|
1060
|
+
}
|
|
1061
|
+
else {
|
|
1062
|
+
const footnoteElement = state.schema.nodes.footnotes_element.create({}, footnote);
|
|
1063
|
+
const tableElementFooter = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.table_element_footer)[0];
|
|
1064
|
+
if (tableElementFooter) {
|
|
1065
|
+
if ((0, track_changes_utils_1.isDeleted)(tableElementFooter.node)) {
|
|
1066
|
+
const tableElementFooterPos = tr.mapping.map(position + tableElementFooter.pos + 1);
|
|
1067
|
+
(0, exports.undoFootnoteDelete)(tr, tableElementFooter, tableElementFooterPos);
|
|
1068
|
+
}
|
|
1069
|
+
const pos = tableElementFooter.pos;
|
|
1070
|
+
insertionPos = position + pos + tableElementFooter.node.nodeSize;
|
|
1071
|
+
tr.insert(tr.mapping.map(insertionPos), footnoteElement);
|
|
1072
|
+
}
|
|
1073
|
+
else {
|
|
1074
|
+
const tableElementFooter = transform_1.schema.nodes.table_element_footer.create({
|
|
1075
|
+
id: (0, transform_1.generateNodeID)(transform_1.schema.nodes.table_element_footer),
|
|
1076
|
+
}, [footnoteElement]);
|
|
1077
|
+
const tableColGroup = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.table_colgroup)[0];
|
|
1078
|
+
const table = (0, prosemirror_utils_1.findChildrenByType)(tableElementNode, transform_1.schema.nodes.table)[0];
|
|
1079
|
+
if (tableColGroup) {
|
|
1080
|
+
insertionPos =
|
|
1081
|
+
position + tableColGroup.pos + tableColGroup.node.nodeSize;
|
|
1082
|
+
tr.insert(tr.mapping.map(insertionPos), tableElementFooter);
|
|
1083
|
+
}
|
|
1084
|
+
else {
|
|
1085
|
+
insertionPos = position + table.pos + table.node.nodeSize;
|
|
1086
|
+
tr.insert(tr.mapping.map(insertionPos), tableElementFooter);
|
|
1087
|
+
}
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
dispatch(tr);
|
|
1091
|
+
const textSelection = prosemirror_state_1.TextSelection.near(view.state.tr.doc.resolve(insertionPos + 1));
|
|
1092
|
+
view.focus();
|
|
1093
|
+
dispatch(view.state.tr.setSelection(textSelection).scrollIntoView());
|
|
1094
|
+
};
|
|
1095
|
+
exports.insertTableFootnote = insertTableFootnote;
|
|
1096
|
+
const insertBoxElement = (state, dispatch) => {
|
|
1097
|
+
const selection = state.selection;
|
|
1098
|
+
const isBody = (0, prosemirror_utils_1.hasParentNodeOfType)(transform_1.schema.nodes.body)(selection);
|
|
1099
|
+
const isBoxText = (0, prosemirror_utils_1.hasParentNodeOfType)(transform_1.schema.nodes.box_element)(selection);
|
|
1100
|
+
if (!isBody || isBoxText) {
|
|
1101
|
+
return false;
|
|
1102
|
+
}
|
|
1103
|
+
const position = findBlockInsertPosition(state);
|
|
1104
|
+
const paragraph = transform_1.schema.nodes.paragraph.create({});
|
|
1105
|
+
const section = transform_1.schema.nodes.section.createAndFill({}, [
|
|
1106
|
+
transform_1.schema.nodes.section_title.create(),
|
|
1107
|
+
paragraph,
|
|
1108
|
+
]);
|
|
1109
|
+
const BoxElementNode = transform_1.schema.nodes.box_element.createAndFill({}, [
|
|
1110
|
+
transform_1.schema.nodes.figcaption.create({}, [transform_1.schema.nodes.caption_title.create()]),
|
|
1111
|
+
section,
|
|
1112
|
+
]);
|
|
1113
|
+
if (position && dispatch) {
|
|
1114
|
+
const tr = state.tr.insert(position, BoxElementNode);
|
|
1115
|
+
dispatch(tr);
|
|
1116
|
+
}
|
|
1117
|
+
return true;
|
|
1118
|
+
};
|
|
1119
|
+
exports.insertBoxElement = insertBoxElement;
|
|
1007
1120
|
const addRows = (direction) => (state, dispatch) => {
|
|
1008
1121
|
if (dispatch) {
|
|
1009
1122
|
const { tr } = state;
|
|
@@ -26,7 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.DeleteFootnoteDialog = void 0;
|
|
27
27
|
const style_guide_1 = require("@manuscripts/style-guide");
|
|
28
28
|
const react_1 = __importStar(require("react"));
|
|
29
|
-
const DeleteFootnoteDialog = ({ handleDelete, }) => {
|
|
29
|
+
const DeleteFootnoteDialog = ({ footnoteType, footnoteMessage, handleDelete, }) => {
|
|
30
30
|
const [isOpen, setOpen] = (0, react_1.useState)(true);
|
|
31
31
|
return (react_1.default.createElement(style_guide_1.Dialog, { className: "delete-footnote-dialog", isOpen: isOpen, actions: {
|
|
32
32
|
primary: {
|
|
@@ -40,6 +40,6 @@ const DeleteFootnoteDialog = ({ handleDelete, }) => {
|
|
|
40
40
|
action: () => setOpen(false),
|
|
41
41
|
title: 'Cancel',
|
|
42
42
|
},
|
|
43
|
-
}, category: style_guide_1.Category.confirmation, header: `Delete
|
|
43
|
+
}, category: style_guide_1.Category.confirmation, header: `Delete ${footnoteType}`, message: `${footnoteMessage}` }));
|
|
44
44
|
};
|
|
45
45
|
exports.DeleteFootnoteDialog = DeleteFootnoteDialog;
|
|
@@ -76,12 +76,12 @@ const AddNewFootnote = (0, styled_components_1.default)(style_guide_1.ButtonGrou
|
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
`;
|
|
79
|
-
const FootnotesSelector = ({
|
|
79
|
+
const FootnotesSelector = ({ notes, inlineFootnote, onAdd, onInsert, onCancel, addNewLabel }) => {
|
|
80
80
|
let selectedNotesMap;
|
|
81
81
|
if (inlineFootnote) {
|
|
82
82
|
const rids = inlineFootnote.attrs.rids;
|
|
83
|
-
const selectedNotes =
|
|
84
|
-
selectedNotesMap = new Map(selectedNotes.map((node) => [node.attrs.id, node]));
|
|
83
|
+
const selectedNotes = notes.filter(({ node }) => rids.includes(node.attrs.id));
|
|
84
|
+
selectedNotesMap = new Map(selectedNotes.map(({ node }) => [node.attrs.id, node]));
|
|
85
85
|
}
|
|
86
86
|
const [selections, setSelections] = (0, react_1.useState)(new Map(selectedNotesMap));
|
|
87
87
|
const toggleSelection = (item) => {
|
|
@@ -99,11 +99,11 @@ const FootnotesSelector = ({ footnotes, inlineFootnote, labels, onAdd, onInsert,
|
|
|
99
99
|
return selections.has(item.attrs.id);
|
|
100
100
|
};
|
|
101
101
|
const handleClick = () => {
|
|
102
|
-
return onInsert(
|
|
102
|
+
return onInsert(notes.filter(({ node }) => selections.has(node.attrs.id)));
|
|
103
103
|
};
|
|
104
104
|
return (react_1.default.createElement(Container, null,
|
|
105
105
|
react_1.default.createElement(NotesContainer, null,
|
|
106
|
-
react_1.default.createElement(FootnotesList, {
|
|
106
|
+
react_1.default.createElement(FootnotesList, { notes: notes, inlineFootnote: inlineFootnote, isSelected: isSelected, onSelect: toggleSelection })),
|
|
107
107
|
react_1.default.createElement(Actions, null,
|
|
108
108
|
react_1.default.createElement(AddNewFootnote, null,
|
|
109
109
|
react_1.default.createElement(style_guide_1.IconTextButton, { onClick: onAdd },
|
|
@@ -114,28 +114,29 @@ const FootnotesSelector = ({ footnotes, inlineFootnote, labels, onAdd, onInsert,
|
|
|
114
114
|
react_1.default.createElement(style_guide_1.PrimaryButton, { onClick: handleClick, disabled: selections.size === 0 && !inlineFootnote }, inlineFootnote ? 'Update' : 'Insert')))));
|
|
115
115
|
};
|
|
116
116
|
exports.FootnotesSelector = FootnotesSelector;
|
|
117
|
-
const FootnotesList = ({
|
|
118
|
-
const rids = inlineFootnote === null || inlineFootnote === void 0 ? void 0 : inlineFootnote.attrs.rids;
|
|
117
|
+
const FootnotesList = ({ notes, isSelected, onSelect, inlineFootnote }) => {
|
|
119
118
|
const selectedNotes = [];
|
|
120
119
|
const remainingNotes = [];
|
|
121
|
-
|
|
122
|
-
const isNoteSelected =
|
|
120
|
+
notes.forEach((note) => {
|
|
121
|
+
const isNoteSelected = inlineFootnote && inlineFootnote.attrs.rids.includes(note.node.attrs.id);
|
|
123
122
|
if (isNoteSelected) {
|
|
124
|
-
selectedNotes.push(
|
|
123
|
+
selectedNotes.push(note);
|
|
125
124
|
}
|
|
126
125
|
else {
|
|
127
|
-
remainingNotes.push(
|
|
126
|
+
remainingNotes.push(note);
|
|
128
127
|
}
|
|
129
128
|
});
|
|
130
129
|
return (react_1.default.createElement(NotesListContainer, null,
|
|
131
|
-
selectedNotes.map((
|
|
130
|
+
selectedNotes.map((note) => (react_1.default.createElement(FootnoteItem, { key: note.node.attrs.id, note: note, isSelected: isSelected, onSelect: onSelect }))),
|
|
132
131
|
selectedNotes.length > 0 && remainingNotes.length > 0 && react_1.default.createElement(Separator, null),
|
|
133
|
-
remainingNotes.map((
|
|
132
|
+
remainingNotes.map((note) => (react_1.default.createElement(FootnoteItem, { key: note.node.attrs.id, note: note, isSelected: isSelected, onSelect: onSelect })))));
|
|
134
133
|
};
|
|
135
|
-
const FootnoteItem = ({
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
134
|
+
const FootnoteItem = ({ note, isSelected, onSelect }) => {
|
|
135
|
+
var _a;
|
|
136
|
+
const { node, index } = note;
|
|
137
|
+
return (react_1.default.createElement(FootnoteItemContainer, { onClick: () => onSelect(node) },
|
|
138
|
+
react_1.default.createElement(StatusIcon, null, isSelected(node) ? (react_1.default.createElement(style_guide_1.AddedIcon, { "data-cy": 'plus-icon-ok' })) : (react_1.default.createElement(style_guide_1.AddIcon, { "data-cy": 'plus-icon' }))),
|
|
139
|
+
react_1.default.createElement(NoteText, null, (index ? index + '. ' : '') + ((_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.textContent))));
|
|
139
140
|
};
|
|
140
141
|
const Separator = styled_components_1.default.div `
|
|
141
142
|
height: 0;
|
|
@@ -41,6 +41,7 @@ const section_title_1 = __importDefault(require("../plugins/section_title"));
|
|
|
41
41
|
const section_category_1 = __importDefault(require("../plugins/section-category"));
|
|
42
42
|
const sections_1 = __importDefault(require("../plugins/sections"));
|
|
43
43
|
const selected_suggestion_1 = __importDefault(require("../plugins/selected-suggestion"));
|
|
44
|
+
const table_footnote_1 = __importDefault(require("../plugins/table-footnote"));
|
|
44
45
|
const tables_cursor_fix_1 = __importDefault(require("../plugins/tables-cursor-fix"));
|
|
45
46
|
const toc_1 = __importDefault(require("../plugins/toc"));
|
|
46
47
|
const rules_1 = __importDefault(require("../rules"));
|
|
@@ -72,6 +73,7 @@ exports.default = (props) => {
|
|
|
72
73
|
(0, prosemirror_tables_1.tableEditing)(),
|
|
73
74
|
(0, selected_suggestion_1.default)(),
|
|
74
75
|
(0, footnotes_1.default)(props),
|
|
76
|
+
(0, table_footnote_1.default)(),
|
|
75
77
|
(0, editor_props_1.default)(props),
|
|
76
78
|
(0, doi_1.default)(),
|
|
77
79
|
(0, section_category_1.default)(props),
|
|
@@ -31,9 +31,8 @@ const equation_editable_1 = __importDefault(require("../views/equation_editable"
|
|
|
31
31
|
const equation_element_editable_1 = __importDefault(require("../views/equation_element_editable"));
|
|
32
32
|
const figure_editable_1 = __importDefault(require("../views/figure_editable"));
|
|
33
33
|
const figure_element_editable_1 = __importDefault(require("../views/figure_element_editable"));
|
|
34
|
-
const
|
|
34
|
+
const footnote_editable_1 = __importDefault(require("../views/footnote_editable"));
|
|
35
35
|
const footnotes_element_1 = __importDefault(require("../views/footnotes_element"));
|
|
36
|
-
const general_table_footnote_1 = __importDefault(require("../views/general_table_footnote"));
|
|
37
36
|
const inline_equation_editable_1 = __importDefault(require("../views/inline_equation_editable"));
|
|
38
37
|
const inline_footnote_editable_1 = __importDefault(require("../views/inline_footnote_editable"));
|
|
39
38
|
const keyword_1 = __importDefault(require("../views/keyword"));
|
|
@@ -50,7 +49,7 @@ const section_label_1 = __importDefault(require("../views/section_label"));
|
|
|
50
49
|
const section_title_editable_1 = __importDefault(require("../views/section_title_editable"));
|
|
51
50
|
const table_cell_1 = __importDefault(require("../views/table_cell"));
|
|
52
51
|
const table_element_editable_1 = __importDefault(require("../views/table_element_editable"));
|
|
53
|
-
const
|
|
52
|
+
const table_element_footer_editable_1 = __importDefault(require("../views/table_element_footer_editable"));
|
|
54
53
|
const title_editable_1 = __importDefault(require("../views/title_editable"));
|
|
55
54
|
const toc_element_editable_1 = __importDefault(require("../views/toc_element_editable"));
|
|
56
55
|
exports.default = (props, dispatch) => {
|
|
@@ -67,9 +66,8 @@ exports.default = (props, dispatch) => {
|
|
|
67
66
|
equation_element: (0, equation_element_editable_1.default)(props),
|
|
68
67
|
figure: (0, figure_editable_1.default)(props, dispatch),
|
|
69
68
|
figure_element: (0, figure_element_editable_1.default)(props, dispatch),
|
|
70
|
-
footnote: (0,
|
|
69
|
+
footnote: (0, footnote_editable_1.default)(props),
|
|
71
70
|
footnotes_element: (0, footnotes_element_1.default)(props),
|
|
72
|
-
general_table_footnote: (0, general_table_footnote_1.default)(props, dispatch),
|
|
73
71
|
inline_equation: (0, inline_equation_editable_1.default)(props),
|
|
74
72
|
inline_footnote: (0, inline_footnote_editable_1.default)(props, dispatch),
|
|
75
73
|
keyword: (0, keyword_1.default)(props, dispatch),
|
|
@@ -87,7 +85,7 @@ exports.default = (props, dispatch) => {
|
|
|
87
85
|
table_element: (0, table_element_editable_1.default)(props),
|
|
88
86
|
table_cell: (0, table_cell_1.default)(props),
|
|
89
87
|
table_header: (0, table_cell_1.default)(props),
|
|
90
|
-
table_element_footer: (0,
|
|
88
|
+
table_element_footer: (0, table_element_footer_editable_1.default)(props),
|
|
91
89
|
toc_element: (0, toc_element_editable_1.default)(props),
|
|
92
90
|
comments: (0, empty_1.default)('comments'),
|
|
93
91
|
supplements: (0, empty_1.default)('supplements'),
|
package/dist/cjs/index.js
CHANGED
|
@@ -47,7 +47,6 @@ Object.defineProperty(exports, "PopperManager", { enumerable: true, get: functio
|
|
|
47
47
|
__exportStar(require("./toolbar"), exports);
|
|
48
48
|
__exportStar(require("./lib/comments"), exports);
|
|
49
49
|
__exportStar(require("./lib/files"), exports);
|
|
50
|
-
__exportStar(require("./lib/footnotes"), exports);
|
|
51
50
|
__exportStar(require("./lib/doc"), exports);
|
|
52
51
|
__exportStar(require("./plugins/comments"), exports);
|
|
53
52
|
var selected_suggestion_1 = require("./plugins/selected-suggestion");
|