Servus! Heute hab ich dieses Script endlich mal hinbekommen

Wenn ihr dieses Script mittels Chatbefehl ausführt (/CHATBEFEHL NICK) öffnet sich ein Popup, über das ihr mit einem User privat chatten könnt. Der Chat läuft dabei normal weiter. Ihr könnt in dem Popup per Checkbox bestimmen ob diese Nachrichten im Stream weiterhin angezeigt oder ausgeblendet werden sollen. Wenn ihr in diesem Fenster einen Text absendet wird er automatisch dem anderen zugeflüstert. Die Eingabe von /f Nick entfällt also.
Wenn ihr das Popup schließt wird automatisch das Ausblenden der Flüsternachrichten deaktiviert, sodass ihr auch weiter normal im Stream lesen könnt wenn euch der User etwas flüstert.
Das Ganze sieht dann zum Beispiel in meinem Chat so aus:

Gebraucht wird wie fast immer die Grundscriptsammlung.
Um es einzubauen müsst ihr folgenden Code in eine JS-Datei speichern und auf einen Webspace hochladen (oder im ScriptManager von wktools eintragen):
Code: Alles auswählen
var fWinUser={};
var docTds=document.getElementsByTagName("td");
function fWinStream(i, a){
if(!!a && a[0]==10 && !!(docTds[i].innerHTML.match(/ fl.stert<.span>:/i))){
nick = a[2];
if(!!fWinUser[nick]){
fWinUser[nick].messages[fWinUser[nick].messages.length] = docTds[i].innerHTML.replace(/ flüstert/, "");
fWinUser[nick].lineNr.push(i);
if(!!fWinUser[nick]["fWin"] && !fWinUser[nick]["fWin"].closed && !!fWinUser[nick]["fWin"].name){
var newTbl=fWinUser[nick]["fWin"].document.createElement("table");
var newTbody=fWinUser[nick]["fWin"].document.createElement("tbody");
var newTr=fWinUser[nick]["fWin"].document.createElement("tr");
var newTd=fWinUser[nick]["fWin"].document.createElement("td");
newTd.setAttribute("id", "td"+i);
newTr.appendChild(newTd);
newTbody.appendChild(newTr);
newTbl.appendChild(newTbody);
fWinUser[nick].fWin.document.getElementById("fluesterStream").appendChild(newTbl);
fWinUser[nick].fWin.document.getElementById("td"+i).innerHTML=fWinUser[nick].messages[fWinUser[nick].messages.length-1];
if(!fWinUser[nick].showInStream){
docTds[i].parentNode.parentNode.parentNode.style.display="none";
}
}
}
}else if(!!(docTds[i].innerHTML.match(/Du fl.sterst an /i))){
nick = a[5];
//alert("du an "+nick);
if(!!fWinUser[nick]){
fWinUser[nick].messages[fWinUser[nick].messages.length]=docTds[i].innerHTML.replace("Du flüsterst an "+nick, myNick);
fWinUser[nick].lineNr.push(i);
if(!!fWinUser[nick]["fWin"] && !fWinUser[nick]["fWin"].closed && !!fWinUser[nick]["fWin"].name){
var newTbl=fWinUser[nick]["fWin"].document.createElement("table");
var newTbody=fWinUser[nick]["fWin"].document.createElement("tbody");
var newTr=fWinUser[nick]["fWin"].document.createElement("tr");
var newTd=fWinUser[nick]["fWin"].document.createElement("td");
newTd.setAttribute("id", "td"+i);
newTr.appendChild(newTd);
newTbody.appendChild(newTr);
newTbl.appendChild(newTbody);
fWinUser[nick].fWin.document.getElementById("fluesterStream").appendChild(newTbl);
fWinUser[nick].fWin.document.getElementById("td"+i).innerHTML=fWinUser[nick].messages[fWinUser[nick].messages.length-1];
if(!fWinUser[nick].showInStream){
docTds[i].parentNode.parentNode.parentNode.style.display="none";
}
}
}
}
}
addStreamReader(fWinStream);
function fWinShowHide(show, nick){
fWinUser[nick].showInStream = show;
for(i=0; i<fWinUser[nick].lineNr.length; i++){
docTds[fWinUser[nick].lineNr[i]].parentNode.parentNode.parentNode.style.display=show?(document.all?"block":"table-cell"):"none";
}
}
function starteFWin(nick){
if(!fWinUser[nick]){
fWinUser[nick]={"messages":[], "fWin":{}, "lineNr":[], "showInStream":false};
var a;
for(i=0;i<docTds.length;i++){
a=lineData(docTds[i]);
if(!!a && a[0]==2 && a[2]==nick && docTds[i].innerHTML.match(/ fl.stert<.span>:/i)){
fWinUser[nick].messages.push(docTds[i].innerHTML.replace(/ fl.stert/, ""));
fWinUser[nick].lineNr.push(i);
}else if( docTds[i].innerHTML.match("Du flüsterst an "+nick+"</")){
fWinUser[nick].messages.push(docTds[i].innerHTML.replace("Du flüsterst an "+nick, myNick));
fWinUser[nick].lineNr.push(i);
}
}
}
if(!!fWinUser[nick]["fWin"] && !fWinUser[nick]["fWin"].closed && !!fWinUser[nick]["fWin"].name){
fWinUser[nick]["fWin"].close();
}
fWinUser[nick]["fWin"] = window.open("about:blank", "fWin_"+myNick+"_"+nick, "width=300,height=300,scrollbars=yes");
fWinUser[nick]["fWin"].document.write("<html><head><title>Flüsterfenster mit "+nick+"</title>"+
"<link rel='stylesheet' type='text/css' href='http://server"+chatData[0]+".webkicks.de/"+chatData[1]+"/style_stream.css'><script language='javascript'>window.setInterval('window.scrollBy(0,50)',100)</"+"script></head><body><table style='width:100%;height:100%'><tbody>"+
"<tr style='height:100%'><td style='overflow:scroll; vertical-align:top;' id='fluesterStream'>"+
"<table><tbody><tr><td>"+fWinUser[nick].messages.join("</td></tr></tbody></table><table><tbody><tr><td>")+"</td></tr></tbody></table>"+
"</td></tr><tr><td>"+
"<form name='fForm' onsubmit='opener.sendeText(\"/f "+nick+" \"+this.fMessage.value); this.fMessage.value=\"\"; return false;'>"+
"im Stream anzeigen?<input type='checkbox' name='showHide' onclick='opener.fWinShowHide(this.checked, \""+nick+"\")'><input name='fMessage' class='input'><input type='submit' class='submit' value='senden'></form></td></tr>"+
"</tbody></table></body></html>");
}
function fwinBefehl(m, u){
u=strip_tags(u)
if(myNick==m){
starteFWin(u);
document.write("Falls das Fenster nicht geöffnet wurde klicke hier: <a href='javascript:starteFWin(""+u+"");'>Fenster öffnen!</a>");
return;
}else if(myNick==u){
document.write("startet ein Flüsterfenster mit dir. <a href='javascript:starteFWin(""+m+"");'>Auch starten!</a>");
return;
}
document.getElementsByTagName("table")[document.getElementsByTagName("table").length-1].style.display = "none";
}
Um die JS-Datei einzubinden wie immer folgender Code in die Ankündigung:
Code: Alles auswählen
<script type="text/javascript" src="http://deineURL/fwin.js"></script>
Zuguterletzt müsst ihr noch einen Chatbefehl anlegen (z.B. /fwin). Name ist euch überlassen. Der Code sieht so aus:
Code: Alles auswählen
<script language="javascript">if(parent.info){fwinBefehl('%myname%', '%user%');}else{document.write(" öffnet ein Flüsterfenster.")}</script>

Code: Alles auswählen
mkTd("Flüster-Fenster", "/CHATBEFEHL ");
Edit 29.11.2011: Alle Codes komplett überarbeitet und unter anderem an die neue GSS angepasst. Außerdem wird ein Link angezeigt, mit dem man das Flüsterfenster auch bei aktiviertem Popupblocker öffnen kann.