@manuscripts/transform 1.5.1-LEAN-2852-9 → 1.5.2-LEAN-3034

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 (39) hide show
  1. package/dist/cjs/jats/importer/parse-jats-article.js +2 -11
  2. package/dist/cjs/jats/jats-exporter.js +38 -10
  3. package/dist/cjs/lib/citationProvider.js +50 -0
  4. package/dist/cjs/lib/defaultLocale.js +3 -0
  5. package/dist/cjs/schema/index.js +0 -3
  6. package/dist/cjs/schema/nodes/manuscript.js +1 -1
  7. package/dist/cjs/transformer/builders.js +3 -8
  8. package/dist/cjs/transformer/decode.js +1 -20
  9. package/dist/cjs/transformer/encode.js +0 -6
  10. package/dist/cjs/transformer/html.js +5 -6
  11. package/dist/cjs/transformer/labels.js +8 -4
  12. package/dist/cjs/transformer/node-title.js +4 -6
  13. package/dist/cjs/transformer/node-types.js +0 -1
  14. package/dist/cjs/transformer/project-bundle.js +1 -22
  15. package/dist/es/jats/importer/parse-jats-article.js +2 -11
  16. package/dist/es/jats/jats-exporter.js +40 -12
  17. package/dist/es/lib/citationProvider.js +43 -0
  18. package/dist/es/lib/defaultLocale.js +1 -0
  19. package/dist/es/schema/index.js +0 -3
  20. package/dist/es/schema/nodes/manuscript.js +1 -1
  21. package/dist/es/transformer/builders.js +2 -6
  22. package/dist/es/transformer/decode.js +1 -20
  23. package/dist/es/transformer/encode.js +0 -6
  24. package/dist/es/transformer/html.js +6 -7
  25. package/dist/es/transformer/labels.js +8 -4
  26. package/dist/es/transformer/node-title.js +5 -7
  27. package/dist/es/transformer/node-types.js +0 -1
  28. package/dist/es/transformer/project-bundle.js +0 -20
  29. package/dist/types/jats/jats-exporter.d.ts +8 -1
  30. package/dist/types/{schema/nodes/title.d.ts → lib/citationProvider.d.ts} +14 -11
  31. package/dist/types/lib/defaultLocale.d.ts +2 -0
  32. package/dist/types/schema/index.d.ts +0 -1
  33. package/dist/types/schema/types.d.ts +1 -1
  34. package/dist/types/transformer/builders.d.ts +2 -3
  35. package/dist/types/transformer/decode.d.ts +0 -1
  36. package/dist/types/transformer/project-bundle.d.ts +1 -2
  37. package/package.json +4 -3
  38. package/dist/cjs/schema/nodes/title.js +0 -29
  39. package/dist/es/schema/nodes/title.js +0 -26
@@ -16,7 +16,6 @@
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.getElementsOrder = exports.parseJATSArticle = exports.parseJATSBody = exports.parseJATSReferences = exports.parseJATSFront = void 0;
19
- const json_schema_1 = require("@manuscripts/json-schema");
20
19
  const prosemirror_model_1 = require("prosemirror-model");
21
20
  const errors_1 = require("../../errors");
22
21
  const html_1 = require("../../lib/html");
