pro-editor-schema 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +16 -24
- package/dist/index.d.ts +16 -24
- package/dist/index.js +93 -154
- package/dist/index.mjs +92 -153
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
type SchemaKind = "element" | "atom" | "inline";
|
|
2
2
|
type FreeAttribute = string;
|
|
3
|
-
type RestrictedAttribute
|
|
3
|
+
type RestrictedAttribute = {
|
|
4
4
|
name: string;
|
|
5
|
-
values:
|
|
5
|
+
values: string[];
|
|
6
6
|
defaultValue: string;
|
|
7
7
|
};
|
|
8
|
-
type AttributeDefinition
|
|
8
|
+
type AttributeDefinition = FreeAttribute | RestrictedAttribute;
|
|
9
9
|
type AllowedChildren = {
|
|
10
10
|
code: SchemaCode;
|
|
11
11
|
required: boolean;
|
|
12
12
|
};
|
|
13
|
-
type Schema
|
|
13
|
+
type Schema = {
|
|
14
14
|
code: SchemaCode;
|
|
15
15
|
kind: SchemaKind;
|
|
16
16
|
tag: string;
|
|
17
|
-
requiredAttributes:
|
|
18
|
-
optionalAttributes:
|
|
17
|
+
requiredAttributes: AttributeDefinition[];
|
|
18
|
+
optionalAttributes: AttributeDefinition[];
|
|
19
19
|
defaultChildCode?: SchemaCode;
|
|
20
20
|
allowedChildrenCodes: AllowedChildren[];
|
|
21
|
-
matchesElement?: (element: Element) => boolean;
|
|
22
21
|
};
|
|
23
22
|
type SchemaCode = ElementSchemaCode | InlineSchemaCode | AtomSchemaCode;
|
|
24
23
|
type ElementSchemaCode = "referenceBibliomixed" | "referenceBibliography" | "bibliodiv" | "degrees" | "email" | "equation" | "fignote" | "figsource" | "firstname" | "footnote" | "footnoteno" | "honorific" | "img" | "informalfigure" | "keyword" | "label1" | "li" | "line" | "lrh" | "math" | "mathphrase" | "merror" | "mfrac" | "mi" | "mmultiscripts" | "mn" | "mo" | "mover" | "mpadded" | "mphantom" | "mprescripts" | "mroot" | "mrow" | "ms" | "mspace" | "msqrt" | "mstyle" | "msub" | "msubsup" | "msup" | "mtable" | "mtd" | "mtext" | "mtr" | "munder" | "munderover" | "olink" | "org" | "orgname" | "para" | "punc" | "rrh" | "source1" | "speaker" | "subtitle1" | "surname" | "tag" | "tblfn" | "tblsource" | "thead" | "title1" | "token" | "tp" | "abstract1" | "affiliation" | "alttext" | "appendix" | "author" | "authorgroup" | "blockquote" | "caption1" | "chapter" | "dialogue" | "epigraph" | "figure1" | "footnoteSection" | "heading" | "imageobject" | "info1" | "keywordset" | "mediaobject" | "ol" | "personname" | "poem" | "sidebar" | "table" | "table1" | "tbody" | "td" | "tgroup" | "tr" | "ul";
|
|
@@ -31,25 +30,18 @@ declare const isTrackChangesSchema: (schema: Schema) => boolean;
|
|
|
31
30
|
declare const isIgnoredAttribute: (attribute: string) => boolean;
|
|
32
31
|
declare const isIgnoredElement: (element: Element) => boolean;
|
|
33
32
|
declare const isIgnoredValidation: (code: SchemaCode) => boolean;
|
|
34
|
-
declare const findSchemaByCode: (code: SchemaCode) => Schema;
|
|
33
|
+
declare const findSchemaByCode: (code: SchemaCode) => Schema | undefined;
|
|
34
|
+
declare const findSchemaByTagName: (tagName: string) => Schema[];
|
|
35
35
|
declare const findSchemaByElement: (element: Element) => Schema | undefined;
|
|
36
36
|
declare const isAttributeRestricted: (attr: AttributeDefinition) => attr is RestrictedAttribute;
|
|
37
37
|
declare const getAttributeName: (attribute: AttributeDefinition) => string;
|
|
38
|
-
declare const findAttributeDefinitionByName: (definitions:
|
|
38
|
+
declare const findAttributeDefinitionByName: (definitions: AttributeDefinition[], name: string) => AttributeDefinition | undefined;
|
|
39
39
|
|
|
40
|
-
type
|
|
41
|
-
type SchemaAttributes<TSchema extends Schema> = TSchema extends Schema<infer TRequired extends readonly AttributeDefinition[], infer TOptional extends readonly AttributeDefinition[]> ? {
|
|
42
|
-
[TAttribute in TRequired[number] as TAttribute extends string ? TAttribute : TAttribute extends RestrictedAttribute ? TAttribute["name"] : never]: AttributeValue<TAttribute>;
|
|
43
|
-
} & {
|
|
44
|
-
[TAttribute in TOptional[number] as TAttribute extends string ? TAttribute : TAttribute extends RestrictedAttribute ? TAttribute["name"] : never]?: AttributeValue<TAttribute>;
|
|
45
|
-
} : never;
|
|
46
|
-
type CreateElementParams<TSchema extends Schema> = {
|
|
40
|
+
type CreateElementParams = {
|
|
47
41
|
schemaCode: SchemaCode;
|
|
48
|
-
attributes:
|
|
42
|
+
attributes: Record<string, string>;
|
|
49
43
|
};
|
|
50
|
-
declare const createElement:
|
|
51
|
-
|
|
52
|
-
declare const ElementLabel: Record<SchemaCode, string>;
|
|
44
|
+
declare const createElement: ({ schemaCode, attributes, }: CreateElementParams) => HTMLElement;
|
|
53
45
|
|
|
54
46
|
declare const IGNORED_ELEMENT_SELECTORS: string[];
|
|
55
47
|
declare const IGNORED_VALIDATION_ELEMENT_SELECTORS: SchemaCode[];
|
|
@@ -76,15 +68,15 @@ declare const FIGURE_PLACEMENT_ATTRIBUTE = "data-figure-placement";
|
|
|
76
68
|
declare const LAYOUT_CELL_WIDTH_ATTRIBUTE = "data-cell-width";
|
|
77
69
|
declare const LAYOUT_TABLE_ORIENTATION_ATTRIBUTE = "data-table-orientation";
|
|
78
70
|
declare const LAYOUT_TABLE_PLACEMENT_ATTRIBUTE = "data-table-placement";
|
|
79
|
-
declare const LAYOUT_ATTRIBUTES:
|
|
71
|
+
declare const LAYOUT_ATTRIBUTES: string[];
|
|
80
72
|
declare const TRACK_CHANGES_ATTR_DATA_USERNAME = "data-username";
|
|
81
73
|
declare const TRACK_CHANGES_ATTR_DATA_USERID = "data-userid";
|
|
82
74
|
declare const TRACK_CHANGES_ATTR_DATA_TIME = "data-time";
|
|
83
75
|
declare const TRACK_CHANGES_ATTR_DATA_DATE = "data-date";
|
|
84
|
-
declare const TRACK_CHANGES_ATTRS:
|
|
76
|
+
declare const TRACK_CHANGES_ATTRS: string[];
|
|
85
77
|
declare const ELE_ID_ATTRIBUTE = "ele-id";
|
|
86
78
|
declare const STORE_ATTRIBUTE = "store";
|
|
87
|
-
declare const ID_ATTRS:
|
|
79
|
+
declare const ID_ATTRS: string[];
|
|
88
80
|
|
|
89
81
|
declare const ELEMENT_SCHEMAS: Record<ElementSchemaCode, Schema>;
|
|
90
82
|
|
|
@@ -115,4 +107,4 @@ type ValidationError = {
|
|
|
115
107
|
*/
|
|
116
108
|
declare const validateXml: (xml: Element, elementsToLink: string[], linkElements: string[], schemasToValidateAgainst: SchemaCode[]) => ValidationError[];
|
|
117
109
|
|
|
118
|
-
export { ALIGNMENT_ATTRIBUTE, ATOM_SCHEMAS, type AllowedChildren, type AtomSchemaCode, type AttributeDefinition, DEPENDENT_FORBIDDEN_ELEMENTS, ELEMENT_SCHEMAS, ELE_ID_ATTRIBUTE,
|
|
110
|
+
export { ALIGNMENT_ATTRIBUTE, ATOM_SCHEMAS, type AllowedChildren, type AtomSchemaCode, type AttributeDefinition, DEPENDENT_FORBIDDEN_ELEMENTS, ELEMENT_SCHEMAS, ELE_ID_ATTRIBUTE, type ElementSchemaCode, FIGURE_PLACEMENT_ATTRIBUTE, type FreeAttribute, ID_ATTRS, IGNORED_ATTRIBUTES, IGNORED_ATTRIBUTES_STARTS_WITH, IGNORED_ELEMENT_SELECTORS, IGNORED_VALIDATION_ELEMENT_SELECTORS, INDENT_TYPE_ATTRIBUTE, INLINE_ELEMENT_SCHEMAS, type InlineSchemaCode, LAYOUT_ATTRIBUTES, LAYOUT_CELL_WIDTH_ATTRIBUTE, LAYOUT_TABLE_ORIENTATION_ATTRIBUTE, LAYOUT_TABLE_PLACEMENT_ATTRIBUTE, LAYOUT_USER_ATTRIBUTE, LEFT_INDENT_ATTRIBUTE, RIGHT_INDENT_ATTRIBUTE, type RestrictedAttribute, SCHEMAS, SPACE_ABOVE_ATTRIBUTE, SPACE_BELOW_ATTRIBUTE, SPECIAL_INDENT_ATTRIBUTE, STORE_ATTRIBUTE, STYLE_NAME_ATTRIBUTE, type Schema, type SchemaCode, type SchemaKind, TRACK_CHANGES_ATTRS, TRACK_CHANGES_ATTR_DATA_DATE, TRACK_CHANGES_ATTR_DATA_TIME, TRACK_CHANGES_ATTR_DATA_USERID, TRACK_CHANGES_ATTR_DATA_USERNAME, type ValidationError, type ValidationErrorKind, type ValidationErrorLevel, createElement, findAttributeDefinitionByName, findSchemaByCode, findSchemaByElement, findSchemaByTagName, getAttributeName, isAttributeRestricted, isIgnoredAttribute, isIgnoredElement, isIgnoredValidation, isTrackChangesSchema, validateXml };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
type SchemaKind = "element" | "atom" | "inline";
|
|
2
2
|
type FreeAttribute = string;
|
|
3
|
-
type RestrictedAttribute
|
|
3
|
+
type RestrictedAttribute = {
|
|
4
4
|
name: string;
|
|
5
|
-
values:
|
|
5
|
+
values: string[];
|
|
6
6
|
defaultValue: string;
|
|
7
7
|
};
|
|
8
|
-
type AttributeDefinition
|
|
8
|
+
type AttributeDefinition = FreeAttribute | RestrictedAttribute;
|
|
9
9
|
type AllowedChildren = {
|
|
10
10
|
code: SchemaCode;
|
|
11
11
|
required: boolean;
|
|
12
12
|
};
|
|
13
|
-
type Schema
|
|
13
|
+
type Schema = {
|
|
14
14
|
code: SchemaCode;
|
|
15
15
|
kind: SchemaKind;
|
|
16
16
|
tag: string;
|
|
17
|
-
requiredAttributes:
|
|
18
|
-
optionalAttributes:
|
|
17
|
+
requiredAttributes: AttributeDefinition[];
|
|
18
|
+
optionalAttributes: AttributeDefinition[];
|
|
19
19
|
defaultChildCode?: SchemaCode;
|
|
20
20
|
allowedChildrenCodes: AllowedChildren[];
|
|
21
|
-
matchesElement?: (element: Element) => boolean;
|
|
22
21
|
};
|
|
23
22
|
type SchemaCode = ElementSchemaCode | InlineSchemaCode | AtomSchemaCode;
|
|
24
23
|
type ElementSchemaCode = "referenceBibliomixed" | "referenceBibliography" | "bibliodiv" | "degrees" | "email" | "equation" | "fignote" | "figsource" | "firstname" | "footnote" | "footnoteno" | "honorific" | "img" | "informalfigure" | "keyword" | "label1" | "li" | "line" | "lrh" | "math" | "mathphrase" | "merror" | "mfrac" | "mi" | "mmultiscripts" | "mn" | "mo" | "mover" | "mpadded" | "mphantom" | "mprescripts" | "mroot" | "mrow" | "ms" | "mspace" | "msqrt" | "mstyle" | "msub" | "msubsup" | "msup" | "mtable" | "mtd" | "mtext" | "mtr" | "munder" | "munderover" | "olink" | "org" | "orgname" | "para" | "punc" | "rrh" | "source1" | "speaker" | "subtitle1" | "surname" | "tag" | "tblfn" | "tblsource" | "thead" | "title1" | "token" | "tp" | "abstract1" | "affiliation" | "alttext" | "appendix" | "author" | "authorgroup" | "blockquote" | "caption1" | "chapter" | "dialogue" | "epigraph" | "figure1" | "footnoteSection" | "heading" | "imageobject" | "info1" | "keywordset" | "mediaobject" | "ol" | "personname" | "poem" | "sidebar" | "table" | "table1" | "tbody" | "td" | "tgroup" | "tr" | "ul";
|
|
@@ -31,25 +30,18 @@ declare const isTrackChangesSchema: (schema: Schema) => boolean;
|
|
|
31
30
|
declare const isIgnoredAttribute: (attribute: string) => boolean;
|
|
32
31
|
declare const isIgnoredElement: (element: Element) => boolean;
|
|
33
32
|
declare const isIgnoredValidation: (code: SchemaCode) => boolean;
|
|
34
|
-
declare const findSchemaByCode: (code: SchemaCode) => Schema;
|
|
33
|
+
declare const findSchemaByCode: (code: SchemaCode) => Schema | undefined;
|
|
34
|
+
declare const findSchemaByTagName: (tagName: string) => Schema[];
|
|
35
35
|
declare const findSchemaByElement: (element: Element) => Schema | undefined;
|
|
36
36
|
declare const isAttributeRestricted: (attr: AttributeDefinition) => attr is RestrictedAttribute;
|
|
37
37
|
declare const getAttributeName: (attribute: AttributeDefinition) => string;
|
|
38
|
-
declare const findAttributeDefinitionByName: (definitions:
|
|
38
|
+
declare const findAttributeDefinitionByName: (definitions: AttributeDefinition[], name: string) => AttributeDefinition | undefined;
|
|
39
39
|
|
|
40
|
-
type
|
|
41
|
-
type SchemaAttributes<TSchema extends Schema> = TSchema extends Schema<infer TRequired extends readonly AttributeDefinition[], infer TOptional extends readonly AttributeDefinition[]> ? {
|
|
42
|
-
[TAttribute in TRequired[number] as TAttribute extends string ? TAttribute : TAttribute extends RestrictedAttribute ? TAttribute["name"] : never]: AttributeValue<TAttribute>;
|
|
43
|
-
} & {
|
|
44
|
-
[TAttribute in TOptional[number] as TAttribute extends string ? TAttribute : TAttribute extends RestrictedAttribute ? TAttribute["name"] : never]?: AttributeValue<TAttribute>;
|
|
45
|
-
} : never;
|
|
46
|
-
type CreateElementParams<TSchema extends Schema> = {
|
|
40
|
+
type CreateElementParams = {
|
|
47
41
|
schemaCode: SchemaCode;
|
|
48
|
-
attributes:
|
|
42
|
+
attributes: Record<string, string>;
|
|
49
43
|
};
|
|
50
|
-
declare const createElement:
|
|
51
|
-
|
|
52
|
-
declare const ElementLabel: Record<SchemaCode, string>;
|
|
44
|
+
declare const createElement: ({ schemaCode, attributes, }: CreateElementParams) => HTMLElement;
|
|
53
45
|
|
|
54
46
|
declare const IGNORED_ELEMENT_SELECTORS: string[];
|
|
55
47
|
declare const IGNORED_VALIDATION_ELEMENT_SELECTORS: SchemaCode[];
|
|
@@ -76,15 +68,15 @@ declare const FIGURE_PLACEMENT_ATTRIBUTE = "data-figure-placement";
|
|
|
76
68
|
declare const LAYOUT_CELL_WIDTH_ATTRIBUTE = "data-cell-width";
|
|
77
69
|
declare const LAYOUT_TABLE_ORIENTATION_ATTRIBUTE = "data-table-orientation";
|
|
78
70
|
declare const LAYOUT_TABLE_PLACEMENT_ATTRIBUTE = "data-table-placement";
|
|
79
|
-
declare const LAYOUT_ATTRIBUTES:
|
|
71
|
+
declare const LAYOUT_ATTRIBUTES: string[];
|
|
80
72
|
declare const TRACK_CHANGES_ATTR_DATA_USERNAME = "data-username";
|
|
81
73
|
declare const TRACK_CHANGES_ATTR_DATA_USERID = "data-userid";
|
|
82
74
|
declare const TRACK_CHANGES_ATTR_DATA_TIME = "data-time";
|
|
83
75
|
declare const TRACK_CHANGES_ATTR_DATA_DATE = "data-date";
|
|
84
|
-
declare const TRACK_CHANGES_ATTRS:
|
|
76
|
+
declare const TRACK_CHANGES_ATTRS: string[];
|
|
85
77
|
declare const ELE_ID_ATTRIBUTE = "ele-id";
|
|
86
78
|
declare const STORE_ATTRIBUTE = "store";
|
|
87
|
-
declare const ID_ATTRS:
|
|
79
|
+
declare const ID_ATTRS: string[];
|
|
88
80
|
|
|
89
81
|
declare const ELEMENT_SCHEMAS: Record<ElementSchemaCode, Schema>;
|
|
90
82
|
|
|
@@ -115,4 +107,4 @@ type ValidationError = {
|
|
|
115
107
|
*/
|
|
116
108
|
declare const validateXml: (xml: Element, elementsToLink: string[], linkElements: string[], schemasToValidateAgainst: SchemaCode[]) => ValidationError[];
|
|
117
109
|
|
|
118
|
-
export { ALIGNMENT_ATTRIBUTE, ATOM_SCHEMAS, type AllowedChildren, type AtomSchemaCode, type AttributeDefinition, DEPENDENT_FORBIDDEN_ELEMENTS, ELEMENT_SCHEMAS, ELE_ID_ATTRIBUTE,
|
|
110
|
+
export { ALIGNMENT_ATTRIBUTE, ATOM_SCHEMAS, type AllowedChildren, type AtomSchemaCode, type AttributeDefinition, DEPENDENT_FORBIDDEN_ELEMENTS, ELEMENT_SCHEMAS, ELE_ID_ATTRIBUTE, type ElementSchemaCode, FIGURE_PLACEMENT_ATTRIBUTE, type FreeAttribute, ID_ATTRS, IGNORED_ATTRIBUTES, IGNORED_ATTRIBUTES_STARTS_WITH, IGNORED_ELEMENT_SELECTORS, IGNORED_VALIDATION_ELEMENT_SELECTORS, INDENT_TYPE_ATTRIBUTE, INLINE_ELEMENT_SCHEMAS, type InlineSchemaCode, LAYOUT_ATTRIBUTES, LAYOUT_CELL_WIDTH_ATTRIBUTE, LAYOUT_TABLE_ORIENTATION_ATTRIBUTE, LAYOUT_TABLE_PLACEMENT_ATTRIBUTE, LAYOUT_USER_ATTRIBUTE, LEFT_INDENT_ATTRIBUTE, RIGHT_INDENT_ATTRIBUTE, type RestrictedAttribute, SCHEMAS, SPACE_ABOVE_ATTRIBUTE, SPACE_BELOW_ATTRIBUTE, SPECIAL_INDENT_ATTRIBUTE, STORE_ATTRIBUTE, STYLE_NAME_ATTRIBUTE, type Schema, type SchemaCode, type SchemaKind, TRACK_CHANGES_ATTRS, TRACK_CHANGES_ATTR_DATA_DATE, TRACK_CHANGES_ATTR_DATA_TIME, TRACK_CHANGES_ATTR_DATA_USERID, TRACK_CHANGES_ATTR_DATA_USERNAME, type ValidationError, type ValidationErrorKind, type ValidationErrorLevel, createElement, findAttributeDefinitionByName, findSchemaByCode, findSchemaByElement, findSchemaByTagName, getAttributeName, isAttributeRestricted, isIgnoredAttribute, isIgnoredElement, isIgnoredValidation, isTrackChangesSchema, validateXml };
|
package/dist/index.js
CHANGED
|
@@ -25,7 +25,6 @@ __export(index_exports, {
|
|
|
25
25
|
DEPENDENT_FORBIDDEN_ELEMENTS: () => DEPENDENT_FORBIDDEN_ELEMENTS,
|
|
26
26
|
ELEMENT_SCHEMAS: () => ELEMENT_SCHEMAS,
|
|
27
27
|
ELE_ID_ATTRIBUTE: () => ELE_ID_ATTRIBUTE,
|
|
28
|
-
ElementLabel: () => ElementLabel,
|
|
29
28
|
FIGURE_PLACEMENT_ATTRIBUTE: () => FIGURE_PLACEMENT_ATTRIBUTE,
|
|
30
29
|
ID_ATTRS: () => ID_ATTRS,
|
|
31
30
|
IGNORED_ATTRIBUTES: () => IGNORED_ATTRIBUTES,
|
|
@@ -56,6 +55,7 @@ __export(index_exports, {
|
|
|
56
55
|
findAttributeDefinitionByName: () => findAttributeDefinitionByName,
|
|
57
56
|
findSchemaByCode: () => findSchemaByCode,
|
|
58
57
|
findSchemaByElement: () => findSchemaByElement,
|
|
58
|
+
findSchemaByTagName: () => findSchemaByTagName,
|
|
59
59
|
getAttributeName: () => getAttributeName,
|
|
60
60
|
isAttributeRestricted: () => isAttributeRestricted,
|
|
61
61
|
isIgnoredAttribute: () => isIgnoredAttribute,
|
|
@@ -67,8 +67,24 @@ __export(index_exports, {
|
|
|
67
67
|
module.exports = __toCommonJS(index_exports);
|
|
68
68
|
|
|
69
69
|
// src/schema/utils/createSchema.ts
|
|
70
|
-
var createSchema = (
|
|
71
|
-
|
|
70
|
+
var createSchema = ({
|
|
71
|
+
code,
|
|
72
|
+
kind,
|
|
73
|
+
tag,
|
|
74
|
+
requiredAttributes,
|
|
75
|
+
optionalAttributes,
|
|
76
|
+
defaultChildCode,
|
|
77
|
+
allowedChildrenCodes
|
|
78
|
+
}) => {
|
|
79
|
+
return {
|
|
80
|
+
code,
|
|
81
|
+
kind,
|
|
82
|
+
tag,
|
|
83
|
+
requiredAttributes,
|
|
84
|
+
optionalAttributes,
|
|
85
|
+
defaultChildCode,
|
|
86
|
+
allowedChildrenCodes
|
|
87
|
+
};
|
|
72
88
|
};
|
|
73
89
|
|
|
74
90
|
// src/schema/shared/globalAttributes.ts
|
|
@@ -169,7 +185,6 @@ var COMMENT_QUERY_SECTION_SCHEMA = createSchema({
|
|
|
169
185
|
kind: "atom",
|
|
170
186
|
tag: SPAN_TAG,
|
|
171
187
|
code: "commentQuerySection",
|
|
172
|
-
matchesElement: (element) => element.classList.contains("cmtQurySection"),
|
|
173
188
|
requiredAttributes: [...ID_ATTRS, "id"],
|
|
174
189
|
optionalAttributes: [...TRACK_CHANGES_ATTRS, "title"],
|
|
175
190
|
allowedChildrenCodes: [...ATOM_CODES_ALLOWED_CHILDREN]
|
|
@@ -189,7 +204,6 @@ var DELETION_SCHEMA = createSchema({
|
|
|
189
204
|
code: "deletion",
|
|
190
205
|
kind: "atom",
|
|
191
206
|
tag: SPAN_TAG,
|
|
192
|
-
matchesElement: (element) => element.classList.contains("del"),
|
|
193
207
|
requiredAttributes: [...TRACK_CHANGES_ATTRS, ...ID_ATTRS],
|
|
194
208
|
optionalAttributes: [],
|
|
195
209
|
allowedChildrenCodes: [
|
|
@@ -240,7 +254,6 @@ var INSERTION_SCHEMA = createSchema({
|
|
|
240
254
|
code: "insertion",
|
|
241
255
|
kind: "atom",
|
|
242
256
|
tag: SPAN_TAG,
|
|
243
|
-
matchesElement: (element) => element.classList.contains("ins"),
|
|
244
257
|
requiredAttributes: [...TRACK_CHANGES_ATTRS, ...ID_ATTRS],
|
|
245
258
|
optionalAttributes: [],
|
|
246
259
|
allowedChildrenCodes: [
|
|
@@ -1962,21 +1975,15 @@ var EPIGRAPH_SCHEMA = createSchema({
|
|
|
1962
1975
|
});
|
|
1963
1976
|
|
|
1964
1977
|
// src/schema/elementSchemas/elements/footnoteSection.ts
|
|
1965
|
-
var FOOTNOTE_SECTION_ROLES = ["ch", "bk"];
|
|
1966
1978
|
var FOOTNOTE_SECTION_SCHEMA = createSchema({
|
|
1967
1979
|
code: "footnoteSection",
|
|
1968
1980
|
kind: "element",
|
|
1969
1981
|
tag: SECTION_TAG,
|
|
1970
|
-
matchesElement: (element) => {
|
|
1971
|
-
const role = element.getAttribute("role");
|
|
1972
|
-
if (role && FOOTNOTE_SECTION_ROLES.includes(role)) return true;
|
|
1973
|
-
return element.querySelector(FOOTNOTE_TAG) !== null;
|
|
1974
|
-
},
|
|
1975
1982
|
requiredAttributes: [
|
|
1976
1983
|
...ID_ATTRS,
|
|
1977
1984
|
{
|
|
1978
1985
|
name: "role",
|
|
1979
|
-
values:
|
|
1986
|
+
values: ["ch", "bk"],
|
|
1980
1987
|
defaultValue: "ch"
|
|
1981
1988
|
}
|
|
1982
1989
|
],
|
|
@@ -1989,22 +1996,16 @@ var FOOTNOTE_SECTION_SCHEMA = createSchema({
|
|
|
1989
1996
|
});
|
|
1990
1997
|
|
|
1991
1998
|
// src/schema/elementSchemas/elements/heading.ts
|
|
1992
|
-
var HEADING_ROLES = ["H1", "H2", "H3", "H4", "H5", "H6", "vignette_group"];
|
|
1993
1999
|
var HEADING_SCHEMA = createSchema({
|
|
1994
2000
|
code: "heading",
|
|
1995
2001
|
kind: "element",
|
|
1996
2002
|
tag: SECTION_TAG,
|
|
1997
|
-
matchesElement: (element) => {
|
|
1998
|
-
const role = element.getAttribute("role");
|
|
1999
|
-
if (!role) return false;
|
|
2000
|
-
return HEADING_ROLES.includes(role);
|
|
2001
|
-
},
|
|
2002
2003
|
requiredAttributes: [
|
|
2003
2004
|
...ID_ATTRS,
|
|
2004
2005
|
"xmlid",
|
|
2005
2006
|
{
|
|
2006
2007
|
name: "role",
|
|
2007
|
-
values:
|
|
2008
|
+
values: ["H1", "H2", "H3", "H4", "H5", "H6", "vignette_group"],
|
|
2008
2009
|
defaultValue: "H1"
|
|
2009
2010
|
}
|
|
2010
2011
|
],
|
|
@@ -2072,6 +2073,7 @@ var MATHPHRASE_SCHEMA = createSchema({
|
|
|
2072
2073
|
requiredAttributes: [ELE_ID_ATTRIBUTE],
|
|
2073
2074
|
optionalAttributes: [],
|
|
2074
2075
|
allowedChildrenCodes: [{ code: MATH_SCHEMA.code, required: true }]
|
|
2076
|
+
// TODO: Should have flag for insertion and deletion
|
|
2075
2077
|
});
|
|
2076
2078
|
|
|
2077
2079
|
// src/schema/elementSchemas/elements/reference/bibliodiv.ts
|
|
@@ -2369,11 +2371,42 @@ var isIgnoredAttribute = (attribute) => IGNORED_ATTRIBUTES.includes(attribute) |
|
|
|
2369
2371
|
var isIgnoredElement = (element) => IGNORED_ELEMENT_SELECTORS.some((selector) => element.matches(selector));
|
|
2370
2372
|
var isIgnoredValidation = (code) => IGNORED_VALIDATION_ELEMENT_SELECTORS.includes(code);
|
|
2371
2373
|
var findSchemaByCode = (code) => SCHEMAS[code];
|
|
2374
|
+
var findSchemaByTagName = (tagName) => Object.values(SCHEMAS).filter(
|
|
2375
|
+
(schema) => schema.tag === tagName.toUpperCase()
|
|
2376
|
+
);
|
|
2372
2377
|
var findSchemaByElement = (element) => {
|
|
2373
|
-
const
|
|
2374
|
-
|
|
2375
|
-
);
|
|
2376
|
-
|
|
2378
|
+
const tagName = element.tagName.toUpperCase();
|
|
2379
|
+
const isInsertion = element.classList.contains("ins");
|
|
2380
|
+
const isDeletion = element.classList.contains("del");
|
|
2381
|
+
const isQueryComment = element.classList.contains("cmtQurySection");
|
|
2382
|
+
const role = element.getAttribute("role");
|
|
2383
|
+
if (tagName === SPAN_TAG) {
|
|
2384
|
+
if (isQueryComment) {
|
|
2385
|
+
return findSchemaByCode("commentQuerySection");
|
|
2386
|
+
}
|
|
2387
|
+
if (isInsertion) {
|
|
2388
|
+
return findSchemaByCode("insertion");
|
|
2389
|
+
}
|
|
2390
|
+
if (isDeletion) {
|
|
2391
|
+
return findSchemaByCode("deletion");
|
|
2392
|
+
}
|
|
2393
|
+
}
|
|
2394
|
+
if (tagName === SECTION_TAG) {
|
|
2395
|
+
if (role) {
|
|
2396
|
+
if (role.startsWith("H")) {
|
|
2397
|
+
return findSchemaByCode("heading");
|
|
2398
|
+
}
|
|
2399
|
+
if (role === "ch" || role === "bk") {
|
|
2400
|
+
return findSchemaByCode("footnoteSection");
|
|
2401
|
+
}
|
|
2402
|
+
}
|
|
2403
|
+
const isFootnoteSectionWithoutRole = element.querySelector(FOOTNOTE_TAG);
|
|
2404
|
+
if (isFootnoteSectionWithoutRole) {
|
|
2405
|
+
return findSchemaByCode("footnoteSection");
|
|
2406
|
+
}
|
|
2407
|
+
}
|
|
2408
|
+
const candidates = findSchemaByTagName(tagName);
|
|
2409
|
+
return candidates[0];
|
|
2377
2410
|
};
|
|
2378
2411
|
var isAttributeRestricted = (attr) => typeof attr !== "string";
|
|
2379
2412
|
var getAttributeName = (attribute) => typeof attribute === "string" ? attribute.toLowerCase() : attribute.name.toLowerCase();
|
|
@@ -2387,144 +2420,50 @@ var findAttributeDefinitionByName = (definitions, name) => {
|
|
|
2387
2420
|
};
|
|
2388
2421
|
|
|
2389
2422
|
// src/schema/utils/createElement.ts
|
|
2423
|
+
var validateAttributes = (attributes, schema) => {
|
|
2424
|
+
const definitions = [
|
|
2425
|
+
...schema.requiredAttributes,
|
|
2426
|
+
...schema.optionalAttributes
|
|
2427
|
+
];
|
|
2428
|
+
for (const [name, value] of Object.entries(attributes)) {
|
|
2429
|
+
if (value === void 0) {
|
|
2430
|
+
continue;
|
|
2431
|
+
}
|
|
2432
|
+
const definition = findAttributeDefinitionByName(definitions, name);
|
|
2433
|
+
if (!definition) {
|
|
2434
|
+
throw new Error(
|
|
2435
|
+
`Invalid attribute "${name}" for schema "${schema.code}".`
|
|
2436
|
+
);
|
|
2437
|
+
}
|
|
2438
|
+
if (!isAttributeRestricted(definition)) {
|
|
2439
|
+
continue;
|
|
2440
|
+
}
|
|
2441
|
+
if (!definition.values.includes(value)) {
|
|
2442
|
+
throw new Error(
|
|
2443
|
+
`Invalid value "${value}" for attribute "${name}" on schema "${schema.code}". Allowed values: ${definition.values.join(", ")}.`
|
|
2444
|
+
);
|
|
2445
|
+
}
|
|
2446
|
+
}
|
|
2447
|
+
};
|
|
2390
2448
|
var createElement = ({
|
|
2391
2449
|
schemaCode,
|
|
2392
2450
|
attributes
|
|
2393
2451
|
}) => {
|
|
2394
2452
|
const schema = findSchemaByCode(schemaCode);
|
|
2453
|
+
if (!schema) {
|
|
2454
|
+
throw new Error(`Schema not found for code: ${schemaCode}`);
|
|
2455
|
+
}
|
|
2456
|
+
validateAttributes(attributes, schema);
|
|
2395
2457
|
const element = document.createElement(schema.tag.toLowerCase());
|
|
2396
2458
|
for (const [name, value] of Object.entries(attributes)) {
|
|
2397
|
-
if (
|
|
2459
|
+
if (value === void 0) {
|
|
2460
|
+
continue;
|
|
2461
|
+
}
|
|
2398
2462
|
element.setAttribute(name, String(value));
|
|
2399
2463
|
}
|
|
2400
2464
|
return element;
|
|
2401
2465
|
};
|
|
2402
2466
|
|
|
2403
|
-
// src/schema/shared/labelElements.ts
|
|
2404
|
-
var ElementLabel = {
|
|
2405
|
-
referenceBibliomixed: "Reference Bibliomixed",
|
|
2406
|
-
referenceBibliography: "Reference Bibliography",
|
|
2407
|
-
bibliodiv: "Bibliodiv",
|
|
2408
|
-
indexterm: "Indexterm",
|
|
2409
|
-
primary: "Primary",
|
|
2410
|
-
secondary: "Secondary",
|
|
2411
|
-
tertiary: "Tertiary",
|
|
2412
|
-
quaternary: "Quaternary",
|
|
2413
|
-
bookmark: "Bookmark",
|
|
2414
|
-
see: "Cross Reference",
|
|
2415
|
-
commentQuerySection: "Comment/Query",
|
|
2416
|
-
comment: "Comment",
|
|
2417
|
-
content: "Content",
|
|
2418
|
-
query: "Query",
|
|
2419
|
-
reply: "Reply",
|
|
2420
|
-
deletion: "Deletion",
|
|
2421
|
-
emphasis: "Emphasis",
|
|
2422
|
-
highlightmark: "Highlightmark",
|
|
2423
|
-
i: "Italic",
|
|
2424
|
-
insertion: "Insertion",
|
|
2425
|
-
sc: "Small Caps",
|
|
2426
|
-
strike: "Strike",
|
|
2427
|
-
sub: "Subscript",
|
|
2428
|
-
sup: "Superscript",
|
|
2429
|
-
u: "Underline",
|
|
2430
|
-
b: "Bold",
|
|
2431
|
-
referenceMark: "Reference Mark",
|
|
2432
|
-
degrees: "Degrees",
|
|
2433
|
-
email: "Email",
|
|
2434
|
-
equation: "Equation",
|
|
2435
|
-
fignote: "Fignote",
|
|
2436
|
-
figsource: "Figsource",
|
|
2437
|
-
firstname: "Firstname",
|
|
2438
|
-
footnote: "Footnote Marker",
|
|
2439
|
-
footnoteno: "Footnote Number",
|
|
2440
|
-
honorific: "Honorific",
|
|
2441
|
-
img: "Image",
|
|
2442
|
-
informalfigure: "Floating Figure",
|
|
2443
|
-
keyword: "Keyword",
|
|
2444
|
-
label1: "Label",
|
|
2445
|
-
li: "List Item",
|
|
2446
|
-
line: "Line",
|
|
2447
|
-
lrh: "Running Head Left",
|
|
2448
|
-
math: "Math",
|
|
2449
|
-
mathphrase: "Math Phrase",
|
|
2450
|
-
merror: "Math Error",
|
|
2451
|
-
mfrac: "Math Fraction",
|
|
2452
|
-
mi: "Math Identifier",
|
|
2453
|
-
mmultiscripts: "Math Multiscripts",
|
|
2454
|
-
mn: "Math Number",
|
|
2455
|
-
mo: "Math Operator",
|
|
2456
|
-
mover: "Math Over",
|
|
2457
|
-
mpadded: "Math Padded",
|
|
2458
|
-
mphantom: "Math Phantom",
|
|
2459
|
-
mprescripts: "Math Prescripts",
|
|
2460
|
-
mroot: "Math Root",
|
|
2461
|
-
mrow: "Math Row",
|
|
2462
|
-
ms: "Math Space",
|
|
2463
|
-
mspace: "Math Space",
|
|
2464
|
-
msqrt: "Math Square Root",
|
|
2465
|
-
mstyle: "Math Style",
|
|
2466
|
-
msub: "Math Subscript",
|
|
2467
|
-
msubsup: "Math Subscript Superscript",
|
|
2468
|
-
msup: "Math Superscript",
|
|
2469
|
-
mtable: "Math Table",
|
|
2470
|
-
mtd: "Math Table Data",
|
|
2471
|
-
mtext: "Math Text",
|
|
2472
|
-
mtr: "Math Table Row",
|
|
2473
|
-
munder: "Math Under",
|
|
2474
|
-
munderover: "Math Under Over",
|
|
2475
|
-
olink: "Online Link",
|
|
2476
|
-
org: "Org",
|
|
2477
|
-
orgname: "Orgname",
|
|
2478
|
-
para: "Paragraph",
|
|
2479
|
-
punc: "Punctuation",
|
|
2480
|
-
rrh: "Running Head Right",
|
|
2481
|
-
source1: "Source",
|
|
2482
|
-
speaker: "Speaker",
|
|
2483
|
-
subtitle1: "Subtitle",
|
|
2484
|
-
surname: "Surname",
|
|
2485
|
-
tag: "Tag",
|
|
2486
|
-
tblfn: "Table Footnote",
|
|
2487
|
-
tblsource: "Table Source",
|
|
2488
|
-
thead: "Thead",
|
|
2489
|
-
title1: "Title",
|
|
2490
|
-
token: "Token",
|
|
2491
|
-
tp: "Table Paragraph",
|
|
2492
|
-
abstract1: "Abstract",
|
|
2493
|
-
affiliation: "Affiliation",
|
|
2494
|
-
alttext: "Alttext",
|
|
2495
|
-
appendix: "Appendix",
|
|
2496
|
-
author: "Author",
|
|
2497
|
-
authorgroup: "Authorgroup",
|
|
2498
|
-
blockquote: "Blockquote",
|
|
2499
|
-
caption1: "Caption",
|
|
2500
|
-
chapter: "Chapter",
|
|
2501
|
-
dialogue: "Dialogue",
|
|
2502
|
-
epigraph: "Epigraph",
|
|
2503
|
-
figure1: "Figure",
|
|
2504
|
-
footnoteSection: "Footnote Section",
|
|
2505
|
-
heading: "Heading",
|
|
2506
|
-
imageobject: "Image Object",
|
|
2507
|
-
info1: "Info",
|
|
2508
|
-
keywordset: "Keyword FGroup",
|
|
2509
|
-
mediaobject: "Mediaobject",
|
|
2510
|
-
ol: "Ordered List",
|
|
2511
|
-
personname: "Person Name",
|
|
2512
|
-
poem: "Poem",
|
|
2513
|
-
sidebar: "Box",
|
|
2514
|
-
table: "Table",
|
|
2515
|
-
table1: "Table",
|
|
2516
|
-
tbody: "Table Body",
|
|
2517
|
-
td: "Table Data",
|
|
2518
|
-
tgroup: "Table Group",
|
|
2519
|
-
tr: "Table Row",
|
|
2520
|
-
ul: "Unordered List",
|
|
2521
|
-
footnote1: "Footnote",
|
|
2522
|
-
inlineequation: "Inline Equation",
|
|
2523
|
-
link: "Link",
|
|
2524
|
-
uri: "URI",
|
|
2525
|
-
phrase: "Phrase"
|
|
2526
|
-
};
|
|
2527
|
-
|
|
2528
2467
|
// src/schema/shared/dependentsForbiddenElements.ts
|
|
2529
2468
|
var DEPENDENT_FORBIDDEN_ELEMENTS = [
|
|
2530
2469
|
{
|
|
@@ -2699,7 +2638,7 @@ var validateLinkend = (linkElement, elementsToLink) => {
|
|
|
2699
2638
|
};
|
|
2700
2639
|
|
|
2701
2640
|
// src/validation/validateAttributes.ts
|
|
2702
|
-
var
|
|
2641
|
+
var validateAttributes2 = (element, schema) => {
|
|
2703
2642
|
const errors = [];
|
|
2704
2643
|
const definitions = [
|
|
2705
2644
|
...schema.requiredAttributes,
|
|
@@ -2750,7 +2689,7 @@ var validateElementAgainstSchema = (element, schema) => {
|
|
|
2750
2689
|
description: `The element is not allowed in this context.`
|
|
2751
2690
|
});
|
|
2752
2691
|
}
|
|
2753
|
-
errors.push(...
|
|
2692
|
+
errors.push(...validateAttributes2(element, schema));
|
|
2754
2693
|
errors.push(...validateChildren(element, schema));
|
|
2755
2694
|
return errors;
|
|
2756
2695
|
};
|
|
@@ -2765,7 +2704,7 @@ var validateRequiredChildren = (element, schema, childElements) => {
|
|
|
2765
2704
|
return childSchema?.code === allowedChild.code;
|
|
2766
2705
|
});
|
|
2767
2706
|
if (!hasChild) {
|
|
2768
|
-
const requiredChildrenTag = findSchemaByCode(allowedChild.code).
|
|
2707
|
+
const requiredChildrenTag = findSchemaByCode(allowedChild.code)?.tag || allowedChild.code;
|
|
2769
2708
|
addValidationIssue(errors, {
|
|
2770
2709
|
store: getStore(element),
|
|
2771
2710
|
title: `Missing required child element ${requiredChildrenTag}`,
|
|
@@ -2930,7 +2869,6 @@ var validateXml = (xml, elementsToLink, linkElements, schemasToValidateAgainst)
|
|
|
2930
2869
|
DEPENDENT_FORBIDDEN_ELEMENTS,
|
|
2931
2870
|
ELEMENT_SCHEMAS,
|
|
2932
2871
|
ELE_ID_ATTRIBUTE,
|
|
2933
|
-
ElementLabel,
|
|
2934
2872
|
FIGURE_PLACEMENT_ATTRIBUTE,
|
|
2935
2873
|
ID_ATTRS,
|
|
2936
2874
|
IGNORED_ATTRIBUTES,
|
|
@@ -2961,6 +2899,7 @@ var validateXml = (xml, elementsToLink, linkElements, schemasToValidateAgainst)
|
|
|
2961
2899
|
findAttributeDefinitionByName,
|
|
2962
2900
|
findSchemaByCode,
|
|
2963
2901
|
findSchemaByElement,
|
|
2902
|
+
findSchemaByTagName,
|
|
2964
2903
|
getAttributeName,
|
|
2965
2904
|
isAttributeRestricted,
|
|
2966
2905
|
isIgnoredAttribute,
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
// src/schema/utils/createSchema.ts
|
|
2
|
-
var createSchema = (
|
|
3
|
-
|
|
2
|
+
var createSchema = ({
|
|
3
|
+
code,
|
|
4
|
+
kind,
|
|
5
|
+
tag,
|
|
6
|
+
requiredAttributes,
|
|
7
|
+
optionalAttributes,
|
|
8
|
+
defaultChildCode,
|
|
9
|
+
allowedChildrenCodes
|
|
10
|
+
}) => {
|
|
11
|
+
return {
|
|
12
|
+
code,
|
|
13
|
+
kind,
|
|
14
|
+
tag,
|
|
15
|
+
requiredAttributes,
|
|
16
|
+
optionalAttributes,
|
|
17
|
+
defaultChildCode,
|
|
18
|
+
allowedChildrenCodes
|
|
19
|
+
};
|
|
4
20
|
};
|
|
5
21
|
|
|
6
22
|
// src/schema/shared/globalAttributes.ts
|
|
@@ -101,7 +117,6 @@ var COMMENT_QUERY_SECTION_SCHEMA = createSchema({
|
|
|
101
117
|
kind: "atom",
|
|
102
118
|
tag: SPAN_TAG,
|
|
103
119
|
code: "commentQuerySection",
|
|
104
|
-
matchesElement: (element) => element.classList.contains("cmtQurySection"),
|
|
105
120
|
requiredAttributes: [...ID_ATTRS, "id"],
|
|
106
121
|
optionalAttributes: [...TRACK_CHANGES_ATTRS, "title"],
|
|
107
122
|
allowedChildrenCodes: [...ATOM_CODES_ALLOWED_CHILDREN]
|
|
@@ -121,7 +136,6 @@ var DELETION_SCHEMA = createSchema({
|
|
|
121
136
|
code: "deletion",
|
|
122
137
|
kind: "atom",
|
|
123
138
|
tag: SPAN_TAG,
|
|
124
|
-
matchesElement: (element) => element.classList.contains("del"),
|
|
125
139
|
requiredAttributes: [...TRACK_CHANGES_ATTRS, ...ID_ATTRS],
|
|
126
140
|
optionalAttributes: [],
|
|
127
141
|
allowedChildrenCodes: [
|
|
@@ -172,7 +186,6 @@ var INSERTION_SCHEMA = createSchema({
|
|
|
172
186
|
code: "insertion",
|
|
173
187
|
kind: "atom",
|
|
174
188
|
tag: SPAN_TAG,
|
|
175
|
-
matchesElement: (element) => element.classList.contains("ins"),
|
|
176
189
|
requiredAttributes: [...TRACK_CHANGES_ATTRS, ...ID_ATTRS],
|
|
177
190
|
optionalAttributes: [],
|
|
178
191
|
allowedChildrenCodes: [
|
|
@@ -1894,21 +1907,15 @@ var EPIGRAPH_SCHEMA = createSchema({
|
|
|
1894
1907
|
});
|
|
1895
1908
|
|
|
1896
1909
|
// src/schema/elementSchemas/elements/footnoteSection.ts
|
|
1897
|
-
var FOOTNOTE_SECTION_ROLES = ["ch", "bk"];
|
|
1898
1910
|
var FOOTNOTE_SECTION_SCHEMA = createSchema({
|
|
1899
1911
|
code: "footnoteSection",
|
|
1900
1912
|
kind: "element",
|
|
1901
1913
|
tag: SECTION_TAG,
|
|
1902
|
-
matchesElement: (element) => {
|
|
1903
|
-
const role = element.getAttribute("role");
|
|
1904
|
-
if (role && FOOTNOTE_SECTION_ROLES.includes(role)) return true;
|
|
1905
|
-
return element.querySelector(FOOTNOTE_TAG) !== null;
|
|
1906
|
-
},
|
|
1907
1914
|
requiredAttributes: [
|
|
1908
1915
|
...ID_ATTRS,
|
|
1909
1916
|
{
|
|
1910
1917
|
name: "role",
|
|
1911
|
-
values:
|
|
1918
|
+
values: ["ch", "bk"],
|
|
1912
1919
|
defaultValue: "ch"
|
|
1913
1920
|
}
|
|
1914
1921
|
],
|
|
@@ -1921,22 +1928,16 @@ var FOOTNOTE_SECTION_SCHEMA = createSchema({
|
|
|
1921
1928
|
});
|
|
1922
1929
|
|
|
1923
1930
|
// src/schema/elementSchemas/elements/heading.ts
|
|
1924
|
-
var HEADING_ROLES = ["H1", "H2", "H3", "H4", "H5", "H6", "vignette_group"];
|
|
1925
1931
|
var HEADING_SCHEMA = createSchema({
|
|
1926
1932
|
code: "heading",
|
|
1927
1933
|
kind: "element",
|
|
1928
1934
|
tag: SECTION_TAG,
|
|
1929
|
-
matchesElement: (element) => {
|
|
1930
|
-
const role = element.getAttribute("role");
|
|
1931
|
-
if (!role) return false;
|
|
1932
|
-
return HEADING_ROLES.includes(role);
|
|
1933
|
-
},
|
|
1934
1935
|
requiredAttributes: [
|
|
1935
1936
|
...ID_ATTRS,
|
|
1936
1937
|
"xmlid",
|
|
1937
1938
|
{
|
|
1938
1939
|
name: "role",
|
|
1939
|
-
values:
|
|
1940
|
+
values: ["H1", "H2", "H3", "H4", "H5", "H6", "vignette_group"],
|
|
1940
1941
|
defaultValue: "H1"
|
|
1941
1942
|
}
|
|
1942
1943
|
],
|
|
@@ -2004,6 +2005,7 @@ var MATHPHRASE_SCHEMA = createSchema({
|
|
|
2004
2005
|
requiredAttributes: [ELE_ID_ATTRIBUTE],
|
|
2005
2006
|
optionalAttributes: [],
|
|
2006
2007
|
allowedChildrenCodes: [{ code: MATH_SCHEMA.code, required: true }]
|
|
2008
|
+
// TODO: Should have flag for insertion and deletion
|
|
2007
2009
|
});
|
|
2008
2010
|
|
|
2009
2011
|
// src/schema/elementSchemas/elements/reference/bibliodiv.ts
|
|
@@ -2301,11 +2303,42 @@ var isIgnoredAttribute = (attribute) => IGNORED_ATTRIBUTES.includes(attribute) |
|
|
|
2301
2303
|
var isIgnoredElement = (element) => IGNORED_ELEMENT_SELECTORS.some((selector) => element.matches(selector));
|
|
2302
2304
|
var isIgnoredValidation = (code) => IGNORED_VALIDATION_ELEMENT_SELECTORS.includes(code);
|
|
2303
2305
|
var findSchemaByCode = (code) => SCHEMAS[code];
|
|
2306
|
+
var findSchemaByTagName = (tagName) => Object.values(SCHEMAS).filter(
|
|
2307
|
+
(schema) => schema.tag === tagName.toUpperCase()
|
|
2308
|
+
);
|
|
2304
2309
|
var findSchemaByElement = (element) => {
|
|
2305
|
-
const
|
|
2306
|
-
|
|
2307
|
-
);
|
|
2308
|
-
|
|
2310
|
+
const tagName = element.tagName.toUpperCase();
|
|
2311
|
+
const isInsertion = element.classList.contains("ins");
|
|
2312
|
+
const isDeletion = element.classList.contains("del");
|
|
2313
|
+
const isQueryComment = element.classList.contains("cmtQurySection");
|
|
2314
|
+
const role = element.getAttribute("role");
|
|
2315
|
+
if (tagName === SPAN_TAG) {
|
|
2316
|
+
if (isQueryComment) {
|
|
2317
|
+
return findSchemaByCode("commentQuerySection");
|
|
2318
|
+
}
|
|
2319
|
+
if (isInsertion) {
|
|
2320
|
+
return findSchemaByCode("insertion");
|
|
2321
|
+
}
|
|
2322
|
+
if (isDeletion) {
|
|
2323
|
+
return findSchemaByCode("deletion");
|
|
2324
|
+
}
|
|
2325
|
+
}
|
|
2326
|
+
if (tagName === SECTION_TAG) {
|
|
2327
|
+
if (role) {
|
|
2328
|
+
if (role.startsWith("H")) {
|
|
2329
|
+
return findSchemaByCode("heading");
|
|
2330
|
+
}
|
|
2331
|
+
if (role === "ch" || role === "bk") {
|
|
2332
|
+
return findSchemaByCode("footnoteSection");
|
|
2333
|
+
}
|
|
2334
|
+
}
|
|
2335
|
+
const isFootnoteSectionWithoutRole = element.querySelector(FOOTNOTE_TAG);
|
|
2336
|
+
if (isFootnoteSectionWithoutRole) {
|
|
2337
|
+
return findSchemaByCode("footnoteSection");
|
|
2338
|
+
}
|
|
2339
|
+
}
|
|
2340
|
+
const candidates = findSchemaByTagName(tagName);
|
|
2341
|
+
return candidates[0];
|
|
2309
2342
|
};
|
|
2310
2343
|
var isAttributeRestricted = (attr) => typeof attr !== "string";
|
|
2311
2344
|
var getAttributeName = (attribute) => typeof attribute === "string" ? attribute.toLowerCase() : attribute.name.toLowerCase();
|
|
@@ -2319,144 +2352,50 @@ var findAttributeDefinitionByName = (definitions, name) => {
|
|
|
2319
2352
|
};
|
|
2320
2353
|
|
|
2321
2354
|
// src/schema/utils/createElement.ts
|
|
2355
|
+
var validateAttributes = (attributes, schema) => {
|
|
2356
|
+
const definitions = [
|
|
2357
|
+
...schema.requiredAttributes,
|
|
2358
|
+
...schema.optionalAttributes
|
|
2359
|
+
];
|
|
2360
|
+
for (const [name, value] of Object.entries(attributes)) {
|
|
2361
|
+
if (value === void 0) {
|
|
2362
|
+
continue;
|
|
2363
|
+
}
|
|
2364
|
+
const definition = findAttributeDefinitionByName(definitions, name);
|
|
2365
|
+
if (!definition) {
|
|
2366
|
+
throw new Error(
|
|
2367
|
+
`Invalid attribute "${name}" for schema "${schema.code}".`
|
|
2368
|
+
);
|
|
2369
|
+
}
|
|
2370
|
+
if (!isAttributeRestricted(definition)) {
|
|
2371
|
+
continue;
|
|
2372
|
+
}
|
|
2373
|
+
if (!definition.values.includes(value)) {
|
|
2374
|
+
throw new Error(
|
|
2375
|
+
`Invalid value "${value}" for attribute "${name}" on schema "${schema.code}". Allowed values: ${definition.values.join(", ")}.`
|
|
2376
|
+
);
|
|
2377
|
+
}
|
|
2378
|
+
}
|
|
2379
|
+
};
|
|
2322
2380
|
var createElement = ({
|
|
2323
2381
|
schemaCode,
|
|
2324
2382
|
attributes
|
|
2325
2383
|
}) => {
|
|
2326
2384
|
const schema = findSchemaByCode(schemaCode);
|
|
2385
|
+
if (!schema) {
|
|
2386
|
+
throw new Error(`Schema not found for code: ${schemaCode}`);
|
|
2387
|
+
}
|
|
2388
|
+
validateAttributes(attributes, schema);
|
|
2327
2389
|
const element = document.createElement(schema.tag.toLowerCase());
|
|
2328
2390
|
for (const [name, value] of Object.entries(attributes)) {
|
|
2329
|
-
if (
|
|
2391
|
+
if (value === void 0) {
|
|
2392
|
+
continue;
|
|
2393
|
+
}
|
|
2330
2394
|
element.setAttribute(name, String(value));
|
|
2331
2395
|
}
|
|
2332
2396
|
return element;
|
|
2333
2397
|
};
|
|
2334
2398
|
|
|
2335
|
-
// src/schema/shared/labelElements.ts
|
|
2336
|
-
var ElementLabel = {
|
|
2337
|
-
referenceBibliomixed: "Reference Bibliomixed",
|
|
2338
|
-
referenceBibliography: "Reference Bibliography",
|
|
2339
|
-
bibliodiv: "Bibliodiv",
|
|
2340
|
-
indexterm: "Indexterm",
|
|
2341
|
-
primary: "Primary",
|
|
2342
|
-
secondary: "Secondary",
|
|
2343
|
-
tertiary: "Tertiary",
|
|
2344
|
-
quaternary: "Quaternary",
|
|
2345
|
-
bookmark: "Bookmark",
|
|
2346
|
-
see: "Cross Reference",
|
|
2347
|
-
commentQuerySection: "Comment/Query",
|
|
2348
|
-
comment: "Comment",
|
|
2349
|
-
content: "Content",
|
|
2350
|
-
query: "Query",
|
|
2351
|
-
reply: "Reply",
|
|
2352
|
-
deletion: "Deletion",
|
|
2353
|
-
emphasis: "Emphasis",
|
|
2354
|
-
highlightmark: "Highlightmark",
|
|
2355
|
-
i: "Italic",
|
|
2356
|
-
insertion: "Insertion",
|
|
2357
|
-
sc: "Small Caps",
|
|
2358
|
-
strike: "Strike",
|
|
2359
|
-
sub: "Subscript",
|
|
2360
|
-
sup: "Superscript",
|
|
2361
|
-
u: "Underline",
|
|
2362
|
-
b: "Bold",
|
|
2363
|
-
referenceMark: "Reference Mark",
|
|
2364
|
-
degrees: "Degrees",
|
|
2365
|
-
email: "Email",
|
|
2366
|
-
equation: "Equation",
|
|
2367
|
-
fignote: "Fignote",
|
|
2368
|
-
figsource: "Figsource",
|
|
2369
|
-
firstname: "Firstname",
|
|
2370
|
-
footnote: "Footnote Marker",
|
|
2371
|
-
footnoteno: "Footnote Number",
|
|
2372
|
-
honorific: "Honorific",
|
|
2373
|
-
img: "Image",
|
|
2374
|
-
informalfigure: "Floating Figure",
|
|
2375
|
-
keyword: "Keyword",
|
|
2376
|
-
label1: "Label",
|
|
2377
|
-
li: "List Item",
|
|
2378
|
-
line: "Line",
|
|
2379
|
-
lrh: "Running Head Left",
|
|
2380
|
-
math: "Math",
|
|
2381
|
-
mathphrase: "Math Phrase",
|
|
2382
|
-
merror: "Math Error",
|
|
2383
|
-
mfrac: "Math Fraction",
|
|
2384
|
-
mi: "Math Identifier",
|
|
2385
|
-
mmultiscripts: "Math Multiscripts",
|
|
2386
|
-
mn: "Math Number",
|
|
2387
|
-
mo: "Math Operator",
|
|
2388
|
-
mover: "Math Over",
|
|
2389
|
-
mpadded: "Math Padded",
|
|
2390
|
-
mphantom: "Math Phantom",
|
|
2391
|
-
mprescripts: "Math Prescripts",
|
|
2392
|
-
mroot: "Math Root",
|
|
2393
|
-
mrow: "Math Row",
|
|
2394
|
-
ms: "Math Space",
|
|
2395
|
-
mspace: "Math Space",
|
|
2396
|
-
msqrt: "Math Square Root",
|
|
2397
|
-
mstyle: "Math Style",
|
|
2398
|
-
msub: "Math Subscript",
|
|
2399
|
-
msubsup: "Math Subscript Superscript",
|
|
2400
|
-
msup: "Math Superscript",
|
|
2401
|
-
mtable: "Math Table",
|
|
2402
|
-
mtd: "Math Table Data",
|
|
2403
|
-
mtext: "Math Text",
|
|
2404
|
-
mtr: "Math Table Row",
|
|
2405
|
-
munder: "Math Under",
|
|
2406
|
-
munderover: "Math Under Over",
|
|
2407
|
-
olink: "Online Link",
|
|
2408
|
-
org: "Org",
|
|
2409
|
-
orgname: "Orgname",
|
|
2410
|
-
para: "Paragraph",
|
|
2411
|
-
punc: "Punctuation",
|
|
2412
|
-
rrh: "Running Head Right",
|
|
2413
|
-
source1: "Source",
|
|
2414
|
-
speaker: "Speaker",
|
|
2415
|
-
subtitle1: "Subtitle",
|
|
2416
|
-
surname: "Surname",
|
|
2417
|
-
tag: "Tag",
|
|
2418
|
-
tblfn: "Table Footnote",
|
|
2419
|
-
tblsource: "Table Source",
|
|
2420
|
-
thead: "Thead",
|
|
2421
|
-
title1: "Title",
|
|
2422
|
-
token: "Token",
|
|
2423
|
-
tp: "Table Paragraph",
|
|
2424
|
-
abstract1: "Abstract",
|
|
2425
|
-
affiliation: "Affiliation",
|
|
2426
|
-
alttext: "Alttext",
|
|
2427
|
-
appendix: "Appendix",
|
|
2428
|
-
author: "Author",
|
|
2429
|
-
authorgroup: "Authorgroup",
|
|
2430
|
-
blockquote: "Blockquote",
|
|
2431
|
-
caption1: "Caption",
|
|
2432
|
-
chapter: "Chapter",
|
|
2433
|
-
dialogue: "Dialogue",
|
|
2434
|
-
epigraph: "Epigraph",
|
|
2435
|
-
figure1: "Figure",
|
|
2436
|
-
footnoteSection: "Footnote Section",
|
|
2437
|
-
heading: "Heading",
|
|
2438
|
-
imageobject: "Image Object",
|
|
2439
|
-
info1: "Info",
|
|
2440
|
-
keywordset: "Keyword FGroup",
|
|
2441
|
-
mediaobject: "Mediaobject",
|
|
2442
|
-
ol: "Ordered List",
|
|
2443
|
-
personname: "Person Name",
|
|
2444
|
-
poem: "Poem",
|
|
2445
|
-
sidebar: "Box",
|
|
2446
|
-
table: "Table",
|
|
2447
|
-
table1: "Table",
|
|
2448
|
-
tbody: "Table Body",
|
|
2449
|
-
td: "Table Data",
|
|
2450
|
-
tgroup: "Table Group",
|
|
2451
|
-
tr: "Table Row",
|
|
2452
|
-
ul: "Unordered List",
|
|
2453
|
-
footnote1: "Footnote",
|
|
2454
|
-
inlineequation: "Inline Equation",
|
|
2455
|
-
link: "Link",
|
|
2456
|
-
uri: "URI",
|
|
2457
|
-
phrase: "Phrase"
|
|
2458
|
-
};
|
|
2459
|
-
|
|
2460
2399
|
// src/schema/shared/dependentsForbiddenElements.ts
|
|
2461
2400
|
var DEPENDENT_FORBIDDEN_ELEMENTS = [
|
|
2462
2401
|
{
|
|
@@ -2631,7 +2570,7 @@ var validateLinkend = (linkElement, elementsToLink) => {
|
|
|
2631
2570
|
};
|
|
2632
2571
|
|
|
2633
2572
|
// src/validation/validateAttributes.ts
|
|
2634
|
-
var
|
|
2573
|
+
var validateAttributes2 = (element, schema) => {
|
|
2635
2574
|
const errors = [];
|
|
2636
2575
|
const definitions = [
|
|
2637
2576
|
...schema.requiredAttributes,
|
|
@@ -2682,7 +2621,7 @@ var validateElementAgainstSchema = (element, schema) => {
|
|
|
2682
2621
|
description: `The element is not allowed in this context.`
|
|
2683
2622
|
});
|
|
2684
2623
|
}
|
|
2685
|
-
errors.push(...
|
|
2624
|
+
errors.push(...validateAttributes2(element, schema));
|
|
2686
2625
|
errors.push(...validateChildren(element, schema));
|
|
2687
2626
|
return errors;
|
|
2688
2627
|
};
|
|
@@ -2697,7 +2636,7 @@ var validateRequiredChildren = (element, schema, childElements) => {
|
|
|
2697
2636
|
return childSchema?.code === allowedChild.code;
|
|
2698
2637
|
});
|
|
2699
2638
|
if (!hasChild) {
|
|
2700
|
-
const requiredChildrenTag = findSchemaByCode(allowedChild.code).
|
|
2639
|
+
const requiredChildrenTag = findSchemaByCode(allowedChild.code)?.tag || allowedChild.code;
|
|
2701
2640
|
addValidationIssue(errors, {
|
|
2702
2641
|
store: getStore(element),
|
|
2703
2642
|
title: `Missing required child element ${requiredChildrenTag}`,
|
|
@@ -2861,7 +2800,6 @@ export {
|
|
|
2861
2800
|
DEPENDENT_FORBIDDEN_ELEMENTS,
|
|
2862
2801
|
ELEMENT_SCHEMAS,
|
|
2863
2802
|
ELE_ID_ATTRIBUTE,
|
|
2864
|
-
ElementLabel,
|
|
2865
2803
|
FIGURE_PLACEMENT_ATTRIBUTE,
|
|
2866
2804
|
ID_ATTRS,
|
|
2867
2805
|
IGNORED_ATTRIBUTES,
|
|
@@ -2892,6 +2830,7 @@ export {
|
|
|
2892
2830
|
findAttributeDefinitionByName,
|
|
2893
2831
|
findSchemaByCode,
|
|
2894
2832
|
findSchemaByElement,
|
|
2833
|
+
findSchemaByTagName,
|
|
2895
2834
|
getAttributeName,
|
|
2896
2835
|
isAttributeRestricted,
|
|
2897
2836
|
isIgnoredAttribute,
|