Remove the `/threadmarks` at the end of all SV/SB/QQ URLs to have them go to the thread page instead of the threadmarks page
// ==UserScript== // @name Worm Story Search: Change Threadmark page link to Thread page link // @namespace https://github.com/w4tchdoge // @version 1.0.1-20241208_120940 // @description Remove the `/threadmarks` at the end of all SV/SB/QQ URLs to have them go to the thread page instead of the threadmarks page // @author w4tchdoge // @homepage https://github.com/w4tchdoge/MISC-UserScripts // @match *://wormstorysearch.com/* // @match *://www.wormstorysearch.com/* // @icon http://wormstorysearch.com/favicon.png // @run-at document-idle // @license AGPL-3.0-or-later // @history 1.0.1 — Make the links to threads use HTTPS // @history 1.0.0 — Initial commit // ==/UserScript== (function () { `use strict`; // Get Table Rows const table_rows = document.querySelector('#stories-searchable-table tbody.rows'); // Get Array of Stories const stories_arr = Array.from(table_rows.children); // Iterate on the array of Stories stories_arr.forEach((storyELM) => { Array.from(storyELM.querySelectorAll('td.title a[data-track][href*="/threads/"]')).forEach((elm, index, arr) => { const re_wu = /(https?:\/\/forums?\..*?\.com\/threads\/).*\.(\d+\/)/gmi; /* Regex for extracting work URL without thread name */ const re_pgnum = /(page-\d+)|(reader.)|(threadmarks.?)/i; const initial_url = new URL(elm.getAttribute(`href`)); const output_url = `https://${initial_url.hostname}${initial_url.pathname.split(re_pgnum).at(0)}`.replace(re_wu, `$1$2`).slice(0, -1); // console.log(`#${index + 1}. ${output_url}`); elm.setAttribute(`href`, output_url); }); }); })();