-
Notifications
You must be signed in to change notification settings - Fork 85
/
Copy pathArticlePackage.js
128 lines (114 loc) · 5.05 KB
/
ArticlePackage.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import { validateXML } from 'texture-xml-utils'
import ArticleConfigurator from './ArticleConfigurator'
import ArticleLoader from './ArticleLoader'
import ArticleModelPackage from './nodes/ArticleModelPackage'
import ArticlePanel from './ArticlePanel'
import ArticleSerializer from './ArticleSerializer'
import {
TEXTURE_JATS_PUBLIC_ID, JATS_GREEN_1_1_PUBLIC_ID, JATS_GREEN_1_2_PUBLIC_ID
} from './ArticleConstants'
import TextureJATS from './TextureJATS'
import ManuscriptPackage from './shared/ManuscriptPackage'
import EntityLabelsPackage from './shared/EntityLabelsPackage'
import MetadataPackage from './metadata/MetadataPackage'
import FigureLabelGenerator from './shared/FigureLabelGenerator'
import NumberedLabelGenerator from './shared/NumberedLabelGenerator'
import ArticleHTMLConverters from './converter/html/ArticleHTMLConverters'
import ArticleHTMLExporter from './converter/html/ArticleHTMLExporter'
import ArticleHTMLImporter from './converter/html/ArticleHTMLImporter'
import ArticleJATSConverters from './converter/jats/ArticleJATSConverters'
import ArticleJATSExporter from './converter/jats/ArticleJATSExporter'
import ArticleJATSImporter from './converter/jats/ArticleJATSImporter'
import ArticlePlainTextExporter from './converter/text/ArticlePlainTextExporter'
import JATSTransformer from './converter/transform/jats/JATSTransformer'
import { ManuscriptEditor } from './components'
export default {
name: 'article',
configure (config) {
// register ArticlePanel on the Texture configuration level
config.addComponent('article', ArticlePanel)
config.registerDocumentLoader('article', ArticleLoader)
config.registerDocumentSerializer('article', ArticleSerializer)
let articleConfig = config.createSubConfiguration('article', { ConfiguratorClass: ArticleConfigurator })
// used for validation
articleConfig.import(ArticleModelPackage)
articleConfig.import(EntityLabelsPackage)
articleConfig.registerSchemaId(JATS_GREEN_1_1_PUBLIC_ID)
articleConfig.registerSchemaId(JATS_GREEN_1_2_PUBLIC_ID)
ArticleJATSConverters.forEach(converter => {
articleConfig.addConverter('jats', converter)
})
// register default 'jats' im-/exporter
articleConfig.addImporter('jats', ArticleJATSImporter)
articleConfig.addExporter('jats', ArticleJATSExporter)
// register im-/exporter for TextureJATS
articleConfig.addImporter(TEXTURE_JATS_PUBLIC_ID, ArticleJATSImporter, {
converterGroups: ['jats']
})
articleConfig.addExporter(TEXTURE_JATS_PUBLIC_ID, ArticleJATSExporter, {
converterGroups: ['jats']
})
let transformation = new JATSTransformer()
// register transformations for all supported JATS versions
// NOTE: ATM there is only one transformation because we do not use all JATS features
// as TextureJATS is a very strict subset of JATS
articleConfig.addTransformation('jats', transformation)
articleConfig.addTransformation(JATS_GREEN_1_1_PUBLIC_ID, transformation)
articleConfig.addTransformation(JATS_GREEN_1_2_PUBLIC_ID, transformation)
let validator = {
schemaId: TextureJATS.publicId,
validate (xmlDom) {
return validateXML(TextureJATS, xmlDom)
}
}
articleConfig.addValidator(TextureJATS.publicId, validator)
// enable rich-text support for clipboard
ArticleHTMLConverters.forEach(converter => {
articleConfig.addConverter('html', converter)
})
articleConfig.addImporter('html', ArticleHTMLImporter)
articleConfig.addExporter('html', ArticleHTMLExporter)
articleConfig.addExporter('text', ArticlePlainTextExporter)
// ATTENTION: FigureLabelGenerator works a bit differently
// TODO: consolidate LabelGenerators and configuration
// e.g. it does not make sense to say 'setLabelGenerator' but then only provide a configuration for 'NumberedLabelGenerator'
articleConfig.setValue('figure-label-generator', new FigureLabelGenerator({
singular: 'Figure $',
plural: 'Figures $',
and: ',',
to: '-'
}))
articleConfig.setValue('footnote-label-generator', new NumberedLabelGenerator({
template: '$',
and: ',',
to: '-'
}))
articleConfig.setValue('formula-label-generator', new NumberedLabelGenerator({
template: '($)',
and: ',',
to: '-'
}))
articleConfig.setValue('reference-label-generator', new NumberedLabelGenerator({
template: '[$]',
and: ',',
to: '-'
}))
articleConfig.setValue('supplementary-file-label-generator', new NumberedLabelGenerator({
name: 'Supplementary File',
plural: 'Supplementary Files',
and: ',',
to: '-'
}))
articleConfig.setValue('table-label-generator', new NumberedLabelGenerator({
name: 'Table',
plural: 'Tables',
and: ',',
to: '-'
}))
// The default article-editor is a ManuscriptEditor
// TODO: think about how Texture can allow customizations that use a different editor
articleConfig.addComponent('article-editor', ManuscriptEditor)
articleConfig.import(ManuscriptPackage)
articleConfig.import(MetadataPackage)
}
}