AtCoder Submission User Colorizer

提出一覧のユーザ名を色付けします

As of 2020-03-11. See the latest version.

  1. // ==UserScript==
  2. // @name AtCoder Submission User Colorizer
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.0
  5. // @description 提出一覧のユーザ名を色付けします
  6. // @author morio_prog
  7. // @match https://atcoder.jp/contests/*/submissions*
  8. // @grant none
  9. // @license CC0
  10. // @require http://ajax.googleapis.com/ajax/libs/jquery/3.3.0/jquery.min.js
  11. // ==/UserScript==
  12.  
  13. function getcolor(rating) {
  14. if (rating >= 2800) return '#FF0000';
  15. if (rating >= 2400) return '#FF8000';
  16. if (rating >= 2000) return '#C0C000';
  17. if (rating >= 1600) return '#0000FF';
  18. if (rating >= 1200) return '#00C0C0';
  19. if (rating >= 800) return '#008000';
  20. if (rating >= 400) return '#804000';
  21. if (rating >= 0) return '#808080';
  22. return '#000000';
  23. }
  24.  
  25. function getcolorclass(rating) {
  26. if (rating >= 2800) return 'user-red';
  27. if (rating >= 2400) return 'user-orange';
  28. if (rating >= 2000) return 'user-yellow';
  29. if (rating >= 1600) return 'user-blue';
  30. if (rating >= 1200) return 'user-cyan';
  31. if (rating >= 800) return 'user-green';
  32. if (rating >= 400) return 'user-brown';
  33. if (rating >= 0) return 'user-gray';
  34. return 'user-unrated';
  35. }
  36.  
  37. function getachrate(rating) {
  38. var base = Math.floor(rating / 400) * 400;
  39. return ((rating - base) / 400) * 100;
  40. }
  41.  
  42. $(function() {
  43. 'use strict';
  44.  
  45. const baseurl = "https://atcoder.jp";
  46.  
  47. $('a[href*="/users"]').each(function(i, u) {
  48. // 右上のマイプロフィールを省く
  49. if ($(u).find('span').length) return true;
  50.  
  51. var uri = baseurl + $(this).attr('href');
  52. $.ajax({
  53. url: uri,
  54. type: 'GET',
  55. dataType: 'html'
  56. })
  57. .done(function(data) {
  58. var parseHtml = $.parseHTML(data);
  59. var $userpage = $(parseHtml);
  60.  
  61. var rating = parseInt($userpage.find('#main-container > div.row > div.col-sm-9 > table > tbody > tr:nth-child(2) > td > span').text(), 10);
  62. if (isNaN(rating)) return true;
  63.  
  64. /* */if (rating >= 4000) $(u).before('<img style="vertical-align: middle;" src="//img.atcoder.jp/assets/icon/crown4000.gif">&nbsp;');
  65. else if (rating >= 3600) $(u).before('<img style="vertical-align: middle;" src="//img.atcoder.jp/assets/icon/crown3600.gif">&nbsp;');
  66. else if (rating >= 3200) $(u).before('<img style="vertical-align: middle;" src="//img.atcoder.jp/assets/icon/crown3200.gif">&nbsp;');
  67. else {
  68. var color = getcolor(rating);
  69. var achrate = getachrate(rating);
  70. $(u).before(`
  71. <span style="
  72. display: inline-block;
  73. height: 12px;
  74. width: 12px;
  75. vertical-align: center;
  76. border-radius: 50%;
  77. border: solid 1px ${color};
  78. background: -webkit-linear-gradient(
  79. bottom,
  80. ${color} 0%,
  81. ${color} ${achrate}%,
  82. rgba(255, 255, 255, 0.0) ${achrate}%,
  83. rgba(255, 255, 255, 0.0) 100%);
  84. "></span>
  85. `);
  86. }
  87. $(u).addClass(getcolorclass(rating));
  88. });
  89. });
  90. });