molily: JavaScript-Buttons für BBCode

Hallo,

die angekündigten BBCode-Buttons im Posting-Formular sind nun für alle sichtbar.

Zur Vorgeschichte:
</archiv/2008/2/t166893/>
</archiv/2008/3/t167927/>

Dann möchte ich auf ein verbessertes Forums-Script von mir hinweisen, dass man als registrierter Benutzer in den Einstellungen zuschalten kann.

Das alte Script:
http://molily.de/temp/forum.js (komprimiert zum Einbinden)

Das neue Script:
http://molily.de/temp/forum2.js (komprimiert zum Einbinden)

Ich wollte schon immer eine Art Grundlage für weitere Scripte schaffen. Jetzt habe ich mal eine kleine Infrastruktur geschaffen, die ich weiter ausbauen will. Anstatt das ganze mit jQuery o.ä. zu lösen, habe ich keine Eingeständnisse gemacht und das ganze Low-Level gelöst (prototypische Erweiterung von DOM-Interfaces, DOMContentLoaded, DOM XPath, DOM Events mit Capturing). Das funktioniert hervorragend in den neuesten Versionen von Opera, Firefox und Safari. Für den IE reiße ich mir kein Bein aus.

Momentan kann das Script rudimentär die Forumshauptseite beim Klick auf einen Themenbereich bzw. einen Autornamen nach selbigen filtern und, wie schon das bisherige Scripte, ungelesene Antworten auf eigene Postings auflisten. Dazu sind noch die CSS-Regeln am Ende dieser Datei notwendig: http://molily.de/temp/forum.css

Falls ihr noch weitere Ideen habt, würde ich mich freuen. Der Namensraum SELFHTML.Forum soll erweiterbar für beliebige Funktionen sein und denen einige Daten und Helferfunktionen zur Verfügung stellen.

Schön wäre wenn z.B. Funktionen aus http://zapp.i-networx.de/ migriert und an aktuelle Programmiertechniken und Browserfähigkeiten angepasst werden. Erweiterungsscripte können meinetwegen jQuery verwenden, denn das wird hier derzeit ohnehin eingebunden. Allerdings habe ich bisher keine Notwendigkeit gesehen, wollte den möglichen Overhead von jQuery-Selektoren vermeiden und direkt mit XPath arbeiten.

Ich hatte lange die Möglichkeit verworfen, die Postings noch einmal in eine JavaScript-Struktur zu »parsen« bzw. JavaScript-Indizes zu erstellen, wie es Zapps Script tut, um die ganzen Features zur Verfügung zu stellen. Mit XPath lassen sich Elemente semantisch auf Basis von Tag-Namen, Klassen usw. ansprechen. Das gefällt mir besser als Orgien mit .parentNode.nextSibling.nextSibling.nextSibling.nextSibling und so weiter. Daher werde ich das noch einmal prüfen, sodass Module z.B. chronologische Übersichten sowie Themenbereich- und Namens-Statistiken und -Auflistungen anzeigen können, ohne selbst den DOM-Baum analysieren zu müssen.

