@manuscripts/transform 4.3.53 → 4.4.0
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/version.js +1 -1
- package/dist/es/jats/__tests__/jats-roundtrip.test.js +3 -3
- package/dist/es/version.js +1 -1
- package/dist/types/jats/__tests__/utils.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 +1561 -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 +59605 -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 +2090 -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 +1260 -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 +286 -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/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 +240 -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 +73 -0
- package/src/transformer/node-title.ts +111 -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,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
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
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
|
+
// adapted from 'prosemirror-tables'
|
|
18
|
+
|
|
19
|
+
import { NodeSpec } from 'prosemirror-model'
|
|
20
|
+
|
|
21
|
+
import { ManuscriptNode } from '../types'
|
|
22
|
+
|
|
23
|
+
export interface TableColNode extends ManuscriptNode {
|
|
24
|
+
attrs: {
|
|
25
|
+
width: string
|
|
26
|
+
id: string
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const tableColGroup: NodeSpec = {
|
|
31
|
+
content: 'table_col+',
|
|
32
|
+
group: 'block',
|
|
33
|
+
parseDOM: [
|
|
34
|
+
{
|
|
35
|
+
tag: 'colgroup',
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
toDOM() {
|
|
39
|
+
return ['colgroup', 0]
|
|
40
|
+
},
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const tableCol: NodeSpec = {
|
|
44
|
+
attrs: {
|
|
45
|
+
width: { default: '' },
|
|
46
|
+
id: { default: '' },
|
|
47
|
+
},
|
|
48
|
+
group: 'block',
|
|
49
|
+
parseDOM: [
|
|
50
|
+
{
|
|
51
|
+
tag: 'col',
|
|
52
|
+
getAttrs: (p) => {
|
|
53
|
+
const dom = p as HTMLTableColElement
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
width: dom.getAttribute('width'),
|
|
57
|
+
id: dom.getAttribute('id'),
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
toDOM: (node) => {
|
|
63
|
+
const tableColNode = node as TableColNode
|
|
64
|
+
|
|
65
|
+
const attrs: { [key: string]: string } = {}
|
|
66
|
+
|
|
67
|
+
if (tableColNode.attrs.width) {
|
|
68
|
+
attrs['width'] = tableColNode.attrs.width
|
|
69
|
+
}
|
|
70
|
+
if (tableColNode.attrs.id) {
|
|
71
|
+
attrs['id'] = tableColNode.attrs.id
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return ['col', attrs]
|
|
75
|
+
},
|
|
76
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
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 TableAttrs {
|
|
22
|
+
id: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface TableElementNode extends ManuscriptNode {
|
|
26
|
+
attrs: TableAttrs
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const tableElement: NodeSpec = {
|
|
30
|
+
content:
|
|
31
|
+
'caption_title (table | placeholder) table_colgroup? table_element_footer? alt_text long_desc (listing | placeholder)',
|
|
32
|
+
attrs: {
|
|
33
|
+
id: { default: '' },
|
|
34
|
+
dataTracked: { default: null },
|
|
35
|
+
},
|
|
36
|
+
selectable: false,
|
|
37
|
+
group: 'block element executable',
|
|
38
|
+
parseDOM: [
|
|
39
|
+
{
|
|
40
|
+
tag: 'figure.table',
|
|
41
|
+
getAttrs: (dom) => {
|
|
42
|
+
const element = dom as HTMLTableElement
|
|
43
|
+
|
|
44
|
+
return {
|
|
45
|
+
id: element.getAttribute('id'),
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
toDOM: (node) => {
|
|
51
|
+
const tableElementNode = node as TableElementNode
|
|
52
|
+
|
|
53
|
+
return [
|
|
54
|
+
'figure',
|
|
55
|
+
{
|
|
56
|
+
class: 'table', // TODO: suppress-header, suppress-footer?
|
|
57
|
+
id: tableElementNode.attrs.id,
|
|
58
|
+
},
|
|
59
|
+
0,
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const isTableElementNode = (
|
|
65
|
+
node: ManuscriptNode
|
|
66
|
+
): node is TableElementNode =>
|
|
67
|
+
node.type === node.type.schema.nodes.table_element
|
|
@@ -0,0 +1,42 @@
|
|
|
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 TableElementFooterNode extends ManuscriptNode {
|
|
26
|
+
attrs: Attrs
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const tableElementFooter: NodeSpec = {
|
|
30
|
+
attrs: {
|
|
31
|
+
id: { default: '' },
|
|
32
|
+
dataTracked: { default: null },
|
|
33
|
+
},
|
|
34
|
+
content: 'general_table_footnote? footnotes_element?',
|
|
35
|
+
group: 'block element',
|
|
36
|
+
toDOM: () => ['table-wrap-foot', 0],
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const isTableElementFooter = (
|
|
40
|
+
node: ManuscriptNode
|
|
41
|
+
): node is TableElementFooterNode =>
|
|
42
|
+
node.type === node.type.schema.nodes.table_element_footer
|
|
@@ -0,0 +1,31 @@
|
|
|
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 { paragraph } from './paragraph'
|
|
20
|
+
|
|
21
|
+
export const text: NodeSpec = {
|
|
22
|
+
group: 'inline',
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const textBlock: NodeSpec = {
|
|
26
|
+
...paragraph,
|
|
27
|
+
attrs: {
|
|
28
|
+
dataTracked: { default: null },
|
|
29
|
+
},
|
|
30
|
+
group: 'block',
|
|
31
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
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 TitleAttrs {
|
|
22
|
+
id: string
|
|
23
|
+
placeholder: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface TitleNode extends ManuscriptNode {
|
|
27
|
+
attrs: TitleAttrs
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const title: NodeSpec = {
|
|
31
|
+
content: '(text | highlight_marker)*',
|
|
32
|
+
attrs: {
|
|
33
|
+
id: { default: '' },
|
|
34
|
+
placeholder: { default: 'Insert title here...' },
|
|
35
|
+
dataTracked: { default: null },
|
|
36
|
+
},
|
|
37
|
+
group: 'block element',
|
|
38
|
+
parseDOM: [{ tag: 'div' }],
|
|
39
|
+
toDOM: () => ['div', 0],
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export const isTitleNode = (node: ManuscriptNode): node is TitleNode =>
|
|
43
|
+
node.type === node.type.schema.nodes.title
|