Package: z3c.formwidget.ckeditor
This package provides a CKEditor widget for thez3c.formlibrary. It also
provides aRichTextschema field, which makes the usage of CKEditor
completely transparent.Detailed DocumentationRichText Fields and CKEditor WidgetsThis package a provides a new field calledRichText, which is a simple
extension to the defaultTextfield. TheRichTextfield declares that it
contains HTML-markup as part of its text.>>> from z3c.formwidget.ckeditor import richtextSo let’s create a rich text field:>>> text = richtext.RichText(__name__='text')Let’s now verify that the field provides the text and rich text schema:>>> import zope.schema
>>> from zope.interface import verify
>>> from z3c.formwidget.ckeditor import interfaces>>> verify.verifyObject(interfaces.IRichText, text)
True
>>> verify.verifyObject(zope.schema.interfaces.IText, text)
TrueNext, a widget is provided to edit the rich text field. It uses the CKEditor.>>> from z3c.formwidget.ckeditor import interfaces, ckeditorTheCKEditorWidgetis a widget:>>> from z3c.form.interfaces import IWidget>>> verify.verifyClass(interfaces.ICKEditorWidget, ckeditor.CKEditorWidget)
True
>>> verify.verifyClass(IWidget, ckeditor.CKEditorWidget)
TrueThe widget can render an input field only by adapting a request:>>> from z3c.form.testing import TestRequest
>>> request = TestRequest()
>>> widget = ckeditor.CKEditorWidget(request)Such a widget providesIWidget:>>> IWidget.providedBy(widget)
TrueLet’s add some meaningful generic data:>>> widget.id = 'id'
>>> widget.name = 'name'If we render the widget we get the HTML:>>> widget.update()
>>> print widget.render()
<textarea id="id" name="name" class="CKEditorWidget"></textarea>
<script type="text/javascript">CKEDITOR.replace('name', {});</script>As you can see, initially, CK Editor is instantiated with all its
defaults. This can be changed by modifying theconfigattribute on the
widget.If theconfigattribute is a string, it is interpreted as a JavaScript
variable name. The variable must be declared beforehand.>>> widget.config = 'myCKEditorConfig'
>>> widget.update()
>>> print widget.render()
<textarea id="id" name="name" class="CKEditorWidget"></textarea>
<script type="text/javascript">CKEDITOR.replace('name', myCKEditorConfig);</script>Alternatively, the config attribute can be a dictionary of options, which are
encoded to Javascript upon render time:>>> widget.config = {'toolbar': 'Basic', 'uiColor': '#9AB8F3'}
>>> widget.update()
>>> print widget.render()
<textarea id="id" name="name" class="CKEditorWidget"></textarea>
<script type="text/javascript">CKEDITOR.replace('name', {"uiColor": "#9AB8F3", "toolbar": "Basic"});</script>All other values cause aValueErrorto be raised.>>> widget.config = 3
>>> widget.update()
Traceback (most recent call last):
...
ValueError: ('Invalid config object', 3)The field widget for the rich text field is available too of course:>>> import zope.component
>>> from z3c.form.interfaces import IFieldWidget>>> widget = zope.component.getMultiAdapter((text, request), IFieldWidget)
>>> widget
<CKEditorWidget 'text'>>>> widget.update()
>>> print widget.render()
<textarea id="text" name="text"
          class="CKEditorWidget required richtext-field"></textarea>
<script type="text/javascript">CKEDITOR.replace('text', {});</script>You can also create CKEditor Field Widget factories on the fly using a given
configuration:>>> MinimalCKEditorWidget = ckeditor.CKEditorFieldWidgetFactory(
...     {'toolbar': 'Basic', 'uiColor': '#9AB8F3'})>>> widget = MinimalCKEditorWidget(text, request)
>>> widget.update()
>>> print widget.render()
<textarea id="text" name="text"
          class="CKEditorWidget required richtext-field"></textarea>
<script type="text/javascript">CKEDITOR.replace('text',
     {"uiColor": "#9AB8F3", "toolbar": "Basic"});</script>CHANGES1.1.0 (2011-03-02)Upgraded CKEditor to 3.5.2.Removed deprecation warnings.1.0.0 (2009-11-03)Initial Release