This repository has been archived by the owner on Apr 9, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
atcoder-submission-status.js
62 lines (54 loc) · 2.49 KB
/
atcoder-submission-status.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// ==UserScript==
// @name AtCoder Submission Status
// @name:en AtCoder Submission Status
// @namespace https://github.com/9sako6/atcoder-userscripts
// @version 1.3
// @description AtCoderで提出した解答がいくつのテストケースでACか, WAか...が一目でわかるように表示する
// @description:en This script shows submission's statuses clearly!
// @author 9sako6
// @match https://atcoder.jp/contests/*/submissions/*
// @exclude https://atcoder.jp/contests/*/submissions/me
// @license MIT
// @supportURL https://github.com/9sako6/atcoder-userscripts/issues
// ==/UserScript==
function main() {
/**
* count each status
*/
const statusPanel = document.getElementsByClassName('panel-default')[2];
const testCaseElems = statusPanel.querySelector('tbody').querySelectorAll('tr');
const statusCounter = {};
testCaseElems.forEach((elem) => {
const statusCodeColumnNum = 1;
const statusCode = elem.querySelectorAll('td')[statusCodeColumnNum].querySelector('span').textContent;
statusCounter[statusCode] ? statusCounter[statusCode]++ : statusCounter[statusCode] = 1;
});
const statusCodes = Object.keys(statusCounter).sort();
/**
* Making result table.
* Don't use `<table></table>` to avoid conflict 'AtCoder TestCase Extension'.
*/
const testCasesCount = testCaseElems.length;
const rowWidthPercent = 100 / statusCodes.length;
const resultTable = `
<div id="added-result-panel" class="panel panel-default">
<div class="table table-bordered table-striped th-center">
<div style="width: 100%; display: flex;">
${statusCodes.map((status, index) => `<div style="width: ${rowWidthPercent}%; text-align: center; border: 0.1px solid #ddd; border-top: 0; border-bottom: 0; border-right: 0; ${index == 0 ? "border-left: 0;" : ""}">
<div style="line-height: 2em; border: 0.1px solid #ddd; border-top: 0; border-right: 0; border-left: 0; border-bottom: 1;">
<span class="label label-${status === 'AC' ? 'success' : 'warning'}" aria-hidden="true" data-toggle="tooltip" data-placement="top" style="text-align: center; line-height: 2em;">${status}</span>
</div>
<div style="line-height: 1.8em;">${statusCounter[status]}/${testCasesCount}</div>
</div>`).join('')}
</div>
</div>
</div>`;
statusPanel.insertAdjacentHTML("beforebegin", resultTable);
}
(function () {
try {
main();
} catch (_error) {
// noop
}
})();