CKEditor"

From Documentation
 
(34 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
{{ZKComponentReferencePageHeader}}
 
{{ZKComponentReferencePageHeader}}
  
= CKEditor =
+
= ZK CKEditor =
  
 
*Demonstration: [http://www.zkoss.org/zkdemo/input/wysiwyg_editor WYSIWYG Editor]
 
*Demonstration: [http://www.zkoss.org/zkdemo/input/wysiwyg_editor WYSIWYG Editor]
Line 7: Line 7:
 
*JavaScript API: N/A
 
*JavaScript API: N/A
 
* Source code: [https://github.com/zkoss/zkckeditor GitHub zkoss/zkckeditor] after 3.6.0.0.
 
* Source code: [https://github.com/zkoss/zkckeditor GitHub zkoss/zkckeditor] after 3.6.0.0.
 +
 +
'''Note''' : This section is an introduction to ZK CKEditor 4, for ZK CKEditor 5 Wrapper, please refer to [https://www.zkoss.org/wiki/ZK_Component_Reference/Input/CKEditor/CKEditor5 CKEditor5].
  
 
= Maven =
 
= Maven =
Line 53: Line 55:
 
[[Image:ZKCompRef_CKEditor2.png]]
 
[[Image:ZKCompRef_CKEditor2.png]]
  
'''It will turn on the save button when inside a form'''
+
== Enable save button ==
 +
It will enable the "Save" button when inside a form.
  
 
<source lang="xml" >
 
<source lang="xml" >
 
<zk xmlns:n="http://www.zkoss.org/2005/zk/native">
 
<zk xmlns:n="http://www.zkoss.org/2005/zk/native">
<n:form>
+
    <n:form>
<ckeditor width="850" />
+
<ckeditor width="50%" />
</n:form>
+
    </n:form>
 
</zk>
 
</zk>
 
</source>
 
</source>
  
 
+
=Image File Browser=
 
+
ZK CKEditor provides a default image file browser for browsing the images in a server path you specify. When you click "Browse Server", CKEditor will open a new window and list all images in the file browser.
=File browser=
+
<source lang="xml" >
ZK CKEditor provides a default file browser for browsing the files in a folder that you specify. You can define a target folder in index.zul and when you open the add image/flash dialog and click "Browse Server", CKEditor will open a new window, and list all the files in the file browser.
+
    <ckeditor filebrowserImageBrowseUrl="img"/>
 +
</source>
 
{| width="100%"
 
{| width="100%"
 
|-
 
|-
|[[File:ZKCompRef_CKEditor_filebrowser.png]]
+
|[[File:ZKCompRef_CKEditor_filebrowser2.png]]
| <source lang="xml" >
+
| [[File:ZKCompRef_CKEditor_filebrowser3.png]]
<zk>
 
    <ckeditor filebrowserImageBrowseUrl="img"/>
 
</zk>
 
</source>
 
 
|}
 
|}
[[File:ZKCompRef_CKEditor_filebrowser2.png]]
+
 
[[File:ZKCompRef_CKEditor_filebrowser3.png]]
 
  
 
==Custom File browser==
 
==Custom File browser==
since 3.6.0.2
+
{{versionSince| 3.6.0.2}}
 
If you wish to customize your own file browser, you can change the location by calling CKeditor.setFilebrowserImageUploadUrl(page_url), and refer to [http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_%28Uploader%29 CKEditor Developers Guide] to create your custom file browser.
 
If you wish to customize your own file browser, you can change the location by calling CKeditor.setFilebrowserImageUploadUrl(page_url), and refer to [http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_%28Uploader%29 CKEditor Developers Guide] to create your custom file browser.
  
Line 87: Line 86:
  
 
This feature is only enabled when you specify <code>filebrowserImageUploadUrl</code> attribute. ZK CKEditor provides a default file upload handler for uploading the files to the folder you specify. You can only specify a folder under the web context root because a web application can access its own folder.
 
This feature is only enabled when you specify <code>filebrowserImageUploadUrl</code> attribute. ZK CKEditor provides a default file upload handler for uploading the files to the folder you specify. You can only specify a folder under the web context root because a web application can access its own folder.
 
+
<source lang="xml" >
 +
    <ckeditor filebrowserImageBrowseUrl="img" filebrowserImageUploadUrl="img"/>
 +
</source>
 
{| width="100%"
 
{| width="100%"
 
|-
 
|-
|[[File:ZKCompRef_CKEditor_filebrowser.png]]
+
| [[File:ZKCompRef_CKEditor_fileupload.png]]
| <source lang="xml" >
+
| [[File:ZKCompRef_CKEditor_fileupload2.png]]
    <ckeditor filebrowserImageBrowseUrl="img" filebrowserImageUploadUrl="img"/>
 
</source>
 
 
|}
 
|}
[[File:ZKCompRef_CKEditor_fileupload.png]]
+
 
[[File:ZKCompRef_CKEditor_fileupload2.png]]
 
  
 
==Custom File upload handler==
 
==Custom File upload handler==
since 3.6.0.2
+
{{versionSince| 3.6.0.2}}
 
If you wish to customize your own file upload handler, you can change the location by calling CKeditor.setFileUploadHandlePage(page_url), and refer to [http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_%28Uploader%29 CKEditor Developers Guide] to create your custom file upload handler.
 
If you wish to customize your own file upload handler, you can change the location by calling CKeditor.setFileUploadHandlePage(page_url), and refer to [http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_%28Uploader%29 CKEditor Developers Guide] to create your custom file upload handler.
  
Line 111: Line 109:
 
= Custom Configuration =
 
= Custom Configuration =
  
 +
== customConfigurationsPath==
 
Prepare a javascript file for configuration like:
 
Prepare a javascript file for configuration like:
  
Line 131: Line 130:
 
<ckeditor customConfigurationsPath="/config.js"/>
 
<ckeditor customConfigurationsPath="/config.js"/>
 
</source>
 
</source>
 +
 +
== in Java ==
 +
<syntaxhighlight lang="xml">
 +
    <ckeditor id="editor"/>
 +
    <zscript><![CDATA[
 +
Map configMap = new HashMap();
 +
configMap.put("language", "de");
 +
editor.setConfig(configMap);
 +
    ]]></zscript>
 +
</syntaxhighlight>
  
 
== Custom Save Button ==
 
== Custom Save Button ==
You can implement a custom plugin to enable the save button and fire the onChange event to the server to save the editor's content. Please refer to [https://github.com/zkoss/zkbooks/blob/master/componentreference/src/main/webapp/input/ckeditor-save.zul on the github].
+
You can implement a custom plugin to enable the save button and fire the onChange event to the server to save the editor's content. Please refer to [https://github.com/zkoss/zkbooks/blob/master/componentreference/src/main/webapp/input/ckeditor.zul the example zul].
  
 
+
== Resizable attribute and Sizing ==
== resizable attribute and sizing ==
 
 
{{versionSince| 4.16.1.1}}
 
{{versionSince| 4.16.1.1}}
 
  default: true
 
  default: true
The ckeditor container can be set resizable with the resizable attribute since 4.16.1.1.
+
The ZK CKEditor container can be resizable with the resizable attribute since 4.16.1.1.
  
 
<syntaxhighlight lang='xml'>
 
<syntaxhighlight lang='xml'>
Line 145: Line 153:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
If resizable="true" (default) is set, and the editor has not received a set height (from height="" or vlflex="" attributes), the whole component height will be modified on user resizing. In this case the editor outer div dimensions change to accommodate the new size set by the user.
+
If <code>resizable="true"</code> (default) is set, and the editor's height is unset (from height="" or vlflex="" attributes), the whole component height will be modified on user resizing. In this case, the editor's outer div dimensions will resize itself according to a user dragging.
 +
 
 +
If the component is resizable and has a fixed height, it will display a scrollbar in order to maintain its declared size, but allow the user to modify the height of the editing space. In this case, the editor outer div dimensions do not change.
 +
 
 +
= ReadOnly=
 +
You can make CKEditor read-only with its config.
 +
 
 +
<syntaxhighlight lang='xml'>
 +
    <ckeditor id="editorReadOnly" width="50%" height="500px" value="This is read-only example"/>
 +
    <zscript><![CDATA[
 +
    editorReadOnly.setConfig(Map.of("readOnly", true));
 +
    ]]></zscript>
 +
</syntaxhighlight>
  
If the component is resizable and has received a set height, it will display a scrollbar in order to maintain its declared size, but allow the user to modify the height of the editing space. In this case, the editor outer div dimensions do not change.
 
  
 
= Plugin Installation =
 
= Plugin Installation =
Line 158: Line 177:
 
#: Then provide a '''config.js''' mentioned at [[#Custom_Configuration | Custom Configuration]].
 
#: Then provide a '''config.js''' mentioned at [[#Custom_Configuration | Custom Configuration]].
  
{{Notice|text=Since ZK Ckeditor is a Java wrapper of js CKEditor, the installed plugins just work at the client-side and cannot be controlled in Java by default.}}
+
{{Notice|text=Since ZK Ckeditor is a Java wrapper of js CKEditor, the installed plugins just work at the client side and cannot be controlled in Java by default.}}
  
  
 
== Example ==
 
== Example ==
 
# Download [https://ckeditor.com/cke4/addon/lineheight Line Height plugin]  
 
# Download [https://ckeditor.com/cke4/addon/lineheight Line Height plugin]  
# its js files under
+
# Put its js files under
 
#: <code>/resources/web/js/ckez/ext/CKeditor/plugins/lineheight</code>
 
#: <code>/resources/web/js/ckez/ext/CKeditor/plugins/lineheight</code>
# setup in your custom config js
+
# Setup in your custom config js
 
<source lang='javascript'>
 
<source lang='javascript'>
 
CKEDITOR.editorConfig = function(config) {
 
CKEDITOR.editorConfig = function(config) {
Line 257: Line 276:
 
  *NONE
 
  *NONE
  
=Use Cases=
 
  
{| class='wikitable' | width="100%"
 
! Version !! Description !! Example Location
 
|-
 
| &nbsp;
 
| &nbsp;
 
| &nbsp;
 
|}
 
 
=Version History=
 
{{LastUpdated}}
 
 
{| class='wikitable' | width="100%"
 
! Version !! Date !! Content
 
|-
 
| &nbsp;
 
| &nbsp;
 
| &nbsp;
 
|}
 
  
 
{{ZKComponentReferencePageFooter}}
 
{{ZKComponentReferencePageFooter}}

Latest revision as of 11:31, 18 December 2024

ZK CKEditor

Note : This section is an introduction to ZK CKEditor 4, for ZK CKEditor 5 Wrapper, please refer to CKEditor5.

Maven

You need to include CKEditor jar in pom.xml before using it because it has a different group id from ZK other components.

		<dependency>
			<groupId>org.zkoss.zkforge</groupId>
			<artifactId>ckez</artifactId>
			<version>${ckez.version}</version>
		</dependency>

Check the latest version on CE repository.

Employment/Purpose

The component is a wrapper of CKEditor

CKEditor is a popular HTML on-line text editor developed by Frederico Caldeira Knabben. It is used inside web pages. It's a WYSIWYG editor, which means that the text being edited on it looks as similar as possible to the results users have when publishing it. It brings to the web common editing features found on desktop editing applications like Microsoft Word and OpenOffice.

Example

ZKCompRef CKEditor.png

<ckeditor width="850px">
<attribute name="value"><![CDATA[
<table width="200" cellspacing="1" cellpadding="1" border="1">
	<tbody>
		<tr style="background: #B7B313; color:white;">
			<td>First Name</td>
			<td>Last Name</td>
		</tr>
		<tr>
			<td>Jone</td>
			<td>Hayes</td>
		</tr>
		<tr>
			<td>Mary</td>
			<td>Bally</td>
		</tr>
	</tbody>
</table>
]]></attribute>
</ckeditor>

ZKCompRef CKEditor2.png

Enable save button

It will enable the "Save" button when inside a form.

<zk xmlns:n="http://www.zkoss.org/2005/zk/native">
    <n:form>
	<ckeditor width="50%" />
    </n:form>
</zk>

Image File Browser

ZK CKEditor provides a default image file browser for browsing the images in a server path you specify. When you click "Browse Server", CKEditor will open a new window and list all images in the file browser.

    <ckeditor filebrowserImageBrowseUrl="img"/>
ZKCompRef CKEditor filebrowser2.png ZKCompRef CKEditor filebrowser3.png


Custom File browser

Since 3.6.0.2 If you wish to customize your own file browser, you can change the location by calling CKeditor.setFilebrowserImageUploadUrl(page_url), and refer to CKEditor Developers Guide to create your custom file browser.

File upload

Since 3.6.0.2

This feature is only enabled when you specify filebrowserImageUploadUrl attribute. ZK CKEditor provides a default file upload handler for uploading the files to the folder you specify. You can only specify a folder under the web context root because a web application can access its own folder.

    <ckeditor filebrowserImageBrowseUrl="img" filebrowserImageUploadUrl="img"/>
ZKCompRef CKEditor fileupload.png ZKCompRef CKEditor fileupload2.png


Custom File upload handler

Since 3.6.0.2 If you wish to customize your own file upload handler, you can change the location by calling CKeditor.setFileUploadHandlePage(page_url), and refer to CKEditor Developers Guide to create your custom file upload handler.

Copy-Paste Images

You need to enable file upload to allow copying a local image from your machine to CKEditor.

Since 4.17.1.0 If file upload is enabled, pasting a local image will upload the image to the server. If it's disabled, pasting a local image will insert an image with data URL.

Custom Configuration

customConfigurationsPath

Prepare a javascript file for configuration like:

config.js

CKEDITOR.editorConfig = function(config) {
    //enable spell checker
    config.disableNativeSpellChecker = false;
    //Automatically enables "Spell Check As You Type" on editor startup
    config.scayt_autoStartup = true;
    //locale
    config.language = 'de';
};

Please refer to http://docs.ckeditor.com/#!/api/CKEDITOR.config for complete configuration options.

Specify the configuration file at customConfigurationsPath attribute with the absolute path.

<ckeditor customConfigurationsPath="/config.js"/>

in Java

    <ckeditor id="editor"/>
    <zscript><![CDATA[
Map configMap = new HashMap();
configMap.put("language", "de");
editor.setConfig(configMap);
    ]]></zscript>

Custom Save Button

You can implement a custom plugin to enable the save button and fire the onChange event to the server to save the editor's content. Please refer to the example zul.

Resizable attribute and Sizing

Since 4.16.1.1

default: true

The ZK CKEditor container can be resizable with the resizable attribute since 4.16.1.1.

 <ckeditor resizable="true" .../>

If resizable="true" (default) is set, and the editor's height is unset (from height="" or vlflex="" attributes), the whole component height will be modified on user resizing. In this case, the editor's outer div dimensions will resize itself according to a user dragging.

If the component is resizable and has a fixed height, it will display a scrollbar in order to maintain its declared size, but allow the user to modify the height of the editing space. In this case, the editor outer div dimensions do not change.

ReadOnly

You can make CKEditor read-only with its config.

    <ckeditor id="editorReadOnly" width="50%" height="500px" value="This is read-only example"/>
    <zscript><![CDATA[
    editorReadOnly.setConfig(Map.of("readOnly", true));
    ]]></zscript>


Plugin Installation

  1. Download a plugin according to CKEditor version
    ZK Ckedtiror version aligns the bundled CKEditor version.
  2. put plugin folder into zkckeditor's plugins folder
    In ZK, you have to copy the plugin folder into the folder below: (assuming a Maven project)
    /resources/web/js/ckez/ext/CKeditor/plugins/
  3. setup in a custom config js
    Then provide a config.js mentioned at Custom Configuration.

Icon info.png Notice: Since ZK Ckeditor is a Java wrapper of js CKEditor, the installed plugins just work at the client side and cannot be controlled in Java by default.


Example

  1. Download Line Height plugin
  2. Put its js files under
    /resources/web/js/ckez/ext/CKeditor/plugins/lineheight
  3. Setup in your custom config js
CKEDITOR.editorConfig = function(config) {
     config.extraPlugins = 'lineheight';
}

Work with ZK6 MVVM

Icon info.png Notice: Since Ckeditor 3.6.0.1, we have added data binding annotation into the lang-addon.xml file, so you no more need to add the settings below.

Since 6.0.0

For work with ZK6 MVVM, it is required to create an addon XML and add the server annotation as follows:

WEB-INF/ckez-bind-addon.xml

<?xml version="1.0" encoding="UTF-8"?>
<language-addon>
	<!-- The name of this addon. It must be unique -->
	<addon-name>ckezbind</addon-name>
	<!-- Specifies what other addon this depends
	<depends></depends>
	-->
	<!-- Which language this addon will be added to -->
	<language-name>xul/html</language-name>

	<component>
		<component-name>ckeditor</component-name>
		<extends>ckeditor</extends>
		<annotation>
			<annotation-name>ZKBIND</annotation-name>
			<property-name>value</property-name>
			<attribute>
				<attribute-name>ACCESS</attribute-name>
				<attribute-value>both</attribute-value>
			</attribute>
			<attribute>
				<attribute-name>SAVE_EVENT</attribute-name>
				<attribute-value>onChange</attribute-value>
			</attribute>
			<attribute>
				<attribute-name>LOAD_REPLACEMENT</attribute-name>
				<attribute-value>value</attribute-value>
			</attribute>
			<attribute>
				<attribute-name>LOAD_TYPE</attribute-name>
				<attribute-value>java.lang.String</attribute-value>
			</attribute>
		</annotation>
	</component>
</language-addon>

then add it into WEB-INF/zk.xml

<zk>
	<language-config>
		<addon-uri>/WEB-INF/ckez-bind-addon.xml</addon-uri>
	</language-config>
</zk>

Supported Events

Name
Event Type
onChange
InputEvent

Description: Denotes the content of an input component has been modified by the user.

onChanging
InputEvent

Description: Denotes that user is changing the content of an input component. Notice that the component's content (at the server) won't be changed until onChange is received. Thus, you have to invoke the getValue method in the InputEvent class to retrieve the temporary value.

onSave
InputEvent

Description: Denotes the save button of the CKEditor component has been clicked by the user.

Supported Children

*NONE




Last Update : 2024/12/18

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.