// ==UserScript==
// @name nga.blocker
// @namespace http://ngacn.cc/
// @version 0.1
// @description Block threads by titles and authors
// @author OpenGG
// @match https://bbs.ngacn.cc/thread.php?fid=*
// @grant none
// @downloadURL https://update.greasyfork.icu/scripts/34327/ngablocker.user.js
// @updateURL https://update.greasyfork.icu/scripts/34327/ngablocker.meta.js
// ==/UserScript==
(function () {
'use strict';
var MatchWithArr = function MatchWithArr(fn) {
return function (compare, arr) {
for (var i = arr.length - 1; i > -1; --i) {
if (fn(compare, arr[i])) {
return true;
}
}
return false;
};
};
var random = Math.floor(Math.random() * Math.pow(2, 53));
var clsHide = '_hydra_hidden_nga_' + random;
var clsOptions = '_hydra_options_nga_' + random;
var clsBtn = '_hydra_btn_nga_' + random;
var css = '.' + clsHide + '{display:none}.' + clsBtn + '{position:absolute;top:100px;right:30px;opacity:0.6}.' + clsBtn + ':hover{opacity:1}.' + clsOptions + '{position:absolute;top:130px;right:30px;width:600px;padding:10px;background:#abc}.' + clsOptions + ' label{display:block}';
var addStyle = function addStyle() {
var style = document.createElement('style');
style.textContent = css;
(document.head || document.documentElement).appendChild(style);
};
var hideEl = function hideEl(el) {
el.classList.add(clsHide);
};
var blockedTopics = (localStorage.blockedTopics || '').split(/\r?\n/);
var blockedAuthors = (localStorage.blockedAuthors || '').split(/\r?\n/);
var block = function block() {
var rows = document.querySelectorAll('.topicrow');
var matchAuthor = MatchWithArr(function (compare, item) {
var matches = compare.match(/uid=(\d+)$/);
var uid = matches && matches[1];
return item === uid;
});
var matchTopic = MatchWithArr(function (compare, item) {
return compare.indexOf(item) !== -1;
});
for (var i = rows.length - 1; i > -1; --i) {
var row = rows[i];
if (blockedAuthors.length > 0) {
var author = row.querySelector('a.author');
if (matchAuthor(author.href, blockedAuthors)) {
hideEl(row);
continue;
}
}
if (blockedAuthors.length > 0) {
var topic = row.querySelector('.topic');
if (matchTopic(topic.textContent, blockedTopics)) {
hideEl(row);
continue;
}
}
}
};
var optionsShow = false;
var hideOptions = function hideOptions() {
optionsShow = false;
var el = document.querySelector('.' + clsOptions);
if (el) {
el.parentNode.removeChild(el);
}
};
var showOptions = function showOptions() {
optionsShow = true;
var container = document.createElement('div');
container.className = clsOptions;
container.innerHTML = '';
var _container$querySelec = container.querySelectorAll('textarea'),
blockTopicEl = _container$querySelec[0],
blockAuthorEl = _container$querySelec[1];
var save = container.querySelector('button');
blockTopicEl.value = blockedTopics.join('\n');
blockAuthorEl.value = blockedAuthors.join('\n');
save.addEventListener('click', function () {
localStorage.blockedTopics = blockTopicEl.value;
localStorage.blockedAuthors = blockAuthorEl.value;
hideOptions();
location.reload();
}, false);
document.body.appendChild(container);
};
var addControls = function addControls() {
var el = document.createElement('button');
el.className = clsBtn;
el.textContent = '屏蔽设置';
el.onclick = function () {
if (optionsShow) {
hideOptions();
} else {
showOptions();
}
};
document.body.appendChild(el);
};
var init = function init() {
document.removeEventListener('DOMContentLoaded', init, false);
addStyle();
addControls();
block();
};
if (document.readyState === 'interactive' || document.readyState === 'complete') {
init();
} else {
document.addEventListener('DOMContentLoaded', init, false);
}
})();