NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @namespace https://openuserjs.org/users/SB100 // @name GGn Custom Web Links // @description Allows you to add custom weblinks to torrent pages // @updateURL https://openuserjs.org/meta/SB100/GGn_Custom_Web_Links.meta.js // @version 1.1.1 // @author SB100 // @copyright 2021, SB100 (https://openuserjs.org/users/SB100) // @license MIT // @include https://gazellegames.net/torrents.php?*id=* // ==/UserScript== // ==OpenUserJS== // @author SB100 // ==/OpenUserJS== /* jshint esversion: 6 */ /* * BEGIN SETUP! * * For each new web link that you would like to add, please add an object with the following format: * { * name: 'The name of the web link', * iconUrl: 'A link to the icon you'd like to show in the weblink panel', * searchUrl: 'The search url to use against the main game title. The variable ${TITLE} will be replaced with the actual title, so make sure to include this somewhere in the url', * searchAliasUrl: 'The search url to use with any aliases that the game lists. This is useful for games that have a name in another language, and require a different search url' * } * * All of the keys are case sensitive, so please pay close attention to how you spell them out. * If the game has any aliases listed, a popup will appear when you hover over the box itself, with extra links using the searchAliasUrl url instead */ const CONFIG = [{ name: 'Amazon', iconUrl: 'https://upload.wikimedia.org/wikipedia/commons/d/de/Amazon_icon.png', searchUrl: 'https://www.amazon.com/s?k=${TITLE}', searchAliasUrl: 'https://www.amazon.com/s?k=${TITLE}', }]; /* * END SETUP! * DO NOT MODIFY BELOW THIS LINE */ /** * Gets the game title from the title tag and cleans it up */ function getGameTitle() { const matches = document.title.match(/\-\s(.*?)\:\:/); return matches && matches[1] && matches[1].replace(/[^\w\d\s]/g, '').trim(); } /** * Gets the game aliases, if they exist */ function getGameAliases() { const aliases = document.getElementById('group_aliases'); const text = aliases && aliases.childNodes && Array.from(aliases.childNodes).find(node => node.nodeType === 3); return text && text.textContent.split(',').map(t => t.trim()); } /** * Creates the new icons in the weblinks box. If there are game aliases, it will create the popover too */ function createIcons(gameTitle, gameAliases) { const fragment = document.createDocumentFragment(); CONFIG.forEach(c => { const a = document.createElement('a'); a.href = c.searchUrl.replace('${TITLE}', encodeURI(gameTitle)); a.title = c.name; a.target = '_blank'; a.rel = 'noopener noreferrer'; a.style.position = 'relative'; const div = document.createElement('div'); div.classList.add('weblinks', 'tilt'); div.style.backgroundImage = `url(${c.iconUrl})`; a.appendChild(div); if (gameAliases && gameAliases.length > 0) { a.classList.add('has-weblink-popover'); const popupDiv = document.createElement('div'); popupDiv.classList.add('weblink-popover'); popupDiv.innerHTML = `<ul style='display: inline-block; margin: 0; padding: 0; text-align: left;'> ${gameAliases.map(g => `<li style='display: inline-block; line-height: 20px; white-space: nowrap; width: 100%;'> <a href='${c.searchAliasUrl.replace('${TITLE}', encodeURI(g))}' target='_blank' rel='noopener noreferrer'>${g}</a> </li>`).join(' ')} </ul>` a.appendChild(popupDiv); } fragment.appendChild(a); }); document.getElementById('weblinksdiv').querySelector('.body').appendChild(fragment); } /** * Creates css that powers the popover appearing when you hover over a weblink that has aliases */ function createStyleTag() { const css = `.weblink-popover { display: none; position: absolute; top: 100%; left: 0; border-radius: 5px; padding: 7px; background-color: #0e0e0e; z-index: 2; } .has-weblink-popover:hover .weblink-popover { display: block; }`; const style = document.createElement('style'); style.type = 'text/css'; style.appendChild(document.createTextNode(css)); document.head.appendChild(style); } // runs the script. If no title is found, we don't create extra tags (function () { 'use strict'; const gameTitle = getGameTitle(); const gameAliases = getGameAliases(); if (!gameTitle) { console.log('[GGn Custom Web Links], No Game Title Found, not adding extra web links'); return; } createStyleTag(); createIcons(gameTitle, gameAliases); })();