@govtechsg/oobee 0.10.20

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.
Files changed (123) hide show
  1. package/.dockerignore +22 -0
  2. package/.github/pull_request_template.md +11 -0
  3. package/.github/workflows/docker-test.yml +54 -0
  4. package/.github/workflows/image.yml +107 -0
  5. package/.github/workflows/publish.yml +18 -0
  6. package/.idea/modules.xml +8 -0
  7. package/.idea/purple-a11y.iml +9 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/.prettierrc.json +12 -0
  10. package/.vscode/extensions.json +5 -0
  11. package/.vscode/settings.json +10 -0
  12. package/CODE_OF_CONDUCT.md +128 -0
  13. package/DETAILS.md +163 -0
  14. package/Dockerfile +60 -0
  15. package/INSTALLATION.md +146 -0
  16. package/INTEGRATION.md +785 -0
  17. package/LICENSE +22 -0
  18. package/README.md +587 -0
  19. package/SECURITY.md +5 -0
  20. package/__mocks__/mock-report.html +1431 -0
  21. package/__mocks__/mockFunctions.ts +32 -0
  22. package/__mocks__/mockIssues.ts +64 -0
  23. package/__mocks__/mock_all_issues/000000001.json +64 -0
  24. package/__mocks__/mock_all_issues/000000002.json +53 -0
  25. package/__mocks__/mock_all_issues/fake-file.txt +0 -0
  26. package/__tests__/logs.test.ts +25 -0
  27. package/__tests__/mergeAxeResults.test.ts +278 -0
  28. package/__tests__/utils.test.ts +118 -0
  29. package/a11y-scan-results.zip +0 -0
  30. package/eslint.config.js +53 -0
  31. package/exclusions.txt +2 -0
  32. package/gitlab-pipeline-template.yml +54 -0
  33. package/jest.config.js +1 -0
  34. package/package.json +96 -0
  35. package/scripts/copyFiles.js +44 -0
  36. package/scripts/install_oobee_dependencies.cmd +13 -0
  37. package/scripts/install_oobee_dependencies.command +101 -0
  38. package/scripts/install_oobee_dependencies.ps1 +110 -0
  39. package/scripts/oobee_shell.cmd +13 -0
  40. package/scripts/oobee_shell.command +11 -0
  41. package/scripts/oobee_shell.sh +55 -0
  42. package/scripts/oobee_shell_ps.ps1 +54 -0
  43. package/src/cli.ts +401 -0
  44. package/src/combine.ts +240 -0
  45. package/src/constants/__tests__/common.test.ts +44 -0
  46. package/src/constants/cliFunctions.ts +305 -0
  47. package/src/constants/common.ts +1840 -0
  48. package/src/constants/constants.ts +443 -0
  49. package/src/constants/errorMeta.json +319 -0
  50. package/src/constants/itemTypeDescription.ts +11 -0
  51. package/src/constants/oobeeAi.ts +141 -0
  52. package/src/constants/questions.ts +181 -0
  53. package/src/constants/sampleData.ts +187 -0
  54. package/src/crawlers/__tests__/commonCrawlerFunc.test.ts +51 -0
  55. package/src/crawlers/commonCrawlerFunc.ts +656 -0
  56. package/src/crawlers/crawlDomain.ts +877 -0
  57. package/src/crawlers/crawlIntelligentSitemap.ts +156 -0
  58. package/src/crawlers/crawlLocalFile.ts +193 -0
  59. package/src/crawlers/crawlSitemap.ts +356 -0
  60. package/src/crawlers/custom/extractAndGradeText.ts +57 -0
  61. package/src/crawlers/custom/flagUnlabelledClickableElements.ts +964 -0
  62. package/src/crawlers/custom/utils.ts +486 -0
  63. package/src/crawlers/customAxeFunctions.ts +82 -0
  64. package/src/crawlers/pdfScanFunc.ts +468 -0
  65. package/src/crawlers/runCustom.ts +117 -0
  66. package/src/index.ts +173 -0
  67. package/src/logs.ts +66 -0
  68. package/src/mergeAxeResults.ts +964 -0
  69. package/src/npmIndex.ts +284 -0
  70. package/src/screenshotFunc/htmlScreenshotFunc.ts +411 -0
  71. package/src/screenshotFunc/pdfScreenshotFunc.ts +762 -0
  72. package/src/static/ejs/partials/components/categorySelector.ejs +4 -0
  73. package/src/static/ejs/partials/components/categorySelectorDropdown.ejs +57 -0
  74. package/src/static/ejs/partials/components/pagesScannedModal.ejs +70 -0
  75. package/src/static/ejs/partials/components/reportSearch.ejs +47 -0
  76. package/src/static/ejs/partials/components/ruleOffcanvas.ejs +105 -0
  77. package/src/static/ejs/partials/components/scanAbout.ejs +263 -0
  78. package/src/static/ejs/partials/components/screenshotLightbox.ejs +13 -0
  79. package/src/static/ejs/partials/components/summaryScanAbout.ejs +141 -0
  80. package/src/static/ejs/partials/components/summaryScanResults.ejs +16 -0
  81. package/src/static/ejs/partials/components/summaryTable.ejs +20 -0
  82. package/src/static/ejs/partials/components/summaryWcagCompliance.ejs +94 -0
  83. package/src/static/ejs/partials/components/topFive.ejs +6 -0
  84. package/src/static/ejs/partials/components/wcagCompliance.ejs +70 -0
  85. package/src/static/ejs/partials/footer.ejs +21 -0
  86. package/src/static/ejs/partials/header.ejs +230 -0
  87. package/src/static/ejs/partials/main.ejs +40 -0
  88. package/src/static/ejs/partials/scripts/bootstrap.ejs +8 -0
  89. package/src/static/ejs/partials/scripts/categorySelectorDropdownScript.ejs +190 -0
  90. package/src/static/ejs/partials/scripts/categorySummary.ejs +141 -0
  91. package/src/static/ejs/partials/scripts/highlightjs.ejs +335 -0
  92. package/src/static/ejs/partials/scripts/popper.ejs +7 -0
  93. package/src/static/ejs/partials/scripts/reportSearch.ejs +248 -0
  94. package/src/static/ejs/partials/scripts/ruleOffcanvas.ejs +801 -0
  95. package/src/static/ejs/partials/scripts/screenshotLightbox.ejs +71 -0
  96. package/src/static/ejs/partials/scripts/summaryScanResults.ejs +14 -0
  97. package/src/static/ejs/partials/scripts/summaryTable.ejs +78 -0
  98. package/src/static/ejs/partials/scripts/utils.ejs +441 -0
  99. package/src/static/ejs/partials/styles/bootstrap.ejs +12375 -0
  100. package/src/static/ejs/partials/styles/highlightjs.ejs +54 -0
  101. package/src/static/ejs/partials/styles/styles.ejs +1843 -0
  102. package/src/static/ejs/partials/styles/summaryBootstrap.ejs +12458 -0
  103. package/src/static/ejs/partials/summaryHeader.ejs +70 -0
  104. package/src/static/ejs/partials/summaryMain.ejs +75 -0
  105. package/src/static/ejs/report.ejs +420 -0
  106. package/src/static/ejs/summary.ejs +47 -0
  107. package/src/static/mustache/.prettierrc +4 -0
  108. package/src/static/mustache/Attention Deficit.mustache +11 -0
  109. package/src/static/mustache/Blind.mustache +11 -0
  110. package/src/static/mustache/Cognitive.mustache +7 -0
  111. package/src/static/mustache/Colorblindness.mustache +20 -0
  112. package/src/static/mustache/Deaf.mustache +12 -0
  113. package/src/static/mustache/Deafblind.mustache +7 -0
  114. package/src/static/mustache/Dyslexia.mustache +14 -0
  115. package/src/static/mustache/Low Vision.mustache +7 -0
  116. package/src/static/mustache/Mobility.mustache +15 -0
  117. package/src/static/mustache/Sighted Keyboard Users.mustache +42 -0
  118. package/src/static/mustache/report.mustache +1709 -0
  119. package/src/types/print-message.d.ts +28 -0
  120. package/src/types/types.ts +46 -0
  121. package/src/types/xpath-to-css.d.ts +3 -0
  122. package/src/utils.ts +332 -0
  123. package/tsconfig.json +15 -0
