Greasy Fork 支持简体中文。

Atcoder Easy Accordion

Atcoderのアコーディオンメニューを、マウスのホバーで開けるようにします

目前為 2025-04-20 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Atcoder Easy Accordion
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.3
  5. // @description Atcoderのアコーディオンメニューを、マウスのホバーで開けるようにします
  6. // @author Rac
  7. // @license MIT
  8. // @match https://atcoder.jp/*
  9. // @exclude /^https://atcoder\.jp/[^#?]*/json/
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15. if(document.getElementsByClassName("header-mypage_btn").length != 0) {
  16. window.scrollTo=()=>{};
  17. }
  18.  
  19. document.querySelectorAll(".nav > li:not(.pull-right)").forEach((element) => {
  20. element.addEventListener("mouseenter", () => {
  21. setTimeout(() => {
  22. element.classList.add("open");
  23. }, 10);
  24. });
  25. element.addEventListener("mouseleave", () => {
  26. element.classList.remove("open");
  27. });
  28. });
  29. {
  30. const element = document.getElementsByClassName("header-mypage_btn")[0];
  31. const element_ac = document.getElementsByClassName("header-mypage_detail")[0];
  32. if(element && element_ac) {
  33. let flag1 = false;
  34. let flag2 = false;
  35. element.addEventListener("mouseenter", () => {
  36. flag2 = false;
  37. if(!element.classList.contains("active")) {
  38. setTimeout(() => {
  39. if(!element.classList.contains("active")) element.click();
  40. }, 10);
  41. }
  42. });
  43. element.addEventListener("mouseleave", () => {
  44. flag1 = true;
  45. setTimeout(() => {
  46. if(flag1 && element.classList.contains("active")) element.click();
  47. }, 10);
  48. });
  49. element_ac.addEventListener("mouseenter", () => {
  50. flag1 = false;
  51. if(!element.classList.contains("active")) element.click();
  52. });
  53. element_ac.addEventListener("mouseleave", () => {
  54. flag2 = true;
  55. setTimeout(() => {
  56. if(flag2 && element.classList.contains("active")) element.click();
  57. }, 10);
  58. });
  59. }
  60. }
  61.  
  62. document.querySelectorAll("#task-statement details").forEach((element) => {
  63. element.open = true;
  64. });
  65. })();