@manuscripts/transform 2.3.7-LEAN-3582.0 → 2.3.7

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 (31) hide show
  1. package/dist/cjs/jats/importer/jats-body-dom-parser.js +22 -0
  2. package/dist/cjs/jats/importer/jats-body-transformations.js +12 -0
  3. package/dist/cjs/jats/importer/jats-parser-utils.js +4 -0
  4. package/dist/cjs/jats/importer/parse-jats-article.js +1 -5
  5. package/dist/cjs/jats/jats-exporter.js +15 -0
  6. package/dist/cjs/schema/index.js +3 -0
  7. package/dist/cjs/schema/nodes/general_table_footnote.js +27 -0
  8. package/dist/cjs/schema/nodes/table_element_footer.js +1 -1
  9. package/dist/cjs/transformer/decode.js +23 -2
  10. package/dist/cjs/transformer/encode.js +14 -1
  11. package/dist/cjs/transformer/object-types.js +1 -0
  12. package/dist/cjs/version.js +1 -1
  13. package/dist/es/jats/importer/jats-body-dom-parser.js +23 -1
  14. package/dist/es/jats/importer/jats-body-transformations.js +12 -0
  15. package/dist/es/jats/importer/jats-parser-utils.js +4 -0
  16. package/dist/es/jats/importer/parse-jats-article.js +1 -5
  17. package/dist/es/jats/jats-exporter.js +15 -0
  18. package/dist/es/schema/index.js +3 -0
  19. package/dist/es/schema/nodes/general_table_footnote.js +24 -0
  20. package/dist/es/schema/nodes/table_element_footer.js +1 -1
  21. package/dist/es/transformer/decode.js +23 -2
  22. package/dist/es/transformer/encode.js +14 -1
  23. package/dist/es/transformer/object-types.js +1 -0
  24. package/dist/es/version.js +1 -1
  25. package/dist/types/jats/importer/parse-jats-article.d.ts +1 -1
  26. package/dist/types/schema/index.d.ts +1 -0
  27. package/dist/types/schema/nodes/general_table_footnote.d.ts +25 -0
  28. package/dist/types/schema/types.d.ts +1 -1
  29. package/dist/types/transformer/object-types.d.ts +2 -1
  30. package/dist/types/version.d.ts +1 -1
  31. package/package.json +1 -2
@@ -315,6 +315,28 @@ const nodes = [
315
315
  };
316
316
  },
317
317
  },
318
+ {
319
+ tag: 'general-table-footnote',
320
+ node: 'general_table_footnote',
321
+ context: 'table_element_footer/',
322
+ getAttrs: (node) => {
323
+ const element = node;
324
+ return {
325
+ id: element.getAttribute('id'),
326
+ };
327
+ },
328
+ getContent: (node) => {
329
+ const paragraphs = [];
330
+ node.childNodes.forEach((p) => {
331
+ const paragraph = schema_1.schema.nodes.paragraph.create();
332
+ const content = exports.jatsBodyDOMParser.parse(p, {
333
+ topNode: paragraph,
334
+ });
335
+ paragraphs.push(content);
336
+ });
337
+ return prosemirror_model_1.Fragment.from([...paragraphs]);
338
+ },
339
+ },
318
340
  {
319
341
  tag: 'fn',
320
342
  node: 'footnote',
@@ -242,6 +242,18 @@ exports.jatsBodyTransformations = {
242
242
  }
243
243
  tableWrap.insertBefore(colgroup, table.nextSibling);
244
244
  }
245
+ const tableFootWrap = tableWrap.querySelector('table-wrap-foot');
246
+ if (tableFootWrap) {
247
+ const paragraphs = tableFootWrap.querySelectorAll(':scope > p');
248
+ if (paragraphs.length) {
249
+ const generalTableFootnote = createElement('general-table-footnote');
250
+ for (const paragraph of paragraphs) {
251
+ removeNodeFromParent(paragraph);
252
+ generalTableFootnote.append(paragraph);
253
+ }
254
+ tableFootWrap.prepend(generalTableFootnote);
255
+ }
256
+ }
245
257
  });
246
258
  },
