您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enhances OJ.UZ
- // ==UserScript==
- // @name OJ.UZ enhancement
- // @namespace ojuzenhancement
- // @version v5
- // @description Enhances OJ.UZ
- // @author EntityPlantt
- // @match https://oj.uz/*
- // @icon http://oj.uz/favicon.ico
- // @grant none
- // @run-at document-start
- // ==/UserScript==
- addEventListener("DOMContentLoaded", () => {
- setTheme();
- var style = document.createElement("style");
- style.innerHTML = `
- html.dark, .dark img, .dark iframe, .dark object { filter: invert(1) hue-rotate(180deg) }
- footer, body { background: #e9e9e9 }
- * {
- transition: none !important;
- -webkit-transition: none !important;
- -moz-transition: none !important;
- -o-transition: none !important;
- }
- .navbar { background: #daecda }
- .progressbar {
- background: #eee;
- box-shadow: none;
- height: 30px !important;
- }
- .progressbar .text {
- color: #333;
- top: -20px !important;
- }
- .progressbar > .bar { animation: progressbargradient 2s linear infinite; }
- #my-score canvas { animation: myscore_s 10s linear infinite, myscore_r 10s ease infinite; }
- .label {
- text-transform: uppercase;
- color: black !important;
- float: right;
- margin-left: .5em;
- }
- ul.footer-nav li a:hover { color: black !important; }
- footer p { color: #222; }
- @keyframes progressbargradient {
- from { background-position-x: 0% }
- to { background-position-x: 200% }
- }
- @keyframes myscore_s {
- from, to, 50% { scale: 1 }
- 25%, 75% { scale: 1.05 }
- }
- @keyframes myscore_r {
- from, to { transform: rotate(-10deg) }
- 50% { transform: rotate(10deg) }
- }
- body::-webkit-scrollbar { width: 15px; height: 15px }
- body::-webkit-scrollbar-track { background: #222 }
- body::-webkit-scrollbar-thumb { background: #444; border-radius: 7.5px }
- `;
- document.querySelector("head").appendChild(style);
- function setProgressBars() {
- document.querySelectorAll(".progressbar > .bar").forEach(elm => {
- let hue = parseFloat(elm.style.width.substring(0, elm.style.width.length - 1)) * 1.2;
- elm.style.background = `linear-gradient(90deg, hsl(${hue}, 57%, 53%), hsl(${hue}, 83%, 60%), hsl(${hue}, 57%, 53%))`;
- elm.style.backgroundSize = "200%";
- });
- requestAnimationFrame(setProgressBars);
- }
- setProgressBars();
- if (document.getElementById("my-score")) {
- var score = document.getElementById("my-score").parentElement.nextElementSibling.querySelector("td").innerText.split(" / ").map(x => parseInt(x));
- document.querySelector("#my-score canvas").style.filter = `hue-rotate(-${(1 - score[0] / score[1]) * 90}deg)`;
- document.getElementById("my-score").parentElement.style.background = `hsl(${score[0] / score[1] * 90}, 57%, 95%)`;
- }
- let li = document.createElement("li");
- li.className = "divider";
- document.querySelector(".login-bar").prepend(li);
- document.querySelector(".login-bar").prepend(document.createTextNode("\n"));
- li = document.createElement("li");
- li.innerHTML = "<a href='javascript:toggleTheme()'>Toggle theme</a>";
- document.querySelector(".login-bar").prepend(li);
- window.toggleTheme = () => void(localStorage.dark = document.body.parentElement.classList.toggle("dark"));
- addEventListener("storage", setTheme);
- if (Math.random() < .03) document.querySelector(".search-side li:last-child a").innerText = "Spanish";
- document.querySelector(".page-banner").remove();
- });
- function setTheme() {
- if (localStorage.dark == "true") document.body.parentElement.classList.add("dark");
- else document.body.parentElement.classList.remove("dark");
- }