zeam.form.ztk 1.4.0
Zope Toolkit support for zeam.form
License: BSD
Keywords: zeam form zope schema edit content

=============
zeam.form.ztk
=============

``zeam.form.ztk`` help you to integrate `zeam.form.base`_ with the
Zope Tool Kit. It provides:

- Form fields generation out of zope.schema fields, and zope.schema
  fields listed in a Zope interface,

- Widgets for those fields,

- Default action to Add, Edit a content, Cancel a current action by
  returning on the default view of a content.

Like `zeam.form.base`_ the focus is to have an API usable by the
developer, not a support of theorical use-cases that you don't need.

.. contents::

Example
=======

Let's create a form to edit a content. Here we have an interface for
our content::

  from zope import schema, interface

  class IClan(interface.Interface):
     pass

  class IPerson(interface.Interface):

     first_name = schema.TextLine(title=u"First Name")
     last_name = schema.TextLine(title=u"Last Name")
     age = schema.Int(title=u"Age", required=False)
     single = schema.Bool(title=u"Is single ?", default=True)

We assume that a Person is in a Clan. We can implement a Person::

  from persistence import Persistent

  class Person(Persistent):
      interface.implements(IPerson)

      first_name = None
      last_name = None
      age = None
      single = True

Add form
--------

You can add a new Person in a clan like this::

  import zeam.form.ztk as form

  class Add(form.Form):

      form.context(IClan)

      label = u"New person"
      fields = form.Fields(IPerson)
      actions =  form.Actions(
           form.AddAction("Add", factory=Person),
           form.CancelAction("Cancel"))
      actions['add'].fieldName = 'last_name'


Edit form
---------

You can edit a Person like this::

  class Edit(form.Form):

      form.context(IPerson)

      label = u"Change person details"
      fields = form.Fields(IPerson)
      actions =  form.Actions(
           form.EditAction("Update"),
           form.CancelAction("Cancel"))

      ignoreContent = False


API
===

All the API of ``zeam.form.base`` is exported as well.

Actions
-------

``AddAction``
  Action which take an extra parameter, factory, to create an object
  stored on the content object. The created object is added with the
  help of ``INameChooser`` to get its identifier. The option
  ``fieldName`` will be used to lookup a value in the form data to
  give as potential identifier to ``INameChooser``. Afterwards the
  created object is edited (like EditAction does) with the form data.

``EditAction``
  Action which use the form data to change values on the content
  object, designated by the form fields, after validation of the form
  submission.

``CancelAction``
  Simple action which return on default view of the content without
  validating the form submission.


Fields
------

Currently supported fields:

- Date, Datetime: generate a text line input and parse/display the
  date using the locale,

- TextLine, Text, Boolean, URI, Email, and numbers (Int, Float ...),

- Password,

- Choice: generate a select or a radio boxes (widget mode ``radio``),

- Object,

- Collections: List, Set, Tuple in input and display mode:

  - Collection of choices: generate a widget with a list of checkboxes,

  - Collection of objects: generate a table to edit multiple objects,

  - Other collection: generate a widget with generic add an remove actions.


For more documentation, please report to the doctests included in the code.


.. _zeam.form.base: http://pypi.python.org/pypi/zeam.form.base

Changelog
=========

1.4.0 (2020/08/20)
------------------

* Moved to Python3.6+. Python2 support dropped.


1.3.6 (2018/01/15)
------------------

* Fixed the use of defaultFactory

* Updated to newer versions of GTK packages


1.3.5 (2016/03/08)
------------------

*  Extended the Mock Library class to make it compatible with the newest
   fanstatic api.


1.3.4 (2014/04/15)
------------------

* Introducing the "defaultFactory" attributes from `zope.schema`.
  It was necessary to hijack the default value computing from zope.schema
  DefaultProperty.


1.3.3 (2013/12/20)
------------------

