It’s been some time since the last release of Supler. Just as a short reminder: Supler is a Rapid Form Development library, allowing you to use your favorite Javascript frontend, and Scala backend frameworks. It keeps the form definition centralized, taking care of client/server-side validation, form rendering, applying new values and serializing/deserializing. Star Supler on GitHub if you think that might be interesting!
If you’re new to Supler, or if you’d like to get started with form development using Supler, take a look at our docs or the live demo.
The 0.3.0 release brings a lot of smaller and bigger improvements as well as bug fixes (a mandatory position in each release of any software ;) ). It is now possible to customise a number of field options on the frontend, starting with specifying the field order, to more specific per-field options like render hints or overriding rendering functions using javascript (it is still possible of course to override rendering using HTML templates). A short example of how field options may look like:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | new Supler.Form(container, { field_options: { 'secretField': { render_hint: 'password' }, 'friends[].bio': { render_options: { renderLabel: function(forId, label) { return '<div>some html</div>'; } } read_value: function(element) { return ... } }, 'render_hint:radio': { // options common for all fields rendered as radios } }); |
Before the only way to layout fields was one field per row. Now it is also possible to have multiple fields in one row; just combine the fields using the ||
operator:
1 2 3 4 5 6 | form[Person](f => List( // row 1 f.field(_.age).label("Age") || f.field(_.birthday).label("Birthday"), // row 2 f.field(_.address1).label("Address 1") || f.field(_.address2).label("Address 2") ) |
The row decorations and how rows are rendered is of course fully customisable via overriding the javascript rendering functions. We are also looking into making this more flexible, with frontend-defined form layout templates.
Other changes include:
- more validators for basic types
- improved option validators
- improved single/multi-select fields support
- easier definitions of custom transformers (for serializing/deserializing custom classes to/from json).
- support for fields which serialised to complex JSON objects (not plain strings/numbers etc.)
We also have a new Bintray/Artifactory/Travis-based build system, which fully automates the releases so snapshots are always up-to-date!
As always, if you like the project, please start it on Github or let us know your opinion either here, on the forum or on the Gitter chat!