|Title|EditorProviders
|Date|20-Sep-2005 11:57:33 EEST
|JSPWiki version|2.2.33
|Submitter|ChristophSauer
|[Idea Category]|ProviderIdea
|Reference|
|[Idea Status]|ClosedIdea

Editor providers enable editor developers to embed their editors into JSPWiki with a simple interface. 


The 2.3 version of JSPWiki will contain this editor provider in a quite more elegant way than i suggested in the [discussion below|IdeaEditorProviders#Old Discussion]. EditorProviders are now implemented as JSP Pages. You create a JSP Page for your editor, copy it into the /templates/default/editors directory and register it in the /WEB_INF/lib/ini/jspwiki_module.xml. Then you add the line ''jspwiki.editor=YourEditorName'' to the jspwiki.properties file and you are done.

Thanks Janne.

-- 23-March-2006 [csauer]





!!Old Discussion


!Factory Design Pattern
It uses a [factory class|AbstractFactory] named ''EditorManager'' which would instanciate an EditorProvider of a certain type, indicated in the jspwiki.properties file by the jspwiki.editor property. For Example
{{{
jspwiki.editor=com.ecyrd.jspwiki.editors.WikiWizard
}}}

An editor provider implements the ''EditorProvider'' interface which has the following three methods:

* createIncludes() - Includes needed by the editors (JavaScript includes)
* createEditorArea() - The area where to type in the text
* createButtons() - The submit buttons

Here's an example code snipped which would be used in the doEndTag() method of the EditorAreaTag to create a generic editor area
{{{
    EditorManager em = new EditorManager(pageContext, getBodyContent() );
    EditorProvider provider = em.createProvider();
                
    pageContext.getOut().print( provider.createEditorArea().toString() );
}}}

!New JSPTags needed
In order to implement the EditorProvider interface two new tags are needed:
* EditorIncludesTag
* EditorButtonsTag

The EditorAreaTag and EditorTag will have to be modified to use the new EditorProvider Interface.


This class diagramm shows the usage of this interface with the currently available editors for JSPWiki. The plain editor is the standard text area based editor. [FCKEditor|http://www.earthdawn-wiki.de/JSPWiki/] and WikiWizard could overwrite certain methods. Both will overwrite the createTextArea() mehtod, while only WikiWizard for example will overwrite the createButtons() method to make them invisible by using a div tag with display:none style.

[editorproviders.png]

!Installation with single ZIP file
With all that in place it would be fairly simple to provide means of installation for a new Editor, say XEditor. Imagine the following szenario:

Developers of the editor could easily zip all necessary components for the xeditor into a single zip file and tell admins to do the following steps to install it.

# Unzip the xeditor.zip into the webapps dir of JSPWiki
# Set the jspwiki.editor property to the appropriate provider.
# Restart JSPWiki

Thats it.

A installation zipfile would look like this:

* /scripts - contains the scripts (java scripts) for the editor
* /WEB-INF/lib - contains xeditor.jar with the provider interface

----

I like this.  I would do a couple of changes, though:

# Make the EditorManager a singleton, just like all other managers in JSPWiki, which turns the createEditor() method into createEditor( pageContext, getBodyContent() ).
# The editor must be switchable per user and also while editing.  This probably needs thus an addition of the WikiContext somewhere.
# The EditorIncludesTag should be a generic tag type for all plugins, editors, javascript and what-have-you.  See the discussion in [BugAutomaticallyLoadPluginWithoutChangingSearchpathInJspwiki.properties]. Combining these two effors would make a lot of sense.

-- JanneJalkanen


I'm still working on the inclusion of scripts/css parts of plugins.

Why not make an editor a plugin? And make it a special type of a plugin (For instance: It could implement WikiEditorIF or EditorProviferIF). If you make it known to jspwiki in the way I described on [BugAutomaticallyLoadPluginWithoutChangingSearchpathInJspwiki.properties] we can find out about ALL editors available. You can then make a dropdown box where the user (see point 2) can make a choice which editor to use. (Again here: see that there is no need to change the jspwiki.properties file? Just drop the plugin and it works)

Can you explain to me why you see a need for createButtons? Why not just include it in the createEditorArea?

-- KeesKuip

I think some people prefer the buttons above the editor box. Also, if you want to add custom fields to your submission, you need to put some other fields between the editor area and your submit buttons, otherwise it looks odd.

-- JanneJalkanen


The WikiWizard does not need the buttons at all. They are embedded in the toolbar and thus can be used with shortcuts. Actually the WikiWizard has to hide the buttons and issue the submit with a javascript function, in wich it sets the text into the invisible text area. If the buttons would be visible one could submit the form before the applet sets the text into the text area. By having the ability to overwrite the buttons (the wikiwizard sets them invisible) we can overcome this issue.

Here is the function WikiWizard is calling if CTRL+S is used in the applet (or the first button of the toolbar is pushed)
{{{
function SubmitText(txt)
{	  
      document.editForm.text.value=txt;
      document.editForm.ok.click();
}
}}}

-- ChristophSauer