4chan-restore-deadlinks

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();

QingJ © 2025

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