TinyMCE in Serendipity einbinden

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
blog.brockha.us
Regular
Posts: 695
Joined: Tue Jul 03, 2007 3:34 am
Location: Berlin, Germany
Contact:

TinyMCE in Serendipity einbinden

Post by blog.brockha.us »

Da mich die HTML Area immer mehr genervt hat, habe ich bei mir nun mal TinyMCE eingebunden. Ich habe mir das Plugin dafür installiert und selbiges dann angepasst, so dass tinyMCE besser in s9y konfigurierbar wird.

Zusätzlich habe ich mir einen Button für TinyMCE gebaut, mit dem man dann auch Bilder aus der Mediengallerie (genau wie bei HTML Area) in den Artikel einbinden kann. Klappt alles ziemlich gut.

Jetzt ist meine Frage: Wie release ich das am besten? Ich musste serendipity_editors.js minimal anpassen, damit es kompatibel zu TinyMCE wird und der Mediendaten Button funktioniert. Dadurch wird der zusätzliche Knopf nun erst 1.3 kompatibel. Das eigentliche Plugin bleibt aber weiterhin zur alten Version kompatibel.

Wie packt man das alles am besten zusammen? Ich würde ja am liebsten gleich TinyMCE mit in das Plugin packen inklusive des neuen Buttons zur Mediendatenbank. Dadurch könnte man dann extrem simpel auf TinyMCE wechseln.

Wahrscheinlich sprechen dagegen aber wohl wieder irgendwelche konkurrierenden Lizenzen, oder? :-/

Dann bleibt wahrscheinlich nur, das Plugin so zu releasen wie vorher und separat dann irgendwo meinen neuen Button + Patch Anweisung und Beschreibung, wie man das alles zusammenfügt. Das Plugin war aber schon vorher alles andere als benutzerfreundlich, es würde dadurch dann wohl noch schlimmer..

Hat jemand eine bessere Idee? Garvin?
- Grischa Brockhaus - http://blog.brockha.us
- Want to make me happy? http://wishes.brockha.us/
blog.brockha.us
Regular
Posts: 695
Joined: Tue Jul 03, 2007 3:34 am
Location: Berlin, Germany
Contact:

Post by blog.brockha.us »

Noch eine Frage. Im HTML Code der Admin Oberfläche gibt es, wenn man gerade einen Artikel bearbeitet, folgende Skriptanweisung:

Code: Select all

function use_link_body(txt) {
    if (typeof(FCKeditorAPI) != 'undefined') {
        var oEditor = FCKeditorAPI.GetInstance('serendipity[body]') ;
        oEditor.InsertHtml(txt);
    } else if(typeof(xinha_editors) != 'undefined') {
 // ... usw ..
Wo kommt die her? Ich kann den String "use_link_body" nirgends im s9y core entdecken..
- Grischa Brockhaus - http://blog.brockha.us
- Want to make me happy? http://wishes.brockha.us/
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: TinyMCE in Serendipity einbinden

Post by garvinhicking »

Hi!
Jetzt ist meine Frage: Wie release ich das am besten? Ich musste serendipity_editors.js minimal anpassen, damit es kompatibel zu TinyMCE wird und der Mediendaten Button funktioniert. Dadurch wird der zusätzliche Knopf nun erst 1.3 kompatibel. Das eigentliche Plugin bleibt aber weiterhin zur alten Version kompatibel.
Wie sieht denn der Patch aus?
Wie packt man das alles am besten zusammen? Ich würde ja am liebsten gleich TinyMCE mit in das Plugin packen inklusive des neuen Buttons zur Mediendatenbank. Dadurch könnte man dann extrem simpel auf TinyMCE wechseln.
Leider besteht tinymce ja auch aus drölf milliarden Javascripts. Ausserdem werden alle WYSIWSYg-Komponenten extrem oft released und geändert, und ich habe keine Lust jedesmal die Dateien in unserem CVS auch aktualisieren zu müssen. Hinzu kommt die Lizens-Sache, aus den drei Gründen denke ich macht nur eine external dependency wirklich sinn.
Dann bleibt wahrscheinlich nur, das Plugin so zu releasen wie vorher und separat dann irgendwo meinen neuen Button + Patch Anweisung und Beschreibung, wie man das alles zusammenfügt. Das Plugin war aber schon vorher alles andere als benutzerfreundlich, es würde dadurch dann wohl noch schlimmer..
Kann man es nicht so hinbiegen, dass man nur tinymce runterladen muss ins ins pluginverzeichnis kippen?

Dein "use_link_body!" muss von einem externen s9y plugin kommen, dieser teil gehört nicht zum s9y core.

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
blog.brockha.us
Regular
Posts: 695
Joined: Tue Jul 03, 2007 3:34 am
Location: Berlin, Germany
Contact:

Post by blog.brockha.us »

Der Patch, den ich machen musste ist folgender. Am Ende von serendipity_editor.js muss folgendes stehen:

Code: Select all

    if (typeof(parent.self.opener.htmlarea_editors) != 'undefined' && typeof(parent.self.opener.htmlarea_editors[textarea]) != 'undefined') {
        parent.self.opener.htmlarea_editors[textarea].surroundHTML(block, '');
    } else if (typeof(parent.self.opener.TinyMCE) !='undefined') {
        parent.self.opener.tinyMCE.execCommand('mceInsertRawHTML', true, block);
    } else if (parent.self.opener.editorref) {
        parent.self.opener.editorref.surroundHTML(block, '');
    } else {
        parent.self.opener.serendipity_imageSelector_addToBody(block, textarea);
    }

    parent.self.close();
}
Die TinyMCE Zeilen sind neu. Ohne diese kann die Medien Datenbank nicht in den TinyMCE Editor pasten.

Deine 3 Gründe verstehe ich, außer den, dass TinyMCE so oft geupdatet wird. Das muss man ja nicht nachvollziehen. Das Einkippen von TinyMCE geht natürlich, passiert ja jetzt auch. Allerdings bietet das Plugin die Möglichkeit, den in ein beliebiges Verzeichnis zu kippen, somit kann ich meinen Knopf nicht vorinstallieren. Gibt es eigentlich einen event, wenn die Einstellungen des Plugins gespeichert werden? Den könnte man dann evtl. nutzen, um das Verzeichnis abzufragen und dort dann den Knopf gleich mit abzulegen.

Jetzt wo Du's sagst vermute ich, dass der "use_link_body" wohl vom wiki Plugin kommt, das macht ja so einen Knopf über den Editor, mit dem man Links auf vorhandene Einträge setzen kann.
- Grischa Brockhaus - http://blog.brockha.us
- Want to make me happy? http://wishes.brockha.us/
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Hab dir ne Mail geschrieben, wie man den Patch sinnvoller lösen könnte:
--------
Emulator = {
function surroundHTML(block, string) {
TinyMCE.execCommand('mceInsertRawHTML', true, block);
}
}

editorref = new Emulator();
---------

Damit kapselt Du den TinyMCE Aufruf in einem eigenen "editorref", den das
vorhandene serendipity_Editor.js bereits ansprechen kann.
Deine 3 Gründe verstehe ich, außer den, dass TinyMCE so oft geupdatet wird. Das muss man ja nicht nachvollziehen.
Aber erfahrungsgemäß sind WYSYWG-Editoren so buggy, dass man sie möglichst ständig aktualisieren sollte. :)
Das Einkippen von TinyMCE geht natürlich, passiert ja jetzt auch. Allerdings bietet das Plugin die Möglichkeit, den in ein beliebiges Verzeichnis zu kippen, somit kann ich meinen Knopf nicht vorinstallieren. Gibt es eigentlich einen event, wenn die Einstellungen des Plugins gespeichert werden? Den könnte man dann evtl. nutzen, um das Verzeichnis abzufragen und dort dann den Knopf gleich mit abzulegen.
Ja, $this->cleanup() wird aufgerufen, wenn die konfigurationg espeichert wird.

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
blog.brockha.us
Regular
Posts: 695
Joined: Tue Jul 03, 2007 3:34 am
Location: Berlin, Germany
Contact:

Post by blog.brockha.us »

Ich habe Deine Idee eingebunden. Nachdem ich das Script ein wenig umgeschrieben habe, klappt es. Cool! :-) Danke Garvin für die Idee! Version 1.2 ist im CVS.

Zum Cleanup: Ich habe das jetzt anders gelöst. Der Pfad zum TinyMCE ist nun durch das Plugin vorgegeben, so kann ich nun einfach den Knopf schon mal in diesen Pfad legen und mit dem Plugin ausliefern. Ich habe sowieso den Verdacht, dass das ein wenig zu viel der Konfiguration ist, wenn man auch noch den Pfad zum Editor angeben kann. Außer vielleicht, wenn s9y in einem CMS embedded wird, das auch den TinyMCE benutzt..
- Grischa Brockhaus - http://blog.brockha.us
- Want to make me happy? http://wishes.brockha.us/
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Du kannst den Pfad zum Plugin nicht einfach festlegen.

Ich nutze die Plugins nämlich so, dass mein verzeichnis /plugins/additional_plugins/serendipity_event_tinymce/ etc. ist. Daher sollten Plugins niemals hartkodierte Pfadnamen enthalten, es muss immer konfigurierbar sein, wenn das Plugin den richtigen Pfad nicht erkennen kann.

Da ich mit symbolischen Links arbeite, kann ein Plugin aber nicht erkennen, wie der HTTP-Pfad lauten muss. Daher die Konfigurationsoption.

Bitte also diese Festlegung wieder rückängig machen, das muss man anders lösen. :-)

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
blog.brockha.us
Regular
Posts: 695
Joined: Tue Jul 03, 2007 3:34 am
Location: Berlin, Germany
Contact:

Post by blog.brockha.us »

Äh verstehe ich nicht.. Ich hole mir den Pfad über dirname(__FILE__). Das packe ich dann an das Base Verzeichnis des Blogs.

Bei Dir müsste der Editor dann also über folgende URL geladen werden

http://DeineBaseUrl/plugins/additional_ ... t_tinymce/..

Das klappt dann nicht?

Ach nein.. Stimmt.. Ich gehe tatsächlich davon aus, dass Plugins unter dem Verzeichnis Plugin liegen.. Mal überlegen..
- Grischa Brockhaus - http://blog.brockha.us
- Want to make me happy? http://wishes.brockha.us/
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Bei mir ist folgendes Setup (vereinfacht):

DOCUMENT-ROOT: /var/www
Serendipity: /var/www/serendipity
Spartacus: /var/www/additional_plugins

Ich habe einen Symlink eingerichtet

/var/www/serendipity/plugins/additional_plugins -> /var/www/additional_plugins/

d.h. ein dirname(__FILE__) würde im tinymce verzeichins /var/www/additional_plugins/serendipity_event_tinymce/ liefern. Den Pfad kann man aber nicht benutzen um per HTTP zuzugreifen.

In deinem Fall:

Code: Select all

                  $path = $serendipity['baseURL'] . '/plugins/serendipity_event_tinymce/tinymce/';
?>
<script language="javascript" type="text/javascript" src="<?php echo $path; ?>jscripts/tiny_mce/tiny_mce_gzip.php"></script>

würde bei mir liefern:

http://meinblog/plugins/serendipity_eve ... e/tinymce/

richtig wäre aber:

http://meinblog/plugins/additional_plug ... e/tinymce/

Es muss also sichergestellt sein, dass das TinyMCE Plugin nicht einfach stur davon ausgeht, wie ich meine Pfade benannt habe.

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
blog.brockha.us
Regular
Posts: 695
Joined: Tue Jul 03, 2007 3:34 am
Location: Berlin, Germany
Contact:

Post by blog.brockha.us »

Och je.. Was meinst du wohl, wie viele s9y User so ein Setup haben? :roll: :-)
Das einfachste wäre wahrscheinlich, das plugin so zu lassen, wie es ist und Du passt bei Dir den Pfad im Code an, dann klappt es wohl bei allen Nutzern, würde ich tippen.. :lol:

Aber im Ernst: Da muss ich mir wohl noch mal etwas zu überlegen. Wieso funktioniert das bei Dir eigentlich so? Sucht Serendipity etwa das Plugin Verzeichnis rekursiv nach Plugins durch? Ansonsten ist mir schleierhaft, wie s9y Deine additional_plugins überhaupt findet?

P.S.: Naja, eigentlich ist die Lösung ja ganz einfach: Da ich ja nur will, dass das tinymce Subverzeichnis fix bleibt, kann ich ja einfach nur den Pfad zum Plugin konfigurierbar machen. Damit würde dann beides gehen. Deine lustige Konstruktion und das automatische Einbinden des neuen Buttons.
- Grischa Brockhaus - http://blog.brockha.us
- Want to make me happy? http://wishes.brockha.us/
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!
blog.brockha.us wrote:Och je.. Was meinst du wohl, wie viele s9y User so ein Setup haben? :roll: :-)
Beinahe jeder, der eine shared installation betreibt!

Alle Blog auf supersized.org z.B., das sind einige tausend.

Das Feature der "egalitären" URLs ist halt nunmal da, man sollte es also in einem plugin nicht stillschweigend ignorieren. Schonmal garnicht, wenn der Pfad vorher konfigurierbar war, denn damit nimmst Du den Benutzern ein Feature weg. ;)

Code: Select all

Das einfachste wäre wahrscheinlich, das plugin so zu lassen, wie es ist und Du passt bei Dir den Pfad im Code an, dann klappt es wohl bei [b]allen[/b] Nutzern, würde ich tippen..  :lol: 
Das istk eine Option, die "Backward Compatibility" ermöglicht, die Serendipity halt sehr hoch hält. :)
Aber im Ernst: Da muss ich mir wohl noch mal etwas zu überlegen. Wieso funktioniert das bei Dir eigentlich so? Sucht Serendipity etwa das Plugin Verzeichnis rekursiv nach Plugins durch? Ansonsten ist mir schleierhaft, wie s9y Deine additional_plugins überhaupt findet?
Genau so ist es: s9y durchsucht rekursiv auch unterverzeichnisse.
P.S.: Naja, eigentlich ist die Lösung ja ganz einfach: Da ich ja nur will, dass das tinymce Subverzeichnis fix bleibt, kann ich ja einfach nur den Pfad zum Plugin konfigurierbar machen. Damit würde dann beides gehen. Deine lustige Konstruktion und das automatische Einbinden des neuen Buttons.
Genau, das klingt doch gut. Muss man halt nur schauen dass das Plugin auch für Leute funktioniert, die damals "path" schon auf den "tinymce" Pfad gesetzt haben.

Ehrlich gesagt, ich würde die Pfad-Sache einfach so wie vorher wiederherstellen. Wenn jemand den Unterpfad "tinymce" in "blamce" ändert, dann sollte derjenige auch im klaren darüber sein, dass etwaige plugins für tinymce so nicht mehr klappen und dass er selber pfade anpassen muss. Du kannst dann einfach alles auf 'tinymce' festlegen. Das würde dann auch keine backward compatibility brecnehn.

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
blog.brockha.us
Regular
Posts: 695
Joined: Tue Jul 03, 2007 3:34 am
Location: Berlin, Germany
Contact:

Post by blog.brockha.us »

Ich habe nun einfach eine weitere Konfiguration eingebaut, in die man den relativen HTTP Pfad zum Plugin angeben kann. Ich hätte gerne die vorherige Einstellung ausgewertet, allerdings kann ich offenbar nicht in inspect auf die bisherige Konfig zugreifen. Nun gut. Wer also vorher Änderungen vollzogen hat, muss diese nun nach einmal nachziehen. Die alte Einstellung benutzen wollte ich nicht, weil da eben der TinyMCE Pfad drin steht und nicht der Plugin Pfad.

Leider sehe ich gerade, dass der IE schon wieder eine JS Warning offenbar wegen dem neuen "Emulator" Code ausspuckt. Der nervt echt enorm, vor allem weil der einfach keine vernünftige Fehlermeldung ausspuckt, was ihn eigentlich stört! :-/
- Grischa Brockhaus - http://blog.brockha.us
- Want to make me happy? http://wishes.brockha.us/
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Jau, das ist vertretbar, denke ich. :-)
Leider sehe ich gerade, dass der IE schon wieder eine JS Warning offenbar wegen dem neuen "Emulator" Code ausspuckt. Der nervt echt enorm, vor allem weil der einfach keine vernünftige Fehlermeldung ausspuckt, was ihn eigentlich stört! :-/
Oh, da hab ich auch so verdammt oft drüber geflucht! :(

Liegt's vielleicht an fehlender Klammerung nach nem Funktionsnamen oder so?

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
blog.brockha.us
Regular
Posts: 695
Joined: Tue Jul 03, 2007 3:34 am
Location: Berlin, Germany
Contact:

Post by blog.brockha.us »

Nee.. Habe es jetzt gefunden. Es liegt offenbar daran, dass etwas gezippt wird, was später gar nicht verwendet wird (aber vorhanden ist).. Merkwürdig.. Das hat den IE vorher auch nicht gestört.. Also diese JS Warnings in IE sind manchmal schon verdammt dubios..

Jetzt gibt irgendwas noch 1en aus. Unterhalb der Seite für das Bearbeiten von Artikeln stehen nun 2 Einsen. Das ist zwar nicht wirklich ein Bug, aber sieht irgendwie unschön aus. Wenn ich Debugmeldungen eingebe erkenne ich, dass die 1 offenbar nach dem Aufruf der Funktion event_hook mit dem Event Parameter 'backend_wysiwyg' ausgegeben wird. Durch meinen Code direkt scheinbar nicht..

Schräg.. Aber wie gesagt: Das ist nicht wirklich ein Bug, sondern nur eine Unschönheit, die schon länger vorhanden ist..

Ich release noch einmal eine Version, die (offenbar?) auch die neuerliche IE7 Warning behebt.
- Grischa Brockhaus - http://blog.brockha.us
- Want to make me happy? http://wishes.brockha.us/
stm999999999
Regular
Posts: 1531
Joined: Tue Mar 07, 2006 11:25 pm
Location: Berlin, Germany
Contact:

Post by stm999999999 »

garvinhicking wrote:Hi!
blog.brockha.us wrote:Och je.. Was meinst du wohl, wie viele s9y User so ein Setup haben? :roll: :-)
Beinahe jeder, der eine shared installation betreibt!
Ich quetsch mich hier mal ganz frech dazwischen:

Ich betreibe auch eine shared-installation (für mich privat). Aber additional_plugins? Kannst Du das Konzept bitte mal näher ausführen? Danke!
Ciao, Stephan
Post Reply