CarstenP: User-JS zur Unterscheidung von Whitelist-Autoren

Hallo zusammen,

ich habe mir ein kleines User-JavasSript fürs Forum gebastelt, mit dem man die Autoren, die man in seiner Whitelist stehen hat, noch weiter unterscheiden kann und damit unterschiedlich hervorheben kann. Vielleicht interessiert es ja irgendjemanden...

Wozu das Ganze?

Ich habe mittlerweile ziemlich viele Autoren in meiner Whitelist stehen. Gerade Personen aus der Whitelist, die nur selten posten, drohen trotz der Hervorhebung unterzugehen. Daher fand ich es recht sinnvoll, diese Autoren nochmal gesondert hervorzuheben.

Wie funktioniert das Skript?

Die Autoren, die abweichend von der in der Nutzereinstellung angegebenen Standardformatierung hervorgehoben werden sollen, werden in dem Skript in Arrays geschrieben (die Namen müssen natürlich auch in der Nutzereinstellung des Forums angegeben werden). Das Skript überprüft, ob ein span-Element die Klassen "author whitelist" enthält. Wenn ja, wird geprüft, ob der Autor in einer der "Spezialwhitelists" steht. Gegebenenfalls wird dann die Klasse "whitelist" gegen "whitelist0", "whitelist1", usw. ausgetauscht. In seinem User-CSS kann man schließlich Formatierungen für diese neuen Klassen angeben.

Das Skript habe ich in Opera 8.02 und Firefox 1.0.6 erfolgreich getestet. Im Internet Explorer 6 funktioniert es nicht (der IE scheint getAttribute() nicht auf "class" anwenden zu können, jedenfalls liefert eine Konstruktion mit getAttribute("class") in meinen Tests immer "null" als Wert).

Hier der Quelltext für zwei zusätzliche "Spezialwhitelists":
(theoretisch natürlich beliebig erweiterbar, bis jeder Whitelist-Autor seine eigene Formatierung hat... ;-) )

function whitelist() {  
  var whitelist = new Array(2);  
  whitelist[0] = new Array("Autor1","Autor2","Autor3");  
  whitelist[1] = new Array("Autor4","Autor5","Autor6");  
  var span = document.getElementsByTagName("span");  
  var anzahl =  span.length;  
  for (var i = 0; i < anzahl; i++) {  
    if (span[i].getAttribute("class") == "author whitelist") {  
      for (var j = 0; j < whitelist.length; j++) {  
        for (var k = 0; k < whitelist[j].length; k++) {  
          if (span[i].childNodes[0].nodeValue == whitelist[j][k]) {  
            span[i].setAttribute("class","author whitelist"+j);  
          }  
        }  
      }  
    }  
  }  
}  
window.onload = whitelist;

Da ich normalerweise wenig bis gar nichts mit JavaScript mache, bin ich für Verbesserungsvorschläge natürlich dankbar... ;-)

