@manuscripts/transform 1.5.8-LEAN-3030 → 1.5.8-LEAN-3030-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.
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.modelsEqual = exports.groupBy = exports.getTrimmedTextContent = exports.findParentNodeClosestToPos = exports.isInAbstractsSection = exports.isInBibliographySection = exports.isInGraphicalAbstractSection = exports.findNodePositions = exports.iterateChildren = void 0;
18
+ exports.modelsEqual = exports.getTrimmedTextContent = exports.findParentNodeClosestToPos = exports.isInBibliographySection = exports.isInGraphicalAbstractSection = exports.findNodePositions = exports.iterateChildren = void 0;
19
19
  const bibliography_section_1 = require("../schema/nodes/bibliography_section");
20
20
  const graphical_abstract_section_1 = require("../schema/nodes/graphical_abstract_section");
21
21
  function* iterateChildren(node, recurse = false) {
@@ -61,17 +61,6 @@ const isInBibliographySection = ($pos) => {
61
61
  return false;
62
62
  };
63
63
  exports.isInBibliographySection = isInBibliographySection;
64
- const isAbstractsSectionNode = (node) => node.attrs.category === 'MPSectionCategory:abstracts';
65
- const isInAbstractsSection = ($pos) => {
66
- for (let i = $pos.depth; i > 0; i--) {
67
- const node = $pos.node(i);
68
- if (isAbstractsSectionNode(node)) {
69
- return true;
70
- }
71
- }
72
- return false;
73
- };
74
- exports.isInAbstractsSection = isInAbstractsSection;
75
64
  const findParentNodeClosestToPos = ($pos, predicate) => {
76
65
  for (let i = $pos.depth; i > 0; i--) {
77
66
  const node = $pos.node(i);
@@ -94,15 +83,6 @@ const getTrimmedTextContent = (node, querySelector) => {
94
83
  return (_b = (_a = node.querySelector(querySelector)) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim();
95
84
  };
96
85
  exports.getTrimmedTextContent = getTrimmedTextContent;
97
- const groupBy = (list, getKey) => list.reduce((previous, currentItem) => {
98
- const group = getKey(currentItem);
99
- if (!previous[group]) {
100
- previous[group] = [];
101
- }
102
- previous[group].push(currentItem);
103
- return previous;
104
- }, {});
105
- exports.groupBy = groupBy;
106
86
  function modelsEqual(model, model2) {
107
87
  for (const v in model) {
108
88
  for (const v2 in model2) {
@@ -34,7 +34,7 @@ exports.crossReference = {
34
34
  var _a;
35
35
  const dom = p;
36
36
  return {
37
- rid: ((_a = dom.getAttribute('data-reference-id')) === null || _a === void 0 ? void 0 : _a.split(/\s+/)) || [],
37
+ rids: ((_a = dom.getAttribute('data-reference-id')) === null || _a === void 0 ? void 0 : _a.split(/\s+/)) || [],
38
38
  label: dom.textContent,
39
39
  };
40
40
  },
@@ -34,11 +34,10 @@ const json_schema_1 = require("@manuscripts/json-schema");
34
34
  const debug_1 = __importDefault(require("debug"));
35
35
  const prosemirror_model_1 = require("prosemirror-model");
36
36
  const errors_1 = require("../errors");
37
- const utils_1 = require("../lib/utils");
37
+ const section_group_type_1 = require("../lib/section-group-type");
38
38
  const schema_1 = require("../schema");
39
39
  const builders_1 = require("./builders");
40
40
  const highlight_markers_1 = require("./highlight-markers");
41
- const id_1 = require("./id");
42
41
  const object_types_1 = require("./object-types");
43
42
  const section_category_1 = require("./section-category");
44
43
  const timestamp_1 = require("./timestamp");
@@ -103,45 +102,29 @@ class Decoder {
103
102
  ...this.comments.values(),
104
103
  ]);
105
104
  }
106
- createRootSectionNodes() {
107
- let rootSections = getSections(this.modelMap)
108
- .filter((section) => !section.path || section.path.length <= 1)
109
- .filter((section) => section.category !== 'MPSectionCategory:contributors' &&
110
- section.category !== 'MPSectionCategory:affiliations' &&
111
- section.category !== 'MPSectionCategory:keywords');
112
- rootSections = this.addGeneratedLabels(rootSections);
113
- const sectionGroups = (0, utils_1.groupBy)(rootSections, (sec) => {
114
- var _a;
115
- return (0, section_category_1.chooseCoreSectionBySection)((_a = sec.category) !== null && _a !== void 0 ? _a : '');
116
- });
117
- this.ensureCoreSectionsExist(sectionGroups);
118
- const absSectionNode = sectionGroups['MPSectionCategory:abstracts'].map((e) => this.decode(e));
119
- const bodySectionNodes = sectionGroups['MPSectionCategory:body'].map((e) => this.decode(e));
120
- const backmatterSectionNodes = sectionGroups['MPSectionCategory:backmatter'].map(e => this.decode(e));
121
- const abstractCoreSectionNodes = this.createAndFill(schema_1.schema.nodes.abstracts, absSectionNode);
122
- const bodyCoreSectionNodes = this.createAndFill(schema_1.schema.nodes.body, bodySectionNodes);
123
- const backmatterCoreSectionNodes = this.createAndFill(schema_1.schema.nodes.backmatter, backmatterSectionNodes);
124
- return {
125
- abstracts: abstractCoreSectionNodes,
126
- body: bodyCoreSectionNodes,
127
- backmatter: backmatterCoreSectionNodes,
105
+ createContentSections() {
106
+ let sections = getSections(this.modelMap);
107
+ sections = this.addGeneratedLabels(sections);
108
+ const groups = {
109
+ abstracts: [],
110
+ body: [],
111
+ backmatter: [],
128
112
  };
129
- }
130
- ensureCoreSectionsExist(coreSections) {
131
- if (!coreSections['MPSectionCategory:abstracts']) {
132
- coreSections['MPSectionCategory:abstracts'] = [];
133
- }
134
- if (!coreSections['MPSectionCategory:body']) {
135
- coreSections['MPSectionCategory:body'] = [];
136
- }
137
- if (!coreSections['MPSectionCategory:backmatter']) {
138
- coreSections['MPSectionCategory:backmatter'] = [];
113
+ for (const section of sections) {
114
+ const category = section.category;
115
+ const group = category
116
+ ? (0, section_category_1.getSectionGroupType)(category)
117
+ : section_group_type_1.bodyType;
118
+ groups[group._id].push(this.decode(section));
139
119
  }
140
- }
141
- createAndFill(nodeType, content) {
142
- return nodeType.createAndFill({
143
- id: (0, id_1.generateNodeID)(nodeType),
144
- }, content);
120
+ const abstracts = schema_1.schema.nodes.abstracts.createAndFill({}, groups[section_group_type_1.abstractsType._id]);
121
+ const body = schema_1.schema.nodes.body.createAndFill({}, groups[section_group_type_1.bodyType._id]);
122
+ const backmatter = schema_1.schema.nodes.backmatter.createAndFill({}, groups[section_group_type_1.backmatterType._id]);
123
+ return {
124
+ abstracts,
125
+ body,
126
+ backmatter,
127
+ };
145
128
  }
146
129
  createCommentNodes(model) {
147
130
  const comments = [];
@@ -514,7 +497,7 @@ class Decoder {
514
497
  }
515
498
  }
516
499
  }
517
- const elementNodes = elements.map(e => this.decode(e));
500
+ const elementNodes = elements.map((e) => this.decode(e));
518
501
  const sectionTitle = 'section_title';
519
502
  const sectionTitleNode = model.title
520
503
  ? this.parseContents(model.title, 'h1', this.getComments(model), {
@@ -661,7 +644,7 @@ class Decoder {
661
644
  const contributors = this.createContributorsNode();
662
645
  const affiliations = this.createAffiliationsNode();
663
646
  const keywords = this.createKeywordsNode();
664
- const { abstracts, body, backmatter } = this.createRootSectionNodes();
647
+ const { abstracts, body, backmatter } = this.createContentSections();
665
648
  const comments = this.createCommentsNode();
666
649
  const contents = [
667
650
  title,
@@ -30,6 +30,7 @@ const labelProperties = new Map([
30
30
  [schema_1.schema.nodes.equation_element, 'equationElementLabel'],
31
31
  [schema_1.schema.nodes.listing_element, 'listingElementLabel'],
32
32
  ]);
33
+ const excludedTypes = [schema_1.schema.nodes.graphical_abstract_section];
33
34
  const chooseLabel = (nodeType, manuscript) => {
34
35
  const labelProperty = labelProperties.get(nodeType);
35
36
  if (labelProperty) {
@@ -54,25 +55,10 @@ const buildTargets = (fragment, manuscript) => {
54
55
  return `${counter.label} ${counter.index}`;
55
56
  };
56
57
  const targets = new Map();
57
- const figures = [];
58
- fragment.forEach((node) => {
59
- if (node.attrs.category === 'MPSectionCategory:abstracts') {
60
- node.forEach((child) => {
61
- if (child.type === node.type.schema.nodes.graphical_abstract_section) {
62
- child.forEach((item) => {
63
- if (item.type === node.type.schema.nodes.figure_element) {
64
- figures.push(item.attrs.id);
65
- }
66
- });
67
- }
68
- });
69
- }
70
- });
71
- fragment.descendants((node) => {
58
+ fragment.descendants((node, pos, parent) => {
72
59
  var _a;
73
60
  if (node.type.name in counters) {
74
- const isInGraphicalAbstract = figures.indexOf(node.attrs.id) > -1;
75
- if (isInGraphicalAbstract) {
61
+ if (parent && excludedTypes.includes(parent.type)) {
76
62
  return;
77
63
  }
78
64
  const label = buildLabel(node.type);
@@ -15,8 +15,9 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.chooseSectionCategoryFromTitle = exports.chooseSectionCategory = exports.chooseSectionCategoryByType = exports.chooseCoreSectionBySection = exports.chooseSecType = exports.chooseJatsFnType = exports.buildSectionCategory = exports.guessSectionCategory = exports.chooseSectionLableName = exports.chooseSectionNodeType = exports.isAnySectionNode = void 0;
18
+ exports.chooseSectionCategoryFromTitle = exports.chooseSectionCategory = exports.chooseSectionCategoryByType = exports.getSectionGroupType = exports.chooseSecType = exports.chooseJatsFnType = exports.buildSectionCategory = exports.guessSectionCategory = exports.chooseSectionLableName = exports.chooseSectionNodeType = exports.isAnySectionNode = void 0;
19
19
  const json_schema_1 = require("@manuscripts/json-schema");
20
+ const section_group_type_1 = require("../lib/section-group-type");
20
21
  const schema_1 = require("../schema");
21
22
  const sectionNodeTypes = [
22
23
  schema_1.schema.nodes.bibliography_section,
@@ -37,10 +38,6 @@ const chooseSectionNodeType = (category) => {
37
38
  return schema_1.schema.nodes.footnotes_section;
38
39
  case 'MPSectionCategory:keywords':
39
40
  return schema_1.schema.nodes.keywords;
40
- case 'MPSectionCategory:affiliations':
41
- return schema_1.schema.nodes.affiliations;
42
- case 'MPSectionCategory:contributors':
43
- return schema_1.schema.nodes.contributors;
44
41
  case 'MPSectionCategory:toc':
45
42
  return schema_1.schema.nodes.toc_section;
46
43
  default:
@@ -87,10 +84,6 @@ const buildSectionCategory = (node) => {
87
84
  return 'MPSectionCategory:toc';
88
85
  case schema_1.schema.nodes.graphical_abstract_section:
89
86
  return 'MPSectionCategory:abstract-graphical';
90
- case schema_1.schema.nodes.affiliations:
91
- return 'MPSectionCategory:affiliations';
92
- case schema_1.schema.nodes.contributors:
93
- return 'MPSectionCategory:contributors';
94
87
  default:
95
88
  return node.attrs.category || undefined;
96
89
  }
@@ -119,33 +112,32 @@ const chooseSecType = (sectionCategory) => {
119
112
  }
120
113
  };
121
114
  exports.chooseSecType = chooseSecType;
122
- const chooseCoreSectionBySection = (section) => {
123
- switch (section) {
115
+ const getSectionGroupType = (category) => {
116
+ switch (category) {
124
117
  case 'MPSectionCategory:abstract':
125
- case 'MPSectionCategory:abstract-teaser':
126
118
  case 'MPSectionCategory:abstract-graphical':
127
- return 'MPSectionCategory:abstracts';
128
- case 'MPSectionCategory:acknowledgement':
129
- case 'MPSectionCategory:availability':
130
- case 'MPSectionCategory:conclusions':
131
- case 'MPSectionCategory:bibliography':
132
- case 'MPSectionCategory:discussion':
133
- case 'MPSectionCategory:endnotes':
134
- case 'MPSectionCategory:appendices':
119
+ return section_group_type_1.abstractsType;
135
120
  case 'MPSectionCategory:competing-interests':
136
121
  case 'MPSectionCategory:con':
137
- case 'MPSectionCategory:deceased':
138
122
  case 'MPSectionCategory:ethics-statement':
139
123
  case 'MPSectionCategory:financial-disclosure':
140
124
  case 'MPSectionCategory:supplementary-material':
141
125
  case 'MPSectionCategory:supported-by':
142
- case 'MPSectionCategory:abbreviations':
143
- case 'MPSectionCategory:results':
144
- return 'MPSectionCategory:backmatter';
126
+ case 'MPSectionCategory:availability':
127
+ case 'MPSectionCategory:acknowledgement':
128
+ case 'MPSectionCategory:endnotes':
129
+ case 'MPSectionCategory:bibliography':
130
+ case 'MPSectionCategory:appendices':
131
+ case 'MPSectionCategory:deceased':
132
+ case 'MPSectionCategory:equal':
133
+ case 'MPSectionCategory:present-address':
134
+ case 'MPSectionCategory:presented-at':
135
+ case 'MPSectionCategory:previously-at':
136
+ return section_group_type_1.backmatterType;
145
137
  }
146
- return 'MPSectionCategory:body';
138
+ return section_group_type_1.bodyType;
147
139
  };
148
- exports.chooseCoreSectionBySection = chooseCoreSectionBySection;
140
+ exports.getSectionGroupType = getSectionGroupType;
149
141
  const chooseSectionCategoryByType = (secType) => {
150
142
  switch (secType) {
151
143
  case 'abstract':
@@ -205,16 +197,6 @@ const chooseSectionCategoryByType = (secType) => {
205
197
  return 'MPSectionCategory:supported-by';
206
198
  case 'ethics-statement':
207
199
  return 'MPSectionCategory:ethics-statement';
208
- case 'body':
209
- return 'MPSectionCategory:body';
210
- case 'backmatter':
211
- return 'MPSectionCategory:backmatter';
212
- case 'abstracts':
213
- return 'MPSectionCategory:abstracts';
214
- case 'affiliations':
215
- return 'MPSectionCategory:affiliations';
216
- case 'contributors':
217
- return 'MPSectionCategory:contributors';
218
200
  default:
219
201
  return undefined;
220
202
  }
@@ -54,16 +54,6 @@ export const isInBibliographySection = ($pos) => {
54
54
  }
55
55
  return false;
56
56
  };
57
- const isAbstractsSectionNode = (node) => node.attrs.category === 'MPSectionCategory:abstracts';
58
- export const isInAbstractsSection = ($pos) => {
59
- for (let i = $pos.depth; i > 0; i--) {
60
- const node = $pos.node(i);
61
- if (isAbstractsSectionNode(node)) {
62
- return true;
63
- }
64
- }
65
- return false;
66
- };
67
57
  export const findParentNodeClosestToPos = ($pos, predicate) => {
68
58
  for (let i = $pos.depth; i > 0; i--) {
69
59
  const node = $pos.node(i);
@@ -84,14 +74,6 @@ export const getTrimmedTextContent = (node, querySelector) => {
84
74
  }
85
75
  return (_b = (_a = node.querySelector(querySelector)) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim();
86
76
  };
87
- export const groupBy = (list, getKey) => list.reduce((previous, currentItem) => {
88
- const group = getKey(currentItem);
89
- if (!previous[group]) {
90
- previous[group] = [];
91
- }
92
- previous[group].push(currentItem);
93
- return previous;
94
- }, {});
95
77
  export function modelsEqual(model, model2) {
96
78
  for (const v in model) {
97
79
  for (const v2 in model2) {
@@ -31,7 +31,7 @@ export const crossReference = {
31
31
  var _a;
32
32
  const dom = p;
33
33
  return {
34
- rid: ((_a = dom.getAttribute('data-reference-id')) === null || _a === void 0 ? void 0 : _a.split(/\s+/)) || [],
34
+ rids: ((_a = dom.getAttribute('data-reference-id')) === null || _a === void 0 ? void 0 : _a.split(/\s+/)) || [],
35
35
  label: dom.textContent,
36
36
  };
37
37
  },
@@ -28,13 +28,12 @@ import { ObjectTypes, } from '@manuscripts/json-schema';
28
28
  import debug from 'debug';
29
29
  import { DOMParser } from 'prosemirror-model';
30
30
  import { MissingElement } from '../errors';
31
- import { groupBy } from '../lib/utils';
31
+ import { abstractsType, backmatterType, bodyType, } from '../lib/section-group-type';
32
32
  import { schema, } from '../schema';
33
33
  import { buildTitles } from './builders';
34
34
  import { insertHighlightMarkers } from './highlight-markers';
35
- import { generateNodeID } from './id';
36
35
  import { ExtraObjectTypes, hasObjectType, isCommentAnnotation, isManuscript, } from './object-types';
37
- import { chooseCoreSectionBySection, chooseSectionLableName, chooseSectionNodeType, chooseSecType, guessSectionCategory, } from './section-category';
36
+ import { chooseSectionLableName, chooseSectionNodeType, chooseSecType, getSectionGroupType, guessSectionCategory, } from './section-category';
38
37
  import { timestamp } from './timestamp';
39
38
  const warn = debug('manuscripts-transform');
40
39
  const parser = DOMParser.fromSchema(schema);
@@ -94,45 +93,29 @@ export class Decoder {
94
93
  ...this.comments.values(),
95
94
  ]);
96
95
  }
97
- createRootSectionNodes() {
98
- let rootSections = getSections(this.modelMap)
99
- .filter((section) => !section.path || section.path.length <= 1)
100
- .filter((section) => section.category !== 'MPSectionCategory:contributors' &&
101
- section.category !== 'MPSectionCategory:affiliations' &&
102
- section.category !== 'MPSectionCategory:keywords');
103
- rootSections = this.addGeneratedLabels(rootSections);
104
- const sectionGroups = groupBy(rootSections, (sec) => {
105
- var _a;
106
- return chooseCoreSectionBySection((_a = sec.category) !== null && _a !== void 0 ? _a : '');
107
- });
108
- this.ensureCoreSectionsExist(sectionGroups);
109
- const absSectionNode = sectionGroups['MPSectionCategory:abstracts'].map((e) => this.decode(e));
110
- const bodySectionNodes = sectionGroups['MPSectionCategory:body'].map((e) => this.decode(e));
111
- const backmatterSectionNodes = sectionGroups['MPSectionCategory:backmatter'].map(e => this.decode(e));
112
- const abstractCoreSectionNodes = this.createAndFill(schema.nodes.abstracts, absSectionNode);
113
- const bodyCoreSectionNodes = this.createAndFill(schema.nodes.body, bodySectionNodes);
114
- const backmatterCoreSectionNodes = this.createAndFill(schema.nodes.backmatter, backmatterSectionNodes);
115
- return {
116
- abstracts: abstractCoreSectionNodes,
117
- body: bodyCoreSectionNodes,
118
- backmatter: backmatterCoreSectionNodes,
96
+ createContentSections() {
97
+ let sections = getSections(this.modelMap);
98
+ sections = this.addGeneratedLabels(sections);
99
+ const groups = {
100
+ abstracts: [],
101
+ body: [],
102
+ backmatter: [],
119
103
  };
120
- }
121
- ensureCoreSectionsExist(coreSections) {
122
- if (!coreSections['MPSectionCategory:abstracts']) {
123
- coreSections['MPSectionCategory:abstracts'] = [];
124
- }
125
- if (!coreSections['MPSectionCategory:body']) {
126
- coreSections['MPSectionCategory:body'] = [];
127
- }
128
- if (!coreSections['MPSectionCategory:backmatter']) {
129
- coreSections['MPSectionCategory:backmatter'] = [];
104
+ for (const section of sections) {
105
+ const category = section.category;
106
+ const group = category
107
+ ? getSectionGroupType(category)
108
+ : bodyType;
109
+ groups[group._id].push(this.decode(section));
130
110
  }
131
- }
132
- createAndFill(nodeType, content) {
133
- return nodeType.createAndFill({
134
- id: generateNodeID(nodeType),
135
- }, content);
111
+ const abstracts = schema.nodes.abstracts.createAndFill({}, groups[abstractsType._id]);
112
+ const body = schema.nodes.body.createAndFill({}, groups[bodyType._id]);
113
+ const backmatter = schema.nodes.backmatter.createAndFill({}, groups[backmatterType._id]);
114
+ return {
115
+ abstracts,
116
+ body,
117
+ backmatter,
118
+ };
136
119
  }
137
120
  createCommentNodes(model) {
138
121
  const comments = [];
@@ -505,7 +488,7 @@ export class Decoder {
505
488
  }
506
489
  }
507
490
  }
508
- const elementNodes = elements.map(e => this.decode(e));
491
+ const elementNodes = elements.map((e) => this.decode(e));
509
492
  const sectionTitle = 'section_title';
510
493
  const sectionTitleNode = model.title
511
494
  ? this.parseContents(model.title, 'h1', this.getComments(model), {
@@ -652,7 +635,7 @@ export class Decoder {
652
635
  const contributors = this.createContributorsNode();
653
636
  const affiliations = this.createAffiliationsNode();
654
637
  const keywords = this.createKeywordsNode();
655
- const { abstracts, body, backmatter } = this.createRootSectionNodes();
638
+ const { abstracts, body, backmatter } = this.createContentSections();
656
639
  const comments = this.createCommentsNode();
657
640
  const contents = [
658
641
  title,
@@ -27,6 +27,7 @@ const labelProperties = new Map([
27
27
  [schema.nodes.equation_element, 'equationElementLabel'],
28
28
  [schema.nodes.listing_element, 'listingElementLabel'],
29
29
  ]);
30
+ const excludedTypes = [schema.nodes.graphical_abstract_section];
30
31
  const chooseLabel = (nodeType, manuscript) => {
31
32
  const labelProperty = labelProperties.get(nodeType);
32
33
  if (labelProperty) {
@@ -51,25 +52,10 @@ export const buildTargets = (fragment, manuscript) => {
51
52
  return `${counter.label} ${counter.index}`;
52
53
  };
53
54
  const targets = new Map();
54
- const figures = [];
55
- fragment.forEach((node) => {
56
- if (node.attrs.category === 'MPSectionCategory:abstracts') {
57
- node.forEach((child) => {
58
- if (child.type === node.type.schema.nodes.graphical_abstract_section) {
59
- child.forEach((item) => {
60
- if (item.type === node.type.schema.nodes.figure_element) {
61
- figures.push(item.attrs.id);
62
- }
63
- });
64
- }
65
- });
66
- }
67
- });
68
- fragment.descendants((node) => {
55
+ fragment.descendants((node, pos, parent) => {
69
56
  var _a;
70
57
  if (node.type.name in counters) {
71
- const isInGraphicalAbstract = figures.indexOf(node.attrs.id) > -1;
72
- if (isInGraphicalAbstract) {
58
+ if (parent && excludedTypes.includes(parent.type)) {
73
59
  return;
74
60
  }
75
61
  const label = buildLabel(node.type);
@@ -14,6 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { ObjectTypes } from '@manuscripts/json-schema';
17
+ import { abstractsType, backmatterType, bodyType, } from '../lib/section-group-type';
17
18
  import { schema } from '../schema';
18
19
  const sectionNodeTypes = [
19
20
  schema.nodes.bibliography_section,
@@ -33,10 +34,6 @@ export const chooseSectionNodeType = (category) => {
33
34
  return schema.nodes.footnotes_section;
34
35
  case 'MPSectionCategory:keywords':
35
36
  return schema.nodes.keywords;
36
- case 'MPSectionCategory:affiliations':
37
- return schema.nodes.affiliations;
38
- case 'MPSectionCategory:contributors':
39
- return schema.nodes.contributors;
40
37
  case 'MPSectionCategory:toc':
41
38
  return schema.nodes.toc_section;
42
39
  default:
@@ -80,10 +77,6 @@ export const buildSectionCategory = (node) => {
80
77
  return 'MPSectionCategory:toc';
81
78
  case schema.nodes.graphical_abstract_section:
82
79
  return 'MPSectionCategory:abstract-graphical';
83
- case schema.nodes.affiliations:
84
- return 'MPSectionCategory:affiliations';
85
- case schema.nodes.contributors:
86
- return 'MPSectionCategory:contributors';
87
80
  default:
88
81
  return node.attrs.category || undefined;
89
82
  }
@@ -109,31 +102,30 @@ export const chooseSecType = (sectionCategory) => {
109
102
  return suffix;
110
103
  }
111
104
  };
112
- export const chooseCoreSectionBySection = (section) => {
113
- switch (section) {
105
+ export const getSectionGroupType = (category) => {
106
+ switch (category) {
114
107
  case 'MPSectionCategory:abstract':
115
- case 'MPSectionCategory:abstract-teaser':
116
108
  case 'MPSectionCategory:abstract-graphical':
117
- return 'MPSectionCategory:abstracts';
118
- case 'MPSectionCategory:acknowledgement':
119
- case 'MPSectionCategory:availability':
120
- case 'MPSectionCategory:conclusions':
121
- case 'MPSectionCategory:bibliography':
122
- case 'MPSectionCategory:discussion':
123
- case 'MPSectionCategory:endnotes':
124
- case 'MPSectionCategory:appendices':
109
+ return abstractsType;
125
110
  case 'MPSectionCategory:competing-interests':
126
111
  case 'MPSectionCategory:con':
127
- case 'MPSectionCategory:deceased':
128
112
  case 'MPSectionCategory:ethics-statement':
129
113
  case 'MPSectionCategory:financial-disclosure':
130
114
  case 'MPSectionCategory:supplementary-material':
131
115
  case 'MPSectionCategory:supported-by':
132
- case 'MPSectionCategory:abbreviations':
133
- case 'MPSectionCategory:results':
134
- return 'MPSectionCategory:backmatter';
116
+ case 'MPSectionCategory:availability':
117
+ case 'MPSectionCategory:acknowledgement':
118
+ case 'MPSectionCategory:endnotes':
119
+ case 'MPSectionCategory:bibliography':
120
+ case 'MPSectionCategory:appendices':
121
+ case 'MPSectionCategory:deceased':
122
+ case 'MPSectionCategory:equal':
123
+ case 'MPSectionCategory:present-address':
124
+ case 'MPSectionCategory:presented-at':
125
+ case 'MPSectionCategory:previously-at':
126
+ return backmatterType;
135
127
  }
136
- return 'MPSectionCategory:body';
128
+ return bodyType;
137
129
  };
138
130
  export const chooseSectionCategoryByType = (secType) => {
139
131
  switch (secType) {
@@ -194,16 +186,6 @@ export const chooseSectionCategoryByType = (secType) => {
194
186
  return 'MPSectionCategory:supported-by';
195
187
  case 'ethics-statement':
196
188
  return 'MPSectionCategory:ethics-statement';
197
- case 'body':
198
- return 'MPSectionCategory:body';
199
- case 'backmatter':
200
- return 'MPSectionCategory:backmatter';
201
- case 'abstracts':
202
- return 'MPSectionCategory:abstracts';
203
- case 'affiliations':
204
- return 'MPSectionCategory:affiliations';
205
- case 'contributors':
206
- return 'MPSectionCategory:contributors';
207
189
  default:
208
190
  return undefined;
209
191
  }
@@ -13,19 +13,11 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ export type SectionGroupTypeID = 'abstracts' | 'body' | 'backmatter';
16
17
  export type SectionGroupType = {
17
- _id: string;
18
- title: string;
19
- };
20
- export declare const abstractsType: {
21
- _id: string;
22
- title: string;
23
- };
24
- export declare const bodyType: {
25
- _id: string;
26
- title: string;
27
- };
28
- export declare const backmatterType: {
29
- _id: string;
18
+ _id: SectionGroupTypeID;
30
19
  title: string;
31
20
  };
21
+ export declare const abstractsType: SectionGroupType;
22
+ export declare const bodyType: SectionGroupType;
23
+ export declare const backmatterType: SectionGroupType;
@@ -20,7 +20,6 @@ export declare function iterateChildren(node: ManuscriptNode, recurse?: boolean)
20
20
  export declare const findNodePositions: (state: ManuscriptEditorState, predicate: (node: ManuscriptNode) => boolean) => number[];
21
21
  export declare const isInGraphicalAbstractSection: ($pos: ResolvedPos) => boolean;
22
22
  export declare const isInBibliographySection: ($pos: ResolvedPos) => boolean;
23
- export declare const isInAbstractsSection: ($pos: ResolvedPos) => boolean;
24
23
  export declare const findParentNodeClosestToPos: ($pos: ResolvedPos, predicate: (node: ProsemirrorNode) => boolean) => {
25
24
  pos: number;
26
25
  start: number;
@@ -28,5 +27,4 @@ export declare const findParentNodeClosestToPos: ($pos: ResolvedPos, predicate:
28
27
  node: ProsemirrorNode;
29
28
  } | undefined;
30
29
  export declare const getTrimmedTextContent: (node: Element | Document | null, querySelector: string) => string | null | undefined;
31
- export declare const groupBy: <T, K extends string | number | symbol>(list: T[], getKey: (item: T) => K) => Record<K, T[]>;
32
30
  export declare function modelsEqual(model: Model, model2: Model): boolean;
@@ -29,9 +29,7 @@ export declare class Decoder {
29
29
  private createContributorsNode;
30
30
  private createKeywordsNode;
31
31
  private createCommentsNode;
32
- private createRootSectionNodes;
33
- private ensureCoreSectionsExist;
34
- private createAndFill;
32
+ private createContentSections;
35
33
  private createCommentNodes;
36
34
  private getComments;
37
35
  private extractListing;
@@ -14,17 +14,18 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { Element } from '@manuscripts/json-schema';
17
+ import { SectionGroupType } from '../lib/section-group-type';
17
18
  import { ManuscriptNode, ManuscriptNodeType } from '../schema';
18
19
  export declare const isAnySectionNode: (node: ManuscriptNode) => boolean;
19
- export type SectionCategory = 'MPSectionCategory:abstract' | 'MPSectionCategory:abstract-teaser' | 'MPSectionCategory:abstract-graphical' | 'MPSectionCategory:acknowledgement' | 'MPSectionCategory:availability' | 'MPSectionCategory:bibliography' | 'MPSectionCategory:conclusions' | 'MPSectionCategory:discussion' | 'MPSectionCategory:endnotes' | 'MPSectionCategory:introduction' | 'MPSectionCategory:keywords' | 'MPSectionCategory:materials-method' | 'MPSectionCategory:results' | 'MPSectionCategory:toc' | 'MPSectionCategory:floating-element' | 'MPSectionCategory:appendices' | 'MPSectionCategory:competing-interests' | 'MPSectionCategory:financial-disclosure' | 'MPSectionCategory:con' | 'MPSectionCategory:deceased' | 'MPSectionCategory:equal' | 'MPSectionCategory:present-address' | 'MPSectionCategory:presented-at' | 'MPSectionCategory:previously-at' | 'MPSectionCategory:supplementary-material' | 'MPSectionCategory:supported-by' | 'MPSectionCategory:ethics-statement' | 'MPSectionCategory:body' | 'MPSectionCategory:abstracts' | 'MPSectionCategory:backmatter' | 'MPSectionCategory:affiliations' | 'MPSectionCategory:contributors';
20
- export type SecType = 'abstract' | 'abstract-teaser' | 'abstract-graphical' | 'acknowledgments' | 'availability' | 'bibliography' | 'conclusions' | 'data-availability' | 'discussion' | 'endnotes' | 'intro' | 'keywords' | 'materials' | 'methods' | 'results' | 'toc' | 'floating-element' | 'appendices' | 'competing-interests' | 'financial-disclosure' | 'con' | 'deceased' | 'equal' | 'present-address' | 'presented-at' | 'previously-at' | 'supplementary-material' | 'supported-by' | 'ethics-statement' | 'abstracts' | 'body' | 'backmatter' | 'affiliations' | 'contributors';
20
+ export type SectionCategory = 'MPSectionCategory:abstract' | 'MPSectionCategory:abstract-teaser' | 'MPSectionCategory:abstract-graphical' | 'MPSectionCategory:acknowledgement' | 'MPSectionCategory:availability' | 'MPSectionCategory:bibliography' | 'MPSectionCategory:conclusions' | 'MPSectionCategory:discussion' | 'MPSectionCategory:endnotes' | 'MPSectionCategory:introduction' | 'MPSectionCategory:keywords' | 'MPSectionCategory:materials-method' | 'MPSectionCategory:results' | 'MPSectionCategory:toc' | 'MPSectionCategory:floating-element' | 'MPSectionCategory:appendices' | 'MPSectionCategory:competing-interests' | 'MPSectionCategory:financial-disclosure' | 'MPSectionCategory:con' | 'MPSectionCategory:deceased' | 'MPSectionCategory:equal' | 'MPSectionCategory:present-address' | 'MPSectionCategory:presented-at' | 'MPSectionCategory:previously-at' | 'MPSectionCategory:supplementary-material' | 'MPSectionCategory:supported-by' | 'MPSectionCategory:ethics-statement';
21
+ export type SecType = 'abstract' | 'abstract-teaser' | 'abstract-graphical' | 'acknowledgments' | 'availability' | 'bibliography' | 'conclusions' | 'data-availability' | 'discussion' | 'endnotes' | 'intro' | 'keywords' | 'materials' | 'methods' | 'results' | 'toc' | 'floating-element' | 'appendices' | 'competing-interests' | 'financial-disclosure' | 'con' | 'deceased' | 'equal' | 'present-address' | 'presented-at' | 'previously-at' | 'supplementary-material' | 'supported-by' | 'ethics-statement';
21
22
  export declare const chooseSectionNodeType: (category?: SectionCategory) => ManuscriptNodeType;
22
23
  export declare const chooseSectionLableName: (type?: SecType) => string;
23
24
  export declare const guessSectionCategory: (elements: Element[]) => SectionCategory | undefined;
24
25
  export declare const buildSectionCategory: (node: ManuscriptNode) => SectionCategory | undefined;
25
26
  export declare const chooseJatsFnType: (footnoteType: string) => string;
26
27
  export declare const chooseSecType: (sectionCategory: SectionCategory) => SecType;
27
- export declare const chooseCoreSectionBySection: (section: string) => string;
28
+ export declare const getSectionGroupType: (category: string) => SectionGroupType;
28
29
  export declare const chooseSectionCategoryByType: (secType: string) => SectionCategory | undefined;
29
30
  export declare const chooseSectionCategory: (section: HTMLElement) => SectionCategory | undefined;
30
31
  export declare const chooseSectionCategoryFromTitle: (title: string | null) => SectionCategory | undefined;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@manuscripts/transform",
3
3
  "description": "ProseMirror transformer for Manuscripts applications",
4
- "version": "1.5.8-LEAN-3030",
4
+ "version": "1.5.8-LEAN-3030-1",
5
5
  "repository": "github:Atypon-OpenSource/manuscripts-transform",
6
6
  "license": "Apache-2.0",
7
7
  "main": "dist/cjs",