Commit 833cd3bc authored by Carsten  Rose's avatar Carsten Rose
Browse files

Merge branch 'develop' into 'master'

Develop

See merge request !317
parents 08c9ae58 d3df284a
Pipeline #5036 passed with stages
in 3 minutes and 50 seconds
......@@ -5,13 +5,14 @@
# top-most EditorConfig file
root = false
[{*.rst, *.rst.txt}]
[{*.rst,*.rst.txt}]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 3
max_line_length = 80
# MD-Files
[*.md]
......
......@@ -16,6 +16,7 @@
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
......
......@@ -16,6 +16,7 @@
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
......
......@@ -16,6 +16,7 @@
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
......
......@@ -16,6 +16,7 @@
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
......
......@@ -16,6 +16,7 @@
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
......@@ -38,9 +39,15 @@ Form
General
-------
.. important::
Primary key: QFQ expect that each table, which will be loaded into a form, contains a primary key called `id`.
That one should be *autoincrement*. It's not necessary to create a FormElement `id` in a form.
* Forms will be created by using the *Form Editor* on the Typo3 frontend (HTML form).
* The *Form editor* itself consist of two predefined QFQ forms: *form* and *formElement* - these forms are often updated
during the installation of new QFQ versions.
* The *Form editor* itself consist of two predefined QFQ forms: *form* and *formElement* - these forms are regular updated
during installation of newer QFQ versions.
* Every form consist of a) a *Form* record and b) multiple *FormElement* records.
* A form is assigned to a *table*. Such a table is called the *primary table* for this form.
* Forms can roughly categorized into:
......@@ -380,10 +387,13 @@ Syntax: `forwardPage=<mode>|<page>`
.. _form-parameter:
Parameter
^^^^^^^^^
Form.parameter
^^^^^^^^^^^^^^
* The following parameter are optional and can be configured in the *Form.parameter* field.
* The following parameter are optional.
* Each parameter has to be on a single line.
* If a parameter is defined multiple time, the last one is the final one.
* Comment lines have to start with ``#``.
+-----------------------------+--------+----------------------------------------------------------------------------------------------------------+
| Name | Type | Description |
......@@ -501,11 +511,11 @@ Parameter
| requiredPosition | int | See :ref:`requiredPosition` . |
+-----------------------------+--------+----------------------------------------------------------------------------------------------------------+
* Example:
* Example in field Form.parameter::
* maxVisiblePill = 5
* class = container-fluid
* classBody = qfq-form-right
maxVisiblePill = 5
class = container-fluid
classBody = qfq-form-right
.. _submitButtonText:
......@@ -909,8 +919,8 @@ Fields:
.. _`field-value`:
FE: Value
^^^^^^^^^
FormElement.value
^^^^^^^^^^^^^^^^^
By default this field is empty: QFQ will fill it with the corresponding existing column value on form load.
For a customized default value define: ::
......@@ -926,8 +936,8 @@ Report syntax can also be used, see :ref:`report-notation`.
.. _`report-notation`:
FE: 'Report' notation
^^^^^^^^^^^^^^^^^^^^^
FormElement: 'Report' notation
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The FE fields 'value' and 'note' understand the :ref:`Report` syntax. Nested SQL queries as well as links with SIP encoding
are possible. To distinguish between 'Form' and 'Report' syntax, the first line has to be `#!report`::
......@@ -943,10 +953,14 @@ are possible. To distinguish between 'Form' and 'Report' syntax, the first line
.. _fe-parameter-attributes:
Attributes defined in the parameter field
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FormElement.parameter
^^^^^^^^^^^^^^^^^^^^^
See also at specific *FormElement* definitions.
* The following parameter are optional.
* Each parameter has to be on a single line.
* If a parameter is defined multiple time, the last one is the final one.
* Comment lines have to start with ``#``.
* See also documentation at specific *FormElement*.
+---------------------------------+----------------------------------------------------------------------------------------------------------+
| Name | Note |
......@@ -1916,18 +1930,18 @@ current record, either to finalize the upload and/or to delete a previously uplo
The FormElement behaves like a
* 'native FormElement' (showing controls/text on the form) as well as an
* 'action FormElement' by firing queries and doing some additional actions during form save.
* *native FormElement* (showing controls/text on the form) as well as an
* *action FormElement* by firing queries and doing some additional actions during form save.
Inside the *Form editor* it's shown as a 'native FormElement'.
During saving the current record, it behaves like an action FormElement
and will be processed after saving the primary record and before any action FormElements are processed.
* *FormElement.value* = `<string>` - By default, the full path of any already uploaded file is shown. To show something
different, e.g. only the filename, define: ::
different, e.g. only the filename, define:
a) {{filenameBase:V}}
b) {{SELECT SUBSTRING_INDEX( '{{pathFileName:R}}', '/', -1) }}
* ``{{filenameBase:V}}`` (see :ref:STORE_VARS)
* ``{{SELECT SUBSTRING_INDEX( '{{pathFileName:R}}', '/', -1) }}``
See also :ref:`download Button<downloadButton>` to offer a download of an uploaded file.
......@@ -1964,11 +1978,12 @@ FormElement.parameter
* *fileDestination* = `<pathFileName>` - Destination where to copy the file. A good practice is to specify a relative `fileDestination` -
such an installation (filesystem and database) are moveable.
* If the original filename should be part of `fileDestination`, the variable *{{filename}}* (STORE_VARS) can be used. Example ::
* If the original filename should be part of `fileDestination`, the variable *{{filename}}*
(see :ref:STORE_VARS) can be used. Example ::
fileDestination={{SELECT 'fileadmin/user/pictures/', p.name, '-{{filename}}' FROM Person AS p WHERE p.id={{id:R0}} }}
* Several more variants of the filename and also mimetype and filesize are available. See :ref:`store variables form element upload<store_vars_form_element_upload>`.
* Several more variants of the filename and also mimetype and filesize are available. See :ref:STORE_VARS.
* The original filename will be sanitized: only '<alnum>', '.' and '_' characters are allowed. German 'umlaut' will
be replaced by 'ae', 'ue', 'oe'. All non valid characters will be replaced by '_'.
......@@ -2026,7 +2041,7 @@ FormElement.parameter
`fe.value`. The button is only shown if `fe.value` points to a readable file on the server.
* If `downloadButton` is empty, just shows the regular download glyph.
* To just show the filename: `downloadButton = t:{{filenameOnly:V}}`
* To just show the filename: `downloadButton = t:{{filenameOnly:V}}` (see :ref:STORE_VARS)
* Additional attributes might be given like `downloadButton = t:Download|o:check file|G:0`. Please check :ref:`download`.
* *fileUnzip* - If the file is a ZIP file (only then) it will be unzipped. If no directory is given via ``fileUnzip``, the
......@@ -2129,7 +2144,8 @@ with 'my', e.g. 'myUpload1'.
* *FormElement.parameter*:
* *fileDestination* = `<pathFileName>` - determine the path/filename. E.g.::
* *fileDestination* = `<pathFileName>` - define the path/filename
(see :ref:STORE_VARS). E.g.::
fileDestination=fileadmin/person/{{name:R0}}_{{id:R}}/uploads/picture_{{filename}}
......@@ -2212,8 +2228,8 @@ One usecase why to split an upload: annotate individual pages by using the `Form
Class: Action
-------------
Type: before... | after...
^^^^^^^^^^^^^^^^^^^^^^^^^^
FormElement.type: before... | after...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These type of 'action' *FormElements* will be used to implement data validation or creating/updating additional records.
......@@ -2233,8 +2249,8 @@ Types:
.. _sqlValidate:
Parameter: sqlValidate
""""""""""""""""""""""
FormElement.parameter: sqlValidate
""""""""""""""""""""""""""""""""""
Perform checks by firing an SQL query and expecting a predefined number of selected records.
......@@ -2259,60 +2275,64 @@ Parameter: sqlValidate
.. _slave-id:
Parameter: slaveId
""""""""""""""""""
FormElement.parameter: slaveId
""""""""""""""""""""""""""""""
FormElement.parameter
;;;;;;;;;;;;;;;;;;;;;
Most of the slaveId concept is part of sqlInsert / sqlUpdate - see below.
* *slaveId* = `<id>`:
.. note::
* Auto fill: name the action `action`-*FormElement* equal to an existing column (table from the current form definition).
*slaveId* will be automatically filled with the value of the named column.
* *slaveId*: 0 (default) or any integer which references a record.
* Set *slaveId* explicit or by query: ``slaveId = 123`` or ``slaveId = {{SELECT id ...}}``.
* *fillStoreVar* is fired first, than *slaveId*. Don't use ``{{slaveId:V}}`` in *fillStoreVar*.
* To set *slaveId*, a value from STORE_VARS can be used: ``slaveId={{someId:V}}``.
* ``{{slaveId:V}}`` can be used in any query of the current *FormElement* (but not *fillStoreVar*).
* If the *FormElement* name is equal to a column of the primary table: QFQ updates the current loaded primary table
record with the latest *slaveId*.
* If there is no such named column name, set *slaveId* = `0`.
.. important::
* Explicit definition: *slaveId* = `123` or *slaveId* = `{{SELECT id ...}}`
After an INSERT (= *sqlInsert*) the `last_insert_id()` is copied to *{{slaveId:V}}* automatically.
Note:
FormElement.parameter: sqlBefore / sqlInsert / sqlUpdate / sqlDelete / sqlAfter
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
* `{{slaveId:V}}` can be used in any query of the current *FormElement*.
* If the `action`-*FormElement* name exist as a column in the master record: Update that column *automatically* with the
recent slaveId
* After an INSERT the `last_insert_id()` becomes the *{{slaveId:V}}*.
* `fillStoreVar` is fired first, than `slaveId`.
* If `slaveId` is known in `fillStoreVar`, set: `slaveId={{someId:V}}`.
.. tip::
* Flexible way to update record(s), even on different table(s).
* Often used by *FormElement.type=afterSave* or similar.
.. note::
Parameter: sqlBefore / sqlInsert / sqlUpdate / sqlDelete / sqlAfter
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Side note: a) Form.type *beforeLoad|Save|Insert|Update* is independent of b) Form.parameter *sqlBefore* / *sqlAfter*.
Think of that a) represents a class and b) is a property of a class.
* 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.
All of the following attributes are optional:
FormElement.parameter
;;;;;;;;;;;;;;;;;;;;;
* *requiredList = [<fe.name>,]* - List of `native`-*FormElement* names.
* *requiredList* = `<fe.name[s]>` - List of `native`-*FormElement*: only if all of those elements are filled, the current
`action`-*FormElement* will be processed.
* Simplifies to completely enable or disable the current FormElement.
* If empty: process the current FormElement. *This the typical situation*.
* If not empty, all named FormElements will be checked: if all of them are filled, the current
*FormElement* will be processed else not.
* Note: The *requiredList* is independent of *FormElement.mode=required*.
* *sqlBefore* = `{{<query>}}` - always fired (before any *sqlInsert*, *sqlUpdate*, ..)
* *sqlInsert* = `{{<query>}}` - fired if *slaveId* == `0` or *slaveId* == `''`.
* *sqlUpdate* = `{{<query>}}` - fired if *slaveId* > `0`.
* *sqlDelete* = `{{<query>}}` - fired if *slaveId* > `0`, after *sqlInsert* or *sqlUpdate*. Be careful not to delete filled records!
Always add a check, if values given, not to delete the record! *sqlHonorFormElements* helps to skip such checks.
* *sqlAfter* = `{{<query>}}` - always fired (after *sqlInsert*, *sqlUpdate* or *sqlDelete*).
* *sqlHonorFormElements* = `<fe.name[s]>` list of *FormElement* names (this parameter is optional).
* *sqlBefore = {{<query>}}* - always fired (before any *sqlInsert*, *sqlUpdate*, ..)
* *sqlInsert = {{<query>}}* - fired if *slaveId == 0* or *slaveId == ''*.
* *sqlUpdate = {{<query>}}* - fired if *slaveId > 0*.
* *sqlDelete = {{<query>}}* - fired if *slaveId > 0*, after *sqlInsert* or *sqlUpdate*. Be careful not to delete
filled records! Look for *sqlHonorFormElements* to simplify checks.
* *sqlAfter = {{<query>}}* - always fired (after *sqlInsert*, *sqlUpdate* or *sqlDelete*).
* *sqlHonorFormElements = [<fe.name>,]* list of *FormElement* names.
* If one of the named *FormElements* is not empty:
* If one of the named *FormElements* is given:
* fire *sqlInsert* if *slaveId* == `0`,
* fire *sqlUpdate* if *slaveId* > `0`
* fire *sqlInsert* if *slaveId == 0*
* fire *sqlUpdate* if *slaveId* > 0*
* If all of the named *FormElements* are empty:
* fire *sqlDelete* if *slaveId* > `0`
* fire *sqlDelete* if *slaveId > 0*
Example
......@@ -2449,35 +2469,61 @@ See also :ref:`copy-form`.
Form Magic
----------
* Read the following carefully to understand and use QFQ form functionality.
* Check also the :ref:`Form process order<form-process-order>`.
Parameter
^^^^^^^^^
* Table column `id`: QFQ expect that each table, which will be loaded in a form, contains an autoincrement column of name `id`.
It's not necessary to create a FormElement `id` in a form - but it won't disturb.
.. important::
SIP parameter name = primary table column name
Parameter (one or more) in the SIP url, which *exist* as a column in the form table (SIP parameter name is equal to a
table column name), will be automatically saved in the record!
* Parameter (one or more) in the SIP url, which exist as a column in the form table (SIP parameter name is equal to a table column name),
will be automatically saved in the record. This acts as 'hidden magic'.
.. Comment to separate block
Example: A slave record (e.g. an address of a person) has to be assigned to a master record (a person). Just give the
`pId` in the link who calls the address form. The following creates a 'new' button for an address for all persons, and
the pId will be automatically saved in the address table: ::
Example: A slave record (e.g. an address of a person) has to be assigned to a master record (a person):
``person.id=address.pId``. Just give the `pId` in the link who calls the address form. The following creates a 'new'
button for an address for all persons, and the pId will be automatically saved in the address table: ::
SELECT CONCAT('p:{{pageAlias:T}}&form=address&r=0&pId=', p.id) AS _pagen FROM Person AS p
Such parameter, which the form expects to be in the SIP url, should be specified in Form.permitNew and/or Form.permitEdit.
It's only a check for the webmaster, not to forgot a parameter in a SIP url.
Remember: it's a good practice to specify such parameter in Form.permitNew and/or Form.permitEdit. It's only a check for
the webmaster, not to forgot a parameter in a SIP url.
.. note::
FormElement.type = subrecord
Subrecord's typically use `new`, `edit` and `delete` links. To inject parameter in those QFQ created
links, use `FormElement.parameter.detail` . See :ref:`subrecord-option`.
.. note::
FormElement.type = extra
If a table column should be saved with a specific value, and the value should not be shown to the user, the FE.type='extra'
will do the job. The value could be static or calculated on the fly. Often it's easier to specify such a parameter/value
in the SIP url, but if the form is called from multiple places, an `extra` element is more suitable.
In traditional web applications HTML input fields of type hidden are often used for this. Such content can be tempered by
an attacker. It's much safer to use SIP parameter or *FormElement.type=extra* fields.
.. note::
* FormElement.type = subrecord
slaveId concept
Subrecord's will automatically create `new`, `edit` and `delete` links. To inject parameter in those automatically created
links, use `FormElement.parameter.detail` . See :ref:`subrecord-option`.
For each *native* and *action* FormElement a few custom SQL command can be fired (*sqlBefore, sqlAfter, sqlInsert,
sqlUpdate, sqlDelete*). To assist the application developer the slaveId concept automatically checks if a
* *sqlInsert* or *sqlUpdate* has to be fired
* or even a *sqlDelete*.
* automatically update the named column.
* FormElement.type = extra
For details see :ref:`slave-id`
If a table column should be saved with a specific value, and the value should not be shown to the user, the FE.type='extra'
will do the job. The value could be static or calculated on the fly. Often it's easier to specify such a parameter/value
in the SIP url, but if the form is called from multiple places, an `extra` element is more suitable.
Variables
^^^^^^^^^
......@@ -3491,5 +3537,14 @@ If there are several T3/QFQ instances and if forms should be imported frequently
Form As File
------------
* Forms are synced between the database and form files located in the form directory contained in the qfq project directory. See: :ref:`qfq-project-path-php`
* **ATTENTION** : Form and FormElement changes in the database are only registered if they are performed by the form editor. Otherwise they might get overwritten during the next file sync!
* **Sync** : Forms are synced between the database and form files located in the form directory contained in the qfq project directory. See: :ref:`qfq-project-path-php`
* The form files have precedence over database forms. i.e. If the form has changed both in the file and database since the last sync, then the database changes are lost. (But there is a backup, see bellow).
* **ATTENTION** : Form and FormElement changes in the database are only registered if they are performed by the form editor. Otherwise they might get overwritten during the next file sync!
* **First Export** : If there is no form directory then it is created and all forms are exported from the database once.
* **Form Backups** : On every change of a form (both in file and in database) a new backup file is saved in `qfqProject/form/.backup`
* To restore a backup file just copy it into the parent folder (`form`) and rename it to `<formName>.json`. (Don't forget to adjust the file read/write rights accordingly)
* **Form Copy** : To copy a form simply duplicate the corresponding form file `<formName>.json` and rename the duplicate accordingly `<newFormName>.json>`. (Don't forget to adjust the file read/write rights accordingly)
......@@ -16,6 +16,7 @@
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
......
......@@ -16,6 +16,7 @@
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
......
......@@ -16,6 +16,7 @@
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
......@@ -271,38 +272,9 @@ Setup a *report* to manage all *forms*:
* Create a Typo3 page.
* Set the 'URL Alias' to `form` (recommended) or the individual defined value in parameter `editFormPage` (configuration_).
* Insert a content record of type *qfq*.
* In the bodytext insert the following code::
# If there is a form given by SIP: show
form={{form:SE}}
# In case indexQfq != indexData, set dbIndex=indexQfq.
dbIndex = {{indexQfq:Y}}
10 {
# Table header.
sql = SELECT CONCAT('p:{{pageAlias:T}}&form=form|A:data-reference=newForm') as _pagen, '#', 'Name', 'Title', 'Table', ''
head = {{'b|p:id={{pageAlias:T}}&form=copyFormFromExt|t:Copy form from ExtForm|A:data-reference=copyForm' AS _link}}
<table class="table table-hover qfq-table-50 tablesorter tablesorter-filter" id="{{pageAlias:T}}-form">
tail = </table>
rbeg = <thead class="qfq-sticky"><tr>
rend = </tr></thead>
fbeg = <th>
fend = </th>
10 {
# All forms
sql = SELECT CONCAT('p:{{pageAlias:T}}&form=form&r=', f.id, '|A:data-reference=editForm', f.name) as _pagee
, f.id, f.name, QMORE(strip_tags(f.title), 50), f.tableName
, CONCAT('U:form=form&r=', f.id, '|A:data-reference=deletForm') as _paged
FROM Form AS f
ORDER BY f.name
rbeg = <tr>
rend = </tr>
fbeg = <td>
fend = </td>
}
}
* In the bodytext insert the following code (see explanation of code: :ref:`reportAsFile`)::
file=_formEditor
To keep the overview about all forms, it's useful to know which form has been used, how often, on which
page and when. Find these information included in the :ref:`form-editor-usage` report.
......@@ -491,6 +463,9 @@ Extension Manager: QFQ Configuration
| showDebugInfo | auto | FE - Possible values: yes|no|auto|download. For 'auto': If a BE User is |
| | | logged in, a debug information will be shown on the FE. |
+-----------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| reportMinPhpVersion | auto | Possible values: yes|no|auto. For 'auto': If a BE User is logged in, it |
| | | becomes 'yes'. If installed PHP version is too low, report and stop QFQ. |
+-----------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| Database |
+-----------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| init | init=SET names utf8; SET sql_mode = | Global init for using the database. For 'sql_mode="NO_ENGINE_SUBSTITUTION"'|
......@@ -706,7 +681,10 @@ Take care for minimum and maximum indexes (do not render the links if out of ran
DB USER privileges
^^^^^^^^^^^^^^^^^^
The specified DB User needs privileges to the database of at least: SELECT / INSERT / UPDATE / DELETE / SHOW.
The specified DB User needs privileges
* to the QFQ database of at least: SELECT / INSERT / UPDATE / DELETE / SHOW.
* to the Typo3 database of at least table `tt_content` with SELECT.
To apply automatically QFQ-'DB UPDATE' the following rights are mandatory too: CREATE / ALTER
......
......@@ -16,6 +16,7 @@
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
......
.. ==================================================
.. Header hierachy
.. ==================================================
.. ==================================================
.. Header hierarchy
.. ==
.. --
.. ^^
.. ''
.. ""
.. ;;
.. ,,
..
.. --------------------------------------------------
.. Best Practice T3 reST https://docs.typo3.org/typo3cms/drafts/github/xperseguers/RstPrimer/
.. External Links: `Bootstrap <http://getbootstrap.com/>`_:
.. Add Images: https://wiki.typo3.org/ReST_Syntax#Images
.. --------------------------------------------used to the update the records specified ------
.. Best Practice T3 reST: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/CheatSheet.html
.. Reference: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/Index.html
.. Italic *italic*
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
.. Admonitions
.. .. note:: .. important:: .. tip:: .. warning::
.. Color: (blue) (orange) (green) (red)
..
.. Definition:
.. some text becomes strong (only one line)
.. description has to indented
..
.. -*- coding: utf-8 -*- with BOM.
......
.. ==================================================
.. Header hierachy
.. ==================================================
.. ==================================================
.. Header hierarchy
.. ==
.. --
.. ^^
.. ''
.. ""
.. ;;
.. ,,
..
.. --------------------------------------------------
.. Best Practice T3 reST https://docs.typo3.org/typo3cms/drafts/github/xperseguers/RstPrimer/
.. External Links: `Bootstrap <http://getbootstrap.com/>`_:
.. Add Images: https://wiki.typo3.org/ReST_Syntax#Images
.. --------------------------------------------used to the update the records specified ------
.. Best Practice T3 reST: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/CheatSheet.html
.. Reference: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/Index.html
.. Italic *italic*
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
.. Admonitions
.. .. note:: .. important:: .. tip:: .. warning::
.. Color: (blue) (orange) (green) (red)
..
.. Definition:
.. some text becomes strong (only one line)
.. description has to indented
.. -*- coding: utf-8 -*- with BOM.
......
......@@ -16,6 +16,7 @@
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
......
.. ==================================================
.. ==================================================
.. ==================================================
.. Header hierarchy
.. ==
.. --
.. ^^
.. ''
.. ""
.. ;;
.. ,,
..
.. --------------------------------------------------
.. Best Practice T3 reST https://docs.typo3.org/typo3cms/drafts/github/xperseguers/RstPrimer/
.. --------------------------------------------used to the update the records specified ------
.. Best Practice T3 reST: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/CheatSheet.html
.. Reference: https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/WritingReST/Index.html
.. Italic *italic*
.. Bold **bold**
.. Code ``text``
.. External Links: `Bootstrap <http://getbootstrap.com/>`_
.. Add Images: https://wiki.typo3.org/ReST_Syntax#Images
.. Internal Link: :ref:downloadButton (default url text) or :ref:`download Button<downloadButton>` (explicit url text)
.. Add Images: .. image:: ../Images/a4.jpg
..
..
.. Admonitions
.. .. note:: .. important:: .. tip:: .. warning::
.. Color: (blue) (orange) (green) (red)
..