Away-kästchen (Checkbox) im Eingabeframe

Fragen zu HTML, CSS, eigenen Erweiterungen etc.
Maxs
Moderator
Beiträge: 551
Registriert: 09.10.2008, 18:21
Kontaktdaten:

Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Maxs » 11.05.2011, 20:20

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. :)
Script:Zeigen

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 :P))



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

Script:Zeigen
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. :wink:
Ich hoffe es funktioniert einwandfrei. Viel Spaß! :mrgreen:
Zuletzt geändert von Maxs am 16.05.2011, 22:04, insgesamt 1-mal geändert.
Wäre es nicht adäquat, den Usus heterogener Termini zu minimieren?

Benutzeravatar
Twilight
Beiträge: 192
Registriert: 24.06.2010, 22:28
Wohnort: Sachsen
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Twilight » 11.05.2011, 21:13

Danke Maxs, funktioniert einwandfrei :)
MfG Twilight

*Klug ist nicht, wer keine Fehler macht. Klug ist der, der es versteht, sie zu korrigieren*

Benutzeravatar
Mogli
Beiträge: 485
Registriert: 18.10.2010, 23:42
Wohnort: Bayern
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Mogli » 11.05.2011, 23:23

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!

Maxs
Moderator
Beiträge: 551
Registriert: 09.10.2008, 18:21
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Maxs » 11.05.2011, 23:47

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?
Wäre es nicht adäquat, den Usus heterogener Termini zu minimieren?

Benutzeravatar
Mogli
Beiträge: 485
Registriert: 18.10.2010, 23:42
Wohnort: Bayern
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Mogli » 11.05.2011, 23:51

Ich habe es mit Firefox 3.6, mit Iron und IE9 getestet! Das Badword-Skript benutze ich nicht!

Maxs
Moderator
Beiträge: 551
Registriert: 09.10.2008, 18:21
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Maxs » 12.05.2011, 00:00

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!
Wäre es nicht adäquat, den Usus heterogener Termini zu minimieren?

Benutzeravatar
Mogli
Beiträge: 485
Registriert: 18.10.2010, 23:42
Wohnort: Bayern
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Mogli » 12.05.2011, 00:04

Danke für Deine Mühe und mach dir bitte keinen Streß, es eilt nicht! ;-)

Maxs
Moderator
Beiträge: 551
Registriert: 09.10.2008, 18:21
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Maxs » 12.05.2011, 17:49

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)
Wäre es nicht adäquat, den Usus heterogener Termini zu minimieren?

Benutzeravatar
Mogli
Beiträge: 485
Registriert: 18.10.2010, 23:42
Wohnort: Bayern
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Mogli » 12.05.2011, 21:14

Du hast recht. Es liegt definitiv am "Schriftfarbenskript"! Wenn ich es deaktiviere, dann funktionert es!

Benutzeravatar
Twilight
Beiträge: 192
Registriert: 24.06.2010, 22:28
Wohnort: Sachsen
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Twilight » 16.05.2011, 21:39

Hi Maxs,
also ... ich hatte das Script schon im Testchat drin (hatte vorhin nur nicht mehr daran gedacht) :lol:
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? :?: :?: :?:
MfG Twilight

*Klug ist nicht, wer keine Fehler macht. Klug ist der, der es versteht, sie zu korrigieren*

Maxs
Moderator
Beiträge: 551
Registriert: 09.10.2008, 18:21
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Maxs » 16.05.2011, 22:21

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. :|
Wäre es nicht adäquat, den Usus heterogener Termini zu minimieren?

Benutzeravatar
Twilight
Beiträge: 192
Registriert: 24.06.2010, 22:28
Wohnort: Sachsen
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Twilight » 16.05.2011, 22:29

Bild

Vielen lieben Dank nochmal, Maxs!!!
MfG Twilight

*Klug ist nicht, wer keine Fehler macht. Klug ist der, der es versteht, sie zu korrigieren*

Benutzeravatar
Mogli
Beiträge: 485
Registriert: 18.10.2010, 23:42
Wohnort: Bayern
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Mogli » 16.05.2011, 23:05

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

Brause-Junior

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von Brause-Junior » 07.07.2011, 03:23

Huhu, war das Away-Kästchen nicht mal so, dass wenn man nen Kaken rein macht das man in einen anderen Channel kommt?

Benutzeravatar
hamigra
Beiträge: 567
Registriert: 31.08.2006, 16:02
Wohnort: Werdau
Kontaktdaten:

Re: Away-kästchen (Checkbox) im Eingabeframe

Ungelesener Beitrag von hamigra » 07.07.2011, 06:50

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. :lol:
Deutsche Sprache ist Freeware, aber nicht OpenSource! Du darfst sie benutzen, aber nicht verändern.

Antworten

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot], Google [Bot] und 28 Gäste