彩色AC

一些编程网站的 AC 记录都会变成彩色!

// ==UserScript==
// @name     彩色AC
// @name:en  Colorful AC
// @description    一些编程网站的 AC 记录都会变成彩色!
// @description:en Some computer programming website's AC are in color!
// @author   123asdf123(洛谷576074)
// @license SATA+GPL3.0
// @icon https://asdf123asdf123asdf123.github.io/sample.gif
// @version  4.0
// @match    *://oj.bashu.com.cn/*
// @match    *://www.luogu.com.cn/record/*
// @match    *://www.luogu.com.cn/problem/*
// @exclude    *://www.luogu.com.cn/problem/solution/*
// @match    *://*.codeforces.com/*
// @match    *://*.codeforc.es/*
// @match    *://*.vjudge.net/*
// @match    *://*.atcoder.jp/*
// @match    *://acm.hdu.edu.cn/*
// @match    *://*.loj.ac/*
// @match    *://*.spoj.com/*
// @namespace https://greasyfork.org/users/1265383
// ==/UserScript==
let c=Math.round(Math.random()*360);
function hsvToRgb(x) {
    var h = x, s = 100, v =100;
    s = s / 100;
    v = v / 100;
    var r = 0, g = 0, b = 0;
    var i = parseInt((h / 60) % 6);
    var f = h / 60 - i;
    var p = v * (1 - s);
    var q = v * (1 - f * s);
    var t = v * (1 - (1 - f) * s);
    switch (i) {
        case 0:
            r = v; g = t; b = p;
            break;
        case 1:
            r = q; g = v; b = p;
            break;
        case 2:
            r = p; g = v; b = t;
            break;
        case 3:
            r = p; g = q; b = v;
            break;
        case 4:
            r = t; g = p; b = v;
            break;
        case 5:
            r = v; g = p; b = q;
            break;
        default:
            break;
    }
    r = parseInt(r * 255.0)
    g = parseInt(g * 255.0)
    b = parseInt(b * 255.0)
    return [r, g, b];
}
var front = [];
var back = [];
function get(now){
    if(now.innerHTML=='AC'&&now.className=="status")
        if(back.includes(now.parentNode)==false)
            back.push(now.parentNode);
    if(now.innerHTML=='Correct')
        if(back.includes(now.parentNode)==false)
            back.push(now.parentNode);
    if(now.innerHTML=='\n        Accepted\n      ')
        if(front.includes(now)==false){
            front.push(now);
            if(now.parentNode.parentNode.parentNode.children.length>=4)
                if(front.includes(now.parentNode.parentNode.parentNode.children[2].children[1].children[0].children[0])==false)
                    front.push(now.parentNode.parentNode.parentNode.children[2].children[1].children[0].children[0]);
        }
    if(now.innerHTML=='\n  Accepted\n')
        if(back.includes(now)==false){
            back.push(now);
            if(now.parentNode.children.length>=2)
                if(front.includes(now.parentNode.children[1])==false)
                    front.push(now.parentNode.children[1]);
        }
    if(now.innerHTML=='<i class="icon-ok icon-white"></i> Congratulation !')
       if(back.includes(now)==false)
            back.push(now);
    if(now.innerHTML=='<i class="fa fa-check"></i> Submit')
       if(back.includes(now)==false)
            back.push(now);
    if(now.innerHTML=='Accepted'&&now.className=="label label-success")
       if(back.includes(now)==false)
            back.push(now);
    if(now.innerHTML=='AC'&&now.className=="label label-success")
       if(back.includes(now)==false)
            back.push(now);
    if(now.innerHTML=='Accepted'&&now.className=="lcolor--green-3")
       if(front.includes(now)==false)
            front.push(now);
    if(now.innerHTML=='Accepted'&&now.className=="accepted")
       if(front.includes(now)==false)
            front.push(now);
    if(now.innerHTML=='Accepted'&&now.className=="status")
       if(front.includes(now)==false)
            front.push(now);
    if(now.innerHTML==' Accepted'&&now.className=="view-solution")
       if(front.includes(now)==false)
            front.push(now);
    if(now.innerHTML=='Accepted'&&now.tagName=="FONT")
       if(front.includes(now)==false)
            front.push(now);
    if(now.className=="verdict-accepted")
       if(front.includes(now)==false)
            front.push(now);
    if(now.className=="record-status--text pass")
       if(front.includes(now)==false)
            front.push(now);
    if(now.innerHTML=='\n  AC\n')
       if(back.includes(now)==false)
            back.push(now);
    var x=now.children;
    for(var i=0;i<now.children.length;i++)
        get(x[i]);
}
function rep(){
    c+=1;
    if(c==360){
        c=0;
    }
    let xxx=hsvToRgb(c);
    for(let i=0;i<front.length;i++)
        front[i].style.color='rgb('+xxx[0]+','+xxx[1]+','+xxx[2]+')';
    for(let i=0;i<back.length;i++)
        back[i].style.background='rgb('+xxx[0]+','+xxx[1]+','+xxx[2]+')';
}
function getac(s){
    var x;
    x=document.getElementsByClassName(s);
    for(let i=0;i<x.length;i++)
        get(x[i]);
}
function getallac(s){
    var x;
    x=document.getElementsByClassName(s);
    for(let i=0;i<x.length;i++)
        get(x[i]);
}
(() => {
let a = setInterval(() =>{
    front=[];
    back=[];
    getac("status-link color-none");
    getac("res-good");
    getac("label label-success");
    getac("gradient-green center");
    getac("status");
    getac("info-rows");
    getac("l-flex-info-row");
    getac("verdict-accepted");
    getac("record-status--text pass");
    getac("accepted");
    getac("btn btn-success");
    getac("view-solution");
    getac("table_text");
    getallac("statuscolor _Accepted_127b4_43");
    getallac("_score_10_1lqan_31");
    var x;
    x=document.getElementsByClassName("kol3 ");
    for(let i=0;i<x.length;i++)
        for(var j=0;j<x[i].children.length;j++)
            if(back.includes(x[i].children[j])==false)
                back.push(x[i].children[j]);
    rep();
},5)
})();