Seite 4 von 8

Version 1.2

Verfasst: 08.02.2012, 16:07
von Maxs
Version 1.2 wurde nun veröffentlicht. Bitte unbedingt aktualisieren!

__________________________________________


Hallo Klick0000,

danke für die Meldung! Der Bug war mir bis heute leider unbekannt. :)
Ich habe den Bug rekonstruieren, im Code finden und somit fixen können. Vielen Dank!

Außerdem konnte ich nun endlich einen weiteren schon länger bekannten Bug finden und fixen, denn er trat bei mir nun endlich auch mal auf (mit Firefox und Firebug). Die Onlineliste sollte nun nicht mehr verschwinden können, wenn man den Raum wechselt. Ich bitte euch, sobald der Bug nochmal mit der neuen Version 1.2 auftritt, ihn zu melden (am besten mit Link zu eurem Chat)!

Curuba hat geschrieben: Das einzige was jetzt noch übrig bleibt ist:
Wenn ich in einen anderen Raum wechsel werde ich in die Away-Liste verschoben, wenn ich wieder zurück in den Hauptchat wechsle ist die Liste ganz weg.
Tritt der Bug nun auch noch in der neuesten Version (also 1.2), die ich heute veröffentlicht habe, auf?


// EDIT 16:54 Uhr: Im Code hatte sich ein kleiner Kopierfehler eingeschlichen, der wurde nun ausgebessert. Bitte aktualisieren, die vor 16:54 Uhr den Code kopiert haben.

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 08.02.2012, 17:16
von Klick0000
Hallo Max,

Danke - das klappt !

Aber:

Der Fehler tritt beim Firefox nicht mehr auf, allerdings wird beim Internetexplorer die Onlineliste blinkend angezeigt, d.h die Liste blinkt im secunden Rhytmus :-)

ciao
Nicola

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 08.02.2012, 17:31
von Maxs
Könntest du mir deine Chatadresse posten? Gerne auch per PN.

//Edit: Okay, das tritt im IE 9 nicht auf, aber in den früheren Versionen ... Ich schaue mal, was sich machen lässt.

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 08.02.2012, 18:15
von Klick0000
Hallo Max,

Ich habe den IE 8 - meine Adresse ist: citytalk-owl.de

Ciao
Nicola

Version 1.3

Verfasst: 08.02.2012, 18:50
von Maxs
So, es gibt eine neue Version: 1.3
Bitte aktualisieren! Diese Version fixt das Blinkproblem, das bei älteren IE-Versionen mit Version 1.2 aufgetreten ist.

Danke für die Meldung, Klick0000! ;)

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 08.02.2012, 19:44
von Klick0000
Alle guten Dinge sind 3 und das ist Version 1.3 8)

Funktioniert tadellos - thanks

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 20.02.2012, 18:15
von lieblich
Hallo,

habe Probleme mit der Grafik hinter den Nicknamen. Kann sich das jemand angucken?
Script:Zeigen

Code: Alles auswählen

// Version 1.3

