AddLinkToNewAtcoder

ja

2017-11-24 기준 버전입니다. 최신 버전을 확인하세요.

  1. // ==UserScript==
  2. // @name AddLinkToNewAtcoder
  3. // @namespace AddLinkToNewAtcoder
  4. // @version 1.4
  5. // @author Luzhiled
  6. // @description ja
  7. // @include http://*atcoder.jp/*
  8. // @include https://*atcoder.jp/*
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. function ConvertToNewAtcodersURL() {
  16. let pathName = location.pathname;
  17. let query = location.search;
  18. if (pathName.match(/settings/) || pathName.match(/users/)) {
  19. return 'https://beta.atcoder.jp' + pathName;
  20. }
  21. if (location.href.match(/contest.atcoder.jp/)) {
  22. let contestName = location.href.replace(/^https?:\/\//, '').split('.')[0];
  23. pathName = pathName.replace(/assignments/g, "tasks");
  24. pathName = pathName.replace(/\/all/g, "");
  25. query = query.replace(/user_screen_name/g, "f.User");
  26. pathName = pathName.replace(/editorial/g, "");
  27. pathName = pathName.replace(/statistics/g, "");
  28. return 'https://beta.atcoder.jp/contests/' + contestName + pathName + query;
  29. } else {
  30. pathName = pathName.replace(/contest/g, "contests");
  31. pathName = pathName.replace(/user/g, "users");
  32. query = query.replace(/categories/g, "category");
  33. query = query.replace(/p=/g, "page=");
  34. return 'https://beta.atcoder.jp' + pathName + query;
  35. }
  36. }
  37.  
  38. function AddLinkToNewAtcoder() {
  39. if (location.href.match(/contest.atcoder.jp/)) {
  40. $('div.nav-collapse').prepend(`
  41. <ul class="nav">
  42. <li class="divider-vertical"></li>
  43. <li><a href="${ConvertToNewAtcodersURL()}"><span class="lang lang-selected"><span class="lang-en lang-child hidden-lang">go to beta.atcoder.jp</span><span class="lang-ja lang-child">Beta版へ</span></span></a></li>
  44. </ul>
  45. `);
  46. }
  47. else {
  48. $('ul.nav.navbar-nav').not('.navbar-right').append(`<li><a href="${ConvertToNewAtcodersURL()}">Beta版へ</a></li>`);
  49. }
  50. }
  51.  
  52. function ConvertToAtcodersURL() {
  53. let pathName = location.pathname;
  54. let query = location.search;
  55. if (pathName.match(/settings/)) {
  56. pathName = pathName.replace(/icon/g, "");
  57. return 'https://practice.contest.atcoder.jp' + pathName;
  58. }
  59. if (location.href.match(/contests/)) {
  60. let contestName = pathName.replace(/\/contests\//, '').split('/')[0];
  61. if (contestName === "" || contestName === "archive") {
  62. query = query.replace(/category/g, "categories");
  63. query = query.replace(/page=/g, "p=");
  64. query = query.replace(/keyword=/g, "mode=button");
  65. return `http://atcoder.jp/contest/${contestName + query}`;
  66. } else {
  67. pathName = pathName.replace(RegExp('/contests/' + contestName), '');
  68. pathName = pathName.replace(/tasks/g, "assignments");
  69. if (pathName.endsWith("/")) {
  70. pathName = pathName.slice(0, -1);
  71. }
  72. if (pathName === "/submissions") {
  73. pathName += "/all";
  74. }
  75. query = query.replace(/f.User/g, "user_screen_name");
  76. console.log(pathName);
  77. console.log(query);
  78. return `https://${contestName}.contest.atcoder.jp${pathName + query}`;
  79. }
  80. } else {
  81. return 'https://beta.atcoder.jp' + pathName + query;
  82. }
  83.  
  84. return 'https://atcoder.jp';
  85. }
  86.  
  87. function AddLinkToAtcoder() {
  88. $('ul.nav.navbar-nav').not('.navbar-right').append(`<li><a href="${ConvertToAtcodersURL()}">旧AtCoderへ</a></li>`);
  89. }
  90.  
  91. if (location.href.match(/beta.atcoder.jp/)) {
  92. AddLinkToAtcoder();
  93. } else {
  94. AddLinkToNewAtcoder();
  95. }
  96.  
  97. })();