LitCharts unblur, allow selection, add links

Unblur and allow text selection in blurred fields and add links to characters, themes, and symbols

// ==UserScript==
// @name        LitCharts unblur, allow selection, add links
// @namespace   Violentmonkey Scripts
// @match       https://www.litcharts.com/*
// @grant       none
// @version     1.2
// @author      CyrilSLi
// @description Unblur and allow text selection in blurred fields and add links to characters, themes, and symbols
// @license     MIT
// ==/UserScript==

const classes = ["blurred", "blurred-text", "blur"];
const unblurRetry = setInterval(removeBlur, 10);
const styles = [
    "-webkit-touch-callout",
    "-webkit-user-select",
    "-khtml-user-select",
    "-moz-user-select",
    "-ms-user-select",
    "user-select"
];
const styleStr = "-webkit-touch-callout:default !important; -webkit-user-select:auto !important; -khtml-user-select:auto !important; -moz-user-select:auto !important; -ms-user-select:auto !important; user-select:auto !important;";

var charSymbolLinks = {};
var themeLinks = {};

function removeBlur() {
    var allElements = [];
    for (var i = 0; i < classes.length; i++) {
        var blurred = document.getElementsByClassName(classes[i]);
        allElements.push(...blurred);
        for (var j = 0; j < blurred.length; j++) {
            blurred[j].classList.remove(classes[i]);
        }
    }
    if (!allElements.length) {
        clearInterval(unblurRetry);
        console.log("Finished unblurring");
        allowSelect();
    }
}

function allowSelect() {
    var walker = document.createTreeWalker(
        document.documentElement,
        NodeFilter.SHOW_ELEMENT,
        el => {
            for (var i = 0; i < styles.length; i++) {
                if (getComputedStyle(el)[styles[i]] == "none") {
                    return NodeFilter.FILTER_ACCEPT;
                }
            }
            return NodeFilter.FILTER_SKIP;
        }
    );
    var els = [];
    while (walker.nextNode()) {
        walker.currentNode.setAttribute("style", styleStr);
        els.push(walker.currentNode);
    }
    for (var i = 0; i < els.length; i++) {
        els[i].parentNode.replaceChild(els[i].cloneNode(true), els[i]);
    }
    console.log("Allowed selection");
    addLinks();
}

function addLinks() {
    // intentional misspelling of symbol as the website does the same
    [...document.querySelectorAll(".dropdown.characters > ul > li > a, .dropdown.simbols > ul > li > a")].forEach((el) => {
        charSymName = el.textContent.trim();
        if (charSymName.toLowerCase() != "all characters" && charSymName.toLowerCase() != "all symbols") {
            charSymbolLinks[charSymName] = el.href;
        }
    });
    [...document.querySelectorAll(".dropdown.themes > ul > li > a")].forEach((el) => {
        themeName = el.textContent.trim();
        if (themeName.toLowerCase() != "all themes") {
            themeLinks[themeName] = el.href;
        }
    });
    [...document.querySelectorAll("span.faux-link")].forEach((el) => {
        charSymName = el.textContent.trim();
        if (charSymName in charSymbolLinks) {
            linkEl = document.createElement("a");
            linkEl.textContent = el.textContent;
            linkEl.href = charSymbolLinks[charSymName];
            el.replaceWith(linkEl);
        }
    });
    [...document.querySelectorAll("div.theme-icon.medium")].forEach((el) => {
        el.parentNode.innerHTML = el.parentNode.innerHTML.trim().replace(/^<div/, "<a").replace(/\/div>$/, "/a>");
    });
    [...document.querySelectorAll("a.theme-icon.medium > img")].forEach((el) => {
        themeLink = themeLinks[Object.keys(themeLinks).find((theme) => el.alt.includes(theme))];
        if (themeLink != undefined) {
            el.parentNode.href = themeLink;
        }
    });
    console.log("Added links");
    removeAds();
}

function removeAds() {
    ["analysis-dialog", "analysis-text-dialog", "stretch-left-promo"].forEach((cls) => {
        [...document.getElementsByClassName(cls)].forEach((el) => el.remove());
    });
    console.log("Removed A+ Ads");
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址