Editor plugin modules are available in Confluence 2.5 and later versions |
Editor plugin modules allow you to implement Wysiwyg editors for editing Confluence pages. |
The following is a snippet of atlassian-plugin.xml from the TinyMCE Editor:
<atlassian-plugin key="com.atlassian.confluence.extra.tinymceplugin" name="TinyMCE Editor Plugin">
<plugin-info>
<description>TinyMCE Editor Plugin for Confluence</description>
<version>${project.version}</version>
<vendor name="Atlassian" url="http://www.atlassian.com"/>
</plugin-info>
...
<editor name="tinymceeditor" class="com.atlassian.confluence.extra.tinymceplugin.TinyMceEditor" key="tinymceeditor">
<description>TinyMCE Editor</description>
</editor>
...
</atlassian-plugin>
|
The class attribute defines the Java class for which the editor will interact with Confluence. This class must implement com.atlassian.confluence.plugin.editor.
All editors must implement the following interface:
package com.atlassian.confluence.plugin.editor;
/**
* This interface allows Wysiwyg editors to be plugged in to Confluence.
*/
public interface Editor
{
/**
* Returns javascript functions to allow thw wiki-textarea.vm to interface with the editor.
*
* The Javascript returned must define the functions:
*
* onShowEditor() -- this is called just after the DIV containing the editor is made visible. It is a hook where you
* can place any special code needed at this point.
* onHideEditor() -- this is called just before the DIV containing the editor is hidden. It is a hook where you
* can place any special code needed at this point.
* setEditorValue(newValue) -- put the text in newValue into the editor. This is called when the editor needs new
* content -- it is *not* called to set the initial content. That should be done either by providing the
* editor with the content as part of the initial HTML, or by calling javascript from editorOnLoad().
* allowModeChange() -- return true if the editor is in a state where changes from rich text to markup and vice versa are allowed.
* getEditorHTML() -- return the current HTML contents of the editor. This *must* return a JavaScript string,
* not a JavaObject wrapping a java.lang.String!
* editorOnLoad() -- called in the page's onLoad handler, place any initialization needed at this point here.
* editorHasContentChanged() -- return true if the contents of the editor has been modified by the user since
* the last time editorResetContentChanged().
* editorResetContentChanged() -- called to reset the contents change indicator
*
* These methods won't be called when the editor is not visible.
*
* The javascript must be surrounded by a <script> element.
* @return a String containing a velocity template
*/
String getJavascriptTemplate();
/**
* Returns the div contents to display the editor itself.
* @return a String containing a velocity template
*/
String getDivContentsTemplate();
/**
* Return true if the user agent string indicates a browser which is supported by this editor
* @param userAgent
* @return true if this editor is supported
*/
boolean supportedUserAgent(String userAgent);
/**
* Perform any necessary escaping of the HTML rendered by Confluence. The AbstractPreviewPageAction.getWysiwygContent()
* method uses this method to escape the rendered HTML.
*/
String escapeHtml(String html);
/**
* Return a string of CSS which will be appended to the standard stylesheet if it is requested from /styles/wysiwyg-action
*
* Note that it is up to the editor implementation to retrieve this stylesheet and apply it to the editor contents --
* the page containing the editor is styled with the normal stylesheet.
*/
String getEditorSpecificCss();
}
|
For an example, you can view the source for the TinyMCE Plugin.