247
259
  orderTableFootnote(doc, body) {
@@ -36,6 +36,10 @@ const updateNodeID = (node, replacements, warnings) => {
36
36
  node.attrs = Object.assign(Object.assign({}, node.attrs), { id: `InlineMathFragment:${(0, uuid_1.v4)()}` });
37
37
  return;
38
38
  }
39
+ if (node.type === schema_1.schema.nodes.general_table_footnote) {
40
+ node.attrs = Object.assign(Object.assign({}, node.attrs), { id: `GeneralTableFootnote:${(0, uuid_1.v4)()}` });
41
+ return;
42
+ }
39
43
  if (!('id' in node.attrs)) {
40
44
  return;
41
45
  }
@@ -87,13 +87,9 @@ const createBibliographyModels = (references) => {
87
87
  models.push(...comments);
88
88
  return models;
89
89
  };
90
- const clearUnsupportedChars = (input = '') => {
91
- return input.replace(/[\u2028\u2029]/gim, '<break/>');
92
- };
93
90
  const createElementFn = (doc) => (tagName) => doc.createElement(tagName);
94
91
  const generateIDs = (models) => models.map((m) => m._id ? m : Object.assign(Object.assign({}, m), { _id: (0, id_1.generateID)(m.objectType) }));
95
- const parseJATSArticle = (rawDoc) => {
96
- const doc = new DOMParser().parseFromString(clearUnsupportedChars(rawDoc), 'application/xml');
92
+ const parseJATSArticle = (doc) => {
97
93
  const article = doc.querySelector('article');
98
94
  const front = doc.querySelector('front');
99
95
  const body = doc.querySelector('body');
@@ -679,6 +679,12 @@ class JATSExporter {
679
679
  equation: (node) => {
680
680
  return this.createEquation(node);
681
681
  },
682
+ general_table_footnote: (node) => {
683
+ const el = this.document.createElement('general-table-footnote');
684
+ el.setAttribute('id', normalizeID(node.attrs.id));
685
+ processChildNodes(el, node, schema_1.schema.nodes.general_table_footnote);
686
+ return el;
687
+ },
682
688
  inline_equation: (node) => {
683
689
  const eqElement = this.document.createElement('inline-formula');
684
690
  const equation = this.createEquation(node, true);
@@ -1302,6 +1308,15 @@ class JATSExporter {
1302
1308
  label.remove();
1303
1309
  }
1304
1310
  }
1311
+ if ((0, node_types_1.isNodeType)(node, 'general_table_footnote')) {
1312
+ const generalTableFootnote = body.querySelector(`#${normalizeID(node.attrs.id)}`);
1313
+ if (generalTableFootnote) {
1314
+ Array.from(generalTableFootnote.childNodes).forEach((cn) => {
1315
+ generalTableFootnote.before(cn);
1316
+ });
1317
+ generalTableFootnote.remove();
1318
+ }
1319
+ }
1305
1320
  if ((0, node_types_1.isNodeType)(node, 'table_element')) {
1306
1321
  const tableElement = body.querySelector(`#${normalizeID(node.attrs.id)}`);
1307
1322
  if (tableElement) {
@@ -61,6 +61,7 @@ const figure_element_1 = require("./nodes/figure_element");
61
61
  const footnote_1 = require("./nodes/footnote");
62
62
  const footnotes_element_1 = require("./nodes/footnotes_element");
63
63
  const footnotes_section_1 = require("./nodes/footnotes_section");
64
+ const general_table_footnote_1 = require("./nodes/general_table_footnote");
64
65
  const graphical_abstract_section_1 = require("./nodes/graphical_abstract_section");
65
66
  const hard_break_1 = require("./nodes/hard_break");
66
67
  const highlight_marker_1 = require("./nodes/highlight_marker");
@@ -112,6 +113,7 @@ __exportStar(require("./nodes/equation_element"), exports);
112
113
  __exportStar(require("./nodes/figcaption"), exports);
113
114
  __exportStar(require("./nodes/figure"), exports);
114
115
  __exportStar(require("./nodes/figure_element"), exports);
116
+ __exportStar(require("./nodes/general_table_footnote"), exports);
115
117
  __exportStar(require("./nodes/footnote"), exports);
116
118
  __exportStar(require("./nodes/footnotes_element"), exports);
117
119
  __exportStar(require("./nodes/footnotes_section"), exports);
@@ -187,6 +189,7 @@ exports.schema = new prosemirror_model_1.Schema({
187
189
  footnote: footnote_1.footnote,
188
190
  footnotes_element: footnotes_element_1.footnotesElement,
189
191
  footnotes_section: footnotes_section_1.footnotesSection,
192
+ general_table_footnote: general_table_footnote_1.generalTableFootnote,
190
193
  graphical_abstract_section: graphical_abstract_section_1.graphicalAbstractSection,
191
194
  hard_break: hard_break_1.hardBreak,
192
195
  highlight_marker: highlight_marker_1.highlightMarker,
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ /*!
3
+ * © 2019 Atypon Systems LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.generalTableFootnote = void 0;
19
+ exports.generalTableFootnote = {
20
+ content: 'paragraph*',
21
+ attrs: {
22
+ id: { default: '' },
23
+ dataTracked: { default: null },
24
+ },
25
+ group: 'block',
26
+ toDOM: () => ['div', { class: 'general-table-footnote' }, 0],
27
+ };
@@ -21,7 +21,7 @@ exports.tableElementFooter = {
21
21
  id: { default: '' },
22
22
  dataTracked: { default: null },
23
23
  },
24
- content: '(paragraph | footnotes_element)*',
24
+ content: 'general_table_footnote? footnotes_element?',
25
25
  group: 'block element',
26
26
  toDOM: () => ['table-wrap-foot', 0],
27
27
  };
@@ -38,6 +38,7 @@ 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");
41
42
  const object_types_1 = require("./object-types");
42
43
  const section_category_1 = require("./section-category");
43
44
  const timestamp_1 = require("./timestamp");
@@ -492,10 +493,30 @@ class Decoder {
492
493
  },
493
494
  [json_schema_1.ObjectTypes.TableElementFooter]: (data) => {
494
495
  const model = data;
495
- const content = model.containedObjectIDs.map((id) => this.decode(this.modelMap.get(id)));
496
+ const contents = [];
497
+ const generalTableFootnotes = [];
498
+ const footnotesElements = [];
499
+ for (const containedObjectID of model.containedObjectIDs) {
500
+ const model = this.modelMap.get(containedObjectID);
501
+ if (model.objectType === json_schema_1.ObjectTypes.ParagraphElement) {
502
+ const paragraph = this.decode(model);
503
+ if (paragraph) {
504
+ generalTableFootnotes.push(paragraph);
505
+ }
506
+ }
507
+ else {
508
+ footnotesElements.push(this.decode(model));
509
+ }
510
+ }
511
+ if (generalTableFootnotes && generalTableFootnotes.length) {
512
+ contents.push(schema_1.schema.nodes.general_table_footnote.create({ id: (0, id_1.generateID)(object_types_1.ExtraObjectTypes.GeneralTableFootnote) }, [...generalTableFootnotes]));
513
+ }
514
+ if (footnotesElements && footnotesElements.length) {
515
+ contents.push(...footnotesElements);
516
+ }
496
517
  return schema_1.schema.nodes.table_element_footer.create({
497
518
  id: model._id,
498
- }, content);
519
+ }, contents);
499
520
  },
500
521
  [json_schema_1.ObjectTypes.AuthorNotes]: (data) => {
501
522
  const model = data;
@@ -210,6 +210,18 @@ const containedBibliographyItemIDs = (node) => {
210
210
  const bibliographyItemNodeType = node.type.schema.nodes.bibliography_item;
211
211
  return containedObjectIDs(node, [bibliographyItemNodeType]);
212
212
  };
213
+ const tableElementFooterContainedIDs = (node) => {
214
+ const containedGeneralTableFootnoteIDs = containedObjectIDs(node, [
215
+ schema_1.schema.nodes.footnotes_element,
216
+ ]);
217
+ for (let i = 0; i < node.childCount; i++) {
218
+ const childNode = node.child(i);
219
+ if (childNode.type === schema_1.schema.nodes.general_table_footnote) {
220
+ containedGeneralTableFootnoteIDs.push(...containedObjectIDs(childNode));
221
+ }
222
+ }
223
+ return containedGeneralTableFootnoteIDs;
224
+ };
213
225
  const containedObjectIDs = (node, nodeTypes) => {
214
226
  const ids = [];
215
227
  for (let i = 0; i < node.childCount; i++) {
@@ -382,7 +394,7 @@ const encoders = {
382
394
  paragraphStyle: node.attrs.paragraphStyle || undefined,
383
395
  }),
384
396
  table_element_footer: (node) => ({
385
- containedObjectIDs: containedObjectIDs(node),
397
+ containedObjectIDs: tableElementFooterContainedIDs(node),
386
398
  }),
387
399
  author_notes: (node) => ({
388
400
  containedObjectIDs: containedObjectIDs(node),
@@ -558,6 +570,7 @@ const containerTypes = [
558
570
  schema_1.schema.nodes.abstracts,
559
571
  schema_1.schema.nodes.body,
560
572
  schema_1.schema.nodes.backmatter,
573
+ schema_1.schema.nodes.general_table_footnote,
561
574
  ];
562
575
  const placeholderTypes = [
563
576
  schema_1.schema.nodes.placeholder,
@@ -20,6 +20,7 @@ const json_schema_1 = require("@manuscripts/json-schema");
20
20
  var ExtraObjectTypes;
21
21
  (function (ExtraObjectTypes) {
22
22
  ExtraObjectTypes["PlaceholderElement"] = "MPPlaceholderElement";
23
+ ExtraObjectTypes["GeneralTableFootnote"] = "MPGeneralTableFootnote";
23
24
  })(ExtraObjectTypes = exports.ExtraObjectTypes || (exports.ExtraObjectTypes = {}));
24
25
  exports.elementObjects = [
25
26
  json_schema_1.ObjectTypes.BibliographyElement,
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = "2.3.7-LEAN-3582.0";
4
+ exports.VERSION = "2.3.7";
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import mime from 'mime';
17
17
  import { DOMParser, Fragment } from 'prosemirror-model';
18
- import { schema } from '../../schema';
18
+ import { schema, } from '../../schema';
19
19
  import { chooseSectionCategory } from '../../transformer';
20
20
  const XLINK_NAMESPACE = 'http://www.w3.org/1999/xlink';
21
21
  const chooseContentType = (graphicNode) => {
@@ -309,6 +309,28 @@ const nodes = [
309
309
  };
310
310
  },
311
311
  },
312
+ {
313
+ tag: 'general-table-footnote',
314
+ node: 'general_table_footnote',
315
+ context: 'table_element_footer/',
316
+ getAttrs: (node) => {
317
+ const element = node;
318
+ return {
319
+ id: element.getAttribute('id'),
320
+ };
321
+ },
322
+ getContent: (node) => {
323
+ const paragraphs = [];
324
+ node.childNodes.forEach((p) => {
325
+ const paragraph = schema.nodes.paragraph.create();
326
+ const content = jatsBodyDOMParser.parse(p, {
327
+ topNode: paragraph,
328
+ });
329
+ paragraphs.push(content);
330
+ });
331
+ return Fragment.from([...paragraphs]);
332
+ },
333
+ },
312
334
  {
313
335
  tag: 'fn',
314
336
  node: 'footnote',
@@ -239,6 +239,18 @@ export const jatsBodyTransformations = {
239
239
  }
240
240
  tableWrap.insertBefore(colgroup, table.nextSibling);
241
241
  }
242
+ const tableFootWrap = tableWrap.querySelector('table-wrap-foot');
243
+ if (tableFootWrap) {
244
+ const paragraphs = tableFootWrap.querySelectorAll(':scope > p');
245
+ if (paragraphs.length) {
246
+ const generalTableFootnote = createElement('general-table-footnote');
247
+ for (const paragraph of paragraphs) {
248
+ removeNodeFromParent(paragraph);
249
+ generalTableFootnote.append(paragraph);
250
+ }
251
+ tableFootWrap.prepend(generalTableFootnote);
252
+ }
253
+ }
242
254
  });
243
255
  },
244
256
  orderTableFootnote(doc, body) {
@@ -32,6 +32,10 @@ const updateNodeID = (node, replacements, warnings) => {
32
32
  node.attrs = Object.assign(Object.assign({}, node.attrs), { id: `InlineMathFragment:${uuidv4()}` });
33
33
  return;
34
34
  }
35
+ if (node.type === schema.nodes.general_table_footnote) {
36
+ node.attrs = Object.assign(Object.assign({}, node.attrs), { id: `GeneralTableFootnote:${uuidv4()}` });
37
+ return;
38
+ }
35
39
  if (!('id' in node.attrs)) {
36
40
  return;
37
41
  }
@@ -82,13 +82,9 @@ const createBibliographyModels = (references) => {
82
82
  models.push(...comments);
83
83
  return models;
84
84
  };
85
- const clearUnsupportedChars = (input = '') => {
86
- return input.replace(/[\u2028\u2029]/gim, '<break/>');
87
- };
88
85
  const createElementFn = (doc) => (tagName) => doc.createElement(tagName);
89
86
  const generateIDs = (models) => models.map((m) => m._id ? m : Object.assign(Object.assign({}, m), { _id: generateID(m.objectType) }));
90
- export const parseJATSArticle = (rawDoc) => {
91
- const doc = new DOMParser().parseFromString(clearUnsupportedChars(rawDoc), 'application/xml');
87
+ export const parseJATSArticle = (doc) => {
92
88
  const article = doc.querySelector('article');
93
89
  const front = doc.querySelector('front');
94
90
  const body = doc.querySelector('body');
@@ -671,6 +671,12 @@ export class JATSExporter {
671
671
  equation: (node) => {
672
672
  return this.createEquation(node);
673
673
  },
674
+ general_table_footnote: (node) => {
675
+ const el = this.document.createElement('general-table-footnote');
676
+ el.setAttribute('id', normalizeID(node.attrs.id));
677
+ processChildNodes(el, node, schema.nodes.general_table_footnote);
678
+ return el;
679
+ },
674
680
  inline_equation: (node) => {
675
681
  const eqElement = this.document.createElement('inline-formula');
676
682
  const equation = this.createEquation(node, true);
@@ -1294,6 +1300,15 @@ export class JATSExporter {
1294
1300
  label.remove();
1295
1301
  }
1296
1302
  }
1303
+ if (isNodeType(node, 'general_table_footnote')) {
1304
+ const generalTableFootnote = body.querySelector(`#${normalizeID(node.attrs.id)}`);
1305
+ if (generalTableFootnote) {
1306
+ Array.from(generalTableFootnote.childNodes).forEach((cn) => {
1307
+ generalTableFootnote.before(cn);
1308
+ });
1309
+ generalTableFootnote.remove();
1310
+ }
1311
+ }
1297
1312
  if (isNodeType(node, 'table_element')) {
1298
1313
  const tableElement = body.querySelector(`#${normalizeID(node.attrs.id)}`);
1299
1314
  if (tableElement) {
@@ -44,6 +44,7 @@ import { figureElement } from './nodes/figure_element';
44
44
  import { footnote } from './nodes/footnote';
45
45
  import { footnotesElement } from './nodes/footnotes_element';
46
46
  import { footnotesSection } from './nodes/footnotes_section';
47
+ import { generalTableFootnote } from './nodes/general_table_footnote';
47
48
  import { graphicalAbstractSection } from './nodes/graphical_abstract_section';
48
49
  import { hardBreak } from './nodes/hard_break';
49
50
  import { highlightMarker } from './nodes/highlight_marker';
@@ -95,6 +96,7 @@ export * from './nodes/equation_element';
95
96
  export * from './nodes/figcaption';
96
97
  export * from './nodes/figure';
97
98
  export * from './nodes/figure_element';
99
+ export * from './nodes/general_table_footnote';
98
100
  export * from './nodes/footnote';
99
101
  export * from './nodes/footnotes_element';
100
102
  export * from './nodes/footnotes_section';
@@ -170,6 +172,7 @@ export const schema = new Schema({
170
172
  footnote,
171
173
  footnotes_element: footnotesElement,
172
174
  footnotes_section: footnotesSection,
175
+ general_table_footnote: generalTableFootnote,
173
176
  graphical_abstract_section: graphicalAbstractSection,
174
177
  hard_break: hardBreak,
175
178
  highlight_marker: highlightMarker,
@@ -0,0 +1,24 @@
1
+ /*!
2
+ * © 2019 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ export const generalTableFootnote = {
17
+ content: 'paragraph*',
18
+ attrs: {
19
+ id: { default: '' },
20
+ dataTracked: { default: null },
21
+ },
22
+ group: 'block',
23
+ toDOM: () => ['div', { class: 'general-table-footnote' }, 0],
24
+ };
@@ -18,7 +18,7 @@ export const tableElementFooter = {
18
18
  id: { default: '' },
19
19
  dataTracked: { default: null },
20
20
  },
21
- content: '(paragraph | footnotes_element)*',
21
+ content: 'general_table_footnote? footnotes_element?',
22
22
  group: 'block element',
23
23
  toDOM: () => ['table-wrap-foot', 0],
24
24
  };
@@ -32,6 +32,7 @@ import { abstractsType, backmatterType, bodyType, } from '../lib/section-group-t
32
32
  import { schema, } from '../schema';
33
33
  import { buildTitles } from './builders';
34
34
  import { insertHighlightMarkers } from './highlight-markers';
35
+ import { generateID } from './id';
35
36
  import { ExtraObjectTypes, isCommentAnnotation, isManuscript, } from './object-types';
36
37
  import { chooseSectionLableName, chooseSectionNodeType, chooseSecType, getSectionGroupType, guessSectionCategory, } from './section-category';
37
38
  import { timestamp } from './timestamp';
@@ -483,10 +484,30 @@ export class Decoder {
483
484
  },
484
485
  [ObjectTypes.TableElementFooter]: (data) => {
485
486
  const model = data;
486
- const content = model.containedObjectIDs.map((id) => this.decode(this.modelMap.get(id)));
487
+ const contents = [];
488
+ const generalTableFootnotes = [];
489
+ const footnotesElements = [];
490
+ for (const containedObjectID of model.containedObjectIDs) {
491
+ const model = this.modelMap.get(containedObjectID);
492
+ if (model.objectType === ObjectTypes.ParagraphElement) {
493
+ const paragraph = this.decode(model);
494
+ if (paragraph) {
495
+ generalTableFootnotes.push(paragraph);
496
+ }
497
+ }
498
+ else {
499
+ footnotesElements.push(this.decode(model));
500
+ }
501
+ }
502
+ if (generalTableFootnotes && generalTableFootnotes.length) {
503
+ contents.push(schema.nodes.general_table_footnote.create({ id: generateID(ExtraObjectTypes.GeneralTableFootnote) }, [...generalTableFootnotes]));
504
+ }
505
+ if (footnotesElements && footnotesElements.length) {
506
+ contents.push(...footnotesElements);
507
+ }
487
508
  return schema.nodes.table_element_footer.create({
488
509
  id: model._id,
489
- }, content);
510
+ }, contents);
490
511
  },
491
512
  [ObjectTypes.AuthorNotes]: (data) => {
492
513
  const model = data;
@@ -202,6 +202,18 @@ const containedBibliographyItemIDs = (node) => {
202
202
  const bibliographyItemNodeType = node.type.schema.nodes.bibliography_item;
203
203
  return containedObjectIDs(node, [bibliographyItemNodeType]);
204
204
  };
205
+ const tableElementFooterContainedIDs = (node) => {
206
+ const containedGeneralTableFootnoteIDs = containedObjectIDs(node, [
207
+ schema.nodes.footnotes_element,
208
+ ]);
209
+ for (let i = 0; i < node.childCount; i++) {
210
+ const childNode = node.child(i);
211
+ if (childNode.type === schema.nodes.general_table_footnote) {
212
+ containedGeneralTableFootnoteIDs.push(...containedObjectIDs(childNode));
213
+ }
214
+ }
215
+ return containedGeneralTableFootnoteIDs;
216
+ };
205
217
  const containedObjectIDs = (node, nodeTypes) => {
206
218
  const ids = [];
207
219
  for (let i = 0; i < node.childCount; i++) {
@@ -374,7 +386,7 @@ const encoders = {
374
386
  paragraphStyle: node.attrs.paragraphStyle || undefined,
375
387
  }),
376
388
  table_element_footer: (node) => ({
377
- containedObjectIDs: containedObjectIDs(node),
389
+ containedObjectIDs: tableElementFooterContainedIDs(node),
378
390
  }),
379
391
  author_notes: (node) => ({
380
392
  containedObjectIDs: containedObjectIDs(node),
@@ -549,6 +561,7 @@ const containerTypes = [
549
561
  schema.nodes.abstracts,
550
562
  schema.nodes.body,
551
563
  schema.nodes.backmatter,
564
+ schema.nodes.general_table_footnote,
552
565
  ];
553
566
  const placeholderTypes = [
554
567
  schema.nodes.placeholder,
@@ -17,6 +17,7 @@ import { manuscriptIDTypes, ObjectTypes, } from '@manuscripts/json-schema';
17
17
  export var ExtraObjectTypes;
18
18
  (function (ExtraObjectTypes) {
19
19
  ExtraObjectTypes["PlaceholderElement"] = "MPPlaceholderElement";
20
+ ExtraObjectTypes["GeneralTableFootnote"] = "MPGeneralTableFootnote";
20
21
  })(ExtraObjectTypes || (ExtraObjectTypes = {}));
21
22
  export const elementObjects = [
22
23
  ObjectTypes.BibliographyElement,
@@ -1 +1 @@
1
- export const VERSION = "2.3.7-LEAN-3582.0";
1
+ export const VERSION = "2.3.7";
@@ -17,4 +17,4 @@ import { Model } from '@manuscripts/json-schema';
17
17
  import { References } from './jats-references';
18
18
  export declare const parseJATSFront: (doc: Document, front: Element) => Model[];
19
19
  export declare const parseJATSBody: (doc: Document, body: Element, references?: References) => IterableIterator<Model>;
20
- export declare const parseJATSArticle: (rawDoc: string) => Model[];
20
+ export declare const parseJATSArticle: (doc: Document) => Model[];
@@ -34,6 +34,7 @@ export * from './nodes/equation_element';
34
34
  export * from './nodes/figcaption';
35
35
  export * from './nodes/figure';
36
36
  export * from './nodes/figure_element';
37
+ export * from './nodes/general_table_footnote';
37
38
  export * from './nodes/footnote';
38
39
  export * from './nodes/footnotes_element';
39
40
  export * from './nodes/footnotes_section';
@@ -0,0 +1,25 @@
1
+ /*!
2
+ * © 2019 Atypon Systems LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { NodeSpec } from 'prosemirror-model';
17
+ import { ManuscriptNode } from '../types';
18
+ interface Attrs {
19
+ id: string;
20
+ }
21
+ export interface GeneralTableFootnote extends ManuscriptNode {
22
+ attrs: Attrs;
23
+ }
24
+ export declare const generalTableFootnote: NodeSpec;
25
+ export {};
@@ -17,7 +17,7 @@ import { Fragment, Mark as ProsemirrorMark, MarkType, Node as ProsemirrorNode, N
17
17
  import { EditorState, NodeSelection, Plugin, TextSelection, Transaction } from 'prosemirror-state';
18
18
  import { EditorView, NodeView } from 'prosemirror-view';
19
19
  export type Marks = 'bold' | 'code' | 'italic' | 'smallcaps' | 'strikethrough' | 'styled' | 'subscript' | 'superscript' | 'underline' | 'tracked_insert' | 'tracked_delete';
20
- export type Nodes = 'attribution' | 'bibliography_item' | 'bibliography_element' | 'bibliography_section' | 'blockquote_element' | 'bullet_list' | 'caption' | 'caption_title' | 'comment' | 'comments' | 'citation' | 'cross_reference' | 'doc' | 'equation' | 'equation_element' | 'figcaption' | 'figure' | 'graphical_abstract_section' | 'figure_element' | 'footnote' | 'footnotes_element' | 'footnotes_section' | 'hard_break' | 'highlight_marker' | 'inline_equation' | 'inline_footnote' | 'keyword' | 'keywords_element' | 'keyword_group' | 'keywords' | 'link' | 'list_item' | 'listing' | 'listing_element' | 'manuscript' | 'abstracts' | 'body' | 'backmatter' | 'missing_figure' | 'ordered_list' | 'paragraph' | 'placeholder' | 'placeholder_element' | 'pullquote_element' | 'section' | 'section_label' | 'section_title' | 'section_title_plain' | 'table' | 'table_cell' | 'table_element' | 'table_row' | 'table_colgroup' | 'table_col' | 'table_header' | 'text' | 'toc_element' | 'toc_section' | 'affiliation' | 'contributor' | 'table_element_footer' | 'title' | 'affiliations' | 'contributors' | 'supplements' | 'supplement' | 'author_notes' | 'corresp';
20
+ export type Nodes = 'attribution' | 'bibliography_item' | 'bibliography_element' | 'bibliography_section' | 'blockquote_element' | 'bullet_list' | 'caption' | 'caption_title' | 'comment' | 'comments' | 'citation' | 'cross_reference' | 'doc' | 'equation' | 'equation_element' | 'figcaption' | 'figure' | 'graphical_abstract_section' | 'figure_element' | 'footnote' | 'footnotes_element' | 'footnotes_section' | 'hard_break' | 'highlight_marker' | 'inline_equation' | 'inline_footnote' | 'keyword' | 'keywords_element' | 'keyword_group' | 'keywords' | 'link' | 'list_item' | 'listing' | 'listing_element' | 'manuscript' | 'abstracts' | 'body' | 'backmatter' | 'missing_figure' | 'ordered_list' | 'paragraph' | 'placeholder' | 'placeholder_element' | 'pullquote_element' | 'section' | 'section_label' | 'section_title' | 'section_title_plain' | 'table' | 'table_cell' | 'table_element' | 'table_row' | 'table_colgroup' | 'table_col' | 'table_header' | 'text' | 'toc_element' | 'toc_section' | 'affiliation' | 'contributor' | 'table_element_footer' | 'title' | 'affiliations' | 'contributors' | 'supplements' | 'supplement' | 'author_notes' | 'corresp' | 'general_table_footnote';
21
21
  export type ManuscriptSchema = Schema<Nodes, Marks>;
22
22
  export type ManuscriptEditorState = EditorState;
23
23
  export type ManuscriptEditorView = EditorView;
@@ -16,7 +16,8 @@
16
16
  import { CommentAnnotation, Figure, Keyword, Manuscript, Model, ObjectTypes, Table } from '@manuscripts/json-schema';
17
17
  import { ManuscriptModel } from './models';
18
18
  export declare enum ExtraObjectTypes {
19
- PlaceholderElement = "MPPlaceholderElement"
19
+ PlaceholderElement = "MPPlaceholderElement",
20
+ GeneralTableFootnote = "MPGeneralTableFootnote"
20
21
  }
21
22
  export declare const elementObjects: ObjectTypes[];
22
23
  export declare const manuscriptObjects: ObjectTypes[];
@@ -1 +1 @@
1
- export declare const VERSION = "2.3.7-LEAN-3582.0";
1
+ export declare const VERSION = "2.3.7";
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": "2.3.7-LEAN-3582.0",
4
+ "version": "2.3.7",
5
5
  "repository": "github:Atypon-OpenSource/manuscripts-transform",
6
6
  "license": "Apache-2.0",
7
7
  "main": "dist/cjs",
@@ -25,7 +25,6 @@
25
25
  "prettier": "prettier --write \"src/**/*.{ts,tsx}\" \"*.{js,json}\"",
26
26
  "preversion": "npm-run-all --parallel typecheck lint build test",
27
27
  "test": "jest --runInBand",
28
- "test-inv": "jest -i src/jats/__tests__/jats-importer-invalid.test.ts",
29
28
  "test:debug": "DEBUG=manuscripts-transform yarn test",
30
29
  "typecheck": "tsc --noEmit",
31
30
  "version": "yarn build"