How to install z3c.formwidget.ckeditor
- Download and install ActivePython
- Open Command Prompt
- Type
pypm install z3c.formwidget.ckeditor
Dependencies
- distribute
- simplejson
- six
- z3c.form
- zope.component
- zope.interface
- zope.schema
- zope.viewlet
- [demo] transaction
- [demo] waitress
- [demo] z3c.form
- [demo] z3c.formui
- [demo] z3c.layer.pagelet
- [demo] z3c.macro
- [demo] z3c.pagelet
- [demo] z3c.schema
- [demo] z3c.template
- [demo] ZConfig
- [demo] zope.app.appsetup
- [demo] zope.app.http
- [demo] zope.app.wsgi
- [demo] zope.error
- [demo] zope.paste
- [demo] zope.principalregistry
- [demo] zope.publisher
- [demo] zope.securitypolicy
- [demo] zope.traversing
- [test] z3c.coverage
- [test] z3c.form[test]
- [test] zope.testing
Lastest release
This package provides a CKEditor widget for the z3c.form library. It also provides a RichText schema field, which makes the usage of CKEditor completely transparent.
Detailed Documentation
RichText Fields and CKEditor Widgets
This package a provides a new field called RichText, which is a simple extension to the default Text field. The RichText field declares that it contains HTML-markup as part of its text.
>>> from z3c.formwidget.ckeditor import richtext
So 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) True
Next, a widget is provided to edit the rich text field. It uses the CKEditor.
>>> from z3c.formwidget.ckeditor import interfaces, ckeditor
The CKEditorWidget is a widget:
>>> from z3c.form.interfaces import IWidget>>> verify.verifyClass(interfaces.ICKEditorWidget, ckeditor.CKEditorWidget) True >>> verify.verifyClass(IWidget, ckeditor.CKEditorWidget) True
The 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 provides IWidget:
>>> IWidget.providedBy(widget) True
Let'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 the config attribute on the widget.
If the config attribute 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', {"toolbar": "Basic", "uiColor": "#9AB8F3"});</script>
All other values cause a ValueError to 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', {"toolbar": "Basic", "uiColor": "#9AB8F3"});</script>
CHANGES
2.0.0a1 (2013-03-04)
- Added support for Python 3.3.
- Replaced deprecated zope.interface.implements usage with equivalent zope.interface.implementer decorator.
- Dropped support for Python 2.4 and 2.5.
1.1.0 (2011-03-02)
- Upgraded CKEditor to 3.5.2.
- Removed deprecation warnings.
1.0.0 (2009-11-03)
- Initial Release