From 1ed350999af475e409bf70f3fcb0cc97463bff05 Mon Sep 17 00:00:00 2001
From: Ralf Zimmermann <ralf.zimmermann@tritum.de>
Date: Mon, 13 Mar 2017 01:14:06 +0100
Subject: [PATCH] [TASK] EXT:form - add empty option to select elements

Add configuration for fluid's select VH attribute 'prependOptionLabel'.

Resolves: #80192
Releases: master
Change-Id: Id045fac0d4d65ab4127607ec4ed1384757a0201f
Reviewed-on: https://review.typo3.org/52018
Reviewed-by: Bjoern Jacob <bjoern.jacob@tritum.de>
Tested-by: Bjoern Jacob <bjoern.jacob@tritum.de>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Mona Muzaffar <mona.muzaffar@gmx.de>
Tested-by: Mona Muzaffar <mona.muzaffar@gmx.de>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
---
 .../Configuration/Yaml/FormEditorSetup.yaml   | 16 +++++++++
 .../Frontend/Partials/MultiSelect.html        | 36 ++++++++++++++-----
 .../Frontend/Partials/SingleSelect.html       | 32 ++++++++++++-----
 .../Resources/Private/Language/Database.xlf   |  6 ++++
 4 files changed, 73 insertions(+), 17 deletions(-)

diff --git a/typo3/sysext/form/Configuration/Yaml/FormEditorSetup.yaml b/typo3/sysext/form/Configuration/Yaml/FormEditorSetup.yaml
index dab7356abc0f..9ea97c7f1e12 100644
--- a/typo3/sysext/form/Configuration/Yaml/FormEditorSetup.yaml
+++ b/typo3/sysext/form/Configuration/Yaml/FormEditorSetup.yaml
@@ -411,6 +411,14 @@ TYPO3:
                 group: select
                 groupSorting: 400
                 iconIdentifier: 't3-form-icon-multi-select'
+                editors:
+                  250:
+                    identifier: 'inactiveOption'
+                    templateName: 'Inspector-TextEditor'
+                    label: 'formEditor.elements.SelectionMixin.editor.inactiveOption.label'
+                    propertyPath: 'properties.prependOptionLabel'
+                    fieldExplanationText: 'formEditor.elements.SelectionMixin.editor.inactiveOption.fieldExplanationText'
+                    doNotSetIfPropertyValueIsEmpty: true
 
             RadioButton:
               formEditor:
@@ -425,6 +433,14 @@ TYPO3:
                 group: select
                 groupSorting: 200
                 iconIdentifier: 't3-form-icon-single-select'
+                editors:
+                  250:
+                    identifier: 'inactiveOption'
+                    templateName: 'Inspector-TextEditor'
+                    label: 'formEditor.elements.SelectionMixin.editor.inactiveOption.label'
+                    propertyPath: 'properties.prependOptionLabel'
+                    fieldExplanationText: 'formEditor.elements.SelectionMixin.editor.inactiveOption.fieldExplanationText'
+                    doNotSetIfPropertyValueIsEmpty: true
 
             ### FORM ELEMENTS: CUSTOM ###
             DatePicker:
diff --git a/typo3/sysext/form/Resources/Private/Frontend/Partials/MultiSelect.html b/typo3/sysext/form/Resources/Private/Frontend/Partials/MultiSelect.html
index 6bd80acb4ea3..0e60910ae0a5 100644
--- a/typo3/sysext/form/Resources/Private/Frontend/Partials/MultiSelect.html
+++ b/typo3/sysext/form/Resources/Private/Frontend/Partials/MultiSelect.html
@@ -1,15 +1,33 @@
 <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:formvh="http://typo3.org/ns/TYPO3/CMS/Form/ViewHelpers" data-namespace-typo3-fluid="true">
 <formvh:renderRenderable renderable="{element}">
 	<f:render partial="Field/Field" arguments="{element: element}" contentAs="elementContent">
