您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
restores dead links pointing to deleted posts
// ==UserScript== // @name 4chan-restore-deadlinks // @namespace github.com/diegostafa/userscripts // @match https://boards.4chan.org/*/thread/* // @match https://boards.4channel.org/*/thread/* // @version 1.0 // @author Diego <[email protected]> (github.com/diegostafa) // @description restores dead links pointing to deleted posts // @run-at document-end // ==/UserScript== const turnObjectInsideOut = (obj) => Object.fromEntries(Object.entries(obj).flatMap(([k, vs]) => vs.map((v) => [v, k]))); const archives = turnObjectInsideOut({ "desuarchive.org": ["a", "aco", "an", "c", "cgl", "co", "d", "fit", "g", "his", "int", "k", "m", "mlp", "mu", "q", "qa", "r9k", "tg", "trash", "vr", "wsg"], "archive.4plebs.org": ["adv", "f", "hr", "o", "pol", "s4s", "sp", "tg", "trv", "tv", "x"], "archived.moe": ["3", "a", "aco", "adv", "an", "asp", "b", "bant", "biz", "c", "can", "cgl", "ck", "cm", "co", "cock", "con", "d", "diy", "e", "f", "fa", "fap", "fit", "fitlit", "g", "gd", "gif", "h", "hc", "his", "hm", "hr", "i", "ic", "int", "jp", "k", "lgbt", "lit", "m", "mlp", "mlpol", "mo", "mtv", "mu", "n", "news", "o", "out", "outsoc", "p", "po", "pol", "pw", "q", "qa", "qb", "qst", "r", "r9k", "s", "s4s", "sci", "soc", "sp", "spa", "t", "tg", "toy", "trash", "trv", "tv", "u", "v", "vg", "vint", "vip", "vm", "vmg", "vp", "vr", "vrpg", "vst", "vt", "w", "wg", "wsg", "wsr", "x", "xs", "y"], "warosu.org": ["3", "biz", "cgl", "ck", "diy", "fa", "ic", "jp", "lit", "sci", "vr", "vt"] }); const urlParts = window.location.pathname.split("/").filter((s) => s !== ""); const boardId = urlParts[0]; const threadId = urlParts[2]; const archive = archives[boardId]; const addLinkToArchive = (deadlink) => { let quoteId = deadlink.textContent.split(">>").pop(); let archiveLink = `https://${archive}/${boardId}/thread/${threadId}/#q${quoteId}`; if (archive === "warosu.org") archiveLink = `https://${archive}/${boardId}/thread/${quoteId}`; let deadLinkAnchor = document.createElement('a'); deadLinkAnchor.textContent = deadlink.textContent + " (DEAD)"; deadLinkAnchor.href = archiveLink; deadLinkAnchor.classList.add("quotelink"); deadLinkAnchor.setAttribute("target", "_blank"); deadlink.textContent = ""; deadlink.appendChild(deadLinkAnchor); }; const main = () => { let deadlinks = document.querySelectorAll(".thread .deadlink"); Array .from(deadlinks) .forEach(addLinkToArchive); }; main();