// ==UserScript==
// @author Setcher
// @name Edna.cz Fabricators Censorship
// @name:cs Edna.cz Cenzura Pohádkářů
// @namespace https://greasyfork.org/users/30331-setcher
// @description Hides the comments of trolls
// @description:cs Skryje komentáře pohádkářů/trollů
// @include http://*edna.cz/*
// @version 1.0.4
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
var censoreEnabled = false;
var deleteEntireBox = false;
var hideReactions = false;
var trollsText = "";
var pohadkari = "";
loadSettings();
var box = document.getElementsByClassName('comment');
var parent = document.getElementById("comments");
// Include settings
var sNode = document.createElement ('div');
sNode.setAttribute ('style', 'display: block; margin: 20px 0; text-align: left; margin-left: 4px');
sNode.setAttribute ('id', 'cp_form');
sNode.setAttribute ('class', 'cp_form');
var name = document.createElement ('h2');
name.innerHTML = "Edna.cz Cenzura Pohádkářů";
var form = document.createElement ('form');
var hidelabel = document.createElement('label');
hidelabel.innerHTML = "Skrýt komentáře";
var userslabel = document.createElement('label');
userslabel.innerHTML = "Trollové: ";
var hide = document.createElement ('input');
hide.setAttribute("type", "checkbox");
hide.setAttribute("name", "hideposts");
hide.checked = deleteEntireBox;
hide.disabled = !censoreEnabled;
var censlabel = document.createElement('label');
censlabel.innerHTML = "Cenzurovat komentáře";
var censore = document.createElement ('input');
censore.setAttribute("type", "checkbox");
censore.setAttribute("name", "censoreposts");
censore.checked = censoreEnabled;
censore.addEventListener("click", setHideEnabled, false);
var censlabel2 = document.createElement('label');
censlabel2.innerHTML = "Provést i s reakcemi na ně";
var censore2 = document.createElement ('input');
censore2.setAttribute("type", "checkbox");
censore2.setAttribute("name", "censorereactions");
censore2.checked = hideReactions;
var users = document.createElement ('input');
users.setAttribute("type", "text");
users.setAttribute("name", "trolls");
users.setAttribute("value", trollsText);
users.disabled = !censoreEnabled;
var save = document.createElement ('input');
save.setAttribute("type", "submit");
save.setAttribute("name", "Uložit");
//save.setAttribute("onClick", "javascript: saveSettings();");
save.addEventListener("click", saveSettings, false);
form.appendChild(censlabel);
form.appendChild(censore);
form.appendChild(document.createElement('br'));
form.appendChild(hidelabel);
form.appendChild(hide);
form.appendChild(document.createElement('br'));
form.appendChild(censlabel2);
form.appendChild(censore2);
form.appendChild(document.createElement('br'));
form.appendChild(userslabel);
form.appendChild(users);
form.appendChild(document.createElement('br'));
form.appendChild(save);
sNode.appendChild(name);
sNode.appendChild(form);
parent.parentNode.insertBefore(sNode, parent);
// Process comments
if (box.length > 0) {
var c_Comments = 0;
var c_Reactions = 0;
for (var i = 0; i < box.length; i++) {
var title = box[i].getElementsByClassName('img-box')[0].innerHTML;
var comment = box[i].getElementsByClassName('text-box')[0];
if (censoreEnabled) {
if (title.match(pohadkari) !== null) {
var text = stripTags(comment.innerHTML);
c_Comments++;
comment.innerHTML = "<span title=\""+text+"\"><font color=\"red\">POHÁDKÁŘŮV KOMENTÁŘ VYMAZÁN ("+text.length+" znaků)</font></span>";
if (deleteEntireBox) {
var parentNode = box[i].parentNode;
parentNode.removeChild(box[i]);
i--;
}
} else if (hideReactions) {
var commentHTML = comment.innerHTML;
if (commentHTML.match(pohadkari) !== null) {
var linkUpRegex = /<a href=\"\#comment-[0-9]+\">(.+?)<\/a>/gi;
var linkUps = commentHTML.match(linkUpRegex);
if (linkUps !== null && linkUps.length > 0) {
for (var j = 0; j < linkUps.length; j++) {
if (c_Reactions > 200 || j > 200) {
console.log("BROKEN");
break;
}
// Check if it is a reaction to a troll
if (linkUps[j].match(pohadkari) !== null) {
var text = stripTags(commentHTML);
c_Reactions++;
comment.innerHTML = "<span title=\""+text+"\"><font color=\"red\">REAKCE NA POHÁDKÁŘE VYMAZÁNA ("+text.length+" znaků)</font></span>";
if (deleteEntireBox) {
var parentNode = box[i].parentNode;
parentNode.removeChild(box[i]);
i--;
}
// Flagged as a reaction to a troll -> no need to investigate further
//break;
}
}
}
}
}
}
}
// add notification
if (c_Comments > 0) {
var zNode = document.createElement ('div');
zNode.setAttribute ('style', 'display: block; margin: 20px 0; text-align: center;');
zNode.setAttribute ('id', 'notification');
zNode.setAttribute ('class', 'comment');
var notif = document.createElement ('p');
notif.innerHTML = deleteEntireBox ? 'Odstraněno' : 'Skryto';
notif.innerHTML += ' '+c_Comments+' komentářů od pohádkářů';
if (c_Reactions > 0) {
notif.innerHTML += ' a '+c_Reactions+' reakcí na ně.';
} else
notif.innerHTML += '.';
notif.setAttribute ('style', 'text-align:center');
zNode.innerHTML += notif.outerHTML;
parent.insertBefore(zNode, box[box.length-1].nextSibling);
}
}
function stripTags(text) {
return text.replace(/<[^>]+>/gi, "");
}
function saveSettings() {
console.log ("Saving..");
GM_setValue("censoreEnabled", censore.checked);
GM_setValue("deleteEntireBox", hide.checked);
GM_setValue("hideReactions", censore2.checked);
trollsText = users.value;
trollsText = trollsText.replace(/\s*,\s*/g, ",");
trollsText = trollsText.replace(/,+/g, ",");
users.value = trollsText;
//console.log(trollsText);
GM_setValue("trollsList", trollsText);
}
function loadSettings() {
console.log("Loading..");
censoreEnabled = GM_getValue("censoreEnabled", false);
deleteEntireBox = GM_getValue("deleteEntireBox", false);
hideReactions = GM_getValue("hideReactions", false);
trollsText = GM_getValue("trollsList", "");
pohadkari = trollsText.replace(/,/g, "\|");
pohadkari = pohadkari.replace(/[^a-zA-Z0-9\|\s]+/gi, "\.");
pohadkari = pohadkari.replace(/\s+/g, "\\s\+");
pohadkari = "("+pohadkari+")";
//console.log(pohadkari);
//users.value = trolls;
}
function setHideEnabled() {
hide.disabled = !censore.checked;
users.disabled = !censore.checked;
if (!censore.checked) hide.checked = false;
}