From c73a1cdd97f24724ca99f3326981ef501a07d880 Mon Sep 17 00:00:00 2001 From: Carsten Rose <carsten.rose@math.uzh.ch> Date: Sat, 17 Jun 2017 18:20:51 +0200 Subject: [PATCH] Manual.rst, formEditor.sql: add several links in Form 'FormEditor' to the online documentation. --- extension/Documentation/Manual.rst | 190 ++++++++++++++++------------- extension/config.qfq.example.ini | 4 +- extension/qfq/qfq/Constants.php | 3 + extension/qfq/qfq/store/Config.php | 2 + extension/qfq/qfq/store/Store.php | 4 +- extension/qfq/sql/formEditor.sql | 62 +++++----- 6 files changed, 147 insertions(+), 118 deletions(-) diff --git a/extension/Documentation/Manual.rst b/extension/Documentation/Manual.rst index 8e6522b51..676168320 100644 --- a/extension/Documentation/Manual.rst +++ b/extension/Documentation/Manual.rst @@ -334,6 +334,8 @@ config.qfq.ini | | | time QFQ is called - *not* recommended! | | | | 'never': never apply DB Updates. | +-----------------------------+-------------------------------------------------+----------------------------------------------------------------------------+ +| DOCUMENTATION_QFQ | DOCUMENTATION_QFQ=http://docs.typo3.org... | Link to the online documentation of QFQ. | ++-----------------------------+-------------------------------------------------+----------------------------------------------------------------------------+ Example: *typo3conf/config.qfq.ini* @@ -403,6 +405,11 @@ Example: *typo3conf/config.qfq.ini* ;NEW_BUTTON_CLASS = btn btn-default navbar-btn ;NEW_BUTTON_GLYPH_ICON = glyphicon-plus + ; auto | always | never + ;DB_UPDATE=auto + + ;DOCUMENTATION_QFQ = https://docs.typo3.org/typo3cms/drafts/github/T3DocumentationStarter/Public-Info-053/Manual.html + .. It's also possible to setup custom variables in `config.qfq.ini`. @@ -1751,8 +1758,6 @@ Type: pill * *maxVisiblePill*: `<nr>` - Number of Pill-Buttons shown. Undefined means unlimited. Excess Pill buttons will be displayed as a drop-down menu. -.. _class-native: - Type: templateGroup ^^^^^^^^^^^^^^^^^^^ @@ -1823,95 +1828,104 @@ In the parameter field define: :: The `slaveId` needs attention: the placeholder `%d` starts always at 1. The `LIMIT` directive starts at 0 - therefore use `%D` instead of `%d`, cause `%D` is always one below `%d` - but can **only** be used on the action element. +.. _class-native: + Class: Native ------------- Fields: -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -| Name | Type | Description | -+===============+=============================+===================================================================================================+ -| id | int | | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -| formId | int | | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|feIdContainer | int | | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|enabled | enum('yes'|'no') | | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|dynamicUpdate | enum('yes'|'no') | In the browser, *FormElements* with "dynamicUpdate='yes'" will be updated depending on user | -| | | input. :ref:`dynamic-update` | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|name | string | | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|label | string | Label of *FormElement*. Depending on layout model, left or on top of the *FormElement* | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|mode | enum('show', 'readonly', | *Show*: regular user input field. This is the default. | -| | 'required', | *Required*: User has to specify a value. Typically, an <empty string> represents 'no value'. | -| | 'disabled' ) | *Readonly*: user can't change any data. Data not saved. | -| | | *Disabled*: *FormElement* is not visible. | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|modeSql | `select` statement with | A value given here overwrites the setting from `mode`. Most usefull with :ref:`dynamic-update`. | -| | a value like in `mode` | E.g.: {{SELECT IF( '{{otherFunding:FR:alnumx}}'='yes' ,'show', 'hidden' }} | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|class | enum('native', 'action', | Details below. | -| | 'container') | | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|type | enum('checkbox', 'date', 'time', 'datetime', 'dateJQW', 'datetimeJQW', 'extra', 'gridJQW', 'text', 'editor', 'note', | -| | 'password', 'radio', 'select', 'subrecord', 'upload', 'fieldset', 'pill', 'beforeLoad', 'beforeSave', | -| | 'beforeInsert', 'beforeUpdate', 'beforeDelete', 'afterLoad', 'afterSave', 'afterInsert', 'afterUpdate', 'afterDelete', | -| | 'sendMail') | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|encode | 'none', 'specialchar' | With 'specialchar' (default) the chars <>"'& will be encoded to their htmlentity. | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|checkType | enum('min|max', 'pattern', | | -| | 'number', 'email') | | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|checkPattern | 'regexp' |If $checkType=='pattern': pattern to match | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|onChange | string |List of *FormElement*-names of current form, separated by ', ', If one of the named *FormElements* | -| | | change, reload own data / status / mode | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|ord | string | Display order of *FormElements* ('order' is a reserved keyword) | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|tabindex | string |HTML tabindex attribute | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|size | string |Visible length of input element. Might be ommited, depending on the choosen form layout. | -| | |Format: <width>,<height> (in characters) | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|bsLabelColumns | string | Number of bootstrap grid columns for label. By default empty, value inherits from the form. | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|bsInputColumns | string | Number of bootstrap grid columns for input. By default empty, value inherits from the form. | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|bsNoteColumns | string | Number of bootstrap grid columns for note. By default empty, value inherits from the form. | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|maxLength | string |Maximum characters for input. | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|note | string |Note of *FormElement*. Depending on layout model, right or below of the *FormElement*. | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|tooltip | text |Display this text as tooltip on mouse over. | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|placeholder | string |Text, displayed inside the input element in light grey. | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|clientJs | text |Javascript called on 'on change' *FormElement* | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|value | text |Default value | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|sql1 | text |SQL query | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|parameter | text |Might contain misc parameter. Depends on the type of *FormElement*. | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|feGroup | string | Comma-separated list of Typo3 FE Group ID. NOT SURE IF THIS WILL BE IMPLEMENTED. Native | -| | | *FormElements*, fieldsets and pills can be assigned to feGroups. Group status: show, hidden, | -| | | disabled. Group Access: FE-Groups. User will be assigned to FE-Groups and the form definition | -| | | reference such FE-groups. Easy way of granting permission. | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|deleted | string | 'yes'|'no'. | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|modified | timestamp |updated automatically through stored procedure | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ -|created | datetime |set once through QFQ | -+---------------+-----------------------------+---------------------------------------------------------------------------------------------------+ ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +| Name | Type | Description | ++=====================+=============================+=====================================================================================================+ +|Container | int | 0 or *FormElement*.id of container element (pill, fieldSet, templateGroup) part the current *Form* | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Enabled | enum('yes'|'no') | Process the current FormElement | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Dynamic Update | enum('yes'|'no') | In the browser, *FormElements* with "dynamicUpdate='yes'" will be updated depending on user | +| | | input. :ref:`dynamic-update` | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Name | string | | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Label | string | Label of *FormElement*. Depending on layout model, left or on top of the *FormElement* | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Mode | enum('show', 'readonly', | *Show*: regular user input field. This is the default. | +| | 'required', | *Required*: User has to specify a value. Typically, an <empty string> represents 'no value'. | +| | 'disabled' ) | *Readonly*: user can't change any data. Data not saved. | +| | | *Disabled*: *FormElement* is not visible. | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Mode sql | `SELECT` statement with | A value given here overwrites the setting from `mode`. Most usefull with :ref:`dynamic-update`. | +| | a value like in `mode` | E.g.: {{SELECT IF( '{{otherFunding:FR:alnumx}}'='yes' ,'show', 'hidden' }} | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Class | enum('native', 'action', | Details below. | +| | 'container') | | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Type | enum('checkbox', 'date', 'time', 'datetime', 'dateJQW', 'datetimeJQW', 'extra', 'gridJQW', 'text', 'editor', 'note', | +| | 'password', 'radio', 'select', 'subrecord', 'upload', 'fieldset', 'pill', 'beforeLoad', 'beforeSave', | +| | 'beforeInsert', 'beforeUpdate', 'beforeDelete', 'afterLoad', 'afterSave', 'afterInsert', 'afterUpdate', 'afterDelete', | +| | 'sendMail') | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Encode | 'none', 'specialchar' | With 'specialchar' (default) the chars <>"'& will be encoded to their htmlentity. _`field-encode` | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Check Type | enum('min|max', 'pattern', | _`field-checkType`: | +| | 'number', 'email') | | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Check Pattern | 'regexp' |If $checkType=='pattern': pattern to match | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Order | string | Display order of *FormElements* ('order' is a reserved keyword) _`field-ord`: | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|tabindex | string |HTML tabindex attribute _`field-tabindex`: | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Size | string |Visible length of input element. Might be ommited, depending on the choosen form layout. | +| | |Format: <width>,<height> (in characters) _`field-size`: | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|BS Label Columns | string | Number of bootstrap grid columns for label. By default empty, value inherits from the form. | +| | | _`field-bsLabelColumns`: | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|BS Input Columns | string | Number of bootstrap grid columns for input. By default empty, value inherits from the form. | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|BS Note Columns | string | Number of bootstrap grid columns for note. By default empty, value inherits from the form. | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Label / Input / Note | enum(...) | Switch on/off opening|closing of bootstrap form classes _`field-rowLabelInputNote`: | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Maxlength | string |Maximum characters for input. _`field-maxLength`: | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Note | string |Note of *FormElement*. Depending on layout model, right or below of the *FormElement*. _`field-note` | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Tooltip | text |Display this text as tooltip on mouse over. _`field-tooltip`: | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Placeholder | string |Text, displayed inside the input element in light grey. _`field-placeholder`: | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|value | text |Default value: See `field-value`_ | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|sql1 | text |SQL query | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Parameter | text |Might contain misc parameter. See `fe-parameter-attributes`_ | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|feGroup | string | Comma-separated list of Typo3 FE Group ID. NOT SURE IF THIS WILL BE IMPLEMENTED. Native | +| | | *FormElements*, fieldsets and pills can be assigned to feGroups. Group status: show, hidden, | +| | | disabled. Group Access: FE-Groups. User will be assigned to FE-Groups and the form definition | +| | | reference such FE-groups. Easy way of granting permission. | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ +|Deleted | string | 'yes'|'no'. | ++---------------------+-----------------------------+-----------------------------------------------------------------------------------------------------+ + +.. _`field-value`: + +FE: 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: :: + + {{SELECT IF('{{column:RE}}'='','custom default',{{column:R}}) }} + + +For non primary records, this is the place to load an existing value. E.g. we're on a 'Person' detail form and would like +to edit, on the same form, a corresponding person email address (which is in a separate table): :: + + {{SELECT a.email FROM Address AS a WHERE a.pId={{id:R0}} ORDER BY a.id LIMIT 1}} + .. _fe-parameter-attributes: @@ -1937,7 +1951,7 @@ See also at specific *FormElement* definitions. +------------------------+--------+----------------------------------------------------------------------------------------------------------+ | wrapRow | string | If specified, skip default wrapping (`<div class='col-md-?>`). Instead the given string is used. | +------------------------+--------+ | -| wrapInput | string | | +| wrapLabel | string | | +------------------------+--------+ | | wrapInput | string | | +------------------------+--------+ | @@ -2396,6 +2410,8 @@ Type: select * *emptyHide*: Existence of this item hides the empty entry. This is useful for e.g. Enums, which have an empty entry and the empty value should not be an option to be selected. +.. _`subrecord-option`: + Type: subrecord ^^^^^^^^^^^^^^^ diff --git a/extension/config.qfq.example.ini b/extension/config.qfq.example.ini index f0116ac63..b4c182684 100644 --- a/extension/config.qfq.example.ini +++ b/extension/config.qfq.example.ini @@ -88,4 +88,6 @@ WKHTMLTOPDF = /opt/wkhtmltox/bin/wkhtmltopdf ;NEW_BUTTON_GLYPH_ICON = glyphicon-plus ; auto | always | never -;DB_UPDATE=auto \ No newline at end of file +;DB_UPDATE=auto + +;DOCUMENTATION_QFQ = https://docs.typo3.org/typo3cms/drafts/github/T3DocumentationStarter/Public-Info-053/Manual.html diff --git a/extension/qfq/qfq/Constants.php b/extension/qfq/qfq/Constants.php index 737609c53..6fb31faf7 100644 --- a/extension/qfq/qfq/Constants.php +++ b/extension/qfq/qfq/Constants.php @@ -412,6 +412,9 @@ const SYSTEM_DB_UPDATE_ALWAYS = 'always'; const SYSTEM_DB_UPDATE_NEVER = 'never'; const SYSTEM_DB_UPDATE_AUTO = 'auto'; +const DOCUMENTATION_QFQ = 'DOCUMENTATION_QFQ'; +const DOCUMENTATION_QFQ_URL = 'https://docs.typo3.org/typo3cms/drafts/github/T3DocumentationStarter/Public-Info-053/Manual.html'; + const GET_EXTRA_LENGTH_TOKEN = '_'; // Not stored in config.qfq.ini, but used in STORE_SYSTEM diff --git a/extension/qfq/qfq/store/Config.php b/extension/qfq/qfq/store/Config.php index 60eff43a4..7a15a77a7 100644 --- a/extension/qfq/qfq/store/Config.php +++ b/extension/qfq/qfq/store/Config.php @@ -162,6 +162,8 @@ class Config { Support::setIfNotSet($config, SYSTEM_DB_UPDATE, SYSTEM_DB_UPDATE_AUTO); + Support::setIfNotSet($config, DOCUMENTATION_QFQ, DOCUMENTATION_QFQ_URL); + return $config; } diff --git a/extension/qfq/qfq/store/Store.php b/extension/qfq/qfq/store/Store.php index eff0fc505..ec8fa803f 100644 --- a/extension/qfq/qfq/store/Store.php +++ b/extension/qfq/qfq/store/Store.php @@ -169,7 +169,7 @@ class Store { STORE_ADDITIONAL_FORM_ELEMENTS => false ]; - self::fillSystemStore($fileConfigIni); + self::fillStoreSystem($fileConfigIni); self::fillStoreTypo3($bodytext); self::fillStoreClient(); self::fillStoreSip(); @@ -182,7 +182,7 @@ class Store { * @throws CodeException * @throws qfq\UserFormException */ - private static function fillSystemStore($fileConfigIni = '') { + private static function fillStoreSystem($fileConfigIni = '') { $cfg = new Config(); $config = $cfg->readConfig($fileConfigIni); diff --git a/extension/qfq/sql/formEditor.sql b/extension/qfq/sql/formEditor.sql index ac453fc0c..af3b42603 100644 --- a/extension/qfq/sql/formEditor.sql +++ b/extension/qfq/sql/formEditor.sql @@ -157,8 +157,10 @@ VALUES INSERT INTO FormElement (formId, name, label, mode, type, checkType, class, ord, size, maxLength, note, clientJs, value, sql1, parameter, feIdContainer, subrecordOption, modeSql, placeholder, encode, dynamicUpdate) VALUES + # Make the form a 'delete form' for records Form/FormElement. (1, 'Delete FE', '', 'show', 'beforeDelete', 'all', 'action', 100, 0, 0, '', '', '', '', 'sqlAfter={{DELETE FROM FormElement WHERE formId={{id:R}} }}', 0, '', '', '', 'none', 'no'), + (1, 'name', 'Name', 'required', 'text', 'alnumx', 'native', 120, 0, 0, '', '', '', '', 'autofocus', 1, '', '', '', 'specialchar', 'no'), (1, 'title', 'Title', 'show', 'text', 'all', 'native', 130, 0, 0, '', '', '', '', '', 1, '', '', '', 'none', 'no'), @@ -223,51 +225,55 @@ INSERT INTO FormElement (formId, name, label, mode, type, checkType, class, ord, bsNoteColumns, modeSql, placeholder, encode) VALUES - (2, 'feIdContainer', 'Container', 'show', 'select', 'all', 'native', 120, 0, 0, '', '', '', + (2, 'feIdContainer', 'Container', 'show', 'select', 'all', 'native', 120, 0, 0, + '<a href="{{DOCUMENTATION_QFQ:Y}}#class-container">Info</a>', '', '', '{{!SELECT fe.id, CONCAT(fe.type, " / ", fe.name) FROM FormElement As fe WHERE fe.formId={{formId:S0}} AND fe.class="container" ORDER BY fe.type, fe.name }}', 'emptyItemAtStart', 100, '', 'no', '', '', '', '{{SELECT IF(COUNT(fe.id)>0, "show", "hidden") FROM Form AS f LEFT JOIN FormElement AS fe ON f.id=fe.formId AND fe.class="container" WHERE f.id={{formId:S0}} GROUP BY f.id}}', '', 'specialchar'), - (2, 'enabled', 'Enabled', 'show', 'checkbox', 'all', 'native', 130, 0, 0, '', '', '', '', '', 100, '', 'no', '', '', '', '', '', 'specialchar'), - (2, 'dynamicUpdate', 'Dynamic Update', 'show', 'checkbox', 'all', 'native', 135, 0, 0, 'On change, this element will be updated and trigger other.', - '', '', '', '', 100, '', 'no', '3', '2', '7', '', '', 'specialchar'), - (2, 'name', 'Name', 'show', 'text', 'all', 'native', 140, 0, 0, '', '', '', '', '', 100, '', 'no', '', '', '', '', '', 'specialchar'), - (2, 'label', 'Label', 'show', 'text', 'all', 'native', 150, 0, 0, '', '', '', '', '', 100, '', 'no', '', '', '', '', '', 'none'), - (2, 'mode', 'Mode', 'show', 'radio', 'all', 'native', 160, 0, 0, '', '', '', '', 'buttonClass=btn-default', 100, '', 'no', '', '', '', '', '', 'specialchar'), - (2, 'modeSql', 'Mode sql', 'show', 'text', 'all', 'native', 170, '70,2', 0, '', '', '', '', '', 100, '', 'no', '', '', '', '', '', 'none'), - (2, 'class', 'Class', 'show', 'select', 'all', 'native', 180, 0, 0, '', '', '{{class:FSRD0:alnumx}}', '', '', 100, '', 'yes', '', '', '', '', '', 'none'), - (2, 'type', 'Type', 'show', 'select', 'all', 'native', 190, 0, 0, '', '', '', '', + (2, 'enabled', 'Enabled', 'show', 'checkbox', 'all', 'native', 130, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#class-native">Info</a>', '', '', '', '', 100, '', 'no', '', '', '', '', '', 'specialchar'), + (2, 'dynamicUpdate', 'Dynamic Update', 'show', 'checkbox', 'all', 'native', 135, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#dynamic-update">Info</a>', + '', '', '', '', 100, '', 'no', '', '', '', '', '', 'specialchar'), + (2, 'name', 'Name', 'show', 'text', 'all', 'native', 140, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#class-native">Info</a>', '', '', '', '', 100, + '<a href="{{DOCUMENTATION_QFQ:Y}}#class-native">Info</a>', 'no', '', '', '', '', '', 'specialchar'), + (2, 'label', 'Label', 'show', 'text', 'all', 'native', 150, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#class-native">Info</a>', '', '', '', '', 100, '', 'no', '', '', '', '', '', 'none'), + (2, 'mode', 'Mode', 'show', 'radio', 'all', 'native', 160, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#class-native">Info</a>', '', '', '', 'buttonClass=btn-default', 100, '', 'no', '', '', '', '', '', 'specialchar'), + (2, 'modeSql', 'Mode sql', 'show', 'text', 'all', 'native', 170, '70,2', 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#dynamic-update">Info</a>', '', '', '', '', 100, '', 'no', '', '', '', '', '', 'none'), + (2, 'class', 'Class', 'show', 'select', 'all', 'native', 180, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#class-container">Info</a>', '', '{{class:FSRD0:alnumx}}', '', '', 100, '', 'yes', '', '', '', '', '', 'none'), + + (2, 'type', 'Type', 'show', 'select', 'all', 'native', 190, 0, 0, + '{{SELECT IF( "{{class:FRD0:alnumx}}"="native","<a href=\'{{DOCUMENTATION_QFQ:Y}}#class-native\'>Info</a>", IF("{{class:FRD0:alnumx}}"="action","<a href=\'{{DOCUMENTATION_QFQ:Y}}#class-action\'>Info</a>", "<a href=\'{{DOCUMENTATION_QFQ:Y}}#class-container\'>Info</a>") ) }}', + '', '', '', 'itemList={{SELECT IF( "{{class:FRD0:alnumx}}"="native","checkbox,date,time,datetime,dateJQW,datetimeJQW,extra,gridJQW,text,editor,note,password,radio,select,subrecord,upload", IF("{{class:FRD0:alnumx}}"="action","beforeLoad,beforeSave,beforeInsert,beforeUpdate,beforeDelete,afterLoad,afterSave,afterInsert,afterUpdate,afterDelete,sendMail,paste", "fieldset,pill,templateGroup") ) }}', 100, '', 'yes', '', '', '', '', '', 'specialchar'), - (2, 'subrecordOption', 'Subrecord Option', 'show', 'checkbox', 'all', 'native', 200, 0, 0, '', '', '', '', + (2, 'subrecordOption', 'Subrecord Option', 'show', 'checkbox', 'all', 'native', 200, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#subrecord-option">Info</a>', '', '', '', '', 100, '', 'yes', '', '', '', '{{ SELECT IF("{{type:FRE:alnumx}}"="subrecord" AND "{{class:FRE:alnumx}}"="native", "show", "hidden") }}', '', 'specialchar'), - (2, 'encode', 'Encode', 'show', 'radio', 'all', 'native', 300, 0, 0, '', '', '', '', 'buttonClass=btn-default', 101, '', 'no', '', '', '', '', '', 'specialchar'), - (2, 'checkType', 'Check Type', 'show', 'radio', 'all', 'native', 310, 0, 0, '', '', '', '', 'buttonClass=btn-default', 101, '', 'yes', '', '', '', '', '', 'specialchar'), - (2, 'checkPattern', 'Check Pattern', 'show', 'text', 'all', 'native', 320, 0, 0, '', '', '', '', '', 101, '', 'yes', '', '', '', + (2, 'encode', 'Encode', 'show', 'radio', 'all', 'native', 300, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-encode">Info</a>', '', '', '', 'buttonClass=btn-default', 101, '', 'no', '', '', '', '', '', 'specialchar'), + (2, 'checkType', 'Check Type', 'show', 'radio', 'all', 'native', 310, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-checkType">Info</a>', '', '', '', 'buttonClass=btn-default', 101, '', 'yes', '', '', '', '', '', 'specialchar'), + (2, 'checkPattern', 'Check Pattern', 'show', 'text', 'all', 'native', 320, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-checkType">Info</a>', '', '', '', '', 101, '', 'yes', '', '', '', '{{ SELECT IF("{{checkType:FRE:alnumx}}"="pattern" OR "{{checkType:FRE:allbut}}" LIKE "min%", "show", "hidden") }}', '', 'none'), - (2, 'onChange', 'JS onChange', 'show', 'text', 'all', 'native', 330, 0, 0, '', '', '', '', '', 101, '', 'no', '', '', '', '', '', 'none'), - (2, 'ord', 'Order', 'show', 'text', 'all', 'native', 340, 0, 0, '', '', + #(2, 'onChange', 'JS onChange', 'show', 'text', 'all', 'native', 330, 0, 0, '', '', '', '', '', 101, '', 'no', '', '', '', '', '', 'none'), + (2, 'ord', 'Order', 'show', 'text', 'all', 'native', 340, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-ord">Info</a>', '', '{{SELECT IF({{ord:R0}}=0, MAX(IFNULL(fe.ord,0))+10,{{ord:R0}}) FROM (SELECT 1) AS a LEFT JOIN FormElement AS fe ON fe.formId={{formId:S0}} GROUP BY fe.formId}}', '', '', 101, '', 'no', '', '', '', '', '', 'specialchar'), - (2, 'tabindex', 'tabindex', 'show', 'text', 'all', 'native', 350, 0, 0, '', '', '', '', '', 101, '', 'no', '', '', '', '', '', 'specialchar'), - (2, 'size', 'Size', 'show', 'text', 'all', 'native', 400, 0, 0, '', '', '', '', '', 102, '', 'no', '', '', '', '', '', 'specialchar'), - (2, 'bsLabelColumns', 'BS Label Columns', 'show', 'text', 'all', 'native', 410, 0, 0, '', '', '', '', '', 102, '', 'no', '', '', '', '', '{{bsLabelColumns:Y}}', 'specialchar'), + (2, 'tabindex', 'tabindex', 'show', 'text', 'all', 'native', 350, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-tabindex">Info</a>', '', '', '', '', 101, '', 'no', '', '', '', '', '', 'specialchar'), + (2, 'size', 'Size', 'show', 'text', 'all', 'native', 400, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-size">Info</a>', '', '', '', '', 102, '', 'no', '', '', '', '', '', 'specialchar'), + (2, 'bsLabelColumns', 'BS Label Columns', 'show', 'text', 'all', 'native', 410, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-bsLabelColumns">Info</a>', '', '', '', '', 102, '', 'no', '', '', '', '', '{{bsLabelColumns:Y}}', 'specialchar'), (2, 'bsInputColumns', 'BS Input Columns', 'show', 'text', 'all', 'native', 420, 0, 0, '', '', '', '', '', 102, '', 'no', '', '', '', '', '{{bsInputColumns:Y}}', 'specialchar'), (2, 'bsNoteColumns', 'BS Note Columns', 'show', 'text', 'all', 'native', 430, 0, 0, '', '', '', '', '', 102, '', 'no', '', '', '', '', '{{bsNoteColumns:Y}}', 'specialchar'), - (2, 'rowLabelInputNote', 'Label / Input / Note', 'show', 'checkbox', 'alnumx', 'native', 440, 0, 10, '', '', '', '', '', 102, '', 'no', '', '', '', '', '', 'specialchar'), - (2, 'maxLength', 'Maxlength', 'show', 'text', 'all', 'native', 450, 0, 0, '', '', '', '', '', 102, '', 'no', '', '', '', '', '', 'specialchar'), - (2, 'note', 'Note', 'show', 'editor', 'all', 'native', 460, '', 0, '', '', '', '', + (2, 'rowLabelInputNote', 'Label / Input / Note', 'show', 'checkbox', 'alnumx', 'native', 440, 0, 10, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-rowLabelInputNote">Info</a>', '', '', '', '', 102, '', 'no', '', '', '', '', '', 'specialchar'), + (2, 'maxLength', 'Maxlength', 'show', 'text', 'all', 'native', 450, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-maxLength">Info</a>', '', '', '', '', 102, '', 'no', '', '', '', '', '', 'specialchar'), + (2, 'note', 'Note', 'show', 'editor', 'all', 'native', 460, '', 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-note">Info</a>', '', '', '', 'editor-plugins=code link table textcolor textpattern\neditor-toolbar=code | styleselect link table | bullist numlist | forecolor backcolor bold italic\neditor-menubar=false\neditor-statusbar=false', 102, '', 'no', '', '', '', '', '', 'none'), - (2, 'tooltip', 'Tooltip', 'show', 'text', 'all', 'native', 470, 0, 0, '', '', '', '', '', 102, '', 'no', '', '', '', '', '', 'none'), - (2, 'placeholder', 'Placeholder', 'show', 'text', 'all', 'native', 480, 0, 0, '', '', '', '', '', 102, '', 'no', '', '', '', '', '', 'none'), - (2, 'value', 'value', 'show', 'text', 'all', 'native', 500, '40,2', 0, '', '', '', '', '', 103, '', 'no', '', '', '', '', '', 'none'), + (2, 'tooltip', 'Tooltip', 'show', 'text', 'all', 'native', 470, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-tooltip">Info</a>', '', '', '', '', 102, '', 'no', '', '', '', '', '', 'none'), + (2, 'placeholder', 'Placeholder', 'show', 'text', 'all', 'native', 480, 0, 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-placeholder">Info</a>', '', '', '', '', 102, '', 'no', '', '', '', '', '', 'none'), + (2, 'value', 'value', 'show', 'text', 'all', 'native', 500, '40,2', 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#field-value">Info</a>', '', '', '', '', 103, '', 'no', '', '', '', '', '', 'none'), (2, 'sql1', 'sql1', 'show', 'text', 'all', 'native', 510, '40,5', 0, - 'MariaDB: <a href="https://mariadb.com/kb/en/mariadb/select/">Select</a>, <a href="https://mariadb.com/kb/en/mariadb/functions-and-operators/">Functions</a>', + '<a href="{{DOCUMENTATION_QFQ:Y}}#field-sql1">Info</a>, MariaDB: <a href="https://mariadb.com/kb/en/mariadb/select/">Select</a>, <a href="https://mariadb.com/kb/en/mariadb/functions-and-operators/">Functions</a>', '', '', '', '', 103, '', 'no', '', '', '', '', '', 'none'), - (2, 'parameter', 'Parameter', 'show', 'text', 'all', 'native', 520, '40,8', 0, '', + (2, 'parameter', 'Parameter', 'show', 'text', 'all', 'native', 520, '40,8', 0, '<a href="{{DOCUMENTATION_QFQ:Y}}#fe-parameter-attributes">Info</a>', '', '', '', '', 103, '', 'no', '', '', '', '', '', 'none'), - (2, 'clientJs', 'ClientJS', 'show', 'text', 'all', 'native', 530, 0, 0, '', '', '', '', '', 103, '', 'no', '', '', '', '', '', 'none'), (2, 'adminNote', 'Admin Note', 'show', 'text', 'all', 'native', 600, 0, 0, '', '', '', '', '', 104, '', 'no', '', '', '', '', '', 'specialchar'), (2, 'feGroup', 'feGroup', 'show', 'text', 'all', 'native', 610, 0, 0, '', '', '', '', '', 104, '', 'no', '', '', '', '', '', 'specialchar'), -- GitLab