newOL = new (function () {


/* Konfiguration */


// Hier werden die einzelnen Gruppen für die Onlineliste angegeben
// Die Syntax ist:

// ["ID", "NAME", "CSS-STYLE", [USERLISTE]],
// ID = Hier musst du eine ID für die Gruppe angeben. Diese muss einzigartig sein und darf insgesamt nur einmal vorkommen!
// NAME = Hier kommt der Gruppenname hin, also die Überschrift der Gruppe. HTML darf benutzt werden!
// CSS-STYLE = Hier kannst du beliebig viele CSS-Befehle auflisten. Diese ändern den Style (z.B. Farbe) der User in dieser Gruppe. Übersicht der CSS-Befehle findest du z.B. hier: http://www.html-seminar.de/css-definitionen-uebersicht.htm
// [USERLISTE] = Hier werden die User aufgezählt, die auf jeden Fall in diese Gruppe müssen. Syntax: ["USER1", "USER2", "USER3", "USER4"]

// Die Reihenfolge der Gruppen kann beliebig geändert werden. Sie erscheinen in der Onlineliste in genau der gleichen Reihenfolge wie hier angegeben,
// BEACHTE: Nach der letzten Gruppe darf KEIN Komma stehen, aber die vorherigen Gruppen benötigen unbedingt eins danach!

  this.olBlocks = [
 
    ["team", "Team-Liste", "color: #ff0000;", []],
    ["bots", "Bot-Liste", "font-weight: bold; color: #0000FF; font-family: Times    New Roman;", ["wkQB", "TeeneBot", "chatbot"]],
    ["user", "User-Liste", "", []],
    ["guest", "Gäste-Liste", "", []],
    ["away", "Away-Liste", "color: #FF0000;", []]
   
  ];


// Hier können Bilder vor oder nach den Nicks angefügt werden
// this.olPicsBefore fügt Bilder VOR den Nicks ein und this.olPicsBefore NACH den Nicks
// Die Syntax ist:

// [""],
   [""]
// URL-ZUM-BILD = Hier muss die URL zum Bild angegeben werden
// USER = Hier können die User angegeben werden, die das Bild erhalten sollen. Es können beliebig viele User angegeben werden, diese müssen nur immer durch ein Komma abgetrennt werden und in Anführungszeichen gesetzt werden. Nach dem letzten User kommt kein Komma!

// Es können beliebig viele Gruppen (Bilder mit ihren Usern) angegeben werden.
// BEACHTE: Nach der letzten Gruppe darf wie immer KEIN Komma stehen, aber die vorherigen Gruppen benötigen unbedingt eins danach!

  this.olPicsBefore = [
   
  ["server4.webkicks.de/hauptchat/replacer/admin.gif", "lieblich", "USER2"],
  ["server4.webkicks.de/hauptchat/replacer/bot.gif", "TeeneBot", "USER4", "USER5", "USER6"]
  ["server4.webkicks.de/hauptchat/replacer/stern.gif", "BigMac", "USER2"],
  
  ];
 
  this.olPicsAfter = [
   
  ];


// Hier kann man Usern einen bestimmten CSS-Sytle einrichten, der den jeweiligen Gruppenstyle "überschreibt"
// Die Syntax ist:

// ["USER", "CSS-STYLE"],
// USER = Hier kommt der Username des Nicks hinein, der einen eigenen CSS-Style bekommen soll
// CSS-Style = Hier kannst du beliebig viele CSS-Befehle auflisten. Diese ändern den Style (z.B. Farbe) des Users. Übersicht der CSS-Befehle findest du z.B. hier: http://www.html-seminar.de/css-definitionen-uebersicht.htm

// Es können beliebig viele User einen eigenen CSS-Style bekommen
// BEACHTE: Nach der letzten Gruppe darf wie immer KEIN Komma stehen, aber die vorherigen Gruppen benötigen unbedingt eins danach!

  this.userStyle = [
   
  ];


// Hier wird eingestellt, ob die einzelnen User in den Gruppen alphabetisch sortiert werden sollen
// 1 = Aktiviert; 0 = Deaktiviert 

  this.olSortActivated = 1;



/* Ende der Konfiguration */ 
/* Ab hier bitte nichts mehr ändern! */



  var that = this;

// user - speichert in einem Array alle User im Chatraum
// Pro User ein Array mit 6 Strings
// 1. String: Name; 2. String: Profil; 3. String: Rang; 4. String: Away; 5. String: Raum; 6. String: Awaygrund

  this.user = [];

 
// createBlocks - erstellt die Gruppen in der OL und startet das Script

  this.createBlocks = function () {
    if (olIsLoad()) {
      var prFd = parent.rightFrame.document;
      var vOL = (!myBrowser.IE || navigator.userAgent.match(/MSIE ((\d\d)|9)\.[0-9]+/)) ? ((prFd.getElementsByTagName("body")[0].childNodes[2].nodeName == "TABLE") ? true : false) : false;
      // Die 2. Überprüfung verhindert unsichtbare OL
      if (!prFd.getElementById("newOL") || vOL) {
        prFd.getElementById("bd:").style.display = "none";
        that.overwriteAdds();
        that.delNewOL();
        var newTD = document.createElement("td");
        newTD.id = "newOL";
        prFd.getElementsByTagName("tr")[0].appendChild(newTD);
        for (var i = 0; i < that.olBlocks.length; i++) {
          var olBid = that.olBlocks[i][0];
          var newOLBlock = document.createElement("div");
          with (newOLBlock) {
            id = olBid + "wrapper";
            innerHTML = "<div id='" + olBid + "headline' style='margin-top:10px; margin-bottom:1px;'><a id='" + olBid + "link' onclick=\"parent.mainframe.newOL.switchStatus('" + olBid + "')\">-</a> " + that.olBlocks[i][1] + "</div>";
            innerHTML += "<ul id='" + olBid + "list' style='list-style-type:none; margin-top:5px; margin-bottom:1px;" + that.olBlocks[i][2] + "'></ul>";
          }
          prFd.getElementById("newOL").appendChild(newOLBlock);
        }
        getXML("GET", "/"+chatData[1]+"/api/get_onlinelist?" + new Date().getTime(), 0, that.getUser);
      }
    } else {
      window.setTimeout("parent.mainframe.newOL.createBlocks()", 50);
    }
  }
 
// delNewOl - löscht die neue Onlineliste
 
  this.delNewOL = function () {
    var delOL;
    if (delOL = parent.rightFrame.document.getElementById("newOL")) {
      delOL.parentNode.removeChild(delOL);
    }
  }

// switchStatus - blendet einen Block ein und aus
// id: ID des Blocks

  this.switchStatus = function (id) {
    var prFd = parent.rightFrame.document;
    if (prFd.getElementById(id + "link").innerHTML == "-") {
      prFd.getElementById(id + "link").innerHTML = "+";
      prFd.getElementById(id + "list").style.display = "none";
    } else {
      prFd.getElementById(id + "link").innerHTML = "-";
      prFd.getElementById(id + "list").style.display = "block";
    }
  }


// getOnlineUser - füllt das Array user
// r: auszuwertendes Request

  this.getUser = function (r) {
    if (r.readyState == 4) {
      // Wenn Status 200 ist, ist alles korrekt gelaufen
      if (r.status != 200) {
        console.log(r);
      } else {
        var c = r.responseXML.documentElement;
        that.user = [];
        for (var i = 0; i < c.getElementsByTagName("onlineuser").length; i++) {
          var u = c.getElementsByTagName("onlineuser")[i];
          that.user[i] = [];
          with (that.user[i]) {
            push(u.getElementsByTagName("name")[0].firstChild.data);
            push(u.getElementsByTagName("profil")[0].firstChild.data);
            push(u.getElementsByTagName("rang")[0].firstChild.data);
            push(u.getElementsByTagName("away")[0].firstChild.data);
            push(u.getElementsByTagName("channel")[0].firstChild.data);
          }
          if (u.getElementsByTagName("awayreason")[0].firstChild) {
            that.user[i].push(u.getElementsByTagName("awayreason")[0].firstChild.data);
          }
        }
        that.firstAdds();
      }
    }
  }


// firstAdds - schreibt die User in die Onlineliste, die schon online sind und per getUser geladen wurden 

  this.firstAdds = function () {
    for (var j = 0; j < that.user.length; j++) {
      if (that.user[j][0] == myNick) {
        break;
      }
    }
    for (var i = 0; i < that.user.length; i++) {
      if (that.user[j][4] == that.user[i][4]) {
        var away = (that.user[i][3] == "0") ? 0 : 1;
        var awayr = (that.user[i][5] == "undefined") ? "" : that.user[i][5];
        var server = (that.user[i][1] == 1) ? "server" + chatData[0] : "";
        var chat = (that.user[i][1] == 1) ? chatData[1] : "";
        var rank = that.getRankException(that.user[i][0]);
        rank = (rank == 0) ? that.user[i][2] : rank;
        if (rank.match(/list$/) == null) {
          switch (rank) {
            case "gast":
              rank = "guestlist";
              break;
            case "admin":
              rank = "teamlist";
              break;
            case "mod":
              rank = "teamlist";
              break;
            default:
              rank = "userlist";
              break;
          }
        }
        that.add(that.user[i][0], away, awayr, server, chat, rank);
      }
    }
  }


// getRankException - durchsucht alle Elemente in olBlocks nach Usern und gibt den jeweiligen Blocknamen zurück
// chatter: User, nach dem gesucht werden soll

  this.getRankException = function (chatter) {
    for (var i = 0; i < that.olBlocks.length; i++) {
      var list = that.olBlocks[i][3];
      var t = typeof list;
      if (t != undefined && ((t == "object" && list.inArray(chatter)) || (t == "string" && list == chatter))) {
        return that.olBlocks[i][0] + "list";
      }
    }
    return 0;
  }


// getBlock - checkt die Loginnachricht findet heraus, in welchen Block der User muss
// user: User; profil: hat der User ein Profil (1 oder 0)

  this.getBlock = function (user, profil) {
    var tds = parent.mainframe.document.getElementsByTagName("td");
    var rank = that.getRankException(user);
    if (rank == 0) {
      var howlong = (tds.length > 5) ? 5 : tds.length;
      var clD;
      for (var i = 1; i <= howlong; i++) {
        clD = lineData(tds[tds.length - i]);
        if (clD != null && clD[2] == user && clD[4] == 0) {
          rank = "guestlist";
          break;
        }
      }
      if (rank == 0) {
        howlong = (chatTeam[0].length > chatTeam[1].length) ? chatTeam[0].length : chatTeam[1].length;
        howlong = (1 > howlong) ? 1 : howlong;
        for (var i = 0; i < howlong; i++) {
          if (chatTeam[0][i] == user || chatTeam[1][i] == user || chatTeam[2] == user) {
            rank = "teamlist";
            break;
          }
        }
      }
      if (rank == 0) {
        rank = "userlist";
      }
    }
    for (var i = 0; i < that.user.length; i++) {
      if (that.user[i][0] == user) {
        return rank;
      }
    }
    var j = that.user.length;
    that.user[j] = [];
    with (that.user[j]) {
      push(user);
      push(profil);
      push(rank);
      push("0");
      push(getRoom());
    }
    return rank;
  }


 // olSort - sortiert die einzelnen User alphabetisch
 // chatter: User, der in der Liste alphabetisch sortiert werden soll; block: Liste, in der sich der User befindet

  this.olSort = function (chatter, block) {
    var prFd = parent.rightFrame.document;
    var b = prFd.getElementById(block);
    var s = b.getElementsByTagName("span");
    if (s.length != 0) {
      for (var i = 0; i < s.length; i++) {
        var c = chatter.toLowerCase();
        var span = s[i].innerHTML.replace(/\s$/, "");
        var sortArray = [span.toLowerCase(), c].sort();
        if (sortArray[0] == c && sortArray[1] != c) {
          b.insertBefore(prFd.getElementById("new" + chatter), prFd.getElementById("new" + span));
          break;
        }
      }
    } else {
      return;
    }
  }


// addPics - fügt dem User ein Bild vor oder nach dem Nick ein Bild ein
// chatter: User, dem das Bild angehängt werden soll, loc: Ort (0 = vor dem Nick; 1 = nach dem Nick); profil: Besitzt der User ein Profil (0 oder 1)

  this.addPics = function (chatter, loc, profil) {
    picloc = (loc) ? that.olPicsAfter : that.olPicsBefore;
    for (var i = 0; i < picloc.length; i++) {
      if (picloc[i].inArray(chatter)) {
        return ((loc && profil) ? " " : "") + "<img src='" + picloc[i][0] + "' />" + ((!loc) ? " " : "");
      }
    }
    return "";
  }


// getUserStyle - durchsucht userStyle und gibt bei Erfolg den Style des Users zurück
// chatter: User, dessen Style gesucht wird

  this.getUserStyle = function (chatter) {
    for (var i = 0; i < that.userStyle.length; i++) {
      var s = that.userStyle[i];
      if (s[0] == chatter) {
        return s[1];
      }
    }
    return "";
  }


// add - fügt den User in die Onlineliste ein
// chatter: User, der eingefügt werden soll; away: Abwesend (0 oder 1); reason: Abwesendheitsgrund; server: Falls Profil - "server" + Nummer; chat: Falls Profil - Chatname; rank: Falls angegeben - in welche Liste er kommt

  this.add = function (chatter, away, reason, server, chat, rank) {
    var prFd = parent.rightFrame.document;
    that.del(chatter, 1);
    if (!prFd.getElementById("new" + chatter)) {
      var ownsprofil = (server && chat) ? 1 : 0;
      var block = (away) ? "awaylist" : ((rank) ? rank : that.getBlock(chatter, ownsprofil));
      var newChatter = document.createElement("li");
      with (newChatter) {
        id = "new" + chatter;
        title = (away) ? chatter + " ist abwesend" + ((reason) ? ": " + reason : "") : chatter;
        innerHTML = that.addPics(chatter, 0) + "<span style='" + that.getUserStyle(chatter) + "' onclick=\"fluester('" + chatter + "');\">" + chatter + " </span>";
        innerHTML += (ownsprofil) ? "<a id='profil" + chatter + "' title='Profil von " + chatter + "' href=\"Javascript:wopen(\'http://" + server + ".webkicks.de/" + chat + "/pv/" + chatter + "/open\',510,600)\;\">(P)</a>" : "";
        innerHTML += that.addPics(chatter, 1, ownsprofil);
      }
      prFd.getElementById(block).appendChild(newChatter);
      if (that.olSortActivated) {
        that.olSort(chatter, block);
      }
    }
  }


// del - löscht einen User aus der Onlineliste und von this.user
// id: Nickname; fromadd: Kommt die Anfrage von add (0 oder 1)

  this.del = function (id, fromadd) {
    var prFd = parent.rightFrame.document;
    var delUser;
    if (delUser = prFd.getElementById("new" + id)) {
      delUser.parentNode.removeChild(delUser);
    }
    if (!fromadd) {
      for (var i = 0; i < that.user.length; i++) {
        if (that.user[i][0] == id) {
          that.user.splice(i, 1);
          break;
        }
      }
    }
  }


// overwriteAdds - überschreibt die add- und del-Funktionen der alten Onlineliste

  this.overwriteAdds = function () {
    var rf = parent.rightFrame;
    rf.add = function (chatter, away, reason) {
      rf.del(chatter);
      that.add(chatter, away, reason);
      if (rf.document.getElementById(chatter) == null) {
        var y3 = document.createElement("div");
        y3.id = chatter;
        y3.innerHTML += ((away) ? "<i>" : "") + "<span title=" + ((away && reason) ? chatter + "ist abwesend: " + reason : chatter) + "><span onClick=\"fluester('" + chatter + "')\">" + chatter + " </span></span>" + ((away) ? "</i>" : "");
        rf.document.getElementById("bd:").appendChild(y3);   
      }
    }

    rf.addp = function (chatter, server, chat, away, reason) {
      rf.del(chatter);
      that.add(chatter, away, reason, server, chat);
      if (rf.document.getElementById(chatter) == null) {
        var y3 = document.createElement("div");
        y3.id = chatter;
        y3.innerHTML = ((away) ? "<i>" : "") + "<span title=" + ((away && reason) ? chatter + "ist abwesend: " + reason : chatter) + "><span onClick=\"fluester('" + chatter + "')\">" + chatter + " </span></span>" + ((away) ? "</i>" : "");
        y3.innerHTML += "<font title=\"Profil von " + chatter + "\"><a href=\"Javascript:wopen(\'http://" + server + ".webkicks.de/" + chat + "/pv/" + chatter + "/open\',510,600)\;\">(P)</a></font>";
        rf.document.getElementById("bd:").appendChild(y3);
      }
    }

    rf.del = function (user) {
      that.del(user, 0);
      var xy = rf.document.getElementById(user);
      if(xy != null) {
        rf.document.getElementById("bd:").removeChild(xy);
      }
    }
  }

});

