Seite 1 von 2
Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 11.05.2011, 20:20
von Maxs
Hey Chatbetreiber!
Da es langsam mal nötig war, habe ich mich hingesetzt und ein neues "Away"-kästchen Script geschrieben, das diesmal den "Chatzeile löscht sich nicht von selber"-Bug nach einem Reconnect nicht auslöst.
Zwar kann es immer noch vorkommen, dass während des Reconnects die Chatzeile nicht gelöscht wird, aber spätestens wenn alles fertig geladen ist, wird die Chatzeile wieder beim nächsten Absenden gelöscht. (Gleicher "Bug" tritt auch beim Badwordscript auf, da die gleiche Lösung zum "Reconnect-Bug" verwendet wird)
Das Script verträgt sich mit dem Badwordscript, da ich ein paar Anpassungen gemacht habe. Am besten bindet ihr das "Away"-kästchen Script aber trotzdem
nach dem Badwordscript ein. Die Grundscriptsammlung wird benötigt.
Code: Alles auswählen
/* Konfiguration */
// Text, der ausgegeben werden soll, wenn sich der User zurückmeldet
var AwayboxText = "Wieder da!";
/* Ab hier nichts mehr ändern! */
Awaybox = new (function() {
// Fügt die Checkbox in den Eingabeframe ein (falls noch nicht vorhanden)
this.insert = function() {
if (efIsLoad()) {
if (!parent.info.document.forms[0].abwesend) {
var formular = parent.info.document.getElementsByTagName('form')[0];
var checkbox = parent.info.document.createElement("span");
checkbox.innerHTML = "Abwesend: <input type='checkbox' name='abwesend' onclick='parent.mainframe.Awaybox.exec()' title='Sich im Chat abmelden (Away/AFK melden)'> ";
formular.insertBefore(checkbox, formular.childNodes[0]);
}
} else {
window.setTimeout("Awaybox.insert()", 50);
}
}
// Führt die Befehle aus, wenn man auf die Checkbox klickt
this.exec = function() {
var abwesendcb = parent.info.document.forms[0].abwesend;
if (abwesendcb.checked) {
sendeText("/away");
parent.info.document.forms[0].abwesend.title = 'Sich im Chat wieder zurückmelden';
} else {
sendeText(AwayboxText);
Awaybox.antiSpam();
}
}
// Löscht das Häkchen, wenn der User einen Text absendet und fixt das Reconnect-Problem von früher
this.fix = function() {
var type = (typeof BadWordsVerwenden != "undefined") ? 1 : 0;
var fixBW = (type == 1) ? ((BadWordsVerwenden) ? 1 : 0) : 0;
if (typeof badwords == "function" && (type == 0 || fixBW == 1)) {
window.setTimeout("Awaybox.fixBadwords(1)", 550);
} else if (typeof noneBadwords == "function" && fixBW == 0) {
window.setTimeout("Awaybox.fixBadwords(2)", 550);
} else {
parent.info.document.eingabe.onsubmit = function(e) {
var Etext = parent.info.document.eingabe.message.value;
if (parent.info.document.forms[0].abwesend.checked && Etext.search("/f ") != 0) {
parent.info.document.forms[0].abwesend.checked = false;
Awaybox.antiSpam();
}
parent.info.submitForm(parent.info.document.eingabe);
return false;
}
}
}
// Falls das Badwordscript von 1. FC Keller benutzt wird, muss die normale badwords()- bzw. die noneBadwords()-Funktion für einen Fix ersetzt werden
this.fixBadwords = function(c) {
if (c == 1) {
parent.info.document.eingabe.onsubmit = function(e) {
var Etext = parent.info.document.eingabe.message.value;
if (parent.info.document.forms[0].abwesend.checked && Etext.search("/f ") != 0) {
parent.info.document.forms[0].abwesend.checked = false;
Awaybox.antiSpam();
}
for(i=0; i<suchworte.length; i++){
while(parent.info.document.eingabe.message.value.match(suchworte[i])){
parent.info.document.eingabe.message.value = parent.info.document.eingabe.message.value.replace(suchworte[i], ersetzen[i]);
}
}
parent.info.submitForm(parent.info.document.eingabe);
return false;
}
} else {
parent.info.document.eingabe.onsubmit = function(e) {
var Etext = parent.info.document.eingabe.message.value;
if (parent.info.document.forms[0].abwesend.checked && Etext.search("/f ") != 0) {
parent.info.document.forms[0].abwesend.checked = false;
Awaybox.antiSpam();
}
parent.info.submitForm(parent.info.document.eingabe);
return false;
}
}
}
// Spamschutz, der verhindert, dass man die Checkbox zu oft klickt
this.antiSpam = function(time) {
var abwesendcb = parent.info.document.forms[0].abwesend;
abwesendcb.disabled = true;
abwesendcb.title = "Spamschutz - Box für 5 Sekunden deaktiviert!";
window.setTimeout("parent.info.document.forms[0].abwesend.disabled = false; parent.info.document.forms[0].abwesend.title = 'Sich im Chat abmelden (Away/AFK melden)';", 5000);
}
});
//startet das Script
window.setTimeout("Awaybox.fix()", 500);
Awaybox.insert();
((Falls es wen wundert, warum ich diesmal objektorientiert "programmiert" habe: war nur zu Übungszwecken und sieht irgendwie auch stylischer aus als viele einzelne Funktionen

))
Das Script bietet natürlich auch einen Spamschutz, aber ganz kann Spam leider auch nicht aufgehalten werden. Es wird, wenn sich ein User zurückmeldet (egal ob per Box oder per Chatzeile), das Kästchen für 5 Sekunden deaktiviert. Das verhindert, dass ein User immer wieder hintereinander auf die Box klickt.
Ganz aufhalten lässt sich das (bis jetzt noch) nicht, aber ich denke, dass die User das schon nicht übertreiben. Notfalls gibts ja Mods und Admins. Falls es wirklich ausgenutzt wird, um zu spamen, dann bitte einfach mal melden. Ich überleg mir dann was.
Das Script kommt (wegen der Größe) in eine JavaScript-Datei (*.js-Datei) und wird anschließend auf den eigenen Webspace hochgeladen, um ihn dann später mit folgendem Code
nach der Grundscriptsammlung und bitte - falls ihr das Badwordscript benutzt - nach oder kurz vor dem Badwordscript in die 1. Ankündigung einzufügen:
Code: Alles auswählen
<script type="text/javascript" src="URL-ZUR-JS-DATEI"></script>
URL-ZUR-JS-DATEI muss natürlich angepasst werden. Weitere Informationen zum Einfügen von Scripts erhälst du in der
Scriptübersicht!
In die Gastankündigung muss das Script nicht, da der Befehl /away sowieso nicht von Gästen benutzt werden kann.
Konfiguration
Zwischen
/* Konfiguration */ und
/* Ab hier nichts mehr ändern */ kann eigentlich nur das angepasst werden:
// Text, der ausgegeben werden soll, wenn sich der User zurückmeldet
var AwayboxText = "Wieder da!";
Das
Rote ist der Text, der geschrieben wird, wenn man sich durch einen Klick auf die Checkbox zurückmeldet. Der Text kann natürlich beliebieg angepasst werden. Auch Smilies (z.B. :zwinker) können natürlich benutzt werden.

