atcoder-tasks-page-colorizer

tasksページにおいて、提出した問題に色付けを行います。

  1. // ==UserScript==
  2. // @name atcoder-tasks-page-colorizer
  3. // @namespace https://twitter.com/kymn_
  4. // @version 1.1.2
  5. // @description tasksページにおいて、提出した問題に色付けを行います。
  6. // @author keymoon
  7. // @license MIT
  8. // @supportURL https://twitter.com/kymn_
  9. // @match https://atcoder.jp/contests/*/tasks
  10. // @require https://greasyfork.org/scripts/437862-atcoder-problems-api/code/atcoder-problems-api.js?version=1004082
  11. // ==/UserScript==
  12.  
  13. if (moment() < endTime) return;
  14.  
  15. $('#main-div thead th:last-child').before('<th width="10%" class="text-center">最終提出</th>');
  16. getSubmissions(userScreenName).then(colorize);
  17.  
  18. function colorize(problems_info) {
  19. $('#main-div tbody tr').each((x,y) => {
  20. let problem_id = y.querySelector('td:nth-child(2) a').getAttribute('href').split('/').pop();
  21. let trial = problems_info.filter(x => x.problem_id == problem_id);
  22. colorize_row(y,trial);
  23. })
  24.  
  25. function colorize_row(row, trial) {
  26. var submitted = trial.length != 0;
  27. var is_accepted = trial.map(x => x.result).includes('AC');
  28. var last_submit = !submitted ? null : trial.reduce((x,y) => x.epoch_second > y.epoch_second ? x : y);
  29. $(row.querySelector('td:last-child')).before(`<td class="text-center">${submitted ? `<a href="https://atcoder.jp/contests/${last_submit.contest_id}/submissions/${last_submit.id}">${moment.unix(last_submit.epoch_second).format("YYYY/MM/DD")}</a>` : '-'}</td>`);
  30. if(submitted) row.classList.add(is_accepted ? 'success' : 'warning');
  31. }
  32. }