Skip to content
This repository was archived by the owner on Apr 11, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 51 additions & 10 deletions index.user.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,36 @@
// ==UserScript==
// @name AtCoder dos2unix UserScript
// @namespace https://github.com/kmyk
// @version 1.1
// @version 1.2
// @description submit code using LF instead of CRLF
// @author Kimiyuki Onaka
// @match *://beta.atcoder.jp/contests/*/submit
// @match *://beta.atcoder.jp/contests/*/submit*
// @match *://beta.atcoder.jp/contests/*/tasks/*
// @match *://*.contest.atcoder.jp/submit*
// ==/UserScript==
function main() {
function post(path, payload, expectedURL) {
const xhr = new XMLHttpRequest();
xhr.open("POST", path, false);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(payload);
console.log(xhr);
if (xhr.responseURL == expectedURL) {
location.href = xhr.responseURL;
}
else {
alert("AtCoder dos2unix UserScript: something wrong / なんか変だよ");
}
}
function beta() {
const taskScreenName = document.getElementsByName("data.TaskScreenName")[0];
const languageId = document.getElementsByName("data.LanguageId")[0];
const sourceCode = document.getElementsByName("sourceCode")[0];
const csrfToken = document.getElementsByName("csrf_token")[0];
const submit = document.getElementById("submit");
submit.innerText += " (dos2unix)";
submit.addEventListener("click", function (e) {
e.preventDefault();
const contestId = location.pathname.split('/')[2];
const path = "/contests/" + contestId + "/submit";
const data = [];
for (const tag of [taskScreenName, languageId, sourceCode, csrfToken]) {
var value = tag.value;
Expand All @@ -28,12 +42,39 @@ function main() {
}
const payload = data.join('&');
console.log(payload);
const xhr = new XMLHttpRequest();
xhr.open("POST", path, false);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(payload);
console.log(xhr);
location.href = xhr.responseURL;
const path = "/contests/" + contestId + "/submit";
const expectedURL = location.origin + "/contests/" + contestId + "/submissions/me";
post(path, payload, expectedURL);
});
}
function alpha() {
const session = document.getElementsByName("__session")[0];
const taskId = document.getElementsByName("task_id")[0];
const languageId207 = document.getElementsByName("language_id_207")[0];
const languageId2520 = document.getElementsByName("language_id_2520")[0];
const sourceCode = document.getElementsByName("source_code")[0];
const submit = document.getElementsByTagName("button")[0];
submit.innerText += " (dos2unix)";
submit.addEventListener("click", function (e) {
e.preventDefault();
const data = [];
for (const tag of [session, taskId, languageId207, languageId2520, sourceCode]) {
data.push(tag.name + '=' + encodeURIComponent(tag.value));
console.log([tag.name, tag.value]);
}
const payload = data.join('&');
console.log(payload);
const path = "/submit?task_id=" + taskId.value;
const expectedURL = location.origin + "/submissions/me";
post(path, payload, expectedURL);
});
}
function main() {
if (location.hostname == "beta.atcoder.jp") {
beta();
}
else {
alpha();
}
}
main();
65 changes: 55 additions & 10 deletions index.user.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,42 @@
// ==UserScript==
// @name AtCoder dos2unix UserScript
// @namespace https://github.com/kmyk
// @version 1.1
// @version 1.2
// @description submit code using LF instead of CRLF
// @author Kimiyuki Onaka
// @match *://beta.atcoder.jp/contests/*/submit
// @match *://beta.atcoder.jp/contests/*/submit*
// @match *://beta.atcoder.jp/contests/*/tasks/*
// @match *://*.contest.atcoder.jp/submit*
// ==/UserScript==

declare const $ : any;

function main(): void {
function post(path: string, payload: string, expectedURL: string): void {
const xhr = new XMLHttpRequest();
xhr.open("POST", path, false);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(payload);
console.log(xhr);

if (xhr.responseURL == expectedURL) {
location.href = xhr.responseURL;
} else {
alert ("AtCoder dos2unix UserScript: something wrong / なんか変だよ");
}
}

function beta(): void {
const taskScreenName = <HTMLInputElement>document.getElementsByName("data.TaskScreenName")[0];
const languageId = <HTMLInputElement>document.getElementsByName("data.LanguageId")[0];
const sourceCode = <HTMLInputElement>document.getElementsByName("sourceCode")[0];
const csrfToken = <HTMLInputElement>document.getElementsByName("csrf_token")[0];

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

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

const xhr = new XMLHttpRequest();
xhr.open("POST", path, false);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(payload);
console.log(xhr);
const path = "/contests/" + contestId + "/submit";
const expectedURL = location.origin + "/contests/" + contestId + "/submissions/me";
post(path, payload, expectedURL);
});
}

location.href = xhr.responseURL;
function alpha(): void {
const session = <HTMLInputElement>document.getElementsByName("__session")[0];
const taskId = <HTMLInputElement>document.getElementsByName("task_id")[0];
const languageId207 = <HTMLInputElement>document.getElementsByName("language_id_207")[0];
const languageId2520 = <HTMLInputElement>document.getElementsByName("language_id_2520")[0];
const sourceCode = <HTMLInputElement>document.getElementsByName("source_code")[0];

const submit = document.getElementsByTagName("button")[0];
submit.innerText += " (dos2unix)";
submit.addEventListener("click", function (e) {
e.preventDefault();

const data = [];
for (const tag of [ session, taskId, languageId207, languageId2520, sourceCode ]) {
data.push(tag.name + '=' + encodeURIComponent(tag.value));
console.log([ tag.name, tag.value ]);
}
const payload = data.join('&');
console.log(payload);

const path = "/submit?task_id=" + taskId.value;
const expectedURL = location.origin + "/submissions/me";
post(path, payload, expectedURL);
});
}

function main(): void {
if (location.hostname == "beta.atcoder.jp") {
beta();
} else {
alpha();
}
}

main();
3 changes: 1 addition & 2 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,5 @@
AtCoderへの提出の際に、改行文字を `\r\n` でなく `\n` として提出します。golfに使ってください。

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