您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Fix for kbin code blocks federated from Lemmy. Strips out the weird <span> tags on each line.
当前为
- // ==UserScript==
- // @name Fix kbin Code Blocks
- // @namespace pamasich-kbin
- // @version 1.2
- // @description Fix for kbin code blocks federated from Lemmy. Strips out the weird <span> tags on each line.
- // @author Pamasich
- // @match https://kbin.social/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=kbin.social
- // @license MIT
- // @grant none
- // ==/UserScript==
- const testPattern = /\n?<span style="color:#323232;">(.+\n)+<\/span>\n?/;
- const startTagPattern = /^\n?<span style="color:#323232;">/g;
- const endTagPattern = /<\/span>\n?$/g;
- const combinedPattern = /^<\/span><span style="color:#323232;">/gm;
- function fixCodeBlock(code) {
- if (testPattern.test(code.innerText)) {
- code.innerText = code.innerText
- .replace(startTagPattern, "")
- .replaceAll(combinedPattern, "")
- .replace(endTagPattern, "");
- }
- }
- // used to ensure the code blocks in the thread body itself, not just the comments, are replaced
- // unlike the blockquote for comments, it doesn't seem like the MutationObserver is picking up any article elements or anything nearby I could use
- document.querySelectorAll("pre code").forEach(fixCodeBlock);
- const observer = new MutationObserver(mutations => {
- const codeBlocks = mutations.flatMap(mutation => Array.from(mutation.addedNodes))
- // only do something if new comments were added (BLOCKQUOTE) or a thread is opened while in turbo mode (BODY)
- .filter(node => node.nodeName == "BLOCKQUOTE" || node.nodeName == "BODY")
- .map(node => Array.from(node.querySelectorAll("pre code")))
- .flat(1);
- // codeBlocks at this point might contain the same node twice, so the Set constructor is used to get unique nodes
- new Set(codeBlocks).forEach(fixCodeBlock);
- });
- // observing the entire document because of turbo mode
- observer.observe(document, { childList: true, subtree: true });