149 lines
4.8 KiB
JavaScript
149 lines
4.8 KiB
JavaScript
// ==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();
|
||
}
|
||
})();
|