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