new: [helper:boostrap-helper] Added support of modal
parent
474cd6c9eb
commit
ddccb758b8
|
@ -78,6 +78,11 @@ class BootstrapHelper extends Helper
|
||||||
return $bsBadge->badge();
|
return $bsBadge->badge();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function modal($options)
|
||||||
|
{
|
||||||
|
$bsButton = new BoostrapModal($options);
|
||||||
|
return $bsButton->modal();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class BootstrapGeneric
|
class BootstrapGeneric
|
||||||
|
@ -696,3 +701,157 @@ class BoostrapBadge extends BootstrapGeneric {
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class BoostrapModal extends BootstrapGeneric {
|
||||||
|
private $defaultOptions = [
|
||||||
|
'size' => '',
|
||||||
|
'centered' => true,
|
||||||
|
'scrollable' => true,
|
||||||
|
'backdropStatic' => false,
|
||||||
|
'title' => '',
|
||||||
|
'titleHtml' => false,
|
||||||
|
'body' => '',
|
||||||
|
'bodyHtml' => false,
|
||||||
|
'footerHtml' => false,
|
||||||
|
'confirmText' => 'Confirm',
|
||||||
|
'cancelText' => 'Cancel',
|
||||||
|
'modalClass' => [''],
|
||||||
|
'headerClass' => [''],
|
||||||
|
'bodyClass' => [''],
|
||||||
|
'footerClass' => [''],
|
||||||
|
'type' => 'ok-only',
|
||||||
|
'variant' => '',
|
||||||
|
'confirmFunction' => '',
|
||||||
|
'cancelFunction' => ''
|
||||||
|
];
|
||||||
|
|
||||||
|
private $bsClasses = null;
|
||||||
|
|
||||||
|
function __construct($options) {
|
||||||
|
$this->allowedOptionValues = [
|
||||||
|
'size' => ['sm', 'lg', 'xl', ''],
|
||||||
|
'type' => ['ok-only','confirm','confirm-success','confirm-warning','confirm-danger'],
|
||||||
|
'variant' => array_merge(BootstrapGeneric::$variants, ['']),
|
||||||
|
];
|
||||||
|
$this->processOptions($options);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function processOptions($options)
|
||||||
|
{
|
||||||
|
$this->options = array_merge($this->defaultOptions, $options);
|
||||||
|
$this->checkOptionValidity();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function modal()
|
||||||
|
{
|
||||||
|
return $this->genModal();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function genModal()
|
||||||
|
{
|
||||||
|
$dialog = $this->openNode('div', [
|
||||||
|
'class' => array_merge(
|
||||||
|
['modal-dialog', (!empty($this->options['size'])) ? "modal-{$this->options['size']}" : ''],
|
||||||
|
$this->options['modalClass']
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
$content = $this->openNode('div', [
|
||||||
|
'class' => ['modal-content'],
|
||||||
|
]);
|
||||||
|
$header = $this->genHeader();
|
||||||
|
$body = $this->genBody();
|
||||||
|
$footer = $this->genFooter();
|
||||||
|
$closedDiv = $this->closeNode('div');
|
||||||
|
|
||||||
|
$html = "{$dialog}{$content}{$header}{$body}{$footer}{$closedDiv}{$closedDiv}";
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function genHeader()
|
||||||
|
{
|
||||||
|
$header = $this->openNode('div', ['class' => array_merge(['modal-header'], $this->options['headerClass'])]);
|
||||||
|
if (!empty($this->options['titleHtml'])) {
|
||||||
|
$header .= $this->options['titleHtml'];
|
||||||
|
} else {
|
||||||
|
$header .= $this->genNode('h5', ['class' => ['modal-title']], h($this->options['title']));
|
||||||
|
}
|
||||||
|
if (empty($this->options['backdropStatic'])) {
|
||||||
|
$header .= $this->genericCloseButton('modal');
|
||||||
|
}
|
||||||
|
$header .= $this->closeNode('div');
|
||||||
|
return $header;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function genBody()
|
||||||
|
{
|
||||||
|
$body = $this->openNode('div', ['class' => array_merge(['modal-body'], $this->options['bodyClass'])]);
|
||||||
|
if (!empty($this->options['bodyHtml'])) {
|
||||||
|
$body .= $this->options['bodyHtml'];
|
||||||
|
} else {
|
||||||
|
$body .= h($this->options['body']);
|
||||||
|
}
|
||||||
|
$body .= $this->closeNode('div');
|
||||||
|
return $body;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function genFooter()
|
||||||
|
{
|
||||||
|
$footer = $this->openNode('div', ['class' => array_merge(['modal-footer'], $this->options['footerClass'])]);
|
||||||
|
if (!empty($this->options['footerHtml'])) {
|
||||||
|
$footer .= $this->options['footerHtml'];
|
||||||
|
} else {
|
||||||
|
$footer .= $this->getFooterBasedOnType();
|
||||||
|
}
|
||||||
|
$footer .= $this->closeNode('div');
|
||||||
|
return $footer;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getFooterBasedOnType() {
|
||||||
|
if ($this->options['type'] == 'ok-only') {
|
||||||
|
return $this->getFooterOkOnly();
|
||||||
|
} else if (str_contains($this->options['type'], 'confirm')) {
|
||||||
|
return $this->getFooterConfirm();
|
||||||
|
} else {
|
||||||
|
return $this->getFooterOkOnly();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getFooterOkOnly()
|
||||||
|
{
|
||||||
|
return (new BoostrapButton([
|
||||||
|
'variant' => 'primary',
|
||||||
|
'text' => __('Ok'),
|
||||||
|
'params' => [
|
||||||
|
'data-dismiss' => 'modal',
|
||||||
|
'onclick' => $this->options['confirmFunction']
|
||||||
|
]
|
||||||
|
]))->button();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getFooterConfirm()
|
||||||
|
{
|
||||||
|
if ($this->options['type'] == 'confirm') {
|
||||||
|
$variant = 'primary';
|
||||||
|
} else {
|
||||||
|
$variant = explode('-', $this->options['type'])[1];
|
||||||
|
}
|
||||||
|
$buttonCancel = (new BoostrapButton([
|
||||||
|
'variant' => 'secondary',
|
||||||
|
'text' => h($this->options['cancelText']),
|
||||||
|
'params' => [
|
||||||
|
'data-dismiss' => 'modal',
|
||||||
|
'onclick' => $this->options['cancelFunction']
|
||||||
|
]
|
||||||
|
]))->button();
|
||||||
|
|
||||||
|
$buttonConfirm = (new BoostrapButton([
|
||||||
|
'variant' => $variant,
|
||||||
|
'text' => h($this->options['confirmText']),
|
||||||
|
'params' => [
|
||||||
|
'data-dismiss' => 'modal',
|
||||||
|
'onclick' => $this->options['confirmFunction']
|
||||||
|
]
|
||||||
|
]))->button();
|
||||||
|
return $buttonCancel . $buttonConfirm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue