Neues Plugin: PRISM (prismjs.com) SyntaxHighlighter for Joomla!

  • Hallo Joomla!-Community,


    Habt ihr schon mal den Syntax-Highlighter im TinyMCE getestet?


    Das ist eine sehr einfache Sache: Button anklicken, Code einfügen, fertig.


    Nur leider werden die benötigten CSS-Klassen und Javascript-Dateien nur im TinyMCE geladen, auf der Seite selbst hat man dann eine Code-Box ohne Syntax Highlighting




    Ich habe ein Plugin geschrieben, welches den Code nachrüstet.
    Einige Sachen sind noch nicht fertig, u.a. die Sprachdateien. Der Code sollte aber gut funktionieren.


    Aktuell ist es im Joomla! Extension Directory noch im Review, daher könnt ihr es von meiner Webseite herunterladen, wenn ihr es schon testen wollt:


    https://www.andrehotzler.de/jo…ismsyntaxhighlighter.html


    Gebt mir gern Feedback.


    Vielen Dank und viele Grüße

  • Gebt mir gern Feedback.


    Selber Schuld ;-)


    Mich würde stören, dass CSS und JS auf jeder Seite geladen wird, egal, ob benötigt oder nicht. Vielleicht besser in onContentPrepare(...) (statt __construct(...)) mit paar vorgeschalteten Prüfungen wie $context, view, eh schon alles geladen (bspw. via static Variable festgehalten) und ein Quicktest auf Vorkommen von eventuell Code-Blöcken. Soweit ich sehe, haben die immer ein <pre und immer ein <code>


    So was in der Art:


    Code
    1. if (
    2. strpos($article->text, '<pre ') === false
    3. || strpos($article->text, '<code>') === false
    4. ){
    5. // Abbruch. Sicher nix zu tun.
    6. return true;
    7. }
  • J! 3.7 Alpha liefert Warnings aus:

  • Ich seh die Warning zwar nicht (mit 3.7.0 Staging von gestern und der neuen Plugin-Version von heute), aber in den Methoden script und stylesheet hat sich Grundlegendes geändert. Das true (für lade framework) bspw. ist so zukünftig nicht mehr gewünscht, sondern man übergibt ein Array mit ('framework' => true, usw.)


    Jetzt fällt auf, dass die Methode script hier eine Prüfung drinnen hat für B\C


    (https://github.com/joomla/joom…es/cms/html/html.php#L676)


    während die Methode stylesheet $options nicht auf is_array prüft (nur $attribs), was dann wohl zum Fehler führt.



    (https://github.com/joomla/joom…es/cms/html/html.php#L604)


    Also, wohl ein Bug anzunehmen. Da ich leider nicht reproduzieren kann, kann ich auch nicht einreichen.

  • Es scheint da keinen Unterschied zwischen StyleSheet und Script zu geben, hab allerhand ausprobiert.


    Ich hab meinen Code erstmal auf eine andere Methode geändert, würde aber gern JHTML benutzen.


    Ich hab die Alpha1 von J! 3.7 von Github heruntergeladen und Das PHP Debugging auf Entwicklung in Joomla eingestellt.


    Wenn ich.


    Code
    1. JHtml::script(JUri::base() . 'templates/custom/js/sample.js', true);


    in ./plugins/content/emailcloak/emailcloak.php einfüge, dann erhalte ich diese Warnungen.


    Wenn Du das Selbe machst, hast Du keine Warnung?

  • Ich habe die Zeile


    Code
    1. JHtml::script(JUri::base() . 'templates/custom/js/sample.js', true);


    Einfach in die oben genannte Datei ./plugins/content/emailcloak/emailcloak.php eingefügt und gespeichert, also extremst trvial.


    Tritt mit PHP 5.6.29 und mit 7.0.14 auf, eigener Server, Debian Stable, php-fcgid


    Naja egal, ich habe ein neues Joomla aufgesetzt mit git clone von der von Dir genannten URL. Da tritt der Fehler immer noch auf auf. Also ein Bug in Joomla! 3.7Alpha1

  • Ursache ist, dass du die Zeile zu früh setzt. Weder im Constructor (war ja bei deienr Pluginversion von gestern noch der Fall), noch am Beginn der Datei, noch in onAfterInitialise(), noch in ...


    Deshalb meine Frage, wo du exakt eingesetzt hast. Es gibt JHtml-Zeilen (auch andere), mit denen du das ganze System in Teilen fehlfunktionierend machen kannst, weil die aufgerufenen Methoden irgendwo auf ihrem Weg durch die Eingeweide und weitere Methoden zu früh z.B. ein $app->getTemplate() ausführen ("beliebtestes" Beispiel).


    Ein
    JHtml::_('jquery.framework');
    JHtml::_('bootstrap.framework');
    in onAfterInitialise() ist z.B. so ein Killer (allerdings ohne Warning, aber mit erheblichem, folgendem Rätselverhalten des Layout-Override-Systems).


    Gehört frühestens in onAfterRoute().


    Kurz: Programmierfehler. Kein Bug ;-)

  • aus der Doku zu lesen, was man wann wie am Besten aufruft


    Anekdötchen zum Feierabend:
    Das steht wenn, dann nur zufällig so explizit in irgendeiner Doku. Ich werds nur deshalb nicht mehr vergessen, weil eine Zeit lang fast jedes meiner aufwendigeren Systemplugins einen solchen "schweigenden" Fehler drin hatte ;-) Erst nachdem ich die alle (weinend) umprogrammiert hatte, habe ich die Doku bzgl. Reihenfolge von Plugin-Typen/-Gruppen und Plugin-Events überhaupt richtig verstanden. Das meiste durch Spicken im Core und in Plugins von Leuten, auf die man sich (hoffentlich) verlassen kann, aus Forenproblemen und auf GitHub, wo's auch mal Thema war. Es gab/gibt auch ein Template-Framework, was diesbzgl. einen gravierenden Fehler drin hatte/hat. Da war/ist die plumpe Antwort vom Support "Fehler berichten" zu deaktivieren ;-)

    dass ich es gescheit mache


    Hast ja jetzt eh schon korrigiert in deinem Plugin.