Initial xentral_oss_20.3.c9ffacf
This commit is contained in:
@@ -0,0 +1,164 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Widgets\DataTable\Feature;
|
||||
|
||||
use Xentral\Widgets\DataTable\DataTableInterface;
|
||||
|
||||
final class TableStylingFeature implements DataTableFeatureInterface
|
||||
{
|
||||
/** @var array $cssClasses */
|
||||
private $cssClasses = [];
|
||||
|
||||
/**
|
||||
* @param bool $compact
|
||||
* @param bool $disableLineWrapping
|
||||
*/
|
||||
public function __construct($compact = false, $disableLineWrapping = false)
|
||||
{
|
||||
$this->setDefaultStyle();
|
||||
if ($compact === true) {
|
||||
$this->setCompactStyle();
|
||||
}
|
||||
if ($disableLineWrapping === true) {
|
||||
$this->disableLineWrapping();
|
||||
} else {
|
||||
$this->enableLineWrapping();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param DataTableInterface $table
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function modifyTable(DataTableInterface $table)
|
||||
{
|
||||
foreach ($this->cssClasses as $cssClass) {
|
||||
$table->getConfig()->addCssClass($cssClass);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* display: Short-hand for stripe, hover, row-border and order-column.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setDefaultStyle()
|
||||
{
|
||||
$this->removeCssClass('display');
|
||||
$this->removeCssClass('compact');
|
||||
$this->removeCssClass('order-column');
|
||||
|
||||
$this->enableHover();
|
||||
$this->disableRowBorder();
|
||||
$this->disableStripes();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function setCompactStyle()
|
||||
{
|
||||
$this->addCssClass('compact');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function enableLineWrapping()
|
||||
{
|
||||
$this->removeCssClass('nowrap');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function disableLineWrapping()
|
||||
{
|
||||
$this->addCssClass('nowrap');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function enableHover()
|
||||
{
|
||||
$this->addCssClass('hover');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function disableHover()
|
||||
{
|
||||
$this->removeCssClass('hover');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function enableStripes()
|
||||
{
|
||||
$this->addCssClass('stripe');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function disableStripes()
|
||||
{
|
||||
$this->removeCssClass('stripe');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function enableRowBorder()
|
||||
{
|
||||
$this->addCssClass('row-border');
|
||||
$this->removeCssClass('cell-border');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function disableRowBorder()
|
||||
{
|
||||
$this->removeCssClass('row-border');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $className
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function hasCssClass($className)
|
||||
{
|
||||
return in_array($className, $this->cssClasses, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $className
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function addCssClass($className)
|
||||
{
|
||||
$this->cssClasses[] = trim($className);
|
||||
$this->cssClasses = array_unique($this->cssClasses);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $className
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function removeCssClass($className)
|
||||
{
|
||||
$classKey = array_search($className, $this->cssClasses, true);
|
||||
if ($classKey !== false) {
|
||||
unset($this->cssClasses[$classKey]);
|
||||
$this->cssClasses = array_values($this->cssClasses);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user