Atcoder Easy Accordion

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

目前为 2025-04-13 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Atcoder Easy Accordion
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.1
  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. document.querySelectorAll(".nav > li:not(.pull-right)").forEach((element) => {
  16. element.addEventListener("mouseenter", () => {
  17. setTimeout(() => {
  18. element.classList.add("open");
  19. }, 10);
  20. });
  21. element.addEventListener("mouseleave", () => {
  22. element.classList.remove("open");
  23. });
  24. });
  25. {
  26. const element = document.getElementsByClassName("header-mypage_btn")[0];
  27. const element_ac = document.getElementsByClassName("header-mypage_detail")[0];
  28. if(element && element_ac) {
  29. let flag1 = false;
  30. let flag2 = false;
  31. element.addEventListener("mouseenter", () => {
  32. flag2 = false;
  33. if(!element.classList.contains("active")) {
  34. setTimeout(() => {
  35. if(!element.classList.contains("active")) element.click();
  36. }, 10);
  37. }
  38. });
  39. element.addEventListener("mouseleave", () => {
  40. flag1 = true;
  41. setTimeout(() => {
  42. if(flag1 && element.classList.contains("active")) element.click();
  43. }, 10);
  44. });
  45. element_ac.addEventListener("mouseenter", () => {
  46. flag1 = false;
  47. if(!element.classList.contains("active")) element.click();
  48. });
  49. element_ac.addEventListener("mouseleave", () => {
  50. flag2 = true;
  51. setTimeout(() => {
  52. if(flag2 && element.classList.contains("active")) element.click();
  53. }, 10);
  54. });
  55. }
  56. }
  57. })();