Skip to content
This repository was archived by the owner on Apr 11, 2022. It is now read-only.

Commit dd9e57d

Browse files
authored
Merge pull request #1 from kmyk/develop
まともにした
2 parents 0b162ef + 640356d commit dd9e57d

File tree

3 files changed

+107
-22
lines changed

3 files changed

+107
-22
lines changed

index.user.js

Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,36 @@
11
// ==UserScript==
22
// @name AtCoder dos2unix UserScript
33
// @namespace https://github.com/kmyk
4-
// @version 1.1
4+
// @version 1.2
55
// @description submit code using LF instead of CRLF
66
// @author Kimiyuki Onaka
7-
// @match *://beta.atcoder.jp/contests/*/submit
7+
// @match *://beta.atcoder.jp/contests/*/submit*
88
// @match *://beta.atcoder.jp/contests/*/tasks/*
9+
// @match *://*.contest.atcoder.jp/submit*
910
// ==/UserScript==
10-
function main() {
11+
function post(path, payload, expectedURL) {
12+
const xhr = new XMLHttpRequest();
13+
xhr.open("POST", path, false);
14+
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
15+
xhr.send(payload);
16+
console.log(xhr);
17+
if (xhr.responseURL == expectedURL) {
18+
location.href = xhr.responseURL;
19+
}
20+
else {
21+
alert("AtCoder dos2unix UserScript: something wrong / なんか変だよ");
22+
}
23+
}
24+
function beta() {
1125
const taskScreenName = document.getElementsByName("data.TaskScreenName")[0];
1226
const languageId = document.getElementsByName("data.LanguageId")[0];
1327
const sourceCode = document.getElementsByName("sourceCode")[0];
1428
const csrfToken = document.getElementsByName("csrf_token")[0];
1529
const submit = document.getElementById("submit");
30+
submit.innerText += " (dos2unix)";
1631
submit.addEventListener("click", function (e) {
1732
e.preventDefault();
1833
const contestId = location.pathname.split('/')[2];
19-
const path = "/contests/" + contestId + "/submit";
2034
const data = [];
2135
for (const tag of [taskScreenName, languageId, sourceCode, csrfToken]) {
2236
var value = tag.value;
@@ -28,12 +42,39 @@ function main() {
2842
}
2943
const payload = data.join('&');
3044
console.log(payload);
31-
const xhr = new XMLHttpRequest();
32-
xhr.open("POST", path, false);
33-
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
34-
xhr.send(payload);
35-
console.log(xhr);
36-
location.href = xhr.responseURL;
45+
const path = "/contests/" + contestId + "/submit";
46+
const expectedURL = location.origin + "/contests/" + contestId + "/submissions/me";
47+
post(path, payload, expectedURL);
48+
});
49+
}
50+
function alpha() {
51+
const session = document.getElementsByName("__session")[0];
52+
const taskId = document.getElementsByName("task_id")[0];
53+
const languageId207 = document.getElementsByName("language_id_207")[0];
54+
const languageId2520 = document.getElementsByName("language_id_2520")[0];
55+
const sourceCode = document.getElementsByName("source_code")[0];
56+
const submit = document.getElementsByTagName("button")[0];
57+
submit.innerText += " (dos2unix)";
58+
submit.addEventListener("click", function (e) {
59+
e.preventDefault();
60+
const data = [];
61+
for (const tag of [session, taskId, languageId207, languageId2520, sourceCode]) {
62+
data.push(tag.name + '=' + encodeURIComponent(tag.value));
63+
console.log([tag.name, tag.value]);
64+
}
65+
const payload = data.join('&');
66+
console.log(payload);
67+
const path = "/submit?task_id=" + taskId.value;
68+
const expectedURL = location.origin + "/submissions/me";
69+
post(path, payload, expectedURL);
3770
});
3871
}
72+
function main() {
73+
if (location.hostname == "beta.atcoder.jp") {
74+
beta();
75+
}
76+
else {
77+
alpha();
78+
}
79+
}
3980
main();

index.user.ts

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,42 @@
11
// ==UserScript==
22
// @name AtCoder dos2unix UserScript
33
// @namespace https://github.com/kmyk
4-
// @version 1.1
4+
// @version 1.2
55
// @description submit code using LF instead of CRLF
66
// @author Kimiyuki Onaka
7-
// @match *://beta.atcoder.jp/contests/*/submit
7+
// @match *://beta.atcoder.jp/contests/*/submit*
88
// @match *://beta.atcoder.jp/contests/*/tasks/*
9+
// @match *://*.contest.atcoder.jp/submit*
910
// ==/UserScript==
1011

1112
declare const $ : any;
1213

13-
function main(): void {
14+
function post(path: string, payload: string, expectedURL: string): void {
15+
const xhr = new XMLHttpRequest();
16+
xhr.open("POST", path, false);
17+
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
18+
xhr.send(payload);
19+
console.log(xhr);
20+
21+
if (xhr.responseURL == expectedURL) {
22+
location.href = xhr.responseURL;
23+
} else {
24+
alert ("AtCoder dos2unix UserScript: something wrong / なんか変だよ");
25+
}
26+
}
27+
28+
function beta(): void {
1429
const taskScreenName = <HTMLInputElement>document.getElementsByName("data.TaskScreenName")[0];
1530
const languageId = <HTMLInputElement>document.getElementsByName("data.LanguageId")[0];
1631
const sourceCode = <HTMLInputElement>document.getElementsByName("sourceCode")[0];
1732
const csrfToken = <HTMLInputElement>document.getElementsByName("csrf_token")[0];
1833

1934
const submit = document.getElementById("submit");
35+
submit.innerText += " (dos2unix)";
2036
submit.addEventListener("click", function (e) {
2137
e.preventDefault();
2238

2339
const contestId = location.pathname.split('/')[2];
24-
const path = "/contests/" + contestId + "/submit";
2540
const data = [];
2641
for (const tag of [ taskScreenName, languageId, sourceCode, csrfToken ]) {
2742
var value = tag.value;
@@ -34,14 +49,44 @@ function main(): void {
3449
const payload = data.join('&');
3550
console.log(payload);
3651

37-
const xhr = new XMLHttpRequest();
38-
xhr.open("POST", path, false);
39-
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
40-
xhr.send(payload);
41-
console.log(xhr);
52+
const path = "/contests/" + contestId + "/submit";
53+
const expectedURL = location.origin + "/contests/" + contestId + "/submissions/me";
54+
post(path, payload, expectedURL);
55+
});
56+
}
4257

43-
location.href = xhr.responseURL;
58+
function alpha(): void {
59+
const session = <HTMLInputElement>document.getElementsByName("__session")[0];
60+
const taskId = <HTMLInputElement>document.getElementsByName("task_id")[0];
61+
const languageId207 = <HTMLInputElement>document.getElementsByName("language_id_207")[0];
62+
const languageId2520 = <HTMLInputElement>document.getElementsByName("language_id_2520")[0];
63+
const sourceCode = <HTMLInputElement>document.getElementsByName("source_code")[0];
64+
65+
const submit = document.getElementsByTagName("button")[0];
66+
submit.innerText += " (dos2unix)";
67+
submit.addEventListener("click", function (e) {
68+
e.preventDefault();
69+
70+
const data = [];
71+
for (const tag of [ session, taskId, languageId207, languageId2520, sourceCode ]) {
72+
data.push(tag.name + '=' + encodeURIComponent(tag.value));
73+
console.log([ tag.name, tag.value ]);
74+
}
75+
const payload = data.join('&');
76+
console.log(payload);
77+
78+
const path = "/submit?task_id=" + taskId.value;
79+
const expectedURL = location.origin + "/submissions/me";
80+
post(path, payload, expectedURL);
4481
});
4582
}
4683

84+
function main(): void {
85+
if (location.hostname == "beta.atcoder.jp") {
86+
beta();
87+
} else {
88+
alpha();
89+
}
90+
}
91+
4792
main();

readme.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,5 @@
33
AtCoderへの提出の際に、改行文字を `\r\n` でなく `\n` として提出します。golfに使ってください。
44

55
- install: <https://github.com/kmyk/atcoder-dos2unix-userscript/raw/master/index.user.js>
6-
- 面倒なので旧は対応していません。beta版でしか機能しません
7-
- コンテスト本番での使用は強く推奨しません。基本は自己責任でどうぞ
6+
- 基本は自己責任でどうぞ
87
- Unix環境に慣れているのなら[kmyk/online-judge-tools](https://github.com/kmyk/online-judge-tools)の利用を勧めます

0 commit comments

Comments
 (0)