YAFOWIL - declarative, flexible html forms, framework independent.
Yet Another Form WIdget Library.
YAFOWIL offers html-form creation and modification at runtime. It is light-weight and provides an extensible, reusable set of blueprints to build flexible forms.
YAFOWIL is independent from any web-framework, but easy to use in your web-framework.
It’s all just about rendering widgets and extracting the data returned from the browser per widget. It does not fight with storage.
YAFOWIL vary from most other HTML form packages: Its all just configuration. No subclassing needed any more; no specific schema-framework is necessary.
Yafowil provides a factory where you can fetch your widgets instances from. Or you register your own.
If you’re interested to dig deeper: The detailed YAFOWIL documentation is available. Read it and learn how to create your example application with YAFOWIL forms in 15 minutes.
The sources are in a GIT DVCS with its main branches at github.
We’d be happy to see many forks and pull-requests to make YAFOWIL even better.
- Jens W. Klein <jk [at] kleinundpartner [dot] at>
- Robert Niederrreiter <rnix [at] squarewavea [dot] t>
- Johannes Raggam <johannes [at] raggam [dot] co [dot] at>
- Peter Holzer <peter [dot] holzer [at] agitator [dot] com>
- Attila Olah
- Christian Scholz aka MrTopf (initial discussion)
- Consider YAFOWIL_FORCE_DUMMY_TSF os.environ variable which can be used to force dummy translation string factory when running tests. [rnix, 2014-05-13]
- Add translations. [rnix, 2014-04-30]
- Add yafowil.tsf module, which is used to create yafowil related translation string factory. [rnix, 2014-04-30]
- Re-add yafowil.utils.Unset class (import from node.utils) for backward compatibility reasons. [rnix, 2014-04-30]
- Return UNSET in number extractor if received extracted value is empty string. [rnix, 2014-03-20]
- Use generic_html5_attrs in tag_renderer. [jensens, 2013-03-06]
- Add default CSS class for checkbox and textarea blueprints. [rnix, 2013-03-06]
- Float number input seperator may also be comma. [rnix, 2013-12-02]
- Don’t generate an id attribute for structural widgets. Fixes #6, where the same id for all structural elements in a form was generated. [thet, 2013-05-27]
- Blueprints accept data property for generic HTML5 data attributes. [rnix, 2013-04-11]
- Introduce yafowil.utils.generic_html5_attrs helper function. [rnix, 2013-04-11]
- Introduce with_label property for checkbox blueprint. Useful for cross browser compatible checkbox CSS. [rnix, 2013-03-29]
- Use json.dumps for data atrribute values to convert Python types to JSON. Enclose data-attribute values in single quotes to meet the JSON requirements. Convert camelCase data attribute names into camel-case. Since jQuery 1.6 they are automatically converted back to camelCase after calling .data(). [thet]
- Import node.utils.UNSET in yafowil.utils instead of providing own unset marker class and instance. [rnix, 2013-02-10]
- Add helper function for creating a data-attributes dictionary from a list of attribute-keys which can be passed to tag-renderer. [thet, 2012-12-05]
- Allow passing of a custom html attributes dictionary to textarea_renderer, select_edit_renderer and input_generic_renderer. A dictionary is used instead of passing them as function parameters to avoid namespace conflicts. [thet]
- Consider maxlength in input_attributes_common. [rnix, 2012-11-03]
- Use attr_value wherever possible to lookup attribute values. [rnix, 2012-10-25]
- Introduce attr_value utility. [rnix, 2012-10-25]
- Textarea can have title attribute. [rnix, 2012-10-25]
- Fix default help text. [rnix, 2012-10-10]
- fixed bug in factory returned wrong renderes on call of display_renderers [jensens, 2012-10-09]
- renamed plans to macros. [rnix, jensens]
- custom chains can be passed as dictionary to the factory. [rnix, 2012-09-28]
- introduce display_proxy property for mode display. [rnix, 2012-08-08]
- add generic tag blueprint. [rnix, 2012-08-08]
- adopt to plumber 1.2. [rnix, 2012-07-29]
- adopt to node 0.9.8. [rnix, 2012-07-29]
- pep8ify [jensens, 2012-06-08]
- make TBSupplement compatible with both: `zExceptions` and `zope.exceptions`. Major change: html output is no longer default and the kwarg of getInfo is now `as_html` (was `html`). Also added blueprints to the supplement as info to make it easier to identify the form part. [jensens, 2012-06-07]
- Check with ‘if not value’ instead of ‘if value is None’ in generic_display_renderer. [thet, 2012-05-23]
- Add a title attribute to the label blueprint. [thet, 2012-05-02]
- Fix file extractor. [rnix, 2012-04-21]
- Avoid rendering of value attribute in file blueprint. [rnix, 2012-04-21]
- Label property can be callable. [rnix, 2012-02-19]
- Loading resources is done more explicit and in a pluggable way using entry-points. Thus yafowil extensions such as widgets can define an entry point. [jensens, 2012-02-14]
- Add size attribute for select edit renderer. [jensens, 2012-01-20]
- fix number extractor [jensens, 2012-01-20]
- Add default css class for select blueprint. [rnix, 2011-12-18]
- Register number blueprint display renderer. [rnix, 2011-12-18]
- Consider expression in submit blueprint renderer. [rnix, 2011-12-18]
- checked attribute can be set explicitly in checkbox blueprint. [rnix, 2011-11-21]
- Fix Bug in yafowil.common.select_edit_renderer. Crashed with empty vocabularies. [rnix, 2011-11-16]
- Add lines blueprint. Renders a textarea and extracts lines as list. [rnix, 2011-11-11]
- Added concept of plans to the factory, which is a named set of blueprints. Plans are registered to the factory and can be addressed with the # sign. [jensens, 2011-09-29]
- td blueprint can be used as compound or part of leaf widget now. [rnix, 2011-09-28]
- Accept value property on compounds. [rnix, 2011-09-27]
- Make data.extracted available as odict with values of children on compounds. [rnix, 2011-09-27]
- Pass blueprints and custom arguments to Widget constructor in factory for debugging and duplication purposes. [rnix, 2011-09-26]
- Rename yafowil.base.Widget._properties to yafowil.base.Widget.properties. [rnix, 2011-09-26]
- Add div blueprint. Renders within ‘<div>’ element. Can be used for compound and leaf widgets. [rnix, 2011-09-23]
- naming makes a difference between blueprints and widgets [jensens, 2011-09-20]
- fix traceback test [rnix, 2011-09-15]
- traceback supplement now with html support. test for html part is missing for now. [jensens, 2011-09-01]
- traceback supplement is now better formatted. [jensens, 2011-08-30]
- Bugfix: mode display did eat up all previous renderings. This made error widget fail in display mode to show the value. Fixed: empty_display_renderer proxies now all previous rendered. [jensens, 2011-08-11]
- Extend select widget for better UI control of selections and multi selections [rnix, 2011-08-05]
- Plumb node.parts.Order to widget node [rnix, 2011-07-28]
- define label and field renderer as display renderer as well [rnix, 2011-07-25]
- deprecate use of mode widget [rnix, 2011-07-08]
- now mode is a central element: each Widget instance has a mode now: edit, display or skip. edit is default and works as usal. Display renders the new display_renderer chain. Skip just renders an empty Unicode string. [jensens, 2011-07-07]
- clean up html5 handling, we believe in novalidate now… [jensens, 2011-06-11]
- add disabled attribute for select widget. [jensens, 2011-06-01]
- add novalidate property for form [rnix, 2011-05-23]
- return empty string in mode renderer if value is UNSET [rnix, 2011-05-23]
- test coverage [rnix, 2011-05-07]
- add widget value validation checking ‘multivalued’ property against ‘value’ length. [rnix, 2011-05-07]
- remove outdated _value. user fetch_value instead. [rnix, 2011-05-07]
- add optional for property for label widget. [rnix, 2011-04-23]
- select extractor - fix required behavior [rnix, 2011-04-19]
- compound renderer - consider ‘structural’ property on widget node [rnix, 2011-04-19]
- number extractor - return val if UNSET [rnix, 2011-04-14]
- textarea renderer - check value against None and render empty string instead [rnix, 2011-04-14]
- Add html5type property for email widget [rnix, 2011-03-16]
- Add html5required property [rnix, 2011-03-16]
- adopt to node 0.9 [rnix]
- documentation [jensens, rnix]
- made it work [jensens, rnix, et al, 2010-12-27]
Copyright (c) 2010-2014, BlueDynamics Alliance, Austria, Germany, Switzerland All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the name of the BlueDynamics Alliance nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY BlueDynamics Alliance AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BlueDynamics Alliance BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.