Ich hoffe es funktioniert einwandfrei. Viel Spaß!

Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 11.05.2011, 21:13
von Twilight
Danke Maxs, funktioniert einwandfrei

Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 11.05.2011, 23:23
von Mogli
Hallo Maxs,
sehr gute Arbeit - vielen Dank dafür!
Eine Frage habe ich aber: Wenn man sich über die Chatzeile zurück meldet sollte doch normal auch der Haken im "away-Kästchen" wieder weg sein oder? Im Chatfenster erscheint zwar die Meldung, daß man sich zurückmeldet, aber der Haken bleibt. Klickt man den Haken dann an, erscheint noch einmal die Meldung, daß man sich zurückmeldet. (Die Meldung vom Skript).
Das "Problem" hatte ich übrigens auch mit dem alten Skript!
Schöne Grüße
Mogli
Nachtrag: Wenn man z.B. die Zeit von 5 sek. auf 10 sek. oder 20 sek. erhöht, könnte man, meiner Meinung nach, Spam weitgehend ausschliessen!
Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 11.05.2011, 23:47
von Maxs
Danke für die Rückmeldungen!
Ja, normalerweise sollte der Haken beim Senden einer Chatzeile automatisch verschwinden (außer beim Flüstern, da man dann nicht zurückgemeldet wird).
Was für einen Browser benutzt du? Benutzt du das Badwordscript? Wenn ja, ist das Away-kästchen Script nach dem Badwordscript eingebunden?
Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 11.05.2011, 23:51
von Mogli
Ich habe es mit Firefox 3.6, mit Iron und IE9 getestet! Das Badword-Skript benutze ich nicht!
Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 12.05.2011, 00:00
von Maxs
Okay. Da schaue ich morgen nochmal darüber. Kann sein, dass da das Problem liegt, dass du nicht das Badwordscript hast. Da hat sich ein kleiner Fehler eingeschlichen. Danke für die Meldung!

