pro-editor-schema 1.4.1 → 1.6.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/README.md +23 -1
- package/dist/index.d.mts +356 -19
- package/dist/index.d.ts +356 -19
- package/dist/index.js +1460 -292
- package/dist/index.mjs +1430 -292
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -50,6 +50,13 @@ __export(index_exports, {
|
|
|
50
50
|
LAYOUT_USER_ATTRIBUTE: () => LAYOUT_USER_ATTRIBUTE,
|
|
51
51
|
LEFT_INDENT_ATTRIBUTE: () => LEFT_INDENT_ATTRIBUTE,
|
|
52
52
|
LINKEND_ATTRIBUTE: () => LINKEND_ATTRIBUTE,
|
|
53
|
+
LINK_BLOCKER_ROLES: () => LINK_BLOCKER_ROLES,
|
|
54
|
+
LINK_TO_CROSS_CHECK: () => LINK_TO_CROSS_CHECK,
|
|
55
|
+
POSSIBLE_WEBLINK_CLASS: () => POSSIBLE_WEBLINK_CLASS,
|
|
56
|
+
POSSIBLE_WEBLINK_EXCLUDE_SELECTORS: () => POSSIBLE_WEBLINK_EXCLUDE_SELECTORS,
|
|
57
|
+
REFERENCE_FIELD_SCHEMAS: () => REFERENCE_FIELD_SCHEMAS,
|
|
58
|
+
REFERENCE_PART_SELECTOR: () => REFERENCE_PART_SELECTOR,
|
|
59
|
+
REFERENCE_TYPE_SCHEMAS: () => REFERENCE_TYPE_SCHEMAS,
|
|
53
60
|
RIGHT_INDENT_ATTRIBUTE: () => RIGHT_INDENT_ATTRIBUTE,
|
|
54
61
|
SCHEMAS: () => SCHEMAS,
|
|
55
62
|
SPACE_ABOVE_ATTRIBUTE: () => SPACE_ABOVE_ATTRIBUTE,
|
|
@@ -62,23 +69,46 @@ __export(index_exports, {
|
|
|
62
69
|
TRACK_CHANGES_ATTR_DATA_TIME: () => TRACK_CHANGES_ATTR_DATA_TIME,
|
|
63
70
|
TRACK_CHANGES_ATTR_DATA_USERID: () => TRACK_CHANGES_ATTR_DATA_USERID,
|
|
64
71
|
TRACK_CHANGES_ATTR_DATA_USERNAME: () => TRACK_CHANGES_ATTR_DATA_USERNAME,
|
|
72
|
+
VALIDATION_IGNORED_ATTRIBUTE: () => VALIDATION_IGNORED_ATTRIBUTE,
|
|
65
73
|
XMLID_ATTRIBUTE: () => XMLID_ATTRIBUTE,
|
|
74
|
+
clearWeblinkMatches: () => clearWeblinkMatches,
|
|
66
75
|
closestElementBySchema: () => closestElementBySchema,
|
|
67
76
|
createElement: () => createElement,
|
|
77
|
+
extractFootnoteNumber: () => extractFootnoteNumber,
|
|
68
78
|
findAttributeDefinitionByName: () => findAttributeDefinitionByName,
|
|
79
|
+
findElementLinkedTo: () => findElementLinkedTo,
|
|
80
|
+
findReferenceFieldByElement: () => findReferenceFieldByElement,
|
|
81
|
+
findReferenceTypeSchemaByElement: () => findReferenceTypeSchemaByElement,
|
|
69
82
|
findSchemaByCode: () => findSchemaByCode,
|
|
70
83
|
findSchemaByElement: () => findSchemaByElement,
|
|
71
84
|
getAdjacentElement: () => getAdjacentElement,
|
|
72
85
|
getAttributeName: () => getAttributeName,
|
|
86
|
+
getEffectiveChildElements: () => getEffectiveChildElements,
|
|
73
87
|
getElementLinks: () => getElementLinks,
|
|
88
|
+
getPossibleWeblinks: () => getPossibleWeblinks,
|
|
89
|
+
getReferenceFieldElements: () => getReferenceFieldElements,
|
|
90
|
+
getReferenceParts: () => getReferenceParts,
|
|
91
|
+
getReferenceStructureIssueElements: () => getReferenceStructureIssueElements,
|
|
74
92
|
getStore: () => getStore,
|
|
75
93
|
isAttributeRestricted: () => isAttributeRestricted,
|
|
76
94
|
isDeletedElement: () => isDeletedElement,
|
|
77
95
|
isIgnoredAttribute: () => isIgnoredAttribute,
|
|
78
96
|
isIgnoredElement: () => isIgnoredElement,
|
|
79
97
|
isTrackChangesSchema: () => isTrackChangesSchema,
|
|
98
|
+
markPossibleWeblinks: () => markPossibleWeblinks,
|
|
80
99
|
queryAllElementsBySchema: () => queryAllElementsBySchema,
|
|
81
100
|
queryElementBySchema: () => queryElementBySchema,
|
|
101
|
+
validateAttributes: () => validateAttributes,
|
|
102
|
+
validateConsecutiveFootnoteCues: () => validateConsecutiveFootnoteCues,
|
|
103
|
+
validateConsecutiveFootnotes: () => validateConsecutiveFootnotes,
|
|
104
|
+
validateElementAgainstSchema: () => validateElementAgainstSchema,
|
|
105
|
+
validateElementToLinkTo: () => validateElementToLinkTo,
|
|
106
|
+
validateFootnoteNumber: () => validateFootnoteNumber,
|
|
107
|
+
validateHierarchy: () => validateHierarchy,
|
|
108
|
+
validateLinkend: () => validateLinkend,
|
|
109
|
+
validateOlink: () => validateOlink,
|
|
110
|
+
validatePossibleWeblinks: () => validatePossibleWeblinks,
|
|
111
|
+
validateReferenceStructure: () => validateReferenceStructure,
|
|
82
112
|
validateXml: () => validateXml
|
|
83
113
|
});
|
|
84
114
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -102,6 +132,7 @@ var FIGURE_PLACEMENT_ATTRIBUTE = "data-figure-placement";
|
|
|
102
132
|
var LAYOUT_CELL_WIDTH_ATTRIBUTE = "data-cell-width";
|
|
103
133
|
var LAYOUT_TABLE_ORIENTATION_ATTRIBUTE = "data-table-orientation";
|
|
104
134
|
var LAYOUT_TABLE_PLACEMENT_ATTRIBUTE = "data-table-placement";
|
|
135
|
+
var VALIDATION_IGNORED_ATTRIBUTE = "data-validation-ignored";
|
|
105
136
|
var LAYOUT_ATTRIBUTES = [
|
|
106
137
|
ALIGNMENT_ATTRIBUTE,
|
|
107
138
|
LEFT_INDENT_ATTRIBUTE,
|
|
@@ -231,7 +262,7 @@ var EMPHASIS_SCHEMA = createSchema({
|
|
|
231
262
|
...TRACK_CHANGES_ATTRS,
|
|
232
263
|
{
|
|
233
264
|
name: "role",
|
|
234
|
-
values: ["lowercase", "uppercase", "initialcaps"],
|
|
265
|
+
values: ["lowercase", "uppercase", "initialcaps", "Non breaking space"],
|
|
235
266
|
defaultValue: "lowercase"
|
|
236
267
|
}
|
|
237
268
|
],
|
|
@@ -731,6 +762,27 @@ var POEM_TAG = "POEM";
|
|
|
731
762
|
var BIBLIOMIXED_TAG = "BIBLIOMIXED";
|
|
732
763
|
var REFERENCE_BIBLIOGRAPHY_TAG = "BIBLIOGRAPHY";
|
|
733
764
|
var BIBLIODIV_TAG = "BIBLIODIV";
|
|
765
|
+
var BIBLIOMSET_TAG = "BIBLIOMSET";
|
|
766
|
+
var EDITOR_TAG = "EDITOR";
|
|
767
|
+
var OTHERCREDIT_TAG = "OTHERCREDIT";
|
|
768
|
+
var TRANSLATOR_TAG = "TRANSLATOR";
|
|
769
|
+
var COLLAB_TAG = "COLLAB";
|
|
770
|
+
var PUBDATE_TAG = "PUBDATE";
|
|
771
|
+
var DATE_TAG = "DATE";
|
|
772
|
+
var PUBLISHERNAME_TAG = "PUBLISHERNAME";
|
|
773
|
+
var ADDRESS_TAG = "ADDRESS";
|
|
774
|
+
var CITY_TAG = "CITY";
|
|
775
|
+
var VOLUMENUM_TAG = "VOLUMENUM";
|
|
776
|
+
var ISSUENUM_TAG = "ISSUENUM";
|
|
777
|
+
var PAGENUMS_TAG = "PAGENUMS";
|
|
778
|
+
var PAGENUM_TAG = "PAGENUM";
|
|
779
|
+
var EDITION_TAG = "EDITION";
|
|
780
|
+
var PUB_ID_TAG = "PUB-ID";
|
|
781
|
+
var BIBLIOID_TAG = "BIBLIOID";
|
|
782
|
+
var BIBLIOMISC_TAG = "BIBLIOMISC";
|
|
783
|
+
var CONFGROUP_TAG = "CONFGROUP";
|
|
784
|
+
var CONFTITLE_TAG = "CONFTITLE";
|
|
785
|
+
var CONFDATES_TAG = "CONFDATES";
|
|
734
786
|
var MATHPHRASE_TAG = "MATHPHRASE";
|
|
735
787
|
var MATH_TAG = "MATH";
|
|
736
788
|
var MERROR_TAG = "MERROR";
|
|
@@ -951,7 +1003,8 @@ var EQUATION_SCHEMA = createSchema({
|
|
|
951
1003
|
],
|
|
952
1004
|
allowedChildrenCodes: [
|
|
953
1005
|
{ code: "mathphrase", required: true },
|
|
954
|
-
{ code: "caption1", required: false }
|
|
1006
|
+
{ code: "caption1", required: false },
|
|
1007
|
+
{ code: "tag", required: false }
|
|
955
1008
|
]
|
|
956
1009
|
});
|
|
957
1010
|
|
|
@@ -1876,6 +1929,82 @@ var TABLE_SCHEMA = createSchema({
|
|
|
1876
1929
|
]
|
|
1877
1930
|
});
|
|
1878
1931
|
|
|
1932
|
+
// src/schema/elementSchemas/elements/heading.ts
|
|
1933
|
+
var HEADING_LEVEL = ["H0", "H1", "H2", "H3", "H4", "H5", "H6"];
|
|
1934
|
+
var HEADING_ROLES = [...HEADING_LEVEL, "vignette_group"];
|
|
1935
|
+
var HEADING_SCHEMA = createSchema({
|
|
1936
|
+
code: "heading",
|
|
1937
|
+
kind: "element",
|
|
1938
|
+
tag: SECTION_TAG,
|
|
1939
|
+
matchesElement: (element) => {
|
|
1940
|
+
const role = element.getAttribute("role");
|
|
1941
|
+
if (!role) return false;
|
|
1942
|
+
return HEADING_ROLES.includes(role);
|
|
1943
|
+
},
|
|
1944
|
+
requiredAttributes: [
|
|
1945
|
+
...ID_ATTRS,
|
|
1946
|
+
"xmlid",
|
|
1947
|
+
{
|
|
1948
|
+
name: "role",
|
|
1949
|
+
values: HEADING_ROLES,
|
|
1950
|
+
defaultValue: "H1"
|
|
1951
|
+
}
|
|
1952
|
+
],
|
|
1953
|
+
optionalAttributes: [...TRACK_CHANGES_ATTRS],
|
|
1954
|
+
defaultChildCode: "para",
|
|
1955
|
+
allowedChildrenCodes: [
|
|
1956
|
+
{ code: "title1", required: false },
|
|
1957
|
+
{ code: "label1", required: false },
|
|
1958
|
+
{ code: "para", required: false },
|
|
1959
|
+
{ code: "subtitle1", required: false },
|
|
1960
|
+
{ code: "sidebar", required: false },
|
|
1961
|
+
{ code: "epigraph", required: false },
|
|
1962
|
+
{ code: "blockquote", required: false },
|
|
1963
|
+
{ code: "ul", required: false },
|
|
1964
|
+
{ code: "ol", required: false },
|
|
1965
|
+
{ code: "poem", required: false },
|
|
1966
|
+
{ code: "dialogue", required: false },
|
|
1967
|
+
{ code: "appendix", required: false },
|
|
1968
|
+
{ code: "table1", required: false },
|
|
1969
|
+
{ code: "figure1", required: false },
|
|
1970
|
+
{ code: "heading", required: false },
|
|
1971
|
+
{ code: "footnoteSection", required: false },
|
|
1972
|
+
{ code: "info1", required: false },
|
|
1973
|
+
{ code: "equation", required: false }
|
|
1974
|
+
]
|
|
1975
|
+
});
|
|
1976
|
+
|
|
1977
|
+
// src/schema/elementSchemas/elements/box.ts
|
|
1978
|
+
var BOX_LEVEL = ["box1", "box2", "box3", "box4", "box5"];
|
|
1979
|
+
var BOX_SCHEMA = createSchema({
|
|
1980
|
+
code: "sidebar",
|
|
1981
|
+
kind: "element",
|
|
1982
|
+
tag: SIDEBAR_TAG,
|
|
1983
|
+
requiredAttributes: [
|
|
1984
|
+
...ID_ATTRS,
|
|
1985
|
+
{
|
|
1986
|
+
name: "status",
|
|
1987
|
+
values: BOX_LEVEL,
|
|
1988
|
+
defaultValue: "box1"
|
|
1989
|
+
}
|
|
1990
|
+
],
|
|
1991
|
+
optionalAttributes: [
|
|
1992
|
+
...TRACK_CHANGES_ATTRS,
|
|
1993
|
+
"xmlid",
|
|
1994
|
+
{
|
|
1995
|
+
name: "role",
|
|
1996
|
+
values: ["add-element", "change-para-box"],
|
|
1997
|
+
defaultValue: "add-element"
|
|
1998
|
+
}
|
|
1999
|
+
],
|
|
2000
|
+
defaultChildCode: "para",
|
|
2001
|
+
allowedChildrenCodes: [
|
|
2002
|
+
{ code: "para", required: false },
|
|
2003
|
+
{ code: "title1", required: false },
|
|
2004
|
+
{ code: "sidebar", required: false }
|
|
2005
|
+
]
|
|
2006
|
+
});
|
|
2007
|
+
|
|
1879
2008
|
// src/schema/elementSchemas/elements/title.ts
|
|
1880
2009
|
var TITLE_SCHEMA = createSchema({
|
|
1881
2010
|
code: "title1",
|
|
@@ -1893,7 +2022,7 @@ var TITLE_SCHEMA = createSchema({
|
|
|
1893
2022
|
},
|
|
1894
2023
|
{
|
|
1895
2024
|
name: "title",
|
|
1896
|
-
values: [
|
|
2025
|
+
values: [...HEADING_LEVEL, ...BOX_LEVEL, "foot_note"],
|
|
1897
2026
|
defaultValue: "H1"
|
|
1898
2027
|
}
|
|
1899
2028
|
],
|
|
@@ -1971,36 +2100,8 @@ var BLOCKQUOTE_SCHEMA = createSchema({
|
|
|
1971
2100
|
{ code: "ul", required: false },
|
|
1972
2101
|
{ code: "ol", required: false },
|
|
1973
2102
|
{ code: "sidebar", required: false },
|
|
1974
|
-
{ code: "source1", required: false }
|
|
1975
|
-
|
|
1976
|
-
});
|
|
1977
|
-
|
|
1978
|
-
// src/schema/elementSchemas/elements/box.ts
|
|
1979
|
-
var BOX_SCHEMA = createSchema({
|
|
1980
|
-
code: "sidebar",
|
|
1981
|
-
kind: "element",
|
|
1982
|
-
tag: SIDEBAR_TAG,
|
|
1983
|
-
requiredAttributes: [
|
|
1984
|
-
...ID_ATTRS,
|
|
1985
|
-
{
|
|
1986
|
-
name: "status",
|
|
1987
|
-
values: ["box1", "box2", "box3", "box4", "box5"],
|
|
1988
|
-
defaultValue: "box1"
|
|
1989
|
-
}
|
|
1990
|
-
],
|
|
1991
|
-
optionalAttributes: [
|
|
1992
|
-
...TRACK_CHANGES_ATTRS,
|
|
1993
|
-
"xmlid",
|
|
1994
|
-
{
|
|
1995
|
-
name: "role",
|
|
1996
|
-
values: ["add-element", "change-para-box"],
|
|
1997
|
-
defaultValue: "add-element"
|
|
1998
|
-
}
|
|
1999
|
-
],
|
|
2000
|
-
defaultChildCode: "para",
|
|
2001
|
-
allowedChildrenCodes: [
|
|
2002
|
-
{ code: "para", required: false },
|
|
2003
|
-
{ code: "title1", required: false }
|
|
2103
|
+
{ code: "source1", required: false },
|
|
2104
|
+
{ code: "tag", required: false }
|
|
2004
2105
|
]
|
|
2005
2106
|
});
|
|
2006
2107
|
|
|
@@ -2057,7 +2158,10 @@ var EPIGRAPH_SCHEMA = createSchema({
|
|
|
2057
2158
|
}
|
|
2058
2159
|
],
|
|
2059
2160
|
defaultChildCode: "para",
|
|
2060
|
-
allowedChildrenCodes: [
|
|
2161
|
+
allowedChildrenCodes: [
|
|
2162
|
+
{ code: "para", required: false },
|
|
2163
|
+
{ code: "tag", required: false }
|
|
2164
|
+
]
|
|
2061
2165
|
});
|
|
2062
2166
|
|
|
2063
2167
|
// src/schema/elementSchemas/elements/footnoteSection.ts
|
|
@@ -2087,51 +2191,6 @@ var FOOTNOTE_SECTION_SCHEMA = createSchema({
|
|
|
2087
2191
|
]
|
|
2088
2192
|
});
|
|
2089
2193
|
|
|
2090
|
-
// src/schema/elementSchemas/elements/heading.ts
|
|
2091
|
-
var HEADING_LEVEL = ["H0", "H1", "H2", "H3", "H4", "H5", "H6"];
|
|
2092
|
-
var HEADING_ROLES = [...HEADING_LEVEL, "vignette_group"];
|
|
2093
|
-
var HEADING_SCHEMA = createSchema({
|
|
2094
|
-
code: "heading",
|
|
2095
|
-
kind: "element",
|
|
2096
|
-
tag: SECTION_TAG,
|
|
2097
|
-
matchesElement: (element) => {
|
|
2098
|
-
const role = element.getAttribute("role");
|
|
2099
|
-
if (!role) return false;
|
|
2100
|
-
return HEADING_ROLES.includes(role);
|
|
2101
|
-
},
|
|
2102
|
-
requiredAttributes: [
|
|
2103
|
-
...ID_ATTRS,
|
|
2104
|
-
"xmlid",
|
|
2105
|
-
{
|
|
2106
|
-
name: "role",
|
|
2107
|
-
values: HEADING_ROLES,
|
|
2108
|
-
defaultValue: "H1"
|
|
2109
|
-
}
|
|
2110
|
-
],
|
|
2111
|
-
optionalAttributes: [...TRACK_CHANGES_ATTRS],
|
|
2112
|
-
defaultChildCode: "para",
|
|
2113
|
-
allowedChildrenCodes: [
|
|
2114
|
-
{ code: "title1", required: false },
|
|
2115
|
-
{ code: "label1", required: false },
|
|
2116
|
-
{ code: "para", required: false },
|
|
2117
|
-
{ code: "subtitle1", required: false },
|
|
2118
|
-
{ code: "sidebar", required: false },
|
|
2119
|
-
{ code: "epigraph", required: false },
|
|
2120
|
-
{ code: "blockquote", required: false },
|
|
2121
|
-
{ code: "ul", required: false },
|
|
2122
|
-
{ code: "ol", required: false },
|
|
2123
|
-
{ code: "poem", required: false },
|
|
2124
|
-
{ code: "dialogue", required: false },
|
|
2125
|
-
{ code: "appendix", required: false },
|
|
2126
|
-
{ code: "table1", required: false },
|
|
2127
|
-
{ code: "figure1", required: false },
|
|
2128
|
-
{ code: "heading", required: false },
|
|
2129
|
-
{ code: "footnoteSection", required: false },
|
|
2130
|
-
{ code: "info1", required: false },
|
|
2131
|
-
{ code: "equation", required: false }
|
|
2132
|
-
]
|
|
2133
|
-
});
|
|
2134
|
-
|
|
2135
2194
|
// src/schema/elementSchemas/elements/info.ts
|
|
2136
2195
|
var INFO_SCHEMA = createSchema({
|
|
2137
2196
|
code: "info1",
|
|
@@ -2176,28 +2235,6 @@ var MATHPHRASE_SCHEMA = createSchema({
|
|
|
2176
2235
|
allowedChildrenCodes: [{ code: MATH_SCHEMA.code, required: true }]
|
|
2177
2236
|
});
|
|
2178
2237
|
|
|
2179
|
-
// src/schema/elementSchemas/elements/reference/bibliodiv.ts
|
|
2180
|
-
var BIBLIODIV_SCHEMA = createSchema({
|
|
2181
|
-
code: "bibliodiv",
|
|
2182
|
-
kind: "element",
|
|
2183
|
-
tag: BIBLIODIV_TAG,
|
|
2184
|
-
requiredAttributes: [
|
|
2185
|
-
...ID_ATTRS,
|
|
2186
|
-
{
|
|
2187
|
-
name: "role",
|
|
2188
|
-
values: ["H1", "H2", "H3", "H4", "H5", "H6"],
|
|
2189
|
-
defaultValue: "H1"
|
|
2190
|
-
}
|
|
2191
|
-
],
|
|
2192
|
-
optionalAttributes: [],
|
|
2193
|
-
allowedChildrenCodes: [
|
|
2194
|
-
{ code: "bibliodiv", required: false },
|
|
2195
|
-
{ code: "referenceBibliomixed", required: false },
|
|
2196
|
-
{ code: "para", required: false },
|
|
2197
|
-
{ code: "title1", required: false }
|
|
2198
|
-
]
|
|
2199
|
-
});
|
|
2200
|
-
|
|
2201
2238
|
// src/schema/elementSchemas/elements/reference/bibliography.ts
|
|
2202
2239
|
var REFERENCE_BIBLIOGRAPHY_SCHEMA = createSchema({
|
|
2203
2240
|
code: "referenceBibliography",
|
|
@@ -2226,6 +2263,31 @@ var REFERENCE_BIBLIOGRAPHY_SCHEMA = createSchema({
|
|
|
2226
2263
|
]
|
|
2227
2264
|
});
|
|
2228
2265
|
|
|
2266
|
+
// src/schema/shared/allowedReferenceChildren.ts
|
|
2267
|
+
var REFERENCE_PART_CODES_ALLOWED_CHILDREN = [
|
|
2268
|
+
{ code: "author", required: false },
|
|
2269
|
+
{ code: "editor", required: false },
|
|
2270
|
+
{ code: "othercredit", required: false },
|
|
2271
|
+
{ code: "translator", required: false },
|
|
2272
|
+
{ code: "collab", required: false },
|
|
2273
|
+
{ code: "title1", required: false },
|
|
2274
|
+
{ code: "pubdate", required: false },
|
|
2275
|
+
{ code: "date", required: false },
|
|
2276
|
+
{ code: "publishername", required: false },
|
|
2277
|
+
{ code: "orgname", required: false },
|
|
2278
|
+
{ code: "address", required: false },
|
|
2279
|
+
{ code: "volumenum", required: false },
|
|
2280
|
+
{ code: "issuenum", required: false },
|
|
2281
|
+
{ code: "pagenums", required: false },
|
|
2282
|
+
{ code: "pagenum", required: false },
|
|
2283
|
+
{ code: "edition", required: false },
|
|
2284
|
+
{ code: "link", required: false },
|
|
2285
|
+
{ code: "pubId", required: false },
|
|
2286
|
+
{ code: "biblioid", required: false },
|
|
2287
|
+
{ code: "bibliomisc", required: false },
|
|
2288
|
+
{ code: "confgroup", required: false }
|
|
2289
|
+
];
|
|
2290
|
+
|
|
2229
2291
|
// src/schema/elementSchemas/elements/reference/bibliomixed.ts
|
|
2230
2292
|
var BIBLIOMIXED_SCHEMA = createSchema({
|
|
2231
2293
|
code: "referenceBibliomixed",
|
|
@@ -2237,82 +2299,390 @@ var BIBLIOMIXED_SCHEMA = createSchema({
|
|
|
2237
2299
|
TRACK_CHANGES_ATTR_DATA_USERID,
|
|
2238
2300
|
TRACK_CHANGES_ATTR_DATA_DATE
|
|
2239
2301
|
],
|
|
2240
|
-
allowedChildrenCodes: [
|
|
2302
|
+
allowedChildrenCodes: [
|
|
2303
|
+
{ code: "bibliomset", required: false },
|
|
2304
|
+
...REFERENCE_PART_CODES_ALLOWED_CHILDREN,
|
|
2305
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2306
|
+
]
|
|
2241
2307
|
});
|
|
2242
2308
|
|
|
2243
|
-
// src/schema/elementSchemas/elements/
|
|
2244
|
-
var
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2309
|
+
// src/schema/elementSchemas/elements/reference/bibliodiv.ts
|
|
2310
|
+
var BIBLIODIV_SCHEMA = createSchema({
|
|
2311
|
+
code: "bibliodiv",
|
|
2312
|
+
kind: "element",
|
|
2313
|
+
tag: BIBLIODIV_TAG,
|
|
2314
|
+
requiredAttributes: [
|
|
2315
|
+
...ID_ATTRS,
|
|
2316
|
+
"role"
|
|
2317
|
+
],
|
|
2318
|
+
optionalAttributes: [],
|
|
2319
|
+
allowedChildrenCodes: [
|
|
2320
|
+
{ code: "bibliodiv", required: false },
|
|
2321
|
+
{ code: "referenceBibliomixed", required: false },
|
|
2322
|
+
{ code: "para", required: false },
|
|
2323
|
+
{ code: "title1", required: false }
|
|
2324
|
+
]
|
|
2325
|
+
});
|
|
2326
|
+
|
|
2327
|
+
// src/schema/elementSchemas/elements/reference/bibliomset.ts
|
|
2328
|
+
var CONTAINER_BIBLIOMSET_RELATIONS = ["book", "journal"];
|
|
2329
|
+
var PART_BIBLIOMSET_RELATION = "part";
|
|
2330
|
+
var BIBLIOMSET_SCHEMA = createSchema({
|
|
2331
|
+
code: "bibliomset",
|
|
2332
|
+
kind: "element",
|
|
2333
|
+
tag: BIBLIOMSET_TAG,
|
|
2334
|
+
requiredAttributes: [
|
|
2335
|
+
{
|
|
2336
|
+
name: "relation",
|
|
2337
|
+
values: [
|
|
2338
|
+
PART_BIBLIOMSET_RELATION,
|
|
2339
|
+
"article",
|
|
2340
|
+
...CONTAINER_BIBLIOMSET_RELATIONS
|
|
2341
|
+
],
|
|
2342
|
+
defaultValue: PART_BIBLIOMSET_RELATION
|
|
2343
|
+
}
|
|
2344
|
+
],
|
|
2345
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2346
|
+
allowedChildrenCodes: [
|
|
2347
|
+
...REFERENCE_PART_CODES_ALLOWED_CHILDREN,
|
|
2348
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2349
|
+
]
|
|
2350
|
+
});
|
|
2351
|
+
|
|
2352
|
+
// src/schema/elementSchemas/elements/reference/editor.ts
|
|
2353
|
+
var EDITOR_SCHEMA = createSchema({
|
|
2354
|
+
code: "editor",
|
|
2355
|
+
kind: "element",
|
|
2356
|
+
tag: EDITOR_TAG,
|
|
2357
|
+
requiredAttributes: [],
|
|
2358
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2359
|
+
allowedChildrenCodes: [
|
|
2360
|
+
{ code: "personname", required: false },
|
|
2361
|
+
{ code: "orgname", required: false },
|
|
2362
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2363
|
+
]
|
|
2364
|
+
});
|
|
2365
|
+
|
|
2366
|
+
// src/schema/elementSchemas/elements/reference/othercredit.ts
|
|
2367
|
+
var OTHERCREDIT_SCHEMA = createSchema({
|
|
2368
|
+
code: "othercredit",
|
|
2369
|
+
kind: "element",
|
|
2370
|
+
tag: OTHERCREDIT_TAG,
|
|
2371
|
+
requiredAttributes: [],
|
|
2372
|
+
optionalAttributes: [...ID_ATTRS, "class", "otherclass"],
|
|
2373
|
+
allowedChildrenCodes: [
|
|
2374
|
+
{ code: "personname", required: false },
|
|
2375
|
+
{ code: "orgname", required: false },
|
|
2376
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2377
|
+
]
|
|
2378
|
+
});
|
|
2379
|
+
|
|
2380
|
+
// src/schema/elementSchemas/elements/reference/translator.ts
|
|
2381
|
+
var TRANSLATOR_SCHEMA = createSchema({
|
|
2382
|
+
code: "translator",
|
|
2383
|
+
kind: "element",
|
|
2384
|
+
tag: TRANSLATOR_TAG,
|
|
2385
|
+
requiredAttributes: [],
|
|
2386
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2387
|
+
allowedChildrenCodes: [
|
|
2388
|
+
{ code: "personname", required: false },
|
|
2389
|
+
{ code: "orgname", required: false },
|
|
2390
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2391
|
+
]
|
|
2392
|
+
});
|
|
2393
|
+
|
|
2394
|
+
// src/schema/elementSchemas/elements/reference/collab.ts
|
|
2395
|
+
var COLLAB_SCHEMA = createSchema({
|
|
2396
|
+
code: "collab",
|
|
2397
|
+
kind: "element",
|
|
2398
|
+
tag: COLLAB_TAG,
|
|
2399
|
+
requiredAttributes: [],
|
|
2400
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2401
|
+
allowedChildrenCodes: [
|
|
2402
|
+
{ code: "orgname", required: false },
|
|
2403
|
+
{ code: "personname", required: false },
|
|
2404
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2405
|
+
]
|
|
2406
|
+
});
|
|
2407
|
+
|
|
2408
|
+
// src/schema/elementSchemas/elements/reference/pubdate.ts
|
|
2409
|
+
var PUBDATE_SCHEMA = createSchema({
|
|
2410
|
+
code: "pubdate",
|
|
2411
|
+
kind: "element",
|
|
2412
|
+
tag: PUBDATE_TAG,
|
|
2413
|
+
requiredAttributes: [],
|
|
2414
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2415
|
+
allowedChildrenCodes: [
|
|
2416
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2417
|
+
]
|
|
2418
|
+
});
|
|
2419
|
+
|
|
2420
|
+
// src/schema/elementSchemas/elements/reference/date.ts
|
|
2421
|
+
var ACCESSED_DATE_ROLE = "accessed";
|
|
2422
|
+
var DATE_SCHEMA = createSchema({
|
|
2423
|
+
code: "date",
|
|
2424
|
+
kind: "element",
|
|
2425
|
+
tag: DATE_TAG,
|
|
2426
|
+
requiredAttributes: [],
|
|
2427
|
+
optionalAttributes: [...ID_ATTRS, "role"],
|
|
2428
|
+
allowedChildrenCodes: [...ATOM_CODES_ALLOWED_CHILDREN]
|
|
2429
|
+
});
|
|
2430
|
+
|
|
2431
|
+
// src/schema/elementSchemas/elements/reference/publishername.ts
|
|
2432
|
+
var PUBLISHERNAME_SCHEMA = createSchema({
|
|
2433
|
+
code: "publishername",
|
|
2434
|
+
kind: "element",
|
|
2435
|
+
tag: PUBLISHERNAME_TAG,
|
|
2436
|
+
requiredAttributes: [],
|
|
2437
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2438
|
+
allowedChildrenCodes: [
|
|
2439
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2440
|
+
]
|
|
2441
|
+
});
|
|
2442
|
+
|
|
2443
|
+
// src/schema/elementSchemas/elements/reference/address.ts
|
|
2444
|
+
var ADDRESS_SCHEMA = createSchema({
|
|
2445
|
+
code: "address",
|
|
2446
|
+
kind: "element",
|
|
2447
|
+
tag: ADDRESS_TAG,
|
|
2448
|
+
requiredAttributes: [],
|
|
2449
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2450
|
+
allowedChildrenCodes: [
|
|
2451
|
+
{ code: "city", required: false },
|
|
2452
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2453
|
+
]
|
|
2454
|
+
});
|
|
2455
|
+
|
|
2456
|
+
// src/schema/elementSchemas/elements/reference/city.ts
|
|
2457
|
+
var CITY_SCHEMA = createSchema({
|
|
2458
|
+
code: "city",
|
|
2459
|
+
kind: "element",
|
|
2460
|
+
tag: CITY_TAG,
|
|
2461
|
+
requiredAttributes: [],
|
|
2462
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2463
|
+
allowedChildrenCodes: [
|
|
2464
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2465
|
+
]
|
|
2466
|
+
});
|
|
2467
|
+
|
|
2468
|
+
// src/schema/elementSchemas/elements/reference/volumenum.ts
|
|
2469
|
+
var VOLUMENUM_SCHEMA = createSchema({
|
|
2470
|
+
code: "volumenum",
|
|
2471
|
+
kind: "element",
|
|
2472
|
+
tag: VOLUMENUM_TAG,
|
|
2473
|
+
requiredAttributes: [],
|
|
2474
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2475
|
+
allowedChildrenCodes: [
|
|
2476
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2477
|
+
]
|
|
2478
|
+
});
|
|
2479
|
+
|
|
2480
|
+
// src/schema/elementSchemas/elements/reference/issuenum.ts
|
|
2481
|
+
var ISSUENUM_SCHEMA = createSchema({
|
|
2482
|
+
code: "issuenum",
|
|
2483
|
+
kind: "element",
|
|
2484
|
+
tag: ISSUENUM_TAG,
|
|
2485
|
+
requiredAttributes: [],
|
|
2486
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2487
|
+
allowedChildrenCodes: [
|
|
2488
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2489
|
+
]
|
|
2490
|
+
});
|
|
2491
|
+
|
|
2492
|
+
// src/schema/elementSchemas/elements/reference/pagenums.ts
|
|
2493
|
+
var PAGENUMS_SCHEMA = createSchema({
|
|
2494
|
+
code: "pagenums",
|
|
2495
|
+
kind: "element",
|
|
2496
|
+
tag: PAGENUMS_TAG,
|
|
2497
|
+
requiredAttributes: [],
|
|
2498
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2499
|
+
allowedChildrenCodes: [
|
|
2500
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2501
|
+
]
|
|
2502
|
+
});
|
|
2503
|
+
|
|
2504
|
+
// src/schema/elementSchemas/elements/reference/pagenum.ts
|
|
2505
|
+
var PAGENUM_SCHEMA = createSchema({
|
|
2506
|
+
code: "pagenum",
|
|
2507
|
+
kind: "element",
|
|
2508
|
+
tag: PAGENUM_TAG,
|
|
2509
|
+
requiredAttributes: [],
|
|
2510
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2511
|
+
allowedChildrenCodes: [
|
|
2512
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2513
|
+
]
|
|
2514
|
+
});
|
|
2515
|
+
|
|
2516
|
+
// src/schema/elementSchemas/elements/reference/edition.ts
|
|
2517
|
+
var EDITION_SCHEMA = createSchema({
|
|
2518
|
+
code: "edition",
|
|
2519
|
+
kind: "element",
|
|
2520
|
+
tag: EDITION_TAG,
|
|
2521
|
+
requiredAttributes: [],
|
|
2522
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2523
|
+
allowedChildrenCodes: [
|
|
2524
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2525
|
+
]
|
|
2526
|
+
});
|
|
2527
|
+
|
|
2528
|
+
// src/schema/elementSchemas/elements/reference/pubId.ts
|
|
2529
|
+
var PUB_ID_SCHEMA = createSchema({
|
|
2530
|
+
code: "pubId",
|
|
2531
|
+
kind: "element",
|
|
2532
|
+
tag: PUB_ID_TAG,
|
|
2533
|
+
requiredAttributes: [],
|
|
2534
|
+
optionalAttributes: [...ID_ATTRS, "pub-id-type", "assigning-authority"],
|
|
2535
|
+
allowedChildrenCodes: [
|
|
2536
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2537
|
+
]
|
|
2538
|
+
});
|
|
2539
|
+
|
|
2540
|
+
// src/schema/helpers/matchesSchemaTag.ts
|
|
2541
|
+
var matchesSchemaTag = (element, tag) => element.tagName.toUpperCase() === tag.toUpperCase();
|
|
2542
|
+
|
|
2543
|
+
// src/schema/elementSchemas/elements/reference/biblioid.ts
|
|
2544
|
+
var PUBMED_ID_BIBLIOID_CLASS = "other";
|
|
2545
|
+
var PUBMED_ID_BIBLIOID_OTHERCLASS = "pmid";
|
|
2546
|
+
var BIBLIOID_SCHEMA = createSchema({
|
|
2547
|
+
code: "biblioid",
|
|
2548
|
+
kind: "element",
|
|
2549
|
+
tag: BIBLIOID_TAG,
|
|
2550
|
+
requiredAttributes: [],
|
|
2551
|
+
optionalAttributes: [...ID_ATTRS, "class", "otherclass"],
|
|
2552
|
+
allowedChildrenCodes: [...ATOM_CODES_ALLOWED_CHILDREN]
|
|
2553
|
+
});
|
|
2554
|
+
var isPubMedIdBiblioid = (element) => matchesSchemaTag(element, BIBLIOID_TAG) && element.classList.contains(PUBMED_ID_BIBLIOID_CLASS) && element.getAttribute("otherclass") === PUBMED_ID_BIBLIOID_OTHERCLASS;
|
|
2555
|
+
|
|
2556
|
+
// src/schema/elementSchemas/elements/reference/bibliomisc.ts
|
|
2557
|
+
var LEGAL_REFERENCE_BIBLIOMISC_ROLE = "legalRef";
|
|
2558
|
+
var BIBLIOMISC_SCHEMA = createSchema({
|
|
2559
|
+
code: "bibliomisc",
|
|
2560
|
+
kind: "element",
|
|
2561
|
+
tag: BIBLIOMISC_TAG,
|
|
2562
|
+
requiredAttributes: [],
|
|
2563
|
+
optionalAttributes: [...ID_ATTRS, "role"],
|
|
2564
|
+
allowedChildrenCodes: [...ATOM_CODES_ALLOWED_CHILDREN]
|
|
2565
|
+
});
|
|
2566
|
+
|
|
2567
|
+
// src/schema/elementSchemas/elements/reference/confgroup.ts
|
|
2568
|
+
var CONFGROUP_SCHEMA = createSchema({
|
|
2569
|
+
code: "confgroup",
|
|
2570
|
+
kind: "element",
|
|
2571
|
+
tag: CONFGROUP_TAG,
|
|
2572
|
+
requiredAttributes: [],
|
|
2573
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2574
|
+
allowedChildrenCodes: [
|
|
2575
|
+
{ code: "conftitle", required: false },
|
|
2576
|
+
{ code: "address", required: false },
|
|
2577
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2578
|
+
]
|
|
2579
|
+
});
|
|
2580
|
+
|
|
2581
|
+
// src/schema/elementSchemas/elements/reference/conftitle.ts
|
|
2582
|
+
var CONFTITLE_SCHEMA = createSchema({
|
|
2583
|
+
code: "conftitle",
|
|
2584
|
+
kind: "element",
|
|
2585
|
+
tag: CONFTITLE_TAG,
|
|
2586
|
+
requiredAttributes: [],
|
|
2587
|
+
optionalAttributes: [...ID_ATTRS],
|
|
2588
|
+
allowedChildrenCodes: [
|
|
2589
|
+
...ATOM_CODES_ALLOWED_CHILDREN
|
|
2590
|
+
]
|
|
2591
|
+
});
|
|
2592
|
+
|
|
2593
|
+
// src/schema/elementSchemas/elements/index.ts
|
|
2594
|
+
var ELEMENT_SCHEMAS = {
|
|
2595
|
+
bibliodiv: BIBLIODIV_SCHEMA,
|
|
2596
|
+
referenceBibliography: REFERENCE_BIBLIOGRAPHY_SCHEMA,
|
|
2597
|
+
referenceBibliomixed: BIBLIOMIXED_SCHEMA,
|
|
2598
|
+
bibliomset: BIBLIOMSET_SCHEMA,
|
|
2599
|
+
editor: EDITOR_SCHEMA,
|
|
2600
|
+
othercredit: OTHERCREDIT_SCHEMA,
|
|
2601
|
+
translator: TRANSLATOR_SCHEMA,
|
|
2602
|
+
collab: COLLAB_SCHEMA,
|
|
2603
|
+
pubdate: PUBDATE_SCHEMA,
|
|
2604
|
+
date: DATE_SCHEMA,
|
|
2605
|
+
publishername: PUBLISHERNAME_SCHEMA,
|
|
2606
|
+
address: ADDRESS_SCHEMA,
|
|
2607
|
+
city: CITY_SCHEMA,
|
|
2608
|
+
volumenum: VOLUMENUM_SCHEMA,
|
|
2609
|
+
issuenum: ISSUENUM_SCHEMA,
|
|
2610
|
+
pagenums: PAGENUMS_SCHEMA,
|
|
2611
|
+
pagenum: PAGENUM_SCHEMA,
|
|
2612
|
+
edition: EDITION_SCHEMA,
|
|
2613
|
+
pubId: PUB_ID_SCHEMA,
|
|
2614
|
+
biblioid: BIBLIOID_SCHEMA,
|
|
2615
|
+
bibliomisc: BIBLIOMISC_SCHEMA,
|
|
2616
|
+
confgroup: CONFGROUP_SCHEMA,
|
|
2617
|
+
conftitle: CONFTITLE_SCHEMA,
|
|
2618
|
+
para: PARA_SCHEMA,
|
|
2619
|
+
title1: TITLE_SCHEMA,
|
|
2620
|
+
footnote: FOOTNOTE_SCHEMA,
|
|
2621
|
+
footnoteno: FOOTNOTE_NUMBER_SCHEMA,
|
|
2622
|
+
olink: OLINK_SCHEMA,
|
|
2623
|
+
firstname: FIRSTNAME_SCHEMA,
|
|
2624
|
+
surname: SURNAME_SCHEMA,
|
|
2625
|
+
honorific: HONORIFIC_SCHEMA,
|
|
2626
|
+
orgname: ORGNAME_SCHEMA,
|
|
2627
|
+
email: EMAIL_SCHEMA,
|
|
2628
|
+
org: ORG_SCHEMA,
|
|
2629
|
+
degrees: DEGREES_SCHEMA,
|
|
2630
|
+
dialogue: DIALOGUE_SCHEMA,
|
|
2631
|
+
line: LINE_SCHEMA,
|
|
2632
|
+
linegroup: LINE_GROUP_SCHEMA,
|
|
2633
|
+
speaker: SPEAKER_SCHEMA,
|
|
2634
|
+
equation: EQUATION_SCHEMA,
|
|
2635
|
+
math: MATH_SCHEMA,
|
|
2636
|
+
mathphrase: MATHPHRASE_SCHEMA,
|
|
2637
|
+
merror: MERROR_SCHEMA,
|
|
2638
|
+
mfrac: MFRAC_SCHEMA,
|
|
2639
|
+
mi: MI_SCHEMA,
|
|
2640
|
+
mmultiscripts: MMULTISCRIPTS_SCHEMA,
|
|
2641
|
+
mn: MN_SCHEMA,
|
|
2642
|
+
mo: MO_SCHEMA,
|
|
2643
|
+
mover: MOVER_SCHEMA,
|
|
2644
|
+
mpadded: MPADDED_SCHEMA,
|
|
2645
|
+
mphantom: MPHANTOM_SCHEMA,
|
|
2646
|
+
mprescripts: MPRESCRIPTS_SCHEMA,
|
|
2647
|
+
mroot: MROOT_SCHEMA,
|
|
2648
|
+
mrow: MROW_SCHEMA,
|
|
2649
|
+
ms: MS_SCHEMA,
|
|
2650
|
+
mspace: MSPACE_SCHEMA,
|
|
2651
|
+
msqrt: MSQRT_SCHEMA,
|
|
2652
|
+
mstyle: MSTYLE_SCHEMA,
|
|
2653
|
+
msub: MSUB_SCHEMA,
|
|
2654
|
+
msubsup: MSUBSUP_SCHEMA,
|
|
2655
|
+
msup: MSUP_SCHEMA,
|
|
2656
|
+
mtable: MTABLE_SCHEMA,
|
|
2657
|
+
mtd: MTD_SCHEMA,
|
|
2658
|
+
mtext: MTEXT_SCHEMA,
|
|
2659
|
+
mtr: MTR_SCHEMA,
|
|
2660
|
+
munder: MUNDER_SCHEMA,
|
|
2661
|
+
munderover: MUNDEROVER_SCHEMA,
|
|
2662
|
+
img: IMG_SCHEMA,
|
|
2663
|
+
alttext: ALTTEXT_SCHEMA,
|
|
2664
|
+
imageobject: IMAGEOBJECT_SCHEMA,
|
|
2665
|
+
mediaobject: MEDIAOBJECT_SCHEMA,
|
|
2666
|
+
caption1: CAPTION_SCHEMA,
|
|
2667
|
+
figsource: FIGSOURCE_SCHEMA,
|
|
2668
|
+
fignote: FIGNOTE_SCHEMA,
|
|
2669
|
+
figure1: FIGURE_SCHEMA,
|
|
2670
|
+
informalfigure: INFORMALFIGURE_SCHEMA,
|
|
2671
|
+
keywordset: KEYWORDSET_SCHEMA,
|
|
2672
|
+
keyword: KEYWORD_SCHEMA,
|
|
2673
|
+
punc: PUNC_SCHEMA,
|
|
2674
|
+
label1: LABEL_SCHEMA,
|
|
2675
|
+
li: LI_SCHEMA,
|
|
2676
|
+
ol: OL_SCHEMA,
|
|
2677
|
+
ul: UL_SCHEMA,
|
|
2678
|
+
token: TOKEN_SCHEMA,
|
|
2679
|
+
tag: TAG_SCHEMA,
|
|
2680
|
+
lrh: LRH_SCHEMA,
|
|
2681
|
+
rrh: RRH_SCHEMA,
|
|
2682
|
+
source1: SOURCE_SCHEMA,
|
|
2683
|
+
subtitle1: SUBTITLE_SCHEMA,
|
|
2684
|
+
table1: TABLE_SCHEMA,
|
|
2685
|
+
tgroup: TGROUP_SCHEMA,
|
|
2316
2686
|
table: HTML_TABLE_SCHEMA,
|
|
2317
2687
|
thead: THEAD_SCHEMA,
|
|
2318
2688
|
tbody: TBODY_SCHEMA,
|
|
@@ -2384,7 +2754,10 @@ var INLINEEQUATION_SCHEMA = createSchema({
|
|
|
2384
2754
|
defaultValue: "added"
|
|
2385
2755
|
}
|
|
2386
2756
|
],
|
|
2387
|
-
allowedChildrenCodes: [
|
|
2757
|
+
allowedChildrenCodes: [
|
|
2758
|
+
{ code: "mathphrase", required: true },
|
|
2759
|
+
{ code: "tag", required: false }
|
|
2760
|
+
]
|
|
2388
2761
|
});
|
|
2389
2762
|
|
|
2390
2763
|
// src/schema/elementSchemas/inlineElements/link.ts
|
|
@@ -2471,9 +2844,6 @@ var findAttributeDefinitionByName = (definitions, name) => {
|
|
|
2471
2844
|
// src/schema/helpers/findSchemaByCode.ts
|
|
2472
2845
|
var findSchemaByCode = (code) => SCHEMAS[code];
|
|
2473
2846
|
|
|
2474
|
-
// src/schema/helpers/matchesSchemaTag.ts
|
|
2475
|
-
var matchesSchemaTag = (element, tag) => element.tagName.toUpperCase() === tag.toUpperCase();
|
|
2476
|
-
|
|
2477
2847
|
// src/schema/helpers/findSchemaByElement.ts
|
|
2478
2848
|
var findSchemaByElement = (element) => {
|
|
2479
2849
|
const schema = Object.values(SCHEMAS).find(
|
|
@@ -2488,12 +2858,402 @@ var isAttributeRestricted = (attr) => typeof attr !== "string";
|
|
|
2488
2858
|
// src/schema/helpers/isTrackChangesSchema.ts
|
|
2489
2859
|
var isTrackChangesSchema = (schema) => schema.code === "insertion" || schema.code === "deletion" || schema.code === "lineGroupRemoval";
|
|
2490
2860
|
|
|
2861
|
+
// src/schema/referenceSchemas/referenceTypeSchemas.ts
|
|
2862
|
+
var LINK_FIELDS = ["doi", "url"];
|
|
2863
|
+
var OTHER_MATERIAL_FIELDS = [
|
|
2864
|
+
"author",
|
|
2865
|
+
"editor",
|
|
2866
|
+
"title",
|
|
2867
|
+
"year",
|
|
2868
|
+
"containerTitle",
|
|
2869
|
+
"publisherPlace",
|
|
2870
|
+
"publisher",
|
|
2871
|
+
"volume",
|
|
2872
|
+
"issue",
|
|
2873
|
+
"pages",
|
|
2874
|
+
"accessDate",
|
|
2875
|
+
"genre",
|
|
2876
|
+
"eventTitle",
|
|
2877
|
+
"eventPlace",
|
|
2878
|
+
"documentNumber",
|
|
2879
|
+
"pubmedId",
|
|
2880
|
+
...LINK_FIELDS
|
|
2881
|
+
];
|
|
2882
|
+
var REFERENCE_TYPE_SCHEMAS = {
|
|
2883
|
+
monograph: {
|
|
2884
|
+
code: "monograph",
|
|
2885
|
+
label: "Book",
|
|
2886
|
+
legacyRoles: ["book"],
|
|
2887
|
+
allowedFields: [
|
|
2888
|
+
"author",
|
|
2889
|
+
"editor",
|
|
2890
|
+
"title",
|
|
2891
|
+
"year",
|
|
2892
|
+
"volume",
|
|
2893
|
+
"publisherPlace",
|
|
2894
|
+
"publisher",
|
|
2895
|
+
...LINK_FIELDS
|
|
2896
|
+
],
|
|
2897
|
+
requiredFields: ["title", "creators"],
|
|
2898
|
+
fieldLabels: { title: "Book title" }
|
|
2899
|
+
},
|
|
2900
|
+
serial: {
|
|
2901
|
+
code: "serial",
|
|
2902
|
+
label: "Journal issue",
|
|
2903
|
+
legacyRoles: [],
|
|
2904
|
+
allowedFields: ["title", "year", "volume", "issue", ...LINK_FIELDS],
|
|
2905
|
+
requiredFields: ["title"]
|
|
2906
|
+
},
|
|
2907
|
+
contribution: {
|
|
2908
|
+
code: "contribution",
|
|
2909
|
+
label: "Contributed book",
|
|
2910
|
+
legacyRoles: ["chapter"],
|
|
2911
|
+
allowedFields: [
|
|
2912
|
+
"author",
|
|
2913
|
+
"editor",
|
|
2914
|
+
"title",
|
|
2915
|
+
"year",
|
|
2916
|
+
"containerTitle",
|
|
2917
|
+
"publisherPlace",
|
|
2918
|
+
"publisher",
|
|
2919
|
+
"pages",
|
|
2920
|
+
...LINK_FIELDS
|
|
2921
|
+
],
|
|
2922
|
+
requiredFields: ["title", "containerTitle", "creators"],
|
|
2923
|
+
bibliomsetRelations: ["part", "book"],
|
|
2924
|
+
fieldLabels: { title: "Chapter title", containerTitle: "Book title" }
|
|
2925
|
+
},
|
|
2926
|
+
article: {
|
|
2927
|
+
code: "article",
|
|
2928
|
+
label: "Journal article",
|
|
2929
|
+
legacyRoles: ["journal", "article-journal"],
|
|
2930
|
+
allowedFields: [
|
|
2931
|
+
"author",
|
|
2932
|
+
"editor",
|
|
2933
|
+
"title",
|
|
2934
|
+
"year",
|
|
2935
|
+
"containerTitle",
|
|
2936
|
+
"volume",
|
|
2937
|
+
"issue",
|
|
2938
|
+
"pages",
|
|
2939
|
+
"genre",
|
|
2940
|
+
"publisher",
|
|
2941
|
+
"publisherPlace",
|
|
2942
|
+
"pubmedId",
|
|
2943
|
+
"accessDate",
|
|
2944
|
+
...LINK_FIELDS
|
|
2945
|
+
],
|
|
2946
|
+
requiredFields: ["title", "containerTitle"],
|
|
2947
|
+
bibliomsetRelations: ["article", "journal"],
|
|
2948
|
+
fieldLabels: { title: "Article title", containerTitle: "Journal title" }
|
|
2949
|
+
},
|
|
2950
|
+
message: {
|
|
2951
|
+
code: "message",
|
|
2952
|
+
label: "Email message",
|
|
2953
|
+
legacyRoles: [],
|
|
2954
|
+
allowedFields: ["author", "title", "year", ...LINK_FIELDS],
|
|
2955
|
+
requiredFields: ["title"]
|
|
2956
|
+
},
|
|
2957
|
+
website: {
|
|
2958
|
+
code: "website",
|
|
2959
|
+
label: "Website",
|
|
2960
|
+
legacyRoles: [],
|
|
2961
|
+
allowedFields: ["author", "title", "year", "accessDate", ...LINK_FIELDS],
|
|
2962
|
+
requiredFields: ["title"]
|
|
2963
|
+
},
|
|
2964
|
+
unpublished: {
|
|
2965
|
+
code: "unpublished",
|
|
2966
|
+
label: "Unpublished material",
|
|
2967
|
+
legacyRoles: [],
|
|
2968
|
+
allowedFields: [
|
|
2969
|
+
"author",
|
|
2970
|
+
"title",
|
|
2971
|
+
"year",
|
|
2972
|
+
"publisher",
|
|
2973
|
+
"genre",
|
|
2974
|
+
"eventTitle",
|
|
2975
|
+
"eventPlace",
|
|
2976
|
+
...LINK_FIELDS
|
|
2977
|
+
],
|
|
2978
|
+
requiredFields: ["title"],
|
|
2979
|
+
replacedElements: [
|
|
2980
|
+
{ tag: "pubdate", replacement: "date" },
|
|
2981
|
+
{ tag: "publishername", replacement: "orgname" }
|
|
2982
|
+
]
|
|
2983
|
+
},
|
|
2984
|
+
case: {
|
|
2985
|
+
code: "case",
|
|
2986
|
+
label: "Case",
|
|
2987
|
+
legacyRoles: [],
|
|
2988
|
+
allowedFields: ["title", "year", "documentNumber", ...LINK_FIELDS],
|
|
2989
|
+
requiredFields: ["title"]
|
|
2990
|
+
},
|
|
2991
|
+
legislation: {
|
|
2992
|
+
code: "legislation",
|
|
2993
|
+
label: "Legislation",
|
|
2994
|
+
legacyRoles: [],
|
|
2995
|
+
allowedFields: [
|
|
2996
|
+
"title",
|
|
2997
|
+
"year",
|
|
2998
|
+
"documentNumber",
|
|
2999
|
+
"publisherPlace",
|
|
3000
|
+
...LINK_FIELDS
|
|
3001
|
+
],
|
|
3002
|
+
requiredFields: ["title"]
|
|
3003
|
+
},
|
|
3004
|
+
other: {
|
|
3005
|
+
code: "other",
|
|
3006
|
+
label: "Other material",
|
|
3007
|
+
legacyRoles: [],
|
|
3008
|
+
allowedFields: OTHER_MATERIAL_FIELDS,
|
|
3009
|
+
requiredFields: ["title"]
|
|
3010
|
+
},
|
|
3011
|
+
recording: {
|
|
3012
|
+
code: "recording",
|
|
3013
|
+
label: "Recording",
|
|
3014
|
+
legacyRoles: [],
|
|
3015
|
+
allowedFields: ["author", "title", "year", ...LINK_FIELDS],
|
|
3016
|
+
requiredFields: ["title", "year"],
|
|
3017
|
+
replacedElements: [{ tag: "author", replacement: "othercredit" }]
|
|
3018
|
+
},
|
|
3019
|
+
film: {
|
|
3020
|
+
code: "film",
|
|
3021
|
+
label: "Film",
|
|
3022
|
+
legacyRoles: [],
|
|
3023
|
+
allowedFields: ["title", "year", ...LINK_FIELDS],
|
|
3024
|
+
requiredFields: ["title"]
|
|
3025
|
+
}
|
|
3026
|
+
};
|
|
3027
|
+
|
|
3028
|
+
// src/schema/helpers/findReferenceTypeSchemaByElement.ts
|
|
3029
|
+
var findReferenceTypeSchemaByElement = (reference) => {
|
|
3030
|
+
const role = reference.getAttribute("role")?.trim().toLowerCase() ?? "";
|
|
3031
|
+
const schemas = Object.values(REFERENCE_TYPE_SCHEMAS);
|
|
3032
|
+
return schemas.find(
|
|
3033
|
+
(schema) => schema.code === role || schema.legacyRoles.includes(role)
|
|
3034
|
+
);
|
|
3035
|
+
};
|
|
3036
|
+
|
|
3037
|
+
// src/helpers/isDeletedElement.ts
|
|
3038
|
+
var isDeletedElement = (element) => {
|
|
3039
|
+
return !!closestElementBySchema({
|
|
3040
|
+
element,
|
|
3041
|
+
code: "deletion"
|
|
3042
|
+
});
|
|
3043
|
+
};
|
|
3044
|
+
|
|
3045
|
+
// src/helpers/closestElementBySchema.ts
|
|
3046
|
+
var closestElementBySchema = ({
|
|
3047
|
+
element,
|
|
3048
|
+
code,
|
|
3049
|
+
ignoreDeletedElements = false
|
|
3050
|
+
}) => {
|
|
3051
|
+
const schema = findSchemaByCode(code);
|
|
3052
|
+
if (!schema) return;
|
|
3053
|
+
const closestElement = element.closest(
|
|
3054
|
+
schema.tag.toLowerCase()
|
|
3055
|
+
);
|
|
3056
|
+
if (!closestElement) return;
|
|
3057
|
+
if (schema.matchesElement && !schema.matchesElement(closestElement)) {
|
|
3058
|
+
return;
|
|
3059
|
+
}
|
|
3060
|
+
if (ignoreDeletedElements && isDeletedElement(closestElement)) {
|
|
3061
|
+
return closestElementBySchema({
|
|
3062
|
+
element: closestElement,
|
|
3063
|
+
code,
|
|
3064
|
+
ignoreDeletedElements
|
|
3065
|
+
});
|
|
3066
|
+
}
|
|
3067
|
+
return closestElement;
|
|
3068
|
+
};
|
|
3069
|
+
|
|
3070
|
+
// src/helpers/isInTrackedDeletion.ts
|
|
3071
|
+
var isInTrackedDeletion = (element) => !!element.closest("span.del");
|
|
3072
|
+
|
|
3073
|
+
// src/helpers/hasLiveUri.ts
|
|
3074
|
+
var hasLiveUri = (link) => Array.from(link.querySelectorAll("uri")).some(
|
|
3075
|
+
(uri) => !isInTrackedDeletion(uri)
|
|
3076
|
+
);
|
|
3077
|
+
|
|
3078
|
+
// src/schema/helpers/findReferenceFieldByElement.ts
|
|
3079
|
+
var isContainerTitle = (title) => {
|
|
3080
|
+
const relation = closestElementBySchema({
|
|
3081
|
+
element: title,
|
|
3082
|
+
code: "bibliomset"
|
|
3083
|
+
})?.getAttribute("relation");
|
|
3084
|
+
return CONTAINER_BIBLIOMSET_RELATIONS.some(
|
|
3085
|
+
(containerRelation) => containerRelation === relation
|
|
3086
|
+
);
|
|
3087
|
+
};
|
|
3088
|
+
var isUnpublishedReference = (element) => {
|
|
3089
|
+
const reference = closestElementBySchema({
|
|
3090
|
+
element,
|
|
3091
|
+
code: "referenceBibliomixed"
|
|
3092
|
+
});
|
|
3093
|
+
return !!reference && findReferenceTypeSchemaByElement(reference)?.code === "unpublished";
|
|
3094
|
+
};
|
|
3095
|
+
var hasAcceptedChild = (element, tag) => Array.from(element.querySelectorAll(tag.toLowerCase())).some(
|
|
3096
|
+
(child) => !isInTrackedDeletion(child)
|
|
3097
|
+
);
|
|
3098
|
+
var isConferenceDates = (confgroup) => hasAcceptedChild(confgroup, CONFDATES_TAG) && !hasAcceptedChild(confgroup, CONFTITLE_TAG);
|
|
3099
|
+
var findReferenceFieldByElement = (element) => {
|
|
3100
|
+
switch (findSchemaByElement(element)?.code) {
|
|
3101
|
+
case "author":
|
|
3102
|
+
case "othercredit":
|
|
3103
|
+
return "author";
|
|
3104
|
+
case "editor":
|
|
3105
|
+
return "editor";
|
|
3106
|
+
case "title1":
|
|
3107
|
+
return isContainerTitle(element) ? "containerTitle" : "title";
|
|
3108
|
+
case "pubdate":
|
|
3109
|
+
return "year";
|
|
3110
|
+
case "date":
|
|
3111
|
+
return element.getAttribute("role") === ACCESSED_DATE_ROLE ? "accessDate" : "year";
|
|
3112
|
+
case "publishername":
|
|
3113
|
+
case "orgname":
|
|
3114
|
+
return "publisher";
|
|
3115
|
+
case "address":
|
|
3116
|
+
return isUnpublishedReference(element) ? "eventPlace" : "publisherPlace";
|
|
3117
|
+
case "volumenum":
|
|
3118
|
+
return "volume";
|
|
3119
|
+
case "issuenum":
|
|
3120
|
+
return "issue";
|
|
3121
|
+
case "pagenums":
|
|
3122
|
+
return "pages";
|
|
3123
|
+
case "link":
|
|
3124
|
+
if (element.hasAttribute(LINKEND_ATTRIBUTE)) return void 0;
|
|
3125
|
+
return hasLiveUri(element) ? "url" : "doi";
|
|
3126
|
+
case "bibliomisc":
|
|
3127
|
+
return element.getAttribute("role") === LEGAL_REFERENCE_BIBLIOMISC_ROLE ? "documentNumber" : "genre";
|
|
3128
|
+
case "confgroup":
|
|
3129
|
+
return isConferenceDates(element) ? "year" : "eventTitle";
|
|
3130
|
+
case "biblioid":
|
|
3131
|
+
return isPubMedIdBiblioid(element) ? "pubmedId" : void 0;
|
|
3132
|
+
default:
|
|
3133
|
+
return void 0;
|
|
3134
|
+
}
|
|
3135
|
+
};
|
|
3136
|
+
|
|
3137
|
+
// src/schema/referenceSchemas/referenceFieldSchemas.ts
|
|
3138
|
+
var REFERENCE_FIELD_SCHEMAS = {
|
|
3139
|
+
author: {
|
|
3140
|
+
code: "author",
|
|
3141
|
+
label: "Author",
|
|
3142
|
+
elementCodes: ["author", "othercredit"]
|
|
3143
|
+
},
|
|
3144
|
+
editor: {
|
|
3145
|
+
code: "editor",
|
|
3146
|
+
label: "Editor",
|
|
3147
|
+
elementCodes: ["editor"]
|
|
3148
|
+
},
|
|
3149
|
+
title: {
|
|
3150
|
+
code: "title",
|
|
3151
|
+
label: "Title",
|
|
3152
|
+
elementCodes: ["title1"]
|
|
3153
|
+
},
|
|
3154
|
+
year: {
|
|
3155
|
+
code: "year",
|
|
3156
|
+
label: "Date",
|
|
3157
|
+
elementCodes: ["pubdate", "date", "confgroup"]
|
|
3158
|
+
},
|
|
3159
|
+
containerTitle: {
|
|
3160
|
+
code: "containerTitle",
|
|
3161
|
+
label: "Container title",
|
|
3162
|
+
elementCodes: ["title1"]
|
|
3163
|
+
},
|
|
3164
|
+
publisherPlace: {
|
|
3165
|
+
code: "publisherPlace",
|
|
3166
|
+
label: "Publisher place",
|
|
3167
|
+
elementCodes: ["address"]
|
|
3168
|
+
},
|
|
3169
|
+
publisher: {
|
|
3170
|
+
code: "publisher",
|
|
3171
|
+
label: "Publisher or institution",
|
|
3172
|
+
elementCodes: ["publishername", "orgname"]
|
|
3173
|
+
},
|
|
3174
|
+
volume: {
|
|
3175
|
+
code: "volume",
|
|
3176
|
+
label: "Volume",
|
|
3177
|
+
elementCodes: ["volumenum"]
|
|
3178
|
+
},
|
|
3179
|
+
issue: {
|
|
3180
|
+
code: "issue",
|
|
3181
|
+
label: "Issue",
|
|
3182
|
+
elementCodes: ["issuenum"]
|
|
3183
|
+
},
|
|
3184
|
+
pages: {
|
|
3185
|
+
code: "pages",
|
|
3186
|
+
label: "Pages",
|
|
3187
|
+
elementCodes: ["pagenums"]
|
|
3188
|
+
},
|
|
3189
|
+
doi: {
|
|
3190
|
+
code: "doi",
|
|
3191
|
+
label: "DOI",
|
|
3192
|
+
elementCodes: ["link"]
|
|
3193
|
+
},
|
|
3194
|
+
url: {
|
|
3195
|
+
code: "url",
|
|
3196
|
+
label: "URL",
|
|
3197
|
+
elementCodes: ["link"]
|
|
3198
|
+
},
|
|
3199
|
+
accessDate: {
|
|
3200
|
+
code: "accessDate",
|
|
3201
|
+
label: "Access date",
|
|
3202
|
+
elementCodes: ["date"]
|
|
3203
|
+
},
|
|
3204
|
+
genre: {
|
|
3205
|
+
code: "genre",
|
|
3206
|
+
label: "Description",
|
|
3207
|
+
elementCodes: ["bibliomisc"]
|
|
3208
|
+
},
|
|
3209
|
+
eventTitle: {
|
|
3210
|
+
code: "eventTitle",
|
|
3211
|
+
label: "Conference title",
|
|
3212
|
+
elementCodes: ["confgroup"]
|
|
3213
|
+
},
|
|
3214
|
+
eventPlace: {
|
|
3215
|
+
code: "eventPlace",
|
|
3216
|
+
label: "Conference place",
|
|
3217
|
+
elementCodes: ["address"]
|
|
3218
|
+
},
|
|
3219
|
+
documentNumber: {
|
|
3220
|
+
code: "documentNumber",
|
|
3221
|
+
label: "Legal reference",
|
|
3222
|
+
elementCodes: ["bibliomisc"]
|
|
3223
|
+
},
|
|
3224
|
+
pubmedId: {
|
|
3225
|
+
code: "pubmedId",
|
|
3226
|
+
label: "PubMed ID",
|
|
3227
|
+
elementCodes: ["biblioid"]
|
|
3228
|
+
}
|
|
3229
|
+
};
|
|
3230
|
+
|
|
2491
3231
|
// src/schema/shared/labelElements.ts
|
|
2492
3232
|
var ElementLabel = {
|
|
2493
3233
|
mark: "Mark",
|
|
2494
3234
|
referenceBibliomixed: "Reference Bibliomixed",
|
|
2495
3235
|
referenceBibliography: "Reference Bibliography",
|
|
2496
3236
|
bibliodiv: "Bibliodiv",
|
|
3237
|
+
bibliomset: "Reference Block",
|
|
3238
|
+
editor: "Editor",
|
|
3239
|
+
othercredit: "Other Credit",
|
|
3240
|
+
translator: "Translator",
|
|
3241
|
+
collab: "Collaborator",
|
|
3242
|
+
pubdate: "Publication Date",
|
|
3243
|
+
date: "Date",
|
|
3244
|
+
publishername: "Publisher Name",
|
|
3245
|
+
address: "Address",
|
|
3246
|
+
city: "City",
|
|
3247
|
+
volumenum: "Volume Number",
|
|
3248
|
+
issuenum: "Issue Number",
|
|
3249
|
+
pagenums: "Page Numbers",
|
|
3250
|
+
pagenum: "Page Number",
|
|
3251
|
+
edition: "Edition",
|
|
3252
|
+
pubId: "Publication ID",
|
|
3253
|
+
biblioid: "Bibliographic ID",
|
|
3254
|
+
bibliomisc: "Reference Miscellany",
|
|
3255
|
+
confgroup: "Conference",
|
|
3256
|
+
conftitle: "Conference Title",
|
|
2497
3257
|
indexterm: "Indexterm",
|
|
2498
3258
|
primary: "Primary",
|
|
2499
3259
|
secondary: "Secondary",
|
|
@@ -2641,39 +3401,7 @@ var IGNORED_VALIDATION_ELEMENT_SELECTORS = [
|
|
|
2641
3401
|
"referenceBibliomixed"
|
|
2642
3402
|
];
|
|
2643
3403
|
var isIgnoredValidation = (code) => IGNORED_VALIDATION_ELEMENT_SELECTORS.includes(code);
|
|
2644
|
-
|
|
2645
|
-
// src/helpers/closestElementBySchema.ts
|
|
2646
|
-
var closestElementBySchema = ({
|
|
2647
|
-
element,
|
|
2648
|
-
code,
|
|
2649
|
-
ignoreDeletedElements = false
|
|
2650
|
-
}) => {
|
|
2651
|
-
const schema = findSchemaByCode(code);
|
|
2652
|
-
if (!schema) return;
|
|
2653
|
-
const closestElement = element.closest(
|
|
2654
|
-
schema.tag.toLowerCase()
|
|
2655
|
-
);
|
|
2656
|
-
if (!closestElement) return;
|
|
2657
|
-
if (schema.matchesElement && !schema.matchesElement(closestElement)) {
|
|
2658
|
-
return;
|
|
2659
|
-
}
|
|
2660
|
-
if (ignoreDeletedElements && isDeletedElement(closestElement)) {
|
|
2661
|
-
return closestElementBySchema({
|
|
2662
|
-
element: closestElement,
|
|
2663
|
-
code,
|
|
2664
|
-
ignoreDeletedElements
|
|
2665
|
-
});
|
|
2666
|
-
}
|
|
2667
|
-
return closestElement;
|
|
2668
|
-
};
|
|
2669
|
-
|
|
2670
|
-
// src/helpers/isDeletedElement.ts
|
|
2671
|
-
var isDeletedElement = (element) => {
|
|
2672
|
-
return !!closestElementBySchema({
|
|
2673
|
-
element,
|
|
2674
|
-
code: "deletion"
|
|
2675
|
-
});
|
|
2676
|
-
};
|
|
3404
|
+
var isIgnoredValidationByAttribute = (element) => element.getAttribute(VALIDATION_IGNORED_ATTRIBUTE) === "true";
|
|
2677
3405
|
|
|
2678
3406
|
// src/validation/utils/getElementsSelector.ts
|
|
2679
3407
|
var getElementsSelector = ({
|
|
@@ -2711,12 +3439,14 @@ var generateValidationIssueId = () => {
|
|
|
2711
3439
|
};
|
|
2712
3440
|
|
|
2713
3441
|
// src/validation/helpers/addValidationIssue.ts
|
|
2714
|
-
var createValidationIssue = (issue) => ({
|
|
3442
|
+
var createValidationIssue = (element, issue) => ({
|
|
3443
|
+
...issue,
|
|
2715
3444
|
id: generateValidationIssueId(),
|
|
2716
|
-
|
|
3445
|
+
store: element ? getStore(element) : issue.store,
|
|
3446
|
+
ignored: element ? isIgnoredValidationByAttribute(element) : false
|
|
2717
3447
|
});
|
|
2718
|
-
var addValidationIssue = (errors, issue) => {
|
|
2719
|
-
errors.push(createValidationIssue(issue));
|
|
3448
|
+
var addValidationIssue = (errors, element, issue) => {
|
|
3449
|
+
errors.push(createValidationIssue(element, issue));
|
|
2720
3450
|
};
|
|
2721
3451
|
|
|
2722
3452
|
// src/validation/validateFootnotes.ts
|
|
@@ -2735,8 +3465,7 @@ var validateFootnoteNumber = (footnoteElement) => {
|
|
|
2735
3465
|
FOOTNOTE_NUMBER_SCHEMA.tag
|
|
2736
3466
|
);
|
|
2737
3467
|
if (!footnoteNumber) {
|
|
2738
|
-
addValidationIssue(errors, {
|
|
2739
|
-
store: getStore(footnoteElement),
|
|
3468
|
+
addValidationIssue(errors, footnoteElement, {
|
|
2740
3469
|
title: "Footnote number missing",
|
|
2741
3470
|
kind: "missing",
|
|
2742
3471
|
description: "The footnote number is missing. Please add it to the footnote.",
|
|
@@ -2767,8 +3496,7 @@ var validateConsecutiveFootnotes = (root) => {
|
|
|
2767
3496
|
);
|
|
2768
3497
|
if (!footnoteNumberElement) {
|
|
2769
3498
|
errors.push(
|
|
2770
|
-
createValidationIssue({
|
|
2771
|
-
store: getStore(footnote),
|
|
3499
|
+
createValidationIssue(footnote, {
|
|
2772
3500
|
title: "Footnote number missing",
|
|
2773
3501
|
kind: "missing",
|
|
2774
3502
|
description: "The footnote number is missing. Please add it to the footnote.",
|
|
@@ -2781,8 +3509,7 @@ var validateConsecutiveFootnotes = (root) => {
|
|
|
2781
3509
|
continue;
|
|
2782
3510
|
}
|
|
2783
3511
|
errors.push(
|
|
2784
|
-
createValidationIssue({
|
|
2785
|
-
store: getStore(footnote),
|
|
3512
|
+
createValidationIssue(footnote, {
|
|
2786
3513
|
title: "Non-consecutive footnote numbers",
|
|
2787
3514
|
kind: "missing",
|
|
2788
3515
|
description: `Footnote numbers must be consecutive, footnote number (${label}) expected to be (${expectedNumber}). Please reorder the footnotes.`,
|
|
@@ -2813,8 +3540,7 @@ var validateConsecutiveFootnoteCues = (root) => {
|
|
|
2813
3540
|
continue;
|
|
2814
3541
|
}
|
|
2815
3542
|
errors.push(
|
|
2816
|
-
createValidationIssue({
|
|
2817
|
-
store: getStore(footnoteLink),
|
|
3543
|
+
createValidationIssue(footnoteLink, {
|
|
2818
3544
|
title: "Non-consecutive footnote cues",
|
|
2819
3545
|
kind: "missing",
|
|
2820
3546
|
description: "Footnote cues must be consecutive. Please reorder the footnote cues.",
|
|
@@ -2858,8 +3584,7 @@ var validateLinkend = (linkElement, elementsToLink) => {
|
|
|
2858
3584
|
);
|
|
2859
3585
|
if (isLinkFootnoteCue) {
|
|
2860
3586
|
return [
|
|
2861
|
-
createValidationIssue({
|
|
2862
|
-
store: getStore(linkElement),
|
|
3587
|
+
createValidationIssue(linkElement, {
|
|
2863
3588
|
title: "Unlinked footnote cue",
|
|
2864
3589
|
kind: "unlinked",
|
|
2865
3590
|
description: "This footnote cue is not referenced to any footnote in this chapter. Please link it again manually.",
|
|
@@ -2880,8 +3605,7 @@ var validateLinkend = (linkElement, elementsToLink) => {
|
|
|
2880
3605
|
}
|
|
2881
3606
|
const isBlocker = LINK_BLOCKER_ROLES.includes(role.toLowerCase());
|
|
2882
3607
|
return [
|
|
2883
|
-
createValidationIssue({
|
|
2884
|
-
store: getStore(linkElement),
|
|
3608
|
+
createValidationIssue(linkElement, {
|
|
2885
3609
|
title: "Unlinked element",
|
|
2886
3610
|
kind: "unlinked",
|
|
2887
3611
|
description: "This link is not referenced to any element in the current chapter or any other chapter. Please link it again manually.",
|
|
@@ -2941,8 +3665,7 @@ var validateAttributes = (element, schema) => {
|
|
|
2941
3665
|
continue;
|
|
2942
3666
|
}
|
|
2943
3667
|
if (!definition.values.includes(value)) {
|
|
2944
|
-
addValidationIssue(errors, {
|
|
2945
|
-
store: getStore(element),
|
|
3668
|
+
addValidationIssue(errors, element, {
|
|
2946
3669
|
title: `Invalid attribute value "${value}" in element ${element.tagName}`,
|
|
2947
3670
|
level: "warning",
|
|
2948
3671
|
kind: "forbidden",
|
|
@@ -2957,8 +3680,7 @@ var validateAttributes = (element, schema) => {
|
|
|
2957
3680
|
var validateElementAgainstSchema = (element, schema) => {
|
|
2958
3681
|
const errors = [];
|
|
2959
3682
|
if (!matchesSchemaTag(element, schema.tag)) {
|
|
2960
|
-
addValidationIssue(errors, {
|
|
2961
|
-
store: getStore(element),
|
|
3683
|
+
addValidationIssue(errors, element, {
|
|
2962
3684
|
title: `Expected ${schema.tag}, got ${element.tagName}`,
|
|
2963
3685
|
level: "warning",
|
|
2964
3686
|
kind: "forbidden",
|
|
@@ -2988,8 +3710,7 @@ var validateRequiredChildren = (element, schema, childElements) => {
|
|
|
2988
3710
|
`Please provide at least one ${elementLabel} in this ${parentLabel}.`,
|
|
2989
3711
|
extraInstruction
|
|
2990
3712
|
].filter(Boolean).join(" ");
|
|
2991
|
-
addValidationIssue(errors, {
|
|
2992
|
-
store: getStore(element),
|
|
3713
|
+
addValidationIssue(errors, element, {
|
|
2993
3714
|
title: `${elementLabel} missing`,
|
|
2994
3715
|
level: "warning",
|
|
2995
3716
|
kind: "missing",
|
|
@@ -3023,8 +3744,7 @@ var validateChildren = (element, schema) => {
|
|
|
3023
3744
|
for (const child of childElements) {
|
|
3024
3745
|
const childSchema = findSchemaByElement(child);
|
|
3025
3746
|
if (!childSchema) {
|
|
3026
|
-
addValidationIssue(errors, {
|
|
3027
|
-
store: getStore(child),
|
|
3747
|
+
addValidationIssue(errors, child, {
|
|
3028
3748
|
title: `No schema found for child element ${child.tagName}`,
|
|
3029
3749
|
level: "warning",
|
|
3030
3750
|
kind: "missing",
|
|
@@ -3036,8 +3756,7 @@ var validateChildren = (element, schema) => {
|
|
|
3036
3756
|
(candidate) => candidate.code === childSchema.code
|
|
3037
3757
|
);
|
|
3038
3758
|
if (!allowedChild) {
|
|
3039
|
-
addValidationIssue(errors, {
|
|
3040
|
-
store: getStore(child),
|
|
3759
|
+
addValidationIssue(errors, child, {
|
|
3041
3760
|
title: `Forbidden child element ${child.tagName}`,
|
|
3042
3761
|
level: "warning",
|
|
3043
3762
|
kind: "forbidden",
|
|
@@ -3087,8 +3806,7 @@ var validateElementToLinkTo = (element, linkElements) => {
|
|
|
3087
3806
|
if (isFootnote(element)) {
|
|
3088
3807
|
const label = extractFootnoteNumber(element);
|
|
3089
3808
|
return [
|
|
3090
|
-
createValidationIssue({
|
|
3091
|
-
store: getStore(element),
|
|
3809
|
+
createValidationIssue(element, {
|
|
3092
3810
|
title: "Uncited footnote",
|
|
3093
3811
|
kind: "uncited",
|
|
3094
3812
|
description: `The footnote ${label} is not cited to any footnote cue in this chapter. Please reference it in the chapter.`,
|
|
@@ -3098,8 +3816,7 @@ var validateElementToLinkTo = (element, linkElements) => {
|
|
|
3098
3816
|
}
|
|
3099
3817
|
if (isReference(element)) {
|
|
3100
3818
|
return [
|
|
3101
|
-
createValidationIssue({
|
|
3102
|
-
store: getStore(element),
|
|
3819
|
+
createValidationIssue(element, {
|
|
3103
3820
|
title: "Uncited reference",
|
|
3104
3821
|
kind: "uncited",
|
|
3105
3822
|
description: "This reference is not cited in this chapter or any other chapter. Please add a link to this reference or delete it.",
|
|
@@ -3109,8 +3826,7 @@ var validateElementToLinkTo = (element, linkElements) => {
|
|
|
3109
3826
|
}
|
|
3110
3827
|
if (isTable(element)) {
|
|
3111
3828
|
return [
|
|
3112
|
-
createValidationIssue({
|
|
3113
|
-
store: getStore(element),
|
|
3829
|
+
createValidationIssue(element, {
|
|
3114
3830
|
title: "Uncited table",
|
|
3115
3831
|
kind: "uncited",
|
|
3116
3832
|
description: "This table is not cited in this chapter or any other chapter. Please add a link to this table or delete it.",
|
|
@@ -3120,8 +3836,7 @@ var validateElementToLinkTo = (element, linkElements) => {
|
|
|
3120
3836
|
}
|
|
3121
3837
|
if (isFigure(element)) {
|
|
3122
3838
|
return [
|
|
3123
|
-
createValidationIssue({
|
|
3124
|
-
store: getStore(element),
|
|
3839
|
+
createValidationIssue(element, {
|
|
3125
3840
|
title: "Uncited figure",
|
|
3126
3841
|
kind: "uncited",
|
|
3127
3842
|
description: "This figure is not cited in this chapter or any other chapter. Please add a link to this figure or delete it.",
|
|
@@ -3137,6 +3852,7 @@ var import_mark2 = __toESM(require("mark.js"));
|
|
|
3137
3852
|
var EDGE_PUNCTUATION = `:;.,\\-\u2013\u2014\u2012_(){}[\\]!'"+=\xAB\xBB\u2039\u203A\u201C\u201D\u2018\u2019<>`;
|
|
3138
3853
|
var WEB_URI_PATTERN = `(?:(?:https?):\\/\\/|www\\.)(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}(?::\\d{1,5})?(?:\\/(?:[^\\s]*[^\\s${EDGE_PUNCTUATION}])?)?`;
|
|
3139
3854
|
var WEB_URI_IN_TEXT_REGEX = new RegExp(WEB_URI_PATTERN, "gi");
|
|
3855
|
+
var POSSIBLE_WEBLINK_CLASS = "possible-weblink";
|
|
3140
3856
|
var POSSIBLE_WEBLINK_EXCLUDE_SELECTORS = [
|
|
3141
3857
|
"tag",
|
|
3142
3858
|
"tag *",
|
|
@@ -3148,40 +3864,98 @@ var POSSIBLE_WEBLINK_EXCLUDE_SELECTORS = [
|
|
|
3148
3864
|
"query *",
|
|
3149
3865
|
"comment",
|
|
3150
3866
|
"comment *",
|
|
3867
|
+
`.${POSSIBLE_WEBLINK_CLASS}`,
|
|
3868
|
+
`.${POSSIBLE_WEBLINK_CLASS} *`,
|
|
3151
3869
|
...IGNORED_ELEMENT_SELECTORS
|
|
3152
3870
|
];
|
|
3153
|
-
var
|
|
3154
|
-
const
|
|
3155
|
-
const
|
|
3156
|
-
|
|
3871
|
+
var getPossibleWeblinks = (root) => {
|
|
3872
|
+
const possibleWeblinks = /* @__PURE__ */ new Map();
|
|
3873
|
+
const allWeblinkMatches = Array.from(
|
|
3874
|
+
root.getElementsByClassName(POSSIBLE_WEBLINK_CLASS)
|
|
3875
|
+
);
|
|
3876
|
+
for (const weblinkMatch of allWeblinkMatches) {
|
|
3877
|
+
const storeId = weblinkMatch.getAttribute(STORE_ATTRIBUTE);
|
|
3878
|
+
if (!storeId || possibleWeblinks.has(storeId)) continue;
|
|
3879
|
+
const elements = allWeblinkMatches.filter(
|
|
3880
|
+
(element) => element.getAttribute(STORE_ATTRIBUTE) === storeId
|
|
3881
|
+
);
|
|
3882
|
+
const weblink = elements.map((element) => element.textContent).join("");
|
|
3883
|
+
possibleWeblinks.set(storeId, {
|
|
3884
|
+
weblink,
|
|
3885
|
+
elements
|
|
3886
|
+
});
|
|
3887
|
+
}
|
|
3888
|
+
return possibleWeblinks;
|
|
3889
|
+
};
|
|
3890
|
+
var getWeblinkMatchId = (matchIndex) => `weblink-match-${matchIndex}`;
|
|
3891
|
+
var createWeblinkMatchTracker = () => {
|
|
3892
|
+
const matchedText = [];
|
|
3893
|
+
const matchedElements = [];
|
|
3894
|
+
const possibleWeblinks = /* @__PURE__ */ new Map();
|
|
3895
|
+
let matchIndex = 0;
|
|
3896
|
+
let currentMatchId = getWeblinkMatchId(matchIndex);
|
|
3897
|
+
const resetMatch = () => {
|
|
3898
|
+
matchIndex += 1;
|
|
3899
|
+
currentMatchId = getWeblinkMatchId(matchIndex);
|
|
3900
|
+
matchedText.length = 0;
|
|
3901
|
+
matchedElements.length = 0;
|
|
3902
|
+
};
|
|
3903
|
+
const composeWeblink = (element, url) => {
|
|
3904
|
+
element.setAttribute(STORE_ATTRIBUTE, currentMatchId);
|
|
3905
|
+
matchedText.push(element.textContent);
|
|
3906
|
+
matchedElements.push(element);
|
|
3907
|
+
if (matchedText.join("") !== url) return;
|
|
3908
|
+
possibleWeblinks.set(currentMatchId, {
|
|
3909
|
+
weblink: matchedText.join(""),
|
|
3910
|
+
elements: [...matchedElements]
|
|
3911
|
+
});
|
|
3912
|
+
resetMatch();
|
|
3913
|
+
};
|
|
3914
|
+
return { composeWeblink, possibleWeblinks };
|
|
3915
|
+
};
|
|
3916
|
+
var markPossibleWeblinks = (editor) => {
|
|
3917
|
+
const instance = new import_mark2.default(editor);
|
|
3918
|
+
const { composeWeblink, possibleWeblinks } = createWeblinkMatchTracker();
|
|
3919
|
+
let possibleWebLink = "";
|
|
3157
3920
|
instance.markRegExp(WEB_URI_IN_TEXT_REGEX, {
|
|
3921
|
+
className: POSSIBLE_WEBLINK_CLASS,
|
|
3158
3922
|
acrossElements: false,
|
|
3159
3923
|
exclude: POSSIBLE_WEBLINK_EXCLUDE_SELECTORS,
|
|
3160
3924
|
filter: (_textNode, term) => {
|
|
3161
|
-
|
|
3925
|
+
possibleWebLink = term;
|
|
3162
3926
|
return true;
|
|
3163
|
-
}
|
|
3927
|
+
},
|
|
3928
|
+
each: (element) => composeWeblink(element, possibleWebLink)
|
|
3164
3929
|
});
|
|
3165
|
-
return
|
|
3930
|
+
return possibleWeblinks;
|
|
3166
3931
|
};
|
|
3167
3932
|
var validatePossibleWeblinks = (root) => {
|
|
3168
|
-
const
|
|
3169
|
-
const
|
|
3170
|
-
|
|
3171
|
-
|
|
3172
|
-
|
|
3173
|
-
|
|
3933
|
+
const issues = [];
|
|
3934
|
+
const cloneRoot = root.cloneNode(true);
|
|
3935
|
+
clearWeblinkMatches(cloneRoot);
|
|
3936
|
+
const possibleWeblinks = markPossibleWeblinks(cloneRoot);
|
|
3937
|
+
for (const [storeId, { elements }] of Array.from(possibleWeblinks)) {
|
|
3938
|
+
issues.push(
|
|
3939
|
+
createValidationIssue(null, {
|
|
3940
|
+
store: storeId,
|
|
3174
3941
|
title: "Possible web link",
|
|
3175
3942
|
kind: "possible-url",
|
|
3176
3943
|
description: "This looks like a URL. Would you like to add weblink tags?",
|
|
3177
|
-
level: "
|
|
3944
|
+
level: "info",
|
|
3945
|
+
elements
|
|
3178
3946
|
})
|
|
3179
3947
|
);
|
|
3180
3948
|
}
|
|
3181
|
-
return
|
|
3949
|
+
return issues;
|
|
3950
|
+
};
|
|
3951
|
+
var clearWeblinkMatches = (editor) => {
|
|
3952
|
+
const instance = new import_mark2.default(editor);
|
|
3953
|
+
instance.unmark({
|
|
3954
|
+
className: POSSIBLE_WEBLINK_CLASS
|
|
3955
|
+
});
|
|
3182
3956
|
};
|
|
3183
3957
|
|
|
3184
|
-
// src/validation/
|
|
3958
|
+
// src/validation/validateHierarchy.ts
|
|
3185
3959
|
var shouldSuppressWarning = (element) => {
|
|
3186
3960
|
const closestBox = closestElementBySchema({
|
|
3187
3961
|
element,
|
|
@@ -3190,46 +3964,66 @@ var shouldSuppressWarning = (element) => {
|
|
|
3190
3964
|
});
|
|
3191
3965
|
return !!closestBox;
|
|
3192
3966
|
};
|
|
3193
|
-
var
|
|
3194
|
-
|
|
3967
|
+
var isHeading = (elementHierarchy) => {
|
|
3968
|
+
return elementHierarchy === "heading";
|
|
3969
|
+
};
|
|
3970
|
+
var getValidLevels = (elementHierarchy) => {
|
|
3971
|
+
return isHeading(elementHierarchy) ? HEADING_LEVEL : BOX_LEVEL;
|
|
3972
|
+
};
|
|
3973
|
+
var getAttributeName2 = (elementHierarchy) => {
|
|
3974
|
+
return isHeading(elementHierarchy) ? "role" : "status";
|
|
3975
|
+
};
|
|
3976
|
+
var getElementSchemaCode = (elementHierarchy) => {
|
|
3977
|
+
return isHeading(elementHierarchy) ? HEADING_SCHEMA.code : BOX_SCHEMA.code;
|
|
3978
|
+
};
|
|
3979
|
+
var getHierarchyLevel = (element, elementHierarchy) => {
|
|
3980
|
+
const role = element.getAttribute(getAttributeName2(elementHierarchy));
|
|
3195
3981
|
if (!role) return void 0;
|
|
3196
|
-
const
|
|
3197
|
-
if (
|
|
3198
|
-
return
|
|
3982
|
+
const index = getValidLevels(elementHierarchy).indexOf(role);
|
|
3983
|
+
if (index === -1) return void 0;
|
|
3984
|
+
return isHeading(elementHierarchy) ? index : index + 1;
|
|
3199
3985
|
};
|
|
3200
|
-
var
|
|
3986
|
+
var validateHierarchy = (element, elementHierarchy) => {
|
|
3201
3987
|
const errors = [];
|
|
3202
3988
|
if (isDeletedElement(element)) {
|
|
3203
3989
|
return errors;
|
|
3204
3990
|
}
|
|
3205
|
-
if (shouldSuppressWarning(element)) {
|
|
3991
|
+
if (shouldSuppressWarning(element) && isHeading(elementHierarchy)) {
|
|
3206
3992
|
return errors;
|
|
3207
3993
|
}
|
|
3208
|
-
const level = getHierarchyLevel(element);
|
|
3994
|
+
const level = getHierarchyLevel(element, elementHierarchy);
|
|
3209
3995
|
if (level === void 0) {
|
|
3210
3996
|
return errors;
|
|
3211
3997
|
}
|
|
3212
3998
|
if (!element.parentElement) {
|
|
3213
3999
|
return errors;
|
|
3214
4000
|
}
|
|
3215
|
-
const
|
|
4001
|
+
const parentElement = closestElementBySchema({
|
|
3216
4002
|
element: element.parentElement,
|
|
3217
|
-
code:
|
|
4003
|
+
code: getElementSchemaCode(elementHierarchy),
|
|
3218
4004
|
ignoreDeletedElements: true
|
|
3219
4005
|
});
|
|
3220
|
-
if (!
|
|
4006
|
+
if (!parentElement) {
|
|
3221
4007
|
if (level > 1) {
|
|
3222
|
-
|
|
3223
|
-
|
|
3224
|
-
|
|
3225
|
-
|
|
3226
|
-
|
|
3227
|
-
|
|
3228
|
-
|
|
4008
|
+
if (isHeading(elementHierarchy)) {
|
|
4009
|
+
addValidationIssue(errors, element, {
|
|
4010
|
+
title: "Missing heading H1",
|
|
4011
|
+
kind: "missing",
|
|
4012
|
+
description: `H${level} is not under an H1. Please check the heading hierarchy.`,
|
|
4013
|
+
level: "warning"
|
|
4014
|
+
});
|
|
4015
|
+
} else {
|
|
4016
|
+
addValidationIssue(errors, element, {
|
|
4017
|
+
title: "Missing box level 1",
|
|
4018
|
+
kind: "missing",
|
|
4019
|
+
description: `Box level ${level} is not under a box level. Please check the box hierarchy.`,
|
|
4020
|
+
level: "warning"
|
|
4021
|
+
});
|
|
4022
|
+
}
|
|
3229
4023
|
}
|
|
3230
4024
|
return errors;
|
|
3231
4025
|
}
|
|
3232
|
-
const parentLevel = getHierarchyLevel(
|
|
4026
|
+
const parentLevel = getHierarchyLevel(parentElement, elementHierarchy);
|
|
3233
4027
|
if (parentLevel === void 0) {
|
|
3234
4028
|
return errors;
|
|
3235
4029
|
}
|
|
@@ -3237,13 +4031,21 @@ var validateHeadingHierarchy = (element) => {
|
|
|
3237
4031
|
if (level === expectedLevel) {
|
|
3238
4032
|
return errors;
|
|
3239
4033
|
}
|
|
3240
|
-
|
|
3241
|
-
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
4034
|
+
if (isHeading(elementHierarchy)) {
|
|
4035
|
+
addValidationIssue(errors, element, {
|
|
4036
|
+
title: "Invalid heading hierarchy",
|
|
4037
|
+
kind: "forbidden",
|
|
4038
|
+
description: `H${level} cannot follow H${parentLevel} directly. Please check the heading hierarchy.`,
|
|
4039
|
+
level: "warning"
|
|
4040
|
+
});
|
|
4041
|
+
} else {
|
|
4042
|
+
addValidationIssue(errors, element, {
|
|
4043
|
+
title: "Invalid box hierarchy",
|
|
4044
|
+
kind: "forbidden",
|
|
4045
|
+
description: `Box level ${level} cannot follow box level ${parentLevel} directly. Please check the box hierarchy.`,
|
|
4046
|
+
level: "warning"
|
|
4047
|
+
});
|
|
4048
|
+
}
|
|
3247
4049
|
return errors;
|
|
3248
4050
|
};
|
|
3249
4051
|
|
|
@@ -3260,8 +4062,7 @@ var validateOlink = (element) => {
|
|
|
3260
4062
|
if (isEmpty || isValidOrcid) {
|
|
3261
4063
|
return errors;
|
|
3262
4064
|
}
|
|
3263
|
-
addValidationIssue(errors, {
|
|
3264
|
-
store: getStore(element.parentElement ?? element),
|
|
4065
|
+
addValidationIssue(errors, element, {
|
|
3265
4066
|
title: "Invalid ORCID",
|
|
3266
4067
|
kind: "forbidden",
|
|
3267
4068
|
description: "The ORCiD is not the correct format. Please check it and adjust.",
|
|
@@ -3270,6 +4071,338 @@ var validateOlink = (element) => {
|
|
|
3270
4071
|
return errors;
|
|
3271
4072
|
};
|
|
3272
4073
|
|
|
4074
|
+
// src/helpers/getReferenceFieldElements.ts
|
|
4075
|
+
var REFERENCE_PART_SELECTOR = REFERENCE_PART_CODES_ALLOWED_CHILDREN.map(
|
|
4076
|
+
({ code }) => findSchemaByCode(code).tag.toLowerCase()
|
|
4077
|
+
).join(", ");
|
|
4078
|
+
var REFERENCE_PART_OWNER_SELECTOR = `${REFERENCE_PART_SELECTOR}, ${URI_SCHEMA.tag.toLowerCase()}`;
|
|
4079
|
+
var getReferenceParts = (reference) => Array.from(
|
|
4080
|
+
reference.querySelectorAll(REFERENCE_PART_SELECTOR)
|
|
4081
|
+
).filter((element) => {
|
|
4082
|
+
if (isInTrackedDeletion(element)) return false;
|
|
4083
|
+
const owner = element.parentElement?.closest(REFERENCE_PART_OWNER_SELECTOR);
|
|
4084
|
+
return !owner || !reference.contains(owner);
|
|
4085
|
+
});
|
|
4086
|
+
var getReferenceFieldElements = (reference) => getReferenceParts(reference).flatMap((element) => {
|
|
4087
|
+
const field = findReferenceFieldByElement(element);
|
|
4088
|
+
return field ? [{ field, element }] : [];
|
|
4089
|
+
});
|
|
4090
|
+
|
|
4091
|
+
// src/validation/validateReferenceMarkup.ts
|
|
4092
|
+
var PERSONNAME_ORDER_ROLES = ["first-last", "last-first"];
|
|
4093
|
+
var ARTIST_OTHERCLASS = "artist";
|
|
4094
|
+
var NOT_PERMITTED_ELEMENTS = [
|
|
4095
|
+
{ tag: BIBLIOID_TAG.toLowerCase() },
|
|
4096
|
+
{ tag: "publisher" },
|
|
4097
|
+
{ tag: AUTHORGROUP_TAG.toLowerCase() }
|
|
4098
|
+
];
|
|
4099
|
+
var BIBLIOMSET = BIBLIOMSET_TAG.toLowerCase();
|
|
4100
|
+
var PERSONNAME = PERSONNAME_TAG.toLowerCase();
|
|
4101
|
+
var CONFGROUP = CONFGROUP_TAG.toLowerCase();
|
|
4102
|
+
var LINK = LINK_TAG.toLowerCase();
|
|
4103
|
+
var URI = URI_SCHEMA.tag.toLowerCase();
|
|
4104
|
+
var NAME_PARTS = [SURNAME_TAG, FIRSTNAME_TAG, HONORIFIC_TAG].map((tag) => tag.toLowerCase()).join(", ");
|
|
4105
|
+
var CONFERENCE_FIELDS_AND_DELETIONS = [
|
|
4106
|
+
CONFTITLE_TAG,
|
|
4107
|
+
CONFDATES_TAG,
|
|
4108
|
+
ADDRESS_TAG
|
|
4109
|
+
].map((tag) => tag.toLowerCase()).concat("span.del").join(", ");
|
|
4110
|
+
var LOOSE_MARKUP = [
|
|
4111
|
+
BIBLIOMSET,
|
|
4112
|
+
PERSONNAME,
|
|
4113
|
+
URI,
|
|
4114
|
+
NAME_PARTS,
|
|
4115
|
+
CONFDATES_TAG.toLowerCase()
|
|
4116
|
+
].concat(NOT_PERMITTED_ELEMENTS.map(({ tag }) => tag)).join(", ");
|
|
4117
|
+
var hasValue = (element, attribute) => !!element.getAttribute(attribute)?.trim();
|
|
4118
|
+
var hasUntaggedConferenceText = (element) => Array.from(element.childNodes).some((child) => {
|
|
4119
|
+
if (child.nodeType === Node.TEXT_NODE) return !!child.textContent?.trim();
|
|
4120
|
+
return child instanceof Element && !child.matches(CONFERENCE_FIELDS_AND_DELETIONS) && hasUntaggedConferenceText(child);
|
|
4121
|
+
});
|
|
4122
|
+
var isExternalLink = (link) => !hasValue(link, LINKEND_ATTRIBUTE);
|
|
4123
|
+
var DOI_URL = /^https?:\/\/(?:dx\.)?doi\.org\//i;
|
|
4124
|
+
var pointsAtDoiOrg = (link) => DOI_URL.test(link.getAttribute(LINK_ATTRIBUTE)?.trim() ?? "");
|
|
4125
|
+
var hasNameOrder = (personname) => {
|
|
4126
|
+
const order = personname.getAttribute("role")?.replace(/\s+/g, "");
|
|
4127
|
+
return PERSONNAME_ORDER_ROLES.some((role) => role === order);
|
|
4128
|
+
};
|
|
4129
|
+
var hasLooseReferenceMarkup = (reference) => Array.from(reference.querySelectorAll(LOOSE_MARKUP)).some(
|
|
4130
|
+
(element) => !isInTrackedDeletion(element)
|
|
4131
|
+
);
|
|
4132
|
+
var validateReferenceMarkup = (reference, typeSchema) => {
|
|
4133
|
+
const select = (selector) => Array.from(reference.querySelectorAll(selector)).filter(
|
|
4134
|
+
(element) => !isInTrackedDeletion(element)
|
|
4135
|
+
);
|
|
4136
|
+
const relations = typeSchema.bibliomsetRelations ?? [];
|
|
4137
|
+
const sets = select(BIBLIOMSET);
|
|
4138
|
+
const misrelatedSets = sets.filter(
|
|
4139
|
+
(set) => !relations.some((relation) => relation === set.getAttribute("relation"))
|
|
4140
|
+
);
|
|
4141
|
+
const hasEverySet = relations.every(
|
|
4142
|
+
(relation) => sets.some((set) => set.getAttribute("relation") === relation)
|
|
4143
|
+
);
|
|
4144
|
+
const rules = {
|
|
4145
|
+
missing_id: hasValue(reference, XMLID_ATTRIBUTE) ? [] : [reference],
|
|
4146
|
+
bibliomset_relation: misrelatedSets,
|
|
4147
|
+
bibliomset_missing: hasEverySet || misrelatedSets.length > 0 ? [] : [reference],
|
|
4148
|
+
bibliomset_repeated: sets.filter(
|
|
4149
|
+
(set, index) => sets.slice(0, index).some(
|
|
4150
|
+
(earlier) => earlier.getAttribute("relation") === set.getAttribute("relation")
|
|
4151
|
+
)
|
|
4152
|
+
),
|
|
4153
|
+
bibliomset_title: sets.filter(
|
|
4154
|
+
(set) => !Array.from(set.querySelectorAll(TITLE_TAG.toLowerCase())).some(
|
|
4155
|
+
(title) => !isInTrackedDeletion(title)
|
|
4156
|
+
)
|
|
4157
|
+
),
|
|
4158
|
+
bibliomset_nested: sets.filter(
|
|
4159
|
+
(set) => !!set.parentElement?.closest(BIBLIOMSET)
|
|
4160
|
+
),
|
|
4161
|
+
part_editor: select(EDITOR_TAG.toLowerCase()).filter(
|
|
4162
|
+
(editor) => editor.closest(BIBLIOMSET)?.getAttribute("relation") === PART_BIBLIOMSET_RELATION
|
|
4163
|
+
),
|
|
4164
|
+
personname_role: select(PERSONNAME).filter(
|
|
4165
|
+
(personname) => !hasNameOrder(personname)
|
|
4166
|
+
),
|
|
4167
|
+
name_outside_personname: select(NAME_PARTS).filter(
|
|
4168
|
+
(part) => !part.closest(PERSONNAME)
|
|
4169
|
+
),
|
|
4170
|
+
othercredit_artist: typeSchema.code === "recording" ? select(OTHERCREDIT_TAG.toLowerCase()).filter(
|
|
4171
|
+
(credit) => credit.getAttribute("otherclass") !== ARTIST_OTHERCLASS
|
|
4172
|
+
) : [],
|
|
4173
|
+
link_without_target: select(LINK).filter(
|
|
4174
|
+
(link) => isExternalLink(link) && !hasValue(link, LINK_ATTRIBUTE)
|
|
4175
|
+
),
|
|
4176
|
+
doi_inside_uri: select(LINK).filter(
|
|
4177
|
+
(link) => isExternalLink(link) && hasLiveUri(link) && pointsAtDoiOrg(link)
|
|
4178
|
+
),
|
|
4179
|
+
doi_outside_doi_org: select(LINK).filter(
|
|
4180
|
+
(link) => isExternalLink(link) && hasValue(link, LINK_ATTRIBUTE) && !hasLiveUri(link) && !pointsAtDoiOrg(link)
|
|
4181
|
+
),
|
|
4182
|
+
uri_outside_link: select(URI).filter(
|
|
4183
|
+
(uri) => !uri.closest(LINK) && !uri.closest(REFERENCE_PART_SELECTOR)
|
|
4184
|
+
),
|
|
4185
|
+
confgroup_text: select(CONFGROUP).filter(hasUntaggedConferenceText),
|
|
4186
|
+
confdates_outside_confgroup: select(CONFDATES_TAG.toLowerCase()).filter(
|
|
4187
|
+
(dates) => !dates.closest(CONFGROUP)
|
|
4188
|
+
)
|
|
4189
|
+
};
|
|
4190
|
+
const wrongElements = [
|
|
4191
|
+
...typeSchema.replacedElements ?? [],
|
|
4192
|
+
...NOT_PERMITTED_ELEMENTS
|
|
4193
|
+
].map(
|
|
4194
|
+
({ tag, replacement }) => ({
|
|
4195
|
+
code: "wrong_element",
|
|
4196
|
+
tag,
|
|
4197
|
+
replacement,
|
|
4198
|
+
elements: select(tag).filter((element) => !isPubMedIdBiblioid(element))
|
|
4199
|
+
})
|
|
4200
|
+
);
|
|
4201
|
+
const markup = Object.entries(rules).map(
|
|
4202
|
+
([rule, elements]) => ({
|
|
4203
|
+
code: "markup",
|
|
4204
|
+
rule,
|
|
4205
|
+
elements
|
|
4206
|
+
})
|
|
4207
|
+
);
|
|
4208
|
+
return [...wrongElements, ...markup].filter(
|
|
4209
|
+
({ elements }) => elements.length > 0
|
|
4210
|
+
);
|
|
4211
|
+
};
|
|
4212
|
+
|
|
4213
|
+
// src/validation/validateReferenceStructure.ts
|
|
4214
|
+
var validateReferenceStructure = (reference) => {
|
|
4215
|
+
const typeSchema = findReferenceTypeSchemaByElement(reference);
|
|
4216
|
+
if (!typeSchema) return [{ code: "unknown_type" }];
|
|
4217
|
+
const issues = [];
|
|
4218
|
+
const present = /* @__PURE__ */ new Set();
|
|
4219
|
+
for (const { field } of getReferenceFieldElements(reference)) {
|
|
4220
|
+
if (!present.has(field) && !typeSchema.allowedFields.includes(field)) {
|
|
4221
|
+
issues.push({ code: "not_allowed", field });
|
|
4222
|
+
}
|
|
4223
|
+
present.add(field);
|
|
4224
|
+
}
|
|
4225
|
+
for (const field of typeSchema.requiredFields) {
|
|
4226
|
+
const isSatisfied = field === "creators" ? present.has("author") || present.has("editor") : present.has(field);
|
|
4227
|
+
if (!isSatisfied) issues.push({ code: "missing", field });
|
|
4228
|
+
}
|
|
4229
|
+
return [...issues, ...validateReferenceMarkup(reference, typeSchema)];
|
|
4230
|
+
};
|
|
4231
|
+
var isSameMarkupIssue = (candidate, issue) => candidate.code === "markup" && issue.code === "markup" && candidate.rule === issue.rule || candidate.code === "wrong_element" && issue.code === "wrong_element" && candidate.tag === issue.tag;
|
|
4232
|
+
var getReferenceStructureIssueElements = (reference, issue) => {
|
|
4233
|
+
if (issue.code === "not_allowed") {
|
|
4234
|
+
return getReferenceFieldElements(reference).filter(({ field }) => field === issue.field).map(({ element }) => element);
|
|
4235
|
+
}
|
|
4236
|
+
if (issue.code !== "markup" && issue.code !== "wrong_element") return [];
|
|
4237
|
+
const found = validateReferenceStructure(reference).find(
|
|
4238
|
+
(candidate) => isSameMarkupIssue(candidate, issue)
|
|
4239
|
+
);
|
|
4240
|
+
return (found?.elements ?? []).filter((element) => element !== reference);
|
|
4241
|
+
};
|
|
4242
|
+
|
|
4243
|
+
// src/validation/validateReference.ts
|
|
4244
|
+
var getFieldLabel = (field, typeSchema) => {
|
|
4245
|
+
if (field === "creators") {
|
|
4246
|
+
return typeSchema.allowedFields.includes("editor") ? "Author or editor" : "Author";
|
|
4247
|
+
}
|
|
4248
|
+
return typeSchema.fieldLabels?.[field] ?? REFERENCE_FIELD_SCHEMAS[field].label;
|
|
4249
|
+
};
|
|
4250
|
+
var getBibliomsetRelationCopy = (typeSchema) => {
|
|
4251
|
+
const relations = typeSchema.bibliomsetRelations ?? [];
|
|
4252
|
+
return relations.length > 0 ? `${typeSchema.label} references use bibliomset with the relation ${relations.join(" and ")}. Please correct the relation.` : `${typeSchema.label} references do not use bibliomset. Please remove it and keep its contents.`;
|
|
4253
|
+
};
|
|
4254
|
+
var getMarkupCopy = (rule, typeSchema) => {
|
|
4255
|
+
switch (rule) {
|
|
4256
|
+
case "missing_id":
|
|
4257
|
+
return {
|
|
4258
|
+
title: "Reference ID missing",
|
|
4259
|
+
kind: "missing",
|
|
4260
|
+
description: "Every reference needs an xml:id. Please add one."
|
|
4261
|
+
};
|
|
4262
|
+
case "bibliomset_relation":
|
|
4263
|
+
return {
|
|
4264
|
+
title: "Wrong bibliomset for this reference type",
|
|
4265
|
+
kind: "forbidden",
|
|
4266
|
+
description: getBibliomsetRelationCopy(typeSchema)
|
|
4267
|
+
};
|
|
4268
|
+
case "bibliomset_missing":
|
|
4269
|
+
return {
|
|
4270
|
+
title: "Bibliomset missing",
|
|
4271
|
+
kind: "missing",
|
|
4272
|
+
description: `${typeSchema.label} references need one bibliomset with the relation ${(typeSchema.bibliomsetRelations ?? []).join(" and one with ")}. Please wrap the details in them.`
|
|
4273
|
+
};
|
|
4274
|
+
case "bibliomset_repeated":
|
|
4275
|
+
return {
|
|
4276
|
+
title: "Bibliomset repeated",
|
|
4277
|
+
kind: "forbidden",
|
|
4278
|
+
description: "A reference holds one bibliomset of each relation. Please move the details of the repeated bibliomset into the first one."
|
|
4279
|
+
};
|
|
4280
|
+
case "bibliomset_title":
|
|
4281
|
+
return {
|
|
4282
|
+
title: "Bibliomset without a title",
|
|
4283
|
+
kind: "missing",
|
|
4284
|
+
description: "Every bibliomset must contain a title. Please move its title into it or remove the bibliomset."
|
|
4285
|
+
};
|
|
4286
|
+
case "bibliomset_nested":
|
|
4287
|
+
return {
|
|
4288
|
+
title: "Bibliomset inside another bibliomset",
|
|
4289
|
+
kind: "forbidden",
|
|
4290
|
+
description: "A bibliomset cannot sit inside another bibliomset. Please move it out so the two sit side by side."
|
|
4291
|
+
};
|
|
4292
|
+
case "part_editor":
|
|
4293
|
+
return {
|
|
4294
|
+
title: "Editor tagged in the chapter part",
|
|
4295
|
+
kind: "forbidden",
|
|
4296
|
+
description: "The part bibliomset holds the chapter and its author. Please tag the name as an author or move the editor to the book bibliomset."
|
|
4297
|
+
};
|
|
4298
|
+
case "personname_role":
|
|
4299
|
+
return {
|
|
4300
|
+
title: "Name order not set",
|
|
4301
|
+
kind: "missing",
|
|
4302
|
+
description: `Every personname needs a role of ${PERSONNAME_ORDER_ROLES.join(" or ")}. Please set the name order.`
|
|
4303
|
+
};
|
|
4304
|
+
case "name_outside_personname":
|
|
4305
|
+
return {
|
|
4306
|
+
title: "Name not wrapped in personname",
|
|
4307
|
+
kind: "forbidden",
|
|
4308
|
+
description: "A surname, firstname or honorific must sit inside a personname. Please wrap the name parts."
|
|
4309
|
+
};
|
|
4310
|
+
case "othercredit_artist":
|
|
4311
|
+
return {
|
|
4312
|
+
title: "Artist credit not marked",
|
|
4313
|
+
kind: "missing",
|
|
4314
|
+
description: `The othercredit of a recording needs otherclass="${ARTIST_OTHERCLASS}". Please set it.`
|
|
4315
|
+
};
|
|
4316
|
+
case "link_without_target":
|
|
4317
|
+
return {
|
|
4318
|
+
title: "Link incomplete",
|
|
4319
|
+
kind: "missing",
|
|
4320
|
+
description: "A link needs an xlink:href. Please complete the link."
|
|
4321
|
+
};
|
|
4322
|
+
case "doi_outside_doi_org":
|
|
4323
|
+
return {
|
|
4324
|
+
title: "DOI not pointing at doi.org",
|
|
4325
|
+
kind: "forbidden",
|
|
4326
|
+
description: "A DOI link must point at a https://doi.org/ address. Please fix its xlink:href, or tag the address as a URL with a uri inside the link."
|
|
4327
|
+
};
|
|
4328
|
+
case "doi_inside_uri":
|
|
4329
|
+
return {
|
|
4330
|
+
title: "DOI tagged as a URL",
|
|
4331
|
+
kind: "forbidden",
|
|
4332
|
+
description: "A DOI link holds the DOI directly, without a uri inside it. Please remove the uri."
|
|
4333
|
+
};
|
|
4334
|
+
case "uri_outside_link":
|
|
4335
|
+
return {
|
|
4336
|
+
title: "URL not wrapped in a link",
|
|
4337
|
+
kind: "forbidden",
|
|
4338
|
+
description: "A uri must sit inside a link that carries the xlink:href. Please wrap it in a link."
|
|
4339
|
+
};
|
|
4340
|
+
case "confgroup_text":
|
|
4341
|
+
return {
|
|
4342
|
+
title: "Text directly inside confgroup",
|
|
4343
|
+
kind: "forbidden",
|
|
4344
|
+
description: "A confgroup cannot hold text directly. Please tag the text as conftitle or confdates."
|
|
4345
|
+
};
|
|
4346
|
+
case "confdates_outside_confgroup":
|
|
4347
|
+
return {
|
|
4348
|
+
title: "Conference dates outside confgroup",
|
|
4349
|
+
kind: "forbidden",
|
|
4350
|
+
description: "Conference dates must sit inside a confgroup. Please wrap them in one."
|
|
4351
|
+
};
|
|
4352
|
+
}
|
|
4353
|
+
};
|
|
4354
|
+
var getIssueCopy = (issue, typeSchema) => {
|
|
4355
|
+
if (issue.code === "unknown_type" || !typeSchema) {
|
|
4356
|
+
return {
|
|
4357
|
+
title: "Reference type not set",
|
|
4358
|
+
kind: "missing",
|
|
4359
|
+
description: "This reference has no recognised type, so its structure cannot be checked. Please set its reference type."
|
|
4360
|
+
};
|
|
4361
|
+
}
|
|
4362
|
+
const typeLabel = typeSchema.label.toLowerCase();
|
|
4363
|
+
if (issue.code === "markup") return getMarkupCopy(issue.rule, typeSchema);
|
|
4364
|
+
if (issue.code === "wrong_element") {
|
|
4365
|
+
return {
|
|
4366
|
+
title: `${issue.tag} not allowed`,
|
|
4367
|
+
kind: "forbidden",
|
|
4368
|
+
description: issue.replacement ? `${issue.tag} is not used by ${typeLabel} references. Please use ${issue.replacement} instead.` : `${issue.tag} is not used by ${typeLabel} references. Please remove it and keep its contents.`
|
|
4369
|
+
};
|
|
4370
|
+
}
|
|
4371
|
+
const fieldLabel = getFieldLabel(issue.field, typeSchema);
|
|
4372
|
+
switch (issue.code) {
|
|
4373
|
+
case "missing":
|
|
4374
|
+
return {
|
|
4375
|
+
title: `${fieldLabel} missing`,
|
|
4376
|
+
kind: "missing",
|
|
4377
|
+
description: `Please tag the ${fieldLabel.toLowerCase()} in this ${typeLabel} reference.`
|
|
4378
|
+
};
|
|
4379
|
+
case "not_allowed":
|
|
4380
|
+
return {
|
|
4381
|
+
title: `${fieldLabel} not allowed`,
|
|
4382
|
+
kind: "forbidden",
|
|
4383
|
+
description: `${fieldLabel} is not used by ${typeLabel} references. Please untag or delete it.`
|
|
4384
|
+
};
|
|
4385
|
+
}
|
|
4386
|
+
};
|
|
4387
|
+
var validateReference = (reference) => {
|
|
4388
|
+
if (isDeletedElement(reference)) return [];
|
|
4389
|
+
const isBibliographyEntry = !!closestElementBySchema({
|
|
4390
|
+
element: reference,
|
|
4391
|
+
code: "referenceBibliography"
|
|
4392
|
+
});
|
|
4393
|
+
if (!isBibliographyEntry) return [];
|
|
4394
|
+
const isTagged = getReferenceParts(reference).length > 0 || hasLooseReferenceMarkup(reference);
|
|
4395
|
+
if (!isTagged) return [];
|
|
4396
|
+
const typeSchema = findReferenceTypeSchemaByElement(reference);
|
|
4397
|
+
return validateReferenceStructure(reference).map(
|
|
4398
|
+
(issue) => createValidationIssue(reference, {
|
|
4399
|
+
level: "warning",
|
|
4400
|
+
elements: getReferenceStructureIssueElements(reference, issue),
|
|
4401
|
+
...getIssueCopy(issue, typeSchema)
|
|
4402
|
+
})
|
|
4403
|
+
);
|
|
4404
|
+
};
|
|
4405
|
+
|
|
3273
4406
|
// src/validation/validateXml.ts
|
|
3274
4407
|
var validateElement = (element, root, elementsToLink, linkElements, schemasToValidateAgainst) => {
|
|
3275
4408
|
if (isIgnoredElement(element)) {
|
|
@@ -3279,13 +4412,18 @@ var validateElement = (element, root, elementsToLink, linkElements, schemasToVal
|
|
|
3279
4412
|
const schema = findSchemaByElement(element);
|
|
3280
4413
|
if (schema) {
|
|
3281
4414
|
if (schemasToValidateAgainst.includes(schema.code)) {
|
|
3282
|
-
errors.push(
|
|
4415
|
+
errors.push(
|
|
4416
|
+
...schema.code === BIBLIOMIXED_SCHEMA.code ? validateReference(element) : validateElementAgainstSchema(element, schema)
|
|
4417
|
+
);
|
|
3283
4418
|
}
|
|
3284
4419
|
if (schema.tag === FOOTNOTE_SCHEMA.tag) {
|
|
3285
4420
|
errors.push(...validateFootnoteNumber(element));
|
|
3286
4421
|
}
|
|
3287
4422
|
if (schema.code === HEADING_SCHEMA.code) {
|
|
3288
|
-
errors.push(...
|
|
4423
|
+
errors.push(...validateHierarchy(element, "heading"));
|
|
4424
|
+
}
|
|
4425
|
+
if (schema.code === BOX_SCHEMA.code) {
|
|
4426
|
+
errors.push(...validateHierarchy(element, "box"));
|
|
3289
4427
|
}
|
|
3290
4428
|
if (schema.code === OLINK_SCHEMA.code) {
|
|
3291
4429
|
errors.push(...validateOlink(element));
|
|
@@ -3427,6 +4565,13 @@ var getAdjacentElement = ({
|
|
|
3427
4565
|
LAYOUT_USER_ATTRIBUTE,
|
|
3428
4566
|
LEFT_INDENT_ATTRIBUTE,
|
|
3429
4567
|
LINKEND_ATTRIBUTE,
|
|
4568
|
+
LINK_BLOCKER_ROLES,
|
|
4569
|
+
LINK_TO_CROSS_CHECK,
|
|
4570
|
+
POSSIBLE_WEBLINK_CLASS,
|
|
4571
|
+
POSSIBLE_WEBLINK_EXCLUDE_SELECTORS,
|
|
4572
|
+
REFERENCE_FIELD_SCHEMAS,
|
|
4573
|
+
REFERENCE_PART_SELECTOR,
|
|
4574
|
+
REFERENCE_TYPE_SCHEMAS,
|
|
3430
4575
|
RIGHT_INDENT_ATTRIBUTE,
|
|
3431
4576
|
SCHEMAS,
|
|
3432
4577
|
SPACE_ABOVE_ATTRIBUTE,
|
|
@@ -3439,22 +4584,45 @@ var getAdjacentElement = ({
|
|
|
3439
4584
|
TRACK_CHANGES_ATTR_DATA_TIME,
|
|
3440
4585
|
TRACK_CHANGES_ATTR_DATA_USERID,
|
|
3441
4586
|
TRACK_CHANGES_ATTR_DATA_USERNAME,
|
|
4587
|
+
VALIDATION_IGNORED_ATTRIBUTE,
|
|
3442
4588
|
XMLID_ATTRIBUTE,
|
|
4589
|
+
clearWeblinkMatches,
|
|
3443
4590
|
closestElementBySchema,
|
|
3444
4591
|
createElement,
|
|
4592
|
+
extractFootnoteNumber,
|
|
3445
4593
|
findAttributeDefinitionByName,
|
|
4594
|
+
findElementLinkedTo,
|
|
4595
|
+
findReferenceFieldByElement,
|
|
4596
|
+
findReferenceTypeSchemaByElement,
|
|
3446
4597
|
findSchemaByCode,
|
|
3447
4598
|
findSchemaByElement,
|
|
3448
4599
|
getAdjacentElement,
|
|
3449
4600
|
getAttributeName,
|
|
4601
|
+
getEffectiveChildElements,
|
|
3450
4602
|
getElementLinks,
|
|
4603
|
+
getPossibleWeblinks,
|
|
4604
|
+
getReferenceFieldElements,
|
|
4605
|
+
getReferenceParts,
|
|
4606
|
+
getReferenceStructureIssueElements,
|
|
3451
4607
|
getStore,
|
|
3452
4608
|
isAttributeRestricted,
|
|
3453
4609
|
isDeletedElement,
|
|
3454
4610
|
isIgnoredAttribute,
|
|
3455
4611
|
isIgnoredElement,
|
|
3456
4612
|
isTrackChangesSchema,
|
|
4613
|
+
markPossibleWeblinks,
|
|
3457
4614
|
queryAllElementsBySchema,
|
|
3458
4615
|
queryElementBySchema,
|
|
4616
|
+
validateAttributes,
|
|
4617
|
+
validateConsecutiveFootnoteCues,
|
|
4618
|
+
validateConsecutiveFootnotes,
|
|
4619
|
+
validateElementAgainstSchema,
|
|
4620
|
+
validateElementToLinkTo,
|
|
4621
|
+
validateFootnoteNumber,
|
|
4622
|
+
validateHierarchy,
|
|
4623
|
+
validateLinkend,
|
|
4624
|
+
validateOlink,
|
|
4625
|
+
validatePossibleWeblinks,
|
|
4626
|
+
validateReferenceStructure,
|
|
3459
4627
|
validateXml
|
|
3460
4628
|
});
|