Formulator changes

  1.2.0

    Features Added

      - Changes to exception infrastructure so errors can now be
        imported and caught in a through the web Python script. Example::

          from Products.Formulator.Errors import ValidationError, FormValidationError

      - added __getitem__ to Field so instead of using get_value() you can
        also do this in Python: form.field['title'], and in ZPT you can
        use this in path expressions: form/field/title

      - made a start with Formulator unit tests; some validators get
        automatically tested now.

    Bugs Fixed

      - Removed dependencies of the name of 'Add and Edit' button to make
        internationalization of the management interface easier.

      - added permission to make ZClasses work a bit better (but they
        still don't cooperate well with Formulator, I think. I don't use
        ZClasses, so I hope to hear from this from ZClass users)
 
      - Form's properties tab now visible and form tabs stopped
        misbehaving.

      - Lists and such should handle multiple items with the same value 
        a bit better, selecting only one.

      - the LinkField now checks site-internal links better.

  1.1.0
   
    Bugs Fixed

       - Fixed bug in form settings tab.

      - the LinkField now checks site-internal links better.

  1.0.9

    Features Added

       - New TALES tab for fields as a more powerful Override tab; 
         PageTemplates needs to be installed to make it work.
 
       - added 'name' attribute for forms. When the form header is
         rendered, name will be an attribute. This can be used to
         control forms with Javascript.

    Bugs Fixed

       - More compliance with Zope product guidelines; moved dtml
	 files from www dir to dtml dir.

       - Fixed a bug in that form titles would not work. Forms now have
         titles, and you can change them in the settings tab. (Formulator
         does not use the title property internally though)

  1.0.1

    Bugs Fixed

       - Fixed bug with renaming groups. Previously, renamed groups were not
         properly stored in the ZODB.

       - Made MultiSelectionValidator (used by MultiListField among others)
         deal better with integer values.

       - Hacked around CopySupport changes in Zope 2.4.0; renames work
         again now.
            
  1.0

    Features Added

       - New field: RawTextAreaField. A textarea field that doesn't 
         do a lot of processing on the text input.

       - Checked in BSD license text.

    Bugs Fixed

       - Fixed minor bug in year handling of DateTimeField.

       - Now hidden fields also take text from 'extra' property.

       - Fixed bug in MultiItemsWidget; would not deal with only a
         single item being selected.

  0.9.5

    Features Added
 
      - Added FileField (with browse button). Can be used to upload
        files if form is set to multipart/form-data.

      - Added LinkField for URLs.

      - Made ListField and RadioField more tolerant of integer
        (and possibly other) values, not only strings.

      - Made ListField and RadioField happy to deal with non-tuples too in the 
        items list. In this case, the item text and value will be identical.

      - Refactored ListWidget and RadioWidget so they share code; they both
        inherit from SingleItemsWidget now.

      - Added LinesField to submit a list of lines in a textarea.

      - Added MultiListField and MultiCheckBoxField, both use new
        MultiItemsWidget and MultiSelectionValidator.

      - Added EXPERIMENTAL PatternField.

  0.9.4

    Features Added

      - Added API docs for Form, BasicForm and ZMIForm.
 
      - Renamed the confusingly named PythonForm and PythonField to
        ZMIForm and ZMIField, as they are used from the Zope Management
        Interface and not from Python.

      - Added render() method to form for basic form rendering.

      - Added Formulator HOWTO document.

    Bugs Fixed

      - Removed some validation code that wasn't in use anymore (items_method).

      - Removed 'has_field_id' in Form as this duplicated
        the functionality of 'has_field'.

      - Turned <br> in Python sources to <br /> for XHTML compliance.

      - Tweaked radiobutton; text is now closer to the button itself,
        different buttons are further apart.

  0.9.3

    Features Added
      
      - added RadioField for simple display of radio buttons.

      - added action, method and enctype property to form settings.
        These are displayed using the special form.header() and form.footer()
        methods.
 
      - added override tab to allow all properties to be overridden by
        method calls instead. 'items_method' in ListField went
        away.

      - added ability to display DateTimeFields using drop down lists
        instead of text input. Added some other bells and whistles to
        DateTimeField. Changed some of the inner workings of composite
        fields; component fields are now unique per field instance
        instead of shared between them.
 
      - is_required() utility method on field to check whether a field
        is required.

      - some internal features, such the ability to have a method
        called as soon as a property has changed.

    Bugs Fixed

      - Fixed typos in security assertions.

      - use REQUEST.form instead of REQUEST where possible.

      - display month and day with initial zero in DateTimeField.

      - Fixed bug in validate_all_to_request(); what can be validated
        will now be added to REQUEST if possible, even if a
        FormValidationError is raised.

  0.9.2

    Features Added

      - Ability to rename groups, including the first 'Default' group.

      - Improved support for sticky forms; form.render() can now
        take an optional second argument, REQUEST, which can come
        from a previous form submit. Even unvalidated fields will
        then be sticky.

      - fields can call an extra optional external validation 
        function (such as a Python script).

      - New alternate name property: the alternate name is added to
        the result dictionary or REQUEST object after validation. This
        can be useful to support field names which wouldn't be valid
        field names, which can occur in some locales.

      - New extra property; can be used to add extra attributes to
        a HTML tag.

      - Some IntegerField properties can now be left empty if 
        no value is required, instead of having to set them to 0.

      - Merged functionality of RangedIntegerField into IntegerField.
        RangedIntegerField is not addable anymore, though supported
        as a clone of IntegerField for backwards compatibility. Leaving
        'start' and 'end' empty in the new IntegerField will mean those
        checks will not be performed.

    Bugs Fixed

      - Added more missing security declarations.

      - html_quote added in various places to make fields display
        various HTML entities the right way.

  0.9.1

    Features Added

      - Widgets now have a 'hidden' property. If set, the widget is
        drawn as a 'hidden' field. 'hidden' fields do get validated
        normally, however.
 
      - Changed API of Widget and Validator slightly; render() and
        validate() methods now take an extra 'key' argument indicating
        the name the field should have in the form. This is necessarily
        to handle sub fields of composite fields.

      - Added EmailField and FloatField.
 
      - Added some infrastructure to support 'composite fields'; fields 
        composed out of multiple sub fields.

      - Added DateTimeField, the first example of a composite field
        (field made of other fields).

    Bugs Fixed  

      - General code cleanups; removed some unused methods.

      - Fixed security assertion for validate_all_to_request() method.

      - MethodFields now check whether they have 'View' permission to
        execute listed Python Script or DTML Method.

      - RangedInteger is now < end, instead of <=, compatible with the
        documentation.
      
  0.9

    Initial Release

      - Initial public release of Formulator.



