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:
Pierre Goiffon
2021-01-21 09:50:34 +01:00
parent 26f800d488
commit f723862def
12 changed files with 77 additions and 88 deletions

View File

@@ -94,8 +94,6 @@ class Button extends UIBlock
protected $sJsCode; protected $sJsCode;
/** @var string $sOnClickJsCode */ /** @var string $sOnClickJsCode */
protected $sOnClickJsCode; protected $sOnClickJsCode;
/** @var array */
protected $aAdditionalCSSClasses;
/** /**
* Button constructor. * Button constructor.
@@ -131,7 +129,6 @@ class Button extends UIBlock
$this->sJsCode = $sJsCode; $this->sJsCode = $sJsCode;
$this->sOnClickJsCode = $sOnClickJsCode; $this->sOnClickJsCode = $sOnClickJsCode;
$this->bIsDisabled = false; $this->bIsDisabled = false;
$this->aAdditionalCSSClasses = [];
$this->aDataAttributes = ['role' => 'ibo-button']; $this->aDataAttributes = ['role' => 'ibo-button'];
} }
@@ -346,24 +343,4 @@ class Button extends UIBlock
return $this; 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;
}
} }

View File

@@ -29,9 +29,9 @@ class FormTable extends StaticTable
/** @var iUIBlock[] */ /** @var iUIBlock[] */
private $aRows; 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->SetRef($sRef);
$this->aRows = []; $this->aRows = [];
} }

View File

@@ -51,10 +51,10 @@ class StaticTable extends UIContentBlock
* ] * ]
*/ */
private $aData; 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->aColumns = [];
$this->aData = []; $this->aData = [];
} }

View File

@@ -19,8 +19,8 @@ class FieldBadge extends UIContentBlock
// Overloaded constants // Overloaded constants
public const BLOCK_CODE = 'ibo-field-badge'; 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);
} }
} }

View File

@@ -69,13 +69,13 @@ class PopoverMenuItem extends UIBlock
} }
/** /**
* @see \ApplicationPopupMenuItem::SetCssClasses()
*
* @param array $aCssClasses * @param array $aCssClasses
* *
* @return $this * @return $this
* @uses oPopupMenuItem
* @uses \ApplicationPopupMenuItem::SetCssClasses()
*/ */
public function SetCssClasses(array $aCssClasses) public function SetMenuItemCssClasses(array $aCssClasses)
{ {
$this->oPopupMenuItem->SetCssClasses($aCssClasses); $this->oPopupMenuItem->SetCssClasses($aCssClasses);
@@ -83,13 +83,13 @@ class PopoverMenuItem extends UIBlock
} }
/** /**
* @see \ApplicationPopupMenuItem::AddCssClass()
*
* @param string $sCssClass * @param string $sCssClass
* *
* @return $this * @return $this
* @uses oPopupMenuItem
* @uses \ApplicationPopupMenuItem::AddCssClass()
*/ */
public function AddCssClass(string $sCssClass) public function AddMenuItemCssClass(string $sCssClass)
{ {
$this->oPopupMenuItem->AddCssClass($sCssClass); $this->oPopupMenuItem->AddCssClass($sCssClass);
@@ -97,10 +97,11 @@ class PopoverMenuItem extends UIBlock
} }
/** /**
* @see \ApplicationPopupMenuItem::GetCssClasses()
* @return array * @return array
* @uses oPopupMenuItem
* @uses \ApplicationPopupMenuItem::GetCssClasses()
*/ */
public function GetCssClasses() public function GetMenuItemCssClasses(): array
{ {
return $this->oPopupMenuItem->GetCssClasses(); return $this->oPopupMenuItem->GetCssClasses();
} }

View File

@@ -28,8 +28,6 @@ class UIContentBlock extends UIBlock implements iUIContentBlock
public const BLOCK_CODE = 'ibo-content-block'; public const BLOCK_CODE = 'ibo-content-block';
public const DEFAULT_HTML_TEMPLATE_REL_PATH = 'base/layouts/content-block/layout'; public const DEFAULT_HTML_TEMPLATE_REL_PATH = 'base/layouts/content-block/layout';
/** @var array */
protected $aCSSClasses;
/** @var array */ /** @var array */
protected $aSubBlocks; protected $aSubBlocks;
/** @var array */ /** @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 * Generates a <div> only if $sContainerClass if not empty or block has data attributes
* *
* @param string|null $sId * @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); parent::__construct($sId);
$this->aSubBlocks = []; $this->aSubBlocks = [];
$this->aDeferredBlocks = []; $this->aDeferredBlocks = [];
$this->SetCSSClasses($sContainerClass); $this->SetCSSClasses($sContainerClasses);
} }
/** /**
@@ -121,43 +119,6 @@ class UIContentBlock extends UIBlock implements iUIContentBlock
return $this; 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 * @inheritDoc
*/ */

View File

