AtCoderSubmitSearchSettings

add default settings for submit search

  1. // ==UserScript==
  2. // @name AtCoderSubmitSearchSettings
  3. // @namespace https://github.com/refine-P
  4. // @version 1.1.1
  5. // @description add default settings for submit search
  6. // @author fine
  7. // @license MIT
  8. // @include https://atcoder.jp/contests/*/submissions*
  9. // ==/UserScript==
  10. "use strict";
  11.  
  12. /*
  13. 使うときは検索の設定を変更してください
  14. 下にパラメータの一覧があるので参考にしてください
  15. */
  16.  
  17. // 検索の設定
  18. // var task = "";
  19. var language = "C++ (GCC 9.2.1)";
  20. var status = "AC";
  21. var user = "";
  22. var order = ""; // ソート基準、詳しくは下に
  23. var desc = false; // trueで降順にする
  24. var enableOldVersionLanguage = true; // 古いバージョンの言語の提出を検索可能にする
  25. var enableSearchWithDefaultSetting = true; // 「デフォルト設定で検索」 を有効に
  26.  
  27. /*
  28. 諸々のパラメータ一覧
  29. */
  30.  
  31. // 言語とクエリパラメータの対応関係
  32. // (言語のアップデートでこのあたりが変更されるかも?、Twitter等で教えてもらえれば対応します)
  33.  
  34. // 最新バージョン
  35. var languageValuesLatest = {
  36. "": "",
  37. "C (GCC 9.2.1)": "4001",
  38. "C (Clang 10.0.0)": "4002",
  39. "C++ (GCC 9.2.1)": "4003",
  40. "C++ (Clang 10.0.0)": "4004",
  41. "Java (OpenJDK 11.0.6)": "4005",
  42. "Python (3.8.2)": "4006",
  43. "Bash (5.0.11)": "4007",
  44. "bc (1.07.1)": "4008",
  45. "Awk (GNU Awk 4.1.4)": "4009",
  46. "C# (.NET Core 3.1.201)": "4010",
  47. "C# (Mono-mcs 6.8.0.105)": "4011",
  48. "C# (Mono-csc 3.5.0)": "4012",
  49. "Clojure (1.10.1.536)": "4013",
  50. "Crystal (0.33.0)": "4014",
  51. "D (DMD 2.091.0)": "4015",
  52. "D (GDC 9.2.1)": "4016",
  53. "D (LDC 1.20.1)": "4017",
  54. "Dart (2.7.2)": "4018",
  55. "dc (1.4.1)": "4019",
  56. "Erlang (22.3)": "4020",
  57. "Elixir (1.10.2)": "4021",
  58. "F# (.NET Core 3.1.201)": "4022",
  59. "F# (Mono 10.2.3)": "4023",
  60. "Forth (gforth 0.7.3)": "4024",
  61. "Fortran(GNU Fortran 9.2.1)": "4025",
  62. "Go (1.14.1)": "4026",
  63. "Haskell (GHC 8.8.3)": "4027",
  64. "Haxe (4.0.3); js": "4028",
  65. "Haxe (4.0.3); Java": "4029",
  66. "JavaScript (Node.js 12.16.1)": "4030",
  67. "Julia (1.4.0)": "4031",
  68. "Kotlin (1.3.71)": "4032",
  69. "Lua (Lua 5.3.5)": "4033",
  70. "Lua (LuaJIT 2.1.0)": "4034",
  71. "Dash (0.5.8)": "4035",
  72. "Nim (1.0.6)": "4036",
  73. "Objective-C (Clang 10.0.0)": "4037",
  74. "Common Lisp (SBCL 2.0.3)": "4038",
  75. "OCaml (4.10.0)": "4039",
  76. "Octave (5.2.0)": "4040",
  77. "Pascal (FPC 3.0.4)": "4041",
  78. "Perl (5.26.1)": "4042",
  79. "Raku (Rakudo 2020.02.1)": "4043",
  80. "PHP (7.4.4)": "4044",
  81. "Prolog (SWI-Prolog 8.0.3)": "4045",
  82. "PyPy2 (7.3.0)": "4046",
  83. "PyPy3 (7.3.0)": "4047",
  84. "Racket (7.6)": "4048",
  85. "Ruby (2.7.1)": "4049",
  86. "Rust (1.42.0)": "4050",
  87. "Scala (2.13.1)": "4051",
  88. "Java (OpenJDK 1.8.0)": "4052",
  89. "Scheme (Gauche 0.9.9)": "4053",
  90. "Standard ML (MLton 20130715)": "4054",
  91. "Swift (5.2.1)": "4055",
  92. "Text (cat 8.28)": "4056",
  93. "TypeScript (3.8)": "4057",
  94. "Visual Basic (.NET Core 3.1.101)": "4058",
  95. "Zsh (5.4.2)": "4059",
  96. "COBOL - Fixed (OpenCOBOL 1.1.0)": "4060",
  97. "COBOL - Free (OpenCOBOL 1.1.0)": "4061",
  98. "Brainfuck (bf 20041219)": "4062",
  99. "Ada2012 (GNAT 9.2.1)": "4063",
  100. "Unlambda (2.0.0)": "4064",
  101. "Cython (0.29.16)": "4065",
  102. "Sed (4.4)": "4066",
  103. "Vim (8.2.0460)": "4067"
  104. };
  105.  
  106. // 古いバージョン
  107. var languageValuesOld = {
  108. 'C++14 (GCC 5.4.1)': '3003',
  109. 'Bash (GNU bash v4.3.11)': '3001',
  110. 'C (GCC 5.4.1)': '3002',
  111. 'C (Clang 3.8.0)': '3004',
  112. 'C++14 (Clang 3.8.0)': '3005',
  113. 'C# (Mono 4.6.2.0)': '3006',
  114. 'Clojure (1.8.0)': '3007',
  115. 'Common Lisp (SBCL 1.1.14)': '3008',
  116. 'D (DMD64 v2.070.1)': '3009',
  117. 'D (LDC 0.17.0)': '3010',
  118. 'D (GDC 4.9.4)': '3011',
  119. 'Fortran (gfortran v4.8.4)': '3012',
  120. 'Go (1.6)': '3013',
  121. 'Haskell (GHC 7.10.3)': '3014',
  122. 'Java7 (OpenJDK 1.7.0)': '3015',
  123. 'Java8 (OpenJDK 1.8.0)': '3016',
  124. 'JavaScript (node.js v5.12)': '3017',
  125. 'OCaml (4.02.3)': '3018',
  126. 'Pascal (FPC 2.6.2)': '3019',
  127. 'Perl (v5.18.2)': '3020',
  128. 'PHP (5.6.30)': '3021',
  129. 'Python2 (2.7.6)': '3022',
  130. 'Python3 (3.4.3)': '3023',
  131. 'Ruby (2.3.3)': '3024',
  132. 'Scala (2.11.7)': '3025',
  133. 'Scheme (Gauche 0.9.3.3)': '3026',
  134. 'Text (cat)': '3027',
  135. 'Visual Basic (Mono 4.0.1)': '3028',
  136. 'C++ (GCC 5.4.1)': '3029',
  137. 'C++ (Clang 3.8.0)': '3030',
  138. 'Objective-C (GCC 5.3.0)': '3501',
  139. 'Objective-C (Clang3.8.0)': '3502',
  140. 'Swift (swift-2.2-RELEASE)': '3503',
  141. 'Rust (1.15.1)': '3504',
  142. 'Sed (GNU sed 4.2.2)': '3505',
  143. 'Awk (mawk 1.3.3)': '3506',
  144. 'Brainfuck (bf 20041219)': '3507',
  145. 'Standard ML (MLton 20100608)': '3508',
  146. 'PyPy2 (5.6.0)': '3509',
  147. 'PyPy3 (2.4.0)': '3510',
  148. 'Crystal (0.20.5)': '3511',
  149. 'F# (Mono 4.0)': '3512',
  150. 'Unlambda (0.1.3)': '3513',
  151. 'Lua (5.3.2)': '3514',
  152. 'LuaJIT (2.0.4)': '3515',
  153. 'MoonScript (0.5.0)': '3516',
  154. 'Ceylon (1.2.1)': '3517',
  155. 'Julia (0.5.0)': '3518',
  156. 'Octave (4.0.2)': '3519',
  157. 'Nim (0.13.0)': '3520',
  158. 'TypeScript (2.1.6)': '3521',
  159. 'Perl6 (rakudo-star 2016.01)': '3522',
  160. 'Kotlin (1.0.0)': '3523',
  161. 'PHP7 (7.0.15)': '3524',
  162. 'COBOL - Fixed (OpenCOBOL 1.1.0)': '3525',
  163. 'COBOL - Free (OpenCOBOL 1.1.0)': '3526'
  164. };
  165.  
  166. // 結果のステータス一覧
  167. var statusList = ['', 'AC', 'WA', 'TLE', 'MLE', 'RE', 'CE', 'QLE', 'OLE', 'IE', 'WJ', 'WR', 'Judging'];
  168.  
  169. // 何を基準にソートするか
  170. var orderValues = {
  171. "": "",
  172. "提出日時": "created",
  173. "得点": "score",
  174. "コード長": "source_length",
  175. "実行時間": "time_consumption",
  176. "メモリ": "memory_consumption"
  177. };
  178.  
  179.  
  180. /*
  181. 提出の検索の設定を反映
  182. */
  183. $(function(){
  184. // 言語とクエリパラメータの対応関係の構築
  185. var languageValues;
  186. // https://qiita.com/kou_pg_0131/items/16c63879be55b85387aa
  187. if (enableOldVersionLanguage) {
  188. languageValues = {...languageValuesLatest, ...languageValuesOld};
  189. } else {
  190. languageValues = {...languageValuesLatest};
  191. }
  192.  
  193. // 古いバージョンの言語の提出を検索可能にする場合
  194. // 言語選択の欄に古いバージョンの言語を追加する
  195. if (enableOldVersionLanguage) {
  196. var selectLanguage = document.getElementById('select-language');
  197. for (var lang in languageValuesOld) {
  198. if (!lang) continue;
  199. var langOption = document.createElement('option');
  200. langOption.innerText = lang;
  201. langOption.value = languageValuesOld[lang];
  202. selectLanguage.insertAdjacentElement('beforeend', langOption);
  203. }
  204. }
  205.  
  206. if (!enableSearchWithDefaultSetting) return;
  207.  
  208. // クエリパラメータが有効か確認
  209. var messages = [];
  210. if (!(language in languageValues)) {
  211. messages.push(`Language: ${language} doesn't exists!`);
  212. }
  213. if (statusList.indexOf(status) < 0) {
  214. messages.push(`Status: ${status} doesn't exists!`);
  215. }
  216. if (!(order in orderValues)) {
  217. messages.push(`OrderBy: ${order} doesn't exists!`);
  218. }
  219. if (messages.length > 0) {
  220. alert(messages.join('\n'));
  221. return;
  222. }
  223.  
  224. // ボタンの配置がゴミ過ぎるので、誰か良い感じにする方法あったら教えてください...
  225. $('.form-group:last').append('<div><button type="submit" class="btn btn-primary btn-sm">デフォルト設定で検索</button></div>');
  226. var target_button = $('.form-group:last div:last button')
  227. target_button.css('margin', '2px 0');
  228.  
  229. // 吹き出し: https://blog.shuffleee.com/2666/
  230. target_button.attr('data-toggle', 'popover');
  231. target_button.attr('data-placement', 'top');
  232. target_button.attr('data-content', `<table class="table"><thead><th colspan="2" style="text-align:center">Default Settings</th></thead><tbody><tr><th>Language</th><td>${language}</td></tr><tr><th>Status</th><td>${status}</td></tr><th>User</th><td>${user}</td></tr><th>OrderBy</th><td>${order} (desc: ${desc})</td></tbody></table>`)
  233. target_button.popover({
  234. trigger: 'hover', // click,hover,focus,manualを選択出来る
  235. html: true,
  236. });
  237.  
  238. target_button.click(function(e){
  239. e.preventDefault();
  240.  
  241. // 問題は後から選ぶはずなのでこのタイミングで取得
  242. var task = $('#select-task').val();
  243.  
  244. // クエリパラメータを追加
  245. var baseURL = location.href.split('?')[0];
  246. var queryParameters = `?f.Task=${task}&f.Language=${languageValues[language]}&f.Status=${status}&f.User=${user}&orderBy=${orderValues[order]}&desc=${desc}`;
  247. var newURL = baseURL + queryParameters;
  248.  
  249. window.location.href = newURL;
  250. });
  251. });

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址