// ==UserScript== // @name 4chan Base64 Decode Tool // @namespace https://github.com/x94fujo6rpg/SomeTampermonkeyScripts // @version 0.01 // @description appears in the thread page. auto recursive decoding if the message is coded multiple times. // @author x94fujo6 // @match https://boards.4chan.org/*/thread/* // @match https://boards.4channel.org/*/thread/* // @downloadURL https://update.greasyfork.icu/scripts/438950/4chan%20Base64%20Decode%20Tool.user.js // @updateURL https://update.greasyfork.icu/scripts/438950/4chan%20Base64%20Decode%20Tool.meta.js // ==/UserScript== /* jshint esversion: 9 */ (function () { let elem = { tool: "decode_tool", in: "decode_input", out: "decode_output", decode: "decode_shit", copy: "decode_copy", open: "decode_open", close: "decode_close", }, box = document.createElement("div"), class_list = { title: "usTitle", box: "usBox", t: "usTextBox", b: "usButton line-2-item", }, getIn = () => document.getElementById(elem.in).value, getOut = () => document.getElementById(elem.out).value, setIn = (t = "") => document.getElementById(elem.in).value = t, setOut = (t = "") => document.getElementById(elem.out).value = t, decode_text = () => { let text = getIn(), count = 0, max = 100, [err, output] = decoder(text), last_output = output, err_msg = "decode failed"; setIn(); console.log(count, text); if (err) { setOut(err_msg); console.log(err_msg); } while (!err && output.length && count < max) { count++; console.log(count, last_output); setOut(last_output); [err, output] = decoder(last_output); if (err) { console.log("end loop"); break; } else { setIn(last_output); last_output = output; } } function decoder(_t = "") { let out = false, error = false; try { out = atob(_t); } catch (e) { error = e; } finally { return [error, out]; } } }, copy = () => { let text = document.getElementById(elem.out); text.select(); text.setSelectionRange(0, 99999); document.execCommand("copy"); }, open = () => document.getElementById(elem.tool).style.display = "", close = () => document.getElementById(elem.tool).style.display = "none"; box.className = class_list.box; box.innerHTML = `