@manuscripts/transform 4.3.53 → 4.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/jats/__tests__/jats-roundtrip.test.js +3 -3
- package/dist/cjs/jats/exporter/jats-exporter.js +3 -0
- package/dist/cjs/jats/importer/jats-dom-parser.js +41 -1
- package/dist/cjs/schema/index.js +9 -0
- package/dist/cjs/schema/nodes/headshot_element.js +38 -0
- package/dist/cjs/schema/nodes/headshot_grid.js +37 -0
- package/dist/cjs/schema/nodes/headshot_image.js +51 -0
- package/dist/cjs/transformer/node-names.js +2 -0
- package/dist/cjs/transformer/node-title.js +6 -0
- package/dist/cjs/version.js +1 -1
- package/dist/es/jats/__tests__/jats-roundtrip.test.js +3 -3
- package/dist/es/jats/exporter/jats-exporter.js +3 -0
- package/dist/es/jats/importer/jats-dom-parser.js +41 -1
- package/dist/es/schema/index.js +9 -0
- package/dist/es/schema/nodes/headshot_element.js +34 -0
- package/dist/es/schema/nodes/headshot_grid.js +33 -0
- package/dist/es/schema/nodes/headshot_image.js +48 -0
- package/dist/es/transformer/node-names.js +2 -0
- package/dist/es/transformer/node-title.js +6 -0
- package/dist/es/version.js +1 -1
- package/dist/types/jats/__tests__/utils.d.ts +1 -1
- package/dist/types/schema/index.d.ts +3 -0
- package/dist/types/schema/nodes/headshot_element.d.ts +25 -0
- package/dist/types/schema/nodes/headshot_grid.d.ts +24 -0
- package/dist/types/schema/nodes/headshot_image.d.ts +26 -0
- package/dist/types/schema/types.d.ts +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +22 -21
- package/src/errors.ts +28 -0
- package/src/getVersion.ts +21 -0
- package/src/index.ts +28 -0
- package/src/jats/__tests__/__fixtures__/debug-example.xml +136 -0
- package/src/jats/__tests__/__fixtures__/jats-abstract-no-body.xml +163 -0
- package/src/jats/__tests__/__fixtures__/jats-citations.xml +472 -0
- package/src/jats/__tests__/__fixtures__/jats-comments.xml +46 -0
- package/src/jats/__tests__/__fixtures__/jats-document.xml +134 -0
- package/src/jats/__tests__/__fixtures__/jats-example-doc.xml +1235 -0
- package/src/jats/__tests__/__fixtures__/jats-example-front-only.xml +26 -0
- package/src/jats/__tests__/__fixtures__/jats-example-full.xml +209 -0
- package/src/jats/__tests__/__fixtures__/jats-example-no-back.xml +156 -0
- package/src/jats/__tests__/__fixtures__/jats-example-no-body.xml +91 -0
- package/src/jats/__tests__/__fixtures__/jats-example.xml +221 -0
- package/src/jats/__tests__/__fixtures__/jats-fn-group.xml +60 -0
- package/src/jats/__tests__/__fixtures__/jats-import-no-refs.xml +1077 -0
- package/src/jats/__tests__/__fixtures__/jats-import.xml +1578 -0
- package/src/jats/__tests__/__fixtures__/jats-roundtrip.xml +133 -0
- package/src/jats/__tests__/__fixtures__/jats-tables-example.xml +2043 -0
- package/src/jats/__tests__/__fixtures__/math-fragment.xml +12 -0
- package/src/jats/__tests__/__snapshots__/citeproc.test.ts.snap +57 -0
- package/src/jats/__tests__/__snapshots__/create-article-node.test.ts.snap +65 -0
- package/src/jats/__tests__/__snapshots__/jats-exporter.test.ts.snap +7 -0
- package/src/jats/__tests__/__snapshots__/jats-importer.test.ts.snap +59796 -0
- package/src/jats/__tests__/__snapshots__/jats-roundtrip.test.ts.snap +18 -0
- package/src/jats/__tests__/citations.ts +25 -0
- package/src/jats/__tests__/citeproc.test.ts +195 -0
- package/src/jats/__tests__/create-article-node.test.ts +29 -0
- package/src/jats/__tests__/data/section-categories.ts +212 -0
- package/src/jats/__tests__/files.ts +24 -0
- package/src/jats/__tests__/jats-exporter.test.ts +223 -0
- package/src/jats/__tests__/jats-importer.test.ts +567 -0
- package/src/jats/__tests__/jats-roundtrip.test.ts +66 -0
- package/src/jats/__tests__/utils.ts +90 -0
- package/src/jats/exporter/citeproc.ts +265 -0
- package/src/jats/exporter/jats-exporter.ts +2093 -0
- package/src/jats/exporter/jats-versions.ts +50 -0
- package/src/jats/exporter/labels.ts +101 -0
- package/src/jats/importer/create-article-node.ts +52 -0
- package/src/jats/importer/jats-comments.ts +111 -0
- package/src/jats/importer/jats-dom-parser.ts +1306 -0
- package/src/jats/importer/jats-parser-utils.ts +234 -0
- package/src/jats/importer/jats-transformations.ts +591 -0
- package/src/jats/importer/parse-jats-article.ts +106 -0
- package/src/jats/index.ts +21 -0
- package/src/jats/types.ts +16 -0
- package/src/lib/__tests__/footnotes.test.ts +36 -0
- package/src/lib/citeproc.ts +30 -0
- package/src/lib/credit-roles.ts +91 -0
- package/src/lib/deafults.ts +17 -0
- package/src/lib/footnotes.ts +85 -0
- package/src/lib/html.ts +56 -0
- package/src/lib/section-categories.ts +27 -0
- package/src/lib/utils.ts +145 -0
- package/src/lib/xml.ts +28 -0
- package/src/schema/__tests__/docs.ts +1911 -0
- package/src/schema/__tests__/groups.test.ts +61 -0
- package/src/schema/__tests__/migration.test.ts +23 -0
- package/src/schema/groups.ts +36 -0
- package/src/schema/index.ts +295 -0
- package/src/schema/marks.ts +254 -0
- package/src/schema/migration/migrate.ts +77 -0
- package/src/schema/migration/migration-script.ts +26 -0
- package/src/schema/migration/migration-scripts/1.2.5.ts +44 -0
- package/src/schema/migration/migration-scripts/2.3.22.ts +52 -0
- package/src/schema/migration/migration-scripts/3.0.12.ts +33 -0
- package/src/schema/migration/migration-scripts/3.0.21.ts +50 -0
- package/src/schema/migration/migration-scripts/3.0.30.ts +65 -0
- package/src/schema/migration/migration-scripts/3.0.31.ts +40 -0
- package/src/schema/migration/migration-scripts/3.0.41.ts +37 -0
- package/src/schema/migration/migration-scripts/3.0.55.ts +42 -0
- package/src/schema/migration/migration-scripts/3.0.56.ts +114 -0
- package/src/schema/migration/migration-scripts/4.2.13.ts +37 -0
- package/src/schema/migration/migration-scripts/4.2.15.ts +48 -0
- package/src/schema/migration/migration-scripts/4.3.23.ts +55 -0
- package/src/schema/migration/migration-scripts/4.3.34.ts +132 -0
- package/src/schema/migration/migration-scripts/4.3.35.ts +41 -0
- package/src/schema/migration/migration-scripts/index.ts +49 -0
- package/src/schema/nodes/abstracts.ts +29 -0
- package/src/schema/nodes/affiliation.ts +88 -0
- package/src/schema/nodes/affiliations.ts +30 -0
- package/src/schema/nodes/alt_text.ts +36 -0
- package/src/schema/nodes/alt_title.ts +40 -0
- package/src/schema/nodes/alt_titles_section.ts +58 -0
- package/src/schema/nodes/attachment.ts +46 -0
- package/src/schema/nodes/attachments.ts +45 -0
- package/src/schema/nodes/attribution.ts +38 -0
- package/src/schema/nodes/author_notes.ts +44 -0
- package/src/schema/nodes/award.ts +52 -0
- package/src/schema/nodes/awards.ts +45 -0
- package/src/schema/nodes/backmatter.ts +31 -0
- package/src/schema/nodes/bibliography_element.ts +58 -0
- package/src/schema/nodes/bibliography_item.ts +108 -0
- package/src/schema/nodes/bibliography_section.ts +60 -0
- package/src/schema/nodes/blockquote_element.ts +79 -0
- package/src/schema/nodes/body.ts +29 -0
- package/src/schema/nodes/box_element.ts +67 -0
- package/src/schema/nodes/caption.ts +67 -0
- package/src/schema/nodes/caption_title.ts +67 -0
- package/src/schema/nodes/citation.ts +70 -0
- package/src/schema/nodes/comment.ts +50 -0
- package/src/schema/nodes/comments.ts +28 -0
- package/src/schema/nodes/contributor.ts +87 -0
- package/src/schema/nodes/contributors.ts +40 -0
- package/src/schema/nodes/core_section.ts +27 -0
- package/src/schema/nodes/corresp.ts +49 -0
- package/src/schema/nodes/cross_reference.ts +64 -0
- package/src/schema/nodes/doc.ts +21 -0
- package/src/schema/nodes/embed.ts +55 -0
- package/src/schema/nodes/equation.ts +65 -0
- package/src/schema/nodes/equation_element.ts +61 -0
- package/src/schema/nodes/figure.ts +65 -0
- package/src/schema/nodes/figure_element.ts +73 -0
- package/src/schema/nodes/footnote.ts +95 -0
- package/src/schema/nodes/footnotes_element.ts +69 -0
- package/src/schema/nodes/footnotes_section.ts +61 -0
- package/src/schema/nodes/general_table_footnote.ts +42 -0
- package/src/schema/nodes/graphical_abstract_section.ts +62 -0
- package/src/schema/nodes/hard_break.ts +36 -0
- package/src/schema/nodes/headshot_element.ts +48 -0
- package/src/schema/nodes/headshot_grid.ts +46 -0
- package/src/schema/nodes/headshot_image.ts +65 -0
- package/src/schema/nodes/hero_image.ts +46 -0
- package/src/schema/nodes/highlight_marker.ts +68 -0
- package/src/schema/nodes/image_element.ts +49 -0
- package/src/schema/nodes/inline_equation.ts +68 -0
- package/src/schema/nodes/inline_footnote.ts +66 -0
- package/src/schema/nodes/keyword.ts +61 -0
- package/src/schema/nodes/keyword_group.ts +63 -0
- package/src/schema/nodes/keywords.ts +59 -0
- package/src/schema/nodes/keywords_element.ts +64 -0
- package/src/schema/nodes/link.ts +79 -0
- package/src/schema/nodes/list.ts +134 -0
- package/src/schema/nodes/listing.ts +91 -0
- package/src/schema/nodes/listing_element.ts +61 -0
- package/src/schema/nodes/long_desc.ts +36 -0
- package/src/schema/nodes/manuscript.ts +86 -0
- package/src/schema/nodes/missing_figure.ts +59 -0
- package/src/schema/nodes/paragraph.ts +77 -0
- package/src/schema/nodes/placeholder.ts +62 -0
- package/src/schema/nodes/placeholder_element.ts +60 -0
- package/src/schema/nodes/pullquote_element.ts +81 -0
- package/src/schema/nodes/quote_image.ts +64 -0
- package/src/schema/nodes/section.ts +69 -0
- package/src/schema/nodes/section_label.ts +39 -0
- package/src/schema/nodes/section_title.ts +58 -0
- package/src/schema/nodes/subtitle.ts +40 -0
- package/src/schema/nodes/subtitles.ts +51 -0
- package/src/schema/nodes/supplement.ts +77 -0
- package/src/schema/nodes/supplements.ts +60 -0
- package/src/schema/nodes/table.ts +144 -0
- package/src/schema/nodes/table_col.ts +76 -0
- package/src/schema/nodes/table_element.ts +67 -0
- package/src/schema/nodes/table_element_footer.ts +42 -0
- package/src/schema/nodes/text.ts +31 -0
- package/src/schema/nodes/title.ts +43 -0
- package/src/schema/nodes/trans_abstract.ts +58 -0
- package/src/schema/nodes/trans_graphical_abstract.ts +67 -0
- package/src/schema/types.ts +243 -0
- package/src/tests.ts +33 -0
- package/src/transformer/id.ts +23 -0
- package/src/transformer/index.ts +21 -0
- package/src/transformer/node-names.ts +75 -0
- package/src/transformer/node-title.ts +116 -0
- package/src/transformer/node-types.ts +39 -0
- package/src/transformer/node-validator.ts +82 -0
- package/src/types.ts +25 -0
- package/src/version.ts +1 -0
|
@@ -0,0 +1,81 @@
|
|
|
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
|
+
|
|
17
|
+
import { NodeSpec } from 'prosemirror-model'
|
|
18
|
+
|
|
19
|
+
import { ManuscriptNode } from '../types'
|
|
20
|
+
|
|
21
|
+
interface Attrs {
|
|
22
|
+
id: string
|
|
23
|
+
placeholder: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface PullquoteElementNode extends ManuscriptNode {
|
|
27
|
+
attrs: Attrs
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const pullquoteElement: NodeSpec = {
|
|
31
|
+
content: 'quote_image? text_block+ attribution',
|
|
32
|
+
attrs: {
|
|
33
|
+
id: { default: '' },
|
|
34
|
+
placeholder: { default: '' },
|
|
35
|
+
dataTracked: { default: null },
|
|
36
|
+
},
|
|
37
|
+
group: 'block element',
|
|
38
|
+
selectable: false,
|
|
39
|
+
parseDOM: [
|
|
40
|
+
{
|
|
41
|
+
tag: 'aside.pullquote',
|
|
42
|
+
getAttrs: (aside) => {
|
|
43
|
+
const dom = aside as HTMLElement
|
|
44
|
+
|
|
45
|
+
const attrs: Partial<Attrs> = {
|
|
46
|
+
id: dom.getAttribute('id') || undefined,
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const placeholder = dom.getAttribute('data-placeholder-text')
|
|
50
|
+
|
|
51
|
+
if (placeholder) {
|
|
52
|
+
attrs.placeholder = placeholder
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return attrs
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
toDOM: (node) => {
|
|
60
|
+
const pullquoteElementNode = node as PullquoteElementNode
|
|
61
|
+
|
|
62
|
+
const attrs: { [key: string]: string } = {}
|
|
63
|
+
|
|
64
|
+
if (pullquoteElementNode.attrs.id) {
|
|
65
|
+
attrs.id = pullquoteElementNode.attrs.id
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
attrs.class = 'pullquote'
|
|
69
|
+
|
|
70
|
+
if (pullquoteElementNode.attrs.placeholder) {
|
|
71
|
+
attrs['data-placeholder-text'] = pullquoteElementNode.attrs.placeholder
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return ['aside', attrs, 0]
|
|
75
|
+
},
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export const isPullquoteElement = (
|
|
79
|
+
node: ManuscriptNode
|
|
80
|
+
): node is PullquoteElementNode =>
|
|
81
|
+
node.type === node.type.schema.nodes.pullquote_element
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
|
|
17
|
+
import { NodeSpec } from 'prosemirror-model'
|
|
18
|
+
|
|
19
|
+
import { ManuscriptNode } from '../types'
|
|
20
|
+
|
|
21
|
+
export interface QuoteImageAttrs {
|
|
22
|
+
id: string
|
|
23
|
+
src: string
|
|
24
|
+
type: string
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface QuoteImageNode extends ManuscriptNode {
|
|
28
|
+
attrs: QuoteImageAttrs
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const quoteImage: NodeSpec = {
|
|
32
|
+
attrs: {
|
|
33
|
+
id: { default: '' },
|
|
34
|
+
src: { default: '' },
|
|
35
|
+
dataTracked: { default: null },
|
|
36
|
+
},
|
|
37
|
+
selectable: false,
|
|
38
|
+
group: 'block',
|
|
39
|
+
parseDOM: [
|
|
40
|
+
{
|
|
41
|
+
tag: 'figure',
|
|
42
|
+
context: 'pullquote_element/',
|
|
43
|
+
getAttrs: (dom) => {
|
|
44
|
+
const element = dom as HTMLElement
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
id: element.getAttribute('id'),
|
|
48
|
+
src: element.getAttribute('src'),
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
toDOM: (node) => {
|
|
54
|
+
const imageNode = node as QuoteImageNode
|
|
55
|
+
|
|
56
|
+
return [
|
|
57
|
+
'figure',
|
|
58
|
+
{
|
|
59
|
+
class: 'pullquote-figure',
|
|
60
|
+
id: imageNode.attrs.id,
|
|
61
|
+
},
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
|
|
17
|
+
import { NodeSpec } from 'prosemirror-model'
|
|
18
|
+
|
|
19
|
+
import { ManuscriptNode } from '../types'
|
|
20
|
+
|
|
21
|
+
interface Attrs {
|
|
22
|
+
id: string
|
|
23
|
+
category: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface SectionNode extends ManuscriptNode {
|
|
27
|
+
attrs: Attrs
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const section: NodeSpec = {
|
|
31
|
+
// NOTE: the schema needs paragraphs to be the default type, so they must explicitly come first
|
|
32
|
+
content: 'section_label? section_title (paragraph | element)* sections*',
|
|
33
|
+
attrs: {
|
|
34
|
+
id: { default: '' },
|
|
35
|
+
category: { default: '' },
|
|
36
|
+
dataTracked: { default: null },
|
|
37
|
+
},
|
|
38
|
+
group: 'block sections',
|
|
39
|
+
selectable: false,
|
|
40
|
+
parseDOM: [
|
|
41
|
+
{
|
|
42
|
+
tag: 'section',
|
|
43
|
+
getAttrs: (dom) => {
|
|
44
|
+
const element = dom as HTMLElement
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
id: element.getAttribute('id') || '',
|
|
48
|
+
category: element.getAttribute('data-category') || '',
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
toDOM: (node) => {
|
|
54
|
+
const sectionNode = node as SectionNode
|
|
55
|
+
|
|
56
|
+
const { id, category } = sectionNode.attrs
|
|
57
|
+
|
|
58
|
+
const attrs: { [key: string]: string } = { id }
|
|
59
|
+
|
|
60
|
+
if (category) {
|
|
61
|
+
attrs['data-category'] = node.attrs.category
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return ['section', attrs, 0]
|
|
65
|
+
},
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export const isSectionNode = (node: ManuscriptNode): node is SectionNode =>
|
|
69
|
+
node.type === node.type.schema.nodes.section
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
|
|
17
|
+
import { NodeSpec } from 'prosemirror-model'
|
|
18
|
+
|
|
19
|
+
import { ManuscriptNode } from '../types'
|
|
20
|
+
|
|
21
|
+
export interface SectionLabelNode extends ManuscriptNode {
|
|
22
|
+
attrs: Record<string, unknown>
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const sectionLabel: NodeSpec = {
|
|
26
|
+
content: 'inline*',
|
|
27
|
+
group: 'block',
|
|
28
|
+
attrs: { dataTracked: { default: null } },
|
|
29
|
+
selectable: false,
|
|
30
|
+
parseDOM: [{ tag: 'label' }],
|
|
31
|
+
toDOM() {
|
|
32
|
+
return ['label', 0]
|
|
33
|
+
},
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const isSectionLabelNode = (
|
|
37
|
+
node: ManuscriptNode
|
|
38
|
+
): node is SectionLabelNode =>
|
|
39
|
+
node.type === node.type.schema.nodes.section_label
|
|
@@ -0,0 +1,58 @@
|
|
|
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
|
+
|
|
17
|
+
import { NodeSpec } from 'prosemirror-model'
|
|
18
|
+
|
|
19
|
+
import { ManuscriptNode } from '../types'
|
|
20
|
+
|
|
21
|
+
export interface SectionTitleNode extends ManuscriptNode {
|
|
22
|
+
attrs: Record<string, unknown>
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const sectionTitle: NodeSpec = {
|
|
26
|
+
content: '(text | highlight_marker)*',
|
|
27
|
+
marks:
|
|
28
|
+
'italic superscript subscript smallcaps bold tracked_insert tracked_delete',
|
|
29
|
+
group: 'block',
|
|
30
|
+
attrs: { dataTracked: { default: null } },
|
|
31
|
+
selectable: false,
|
|
32
|
+
parseDOM: [
|
|
33
|
+
{
|
|
34
|
+
tag: 'h1',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
tag: 'h2',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
tag: 'h3',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
tag: 'h4',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
tag: 'h5',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
tag: 'h6',
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
toDOM: () => ['h1', 0],
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export const isSectionTitleNode = (
|
|
56
|
+
node: ManuscriptNode
|
|
57
|
+
): node is SectionTitleNode =>
|
|
58
|
+
node.type === node.type.schema.nodes.section_title
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2025 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
|
+
|
|
17
|
+
import { NodeSpec } from 'prosemirror-model'
|
|
18
|
+
|
|
19
|
+
import { ManuscriptNode } from '../types'
|
|
20
|
+
|
|
21
|
+
export interface SubtitleAttrs {
|
|
22
|
+
id: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface SubtitleNode extends ManuscriptNode {
|
|
26
|
+
attrs: SubtitleAttrs
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const subtitle: NodeSpec = {
|
|
30
|
+
content: '(text | highlight_marker)*',
|
|
31
|
+
attrs: {
|
|
32
|
+
id: { default: '' },
|
|
33
|
+
dataTracked: { default: null },
|
|
34
|
+
},
|
|
35
|
+
group: 'block element',
|
|
36
|
+
toDOM: () => ['div', 0],
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const isSubtitleNode = (node: ManuscriptNode): node is SubtitleNode =>
|
|
40
|
+
node.type === node.type.schema.nodes.subtitle
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2025 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
|
+
|
|
17
|
+
import { NodeSpec } from 'prosemirror-model'
|
|
18
|
+
|
|
19
|
+
import { ManuscriptNode } from '../types'
|
|
20
|
+
|
|
21
|
+
export interface SubtitlesAttrs {
|
|
22
|
+
id: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface SubtitlesNode extends ManuscriptNode {
|
|
26
|
+
attrs: SubtitlesAttrs
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const subtitles: NodeSpec = {
|
|
30
|
+
content: 'subtitle*',
|
|
31
|
+
attrs: {
|
|
32
|
+
id: { default: '' },
|
|
33
|
+
dataTracked: { default: null },
|
|
34
|
+
},
|
|
35
|
+
group: 'block sections',
|
|
36
|
+
selectable: false,
|
|
37
|
+
toDOM: (node) => {
|
|
38
|
+
const subtitlesNode = node as SubtitlesNode
|
|
39
|
+
return [
|
|
40
|
+
'section',
|
|
41
|
+
{
|
|
42
|
+
id: subtitlesNode.attrs.id,
|
|
43
|
+
class: 'subtitles',
|
|
44
|
+
},
|
|
45
|
+
0,
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const isSubtitlesNode = (node: ManuscriptNode): node is SubtitlesNode =>
|
|
51
|
+
node.type === node.type.schema.nodes.subtitles
|
|
@@ -0,0 +1,77 @@
|
|
|
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
|
+
|
|
17
|
+
import { NodeSpec } from 'prosemirror-model'
|
|
18
|
+
|
|
19
|
+
import { ManuscriptNode } from '../types'
|
|
20
|
+
|
|
21
|
+
export interface SupplementAttrs {
|
|
22
|
+
id: string
|
|
23
|
+
href: string
|
|
24
|
+
mimeType: string
|
|
25
|
+
mimeSubType: string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface SupplementNode extends ManuscriptNode {
|
|
29
|
+
attrs: SupplementAttrs
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const supplement: NodeSpec = {
|
|
33
|
+
content: 'caption_title caption',
|
|
34
|
+
attrs: {
|
|
35
|
+
id: { default: '' },
|
|
36
|
+
href: { default: '' },
|
|
37
|
+
mimeType: { default: '' },
|
|
38
|
+
mimeSubType: { default: '' },
|
|
39
|
+
dataTracked: { default: null },
|
|
40
|
+
},
|
|
41
|
+
group: 'block',
|
|
42
|
+
parseDOM: [
|
|
43
|
+
{
|
|
44
|
+
tag: 'div.supplement',
|
|
45
|
+
getAttrs: (dom) => {
|
|
46
|
+
const el = dom as HTMLElement
|
|
47
|
+
const id = el.getAttribute('id')
|
|
48
|
+
const href = el.getAttribute('href')
|
|
49
|
+
const mimeType = el.getAttribute('mimeType')
|
|
50
|
+
const mimeSubType = el.getAttribute('mimeSubType')
|
|
51
|
+
const title = el.textContent
|
|
52
|
+
return {
|
|
53
|
+
id,
|
|
54
|
+
href,
|
|
55
|
+
mimeType,
|
|
56
|
+
mimeSubType,
|
|
57
|
+
title,
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
toDOM: (node) => {
|
|
63
|
+
const supplement = node as SupplementNode
|
|
64
|
+
|
|
65
|
+
return [
|
|
66
|
+
'div',
|
|
67
|
+
{
|
|
68
|
+
id: supplement.attrs.id,
|
|
69
|
+
class: 'Supplement',
|
|
70
|
+
href: node.attrs.href,
|
|
71
|
+
mimeType: node.attrs.mimeType,
|
|
72
|
+
mimeSubType: node.attrs.mimeSubType,
|
|
73
|
+
title: node.attrs.title,
|
|
74
|
+
},
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
|
|
17
|
+
import { NodeSpec } from 'prosemirror-model'
|
|
18
|
+
|
|
19
|
+
import { ManuscriptNode } from '../types'
|
|
20
|
+
|
|
21
|
+
interface Attrs {
|
|
22
|
+
id: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface SupplementsNode extends ManuscriptNode {
|
|
26
|
+
attrs: Attrs
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const supplements: NodeSpec = {
|
|
30
|
+
content: 'section_title supplement*',
|
|
31
|
+
attrs: {
|
|
32
|
+
id: { default: '' },
|
|
33
|
+
dataTracked: { default: null },
|
|
34
|
+
},
|
|
35
|
+
group: 'block',
|
|
36
|
+
selectable: false,
|
|
37
|
+
parseDOM: [
|
|
38
|
+
{
|
|
39
|
+
tag: 'div.supplements',
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
toDOM: (node) => {
|
|
43
|
+
const supplements = node as SupplementsNode
|
|
44
|
+
|
|
45
|
+
return [
|
|
46
|
+
'div',
|
|
47
|
+
{
|
|
48
|
+
id: supplements.attrs.id,
|
|
49
|
+
class: 'supplements',
|
|
50
|
+
spellcheck: 'false',
|
|
51
|
+
contenteditable: false,
|
|
52
|
+
},
|
|
53
|
+
0,
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export const isSupplementsNode = (
|
|
59
|
+
node: ManuscriptNode
|
|
60
|
+
): node is SupplementsNode => node.type === node.type.schema.nodes.supplements
|
|
@@ -0,0 +1,144 @@
|
|
|
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
|
+
|
|
17
|
+
import { NodeSpec } from 'prosemirror-model'
|
|
18
|
+
import {
|
|
19
|
+
CellAttributes,
|
|
20
|
+
MutableAttrs,
|
|
21
|
+
TableNodes,
|
|
22
|
+
tableNodes as createTableNodes,
|
|
23
|
+
TableNodesOptions,
|
|
24
|
+
} from 'prosemirror-tables'
|
|
25
|
+
|
|
26
|
+
type getFromDOM = (dom: HTMLElement) => unknown
|
|
27
|
+
type setDOMAttr = (value: unknown, attrs: MutableAttrs) => void
|
|
28
|
+
|
|
29
|
+
function createCellAttribute(
|
|
30
|
+
attributeName: string,
|
|
31
|
+
defaultValue: unknown = null,
|
|
32
|
+
customGetFromDOM?: getFromDOM,
|
|
33
|
+
customSetDOMAttr?: setDOMAttr
|
|
34
|
+
): CellAttributes {
|
|
35
|
+
return {
|
|
36
|
+
default: defaultValue,
|
|
37
|
+
getFromDOM(dom) {
|
|
38
|
+
if (customGetFromDOM) {
|
|
39
|
+
return customGetFromDOM(dom)
|
|
40
|
+
}
|
|
41
|
+
return dom.getAttribute(attributeName)
|
|
42
|
+
},
|
|
43
|
+
setDOMAttr(value, attrs) {
|
|
44
|
+
if (customSetDOMAttr) {
|
|
45
|
+
customSetDOMAttr(value, attrs)
|
|
46
|
+
} else if (value) {
|
|
47
|
+
attrs[attributeName] = value
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const tableOptions: TableNodesOptions = {
|
|
54
|
+
cellContent: 'text_block+',
|
|
55
|
+
cellAttributes: {
|
|
56
|
+
placeholder: createCellAttribute(
|
|
57
|
+
'data-placeholder-text',
|
|
58
|
+
'Data',
|
|
59
|
+
(dom) => dom.getAttribute('data-placeholder-text') || ''
|
|
60
|
+
),
|
|
61
|
+
valign: createCellAttribute('valign'),
|
|
62
|
+
align: createCellAttribute('align'),
|
|
63
|
+
scope: createCellAttribute('scope'),
|
|
64
|
+
style: createCellAttribute('style'),
|
|
65
|
+
colspan: createCellAttribute(
|
|
66
|
+
'colspan',
|
|
67
|
+
1,
|
|
68
|
+
(dom) => Number(dom.getAttribute('colspan') || 1),
|
|
69
|
+
(value, attrs) => {
|
|
70
|
+
if (value && value !== 1) {
|
|
71
|
+
attrs['colspan'] = String(value)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
),
|
|
75
|
+
rowspan: createCellAttribute(
|
|
76
|
+
'rowspan',
|
|
77
|
+
1,
|
|
78
|
+
(dom) => Number(dom.getAttribute('rowspan') || 1),
|
|
79
|
+
(value, attrs) => {
|
|
80
|
+
if (value && value !== 1) {
|
|
81
|
+
attrs['rowspan'] = String(value)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
),
|
|
85
|
+
},
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const tableNodes: TableNodes = createTableNodes(tableOptions)
|
|
89
|
+
|
|
90
|
+
// this is based on prsemirror-tables schema with our added attributes
|
|
91
|
+
export const table: NodeSpec = {
|
|
92
|
+
attrs: {
|
|
93
|
+
id: { default: '' },
|
|
94
|
+
dataTracked: { default: null },
|
|
95
|
+
},
|
|
96
|
+
content: 'table_row+',
|
|
97
|
+
tableRole: 'table',
|
|
98
|
+
isolating: true,
|
|
99
|
+
group: 'block',
|
|
100
|
+
parseDOM: [
|
|
101
|
+
{
|
|
102
|
+
tag: 'table',
|
|
103
|
+
getAttrs: (p) => {
|
|
104
|
+
const dom = p as HTMLElement
|
|
105
|
+
return {
|
|
106
|
+
id: dom.getAttribute('id'),
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
toDOM(node) {
|
|
112
|
+
return [
|
|
113
|
+
'table',
|
|
114
|
+
{
|
|
115
|
+
id: node.attrs.id,
|
|
116
|
+
},
|
|
117
|
+
['tbody', 0],
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
}
|
|
121
|
+
export const tableRow: NodeSpec = {
|
|
122
|
+
...tableNodes.table_row,
|
|
123
|
+
attrs: {
|
|
124
|
+
...tableNodes.table_row.attrs,
|
|
125
|
+
id: { default: '' },
|
|
126
|
+
dataTracked: { default: null },
|
|
127
|
+
},
|
|
128
|
+
}
|
|
129
|
+
export const tableCell: NodeSpec = {
|
|
130
|
+
...tableNodes.table_cell,
|
|
131
|
+
attrs: {
|
|
132
|
+
...tableNodes.table_cell.attrs,
|
|
133
|
+
id: { default: '' },
|
|
134
|
+
dataTracked: { default: null },
|
|
135
|
+
},
|
|
136
|
+
}
|
|
137
|
+
export const tableHeader: NodeSpec = {
|
|
138
|
+
...tableNodes.table_header,
|
|
139
|
+
attrs: {
|
|
140
|
+
...tableNodes.table_header.attrs,
|
|
141
|
+
id: { default: '' },
|
|
142
|
+
dataTracked: { default: null },
|
|
143
|
+
},
|
|
144
|
+
}
|