newOLint = window.setInterval('newOL.createBlocks();', 1000);[/script]
Dann funktionieren folgende Scripts für die Onlineliste nicht mehr: Wenn Chatter abwesend ist, kursiv und durchgestrichen in der Onlineliste darstellen.
Eigener Nick fett funktioniert auch nicht.
Könnte man noch Stammys eintragen? Sie sollten dann gelb sein und natürlich noch die Grafik. Aber die Grafiken kriege ich nicht hin, obwohl ich die richtige Grafik-adresse eingegeben habe...
Wie würde dies klappen?

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 20.02.2012, 18:27
von ZischDings
lieblich hat geschrieben:...obwohl ich die richtige Grafoik-adresse eingegeben habe...
Das sieht aber nicht danach aus:

Code: Alles auswählen

server4.webkicks.de/huaptchat/replacer/stern.gif

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 20.02.2012, 18:30
von Linus
Aus der Liste mit inkompatiblen Scripts:
- Die Scripts "Bei Away..." funktionieren nicht mehr, sind aber auch unnötig, da sie direkt in diesem Script in der Away-Liste eingestellt werden können
- Eigener Nick in der Onlineliste fettgedruckt (von 1. FC Keller) funktioniert auch nicht. Wenn gewünscht, einfach sagen

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 20.02.2012, 18:39
von lieblich
Ist mir gar nicht aufgefallen. Aber die Grafik-Adresse für die Admin-Grafik ist richtig, wird aber trotzdem nicht angezeigt.

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 20.02.2012, 19:29
von ZischDings
Aber nicht an der richtigen Stelle eingefügt. Die gehört nicht zwischen die Erläuterungen sondern ein paar Zeilen weiter nach unten. Wohin genau kommt darauf an, ob die Grafik vor oder nach dem Nick angezeigt werden soll. Lies Dir bitte die Anleitung noch einmal durch.

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 20.02.2012, 19:30
von lieblich
Nach dem Nicknamen ;)

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 20.02.2012, 19:46
von Maxs

