mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-07 10:48:48 +02:00
Pull up additionalCSSClasses from Button & UiContentBlock to UiBlock
This will allow to use this everywhere ! Before this commit we had : UiContentBlock aCSSClasses GetCssClasses SetCssClasses // reset + add, existing callers AddCSSClasses Button $aAdditionalCSSClasses GetAdditionalCSSClass AddCSSClasses Now we have : UiBlock aAdditionalCSSClasses AddCSSClasses SetCSSClasses GetAdditionalCSSClass Note that there were also some methods in PopoverMenuItem : PopoverMenuItem SetCssClasses AddCssClass GetCssClasses As they are indirection to methods in the $oPopupMenuItem attribute, I added to them the "MenuItem" prefix : SetMenuItemCssClasses AddMenuItemCssClass GetMenuItemCssClasses Didn't find any use to change.
This commit is contained in:
@@ -94,8 +94,6 @@ class Button extends UIBlock
|
||||
protected $sJsCode;
|
||||
/** @var string $sOnClickJsCode */
|
||||
protected $sOnClickJsCode;
|
||||
/** @var array */
|
||||
protected $aAdditionalCSSClasses;
|
||||
|
||||
/**
|
||||
* Button constructor.
|
||||
@@ -131,7 +129,6 @@ class Button extends UIBlock
|
||||
$this->sJsCode = $sJsCode;
|
||||
$this->sOnClickJsCode = $sOnClickJsCode;
|
||||
$this->bIsDisabled = false;
|
||||
$this->aAdditionalCSSClasses = [];
|
||||
$this->aDataAttributes = ['role' => 'ibo-button'];
|
||||
}
|
||||
|
||||
@@ -346,24 +343,4 @@ class Button extends UIBlock
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function GetAdditionalCSSClass(): string
|
||||
{
|
||||
return implode(' ', $this->aAdditionalCSSClasses);
|
||||
}
|
||||
|
||||
public function AddCSSClasses(string $sCSSClasses): self
|
||||
{
|
||||
foreach (explode(' ', $sCSSClasses) as $sCSSClass) {
|
||||
if (!empty($sCSSClass)) {
|
||||
$this->aAdditionalCSSClasses[$sCSSClass] = $sCSSClass;
|
||||
}
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -29,9 +29,9 @@ class FormTable extends StaticTable
|
||||
/** @var iUIBlock[] */
|
||||
private $aRows;
|
||||
|
||||
public function __construct(string $sRef, string $sContainerCSSClass = '')
|
||||
public function __construct(string $sRef, string $sContainerCSSClasses = '')
|
||||
{
|
||||
parent::__construct($sRef, $sContainerCSSClass);
|
||||
parent::__construct($sRef, $sContainerCSSClasses);
|
||||
$this->SetRef($sRef);
|
||||
$this->aRows = [];
|
||||
}
|
||||
|
||||
@@ -51,10 +51,10 @@ class StaticTable extends UIContentBlock
|
||||
* ]
|
||||
*/
|
||||
private $aData;
|
||||
|
||||
public function __construct(string $sId = null, string $sContainerCSSClass = '')
|
||||
|
||||
public function __construct(string $sId = null, string $sContainerCSSClasses = '')
|
||||
{
|
||||
parent::__construct($sId, $sContainerCSSClass);
|
||||
parent::__construct($sId, $sContainerCSSClasses);
|
||||
$this->aColumns = [];
|
||||
$this->aData = [];
|
||||
}
|
||||
|
||||
@@ -19,8 +19,8 @@ class FieldBadge extends UIContentBlock
|
||||
// Overloaded constants
|
||||
public const BLOCK_CODE = 'ibo-field-badge';
|
||||
|
||||
public function __construct(string $sId = null, string $sContainerClass = '')
|
||||
public function __construct(string $sId = null, string $sContainerClasses = '')
|
||||
{
|
||||
parent::__construct($sId, $sContainerClass);
|
||||
parent::__construct($sId, $sContainerClasses);
|
||||
}
|
||||
}
|
||||
@@ -69,13 +69,13 @@ class PopoverMenuItem extends UIBlock
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ApplicationPopupMenuItem::SetCssClasses()
|
||||
*
|
||||
* @param array $aCssClasses
|
||||
*
|
||||
* @return $this
|
||||
* @uses oPopupMenuItem
|
||||
* @uses \ApplicationPopupMenuItem::SetCssClasses()
|
||||
*/
|
||||
public function SetCssClasses(array $aCssClasses)
|
||||
public function SetMenuItemCssClasses(array $aCssClasses)
|
||||
{
|
||||
$this->oPopupMenuItem->SetCssClasses($aCssClasses);
|
||||
|
||||
@@ -83,13 +83,13 @@ class PopoverMenuItem extends UIBlock
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ApplicationPopupMenuItem::AddCssClass()
|
||||
*
|
||||
* @param string $sCssClass
|
||||
*
|
||||
* @return $this
|
||||
* @uses oPopupMenuItem
|
||||
* @uses \ApplicationPopupMenuItem::AddCssClass()
|
||||
*/
|
||||
public function AddCssClass(string $sCssClass)
|
||||
public function AddMenuItemCssClass(string $sCssClass)
|
||||
{
|
||||
$this->oPopupMenuItem->AddCssClass($sCssClass);
|
||||
|
||||
@@ -97,10 +97,11 @@ class PopoverMenuItem extends UIBlock
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ApplicationPopupMenuItem::GetCssClasses()
|
||||
* @return array
|
||||
* @uses oPopupMenuItem
|
||||
* @uses \ApplicationPopupMenuItem::GetCssClasses()
|
||||
*/
|
||||
public function GetCssClasses()
|
||||
public function GetMenuItemCssClasses(): array
|
||||
{
|
||||
return $this->oPopupMenuItem->GetCssClasses();
|
||||
}
|
||||
|
||||
@@ -28,8 +28,6 @@ class UIContentBlock extends UIBlock implements iUIContentBlock
|
||||
public const BLOCK_CODE = 'ibo-content-block';
|
||||
public const DEFAULT_HTML_TEMPLATE_REL_PATH = 'base/layouts/content-block/layout';
|
||||
|
||||
/** @var array */
|
||||
protected $aCSSClasses;
|
||||
/** @var array */
|
||||
protected $aSubBlocks;
|
||||
/** @var array */
|
||||
@@ -40,15 +38,15 @@ class UIContentBlock extends UIBlock implements iUIContentBlock
|
||||
* Generates a <div> only if $sContainerClass if not empty or block has data attributes
|
||||
*
|
||||
* @param string|null $sId
|
||||
* @param string $sContainerClass
|
||||
* @param string $sContainerClasses list of additional CSS classes, space as separator
|
||||
*/
|
||||
public function __construct(string $sId = null, string $sContainerClass = '')
|
||||
public function __construct(string $sId = null, string $sContainerClasses = '')
|
||||
{
|
||||
parent::__construct($sId);
|
||||
|
||||
$this->aSubBlocks = [];
|
||||
$this->aDeferredBlocks = [];
|
||||
$this->SetCSSClasses($sContainerClass);
|
||||
$this->SetCSSClasses($sContainerClasses);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -121,43 +119,6 @@ class UIContentBlock extends UIBlock implements iUIContentBlock
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function GetCSSClasses(): string
|
||||
{
|
||||
return implode(' ', $this->aCSSClasses);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sCSSClasses
|
||||
*
|
||||
* @return UIContentBlock
|
||||
*/
|
||||
public function SetCSSClasses(string $sCSSClasses)
|
||||
{
|
||||
$this->aCSSClasses = [];
|
||||
$this->AddCSSClasses($sCSSClasses);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sCSSClasses
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function AddCSSClasses(string $sCSSClasses)
|
||||
{
|
||||
foreach (explode(' ', $sCSSClasses) as $sCSSClass) {
|
||||
if (!empty($sCSSClass)) {
|
||||
$this->aCSSClasses[$sCSSClass] = $sCSSClass;
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
|
||||
@@ -83,9 +83,11 @@ abstract class UIBlock implements iUIBlock
|
||||
/** @var array */
|
||||
protected $aCssFilesRelPath;
|
||||
/** @var array Array <KEY> => <VALUE> which will be output as HTML data-xxx attributes (eg. data-<KEY>="<VALUE>") */
|
||||
protected $aDataAttributes;
|
||||
protected $aDataAttributes = [];
|
||||
/** @var bool show or hide the current block */
|
||||
protected $bIsHidden;
|
||||
/** @var array */
|
||||
protected $aAdditionalCSSClasses = [];
|
||||
|
||||
/**
|
||||
* UIBlock constructor.
|
||||
@@ -103,7 +105,6 @@ abstract class UIBlock implements iUIBlock
|
||||
$this->aJsTemplateRelPath[self::ENUM_JS_TYPE_ON_READY] = static::DEFAULT_JS_ON_READY_TEMPLATE_REL_PATH;
|
||||
$this->sCssTemplateRelPath = static::DEFAULT_CSS_TEMPLATE_REL_PATH;
|
||||
$this->sGlobalTemplateRelPath = static::DEFAULT_GLOBAL_TEMPLATE_REL_PATH;
|
||||
$this->aDataAttributes = [];
|
||||
$this->bIsHidden = static::DEFAULT_IS_HIDDEN;
|
||||
}
|
||||
|
||||
@@ -129,6 +130,7 @@ abstract class UIBlock implements iUIBlock
|
||||
if (!in_array($sType, [self::ENUM_JS_TYPE_LIVE, self::ENUM_JS_TYPE_ON_INIT, self::ENUM_JS_TYPE_ON_READY])) {
|
||||
throw new UIException($this, "Type of javascript $sType not supported");
|
||||
}
|
||||
|
||||
return $this->aJsTemplateRelPath[$sType];
|
||||
}
|
||||
|
||||
@@ -243,6 +245,7 @@ abstract class UIBlock implements iUIBlock
|
||||
public function AddJsFileRelPath(string $sPath)
|
||||
{
|
||||
$this->aJsFilesRelPath[] = $sPath;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -252,6 +255,7 @@ abstract class UIBlock implements iUIBlock
|
||||
public function AddCssFileRelPath(string $sPath)
|
||||
{
|
||||
$this->aCssFilesRelPath[] = $sPath;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -299,6 +303,49 @@ abstract class UIBlock implements iUIBlock
|
||||
return $aFiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sCSSClasses with space as separator, like <code>ibo-is-hidden ibo-alert--body</code>
|
||||
*
|
||||
* @return $this
|
||||
*
|
||||
* @use aAdditionalCSSClasses
|
||||
*/
|
||||
public function AddCSSClasses(string $sCSSClasses)
|
||||
{
|
||||
foreach (explode(' ', $sCSSClasses) as $sCSSClass) {
|
||||
if (!empty($sCSSClass)) {
|
||||
$this->aAdditionalCSSClasses[$sCSSClass] = $sCSSClass;
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides additional classes with the specified value
|
||||
*
|
||||
* @param string $sCSSClasses with space as separator, like <code>ibo-is-hidden ibo-alert--body</code>
|
||||
*
|
||||
* @return $this
|
||||
*
|
||||
* @use aAdditionalCSSClasses
|
||||
*/
|
||||
public function SetCSSClasses(string $sCSSClasses)
|
||||
{
|
||||
$this->aAdditionalCSSClasses = [];
|
||||
$this->AddCSSClasses($sCSSClasses);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function GetAdditionalCSSClasses(): string
|
||||
{
|
||||
return implode(' ', $this->aAdditionalCSSClasses);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an array of the URL of the block $sFilesType and its sub blocks.
|
||||
* URL is relative unless the $bAbsoluteUrl is set to true.
|
||||
@@ -343,6 +390,7 @@ abstract class UIBlock implements iUIBlock
|
||||
public function SetDataAttributes(array $aDataAttributes)
|
||||
{
|
||||
$this->aDataAttributes = $aDataAttributes;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -356,6 +404,7 @@ abstract class UIBlock implements iUIBlock
|
||||
public function AddDataAttribute(string $sName, string $sValue)
|
||||
{
|
||||
$this->aDataAttributes[$sName] = $sValue;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -375,6 +424,7 @@ abstract class UIBlock implements iUIBlock
|
||||
public function SetIsHidden(bool $bIsHidden)
|
||||
{
|
||||
$this->bIsHidden = $bIsHidden;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div id="{{ oUIBlock.GetId() }}"
|
||||
class="ibo-alert ibo-is-{{ oUIBlock.GetColor() }}{% if oUIBlock.IsOpenedByDefault() %} ibo-is-opened{% endif %}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}">
|
||||
class="ibo-alert ibo-is-{{ oUIBlock.GetColor() }}{% if oUIBlock.IsOpenedByDefault() %} ibo-is-opened{% endif %}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %} {{ oUIBlock.GetAdditionalCSSClasses() }}">
|
||||
{% if oUIBlock.IsCollapsible() %}
|
||||
<div class="ibo-alert--action-button ibo-alert--maximize-button" data-role="ibo-alert--collapse-toggler">
|
||||
<i class="fas fa-caret-down"></i>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<button id="{{ oUIBlock.GetId() }}"
|
||||
class="ibo-button ibo-is-{{ oUIBlock.GetActionType() }} ibo-is-{{ oUIBlock.GetColor() }} {{ oUIBlock.GetAdditionalCSSClass() }}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}"
|
||||
class="ibo-button ibo-is-{{ oUIBlock.GetActionType() }} ibo-is-{{ oUIBlock.GetColor() }} {{ oUIBlock.GetAdditionalCSSClasses() }}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}"
|
||||
{% if oUIBlock.GetDataAttributes() %}
|
||||
{% for sName, sValue in oUIBlock.GetDataAttributes() %}
|
||||
data-{{ sName }}="{{ sValue }}"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div id="{{ oUIBlock.GetId() }}"
|
||||
class="ibo-collapsible-section {{ oUIBlock.GetCSSClasses() }}{% if oUIBlock.IsOpenedByDefault() %} ibo-is-opened{% endif %}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}">
|
||||
class="ibo-collapsible-section {{ oUIBlock.GetAdditionalCSSClass() }}{% if oUIBlock.IsOpenedByDefault() %} ibo-is-opened{% endif %}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}">
|
||||
<div class="ibo-collapsible-section--header" data-role="ibo-collapsible-section--collapse-toggler">
|
||||
<div class="ibo-collapsible-section--action-button ibo-collapsible-section--maximize-button"><i
|
||||
class="fas fa-caret-down"></i></div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{# @copyright Copyright (C) 2010-2020 Combodo SARL #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{% apply spaceless %}
|
||||
<div id="{{ oUIBlock.GetId() }}" class="ibo-panel ibo-is-{{ oUIBlock.GetColor() }} {{ oUIBlock.GetCSSClasses() }}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}" {% block iboPanelMetaData %}{% endblock %}>
|
||||
<div id="{{ oUIBlock.GetId() }}" class="ibo-panel ibo-is-{{ oUIBlock.GetColor() }} {{ oUIBlock.GetAdditionalCSSClass() }}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}" {% block iboPanelMetaData %}{% endblock %}>
|
||||
<div class="ibo-panel--header">
|
||||
{% block iboPanelHeader %}
|
||||
<div class="ibo-panel--header-left">
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
{# Content Block #}
|
||||
{% apply spaceless %}
|
||||
|
||||
{% set bHasDiv = (oUIBlock.GetCSSClasses() or oUIBlock.GetDataAttributes()) %}
|
||||
{% set bHasDiv = (oUIBlock.GetAdditionalCSSClass() or oUIBlock.GetDataAttributes()) %}
|
||||
|
||||
{% block iboContentBlockContainer %}
|
||||
{% if bHasDiv %}
|
||||
<div id="{{ oUIBlock.GetId() }}"
|
||||
class="{% if oUIBlock.GetCSSClasses() %}{{ oUIBlock.GetCSSClasses() }}{% endif %}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}"
|
||||
class="{% if oUIBlock.GetAdditionalCSSClass() %}{{ oUIBlock.GetCSSClasses() }}{% endif %}{% if oUIBlock.IsHidden() %} ibo-is-hidden{% endif %}"
|
||||
{% if oUIBlock.GetDataAttributes() %}
|
||||
{% for sName, sValue in oUIBlock.GetDataAttributes() %}
|
||||
data-{{ sName }}="{{ sValue }}"
|
||||
|
||||
Reference in New Issue
Block a user