new: [bootstrapHelper:listGroup] Added list group support
parent
dc5d54c30e
commit
f2d5c65fed
|
@ -111,6 +111,12 @@ class BootstrapHelper extends Helper
|
||||||
return $bsProgressTimeline->progressTimeline();
|
return $bsProgressTimeline->progressTimeline();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function listGroup($options, $data)
|
||||||
|
{
|
||||||
|
$bsListGroup = new BootstrapListGroup($options, $data, $this);
|
||||||
|
return $bsListGroup->listGroup();
|
||||||
|
}
|
||||||
|
|
||||||
public function genNode($node, $params=[], $content='')
|
public function genNode($node, $params=[], $content='')
|
||||||
{
|
{
|
||||||
return BootstrapGeneric::genNode($node, $params, $content);
|
return BootstrapGeneric::genNode($node, $params, $content);
|
||||||
|
@ -1277,3 +1283,99 @@ class BoostrapProgressTimeline extends BootstrapGeneric {
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class BootstrapListGroup extends BootstrapGeneric
|
||||||
|
{
|
||||||
|
private $defaultOptions = [
|
||||||
|
'hover' => false,
|
||||||
|
];
|
||||||
|
|
||||||
|
private $bsClasses = null;
|
||||||
|
|
||||||
|
function __construct($options, $data, $btHelper) {
|
||||||
|
$this->data = $data;
|
||||||
|
$this->processOptions($options);
|
||||||
|
$this->btHelper = $btHelper;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function processOptions($options)
|
||||||
|
{
|
||||||
|
$this->options = array_merge($this->defaultOptions, $options);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function listGroup()
|
||||||
|
{
|
||||||
|
return $this->genListGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function genListGroup()
|
||||||
|
{
|
||||||
|
$html = $this->openNode('div', [
|
||||||
|
'class' => ['list-group',],
|
||||||
|
]);
|
||||||
|
foreach ($this->data as $item) {
|
||||||
|
$html .= $this->genItem($item);
|
||||||
|
}
|
||||||
|
$html .= $this->closeNode('div');
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function genItem($item)
|
||||||
|
{
|
||||||
|
if (!empty($item['heading'])) { // complex layout with heading, badge and body
|
||||||
|
$html = $this->genNode('a', [
|
||||||
|
'class' => ['list-group-item', (!empty($this->options['hover']) ? 'list-group-item-action' : ''),],
|
||||||
|
], implode('', [
|
||||||
|
$this->genHeadingGroup($item),
|
||||||
|
$this->genBody($item),
|
||||||
|
]));
|
||||||
|
} else { // simple layout with just <li>-like elements
|
||||||
|
$html = $this->genNode('a', [
|
||||||
|
'class' => ['list-group-item', 'd-flex', 'align-items-center', 'justify-content-between'],
|
||||||
|
], implode('', [
|
||||||
|
h($item['text']),
|
||||||
|
$this->genBadge($item)
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function genHeadingGroup($item)
|
||||||
|
{
|
||||||
|
$html = $this->genNode('div', [
|
||||||
|
'class' => ['d-flex', 'w-100', 'justify-content-between',],
|
||||||
|
], implode('', [
|
||||||
|
$this->genHeading($item),
|
||||||
|
$this->genBadge($item)
|
||||||
|
]));
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function genHeading($item)
|
||||||
|
{
|
||||||
|
if (empty($item['heading'])) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
return $this->genNode('h5', [
|
||||||
|
'class' => ['mb-1'],
|
||||||
|
], h($item['heading']));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function genBadge($item)
|
||||||
|
{
|
||||||
|
if (empty($item['badge'])) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
return $this->genNode('span', [
|
||||||
|
'class' => ['badge badge-pill', (!empty($item['badge-variant']) ? "badge-{$item['badge-variant']}" : 'badge-primary')],
|
||||||
|
], h($item['badge']));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function genBody($item)
|
||||||
|
{
|
||||||
|
if (!empty($item['bodyHTML'])) {
|
||||||
|
return $item['bodyHTML'];
|
||||||
|
}
|
||||||
|
return !empty($item['body']) ? h($item['body']) : '';
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue