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
1112declare 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+
4792main ( ) ;
0 commit comments