Kann es nur leider jetzt nicht mehr testen. Sorry!
Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 12.05.2011, 00:04
von Mogli
Danke für Deine Mühe und mach dir bitte keinen Streß, es eilt nicht!

Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 12.05.2011, 17:49
von Maxs
Benutzt du zufällig das Scriftfarbe ändern Script? Wenn ja, daran liegts wohl leider. Hab nicht bedacht, dass das Script auch inkompatibel zu dem Away-Kästchen Script sein könnte. Ich werde mal einen Fix schreiben. Es wird halt wahrscheinlich komplizierter beim einbinden. Aber zuerst schreibe ich mal das Script um. (Kann auch sein, dass ich erst morgen die neue Version fertig habe)
Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 12.05.2011, 21:14
von Mogli
Du hast recht. Es liegt definitiv am "Schriftfarbenskript"! Wenn ich es deaktiviere, dann funktionert es!
Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 16.05.2011, 21:39
von Twilight
Hi Maxs,
also ... ich hatte das Script schon im Testchat drin (hatte vorhin nur nicht mehr daran gedacht)
Funktioniert auch bestens, nur hab ich jetzt einen Unterschied fest gestellt, als ich es auch bei uns im Radio-Chat (wo du heute abend drin warst) eingebaut habe.
Im Testchat färbt sich der Nick grün, was ich gut finde, im Radiochat aber erscheint unser Awaybild immer noch hinter dem Nick.
Habe schon meine Scripte durchgesehen, bin aber leider nicht dahinter gekommen, wo der Unterschied ist.
Hast du evtl. ne Ahnung, warum das so ist?

Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 16.05.2011, 22:21
von Maxs
Problem von Twilight behoben.
@ Mogli: Sorry, dass das so lange dauert. Aber ich bin echt schwer am überlegen, wie ich das am besten hinbiege. Die eine Variante (die ich vielleicht wohl oder übel machen muss) braucht viel Code und der Chatbefehl muss ersetzt werden. Ich werde die Tage mal weiter schauen. Sonst veröffentliche ich halt die dicke Variante.

Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 16.05.2011, 22:29
von Twilight
Vielen lieben Dank nochmal, Maxs!!!
Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 16.05.2011, 23:05
von Mogli
Maxs hat geschrieben:Problem von Twilight behoben.
@ Mogli: Sorry, dass das so lange dauert. Aber ich bin echt schwer am überlegen, wie ich das am besten hinbiege. Die eine Variante (die ich vielleicht wohl oder übel machen muss) braucht viel Code und der Chatbefehl muss ersetzt werden. Ich werde die Tage mal weiter schauen. Sonst veröffentliche ich halt die dicke Variante.

Maxs: Ich denke, daß das der Aufwand gar nicht Wert ist. Wenn der Haken nicht verschwindet ist das nicht so dramatisch. Es beeinflusst das Chatgeschehen in keinster Weise. Ich finde das jetzt nicht zwingend notwendig, wegen so einer Kleinigkeit stundenlang an einem Skript zu schreiben. Das Skript selbst erfüllt voll und ganz seinen Zweck.
Nochmals vielen Dank für Deine Mühe!
Schöne Grüße
Mogli
Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 07.07.2011, 03:23
von Brause-Junior
Huhu, war das Away-Kästchen nicht mal so, dass wenn man nen Kaken rein macht das man in einen anderen Channel kommt?
Re: Away-kästchen (Checkbox) im Eingabeframe
Verfasst: 07.07.2011, 06:50
von hamigra
Brause-Junior hat geschrieben:Huhu, war das Away-Kästchen nicht mal so, dass wenn man nen Kaken rein macht das man in einen anderen Channel kommt?
Mit Sicherheit war es das nicht!
Und man konnte von jeher nur einen
Haken setzen, zum
Kaken mußte man auf's Klo.
