Yes, this was very helpfull http://extensions.xwiki.org/xwiki/bin/view/Extension/WYSIWYG+Editor+Module#HAdjusttheeditorUIfromaJavaScriptExtension
I make progress. Thanks! Marius Dumitru Florea wrote > Hi Josef, > > On Fri, Nov 29, 2013 at 11:30 AM, jhaimerl < > Josef.Haimerl@ > > wrote: >> Hi Marius, >> >> could you post a short example of making use of the CommandManagerApi. > > There's a short example here > http://extensions.xwiki.org/xwiki/bin/view/Extension/WYSIWYG+Editor+Module#HCommandManager > . Is this clear enough? > > Hope this helps, > Marius > >> >> Thanks and regards >> >> Josef >> >> >> Marius Dumitru Florea wrote >>> Regarding the JavaScript plugin interface and the way to create >>> plugins in JavaScript, the JSX object on the plugin document could >>> contain something like this: >>> >>> ----------8<---------- >>> var wysiwygEditorPlugins = (function(plugins) { >>> // Define the plugin class. >>> var plugin = function() {}; >>> plugin.prototype.init = function(richTextArea, config) { >>> // >>> }; >>> plugin.prototype.getUIExtensions = function() { >>> // >>> } >>> plugin.prototype.destroy = function() { >>> // >>> }; >>> // Export the plugin class. >>> plugins['$escapetool.javascript($doc.name)'] = plugin; >>> return plugins; >>> })(wysiwygEditorPlugins || {}); >>> ---------->8---------- >>> >>> The JavaScript plugin factory (Java/GWT) will instantiate the plugin >>> like >>> this: >>> >>> var pluginInstance = new $wnd.wysiwygEditorPlugins[pluginName](); >>> >>> The JavaScript plugin (Java/GWT) will wrap the above plugin instance >>> (JavaScript object) and it will forward the Plugin interface >>> (Java/GWT) methods to the wrapped JavaScript object (native code), >>> adapting the parameters. The problem you have to overcome is the fact >>> that RichTextArea, Config or UIExtension are Java/GWT classes and thus >>> they cannot be reused in JavaScript as is so you have to make some >>> wrappers for them that expose the useful APIs to JavaScript code. Take >>> for instance >>> https://github.com/xwiki/xwiki-platform/blob/master/xwiki-platform-core/xwiki-platform-gwt/xwiki-platform-gwt-user/src/main/java/org/xwiki/gwt/user/client/ui/rta/cmd/CommandManagerApi.java >>> . >>> >>> Hope this helps, >>> Marius >>> >>> On Mon, Sep 30, 2013 at 7:17 PM, Marius Dumitru Florea >>> < >> >>> mariusdumitru.florea@ >> >>> > wrote: >>>> On Mon, Sep 30, 2013 at 12:49 PM, jhaimerl < >> >>> Josef.Haimerl@ >> >>> > wrote: >>>>> Hi Marius, >>>>> >>>>> I adopted your suggestions and updated the design proposal. Did you >>>>> already >>>>> think about the "interface"? >>>> >>>> Just two remarks for now: >>>> >>>> * The JSX object used for the plugin code should have "Use this >>>> extension" set to "On demand" as you load it on demand in macros.vm >>>> * I think each plugin should inject itself in wysiwygEditorPlugins >>>> (which should be an object not an array): >>>> >>>> // XWikiWysiwyg.js initializes the object. >>>> var wysiwygEditorPlugins = {}; >>>> >>>> // plugin JSX creates the plugin object and sets. >>>> wysiwygEditorPlugins['plugin-name-here'] = objectThatDefinesThePlugin; >>>> >>>> The rest looks good. I'll think of the plugin interface asap (this >>>> evening I hope). >>>> >>>> Thanks, >>>> Marius >>>> >>>>> >>>>> Thanks and regards, >>>>> >>>>> Josef >>>>> >>>>> >>>>> Marius Dumitru Florea wrote >>>>>> Hi Josef, >>>>>> >>>>>> On Fri, Aug 30, 2013 at 4:13 PM, jhaimerl < >>>>> >>>>>> Josef.Haimerl@ >>>>> >>>>>> > wrote: >>>>>>> Hi, >>>>>>> >>>>>>> @Vincent >>>>>>> Thanks for the information! >>>>>>> >>>>>>> @Marius >>>>>>> I put down a rough design for this here >>>>>>> http://dev.xwiki.org/xwiki/bin/view/Design/WYSIWYGPluginInterface >>>>>>> <http://dev.xwiki.org/xwiki/bin/view/Design/WYSIWYGPluginInterface> >>>>>>> . >>>>>>> It includes some code-snippets of a prototype I got working. There >>>>>>> are >>>>>>> some >>>>>>> comments/inline comments - hope it's handleable. >>>>>>> I didn't go to far with the design proposal, because I wanted to >>>>>>> come >>>>>>> clear >>>>>>> with you first, that this is the right way. Also I wanted to discuss >>>>>>> the >>>>>>> "interface" for the JavaScript plugins. What do you think a plugin >>>>>>> should >>>>>>> can do? Please let me also know what you think about the naming of >>>>>>> the >>>>>>> classes, etc. >>>>>> >>>>>> I'm not sure the editor should be responsible for fetching the >>>>>> JavaScript code of its custom plugins. I think I prefer the custom >>>>>> plugins to be loaded outside of the editor (Java) code and thus the >>>>>> editor just needs to be able to detect their presence. Something >>>>>> like: >>>>>> >>>>>> $xwiki.jsx.use('Space.SomeCustomPlugin') >>>>>> $xwiki.jsfx.use('uicomponets/wysiwyg/anotherCustomPlugin.js') >>>>>> ... >>>>>> $xwiki.jsfx.use('js/xwiki/wysiwyg/xwe/XWikiWysiwyg.js', true) >>>>>> >>>>>> Of course, hard-coding the custom plugin includes is not an option >>>>>> and >>>>>> your idea of defining the custom plugins in wiki pages is great. So >>>>>> the above code could be written instead as: >>>>>> >>>>>> ## Load the custom plugins. >>>>>> #foreach ($pluginName in $configuredListOfPlugins) >>>>>> #set ($pluginDocumentReference = >>>>>> $services.model.resolveDocument($pluginName)) >>>>>> #if ($xwiki.exists($pluginDocumentReference)) >>>>>> $xwiki.jsx.use($pluginDocumentReference) >>>>>> #end >>>>>> #end >>>>>> ## Load the editor code. >>>>>> $xwiki.jsfx.use('js/xwiki/wysiwyg/xwe/XWikiWysiwyg.js', true) >>>>>> >>>>>> Of course, the condition that checks if a plugin is a custom (wiki) >>>>>> plugin can be refined, but you get the idea. Now, as for how a custom >>>>>> plugin is defined, I think we should reuse the JSX mechanism. A >>>>>> plugin >>>>>> document could have one or more JSX objects for holding the >>>>>> JavaScript >>>>>> code of the plugin and one special object to mark the fact that the >>>>>> document is a WYSIWYG editor plugin. I would use the document name as >>>>>> the plugin name, the document title as the plugin pretty name and the >>>>>> document content as the description. And since the JavaScript code >>>>>> would be stored in a JSX object, the WysiwygPluginClass doesn't have >>>>>> any property left, but we still need it as a marker. We can't have >>>>>> empty classes so we could just add a placeholder property in the >>>>>> WysiwygPluginClass for now. >>>>>> >>>>>> Next, the WYSIWYG editor needs to detect the available custom plugin >>>>>> factories and initialize the plugins. The simplest solution is to use >>>>>> a global variable, e.g. window.wysiwygEditorPlugins.foo where foo is >>>>>> one of the plugin factories. >>>>>> JavaScriptPluginFactory#registerPlugins() >>>>>> from your proposal would iterate over the properties of >>>>>> window.wysiwygEditorPlugins and create a plugin factory that wraps >>>>>> the >>>>>> JavaScript object (e.g. 'foo'). >>>>>> >>>>>> Finally you need to define the "interface" for the JavaScript >>>>>> plugins. >>>>>> I'll come back on this in the following days. >>>>>> >>>>>> Hope this helps, >>>>>> Marius >>>>>> >>>>>>> >>>>>>> Thanks and regards, >>>>>>> >>>>>>> Josef >>>>>>> >>>>>>> >>>>>>> vmassol wrote >>>>>>>> Hi, >>>>>>>> >>>>>>>> Just FTR Marius is on holidays till the end of the week… ;) >>>>>>>> >>>>>>>> Thanks >>>>>>>> -Vincent >>>>>>>> >>>>>>>> On Aug 23, 2013, at 1:24 PM, jhaimerl < >>>>>>> >>>>>>>> Josef.Haimerl@ >>>>>>> >>>>>>>> > wrote: >>>>>>>> >>>>>>>>> Hi Marius, >>>>>>>>> >>>>>>>>> I'm back on working on this. Maybe you can help me getting-in and >>>>>>>>> tell >>>>>>>>> me >>>>>>>>> something about this mechanism (http://snag.gy/OVUoR.jpg). How are >>>>>>>>> the >>>>>>>>> plugins published at this point? >>>>>>>>> >>>>>>>>> I set up eclipse to debug the java code with the browser gwt dev >>>>>>>>> plugin. >>>>>>>>> Maybe it could be useful for someone, would you like that I >>>>>>>>> document >>>>>>>>> it >>>>>>>>> somewhere? >>>>>>>>> >>>>>>>>> >>>>>>>>> Marius Dumitru Florea wrote >>>>>>>>>> Hi Richard, >>>>>>>>>> >>>>>>>>>> On Thu, Jun 6, 2013 at 9:02 AM, rhierlmeier < >>>>>>>>> >>>>>>>>>> rhierlmeier@ >>>>>>>>> >>>>>>>>>> > wrote: >>>>>>>>>>> Hi, >>>>>>>>>>> >>>>>>>>>>> we studied the source code of the gwt wysiwyg editor but we >>>>>>>>>>> found >>>>>>>>>>> no >>>>>>>>>>> official way to integrate an custom plugin. >>>>>>>>>> >>>>>>>>>> Yes, right now all the plugins are written in Java (GWT) and >>>>>>>>>> adding >>>>>>>>>> a >>>>>>>>>> new plugin requires rebuilding the editor. We've been wanting to >>>>>>>>>> add >>>>>>>>>> support for (dynamic) JavaScript plugins for some time but we >>>>>>>>>> didn't >>>>>>>>>> because we focused on other things. >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> We have the impression that it should be relatively easy to >>>>>>>>>>> establish >>>>>>>>>>> a >>>>>>>>>>> public API for registering customer plugins. >>>>>>>>>>> >>>>>>>>>>> The customer plugin would be delivered as javascript code with a >>>>>>>>>>> global >>>>>>>>>>> javascript function that implements PluginFactory interface. >>>>>>>>>>> >>>>>>>>>>> The WysiwygEditorConfigClass would have an addition property >>>>>>>>>>> customerPlugins, containing a comma seperate list of strings of >>>>>>>>>>> the >>>>>>>>>>> PluginFactory method names. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> Do you think that this is doable? >>>>>>>>>> >>>>>>>>>> Yes. I would write a generic JavaScriptPluginFactory >>>>>>>>>> (implementing >>>>>>>>>> PluginFactory) and JavaScriptPlugin (implementing Plugin) to >>>>>>>>>> serve >>>>>>>>>> as >>>>>>>>>> a bridge between GWT and plugins written in native JavaScript. >>>>>>>>>> WysiwygEditorFactory would then iterate the list of JavaScript >>>>>>>>>> plugin >>>>>>>>>> names and create a JavaScriptPluginFactory instance for each, >>>>>>>>>> passing >>>>>>>>>> the name. The factory would simply create a new JavaScriptPlugin >>>>>>>>>> instance, forwarding the name. The plugin would access the global >>>>>>>>>> JavaScript variable with the given name and take from it the data >>>>>>>>>> needed to implement the Plugin interface. Of course, you need to >>>>>>>>>> define an "interface" for the JavaScript plugins, and they have >>>>>>>>>> to >>>>>>>>>> bee >>>>>>>>>> able to add event listeners like a GWT plugin. >>>>>>>>>> >>>>>>>>>> A contribution on this topic would be more than welcomed. >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> Marius >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Regards >>>>>>>>>>> >>>>>>>>>>> Richard >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> devs mailing list >>>>>>> >>>>>>>> devs@ >>>>>>> >>>>>>>> http://lists.xwiki.org/mailman/listinfo/devs >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> View this message in context: >>>>>>> http://xwiki.475771.n2.nabble.com/Adding-a-customer-plugin-to-the-wysiwyg-editor-tp7585599p7586853.html >>>>>>> Sent from the XWiki- Dev mailing list archive at Nabble.com. >>>>>>> _______________________________________________ >>>>>>> devs mailing list >>>>>>> >>>>> >>>>>> devs@ >>>>> >>>>>>> http://lists.xwiki.org/mailman/listinfo/devs >>>>>> _______________________________________________ >>>>>> devs mailing list >>>>> >>>>>> devs@ >>>>> >>>>>> http://lists.xwiki.org/mailman/listinfo/devs >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> View this message in context: >>>>> http://xwiki.475771.n2.nabble.com/Adding-a-customer-plugin-to-the-wysiwyg-editor-tp7585599p7587353.html >>>>> Sent from the XWiki- Dev mailing list archive at Nabble.com. >>>>> _______________________________________________ >>>>> devs mailing list >>>>> >> >>> devs@ >> >>>>> http://lists.xwiki.org/mailman/listinfo/devs >>> _______________________________________________ >>> devs mailing list >> >>> devs@ >> >>> http://lists.xwiki.org/mailman/listinfo/devs >> >> >> >> >> >> -- >> View this message in context: >> http://xwiki.475771.n2.nabble.com/Adding-a-customer-plugin-to-the-wysiwyg-editor-tp7585599p7588168.html >> Sent from the XWiki- Dev mailing list archive at Nabble.com. >> _______________________________________________ >> devs mailing list >> > devs@ >> http://lists.xwiki.org/mailman/listinfo/devs > _______________________________________________ > devs mailing list > devs@ > http://lists.xwiki.org/mailman/listinfo/devs -- View this message in context: http://xwiki.475771.n2.nabble.com/Adding-a-customer-plugin-to-the-wysiwyg-editor-tp7585599p7588171.html Sent from the XWiki- Dev mailing list archive at Nabble.com. _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

