Commit 15ebfddb authored by Sylvain's avatar Sylvain

Bootstrap 5

parent bb85e931
<?php
namespace Goldenscarab\Modulus\Helpers;
use Illuminate\Support\Arr;
class Bootstrap5 {
/**
* Retourne le rendu html d'un bouton
* ex : <button type="button" class="btn [CLASSES]" [ATTRIBUTES]>[LABEL]</button>
*
* @param array $attrs
* [
* 'label' => 'Nom du bouton',
* 'class' => 'btn-success btn-sm',
* 'id' => 'id-du-bouton' (option)
* ]
* @return string
*/
public static function renderButton(array $attrs): string
{
$render = '';
$template = '<button type="button" class="btn %s"%s>%s</button>';
$class = mixte_get($attrs, 'class', 'btn-default btn-sm btn-flat');
$label = mixte_get($attrs, 'label');
$permission = mixte_get($attrs, 'permission');
if (!auth()->user()->can($permission)) {
$class .= ' disabled';
}
$attributes = Arr::except($attrs, ['class', 'label', 'permission']);
$render = vsprintf($template, [
$class,
self::renderAttributes($attributes),
$label
]);
return $render;
}
/**
* Retourne le rendu html d'un lien de type bouton
* ex : <a class="btn [CLASSES]" href="[LIEN]" [ATTRIBUTES]>[LABEL]</a>
*
* @param array $attrs
* [
* 'label' => 'Nom du bouton',
* 'class' => 'btn-success btn-sm',
* 'href => 'test.html',
* 'id' => 'id-du-bouton' (option)
* ]
* @return string
*/
public static function renderAButton(array $attrs): string
{
$render = '';
$template = '<a class="btn text-nowrap btn-flat btn-sm %s"%s>%s</a>';
$class = mixte_get($attrs, 'class', 'btn-success');
$label = mixte_get($attrs, 'label');
$permission = mixte_get($attrs, 'permission');
if (!auth()->user()->can($permission)) {
$class .= ' disabled';
}
$attributes = Arr::except($attrs, ['class', 'label', 'permission']);
$render = vsprintf($template, [
$class,
self::renderAttributes($attributes),
$label
]);
return $render;
}
public static function renderAButtonDropDown(array $attrs): string
{
$render = '';
$template = <<<EOT
<div class="btn-group">
%s
<div class="btn-group" role="group">
<button type="button" class="btn btn-sm border border-start-0 %s dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false"%s>
%s
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu dropdown-menu-right" role="menu">
%s
</div>
</div>
</div>
EOT;
$render_button = self::renderAButton(data_get($attrs, 'button'));
$dropdown = data_get($attrs, 'dropdown');
$attrs_dropdown = Arr::except($dropdown, ['items', 'class', 'label', 'permission']);
$class_dropdown = data_get($dropdown, 'class', 'btn-default');
$label_dropdown = data_get($dropdown, 'label');
$items_dropdown = data_get($dropdown, 'items', []);
$permission = data_get($attrs, 'permission');
if (!auth()->user()->can($permission)) {
$class_dropdown .= ' disabled';
}
$render = vsprintf($template, [
$render_button,
$class_dropdown,
self::renderAttributes($attrs_dropdown),
$label_dropdown,
self::renderDropdownItems($items_dropdown)
]);
return $render;
}
public static function renderDropdownItems(array $items): string
{
$render = '';
$template = '<a class="dropdown-item%s"%s>%s</a>';
foreach($items as $item) {
if (is_array($item) && !array_key_exists('label', $item)) {
throw new \InvalidArgumentException("Dropdown required key `label` " . json_encode($item) . ' given');
}
if (is_string($item)) {
$render .= $item;
continue;
}
$attrs = Arr::except($item, ['label', 'class']);
$label = data_get($item, 'label', 'N/A');
$class = data_get($item, 'class');
$permission = data_get($attrs, 'permission');
if (!auth()->user()->can($permission)) {
$class .= ' disabled';
}
$render .= vsprintf($template, [
empty($class) ? '' : ' ' . $class,
self::renderAttributes($attrs),
$label
]);
}
return $render;
}
private static function renderAttributes(array $attrs): string
{
$render = '';
$template = ' %s="%s"';
foreach ($attrs as $name => $value) {
if ($name != 'permission') {
$render .= vsprintf($template, [$name, $value]);
}
}
return $render;
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment