// ==UserScript== // @name JRH: JoyReactor Helper // @description Улучшаем JoyReactor // @version 2.2.1 // @author DmitriyMX // @downloadURL https://gitlab.com/DmitriyMX/joy-correcting-nofollow-domain/raw/master/userscript.js // @updateURL https://gitlab.com/DmitriyMX/joy-correcting-nofollow-domain/raw/master/userscript.js // @match http://joy.reactor.cc/* // @grant none // @run-at document-end // ==/UserScript== const reactorDomain = 'joy.reactor.cc'; function getKnownReactorDomains() { return ['reactor.cc', 'joyreactor.cc']; } /** * Исправляет внутренние ссылки "реактора" */ function fixReactorLinks() { getKnownReactorDomains().forEach(domain => { document.querySelectorAll('a[href^="http://' + domain + '/"]').forEach(elm => { elm.href = elm.href.replace('http://' + domain + '/', 'http://' + reactorDomain + '/'); }); document.querySelectorAll('a[href^="//' + domain + '/"]').forEach(elm => { elm.href = elm.href.replace('//' + domain + '/', '//' + reactorDomain + '/'); }); }); } function createTreeButton(listId) { var aTag = document.createElement('a'); aTag.href = "#"; aTag.classList.toggle('collapse-comments'); aTag.text = '[-]'; aTag.dataset.listid = listId; aTag.style.fontWeight = 'bold'; aTag.style.color = '#656464'; aTag.style.lineHeight = '31px'; aTag.style.textDecoration = 'none'; aTag.style.margin = '0 10px'; aTag.style.padding = '0 10px'; aTag.style.borderRadius = '15px'; aTag.style.background = '#dfdfdf'; aTag.onclick = function() { var listId = this.dataset.listid; var commentListElement = document.getElementById(listId); if (commentListElement.style.display === 'none') { commentListElement.style.display = ''; this.text = '[-]'; } else { commentListElement.style.display = 'none'; this.text = '[+]'; } return false; }; return aTag; } /** * Добавляем кнопку сворачивания комментариев */ function collapseTreeComments() { var blocks = document.getElementsByClassName('post_comment_list'); var commentBlock = blocks.length === 2 ? blocks[1] : blocks[0]; Array.from(commentBlock.querySelectorAll('div.comment')) .filter(elm => { return elm.nextElementSibling !== null; }) .filter(elm => { return elm.nextElementSibling.children.length > 0; }) .forEach(elm => { var listId = elm.nextElementSibling.id; elm.querySelector('span.reply-link').appendChild(createTreeButton(listId)); }); } function isPostPage() { return document.URL.match(/http?:\/\/joy\.reactor\.cc\/post/) !== null } /** * Удаляем лишние элементы с сайта */ function removeExcessElements() { // Удаляем пункты меню "Люди" и "О проекте" Array.from(document.querySelectorAll('#navlist li')) .filter(elm => { return elm.querySelector('a').text === "Люди" || elm.querySelector('a').text === "О проекте" }) .forEach(elm => { elm.remove() }); // Удаляем правую колонку document.getElementById('sidebar').remove(); // Косметические исправления var width = '930px'; document.getElementById('header').style.width = width; document.getElementById('page').style.width = width; document.getElementById('topbar').children[0].style.width = width; document.getElementById('container').style.minWidth = '0'; // Переключатель языков Array.from(document.getElementsByClassName('lang_select')).forEach(elm => { elm.remove() }); } /** * Удаляем лишние элементы из поста */ function removeExcessElementsInPost() { // Удаляем "Тренды" и "Фэндомы" var elements = document.getElementsByClassName('additional_info'); if (elements.length === 1) { elements[0].remove(); } // Удаляем "Похожие посты" elements = Array.from(document.getElementsByClassName('mainheader')) .filter(elm => { return elm.innerText === "Похожие посты" }); if (elements.length === 1) { elements[0].nextElementSibling.remove(); elements[0].remove(); } } /** * Все "новые комментарии" перестают подсвечиваться */ function unNewComments() { document.querySelectorAll('.new').forEach(elm => { elm.classList.toggle('new') }); } (function() { 'use strict'; removeExcessElements(); fixReactorLinks(); if (isPostPage()) { removeExcessElementsInPost(); collapseTreeComments(); unNewComments(); } })();