From 16c95997397e03cffe01ffb7993f84ed978e40f0 Mon Sep 17 00:00:00 2001 From: acognet Date: Tue, 4 May 2021 11:55:20 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B03819=20-=20Input:=20Migrate=20request=20?= =?UTF-8?q?templates=20input=20to=20new=20UIBlock=20system?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/cmdbabstract.class.inc.php | 10 +- css/backoffice/components/_field.scss | 8 + .../ConsoleSelectObjectFieldRenderer.php | 83 +++--- .../ConsoleSimpleFieldRenderer.php | 237 ++++++++++-------- .../UI/Base/Component/Input/Select/Select.php | 21 ++ .../UI/Base/Component/Input/TextArea.php | 21 ++ .../components/input/input-textarea.html.twig | 1 + .../components/input/select/select.html.twig | 1 + 8 files changed, 236 insertions(+), 146 deletions(-) diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index af4c631af..49073cfb1 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -2251,17 +2251,9 @@ HTML; break; case 'CustomFields': - $sHTMLValue = ''; - $sHTMLValue .= ''; - $sHTMLValue .= ''; - $sHTMLValue .= ''; // No validation span for this one: it does handle its own validation! - $sHTMLValue .= ''; - $sHTMLValue .= '
'; $sHTMLValue .= '
'; $sHTMLValue .= '
'; - $sHTMLValue .= '
'; - $sHTMLValue .= '
'; - $sHTMLValue .= '
'.$sReloadSpan.'
'; + $sHTMLValue .= '
'.$sReloadSpan.'
'; // No validation span for this one: it does handle its own validation! $sHTMLValue .= "\n"; $oForm = $value->GetForm($sFormPrefix); diff --git a/css/backoffice/components/_field.scss b/css/backoffice/components/_field.scss index 05515cf0a..868d6b7ad 100644 --- a/css/backoffice/components/_field.scss +++ b/css/backoffice/components/_field.scss @@ -49,6 +49,14 @@ $ibo-field--value-decoration--spacing-x: 0.5rem !default; max-width: initial; width: 100%; } + .ibo-field-small .ibo-field--label { + display: table-cell; + vertical-align: top; + padding-right: 10px; + min-width: 100px; + max-width: 145px; + width: 30%; + } } .ibo-field-small { display: table; diff --git a/sources/Renderer/Console/FieldRenderer/ConsoleSelectObjectFieldRenderer.php b/sources/Renderer/Console/FieldRenderer/ConsoleSelectObjectFieldRenderer.php index 547cd92f6..6e62821c3 100644 --- a/sources/Renderer/Console/FieldRenderer/ConsoleSelectObjectFieldRenderer.php +++ b/sources/Renderer/Console/FieldRenderer/ConsoleSelectObjectFieldRenderer.php @@ -19,11 +19,20 @@ namespace Combodo\iTop\Renderer\Console\FieldRenderer; +use CaptureWebPage; +use Combodo\iTop\Application\UI\Base\Component\Field\FieldUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Component\Html\Html; +use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Component\Input\Select\SelectOptionUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Component\Input\SelectUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory; use Combodo\iTop\Form\Validator\MandatoryValidator; +use Combodo\iTop\Renderer\BlockRenderer; use \Dict; use \DBObjectSet; use Combodo\iTop\Renderer\FieldRenderer; use Combodo\iTop\Form\Field\SelectObjectField; +use UIExtKeyWidget; /** * Class ConsoleSelectObjectFieldRenderer @@ -39,16 +48,14 @@ class ConsoleSelectObjectFieldRenderer extends FieldRenderer { $oOutput = parent::Render(); - $oOutput->AddHtml(''); - $oOutput->AddHtml(''); - if ($this->oField->GetLabel() != '') - { - $oOutput->AddHtml(''); - } - $oOutput->AddHtml(''); - - $oOutput->AddHtml(''); - $oOutput->AddHtml('
'); + $oBlock = FieldUIBlockFactory::MakeStandard($this->oField->GetLabel()); + $oBlock->SetValueId($this->oField->GetGlobalId()); + $oBlock->AddDataAttribute("input-id",$this->oField->GetGlobalId()); + $sEditType = 'none'; if ($this->oField->GetReadOnly()) { + $oBlock->AddDataAttribute("input-type","Combodo\\iTop\\Form\\Field\\SelectObjectField\readonly"); $oSearch = $this->oField->GetSearch()->DeepClone(); $oSearch->AddCondition('id', $this->oField->GetCurrentValue()); $oSet = new DBObjectSet($oSearch); @@ -61,15 +68,17 @@ class ConsoleSelectObjectFieldRenderer extends FieldRenderer { $sCurrentLabel = ''; } - $oOutput->AddHtml(''); - $oOutput->AddHtml(''.htmlentities($sCurrentLabel, ENT_QUOTES, 'UTF-8').''); + $oValue = UIContentBlockUIBlockFactory::MakeStandard(); + $oValue->AddSubBlock(InputUIBlockFactory::MakeForHidden("",$this->oField->GetCurrentValue(),$this->oField->GetGlobalId())); + $oValue->AddSubBlock(new Html($sCurrentLabel)); + $oBlock->SetValue($oValue); } else { $oSearch = $this->oField->GetSearch()->DeepClone(); $oSearch->SetModifierProperty('UserRightsGetSelectFilter', 'bSearchMode', true); - $oSet = new \DBObjectSet($oSearch); + $oSet = new DBObjectSet($oSearch); $oSet->ApplyParameters(); $oSet->OptimizeColumnLoad(array($oSearch->GetClassAlias() => array('friendlyname'))); @@ -82,6 +91,7 @@ class ConsoleSelectObjectFieldRenderer extends FieldRenderer { // Auto-complete // + $oBlock->AddDataAttribute("input-type","Combodo\\iTop\\Form\\Field\\SelectObjectField\\Autocomplete"); $sEditType = 'autocomplete'; $aExtKeyParams = array(); $aExtKeyParams['iFieldSize'] = 10; @@ -89,14 +99,17 @@ class ConsoleSelectObjectFieldRenderer extends FieldRenderer $sFieldName = $this->oField->GetGlobalId(); $sFieldId = $sFieldName; $sFormPrefix = ''; - $oWidget = new \UIExtKeyWidget($sTargetClass, $sFieldId, '', true); + $oWidget = new UIExtKeyWidget($sTargetClass, $sFieldId, '', true); $aArgs = array(); $sTitle = $this->oField->GetLabel(); - require_once(APPROOT.'application/capturewebpage.class.inc.php'); - $oPage = new \CaptureWebPage(); + + $oPage = new CaptureWebPage(); $sHTMLValue = $oWidget->DisplaySelect($oPage, $iMaxComboLength, false /* $bAllowTargetCreation */, $sTitle, $oSet, $this->oField->GetCurrentValue(), $this->oField->GetMandatory(), $sFieldName, $sFormPrefix, $aArgs); - $oOutput->AddHtml($sHTMLValue); - $oOutput->AddHtml($oPage->GetHtml()); + $oValue = UIContentBlockUIBlockFactory::MakeStandard(); + $oValue->AddSubBlock(new Html($sHTMLValue)); + $oValue->AddSubBlock(new Html($oPage->GetHtml())); + $oBlock->AddSubBlock($oValue); + $oOutput->AddJs($oPage->GetJS()); $oOutput->AddJs($oPage->GetReadyJS()); foreach ($oPage->GetCSS() as $sCss) @@ -114,6 +127,7 @@ class ConsoleSelectObjectFieldRenderer extends FieldRenderer } elseif($this->oField->GetControlType() == SelectObjectField::CONTROL_RADIO_VERTICAL) { + $oBlock->AddDataAttribute("input-type","Combodo\\iTop\\Form\\Field\\SelectObjectField\\Radio"); // Radio buttons (vertical) // $sEditType = 'radio'; @@ -122,6 +136,10 @@ class ConsoleSelectObjectFieldRenderer extends FieldRenderer $bMandatory = $this->oField->GetMandatory(); $value = $this->oField->GetCurrentValue(); $sId = $this->oField->GetGlobalId(); + + $oValue = UIContentBlockUIBlockFactory::MakeStandard(); + $oBlock->SetValue($oValue); + $oOutput->AddHtml('
'); while ($oObject = $oSet->Fetch()) { @@ -137,32 +155,42 @@ class ConsoleSelectObjectFieldRenderer extends FieldRenderer { $sSelected = ($value == $iObject) ? 'checked' : ''; } - $oOutput->AddHtml(" "); + $oRadioCustom = InputUIBlockFactory::MakeForInputWithLabel($sLabel, "radio_$sId", $iObject, "{$sId}_{$iObject}", "radio"); + $oRadioCustom->GetInput()->SetIsChecked($sSelected); + $oRadioCustom->SetBeforeInput(false); + $oRadioCustom->GetInput()->AddCSSClass('ibo-input-checkbox'); + $oValue->AddSubBlock($oRadioCustom); + $oOutput->AddJs( + <<AddHtml("
\n"); + $oValue->AddSubBlock(new Html("
")); } $idx++; } - $oOutput->AddHtml('
'); - $oOutput->AddHtml(""); + $oValue->AddSubBlock(InputUIBlockFactory::MakeForHidden($sId,$value,$sId)); } else { // Drop-down select // + $oBlock->AddDataAttribute("input-type","Combodo\\iTop\\Form\\Field\\SelectObjectField\\Select"); $sEditType = 'select'; - $oOutput->AddHtml(''); } $oOutput->AddJs( <<AddHtml(''); - $oOutput->AddHtml('
'); - + $oOutput->AddHtml((BlockRenderer::RenderBlockTemplates($oBlock))); // JS Form field widget construct $aValidators = array(); foreach ($this->oField->GetValidators() as $oValidator) diff --git a/sources/Renderer/Console/FieldRenderer/ConsoleSimpleFieldRenderer.php b/sources/Renderer/Console/FieldRenderer/ConsoleSimpleFieldRenderer.php index 55839bcb9..a7bbba947 100644 --- a/sources/Renderer/Console/FieldRenderer/ConsoleSimpleFieldRenderer.php +++ b/sources/Renderer/Console/FieldRenderer/ConsoleSimpleFieldRenderer.php @@ -22,7 +22,16 @@ namespace Combodo\iTop\Renderer\Console\FieldRenderer; use AttributeDate; use AttributeDateTime; use AttributeDuration; +use Combodo\iTop\Application\UI\Base\Component\Field\FieldUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Component\Html\Html; +use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Component\Input\Select\SelectOptionUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Component\Input\SelectUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Component\Input\TextArea; +use Combodo\iTop\Application\UI\Base\Component\Text\Text; +use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory; use Combodo\iTop\Form\Field\TextAreaField; +use Combodo\iTop\Renderer\BlockRenderer; use Combodo\iTop\Renderer\FieldRenderer; use DateTimeFormat; use Dict; @@ -47,59 +56,68 @@ class ConsoleSimpleFieldRenderer extends FieldRenderer } else { - $oOutput->AddHtml(''); - $oOutput->AddHtml(''); - if ($this->oField->GetLabel() != '') - { - $oOutput->AddHtml(''); - } + $oBlock = FieldUIBlockFactory::MakeStandard($this->oField->GetLabel()); + $oBlock->AddDataAttribute("input-id",$this->oField->GetGlobalId()); + $oBlock->AddDataAttribute("input-type",$sFieldClass); switch ($sFieldClass) { case 'Combodo\\iTop\\Form\\Field\\DateTimeField': + $oValue = UIContentBlockUIBlockFactory::MakeStandard("",["form-field-content"]); + $sDateTimeFormat = $this->oField->GetPHPDateTimeFormat(); $oFormat = new DateTimeFormat($sDateTimeFormat); $sPlaceHolder = $oFormat->ToPlaceholder(); - $oOutput->AddHtml(''); - break; + else + { + $oField = UIContentBlockUIBlockFactory::MakeStandard("",["field_input_zone", "field_input_datetime", "ibo-input-wrapper", "ibo-input-datetime-wrapper"]); + $oValue->AddSubBlock($oField); + $oField->AddSubBlock(new Html('')); + $oField->AddSubBlock(new Html('')); + } + $oBlock->AddSubBlock($oValue); + break; case 'Combodo\\iTop\\Form\\Field\\LabelField': - $oOutput->AddHtml(''); + $oValue = UIContentBlockUIBlockFactory::MakeStandard("",[""]); + $oBlock->AddSubBlock($oValue); + $oValue->AddSubBlock(new Text($this->oField->GetCurrentValue())); + $oValue->AddSubBlock(new Html('')); break; case 'Combodo\\iTop\\Form\\Field\\StringField': - $oOutput->AddHtml(''); + else + { + $oValue->AddSubBlock(InputUIBlockFactory::MakeStandard("text","", $this->oField->GetCurrentValue(),$this->oField->GetGlobalId())); + $oValue->AddSubBlock(new Html('')); + } + $oBlock->AddSubBlock($oValue); break; case 'Combodo\\iTop\\Form\\Field\\TextAreaField': + $oValue = UIContentBlockUIBlockFactory::MakeStandard("",["form-field-content"]); + $bRichEditor = ($this->oField->GetFormat() === TextAreaField::ENUM_FORMAT_HTML); - $oOutput->AddHtml(''); + $oBlock->AddSubBlock($oValue); break; case 'Combodo\\iTop\\Form\\Field\\SelectField': - $oOutput->AddHtml(''); + $oBlock->AddSubBlock($oValue); break; case 'Combodo\\iTop\\Form\\Field\\RadioField': - $oOutput->AddHtml(''); + $oBlock->AddSubBlock($oValue); break; case 'Combodo\\iTop\\Form\\Field\\DurationField': - $oOutput->AddHtml(''); + $oBlock->AddSubBlock($oValue); break; } - $oOutput->AddHtml(''); - $oOutput->AddHtml('
'); if ($this->oField->GetReadOnly()) { - $oOutput->AddHtml(''); - $oOutput->AddHtml(''.htmlentities($this->oField->GetCurrentValue(), ENT_QUOTES, 'UTF-8').''); - } else { - $oOutput->AddHtml(''); + $oValue->AddSubBlock(InputUIBlockFactory::MakeForHidden("",$this->oField->GetCurrentValue(),$this->oField->GetGlobalId())); + $oValue->AddSubBlock(new Html($this->oField->GetCurrentValue())); } - $oOutput->AddHtml(''); - $oOutput->AddHtml(''); - $oOutput->AddHtml(''.htmlentities($this->oField->GetCurrentValue(), ENT_QUOTES, 'UTF-8').''); - $oOutput->AddHtml(''); - $oOutput->AddHtml(''); - if ($this->oField->GetReadOnly()) { - $oOutput->AddHtml(''); - $oOutput->AddHtml(''.htmlentities($this->oField->GetCurrentValue(), ENT_QUOTES, 'UTF-8').''); - } else { - $oOutput->AddHtml(''); + $oValue = UIContentBlockUIBlockFactory::MakeStandard("",[""]); + + if ($this->oField->GetReadOnly()) + { + $oValue->AddSubBlock(InputUIBlockFactory::MakeForHidden("",$this->oField->GetCurrentValue(),$this->oField->GetGlobalId())); + $oValue->AddSubBlock(new Html($this->oField->GetCurrentValue())); } - $oOutput->AddHtml(''); - $oOutput->AddHtml(''); - if ($this->oField->GetReadOnly()) { - $oOutput->AddHtml(''); - } else + $oText = new TextArea("",$this->oField->GetCurrentValue(),$this->oField->GetGlobalId(),40,8); + $oValue->AddSubBlock($oText); + if ($this->oField->GetReadOnly()) + { + $oText->SetIsDisabled(true); + } + else { - $oOutput->AddHtml(''); // Some additional stuff if we are displaying it with a rich editor if ($bRichEditor) { @@ -110,7 +128,7 @@ class ConsoleSimpleFieldRenderer extends FieldRenderer $oOutput->AddJs( <<oField->GetGlobalId()}').addClass('htmlEditor'); - $('#{$this->oField->GetGlobalId()}').ckeditor(function(){}, $sJsConfig); + $('#{$this->oField->GetGlobalId()}').ckeditor(function(){}, $sJsConfig); EOF ); if (($this->oField->GetObject() !== null) && ($this->oField->GetTransactionId() !== null)) @@ -118,43 +136,45 @@ EOF $oOutput->AddJs(InlineImage::EnableCKEditorImageUpload($this->oField->GetObject(), utils::GetUploadTempId($this->oField->GetTransactionId()))); } } + $oValue->AddSubBlock(new Html('')); } - $oOutput->AddHtml(''); - $oOutput->AddHtml(''); + $oValue = UIContentBlockUIBlockFactory::MakeStandard("",["form-field-content"]); if ($this->oField->GetReadOnly()) { $aChoices = $this->oField->GetChoices(); $sCurrentLabel = isset($aChoices[$this->oField->GetCurrentValue()]) ? $aChoices[$this->oField->GetCurrentValue()] : '' ; - $oOutput->AddHtml(''); - $oOutput->AddHtml(''.htmlentities($sCurrentLabel, ENT_QUOTES, 'UTF-8').''); + $oValue->AddSubBlock(InputUIBlockFactory::MakeForHidden("",$this->oField->GetCurrentValue(),$this->oField->GetGlobalId())); + $oValue->AddSubBlock(new Html($sCurrentLabel)); } else { - $oOutput->AddHtml(''); + $oValue->AddSubBlock($oSelect); + $oValue->AddSubBlock(new Html('')); } - $oOutput->AddHtml(''); - $oOutput->AddHtml(''); + $oValue = UIContentBlockUIBlockFactory::MakeStandard("",["form-field-content"]); if ($this->oField->GetReadOnly()) { $aChoices = $this->oField->GetChoices(); $sCurrentLabel = isset($aChoices[$this->oField->GetCurrentValue()]) ? $aChoices[$this->oField->GetCurrentValue()] : '' ; - $oOutput->AddHtml(''); - $oOutput->AddHtml(''.htmlentities($sCurrentLabel, ENT_QUOTES, 'UTF-8').''); + $oValue->AddSubBlock(InputUIBlockFactory::MakeForHidden("",$this->oField->GetCurrentValue(),$this->oField->GetGlobalId())); + $oValue->AddSubBlock(new Html($sCurrentLabel)); } else { @@ -163,7 +183,6 @@ EOF $bMandatory = $this->oField->GetMandatory(); $value = $this->oField->GetCurrentValue(); $sId = $this->oField->GetGlobalId(); - $oOutput->AddHtml('
'); $aChoices = $this->oField->GetChoices(); foreach ($aChoices as $sChoice => $sLabel) { @@ -177,30 +196,32 @@ EOF { $sSelected = ($value == $sChoice) ? 'checked' : ''; } - $oOutput->AddHtml(" "); + $oRadio=InputUIBlockFactory::MakeForInputWithLabel($sLabel,"radio_".$sId, $sChoice,"{$sId}_{$idx}","radio" );; + $oRadio->GetInput()->SetIsChecked($sSelected); + $oRadio->SetBeforeInput(false); + $oRadio->GetInput()->AddCSSClass('ibo-input-checkbox'); + $oValue->AddSubBlock($oRadio); if ($bVertical) { - $oOutput->AddHtml("
\n"); + $oValue->AddSubBlock(new Html("
")); } $idx++; } - $oOutput->AddHtml('
'); - $oOutput->AddHtml(""); + $oValue->AddSubBlock(InputUIBlockFactory::MakeForHidden("",$value,$sId)); + $oValue->AddSubBlock(new Html('')); } - $oOutput->AddHtml(''); - $oOutput->AddHtml('
'); + $oValue = UIContentBlockUIBlockFactory::MakeStandard("",["form-field-content"]); $value = $this->oField->GetCurrentValue(); if ($this->oField->GetReadOnly()) { - $oOutput->AddHtml(''); - $oOutput->AddHtml(''.htmlentities(\AttributeDuration::FormatDuration($value), ENT_QUOTES, 'UTF-8').''); + $oValue->AddSubBlock(InputUIBlockFactory::MakeForHidden("",$value,$this->oField->GetGlobalId())); + $oValue->AddSubBlock(new Html(AttributeDuration::FormatDuration($value))); } - else - { + else { $sId = $this->oField->GetGlobalId(); $aVal = AttributeDuration::SplitDuration($value); @@ -208,21 +229,22 @@ EOF $sHours = ""; $sMinutes = ""; $sSeconds = ""; - $oOutput->AddHtml(Dict::Format('UI:DurationForm_Days_Hours_Minutes_Seconds', $sDays, $sHours, $sMinutes, $sSeconds)); - $oOutput->AddHtml(""); + $oTime = UIContentBlockUIBlockFactory::MakeStandard("",["pt-2"]); + $oTime->AddSubBlock(new Html(Dict::Format('UI:DurationForm_Days_Hours_Minutes_Seconds', $sDays, $sHours, $sMinutes, $sSeconds))); + $oValue->AddSubBlock($oTime); + $oValue->AddSubBlock(InputUIBlockFactory::MakeForHidden("",$value,$sId)); $oOutput->AddJs("$('#{$sId}_d').on('keyup change', function(evt, sFormId) { return UpdateDuration('$sId'); });"); $oOutput->AddJs("$('#{$sId}_h').on('keyup change', function(evt, sFormId) { return UpdateDuration('$sId'); });"); $oOutput->AddJs("$('#{$sId}_m').on('keyup change', function(evt, sFormId) { return UpdateDuration('$sId'); });"); $oOutput->AddJs("$('#{$sId}_s').on('keyup change', function(evt, sFormId) { return UpdateDuration('$sId'); });"); $oOutput->AddJs("$('#{$sId}').on('update', function(evt, sFormId) { return ToggleDurationField('$sId'); });"); + $oValue->AddSubBlock(new Html('')); } - $oOutput->AddHtml(''); - $oOutput->AddHtml('
'); + $oOutput->AddHtml(BlockRenderer::RenderBlockTemplates($oBlock)); } switch ($sFieldClass) @@ -239,22 +261,25 @@ EOF $oTimeFormat = new DateTimeFormat($sTimeFormat); $sJSTimeFormat = json_encode($oTimeFormat->ToDatePicker()); $sJSOk = json_encode(Dict::S('UI:Button:Ok')); + if ($this->oField->IsDateOnly()) { $oOutput->AddJs( <<oField->GetGlobalId()}").datepicker({ - showOn: 'button', - buttonImage: '../images/calendar.png', - buttonImageOnly: true, - dateFormat: $sJSDateFormat, - constrainInput: false, - changeMonth: true, - changeYear: true, - dayNamesMin: $sJSDaysMin, - monthNamesShort: $sJSMonthsShort, - firstDay: $iFirstDayOfWeek - }); + var oInput = "#{$this->oField->GetGlobalId()}"; + $(oInput).addClass('is-widget-ready'); + + $(oInput).datepicker({ + "showOn":"button", + "buttonText":"<\/i>", + "format": $sJSDateFormat, + "constrainInput":false, + "changeMonth":true, + "changeYear":true, + "dayNamesMin":$sJSDaysMin, + "monthNamesShort": $sJSMonthsShort, + "firstDay":$iFirstDayOfWeek}).next("img").wrap(""); + EOF ); } @@ -262,40 +287,38 @@ EOF { $oOutput->AddJs( <<oField->GetGlobalId()}").datetimepicker({ - showOn: 'button', - buttonImage: '../images/calendar.png', - buttonImageOnly: true, - dateFormat: $sJSDateFormat, - constrainInput: false, - changeMonth: true, - changeYear: true, - dayNamesMin: $sJSDaysMin, - monthNamesShort: $sJSMonthsShort, - firstDay: $iFirstDayOfWeek, - // time picker options - timeFormat: $sJSTimeFormat, - controlType: 'select', - closeText: $sJSOk + var oInput = "#{$this->oField->GetGlobalId()}"; + $(oInput).addClass('is-widget-ready'); + $('
') + .insertAfter($(oInput)) + .on('click', function(){ + $(oInput) + .datetimepicker({ + showOn: 'button', + buttonText: "<\/i>", + dateFormat: $sJSDateFormat, + constrainInput: false, + changeMonth: true, + changeYear: true, + dayNamesMin: $sJSDaysMin, + monthNamesShort: $sJSMonthsShort, + firstDay: $iFirstDayOfWeek, + // time picker options + timeFormat: $sJSTimeFormat, + controlType: 'select', + closeText: $sJSOk + }) + .datetimepicker('show') + .datetimepicker('option', 'onClose', function(dateText,inst){ + $(oInput).datetimepicker('destroy'); + }) + .on('click keypress', function(){ + $(oInput).datetimepicker('hide'); + }); }); EOF ); } - - $oOutput->AddJs( -<<oField->GetGlobalId()}").off("change keyup").on("change keyup", function(){ - var me = this; - - $(this).closest(".field_set").trigger("field_change", { - id: $(me).attr("id"), - name: $(me).closest(".form_field").attr("data-field-id"), - value: $(me).val() - }) - .closest('.form_handler').trigger('value_change'); - }); -EOF - ); break; break; diff --git a/sources/application/UI/Base/Component/Input/Select/Select.php b/sources/application/UI/Base/Component/Input/Select/Select.php index df8c43548..4f7d265a2 100644 --- a/sources/application/UI/Base/Component/Input/Select/Select.php +++ b/sources/application/UI/Base/Component/Input/Select/Select.php @@ -22,11 +22,14 @@ class Select extends UIContentBlock protected $sValue; /** @var bool */ protected $bSubmitOnChange = false; + /** @var bool */ + protected $bIsMultiple = false; public function __construct(?string $sId = null) { parent::__construct($sId); + $this->bIsMultiple = false; } public function AddOption(SelectOption $oOption) @@ -84,7 +87,25 @@ class Select extends UIContentBlock public function SetSubmitOnChange(bool $bSubmitOnChange) { $this->bSubmitOnChange = $bSubmitOnChange; + return $this; } + /** + * @return bool + */ + public function IsMultiple(): bool + { + return $this->bIsMultiple; + } + + /** + * @param bool $bIsMultiple + */ + public function SetIsMultiple(bool $bIsMultiple): void + { + $this->bIsMultiple = $bIsMultiple; + } + + } \ No newline at end of file diff --git a/sources/application/UI/Base/Component/Input/TextArea.php b/sources/application/UI/Base/Component/Input/TextArea.php index 75efb9513..be49b0d0c 100644 --- a/sources/application/UI/Base/Component/Input/TextArea.php +++ b/sources/application/UI/Base/Component/Input/TextArea.php @@ -20,6 +20,8 @@ class TextArea extends AbstractInput protected $iCols; /** @var int */ protected $iRows; + /** @var bool */ + protected $bIsDisabled; public function __construct(string $sName, ?string $sValue, ?string $sId = null, ?int $iCols = null, ?int $iRows = null) { @@ -29,6 +31,7 @@ class TextArea extends AbstractInput $this->sValue = $sValue; $this->iCols = $iCols; $this->iRows = $iRows; + $this->bIsDisabled = false; } public function GetCols(): ?int @@ -64,4 +67,22 @@ class TextArea extends AbstractInput return $this; } + + /** + * @return bool + */ + public function IsDisabled(): bool + { + return $this->bIsDisabled; + } + + /** + * @param bool $bIsDisabled + */ + public function SetIsDisabled(bool $bIsDisabled): void + { + $this->bIsDisabled = $bIsDisabled; + } + + } \ No newline at end of file diff --git a/templates/base/components/input/input-textarea.html.twig b/templates/base/components/input/input-textarea.html.twig index 99a7c46fb..c721f06dc 100644 --- a/templates/base/components/input/input-textarea.html.twig +++ b/templates/base/components/input/input-textarea.html.twig @@ -11,5 +11,6 @@ {% endif %} {% if oUIBlock.GetAdditionalCSSClassesAsString() %} class="{{ oUIBlock.GetAdditionalCSSClassesAsString() }}"{% endif %} {% if oUIBlock.GetPlaceHolder() %} placeholder="{{ oUIBlock.GetPlaceHolder() }}" {% endif %} + {% if oUIBlock.IsDisabled() %} disabled="disabled" {% endif %} >{{ oUIBlock.GetValue()|raw }} {% endblock %} \ No newline at end of file diff --git a/templates/base/components/input/select/select.html.twig b/templates/base/components/input/select/select.html.twig index 1a39c0521..6e6c99f5c 100644 --- a/templates/base/components/input/select/select.html.twig +++ b/templates/base/components/input/select/select.html.twig @@ -4,6 +4,7 @@ {% block iboInput %}