@@ -83,9 +83,11 @@ abstract class UIBlock implements iUIBlock
/** @var array */ /** @var array */
protected $aCssFilesRelPath; protected $aCssFilesRelPath;
/** @var array Array <KEY> => <VALUE> which will be output as HTML data-xxx attributes (eg. data-<KEY>="<VALUE>") */ /** @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 */ /** @var bool show or hide the current block */
protected $bIsHidden; protected $bIsHidden;
/** @var array */
protected $aAdditionalCSSClasses = [];
/** /**
* UIBlock constructor. * 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->aJsTemplateRelPath[self::ENUM_JS_TYPE_ON_READY] = static::DEFAULT_JS_ON_READY_TEMPLATE_REL_PATH;
$this->sCssTemplateRelPath = static::DEFAULT_CSS_TEMPLATE_REL_PATH; $this->sCssTemplateRelPath = static::DEFAULT_CSS_TEMPLATE_REL_PATH;
$this->sGlobalTemplateRelPath = static::DEFAULT_GLOBAL_TEMPLATE_REL_PATH; $this->sGlobalTemplateRelPath = static::DEFAULT_GLOBAL_TEMPLATE_REL_PATH;
$this->aDataAttributes = [];
$this->bIsHidden = static::DEFAULT_IS_HIDDEN; $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])) { 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"); throw new UIException($this, "Type of javascript $sType not supported");
} }
return $this->aJsTemplateRelPath[$sType]; return $this->aJsTemplateRelPath[$sType];
} }
@@ -243,6 +245,7 @@ abstract class UIBlock implements iUIBlock
public function AddJsFileRelPath(string $sPath) public function AddJsFileRelPath(string $sPath)
{ {
$this->aJsFilesRelPath[] = $sPath; $this->aJsFilesRelPath[] = $sPath;
return $this; return $this;
} }
@@ -252,6 +255,7 @@ abstract class UIBlock implements iUIBlock
public function AddCssFileRelPath(string $sPath) public function AddCssFileRelPath(string $sPath)
{ {
$this->aCssFilesRelPath[] = $sPath; $this->aCssFilesRelPath[] = $sPath;
return $this; return $this;
} }
@@ -299,6 +303,49 @@ abstract class UIBlock implements iUIBlock
return $aFiles; 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. * Return an array of the URL of the block $sFilesType and its sub blocks.
* URL is relative unless the $bAbsoluteUrl is set to true. * URL is relative unless the $bAbsoluteUrl is set to true.
@@ -343,6 +390,7 @@ abstract class UIBlock implements iUIBlock
public function SetDataAttributes(array $aDataAttributes) public function SetDataAttributes(array $aDataAttributes)
{ {
$this->aDataAttributes = $aDataAttributes; $this->aDataAttributes = $aDataAttributes;
return $this; return $this;
} }
@@ -356,6 +404,7 @@ abstract class UIBlock implements iUIBlock
public function AddDataAttribute(string $sName, string $sValue) public function AddDataAttribute(string $sName, string $sValue)
{ {
$this->aDataAttributes[$sName] = $sValue; $this->aDataAttributes[$sName] = $sValue;
return $this; return $this;
} }
@@ -375,6 +424,7 @@ abstract class UIBlock implements iUIBlock
public function SetIsHidden(bool $bIsHidden) public function SetIsHidden(bool $bIsHidden)
{ {
$this->bIsHidden = $bIsHidden; $this->bIsHidden = $bIsHidden;
return $this; return $this;
} }
} }

View File

@@ -1,5 +1,5 @@
<div id="{{ oUIBlock.GetId() }}" <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() %} {% if oUIBlock.IsCollapsible() %}
<div class="ibo-alert--action-button ibo-alert--maximize-button" data-role="ibo-alert--collapse-toggler"> <div class="ibo-alert--action-button ibo-alert--maximize-button" data-role="ibo-alert--collapse-toggler">
<i class="fas fa-caret-down"></i> <i class="fas fa-caret-down"></i>

View File

@@ -1,5 +1,5 @@
<button id="{{ oUIBlock.GetId() }}" <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() %} {% if oUIBlock.GetDataAttributes() %}
{% for sName, sValue in oUIBlock.GetDataAttributes() %} {% for sName, sValue in oUIBlock.GetDataAttributes() %}
data-{{ sName }}="{{ sValue }}" data-{{ sName }}="{{ sValue }}"

View File

@@ -1,5 +1,5 @@
<div id="{{ oUIBlock.GetId() }}" <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--header" data-role="ibo-collapsible-section--collapse-toggler">
<div class="ibo-collapsible-section--action-button ibo-collapsible-section--maximize-button"><i <div class="ibo-collapsible-section--action-button ibo-collapsible-section--maximize-button"><i
class="fas fa-caret-down"></i></div> class="fas fa-caret-down"></i></div>

View File

@@ -1,7 +1,7 @@
{# @copyright Copyright (C) 2010-2020 Combodo SARL #} {# @copyright Copyright (C) 2010-2020 Combodo SARL #}
{# @license http://opensource.org/licenses/AGPL-3.0 #} {# @license http://opensource.org/licenses/AGPL-3.0 #}
{% apply spaceless %} {% 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"> <div class="ibo-panel--header">
{% block iboPanelHeader %} {% block iboPanelHeader %}
<div class="ibo-panel--header-left"> <div class="ibo-panel--header-left">

View File

@@ -3,12 +3,12 @@
{# Content Block #} {# Content Block #}
{% apply spaceless %} {% apply spaceless %}
{% set bHasDiv = (oUIBlock.GetCSSClasses() or oUIBlock.GetDataAttributes()) %} {% set bHasDiv = (oUIBlock.GetAdditionalCSSClass() or oUIBlock.GetDataAttributes()) %}
{% block iboContentBlockContainer %} {% block iboContentBlockContainer %}
{% if bHasDiv %} {% if bHasDiv %}
<div id="{{ oUIBlock.GetId() }}" <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() %} {% if oUIBlock.GetDataAttributes() %}
{% for sName, sValue in oUIBlock.GetDataAttributes() %} {% for sName, sValue in oUIBlock.GetDataAttributes() %}
data-{{ sName }}="{{ sValue }}" data-{{ sName }}="{{ sValue }}"