Add Audible and ABB search links to MAM titles
// ==UserScript==// @name MAM Search Sites// @namespace https://greasyfork.org/en/users/1370284// @version 0.0.1// @license MIT// @description Add Audible and ABB search links to MAM titles// @match https://*.myanonamouse.net/t/*// ==/UserScript==const searchConfig = {audible: {enabled: true,getLink: (title, author, narrator) => {const searchUrl = new URL(`https://www.audible.com/search`);searchUrl.searchParams.set('keywords', `${title} ${author} ${narrator}`);return searchUrl.href;}},abb: {enabled: true,getLink: (title, author) => {const searchUrl = new URL('https://audiobookbay.lu');searchUrl.searchParams.set('s', `${title} ${author}`.toLowerCase());return searchUrl.href;}}};const parser = new DOMParser();function decodeHtmlEntities(str) {if (str == null) return '';const domParser = parser || new DOMParser();const doc = domParser.parseFromString(str, 'text/html');return doc.documentElement.textContent;}function cleanQuery(str) {const decoded = decodeHtmlEntities(str);return decoded.replace(/[?!:\-+~]/g, '');}function removePersonTitles(str) {return str?.replace(/\b(Dr\.?|Mr\.?|Mrs\.?|Ms\.?|Prof\.?|M\.?D\.?|Ph\.?D\.?|D\.?O\.?|D\.?C\.?|D\.?D\.?S\.?|D\.?M\.?D\.?|D\.?Sc\.?|Ed\.?D\.?|LLB|JD|Esq\.?)\b\.?/gi, '') // Remove common author-related titles.replace(/\b\w{1,2}\.\s*/g, '') // Remove any 1 or 2 letter abbreviations followed by a dot.replace(/\s+/g, ' ') // Condense multiple spaces into one.trim(); // Trim any extra spaces at the start or end}function parseData() {const titleEl = document.querySelector('.TorrentTitle');const authorEl = document.querySelector('.torAuthors a');const narratorEl = document.querySelector('#Narrator a');const title = cleanQuery(titleEl?.textContent.trim() || '')const author = removePersonTitles(cleanQuery(authorEl?.textContent.trim() || ''))const narrator = removePersonTitles(cleanQuery(narratorEl?.textContent.trim() || ''))return {title,author,narrator};}function createLinkElement(href, text) {const linkElement = document.createElement('a');linkElement.href = href;linkElement.target = '_blank';linkElement.innerText = text;linkElement.style.marginLeft = '12px';return linkElement;}function addSearchLinkToSubmitInfo() {const { title, author, narrator } = parseData();const submitInfoElement = document.querySelector('#submitInfo .flex');if (!submitInfoElement) return;if (searchConfig.audible.enabled) {const audibleLink = searchConfig.audible.getLink(title, author, narrator);const audibleLinkElement = createLinkElement(audibleLink, '🟠 audible');submitInfoElement.appendChild(audibleLinkElement);}if (searchConfig.abb.enabled) {const audiobookbayLink = searchConfig.abb.getLink(title, author);const audiobookbayLinkElement = createLinkElement(audiobookbayLink, '🎧 ABB');submitInfoElement.appendChild(audiobookbayLinkElement);}}addSearchLinkToSubmitInfo();