Greasy Fork is available in English.

AtCoder Submission Timer

AtCoderの問題画面にタイマーをセットして、指定時間後にコードを提出します。

  1. // ==UserScript==
  2. // @name AtCoder Submission Timer
  3. // @name:ja AtCoder Submission Timer
  4. // @namespace https://github.com/Coki628/ac-submission-timer
  5. // @version 1.0.2
  6. // @description AtCoderの問題画面にタイマーをセットして、指定時間後にコードを提出します。
  7. // @description:ja AtCoderの問題画面にタイマーをセットして、指定時間後にコードを提出します。
  8. // @author Coki628
  9. // @license MIT
  10. // @match https://atcoder.jp/contests/*/tasks/*
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. $('#submit').after(`
  17. <button style="margin-left: 5px;" type="button" class="btn btn-secondary" id="ac-sub-timer-btn" data-toggle="modal" data-target="#ac-sub-timer-modal">
  18. Submission Timer
  19. </button>
  20. `);
  21. $('#ac-sub-timer-btn').after(`
  22. <div class="modal fade" id="ac-sub-timer-modal" tabindex="-1">
  23. <div class="modal-dialog">
  24. <div class="modal-content">
  25. <div class="modal-header">
  26. <button type="button" class="close" data-dismiss="modal"><span>×</span></button>
  27. <h4 class="modal-title">AtCoder Submission Timer</h4>
  28. </div>
  29. <div class="modal-body">
  30. <div class="form-group">
  31. <div>
  32. <input style="width: 80px; display: inline-block; margin-left: 20px;" type="number" class="form-control" id="ac-sub-timer-value"> 分後に提出!
  33. </div>
  34. <div style="margin-top: 10px; margin-left: 20px;" id="ac-sub-timer-info-text">
  35. </div>
  36. </div>
  37. </div>
  38. <div class="modal-footer">
  39. <button id="ac-sub-timer-set" type="button" class="btn btn-primary">セットする</button>
  40. <button type="button" class="btn btn-default" data-dismiss="modal">閉じる</button>
  41. </div>
  42. </div>
  43. </div>
  44. </div>
  45. `);
  46.  
  47. let timerId = 0;
  48. $('#ac-sub-timer-set').on('click', function() {
  49. if (timerId > 0) {
  50. clearTimeout(timerId);
  51. timerId = 0;
  52. // console.log('timer cleared');
  53. $('#ac-sub-timer-info-text').text('タイマーをキャンセルしました。');
  54. }
  55. const min = $('#ac-sub-timer-value').val();
  56. if (min && min > 0) {
  57. const millisec = min * 60 * 1000;
  58. timerId = setTimeout(() => {
  59. $('#submit').trigger('click');
  60. }, millisec);
  61. // console.log('timer set');
  62. // 予定時刻を算出
  63. const mo = moment().add(millisec, 'milliseconds');
  64. $('#ac-sub-timer-info-text').html(`
  65. タイマーを${min}分後にセットしました。<br>
  66. ${min}分後にコードが提出されます。(${mo.hours()}時${mo.minutes()}分頃)
  67. `);
  68. }
  69. });
  70. })();