您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
AtCoder のコンテストページにおいて、問題タブをホバーするとドロップダウンリストを表示するようにします。
// ==UserScript== // @name AtCoder Dropdown Tasks // @namespace https://atcoder.jp/ // @version 2025-03-10 // @description AtCoder のコンテストページにおいて、問題タブをホバーするとドロップダウンリストを表示するようにします。 // @author magurofly // @match https://atcoder.jp/contests/* // @icon https://www.google.com/s2/favicons?sz=64&domain=atcoder.jp // @grant unsafeWindow // @license CC0-1.0 Universal // ==/UserScript== (async function() { 'use strict'; if (typeof unsafeWindow.contestScreenName !== "string") return; const contestScreenName = unsafeWindow.contestScreenName; const styleSheet = new CSSStyleSheet(); styleSheet.insertRule(` .atcoder-dropdown-tasks:hover .dropdown-menu { display: block; } `); document.adoptedStyleSheets.push(styleSheet); const tasksDropdown = unsafeWindow.document.querySelector("#contest-nav-tabs > ul > li:nth-child(2)"); tasksDropdown.classList.add("atcoder-dropdown-tasks"); const tasksDropdownButton = tasksDropdown.querySelector("a"); tasksDropdownButton.insertAdjacentHTML("beforeend", `<span class="caret"></span>`); const tasksDropdownContents = document.createElement("ul"); tasksDropdownContents.className = "dropdown-menu"; tasksDropdown.appendChild(tasksDropdownContents); const tasksHTML = await (await fetch(`/contests/${contestScreenName}/tasks`)).text(); const tasksDoc = new DOMParser().parseFromString(tasksHTML, "text/html"); for (const row of tasksDoc.querySelectorAll("#main-container > div.row > div:nth-child(2) > div.panel.panel-default.table-responsive > table > tbody > tr")) { const taskNum = row.cells[0].textContent; const taskName = row.cells[1].textContent; const taskURL = row.cells[0].children[0].href; const link = document.createElement("a"); link.href = taskURL; link.textContent = `${taskNum} - ${taskName}`; link.style.fontFamily = "monospace"; const li = document.createElement("li"); li.appendChild(link); tasksDropdownContents.appendChild(li); } })();