🏠 Home 

Greasy Fork is available in English.

HWM_Forums_Filter

Фильтрация нежелательных тем на форумах ГВД

// ==UserScript==
// @name           HWM_Forums_Filter
// @namespace      Рианти
// @description    Фильтрация нежелательных тем на форумах ГВД
// @homepage       http://userscripts.org/scripts/show/486129
// @version        1
// @include        http://www.heroeswm.ru/forum_thread.php*
// ==/UserScript==
var _GM_arr_key = 'HWM_Forums_Filter_Array';
var _GM_appearance_key = 'HWM_Forums_Filter_Appearance';
var _controls_marker1 = 'Mm';
var _controls_marker2 = 'Sc';
function appendOnTop(newEl) {
document.body.appendChild(newEl);
newEl.style.position = 'absolute';
newEl.style.top = _appendTitleY + 'px';
newEl.style.right = _appendTitleX + 'px';
}
function applyBlocks(fTable, stance){
var rows = fTable.children, tId, rowsHidden = 0, check;
var blockedThreads = loadBlockedArr(), rowStyle = 0;
for(var i = 1; i < rows.length; i++){
tId = rows[i].getElementsByTagName('a')[0].href.match(/tid=(\d+)/)[1];
check = checkThread(blockedThreads, tId);
appendControls(rows[i], tId, check);
if(stance) {
if (check) {
rows[i].style.display = 'none';
rowsHidden++;
}
}
else{
rows[i].style.display = '';
}
if(!stance || !check){
if(rowStyle = (rowStyle + 1) % 2) rows[i].className = '';
else rows[i].className = 'second';
}
}
return rowsHidden;
}
function checkThread(blockedArr, tId){
if(blockedArr.indexOf(tId) > -1) return 1;
return 0;
}
function loadBlockedArr(){
return JSON.parse(GM_getValue(_GM_arr_key, '[]'));
}
function saveBlockedArr(arr){
GM_setValue(_GM_arr_key, JSON.stringify(arr));
}
function addBlockedThread(tId){
var blockedArr = loadBlockedArr();
blockedArr.push(tId);
saveBlockedArr(blockedArr);
}
function removeBlockedThread(tId){
var blockedArr = loadBlockedArr();
delete blockedArr[blockedArr.indexOf(tId)];
saveBlockedArr(blockedArr);
}
function appendControls(row, tId, stance){
var span = document.createElement('span');
span.className = _controls_marker2;
if(stance){
span.innerHTML = '<i style="cursor: pointer" title="Показывать">(-)</i> ';
span.onclick = function(){removeBlockedThread(tId); applyAppearance()};
}
else{
span.innerHTML = '<i style="cursor: pointer" title="Скрывать">(+)</i> ';
span.onclick = function(){addBlockedThread(tId); applyAppearance()};
}
if(row.firstChild.firstChild.className == _controls_marker2) {
row.firstChild.replaceChild(span, row.firstChild.firstChild);
} else {
row.firstChild.insertBefore(span, row.firstChild.firstChild);
}
}
function enabledAppearance(){
clearTitle();
var threadsHidden = applyBlocks(_table, 1);
var p = document.createElement('p');
var small = document.createElement('small');
p.innerHTML = 'Тем скрыто: ' + threadsHidden + ' ';
p.id = _controls_marker1;
small.innerHTML = '(показать)';
small.style.cursor = 'pointer';
small.onclick = function(){toggleAppearance(); disabledAppearance()};
p.appendChild(small);
appendOnTop(p);
}
function disabledAppearance(){
clearTitle();
applyBlocks(_table, 0);
var p = document.createElement('p');
var small = document.createElement('small');
p.innerHTML = 'Показ всех тем ';
p.id = _controls_marker1;
small.innerHTML = '(скрыть)';
small.style.cursor = 'pointer';
small.onclick = function(){toggleAppearance(); enabledAppearance()};
p.appendChild(small);
appendOnTop(p);
}
function clearTitle(){
var title = document.getElementById(_controls_marker1);
if(title) document.body.removeChild(title);
}
function toggleAppearance(){
GM_setValue(_GM_appearance_key, (getAppearance() + 1) % 2);
}
function getAppearance(){
return parseInt(GM_getValue(_GM_appearance_key, 1));
}
function applyAppearance(){
if(getAppearance()) enabledAppearance();
else disabledAppearance();
}
var _table = document.querySelector('.table3  > tbody');
var rCell = _table.querySelector('tr:nth-child(1) > th:nth-child(5)');
var offsetY = 5;
var _appendTitleX = _table.getBoundingClientRect().left;
var _appendTitleY = _table.getBoundingClientRect().top - rCell.offsetHeight - offsetY;
if (!this.GM_getValue || (this.GM_getValue.toString && this.GM_getValue.toString().indexOf("not supported")>-1)) {
this.GM_getValue = function (key, def) { return localStorage[key] || def; }
this.GM_setValue = function (key, value) { return localStorage[key] = value; }
this.GM_deleteValue = function (key) { return delete localStorage[key]; }
}
applyAppearance();