pro-editor-schema 0.2.22 → 0.2.24

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 CHANGED
@@ -2626,6 +2626,65 @@ var getElementsSelector = ({
2626
2626
  return Array.from(elements);
2627
2627
  };
2628
2628
 
2629
+ // src/validation/validateLinkend.ts
2630
+ var findElementLinkedTo = (linkend, elementsToLink) => {
2631
+ return elementsToLink.includes(linkend);
2632
+ };
2633
+ var LINK_TO_CROSS_CHECK = [
2634
+ TABLE_LINK_ROLE,
2635
+ FIGURE_LINK_ROLE,
2636
+ EQUATION_LINK_ROLE,
2637
+ FOOTNOTE_LINK_ROLE,
2638
+ REFERENCE_LINK_ROLE
2639
+ ];
2640
+ var LINK_BLOCKER_ROLES = [
2641
+ TABLE_LINK_ROLE,
2642
+ FIGURE_LINK_ROLE,
2643
+ EQUATION_LINK_ROLE,
2644
+ FOOTNOTE_LINK_ROLE
2645
+ ];
2646
+ var validateLinkend = (linkElement, elementsToLink) => {
2647
+ const linkend = linkElement.getAttribute("linkend");
2648
+ if (!linkend) {
2649
+ return [];
2650
+ }
2651
+ const isLinkFootnoteCue = linkElement.tagName.toUpperCase() === FOOTNOTE_LINK_SCHEMA.tag;
2652
+ if (isLinkFootnoteCue) {
2653
+ if (findElementLinkedTo(linkend, elementsToLink)) {
2654
+ return [];
2655
+ }
2656
+ return [
2657
+ createValidationIssue({
2658
+ store: getStore(linkElement),
2659
+ title: "Unlinked footnote cue",
2660
+ kind: "unlinked",
2661
+ description: "This footnote cue is not referenced to any footnote in this chapter. Please link it again manually.",
2662
+ level: "blocker"
2663
+ })
2664
+ ];
2665
+ }
2666
+ const role = linkElement.getAttribute("role");
2667
+ if (!role) {
2668
+ return [];
2669
+ }
2670
+ if (!LINK_TO_CROSS_CHECK.includes(role)) {
2671
+ return [];
2672
+ }
2673
+ if (findElementLinkedTo(linkend, elementsToLink)) {
2674
+ return [];
2675
+ }
2676
+ const isBlocker = LINK_BLOCKER_ROLES.includes(role.toLowerCase());
2677
+ return [
2678
+ createValidationIssue({
2679
+ store: getStore(linkElement),
2680
+ title: "Unlinked element",
2681
+ kind: "unlinked",
2682
+ description: "This link is not referenced to any element in the current chapter or any other chapter. Please link it again manually.",
2683
+ level: isBlocker ? "blocker" : "warning"
2684
+ })
2685
+ ];
2686
+ };
2687
+
2629
2688
  // src/validation/validateFootnotes.ts
2630
2689
  var extractFootnoteNumber = (footnote) => {
2631
2690
  if (!footnote) return "no label";
@@ -2636,16 +2695,13 @@ var extractFootnoteNumber = (footnote) => {
2636
2695
  }
2637
2696
  return footnoteNumber;
2638
2697
  };
2639
- var validateFootnoteCue = (footnoteElement, root) => {
2698
+ var validateFootnoteCue = (footnoteElement, linkElements) => {
2640
2699
  const errors = [];
2641
2700
  const linkend = footnoteElement.getAttribute("xmlid") || "";
2642
2701
  const footnoteNumber = footnoteElement.querySelector(
2643
2702
  FOOTNOTE_NUMBER_SCHEMA.tag
2644
2703
  );
2645
- const footnoteLink = root.querySelector(
2646
- `${FOOTNOTE_LINK_SCHEMA.tag}[linkend='${CSS.escape(linkend)}']`
2647
- );
2648
- if (footnoteLink) {
2704
+ if (findElementLinkedTo(linkend, linkElements)) {
2649
2705
  return errors;
2650
2706
  }
2651
2707
  if (!footnoteNumber) {
@@ -2667,9 +2723,9 @@ var validateFootnoteCue = (footnoteElement, root) => {
2667
2723
  });
2668
2724
  return errors;
2669
2725
  };
2670
- var validateConsecutiveFootnotes = (root) => {
2726
+ var validateConsecutiveFootnotes = (element) => {
2671
2727
  const footnotes = getElementsSelector({
2672
- element: root,
2728
+ element,
2673
2729
  selector: FOOTNOTE_SCHEMA.tag,
2674
2730
  filterDeletedNodes: true
2675
2731
  });
@@ -2700,9 +2756,9 @@ var validateConsecutiveFootnotes = (root) => {
2700
2756
  }
2701
2757
  return [];
2702
2758
  };
2703
- var validateConsecutiveFootnoteCues = (root) => {
2759
+ var validateConsecutiveFootnoteCues = (element) => {
2704
2760
  const footnoteLinks = getElementsSelector({
2705
- element: root,
2761
+ element,
2706
2762
  selector: FOOTNOTE_LINK_SCHEMA.tag,
2707
2763
  filterDeletedNodes: true
2708
2764
  });
@@ -2728,56 +2784,6 @@ var validateConsecutiveFootnoteCues = (root) => {
2728
2784
  return [];
2729
2785
  };
2730
2786
 
2731
- // src/validation/validateLinkend.ts
2732
- var findElementLinkedTo = (linkend, elementsToLink) => {
2733
- return elementsToLink.includes(linkend);
2734
- };
2735
- var LINK_BLOCKER_ROLES = [
2736
- TABLE_LINK_ROLE,
2737
- FIGURE_LINK_ROLE,
2738
- EQUATION_LINK_ROLE,
2739
- FOOTNOTE_LINK_ROLE,
2740
- CHAPTER_LINK_ROLE
2741
- ];
2742
- var validateLinkend = (linkElement, elementsToLink) => {
2743
- const linkend = linkElement.getAttribute("linkend");
2744
- if (!linkend) {
2745
- return [];
2746
- }
2747
- const isLinkFootnoteCue = linkElement.tagName.toUpperCase() === FOOTNOTE_LINK_SCHEMA.tag;
2748
- if (isLinkFootnoteCue) {
2749
- if (findElementLinkedTo(linkend, elementsToLink)) {
2750
- return [];
2751
- }
2752
- return [
2753
- createValidationIssue({
2754
- store: getStore(linkElement),
2755
- title: "Unlinked footnote cue",
2756
- kind: "unlinked",
2757
- description: "This footnote cue is not referenced to any footnote in this chapter. Please link it again manually.",
2758
- level: "blocker"
2759
- })
2760
- ];
2761
- }
2762
- const role = linkElement.getAttribute("role");
2763
- if (!role) {
2764
- return [];
2765
- }
2766
- if (findElementLinkedTo(linkend, elementsToLink)) {
2767
- return [];
2768
- }
2769
- const isBlocker = LINK_BLOCKER_ROLES.includes(role.toLowerCase());
2770
- return [
2771
- createValidationIssue({
2772
- store: getStore(linkElement),
2773
- title: "Unlinked element",
2774
- kind: "unlinked",
2775
- description: "This link is not referenced to any element in the current chapter or any other chapter. Please link it again manually.",
2776
- level: isBlocker ? "blocker" : "warning"
2777
- })
2778
- ];
2779
- };
2780
-
2781
2787
  // src/validation/validateAttributes.ts
2782
2788
  var validateAttributes = (element, schema) => {
2783
2789
  const errors = [];
@@ -2909,21 +2915,6 @@ var validateChildren = (element, schema) => {
2909
2915
  return errors;
2910
2916
  };
2911
2917
 
2912
- // src/validation/utils/getLinkableRoles.ts
2913
- var getLinkableRoles = () => {
2914
- const linkRoleDefinition = findAttributeDefinitionByName(
2915
- LINK_SCHEMA.requiredAttributes,
2916
- "role"
2917
- );
2918
- if (!linkRoleDefinition) {
2919
- return [];
2920
- }
2921
- if (isAttributeRestricted(linkRoleDefinition)) {
2922
- return linkRoleDefinition.values;
2923
- }
2924
- return [];
2925
- };
2926
-
2927
2918
  // src/validation/validateReferences.ts
2928
2919
  var findElementLinkedTo2 = (xmlid, linkElements) => {
2929
2920
  return linkElements.includes(xmlid);
@@ -2985,16 +2976,14 @@ var validateElement = (element, root, elementsToLink, linkElements, schemasToVal
2985
2976
  if (schemasToValidateAgainst.includes(schema.code)) {
2986
2977
  errors.push(...validateElementAgainstSchema(element, schema));
2987
2978
  }
2988
- const role = element.getAttribute("role");
2989
- const linkableRoles = getLinkableRoles();
2990
- if (schema.tag === LINK_SCHEMA.tag && role && linkableRoles.includes(role) || schema.tag === FOOTNOTE_LINK_SCHEMA.tag) {
2979
+ if (schema.tag === LINK_SCHEMA.tag || schema.tag === FOOTNOTE_LINK_SCHEMA.tag) {
2991
2980
  errors.push(...validateLinkend(element, elementsToLink));
2992
2981
  }
2993
2982
  if (schema.tag === BIBLIOMIXED_SCHEMA.tag) {
2994
2983
  errors.push(...validateReferenceCited(element, linkElements));
2995
2984
  }
2996
2985
  if (schema.tag === FOOTNOTE_SCHEMA.tag) {
2997
- errors.push(...validateFootnoteCue(element, root));
2986
+ errors.push(...validateFootnoteCue(element, linkElements));
2998
2987
  }
2999
2988
  if (schema.tag === URI_SCHEMA.tag) {
3000
2989
  errors.push(...validateUri(element));
package/dist/index.mjs CHANGED
@@ -2558,6 +2558,65 @@ var getElementsSelector = ({
2558
2558
  return Array.from(elements);
2559
2559
  };
2560
2560
 
2561
+ // src/validation/validateLinkend.ts
2562
+ var findElementLinkedTo = (linkend, elementsToLink) => {
2563
+ return elementsToLink.includes(linkend);
2564
+ };
2565
+ var LINK_TO_CROSS_CHECK = [
2566
+ TABLE_LINK_ROLE,
2567
+ FIGURE_LINK_ROLE,
2568
+ EQUATION_LINK_ROLE,
2569
+ FOOTNOTE_LINK_ROLE,
2570
+ REFERENCE_LINK_ROLE
2571
+ ];
2572
+ var LINK_BLOCKER_ROLES = [
2573
+ TABLE_LINK_ROLE,
2574
+ FIGURE_LINK_ROLE,
2575
+ EQUATION_LINK_ROLE,
2576
+ FOOTNOTE_LINK_ROLE
2577
+ ];
2578
+ var validateLinkend = (linkElement, elementsToLink) => {
2579
+ const linkend = linkElement.getAttribute("linkend");
2580
+ if (!linkend) {
2581
+ return [];
2582
+ }
2583
+ const isLinkFootnoteCue = linkElement.tagName.toUpperCase() === FOOTNOTE_LINK_SCHEMA.tag;
2584
+ if (isLinkFootnoteCue) {
2585
+ if (findElementLinkedTo(linkend, elementsToLink)) {
2586
+ return [];
2587
+ }
2588
+ return [
2589
+ createValidationIssue({
2590
+ store: getStore(linkElement),
2591
+ title: "Unlinked footnote cue",
2592
+ kind: "unlinked",
2593
+ description: "This footnote cue is not referenced to any footnote in this chapter. Please link it again manually.",
2594
+ level: "blocker"
2595
+ })
2596
+ ];
2597
+ }
2598
+ const role = linkElement.getAttribute("role");
2599
+ if (!role) {
2600
+ return [];
2601
+ }
2602
+ if (!LINK_TO_CROSS_CHECK.includes(role)) {
2603
+ return [];
2604
+ }
2605
+ if (findElementLinkedTo(linkend, elementsToLink)) {
2606
+ return [];
2607
+ }
2608
+ const isBlocker = LINK_BLOCKER_ROLES.includes(role.toLowerCase());
2609
+ return [
2610
+ createValidationIssue({
2611
+ store: getStore(linkElement),
2612
+ title: "Unlinked element",
2613
+ kind: "unlinked",
2614
+ description: "This link is not referenced to any element in the current chapter or any other chapter. Please link it again manually.",
2615
+ level: isBlocker ? "blocker" : "warning"
2616
+ })
2617
+ ];
2618
+ };
2619
+
2561
2620
  // src/validation/validateFootnotes.ts
2562
2621
  var extractFootnoteNumber = (footnote) => {
2563
2622
  if (!footnote) return "no label";
@@ -2568,16 +2627,13 @@ var extractFootnoteNumber = (footnote) => {
2568
2627
  }
2569
2628
  return footnoteNumber;
2570
2629
  };
2571
- var validateFootnoteCue = (footnoteElement, root) => {
2630
+ var validateFootnoteCue = (footnoteElement, linkElements) => {
2572
2631
  const errors = [];
2573
2632
  const linkend = footnoteElement.getAttribute("xmlid") || "";
2574
2633
  const footnoteNumber = footnoteElement.querySelector(
2575
2634
  FOOTNOTE_NUMBER_SCHEMA.tag
2576
2635
  );
2577
- const footnoteLink = root.querySelector(
2578
- `${FOOTNOTE_LINK_SCHEMA.tag}[linkend='${CSS.escape(linkend)}']`
2579
- );
2580
- if (footnoteLink) {
2636
+ if (findElementLinkedTo(linkend, linkElements)) {
2581
2637
  return errors;
2582
2638
  }
2583
2639
  if (!footnoteNumber) {
@@ -2599,9 +2655,9 @@ var validateFootnoteCue = (footnoteElement, root) => {
2599
2655
  });
2600
2656
  return errors;
2601
2657
  };
2602
- var validateConsecutiveFootnotes = (root) => {
2658
+ var validateConsecutiveFootnotes = (element) => {
2603
2659
  const footnotes = getElementsSelector({
2604
- element: root,
2660
+ element,
2605
2661
  selector: FOOTNOTE_SCHEMA.tag,
2606
2662
  filterDeletedNodes: true
2607
2663
  });
@@ -2632,9 +2688,9 @@ var validateConsecutiveFootnotes = (root) => {
2632
2688
  }
2633
2689
  return [];
2634
2690
  };
2635
- var validateConsecutiveFootnoteCues = (root) => {
2691
+ var validateConsecutiveFootnoteCues = (element) => {
2636
2692
  const footnoteLinks = getElementsSelector({
2637
- element: root,
2693
+ element,
2638
2694
  selector: FOOTNOTE_LINK_SCHEMA.tag,
2639
2695
  filterDeletedNodes: true
2640
2696
  });
@@ -2660,56 +2716,6 @@ var validateConsecutiveFootnoteCues = (root) => {
2660
2716
  return [];
2661
2717
  };
2662
2718
 
2663
- // src/validation/validateLinkend.ts
2664
- var findElementLinkedTo = (linkend, elementsToLink) => {
2665
- return elementsToLink.includes(linkend);
2666
- };
2667
- var LINK_BLOCKER_ROLES = [
2668
- TABLE_LINK_ROLE,
2669
- FIGURE_LINK_ROLE,
2670
- EQUATION_LINK_ROLE,
2671
- FOOTNOTE_LINK_ROLE,
2672
- CHAPTER_LINK_ROLE
2673
- ];
2674
- var validateLinkend = (linkElement, elementsToLink) => {
2675
- const linkend = linkElement.getAttribute("linkend");
2676
- if (!linkend) {
2677
- return [];
2678
- }
2679
- const isLinkFootnoteCue = linkElement.tagName.toUpperCase() === FOOTNOTE_LINK_SCHEMA.tag;
2680
- if (isLinkFootnoteCue) {
2681
- if (findElementLinkedTo(linkend, elementsToLink)) {
2682
- return [];
2683
- }
2684
- return [
2685
- createValidationIssue({
2686
- store: getStore(linkElement),
2687
- title: "Unlinked footnote cue",
2688
- kind: "unlinked",
2689
- description: "This footnote cue is not referenced to any footnote in this chapter. Please link it again manually.",
2690
- level: "blocker"
2691
- })
2692
- ];
2693
- }
2694
- const role = linkElement.getAttribute("role");
2695
- if (!role) {
2696
- return [];
2697
- }
2698
- if (findElementLinkedTo(linkend, elementsToLink)) {
2699
- return [];
2700
- }
2701
- const isBlocker = LINK_BLOCKER_ROLES.includes(role.toLowerCase());
2702
- return [
2703
- createValidationIssue({
2704
- store: getStore(linkElement),
2705
- title: "Unlinked element",
2706
- kind: "unlinked",
2707
- description: "This link is not referenced to any element in the current chapter or any other chapter. Please link it again manually.",
2708
- level: isBlocker ? "blocker" : "warning"
2709
- })
2710
- ];
2711
- };
2712
-
2713
2719
  // src/validation/validateAttributes.ts
2714
2720
  var validateAttributes = (element, schema) => {
2715
2721
  const errors = [];
@@ -2841,21 +2847,6 @@ var validateChildren = (element, schema) => {
2841
2847
  return errors;
2842
2848
  };
2843
2849
 
2844
- // src/validation/utils/getLinkableRoles.ts
2845
- var getLinkableRoles = () => {
2846
- const linkRoleDefinition = findAttributeDefinitionByName(
2847
- LINK_SCHEMA.requiredAttributes,
2848
- "role"
2849
- );
2850
- if (!linkRoleDefinition) {
2851
- return [];
2852
- }
2853
- if (isAttributeRestricted(linkRoleDefinition)) {
2854
- return linkRoleDefinition.values;
2855
- }
2856
- return [];
2857
- };
2858
-
2859
2850
  // src/validation/validateReferences.ts
2860
2851
  var findElementLinkedTo2 = (xmlid, linkElements) => {
2861
2852
  return linkElements.includes(xmlid);
@@ -2917,16 +2908,14 @@ var validateElement = (element, root, elementsToLink, linkElements, schemasToVal
2917
2908
  if (schemasToValidateAgainst.includes(schema.code)) {
2918
2909
  errors.push(...validateElementAgainstSchema(element, schema));
2919
2910
  }
2920
- const role = element.getAttribute("role");
2921
- const linkableRoles = getLinkableRoles();
2922
- if (schema.tag === LINK_SCHEMA.tag && role && linkableRoles.includes(role) || schema.tag === FOOTNOTE_LINK_SCHEMA.tag) {
2911
+ if (schema.tag === LINK_SCHEMA.tag || schema.tag === FOOTNOTE_LINK_SCHEMA.tag) {
2923
2912
  errors.push(...validateLinkend(element, elementsToLink));
2924
2913
  }
2925
2914
  if (schema.tag === BIBLIOMIXED_SCHEMA.tag) {
2926
2915
  errors.push(...validateReferenceCited(element, linkElements));
2927
2916
  }
2928
2917
  if (schema.tag === FOOTNOTE_SCHEMA.tag) {
2929
- errors.push(...validateFootnoteCue(element, root));
2918
+ errors.push(...validateFootnoteCue(element, linkElements));
2930
2919
  }
2931
2920
  if (schema.tag === URI_SCHEMA.tag) {
2932
2921
  errors.push(...validateUri(element));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pro-editor-schema",
3
- "version": "0.2.22",
3
+ "version": "0.2.24",
4
4
  "description": "Pro Editor XML schemas",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",