Code: Alles auswählen

  this.olPicsBefore = [
   
  ["server4.webkicks.de/hauptchat/replacer/admin.gif", "lieblich", "USER2"],
  ["server4.webkicks.de/hauptchat/replacer/bot.gif", "TeeneBot", "USER4", "USER5", "USER6"]
  ["server4.webkicks.de/hauptchat/replacer/stern.gif", "BigMac", "USER2"],
  
  ];
Kommasetzung ist falsch, siehe Beispiel 1 (im zweiten Beitrag).

Code: Alles auswählen

// [""],
   [""]
Lösche das.

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 20.02.2012, 19:51
von lieblich
So richtig:
Script:Zeigen

Code: Alles auswählen

  // Version 1.3

newOL = new (function () {


/* Konfiguration */


// Hier werden die einzelnen Gruppen für die Onlineliste angegeben
// Die Syntax ist:

// ["ID", "NAME", "CSS-STYLE", [USERLISTE]],
// ID = Hier musst du eine ID für die Gruppe angeben. Diese muss einzigartig sein und darf insgesamt nur einmal vorkommen!
// NAME = Hier kommt der Gruppenname hin, also die Überschrift der Gruppe. HTML darf benutzt werden!
// CSS-STYLE = Hier kannst du beliebig viele CSS-Befehle auflisten. Diese ändern den Style (z.B. Farbe) der User in dieser Gruppe. Übersicht der CSS-Befehle findest du z.B. hier: http://www.html-seminar.de/css-definitionen-uebersicht.htm
// [USERLISTE] = Hier werden die User aufgezählt, die auf jeden Fall in diese Gruppe müssen. Syntax: ["USER1", "USER2", "USER3", "USER4"]

// Die Reihenfolge der Gruppen kann beliebig geändert werden. Sie erscheinen in der Onlineliste in genau der gleichen Reihenfolge wie hier angegeben,
// BEACHTE: Nach der letzten Gruppe darf KEIN Komma stehen, aber die vorherigen Gruppen benötigen unbedingt eins danach!

  this.olBlocks = [
 
    ["team", "Team-Liste", "color: #ff0000;", []],
    ["bots", "Bot-Liste", "font-weight: bold; color: #0000FF; font-family: Times    New Roman;", ["wkQB", "TeeneBot", "chatbot"]],
    ["user", "User-Liste", "", []],
    ["guest", "Gäste-Liste", "", []],
    ["away", "Away-Liste", "color: #FF0000;", []]
   
  ];


// Hier können Bilder vor oder nach den Nicks angefügt werden
// this.olPicsBefore fügt Bilder VOR den Nicks ein und this.olPicsBefore NACH den Nicks
// Die Syntax ist:
// URL-ZUM-BILD = Hier muss die URL zum Bild angegeben werden
// USER = Hier können die User angegeben werden, die das Bild erhalten sollen. Es können beliebig viele User angegeben werden, diese müssen nur immer durch ein Komma abgetrennt werden und in Anführungszeichen gesetzt werden. Nach dem letzten User kommt kein Komma!

// Es können beliebig viele Gruppen (Bilder mit ihren Usern) angegeben werden.
// BEACHTE: Nach der letzten Gruppe darf wie immer KEIN Komma stehen, aber die vorherigen Gruppen benötigen unbedingt eins danach!

  this.olPicsBefore = [
   
  ["server4.webkicks.de/hauptchat/replacer/admin.gif", "lieblich", "USER2"],
  ["server4.webkicks.de/hauptchat/replacer/bot.gif", "TeeneBot", "USER4", "USER5", "USER6"]
  ["server4.webkicks.de/hauptchat/replacer/stern.gif", "BigMac", "USER2"]
  
  ];
 
  this.olPicsAfter = [
   
  ];


// Hier kann man Usern einen bestimmten CSS-Sytle einrichten, der den jeweiligen Gruppenstyle "überschreibt"
// Die Syntax ist:

// ["USER", "CSS-STYLE"],
// USER = Hier kommt der Username des Nicks hinein, der einen eigenen CSS-Style bekommen soll
// CSS-Style = Hier kannst du beliebig viele CSS-Befehle auflisten. Diese ändern den Style (z.B. Farbe) des Users. Übersicht der CSS-Befehle findest du z.B. hier: http://www.html-seminar.de/css-definitionen-uebersicht.htm

// Es können beliebig viele User einen eigenen CSS-Style bekommen
// BEACHTE: Nach der letzten Gruppe darf wie immer KEIN Komma stehen, aber die vorherigen Gruppen benötigen unbedingt eins danach!

  this.userStyle = [
   
  ];


// Hier wird eingestellt, ob die einzelnen User in den Gruppen alphabetisch sortiert werden sollen
// 1 = Aktiviert; 0 = Deaktiviert 

  this.olSortActivated = 1;



/* Ende der Konfiguration */ 
/* Ab hier bitte nichts mehr ändern! */



  var that = this;

// user - speichert in einem Array alle User im Chatraum
// Pro User ein Array mit 6 Strings
// 1. String: Name; 2. String: Profil; 3. String: Rang; 4. String: Away; 5. String: Raum; 6. String: Awaygrund

  this.user = [];

 
// createBlocks - erstellt die Gruppen in der OL und startet das Script

  this.createBlocks = function () {
    if (olIsLoad()) {
      var prFd = parent.rightFrame.document;
      var vOL = (!myBrowser.IE || navigator.userAgent.match(/MSIE ((\d\d)|9)\.[0-9]+/)) ? ((prFd.getElementsByTagName("body")[0].childNodes[2].nodeName == "TABLE") ? true : false) : false;
      // Die 2. Überprüfung verhindert unsichtbare OL
      if (!prFd.getElementById("newOL") || vOL) {
        prFd.getElementById("bd:").style.display = "none";
        that.overwriteAdds();
        that.delNewOL();
        var newTD = document.createElement("td");
        newTD.id = "newOL";
        prFd.getElementsByTagName("tr")[0].appendChild(newTD);
        for (var i = 0; i < that.olBlocks.length; i++) {
          var olBid = that.olBlocks[i][0];
          var newOLBlock = document.createElement("div");
          with (newOLBlock) {
            id = olBid + "wrapper";
            innerHTML = "<div id='" + olBid + "headline' style='margin-top:10px; margin-bottom:1px;'><a id='" + olBid + "link' onclick=\"parent.mainframe.newOL.switchStatus('" + olBid + "')\">-</a> " + that.olBlocks[i][1] + "</div>";
            innerHTML += "<ul id='" + olBid + "list' style='list-style-type:none; margin-top:5px; margin-bottom:1px;" + that.olBlocks[i][2] + "'></ul>";
          }
          prFd.getElementById("newOL").appendChild(newOLBlock);
        }
        getXML("GET", "/"+chatData[1]+"/api/get_onlinelist?" + new Date().getTime(), 0, that.getUser);
      }
    } else {
      window.setTimeout("parent.mainframe.newOL.createBlocks()", 50);
    }
  }
 
// delNewOl - löscht die neue Onlineliste
 
  this.delNewOL = function () {
    var delOL;
    if (delOL = parent.rightFrame.document.getElementById("newOL")) {
      delOL.parentNode.removeChild(delOL);
    }
  }

// switchStatus - blendet einen Block ein und aus
// id: ID des Blocks

  this.switchStatus = function (id) {
    var prFd = parent.rightFrame.document;
    if (prFd.getElementById(id + "link").innerHTML == "-") {
      prFd.getElementById(id + "link").innerHTML = "+";
      prFd.getElementById(id + "list").style.display = "none";
    } else {
      prFd.getElementById(id + "link").innerHTML = "-";
      prFd.getElementById(id + "list").style.display = "block";
    }
  }


// getOnlineUser - füllt das Array user
// r: auszuwertendes Request

  this.getUser = function (r) {
    if (r.readyState == 4) {
      // Wenn Status 200 ist, ist alles korrekt gelaufen
      if (r.status != 200) {
        console.log(r);
      } else {
        var c = r.responseXML.documentElement;
        that.user = [];
        for (var i = 0; i < c.getElementsByTagName("onlineuser").length; i++) {
          var u = c.getElementsByTagName("onlineuser")[i];
          that.user[i] = [];
          with (that.user[i]) {
            push(u.getElementsByTagName("name")[0].firstChild.data);
            push(u.getElementsByTagName("profil")[0].firstChild.data);
            push(u.getElementsByTagName("rang")[0].firstChild.data);
            push(u.getElementsByTagName("away")[0].firstChild.data);
            push(u.getElementsByTagName("channel")[0].firstChild.data);
          }
          if (u.getElementsByTagName("awayreason")[0].firstChild) {
            that.user[i].push(u.getElementsByTagName("awayreason")[0].firstChild.data);
          }
        }
        that.firstAdds();
      }
    }
  }


// firstAdds - schreibt die User in die Onlineliste, die schon online sind und per getUser geladen wurden 

  this.firstAdds = function () {
    for (var j = 0; j < that.user.length; j++) {
      if (that.user[j][0] == myNick) {
        break;
      }
    }
    for (var i = 0; i < that.user.length; i++) {
      if (that.user[j][4] == that.user[i][4]) {
        var away = (that.user[i][3] == "0") ? 0 : 1;
        var awayr = (that.user[i][5] == "undefined") ? "" : that.user[i][5];
        var server = (that.user[i][1] == 1) ? "server" + chatData[0] : "";
        var chat = (that.user[i][1] == 1) ? chatData[1] : "";
        var rank = that.getRankException(that.user[i][0]);
        rank = (rank == 0) ? that.user[i][2] : rank;
        if (rank.match(/list$/) == null) {
          switch (rank) {
            case "gast":
              rank = "guestlist";
              break;
            case "admin":
              rank = "teamlist";
              break;
            case "mod":
              rank = "teamlist";
              break;
            default:
              rank = "userlist";
              break;
          }
        }
        that.add(that.user[i][0], away, awayr, server, chat, rank);
      }
    }
  }


// getRankException - durchsucht alle Elemente in olBlocks nach Usern und gibt den jeweiligen Blocknamen zurück
// chatter: User, nach dem gesucht werden soll

  this.getRankException = function (chatter) {
    for (var i = 0; i < that.olBlocks.length; i++) {
      var list = that.olBlocks[i][3];
      var t = typeof list;
      if (t != undefined && ((t == "object" && list.inArray(chatter)) || (t == "string" && list == chatter))) {
        return that.olBlocks[i][0] + "list";
      }
    }
    return 0;
  }


// getBlock - checkt die Loginnachricht findet heraus, in welchen Block der User muss
// user: User; profil: hat der User ein Profil (1 oder 0)

  this.getBlock = function (user, profil) {
    var tds = parent.mainframe.document.getElementsByTagName("td");
    var rank = that.getRankException(user);
    if (rank == 0) {
      var howlong = (tds.length > 5) ? 5 : tds.length;
      var clD;
      for (var i = 1; i <= howlong; i++) {
        clD = lineData(tds[tds.length - i]);
        if (clD != null && clD[2] == user && clD[4] == 0) {
          rank = "guestlist";
          break;
        }
      }
      if (rank == 0) {
        howlong = (chatTeam[0].length > chatTeam[1].length) ? chatTeam[0].length : chatTeam[1].length;
        howlong = (1 > howlong) ? 1 : howlong;
        for (var i = 0; i < howlong; i++) {
          if (chatTeam[0][i] == user || chatTeam[1][i] == user || chatTeam[2] == user) {
            rank = "teamlist";
            break;
          }
        }
      }
      if (rank == 0) {
        rank = "userlist";
      }
    }
    for (var i = 0; i < that.user.length; i++) {
      if (that.user[i][0] == user) {
        return rank;
      }
    }
    var j = that.user.length;
    that.user[j] = [];
    with (that.user[j]) {
      push(user);
      push(profil);
      push(rank);
      push("0");
      push(getRoom());
    }
    return rank;
  }


 // olSort - sortiert die einzelnen User alphabetisch
 // chatter: User, der in der Liste alphabetisch sortiert werden soll; block: Liste, in der sich der User befindet

  this.olSort = function (chatter, block) {
    var prFd = parent.rightFrame.document;
    var b = prFd.getElementById(block);
    var s = b.getElementsByTagName("span");
    if (s.length != 0) {
      for (var i = 0; i < s.length; i++) {
        var c = chatter.toLowerCase();
        var span = s[i].innerHTML.replace(/\s$/, "");
        var sortArray = [span.toLowerCase(), c].sort();
        if (sortArray[0] == c && sortArray[1] != c) {
          b.insertBefore(prFd.getElementById("new" + chatter), prFd.getElementById("new" + span));
          break;
        }
      }
    } else {
      return;
    }
  }


// addPics - fügt dem User ein Bild vor oder nach dem Nick ein Bild ein
// chatter: User, dem das Bild angehängt werden soll, loc: Ort (0 = vor dem Nick; 1 = nach dem Nick); profil: Besitzt der User ein Profil (0 oder 1)

  this.addPics = function (chatter, loc, profil) {
    picloc = (loc) ? that.olPicsAfter : that.olPicsBefore;
    for (var i = 0; i < picloc.length; i++) {
      if (picloc[i].inArray(chatter)) {
        return ((loc && profil) ? " " : "") + "<img src='" + picloc[i][0] + "' />" + ((!loc) ? " " : "");
      }
    }
    return "";
  }


// getUserStyle - durchsucht userStyle und gibt bei Erfolg den Style des Users zurück
// chatter: User, dessen Style gesucht wird

  this.getUserStyle = function (chatter) {
    for (var i = 0; i < that.userStyle.length; i++) {
      var s = that.userStyle[i];
      if (s[0] == chatter) {
        return s[1];
      }
    }
    return "";
  }


// add - fügt den User in die Onlineliste ein
// chatter: User, der eingefügt werden soll; away: Abwesend (0 oder 1); reason: Abwesendheitsgrund; server: Falls Profil - "server" + Nummer; chat: Falls Profil - Chatname; rank: Falls angegeben - in welche Liste er kommt

  this.add = function (chatter, away, reason, server, chat, rank) {
    var prFd = parent.rightFrame.document;
    that.del(chatter, 1);
    if (!prFd.getElementById("new" + chatter)) {
      var ownsprofil = (server && chat) ? 1 : 0;
      var block = (away) ? "awaylist" : ((rank) ? rank : that.getBlock(chatter, ownsprofil));
      var newChatter = document.createElement("li");
      with (newChatter) {
        id = "new" + chatter;
        title = (away) ? chatter + " ist abwesend" + ((reason) ? ": " + reason : "") : chatter;
        innerHTML = that.addPics(chatter, 0) + "<span style='" + that.getUserStyle(chatter) + "' onclick=\"fluester('" + chatter + "');\">" + chatter + " </span>";
        innerHTML += (ownsprofil) ? "<a id='profil" + chatter + "' title='Profil von " + chatter + "' href=\"Javascript:wopen(\'http://" + server + ".webkicks.de/" + chat + "/pv/" + chatter + "/open\',510,600)\;\">(P)</a>" : "";
        innerHTML += that.addPics(chatter, 1, ownsprofil);
      }
      prFd.getElementById(block).appendChild(newChatter);
      if (that.olSortActivated) {
        that.olSort(chatter, block);
      }
    }
  }


// del - löscht einen User aus der Onlineliste und von this.user
// id: Nickname; fromadd: Kommt die Anfrage von add (0 oder 1)

  this.del = function (id, fromadd) {
    var prFd = parent.rightFrame.document;
    var delUser;
    if (delUser = prFd.getElementById("new" + id)) {
      delUser.parentNode.removeChild(delUser);
    }
    if (!fromadd) {
      for (var i = 0; i < that.user.length; i++) {
        if (that.user[i][0] == id) {
          that.user.splice(i, 1);
          break;
        }
      }
    }
  }


// overwriteAdds - überschreibt die add- und del-Funktionen der alten Onlineliste

  this.overwriteAdds = function () {
    var rf = parent.rightFrame;
    rf.add = function (chatter, away, reason) {
      rf.del(chatter);
      that.add(chatter, away, reason);
      if (rf.document.getElementById(chatter) == null) {
        var y3 = document.createElement("div");
        y3.id = chatter;
        y3.innerHTML += ((away) ? "<i>" : "") + "<span title=" + ((away && reason) ? chatter + "ist abwesend: " + reason : chatter) + "><span onClick=\"fluester('" + chatter + "')\">" + chatter + " </span></span>" + ((away) ? "</i>" : "");
        rf.document.getElementById("bd:").appendChild(y3);   
      }
    }

    rf.addp = function (chatter, server, chat, away, reason) {
      rf.del(chatter);
      that.add(chatter, away, reason, server, chat);
      if (rf.document.getElementById(chatter) == null) {
        var y3 = document.createElement("div");
        y3.id = chatter;
        y3.innerHTML = ((away) ? "<i>" : "") + "<span title=" + ((away && reason) ? chatter + "ist abwesend: " + reason : chatter) + "><span onClick=\"fluester('" + chatter + "')\">" + chatter + " </span></span>" + ((away) ? "</i>" : "");
        y3.innerHTML += "<font title=\"Profil von " + chatter + "\"><a href=\"Javascript:wopen(\'http://" + server + ".webkicks.de/" + chat + "/pv/" + chatter + "/open\',510,600)\;\">(P)</a></font>";
        rf.document.getElementById("bd:").appendChild(y3);
      }
    }

    rf.del = function (user) {
      that.del(user, 0);
      var xy = rf.document.getElementById(user);
      if(xy != null) {
        rf.document.getElementById("bd:").removeChild(xy);
      }
    }
  }

});

newOLint = window.setInterval('newOL.createBlocks();', 1000);
jetzt wird keiner in der OL angezeigt!

Re: Unterteilbare Onlineliste - Eigene Listen in der Onlinel

Verfasst: 20.02.2012, 20:00
von ZischDings
Das wurde in der Anleitung extra noch betont:

Code: Alles auswählen

BEACHTE: Nach der letzten Gruppe darf wie immer KEIN Komma stehen, aber die vorherigen Gruppen benötigen unbedingt eins danach!
Ans Ende der zweiten Zeile gehört noch ein Komma hin,
in der letzten Zeile (bei Dir die dritte Zeile) darf am Ende kein Komma mehr stehen.