* Update collection javascript not to bind events on the document
  anymore, but on the field. This prevent breakage if the events get
  intercepted. The reordering buttons no longer submit the form, even
  if the javascript isn't included.

* Allow people to customize the ``disabled`` attributes on fields.

* Update collection javascript to work with jQuery 1.9. It now
  requires at least jQuery 1.7.


1.3.2 (2013/04/23)
------------------

* Add a native email widget.


1.3.1 (2012/11/19)
------------------

* Update fields to properly pass along ``zope.schema`` the
  ``contrainValue`` validator.

* Fix all fields to properly handle required (it got broken in the
  previous release for some fields).


1.3 (2012/10/12)
----------------

* Update fields and widgets to no longer proxy
  ``zope.schema``. Instead they do their own validation and are
  standalone (they can be created and used without ``zope.schema``).

* Support more HTML 5 features, like for number fields, and extra
  attributes that can be inserted with the help of ``htmlAttributes``,
  like ``placeholder``...

* Add a ``CurrencyField``, that can be used to display nicely
  currencies.


1.2.3 (2012/09/24)
------------------

* Update API to use ``zeam.form.base`` 1.2.3.


1.2.2 (2012/07/25)
------------------

* Adjust CheckboxWidgetExtractor to convert ``False`` input to bool
  ``False``.


1.2.1 (2012/04/27)
------------------

* Improve choice widgets, to make possible to customize the source of
  it. Add support for a ``IFormSourceBinder``, that works like a
  ``IContextSourceBinder`` except it takes the form as parameter
  instead of the context (thus giving access to request as well for
  instance).

* Add a method ``delete`` to the data manager.

* Now use ``grokcore.chameleon`` instead of ``megrok.chameleon``.


1.2 (2011/11/08)
----------------

* Improve error reporting in collection widgets. Thanks to Novareto
  for the sponsorship.

* Add an validation option in collection widgets while adding and
  removing values from it. Thanks to Novareto for the sponsorship.

* Improve Javascript for collection widgets. Add an extra with
  fanstatic to automatically require required files.

* If a collection widget is required, it will by default display one
  empty item in the collection when it is empty. That prevent an extra
  click to add it.

* Various fixes in ``InvariantsValidator``.

* ``SchemaWidgetExtractor`` and ``SchemaField`` now catch Invalid
  exceptions.

* Add support for the HTML 5 attribute required in every template. Use
  the attribute novalidate on the form tag to disable it.

* Add a display widget for object and uri fields.

* Add an option ``valueLength`` to the date widgets. Any Zope
  formatter size can be use (``short``, ``medium`` ...).


1.0 (2010/10/19)
----------------

* Add a ``multiselect`` widget for multiple choices.

* Add a ``readonly`` widget.

* Add a ``display`` widget for booleans and collections.

* Add HTML5 widgets for URIs.

* Schema field can be adapted now, even if they don't have a interface
  (if they provide an attribute __name__).

* Add more tests, fix issues in collection widgets, and invariant
  validator.

* Translations are all located in ``zeam.form.base``.

* Update to use the last version of ``zeam.form.base``.

1.0rc2 (2010/07/16)
-------------------

* Add ``radio`` widget for choices.

* Add a display widgets for multiple choices.

* All fields have the ``field`` CSS class.

* Multiple choices widgets now properly respect the value of a vocabulary term.


1.0rc1 (2010/07/05)
-------------------

* Updated entry points registrations to be compatible with latest
  ``zeam.form.base``.


1.0b3 (2010/06/22)
------------------

* Field wrapper registration is now made thanks to an entry point.
* Added invariants validation.
* Added A generic adaptive datamanager that can adapt the form content to
  one or several interfaces.


1.0b2 (2010/05/13)
------------------

* Improve widget initialization, and testing layer support.
* Fix choice widgets when they are used with vocabulary factories.


1.0b1 (2010/05/03)
------------------

* Initial release, with not all the widgets.