pro-editor-schema 0.2.21 → 0.2.22
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.js +68 -7
- package/dist/index.mjs +68 -7
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -244,7 +244,13 @@ var INSERTION_SCHEMA = createSchema({
|
|
|
244
244
|
tag: SPAN_TAG,
|
|
245
245
|
matchesElement: (element) => element.classList.contains("ins"),
|
|
246
246
|
requiredAttributes: [...TRACK_CHANGES_ATTRS, ...ID_ATTRS],
|
|
247
|
-
optionalAttributes: [
|
|
247
|
+
optionalAttributes: [
|
|
248
|
+
{
|
|
249
|
+
name: "role",
|
|
250
|
+
values: ["web-link", "figure-note-link", "figsource"],
|
|
251
|
+
defaultValue: ""
|
|
252
|
+
}
|
|
253
|
+
],
|
|
248
254
|
allowedChildrenCodes: [
|
|
249
255
|
...ATOM_CODES_ALLOWED_CHILDREN,
|
|
250
256
|
...INLINE_ELEMENT_CODES_ALLOWED_CHILDREN
|
|
@@ -2334,8 +2340,8 @@ var URI_SCHEMA = createSchema({
|
|
|
2334
2340
|
code: "uri",
|
|
2335
2341
|
kind: "inline",
|
|
2336
2342
|
tag: URI_TAG,
|
|
2337
|
-
requiredAttributes: [
|
|
2338
|
-
optionalAttributes: ["
|
|
2343
|
+
requiredAttributes: [],
|
|
2344
|
+
optionalAttributes: ["xlinkhref"],
|
|
2339
2345
|
allowedChildrenCodes: [...ATOM_CODES_ALLOWED_CHILDREN]
|
|
2340
2346
|
});
|
|
2341
2347
|
|
|
@@ -2601,6 +2607,25 @@ var retrieveTextIgnoringNodesWithSelector = (element, selector = ".del") => {
|
|
|
2601
2607
|
return clonedElement.textContent || "";
|
|
2602
2608
|
};
|
|
2603
2609
|
|
|
2610
|
+
// src/validation/utils/getElementsSelector.ts
|
|
2611
|
+
var getElementsSelector = ({
|
|
2612
|
+
element,
|
|
2613
|
+
selector,
|
|
2614
|
+
filterDeletedNodes
|
|
2615
|
+
}) => {
|
|
2616
|
+
const elements = element.querySelectorAll(selector);
|
|
2617
|
+
if (filterDeletedNodes) {
|
|
2618
|
+
return Array.from(elements).filter((element2) => {
|
|
2619
|
+
const hasDeletedParent = element2.closest(".del") !== null;
|
|
2620
|
+
if (hasDeletedParent) {
|
|
2621
|
+
return false;
|
|
2622
|
+
}
|
|
2623
|
+
return true;
|
|
2624
|
+
});
|
|
2625
|
+
}
|
|
2626
|
+
return Array.from(elements);
|
|
2627
|
+
};
|
|
2628
|
+
|
|
2604
2629
|
// src/validation/validateFootnotes.ts
|
|
2605
2630
|
var extractFootnoteNumber = (footnote) => {
|
|
2606
2631
|
if (!footnote) return "no label";
|
|
@@ -2643,7 +2668,11 @@ var validateFootnoteCue = (footnoteElement, root) => {
|
|
|
2643
2668
|
return errors;
|
|
2644
2669
|
};
|
|
2645
2670
|
var validateConsecutiveFootnotes = (root) => {
|
|
2646
|
-
const footnotes =
|
|
2671
|
+
const footnotes = getElementsSelector({
|
|
2672
|
+
element: root,
|
|
2673
|
+
selector: FOOTNOTE_SCHEMA.tag,
|
|
2674
|
+
filterDeletedNodes: true
|
|
2675
|
+
});
|
|
2647
2676
|
if (footnotes.length === 0) {
|
|
2648
2677
|
return [];
|
|
2649
2678
|
}
|
|
@@ -2672,9 +2701,11 @@ var validateConsecutiveFootnotes = (root) => {
|
|
|
2672
2701
|
return [];
|
|
2673
2702
|
};
|
|
2674
2703
|
var validateConsecutiveFootnoteCues = (root) => {
|
|
2675
|
-
const footnoteLinks =
|
|
2676
|
-
root
|
|
2677
|
-
|
|
2704
|
+
const footnoteLinks = getElementsSelector({
|
|
2705
|
+
element: root,
|
|
2706
|
+
selector: FOOTNOTE_LINK_SCHEMA.tag,
|
|
2707
|
+
filterDeletedNodes: true
|
|
2708
|
+
});
|
|
2678
2709
|
if (footnoteLinks.length === 0) {
|
|
2679
2710
|
return [];
|
|
2680
2711
|
}
|
|
@@ -2916,6 +2947,33 @@ var validateReferenceCited = (referenceElement, linkElements) => {
|
|
|
2916
2947
|
];
|
|
2917
2948
|
};
|
|
2918
2949
|
|
|
2950
|
+
// src/validation/validateUri.ts
|
|
2951
|
+
var WEB_URI_REGEX = /^(?:(?:https?):\/\/)?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}(?::\d{1,5})?(?:\/[^\s]*)?$/i;
|
|
2952
|
+
var isValidUri = (uri) => {
|
|
2953
|
+
if (!uri || /\s/.test(uri)) {
|
|
2954
|
+
return false;
|
|
2955
|
+
}
|
|
2956
|
+
if (/^[a-z][a-z0-9+.-]*:/i.test(uri) && !/^https?:\/\//i.test(uri)) {
|
|
2957
|
+
return false;
|
|
2958
|
+
}
|
|
2959
|
+
return WEB_URI_REGEX.test(uri);
|
|
2960
|
+
};
|
|
2961
|
+
var validateUri = (uriElement) => {
|
|
2962
|
+
const url = uriElement.textContent.trim();
|
|
2963
|
+
if (isValidUri(url)) {
|
|
2964
|
+
return [];
|
|
2965
|
+
}
|
|
2966
|
+
return [
|
|
2967
|
+
createValidationIssue({
|
|
2968
|
+
store: getStore(uriElement),
|
|
2969
|
+
title: "URL cannot be reached",
|
|
2970
|
+
kind: "unlinked",
|
|
2971
|
+
description: "URL cannot be reached. Please check and adjust.",
|
|
2972
|
+
level: "warning"
|
|
2973
|
+
})
|
|
2974
|
+
];
|
|
2975
|
+
};
|
|
2976
|
+
|
|
2919
2977
|
// src/validation/validateXml.ts
|
|
2920
2978
|
var validateElement = (element, root, elementsToLink, linkElements, schemasToValidateAgainst) => {
|
|
2921
2979
|
if (isIgnoredElement(element)) {
|
|
@@ -2938,6 +2996,9 @@ var validateElement = (element, root, elementsToLink, linkElements, schemasToVal
|
|
|
2938
2996
|
if (schema.tag === FOOTNOTE_SCHEMA.tag) {
|
|
2939
2997
|
errors.push(...validateFootnoteCue(element, root));
|
|
2940
2998
|
}
|
|
2999
|
+
if (schema.tag === URI_SCHEMA.tag) {
|
|
3000
|
+
errors.push(...validateUri(element));
|
|
3001
|
+
}
|
|
2941
3002
|
if (isIgnoredValidation(schema.code)) {
|
|
2942
3003
|
return errors;
|
|
2943
3004
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -176,7 +176,13 @@ var INSERTION_SCHEMA = createSchema({
|
|
|
176
176
|
tag: SPAN_TAG,
|
|
177
177
|
matchesElement: (element) => element.classList.contains("ins"),
|
|
178
178
|
requiredAttributes: [...TRACK_CHANGES_ATTRS, ...ID_ATTRS],
|
|
179
|
-
optionalAttributes: [
|
|
179
|
+
optionalAttributes: [
|
|
180
|
+
{
|
|
181
|
+
name: "role",
|
|
182
|
+
values: ["web-link", "figure-note-link", "figsource"],
|
|
183
|
+
defaultValue: ""
|
|
184
|
+
}
|
|
185
|
+
],
|
|
180
186
|
allowedChildrenCodes: [
|
|
181
187
|
...ATOM_CODES_ALLOWED_CHILDREN,
|
|
182
188
|
...INLINE_ELEMENT_CODES_ALLOWED_CHILDREN
|
|
@@ -2266,8 +2272,8 @@ var URI_SCHEMA = createSchema({
|
|
|
2266
2272
|
code: "uri",
|
|
2267
2273
|
kind: "inline",
|
|
2268
2274
|
tag: URI_TAG,
|
|
2269
|
-
requiredAttributes: [
|
|
2270
|
-
optionalAttributes: ["
|
|
2275
|
+
requiredAttributes: [],
|
|
2276
|
+
optionalAttributes: ["xlinkhref"],
|
|
2271
2277
|
allowedChildrenCodes: [...ATOM_CODES_ALLOWED_CHILDREN]
|
|
2272
2278
|
});
|
|
2273
2279
|
|
|
@@ -2533,6 +2539,25 @@ var retrieveTextIgnoringNodesWithSelector = (element, selector = ".del") => {
|
|
|
2533
2539
|
return clonedElement.textContent || "";
|
|
2534
2540
|
};
|
|
2535
2541
|
|
|
2542
|
+
// src/validation/utils/getElementsSelector.ts
|
|
2543
|
+
var getElementsSelector = ({
|
|
2544
|
+
element,
|
|
2545
|
+
selector,
|
|
2546
|
+
filterDeletedNodes
|
|
2547
|
+
}) => {
|
|
2548
|
+
const elements = element.querySelectorAll(selector);
|
|
2549
|
+
if (filterDeletedNodes) {
|
|
2550
|
+
return Array.from(elements).filter((element2) => {
|
|
2551
|
+
const hasDeletedParent = element2.closest(".del") !== null;
|
|
2552
|
+
if (hasDeletedParent) {
|
|
2553
|
+
return false;
|
|
2554
|
+
}
|
|
2555
|
+
return true;
|
|
2556
|
+
});
|
|
2557
|
+
}
|
|
2558
|
+
return Array.from(elements);
|
|
2559
|
+
};
|
|
2560
|
+
|
|
2536
2561
|
// src/validation/validateFootnotes.ts
|
|
2537
2562
|
var extractFootnoteNumber = (footnote) => {
|
|
2538
2563
|
if (!footnote) return "no label";
|
|
@@ -2575,7 +2600,11 @@ var validateFootnoteCue = (footnoteElement, root) => {
|
|
|
2575
2600
|
return errors;
|
|
2576
2601
|
};
|
|
2577
2602
|
var validateConsecutiveFootnotes = (root) => {
|
|
2578
|
-
const footnotes =
|
|
2603
|
+
const footnotes = getElementsSelector({
|
|
2604
|
+
element: root,
|
|
2605
|
+
selector: FOOTNOTE_SCHEMA.tag,
|
|
2606
|
+
filterDeletedNodes: true
|
|
2607
|
+
});
|
|
2579
2608
|
if (footnotes.length === 0) {
|
|
2580
2609
|
return [];
|
|
2581
2610
|
}
|
|
@@ -2604,9 +2633,11 @@ var validateConsecutiveFootnotes = (root) => {
|
|
|
2604
2633
|
return [];
|
|
2605
2634
|
};
|
|
2606
2635
|
var validateConsecutiveFootnoteCues = (root) => {
|
|
2607
|
-
const footnoteLinks =
|
|
2608
|
-
root
|
|
2609
|
-
|
|
2636
|
+
const footnoteLinks = getElementsSelector({
|
|
2637
|
+
element: root,
|
|
2638
|
+
selector: FOOTNOTE_LINK_SCHEMA.tag,
|
|
2639
|
+
filterDeletedNodes: true
|
|
2640
|
+
});
|
|
2610
2641
|
if (footnoteLinks.length === 0) {
|
|
2611
2642
|
return [];
|
|
2612
2643
|
}
|
|
@@ -2848,6 +2879,33 @@ var validateReferenceCited = (referenceElement, linkElements) => {
|
|
|
2848
2879
|
];
|
|
2849
2880
|
};
|
|
2850
2881
|
|
|
2882
|
+
// src/validation/validateUri.ts
|
|
2883
|
+
var WEB_URI_REGEX = /^(?:(?:https?):\/\/)?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}(?::\d{1,5})?(?:\/[^\s]*)?$/i;
|
|
2884
|
+
var isValidUri = (uri) => {
|
|
2885
|
+
if (!uri || /\s/.test(uri)) {
|
|
2886
|
+
return false;
|
|
2887
|
+
}
|
|
2888
|
+
if (/^[a-z][a-z0-9+.-]*:/i.test(uri) && !/^https?:\/\//i.test(uri)) {
|
|
2889
|
+
return false;
|
|
2890
|
+
}
|
|
2891
|
+
return WEB_URI_REGEX.test(uri);
|
|
2892
|
+
};
|
|
2893
|
+
var validateUri = (uriElement) => {
|
|
2894
|
+
const url = uriElement.textContent.trim();
|
|
2895
|
+
if (isValidUri(url)) {
|
|
2896
|
+
return [];
|
|
2897
|
+
}
|
|
2898
|
+
return [
|
|
2899
|
+
createValidationIssue({
|
|
2900
|
+
store: getStore(uriElement),
|
|
2901
|
+
title: "URL cannot be reached",
|
|
2902
|
+
kind: "unlinked",
|
|
2903
|
+
description: "URL cannot be reached. Please check and adjust.",
|
|
2904
|
+
level: "warning"
|
|
2905
|
+
})
|
|
2906
|
+
];
|
|
2907
|
+
};
|
|
2908
|
+
|
|
2851
2909
|
// src/validation/validateXml.ts
|
|
2852
2910
|
var validateElement = (element, root, elementsToLink, linkElements, schemasToValidateAgainst) => {
|
|
2853
2911
|
if (isIgnoredElement(element)) {
|
|
@@ -2870,6 +2928,9 @@ var validateElement = (element, root, elementsToLink, linkElements, schemasToVal
|
|
|
2870
2928
|
if (schema.tag === FOOTNOTE_SCHEMA.tag) {
|
|
2871
2929
|
errors.push(...validateFootnoteCue(element, root));
|
|
2872
2930
|
}
|
|
2931
|
+
if (schema.tag === URI_SCHEMA.tag) {
|
|
2932
|
+
errors.push(...validateUri(element));
|
|
2933
|
+
}
|
|
2873
2934
|
if (isIgnoredValidation(schema.code)) {
|
|
2874
2935
|
return errors;
|
|
2875
2936
|
}
|