----------------
Features
~~~~~~~~
- Sequence widgets are no longer ``structural`` by default; they now
print the label of the sequence above the sequence adder.
- Radio buttons in a radio button choice widget are now spaced closer
together and the button is on the left hand side.
- The sequence remove button is no longer an image.
- The sequence widget now puts the sequence adding link *after* any
existing items in the sequence (previously the link was always
beneath the sequence title).
- It is now possible to associate a widget with a schema node within
the schema directly. For example::
import colander
import deform.widget
class MySchema(Schema):
description = colander.SchemaNode(
colander.String(),
widget=deform.widget.RichTextWidget()
)
For more information, see "Changing the Default Widget Associated
With a Field" in the documentation.
- The constructor of ``deform.Field`` objects (and thus
``deform.Form`` objects) now accept arbitrary keyword arguments,
each of which is attached to the field or form object being
constructed, as well as being attached to its descendant fields
recursively.
- The form object's template now respects the ``css_class`` argument /
attribute of the form node.
- CheckboxChoice and RadioChoice widgets now use <ul> and <li> to
display individual choice elements (thanks to Ergo^), and both
widgets put the label after the element instead of before as
previously.
- The ``deform.widget.AutocompleteInputWidget`` widget now uses
`JQuery UI's autocomplete sublibrary
<http://docs.jquery.com/UI/Autocomplete>` instead of the
``jquery.autocomplete`` library to perform its job in order to
reduce the number of libraries needed by Deform. Some options have
been changed as a result, and the set of resources returned by
``form.get_widget_resources`` has changed.
This change also implies that when a widget which uses a remote URL
as a ``values`` input, the remote URL must return a JSON structure
instead of a ``\n``-delimited list of values.
Requirements
~~~~~~~~~~~~
- This Deform version requires ``colander`` version 0.7.3 or better.
Bug Fixes
~~~~~~~~~
- ``RichTextWidget``, ``AutocompleteInputWidget``, ``TextInputWidget``
with input masks, and ``CheckedInputWidget`` with input masks could
not be used properly within sequences. Now they can be. See also
``Internal`` and ``Backwards Incompatibilities`` within this
release's notes. This necessitated new required ``deform.load()``
and ``deform.addCallback()`` JavaScript APIs.
- Radio choice widgets included within a submapping no longer put
their selections on separate lines.
- Rich text widgets are now 500 pixels wide by default instead of 640.
- RadioChoiceWidgets did not work when they were used within
sequences. Making them work required some changes to the its
template and it added a dependency on ``peppercorn`` >= 0.3.
- To make radio choice widgets work within sequences, the
deform.addSequenceItem JavaScript method needed to be changed. It
will now change the value of ``name`` attributes which contain a
marker that looks like an field oid (e.g. ``deformField1``), and,
like the code which changes ids in the same manner, appends a random
component (e.g. ``deformField1-HL6sgP``). This is to support radio
button groupings.
- The mapping and sequence item templates now correctly display errors
with ``msg`` values that are lists. Previously, a repr of a Python
list was displayed when a widget had an error with a ``msg`` value
that was a list; now multiple <p> nodes are inserted into the
rendering, each <p> node containing an individual error message.
(Note that this change requires colander 0.7.3).
Backwards Incompatibilities
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- The JavaScript function ``deform.load()`` now *must* be called by
the HTML page (usually in a script tag near the end of the page, ala
``<script..>deform.load()</script>``) which renders a Deform form in
order for widgets which use JavaScript to do proper event and
behavior binding. If this function is not called, built-in widgets
which use JavaScript will no longer function properly.
- The JavaScript function ``deformFocusFirstInput`` was removed. This
is now implied by ``deform.load()``.
- The ``closebutton_url`` argument to the SequenceWidget no longer
does anything. Style the widget template via CSS to add an image.
Internal
~~~~~~~~
- Provided better instructions for running the demo app and running
the tests for the demo app in ``deformdemo/README.txt``.
- Try to prevent false test failures by injecting sleep statements in
things that use ``browser.key_press``.
- Moved ``deformdemo/tests/test_demo.py`` to ``deformdemo/test.py`` as
well as moving ``deformdemo/tests/selenium.py`` to
``deformdemo/selenium.py``. Removed the ``deformdemo/tests``
subdirectory.
- The date input widget now uses JQueryUI's ``datepicker``
functionality rather than relying on JQuery Tools' ``date`` input.
The latter was broken for sequences, and the former works fine.
- The various deform* JavaScript functions in ``deform.js`` have now
been moved into a top-level namespace. For example, where it was
necessary to call ``deformFocusFirstInput()`` before, it is now
necessary to call ``deform.focusFirstInput()``.
- Make the TinyMCE rich text widget use ``mode: 'exact'`` instead of
``mode: 'textareas'``.
- ``richtext``, ``autocomplete_input``, ``textinput``,
``checked_input``, and ``dateinput``, and ``form`` templates now use
the new ``deform.addCallback`` indirection instead of each
registering their own JQuery callback or performing their own
initialization logic, so that each may be used properly within
sequences.
- Change sequence adding logic to be slightly simpler.
- The sample app form page now calls ``deform.load()`` rather than
``deformFocusFirstInput()``.
- Added new demo app views for showing a sequence of autocompletes, a
sequence of dateinputs, a sequence of richtext fields, a sequence of
radio choice widgets and a sequence of text inputs with masks and
tests for same.
Documentation
~~~~~~~~~~~~~
- Added a note about ``get_widget_resources`` to the "Basics"
chapter.
- Added a note about ``deform.load()`` JavaScript requiredness to the
"Basics" chapter.
- Add new top-level sections named ``Widget Templates`` and ``Widget
JavaScript`` to the "Widgets" chapter.