@@ -52,16 +51,9 @@ const parseJATSFront = async (front) => {
52
51
  const title = (_a = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > article-title')) === null || _a === void 0 ? void 0 : _a.innerHTML;
53
52
  const subtitle = (_b = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > subtitle')) === null || _b === void 0 ? void 0 : _b.innerHTML;
54
53
  const runningTitle = (_c = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > alt-title[alt-title-type="right-running"]')) === null || _c === void 0 ? void 0 : _c.innerHTML;
55
- const manuscriptMeta = Object.assign({}, jats_front_parser_1.jatsFrontParser.parseCounts(articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('counts')));
56
- const titles = {
57
- objectType: json_schema_1.ObjectTypes.Titles,
58
- _id: (0, id_1.generateID)(json_schema_1.ObjectTypes.Titles),
59
- title: title ? inlineContentsFromJATSTitle(title) : undefined,
60
- subtitle: subtitle ? inlineContentsFromJATSTitle(subtitle) : undefined,
61
- runningTitle: runningTitle
54
+ const manuscriptMeta = Object.assign({ title: title ? inlineContentsFromJATSTitle(title) : undefined, subtitle: subtitle ? inlineContentsFromJATSTitle(subtitle) : undefined, runningTitle: runningTitle
62
55
  ? inlineContentsFromJATSTitle(runningTitle)
63
- : undefined,
64
- };
56
+ : undefined }, jats_front_parser_1.jatsFrontParser.parseCounts(articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('counts')));
65
57
  const { affiliations, affiliationIDs } = jats_front_parser_1.jatsFrontParser.parseAffiliationNodes([
66
58
  ...front.querySelectorAll('article-meta > contrib-group > aff'),
67
59
  ]);
@@ -81,7 +73,6 @@ const parseJATSFront = async (front) => {
81
73
  const manuscript = Object.assign(Object.assign(Object.assign({}, (0, builders_1.buildManuscript)()), manuscriptMeta), history);
82
74
  return {
83
75
  models: generateModelIDs([
84
- titles,
85
76
  manuscript,
86
77
  ...footnotes,
87
78
  ...correspondingList,
@@ -23,6 +23,7 @@ const json_schema_1 = require("@manuscripts/json-schema");
23
23
  const debug_1 = __importDefault(require("debug"));
24
24
  const prosemirror_model_1 = require("prosemirror-model");
25
25
  const w3c_xmlserializer_1 = __importDefault(require("w3c-xmlserializer"));
26
+ const citationProvider_1 = require("../lib/citationProvider");
26
27
  const html_1 = require("../lib/html");
27
28
  const styled_content_1 = require("../lib/styled-content");
28
29
  const utils_1 = require("../lib/utils");
@@ -118,9 +119,16 @@ const sortContributors = (a, b) => Number(a.priority) - Number(b.priority);
118
119
  class JATSExporter {
119
120
  constructor() {
120
121
  this.serializeToJATS = async (fragment, modelMap, manuscriptID, options = {}) => {
121
- const { version = '1.2', doi, id, frontMatterOnly = false, links, idGenerator, mediaPathGenerator, } = options;
122
+ const { version = '1.2', doi, id, frontMatterOnly = false, links, idGenerator, mediaPathGenerator, citationStyle, locale, } = options;
122
123
  this.modelMap = modelMap;
123
124
  this.models = Array.from(this.modelMap.values());
125
+ if (citationStyle) {
126
+ this.citeProcEngine = citationProvider_1.CitationProvider.getEngine({
127
+ bibliographyItemsMap: this.getBibliographyItemsMap(),
128
+ citationStyle: citationStyle,
129
+ locale: locale,
130
+ });
131
+ }
124
132
  this.createSerializer();
125
133
  const versionIds = (0, jats_versions_1.selectVersionIds)(version);
126
134
  this.document = document.implementation.createDocument(null, 'article', document.implementation.createDocumentType('article', versionIds.publicId, versionIds.systemId));
@@ -238,7 +246,6 @@ class JATSExporter {
238
246
  this.buildFront = (doi, id, links) => {
239
247
  var _a, _b, _c, _d;
240
248
  const manuscript = (0, project_bundle_1.findManuscript)(this.modelMap);
241
- const titles = (0, project_bundle_1.findTitles)(this.modelMap);
242
249
  const front = this.document.createElement('front');
243
250
  const journalMeta = this.document.createElement('journal-meta');
244
251
  front.appendChild(journalMeta);
@@ -316,20 +323,20 @@ class JATSExporter {
316
323
  articleMeta.appendChild(link);
317
324
  }
318
325
  }
319
- if (titles.title) {
326
+ if (manuscript.title) {
320
327
  const element = this.document.createElement('article-title');
321
- this.setTitleContent(element, titles.title);
328
+ this.setTitleContent(element, manuscript.title);
322
329
  titleGroup.appendChild(element);
323
330
  }
324
- if (titles.subtitle) {
331
+ if (manuscript.subtitle) {
325
332
  const element = this.document.createElement('subtitle');
326
- this.setTitleContent(element, titles.subtitle);
333
+ this.setTitleContent(element, manuscript.subtitle);
327
334
  titleGroup.appendChild(element);
328
335
  }
329
- if (titles.runningTitle) {
336
+ if (manuscript.runningTitle) {
330
337
  const element = this.document.createElement('alt-title');
331
338
  element.setAttribute('alt-title-type', 'right-running');
332
- this.setTitleContent(element, titles.runningTitle);
339
+ this.setTitleContent(element, manuscript.runningTitle);
333
340
  titleGroup.appendChild(element);
334
341
  }
335
342
  const supplements = [...this.modelMap.values()].filter((model) => model.objectType === json_schema_1.ObjectTypes.Supplement);
@@ -599,7 +606,6 @@ class JATSExporter {
599
606
  this.createSerializer = () => {
600
607
  const getModel = (id) => id ? this.modelMap.get(id) : undefined;
601
608
  const nodes = {
602
- title: () => '',
603
609
  affiliations_section: () => '',
604
610
  contributors_section: () => '',
605
611
  table_element_footer: () => ['table-wrap-foot', 0],
@@ -645,7 +651,10 @@ class JATSExporter {
645
651
  const xref = this.document.createElement('xref');
646
652
  xref.setAttribute('ref-type', 'bibr');
647
653
  xref.setAttribute('rid', rids.map((item) => normalizeID(item.bibliographyItem)).join(' '));
648
- if (node.attrs.contents) {
654
+ if (this.citeProcEngine) {
655
+ xref.textContent = this.generateCitationContent(node);
656
+ }
657
+ else if (node.attrs.contents) {
649
658
  const text = (0, html_1.textFromHTML)(node.attrs.contents);
650
659
  if (text !== null && text.length) {
651
660
  xref.textContent = text;
@@ -1575,6 +1584,25 @@ class JATSExporter {
1575
1584
  return name;
1576
1585
  };
1577
1586
  }
1587
+ getBibliographyItemsMap() {
1588
+ const map = new Map();
1589
+ this.modelMap.forEach((model) => {
1590
+ if (model.objectType === json_schema_1.ObjectTypes.BibliographyItem) {
1591
+ map.set(model._id, model);
1592
+ }
1593
+ });
1594
+ return map;
1595
+ }
1596
+ generateCitationContent(node) {
1597
+ var _a;
1598
+ const citationItems = (_a = node.attrs.embeddedCitationItems) === null || _a === void 0 ? void 0 : _a.map(({ bibliographyItem }) => ({
1599
+ id: bibliographyItem,
1600
+ }));
1601
+ return this.citeProcEngine.previewCitationCluster({
1602
+ citationID: node.attrs.rid,
1603
+ citationItems: citationItems,
1604
+ }, [], [], 'text');
1605
+ }
1578
1606
  buildKeywords(articleMeta) {
1579
1607
  const keywords = [...this.modelMap.values()].filter((model) => model.objectType === json_schema_1.ObjectTypes.Keyword);
1580
1608
  const keywordGroups = new Map();
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /*!
3
+ * © 2023 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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
18
+ return (mod && mod.__esModule) ? mod : { "default": mod };
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.CitationProvider = void 0;
22
+ const citeproc_1 = __importDefault(require("citeproc"));
23
+ const defaultLocale_1 = __importDefault(require("./defaultLocale"));
24
+ class CitationProvider {
25
+ constructor() {
26
+ }
27
+ static getEngine(props) {
28
+ if (!CitationProvider.engine) {
29
+ CitationProvider.engine = CitationProvider.createCiteProcEngine(props);
30
+ }
31
+ return CitationProvider.engine;
32
+ }
33
+ static createCiteProcEngine(props) {
34
+ const { bibliographyItemsMap, citationStyle, locale } = props;
35
+ return new citeproc_1.default.Engine({
36
+ retrieveItem: (id) => this.retrieveBibliographyItem(id, bibliographyItemsMap),
37
+ retrieveLocale: () => locale || defaultLocale_1.default,
38
+ }, citationStyle, 'en-US', false);
39
+ }
40
+ static retrieveBibliographyItem(id, map) {
41
+ const item = map.get(id);
42
+ return Object.assign(Object.assign({}, item), { id, type: (item === null || item === void 0 ? void 0 : item.type) || 'article-journal' });
43
+ }
44
+ static recreateEngine(props) {
45
+ CitationProvider.engine = CitationProvider.createCiteProcEngine(props);
46
+ return CitationProvider.engine;
47
+ }
48
+ }
49
+ exports.CitationProvider = CitationProvider;
50
+ CitationProvider.engine = null;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = '<?xml version="1.0" encoding="utf-8"?><locale xmlns="http://purl.org/net/xbiblio/csl" version="1.0" xml:lang="en-US"><info><translator><name>Andrew Dunning</name></translator><translator><name>Sebastian Karcher</name></translator><translator><name>Rintze M. Zelle</name></translator><translator><name>Denis Meier</name></translator><translator><name>Brenton M. Wiernik</name></translator><rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights><updated>2015-10-10T23:31:02+00:00</updated></info><style-options punctuation-in-quote="true"/><date form="text"><date-part name="month" suffix=" "/><date-part name="day" suffix=", "/><date-part name="year"/></date><date form="numeric"><date-part name="month" form="numeric-leading-zeros" suffix="/"/><date-part name="day" form="numeric-leading-zeros" suffix="/"/><date-part name="year"/></date><terms><term name="advance-online-publication">advance online publication</term><term name="album">album</term><term name="audio-recording">audio recording</term><term name="film">film</term><term name="henceforth">henceforth</term><term name="loc-cit">loc. cit.</term><!-- like ibid., the abbreviated form is the regular form --><term name="no-place">no place</term><term name="no-place" form="short">n.p.</term><term name="no-publisher">no publisher</term><!-- sine nomine --><term name="no-publisher" form="short">n.p.</term><term name="on">on</term><term name="op-cit">op. cit.</term><!-- like ibid., the abbreviated form is the regular form --><term name="original-work-published">original work published</term><term name="personal-communication">personal communication</term><term name="podcast">podcast</term><term name="podcast-episode">podcast episode</term><term name="preprint">preprint</term><term name="radio-broadcast">radio broadcast</term><term name="radio-series">radio series</term><term name="radio-series-episode">radio series episode</term><term name="special-issue">special issue</term><term name="special-section">special section</term><term name="television-broadcast">television broadcast</term><term name="television-series">television series</term><term name="television-series-episode">television series episode</term><term name="video">video</term><term name="working-paper">working paper</term><term name="accessed">accessed</term><term name="and">and</term><term name="and others">and others</term><term name="anonymous">anonymous</term><term name="anonymous" form="short">anon.</term><term name="at">at</term><term name="available at">available at</term><term name="by">by</term><term name="circa">circa</term><term name="circa" form="short">c.</term><term name="cited">cited</term><term name="edition"><single>edition</single><multiple>editions</multiple></term><term name="edition" form="short">ed.</term><term name="et-al">et al.</term><term name="forthcoming">forthcoming</term><term name="from">from</term><term name="ibid">ibid.</term><term name="in">in</term><term name="in press">in press</term><term name="internet">internet</term><term name="letter">letter</term><term name="no date">no date</term><term name="no date" form="short">n.d.</term><term name="online">online</term><term name="presented at">presented at the</term><term name="reference"><single>reference</single><multiple>references</multiple></term><term name="reference" form="short"><single>ref.</single><multiple>refs.</multiple></term><term name="retrieved">retrieved</term><term name="scale">scale</term><term name="version">version</term><!-- LONG ITEM TYPE FORMS --><term name="article">preprint</term><term name="article-journal">journal article</term><term name="article-magazine">magazine article</term><term name="article-newspaper">newspaper article</term><term name="bill">bill</term><!-- book is in the list of locator terms --><term name="broadcast">broadcast</term><!-- chapter is in the list of locator terms --><term name="classic">classic</term><term name="collection">collection</term><term name="dataset">dataset</term><term name="document">document</term><term name="entry">entry</term><term name="entry-dictionary">dictionary entry</term><term name="entry-encyclopedia">encyclopedia entry</term><term name="event">event</term><!-- figure is in the list of locator terms --><term name="graphic">graphic</term><term name="hearing">hearing</term><term name="interview">interview</term><term name="legal_case">legal case</term><term name="legislation">legislation</term><term name="manuscript">manuscript</term><term name="map">map</term><term name="motion_picture">video recording</term><term name="musical_score">musical score</term><term name="pamphlet">pamphlet</term><term name="paper-conference">conference paper</term><term name="patent">patent</term><term name="performance">performance</term><term name="periodical">periodical</term><term name="personal_communication">personal communication</term><term name="post">post</term><term name="post-weblog">blog post</term><term name="regulation">regulation</term><term name="report">report</term><term name="review">review</term><term name="review-book">book review</term><term name="software">software</term><term name="song">audio recording</term><term name="speech">presentation</term><term name="standard">standard</term><term name="thesis">thesis</term><term name="treaty">treaty</term><term name="webpage">webpage</term><!-- SHORT ITEM TYPE FORMS --><term name="article-journal" form="short">journal art.</term><term name="article-magazine" form="short">mag. art.</term><term name="article-newspaper" form="short">newspaper art.</term><!-- book is in the list of locator terms --><!-- chapter is in the list of locator terms --><term name="document" form="short">doc.</term><!-- figure is in the list of locator terms --><term name="graphic" form="short">graph.</term><term name="interview" form="short">interv.</term><term name="manuscript" form="short">MS</term><term name="motion_picture" form="short">video rec.</term><term name="report" form="short">rep.</term><term name="review" form="short">rev.</term><term name="review-book" form="short">bk. rev.</term><term name="song" form="short">audio rec.</term><!-- HISTORICAL ERA TERMS --><term name="ad">AD</term><term name="bc">BC</term><term name="bce">BCE</term><term name="ce">CE</term><!-- PUNCTUATION --><term name="open-quote">“</term><term name="close-quote">”</term><term name="open-inner-quote">‘</term><term name="close-inner-quote">’</term><term name="page-range-delimiter">–</term><term name="colon">:</term><term name="comma">,</term><term name="semicolon">;</term><!-- ORDINALS --><term name="ordinal">th</term><term name="ordinal-01">st</term><term name="ordinal-02">nd</term><term name="ordinal-03">rd</term><term name="ordinal-11">th</term><term name="ordinal-12">th</term><term name="ordinal-13">th</term><!-- LONG ORDINALS --><term name="long-ordinal-01">first</term><term name="long-ordinal-02">second</term><term name="long-ordinal-03">third</term><term name="long-ordinal-04">fourth</term><term name="long-ordinal-05">fifth</term><term name="long-ordinal-06">sixth</term><term name="long-ordinal-07">seventh</term><term name="long-ordinal-08">eighth</term><term name="long-ordinal-09">ninth</term><term name="long-ordinal-10">tenth</term><!-- LONG LOCATOR FORMS --><term name="act"><single>act</single><multiple>acts</multiple></term><term name="appendix"><single>appendix</single><multiple>appendices</multiple></term><term name="article-locator"><single>article</single><multiple>articles</multiple></term><term name="canon"><single>canon</single><multiple>canons</multiple></term><term name="elocation"><single>location</single><multiple>locations</multiple></term><term name="equation"><single>equation</single><multiple>equations</multiple></term><term name="rule"><single>rule</single><multiple>rules</multiple></term><term name="scene"><single>scene</single><multiple>scenes</multiple></term><term name="table"><single>table</single><multiple>tables</multiple></term><term name="timestamp"><!-- generally blank --><single></single><multiple></multiple></term><term name="title-locator"><single>title</single><multiple>titles</multiple></term><term name="book"><single>book</single><multiple>books</multiple></term><term name="chapter"><single>chapter</single><multiple>chapters</multiple></term><term name="column"><single>column</single><multiple>columns</multiple></term><term name="figure"><single>figure</single><multiple>figures</multiple></term><term name="folio"><single>folio</single><multiple>folios</multiple></term><term name="issue"><single>number</single><multiple>numbers</multiple></term><term name="line"><single>line</single><multiple>lines</multiple></term><term name="note"><single>note</single><multiple>notes</multiple></term><term name="opus"><single>opus</single><multiple>opera</multiple></term><term name="page"><single>page</single><multiple>pages</multiple></term><term name="number-of-pages"><single>page</single><multiple>pages</multiple></term><term name="paragraph"><single>paragraph</single><multiple>paragraphs</multiple></term><term name="part"><single>part</single><multiple>parts</multiple></term><term name="section"><single>section</single><multiple>sections</multiple></term><term name="sub-verbo"><single>sub verbo</single><multiple>sub verbis</multiple></term><term name="verse"><single>verse</single><multiple>verses</multiple></term><term name="volume"><single>volume</single><multiple>volumes</multiple></term><!-- SHORT LOCATOR FORMS --><term name="appendix" form="short"><single>app.</single><multiple>apps.</multiple></term><term name="article-locator" form="short"><single>art.</single><multiple>arts.</multiple></term><term name="elocation" form="short"><single>loc.</single><multiple>locs.</multiple></term><term name="equation" form="short"><single>eq.</single><multiple>eqs.</multiple></term><term name="rule" form="short"><single>r.</single><multiple>rr.</multiple></term><term name="scene" form="short"><single>sc.</single><multiple>scs.</multiple></term><term name="table" form="short"><single>tbl.</single><multiple>tbls.</multiple></term><term name="timestamp" form="short"><!-- generally blank --><single></single><multiple></multiple></term><term name="title-locator" form="short"><single>tit.</single><multiple>tits.</multiple></term><term name="book" form="short"><single>bk.</single><multiple>bks.</multiple></term><term name="chapter" form="short"><single>chap.</single><multiple>chaps.</multiple></term><term name="column" form="short"><single>col.</single><multiple>cols.</multiple></term><term name="figure" form="short"><single>fig.</single><multiple>figs.</multiple></term><term name="folio" form="short"><single>fol.</single><multiple>fols.</multiple></term><term name="issue" form="short"><single>no.</single><multiple>nos.</multiple></term><term name="line" form="short"><single>l.</single><multiple>ll.</multiple></term><term name="note" form="short"><single>n.</single><multiple>nn.</multiple></term><term name="opus" form="short"><single>op.</single><multiple>opp.</multiple></term><term name="page" form="short"><single>p.</single><multiple>pp.</multiple></term><term name="number-of-pages" form="short"><single>p.</single><multiple>pp.</multiple></term><term name="paragraph" form="short"><single>para.</single><multiple>paras.</multiple></term><term name="part" form="short"><single>pt.</single><multiple>pts.</multiple></term><term name="section" form="short"><single>sec.</single><multiple>secs.</multiple></term><term name="sub-verbo" form="short"><single>s.v.</single><multiple>s.vv.</multiple></term><term name="verse" form="short"><single>v.</single><multiple>vv.</multiple></term><term name="volume" form="short"><single>vol.</single><multiple>vols.</multiple></term><!-- SYMBOL LOCATOR FORMS --><term name="paragraph" form="symbol"><single>¶</single><multiple>¶¶</multiple></term><term name="section" form="symbol"><single>§</single><multiple>§§</multiple></term><!-- LONG ROLE FORMS --><term name="chair"><single>chair</single><multiple>chairs</multiple></term><term name="compiler"><single>compiler</single><multiple>compilers</multiple></term><term name="contributor"><single>contributor</single><multiple>contributors</multiple></term><term name="curator"><single>curator</single><multiple>curators</multiple></term><term name="executive-producer"><single>executive producer</single><multiple>executive producers</multiple></term><term name="guest"><single>guest</single><multiple>guests</multiple></term><term name="host"><single>host</single><multiple>hosts</multiple></term><term name="narrator"><single>narrator</single><multiple>narrators</multiple></term><term name="organizer"><single>organizer</single><multiple>organizers</multiple></term><term name="performer"><single>performer</single><multiple>performers</multiple></term><term name="producer"><single>producer</single><multiple>producers</multiple></term><term name="script-writer"><single>writer</single><multiple>writers</multiple></term><term name="series-creator"><single>series creator</single><multiple>series creators</multiple></term><term name="director"><single>director</single><multiple>directors</multiple></term><term name="editor"><single>editor</single><multiple>editors</multiple></term><term name="editorial-director"><single>editor</single><multiple>editors</multiple></term><term name="illustrator"><single>illustrator</single><multiple>illustrators</multiple></term><term name="translator"><single>translator</single><multiple>translators</multiple></term><term name="editortranslator"><single>editor &amp; translator</single><multiple>editors &amp; translators</multiple></term><!-- SHORT ROLE FORMS --><term name="compiler" form="short"><single>comp.</single><multiple>comps.</multiple></term><term name="contributor" form="short"><single>contrib.</single><multiple>contribs.</multiple></term><term name="curator" form="short"><single>cur.</single><multiple>curs.</multiple></term><term name="executive-producer" form="short"><single>exec. prod.</single><multiple>exec. prods.</multiple></term><term name="narrator" form="short"><single>narr.</single><multiple>narrs.</multiple></term><term name="organizer" form="short"><single>org.</single><multiple>orgs.</multiple></term><term name="performer" form="short"><single>perf.</single><multiple>perfs.</multiple></term><term name="producer" form="short"><single>prod.</single><multiple>prods.</multiple></term><term name="script-writer" form="short"><single>writ.</single><multiple>writs.</multiple></term><term name="series-creator" form="short"><single>cre.</single><multiple>cres.</multiple></term><term name="director" form="short"><single>dir.</single><multiple>dirs.</multiple></term><term name="editor" form="short"><single>ed.</single><multiple>eds.</multiple></term><term name="editorial-director" form="short"><single>ed.</single><multiple>eds.</multiple></term><term name="illustrator" form="short"><single>ill.</single><multiple>ills.</multiple></term><term name="translator" form="short"><single>tran.</single><multiple>trans.</multiple></term><term name="editortranslator" form="short"><single>ed. &amp; tran.</single><multiple>eds. &amp; trans.</multiple></term><!-- VERB ROLE FORMS --><term name="chair" form="verb">chaired by</term><term name="compiler" form="verb">compiled by</term><term name="contributor" form="verb">with</term><term name="curator" form="verb">curated by</term><term name="executive-producer" form="verb">executive produced by</term><term name="guest" form="verb">with guest</term><term name="host" form="verb">hosted by</term><term name="narrator" form="verb">narrated by</term><term name="organizer" form="verb">organized by</term><term name="performer" form="verb">performed by</term><term name="producer" form="verb">produced by</term><term name="script-writer" form="verb">written by</term><term name="series-creator" form="verb">created by</term><term name="container-author" form="verb">by</term><term name="director" form="verb">directed by</term><term name="editor" form="verb">edited by</term><term name="editorial-director" form="verb">edited by</term><term name="illustrator" form="verb">illustrated by</term><term name="interviewer" form="verb">interview by</term><term name="recipient" form="verb">to</term><term name="reviewed-author" form="verb">by</term><term name="translator" form="verb">translated by</term><term name="editortranslator" form="verb">edited &amp; translated by</term><!-- SHORT VERB ROLE FORMS --><term name="compiler" form="verb-short">comp. by</term><term name="contributor" form="verb-short">w.</term><term name="curator" form="verb-short">cur. by</term><term name="executive-producer" form="verb-short">exec. prod. by</term><term name="guest" form="verb-short">w. guest</term><term name="host" form="verb-short">hosted by</term><term name="narrator" form="verb-short">narr. by</term><term name="organizer" form="verb-short">org. by</term><term name="performer" form="verb-short">perf. by</term><term name="producer" form="verb-short">prod. by</term><term name="script-writer" form="verb-short">writ. by</term><term name="series-creator" form="verb-short">cre. by</term><term name="director" form="verb-short">dir. by</term><term name="editor" form="verb-short">ed. by</term><term name="editorial-director" form="verb-short">ed. by</term><term name="illustrator" form="verb-short">illus. by</term><term name="translator" form="verb-short">trans. by</term><term name="editortranslator" form="verb-short">ed. &amp; trans. by</term><!-- LONG MONTH FORMS --><term name="month-01">January</term><term name="month-02">February</term><term name="month-03">March</term><term name="month-04">April</term><term name="month-05">May</term><term name="month-06">June</term><term name="month-07">July</term><term name="month-08">August</term><term name="month-09">September</term><term name="month-10">October</term><term name="month-11">November</term><term name="month-12">December</term><!-- SHORT MONTH FORMS --><term name="month-01" form="short">Jan.</term><term name="month-02" form="short">Feb.</term><term name="month-03" form="short">Mar.</term><term name="month-04" form="short">Apr.</term><term name="month-05" form="short">May</term><term name="month-06" form="short">Jun.</term><term name="month-07" form="short">Jul.</term><term name="month-08" form="short">Aug.</term><term name="month-09" form="short">Sep.</term><term name="month-10" form="short">Oct.</term><term name="month-11" form="short">Nov.</term><term name="month-12" form="short">Dec.</term><!-- SEASONS --><term name="season-01">Spring</term><term name="season-02">Summer</term><term name="season-03">Autumn</term><term name="season-04">Winter</term></terms></locale>';
@@ -85,7 +85,6 @@ const table_element_1 = require("./nodes/table_element");
85
85
  const table_element_footer_1 = require("./nodes/table_element_footer");
86
86
  const table_row_1 = require("./nodes/table_row");
87
87
  const text_1 = require("./nodes/text");
88
- const title_1 = require("./nodes/title");
89
88
  const toc_element_1 = require("./nodes/toc_element");
90
89
  const toc_section_1 = require("./nodes/toc_section");
91
90
  __exportStar(require("./groups"), exports);
@@ -141,7 +140,6 @@ __exportStar(require("./nodes/affiliation"), exports);
141
140
  __exportStar(require("./nodes/meta_section"), exports);
142
141
  __exportStar(require("./nodes/contributor"), exports);
143
142
  __exportStar(require("./nodes/table_element_footer"), exports);
144
- __exportStar(require("./nodes/title"), exports);
145
143
  __exportStar(require("./nodes/affiliations_section"), exports);
146
144
  __exportStar(require("./nodes/contributors_section"), exports);
147
145
  exports.schema = new prosemirror_model_1.Schema({
@@ -218,7 +216,6 @@ exports.schema = new prosemirror_model_1.Schema({
218
216
  meta_section: meta_section_1.metaSection,
219
217
  contributor: contributor_1.contributor,
220
218
  table_element_footer: table_element_footer_1.tableElementFooter,
221
- title: title_1.title,
222
219
  affiliations_section: affiliations_section_1.affiliationsSection,
223
220
  contributors_section: contributors_section_1.contributorsSection,
224
221
  },
@@ -17,7 +17,7 @@
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.manuscript = void 0;
19
19
  exports.manuscript = {
20
- content: 'title* (section | sections)+ meta_section',
20
+ content: '(section | sections)+ meta_section',
21
21
  attrs: {
22
22
  id: { default: '' },
23
23
  },
@@ -18,7 +18,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
18
18
  return (mod && mod.__esModule) ? mod : { "default": mod };
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.buildTitles = exports.buildElementsOrder = exports.auxiliaryObjectTypes = exports.buildStatusLabel = exports.buildJournal = exports.buildAttribution = exports.buildInlineStyle = exports.buildContributorRole = exports.buildContribution = exports.buildHighlightMarker = exports.buildHighlight = exports.buildColor = exports.buildParagraph = exports.buildSection = exports.buildCorresp = exports.buildFootnotesOrder = exports.buildFootnote = exports.buildInlineMathFragment = exports.buildValidation = exports.buildNote = exports.buildComment = exports.buildUserProfileAffiliation = exports.buildSupplementaryMaterial = exports.buildAffiliation = exports.buildFigure = exports.buildLibraryCollection = exports.buildManuscriptKeyword = exports.buildKeywordGroup = exports.buildKeyword = exports.buildCitation = exports.buildEmbeddedCitationItem = exports.buildAuxiliaryObjectReference = exports.buildBibliographicDate = exports.buildBibliographicName = exports.buildBibliographyItem = exports.buildContributor = exports.buildManuscript = exports.buildProject = exports.DEFAULT_PAGE_LAYOUT = exports.DEFAULT_BUNDLE = void 0;
21
+ exports.buildElementsOrder = exports.auxiliaryObjectTypes = exports.buildStatusLabel = exports.buildJournal = exports.buildAttribution = exports.buildInlineStyle = exports.buildContributorRole = exports.buildContribution = exports.buildHighlightMarker = exports.buildHighlight = exports.buildColor = exports.buildParagraph = exports.buildSection = exports.buildCorresp = exports.buildFootnotesOrder = exports.buildFootnote = exports.buildInlineMathFragment = exports.buildValidation = exports.buildNote = exports.buildComment = exports.buildUserProfileAffiliation = exports.buildSupplementaryMaterial = exports.buildAffiliation = exports.buildFigure = exports.buildLibraryCollection = exports.buildManuscriptKeyword = exports.buildKeywordGroup = exports.buildKeyword = exports.buildCitation = exports.buildEmbeddedCitationItem = exports.buildAuxiliaryObjectReference = exports.buildBibliographicDate = exports.buildBibliographicName = exports.buildBibliographyItem = exports.buildContributor = exports.buildManuscript = exports.buildProject = exports.DEFAULT_PAGE_LAYOUT = exports.DEFAULT_BUNDLE = void 0;
22
22
  const json_schema_1 = require("@manuscripts/json-schema");
23
23
  const w3c_xmlserializer_1 = __importDefault(require("w3c-xmlserializer"));
24
24
  const schema_1 = require("../schema");
@@ -35,9 +35,10 @@ const buildProject = (owner) => ({
35
35
  title: '',
36
36
  });
37
37
  exports.buildProject = buildProject;
38
- const buildManuscript = () => ({
38
+ const buildManuscript = (title = '') => ({
39
39
  _id: (0, id_1.generateID)(json_schema_1.ObjectTypes.Manuscript),
40
40
  objectType: json_schema_1.ObjectTypes.Manuscript,
41
+ title,
41
42
  });
42
43
  exports.buildManuscript = buildManuscript;
43
44
  const buildContributor = (bibliographicName, role = 'author', priority = 0, userID, invitationID) => ({
@@ -290,9 +291,3 @@ const buildElementsOrder = (elementType) => ({
290
291
  elements: [],
291
292
  });
292
293
  exports.buildElementsOrder = buildElementsOrder;
293
- const buildTitles = (title) => ({
294
- _id: (0, id_1.generateID)(json_schema_1.ObjectTypes.Titles),
295
- objectType: json_schema_1.ObjectTypes.Titles,
296
- title: title || '',
297
- });
298
- exports.buildTitles = buildTitles;
@@ -35,7 +35,6 @@ const debug_1 = __importDefault(require("debug"));
35
35
  const prosemirror_model_1 = require("prosemirror-model");
36
36
  const errors_1 = require("../errors");
37
37
  const schema_1 = require("../schema");
38
- const builders_1 = require("./builders");
39
38
  const highlight_markers_1 = require("./highlight-markers");
40
39
  const id_1 = require("./id");
41
40
  const object_types_1 = require("./object-types");
@@ -116,11 +115,6 @@ class Decoder {
116
115
  rootSectionNodes.unshift(node);
117
116
  }
118
117
  }
119
- createTitleNode() {
120
- const titles = (0, exports.getModelsByType)(this.modelMap, json_schema_1.ObjectTypes.Titles)[0] ||
121
- (0, builders_1.buildTitles)();
122
- return this.decode(titles);
123
- }
124
118
  createRootSectionNodes() {
125
119
  let rootSections = getSections(this.modelMap).filter((section) => !section.path || section.path.length <= 1);
126
120
  rootSections = this.addGeneratedLabels(rootSections);
@@ -153,14 +147,6 @@ class Decoder {
153
147
  constructor(modelMap, allowMissingElements = false) {
154
148
  this.comments = new Map();
155
149
  this.creators = {
156
- [json_schema_1.ObjectTypes.Titles]: (data) => {
157
- const model = data;
158
- return this.parseContents(model.title, 'div', undefined, {
159
- topNode: schema_1.schema.nodes.title.create({
160
- id: model._id,
161
- }),
162
- });
163
- },
164
150
  [json_schema_1.ObjectTypes.BibliographyElement]: (data) => {
165
151
  var _a;
166
152
  const model = data;
@@ -645,14 +631,9 @@ class Decoder {
645
631
  };
646
632
  this.getModel = (id) => this.modelMap.get(id);
647
633
  this.createArticleNode = (manuscriptID) => {
648
- const titlesNode = this.createTitleNode();
649
634
  const rootSectionNodes = this.createRootSectionNodes();
650
635
  const metaSectionNode = this.createMetaSectionNode();
651
- const contents = [
652
- titlesNode,
653
- ...rootSectionNodes,
654
- metaSectionNode,
655
- ];
636
+ const contents = [...rootSectionNodes, metaSectionNode];
656
637
  return schema_1.schema.nodes.manuscript.create({
657
638
  id: manuscriptID || this.getManuscriptID(),
658
639
  }, contents);
@@ -263,12 +263,6 @@ function figureElementEncoder(node) {
263
263
  };
264
264
  }
265
265
  const encoders = {
266
- title: (node) => ({
267
- title: node.attrs.title,
268
- subtitle: node.attrs.subtitle,
269
- runningTitle: node.attrs.runningTitle,
270
- _id: node.attrs._id,
271
- }),
272
266
  bibliography_element: (node) => ({
273
267
  elementType: 'div',
274
268
  contents: '',
@@ -152,7 +152,6 @@ class HTMLTransformer {
152
152
  this.buildFront = () => {
153
153
  const manuscript = (0, project_bundle_1.findManuscript)(this.modelMap);
154
154
  const journal = (0, project_bundle_1.findJournal)(this.modelMap);
155
- const titles = (0, project_bundle_1.findTitles)(this.modelMap);
156
155
  if (!manuscript) {
157
156
  throw new Error('Manuscript not found in project modelMap');
158
157
  }
@@ -171,14 +170,14 @@ class HTMLTransformer {
171
170
  }
172
171
  const articleMeta = this.document.createElement('div');
173
172
  front.appendChild(articleMeta);
174
- const title = this.document.createElement('h1');
175
- if (titles.title) {
176
- title.innerHTML = titles.title;
173
+ const articleTitle = this.document.createElement('h1');
174
+ if (manuscript.title) {
175
+ articleTitle.innerHTML = manuscript.title;
177
176
  }
178
177
  if (journal === null || journal === void 0 ? void 0 : journal.title) {
179
- title.setAttribute('data-journal', journal.title);
178
+ articleTitle.setAttribute('data-journal', journal.title);
180
179
  }
181
- articleMeta.appendChild(title);
180
+ articleMeta.appendChild(articleTitle);
182
181
  if (manuscript.DOI) {
183
182
  const articleID = this.document.createElement('article-id');
184
183
  articleID.setAttribute('pub-id-type', 'doi');
@@ -56,10 +56,14 @@ const buildTargets = (fragment, manuscript) => {
56
56
  const targets = new Map();
57
57
  const figures = [];
58
58
  fragment.forEach((node) => {
59
- if (node.type === node.type.schema.nodes.graphical_abstract_section) {
60
- node.forEach((item) => {
61
- if (item.type === node.type.schema.nodes.figure_element) {
62
- figures.push(item.attrs.id);
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
+ });
63
67
  }
64
68
  });
65
69
  }
@@ -32,7 +32,7 @@ const textSnippet = (node, max = 100) => {
32
32
  text += ' ';
33
33
  }
34
34
  });
35
- return text.substring(0, max);
35
+ return text.substr(0, max);
36
36
  };
37
37
  const snippetOfNodeType = (node, nodeType) => {
38
38
  for (const child of (0, utils_1.iterateChildren)(node, true)) {
@@ -43,10 +43,8 @@ const snippetOfNodeType = (node, nodeType) => {
43
43
  return null;
44
44
  };
45
45
  const nodeTitle = (node) => {
46
- const nodes = schema_1.schema.nodes;
46
+ const nodes = node.type.schema.nodes;
47
47
  switch (node.type) {
48
- case nodes.manuscript:
49
- return snippetOfNodeType(node, nodes.title);
50
48
  case nodes.section:
51
49
  case nodes.bibliography_section:
52
50
  case nodes.footnotes_section:
@@ -74,9 +72,9 @@ const nodeTitle = (node) => {
74
72
  };
75
73
  exports.nodeTitle = nodeTitle;
76
74
  const nodeTitlePlaceholder = (nodeType) => {
77
- const nodes = schema_1.schema.nodes;
75
+ const nodes = nodeType.schema.nodes;
78
76
  switch (nodeType) {
79
- case nodes.manuscript:
77
+ case nodes.title:
80
78
  return 'Untitled Manuscript';
81
79
  case nodes.section:
82
80
  return 'Untitled Section';
@@ -57,7 +57,6 @@ exports.nodeTypesMap = new Map([
57
57
  [schema_1.schema.nodes.affiliation, json_schema_1.ObjectTypes.Affiliation],
58
58
  [schema_1.schema.nodes.contributor, json_schema_1.ObjectTypes.Contributor],
59
59
  [schema_1.schema.nodes.table_element_footer, json_schema_1.ObjectTypes.TableElementFooter],
60
- [schema_1.schema.nodes.title, json_schema_1.ObjectTypes.Titles],
61
60
  [schema_1.schema.nodes.contributors_section, json_schema_1.ObjectTypes.Section],
62
61
  [schema_1.schema.nodes.affiliations_section, json_schema_1.ObjectTypes.Section],
63
62
  ]);
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.findTitles = exports.findManuscriptById = exports.findManuscriptModelByType = exports.findJournal = exports.findManuscript = exports.parseProjectBundle = void 0;
18
+ exports.findManuscriptById = exports.findManuscriptModelByType = exports.findJournal = exports.findManuscript = exports.parseProjectBundle = void 0;
19
19
  const json_schema_1 = require("@manuscripts/json-schema");
20
20
  const decode_1 = require("./decode");
21
21
  const object_types_1 = require("./object-types");
@@ -71,24 +71,3 @@ const findManuscriptById = (modelMap, manuscriptID) => {
71
71
  throw new Error(`There is no manuscript found for the following _id (${manuscriptID})`);
72
72
  };
73
73
  exports.findManuscriptById = findManuscriptById;
74
- const isTitle = (0, object_types_1.hasObjectType)(json_schema_1.ObjectTypes.Titles);
75
- const findTitles = (modelMap) => {
76
- for (const model of modelMap.values()) {
77
- if (isTitle(model)) {
78
- return model;
79
- }
80
- }
81
- const defaultTitle = {
82
- _id: 'MPTitles:8EB79C14-9F61-483A-902F-A0B8EF5973C1',
83
- createdAt: 1538472121.690101,
84
- updatedAt: 1538472121.690101,
85
- objectType: 'MPTitles',
86
- title: 'main title',
87
- subtitle: 'subtitle',
88
- runningTitle: 'running title',
89
- manuscriptID: 'MPManuscript:E3830344-E77B-42BA-BD77-3E95489712A0',
90
- containerID: 'MPProject:1',
91
- };
92
- return defaultTitle;
93
- };
94
- exports.findTitles = findTitles;
@@ -13,7 +13,6 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { ObjectTypes, } from '@manuscripts/json-schema';
17
16
  import { DOMParser } from 'prosemirror-model';
18
17
  import { InvalidInput } from '../../errors';
19
18
  import { nodeFromHTML } from '../../lib/html';
@@ -49,16 +48,9 @@ export const parseJATSFront = async (front) => {
49
48
  const title = (_a = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > article-title')) === null || _a === void 0 ? void 0 : _a.innerHTML;
50
49
  const subtitle = (_b = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > subtitle')) === null || _b === void 0 ? void 0 : _b.innerHTML;
51
50
  const runningTitle = (_c = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > alt-title[alt-title-type="right-running"]')) === null || _c === void 0 ? void 0 : _c.innerHTML;
52
- const manuscriptMeta = Object.assign({}, jatsFrontParser.parseCounts(articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('counts')));
53
- const titles = {
54
- objectType: ObjectTypes.Titles,
55
- _id: generateID(ObjectTypes.Titles),
56
- title: title ? inlineContentsFromJATSTitle(title) : undefined,
57
- subtitle: subtitle ? inlineContentsFromJATSTitle(subtitle) : undefined,
58
- runningTitle: runningTitle
51
+ const manuscriptMeta = Object.assign({ title: title ? inlineContentsFromJATSTitle(title) : undefined, subtitle: subtitle ? inlineContentsFromJATSTitle(subtitle) : undefined, runningTitle: runningTitle
59
52
  ? inlineContentsFromJATSTitle(runningTitle)
60
- : undefined,
61
- };
53
+ : undefined }, jatsFrontParser.parseCounts(articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('counts')));
62
54
  const { affiliations, affiliationIDs } = jatsFrontParser.parseAffiliationNodes([
63
55
  ...front.querySelectorAll('article-meta > contrib-group > aff'),
64
56
  ]);
@@ -78,7 +70,6 @@ export const parseJATSFront = async (front) => {
78
70
  const manuscript = Object.assign(Object.assign(Object.assign({}, buildManuscript()), manuscriptMeta), history);
79
71
  return {
80
72
  models: generateModelIDs([
81
- titles,
82
73
  manuscript,
83
74
  ...footnotes,
84
75
  ...correspondingList,