您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
View all editorials of the AtCoder contest in one page.
当前为
- // ==UserScript==
- // @name View All Editorials
- // @name:ja 解説ぜんぶ見る
- // @description View all editorials of the AtCoder contest in one page.
- // @description:ja AtCoderコンテストの解説ページに、すべての問題の解説をまとめて表示します。
- // @version 1.3.0
- // @icon https://www.google.com/s2/favicons?domain=atcoder.jp
- // @match https://atcoder.jp/contests/*/editorial
- // @match https://atcoder.jp/contests/*/editorial?*
- // @grant GM_addStyle
- // @namespace https://gitlab.com/w0mbat/user-scripts
- // @author w0mbat
- // ==/UserScript==
- (async function () {
- 'use strict';
- console.log(`🐻 "View All Editorials" start execution. 🐻`)
- async function addScript(src) {
- return new Promise((resolve) => {
- const script = document.createElement("script");
- script.type = "text/javascript";
- script.src = src;
- script.onload = resolve;
- document.getElementsByTagName("head")[0].appendChild(script);
- });
- }
- async function addStyleSheet(src) {
- return new Promise((resolve) => {
- const link = document.createElement("link");
- link.rel = "stylesheet";
- link.href = src;
- link.onload = resolve;
- document.getElementsByTagName("head")[0].appendChild(link);
- });
- }
- async function loadKaTex() {
- await addStyleSheet("https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.css");
- await addScript("https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/katex.min.js");
- await addScript("https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/auto-render.min.js");
- var kaTexOptions = {
- delimiters: [
- { left: "$$", right: "$$", display: true },
- { left: "$", right: "$", display: false },
- { left: "\\(", right: "\\)", display: false },
- { left: "\\[", right: "\\]", display: true }
- ],
- ignoredTags: ["script", "noscript", "style", "textarea", "code", "option"],
- ignoredClasses: ["prettyprint", "source-code-for-copy"],
- throwOnError: false
- };
- renderMathInElement(document.body, kaTexOptions);
- }
- async function loadMathJax() {
- await addScript("https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-MML-AM_CHTML");
- MathJax.Hub.Config({ messageStyle: "none", tex2jax: { skipTags: ["script", "noscript", "style", "textarea", "code"], inlineMath: [['$', '$'], ['\\(', '\\)']] } });
- }
- async function loadPrettifier() {
- await addScript("https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js");
- }
- async function getEditorial(link) {
- return new Promise((resolve) => {
- const xhr = new XMLHttpRequest()
- xhr.responseType = "document";
- xhr.onload = (response) => {
- const dom = response.target.responseXML;
- const editorialDom = dom.querySelector("#main-container > div.row > div:nth-child(2) > div:nth-of-type(1)");
- editorialDom && link.parentNode.appendChild(editorialDom);
- resolve();
- }
- xhr.open("GET", link.href);
- xhr.send();
- });
- }
- async function getAllEditorials() {
- return Promise.all(Array.prototype.filter.call(document.getElementsByTagName('a'), e => e.href.match(/\/editorial\//))
- .map(e => getEditorial(e)));
- }
- GM_addStyle("pre code { tab-size: 4; }");
- await getAllEditorials();
- // await loadMathJax();
- await loadKaTex();
- await loadPrettifier();
- console.log(`🐻 "View All Editorials" end execution. 🐻`)
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址