DBNA Post - Hider

Versteckt Beiträge von bestimmten Usern auf DBNA.

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name        DBNA Post - Hider
// @namespace   dbnahider
// @description Versteckt Beiträge von bestimmten Usern auf DBNA.
// @include     http://*.dbna.de/webforum/*
// @include     https://*.dbna.de/webforum/*
// @version     0.2.0
// @grant       none
// ==/UserScript==


//Zu löschender Benutzername als Array, bspw.:
//var usernames = ["username1", "username2"];
var usernames = [""];

//Beiträge bekommen
var posts = document.getElementsByClassName('name');

//Alle Beiträge durchgehen
for (var i = 0; i < posts.length; i++) {
  //Aktueller Beitrag
  var currentpost = posts[i];
  
  //Wenn Aktueller Beitrag vom Benutzer ist
  for(var j = 0; j < usernames.length; j++) {
    if(currentpost.innerHTML.indexOf(usernames[j]) != -1) {
      //Hochgehen in das umgebende <tr>
      post = currentpost.parentNode.parentNode;  
      //Inhalt sichern
      var postcontent = post;
      //Inhalt ist nur der wirkliche Post
      postcontent = postcontent.childNodes[3]; //Tabelle rund um den Post
      //Inhalt für "trotzdem anzeigen?"-Box
      actualcontent = findClass(postcontent, "postbody");
      //Post löschen bzw. ersetzen
      post.innerHTML = "<td class='row1' align='left' height='40' valign='top' style='background-color:#FF6666;'>"
      + "<img src='http://abload.de/img/skullmiu1h.png' alt='Blubb' width='32' height='32' /></td>"
      + "<td class='row1' height='40' nowrap='nowrap' valign='middle' style='background-color:#FF6666; vertical-align:middle;'>"
      + "Beitrag von <b>" 
      + usernames[j]
      + "</b> an dieser Stelle wurde versteckt. "
      + "<a href='javascript:hiddentoggle(" + i + ");'>Trotzdem Anzeigen?</a>"
      + "<div style='padding:10px; width:433px' id='hiddenpost" + i + "'>"
      + actualcontent
      + "</div></td>"; 
      //Hidden-Feld ausblenden
      document.getElementById("hiddenpost"+i).style.display = 'none';
      //Tabelle im Hidden-Feld auf richtige Breite
      document.getElementById("hiddenpost"+i).firstElementChild.width="433px";
      document.getElementById("hiddenpost"+i).firstElementChild.splay="block";
      document.getElementById("hiddenpost"+i).firstElementChild.style.wordWrap = "break-word";
      //Nächstes ELement ist das Suchfeld, das muss auch weg
      searchfield = post;
      //Schleife, damit Whitespace nicht als Element erkannt wird
      do {
        searchfield = searchfield.nextSibling;
      } while (searchfield && searchfield.nodeType !== 1);
      //Element gefunden!
      searchfield.innerHTML = "";
    } else { 
      //Wenn nicht, überspringen
    }
  }
}

//Zitate bekommen
var quotes = document.getElementsByClassName('genmed');

//Alle Zitate durchgehen
for(i = 0; i < quotes.length; i++) {
  //Aktuelles Zitat
  var currentquote = quotes[i];
  //Runtergehen ins <b>
  quote = currentquote.firstChild;  
  //Wenn aktuelles Zitat von User
  for(j = 0; j < usernames.length; j++) {
    //Schauen ob der Username in Quote enthalten ist ("x hat geschrieben")
    if(quote.innerHTML.indexOf(usernames[j]) != -1) {
      quote.innerHTML = "Entferntes Zitat von " + usernames[j] + ".";
      quote.parentNode.parentNode.parentNode.nextElementSibling.firstElementChild.innerHTML = "[--]";
    }
  }
}

//Umschaltefunktion in die Seite einschleusen
script = document.createElement('script');
script.type="text/javascript";
script.textContent = 'function hiddentoggle(i) { console.log(document.getElementById("hiddenpost"+i));' 
+ '(document.getElementById("hiddenpost"+i).style.display == "none") ? document.getElementById("hiddenpost"+i).style.display = "block" : document.getElementById("hiddenpost"+i).style.display = "none";}';
document.body.insertBefore(script, document.getElementById("page-container"));

//Find Child with Class
//Source: https://stackoverflow.com/questions/12166753/how-to-get-child-element-by-class-name
function findClass(element, className) {
    var foundElement = null, found;
    function recurse(element, className, found) {
        for (var i = 0; i < element.childNodes.length && !found; i++) {
            var el = element.childNodes[i];
            var classes = el.className != undefined? el.className.split(" ") : [];
            for (var j = 0, jl = classes.length; j < jl; j++) {
                if (classes[j] == className) {
                    found = true;
                    foundElement = element.innerHTML;
                    break;
                }
            }
            if(found)
                break;
            recurse(element.childNodes[i], className, found);
        }
    }
    recurse(element, className, false);
    return foundElement;
}