Initial xentral_oss_20.3.c9ffacf
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Widgets\DataTable\Feature;
|
||||
|
||||
use Xentral\Widgets\DataTable\Column\Column;
|
||||
use Xentral\Widgets\DataTable\Column\ColumnCollection;
|
||||
use Xentral\Widgets\DataTable\DataTableInterface;
|
||||
use Xentral\Widgets\DataTable\Options\DataTableOptions;
|
||||
|
||||
/**
|
||||
* @see https://datatables.net/extensions/responsive/
|
||||
*/
|
||||
final class ResponsiveFeature implements DataTableFeatureInterface
|
||||
{
|
||||
/** @var int PRIO_HIGHEST */
|
||||
const PRIO_HIGHEST = 1;
|
||||
|
||||
/** @var int PRIO_HIGHER */
|
||||
const PRIO_HIGHER = 10;
|
||||
|
||||
/** @var int PRIO_NORMAL */
|
||||
const PRIO_NORMAL = 100;
|
||||
|
||||
/** @var int PRIO_LOWER */
|
||||
const PRIO_LOWER = 1000;
|
||||
|
||||
/** @var int PRIO_LOWEST */
|
||||
const PRIO_LOWEST = 10000;
|
||||
|
||||
/** @var array $responsiveProperty */
|
||||
private $responsiveProperty = [
|
||||
'details' => false,
|
||||
];
|
||||
|
||||
/** @var array $columnPriorities */
|
||||
private $columnPriorities = [];
|
||||
|
||||
/** @var int $defaultPriority */
|
||||
private $defaultPriority = self::PRIO_NORMAL;
|
||||
|
||||
/**
|
||||
* @param DataTableInterface $table
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function modifyTable(DataTableInterface $table)
|
||||
{
|
||||
$this->modifyOptions($table->getOptions());
|
||||
$this->modifyColumns($table->getColumns());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $columnName
|
||||
* @param int $priority
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setPriority($columnName, $priority)
|
||||
{
|
||||
$this->columnPriorities[$columnName] = (int)$priority;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $priority
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setDefaultPriority($priority)
|
||||
{
|
||||
$this->defaultPriority = (int)$priority;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param DataTableOptions $options
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function modifyOptions(DataTableOptions $options)
|
||||
{
|
||||
$options->setOption('responsive', $this->responsiveProperty);
|
||||
$options->removeOption('scrollX');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ColumnCollection $columns
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function modifyColumns(ColumnCollection $columns)
|
||||
{
|
||||
/** @var Column $column */
|
||||
foreach ($columns as $column) {
|
||||
$name = $column->getName();
|
||||
if (isset($this->columnPriorities[$name])) {
|
||||
$column->set('responsivePriority', $this->columnPriorities[$name]);
|
||||
} else {
|
||||
if (!$column->has('responsivePriority')) {
|
||||
$column->set('responsivePriority', $this->defaultPriority);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user