-		<f:form.select
-			property="{element.identifier}"
-			id="{element.uniqueIdentifier}"
-			class="{element.properties.elementClassAttribute} form-control"
-			options="{formvh:translateElementProperty(element: element, property: 'options')}"
-			multiple="multiple"
-			errorClass="{element.properties.elementErrorClassAttribute}"
-			additionalAttributes="{formvh:translateElementProperty(element: element, property: 'fluidAdditionalAttributes')}"
-		/>
+		<f:if condition="{element.properties.prependOptionLabel}">
+			<f:then>
+				<f:form.select
+						property="{element.identifier}"
+						id="{element.uniqueIdentifier}"
+						class="{element.properties.elementClassAttribute} form-control"
+						options="{formvh:translateElementProperty(element: element, property: 'options')}"
+						multiple="multiple"
+						errorClass="{element.properties.elementErrorClassAttribute}"
+						additionalAttributes="{formvh:translateElementProperty(element: element, property: 'fluidAdditionalAttributes')}"
+						prependOptionLabel="{formvh:translateElementProperty(element: element, property: 'prependOptionLabel')}"
+						prependOptionValue="{formvh:translateElementProperty(element: element, property: 'prependOptionValue')}"
+				/>
+			</f:then>
+			<f:else>
+				<f:form.select
+						property="{element.identifier}"
+						id="{element.uniqueIdentifier}"
+						class="{element.properties.elementClassAttribute} form-control"
+						options="{formvh:translateElementProperty(element: element, property: 'options')}"
+						multiple="multiple"
+						errorClass="{element.properties.elementErrorClassAttribute}"
+						additionalAttributes="{formvh:translateElementProperty(element: element, property: 'fluidAdditionalAttributes')}"
+				/>
+			</f:else>
+		</f:if>
+
 	</f:render>
 </formvh:renderRenderable>
 </html>
diff --git a/typo3/sysext/form/Resources/Private/Frontend/Partials/SingleSelect.html b/typo3/sysext/form/Resources/Private/Frontend/Partials/SingleSelect.html
index b343a7cbfa12..73a68ff5dfb5 100644
--- a/typo3/sysext/form/Resources/Private/Frontend/Partials/SingleSelect.html
+++ b/typo3/sysext/form/Resources/Private/Frontend/Partials/SingleSelect.html
@@ -1,14 +1,30 @@
 <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:formvh="http://typo3.org/ns/TYPO3/CMS/Form/ViewHelpers" data-namespace-typo3-fluid="true">
 <formvh:renderRenderable renderable="{element}">
 	<f:render partial="Field/Field" arguments="{element: element}" contentAs="elementContent">
-		<f:form.select
-			property="{element.identifier}"
-			id="{element.uniqueIdentifier}"
-			options="{formvh:translateElementProperty(element: element, property: 'options')}"
-			class="{element.properties.elementClassAttribute} form-control"
-			errorClass="{element.properties.elementErrorClassAttribute}"
-			additionalAttributes="{formvh:translateElementProperty(element: element, property: 'fluidAdditionalAttributes')}"
-		/>
+		<f:if condition="{element.properties.prependOptionLabel}">
+			<f:then>
+				<f:form.select
+						property="{element.identifier}"
+						id="{element.uniqueIdentifier}"
+						options="{formvh:translateElementProperty(element: element, property: 'options')}"
+						class="{element.properties.elementClassAttribute} form-control"
+						errorClass="{element.properties.elementErrorClassAttribute}"
+						additionalAttributes="{formvh:translateElementProperty(element: element, property: 'fluidAdditionalAttributes')}"
+						prependOptionLabel="{formvh:translateElementProperty(element: element, property: 'prependOptionLabel')}"
+						prependOptionValue="{formvh:translateElementProperty(element: element, property: 'prependOptionValue')}"
+				/>
+			</f:then>
+			<f:else>
+				<f:form.select
+						property="{element.identifier}"
+						id="{element.uniqueIdentifier}"
+						options="{formvh:translateElementProperty(element: element, property: 'options')}"
+						class="{element.properties.elementClassAttribute} form-control"
+						errorClass="{element.properties.elementErrorClassAttribute}"
+						additionalAttributes="{formvh:translateElementProperty(element: element, property: 'fluidAdditionalAttributes')}"
+				/>
+			</f:else>
+		</f:if>
 	</f:render>
 </formvh:renderRenderable>
 </html>
diff --git a/typo3/sysext/form/Resources/Private/Language/Database.xlf b/typo3/sysext/form/Resources/Private/Language/Database.xlf
index a74b7cd866cd..66ad83b0e6e1 100644
--- a/typo3/sysext/form/Resources/Private/Language/Database.xlf
+++ b/typo3/sysext/form/Resources/Private/Language/Database.xlf
@@ -378,6 +378,12 @@
                 <source>Enter a valid PHP PCRE regular expression here.</source>
             </trans-unit>
 
+            <trans-unit id="formEditor.elements.SelectionMixin.editor.inactiveOption.label" xml:space="preserve">
+                <source>Inactive option</source>
+            </trans-unit>
+            <trans-unit id="formEditor.elements.SelectionMixin.editor.inactiveOption.fieldExplanationText" xml:space="preserve">
+                <source>If set, this label will be shown as first option.</source>
+            </trans-unit>
             <trans-unit id="formEditor.elements.SelectionMixin.editor.options.label" xml:space="preserve">
                 <source>Choices</source>
             </trans-unit>
-- 
GitLab