Nickmenü in der Onlineliste
Verfasst: 21.07.2011, 14:02
Mit diesem Script wird beim Klick auf einen Nick in der Onlineliste ein Menü geöffnet. In diesem Menü werden dann verschiedene Befehle aufgelistet, die beim Klick auf den Menüpunkt im Eingabeframe erscheinen.
Thx an alle, die beim Scripten und Testen geholfen haben
Aktuelle Version: 1.2
Die Grundscriptsammlung ist Voraussetzung für das Script.
Der folgende Code muss in die erste und dritte Ankündigung:
Anpassen kann man den Style des Menüs:
Weiterhin sind die Menüpunkte anpassbar. 3. und 4. Parameter sind optional. Wenn man einen 3. Parameter angibt, so erscheint der hier angegebene Text hinter dem Nick. Wenn man als 4. Parameter eine 1 angibt, dann ersetzt der Text nicht den im Eingabefeld, sondern wird hinten angefügt... Bei Befehlen wie /f wird das weniger Sinnvoll sein. Es sind allerdings auch Menüpunkte denkbar, die zum Beispiel nur den Nick oder, wie von hamigra gewünscht, "Nicksmilies" in das Eingabefeld einfügen.
Der Flüsterbefehl, "Nick einfügen" und "Anschreiben" wird hier grundsätzlich eingesetzt, PM für alles ab registriertem User, restore, rmip, knebel, move, kick und bann ab Moderator und makemod sowie modkick nur für Admins. Durch Ergänzen oder Entfernen von mkTd("TEXT", "/BEFEHL ") - Aufrufen kann das Menü um Punkte erweitert bzw. verkürzt werden.
Für die, die lieber js-Dateien verwenden als so lange Codes in die Ankündigung zu kopieren hier auch nochmal eine strukturierte Version des Codes:
Versions-History:
Version 1.2:
- Die Menüeinträge werden nun nichtmehr nur abhängig vom eigenen, sondern auch von dem Status des geklickten Users angezeigt. So wird z.B. bei Admins kein kick- oder move-Befehl eingeblendet, da sie sowieso nicht gegen Admins benutzt werden können.
- Es wurden automatische Erkennungen für die Spiele Offiziersskat, Mühle und TicTacToe sowie für das Ignorier-Script und das Flüsterfenster hinzugefügt
Version 1.1: Fix für eventuelle Zeichensatz-Probleme: Umlaute werden per URL-Code eingesetzt und per unescape umgewandelt.
Außerdem werden die Spiele Dame und 4 Gewinnt automatisch erkannt. Falls sie im Chat eingebunden sind wird dafür entsprechend ein Menü-Eintrag für registrierte User angezeigt.
Version 1.0: erste Veröffentlichung. Enthalten sind folgende Menüeinträge:
- für alle User und Gäste: flüstern, Nick einfügen, Anschreiben
- für registrierte User: PM
- für Mods: Restore, IP anzeigen, Knebel, Move, Kick, Bann
- für Admins: Mod ernennen, Mod entziehen
Version 1.1
Version 1.0
Das ist eine Kopie des Threads aus dem alten Forum - kein neues Script
Thx an alle, die beim Scripten und Testen geholfen haben
Aktuelle Version: 1.2
Die Grundscriptsammlung ist Voraussetzung für das Script.
Der folgende Code muss in die erste und dritte Ankündigung:
Code: Alles auswählen
<script language="javascript">ie=(document.all&&!window.innerWidth && navigator.userAgent.toLowerCase().indexOf("msie") != -1)?1:0;function clkmenu(){ p=parent; r=p.rightFrame.document; s=r.getElementsByTagName("span"); for(i in s){ if((typeof s[i]) != "undefined" && (typeof s[i].parentNode) != "undefined" && s[i].parentNode.title) if(s[i].onclick){ s[i].onclick=function(e){ e=(e?e:parent.rightFrame.event); p.lstClcked=this.parentNode.title.split(" ")[0]; parent.rightFrame.olMenu(e.clientX,e.clientY); return false } } } parent.rightFrame.olMenu = function(xPosition,yPosition){ if(parent.menuTO){ window.clearTimeout(parent.menuTO); } r=parent.rightFrame.document; r.getElementById("menu").style.display=''; with(r.getElementById("menu").style){ position="absolute"; top=yPosition; left=xPosition; } var tds=r.getElementById("menu").getElementsByTagName("td"); var status=parent.mainframe.getStatus(parent.lstClcked); for(var i=0;i<tds.length;i++){ tds[i].parentNode.style.display=''; if(tds[i].className!="input"){ if(status==1 && !tds[i].className.match(/\buser\b/) || status==2 && !tds[i].className.match(/\bmod\b/) || status==3 && !tds[i].className.match(/\badmin\b/))tds[i].parentNode.style.display='none'; } } parent.menuTO = window.setTimeout("parent.rightFrame.document.getElementById('menu').style.display='none'", 4000) }}window.setInterval("clkmenu()",1600);function mkTd(befTxt, clckbef, hinterNick, modus, classes){ p=parent; r=p.rightFrame.document; s=r.getElementsByTagName("span"); tr=r.createElement("tr"); td=r.createElement("td"); if(!modus || modus==1){ eval("td.onclick=function(e){a=parent.info.document.eingabe.message; a.value"+(modus==1?"+":"")+"='"+clckbef+"'+parent.lstClcked"+(hinterNick?"+'"+hinterNick+"'":"")+"; parent.rightFrame.document.getElementById('menu').style.display='none'; a.focus();pos=a.createTextRange(); pos.collapse(false); pos.select();}"); }else if(modus==2){ td.onclick=function(){clckbef(parent.lstClcked)}; } bef=r.createTextNode(befTxt); td.className="input"+(classes?" "+classes:""); td.appendChild(bef); tr.appendChild(td); tbdy.appendChild(tr)}function createTable(){ if(parent.rightFrame.document && !parent.rightFrame.document.getElementById("menu")){ tbl=r.createElement("table"); tbl.style.border="1px dotted #000000"; tbl.style.display="none"; tbl.className="input"; tbl.style.zIndex="10"; tbl.setAttribute("id", "menu"); tbdy=r.createElement("tbody"); tbl.appendChild(tbdy); mkTd(unescape("Fl%FCstern"),"/f ", " "); if(typeof starteFWin != "undefined") mkTd(unescape("Fl%FCsterfenster"), starteFWin, 0, 2); mkTd(unescape("Nick einf%FCgen"), "", "", 1); mkTd("Anschreiben", "/me sagt zu ", ":"); if(myStatus>=1){ mkTd("PM","/pm ", " ", 0, 0, "user mod admin"); if(typeof vgBefehlsAuswertung != "undefined") mkTd("4 Gewinnt", "/4gewinnt ", 0, 0, "user mod admin"); if(typeof dameBefehlsAuswertung != "undefined") mkTd("Dame", "/dame ", 0, 0, "user mod admin"); if(typeof osBefehlsAuswertung != "undefined") mkTd("Offiziersskat", "/os ", 0, 0, "user mod admin"); if(typeof muehleBefehlsAuswertung != "undefined") mkTd(unescape("M%FChle"), "/muehle ", 0, 0, "user mod admin"); if(typeof tttBefehlsAuswertung != "undefined") mkTd("TicTacToe", "/ttt ", 0, 0, "user mod admin"); if(typeof ignoreUser != "undefined") mkTd("ignorieren", "/ignore "); } if(myStatus>=2){ mkTd("Restore","/restore ", " #0000ff", 0, "user"+(myStatus==3?" mod":"")); mkTd("IP anzeigen","/rmip ", 0, 0, "user"+(myStatus==3?" mod":"")); mkTd("Knebel","/knebel ", 0, 0, "user"+(myStatus==3?" mod":"")); mkTd("Move","/move ", " ", 0, "user"+(myStatus==3?" mod":"")); mkTd("Kick","/kick ", 0, 0, "user"+(myStatus==3?" mod":"")); mkTd("Bann","/bann ", 0, 0, "user"+(myStatus==3?" mod":"")); } if(myStatus==3){ mkTd("Mod ernennen","/makemod ", 0, 0, "user"); mkTd("Mod entziehen", "/modkick ", 0, 0, "mod"); } if(myNick==chatTeam[2]){ mkTd("Admin ernennen","/makeadmin ", 0, 0, "user mod"); mkTd("Admin entziehen", "/adminkick ", 0, 0, "admin"); } r.body.appendChild(tbl); }}window.setInterval("createTable()",1600);function getStatus(nick){ nick=nick.toLowerCase(); if(chatTeam[2].toLowerCase()==nick)return 3; for(i=0;i<chatTeam[1].length;i++)if(chatTeam[1][i].toLowerCase()==nick)return 3; for(var i=0;i<chatTeam[0].length;i++)if(chatTeam[0][i].toLowerCase()==nick)return 2; return 1;}</script>
Code: Alles auswählen
tbl.style.border="1px dotted #000000"; tbl.style.color="#000000"; tbl.style.backgroundColor="#ff6600";
Code: Alles auswählen
mkTd("Flüstern","/f ", " ");mkTd("Nick einfügen", "", "", 1); mkTd("Anschreiben", "/me sagt zu ", ":"); if(myStatus>=1){ mkTd("PM","/pm ", " ");} if(myStatus>=2){ mkTd("Restore","/restore ", " #0000ff"); mkTd("IP anzeigen","/rmip "); mkTd("Knebel","/knebel "); mkTd("Move","/move ", " "); mkTd("Kick","/kick "); mkTd("Bann","/bann ");} if(myStatus==3){ mkTd("Mod ernennen","/makemod "); mkTd("Mod entziehen", "/modkick ");}
Für die, die lieber js-Dateien verwenden als so lange Codes in die Ankündigung zu kopieren hier auch nochmal eine strukturierte Version des Codes:
Code: Alles auswählen
ie=(document.all&&!window.innerWidth && navigator.userAgent.toLowerCase().indexOf("msie") != -1)?1:0;
function clkmenu(){
p=parent;
r=p.rightFrame.document;
s=r.getElementsByTagName("span");
for(i in s){
if((typeof s[i]) != "undefined" && (typeof s[i].parentNode) != "undefined" && s[i].parentNode.title)
if(s[i].onclick){
s[i].onclick=function(e){
e=(e?e:parent.rightFrame.event);
p.lstClcked=this.parentNode.title.split(" ")[0];
parent.rightFrame.olMenu(e.clientX,e.clientY);
return false
}
}
}
parent.rightFrame.olMenu = function(xPosition,yPosition){
if(parent.menuTO){
window.clearTimeout(parent.menuTO);
}
r=parent.rightFrame.document;
r.getElementById("menu").style.display='';
with(r.getElementById("menu").style){
position="absolute"; top=yPosition; left=xPosition;
}
var tds=r.getElementById("menu").getElementsByTagName("td");
var status=parent.mainframe.getStatus(parent.lstClcked);
for(var i=0;i<tds.length;i++){
tds[i].parentNode.style.display='';
if(tds[i].className!="input"){
if(status==1 && !tds[i].className.match(/\buser\b/) ||
status==2 && !tds[i].className.match(/\bmod\b/) ||
status==3 && !tds[i].className.match(/\badmin\b/))tds[i].parentNode.style.display='none';
}
}
parent.menuTO = window.setTimeout("parent.rightFrame.document.getElementById('menu').style.display='none'", 4000)
}
}
window.setInterval("clkmenu()",1600);
function mkTd(befTxt, clckbef, hinterNick, modus, classes){
p=parent;
r=p.rightFrame.document;
s=r.getElementsByTagName("span");
tr=r.createElement("tr");
td=r.createElement("td");
if(!modus || modus==1){
eval("td.onclick=function(e){a=parent.info.document.eingabe.message; a.value"+(modus==1?"+":"")+"='"+clckbef+"'+parent.lstClcked"+(hinterNick?"+'"+hinterNick+"'":"")+"; parent.rightFrame.document.getElementById('menu').style.display='none'; a.focus();pos=a.createTextRange(); pos.collapse(false); pos.select();}");
}else if(modus==2){
td.onclick=function(){clckbef(parent.lstClcked)};
}
bef=r.createTextNode(befTxt);
td.className="input"+(classes?" "+classes:"");
td.appendChild(bef);
tr.appendChild(td);
tbdy.appendChild(tr)
}
function createTable(){
if(parent.rightFrame.document && !parent.rightFrame.document.getElementById("menu")){
tbl=r.createElement("table");
tbl.style.border="1px dotted #000000";
// tbl.style.color="#000000";
// tbl.style.backgroundColor="#ff6600";
tbl.style.display="none";
tbl.className="input";
tbl.style.zIndex="10";
tbl.setAttribute("id", "menu");
tbdy=r.createElement("tbody");
tbl.appendChild(tbdy);
mkTd(unescape("Fl%FCstern"),"/f ", " ");
if(typeof starteFWin != "undefined")
mkTd(unescape("Fl%FCsterfenster"), starteFWin, 0, 2);
mkTd(unescape("Nick einf%FCgen"), "", "", 1);
mkTd("Anschreiben", "/me sagt zu ", ":");
if(myStatus>=1){
mkTd("PM","/pm ", " ", 0, 0, "user mod admin");
if(typeof vgBefehlsAuswertung != "undefined")
mkTd("4 Gewinnt", "/4gewinnt ", 0, 0, "user mod admin");
if(typeof dameBefehlsAuswertung != "undefined")
mkTd("Dame", "/dame ", 0, 0, "user mod admin");
if(typeof osBefehlsAuswertung != "undefined")
mkTd("Offiziersskat", "/os ", 0, 0, "user mod admin");
if(typeof muehleBefehlsAuswertung != "undefined")
mkTd(unescape("M%FChle"), "/muehle ", 0, 0, "user mod admin");
if(typeof tttBefehlsAuswertung != "undefined")
mkTd("TicTacToe", "/ttt ", 0, 0, "user mod admin");
if(typeof ignoreUser != "undefined")
mkTd("ignorieren", "/ignore ");
}
if(myStatus>=2){
mkTd("Restore","/restore ", " #0000ff", 0, "user"+(myStatus==3?" mod":""));
mkTd("IP anzeigen","/rmip ", 0, 0, "user"+(myStatus==3?" mod":""));
mkTd("Knebel","/knebel ", 0, 0, "user"+(myStatus==3?" mod":""));
mkTd("Move","/move ", " ", 0, "user"+(myStatus==3?" mod":""));
mkTd("Kick","/kick ", 0, 0, "user"+(myStatus==3?" mod":""));
mkTd("Bann","/bann ", 0, 0, "user"+(myStatus==3?" mod":""));
}
if(myStatus==3){
mkTd("Mod ernennen","/makemod ", 0, 0, "user");
mkTd("Mod entziehen", "/modkick ", 0, 0, "mod");
}
if(myNick==chatTeam[2]){
mkTd("Admin ernennen","/makeadmin ", 0, 0, "user mod");
mkTd("Admin entziehen", "/adminkick ", 0, 0, "admin");
}
r.body.appendChild(tbl);
}
}
window.setInterval("createTable()",1600);
function getStatus(nick){
nick=nick.toLowerCase();
if(chatTeam[2].toLowerCase()==nick)return 3;
for(i=0;i<chatTeam[1].length;i++)if(chatTeam[1][i].toLowerCase()==nick)return 3;
for(var i=0;i<chatTeam[0].length;i++)if(chatTeam[0][i].toLowerCase()==nick)return 2;
return 1;
}
Versions-History:
Version 1.2:
- Die Menüeinträge werden nun nichtmehr nur abhängig vom eigenen, sondern auch von dem Status des geklickten Users angezeigt. So wird z.B. bei Admins kein kick- oder move-Befehl eingeblendet, da sie sowieso nicht gegen Admins benutzt werden können.
- Es wurden automatische Erkennungen für die Spiele Offiziersskat, Mühle und TicTacToe sowie für das Ignorier-Script und das Flüsterfenster hinzugefügt
Version 1.1: Fix für eventuelle Zeichensatz-Probleme: Umlaute werden per URL-Code eingesetzt und per unescape umgewandelt.
Außerdem werden die Spiele Dame und 4 Gewinnt automatisch erkannt. Falls sie im Chat eingebunden sind wird dafür entsprechend ein Menü-Eintrag für registrierte User angezeigt.
Version 1.0: erste Veröffentlichung. Enthalten sind folgende Menüeinträge:
- für alle User und Gäste: flüstern, Nick einfügen, Anschreiben
- für registrierte User: PM
- für Mods: Restore, IP anzeigen, Knebel, Move, Kick, Bann
- für Admins: Mod ernennen, Mod entziehen
Version 1.1
Script:Zeigen
Script:Zeigen