PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 4.0.1
Tutor LMS – eLearning and online course solution v4.0.1
4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.2.0 1.2.1 1.2.11 1.2.12 1.2.13 1.2.20 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.4.0 2.5.0 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 3.9.1 3.9.10 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9
tutor / components / Badge.php
tutor / components Last commit date
Constants 4 days ago Accordion.php 4 days ago Alert.php 4 days ago AttachmentCard.php 4 days ago Avatar.php 4 days ago Badge.php 4 days ago BaseComponent.php 4 days ago Button.php 4 days ago ConfirmationModal.php 4 days ago CourseFilter.php 4 days ago DateFilter.php 4 days ago DropdownFilter.php 4 days ago EmptyState.php 4 days ago FileUploader.php 4 days ago InputField.php 4 days ago Modal.php 4 days ago Nav.php 4 days ago Pagination.php 4 days ago Popover.php 4 days ago PreviewTrigger.php 4 days ago Progress.php 4 days ago SearchFilter.php 4 days ago Sorting.php 4 days ago StarRating.php 4 days ago StarRatingInput.php 4 days ago StatusSelect.php 4 days ago SvgIcon.php 4 days ago Table.php 4 days ago Tabs.php 4 days ago Tooltip.php 4 days ago WPEditor.php 4 days ago
Badge.php
239 lines
1 <?php
2 /**
3 * Badge Component Class.
4 *
5 * Provides a fluent builder for rendering badges with
6 * different variants and styles.
7 *
8 * @package Tutor\Components
9 * @author Themeum
10 * @link https://themeum.com
11 * @since 4.0.0
12 */
13
14 namespace Tutor\Components;
15
16 defined( 'ABSPATH' ) || exit;
17
18 /**
19 * Badge Component Class.
20 *
21 * Example usage:
22 * ```
23 * Badge::make()
24 * ->label( 'Primary' )
25 * ->variant( Badge::PRIMARY )
26 * ->icon( '<svg>...</svg>' )
27 * ->render();
28 *
29 * Badge::make()
30 * ->label( 'Points: 20' )
31 * ->rounded()
32 * ->render();
33 * ```
34 *
35 * @since 4.0.0
36 */
37 class Badge extends BaseComponent {
38
39 /**
40 * Variant constants.
41 *
42 * @since 4.0.0
43 */
44 public const INFO = 'info';
45 public const PRIMARY = 'primary';
46 public const WARNING = 'warning';
47 public const SUCCESS = 'success';
48 public const SUCCESS_SOLID = 'success-solid';
49 public const ERROR = 'error';
50 public const HIGHLIGHT = 'highlight';
51 public const DISABLED = 'disabled';
52
53 /**
54 * Badge label text.
55 *
56 * @since 4.0.0
57 *
58 * @var string
59 */
60 protected $label = '';
61
62 /**
63 * Badge variant style.
64 *
65 * @since 4.0.0
66 *
67 * @see Variant constants.
68 *
69 * @var string
70 */
71 protected $variant = '';
72
73 /**
74 * Whether badge has rounded style.
75 *
76 * @since 4.0.0
77 *
78 * @var bool
79 */
80 protected $rounded = false;
81
82 /**
83 * Badge attributes.
84 *
85 * @since 4.0.0
86 *
87 * @var array
88 */
89 protected $attributes = array();
90
91 /**
92 * The SVG icon markup.
93 *
94 * @since 4.0.0
95 *
96 * @var string
97 */
98 protected $icon = '';
99
100 /**
101 * Sort Icon width.
102 *
103 * @var int
104 */
105 protected $icon_width = 16;
106
107 /**
108 * Sort Icon height.
109 *
110 * @var int
111 */
112 protected $icon_height = 16;
113
114 /**
115 * Prefix content (e.g., subdued text before label).
116 *
117 * @since 4.0.0
118 *
119 * @var string
120 */
121 protected $prefix = '';
122
123 /**
124 * Additional CSS classes.
125 *
126 * @since 4.0.0
127 *
128 * @var array
129 */
130 protected $extra_classes = array();
131
132 /**
133 * Set badge label text.
134 *
135 * @since 4.0.0
136 *
137 * @param string $label Badge label text.
138 *
139 * @return $this
140 */
141 public function label( $label ) {
142 $this->label = $label;
143 return $this;
144 }
145
146 /**
147 * Set badge variant style.
148 *
149 * @since 4.0.0
150 *
151 * @param string $variant Badge variant (primary|info|warning|success|success-solid|error|highlight).
152 *
153 * @return $this
154 */
155 public function variant( $variant ) {
156 $this->variant = esc_attr( $variant );
157 return $this;
158 }
159
160 /**
161 * Enable rounded style for badge.
162 *
163 * @since 4.0.0
164 *
165 * @return $this
166 */
167 public function rounded() {
168 $this->rounded = true;
169 return $this;
170 }
171
172 /**
173 * Set the SVG icon for the badge.
174 *
175 * @since 4.0.0
176 *
177 * @param string $icon SVG icon name or markup.
178 * @param int $width Optional. Icon width.
179 * @param int $height Optional. Icon height.
180 *
181 * @return $this
182 */
183 public function icon( string $icon, int $width = 16, int $height = 16 ): self {
184 $this->icon = $icon;
185 $this->icon_width = $width;
186 $this->icon_height = $height;
187 return $this;
188 }
189
190 /**
191 * Get the final badge HTML.
192 *
193 * @since 4.0.0
194 *
195 * @return string HTML output.
196 */
197 public function get(): string {
198 $classes = ! empty( $this->variant )
199 ? sprintf( 'tutor-badge tutor-badge-%s', esc_attr( $this->variant ) )
200 : 'tutor-badge';
201
202 if ( $this->rounded ) {
203 $classes .= ' tutor-badge-rounded';
204 }
205
206 // Merge with any custom class attribute.
207 $this->attributes['class'] = trim( "{$classes} " . ( $this->attributes['class'] ?? '' ) );
208
209 $attributes = $this->get_attributes_string();
210
211 // Build icon HTML if exists.
212 $icon_html = '';
213 if ( ! empty( $this->icon ) ) {
214 if ( false !== strpos( $this->icon, '<svg' ) ) {
215 $icon_html = $this->icon;
216 } elseif ( filter_var( $this->icon, FILTER_VALIDATE_URL ) !== false ) {
217 $icon_html = sprintf( '<img src="%s" width="%s" height="%s" alt="%s" />', esc_url( $this->icon ), esc_attr( $this->icon_width ), esc_attr( $this->icon_height ), esc_attr__( 'Badge Icon', 'tutor' ) );
218 } else {
219 $icon_html = SvgIcon::make()->name( $this->icon )->width( $this->icon_width )->height( $this->icon_height )->get();
220 }
221 }
222
223 // Build content.
224 $content = sprintf(
225 '%s%s',
226 $icon_html,
227 esc_html( $this->label )
228 );
229
230 $this->component_string = sprintf(
231 '<span %s>%s</span>',
232 $attributes,
233 $content
234 );
235
236 return $this->component_string;
237 }
238 }
239