@jrpool/kilotest 43.0.1 → 44.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/getReport.js +1 -1
- package/api/listDiagnoses.js +2 -2
- package/api/listIssues.js +4 -4
- package/api/listReports.js +3 -3
- package/api/listViolators.js +3 -3
- package/api/requestRetest.js +3 -3
- package/api/requestTest.js +3 -3
- package/docs/SERVICE.md +1 -1
- package/index.html +2 -2
- package/index.js +38 -37
- package/llms-full.txt +8 -8
- package/llms.txt +7 -7
- package/package.json +1 -1
- package/robots.txt +8 -8
- package/sitemap.xml +3 -3
- package/util.js +3 -3
- package/{ai0BalanceForm → web/ai0BalanceForm}/index.js +2 -2
- package/{testOrder → web/enqueue}/index.js +7 -5
- package/{recActionForm → web/enqueueForm}/index.html +1 -1
- package/{recActionForm → web/enqueueForm}/index.js +2 -2
- package/{reportsExpungeForm → web/expungeReportsForm}/index.html +1 -1
- package/{reportsExpungeForm → web/expungeReportsForm}/index.js +1 -1
- package/{reportHideForm → web/hideReportForm}/index.html +1 -1
- package/{reportHideForm → web/hideReportForm}/index.js +1 -1
- package/{diagnoses → web/listDiagnoses}/index.js +2 -2
- package/{reportIssues → web/listIssues}/index.html +1 -1
- package/{reportIssues → web/listIssues}/index.js +3 -3
- package/{targets → web/listReports}/index.html +1 -1
- package/{targets → web/listReports}/index.js +9 -9
- package/{rules → web/listRules}/index.js +2 -2
- package/{issues → web/listTopIssues}/index.js +4 -4
- package/{reportIssue → web/listViolators}/index.js +3 -3
- package/{manage → web/manage}/index.html +7 -7
- package/{manage → web/manage}/index.js +1 -1
- package/{reportsPruneForm → web/pruneReportsForm}/index.html +1 -1
- package/{reportsPruneForm → web/pruneReportsForm}/index.js +1 -1
- package/{reannotate → web/reannotate}/index.js +2 -2
- package/{reannotateForm → web/reannotateForm}/index.js +2 -2
- package/{wcagRenew → web/renewWCAG}/index.js +3 -3
- package/{wcagRenewForm → web/renewWCAGForm}/index.html +1 -1
- package/{retestRec → web/requestRetest}/index.html +1 -1
- package/{retestRec → web/requestRetest}/index.js +4 -5
- package/{retestRecForm → web/requestRetestForm}/index.html +2 -2
- package/{retestRecForm → web/requestRetestForm}/index.js +2 -2
- package/{testRec → web/requestTest}/index.html +1 -1
- package/{testRec → web/requestTest}/index.js +5 -6
- package/{testRecForm → web/requestTestForm}/index.html +1 -1
- package/{testRecForm → web/requestTestForm}/index.js +2 -3
- package/{reportsRewindForm → web/rewindReportsForm}/index.html +1 -1
- package/{reportsRewindForm → web/rewindReportsForm}/index.js +1 -1
- package/{tutorial → web/tutorial}/index.js +3 -3
- package/{reportUnhideForm → web/unhideReportForm}/index.html +1 -1
- package/{reportUnhideForm → web/unhideReportForm}/index.js +1 -1
- /package/{ai0BalanceForm → web/ai0BalanceForm}/index.html +0 -0
- /package/{testOrder → web/enqueue}/index.html +0 -0
- /package/{diagnoses → web/listDiagnoses}/index.html +0 -0
- /package/{rules → web/listRules}/index.html +0 -0
- /package/{issues → web/listTopIssues}/index.html +0 -0
- /package/{reportIssue → web/listViolators}/index.html +0 -0
- /package/{reannotate → web/reannotate}/index.html +0 -0
- /package/{reannotateForm → web/reannotateForm}/index.html +0 -0
- /package/{wcagRenew → web/renewWCAG}/index.html +0 -0
- /package/{wcagRenewForm → web/renewWCAGForm}/index.js +0 -0
- /package/{tutorial → web/tutorial}/images/newsletter-form.png +0 -0
- /package/{tutorial → web/tutorial}/index.html +0 -0
package/api/getReport.js
CHANGED
|
@@ -56,7 +56,7 @@ exports.response = async args => {
|
|
|
56
56
|
},
|
|
57
57
|
'URLs of similar requests for web users': {
|
|
58
58
|
'this request': `${thisHost}/fullReport.json/${timeStamp}/${jobID}`,
|
|
59
|
-
'closest ancestor request': `${thisHost}/
|
|
59
|
+
'closest ancestor request': `${thisHost}/listIssues.html/${timeStamp}/${jobID}`
|
|
60
60
|
},
|
|
61
61
|
'response metadata': getResponseMetadata(),
|
|
62
62
|
'response content': responseContent
|
package/api/listDiagnoses.js
CHANGED
|
@@ -146,8 +146,8 @@ exports.response = async args => {
|
|
|
146
146
|
}
|
|
147
147
|
},
|
|
148
148
|
'URLs of similar requests for web users': {
|
|
149
|
-
'this request': `${thisHost}/
|
|
150
|
-
'closest ancestor request': `${thisHost}/
|
|
149
|
+
'this request': `${thisHost}/listDiagnoses.html/${issueID}/${timeStamp}/${jobID}/${catalogIndex}`,
|
|
150
|
+
'closest ancestor request': `${thisHost}/listViolators.html/${issueID}/${timeStamp}/${jobID}`
|
|
151
151
|
},
|
|
152
152
|
'response metadata': getResponseMetadata(),
|
|
153
153
|
'response content': responseContent
|
package/api/listIssues.js
CHANGED
|
@@ -172,7 +172,7 @@ exports.response = async args => {
|
|
|
172
172
|
};
|
|
173
173
|
// Add instructions for a web user to request a retest.
|
|
174
174
|
responseContent['how a web user can request that the page be retested'] = {
|
|
175
|
-
URL: `${thisHost}/
|
|
175
|
+
URL: `${thisHost}/requestRetestForm.html/${timeStamp}/${jobID}`
|
|
176
176
|
};
|
|
177
177
|
}
|
|
178
178
|
// Sort the data about issues by summary.
|
|
@@ -191,7 +191,7 @@ exports.response = async args => {
|
|
|
191
191
|
method: 'GET',
|
|
192
192
|
URL: `${thisHost}/api/listViolators/${id}/${timeStamp}/${jobID}`
|
|
193
193
|
},
|
|
194
|
-
'web users can get details about the issue at': `${thisHost}/
|
|
194
|
+
'web users can get details about the issue at': `${thisHost}/listViolators.html/${id}/${timeStamp}/${jobID}`
|
|
195
195
|
};
|
|
196
196
|
});
|
|
197
197
|
// Add the basics about the issues to the response content.
|
|
@@ -214,8 +214,8 @@ exports.response = async args => {
|
|
|
214
214
|
}
|
|
215
215
|
},
|
|
216
216
|
'URLs of similar requests for web users': {
|
|
217
|
-
'this request': `${thisHost}/
|
|
218
|
-
'closest ancestor request': `${thisHost}/
|
|
217
|
+
'this request': `${thisHost}/listIssues.html/${timeStamp}/${jobID}`,
|
|
218
|
+
'closest ancestor request': `${thisHost}/listReports.html`
|
|
219
219
|
},
|
|
220
220
|
'response metadata': getResponseMetadata(),
|
|
221
221
|
'response content': responseContent
|
package/api/listReports.js
CHANGED
|
@@ -34,7 +34,7 @@ exports.response = async () => {
|
|
|
34
34
|
method: 'GET',
|
|
35
35
|
URL: `${thisHost}/api/listIssues/${timeStamp}/${jobID}`
|
|
36
36
|
};
|
|
37
|
-
reportBasics['web users can get details about the report at'] = `${thisHost}/
|
|
37
|
+
reportBasics['web users can get details about the report at'] = `${thisHost}/listIssues.html/${timeStamp}/${jobID}`;
|
|
38
38
|
// Add the basics to the array.
|
|
39
39
|
reportsBasics.push(reportBasics);
|
|
40
40
|
}
|
|
@@ -63,7 +63,7 @@ exports.response = async () => {
|
|
|
63
63
|
};
|
|
64
64
|
// Add instructions for a web user to request a test to the response content.
|
|
65
65
|
responseContent['how a web user can request that the page be tested'] = {
|
|
66
|
-
URL: `${thisHost}/
|
|
66
|
+
URL: `${thisHost}/requestTestForm.html`
|
|
67
67
|
};
|
|
68
68
|
// Create a response body.
|
|
69
69
|
const body = {
|
|
@@ -76,7 +76,7 @@ exports.response = async () => {
|
|
|
76
76
|
'closest ancestor request': null
|
|
77
77
|
},
|
|
78
78
|
'URLs of similar requests for web users': {
|
|
79
|
-
'this request': `${thisHost}/
|
|
79
|
+
'this request': `${thisHost}/listReports.html`,
|
|
80
80
|
'closest ancestor request': null
|
|
81
81
|
},
|
|
82
82
|
'response metadata': getResponseMetadata(),
|
package/api/listViolators.js
CHANGED
|
@@ -130,7 +130,7 @@ exports.response = async args => {
|
|
|
130
130
|
URL: `${thisHost}/api/listDiagnoses/${catalogIndex}/${issueID}/${timeStamp}/${jobID}`,
|
|
131
131
|
'request method': 'GET'
|
|
132
132
|
},
|
|
133
|
-
'web users can get details about the element at': `${thisHost}/
|
|
133
|
+
'web users can get details about the element at': `${thisHost}/listDiagnoses.html/${issueID}/${timeStamp}/${jobID}/${catalogIndex}`
|
|
134
134
|
};
|
|
135
135
|
});
|
|
136
136
|
// Add basics about the violators to the response content.
|
|
@@ -153,8 +153,8 @@ exports.response = async args => {
|
|
|
153
153
|
}
|
|
154
154
|
},
|
|
155
155
|
'URLs of similar requests for web users': {
|
|
156
|
-
'this request': `${thisHost}/
|
|
157
|
-
'closest ancestor request': `${thisHost}/
|
|
156
|
+
'this request': `${thisHost}/listViolators.html/${issueID}/${timeStamp}/${jobID}`,
|
|
157
|
+
'closest ancestor request': `${thisHost}/listIssues.html/${timeStamp}/${jobID}`
|
|
158
158
|
},
|
|
159
159
|
'response metadata': getResponseMetadata(),
|
|
160
160
|
'response content': responseContent
|
package/api/requestRetest.js
CHANGED
|
@@ -69,7 +69,7 @@ exports.response = async args => {
|
|
|
69
69
|
responseContent['disposition of your request'] = {
|
|
70
70
|
'what happens next': 'Your request is likely to be approved and processed within 1 hour to 1 day.',
|
|
71
71
|
'how you can check for completion': 'You can call the listReports tool to learn whether the page has been retested and a new report is available.',
|
|
72
|
-
'how a web user can check for completion': `A web user can visit ${thisHost}/
|
|
72
|
+
'how a web user can check for completion': `A web user can visit ${thisHost}/listReports.html to learn whether the page has been retested and a new report is available.`
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
75
|
// Create a response body.
|
|
@@ -91,8 +91,8 @@ exports.response = async args => {
|
|
|
91
91
|
}
|
|
92
92
|
},
|
|
93
93
|
'URLs of similar requests for web users': {
|
|
94
|
-
'this request': `${thisHost}/
|
|
95
|
-
'closest ancestor request': `${thisHost}/
|
|
94
|
+
'this request': `${thisHost}/requestRetestForm.html/${timeStamp}/${jobID}`,
|
|
95
|
+
'closest ancestor request': `${thisHost}/listIssues.html/${timeStamp}/${jobID}`
|
|
96
96
|
},
|
|
97
97
|
'response metadata': getResponseMetadata(),
|
|
98
98
|
'response content': responseContent
|
package/api/requestTest.js
CHANGED
|
@@ -70,7 +70,7 @@ exports.response = async args => {
|
|
|
70
70
|
responseContent['disposition of your request'] = {
|
|
71
71
|
'what happens next': 'Your request is likely to be approved and processed within 1 hour to 1 day.',
|
|
72
72
|
'how you can check for completion': 'You can call the listReports tool to learn whether the page has been tested and a report is available.',
|
|
73
|
-
'how a web user can check for completion': `A web user can visit ${thisHost}/
|
|
73
|
+
'how a web user can check for completion': `A web user can visit ${thisHost}/listReports.html to learn whether the page has been tested and a report is available.`
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
}
|
|
@@ -95,8 +95,8 @@ exports.response = async args => {
|
|
|
95
95
|
}
|
|
96
96
|
},
|
|
97
97
|
'URLs of similar requests for web users': {
|
|
98
|
-
'this request': `${thisHost}/
|
|
99
|
-
'closest ancestor request': `${thisHost}/
|
|
98
|
+
'this request': `${thisHost}/requestTestForm.html`,
|
|
99
|
+
'closest ancestor request': `${thisHost}/listReports.html`
|
|
100
100
|
},
|
|
101
101
|
'response metadata': getResponseMetadata(),
|
|
102
102
|
'response content': responseContent
|
package/docs/SERVICE.md
CHANGED
|
@@ -203,7 +203,7 @@ kilotest.com {
|
|
|
203
203
|
}
|
|
204
204
|
@allowedPOST {
|
|
205
205
|
method POST
|
|
206
|
-
path /mcp /
|
|
206
|
+
path /mcp /requestRetest.html/* /requestTest.html /recAction.html /reannotate.html /renewWCAG.html /api/* /tutorialComment.html
|
|
207
207
|
}
|
|
208
208
|
# Respond to OPTIONS requests.
|
|
209
209
|
@allowedOPTIONS method OPTIONS
|
package/index.html
CHANGED
|
@@ -86,8 +86,8 @@
|
|
|
86
86
|
</details>
|
|
87
87
|
<h2>What do you want to know?</h2>
|
|
88
88
|
<ul class="nav">
|
|
89
|
-
<li><a href="
|
|
90
|
-
<li><a href="
|
|
89
|
+
<li><a href="listReports.html">Which web pages have been tested?</a></li>
|
|
90
|
+
<li><a href="listTopIssues.html">Which issues have been reported?</a></li>
|
|
91
91
|
<li><a href="manage.html">What can Kilotest managers do?</a></li>
|
|
92
92
|
</ul>
|
|
93
93
|
</main>
|
package/index.js
CHANGED
|
@@ -30,36 +30,36 @@ const {
|
|
|
30
30
|
} = require('./util');
|
|
31
31
|
const {handleMCP, mcpPath} = require('./mcp');
|
|
32
32
|
const fs = require('fs/promises');
|
|
33
|
-
const {handleComment} = require('./tutorial/index');
|
|
33
|
+
const {handleComment} = require('./web/tutorial/index');
|
|
34
34
|
const http = require('http');
|
|
35
35
|
const https = require('https');
|
|
36
36
|
const path = require('path');
|
|
37
37
|
const {sendAlert} = require('./alerts');
|
|
38
38
|
const answer = {
|
|
39
|
-
ai0BalanceForm: require('./ai0BalanceForm/index').answer,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
39
|
+
ai0BalanceForm: require('./web/ai0BalanceForm/index').answer,
|
|
40
|
+
enqueue: require('./web/enqueue/index').answer,
|
|
41
|
+
enqueueForm: require('./web/enqueueForm/index').answer,
|
|
42
|
+
expungeReportsForm: require('./web/expungeReportsForm/index').answer,
|
|
43
|
+
hideReportForm: require('./web/hideReportForm/index').answer,
|
|
44
|
+
listDiagnoses: require('./web/listDiagnoses/index').answer,
|
|
45
|
+
listIssues: require('./web/listIssues/index').answer,
|
|
46
|
+
listReports: require('./web/listReports/index').answer,
|
|
47
|
+
listRules: require('./web/listRules/index').answer,
|
|
48
|
+
listTopIssues: require('./web/listTopIssues/index').answer,
|
|
49
|
+
listViolators: require('./web/listViolators/index').answer,
|
|
50
|
+
manage: require('./web/manage/index').answer,
|
|
51
|
+
pruneReportsForm: require('./web/pruneReportsForm/index').answer,
|
|
52
|
+
reannotate: require('./web/reannotate/index').answer,
|
|
53
|
+
reannotateForm: require('./web/reannotateForm/index').answer,
|
|
54
|
+
renewWCAG: require('./web/renewWCAG/index').answer,
|
|
55
|
+
renewWCAGForm: require('./web/renewWCAGForm/index').answer,
|
|
56
|
+
requestRetest: require('./web/requestRetest/index').answer,
|
|
57
|
+
requestRetestForm: require('./web/requestRetestForm/index').answer,
|
|
58
|
+
requestTest: require('./web/requestTest/index').answer,
|
|
59
|
+
requestTestForm: require('./web/requestTestForm/index').answer,
|
|
60
|
+
rewindReportsForm: require('./web/rewindReportsForm/index').answer,
|
|
61
|
+
unhideReportForm: require('./web/unhideReportForm/index').answer,
|
|
62
|
+
tutorial: require('./web/tutorial/index').answer
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
// CONSTANTS
|
|
@@ -505,7 +505,7 @@ const requestHandler = async (request, response) => {
|
|
|
505
505
|
// Otherwise, if it is for a tutorial image:
|
|
506
506
|
else if (pathname.startsWith('/tutorial/images/')) {
|
|
507
507
|
const imgFile = pathname.slice('/tutorial/images/'.length);
|
|
508
|
-
const imgPath = path.join(__dirname, 'tutorial', 'images', imgFile);
|
|
508
|
+
const imgPath = path.join(__dirname, 'web', 'tutorial', 'images', imgFile);
|
|
509
509
|
try {
|
|
510
510
|
const img = await fs.readFile(imgPath);
|
|
511
511
|
const ext = path.extname(imgFile).toLowerCase();
|
|
@@ -564,7 +564,7 @@ const requestHandler = async (request, response) => {
|
|
|
564
564
|
// Get the data from the request body.
|
|
565
565
|
const postData = await getPOSTData(request);
|
|
566
566
|
// If the request is a test recommendation:
|
|
567
|
-
if (pageName === '
|
|
567
|
+
if (pageName === 'requestTest.html') {
|
|
568
568
|
const {what, url, why} = postData;
|
|
569
569
|
// If the request is valid:
|
|
570
570
|
if (what && url.startsWith('https://') && why) {
|
|
@@ -578,7 +578,7 @@ const requestHandler = async (request, response) => {
|
|
|
578
578
|
// Serve headers for a response.
|
|
579
579
|
setHeaders('text/html', pathname, 'ultra');
|
|
580
580
|
// Get the answer data.
|
|
581
|
-
const answerData = await require(path.join(__dirname, '
|
|
581
|
+
const answerData = await require(path.join(__dirname, 'web', 'requestTest', 'index'))
|
|
582
582
|
.answer(what, url, why);
|
|
583
583
|
// If they are valid:
|
|
584
584
|
if (answerData.status === 'ok') {
|
|
@@ -599,7 +599,7 @@ const requestHandler = async (request, response) => {
|
|
|
599
599
|
}
|
|
600
600
|
}
|
|
601
601
|
// Otherwise, if it is a retest recommendation:
|
|
602
|
-
else if (pageName === '
|
|
602
|
+
else if (pageName === 'requestRetest.html') {
|
|
603
603
|
const {why} = postData;
|
|
604
604
|
const [timeStamp, jobID] = pathTail.split('/');
|
|
605
605
|
// If the request is valid:
|
|
@@ -607,7 +607,7 @@ const requestHandler = async (request, response) => {
|
|
|
607
607
|
// Serve response headers.
|
|
608
608
|
setHeaders('text/html', pathname, 'ultra');
|
|
609
609
|
// Get the answer data.
|
|
610
|
-
const answerData = await require(path.join(__dirname, '
|
|
610
|
+
const answerData = await require(path.join(__dirname, 'web', 'requestRetest', 'index'))
|
|
611
611
|
.answer(pathTail, why);
|
|
612
612
|
// If they are valid:
|
|
613
613
|
if (answerData.status === 'ok') {
|
|
@@ -626,7 +626,7 @@ const requestHandler = async (request, response) => {
|
|
|
626
626
|
await serveError({message: 'ERROR: Invalid retest recommendation'}, response, true);
|
|
627
627
|
}
|
|
628
628
|
}
|
|
629
|
-
// Otherwise, if it is an
|
|
629
|
+
// Otherwise, if it is an approval or rejection of a test request:
|
|
630
630
|
else if (pageName === 'recAction.html') {
|
|
631
631
|
const {target, authCode} = postData;
|
|
632
632
|
const [url, what] = target.split('\t');
|
|
@@ -639,7 +639,7 @@ const requestHandler = async (request, response) => {
|
|
|
639
639
|
// Set a location header for a response.
|
|
640
640
|
response.setHeader('content-location', pathname);
|
|
641
641
|
// Process the approval and get the answer data about the remaining recommendations.
|
|
642
|
-
const answerData = await require(path.join(__dirname, '
|
|
642
|
+
const answerData = await require(path.join(__dirname, 'web', 'enqueue', 'index'))
|
|
643
643
|
.answer(url, what, authCode);
|
|
644
644
|
// If the answer data are valid:
|
|
645
645
|
if (answerData.status === 'ok') {
|
|
@@ -664,9 +664,10 @@ const requestHandler = async (request, response) => {
|
|
|
664
664
|
await fs.writeFile(path.join(jobsPath, 'recs.json'), getJSON(recs));
|
|
665
665
|
});
|
|
666
666
|
// Set a location header for a response.
|
|
667
|
-
response.setHeader('content-location', '/
|
|
667
|
+
response.setHeader('content-location', '/enqueueForm.html');
|
|
668
668
|
// Get the answer data.
|
|
669
|
-
const answerData = await require(path.join(__dirname, '
|
|
669
|
+
const answerData = await require(path.join(__dirname, 'web', 'enqueueForm', 'index'))
|
|
670
|
+
.answer();
|
|
670
671
|
// Serve the test-order form with the remaining recommendations.
|
|
671
672
|
response.end(answerData.answerPage);
|
|
672
673
|
}
|
|
@@ -683,7 +684,7 @@ const requestHandler = async (request, response) => {
|
|
|
683
684
|
// Set headers for a response.
|
|
684
685
|
setHeaders('text/html', pathname, 'ultra');
|
|
685
686
|
// Get the answer data.
|
|
686
|
-
const answerData = await require(path.join(__dirname, 'reannotate', 'index'))
|
|
687
|
+
const answerData = await require(path.join(__dirname, 'web', 'reannotate', 'index'))
|
|
687
688
|
.answer(authCode);
|
|
688
689
|
// If the answer data are valid:
|
|
689
690
|
if (answerData.status === 'ok') {
|
|
@@ -697,12 +698,12 @@ const requestHandler = async (request, response) => {
|
|
|
697
698
|
}
|
|
698
699
|
}
|
|
699
700
|
// Otherwise, if it is a WCAG map renewal:
|
|
700
|
-
else if (pageName === '
|
|
701
|
+
else if (pageName === 'renewWCAG.html') {
|
|
701
702
|
const {authCode} = postData;
|
|
702
703
|
// Set headers for a response.
|
|
703
704
|
setHeaders('text/html', pathname, 'low');
|
|
704
705
|
// Get the answer data.
|
|
705
|
-
const answerData = await require(path.join(__dirname, '
|
|
706
|
+
const answerData = await require(path.join(__dirname, 'web', 'renewWCAG', 'index'))
|
|
706
707
|
.answer(authCode);
|
|
707
708
|
// If the answer data are valid:
|
|
708
709
|
if (answerData.status === 'ok') {
|
package/llms-full.txt
CHANGED
|
@@ -59,13 +59,13 @@ In the marketplace for MCP servers that test for front-end quality, all servers
|
|
|
59
59
|
Kilotest offers a comprehensive suite of capabilities to users via its web UI:
|
|
60
60
|
|
|
61
61
|
- [Home page](https://kilotest.com/)
|
|
62
|
-
- [Get summary test results for all tested pages](https://kilotest.com/
|
|
63
|
-
- Get statistics about issues reported in one report: `https://kilotest.com/
|
|
64
|
-
- Get details about one issue reported in one report: `https://kilotest.com/
|
|
65
|
-
- Get diagnoses by rule engines of rule violations for one HTML element exhibiting one issue in one report: `https://kilotest.com/
|
|
66
|
-
- [Recommend the testing of a not-yet-tested page](https://kilotest.com/
|
|
67
|
-
- Recommend the retesting of a previously tested page: `https://kilotest.com/
|
|
68
|
-
- [Get statistics about frequently reported issues across all pages](https://kilotest.com/
|
|
62
|
+
- [Get summary test results for all tested pages](https://kilotest.com/listReports.html)
|
|
63
|
+
- Get statistics about issues reported in one report: `https://kilotest.com/listIssues.html/{timeStamp}/{jobID}`
|
|
64
|
+
- Get details about one issue reported in one report: `https://kilotest.com/listViolators.html/{issueID}/{timeStamp}/{jobID}`
|
|
65
|
+
- Get diagnoses by rule engines of rule violations for one HTML element exhibiting one issue in one report: `https://kilotest.com/listDiagnoses.html/{issueID}/{timeStamp}/{jobID}/{catalogIndex}`
|
|
66
|
+
- [Recommend the testing of a not-yet-tested page](https://kilotest.com/requestTestForm.html)
|
|
67
|
+
- Recommend the retesting of a previously tested page: `https://kilotest.com/requestRetestForm.html/{timeStamp}/{jobID}`
|
|
68
|
+
- [Get statistics about frequently reported issues across all pages](https://kilotest.com/listTopIssues.html)
|
|
69
69
|
- [Get a list of the operations that Kilotest managers are authorized to request](https://kilotest.com/manage.html)
|
|
70
70
|
- [Tutorial, “Accessibility testing strategies”](https://kilotest.com/tutorial.html)
|
|
71
71
|
- [Tutorial, “QAI tutorial”](https://kilotest.com/qai/)
|
|
@@ -145,7 +145,7 @@ When you request a test or a retest:
|
|
|
145
145
|
- rejection
|
|
146
146
|
- how to confirm approval
|
|
147
147
|
- check test completion by calling `listReports` and looking for the page and completion date in the list
|
|
148
|
-
- you advise the user to check in approximately 1 day for the test results on the Kilotest website, starting at `https://kilotest.com/
|
|
148
|
+
- you advise the user to check in approximately 1 day for the test results on the Kilotest website, starting at `https://kilotest.com/listReports.html`
|
|
149
149
|
|
|
150
150
|
An [OpenAPI specification for Kilotest](https://kilotest.com/openapi.yaml) is available.
|
|
151
151
|
|
package/llms.txt
CHANGED
|
@@ -19,15 +19,15 @@ Kilotest helps language models and AI platforms to give thorough, accurate and t
|
|
|
19
19
|
|
|
20
20
|
## Web UI
|
|
21
21
|
|
|
22
|
-
- [List all available reports](https://kilotest.com/
|
|
23
|
-
- List all issues in one report: `https://kilotest.com/
|
|
24
|
-
- List all elements exhibiting one issue in one report: `https://kilotest.com/
|
|
25
|
-
- List all diagnoses of one element exhibiting one issue in one report: `https://kilotest.com/
|
|
22
|
+
- [List all available reports](https://kilotest.com/listReports.html)
|
|
23
|
+
- List all issues in one report: `https://kilotest.com/listIssues.html/{timeStamp}/{jobID}`
|
|
24
|
+
- List all elements exhibiting one issue in one report: `https://kilotest.com/listViolators.html/{issueID}/{timeStamp}/{jobID}`
|
|
25
|
+
- List all diagnoses of one element exhibiting one issue in one report: `https://kilotest.com/listDiagnoses.html/{issueID}/{timeStamp}/{jobID}/{catalogIndex}`
|
|
26
26
|
- Get one full report in JSON: `https://kilotest.com/fullReport.json/{timeStamp}/{jobID}`
|
|
27
|
-
- [Request testing of a web page](https://kilotest.com/
|
|
28
|
-
- Request retesting of a web page: `https://kilotest.com/
|
|
27
|
+
- [Request testing of a web page](https://kilotest.com/requestTestForm.html)
|
|
28
|
+
- Request retesting of a web page: `https://kilotest.com/requestRetestForm.html/{timeStamp}/{jobID}`
|
|
29
29
|
- [List the operations that Kilotest managers are authorized to request](https://kilotest.com/manage.html)
|
|
30
|
-
- [Provide statistics about frequently reported issues across all pages](https://kilotest.com/
|
|
30
|
+
- [Provide statistics about frequently reported issues across all pages](https://kilotest.com/listTopIssues.html)
|
|
31
31
|
- [Tutorial, “Accessibility testing strategies”](https://kilotest.com/tutorial.html)
|
|
32
32
|
|
|
33
33
|
## More documents
|
package/package.json
CHANGED
package/robots.txt
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
User-agent: *
|
|
3
3
|
Allow: /
|
|
4
4
|
Disallow: /ai0BalanceForm.html
|
|
5
|
-
Disallow: /
|
|
5
|
+
Disallow: /enqueueForm.html
|
|
6
6
|
Disallow: /recAction.html
|
|
7
7
|
Disallow: /reannotateForm.html
|
|
8
8
|
Disallow: /reannotate.html
|
|
9
|
-
Disallow: /
|
|
10
|
-
Disallow: /
|
|
11
|
-
Disallow: /
|
|
12
|
-
Disallow: /
|
|
13
|
-
Disallow: /
|
|
14
|
-
Disallow: /
|
|
15
|
-
Disallow: /
|
|
9
|
+
Disallow: /hideReportForm.html
|
|
10
|
+
Disallow: /unhideReportForm.html
|
|
11
|
+
Disallow: /pruneReportsForm.html
|
|
12
|
+
Disallow: /rewindReportsForm.html
|
|
13
|
+
Disallow: /expungeReportsForm.html
|
|
14
|
+
Disallow: /renewWCAGForm.html
|
|
15
|
+
Disallow: /renewWCAG.html
|
|
16
16
|
Sitemap: https://kilotest.com/sitemap.xml
|
package/sitemap.xml
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<!-- sitemap.xml -->
|
|
2
2
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
3
|
<url><loc>https://kilotest.com/</loc></url>
|
|
4
|
-
<url><loc>https://kilotest.com/
|
|
5
|
-
<url><loc>https://kilotest.com/
|
|
6
|
-
<url><loc>https://kilotest.com/
|
|
4
|
+
<url><loc>https://kilotest.com/listReports.html</loc></url>
|
|
5
|
+
<url><loc>https://kilotest.com/listTopIssues.html</loc></url>
|
|
6
|
+
<url><loc>https://kilotest.com/requestTestForm.html</loc></url>
|
|
7
7
|
<url><loc>https://kilotest.com/manage.html</loc></url>
|
|
8
8
|
<url><loc>https://kilotest.com/tutorial.html</loc></url>
|
|
9
9
|
<url><loc>https://kilotest.com/openapi.yaml</loc></url>
|
package/util.js
CHANGED
|
@@ -339,12 +339,12 @@ const objectSort = exports.objectSort = (objects, property, sortType) => objects
|
|
|
339
339
|
// Otherwise, do not sort.
|
|
340
340
|
return 0;
|
|
341
341
|
});
|
|
342
|
-
// Processes a test or retest
|
|
343
|
-
exports.
|
|
342
|
+
// Processes a test or retest request in the UI.
|
|
343
|
+
exports.processTestRequest = async (testType, dirName, what, url, why) => {
|
|
344
344
|
// If the recommendation is valid:
|
|
345
345
|
if (
|
|
346
346
|
['test', 'retest'].includes(testType)
|
|
347
|
-
&& ['
|
|
347
|
+
&& ['Test', 'Retest'].some(end => dirName.endsWith(end))
|
|
348
348
|
&& what
|
|
349
349
|
&& isURL(url)
|
|
350
350
|
&& why.length > 4
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
|
|
8
8
|
const fs = require('fs/promises');
|
|
9
9
|
const path = require('path');
|
|
10
|
-
const {getJSON} = require('
|
|
10
|
+
const {getJSON} = require('../../util');
|
|
11
11
|
|
|
12
12
|
// CONSTANTS
|
|
13
13
|
|
|
14
|
-
const balancePath = path.join(__dirname, '
|
|
14
|
+
const balancePath = path.join(__dirname, '../../ai0Balance.json');
|
|
15
15
|
|
|
16
16
|
// FUNCTIONS
|
|
17
17
|
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
Implements a
|
|
3
|
+
Implements a test request approval.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
7
7
|
|
|
8
|
-
const {
|
|
8
|
+
const {
|
|
9
|
+
getJSON, getNowStamp, getRandomString, getRecs, isURL, jobsPath, recsLock
|
|
10
|
+
} = require('../../util');
|
|
9
11
|
const fs = require('fs/promises');
|
|
10
12
|
const path = require('path');
|
|
11
13
|
|
|
12
14
|
// FUNCTIONS
|
|
13
15
|
|
|
14
|
-
// Implements a test
|
|
16
|
+
// Implements a test request approval and returns a revised request page.
|
|
15
17
|
exports.answer = async (url, what, authCode) => {
|
|
16
18
|
// If the arguments are valid:
|
|
17
19
|
if (isURL(url) && what && authCode === process.env.AUTH_CODE) {
|
|
18
20
|
// Get the job template.
|
|
19
|
-
const jobTemplateJSON = await fs.readFile(path.join(__dirname, '..', 'job.json'), 'utf8');
|
|
21
|
+
const jobTemplateJSON = await fs.readFile(path.join(__dirname, '..', '..', 'job.json'), 'utf8');
|
|
20
22
|
const job = JSON.parse(jobTemplateJSON);
|
|
21
23
|
const nowStamp = getNowStamp();
|
|
22
24
|
// Populate the template with job properties.
|
|
@@ -40,7 +42,7 @@ exports.answer = async (url, what, authCode) => {
|
|
|
40
42
|
await recsLock(async () => {
|
|
41
43
|
// Get the recommendations.
|
|
42
44
|
const recs = await getRecs();
|
|
43
|
-
// Delete the recommendations to
|
|
45
|
+
// Delete the recommendations to test the target.
|
|
44
46
|
delete recs[url];
|
|
45
47
|
// Save the revised recommendations.
|
|
46
48
|
await fs.writeFile(path.join(jobsPath, 'recs.json'), getJSON(recs));
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<main>
|
|
15
15
|
<h1><a href="/">Kilotest</a>: Recommendation approval or rejection</h1>
|
|
16
16
|
<p>To approve a test or retest recommendation, check its recommended page name.</p>
|
|
17
|
-
<p>To approve testing a page that is not yet recommended, first <a href="
|
|
17
|
+
<p>To approve testing a page that is not yet recommended, first <a href="listReports.html">recommend it</a>.</p>
|
|
18
18
|
<p>To reject all recommendations for a page, check the radio button of its URL.</p>
|
|
19
19
|
<form action="/recAction.html" method="post">
|
|
20
20
|
<fieldset>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
Serves a form for
|
|
3
|
+
Serves a form for approving or rejecting a test request.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
7
7
|
|
|
8
|
-
const {getRecs} = require('
|
|
8
|
+
const {getRecs} = require('../../util');
|
|
9
9
|
const fs = require('fs/promises');
|
|
10
10
|
const path = require('path');
|
|
11
11
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
7
7
|
|
|
8
|
-
const {getReportData, makeReportsExtract, objectSort, reportsPath} = require('
|
|
8
|
+
const {getReportData, makeReportsExtract, objectSort, reportsPath} = require('../../util');
|
|
9
9
|
const fs = require('fs/promises');
|
|
10
10
|
const path = require('path');
|
|
11
11
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<main>
|
|
15
15
|
<h1><a href="/">Kilotest</a>: Classify report as experimental</h1>
|
|
16
16
|
<p>Choose a report to classify as experimental.</p>
|
|
17
|
-
<form action="/
|
|
17
|
+
<form action="/hideReportForm.html">
|
|
18
18
|
<fieldset>
|
|
19
19
|
<legend>Reports</legend>
|
|
20
20
|
__reports__
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
7
7
|
|
|
8
|
-
const {getReportExtracts, hiddenReportsPath, makeReportsExtract, reportsPath} = require('
|
|
8
|
+
const {getReportExtracts, hiddenReportsPath, makeReportsExtract, reportsPath} = require('../../util');
|
|
9
9
|
const fs = require('fs/promises');
|
|
10
10
|
const path = require('path');
|
|
11
11
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
Lists the diagnoses of a violator of an issue in a report.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
@@ -14,7 +14,7 @@ const {
|
|
|
14
14
|
htmlSafe,
|
|
15
15
|
isHidden,
|
|
16
16
|
tools
|
|
17
|
-
} = require('
|
|
17
|
+
} = require('../../util');
|
|
18
18
|
const {issues: issueSpecs} = require('testaro-issues');
|
|
19
19
|
const fs = require('fs/promises');
|
|
20
20
|
const path = require('path');
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
<li>__testInfo__</li>
|
|
20
20
|
__preventions__
|
|
21
21
|
</ul>
|
|
22
|
-
<p><a href="/
|
|
22
|
+
<p><a href="/requestRetestForm.html/__timeStamp__/__jobID__">Should Kilotest retest the page?</a></p>
|
|
23
23
|
<h2>Issues reported</h2>
|
|
24
24
|
<h3>Summary</h3>
|
|
25
25
|
<p>__reporterCount__ reported issues (__reporters__)</p>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
List the issues in a report.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
@@ -17,7 +17,7 @@ const {
|
|
|
17
17
|
isValidReport,
|
|
18
18
|
objectSort,
|
|
19
19
|
tools
|
|
20
|
-
} = require('
|
|
20
|
+
} = require('../../util');
|
|
21
21
|
const {issues: issueSpecs} = require('testaro-issues');
|
|
22
22
|
const fs = require('fs/promises');
|
|
23
23
|
const path = require('path');
|
|
@@ -252,7 +252,7 @@ const populateQuery = async (timeStamp, jobID, query) => {
|
|
|
252
252
|
detailsLines.push(`${margin} <ul class="nav">`);
|
|
253
253
|
const whereQuestionString = 'Where was the issue found?';
|
|
254
254
|
const labelString = `Where was the ${summary} issue found on the ${what} page?`;
|
|
255
|
-
const href = `href="/
|
|
255
|
+
const href = `href="/listViolators.html/${issueID}/${timeStamp}/${jobID}"`;
|
|
256
256
|
const label = `aria-label="${labelString}"`;
|
|
257
257
|
const whereLink = `<a ${href} ${label}>${whereQuestionString}</a>`;
|
|
258
258
|
// Add a violations link to the lines.
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
__recs__
|
|
19
19
|
</ol>
|
|
20
20
|
<p>__noRecs__</p>
|
|
21
|
-
<p>Should Kilotest <a href="
|
|
21
|
+
<p>Should Kilotest <a href="requestTestForm.html">test a page</a> that is not listed below?</p>
|
|
22
22
|
<h2>Queued for testing</h2>
|
|
23
23
|
<ol>
|
|
24
24
|
__queue__
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
Lists all available reports.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
@@ -18,7 +18,7 @@ const {
|
|
|
18
18
|
isRecommendable,
|
|
19
19
|
jobsPath,
|
|
20
20
|
objectSort
|
|
21
|
-
} = require('
|
|
21
|
+
} = require('../../util');
|
|
22
22
|
const fs = require('fs/promises');
|
|
23
23
|
const path = require('path');
|
|
24
24
|
|
|
@@ -51,7 +51,7 @@ const populateQuery = async query => {
|
|
|
51
51
|
query.recs = lines.recs.join('\n');
|
|
52
52
|
// Add a no-recommendations message, if applicable, to the query.
|
|
53
53
|
query.noRecs = lines.recs.length
|
|
54
|
-
? 'Kilotest managers can <a href="
|
|
54
|
+
? 'Kilotest managers can <a href="enqueueForm.html">approve or reject a recommendation</a>.'
|
|
55
55
|
: 'No recommendations await approval now.';
|
|
56
56
|
// Get the file names of all queued and claimed jobs.
|
|
57
57
|
const jobFileNames = await getJobNames();
|
|
@@ -116,16 +116,16 @@ const populateQuery = async query => {
|
|
|
116
116
|
lines.tested.push(`${margin} <li>URL: ${urlLink}</li>`);
|
|
117
117
|
// Add facts about the report to the lines.
|
|
118
118
|
lines.tested.push(`${margin} <li>${testInfo}</li>`);
|
|
119
|
-
// If the page prevented any
|
|
119
|
+
// If the page prevented any rule engine from performing its tests:
|
|
120
120
|
if (preventedToolCount) {
|
|
121
121
|
// Add this to the lines.
|
|
122
|
-
const
|
|
122
|
+
const engineCountString = getCountString(preventedToolCount, 'rule engine', 'rule engines');
|
|
123
123
|
lines.tested.push(
|
|
124
|
-
`${margin} <li>Page not testable by ${
|
|
124
|
+
`${margin} <li>Page not testable by ${engineCountString} (${preventedToolNames.join(' + ')})</li>`,
|
|
125
125
|
);
|
|
126
126
|
}
|
|
127
127
|
// Add facts about the test results to the lines.
|
|
128
|
-
let reporterString = `${getCountString(reporterCount, '
|
|
128
|
+
let reporterString = `${getCountString(reporterCount, 'rule engine', 'rule engines')} reported issues`;
|
|
129
129
|
if (reporterCount) {
|
|
130
130
|
const reporterNamesString = reporterNames.join(' + ');
|
|
131
131
|
reporterString = `${reporterString} (${reporterNamesString})`;
|
|
@@ -140,7 +140,7 @@ const populateQuery = async query => {
|
|
|
140
140
|
// If any issues were reported:
|
|
141
141
|
if (issueCount) {
|
|
142
142
|
// Add a question link about the reported issues to the lines.
|
|
143
|
-
const href = `href="
|
|
143
|
+
const href = `href="listIssues.html/${timeStamp}/${jobID}"`;
|
|
144
144
|
const label = `aria-label="What ${issueCountString} reported for the ${what} page?"`;
|
|
145
145
|
const questionString = issueCount === 1 ? 'was the issue' : 'were the issues';
|
|
146
146
|
const link = `<a ${href} ${label}>What ${questionString}?</a>`;
|
|
@@ -156,7 +156,7 @@ const populateQuery = async query => {
|
|
|
156
156
|
retestString = 'Currently in the queue for retesting';
|
|
157
157
|
}
|
|
158
158
|
else {
|
|
159
|
-
const href = `/
|
|
159
|
+
const href = `/requestRetestForm.html/${timeStamp}/${jobID}`;
|
|
160
160
|
const retestContent = 'Should Kilotest retest the page?';
|
|
161
161
|
retestString = `<a href="${href}">${retestContent}</a>`;
|
|
162
162
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
List the rules belonging to an issue.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
@@ -9,7 +9,7 @@ const {
|
|
|
9
9
|
getWeightName,
|
|
10
10
|
htmlSafe,
|
|
11
11
|
ruleEngines
|
|
12
|
-
} = require('
|
|
12
|
+
} = require('../../util');
|
|
13
13
|
const {issues: issueSpecs, issueRules, rules: ruleSpecs} = require('testaro-issues');
|
|
14
14
|
const fs = require('fs/promises');
|
|
15
15
|
const path = require('path');
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
Lists the most commonly reported issues in all available latest reports.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
7
7
|
|
|
8
|
-
const {sendAlert} = require('
|
|
8
|
+
const {sendAlert} = require('../../alerts');
|
|
9
9
|
const {
|
|
10
10
|
getLatestReportExtracts,
|
|
11
11
|
getReport,
|
|
@@ -13,7 +13,7 @@ const {
|
|
|
13
13
|
getWCAGLink,
|
|
14
14
|
getWeightName,
|
|
15
15
|
objectSort,
|
|
16
|
-
} = require('
|
|
16
|
+
} = require('../../util');
|
|
17
17
|
const {issues: issueSpecs} = require('testaro-issues');
|
|
18
18
|
const fs = require('fs/promises');
|
|
19
19
|
const path = require('path');
|
|
@@ -143,7 +143,7 @@ const populateQuery = async query => {
|
|
|
143
143
|
lines.push(`${margin} <ul class="nav">`);
|
|
144
144
|
const linkText = 'What rules belong to this issue?';
|
|
145
145
|
const label = `What rules belong to the <q>${summary}</q> issue?`;
|
|
146
|
-
const href = `/
|
|
146
|
+
const href = `/listRules.html/${issueID}`;
|
|
147
147
|
lines.push(
|
|
148
148
|
`${margin} <li><a href="${href}" aria-label="${label}">${linkText}</a></li>`
|
|
149
149
|
);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
Lists the violators of an issue in a report.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
@@ -16,7 +16,7 @@ const {
|
|
|
16
16
|
htmlSafe,
|
|
17
17
|
isHidden,
|
|
18
18
|
makeBreakable,
|
|
19
|
-
} = require('
|
|
19
|
+
} = require('../../util');
|
|
20
20
|
const {issues: issueSpecs} = require('testaro-issues');
|
|
21
21
|
const fs = require('fs/promises');
|
|
22
22
|
const path = require('path');
|
|
@@ -151,7 +151,7 @@ const populateQuery = async (issueID, timeStamp, jobID, query) => {
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
const href
|
|
154
|
-
= `/
|
|
154
|
+
= `/listDiagnoses.html/${issueID}/${timeStamp}/${jobID}/${catalogIndex}?pathID=${pathID}`;
|
|
155
155
|
const questionString = 'What diagnoses were reported';
|
|
156
156
|
const labelString = `${questionString} for violator ${index + 1}?`;
|
|
157
157
|
lines.push(
|
|
@@ -15,17 +15,17 @@
|
|
|
15
15
|
<h1><a href="/">Kilotest</a> management</h1>
|
|
16
16
|
<p>Kilotest managers can:</p>
|
|
17
17
|
<ul class="nav">
|
|
18
|
-
<li><a href="/
|
|
18
|
+
<li><a href="/enqueueForm.html">Approve or reject a test recommendation</a></li>
|
|
19
19
|
<li><a href="/reannotateForm.html">
|
|
20
20
|
Reannotate reports to incorporate newly classified and reclassified rules
|
|
21
21
|
</a></li>
|
|
22
|
-
<li><a href="/
|
|
23
|
-
<li><a href="/
|
|
24
|
-
<li><a href="/
|
|
25
|
-
<li><a href="/
|
|
26
|
-
<li><a href="/
|
|
22
|
+
<li><a href="/pruneReportsForm.html">Delete superseded reports</a></li>
|
|
23
|
+
<li><a href="/rewindReportsForm.html">Delete latest superseding reports</a></li>
|
|
24
|
+
<li><a href="/expungeReportsForm.html">Delete sole reports</a></li>
|
|
25
|
+
<li><a href="/hideReportForm.html">Classify a report as experimental</a></li>
|
|
26
|
+
<li><a href="/unhideReportForm.html">Declassify a report as experimental</a></li>
|
|
27
27
|
<li><a href="/ai0BalanceForm.html">Record the current balance of AI service 0</a></li>
|
|
28
|
-
<li><a href="/
|
|
28
|
+
<li><a href="/renewWCAGForm.html">Renew the map of WCAG numeric to text identifiers</a></li>
|
|
29
29
|
</ul>
|
|
30
30
|
</main>
|
|
31
31
|
</body>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
Reannotates all available latest reports.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
7
7
|
|
|
8
|
-
const {annotateReport, getReportExtracts} = require('
|
|
8
|
+
const {annotateReport, getReportExtracts} = require('../../util');
|
|
9
9
|
const fs = require('fs/promises');
|
|
10
10
|
const path = require('path');
|
|
11
11
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
Serves a form to reannotate reports.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
7
7
|
|
|
8
|
-
const {getIssue, getReport, getReportExtracts} = require('
|
|
8
|
+
const {getIssue, getReport, getReportExtracts} = require('../../util');
|
|
9
9
|
const fs = require('fs/promises');
|
|
10
10
|
const path = require('path');
|
|
11
11
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
Renews the WCAG map
|
|
3
|
+
Renews the WCAG map.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
7
7
|
|
|
8
8
|
const fs = require('fs/promises');
|
|
9
9
|
const path = require('path');
|
|
10
|
-
const {getJSON} = require('
|
|
10
|
+
const {getJSON} = require('../../util');
|
|
11
11
|
|
|
12
12
|
// FUNCTIONS
|
|
13
13
|
|
|
@@ -36,7 +36,7 @@ exports.answer = async authCode => {
|
|
|
36
36
|
wcagMap[entry[2]] = entry[1];
|
|
37
37
|
}
|
|
38
38
|
// Save the map, replacing any existing one.
|
|
39
|
-
await fs.writeFile(path.join(__dirname, '..', 'wcagMap.json'), getJSON(wcagMap));
|
|
39
|
+
await fs.writeFile(path.join(__dirname, '..', '..', 'wcagMap.json'), getJSON(wcagMap));
|
|
40
40
|
// Get the acknowledgment page.
|
|
41
41
|
const answerPage = await fs.readFile(path.join(__dirname, 'index.html'), 'utf8');
|
|
42
42
|
// Return it.
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<main>
|
|
15
15
|
<h1><a href="/">Kilotest</a>: Renew WCAG map</h1>
|
|
16
16
|
<p>Submit this form to renew the map of WCAG numeric to text identifiers.</p>
|
|
17
|
-
<form action="/
|
|
17
|
+
<form action="/renewWCAG.html" method="post">
|
|
18
18
|
<p><label>
|
|
19
19
|
Authorization code: <input size="3" minLength="3" maxlength="3" name="authCode" required>
|
|
20
20
|
</label></p>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<p>Your recommendation to retest the __target__ page has been received.</p>
|
|
17
17
|
<p>The reason for your recommendation has been recorded as <q>__why__</q>.</p>
|
|
18
18
|
<p>Thank you for your recommendation.</p>
|
|
19
|
-
<p>If a <a href="/
|
|
19
|
+
<p>If a <a href="/enqueueForm.html">Kilotest manager approves this recommendation</a>, a test order will be added to the queue.</p>
|
|
20
20
|
<p>In most cases, if you check Kilotest again in 1 day, you will find that the recommended test has been performed.</p>
|
|
21
21
|
</main>
|
|
22
22
|
</body>
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
Records a retest request.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
7
7
|
|
|
8
|
-
const {getLatestReportExtracts,
|
|
8
|
+
const {getLatestReportExtracts, processTestRequest} = require('../../util');
|
|
9
9
|
|
|
10
10
|
// FUNCTIONS
|
|
11
11
|
|
|
12
|
-
// Records a retest recommendation and returns an acknowledgement page.
|
|
13
12
|
exports.answer = async (pageArgs, why) => {
|
|
14
13
|
const [timeStamp, jobID] = pageArgs.split('/');
|
|
15
14
|
// Get data on the latest available reports.
|
|
@@ -27,6 +26,6 @@ exports.answer = async (pageArgs, why) => {
|
|
|
27
26
|
message: error
|
|
28
27
|
};
|
|
29
28
|
}
|
|
30
|
-
// Otherwise, i.e. if it succeeded, process the
|
|
31
|
-
return await
|
|
29
|
+
// Otherwise, i.e. if it succeeded, process the request.
|
|
30
|
+
return await processTestRequest('retest', __dirname, what, url, why);
|
|
32
31
|
};
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
<body>
|
|
14
14
|
<main>
|
|
15
15
|
<h1><a href="/">Kilotest</a>: Retest recommendation for __target__</h1>
|
|
16
|
-
<p>The __target__ page was <a href="/
|
|
16
|
+
<p>The __target__ page was <a href="/listIssues.html/__timeStamp__/__jobID__">last tested</a> __ago__ ago by job <code>__jobID__</code> on __dateTime__.</p>
|
|
17
17
|
<p>To recommend a retest, submit the following form.</p>
|
|
18
|
-
<form action="/
|
|
18
|
+
<form action="/requestRetest.html/__timeStamp__/__jobID__" method="post">
|
|
19
19
|
<p><label>
|
|
20
20
|
Why retest the page (answer required)?<br>
|
|
21
21
|
<input size="70" minlength="5" maxlength="100" name="why" required>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
Serves a form for requesting a retest.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
7
7
|
|
|
8
|
-
const {getAgoString, getDateTimeString, getLatestReportExtracts} = require('
|
|
8
|
+
const {getAgoString, getDateTimeString, getLatestReportExtracts} = require('../../util');
|
|
9
9
|
const fs = require('fs/promises');
|
|
10
10
|
const path = require('path');
|
|
11
11
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<p>Your recommendation to test the __target__ page has been received.</p>
|
|
17
17
|
<p>The reason for your recommendation has been recorded as <q>__why__</q>.</p>
|
|
18
18
|
<p>Thank you for your recommendation.</p>
|
|
19
|
-
<p>If a <a href="/
|
|
19
|
+
<p>If a <a href="/enqueueForm.html">Kilotest manager approves this recommendation</a>, a test order will be added to the queue.</p>
|
|
20
20
|
<p>In most cases, if you check Kilotest again in 1 day, you will find that the recommended job has been performed.</p>
|
|
21
21
|
</main>
|
|
22
22
|
</body>
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
Records a test request.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
7
7
|
|
|
8
|
-
const {isRecommendable,
|
|
8
|
+
const {isRecommendable, processTestRequest} = require('../../util');
|
|
9
9
|
|
|
10
10
|
// FUNCTIONS
|
|
11
11
|
|
|
12
|
-
// Records a test recommendation and returns an acknowledgement page.
|
|
13
12
|
exports.answer = async (what, url, why) => {
|
|
14
13
|
const status = await isRecommendable(url);
|
|
15
|
-
// If the target is already claimed or queued and is thus not
|
|
14
|
+
// If the target is already claimed or queued and is thus not requestable:
|
|
16
15
|
if (status) {
|
|
17
16
|
// Return an answer reporting this.
|
|
18
17
|
return {
|
|
@@ -20,6 +19,6 @@ exports.answer = async (what, url, why) => {
|
|
|
20
19
|
message: `Page is already ${status}`
|
|
21
20
|
};
|
|
22
21
|
}
|
|
23
|
-
// Otherwise, i.e. if it is
|
|
24
|
-
return await
|
|
22
|
+
// Otherwise, i.e. if it is requestable, process the request.
|
|
23
|
+
return await processTestRequest('test', __dirname, what, url, why);
|
|
25
24
|
};
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<main>
|
|
15
15
|
<h1><a href="/">Kilotest</a>: Test recommendation</h1>
|
|
16
16
|
<p>You may recommend a web page for testing by submitting the following form. All answers are required.</p>
|
|
17
|
-
<form action="/
|
|
17
|
+
<form action="/requestTest.html" method="post">
|
|
18
18
|
<p><label>
|
|
19
19
|
Propose a name for the page.<br>
|
|
20
20
|
<input size="50" maxlength="70" name="what" required>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
Serves a form for requesting a test.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
@@ -10,9 +10,8 @@ const path = require('path');
|
|
|
10
10
|
|
|
11
11
|
// FUNCTIONS
|
|
12
12
|
|
|
13
|
-
// Returns a test recommendation form.
|
|
14
13
|
exports.answer = async () => {
|
|
15
|
-
// Get the
|
|
14
|
+
// Get the test request form template.
|
|
16
15
|
let answerPage = await fs.readFile(path.join(__dirname, 'index.html'), 'utf8');
|
|
17
16
|
// Return it.
|
|
18
17
|
return {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/*
|
|
2
2
|
index.js
|
|
3
|
-
|
|
3
|
+
Serves the tutorial and saves tutorial comments.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// IMPORTS
|
|
7
7
|
|
|
8
|
-
const {sendAlert} = require('
|
|
9
|
-
const {getJSON, getNowStamp} = require('
|
|
8
|
+
const {sendAlert} = require('../../alerts');
|
|
9
|
+
const {getJSON, getNowStamp} = require('../../util');
|
|
10
10
|
const fs = require('fs/promises');
|
|
11
11
|
const path = require('path');
|
|
12
12
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<main>
|
|
15
15
|
<h1><a href="/">Kilotest</a>: Declassify report as experimental</h1>
|
|
16
16
|
<p>Choose a report to declassify as experimental.</p>
|
|
17
|
-
<form action="/
|
|
17
|
+
<form action="/unhideReportForm.html">
|
|
18
18
|
<fieldset>
|
|
19
19
|
<legend>Reports</legend>
|
|
20
20
|
__reports__
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|