SJTUOJ Helper

The best SJTUOJ helper!

// ==UserScript==
// @name         SJTUOJ Helper
// @namespace    https://oj.victrid.dev/
// @version      0.3.2 Minor
// @description  The best SJTUOJ helper!
// @author       VictriD
// @match        https://acm.sjtu.edu.cn/OnlineJudge/*
// @grant       GM.setValue
// @grant       GM.getValue
// @grant       GM.deleteValue
// @license     MIT
// ==/UserScript==


(async function () {
    'use strict';

    var username = undefined;
    if ($.trim($(".dropdown-toggle").contents().filter(function () { return this.nodeType != 1; }).text()).split(":")[1] != undefined) {
        username = $.trim($(".dropdown-toggle").contents().filter(function () { return this.nodeType != 1; }).text()).split(":")[1];
    }
    var cls = document.createElement("div");
    cls.classList.add("btn-group", "pull-right");
    var pdp = document.createElement("a");
    pdp.classList.add("btn", "dropdown-toggle");
    pdp.setAttribute("data-toggle", "dropdown");
    pdp.text = "设置";
    var vvv = document.createElement("span");
    vvv.classList.add("caret");
    pdp.appendChild(vvv);
    cls.appendChild(pdp);
    var adp = document.createElement("ul");
    adp.classList.add("dropdown-menu");
    var enablebtn = document.createElement("li");
    var a_en = document.createElement("a");
    a_en.id = 'enablebtn';
    enablebtn.appendChild(a_en);
    adp.appendChild(enablebtn);
    var dyrebtn = document.createElement("li");
    var a_dy = document.createElement("a");
    a_dy.id = 'dyrebtn';
    dyrebtn.appendChild(a_dy);
    adp.appendChild(dyrebtn);
    var ansbtn = document.createElement("li");
    var a_an = document.createElement("a");
    a_an.id = 'ansbtn';
    ansbtn.appendChild(a_an);
    adp.appendChild(ansbtn);
    var dv = document.createElement("li");
    dv.classList.add("divider");
    adp.appendChild(dv);
    var resetbtn = document.createElement("li");
    var a_re = document.createElement("a");
    a_re.id = "clrbtn";
    a_re.text = "恢复默认";
    resetbtn.appendChild(a_re);
    adp.appendChild(resetbtn);
    var dva = document.createElement("li");
    dva.classList.add("divider");
    adp.appendChild(dva);
    var t2btn = document.createElement("li");
    var t2 = document.createElement("a");
    t2.text = "电报:t.me\/koraboreta";
    t2.href="https:\/\/t.me\/koraboreta";
    t2.target="_blank";
    t2btn.appendChild(t2);
    adp.appendChild(t2btn);
    // 咱不恰这个烂钱(主要是停止注册了)
    // var t3btn = document.createElement("li");
    // var t3 = document.createElement("a");
    // t3.text = "没有梯子?点我(逃";
    // t3.href="https:\/\/sockboom.tel\/auth\/register\?affid\=178136";
    // t3.target="_blank";
    // t3btn.appendChild(t3);
    // adp.appendChild(t3btn);
    cls.appendChild(adp);
    $(".btn-group:first").after(cls);

    enabled = await GM.getValue('enabled', -1);
    // Total enable/disable button
    if (enabled == -1) {
        await GM.setValue('enabled', true);
        enabled = true;
    }
    // make color
    dyred = await GM.getValue('dyred', -1);
    if (dyred == -1) {
        await GM.setValue('dyred', true);
        dyred = true;
    }
    //show answer button
    syans = await GM.getValue('syans', -1);
    if (syans == -1) {
        await GM.setValue('syans', true);
        syans = true;
    }

    if (enabled == 1) { $("#enablebtn").html("所有功能 开启"); }
    else { $("#enablebtn").html("所有功能 关闭"); }

    if (dyred == 1) { $("#dyrebtn").html('彩色按钮 开启'); }
    else { $("#dyrebtn").html('彩色按钮 关闭'); }

    if (syans == 1) { $("#ansbtn").html('答案显示 开启'); }
    else { $("#ansbtn").html('答案显示 关闭'); }

    var enabled, dyred, syans;
    async function de(zEvent) { enabled = !enabled; await GM.setValue('enabled', enabled); location.reload(); }
    async function dd(zEvent) { dyred = !dyred; await GM.setValue('dyred', dyred); location.reload(); }
    async function ds(zEvent) { syans = !syans; await GM.setValue('syans', syans); location.reload(); }
    async function dclr(zEvent) { await GM.deleteValue('syans'); await GM.deleteValue('enabled'); await GM.deleteValue('dyred'); location.reload(); }
    $("#enablebtn").click(de);
    $("#dyrebtn").click(dd);
    $("#ansbtn").click(ds);
    $("#clrbtn").click(dclr);


    var lst = window.location.href.split('/');
    if (lst[lst.length - 2] == "contest") {
        if (enabled && syans) {
            var answer_div = document.createElement('div');
            answer_div.id = 'answer_div';
            var head = document.createElement('h3');
            head.innerHTML = "参考解答";
            for (var it = 0, lens = $('#problems .btn').length; it < lens; it++) {
                var str = $('#problems .btn')[it].innerHTML
                var strr = "https:\/\/oj.victrid.dev\/nr\/"
                strr = strr.concat(str, "\/")
                var btn;
                btn = document.createElement('a');
                btn.innerHTML = str;
                btn.target = "_blank";
                btn.classList.add("btn");
                btn.href = strr;
                answer_div.appendChild(btn);
                answer_div.append(" ");
            }
            $("#problems").append(document.createElement('hr'));
            $("#problems").append(head);
            $("#problems").append(answer_div);
        }
        if (enabled && dyred) {
            var ctrs = new Array();
            if (username != undefined) {
                var vl = $("tr:contains('" + username + "')").find("td").length - 3, sl = 2;
                for (; sl < vl; sl++) {
                    if ($($("tr:contains('" + username + "')").find("td")[sl]).find("[color='green']").length) {
                        ctrs[sl - 2] = 1;
                        continue;
                    }
                    if ($($("tr:contains('" + username + "')").find("td")[sl]).find("[color='red']").length) {
                        ctrs[sl - 2] = -1;
                        continue;
                    }
                    ctrs[sl - 2] = 0;
                }
            }
            for (var itrr = 0, lensrr = $('#problems .btn').length, leps = ctrs.length; itrr < lensrr && itrr < leps; itrr++) {
                if (ctrs[itrr] == 1) $('#problems .btn')[itrr].classList.add("btn-success");
                if (ctrs[itrr] == -1) $('#problems .btn')[itrr].classList.add("btn-danger");
            }
        }


    }
    if (lst[lst.length - 2] == "problem") {
        if (enabled && syans) {
            var answer_btn = document.createElement('a');
            var strv = lst[lst.length - 1];
            answer_btn.id = 'answer_btn';
            answer_btn.classList.add("btn");
            answer_btn.classList.add("btn-large");
            answer_btn.innerHTML = "参考解答";
            var strrr = "https:\/\/oj.victrid.dev\/nr\/".concat(strv, "\/")
            answer_btn.href = strrr;
            answer_btn.target="_blank";
            $(".well").append(' ');
            $(".well").append(answer_btn);
        }
    }

})();