107 lines
2.5 KiB
PHP
107 lines
2.5 KiB
PHP
<?php
|
|
namespace nur\v\bs3\vc;
|
|
|
|
use nur\b\params\Tparametrable;
|
|
use nur\b\ValueException;
|
|
use nur\func;
|
|
use nur\v\vo;
|
|
|
|
/**
|
|
* Class CListGroup: afficher une liste d'éléments
|
|
*/
|
|
class CListGroup extends _CItemList {
|
|
use Tparametrable;
|
|
|
|
const CONTAINER = null;
|
|
|
|
const PARAMETRABLE_PARAMS_SCHEMA = [
|
|
"list_group_class" => ["?array", null, "classe CSS de la liste"],
|
|
"container" => ["string", "ul", "container de la liste: ul ou div"],
|
|
"item_func" => ["?callable", null, "fonction avec la signature (\$vs, \$item) retournant l'élément à afficher"],
|
|
];
|
|
|
|
function __construct(?iterable $items=null, ?array $params=null) {
|
|
self::set_parametrable_params_defaults($params, [
|
|
"container" => static::CONTAINER,
|
|
]);
|
|
parent::__construct($items, $params);
|
|
}
|
|
|
|
protected $ppListGroupClass;
|
|
|
|
private $ctag, $itag;
|
|
|
|
function pp_setContainer(string $container): self {
|
|
switch ($container) {
|
|
case "ul":
|
|
$this->ctag = "ul";
|
|
$this->itag = "li";
|
|
break;
|
|
case "div":
|
|
$this->ctag = "div";
|
|
$this->itag = "a";
|
|
break;
|
|
default:
|
|
throw ValueException::invalid_value($container, "container");
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/** @var array */
|
|
protected $itemCtx;
|
|
|
|
function pp_setItemFunc($itemFunc): void {
|
|
if ($itemFunc === null) $this->itemCtx = null;
|
|
else $this->itemCtx = func::_prepare($itemFunc);
|
|
}
|
|
|
|
/** retourner le contenu associé au conteneur */
|
|
function container(): ?array {
|
|
return null;
|
|
}
|
|
|
|
protected function _printStartContainer($container): void {
|
|
vo::start($this->ctag, [
|
|
"class" => ["list-group", $this->ppListGroupClass],
|
|
$this->container(),
|
|
]);
|
|
}
|
|
|
|
function printStartContainer(): void {
|
|
$this->_printStartContainer($this->container());
|
|
}
|
|
|
|
function printEndContainer(): void {
|
|
vo::end($this->ctag);
|
|
}
|
|
|
|
/** retourner le contenu associé à l'élément spécifié. */
|
|
function item($item): ?iterable {
|
|
$vs = [$item];
|
|
if ($this->itemCtx !== null) {
|
|
$vs = func::_call($this->itemCtx, [$vs, $item]);
|
|
}
|
|
return $vs;
|
|
}
|
|
|
|
protected function _printStartItem(): void {
|
|
vo::start($this->itag, [
|
|
"class" => "list-group-item",
|
|
]);
|
|
}
|
|
protected function _printEndItem(): void {
|
|
vo::end($this->itag);
|
|
}
|
|
|
|
protected function _printItem($item): void {
|
|
vo::tag($this->itag, [
|
|
"class" => "list-group-item",
|
|
$item,
|
|
], true);
|
|
}
|
|
|
|
function printItem($item): void {
|
|
$this->_printItem($this->item($item));
|
|
}
|
|
}
|