Mathias

  1. Hi,

    die angekündigten BBCode-Buttons im Posting-Formular sind nun für alle sichtbar.

    Sichtbar ja.
    Aber funktionslos.

    Wenn ich mir den Quellcode <input id="bbLink" value="Link" type="button"> angucke, wundert es mich auch nicht, daß ein Klick auf die Buttons keine Wirkung zeigt ...

    Da fehlt doch noch was, z.B. ein Event-Handler.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo,

      Hi,

      die angekündigten BBCode-Buttons im Posting-Formular sind nun für alle sichtbar.

      Sichtbar ja.
      Aber funktionslos.

      Wieso funktionslos !?! Bei mir funktionieren die super xD *freu*

      Wenn ich mir den Quellcode <input id="bbLink" value="Link" type="button"> angucke, wundert es mich auch nicht, daß ein Klick auf die Buttons keine Wirkung zeigt ...

      Als mal ehrlich ... wenn ich mir den Quellcode anschaue, dann sehe ich gar keine Buttons, die mit "Link" oder "HTML" oder so beschriftet sind ^^

      MfG. Christoph

      --
      Wo die Sprache aufhört, fängt die Musik an...
      Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
      Go to this
    2. echo $begrüßung;

      die angekündigten BBCode-Buttons im Posting-Formular sind nun für alle sichtbar.
      Sichtbar ja.
      Aber funktionslos.

      Funktionslos sind sie bei mir auch,

      Wenn ich mir den Quellcode <input id="bbLink" value="Link" type="button"> angucke, wundert es mich auch nicht, daß ein Klick auf die Buttons keine Wirkung zeigt ...
      Da fehlt doch noch was, z.B. ein Event-Handler.

      aber die Schlussfolgerung kann ich nicht teilen. Der DOM-Inspector (vom Firefox 2.0.0.15) zeigt einen onclick-Handler für einen der Buttons, den ich vorher erfolglos betätigt hatte. Er wird wohl an anderer Stelle an den Button gebunden.

      Ich sehe aber auch, dass die Fehlerkonsole

      Fehler: input has no properties
        Quelldatei: http://forum.de.selfhtml.org/bbcode.js Zeile: 102

      auswirft. input bezieht sich wohl auf ein Element mit der ID #formular-nachricht, die ich im HTML-Code jedoch nicht finde.

      echo "$verabschiedung $name";

      1. Hi,

        die angekündigten BBCode-Buttons im Posting-Formular sind nun für alle sichtbar.
        Sichtbar ja.
        Aber funktionslos.

        Funktionslos sind sie bei mir auch,

        Wenn ich mir den Quellcode <input id="bbLink" value="Link" type="button"> angucke, wundert es mich auch nicht, daß ein Klick auf die Buttons keine Wirkung zeigt ...
        Da fehlt doch noch was, z.B. ein Event-Handler.
        aber die Schlussfolgerung kann ich nicht teilen.

        Ok, so tief wie Du hab ich nicht reingeguckt.
        Im "View selection source code" ist kein Handler zu sehen.

        Der DOM-Inspector (vom Firefox 2.0.0.15) zeigt einen onclick-Handler für einen der Buttons,

        im "DOM-Node" nicht.
        Erst im "Javascript-Object" ist der Handler zu sehen.

        Wenn ich mir den Anfang der Funktion angucke:
            var input = $(bbcode.textareaSelector).get(0);
            input.focus();

        dann wird er wohl gar nicht aufgerufen - denn der Fokus bleibt auf dem geklickten Button. Und es gibt keine Fehlermeldung in der Fehlerkonsole ...

        Fehler: input has no properties
          Quelldatei: http://forum.de.selfhtml.org/bbcode.js Zeile: 102

        Das bekomme ich nicht.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    3. Hallo,

      Sichtbar ja.
      Aber funktionslos.

      Seltsam. Am JS-Code ist nichts falsch, aber im HTML war ein Fehler. Den konnte ich in den Templates nicht finden. Aber beim erneuten Einchecken wurden die Templates dann korrekt kompiliert.

      Mathias

      1. Hi,

        Seltsam. Am JS-Code ist nichts falsch, aber im HTML war ein Fehler. Den konnte ich in den Templates nicht finden. Aber beim erneuten Einchecken wurden die Templates dann korrekt kompiliert.

        JETZT funktionierts.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        ``
  2. Das neue Script:
    http://molily.de/temp/forum2.js (komprimiert zum Einbinden)

    Können wir das irgendwo in der Nähe des Selfforums platzieren? Ich hatte mich bisher immer dreisterweise direkt von deinem Webangebot bedient. Jetzt könnte ich es natürlich auf meins kopieren, aber schöner wäre doch direkt am Forum, oder?

    Danke für das Script, ich könnte ja gar nicht mehr ohne!

    Viele Grüße!
    _Dirk

    --
    »Baby in Dirty Dancing: "Ich habe eine Wassermelone getragen." als mögliche Antwort auf Fragen wie "Lange nicht gesehen, was treibst du so?".«
    - Top Fives, Best of »Schöne Sätze für den Alltag«
  3. Hallo,

    die angekündigten BBCode-Buttons im Posting-Formular sind nun für alle sichtbar.

    Fehler: syntax error
    Quelldatei: http://forum.de.selfhtml.org/forum.js
    Zeile: 381
    Quelltext: ));

    Grüße
    Thomas

    1. Hallo,

      Fehler: syntax error
      Quelldatei: http://forum.de.selfhtml.org/forum.js
      Zeile: 381
      Quelltext: ));

      Das ist ein Fehler in einer anderen Datei, die mit dem BBCode-Script nichts zu tun hat; der Fehler sollte schon korrigiert sein, sodass dir wahrscheinlich der Cache einen Streich spielt.

      Mathias

      1. Hallo,

        sodass dir wahrscheinlich der Cache einen Streich spielt.

        Stimmt gar nicht, zum Zeitpunkt deines Postings bestand der Fehler noch, danke für den Hinweis.

        Mathias

        1. Hallo

          Stimmt gar nicht, zum Zeitpunkt deines Postings bestand der Fehler noch,

          Noch ein Fehler, der nicht mit den Buttons zu tun hat, aber mit dem hier im Forum verwendeten JavaScript. Ich will dafür aber keinen neuen Thread aufmachen.

          Die Links zum als gelesen und interessant markieren sowie zum ausblenden von Threads in der Hauptansicht funktionieren ja normalerweise mit Ajax. Momentan tut es zumindest der Ausblenden-Link nicht. Jedesmal wenn ich einen Thread diesem Schicksal überlassen will, wird die Forumshauptdatei neu vom Server geladen. Da liegt irgendwas im Argen.

          Tschö, Auge

          --
          Die deutschen Interessen werden am Liechtenstein verteidigt.
          Veranstaltungsdatenbank Vdb 0.2
  4. <?php  
    echo 'Coole Sache!';  
    ?>
    
  5. [latex]Mae  govannen![/latex]

    die angekündigten BBCode-Buttons im Posting-Formular sind nun für alle sichtbar.

    Leider.

    a) wo schaltet man das ab?
    b) wird danach das von mir bevorzugte Script wieder funktionieren?

    Cü,

    Kai

    --
    YouTube Video-Tipp: Harmonic Curves
    YouTube Video-Tipp: Pipe Dreams
    selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
    1. Hallo,

      die angekündigten BBCode-Buttons im Posting-Formular sind nun für alle sichtbar.

      Leider.

      Nichts zu danken, ich habe es gerne getan.

      a) wo schaltet man das ab?

      Du kannst die Buttons ausblenden:
      #bbcodeButtons { display:none; }

      Oder das Script deaktivieren, sodass die Buttons erst gar nicht eingebunden werden:
      bbcode.active = false;

      b) wird danach das von mir bevorzugte Script wieder funktionieren?

      Keine Ahnung, warum dein Script nicht mehr funktioniert. Das hiesige fügt bloß eine Tabellenzeile mit Buttons ins DOM ein und verändert oder überschreibt sonst nichts. Eine Koexistenz sollte also möglich sein. Wenn nicht, dann gib mir einen Tipp, was ich ändern muss, um die zu gewährleisten.

      Mathias

      1. [latex]Mae  govannen![/latex]

        bbcode.active = false;

        Crash. „Mein“ Script (eigentlich Jeenas Script, nur teilweise erweitert/verändert) verwendet auch das Objekt bbcode. Das kann nicht funktionieren. Wir brauchen einen eindeutigen Namespace ;)

        Keine Ahnung, warum dein Script nicht mehr funktioniert.

        Kann auch nicht mehr, wenn die id der Textarea geändert wird...

        ich habe das Objekt umbenannt und die neue ID zum Einhängen verwendet, damit habe ich alles wieder im Griff. Allerdings ist das nichts für Leute, die "nur so" ein Hilfsscript eingebunden haben.

        Cü,

        Kai

        --
        YouTube Video-Tipp: Harmonic Curves
        YouTube Video-Tipp: Pipe Dreams
        selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
        1. Hallo,

          Wir brauchen einen eindeutigen Namespace ;)

          Ja, ich bin gerade dabei, die ganzen Scripte zu überarbeiten... Dann werde ich bbcode wohl in den Namespace SELFHTML.Forum migrieren.

          Kann auch nicht mehr, wenn die id der Textarea geändert wird...

          Die alte ID war wenig aussagekräftig (»body«), daher habe ich sie an die restlichen Element- bzw. Formularfeld-Bezeichner angepasst.

          Mathias

          1. [latex]Mae  govannen![/latex]

            Ja, ich bin gerade dabei, die ganzen Scripte zu überarbeiten... Dann werde ich bbcode wohl in den Namespace SELFHTML.Forum migrieren.

            Die Foren-Bedienung mit Tasten wird anscheinend auch nicht mehr korrekt eingebunden:

            JavaScript - http://forum.de.selfhtml.org/my/?t=174458&m=1146570
            Inline script thread
            Error:
            name: ReferenceError
            message: Statement on line 10: Undefined variable: next_posting
            Backtrace:
              Line 10 of inline#1 script in http://forum.de.selfhtml.org/my/?t=174458&m=1146570
                register_keybinding(flt_shortcuts_keystable,'n',0,next_posting);
            stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'

            Cü,

            Kai

            --
            YouTube Video-Tipp: Harmonic Curves
            YouTube Video-Tipp: Pipe Dreams
            selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
            1. Hallo,

              Die Foren-Bedienung mit Tasten wird anscheinend auch nicht mehr korrekt eingebunden

              Die siebenundzwanzig losen Funktionen dazu hatte ich fälschlicherweise auskommentiert, weil ich keine Referenz darauf gefunden hatte. Das ist wohl irgendwo hartkodiert oder ausgelagert, wo ich es noch nicht gefunden habe...

              Mathias

        2. Hallo Kai345

          Kann auch nicht mehr, wenn die id der Textarea geändert wird...

          Wie viele verschiedene Scripte von Jeena gibt es denn eigentlich?
          Bei mir funktioniert Jeenas Greasemonkey-Script wunderbar (außer der doppelten Buttonleiste, wenn ich Javascript aktiviere). Es holt sich die Textarea allerdings auch nicht über die ID sondern mittels document.getElementsByTagName("textarea")[0];

          bbcode.active = false;

          tut natürlich auch nichts Sinnvolles, also blende ich nur aus:

            var bbForum = document.getElementById("bbcodeButtons");  
            if (bbForum) bbForum.style.display="none";  
          
          

          Auf Wiederlesen
          Detlef

          --
          - Wissen ist gut
          - Können ist besser
          - aber das Beste und Interessanteste ist der Weg dahin!
          1. Hallo,

            bbcode.active = false;
            tut natürlich auch nichts Sinnvolles

            Wie meinen?
            Es tut das, was es tun soll, es verhindert, dass die Buttons hinzugefügt werden, oder nicht?
            Das eigene Script wird zwar nach bbcode.js geladen, aber bbcode.js wird erst beim DOM-Ready aktiv, also müsste das Setzen von bbcode.active funktionieren. (Seltsame Fälle, in denen die Scripte nach DOM-Ready ausgeführt werden, mal außen vor.)

            Mathias

            1. Hallo,

              Hallo,

              bbcode.active = false;
              tut natürlich auch nichts Sinnvolles

              Wie meinen?
              Es tut das, was es tun soll, es verhindert, dass die Buttons hinzugefügt werden, oder nicht?

              Nein, es verhindert nicht, dass die Buttons hinzugefügt werden, weil es dazu zwischen das laden von bbcode.js und DOM-Ready gefädelt werden müsste.

              Das eigene Script wird zwar nach bbcode.js geladen, aber bbcode.js wird erst beim DOM-Ready aktiv, also müsste das Setzen von bbcode.active funktionieren. (Seltsame Fälle, in denen die Scripte nach DOM-Ready ausgeführt werden, mal außen vor.)

              Greasemonkey ist also einer der „Seltsamen Fälle”.
              Ich verwende Greasemonkey, die damit eingebundenen Scripte brauchen nicht mittels HTTP angefordert zu werden und laufen auch, wenn Javascript ansonsten deaktiviert ist.

              Deine Buttons sind bereits in die Seite eingefügt, wenn mein Script gestartet wird. Da bleibt mir nur noch übrig, diese wieder unsichtbar zu machen.
              Ich habe übrigens nicht vor, nur um die von mir nicht gewünschten Buttons loszuwerden, extra noch eine User-JS mit genau dieser einen Zeile auf meinen Webspace zu packen und ins Forum einzubinden.

              Auf Wiederlesen
              Detlef

              --
              - Wissen ist gut
              - Können ist besser
              - aber das Beste und Interessanteste ist der Weg dahin!
              1. [latex]Mae  govannen![/latex]

                Ich habe übrigens nicht vor, nur um die von mir nicht gewünschten Buttons loszuwerden, extra noch eine User-JS mit genau dieser einen Zeile auf meinen Webspace zu packen und ins Forum einzubinden.

                Du kannst sie immer noch, wie Mathias vorschlug, per CSS ausblenden. Geht sogar in den Benutzer-Einstellungen, keine Datei notwendig

                Cü,

                Kai

                --
                YouTube Video-Tipp: Harmonic Curves
                YouTube Video-Tipp: Pipe Dreams
                selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
                1. Hallo Kai345

                  Du kannst sie immer noch, wie Mathias vorschlug, per CSS ausblenden. Geht sogar in den Benutzer-Einstellungen, keine Datei notwendig

                  Das hatte ich auch zuerst, dann habe ich mir überlegt, dass es doch Blödsinn ist, die Buttonleiste generell auszublenden, wenn sie nur dann unsinnig ist, wenn das Graesemonkey-Script läuft. (Könnte ja mal vorkommen, dass ich das Forum von einem anderen Rechner aufrufe oder mit einem Browser, wo mein Script nicht eingebunden ist.)
                  Deshalb setze ich das display:none in dem Script. Dazu habe ich die bereits geschriebenen Zeilen eingefügt:

                    
                     var bbForum = document.getElementById("bbcodeButtons");  
                     if (bbForum) bbForum.style.display="none";  
                  
                  

                  Auf Wiederlesen
                  Detlef

                  --
                  - Wissen ist gut
                  - Können ist besser
                  - aber das Beste und Interessanteste ist der Weg dahin!
              2. Hallo,

                Greasemonkey ist also einer der „Seltsamen Fälle”.

                Okay, das erklärt es.

                Übrigens, was hat das Greasemonkey-Script, was das hiesige Script nicht hat?

                Mathias

                1. Hallo Mathias

                  Übrigens, was hat das Greasemonkey-Script, was das hiesige Script nicht hat?

                  1. Es funktioniert auch bei deaktiviertem Javascript.
                  2. Zur Zeit enthält es auch ‚’, „” und …
                  3. Wenn ich mir sonst noch etwas wünsche, kann ich mir das in wenigen Sekunden reinschreiben.

                  Auf Wiederlesen
                  Detlef

                  --
                  - Wissen ist gut
                  - Können ist besser
                  - aber das Beste und Interessanteste ist der Weg dahin!
  6. Hallo

    Wenn man die Vorschau für sein Posting benutzt, steht die Buttonleiste "Formatierungen einfügen" zwischen "Deine Email" und dem dann eingefügten Feld für "Themenbereich". Das sieht irgendwie komisch aus. Wäre es nicht sinnvoller, die Leiste an das <textarea> zu binden, so dass sie immer direkt darüber angezeigt wird?

    Tschö, Auge

    --
    Die deutschen Interessen werden am Liechtenstein verteidigt.
    Veranstaltungsdatenbank Vdb 0.2