Viele Grüße
Carsten

  1. Hi,

    Das Skript habe ich in Opera 8.02 und Firefox 1.0.6 erfolgreich getestet. Im Internet Explorer 6 funktioniert es nicht (der IE scheint getAttribute() nicht auf "class" anwenden zu können, jedenfalls liefert eine Konstruktion mit getAttribute("class") in meinen Tests immer "null" als Wert).

    In den meisten Browsern (IE, Opera, Geckos, andere nicht getestet) bekommt man den Inhalt des class-Attributs des node durch Auslesen von node.className

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo Andreas,

      In den meisten Browsern (IE, Opera, Geckos, andere nicht getestet) bekommt man den Inhalt des class-Attributs des node durch Auslesen von node.className

      Danke für die schnelle Antwort. Hier das modifizierte Skript, das nun auch im Internet Explorer funktioniert:

      function whitelist() {  
        var whitelist = new Array(2);  
        whitelist[0] = new Array("Autor1","Autor2","Autor3");  
        whitelist[1] = new Array("Autor4","Autor5","Autor6");  
        var span = document.getElementsByTagName("span");  
        var anzahl =  span.length;  
        for (var i = 0; i < anzahl; i++) {  
          if (span[i].className == "author whitelist") {  
            for (var j = 0; j < whitelist.length; j++) {  
              for (var k = 0; k < whitelist[j].length; k++) {  
                if (span[i].childNodes[0].nodeValue == whitelist[j][k]) {  
                  span[i].className = "author whitelist"+j;  
                }  
              }  
            }  
          }  
        }  
      }  
      window.onload = whitelist;
      

      Viele Grüße
      Carsten

  2. Hallo CarstenP.

    function whitelist() {

    //...
        if (span[i].getAttribute("class") == "author whitelist") {
      //...

      
    Ggf. solltest du dies ein wenig flexibler gestalten, in dem du MudGuard's Tipp bzgl. meinem User-JS befolgst. (Letzter Satz in [diesem Posting](/archiv/2005/7/t111103/#m698499), sowie Threadzweig.)  
      
      
    Einen schönen Freitag noch.  
      
    Gruß, Ashura  
    
    -- 
    Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|  
    [30 Days to becoming an Opera8 Lover](http://operalover.tntluoma.com/8/) -- [Day 21: Toolbars](http://operalover.tntluoma.com/8/day_21_toolbars)  
    Meine Browser: [Opera 8.02](http://my.opera.com/noctus/affiliate/download/) | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0  
    [\[Deshalb frei! - Argumente pro freie Software\]](http://deshalbfrei.org/)
    
    1. Hallo Ashura,

      function whitelist() {

      //...
          if (span[i].getAttribute("class") == "author whitelist") {
        //...

      
      >   
      > Ggf. solltest du dies ein wenig flexibler gestalten, in dem du MudGuard's Tipp bzgl. meinem User-JS befolgst. (Letzter Satz in [diesem Posting](/archiv/2005/7/t111103/#m698499), sowie Threadzweig.)  
        
      Besteht denn überhaupt die Möglichkeit, daß in diesem class-Attribut mehr als nur "author" und "whitelist" drinsteht (abgesehen davon, daß jemand selbst so wie ich gerade an den Klassennamen rummanipuliert)?  
        
      Aber um auf alle Eventualitäten vorbereitet zu sein... ;-)  
      So sieht's jetzt aus:  
        
      ~~~javascript
      function whitelist() {  
        var whitelist = new Array(2);  
        whitelist[0] = new Array("Autor1","Autor2","Autor3");  
        whitelist[1] = new Array("Autor4","Autor5","Autor6");  
        var span = document.getElementsByTagName("span");  
        var anzahl =  span.length;  
        for (var i = 0; i < anzahl; i++) {  
          if (span[i].className.indexOf("whitelist") != -1) {  
            for (var j = 0; j < whitelist.length; j++) {  
              for (var k = 0; k < whitelist[j].length; k++) {  
                if (span[i].childNodes[0].nodeValue == whitelist[j][k]) {  
                  var neueklasse = span[i].className.replace(/(.*)(\bwhitelist\b)(.*)/, "$1"+"$2"+j+"$3");  
                  span[i].className = neueklasse;  
                }  
              }  
            }  
          }  
        }  
      }  
      window.onload = whitelist;
      

      Einen schönen Freitag noch.

      Ebenso.

      Viele Grüße
      Carsten

      1. hi,

        Besteht denn überhaupt die Möglichkeit, daß in diesem class-Attribut mehr als nur "author" und "whitelist" drinsteht (abgesehen davon, daß jemand selbst so wie ich gerade an den Klassennamen rummanipuliert)?

        reicht die "klammer-bedingung" denn nicht aus als ansporn, es möglichst flexibel zu gestalten?

        vielleicht möchte ja jemand dein script zusammen mit einem anderen einsetzen, welches ebenfalls die dokumentstruktur manipuliert.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hallo wahsaga,

          reicht die "klammer-bedingung" denn nicht aus als ansporn, es möglichst flexibel zu gestalten?

          Doch, deswegen habe ich es ja auch entsprechend erweitert... ;-)

          Viele Grüße
          Carsten

      2. Hallo,

        Besteht denn überhaupt die Möglichkeit, daß in diesem class-Attribut mehr als nur "author" und "whitelist" drinsteht

        "ownposting" und "vip" sind noch zwei weitere mögliche Klassen, wobei die VIP-Funktion hier im SELF-Forum nicht verwendet wird.

        Tim

        1. Hallo Tim,

          "ownposting" und "vip" sind noch zwei weitere mögliche Klassen, wobei die VIP-Funktion hier im SELF-Forum nicht verwendet wird.

          stimmt, die hatte ich auch noch vergessen. Wobei die Wahrscheinlichkeit, daß jemand seine eigenen Postings hervorheben läßt und zusätzlich auch noch sich selbst in die Whitelist einträgt, wohl gering sein dürfte. Aber man kann ja nie wissen. Das flexible Skript so wie es jetzt ist, ist auf alle Fälle besser.

          Danke und viele Grüße
          Carsten