NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name YggTorrent amélioré
// @namespace https://openuserjs.org/users/clemente
// @match https://ygg.re/*
// @match https://*.ygg.re/*
// @version 1.23
// @author clemente
// @license MIT
// @description Ajoute la connexion automatique, un bouton télécharger à la recherche, et plus encore
// @inject-into content
// @noframes
// @icon data:image/png;base64,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
// @grant GM_getValue
// @grant GM_setValue
// @homepageURL https://openuserjs.org/scripts/clemente/YggTorrent_am%C3%A9lior%C3%A9
// @supportURL https://openuserjs.org/scripts/clemente/YggTorrent_am%C3%A9lior%C3%A9/issues
// @updateURL https://openuserjs.org/meta/clemente/YggTorrent_amélioré.meta.js
// ==/UserScript==
/* jshint esversion: 6 */
// login();
addDownloadButtonToTorrents();
hideSidebar();
displayLargerNfo();
searchByLatestFirst();
fixFavicon();
// displayNewSearchButton();
keepSearchWhenClickingOnSubcategoryIcon();
replaceIPTVWithRss();
function login(alreadyCalled) {
const loginButton = document.getElementById('register');
if (!loginButton) return; // If the user is already logged in, do nothing
if (!alreadyCalled && !window.jQuery) { // If jQuery is not present, wait one second so that the scripts are loaded and the login system is active
setTimeout(() => login(true), 1000);
return;
}
let isLoginFormValid = true;
const loginForm = document.getElementById('user-login');
loginForm.querySelectorAll('input').forEach(input => {
isLoginFormValid = isLoginFormValid && input.checkValidity();
});
if (!isLoginFormValid) return; // If the form is not valid, then autocomplete is not active and the popup should not bother the user
loginButton.click();
loginForm.querySelector('button').click();
function closePopupIfDisplayed(mutations, observer) {
mutations.forEach(mutation => {
mutation.addedNodes.forEach(node => {
if (node.classList.contains('alert-success')) {
document.querySelector('button.close').click();
observer.disconnect();
}
});
});
}
// Wait for the confirmation popup to appear then close it
const popupObserver = new MutationObserver(closePopupIfDisplayed);
popupObserver.observe(document.body, { childList: true });
}
function addDownloadButtonToTorrents() {
// For every torrent, add the download button
const torrents = document.querySelectorAll('.results table tbody tr');
torrents.forEach(torrent => {
const torrentId = torrent.querySelector('a[target]').target;
const downloadIcon = document.createElement('span');
downloadIcon.classList.add('ico_download');
const downloadButton = document.createElement('a');
downloadButton.href = `/engine/download_torrent?id=${torrentId}`;
downloadButton.append(downloadIcon);
downloadButton.style = 'float: left;';
const nameLink = torrent.querySelector('td:nth-child(3) a');
nameLink.parentNode.insertBefore(downloadButton, nameLink);
});
}
function hideSidebar() {
const sidebar = document.getElementById('cat');
if (sidebar && sidebar.classList.contains('active')) {
sidebar.querySelector('.open').click();
}
}
function displayLargerNfo() {
const modal = document.getElementById('nfoModal');
if (!modal) return; // If there is no modal, the user is not on a torrent page and nothing should be done
const modalDialog = modal.querySelector('.modal-dialog');
modalDialog.classList.remove('modal-sm');
modalDialog.classList.add('modal-lg');
}
function searchByLatestFirst() {
const searchForm = document.querySelector('form.search');
const orderInput = document.createElement('input');
orderInput.name = 'order';
orderInput.value = 'desc';
orderInput.style = 'display: none';
const sortInput = document.createElement('input');
sortInput.name = 'sort';
sortInput.value = 'publish_date';
sortInput.style = 'display: none';
searchForm.append(orderInput);
searchForm.append(sortInput);
}
function fixFavicon() {
const favicon = document.querySelector('link[href="/favicon.ico"]');
favicon.href = "data:image/png;base64,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";
}
function displayNewSearchButton() {
const buttonTitleByStatus = {
true: "Recherche améliorée activée. Cliquer pour désactiver.",
false: "Recherche améliorée désactivée. Cliquer pour activer.",
};
const buttonColorByStatus = {
true: "color: #98e3da;",
false: "color: inherit;",
};
const searchEngineByStatus = {
true: "new_search",
false: "engine",
};
const searchForm = document.querySelector('form.search');
const searchInput = document.querySelector('form.search .input');
const newSearchButton = document.createElement('button');
const newSearchIcon = document.createElement('span');
newSearchIcon.classList = 'ico_search-plus';
newSearchButton.appendChild(newSearchIcon);
function initFormWithStatus() {
const newSearchStatus = GM_getValue('newSearchStatus', false);
newSearchButton.title = buttonTitleByStatus[newSearchStatus];
newSearchButton.style = 'left: unset; right: 15px;' + buttonColorByStatus[newSearchStatus];
searchForm.action = `${new URL(searchForm.action).origin}/${searchEngineByStatus[newSearchStatus]}/search`;
}
function toggleNewSearchStatus() {
const newSearchStatus = GM_getValue('newSearchStatus', false);
GM_setValue('newSearchStatus', !newSearchStatus);
initFormWithStatus();
}
newSearchButton.onclick = (e) => { toggleNewSearchStatus(); e.preventDefault(); };
initFormWithStatus();
searchInput.appendChild(newSearchButton);
}
function keepSearchWhenClickingOnSubcategoryIcon() {
document.querySelectorAll('[class^="tag_subcat_"]').forEach(node => {
const subcategoryId = node.className.split('tag_subcat_')[1];
node.parentNode.href = `${document.URL}&sub_category=${subcategoryId}`;
});
}
function replaceIPTVWithRss() {
const iptvNode = document.evaluate('//*[text()="Regarder la télé"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE).snapshotItem(0);
const parentNode = iptvNode.parentNode;
const rssNode = document.createElement('a');
rssNode.classList = 'title';
rssNode.href = 'https://www.ygg.re/rss';
rssNode.text = 'Flux RSS';
iptvNode.remove();
parentNode.appendChild(rssNode);
}