sonixgvn skip dark shortener
// ==UserScript== // @name Sonixgvn skip dark shortener // @namespace https://greasyfork.org/users/821661 // @match https://sonixgvn.net/* // @grant none // @version 1.0 // @author hdyzen // @description sonixgvn skip dark shortener // @license GPL-3.0 // ==/UserScript== 'use strict'; const decode = data => { const b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; let o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = '', tmp_arr = []; if (!data) { return data; } data += ''; do { // unpack four hexets into three octets using index points in b64 h1 = b64.indexOf(data.charAt(i++)); h2 = b64.indexOf(data.charAt(i++)); h3 = b64.indexOf(data.charAt(i++)); h4 = b64.indexOf(data.charAt(i++)); bits = (h1 << 18) | (h2 << 12) | (h3 << 6) | h4; o1 = (bits >> 16) & 0xff; o2 = (bits >> 8) & 0xff; o3 = bits & 0xff; if (h3 == 64) { tmp_arr[ac++] = String.fromCharCode(o1); } else if (h4 == 64) { tmp_arr[ac++] = String.fromCharCode(o1, o2); } else { tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); } } while (i < data.length); dec = tmp_arr.join(''); return dec; }; const linksContainer = document.getElementsByClassName('su-note')[0]; if (linksContainer) { const links = linksContainer.querySelectorAll('a[href*="/dark/?"]'); for (const link of links) { const realLink = decode(link.search.split('?')[1]); link.href = realLink; } }