------------------
Features
~~~~~~~~
- KGS 3.4 compatibility. This is a real hard thing, because ``z3c.form`` tests
use ``lxml`` >= 2.1.1 to check test output, but KGS 3.4 has ``lxml` 1.3.6.
Therefore we agree on that if tests pass with all package versions nailed by
KGS 3.4 but ``lxml`` overridden to 2.1.1 then the ``z3c.form`` package works
with a plain KGS 3.4.
- Removed hard ``z3c.ptcompat`` and thus ``z3c.pt`` dependency. If you have
``z3c.ptcompat`` on the Python path it will be used.
- Added nested group support. Groups are rendered as fieldsets. Nested
fieldsets are very useful when designing forms.
WARNING: If your group did have an ``applyChanges()`` (or any added(?))
method the new one added by this change might not match the signature.
- Added ``labelRequired`` and ``requiredInfo`` form attributes. This is useful
for conditional rendering a required info legend in form templates. The
``requiredInfo`` label depends by default on a given ``labelRequired``
message id and will only return the label if at least one widget field is
required.
- Add support for refreshing actions after their execution. This is useful
when button action conditions are changing as a result of action
execution. All you need is to set the ``refreshActions`` flag of the form to
``True`` in your action handler.
- Added support for using sources. Where it was previosly possible to use a
vocabulary it is now also possible to use a source. This works both for
basic and contextual sources.
**IMPORTANT:** The ``ChoiceTerms`` and ``CollectionTerms`` in
``z3c.form.term` are now simple functions that query for real ``ITerms``
adapters for field's ``source`` or ``value_type`` respectively. So if your
code inherits the old ``ChoiceTerms`` and ``CollectionTerms`` classes, you'll
need to review and adapt it. See the ``z3c.form.term`` module and its
documentation.
- The new ``z3c.form.interfaces.NOT_CHANGED`` special value is available to
signal that the current value should be left as is. It's currently handled
in the ``z3c.form.form.applyChanges()`` function.
- When no file is specified in the file upload widget, instead of overwriting
the value with a missing one, the old data is retained. This is done by
returning the new ``NOT_CHANGED`` special value from the
``FileUploadDataConvereter``.
- Preliminary support for widgets for the ``schema.IObject`` field has been
added. However, there is a big caveat, please read the ``object-caveat.txt``
document inside the package.
A new ``objectWidgetTemplate`` ZCML directive is provided to register widget
templates for specific object field schemas.
- Implemented the ``MultiWidget`` widget. This widget allows you to use simple
fields like ``ITextLine``, ``IInt``, ``IPassword``, etc. in a ``IList`` or
``ITuple`` sequence.
- Implemented ``TextLinesWidget`` widget. This widget offers a text area
element and splits lines in sequence items. This is usfull for power user
interfaces. The widget can be used for sequence fields (e.g. ``IList``) that
specify a simple value type field (e.g. ``ITextLine`` or ``IInt``).
- Added a new flag ``ignoreContext`` to the form field, so that one can
individually select which fields should and which ones should not ignore the
context.
- Allow raw request values of sequence widgets to be non-sequence values,
which makes integration with Javascript libraries easier.
- Added support in the file upload widget's testing flavor to specify
'base64'-encoded strings in the hidden text area, so that binary data can be
uploaded as well.
- Allow overriding the ``required`` widget attribute using ``IValue`` adapter
just like it's done for ``label`` and ``name`` attributes.
- Add the ``prompt`` attribute of the ``SequenceWidget`` to the list of
adaptable attributes.
- Added benchmarking suite demonstrating performance gain when using
``z3c.pt``.
- Added support for ``z3c.pt``. Usage is switched on via the "PREFER_Z3C_PT"
environment variable or via ``z3c.ptcompat.config.[enable/diable]()``.
- The ``TypeError`` message used when a field does not provide ``IFormUnicode``
now also contains the type of the field.
- Add support for internationalization of ``z3c.form`` messages. Added
Russian, French, German and Chinese translations.
- Sphinx documentation for the package can now be created using the new
``docs`` script.
- The widget for fields implementing ``IChoice`` is now looked up by querying
for an adapter for ``(field, field.vocabulary, request)`` so it can be
differentiated according to the type of the source used for the field.
- Move ``formErrorsMessage`` attribute from ``AddForm`` and ``EditForm`` to the
``z3c.form.form.Form`` base class as it's very common validation status
message and can be easily reused (especially when translations are
provided).
Refactoring
~~~~~~~~~~~
- Removed compatibility support with Zope 3.3.
- Templates now declare XML namespaces.
- HTML output is now compared using a modified version of the XML-aware output
checker provided by ``lxml``.
- Remove unused imports, adjust buildout dependencies in ``setup.py``.
- Use the ``z3c.ptcompat`` template engine compatibility layer.
Fixed Bugs
~~~~~~~~~~
- **IMPORTANT** - The signature of ``z3c.form.util.extractFileName`` function
changed because of spelling mistake fix in argument name. The
``allowEmtpyPostFix`` is now called ``allowEmptyPostfix`` (note ``Empty``
instead of ``Emtpy`` and ``Postfix`` instead of ``PostFix``).
- **IMPORTANT** - The ``z3c.form.interfaces.NOVALUE`` special value has been
renamed to ``z3c.form.interfaces.NO_VALUE`` to follow the common naming
style. The backward-compatibility ``NOVALUE`` name is still in place, but the
``repr`` output of the object has been also changed, thus it may break your
doctests.
- When dealing with ``Bytes`` fields, we should do a null conversion when going
to its widget value.
- ``FieldWidgets`` update method were appending keys and values within each
update call. Now the ``util.Manager`` uses a ``UniqueOrderedKeys``
implementation which will ensure that we can't add duplicated manager
keys. The implementation also ensures that we can't override the
``UniqueOrderedKeys`` instance with a new list by using a decorator. If this
``UniqueOrderedKeys`` implementation doesn't fit for all use cases, we should
probably use a customized ``UserList`` implementation. Now we can call
``widgets.update()`` more then one time without any side effect.
- ``ButtonActions`` update where appending keys and values within each update
call. Now we can call ``actions.update()`` more then one time without any
side effect.
- The ``CollectionSequenceDataConverter`` no longer throws a ``TypeError:
'NoneType' object is not iterable`` when passed the value of a non-required
field (which in the case of a ``List`` field is ``None``).
- The ``SequenceDataConverter`` and ``CollectionSequenceDataConverter``
converter classes now ignore values that are not present in the terms when
converting to a widget value.
- Use ``nocall:`` modifier in ``orderedselect_input.pt`` to avoid calling list
entry if it is callable.
- ``SingleCheckBoxFieldWidget`` doesn't repeat the label twice (once in ``<div
class="label">``, and once in the ``<label>`` next to the checkbox).
- Don't cause warnings in Python 2.6.
- ``validator.SimpleFieldValidator`` is now able to handle
``interfaces.NOT_CHANGED``. This value is set for file uploads when the user
does not choose a file for upload.