N°3537 run_query : use Field instead of InputWithLabel

This commit is contained in:
Pierre Goiffon
2020-12-16 15:57:23 +01:00
parent 2b0691daa6
commit 85e9073228
7 changed files with 60 additions and 49 deletions

View File

@@ -954,7 +954,10 @@ EOF
$val['attflags'] = ($bEditMode) ? $this->GetFormAttributeFlags($sAttCode) : OPT_ATT_READONLY;
// - How the field should be rendered
$val['layout'] = (in_array($oAttDef->GetEditClass(), static::GetAttEditClassesToRenderAsLargeField())) ? 'large' : 'small';
$val['layout'] =
(in_array($oAttDef->GetEditClass(), static::GetAttEditClassesToRenderAsLargeField()))
? Field::ENUM_FIELD_LAYOUT_LARGE
: Field::ENUM_FIELD_LAYOUT_SMALL;
// - For simple fields, we get the raw (stored) value as well
$bExcludeRawValue = false;

View File

@@ -22,7 +22,8 @@ $ibo-field--label--description--color: $ibo-color-grey-700 !default;
display: inherit;
.ibo-field--label {
display: inherit;
display: inherit;
max-width: none;
}
}

View File

@@ -19,9 +19,11 @@
use Combodo\iTop\Application\UI\Base\Component\Alert\AlertFactory;
use Combodo\iTop\Application\UI\Base\Component\Button\ButtonFactory;
use Combodo\iTop\Application\UI\Base\Component\Field\Field;
use Combodo\iTop\Application\UI\Base\Component\Form\Form;
use Combodo\iTop\Application\UI\Base\Component\Html\Html;
use Combodo\iTop\Application\UI\Base\Component\Input\InputFactory;
use Combodo\iTop\Application\UI\Base\Component\Input\TextArea;
use Combodo\iTop\Renderer\BlockRenderer;
require_once('../approot.inc.php');
require_once(APPROOT.'/application/application.inc.php');
@@ -160,14 +162,15 @@ try
$oHiddenParams = new Html($oAppContext->GetForForm());
$oQueryForm->AddSubBlock($oHiddenParams);
$oQueryTextarea = InputFactory::MakeForTextareaWithLabel(
'expression',
Dict::S('UI:RunQuery:ExpressionToEvaluate'),
'expression',
utils::HtmlEntities($sExpression),
120, 8
);
$oQueryForm->AddSubBlock($oQueryTextarea);
$oQueryTextArea = new TextArea(utils::HtmlEntities($sExpression), 'expression', 120, 8);
$oQueryTextAreaRenderer = new BlockRenderer($oQueryTextArea);
$oQueryTextArea->SetName('expression');
$oQueryField = new Field([
'layout' => Field::ENUM_FIELD_LAYOUT_LARGE,
'label' => Dict::S('UI:RunQuery:ExpressionToEvaluate'),
'value' => $oQueryTextAreaRenderer->RenderHtml(),
]);
$oQueryForm->AddSubBlock($oQueryField);
$oQuerySubmit = ButtonFactory::MakeForPrimaryAction(
Dict::S('UI:Button:Evaluate'),

View File

@@ -20,12 +20,19 @@ use Combodo\iTop\Application\UI\Base\UIBlock;
class Field extends UIBlock
{
// Overloaded constants
/** @inheritdoc */
/** @inheritdoc */
public const BLOCK_CODE = 'ibo-field';
/** @inheritdoc */
/** @inheritdoc */
public const DEFAULT_HTML_TEMPLATE_REL_PATH = 'base/components/field/layout';
/** @var array Array of various parameters of the field. This should be exploded in dedicated properties instead of a grey array. */
public const ENUM_FIELD_LAYOUT_SMALL = 'small';
public const ENUM_FIELD_LAYOUT_LARGE = 'large';
/**
* @var array Array of various parameters of the field.
* This should be exploded in dedicated properties instead of a grey array.
* See in the corresponding Twig file for keys to use
*/
protected $aParams;
public function __construct(array $aParams, ?string $sId = null)

View File

@@ -8,6 +8,7 @@
namespace Combodo\iTop\Application\UI\Base\Component\Input;
use Combodo\iTop\Application\UI\Base\Component\Field\Field;
use Combodo\iTop\Application\UI\Base\Component\Input\Select\Select;
use Combodo\iTop\Application\UI\Base\Component\Input\Select\SelectOption;
@@ -25,6 +26,15 @@ class InputFactory
return $oInput;
}
/**
* If you need to have a real field with a label, you might use a {@link Field} component instead
*
* @param string $sName
* @param string $sLabel
* @param string|null $sId
*
* @return \Combodo\iTop\Application\UI\Base\Component\Input\InputWithLabel
*/
public static function MakeForSelectWithLabel(string $sName, string $sLabel, ?string $sId = null): InputWithLabel
{
$oInput = new Select($sId);
@@ -38,22 +48,6 @@ class InputFactory
return $oInputWithLabel;
}
public static function MakeForTextareaWithLabel(
string $sName, string $sLabel, ?string $sId = null, ?string $sValue = null,
?int $iCols = null, ?int $iRows = null
): InputWithLabel
{
$oTextArea = new TextArea($sValue, $sId, $iCols, $iRows);
$oTextArea->SetName($sName);
if (is_null($sId)) {
$sId = $oTextArea->GetId();
}
$oInputWithLabel = new InputWithLabel($sLabel, $oTextArea, $sId);
return $oInputWithLabel;
}
public static function MakeForSelect(string $sName, ?string $sId = null): Select
{
$oInput = new Select($sId);

View File

@@ -10,36 +10,46 @@ namespace Combodo\iTop\Application\UI\Base\Component\Input;
use Combodo\iTop\Application\UI\Base\UIBlock;
/**
* You might want to use a {@link \Combodo\iTop\Application\UI\Base\Component\Field\Field} component instead...
*
* @package Combodo\iTop\Application\UI\Base\Component\Input
*/
class InputWithLabel extends UIBlock
{
public const DEFAULT_HTML_TEMPLATE_REL_PATH = 'base/components/input/inputwithlabel';
/** @var string */
protected $sLabel;
/** @var \Combodo\iTop\Application\UI\Base\Component\Input\AbstractInput */
/** @var \Combodo\iTop\Application\UI\Base\Component\Input\Input */
protected $oInput;
/** @var bool */
protected $bHasBr;
public function __construct(string $sLabel, AbstractInput $oInput, ?string $sId, ?bool $bHasBr = null)
/**
* @param string $sLabel
* @param \Combodo\iTop\Application\UI\Base\Component\Input\AbstractInput $oInput
* @param string|null $sId
*/
public function __construct(string $sLabel, AbstractInput $oInput, ?string $sId)
{
parent::__construct($sId);
$this->sLabel = $sLabel;
$this->oInput = $oInput;
if (is_null($bHasBr)) {
$this->bHasBr = ($oInput instanceof TextArea);
} else {
$this->bHasBr = $bHasBr;
}
}
public function GetInput(): AbstractInput
/**
* @return \Combodo\iTop\Application\UI\Base\Component\Input\AbstractInput
*/
public function GetInput()
{
return $this->oInput;
}
public function SetInput(AbstractInput $oInput): InputWithLabel
/**
* @param \Combodo\iTop\Application\UI\Base\Component\Input\AbstractInput $oInput
*
* @return $this
*/
public function SetInput(AbstractInput $oInput)
{
$this->oInput = $oInput;
@@ -63,12 +73,6 @@ class InputWithLabel extends UIBlock
public function SetLabel(string $sLabel): InputWithLabel
{
$this->sLabel = $sLabel;
return $this;
}
public function HasBr(): bool
{
return $this->bHasBr;
}
}

View File

@@ -1,5 +1,4 @@
{% block iboInputLabel %}
<label for="{{ oUIBlock.GetId() }}">{{ oUIBlock.GetLabel() }}</label>
{% if oUIBlock.HasBr() %}<br>{% endif %}
{{ render_block(oUIBlock.GetInput()) }}
{% endblock %}