TODOs
=====

- [_] Easier JQuery UI theme changing.

- [X] Put input element on left hand side of label in
      RadioChoiceWidget and CheckboxChoiceWidget.

- [_] RadioChoiceWidget doesn't work when used multiple times in a
      page.

- [X] Make error message translations possible.

- [_] Progressive form validation (show validation errors as you
      type). 

- [X] Date widget with picker (see ``deform.widget.DateInputWidget``).

- [_] Time widget with picker.

- [_] DateTime widget with pickers.

- [X] Add a single-select widget.

- [X] Add a multi-select checkbox widget.

- [X] Add a "combo-box" widget (serviced by AutoComplete text box)

      o Mixes free-form input with a drop-down.


- [_] Add a multi-select widget using dual lists.

- [X] Add "fixed-lentgh" string widgets (done by using jquery.maskedinput in 
      text input field)

      o E.g., in parts of an SSN, filling in all digits in the first
        part's field jumps automatically to the second.

- [_] Add a country / postal code widget

      o Does a lookup and shows city and state / province.

- [_] Add an ISBN widget.

      o Does a lookup and shows author, title, etc..

- [X] Make forms automagically put the cursor into the first field of a form.

- [X] Readonly widget variants

- [X] Use case: require (email or phonenumber; see
      require_one_or_another in deformdemo).

- [X] Add a convention that allows a widget to specify the (logical)
      resources it requires (e.g. ["foo.css", "jquery"]).  Add an API
      that allows you to retrieve all the logical resources required
      by all widgets that are part of a form.

- [X] Provide a lame default widget for tuples in order to avoid ``
      File "/Users/...deform/widget.py", line 92, in serialize raise
      NotImplementedError`` during serialization or provide a better
      error message (maybe a subclass of Widget that spits out a more
      informative error message).  (used TextInputCSV widget).

- [ ] Somehow prevent schemas that have sequence types (tuples and
      sequences) that have no schema children from reaching the point
      where we try to serialize them, as a hapless user will wind up
      with a `` File "/Users/...../deform/widget.py", line 773, in
      serialize item_field = field.children[0]`` exception instead of
      a more sensible error message.

- [ ] Allow for single-field readonly renderings (e.g. on an add form,
      the name must be provided, on an edit form the name cannot be
      provided).

- [ ] Make deform.widget.RichText render only on oid specific element
      in templates.

- [ ] Work out RichTextWidget default height and width and overrides
      for them, then document how to do so.

- [ ] Add placeholder text to
      :class:`deform.widget.AutocompleteinputWidget`

- [ ] CSRF:

      <DanielHolth> I came up with a repoze.bfg.formish CSRF solution
      that I don't entirely hate. The token stored on the
      FormController is hmac(''.join(user_id, str(self.__class__),
      request.url, csrf_secret), session_identifier). The main form
      template inserts the token into the form if
      hasattr(form.controller.csrf_token) and it's checked with a
      decorator on the action method.
      <DanielHolth> I tried setting
      the token as a default value for a String() but then the form
      will compute the correct csrf token when submitted without that
      key.
      <wiggy> I use a CSRForm class which is derived from formish.Form
      and every user gets a secret which is reset on login

- Apply patches:

      [ ] http://bugs.repoze.org/issue151

      [X] http://bugs.repoze.org/issue165

- [ ] Spinner for upload widget.

- [ ] Focus first element in node when sequence item is added.

- [ ] http://deformdemo.repoze.org/multiple_forms/ has weird styling.

- [X] Date parts widget renders error "Incomplete" if all blank.
      should be "Required" for consistency with others

Topics Needing Documentation
----------------------------

- Associating a Colander type with a new default widget type.

- Changing the close button image.

- Interfield validation.

- Explain ``widget_maker``.

Documentation Done, But Could be Better
---------------------------------------

- The Form class (and thee Button class) explanations.

- Multiple forms on the same page (in Form API docs only).

- FileUploadWidget tmpstore (in FileUploadWidget API docs only).

- Form post target changing (only in API docs)

- Internationalization (weak chapter)

- Creating a new schema type (punts to Colander docs in basic.rst)


