Edna.cz Fabricators Censorship

Hides the comments of trolls

目前为 2016-02-29 提交的版本。查看 最新版本

// ==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;
}