LeetCode Rating Helper

LeetCode.com - 显示题目 zerotrac rating,一键跳转国服

  1. // ==UserScript==
  2. // @name LeetCode Rating Helper
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.2
  5. // @description LeetCode.com - 显示题目 zerotrac rating,一键跳转国服
  6. // @icon https://www.google.com/s2/favicons?sz=64&domain=greatest.deepsurf.us
  7. // @grant none
  8. // @match *://leetcode.com/problems/*
  9. // @license The Unlicense
  10. // @run-at document-idle
  11. // ==/UserScript==
  12.  
  13. (function () {
  14. "use strict";
  15. function waitFor(condition, callback) {
  16. if (!condition()) {
  17. window.setTimeout(waitFor.bind(null, condition, callback), 1000);
  18. } else {
  19. callback();
  20. }
  21. }
  22. function isLoadFinish() {
  23. var tag = isCNSite() ? "nav" : "img";
  24. return document.querySelector(tag) != null;
  25. }
  26. function isCNSite() {
  27. return location.hostname === "leetcode.cn";
  28. }
  29. let url = window.location.href;
  30. url = url.replace("leetcode.com", "leetcode.cn");
  31. url = url.replace("/description", "/solution");
  32. let a = url.split("/");
  33. let titleSlug = a[4];
  34. waitFor(isLoadFinish, () => {
  35. console.log(url);
  36. let assistant = document.createElement("a");
  37. assistant.href = url;
  38. assistant.target = "_blank";
  39. assistant.innerHTML =
  40. '<div class="flex flex-1 select-none justify-center whitespace-nowrap rounded-t-[5px] px-4 py-[10px] text-xs cursor-pointer text-label-2 dark:text-dark-label-2 px-5">Solutions (CN) ↗</div>';
  41. let elements = document.querySelector(
  42. "#qd-content > div.h-full.flex-col.ssg__qd-splitter-primary-w > div > div > div > div:nth-child(1) > div > div"
  43. );
  44. elements.appendChild(assistant);
  45. fetch("https://zerotrac.github.io/leetcode_problem_rating/data.json")
  46. .then((response) => response.json())
  47. .then((data) => {
  48. for (let i = 0; i < data.length; i++) {
  49. if (data[i].TitleSlug === titleSlug) {
  50. let rating = Math.round(data[i].Rating);
  51. let contestSlug = data[i].ContestSlug;
  52. let contestLink = "https://leetcode.com/contest/" + contestSlug;
  53. let contestID_en = data[i].ContestID_en;
  54. console.log(rating);
  55. let sel = document.querySelector(
  56. "#qd-content > div.h-full.flex-col.ssg__qd-splitter-primary-w > div > div > div > div.flex.h-full.w-full.overflow-y-auto > div > div > div.w-full.px-5.pt-4 > div > div:nth-child(1) > div.flex-1 > div > div > span"
  57. );
  58. let zerotrac = document.createElement("a");
  59. zerotrac.href = contestLink;
  60. zerotrac.target = "_blank";
  61. zerotrac.innerHTML =
  62. '<div class="flex flex-1 select-none justify-center whitespace-nowrap rounded-t-[5px] px-4 py-[10px] text-xs cursor-pointer text-label-2 dark:text-dark-label-2 px-5">' +
  63. " Rating: " +
  64. rating +
  65. " ↗</div>";
  66. elements.appendChild(zerotrac);
  67. }
  68. }
  69. });
  70. });
  71. })();