您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds some enhancements to USACO problems.
// ==UserScript== // @name USACO Enhancements // @namespace https://connorcode.com // @version 0.3 // @description Adds some enhancements to USACO problems. // @author Connor Slade // @match http://www.usaco.org/index.php?page=viewproblem* // @grant GM.getValue // @grant GM.setValue // @grant GM.setClipboard // @license GPLv3 // ==/UserScript== (async () => { // == Problem year and date in page title == let problemDate = document.querySelector('.panel h2').innerText; let problemName = document.querySelector('.panel h2:nth-child(2)').innerText.split('. ')[1]; let date = problemDate.match(/USACO (\d{4}) (.*) Contest/); document.title = `USACO - ${problemName} (${date[2].substring(0, 3)} ${date[1]})`; // == Persistent language selector == let selector = document.querySelector("select[name='language']"); let lastLang = await GM.getValue('lastLang'); if (lastLang != undefined) selector.value = lastLang; selector.addEventListener('change', async () => { console.log(selector.value); await GM.setValue("lastLang", selector.value); }); // == Copy codeblocks to clipboard == document.querySelectorAll('pre').forEach(block => { block.style.position = 'relative'; let copy = document.createElement("button"); copy.style.position = 'absolute'; copy.style.top = 0; copy.style.right = 0; copy.innerText = 'Copy'; block.appendChild(copy); copy.addEventListener('click', () => { let text = block.innerText; GM.setClipboard(text.substring(0, text.length - 4)); }); }); })();