-
Notifications
You must be signed in to change notification settings - Fork 146
/
HtmlHelper.php
108 lines (95 loc) · 3.5 KB
/
HtmlHelper.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
declare(strict_types=1);
namespace BootstrapUI\View\Helper;
use Cake\View\Helper\HtmlHelper as CoreHtmlHelper;
use Cake\View\View;
class HtmlHelper extends CoreHtmlHelper
{
use OptionsAwareTrait;
/**
* Constructor
*
* ### Settings
*
* - `iconDefaults`: Default options for icons. Accepts the following options:
* - `tag`: The HTML tag to use for the icon. Default `i`.
* - `namespace`: Common class name for the icon set. Default `bi`.
* - `prefix`: Prefix for class names. Default `bi`.
* - `size`: Size class will be generated based of this. For e.g. if you use
* size `lg` class '<prefix>-lg` will be added. Default null.
*
* @param \Cake\View\View $View The View this helper is being attached to.
* @param array $config Configuration settings for the helper.
*/
public function __construct(View $View, array $config = [])
{
$this->_defaultConfig['iconDefaults'] = [
'tag' => 'i',
'namespace' => 'bi',
'prefix' => 'bi',
'size' => null,
];
parent::__construct($View, $config);
}
/**
* Returns Bootstrap badge markup. By default, uses `<span>`.
*
* ### Options
*
* - `tag`: The HTML tag to use for the badge. Default `span`.
*
* @param string $text Text to show in badge.
* @param array $options Additional options and HTML attributes.
* @return string HTML badge markup.
*/
public function badge(string $text, array $options = []): string
{
$options += ['tag' => 'span'];
$tag = $options['tag'];
unset($options['tag']);
$allClasses = $this->genAllClassNames('bg');
if ($this->hasAnyClass($allClasses, $options)) {
$options = $this->injectClasses('badge', $options);
} else {
$options = $this->injectClasses(['badge', 'secondary'], $options);
}
$classes = $this->renameClasses('bg', $options);
return $this->tag($tag, $text, $classes);
}
/**
* Returns bootstrap icon markup. By default, uses `<i>` tag and the bootstrap icon set.
*
* ### Options
*
* - `tag`: The HTML tag to use for the icon. Default `i`.
* - `namespace`: Common class name for the icon set. Default `bi`.
* - `prefix`: Prefix for class names. Default `bi`.
* - `size`: Size class will be generated based of this. For e.g. if you use
* size `lg` class '<prefix>-lg` will be added. Default null.
*
* You can use `iconDefaults` option for the helper to set default values
* for above options.
*
* @param string $name Name of icon (i.e. `search`, `exclamation`, etc.).
* @param array $options Additional options and HTML attributes.
* @return string HTML icon markup.
*/
public function icon(string $name, array $options = []): string
{
$options += $this->getConfig('iconDefaults') + [
'class' => null,
];
$classes = [$options['namespace'], $options['prefix'] . '-' . $name];
if (!empty($options['size'])) {
$classes[] = $options['prefix'] . '-' . $options['size'];
}
$options = $this->injectClasses($classes, $options);
return $this->formatTemplate('tag', [
'tag' => $options['tag'],
'attrs' => $this->templater()->formatAttributes(
$options,
['tag', 'namespace', 'prefix', 'size']
),
]);
}
}