Greasy Fork is available in English.
Redirects dead 4chan threads to archives without 4chan-X
// ==UserScript==
// @name 4chan 404 Archive Links
// @match https://boards.4channel.org/*/thread/*
// @match http://boards.4channel.org/*/thread/*
// @match https://boards.4chan.org/*/thread/*
// @match http://boards.4chan.org/*/thread/*
// @grant none
// @version 1.0
// @description Redirects dead 4chan threads to archives without 4chan-X
// @author Ihidd
// @grant GM_getResourceText
// @resource res_archives_json https://4chenz.github.io/archives.json/archives.json
// @run-at document-idle
// @license MIT
// @namespace http://greasyfork.icu/users/916881
// ==/UserScript==
(function () {
"use strict";
function clear_all_timeouts() {
let highest_timeout_id = setTimeout(";");
for (let i = 0; i < highest_timeout_id; i++) {
clearTimeout(i);
}
}
function create_board_link_node(url, text) {
let link_node = document.createElement("a");
link_node.href = url;
link_node.innerHTML = text;
let link_div = document.createElement("div");
link_div.classList.add("shown");
link_div.innerHTML = "[";
link_div.appendChild(link_node);
link_div.innerHTML += "]";
return link_div;
}
function is_404_page() {
let box_title_bar = document.querySelector(".boxbar h2");
return !(!box_title_bar) && box_title_bar.innerHTML.includes("404");
}
function append_archive_links() {
const url_path = window.location.pathname.toString().split("/");
const url_board_name = url_path[1];
const url_thread_no = url_path[3];
const archives_json_text = GM_getResourceText("res_archives_json");
const archives_json = JSON.parse(archives_json_text);
let board_links_parent = document.getElementsByClassName("boxcontent")[0];
let archive_links_hr = document.createElement("hr");
board_links_parent.appendChild(archive_links_hr);
for (const archive of archives_json) {
if(archive.boards.includes(url_board_name)) {
let protocol = "https";
if(!archive.https) {
protocol = "http";
}
let board_link_node = create_board_link_node(`${protocol}://${archive.domain}/${url_board_name}/thread/${url_thread_no}`, archive.name);
board_links_parent.appendChild(board_link_node);
}
}
}
if(is_404_page()) {
// Prevent the redirect - race condition but can't find a better method
window.setTimeout(clear_all_timeouts, 5000);
append_archive_links();
}
})();