Commit 05d7f085 authored by Carsten  Rose's avatar Carsten Rose
Browse files

Manural.rst: refactor header line token. start to document FE annotation element.

parent 43f67d24
Pipeline #1567 passed with stage
in 2 minutes and 21 seconds
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
.. == .. ==
.. -- .. --
.. ^^ .. ^^
.. '' .. ""
.. ;; .. ;;
.. ,, .. ,,
.. ..
...@@ -120,12 +120,12 @@ If there are problems with converting/downloading FE_GROUP protected pages, chec ...@@ -120,12 +120,12 @@ If there are problems with converting/downloading FE_GROUP protected pages, chec
HTML to PDF conversion HTML to PDF conversion
'''''''''''''''''''''' """"""""""""""""""""""
`wkhtmltopdf` converts a website (local or remote) to a (multi)-page PDF file. It's mainly used in `download`_. `wkhtmltopdf` converts a website (local or remote) to a (multi)-page PDF file. It's mainly used in `download`_.
Print Print
''''' """""
Different browser prints the same page in different variations. To prevent this, QFQ implements a small PHP wrapper Different browser prints the same page in different variations. To prevent this, QFQ implements a small PHP wrapper
`print.php` with uses `wkhtmltopdf` to convert HTML to PDF. `print.php` with uses `wkhtmltopdf` to convert HTML to PDF.
...@@ -587,7 +587,7 @@ error message: :: ...@@ -587,7 +587,7 @@ error message: ::
.. _`periodId`: .. _`periodId`:
periodId periodId
'''''''' """"""""
This is This is
...@@ -837,14 +837,14 @@ Multi Database ...@@ -837,14 +837,14 @@ Multi Database
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
Base: T3 & QFQ Base: T3 & QFQ
'''''''''''''' """"""""""""""
QFQ typically interacts with one database, the QFQ database. The database used by Typo3 is typically a separate one. QFQ typically interacts with one database, the QFQ database. The database used by Typo3 is typically a separate one.
Theoretically it might be the same (never tested), but it's strongly recommended to use a separated QFQ database to have Theoretically it might be the same (never tested), but it's strongly recommended to use a separated QFQ database to have
no problems on Typo3 updates and to have a clean separation between Typo3 and QFQ. no problems on Typo3 updates and to have a clean separation between Typo3 and QFQ.
QFQ: System & Data QFQ: System & Data
'''''''''''''''''' """"""""""""""""""
QFQ itself can be separated in 'QFQ system' (see `system-tables`_) and 'QFQ data' databases (even more than one are QFQ itself can be separated in 'QFQ system' (see `system-tables`_) and 'QFQ data' databases (even more than one are
possible). The 'QFQ system' stores the forms, record locking, log tables and so on - `QFQ data` is for the rest. possible). The 'QFQ system' stores the forms, record locking, log tables and so on - `QFQ data` is for the rest.
...@@ -852,7 +852,7 @@ possible). The 'QFQ system' stores the forms, record locking, log tables and so ...@@ -852,7 +852,7 @@ possible). The 'QFQ system' stores the forms, record locking, log tables and so
A `Multi Database` setup is given, if 'QFQ system' is different from 'QFQ data'. A `Multi Database` setup is given, if 'QFQ system' is different from 'QFQ data'.
Data: Data1, Data2, ..., Data n Data: Data1, Data2, ..., Data n
''''''''''''''''''''''''''''''' """""""""""""""""""""""""""""""
Every database needs to be configured via `configuration`_ with it's own `index`. Every database needs to be configured via `configuration`_ with it's own `index`.
...@@ -1321,13 +1321,13 @@ SQL variables ...@@ -1321,13 +1321,13 @@ SQL variables
* The number of variables inside an input field or a SQL statement is not limited. * The number of variables inside an input field or a SQL statement is not limited.
Result: string Result: string
'''''''''''''' """"""""""""""
A result of a SQL statement will be imploded over all: concat all columns of a row, concat all rows - there is no A result of a SQL statement will be imploded over all: concat all columns of a row, concat all rows - there is no
glue string. glue string.
Result: row Result: row
''''''''''' """""""""""
A few functions needs more than a returned string, instead separate columns are necessary. To indicate an array A few functions needs more than a returned string, instead separate columns are necessary. To indicate an array
result, specify those with an '!': :: result, specify those with an '!': ::
...@@ -1338,7 +1338,7 @@ This manual will specify the individual QFQ elements, who needs an array instead ...@@ -1338,7 +1338,7 @@ This manual will specify the individual QFQ elements, who needs an array instead
a string where an array is needed and vice versa. a string where an array is needed and vice versa.
Database index Database index
'''''''''''''' """"""""""""""
To access different databases in a `multi-database`_ setup, the database index can be specified after the opening curly To access different databases in a `multi-database`_ setup, the database index can be specified after the opening curly
braces. :: braces. ::
...@@ -1354,7 +1354,7 @@ If no dbIndex is given, `{{indexData:Y}}` is used. ...@@ -1354,7 +1354,7 @@ If no dbIndex is given, `{{indexData:Y}}` is used.
Example Example
''''''' """""""
:: ::
...@@ -1368,7 +1368,7 @@ Example ...@@ -1368,7 +1368,7 @@ Example
.. _`row-column-variables`: .. _`row-column-variables`:
Row column variables Row column variables
^^^^^^^^^^^^^^^^^^^^ """"""""""""""""""""
Syntax: *{{<level>.<column>}}* Syntax: *{{<level>.<column>}}*
...@@ -2285,7 +2285,7 @@ Forward: Save / Close ...@@ -2285,7 +2285,7 @@ Forward: Save / Close
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^
Forward (=forwardMode) Forward (=forwardMode)
'''''''''''''''''''''' """"""""""""""""""""""
After the user presses *Save*, *Close*, *Delete* or *New*, different actions are possible where the browser redirects to. After the user presses *Save*, *Close*, *Delete* or *New*, different actions are possible where the browser redirects to.
...@@ -2306,7 +2306,7 @@ After the user presses *Save*, *Close*, *Delete* or *New*, different actions are ...@@ -2306,7 +2306,7 @@ After the user presses *Save*, *Close*, *Delete* or *New*, different actions are
Only with `Forward` == `url` | `url-skip-history`, the definition of `Forward URL / Page` becomes active. Only with `Forward` == `url` | `url-skip-history`, the definition of `Forward URL / Page` becomes active.
Forward URL / Page (=forwardPage) Forward URL / Page (=forwardPage)
''''''''''''''''''''''''''''''''' """""""""""""""""""""""""""""""""
Format: [<url>] or [<mode>|<url>] Format: [<url>] or [<mode>|<url>]
...@@ -2468,7 +2468,7 @@ Parameter ...@@ -2468,7 +2468,7 @@ Parameter
.. _submitButtonText: .. _submitButtonText:
submitButtonText submitButtonText
'''''''''''''''' """"""""""""""""
If specified and non empty, display a regular submit button at the bottom of the page with the given text. If specified and non empty, display a regular submit button at the bottom of the page with the given text.
This gives the form a ordinary HTML-form look'n' feel. With this option, the standard buttons on the top right border This gives the form a ordinary HTML-form look'n' feel. With this option, the standard buttons on the top right border
...@@ -2478,7 +2478,7 @@ should be hided to not confuse the user. ...@@ -2478,7 +2478,7 @@ should be hided to not confuse the user.
* Default: Empty * Default: Empty
class class
''''' """""
* Optional. * Optional.
* Default: `container` * Default: `container`
...@@ -2490,7 +2490,7 @@ class ...@@ -2490,7 +2490,7 @@ class
* Expand the form over the whole area: `container-fluid` * Expand the form over the whole area: `container-fluid`
classPill classPill
''''''''' """""""""
* Optional. * Optional.
* Default: `qfq-color-grey-1` * Default: `qfq-color-grey-1`
...@@ -2502,7 +2502,7 @@ classPill ...@@ -2502,7 +2502,7 @@ classPill
* `classPill` is only visible on forms with container elements of type 'Pill'. * `classPill` is only visible on forms with container elements of type 'Pill'.
classBody classBody
''''''''' """""""""
* Optional. * Optional.
* Default: `qfq-color-grey-2` * Default: `qfq-color-grey-2`
...@@ -2517,7 +2517,7 @@ classBody ...@@ -2517,7 +2517,7 @@ classBody
`qfq-color-blue-1` (dark), `qfq-color-blue-2`. (light) `qfq-color-blue-1` (dark), `qfq-color-blue-2`. (light)
extraDeleteForm extraDeleteForm
''''''''''''''' """""""""""""""
Depending on the database definition, it might be necessary to delete the primary record *and* corresponding slave records. Depending on the database definition, it might be necessary to delete the primary record *and* corresponding slave records.
To not repeat such 'slave record delete definition', an 'extraDeleteForm' can be specified. If the user opens a record To not repeat such 'slave record delete definition', an 'extraDeleteForm' can be specified. If the user opens a record
...@@ -2533,7 +2533,7 @@ See also: `delete-record`_. ...@@ -2533,7 +2533,7 @@ See also: `delete-record`_.
.. _form-mode-global: .. _form-mode-global:
Form mode global Form mode global
'''''''''''''''' """"""""""""""""
The Form global mode `mode` is given by default with `{{formModeGlobal:SE:alnumx}}`. The Form global mode `mode` is given by default with `{{formModeGlobal:SE:alnumx}}`.
...@@ -2678,14 +2678,14 @@ The placeholder `%d` can also be used in the *FormElement.label* ...@@ -2678,14 +2678,14 @@ The placeholder `%d` can also be used in the *FormElement.label*
Example of styling the Add/ Delete Button: :ref:`example_class_template_group` Example of styling the Add/ Delete Button: :ref:`example_class_template_group`
Column: primary record Column: primary record
'''''''''''''''''''''' """"""""""""""""""""""
If the columns `<name>%d` are real columns on the primary table, saving and delete (=empty string) are done automatically. If the columns `<name>%d` are real columns on the primary table, saving and delete (=empty string) are done automatically.
E.g. if there are up to five elements `grade1, ..., grade5` and the user inputs only the first three, the remaining will be set E.g. if there are up to five elements `grade1, ..., grade5` and the user inputs only the first three, the remaining will be set
to an empty string. to an empty string.
Column: non primary record Column: non primary record
'''''''''''''''''''''''''' """"""""""""""""""""""""""
Additional logic is required to load, update, insert and/or delete slave records. Additional logic is required to load, update, insert and/or delete slave records.
...@@ -2975,7 +2975,8 @@ See also at specific *FormElement* definitions. ...@@ -2975,7 +2975,8 @@ See also at specific *FormElement* definitions.
* `s/d/n`: string or date or number. * `s/d/n`: string or date or number.
Native *FormElements* Native *FormElements*
''''''''''''''''''''' """""""""""""""""""""
* Like 'input', 'checkbox', ... * Like 'input', 'checkbox', ...
.. _`input-option-autofocus`: .. _`input-option-autofocus`:
...@@ -3173,7 +3174,7 @@ Type: text ...@@ -3173,7 +3174,7 @@ Type: text
.. _`input-typeahead`: .. _`input-typeahead`:
Type Ahead Type Ahead
'''''''''' """"""""""
Activating `typeahead` functionality offers an instant lookup of data and displaying them to the user, while the user is Activating `typeahead` functionality offers an instant lookup of data and displaying them to the user, while the user is
typing, a drop-down box offers the results. As datasource the regular SQL connection or a LDAP query can be used. typing, a drop-down box offers the results. As datasource the regular SQL connection or a LDAP query can be used.
...@@ -3264,23 +3265,73 @@ Type: editor ...@@ -3264,23 +3265,73 @@ Type: editor
Type: annotate Type: annotate
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
The `Formelement`.type=`annotate` is a simple grafic editor which, for example, can be used to annotate images. All modifications to Annotate image or text. Typically the image or text has been uploaded during a previous step. The annotation will be
an image are saved as a JSON fabric.js data string in the current FormElement column. saved in *FormElement.name* column of the current record. The uploaded file itself will not be modified. The annotations
can be shown in edit or readonly mode and modified again.
Two modes are available:
image
A simple grafic editor to paint on top of the image (best by a tablet with pen or grafic tablet). The uploaded image
is shown in the background. All drawings are saved as a JSON fabric.js data string. Supported file types:
**png, svg**. PDF files can be easily divided into per page SVG files during upload - see `split-pdf-upload`_
text
Per code line, annotation(s) can be added. Different users can add individual annotations. A user can only edit the
own annotations. The annotations are saved as QFQ internal JSON string.
.. note::
Drawing with fabric.js might produce a lot data. Take care the column type/size is big enough (>=64kB).
Image
"""""
An image, specified by `FormElement.parameter`: imageSource={{pathFileName}}, will be displayed in the background. On An image, specified by `FormElement.parameter`: imageSource={{pathFileName}}, will be displayed in the background. On
form load, both, the image and an optional already given JSON fabric.js data string, will be displayed. The image is SIP form load, both, the image and an optional already given JSON fabric.js data string, will be displayed. The image is SIP
protected and will be loaded on demand. protected and will be loaded on demand.
The original image file is not modified. The user drawings are stored in the fabric.js data string. **Form.parameter**
* *FormElement.parameter*: +-------------------+-----------------------+----------------------------------------------------------------------------------+
| Attribute | Value | Description |
+===================+=======================+==================================================================================+
| annotateType | grafic | *grafic|text*. Default is *grafic*. Select mode. |
+-------------------+-----------------------+----------------------------------------------------------------------------------+
| imageSource | {{pathFileName2}} | Background image. E.g. `fileadmin/images/scan.png` |
+-------------------+-----------------------+----------------------------------------------------------------------------------+
| defaultPenColor | <rgb hex value> | Pen default color, after loading the fabric element. Default is '0000FF' (blue). |
+-------------------+----------------------------------------------------------------------------------------------------------+
* *imageSource* ={{pathFileName2}} - Background image. E.g. `fileadmin/images/scan.jpg`. .. note::
* *defaultPenColor* = <rgb hex value> - Pen default color, after loading the fabric element. Default is '0000FF' (blue).
By using the the `FormElement` `annotate`, the JS code `fabric.min.js` and `qfq.fabric.min.js` has to be included. By using the the `FormElement` `annotate`, the JS code `fabric.min.js` and `qfq.fabric.min.js` has to be included.
See setup-css-js_. See setup-css-js_.
Code
""""
**Form.parameter**
+-------------------+-----------------------+----------------------------------------------------------------------------------+
| Attribute | Value | Description |
+===================+=======================+==================================================================================+
| annotateType | text | *grafic|text*. Default is *grafic*. Select mode. |
+-------------------+-----------------------+----------------------------------------------------------------------------------+
| textSource | {{pathFileName2}} | Background image. E.g. `fileadmin/images/scan.png` |
+-------------------+-----------------------+----------------------------------------------------------------------------------+
| defaultPenColor | <rgb hex value> | Pen default color, after loading the fabric element. Default is '0000FF' (blue). |
+-------------------+----------------------------------------------------------------------------------------------------------+
annotateType=grafic|text
textSource (vergleichbar mit imageSource fuer fabric Elemente)
annotateUserName, annotateUserUid, annotateUserAvatar
highlight=off,auto,javascript,qfq,python,matlab
Type: imageCut Type: imageCut
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
...@@ -3701,7 +3752,7 @@ The maximum size is defined by the minimum of `upload_max_filesize`, `post_max_s ...@@ -3701,7 +3752,7 @@ The maximum size is defined by the minimum of `upload_max_filesize`, `post_max_s
In case of broken uploads, please also check `max_input_time` in php.ini. In case of broken uploads, please also check `max_input_time` in php.ini.
Deleting a record and the referenced file Deleting a record and the referenced file
''''''''''''''''''''''''''''''''''''''''' """""""""""""""""""""""""""""""""""""""""
If the user deletes a record (e.g. pressing the delete button on a form) which contains reference(s) to files, such files If the user deletes a record (e.g. pressing the delete button on a form) which contains reference(s) to files, such files
are deleted too. Slave records, which might be also deleted through a 'delete'-form, are *not* checked for file references are deleted too. Slave records, which might be also deleted through a 'delete'-form, are *not* checked for file references
...@@ -3716,7 +3767,7 @@ have multiple references to a single file. Therefore this check is just a fallba ...@@ -3716,7 +3767,7 @@ have multiple references to a single file. Therefore this check is just a fallba
.. _Upload simple mode: .. _Upload simple mode:
Upload simple mode Upload simple mode
'''''''''''''''''' """"""""""""""""""
Requires: *'upload'-FormElement.name = 'column name'* of an column in the primary table. Requires: *'upload'-FormElement.name = 'column name'* of an column in the primary table.
...@@ -3734,7 +3785,7 @@ Multiple 'upload'-FormElements per form are possible. Each of it needs an own ta ...@@ -3734,7 +3785,7 @@ Multiple 'upload'-FormElements per form are possible. Each of it needs an own ta
.. _Upload advanced mode: .. _Upload advanced mode:
Upload advanced mode Upload advanced mode
'''''''''''''''''''' """"""""""""""""""""
Requires: *'upload'-FormElement.name* is unknown as a column in the primary table. Requires: *'upload'-FormElement.name* is unknown as a column in the primary table.
...@@ -3779,7 +3830,7 @@ A typical name for such an 'upload'-FormElement, to show that the name does not ...@@ -3779,7 +3830,7 @@ A typical name for such an 'upload'-FormElement, to show that the name does not
.. _split-pdf-upload: .. _split-pdf-upload:
Split PDF Upload Split PDF Upload
'''''''''''''''' """"""""""""""""
Additional to the upload, it's possible to split the uploaded file (only PDF files) into several SVG or JPEG files, one Additional to the upload, it's possible to split the uploaded file (only PDF files) into several SVG or JPEG files, one
file per PDF page. The split is done via http://www.cityinthesky.co.uk/opensource/pdf2svg/ or Image Magick `convert`. file per PDF page. The split is done via http://www.cityinthesky.co.uk/opensource/pdf2svg/ or Image Magick `convert`.
...@@ -3849,7 +3900,7 @@ Types: ...@@ -3849,7 +3900,7 @@ Types:
.. _sqlValidate: .. _sqlValidate:
Parameter: sqlValidate Parameter: sqlValidate
'''''''''''''''''''''' """"""""""""""""""""""
Perform checks by fireing a SQL query and expecting a predefined number of selected records. Perform checks by fireing a SQL query and expecting a predefined number of selected records.
...@@ -3875,7 +3926,7 @@ Parameter: sqlValidate ...@@ -3875,7 +3926,7 @@ Parameter: sqlValidate
.. _slave-id: .. _slave-id:
Parameter: slaveId Parameter: slaveId
'''''''''''''''''' """"""""""""""""""
*FormElement.parameter*: *FormElement.parameter*:
...@@ -3896,7 +3947,7 @@ Note: ...@@ -3896,7 +3947,7 @@ Note:
* After an INSERT the `last_insert_id()` becomes the *slaveId*). * After an INSERT the `last_insert_id()` becomes the *slaveId*).
Parameter: sqlBefore / sqlInsert / sqlUpdate / sqlDelete / sqlAfter Parameter: sqlBefore / sqlInsert / sqlUpdate / sqlDelete / sqlAfter
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
* Save values of a form to different record(s), optionally on different table(s). * Save values of a form to different record(s), optionally on different table(s).
* Typically useful on 'afterSave' - be careful when using it earlier, e.g. beforeLoad. * Typically useful on 'afterSave' - be careful when using it earlier, e.g. beforeLoad.
...@@ -3925,7 +3976,7 @@ Parameter: sqlBefore / sqlInsert / sqlUpdate / sqlDelete / sqlAfter ...@@ -3925,7 +3976,7 @@ Parameter: sqlBefore / sqlInsert / sqlUpdate / sqlDelete / sqlAfter
Example Example
''''''' """""""
Situation 1: master.xId=slave.id (1:1) Situation 1: master.xId=slave.id (1:1)
...@@ -4032,7 +4083,7 @@ from the www.example.com and ?export (with the attachment filename 'personal.pdf ...@@ -4032,7 +4083,7 @@ from the www.example.com and ?export (with the attachment filename 'personal.pdf
sendMailAttachmemt = F:fileadmin/file1.pdf|d:readme.pdf|C|u:http://www.example.com|p:?id=export&r=123&_sip=1|d:personal.pdf sendMailAttachmemt = F:fileadmin/file1.pdf|d:readme.pdf|C|u:http://www.example.com|p:?id=export&r=123&_sip=1|d:personal.pdf
Type: paste Type: paste
''''''''''' """""""""""
See also `copy-form`_. See also `copy-form`_.
...@@ -4222,7 +4273,7 @@ Examples ...@@ -4222,7 +4273,7 @@ Examples
* Master FormElement 'music' is a radio/enum of 'classic', 'jazz', 'pop'. * Master FormElement 'music' is a radio/enum of 'classic', 'jazz', 'pop'.
Content of a select list Content of a select list
'''''''''''''''''''''''' """"""""""""""""""""""""
* Slave FormElement 'interpret' is 'select'-list, depending of 'music' * Slave FormElement 'interpret' is 'select'-list, depending of 'music'
...@@ -4231,7 +4282,7 @@ Content of a select list ...@@ -4231,7 +4282,7 @@ Content of a select list
sql={{!SELECT name FROM interpret WHERE music={{music:FE:alnumx}} ORDER BY name}} sql={{!SELECT name FROM interpret WHERE music={{music:FE:alnumx}} ORDER BY name}}
Show / Hide a *FormElement* Show / Hide a *FormElement*
''''''''''''''''''''''''''' """""""""""""""""""""""""""
* Slave 'interpret' is displayed only for 'pop'. Field 'modeSql': * Slave 'interpret' is displayed only for 'pop'. Field 'modeSql':
...@@ -4451,7 +4502,7 @@ Custom default value only for 'new records' ...@@ -4451,7 +4502,7 @@ Custom default value only for 'new records'
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Method 1 Method 1
'''''''' """"""""
On `Form.parameter` define a `fillStoreVar` query with a column name equal to a form field. That's all. On `Form.parameter` define a `fillStoreVar` query with a column name equal to a form field. That's all.
...@@ -4464,7 +4515,8 @@ What we use here is the default STORE prio FSRVD. If the form loads with r=0, 'F ...@@ -4464,7 +4515,8 @@ What we use here is the default STORE prio FSRVD. If the form loads with r=0, 'F
If r>0, than 'F' and 'S' are empty and 'R' is filled. If r>0, than 'F' and 'S' are empty and 'R' is filled.
Method 2 Method 2
'''''''' """"""""
In the specific `FormElement` set `value={{columnName:RSE}}`. The link to the form should be rendered with In the specific `FormElement` set `value={{columnName:RSE}}`. The link to the form should be rendered with
'"...&columnName=<data>&..." AS _page'. The trick is that the STORE_RECORD is empty for new records, and therefore the '"...&columnName=<data>&..." AS _page'. The trick is that the STORE_RECORD is empty for new records, and therefore the
corresponding value from STORE_SIP will be returned. Existing records will use the already saved value. corresponding value from STORE_SIP will be returned. Existing records will use the already saved value.
...@@ -4530,7 +4582,7 @@ Requirement: new records should automatically get the highest number plus 10 for ...@@ -4530,7 +4582,7 @@ Requirement: new records should automatically get the highest number plus 10 for
should not be altered. should not be altered.
Version 1 Version 1
''''''''' """""""""
Compute the next 'ord' in advance in the subrecord field of the primary form. Submit that value to the new record Compute the next 'ord' in advance in the subrecord field of the primary form. Submit that value to the new record
via SIP parameter to the secondary form. via SIP parameter to the secondary form.
...@@ -4551,7 +4603,7 @@ unchanged. ...@@ -4551,7 +4603,7 @@ unchanged.
`{{ord:RS0}}`. `{{ord:RS0}}`.
Version 2 Version 2
''''''''' """""""""
Compute the next 'ord' as default value direct inside the secondary form. No change is needed for the primary form. Compute the next 'ord' as default value direct inside the secondary form. No change is needed for the primary form.
...@@ -5196,7 +5248,7 @@ Example:: ...@@ -5196,7 +5248,7 @@ Example::
20.tail = </h3> 20.tail = </h3>
Join mode: SQL Join mode: SQL
'''''''''''''' """"""""""""""
This is the default. All lines are joined with a *space* in between. E.g.:: This is the default. All lines are joined with a *space* in between. E.g.::
...@@ -5208,7 +5260,7 @@ Results to: ``10.sql = SELECT 'hello world' FROM mastertable`` ...@@ -5208,7 +5260,7 @@ Results to: ``10.sql = SELECT 'hello world' FROM mastertable``
Notice the space between "...world'" and "FROM ...". Notice the space between "...world'" and "FROM ...".
Join mode: strip whitespace Join mode: strip whitespace
''''''''''''''''''''''''''' """""""""""""""""""""""""""
Ending a line with a '\\' strips all leading and trailing whitespaces of that line joins the line directly (no extra Ending a line with a '\\' strips all leading and trailing whitespaces of that line joins the line directly (no extra
space in between). E.g.:: space in between). E.g.::
...@@ -5783,7 +5835,7 @@ file is multiple times referenced, than the file is not deleted (it would break ...@@ -5783,7 +5835,7 @@ file is multiple times referenced, than the file is not deleted (it would break
references are not found, if they use different colummnnames or tablenames. references are not found, if they use different colummnnames or tablenames.
Mode: table Mode: table
''''''''''' """""""""""
* `table=<table name>` * `table=<table name>`
* `r=<record id>` * `r=<record id>`
...@@ -5791,7 +5843,7 @@ Mode: table ...@@ -5791,7 +5843,7 @@ Mode: table
Deletes the record with id '<record id>' from table '<table name>'. Deletes the record with id '<record id>' from table '<table name>'.
Mode: form Mode: form
'''''''''' """"""""""
* `form=<form name>`