@@ -59,11 +59,12 @@ Use with LDAP: `typeAheadLdap`
### .data-typeahead-limit
* Defines the limit of entries shown on the client. Default on client is 5. The server will always send a value. The server default is 20.
* Defines the limit of entries shown on the client. Default on client is 5. The server will always send a value.
The server default is 20.
### .data-typeahead-minlength
* Defines the string minlegth, typed by the user, before the first lookup is started. Default is 2.
* Defines the string minlength, typed by the user, before the first lookup is started. Default is 2.
### data-typeahead-pedantic
...
...
@@ -72,7 +73,8 @@ Use with LDAP: `typeAheadLdap`
## Tags Form Element
The tags form element depends on Typeahead by default. The following attributes define the tags form element, additional to the attributes for Typeahead (see above).
The tags form element depends on Typeahead by default. The following attributes define the tags form element, additional
| wrapRow | string | If specified, skip default wrapping (`<div class='col-md-?'>`). Instead the given string is used. |
+------------------------+--------+ |
...
...
@@ -3558,6 +3566,123 @@ LDAP
See :ref:`LDAP_Typeahead`
.. _`type_ahead_tag`:
Type Ahead Tag
""""""""""""""
Extend a TypeAhead input element to take more than one token (=tag) in the same input element.
This mode supports only *typeAheadSql* (no LDAP).
Usage: A user might choose one or more tags from a typeahead list (to minimize typos and to reuse already given tags).
The user starts typing and for each keypress *typeAheadSql* is searched for all matches. The user selects an element
by clicking on it or by using one of the *typeAheadTagDelimiter* key presses (by default tab or comma). If a tag is
selected, it will be visual separated from the input cursor. Already selected tags can not be edited but removed
(clicking on the x). Further tags can be added.
*typeAheadTag* support two different modes: a) *Tag* , b) *Glue*.
.. _`ta_mode_tag`:
Mode: Tag
;;;;;;;;;
Tags will be loaded and saved as a comma separated list. Maximum length of saved tags is limit by
the size of the column (incl. separator).
Additional arguments needed for *typeAheadTag*:
* *FormElement.parameter*:
* *typeAheadTag* = [0|1] - Default 0 (=off), existence or =1 switches the mode *typeAheadTag* on.
* *typeAheadTagDelimiter* = List of ASCII codes to separate tags during input. Default '9,44' (tab and comma).
.. _`ta_mode_glue`:
Mode: Glue
;;;;;;;;;;
For each selected tag a glue record, pointing to the tag, is created.
The *Glue* mode will be activated by setting *FormElement.parameter.typeAheadGlueInsert* with a corresponding SQL statement.
Glue records will be created or deleted, as the user select or deselect tags. Processing of those Glue records will be done
after the primary form record has been written and before any after*-action FormElements will be processed.
*FormElement.name* should **not** point to a column in the form primary table. Instead a free name should be used for the *typeAhead*
FormElement.
The maximum number of tags is not limited - but take care to size the FormElement big enough (*FormElement.maxLength*) to
show all tags.
On *Form load* (to show already assigned tags) a comma separated list has to be given in *FormElement.value*, based on
the previously saved Glue records. The string format is identically to the one used in mode *Tag*.
Extra parameter for mode = *Tag* :
* *FormElement.parameter*:
* *typeAheadTagInsert* = {{INSERT INTO Tag (....) VALUES (...)}} - Only needed with *typeAheadPedantic=0*.
* *typeAheadGlueInsert* = {{INSERT INTO glueTag (...) VALUES (...)}}
* *typeAheadGlueDelete* = {{DELETE FROM glueTag WHERE ...}}
**Example**:
Table *Person* with some records.
Table *Fruit* with a list of fruits.
Table *FruitPerson* with glue records.
Usage: assign favourite fruits to a person. The fruits are the tags, the glue records will assign the fruits to a person.
The form will be open with a person record and has only one FormElement.
* Form.name=personFavouriteFruits
* Form.title=Person Favourite Fruits
* Form.primaryTable = Person
* FormElement[1].name = myFavoriteFruits
* FormElement[1].type = Text
* FormElement[1].value = {{SELECT GROUP_CONCAT( CONCAT(f.id, ':', f.name) ORDER BY f.name) FROM FruitPerson AS fp, Fruit AS f WHERE fp.pId={{id:R}} AND fp.fruitId=f.id ORDER BY f.name}}
* FormElement[1].parameter:
* typeAheadTag = 1
* typeAheadSql = SELECT f.id, f.name AS value FROM Fruit AS f WHERE f.name LIKE ?