Greasy Fork is available in English.

AtCoder Submission User Colorizer

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

Versione datata 11/03/2020. Vedi la nuova versione l'ultima versione.

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