Greasy Fork is available in English.

力扣显示通过率

在力扣题目界面展示通过率

// ==UserScript==
// @name         力扣显示通过率
// @namespace    https://greasyfork.org/zh-CN/users/412790
// @version      1.0
// @description  在力扣题目界面展示通过率
// @author       Permission
// @match        https://leetcode-cn.com/problems/*
// @require      https://code.jquery.com/jquery-3.4.1.min.js
// @grant        GM_addStyle
// ==/UserScript==

/* globals $, jQuery */
'use strict';

let last_href = "";
GM_addStyle(`.My-Difficulty-Easy{color:green}.My-Difficulty-Medium{color:rgba(var(--yellow-5-rgb), 1)}.My-Difficulty-Hard{color:red}div[data-cypress="SubmissionSuccess"] .My-Difficulty-indicator{display:none}`);
const show = () => {
    if($("[class *= Submission] [class *= Count]").length === 0 || !$('[data-key="description"]').hasClass('active')){
        $("My-Difficulty-indicator").remove();
        return;
    }
    else if($(".My-Difficulty-indicator").length !== 0){
        return;
    }
    let ac = $("[class *= Submission] [class *= Count]:eq(0)").text().replaceAll(",", "");
    let all = $("[class *= Submission] [class *= Count]:eq(1)").text().replaceAll(",", "");
    /*if(ac.length == 0 || all.length == 0){
        return;
    }*/
    let rate = parseFloat(ac) / parseFloat(all);
    rate *= 100;
    rate = rate.toFixed(2);
    let difficulty;
    if(rate >= 50){
        difficulty = "Easy";
    }
    else if(rate <= 35){
        difficulty = "Hard";
    }
    else{
        difficulty = "Medium";
    }
    rate = String(rate) + "%";
    $(".My-Difficulty-indicator").remove();
    let obfuscatedType = $("div[class *= Submission] span[class *= Type]:eq(0)").attr("class") + " My-Difficulty-indicator";
    let obfuscatedSeparator = $("div[class *= Submission] div[class *= Separator]:eq(0)").attr("class") + " My-Difficulty-indicator";
    let obfuscatedCount = $("div[class *= Submission] span[class *= Count]:eq(0)").attr("class") + " My-Difficulty-indicator";
    let obfuscatedDifficulty = $("div[class *= Tools] span[class *= Difficulty]:eq(0)").attr("class") + " My-Difficulty-indicator";
    $("div[class *= Tools] button").remove();
    $("[class *= Submission]:eq(0)").append(`<div class="${obfuscatedSeparator}"></div><span class="${obfuscatedType}">通过率</span><span class="${obfuscatedCount + " My-Difficulty-"+ difficulty}">${rate}</span>`);
    $("[class *= Difficulty]:eq(1)").after(`<div class="${obfuscatedSeparator}"></div><span class="${obfuscatedDifficulty}">通过率</span><span class="${obfuscatedDifficulty + " My-Difficulty-" + difficulty}">${rate}</span>`);
};

const Observer = new MutationObserver((m)=>{
    show();
});

const config = {
    childList: true,
    subtree: true,
    attributes: true,
    characterData: true,
    attributeOldValue: false,
    characterDataOldValue: false,
    attributeFilter: []
}

const addObserverIfDesiredNodeAvailable = () => {
    if(document.querySelector("[data-key = description-content]") != null){
        Observer.observe(document.querySelector("[data-key = description-content]"),config);
    }
    else{
        return setTimeout(() => addObserverIfDesiredNodeAvailable(), 2e2);
    }
}

addObserverIfDesiredNodeAvailable();