@@ -0,0 +1,141 @@
1
+ <h2>About this scan</h2>
2
+ <ul class="p-0" style="list-style: none">
3
+ <li class="svg-container">
4
+ <svg
5
+ aria-label="Start time"
6
+ width="18px"
7
+ viewBox="0 0 18 17"
8
+ fill="none"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ class="svg-aboutscan"
11
+ >
12
+ <path
13
+ fill-rule="evenodd"
14
+ clip-rule="evenodd"
15
+ d="M3.69863 0.927936C3.69863 0.41626 4.11262 0.00146484 4.62329 0.00146484C5.13396 0.00146484 5.54795 0.41626 5.54795 0.927936V1.85441H9.24658V0.927936C9.24658 0.41626 9.66056 0.00146484 10.1712 0.00146484C10.6819 0.00146484 11.0959 0.41626 11.0959 0.927936V1.85441H12.0205C13.5526 1.85441 14.7945 3.09879 14.7945 4.63382V8.51434C14.6723 8.5058 14.549 8.50146 14.4247 8.50146C14.0768 8.50146 13.7367 8.53544 13.4075 8.60029V7.41323H1.38699V12.9721C1.38699 13.7396 2.00795 14.3618 2.77397 14.3618H9.1446C9.18737 14.8464 9.29359 15.3125 9.45476 15.7515H2.77397C1.24195 15.7515 0 14.5071 0 12.9721V4.63382C0 3.09879 1.24195 1.85441 2.77397 1.85441H3.69863V0.927936ZM9.24658 3.24411V3.70735C9.24658 4.21902 9.66056 4.63382 10.1712 4.63382C10.6819 4.63382 11.0959 4.21902 11.0959 3.70735V3.24411H12.0205C12.7866 3.24411 13.4075 3.8663 13.4075 4.63382V6.48676H1.38699V4.63382C1.38699 3.8663 2.00795 3.24411 2.77397 3.24411H3.69863V3.70735C3.69863 4.21902 4.11262 4.63382 4.62329 4.63382C5.13396 4.63382 5.54795 4.21902 5.54795 3.70735V3.24411H9.24658ZM17.0959 14.0015C17.0959 15.7043 15.7343 17.0848 14.0548 17.0848C12.3752 17.0848 11.0137 15.7043 11.0137 14.0015C11.0137 12.2986 12.3752 10.9181 14.0548 10.9181C15.7343 10.9181 17.0959 12.2986 17.0959 14.0015ZM18 14.0015C18 16.2106 16.2337 18.0015 14.0548 18.0015C11.8759 18.0015 10.1096 16.2106 10.1096 14.0015C10.1096 11.7923 11.8759 10.0015 14.0548 10.0015C16.2337 10.0015 18 11.7923 18 14.0015ZM14.0548 11.5015C13.8732 11.5015 13.726 11.6507 13.726 11.8348V13.9181C13.726 14.0241 13.7748 14.1185 13.8507 14.1795C13.8597 14.191 13.8696 14.2021 13.8803 14.2125L14.8486 15.161C14.9791 15.2889 15.1873 15.2853 15.3134 15.1529C15.4396 15.0205 15.436 14.8095 15.3054 14.6816L14.3836 13.7785V11.8348C14.3836 11.6507 14.2364 11.5015 14.0548 11.5015Z"
16
+ fill="#93928d"
17
+ />
18
+ </svg>
19
+ <span><%- unescape(formatAboutStartTime(startTime)) %></span>
20
+ </li>
21
+ <li class="svg-container" style="word-break: break-all;">
22
+ <svg
23
+ aria-label="URL scanned"
24
+ width="18px"
25
+ viewBox="0 0 18 17"
26
+ fill="none"
27
+ xmlns="http://www.w3.org/2000/svg"
28
+ class="svg-aboutscan"
29
+ >
30
+ <path
31
+ fill-rule="evenodd"
32
+ clip-rule="evenodd"
33
+ d="M16.5789 2.80146H1.42105V12.6015H16.5789V2.80146ZM18 0.934798V2.80146V13.0681C18 13.5836 17.5758 14.0015 17.0526 14.0015H0.947369C0.42415 14.0015 0 13.5836 0 13.0681V2.80146V0.934798C0 0.419332 0.42415 0.00146484 0.947369 0.00146484H17.0526C17.5758 0.00146484 18 0.419332 18 0.934798ZM3.07895 2.3348C2.68653 2.3348 2.36842 2.0214 2.36842 1.6348C2.36842 1.2482 2.68653 0.934798 3.07895 0.934798C3.47136 0.934798 3.78947 1.2482 3.78947 1.6348C3.78947 2.0214 3.47136 2.3348 3.07895 2.3348ZM4.26316 1.6348C4.26316 2.0214 4.58127 2.3348 4.97368 2.3348C5.3661 2.3348 5.68421 2.0214 5.68421 1.6348C5.68421 1.2482 5.3661 0.934798 4.97368 0.934798C4.58127 0.934798 4.26316 1.2482 4.26316 1.6348ZM6.86842 2.3348C6.47601 2.3348 6.15789 2.0214 6.15789 1.6348C6.15789 1.2482 6.47601 0.934798 6.86842 0.934798C7.26083 0.934798 7.57895 1.2482 7.57895 1.6348C7.57895 2.0214 7.26083 2.3348 6.86842 2.3348Z"
34
+ fill="#93928d"
35
+ />
36
+ </svg>
37
+ <a aria-label="URL scanned" href="<%= urlScanned %>" target="_blank"><%= urlScanned %></a>
38
+ </li>
39
+ <% if (viewport !== null) { %>
40
+ <li class="svg-container">
41
+ <% if (viewport.startsWith('Desktop')) { %>
42
+ <svg
43
+ aria-label="Viewport"
44
+ width="18px"
45
+ viewBox="0 0 18 17"
46
+ fill="none"
47
+ xmlns="http://www.w3.org/2000/svg"
48
+ class="svg-aboutscan"
49
+ >
50
+ <path
51
+ d="M16.56 0.19H1.44A1.26 1.26 0 0 0 0.18 1.452v10.092a1.26 1.26 0 0 0 1.26 1.262h5.67v1.242H5.85c-0.347 0 -0.63 0.282 -0.63 0.63 0 0.349 0.282 0.63 0.63 0.63h6.3c0.347 0 0.63 -0.282 0.63 -0.63 0 -0.349 -0.282 -0.63 -0.63 -0.63h-1.26v-1.242h5.67c0.697 0 1.26 -0.565 1.26 -1.262V1.452A1.26 1.26 0 0 0 16.56 0.19Zm0 10.98c0 0.218 -0.176 0.394 -0.394 0.394H1.834A0.394 0.394 0 0 1 1.44 11.17V1.866c0 -0.218 0.176 -0.394 0.394 -0.394H16.168c0.218 0 0.394 0.176 0.394 0.394L16.56 11.17Z"
52
+ fill="#93928d"
53
+ />
54
+ </svg>
55
+ <% } else if (viewport.startsWith('CustomWidth')) { %>
56
+ <svg
57
+ aria-label="Viewport"
58
+ width="18px"
59
+ viewBox="0 0 18 17"
60
+ fill="none"
61
+ xmlns="http://www.w3.org/2000/svg"
62
+ class="svg-aboutscan"
63
+ >
64
+ <path
65
+ fill-rule="evenodd"
66
+ clip-rule="evenodd"
67
+ d="M0 3.6a3.6 3.6 0 0 1 3.6 -3.6h10.8a3.6 3.6 0 0 1 3.6 3.6v10.8a3.6 3.6 0 0 1 -3.6 3.6H3.6a3.6 3.6 0 0 1 -3.6 -3.6V3.6Zm3.329 6.263a0.863 0.863 0 0 0 -0.863 0.863v3.945a0.863 0.863 0 0 0 0.986 0.854c0.041 0.006 0.081 0.009 0.123 0.009h3.945a0.863 0.863 0 1 0 0 -1.726H4.192v-3.083a0.863 0.863 0 0 0 -0.863 -0.863Zm12.452 -2.588a0.863 0.863 0 1 1 -1.726 0V4.192h-3.328a0.863 0.863 0 0 1 0 -1.726h3.945c0.042 0 0.083 0.004 0.123 0.009a0.863 0.863 0 0 1 0.986 0.854v3.946Z"
68
+ fill="#93928d"
69
+ />
70
+ </svg>
71
+ <% } else { %>
72
+ <svg
73
+ aria-label="Viewport"
74
+ width="18px"
75
+ viewBox="0 0 18 17"
76
+ fill="none"
77
+ xmlns="http://www.w3.org/2000/svg"
78
+ class="svg-aboutscan"
79
+ >
80
+ <path
81
+ fill-rule="evenodd"
82
+ clip-rule="evenodd"
83
+ d="M1.94595 0.00146484C0.87123 0.00146484 0 0.856193 0 1.91056V19.0924C0 20.1467 0.87123 21.0015 1.94595 21.0015H10.0541C11.1288 21.0015 12 20.1467 12 19.0924V1.91056C12 0.856194 11.1288 0.00146484 10.0541 0.00146484H1.94595ZM10.7027 2.54692H1.2973V17.8196H10.7027V2.54692ZM4.21622 1.1151C4.21622 1.02724 4.28882 0.95601 4.37838 0.95601H7.94595C8.03551 0.95601 8.10811 1.02724 8.10811 1.1151C8.10811 1.20296 8.03551 1.27419 7.94595 1.27419H4.37838C4.28882 1.27419 4.21622 1.20296 4.21622 1.1151ZM6.16216 20.3651C6.69952 20.3651 7.13514 19.9377 7.13514 19.4106C7.13514 18.8834 6.69952 18.456 6.16216 18.456C5.6248 18.456 5.18919 18.8834 5.18919 19.4106C5.18919 19.9377 5.6248 20.3651 6.16216 20.3651Z"
84
+ fill="#93928d"
85
+ />
86
+ </svg>
87
+ <% } %>
88
+ <span>
89
+ <%= viewport.startsWith("CustomWidth") ? `${viewport.split("_")[1]} width` : viewport %> viewport
90
+ </span>
91
+ </li>
92
+ <% } %>
93
+ <li class="svg-container">
94
+ <svg
95
+ aria-label="Pages scanned"
96
+ width="18px"
97
+ viewBox="0 0 18 17"
98
+ fill="none"
99
+ xmlns="http://www.w3.org/2000/svg"
100
+ class="svg-aboutscan"
101
+ >
102
+ <g clip-path="url(#clip0_1630_1547)">
103
+ <path
104
+ d="M14.0299 1.09229H2.97102C2.59546 1.09229 2.29102 1.39673 2.29102 1.77228V16.231C2.29102 16.6065 2.59546 16.911 2.97102 16.911H14.0299C14.4054 16.911 14.7099 16.6065 14.7099 16.231V1.77228C14.7099 1.39673 14.4054 1.09229 14.0299 1.09229Z"
105
+ stroke="#93928d"
106
+ stroke-width="1.7369"
107
+ />
108
+ <path
109
+ d="M5.03369 4.92139H11.9663"
110
+ stroke="#93928d"
111
+ stroke-width="1.189"
112
+ stroke-linecap="round"
113
+ />
114
+ <path
115
+ d="M5.03369 7.64136H11.9663"
116
+ stroke="#93928d"
117
+ stroke-width="1.189"
118
+ stroke-linecap="round"
119
+ />
120
+ <path
121
+ d="M5.03369 10.3613H11.9663"
122
+ stroke="#93928d"
123
+ stroke-width="1.189"
124
+ stroke-linecap="round"
125
+ />
126
+ <path
127
+ d="M5.03369 13.0813H11.9663"
128
+ stroke="#93928d"
129
+ stroke-width="1.189"
130
+ stroke-linecap="round"
131
+ />
132
+ </g>
133
+ <defs>
134
+ <clipPath id="clip0_1630_1547">
135
+ <rect width="17" height="17" fill="white" transform="translate(0 0.501465)" />
136
+ </clipPath>
137
+ </defs>
138
+ </svg>
139
+ <span><%= isCustomFlow ? 'Custom Flow (' + totalPagesScanned + ' pages)' : totalPagesScanned + ' pages' %></span>
140
+ </li>
141
+ </ul>
@@ -0,0 +1,16 @@
1
+ <% const formattedCategoryTitles = {
2
+ mustFix: "Must Fix",
3
+ goodToFix: "Good to Fix",
4
+ needsReview: "Needs Review",
5
+ passed: "Passed"
6
+ } %>
7
+ <li class="d-flex align-items-center mb-3 justify-content-between">
8
+ <span class="d-flex align-items-center d-inline mb-0"
9
+ ><img alt="<%= category %>Icon" id="summary<%= category %>Icon"><%= formattedCategoryTitles[category] %></span
10
+ >
11
+ <span><%= items[category].rules.length %></span>
12
+ </li>
13
+ <% if (category !== 'passed') { %>
14
+ <hr/>
15
+ <% } %>
16
+
@@ -0,0 +1,20 @@
1
+ <div class="pb-4 mx-3">
2
+ <table id="summary-table" style="table-layout:fixed;width:100%;">
3
+ <col style="width:10%">
4
+ <col style="width:30%">
5
+ <col style="width:20%">
6
+ <col style="width:20%">
7
+ <col style="width:20%">
8
+ <thead id="summary-table-header">
9
+ <tr id="summary-table-row" style="font-weight: 600">
10
+ <td id="summary-table-icon">Icon</td>
11
+ <td id="summary-table-issue-description" class="py-4">Issue description</td>
12
+ <td id="summary-table-occurrences">Occurrences</td>
13
+ <td id="summary-table-pages">Pages</td>
14
+ <td id="summary-table-helpUrl">Help URL</td>
15
+ </tr>
16
+ </thead>
17
+ <tbody id="summary-table-contents">
18
+ </tbody>
19
+ </table>
20
+ </div>
@@ -0,0 +1,94 @@
1
+ <div id="wcag-compliance-card" class="card h-100 p-3">
2
+ <h2 class="mb-0">WCAG Compliance</h2>
3
+ <div class="wcag-compliance-passes-panel">
4
+ <div class="d-flex justify-content-between align-items-center">
5
+ <div class="d-flex align-items-center">
6
+ <span class="fw-bold">WCAG (A & AA) Passes</span>
7
+ <button
8
+ aria-label="More on automated testing WCAG coverage"
9
+ id="wcagModalToggle"
10
+ class="ms-2"
11
+ data-bs-toggle="modal"
12
+ data-bs-target="#wcagModal"
13
+ >
14
+ <svg
15
+ width="14"
16
+ height="14"
17
+ viewBox="0 0 14 14"
18
+ fill="none"
19
+ xmlns="http://www.w3.org/2000/svg"
20
+ >
21
+ <path
22
+ d="M11.9528 2.05329C9.22079 -0.68205 4.78867 -0.68477 2.0533 2.04718C-0.682042 4.7792 -0.684795 9.21135 2.04722 11.9467C4.77917 14.6821 9.21135 14.6848 11.9467 11.9528C14.682 9.22085 14.6848 4.78863 11.9528 2.05329ZM7.00216 11.2406C6.6319 11.2406 6.33174 10.9405 6.33174 10.5702C6.33174 10.1999 6.63187 9.89976 7.00216 9.89976C7.37243 9.89976 7.67259 10.1999 7.67259 10.5702C7.67255 10.9405 7.37243 11.2406 7.00216 11.2406ZM8.09214 7.20401C7.70918 7.42788 7.67645 7.7033 7.6748 8.49691C7.6747 8.54938 7.67453 8.60233 7.67423 8.65558C7.67185 9.03068 7.36712 9.33312 6.99253 9.33312C6.99105 9.33312 6.98957 9.33312 6.98813 9.33312C6.61159 9.33074 6.3083 9.02356 6.31066 8.64699C6.31099 8.59568 6.31109 8.54468 6.31119 8.49415C6.31287 7.67852 6.31492 6.66352 7.40395 6.02694C8.27777 5.51613 8.3879 5.18059 8.28543 4.74029C8.16503 4.2231 7.69273 4.08907 7.32418 4.1312C7.20042 4.14541 6.58322 4.24724 6.58322 4.85783C6.58322 5.23431 6.27795 5.5396 5.90141 5.5396C5.52487 5.5396 5.21964 5.23431 5.21964 4.85783C5.21964 3.76416 6.02107 2.90831 7.16859 2.77656C8.35043 2.64099 9.35515 3.32135 9.61338 4.4312C9.99939 6.08915 8.61379 6.89911 8.09214 7.20401Z"
23
+ fill="#c9c8c6"
24
+ />
25
+ </svg>
26
+ </button>
27
+ </div>
28
+ <span aria-label="Pass percentage" class="ms-2"><%= wcagPassPercentage %>%</span>
29
+ </div>
30
+ <div class="wcag-compliance-passes-bar">
31
+ <div
32
+ class="wcag-compliance-passes-bar-progress"
33
+ style="width: <%= wcagPassPercentage %>%"
34
+ ></div>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ <div
39
+ id="wcagModal"
40
+ class="modal fade"
41
+ tabindex="-1"
42
+ aria-labelledby="wcagModalLabel"
43
+ aria-hidden="true"
44
+ >
45
+ <div class="modal-dialog">
46
+ <div class="modal-content">
47
+ <div class="modal-header">
48
+ <h3 class="modal-title fw-bold" id="wcagModalLabel">Automated Testing WCAG Coverage</h3>
49
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
50
+ </div>
51
+ <div class="modal-body">
52
+ <div>
53
+ Only 19 WCAG 2.2 Success Criteria can be checked reasonably through automated testing:
54
+ </div>
55
+ <div class="accordion my-3" id="wcagLinksAccordion">
56
+ <div class="accordion-item">
57
+ <div class="accordion-header" id="wcagLinksAccordionTitle">
58
+ <button
59
+ class="accordion-button collapsed"
60
+ type="button"
61
+ data-bs-toggle="collapse"
62
+ data-bs-target="#wcagLinksAccordionContent"
63
+ aria-expanded="false"
64
+ aria-controls="wcagLinksAccordionContent"
65
+ >
66
+ 19 WCAG Success Criteria (A & AA)
67
+ </button>
68
+ </div>
69
+ <div
70
+ id="wcagLinksAccordionContent"
71
+ class="accordion-collapse collapse"
72
+ aria-labelledby="wcagLinksAccordionTitle"
73
+ data-bs-parent="#accordionExample"
74
+ >
75
+ <div class="accordion-body">
76
+ <ul id="wcagLinksList">
77
+ <% Object.entries(wcagLinks).forEach(link => { %>
78
+ <li>
79
+ <a href="<%= link[1] %>" target="_blank"><%= link[0] %></a>
80
+ </li>
81
+ <% }) %>
82
+ </ul>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ <div>
88
+ <strong>Manual testing is still recommended</strong> as they involve subjective judgements
89
+ and human interpretation, which cannot be fully automated.
90
+ </div>
91
+ </div>
92
+ </div>
93
+ </div>
94
+ </div>
@@ -0,0 +1,6 @@
1
+ <div id="top-five-card" class="h-100">
2
+ <div class="card-body">
3
+ <h2>Top 5 affected pages with the most issues</h2>
4
+ <ul class="unbulleted-list" id="top-issues-list"></ul>
5
+ </div>
6
+ </div>
@@ -0,0 +1,70 @@
1
+ <div id="wcag-compliance-card" class="card-body">
2
+ <h2>WCAG Compliance</h2>
3
+ <div class="d-flex align-items-center">
4
+ <span class="flex-grow-1">WCAG (A & AA) Passes</span>
5
+ <span aria-label="Pass percentage" class="ms-2" id="passPercentage"></span>
6
+ </div>
7
+ <div class="wcag-compliance-passes-bar">
8
+ <div
9
+ class="wcag-compliance-passes-bar-progress"
10
+ id="wcag-compliance-passes-bar-progress"
11
+ style="width: 0%"
12
+ ></div>
13
+ </div>
14
+ <button id="wcagModalToggle" type="button" data-bs-toggle="modal" data-bs-target="#wcagModal">
15
+ More details
16
+ </button>
17
+ </div>
18
+ <!-- START Modal Pop up -->
19
+ <div
20
+ id="wcagModal"
21
+ class="modal fade"
22
+ tabindex="-1"
23
+ aria-labelledby="wcagModalLabel"
24
+ aria-hidden="true"
25
+ >
26
+ <div class="modal-dialog">
27
+ <div class="modal-content">
28
+ <div class="modal-header">
29
+ <h3 class="modal-title fw-bold" id="wcagModalLabel">Automated Testing WCAG Coverage</h3>
30
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
31
+ </div>
32
+ <div class="modal-body">
33
+ <div>
34
+ Only 20 WCAG 2.2 Success Criteria can be checked reasonably through automated testing:
35
+ </div>
36
+ <div class="accordion my-3" id="wcagLinksAccordion">
37
+ <div class="accordion-item">
38
+ <div class="accordion-header" id="wcagLinksAccordionTitle">
39
+ <button
40
+ class="accordion-button collapsed"
41
+ type="button"
42
+ data-bs-toggle="collapse"
43
+ data-bs-target="#wcagLinksAccordionContent"
44
+ aria-expanded="false"
45
+ aria-controls="wcagLinksAccordionContent"
46
+ >
47
+ 20 WCAG Success Criteria (A & AA)
48
+ </button>
49
+ </div>
50
+ <div
51
+ id="wcagLinksAccordionContent"
52
+ class="accordion-collapse collapse"
53
+ aria-labelledby="wcagLinksAccordionTitle"
54
+ data-bs-parent="#accordionExample"
55
+ >
56
+ <div class="accordion-body">
57
+ <ul id="wcagLinksList"></ul>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ <div>
63
+ <strong>Manual testing is still recommended</strong> as they involve subjective judgements
64
+ and human interpretation, which cannot be fully automated.
65
+ </div>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ <!-- END Modal Pop up -->
@@ -0,0 +1,21 @@
1
+ <footer aria-label="Report footer" id="footer" class="card">
2
+ <div class="row mx-0">
3
+ <div class="col-sm-6 text-sm-start">
4
+ <%
5
+ const urlScannedField = '64d49b567c3c460011feb8b5';
6
+ const encodedUrlScanned = encodeURIComponent(urlScanned);
7
+ const versionNumberField = '64db1f79141a46001243b77a';
8
+ const encodedVersionNumber = encodeURIComponent(phAppVersion);
9
+ const feedbackForm = `https://form.gov.sg/64d1fcde4d0bb70012010995/?${urlScannedField}=${encodedUrlScanned}&${versionNumberField}=${encodedVersionNumber}`;
10
+ %>
11
+ <a href="<%=feedbackForm%>" target="_blank">Help us improve</a>
12
+ <hr class="d-sm-none" />
13
+ </div>
14
+ <div class="col-sm-6 text-sm-end">
15
+ Created by
16
+ <a href="https://form.gov.sg/64d1fcde4d0bb70012010995" target="_blank"
17
+ >GovTech Accessibility Enabling Team</a
18
+ >
19
+ </div>
20
+ </div>
21
+ </footer>
@@ -0,0 +1,230 @@
1
+ <header>
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ xmlns:xlink="http://www.w3.org/1999/xlink"
5
+ width="128"
6
+ zoomAndPan="magnify"
7
+ viewBox="0 0 82.5 30.000001"
8
+ height="45"
9
+ preserveAspectRatio="xMidYMid meet"
10
+ version="1.0"
11
+ >
12
+ <defs>
13
+ <clipPath id="821c21819f">
14
+ <path d="M 18 25 L 20 25 L 20 29.03125 L 18 29.03125 Z M 18 25 " clip-rule="nonzero" />
15
+ </clipPath>
16
+ <clipPath id="c282c6fe6f">
17
+ <path d="M 62 25 L 64 25 L 64 29.03125 L 62 29.03125 Z M 62 25 " clip-rule="nonzero" />
18
+ </clipPath>
19
+ </defs>
20
+ <title>Oobee Logo</title>
21
+
22
+ <path
23
+ fill="#9021a6"
24
+ d="M 41.617188 7.234375 L 40.933594 7.234375 L 41.617188 6.773438 L 41.617188 2.148438 C 41.617188 1.414062 41.019531 0.808594 40.277344 0.808594 L 36.492188 0.808594 C 35.761719 0.808594 35.152344 1.402344 35.152344 2.148438 L 35.152344 18.59375 C 35.152344 19.328125 35.75 19.933594 36.492188 19.933594 L 41.605469 19.933594 C 47.335938 19.933594 48.203125 17.613281 48.203125 13.597656 C 48.214844 9.550781 47.347656 7.234375 41.617188 7.234375 Z M 42.808594 16.523438 C 42.808594 17.042969 42.386719 17.464844 41.863281 17.464844 C 41.34375 17.464844 40.921875 17.042969 40.921875 16.523438 L 40.921875 9.675781 L 41.863281 9.675781 C 42.386719 9.675781 42.808594 10.097656 42.808594 10.617188 Z M 42.808594 16.523438 "
25
+ fill-opacity="1"
26
+ fill-rule="nonzero"
27
+ />
28
+ <path
29
+ fill="#9021a6"
30
+ d="M 26.558594 7.246094 C 20.367188 7.246094 19.4375 9.800781 19.4375 13.832031 C 19.4375 17.863281 20.367188 20.417969 26.558594 20.417969 C 32.746094 20.417969 33.679688 17.863281 33.679688 13.832031 C 33.679688 9.800781 32.734375 7.246094 26.558594 7.246094 Z M 27.5 16.785156 C 27.5 17.304688 27.078125 17.726562 26.558594 17.726562 C 26.039062 17.726562 25.617188 17.304688 25.617188 16.785156 L 25.617188 10.890625 C 25.617188 10.371094 26.039062 9.949219 26.558594 9.949219 C 27.078125 9.949219 27.5 10.371094 27.5 10.890625 Z M 27.5 16.785156 "
31
+ fill-opacity="1"
32
+ fill-rule="nonzero"
33
+ />
34
+ <path
35
+ fill="#9021a6"
36
+ d="M 63.113281 14.785156 L 57.792969 14.785156 L 57.792969 16.769531 C 57.792969 17.316406 57.332031 17.75 56.785156 17.714844 C 56.277344 17.6875 55.894531 17.230469 55.894531 16.710938 L 55.894531 14.167969 L 55.386719 13.820312 L 63.1875 13.820312 C 63.621094 13.820312 63.96875 13.460938 63.945312 13.039062 C 63.808594 9.464844 62.617188 7.234375 56.835938 7.234375 C 50.648438 7.234375 49.714844 9.789062 49.714844 13.820312 C 49.714844 17.851562 50.648438 20.40625 56.835938 20.40625 C 62.046875 20.40625 63.523438 18.59375 63.867188 15.617188 C 63.917969 15.183594 63.558594 14.785156 63.113281 14.785156 Z M 55.882812 10.878906 C 55.882812 10.296875 56.414062 9.835938 57.023438 9.949219 C 57.46875 10.035156 57.777344 10.457031 57.777344 10.917969 L 57.777344 12.863281 L 55.882812 12.863281 Z M 55.882812 10.878906 "
37
+ fill-opacity="1"
38
+ fill-rule="nonzero"
39
+ />
40
+ <path
41
+ fill="#9021a6"
42
+ d="M 10.347656 0.347656 C 3.746094 0.347656 2.753906 3.214844 2.753906 7.730469 L 2.753906 13.039062 C 2.753906 17.550781 3.746094 20.417969 10.347656 20.417969 C 16.945312 20.417969 17.9375 17.550781 17.9375 13.039062 L 17.9375 7.714844 C 17.9375 3.203125 16.945312 0.347656 10.347656 0.347656 Z M 11.460938 5.136719 L 11.460938 16.546875 L 9.230469 16.546875 L 9.230469 4.21875 L 12.816406 4.21875 Z M 11.460938 5.136719 "
43
+ fill-opacity="1"
44
+ fill-rule="nonzero"
45
+ />
46
+ <path
47
+ fill="#9021a6"
48
+ d="M 78.828125 14.785156 L 73.507812 14.785156 L 73.507812 16.769531 C 73.507812 17.316406 73.046875 17.75 72.503906 17.714844 C 71.992188 17.6875 71.609375 17.230469 71.609375 16.710938 L 71.609375 14.167969 L 71.101562 13.820312 L 78.902344 13.820312 C 79.335938 13.820312 79.683594 13.460938 79.660156 13.039062 C 79.523438 9.464844 78.332031 7.234375 72.550781 7.234375 C 66.363281 7.234375 65.433594 9.789062 65.433594 13.820312 C 65.433594 17.851562 66.363281 20.40625 72.550781 20.40625 C 77.761719 20.40625 79.238281 18.59375 79.585938 15.617188 C 79.632812 15.183594 79.273438 14.785156 78.828125 14.785156 Z M 71.609375 10.878906 C 71.609375 10.296875 72.140625 9.835938 72.75 9.949219 C 73.195312 10.035156 73.507812 10.457031 73.507812 10.917969 L 73.507812 12.863281 L 71.609375 12.863281 Z M 71.609375 10.878906 "
49
+ fill-opacity="1"
50
+ fill-rule="nonzero"
51
+ />
52
+ <path
53
+ fill="#9021a6"
54
+ d="M 41.617188 7.234375 L 40.933594 7.234375 L 41.617188 6.773438 L 41.617188 2.148438 C 41.617188 1.414062 41.019531 0.808594 40.277344 0.808594 L 36.492188 0.808594 C 35.761719 0.808594 35.152344 1.402344 35.152344 2.148438 L 35.152344 18.59375 C 35.152344 19.328125 35.75 19.933594 36.492188 19.933594 L 41.605469 19.933594 C 47.335938 19.933594 48.203125 17.613281 48.203125 13.597656 C 48.214844 9.550781 47.347656 7.234375 41.617188 7.234375 Z M 42.808594 16.523438 C 42.808594 17.042969 42.386719 17.464844 41.863281 17.464844 C 41.34375 17.464844 40.921875 17.042969 40.921875 16.523438 L 40.921875 9.675781 L 41.863281 9.675781 C 42.386719 9.675781 42.808594 10.097656 42.808594 10.617188 Z M 42.808594 16.523438 "
55
+ fill-opacity="1"
56
+ fill-rule="nonzero"
57
+ />
58
+ <path
59
+ fill="#9021a6"
60
+ d="M 26.558594 7.246094 C 20.367188 7.246094 19.4375 9.800781 19.4375 13.832031 C 19.4375 17.863281 20.367188 20.417969 26.558594 20.417969 C 32.746094 20.417969 33.679688 17.863281 33.679688 13.832031 C 33.679688 9.800781 32.734375 7.246094 26.558594 7.246094 Z M 27.5 16.785156 C 27.5 17.304688 27.078125 17.726562 26.558594 17.726562 C 26.039062 17.726562 25.617188 17.304688 25.617188 16.785156 L 25.617188 10.890625 C 25.617188 10.371094 26.039062 9.949219 26.558594 9.949219 C 27.078125 9.949219 27.5 10.371094 27.5 10.890625 Z M 27.5 16.785156 "
61
+ fill-opacity="1"
62
+ fill-rule="nonzero"
63
+ />
64
+ <path
65
+ fill="#9021a6"
66
+ d="M 63.113281 14.785156 L 57.792969 14.785156 L 57.792969 16.769531 C 57.792969 17.316406 57.332031 17.75 56.785156 17.714844 C 56.277344 17.6875 55.894531 17.230469 55.894531 16.710938 L 55.894531 14.167969 L 55.386719 13.820312 L 63.1875 13.820312 C 63.621094 13.820312 63.96875 13.460938 63.945312 13.039062 C 63.808594 9.464844 62.617188 7.234375 56.835938 7.234375 C 50.648438 7.234375 49.714844 9.789062 49.714844 13.820312 C 49.714844 17.851562 50.648438 20.40625 56.835938 20.40625 C 62.046875 20.40625 63.523438 18.59375 63.867188 15.617188 C 63.917969 15.183594 63.558594 14.785156 63.113281 14.785156 Z M 55.882812 10.878906 C 55.882812 10.296875 56.414062 9.835938 57.023438 9.949219 C 57.46875 10.035156 57.777344 10.457031 57.777344 10.917969 L 57.777344 12.863281 L 55.882812 12.863281 Z M 55.882812 10.878906 "
67
+ fill-opacity="1"
68
+ fill-rule="nonzero"
69
+ />
70
+ <path
71
+ fill="#9021a6"
72
+ d="M 10.347656 0.347656 C 3.746094 0.347656 2.753906 3.214844 2.753906 7.730469 L 2.753906 13.039062 C 2.753906 17.550781 3.746094 20.417969 10.347656 20.417969 C 16.945312 20.417969 17.9375 17.550781 17.9375 13.039062 L 17.9375 7.714844 C 17.9375 3.203125 16.945312 0.347656 10.347656 0.347656 Z M 11.460938 5.136719 L 11.460938 16.546875 L 9.230469 16.546875 L 9.230469 4.21875 L 12.816406 4.21875 Z M 11.460938 5.136719 "
73
+ fill-opacity="1"
74
+ fill-rule="nonzero"
75
+ />
76
+ <path
77
+ fill="#9021a6"
78
+ d="M 78.828125 14.785156 L 73.507812 14.785156 L 73.507812 16.769531 C 73.507812 17.316406 73.046875 17.75 72.503906 17.714844 C 71.992188 17.6875 71.609375 17.230469 71.609375 16.710938 L 71.609375 14.167969 L 71.101562 13.820312 L 78.902344 13.820312 C 79.335938 13.820312 79.683594 13.460938 79.660156 13.039062 C 79.523438 9.464844 78.332031 7.234375 72.550781 7.234375 C 66.363281 7.234375 65.433594 9.789062 65.433594 13.820312 C 65.433594 17.851562 66.363281 20.40625 72.550781 20.40625 C 77.761719 20.40625 79.238281 18.59375 79.585938 15.617188 C 79.632812 15.183594 79.273438 14.785156 78.828125 14.785156 Z M 71.609375 10.878906 C 71.609375 10.296875 72.140625 9.835938 72.75 9.949219 C 73.195312 10.035156 73.507812 10.457031 73.507812 10.917969 L 73.507812 12.863281 L 71.609375 12.863281 Z M 71.609375 10.878906 "
79
+ fill-opacity="1"
80
+ fill-rule="nonzero"
81
+ />
82
+ <g clip-path="url(#821c21819f)">
83
+ <path
84
+ fill="#9021a6"
85
+ d="M 19.289062 29.199219 C 19.164062 29.074219 19.066406 28.9375 18.992188 28.789062 C 18.90625 28.640625 18.84375 28.492188 18.792969 28.332031 C 18.742188 28.171875 18.707031 28.023438 18.679688 27.859375 C 18.65625 27.699219 18.644531 27.550781 18.644531 27.402344 C 18.644531 27.265625 18.65625 27.105469 18.679688 26.953125 C 18.707031 26.792969 18.742188 26.644531 18.792969 26.484375 C 18.84375 26.320312 18.917969 26.171875 18.992188 26.011719 C 19.078125 25.863281 19.179688 25.714844 19.300781 25.589844 L 19.488281 25.726562 C 19.386719 25.863281 19.300781 26 19.226562 26.136719 C 19.152344 26.273438 19.101562 26.421875 19.066406 26.570312 C 19.027344 26.71875 18.992188 26.855469 18.980469 27.003906 C 18.96875 27.152344 18.953125 27.289062 18.953125 27.414062 C 18.953125 27.539062 18.96875 27.675781 18.980469 27.824219 C 18.992188 27.972656 19.027344 28.121094 19.066406 28.257812 C 19.101562 28.40625 19.164062 28.542969 19.226562 28.679688 C 19.300781 28.816406 19.375 28.9375 19.476562 29.0625 Z M 19.289062 29.199219 "
86
+ fill-opacity="1"
87
+ fill-rule="nonzero"
88
+ />
89
+ </g>
90
+ <path
91
+ fill="#9021a6"
92
+ d="M 19.945312 25.640625 L 21.421875 25.640625 L 21.421875 25.925781 L 20.269531 25.925781 L 20.269531 26.855469 L 21.347656 26.855469 L 21.347656 27.140625 L 20.269531 27.140625 L 20.269531 28.355469 L 19.945312 28.355469 Z M 19.945312 25.640625 "
93
+ fill-opacity="1"
94
+ fill-rule="nonzero"
95
+ />
96
+ <path
97
+ fill="#9021a6"
98
+ d="M 21.871094 26.992188 C 21.871094 26.546875 21.96875 26.199219 22.15625 25.949219 C 22.339844 25.714844 22.613281 25.589844 22.972656 25.589844 C 23.160156 25.589844 23.332031 25.628906 23.46875 25.691406 C 23.605469 25.75 23.730469 25.851562 23.816406 25.976562 C 23.902344 26.097656 23.976562 26.246094 24.015625 26.421875 C 24.066406 26.59375 24.078125 26.78125 24.078125 26.992188 C 24.078125 27.4375 23.976562 27.785156 23.792969 28.035156 C 23.59375 28.269531 23.320312 28.394531 22.972656 28.394531 C 22.789062 28.394531 22.625 28.355469 22.488281 28.292969 C 22.351562 28.230469 22.242188 28.132812 22.140625 28.007812 C 22.054688 27.886719 21.980469 27.734375 21.945312 27.5625 C 21.894531 27.402344 21.871094 27.203125 21.871094 26.992188 Z M 22.214844 26.992188 C 22.214844 27.140625 22.230469 27.289062 22.265625 27.414062 C 22.304688 27.539062 22.339844 27.660156 22.402344 27.773438 C 22.464844 27.886719 22.539062 27.960938 22.636719 28.023438 C 22.738281 28.082031 22.847656 28.109375 22.984375 28.109375 C 23.222656 28.109375 23.417969 28.023438 23.554688 27.835938 C 23.691406 27.648438 23.765625 27.375 23.765625 26.992188 C 23.765625 26.84375 23.753906 26.707031 23.71875 26.570312 C 23.691406 26.433594 23.644531 26.320312 23.582031 26.210938 C 23.519531 26.113281 23.433594 26.023438 23.34375 25.960938 C 23.257812 25.902344 23.132812 25.875 23 25.875 C 22.761719 25.875 22.578125 25.960938 22.441406 26.148438 C 22.277344 26.335938 22.214844 26.621094 22.214844 26.992188 Z M 22.214844 26.992188 "
99
+ fill-opacity="1"
100
+ fill-rule="nonzero"
101
+ />
102
+ <path
103
+ fill="#9021a6"
104
+ d="M 24.699219 25.664062 C 24.796875 25.652344 24.910156 25.628906 25.03125 25.628906 C 25.15625 25.613281 25.28125 25.613281 25.378906 25.613281 C 25.503906 25.613281 25.617188 25.628906 25.714844 25.652344 C 25.828125 25.675781 25.914062 25.726562 26 25.777344 C 26.085938 25.839844 26.148438 25.914062 26.199219 26.011719 C 26.246094 26.113281 26.273438 26.222656 26.273438 26.359375 C 26.273438 26.570312 26.210938 26.742188 26.097656 26.878906 C 25.988281 27.015625 25.839844 27.105469 25.652344 27.140625 L 25.839844 27.289062 L 26.507812 28.355469 L 26.136719 28.355469 L 25.390625 27.191406 L 25.007812 27.128906 L 25.007812 28.355469 L 24.683594 28.355469 L 24.683594 25.664062 Z M 25.40625 25.886719 C 25.367188 25.886719 25.332031 25.886719 25.304688 25.886719 C 25.269531 25.886719 25.230469 25.886719 25.207031 25.886719 C 25.167969 25.886719 25.144531 25.886719 25.105469 25.902344 C 25.082031 25.902344 25.058594 25.914062 25.03125 25.914062 L 25.03125 26.917969 L 25.332031 26.917969 C 25.503906 26.917969 25.652344 26.867188 25.777344 26.78125 C 25.886719 26.695312 25.949219 26.558594 25.949219 26.371094 C 25.949219 26.234375 25.902344 26.125 25.800781 26.023438 C 25.703125 25.9375 25.566406 25.886719 25.40625 25.886719 Z M 25.40625 25.886719 "
105
+ fill-opacity="1"
106
+ fill-rule="nonzero"
107
+ />
108
+ <path
109
+ fill="#9021a6"
110
+ d="M 29.136719 26.53125 L 29.175781 26.125 L 29.152344 26.125 L 29 26.496094 L 28.292969 27.722656 L 28.195312 27.722656 L 27.453125 26.496094 L 27.316406 26.125 L 27.289062 26.125 L 27.339844 26.519531 L 27.339844 28.34375 L 27.042969 28.34375 L 27.042969 25.628906 L 27.277344 25.628906 L 28.121094 27.015625 L 28.246094 27.316406 L 28.257812 27.316406 L 28.382812 27.003906 L 29.1875 25.628906 L 29.4375 25.628906 L 29.4375 28.34375 L 29.113281 28.34375 L 29.113281 26.53125 Z M 29.136719 26.53125 "
111
+ fill-opacity="1"
112
+ fill-rule="nonzero"
113
+ />
114
+ <path
115
+ fill="#9021a6"
116
+ d="M 30.179688 25.640625 L 31.65625 25.640625 L 31.65625 25.925781 L 30.503906 25.925781 L 30.503906 26.804688 L 31.558594 26.804688 L 31.558594 27.089844 L 30.503906 27.089844 L 30.503906 28.058594 L 31.679688 28.058594 L 31.679688 28.34375 L 30.191406 28.34375 L 30.191406 25.640625 Z M 30.179688 25.640625 "
117
+ fill-opacity="1"
118
+ fill-rule="nonzero"
119
+ />
120
+ <path
121
+ fill="#9021a6"
122
+ d="M 32.25 25.664062 C 32.351562 25.652344 32.460938 25.628906 32.585938 25.628906 C 32.710938 25.613281 32.835938 25.613281 32.933594 25.613281 C 33.058594 25.613281 33.167969 25.628906 33.269531 25.652344 C 33.378906 25.675781 33.46875 25.726562 33.554688 25.777344 C 33.640625 25.839844 33.703125 25.914062 33.753906 26.011719 C 33.800781 26.113281 33.828125 26.222656 33.828125 26.359375 C 33.828125 26.570312 33.765625 26.742188 33.652344 26.878906 C 33.542969 27.015625 33.394531 27.105469 33.207031 27.140625 L 33.394531 27.289062 L 34.0625 28.355469 L 33.691406 28.355469 L 32.945312 27.191406 L 32.5625 27.128906 L 32.5625 28.355469 L 32.238281 28.355469 L 32.238281 25.664062 Z M 32.945312 25.886719 C 32.910156 25.886719 32.871094 25.886719 32.847656 25.886719 C 32.808594 25.886719 32.773438 25.886719 32.746094 25.886719 C 32.710938 25.886719 32.6875 25.886719 32.648438 25.902344 C 32.625 25.902344 32.597656 25.914062 32.574219 25.914062 L 32.574219 26.917969 L 32.871094 26.917969 C 33.046875 26.917969 33.195312 26.867188 33.316406 26.78125 C 33.429688 26.695312 33.492188 26.558594 33.492188 26.371094 C 33.492188 26.234375 33.441406 26.125 33.34375 26.023438 C 33.242188 25.9375 33.121094 25.886719 32.945312 25.886719 Z M 32.945312 25.886719 "
123
+ fill-opacity="1"
124
+ fill-rule="nonzero"
125
+ />
126
+ <path
127
+ fill="#9021a6"
128
+ d="M 36.195312 28.355469 L 34.597656 28.355469 L 34.597656 25.640625 L 34.917969 25.640625 L 34.917969 28.058594 L 36.195312 28.058594 Z M 36.195312 28.355469 "
129
+ fill-opacity="1"
130
+ fill-rule="nonzero"
131
+ />
132
+ <path
133
+ fill="#9021a6"
134
+ d="M 36.976562 27.277344 L 36.085938 25.640625 L 36.457031 25.640625 L 37.089844 26.832031 L 37.152344 27.066406 L 37.226562 26.820312 L 37.832031 25.640625 L 38.167969 25.640625 L 37.289062 27.265625 L 37.289062 28.34375 L 36.964844 28.34375 L 36.964844 27.277344 Z M 36.976562 27.277344 "
135
+ fill-opacity="1"
136
+ fill-rule="nonzero"
137
+ />
138
+ <path
139
+ fill="#9021a6"
140
+ d="M 39.769531 25.664062 C 39.867188 25.640625 39.964844 25.628906 40.089844 25.613281 C 40.203125 25.601562 40.3125 25.601562 40.425781 25.601562 C 40.550781 25.601562 40.660156 25.613281 40.785156 25.640625 C 40.910156 25.664062 41.019531 25.703125 41.121094 25.765625 C 41.21875 25.824219 41.304688 25.914062 41.367188 26.023438 C 41.429688 26.136719 41.46875 26.273438 41.46875 26.433594 C 41.46875 26.59375 41.441406 26.742188 41.378906 26.855469 C 41.320312 26.96875 41.246094 27.066406 41.144531 27.128906 C 41.046875 27.191406 40.933594 27.253906 40.808594 27.277344 C 40.6875 27.300781 40.550781 27.328125 40.414062 27.328125 C 40.402344 27.328125 40.375 27.328125 40.351562 27.328125 C 40.328125 27.328125 40.289062 27.328125 40.265625 27.328125 C 40.226562 27.328125 40.203125 27.328125 40.164062 27.328125 C 40.140625 27.328125 40.117188 27.328125 40.101562 27.316406 L 40.101562 28.34375 L 39.78125 28.34375 L 39.78125 25.664062 Z M 40.425781 25.886719 C 40.363281 25.886719 40.289062 25.886719 40.226562 25.886719 C 40.164062 25.886719 40.117188 25.902344 40.078125 25.914062 L 40.078125 27.042969 C 40.089844 27.042969 40.117188 27.054688 40.140625 27.054688 L 40.3125 27.054688 C 40.3125 27.054688 40.363281 27.054688 40.375 27.054688 C 40.464844 27.054688 40.550781 27.042969 40.636719 27.027344 C 40.722656 27.015625 40.796875 26.980469 40.871094 26.941406 C 40.945312 26.894531 40.996094 26.832031 41.046875 26.757812 C 41.082031 26.683594 41.109375 26.570312 41.109375 26.445312 C 41.109375 26.335938 41.082031 26.246094 41.046875 26.1875 C 41.007812 26.113281 40.960938 26.0625 40.882812 26.011719 C 40.824219 25.976562 40.75 25.9375 40.660156 25.925781 C 40.597656 25.902344 40.511719 25.886719 40.425781 25.886719 Z M 40.425781 25.886719 "
141
+ fill-opacity="1"
142
+ fill-rule="nonzero"
143
+ />
144
+ <path
145
+ fill="#9021a6"
146
+ d="M 43.539062 25.640625 L 43.847656 25.640625 L 43.847656 27.449219 C 43.847656 27.613281 43.824219 27.75 43.789062 27.871094 C 43.75 27.996094 43.6875 28.082031 43.601562 28.171875 C 43.527344 28.246094 43.425781 28.308594 43.316406 28.34375 C 43.203125 28.382812 43.082031 28.394531 42.945312 28.394531 C 42.621094 28.394531 42.386719 28.320312 42.222656 28.183594 C 42.0625 28.035156 41.976562 27.824219 41.976562 27.527344 L 41.976562 25.652344 L 42.296875 25.652344 L 42.296875 27.375 C 42.296875 27.511719 42.3125 27.625 42.335938 27.722656 C 42.359375 27.824219 42.398438 27.898438 42.460938 27.945312 C 42.507812 28.007812 42.582031 28.046875 42.660156 28.070312 C 42.746094 28.097656 42.832031 28.109375 42.945312 28.109375 C 43.15625 28.109375 43.304688 28.046875 43.390625 27.933594 C 43.476562 27.824219 43.527344 27.625 43.527344 27.363281 L 43.527344 25.640625 Z M 43.539062 25.640625 "
147
+ fill-opacity="1"
148
+ fill-rule="nonzero"
149
+ />
150
+ <path
151
+ fill="#9021a6"
152
+ d="M 44.570312 25.664062 C 44.667969 25.652344 44.78125 25.628906 44.902344 25.628906 C 45.027344 25.628906 45.152344 25.613281 45.25 25.613281 C 45.375 25.613281 45.488281 25.628906 45.585938 25.652344 C 45.699219 25.675781 45.785156 25.726562 45.871094 25.777344 C 45.957031 25.839844 46.019531 25.914062 46.070312 26.011719 C 46.117188 26.113281 46.144531 26.222656 46.144531 26.359375 C 46.144531 26.570312 46.082031 26.742188 45.96875 26.878906 C 45.859375 27.015625 45.710938 27.105469 45.523438 27.140625 L 45.710938 27.289062 L 46.378906 28.355469 L 46.007812 28.355469 L 45.261719 27.191406 L 44.878906 27.128906 L 44.878906 28.355469 L 44.554688 28.355469 L 44.554688 25.664062 Z M 45.261719 25.886719 C 45.226562 25.886719 45.1875 25.886719 45.164062 25.886719 C 45.125 25.886719 45.089844 25.886719 45.066406 25.886719 C 45.027344 25.886719 45.003906 25.886719 44.964844 25.902344 C 44.941406 25.902344 44.914062 25.914062 44.890625 25.914062 L 44.890625 26.917969 L 45.1875 26.917969 C 45.363281 26.917969 45.511719 26.867188 45.636719 26.78125 C 45.746094 26.695312 45.808594 26.558594 45.808594 26.371094 C 45.808594 26.234375 45.757812 26.125 45.660156 26.023438 C 45.5625 25.9375 45.4375 25.886719 45.261719 25.886719 Z M 45.261719 25.886719 "
153
+ fill-opacity="1"
154
+ fill-rule="nonzero"
155
+ />
156
+ <path
157
+ fill="#9021a6"
158
+ d="M 46.914062 25.664062 C 47.011719 25.640625 47.113281 25.628906 47.234375 25.613281 C 47.347656 25.601562 47.457031 25.601562 47.570312 25.601562 C 47.695312 25.601562 47.804688 25.613281 47.929688 25.640625 C 48.054688 25.664062 48.164062 25.703125 48.265625 25.765625 C 48.363281 25.824219 48.449219 25.914062 48.511719 26.023438 C 48.574219 26.136719 48.613281 26.273438 48.613281 26.433594 C 48.613281 26.59375 48.585938 26.742188 48.527344 26.855469 C 48.464844 26.96875 48.390625 27.066406 48.289062 27.128906 C 48.191406 27.191406 48.078125 27.253906 47.953125 27.277344 C 47.832031 27.300781 47.695312 27.328125 47.558594 27.328125 C 47.546875 27.328125 47.519531 27.328125 47.496094 27.328125 C 47.472656 27.328125 47.433594 27.328125 47.410156 27.328125 C 47.371094 27.328125 47.347656 27.328125 47.308594 27.328125 C 47.273438 27.328125 47.261719 27.328125 47.246094 27.316406 L 47.246094 28.34375 L 46.914062 28.34375 Z M 47.582031 25.886719 C 47.519531 25.886719 47.445312 25.886719 47.382812 25.886719 C 47.324219 25.886719 47.273438 25.902344 47.234375 25.914062 L 47.234375 27.042969 C 47.246094 27.042969 47.273438 27.054688 47.296875 27.054688 L 47.53125 27.054688 C 47.621094 27.054688 47.707031 27.042969 47.792969 27.027344 C 47.878906 27.015625 47.953125 26.980469 48.03125 26.941406 C 48.105469 26.894531 48.152344 26.832031 48.203125 26.757812 C 48.238281 26.683594 48.265625 26.570312 48.265625 26.445312 C 48.265625 26.335938 48.238281 26.246094 48.203125 26.1875 C 48.164062 26.113281 48.117188 26.0625 48.042969 26.011719 C 47.980469 25.976562 47.90625 25.9375 47.820312 25.925781 C 47.742188 25.902344 47.65625 25.886719 47.582031 25.886719 Z M 47.582031 25.886719 "
159
+ fill-opacity="1"
160
+ fill-rule="nonzero"
161
+ />
162
+ <path
163
+ fill="#9021a6"
164
+ d="M 50.734375 28.355469 L 49.132812 28.355469 L 49.132812 25.640625 L 49.457031 25.640625 L 49.457031 28.058594 L 50.734375 28.058594 Z M 50.734375 28.355469 "
165
+ fill-opacity="1"
166
+ fill-rule="nonzero"
167
+ />
168
+ <path
169
+ fill="#9021a6"
170
+ d="M 51.21875 25.640625 L 52.691406 25.640625 L 52.691406 25.925781 L 51.539062 25.925781 L 51.539062 26.804688 L 52.59375 26.804688 L 52.59375 27.089844 L 51.539062 27.089844 L 51.539062 28.058594 L 52.71875 28.058594 L 52.71875 28.34375 L 51.230469 28.34375 L 51.230469 25.640625 Z M 51.21875 25.640625 "
171
+ fill-opacity="1"
172
+ fill-rule="nonzero"
173
+ />
174
+ <path
175
+ fill="#9021a6"
176
+ d="M 55.804688 27.601562 L 54.8125 27.601562 L 54.542969 28.355469 L 54.21875 28.355469 L 55.25 25.601562 L 55.398438 25.601562 L 56.425781 28.355469 L 56.09375 28.355469 Z M 54.914062 27.328125 L 55.707031 27.328125 L 55.410156 26.507812 L 55.308594 26.097656 L 55.210938 26.519531 Z M 54.914062 27.328125 "
177
+ fill-opacity="1"
178
+ fill-rule="nonzero"
179
+ />
180
+ <path
181
+ fill="#9021a6"
182
+ d="M 56.933594 28.070312 L 57.480469 28.070312 L 57.480469 26.1875 L 57.519531 25.960938 L 57.371094 26.148438 L 56.949219 26.457031 L 56.800781 26.261719 L 57.65625 25.601562 L 57.792969 25.601562 L 57.792969 28.070312 L 58.324219 28.070312 L 58.324219 28.355469 L 56.949219 28.355469 L 56.949219 28.070312 Z M 56.933594 28.070312 "
183
+ fill-opacity="1"
184
+ fill-rule="nonzero"
185
+ />
186
+ <path
187
+ fill="#9021a6"
188
+ d="M 58.96875 28.070312 L 59.515625 28.070312 L 59.515625 26.1875 L 59.550781 25.960938 L 59.402344 26.148438 L 58.980469 26.457031 L 58.832031 26.261719 L 59.6875 25.601562 L 59.824219 25.601562 L 59.824219 28.070312 L 60.359375 28.070312 L 60.359375 28.355469 L 58.980469 28.355469 L 58.980469 28.070312 Z M 58.96875 28.070312 "
189
+ fill-opacity="1"
190
+ fill-rule="nonzero"
191
+ />
192
+ <path
193
+ fill="#9021a6"
194
+ d="M 61.425781 27.277344 L 60.53125 25.640625 L 60.90625 25.640625 L 61.539062 26.832031 L 61.597656 27.066406 L 61.671875 26.820312 L 62.28125 25.640625 L 62.617188 25.640625 L 61.734375 27.265625 L 61.734375 28.34375 L 61.425781 28.34375 Z M 61.425781 27.277344 "
195
+ fill-opacity="1"
196
+ fill-rule="nonzero"
197
+ />
198
+ <g clip-path="url(#c282c6fe6f)">
199
+ <path
200
+ fill="#9021a6"
201
+ d="M 63.125 25.589844 C 63.25 25.714844 63.347656 25.851562 63.421875 26 C 63.507812 26.148438 63.570312 26.296875 63.621094 26.457031 C 63.671875 26.621094 63.707031 26.769531 63.734375 26.929688 C 63.757812 27.089844 63.769531 27.238281 63.769531 27.390625 C 63.769531 27.527344 63.757812 27.6875 63.734375 27.835938 C 63.707031 27.996094 63.671875 28.144531 63.621094 28.308594 C 63.570312 28.46875 63.496094 28.617188 63.421875 28.777344 C 63.335938 28.925781 63.238281 29.074219 63.113281 29.199219 L 62.925781 29.0625 C 63.027344 28.925781 63.113281 28.789062 63.1875 28.652344 C 63.261719 28.519531 63.3125 28.367188 63.347656 28.21875 C 63.386719 28.070312 63.421875 27.933594 63.433594 27.785156 C 63.449219 27.636719 63.460938 27.511719 63.460938 27.375 C 63.460938 27.253906 63.449219 27.117188 63.433594 26.980469 C 63.410156 26.832031 63.386719 26.695312 63.335938 26.546875 C 63.296875 26.398438 63.238281 26.261719 63.175781 26.113281 C 63.113281 25.976562 63.027344 25.851562 62.925781 25.726562 Z M 63.125 25.589844 "
202
+ fill-opacity="1"
203
+ fill-rule="nonzero"
204
+ />
205
+ </g>
206
+ </svg>
207
+ <h1 class="d-inline mb-0 ms-3">
208
+ <span class="d-md-none">A11y</span><span class="d-none d-md-inline">Accessibility</span> Site
209
+ Report
210
+ </h1>
211
+
212
+ <%#
213
+ <div class="toggleWrapper">
214
+ <input tabindex="0" type="checkbox" class="dm" id="dm" />
215
+ <label for="dm" class="toggle">
216
+ <span class="toggle__handler">
217
+ <span class="crater crater--1"></span>
218
+ <span class="crater crater--2"></span>
219
+ <span class="crater crater--3"></span>
220
+ </span>
221
+ <span class="star star--1"></span>
222
+ <span class="star star--2"></span>
223
+ <span class="star star--3"></span>
224
+ <span class="star star--4"></span>
225
+ <span class="star star--5"></span>
226
+ <span class="star star--6"></span>
227
+ </label>
228
+ </div>
229
+ %>
230
+ </header>