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;
/** @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;
}
}

View File

@@ -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 = [];
}

View File

@@ -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 = [];
}

View File

@@ -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);
}
}

View File

@@ -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();
}

View File

@@ -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
*/

View File

@@ -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;
}
}

View File

@@ -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>

View File

@@ -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 }}"

View File

@@ -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>

View File

@@ -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">

View File

@@ -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 }}"