PluginProbe
UiCore Elements – Free widgets and templates for Elementor / 1.3.17
UiCore Elements – Free widgets and templates for Elementor v1.3.17
1.3.17 1.3.16 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 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.2.0 1.2.1 1.2.2 1.2.3 1.2.4 All 41 releases
← All changes | includes/utils/post-component.php +903 -799 1.2.01.3.17 View file →
@@ -1,6 +1,8 @@
1 1 <?php
2 +
2 3 namespace UiCoreElements\Utils;
4 +
3 5 use Elementor\Controls_Manager;
4 6 use Elementor\Icons_Manager;
5 7 use Elementor\Plugin;
6 8
@@ -22,9 +24,10 @@
22 24 *
23 25 * @since 1.0.4
24 26 */
25 27
26 -trait Post_Trait {
28 +trait Post_Trait
29 +{
27 30
28 31 use Button_Trait,
29 32 Meta_Trait;
30 33
@@ -30,9 +33,9 @@
30 33
31 34 // Control Register Content functions
32 35 function TRAIT_register_post_item_controls($section = true)
33 36 {
34 - if($section) {
37 + if ($section) {
35 38 $this->start_controls_section(
36 39 'section_item_content',
37 40 [
38 41 'label' => esc_html__('Item', 'uicore-elements'),
@@ -38,92 +41,129 @@
38 41 'label' => esc_html__('Item', 'uicore-elements'),
39 42 ]
40 43 );
41 44 }
42 - $this->add_control(
43 - 'box_style',
44 - [
45 - 'label' => __('Item Style', 'uicore-elements'),
46 - 'type' => Controls_Manager::SELECT,
47 - 'default' => 'classic',
48 - 'options' => [
49 - 'classic' => __('Classic', 'uicore-elements'),
50 - 'split' => __('Split', 'uicore-elements'),
51 - 'overlay' => __('Overlay', 'uicore-elements'),
52 - ],
53 - 'render_type' => 'template',
54 - 'prefix_class' => 'ui-e-apg-',
45 + $this->add_control(
46 + 'box_style',
47 + [
48 + 'label' => __('Item Style', 'uicore-elements'),
49 + 'type' => Controls_Manager::SELECT,
50 + 'default' => 'classic',
51 + 'options' => [
52 + 'classic' => __('Classic', 'uicore-elements'),
53 + 'split' => __('Split', 'uicore-elements'),
54 + 'overlay' => __('Overlay', 'uicore-elements'),
55 + ],
56 + 'render_type' => 'template',
57 + 'prefix_class' => 'ui-e-apg-',
58 + ]
59 + );
60 + $this->add_control(
61 + 'split_mobile',
62 + [
63 + 'label' => __('Use Classic Layout on Mobile' . UICORE_ELEMENTS_NEW_OPTION, 'uicore-elements'), // TODO: remove badge, at least 2, releases after 1.3.15
64 + 'type' => Controls_Manager::SWITCHER,
65 + 'default' => 'ui-e-apg-split-not-phone',
66 + 'return_value' => 'ui-e-apg-split-not-phone',
67 + 'prefix_class' => '',
68 + 'condition' => [
69 + 'box_style' => 'split',
70 + ],
71 + ]
72 + );
73 + $this->add_control(
74 + 'image',
75 + [
76 + 'label' => __('Image', 'uicore-elements'),
77 + 'type' => Controls_Manager::SWITCHER,
78 + 'separator' => 'before',
79 + 'default' => 'yes'
80 + ]
81 + );
82 + $this->add_control(
83 + 'image_size_select',
84 + [
85 + 'label' => __('Image Size', 'uicore-elements'),
86 + 'type' => Controls_Manager::SELECT,
87 + 'default' => 'uicore-medium',
88 + 'options' => Helper::get_images_sizes(),
89 + 'separator' => 'after',
90 + 'condition' => [
91 + 'image' => 'yes',
55 92 ]
56 - );
57 - $this->add_control(
58 - 'image',
59 - [
60 - 'label' => __('Image', 'uicore-elements'),
61 - 'type' => Controls_Manager::SWITCHER,
62 - 'separator' => 'before',
63 - 'default' => 'yes'
93 + ]
94 + );
95 + $this->add_control(
96 + 'title',
97 + [
98 + 'label' => __('Title', 'uicore-elements'),
99 + 'type' => Controls_Manager::SWITCHER,
100 + 'default' => 'yes'
101 + ]
102 + );
103 + $this->add_control(
104 + 'title_tag',
105 + [
106 + 'label' => __('HTML Tag', 'uicore-elements'),
107 + 'type' => Controls_Manager::SELECT,
108 + 'default' => 'h4',
109 + 'options' => Helper::get_title_tags(),
110 + 'separator' => 'after',
111 + 'condition' => [
112 + 'title' => 'yes',
64 113 ]
65 - );
66 - $this->add_control(
67 - 'image_size_select',
68 - [
69 - 'label' => __('Image Size', 'uicore-elements'),
70 - 'type' => Controls_Manager::SELECT,
71 - 'default' => 'uicore-medium',
72 - 'options' => Helper::get_images_sizes(),
73 - 'separator' => 'after',
74 - 'condition' => [
75 - 'image' => 'yes',
76 - ]
114 + ]
115 + );
116 + $this->add_control(
117 + 'excerpt',
118 + [
119 + 'label' => __('Excerpt', 'uicore-elements'),
120 + 'type' => Controls_Manager::SWITCHER,
121 + 'default' => 'yes'
122 + ]
123 + );
124 + $this->add_control(
125 + 'excerpt_trim',
126 + [
127 + 'label' => __('Excerpt Length (words)', 'uicore-elements'),
128 + 'type' => Controls_Manager::NUMBER,
129 + 'min' => 5,
130 + 'max' => 100,
131 + 'step' => 1,
132 + 'default' => 55,
133 + 'separator' => 'after',
134 + 'condition' => array(
135 + 'excerpt' => 'yes',
136 + ),
137 + ]
138 + );
139 + $this->add_control(
140 + 'show_button',
141 + [
142 + 'label' => __('Read More Button', 'uicore-elements'),
143 + 'type' => Controls_Manager::SWITCHER,
144 + 'default' => 'no'
145 + ]
146 + );
147 + $this->add_control(
148 + 'global_link',
149 + [
150 + 'label' => __('Global Wrapper Link', 'uicore-elements'),
151 + 'type' => Controls_Manager::SWITCHER,
152 + 'default' => 'no',
153 + 'condition' => [
154 + 'box_style' => 'overlay'
77 155 ]
78 - );
79 - $this->add_control(
80 - 'title',
81 - [
82 - 'label' => __('Title', 'uicore-elements'),
83 - 'type' => Controls_Manager::SWITCHER,
84 - 'default' => 'yes'
85 - ]
86 - );
87 - $this->add_control(
88 - 'excerpt',
89 - [
90 - 'label' => __('Excerpt', 'uicore-elements'),
91 - 'type' => Controls_Manager::SWITCHER,
92 - 'default' => 'yes'
93 - ]
94 - );
95 - $this->add_control(
96 - 'excerpt_trim',
97 - [
98 - 'label' => __('Excerpt Length (words)', 'uicore-elements'),
99 - 'type' => Controls_Manager::NUMBER,
100 - 'min' => 5,
101 - 'max' => 100,
102 - 'step' => 1,
103 - 'default' => 55,
104 - 'separator' => 'after',
105 - 'condition' => array(
106 - 'excerpt' => 'yes',
107 - ),
108 - ]
109 - );
110 - $this->add_control(
111 - 'show_button',
112 - [
113 - 'label' => __('Read More Button', 'uicore-elements'),
114 - 'type' => Controls_Manager::SWITCHER,
115 - 'default' => 'no'
116 - ]
117 - );
156 + ]
157 + );
118 158
119 - if($section) {
159 + if ($section) {
120 160 $this->end_controls_section();
121 161 }
122 162 }
123 163 function TRAIT_register_post_button_controls($section = true)
124 164 {
125 - if($section){
165 + if ($section) {
126 166 $this->start_controls_section(
127 167 'section_button_content',
128 168 [
129 169 'label' => esc_html__('Button', 'uicore-elements'),
@@ -133,23 +173,23 @@
133 173 ]
134 174 );
135 175 }
136 176
137 - $this->register_button_content_controls(
138 - [
139 - 'section_condition' => [
140 - 'show_button' => 'yes'
141 - ],
142 - 'button_default_text' => 'Read More'
143 - ]
144 - );
145 - $this->remove_control('button_type');
146 - $this->remove_control('link');
147 - $this->remove_control('button_css_id');
148 - $this->remove_control('size');
149 - $this->remove_control('align');
177 + $this->register_button_content_controls(
178 + [
179 + 'section_condition' => [
180 + 'show_button' => 'yes'
181 + ],
182 + 'button_default_text' => 'Read More'
183 + ]
184 + );
185 + $this->remove_control('button_type');
186 + $this->remove_control('link');
187 + $this->remove_control('button_css_id');
188 + $this->remove_control('size');
189 + $this->remove_control('align');
150 190
151 - if($section){
191 + if ($section) {
152 192 $this->end_controls_section();
153 193 }
154 194 }
155 195 /**
@@ -159,9 +199,9 @@
159 199 * @param bool $product_metas. If true, will only print options that relates with products.
160 200 */
161 201 function TRAIT_register_post_meta_controls($section = true, $product_metas = false)
162 202 {
163 - if($section){
203 + if ($section) {
164 204 $this->start_controls_section(
165 205 'section_extra_item_content',
166 206 [
167 207 'label' => esc_html__('Meta', 'uicore-elements'),
@@ -168,79 +208,85 @@
168 208 ]
169 209 );
170 210 }
171 211
172 - $this->add_control(
173 - 'top_meta',
174 - [
175 - 'label' => esc_html__('Top Meta', 'uicore-elements'),
176 - 'type' => \Elementor\Controls_Manager::REPEATER,
177 - 'fields' => $this->get_meta_content_controls($product_metas),
178 - 'default' => [
179 - [
180 - 'type' => $product_metas ? 'product sale' : 'category'
181 - ],
212 + $this->add_control(
213 + 'top_meta',
214 + [
215 + 'label' => esc_html__('Top Meta', 'uicore-elements'),
216 + 'type' => \Elementor\Controls_Manager::REPEATER,
217 + 'fields' => $this->get_meta_content_controls($product_metas),
218 + 'default' => [
219 + [
220 + 'type' => $product_metas ? 'product sale' : 'category'
182 221 ],
183 - 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
184 - 'prevent_empty' => false,
185 - 'separator' => 'before'
186 - ]
187 - );
188 - $this->add_control(
189 - 'before_title_meta',
190 - [
191 - 'label' => esc_html__('Before Title Meta', 'uicore-elements'),
192 - 'type' => \Elementor\Controls_Manager::REPEATER,
193 - 'fields' => $this->get_meta_content_controls($product_metas),
194 - 'default' => [
195 - [
196 - 'type' => $product_metas ? 'none' : 'author'
197 - ],
222 + ],
223 + 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
224 + 'prevent_empty' => false,
225 + 'separator' => 'before'
226 + ]
227 + );
228 + $this->add_control(
229 + 'before_title_meta',
230 + [
231 + 'label' => esc_html__('Before Title Meta', 'uicore-elements'),
232 + 'type' => \Elementor\Controls_Manager::REPEATER,
233 + 'fields' => $this->get_meta_content_controls($product_metas),
234 + 'default' => [
235 + [
236 + 'type' => $product_metas ? 'none' : 'author'
198 237 ],
199 - 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
200 - 'prevent_empty' => false,
201 - 'separator' => 'before',
202 - ]
203 - );
204 - $this->add_control(
205 - 'after_title_meta',
206 - [
207 - 'label' => esc_html__('After Title Meta', 'uicore-elements'),
208 - 'type' => \Elementor\Controls_Manager::REPEATER,
209 - 'fields' => $this->get_meta_content_controls($product_metas),
210 - 'default' => [
211 - [
212 - 'type' => $product_metas ? 'product price' : 'date'
213 - ],
238 + ],
239 + 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
240 + 'prevent_empty' => false,
241 + 'separator' => 'before',
242 + ]
243 + );
244 + $this->add_control(
245 + 'after_title_meta',
246 + [
247 + 'label' => esc_html__('After Title Meta', 'uicore-elements'),
248 + 'type' => \Elementor\Controls_Manager::REPEATER,
249 + 'fields' => $this->get_meta_content_controls($product_metas),
250 + 'default' => [
251 + [
252 + 'type' => $product_metas ? 'product price' : 'date'
214 253 ],
215 - 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
216 - 'prevent_empty' => false,
217 - 'separator' => 'before',
218 - ]
219 - );
220 - $this->add_control(
221 - 'bottom_meta',
222 - [
223 - 'label' => esc_html__('Bottom Meta', 'uicore-elements'),
224 - 'type' => \Elementor\Controls_Manager::REPEATER,
225 - 'fields' => $this->get_meta_content_controls($product_metas),
226 - 'default' => [
227 - [
228 - 'type' => $product_metas ? 'none' : 'none'
229 - ],
254 + ],
255 + 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
256 + 'prevent_empty' => false,
257 + 'separator' => 'before',
258 + ]
259 + );
260 + $this->add_control(
261 + 'bottom_meta',
262 + [
263 + 'label' => esc_html__('Bottom Meta', 'uicore-elements'),
264 + 'type' => \Elementor\Controls_Manager::REPEATER,
265 + 'fields' => $this->get_meta_content_controls($product_metas),
266 + 'default' => [
267 + [
268 + 'type' => $product_metas ? 'none' : 'none'
230 269 ],
231 - 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
232 - 'prevent_empty' => false,
233 - 'separator' => 'before',
234 - ]
235 - );
236 - if($section){
270 + ],
271 + 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>',
272 + 'prevent_empty' => false,
273 + 'separator' => 'before',
274 + ]
275 + );
276 + if ($section) {
237 277 $this->end_controls_section();
238 278 }
239 279 }
240 280 function TRAIT_register_post_query_controls($section = true)
241 281 {
242 - if($section){
282 +
283 + // In some contexts, such as theme-builder, our custom controls are not available
284 + if (! class_exists('UiCoreElements\Controls\Post_Filter')) {
285 + require_once UICORE_ELEMENTS_INCLUDES . '/controls/class-post-filter-control.php';
286 + }
287 +
288 + if ($section) {
243 289 $this->start_controls_section(
244 290 'section_post_grid_def',
245 291 [
246 292 'label' => esc_html__('Query', 'uicore-elements'),
@@ -247,87 +293,115 @@
247 293 ]
248 294 );
249 295 }
250 296
251 - $this->add_group_control(
252 - Post_Filter::get_type(),
253 - [
254 - 'name' => 'posts-filter',
255 - 'label' => esc_html__('Posts', 'uicore-elements'),
256 - 'description' => esc_html__('Current Query Settings > Reading', 'uicore-elements'),
257 - ]
258 - );
259 - $this->add_control(
260 - 'item_limit',
261 - [
262 - 'label' => esc_html__('Item Limit', 'uicore-elements'),
263 - 'type' => Controls_Manager::SLIDER,
264 - 'reder_type' => 'template',
265 - 'range' => [
266 - 'px' => [
267 - 'min' => -1,
268 - 'max' => 100,
269 - ],
297 + $this->add_group_control(
298 + Post_Filter::get_type(),
299 + [
300 + 'name' => 'posts-filter',
301 + 'label' => esc_html__('Posts', 'uicore-elements'),
302 + 'description' => esc_html__('Current Query Settings > Reading', 'uicore-elements'),
303 + ]
304 + );
305 + $this->add_control(
306 + 'item_order',
307 + [
308 + 'label' => esc_html__('Item Order', 'uicore-elements'),
309 + 'type' => Controls_Manager::SELECT,
310 + 'options' => [
311 + 'ASC' => esc_html__('Ascending', 'uicore-elements'),
312 + 'DESC' => esc_html__('Descending', 'uicore-elements'),
313 + ],
314 + 'default' => 'DESC',
315 + ]
316 + );
317 + $this->add_control(
318 + 'item_order_by',
319 + [
320 + 'label' => esc_html__('Item Order By', 'uicore-elements'),
321 + 'type' => Controls_Manager::SELECT,
322 + 'options' => [
323 + 'date' => esc_html__('Date', 'uicore-elements'),
324 + 'modified' => esc_html__('Modified Date', 'uicore-elements'),
325 + 'title' => esc_html__('Title', 'uicore-elements'),
326 + 'rand' => esc_html__('Random', 'uicore-elements'),
327 + 'comment_count' => esc_html__('Comments Count', 'uicore-elements'),
328 + 'menu_order' => esc_html__('Menu Order', 'uicore-elements'),
329 + ],
330 + 'default' => 'date',
331 + ]
332 + );
333 + $this->add_control(
334 + 'item_limit',
335 + [
336 + 'label' => esc_html__('Item Limit', 'uicore-elements'),
337 + 'type' => Controls_Manager::SLIDER,
338 + 'reder_type' => 'template',
339 + 'range' => [
340 + 'px' => [
341 + 'min' => -1,
342 + 'max' => 100,
270 343 ],
271 - 'default' => [
272 - 'size' => 3,
273 - ],
274 - 'condition' => array(
275 - 'posts-filter_post_type!' => 'current',
276 - ),
277 - ]
278 - );
344 + ],
345 + 'default' => [
346 + 'size' => 3,
347 + ],
348 + 'condition' => array(
349 + 'posts-filter_post_type!' => 'current',
350 + ),
351 + ]
352 + );
279 353
280 - $this->add_control(
281 - 'offset',
282 - [
283 - 'label' => esc_html__('Query Offset', 'uicore-elements'),
284 - 'type' => Controls_Manager::SLIDER,
285 - 'render_type' => 'template',
286 - 'range' => [
287 - 'px' => [
288 - 'min' => -1,
289 - 'max' => 10,
290 - ],
354 + $this->add_control(
355 + 'offset',
356 + [
357 + 'label' => esc_html__('Query Offset', 'uicore-elements'),
358 + 'type' => Controls_Manager::SLIDER,
359 + 'render_type' => 'template',
360 + 'range' => [
361 + 'px' => [
362 + 'min' => -1,
363 + 'max' => 10,
291 364 ],
292 - 'default' => [
293 - 'size' => 0,
294 - ],
295 - 'condition' => [
296 - 'pagination_type' => 'numbers',
297 - ]
365 + ],
366 + 'default' => [
367 + 'size' => 0,
368 + ],
369 + 'condition' => [
370 + 'pagination_type' => 'numbers',
298 371 ]
299 - );
372 + ]
373 + );
300 374
301 - $this->add_control(
302 - 'offset_alert',
303 - [
304 - 'type' => Controls_Manager::ALERT,
305 - 'alert_type' => 'info',
306 - 'content' => esc_html__('Offset is disabled with Load More pagination.', 'uicore-elements'),
307 - 'condition' => [
308 - 'pagination_type!' => 'numbers',
309 - ]
375 + $this->add_control(
376 + 'offset_alert',
377 + [
378 + 'type' => Controls_Manager::ALERT,
379 + 'alert_type' => 'info',
380 + 'content' => esc_html__('Offset is disabled with Load More pagination.', 'uicore-elements'),
381 + 'condition' => [
382 + 'pagination_type!' => 'numbers',
310 383 ]
311 - );
384 + ]
385 + );
312 386
313 - $this->add_control(
314 - 'sticky',
315 - [
316 - 'label' => esc_html__('Sticky Posts', 'uicore-elements'),
317 - 'type' => Controls_Manager::SWITCHER,
318 - 'label_on' => esc_html__('Show', 'uicore-elements'),
319 - 'label_off' => esc_html__('Hide', 'uicore-elements'),
320 - 'description' => esc_html__('Sticky posts works only on the front-end.', 'uicore-elements'),
321 - 'return_value' => 1,
322 - 'default' => 0,
323 - 'condition' => [
324 - 'pagination!' => 'yes',
325 - ],
326 - ]
327 - );
387 + $this->add_control(
388 + 'sticky',
389 + [
390 + 'label' => esc_html__('Sticky Posts', 'uicore-elements'),
391 + 'type' => Controls_Manager::SWITCHER,
392 + 'label_on' => esc_html__('Show', 'uicore-elements'),
393 + 'label_off' => esc_html__('Hide', 'uicore-elements'),
394 + 'description' => esc_html__('Sticky posts works only on the front-end.', 'uicore-elements'),
395 + 'return_value' => 1,
396 + 'default' => 0,
397 + 'condition' => [
398 + 'pagination!' => 'yes',
399 + ],
400 + ]
401 + );
328 402
329 - if($section){
403 + if ($section) {
330 404 $this->end_controls_section();
331 405 }
332 406 }
333 407
@@ -333,9 +407,9 @@
333 407
334 408 // Control Register Styles functions
335 409 function TRAIT_register_post_item_style_controls($section = true, $active_tab = false)
336 410 {
337 - if($section){
411 + if ($section) {
338 412 $this->start_controls_section(
339 413 'section_style_item',
340 414 [
341 415 'label' => __('Item Style', 'uicore-elements'),
@@ -343,132 +417,132 @@
343 417 ]
344 418 );
345 419 }
346 420
347 - $this->start_controls_tabs(
348 - 'item_border_shadow'
349 - );
421 + $this->start_controls_tabs(
422 + 'item_border_shadow'
423 + );
350 424
351 - $this->start_controls_tab(
352 - 'item_bs_normal_tab',
353 - [
354 - 'label' => esc_html__('Normal', 'uicore-elements'),
355 - ]
356 - );
357 - $this->add_group_control(
358 - Group_Control_Background::get_type(),
359 - [
360 - 'name' => 'content_bg',
361 - 'types' => [ 'classic', 'gradient' ],
362 - 'selector' => '{{WRAPPER}} .ui-e-item article',
363 - ]
364 - );
365 - $this->add_group_control(
366 - Group_Control_Border::get_type(),
367 - [
368 - 'name' => 'item_border',
369 - 'selector' => '{{WRAPPER}} .ui-e-item article',
370 - ]
371 - );
372 - $this->add_group_control(
373 - Group_Control_Box_Shadow::get_type(),
374 - [
375 - 'name' => 'item_shadow',
376 - 'selector' => '{{WRAPPER}} .ui-e-item article',
377 - ]
378 - );
379 - $this->end_controls_tab();
425 + $this->start_controls_tab(
426 + 'item_bs_normal_tab',
427 + [
428 + 'label' => esc_html__('Normal', 'uicore-elements'),
429 + ]
430 + );
431 + $this->add_group_control(
432 + Group_Control_Background::get_type(),
433 + [
434 + 'name' => 'content_bg',
435 + 'types' => ['classic', 'gradient'],
436 + 'selector' => '{{WRAPPER}} .ui-e-item article',
437 + ]
438 + );
439 + $this->add_group_control(
440 + Group_Control_Border::get_type(),
441 + [
442 + 'name' => 'item_border',
443 + 'selector' => '{{WRAPPER}} .ui-e-item article',
444 + ]
445 + );
446 + $this->add_group_control(
447 + Group_Control_Box_Shadow::get_type(),
448 + [
449 + 'name' => 'item_shadow',
450 + 'selector' => '{{WRAPPER}} .ui-e-item article',
451 + ]
452 + );
453 + $this->end_controls_tab();
380 454
381 - $this->start_controls_tab(
382 - 'item_bs_hover_tab',
383 - [
384 - 'label' => esc_html__('Hover', 'uicore-elements'),
385 - ]
386 - );
387 - $this->add_group_control(
388 - Group_Control_Background::get_type(),
389 - [
390 - 'name' => 'content_bg_hover',
391 - 'types' => [ 'classic', 'gradient' ],
392 - 'selector' => '{{WRAPPER}} .ui-e-item article',
393 - ]
394 - );
395 - $this->add_group_control(
396 - Group_Control_Border::get_type(),
397 - [
398 - 'name' => 'item_border_hover',
399 - 'selector' => '{{WRAPPER}} .ui-e-item:hover article',
400 - ]
401 - );
402 - $this->add_group_control(
403 - Group_Control_Box_Shadow::get_type(),
404 - [
405 - 'name' => 'item_shadow_hover',
406 - 'selector' => '{{WRAPPER}} .ui-e-item:hover article',
407 - ]
408 - );
409 - $this->end_controls_tab();
455 + $this->start_controls_tab(
456 + 'item_bs_hover_tab',
457 + [
458 + 'label' => esc_html__('Hover', 'uicore-elements'),
459 + ]
460 + );
461 + $this->add_group_control(
462 + Group_Control_Background::get_type(),
463 + [
464 + 'name' => 'content_bg_hover',
465 + 'types' => ['classic', 'gradient'],
466 + 'selector' => '{{WRAPPER}} .ui-e-item:hover article',
467 + ]
468 + );
469 + $this->add_group_control(
470 + Group_Control_Border::get_type(),
471 + [
472 + 'name' => 'item_border_hover',
473 + 'selector' => '{{WRAPPER}} .ui-e-item:hover article',
474 + ]
475 + );
476 + $this->add_group_control(
477 + Group_Control_Box_Shadow::get_type(),
478 + [
479 + 'name' => 'item_shadow_hover',
480 + 'selector' => '{{WRAPPER}} .ui-e-item:hover article',
481 + ]
482 + );
483 + $this->end_controls_tab();
410 484
411 - if($active_tab){
412 - $this->start_controls_tab(
413 - 'item_bs_active_tab',
414 - [
415 - 'label' => esc_html__('Active', 'uicore-elements'),
416 - ]
417 - );
418 - $this->add_group_control(
419 - Group_Control_Border::get_type(),
420 - [
421 - 'name' => 'item_border_active',
422 - 'selector' => '{{WRAPPER}} .ui-e-item.ui-e-active article',
423 - ]
424 - );
425 - $this->add_group_control(
426 - Group_Control_Box_Shadow::get_type(),
427 - [
428 - 'name' => 'item_shadow_active',
429 - 'selector' => '{{WRAPPER}} .ui-e-item.ui-e-active article',
430 - ]
431 - );
432 - $this->end_controls_tab();
433 - }
434 -
435 - $this->end_controls_tabs();
436 -
437 - $this->add_control(
438 - 'item_padding',
485 + if ($active_tab) {
486 + $this->start_controls_tab(
487 + 'item_bs_active_tab',
439 488 [
440 - 'label' => esc_html__('Padding', 'uicore-elements'),
441 - 'type' => Controls_Manager::DIMENSIONS,
442 - 'size_units' => ['px', 'em', 'rem', '%'],
443 - 'separator' => 'before',
444 - 'selectors' => [
445 - '{{WRAPPER}} .ui-e-item article' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
446 - ],
447 - 'condition' => array(
448 - 'box_style!' => 'overlay',
449 - ),
489 + 'label' => esc_html__('Active', 'uicore-elements'),
450 490 ]
451 -
452 491 );
453 - $this->add_control(
454 - 'item_radius',
492 + $this->add_group_control(
493 + Group_Control_Border::get_type(),
455 494 [
456 - 'label' => esc_html__('Border Radius', 'uicore-elements'),
457 - 'type' => Controls_Manager::DIMENSIONS,
458 - 'selectors' => [
459 - '{{WRAPPER}} ' => '--ui-e-border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;'
460 - ],
495 + 'name' => 'item_border_active',
496 + 'selector' => '{{WRAPPER}} .ui-e-item.ui-e-active article',
461 497 ]
462 498 );
499 + $this->add_group_control(
500 + Group_Control_Box_Shadow::get_type(),
501 + [
502 + 'name' => 'item_shadow_active',
503 + 'selector' => '{{WRAPPER}} .ui-e-item.ui-e-active article',
504 + ]
505 + );
506 + $this->end_controls_tab();
507 + }
463 508
464 - if($section){
509 + $this->end_controls_tabs();
510 +
511 + $this->add_control(
512 + 'item_padding',
513 + [
514 + 'label' => esc_html__('Padding', 'uicore-elements'),
515 + 'type' => Controls_Manager::DIMENSIONS,
516 + 'size_units' => ['px', 'em', 'rem', '%'],
517 + 'separator' => 'before',
518 + 'selectors' => [
519 + '{{WRAPPER}} .ui-e-item article' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
520 + ],
521 + 'condition' => array(
522 + 'box_style!' => 'overlay',
523 + ),
524 + ]
525 +
526 + );
527 + $this->add_control(
528 + 'item_radius',
529 + [
530 + 'label' => esc_html__('Border Radius', 'uicore-elements'),
531 + 'type' => Controls_Manager::DIMENSIONS,
532 + 'selectors' => [
533 + '{{WRAPPER}} ' => '--ui-e-border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;'
534 + ],
535 + ]
536 + );
537 +
538 + if ($section) {
465 539 $this->end_controls_section();
466 540 }
467 541 }
468 542 function TRAIT_register_post_content_style_controls($section = true)
469 543 {
470 - if($section){
544 + if ($section) {
471 545 $this->start_controls_section(
472 546 'section_style_content',
473 547 [
474 548 'label' => __('Content Style', 'uicore-elements'),
@@ -475,235 +549,302 @@
475 549 'tab' => Controls_Manager::TAB_STYLE,
476 550 ]
477 551 );
478 552 }
479 - $this->add_control(
480 - 'image_size',
481 - [
482 - 'label' => __('Image Height (%)', 'uicore-elements'),
483 - 'type' => Controls_Manager::NUMBER,
484 - 'min' => 1,
485 - 'max' => 500,
486 - 'step' => 1,
487 - 'default' => 57,
488 - 'selectors' => [
489 - '{{WRAPPER}} .ui-e-post-top' => '--ui-e-img-size: {{VALUE}}',
553 + $this->add_responsive_control(
554 + 'image_size',
555 + [
556 + 'label' => __('Image Height (%)', 'uicore-elements'),
557 + 'type' => Controls_Manager::NUMBER,
558 + 'min' => 1,
559 + 'max' => 500,
560 + 'step' => 1,
561 + 'default' => 57,
562 + 'selectors' => [
563 + '{{WRAPPER}} .ui-e-post-top' => '--ui-e-img-size: {{VALUE}}',
564 + ],
565 + 'condition' => [
566 + 'masonry!' => 'ui-e-maso',
567 + ],
568 + ]
569 + );
570 + $this->add_responsive_control(
571 + 'image_position',
572 + [
573 + 'label' => __('Image Position', 'uicore-elements'),
574 + 'type' => Controls_Manager::SELECT,
575 + 'default' => 'center center',
576 + 'tablet_default' => '',
577 + 'mobile_default' => '',
578 + 'options' => [
579 + '' => esc_html__('Default', 'uicore-elements'),
580 + 'left top' => esc_html__('Left Top', 'uicore-elements'),
581 + 'left center' => esc_html__('Left Center', 'uicore-elements'),
582 + 'left bottom' => esc_html__('Left Bottom', 'uicore-elements'),
583 + 'center top' => esc_html__('Center Top', 'uicore-elements'),
584 + 'center center' => esc_html__('Center Center', 'uicore-elements'),
585 + 'center bottom' => esc_html__('Center Bottom', 'uicore-elements'),
586 + 'right top' => esc_html__('Right Top', 'uicore-elements'),
587 + 'right center' => esc_html__('Right Center', 'uicore-elements'),
588 + 'right bottom' => esc_html__('Right Bottom', 'uicore-elements'),
589 + ],
590 + 'selectors' => [
591 + '{{WRAPPER}} .ui-e-post-img' => 'background-position: {{VALUE}}',
592 + ],
593 + ]
594 + );
595 + $this->add_responsive_control(
596 + 'image_fit',
597 + [
598 + 'label' => __('Image Fit', 'uicore-elements'),
599 + 'type' => Controls_Manager::SELECT,
600 + 'default' => 'cover',
601 + 'tablet_default' => '',
602 + 'mobile_default' => '',
603 + 'options' => [
604 + '' => esc_html__('Default', 'uicore-elements'),
605 + 'cover' => esc_html__('Cover', 'uicore-elements'),
606 + 'contain' => esc_html__('Contain', 'uicore-elements'),
607 + 'auto' => esc_html__('Auto', 'uicore-elements'),
608 + ],
609 + 'selectors' => [
610 + '{{WRAPPER}} .ui-e-post-img' => 'background-size: {{VALUE}}',
611 + ],
612 + ]
613 + );
614 + $this->add_control(
615 + 'image_radius',
616 + [
617 + 'label' => esc_html__('Border Radius', 'uicore-elements'),
618 + 'type' => Controls_Manager::DIMENSIONS,
619 + 'size_units' => ['px', 'em', '%'],
620 + 'selectors' => [
621 + '{{WRAPPER}} .ui-e-post-top' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}px {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
622 + ],
623 + 'condition' => array(
624 + 'box_style!' => 'overlay',
625 + ),
626 + ]
627 + );
628 + $this->add_group_control(
629 + Group_Control_Box_Shadow::get_type(),
630 + [
631 + 'name' => 'image_shadow',
632 + 'label' => esc_html__('Box Shadow', 'uicore-elements'),
633 + 'selector' => '{{WRAPPER}} .ui-e-post-top',
634 + 'condition' => array(
635 + 'box_style!' => 'overlay',
636 + ),
637 + ]
638 + );
639 + $this->add_responsive_control(
640 + 'content_alignment',
641 + [
642 + 'label' => esc_html__('Content Alignment', 'uicore-elements'),
643 + 'type' => Controls_Manager::CHOOSE,
644 + 'options' => [
645 + 'start' => [
646 + 'title' => esc_html__('Left', 'uicore-elements'),
647 + 'icon' => 'eicon-text-align-left',
490 648 ],
491 - 'condition' => [
492 - 'masonry!' => 'ui-e-maso',
649 + 'center' => [
650 + 'title' => esc_html__('Center', 'uicore-elements'),
651 + 'icon' => 'eicon-text-align-center',
493 652 ],
494 - ]
495 - );
496 - $this->add_control(
497 - 'image_radius',
498 - [
499 - 'label' => esc_html__('Border Radius', 'uicore-elements'),
500 - 'type' => Controls_Manager::DIMENSIONS,
501 - 'size_units' => ['px', 'em', '%'],
502 - 'selectors' => [
503 - '{{WRAPPER}} .ui-e-post-top' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}px {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
653 + 'end' => [
654 + 'title' => esc_html__('Right', 'uicore-elements'),
655 + 'icon' => 'eicon-text-align-right',
504 656 ],
505 - 'condition' => array(
506 - 'box_style!' => 'overlay',
507 - ),
508 - ]
509 - );
510 - $this->add_group_control(
511 - Group_Control_Box_Shadow::get_type(),
512 - [
513 - 'name' => 'image_shadow',
514 - 'label' => esc_html__('Box Shadow', 'uicore-elements'),
515 - 'selector' => '{{WRAPPER}} .ui-e-post-top',
516 - 'condition' => array(
517 - 'box_style!' => 'overlay',
518 - ),
519 - ]
520 - );
521 - $this->add_responsive_control(
522 - 'content_alignment',
523 - [
524 - 'label' => esc_html__('Content Alignment', 'uicore-elements'),
525 - 'type' => Controls_Manager::CHOOSE,
526 - 'options' => [
527 - 'left' => [
528 - 'title' => esc_html__('Left', 'uicore-elements'),
529 - 'icon' => 'eicon-text-align-left',
530 - ],
531 - 'center' => [
532 - 'title' => esc_html__('Center', 'uicore-elements'),
533 - 'icon' => 'eicon-text-align-center',
534 - ],
535 - 'stretch' => [
536 - 'title' => esc_html__('Justified', 'uicore-elements'),
537 - 'icon' => 'eicon-text-align-justify',
538 - ],
657 + 'stretch' => [
658 + 'title' => esc_html__('Justified', 'uicore-elements'),
659 + 'icon' => 'eicon-text-align-justify',
539 660 ],
540 - 'selectors' => [
541 - '{{WRAPPER}} .ui-e-post-content' => 'align-items: {{VALUE}}; text-align: {{VALUE}};',
661 + ],
662 + 'selectors_dictionary' => [
663 + 'left' => 'start',
664 + ],
665 + 'default' => is_rtl() ? 'end' : 'start',
666 + 'selectors' => [
667 + '{{WRAPPER}} .ui-e-post-content' => 'align-items: {{VALUE}}; text-align: {{VALUE}};',
668 + ],
669 + ]
670 + );
671 + $this->add_control(
672 + 'title_color',
673 + [
674 + 'label' => esc_html__('Title Color', 'uicore-elements'),
675 + 'type' => Controls_Manager::COLOR,
676 + 'default' => '',
677 + 'separator' => 'before',
678 + 'selectors' => [
679 + '{{WRAPPER}} .ui-e-post-title' => 'color: {{VALUE}};',
680 + ],
681 + ]
682 + );
683 + $this->add_control(
684 + 'title_hcolor',
685 + [
686 + 'label' => esc_html__('Title Hover Color', 'uicore-elements'),
687 + 'type' => Controls_Manager::COLOR,
688 + 'default' => '',
689 + 'selectors' => [
690 + '{{WRAPPER}} .ui-e-post-title:hover' => 'color: {{VALUE}};',
691 + ],
692 + ]
693 + );
694 + $this->add_group_control(
695 + Group_Control_Typography::get_type(),
696 + [
697 + 'name' => 'title_typography',
698 + 'label' => esc_html__('Title Typography', 'uicore-elements'),
699 + 'selector' => '{{WRAPPER}} .ui-e-post-title',
700 + ]
701 + );
702 + $this->add_responsive_control(
703 + 'title_gap',
704 + [
705 + 'label' => __('Title Top Space', 'uicore-elements'),
706 + 'type' => Controls_Manager::SLIDER,
707 + 'size_units' => ['em'],
708 + 'separator' => 'after',
709 + 'range' => [
710 + 'px' => [
711 + 'min' => 0,
712 + 'max' => 3,
713 + 'step' => 0.1,
542 714 ],
543 - ]
544 - );
545 - $this->add_control(
546 - 'title_color',
547 - [
548 - 'label' => esc_html__('Title Color', 'uicore-elements'),
549 - 'type' => Controls_Manager::COLOR,
550 - 'default' => '',
551 - 'separator' => 'before',
552 - 'selectors' => [
553 - '{{WRAPPER}} .ui-e-post-title' => 'color: {{VALUE}};',
715 + ],
716 + 'default' => [
717 + 'unit' => 'em',
718 + 'size' => 1.2,
719 + ],
720 + 'selectors' => [
721 + '{{WRAPPER}} .ui-e-post-title' => 'margin-top: {{SIZE}}em;',
722 + ],
723 + ]
724 + );
725 + $this->add_control(
726 + 'text_color',
727 + [
728 + 'label' => esc_html__('Excerpt Color', 'uicore-elements'),
729 + 'type' => Controls_Manager::COLOR,
730 + 'default' => '',
731 + 'selectors' => [
732 + '{{WRAPPER}} .ui-e-post-text' => 'color: {{VALUE}};',
733 + ],
734 + ]
735 + );
736 + $this->add_group_control(
737 + Group_Control_Typography::get_type(),
738 + [
739 + 'name' => 'text_typography',
740 + 'label' => esc_html__('Excerpt Typography', 'uicore-elements'),
741 + 'selector' => '{{WRAPPER}} .ui-e-post-text',
742 + ]
743 + );
744 + $this->add_responsive_control(
745 + 'text_gap',
746 + [
747 + 'label' => __('Excerpt Top Space', 'uicore-elements'),
748 + 'type' => Controls_Manager::SLIDER,
749 + 'size_units' => ['em'],
750 + 'separator' => 'after',
751 + 'range' => [
752 + 'px' => [
753 + 'min' => 0,
754 + 'max' => 3,
755 + 'step' => 0.1,
554 756 ],
555 - ]
556 - );
557 - $this->add_control(
558 - 'title_hcolor',
559 - [
560 - 'label' => esc_html__('Title Hover Color', 'uicore-elements'),
561 - 'type' => Controls_Manager::COLOR,
562 - 'default' => '',
563 - 'selectors' => [
564 - '{{WRAPPER}} .ui-e-post-title:hover' => 'color: {{VALUE}};',
757 + ],
758 + 'default' => [
759 + 'unit' => 'em',
760 + 'size' => 0.8,
761 + ],
762 + 'selectors' => [
763 + '{{WRAPPER}} .ui-e-post-text' => 'margin-top: {{SIZE}}em;',
764 + ],
765 + ]
766 + );
767 + $this->add_group_control(
768 + Group_Control_Background::get_type(),
769 + [
770 + 'name' => 'content_background',
771 + 'selector' => '{{WRAPPER}} .ui-e-post-content',
772 + ]
773 + );
774 + $this->add_group_control(
775 + Group_Control_Background::get_type(),
776 + [
777 + 'name' => 'content_background_hover',
778 + 'selector' => '{{WRAPPER}} .ui-e-item:hover .ui-e-post-content',
779 + 'fields_options' => [
780 + 'background' => [
781 + 'label' => esc_html__('Hover Background', 'uicore-elements'),
565 782 ],
783 + ],
784 + 'condition' => [
785 + 'box_style' => 'overlay',
566 786 ]
567 - );
568 - $this->add_group_control(
569 - Group_Control_Typography::get_type(),
570 - [
571 - 'name' => 'title_typography',
572 - 'label' => esc_html__('Title Typography', 'uicore-elements'),
573 - 'selector' => '{{WRAPPER}} .ui-e-post-title',
787 + ]
788 + );
789 + $this->add_responsive_control(
790 + 'content_padding',
791 + [
792 + 'label' => esc_html__('Content Padding', 'uicore-elements'),
793 + 'type' => Controls_Manager::DIMENSIONS,
794 + 'size_units' => ['px', 'em', '%'],
795 + 'selectors' => [
796 + '{{WRAPPER}} .ui-e-post-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
574 797 ]
575 - );
576 - $this->add_control(
577 - 'title_gap',
578 - [
579 - 'label' => __('Title Top Space', 'uicore-elements'),
580 - 'type' => Controls_Manager::SLIDER,
581 - 'size_units' => ['em'],
582 - 'separator' => 'after',
583 - 'range' => [
584 - 'px' => [
585 - 'min' => 0,
586 - 'max' => 3,
587 - 'step' => 0.1,
588 - ],
798 + ]
799 + );
800 + $this->add_control(
801 + 'content_radius',
802 + [
803 + 'label' => esc_html__('Content Border Radius', 'uicore-elements'),
804 + 'type' => Controls_Manager::DIMENSIONS,
805 + 'selectors' => [
806 + '{{WRAPPER}} .ui-e-post-content' => 'border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;'
807 + ],
808 + 'condition' => array(
809 + 'box_style!' => 'overlay',
810 + ),
811 + ]
812 + );
813 + $this->add_control(
814 + 'content_gap',
815 + [
816 + 'label' => __('Content Space', 'uicore-elements'),
817 + 'type' => Controls_Manager::SLIDER,
818 + 'size_units' => ['em'],
819 + 'separator' => 'after',
820 + 'range' => [
821 + 'px' => [
822 + 'min' => 0,
823 + 'max' => 3,
824 + 'step' => 0.1,
589 825 ],
590 - 'default' => [
591 - 'unit' => 'em',
592 - 'size' => 1.2,
593 - ],
594 - 'selectors' => [
595 - '{{WRAPPER}} .ui-e-post-title' => 'margin-top: {{SIZE}}em;',
596 - ],
597 - ]
598 - );
599 - $this->add_control(
600 - 'text_color',
601 - [
602 - 'label' => esc_html__('Excerpt Color', 'uicore-elements'),
603 - 'type' => Controls_Manager::COLOR,
604 - 'default' => '',
605 - 'selectors' => [
606 - '{{WRAPPER}} .ui-e-post-text' => 'color: {{VALUE}};',
607 - ],
608 - ]
609 - );
610 - $this->add_group_control(
611 - Group_Control_Typography::get_type(),
612 - [
613 - 'name' => 'text_typography',
614 - 'label' => esc_html__('Excerpt Typography', 'uicore-elements'),
615 - 'selector' => '{{WRAPPER}} .ui-e-post-text',
616 - ]
617 - );
618 - $this->add_control(
619 - 'text_gap',
620 - [
621 - 'label' => __('Excerpt Top Space', 'uicore-elements'),
622 - 'type' => Controls_Manager::SLIDER,
623 - 'size_units' => ['em'],
624 - 'separator' => 'after',
625 - 'range' => [
626 - 'px' => [
627 - 'min' => 0,
628 - 'max' => 3,
629 - 'step' => 0.1,
630 - ],
631 - ],
632 - 'default' => [
633 - 'unit' => 'em',
634 - 'size' => 0.8,
635 - ],
636 - 'selectors' => [
637 - '{{WRAPPER}} .ui-e-post-text' => 'margin-top: {{SIZE}}em;',
638 - ],
639 - ]
640 - );
641 - $this->add_group_control(
642 - Group_Control_Background::get_type(),
643 - [
644 - 'name' => 'content_background',
645 - 'selector' => '{{WRAPPER}} .ui-e-post-content',
646 - ]
647 - );
648 - $this->add_responsive_control(
649 - 'content_padding',
650 - [
651 - 'label' => esc_html__('Content Padding', 'uicore-elements'),
652 - 'type' => Controls_Manager::DIMENSIONS,
653 - 'size_units' => ['px', 'em', '%'],
654 - 'selectors' => [
655 - '{{WRAPPER}} .ui-e-post-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};'
656 - ]
657 - ]
658 - );
659 - $this->add_control(
660 - 'content_radius',
661 - [
662 - 'label' => esc_html__('Content Border Radius', 'uicore-elements'),
663 - 'type' => Controls_Manager::DIMENSIONS,
664 - 'selectors' => [
665 - '{{WRAPPER}} .ui-e-post-content' => 'border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;'
666 - ],
667 - 'condition' => array(
668 - 'box_style!' => 'overlay',
669 - ),
670 - ]
671 - );
672 - $this->add_control(
673 - 'content_gap',
674 - [
675 - 'label' => __('Content Space', 'uicore-elements'),
676 - 'type' => Controls_Manager::SLIDER,
677 - 'size_units' => ['em'],
678 - 'separator' => 'after',
679 - 'range' => [
680 - 'px' => [
681 - 'min' => 0,
682 - 'max' => 3,
683 - 'step' => 0.1,
684 - ],
685 - ],
686 - 'default' => [
687 - 'unit' => 'em',
688 - 'size' => 0,
689 - ],
690 - 'selectors' => [
691 - '{{WRAPPER}} ' => '--ui-e-content-space: {{SIZE}}em;',
692 - ],
693 - 'condition' => array(
694 - 'box_style!' => 'overlay',
695 - ),
696 - ]
697 - );
826 + ],
827 + 'default' => [
828 + 'unit' => 'em',
829 + 'size' => 0,
830 + ],
831 + 'selectors' => [
832 + '{{WRAPPER}} ' => '--ui-e-content-space: {{SIZE}}em;',
833 + ],
834 + 'condition' => array(
835 + 'box_style!' => 'overlay',
836 + ),
837 + ]
838 + );
698 839
699 - if($section){
840 + if ($section) {
700 841 $this->end_controls_section();
701 842 }
702 843 }
703 844 function TRAIT_register_post_button_style_controls($section = true)
704 845 {
705 - if($section){
846 + if ($section) {
706 847 $this->start_controls_section(
707 848 'section_button_style',
708 849 [
709 850 'label' => esc_html__('Button Style', 'uicore-elements'),
@@ -713,57 +854,57 @@
713 854 ),
714 855 ]
715 856 );
716 857 }
717 - $this->add_responsive_control(
718 - 'button_align',
719 - [
720 - 'label' => esc_html__( 'Alignment', 'uicore-elements' ),
721 - 'type' => Controls_Manager::CHOOSE,
722 - 'options' => [
723 - 'start' => [
724 - 'title' => esc_html__( 'Left', 'uicore-elements' ),
725 - 'icon' => 'eicon-text-align-left',
726 - ],
727 - 'center' => [
728 - 'title' => esc_html__( 'Center', 'uicore-elements' ),
729 - 'icon' => 'eicon-text-align-center',
730 - ],
731 - 'end' => [
732 - 'title' => esc_html__( 'Right', 'uicore-elements' ),
733 - 'icon' => 'eicon-text-align-right',
734 - ],
735 - 'normal' => [
736 - 'title' => esc_html__( 'Justified', 'uicore-elements' ),
737 - 'icon' => 'eicon-text-align-justify',
738 - ],
858 + $this->add_responsive_control(
859 + 'button_align',
860 + [
861 + 'label' => esc_html__('Alignment', 'uicore-elements'),
862 + 'type' => Controls_Manager::CHOOSE,
863 + 'options' => [
864 + 'start' => [
865 + 'title' => esc_html__('Left', 'uicore-elements'),
866 + 'icon' => 'eicon-text-align-left',
739 867 ],
740 - 'default' => 'start',
741 - 'selectors' => [
742 - '{{WRAPPER}} .ui-e-readmore' => 'align-self: {{VALUE}};',
868 + 'center' => [
869 + 'title' => esc_html__('Center', 'uicore-elements'),
870 + 'icon' => 'eicon-text-align-center',
743 871 ],
872 + 'end' => [
873 + 'title' => esc_html__('Right', 'uicore-elements'),
874 + 'icon' => 'eicon-text-align-right',
875 + ],
876 + 'normal' => [
877 + 'title' => esc_html__('Justified', 'uicore-elements'),
878 + 'icon' => 'eicon-text-align-justify',
879 + ],
880 + ],
881 + 'default' => 'start',
882 + 'selectors' => [
883 + '{{WRAPPER}} .ui-e-readmore' => 'align-self: {{VALUE}};',
884 + ],
744 885
886 + ]
887 + );
888 + $this->register_button_style_controls(
889 + [
890 + 'section_condition' => [
891 + 'show_button' => 'yes'
745 892 ]
746 - );
747 - $this->register_button_style_controls(
748 - [
749 - 'section_condition' => [
750 - 'show_button' => 'yes'
751 - ]
752 - ]
753 - );
754 - // Remove button alignment from Elementor button traits because (seens to be a bug), updating Selector CSS with update_control(), don't work as expected with responsiveness
755 - $this->remove_responsive_control('align');
893 + ]
894 + );
895 + // Remove button alignment from Elementor button traits because (seens to be a bug), updating Selector CSS with update_control(), don't work as expected with responsiveness
896 + $this->remove_responsive_control('align');
756 897
757 - $this->TRAIT_register_post_specific_controls('button_gap');
898 + $this->TRAIT_register_post_specific_controls('button_gap');
758 899
759 - if($section) {
900 + if ($section) {
760 901 $this->end_controls_section();
761 902 }
762 903 }
763 904 function TRAIT_register_post_meta_style_controls($section = true)
764 905 {
765 - if($section) {
906 + if ($section) {
766 907 $this->start_controls_section(
767 908 'section_style_extra_content',
768 909 [
769 910 'label' => __('Meta Style', 'uicore-elements'),
@@ -770,47 +911,47 @@
770 911 'tab' => Controls_Manager::TAB_STYLE,
771 912 ]
772 913 );
773 914 }
774 - $this->start_controls_tabs('style_extra_tabs');
775 - $this->start_controls_tab(
776 - 'style_top_tab',
777 - [
778 - 'label' => esc_html__('Top', 'uicore-elements'),
779 - ]
780 - );
781 - $this->get_meta_style_controls('top');
782 - $this->end_controls_tab();
915 + $this->start_controls_tabs('style_extra_tabs');
916 + $this->start_controls_tab(
917 + 'style_top_tab',
918 + [
919 + 'label' => esc_html__('Top', 'uicore-elements'),
920 + ]
921 + );
922 + $this->get_meta_style_controls('top');
923 + $this->end_controls_tab();
783 924
784 - $this->start_controls_tab(
785 - 'style_before_title_tab',
786 - [
787 - 'label' => esc_html__('Before Title', 'uicore-elements'),
788 - ]
789 - );
790 - $this->get_meta_style_controls('before_title');
791 - $this->end_controls_tab();
925 + $this->start_controls_tab(
926 + 'style_before_title_tab',
927 + [
928 + 'label' => esc_html__('Before Title', 'uicore-elements'),
929 + ]
930 + );
931 + $this->get_meta_style_controls('before_title');
932 + $this->end_controls_tab();
792 933
793 - $this->start_controls_tab(
794 - 'style_after_title_tab',
795 - [
796 - 'label' => esc_html__('After Title', 'uicore-elements'),
797 - ]
798 - );
799 - $this->get_meta_style_controls('after_title');
800 - $this->end_controls_tab();
934 + $this->start_controls_tab(
935 + 'style_after_title_tab',
936 + [
937 + 'label' => esc_html__('After Title', 'uicore-elements'),
938 + ]
939 + );
940 + $this->get_meta_style_controls('after_title');
941 + $this->end_controls_tab();
801 942
802 - $this->start_controls_tab(
803 - 'style_bottom_tab',
804 - [
805 - 'label' => esc_html__('Bottom', 'uicore-elements'),
806 - ]
807 - );
808 - $this->get_meta_style_controls('bottom');
809 - $this->end_controls_tab();
810 - $this->end_controls_tabs();
943 + $this->start_controls_tab(
944 + 'style_bottom_tab',
945 + [
946 + 'label' => esc_html__('Bottom', 'uicore-elements'),
947 + ]
948 + );
949 + $this->get_meta_style_controls('bottom');
950 + $this->end_controls_tab();
951 + $this->end_controls_tabs();
811 952
812 - if($section) {
953 + if ($section) {
813 954 $this->end_controls_section();
814 955 }
815 956 }
816 957 function TRAIT_register_post_animation_controls()
@@ -864,8 +1005,9 @@
864 1005 'default' => '',
865 1006 'options' => [
866 1007 '' => __('None', 'uicore-elements'),
867 1008 'ui-e-title-anim-underline' => __('Underline', 'uicore-elements'),
1009 + 'ui-e-title-anim-show' => __('Show', 'uicore-elements'),
868 1010 ],
869 1011 'prefix_class' => '',
870 1012 ]
871 1013 );
@@ -947,16 +1089,20 @@
947 1089 * @param array $settings Elementor controls settings.
948 1090 * @param object $default_query The default query object. Used to tell if is a frontend or rest api request.
949 1091 *
950 1092 * @return void Don't return anything, but sets the query object to $_query variable that can be accessed by the widget.
951 - */
1093 + */
952 1094 function TRAIT_query_posts($settings, $default_query)
953 1095 {
954 1096 $post_type = $settings['posts-filter_post_type'];
955 1097
956 - if ( $post_type === 'related' ) {
957 - $this->_query = Helper::get_related('random', $settings['item_limit']['size']);
958 -
1098 + if ($post_type === 'related') {
1099 + $current_post_id = $settings['__current_post_id'] ?? [];
1100 + $this->_query = Helper::get_related_ajax(
1101 + Query::get_queried_page($settings),
1102 + $settings['item_limit']['size'],
1103 + $current_post_id
1104 + );
959 1105 } else {
960 1106 $query_args = Query::get_query_args('posts-filter', $settings);
961 1107
962 1108 if ($post_type === 'current') {
@@ -961,16 +1107,16 @@
961 1107
962 1108 if ($post_type === 'current') {
963 1109
964 1110 // Makes sure widget will render some posts at editor screen
965 - if( $this->is_edit_mode() ){
1111 + if ($this->is_edit_mode()) {
966 1112 $query_args['post_type'] = 'post';
967 -
968 1113 } else {
969 1114 $query_args = $default_query;
970 1115
1116 + /// TODO: very likely commit `38c618c` on Elements repo make this fallback useless. Test it
971 1117 // Post type fallback for APG
972 - if( isset($default_query['post_type']) || isset($default_query['query']['post_type']) ){
1118 + if (isset($default_query['post_type']) || isset($default_query['query']['post_type'])) {
973 1119 $post_type = $default_query['post_type'] ?? $default_query['query']['post_type'];
974 1120 } else {
975 1121 $post_type = 'post';
976 1122 }
@@ -977,12 +1123,20 @@
977 1123
978 1124 // Set pagination
979 1125 $query_args['paged'] = Query::get_queried_page($settings);
980 1126
1127 +
1128 + // current bug: clicking `all` on `portfolio` archive post type brings `post` type posts
1129 +
981 1130 // Set tax filters for filter component, if enabled
982 - $queried_filters = Query::get_queried_filters($settings, get_post_type(), 'posts-filter');
983 - $query_args['tax_query'] = empty($queried_filters['tax_query']) ? [] : $queried_filters['tax_query'];
1131 + $queried_filters = Query::get_queried_filters($settings, $post_type, 'posts-filter');
1132 + $query_args['tax_query'] = empty($queried_filters['tax_query'])
1133 + ? []
1134 + : $queried_filters['tax_query'];
984 1135 }
1136 +
1137 + // Set products per page
1138 + $query_args['posts_per_page'] = Helper::get_framework_visible_posts($post_type);
985 1139 }
986 1140
987 1141 if ($post_type === 'portfolio') {
988 1142 $query_args['orderby'] = 'menu_order date';
@@ -991,54 +1145,12 @@
991 1145 $this->_query = new \WP_Query($query_args);
992 1146 }
993 1147 }
994 1148
995 - /**
996 - * Match each meta icon size (if SVG) with the correspondent font size set by the user.
997 - *
998 - * @param array $settings Elementor controls settings.
999 - *
1000 - * @return void
1001 - */
1002 - function TRAIT_set_meta_font_size_to_svg($settings)
1003 - {
1004 - // Required specifically for SVG icons
1005 - if( \Elementor\Plugin::$instance->experiments->is_feature_active('e_font_icon_svg') == false ){
1006 - return;
1007 - }
1008 -
1009 - // Get all available metas
1010 - $metas = ['top_meta', 'before_title_meta', 'after_title_meta', 'bottom_meta'];
1011 - $metas_css = '';
1012 - $default_size = '16px';
1013 -
1014 - // Creates a variable for each meta font-size and set a font-size, falling back to default size as last resource.
1015 - foreach ($metas as $meta) {
1016 -
1017 - // Check if current meta has a font-size set.
1018 - ${$meta . '_size'} = isset( $settings[$meta . '_typography_font_size'] ) ? $settings[$meta . '_typography_font_size'] : $default_size;
1019 -
1020 - // Check if the font-size value is not empty (user might customize other infos but not the font-size)
1021 - ${$meta . '_size'} = !empty( ${$meta .'_size'}['size'] )
1022 - ? ${$meta .'_size'}['size'] . ${$meta .'_size'}['unit']
1023 - : $default_size;
1024 -
1025 - // Creates the css variable
1026 - $metas_css .= '--' . $meta . '-font-size: ' . esc_html(${$meta . '_size'}) . ';';
1027 - }
1028 -
1029 - // print it on the main widget wrapper
1030 - $this->add_render_attribute(
1031 - '_wrapper',
1032 - 'style',
1033 - $metas_css
1034 - );
1035 - }
1036 -
1037 - // Render functions
1149 + // Render functions
1038 1150 function get_post_image()
1039 1151 {
1040 - if ($this->get_settings_for_display('image') !== 'yes') {
1152 + if ($this->is_option('image', 'yes', '!==')) {
1041 1153 return;
1042 1154 }
1043 1155
1044 1156 $pic_id = get_post_thumbnail_id();
@@ -1044,34 +1156,36 @@
1044 1156 $pic_id = get_post_thumbnail_id();
1045 1157 if (!$pic_id)
1046 1158 return;
1047 1159 $size = $this->get_settings_for_display('image_size_select') ?? 'uicore-medium';
1048 - ?>
1049 - <a class="ui-e-post-img-wrapp"
1050 - href="<?php echo esc_url(get_permalink()); ?>"
1051 - title="<?php echo esc_attr__('View Post:', 'uicore-elements') . the_title_attribute(['echo' => false]); ?>">
1160 +?>
1161 + <a class="ui-e-post-img-wrapp"
1162 + href="<?php echo esc_url(get_permalink()); ?>"
1163 + title="<?php echo esc_attr__('View Post:', 'uicore-elements') . the_title_attribute(['echo' => false]); ?>">
1052 1164
1053 - <?php if ($this->get_settings_for_display('masonry') === 'ui-e-maso') { ?>
1054 - <?php the_post_thumbnail($size, ['class' => 'ui-e-post-img']); ?>
1055 - <?php } else { ?>
1056 - <div class="ui-e-post-img" style="background-image:url(<?php echo esc_url( wp_get_attachment_image_url($pic_id, $size)); ?>)"></div>
1057 - <?php } ?>
1058 - </a>
1059 - <?php
1165 + <?php if ($this->get_settings_for_display('masonry') === 'ui-e-maso') { ?>
1166 + <?php the_post_thumbnail($size, ['class' => 'ui-e-post-img']); ?>
1167 + <?php } else { ?>
1168 + <div class="ui-e-post-img" style="background-image:url(<?php echo esc_url(wp_get_attachment_image_url($pic_id, $size)); ?>)"></div>
1169 + <?php } ?>
1170 + </a>
1171 + <?php
1060 1172
1061 1173 }
1062 - function get_post_title()
1174 + function get_post_title(string $tag)
1063 1175 {
1064 - if ($this->get_settings_for_display('title') !== 'yes') {
1176 + if ($this->is_option('title', 'yes', '!==')) {
1065 1177 return;
1066 1178 }
1067 - ?>
1068 - <a href="<?php echo esc_url( get_permalink() );?>" title="<?php echo esc_attr__('View Post:','uicore-elements') . esc_html(the_title_attribute(['echo'=>false])); ?>">
1069 - <h4 class="ui-e-post-title"><span><?php echo esc_html(get_the_title()); ?></span></h4>
1070 - </a>
1071 - <?php
1179 + ?>
1180 + <a href="<?php echo esc_url(get_permalink()); ?>" title="<?php echo esc_attr__('View Post:', 'uicore-elements') . esc_html(the_title_attribute(['echo' => false])); ?>">
1181 + <<?php echo Helper::esc_tag($tag); ?> class="ui-e-post-title">
1182 + <span> <?php echo esc_html(get_the_title()); ?> </span>
1183 + </<?php echo Helper::esc_tag($tag); ?>>
1184 + </a>
1185 + <?php
1072 1186 }
1073 - function get_post_meta($position)
1187 + function get_post_meta($position, $product_id = null)
1074 1188 {
1075 1189 $meta_list = $this->get_settings_for_display($position . '_meta');
1076 1190 if (!isset($meta_list[0]) || $meta_list[0]['type'] == '') {
1077 1191 return;
@@ -1077,18 +1191,18 @@
1077 1191 return;
1078 1192 }
1079 1193 echo ($position == 'top') ? '<div class="ui-e-post-top-meta">' : '';
1080 1194 echo ($position == 'after_title') ? '<div class="ui-e-meta-wrapp">' : '';
1081 - echo '<div class="ui-e-post-meta ui-e-'.esc_attr($position).'">';
1082 - foreach ($meta_list as $meta) {
1083 - if($meta['type'] != 'none'){
1084 - $this->display_meta($meta);
1195 + echo '<div class="ui-e-post-meta ui-e-' . esc_attr($position) . '">';
1196 + foreach ($meta_list as $meta) {
1197 + if ($meta['type'] != 'none') {
1198 + $this->display_meta($meta, $product_id);
1085 1199
1086 - if( next( $meta_list ) && $this->get_settings_for_display( $position.'_meta_separator' ) ) {
1087 - echo '<span class="ui-e-separator">'.esc_html($this->get_settings_for_display( $position.'_meta_separator' )).'</span>';
1088 - }
1200 + if (next($meta_list) && $this->get_settings_for_display($position . '_meta_separator')) {
1201 + echo '<span class="ui-e-separator">' . esc_html($this->get_settings_for_display($position . '_meta_separator')) . '</span>';
1089 1202 }
1090 1203 }
1204 + }
1091 1205 echo '</div>';
1092 1206 echo ($position == 'top' || $position == 'after_title') ? '</div>' : '';
1093 1207 }
1094 1208 /**
@@ -1093,62 +1207,62 @@
1093 1207 }
1094 1208 /**
1095 1209 * Render the post read more button.
1096 1210 *
1097 - * @param bool $is_product. If true, will render an add to cart button.
1211 + * @param int $index The loop index.
1098 1212 *
1099 1213 * @return void
1100 1214 */
1101 - function TRAIT_get_button($is_product = false)
1215 + function TRAIT_get_button($index)
1102 1216 {
1103 - $settings = $this->get_settings_for_display();
1217 + $settings = $this->get_settings_for_display();
1104 1218
1105 - if( $is_product ){
1106 - global $product;
1219 + // Render att slugs
1220 + $button_slug = 'button_' . $index;
1221 + $content_slug = 'content-wrapper_' . $index;
1222 + $icon_slug = 'icon-align_' . $index;
1223 + $text_slug = 'text_' . $index;
1107 1224
1108 - // Get default add to cart text as fallback
1109 - $settings['text'] = empty($settings['text']) ? $product->add_to_cart_text() : $settings['text'];
1110 - }
1111 -
1112 - $this->add_render_attribute('button', [
1225 + $this->add_render_attribute($button_slug, [
1113 1226 'class' => ['elementor-button-link', 'elementor-button', 'ui-e-readmore'],
1114 1227 'role' => 'button',
1115 1228 ]);
1116 - $this->add_render_attribute('content-wrapper', 'class', 'elementor-button-content-wrapper');
1117 1229
1230 + $this->add_render_attribute($content_slug, 'class', 'elementor-button-content-wrapper');
1231 +
1118 1232 if (!empty($settings['button_css_id'])) {
1119 - $this->add_render_attribute('button', 'id', $settings['button_css_id']);
1233 + $this->add_render_attribute($button_slug, 'id', $settings['button_css_id']);
1120 1234 }
1121 1235
1122 1236 if (!empty($settings['size'])) {
1123 - $this->add_render_attribute('button', 'class', 'elementor-size-' . $settings['size']);
1237 + $this->add_render_attribute($button_slug, 'class', 'elementor-size-' . $settings['size']);
1124 1238 }
1125 1239
1126 1240 if (!empty($settings['hover_animation'])) {
1127 - $this->add_render_attribute('button', 'class', 'elementor-animation-' . $settings['hover_animation']);
1241 + $this->add_render_attribute($button_slug, 'class', 'elementor-animation-' . $settings['hover_animation']);
1128 1242 }
1129 1243
1130 1244 $btn_classes = isset($settings['icon_align'])
1131 - ? ['elementor-button-icon', 'elementor-align-icon-' . $settings['icon_align'] ]
1132 - : 'elementor-button-icon';
1245 + ? ['elementor-button-icon', 'elementor-align-icon-' . $settings['icon_align']]
1246 + : 'elementor-button-icon';
1133 1247
1134 1248 $this->add_render_attribute([
1135 - 'icon-align' => [
1249 + $icon_slug => [
1136 1250 'class' => $btn_classes
1137 1251 ],
1138 - 'text' => [
1252 + $text_slug => [
1139 1253 'class' => 'elementor-button-text',
1140 1254 ],
1141 1255 ]);
1142 1256
1143 - if( isset($settings['icon_align']) ){
1144 - $this->add_render_attribute('content-wrapper', 'class', 'elementor-button-content');
1257 + if (isset($settings['icon_align'])) {
1258 + $this->add_render_attribute($content_slug, 'class', 'elementor-button-content');
1145 1259 }
1146 1260
1147 - $tbn_content = '<span ' . $this->get_render_attribute_string('content-wrapper') . '>';
1261 + $tbn_content = '<span ' . $this->get_render_attribute_string($content_slug) . '>';
1148 1262
1149 1263 if (!empty($settings['icon']) || !empty($settings['selected_icon']['value'])) {
1150 - $tbn_content .= '<span ' . $this->get_render_attribute_string('icon-align') . '>';
1264 + $tbn_content .= '<span ' . $this->get_render_attribute_string($icon_slug) . '>';
1151 1265 \ob_start();
1152 1266 Icons_Manager::render_icon($settings['selected_icon'], ['aria-hidden' => 'true']);
1153 1267 $tbn_content .= \ob_get_clean();
1154 1268 $tbn_content .= '</span>';
@@ -1153,68 +1267,49 @@
1153 1267 $tbn_content .= \ob_get_clean();
1154 1268 $tbn_content .= '</span>';
1155 1269 }
1156 1270
1157 - $tbn_content .= '<span ' . $this->get_render_attribute_string('text') . '>';
1271 + $tbn_content .= '<span ' . $this->get_render_attribute_string($text_slug) . '>';
1158 1272 $tbn_content .= $settings['text'];
1159 1273 $tbn_content .= '</span> </span>';
1160 1274
1161 - // WooCommerce add to cart button
1162 - if ($is_product) {
1163 - if ($product) {
1164 - //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1165 - echo Helper::esc_svg(apply_filters(
1166 - 'woocommerce_loop_add_to_cart_link', // WPCS: XSS ok.
1167 - sprintf(
1168 - '<a href="%1$s" data-quantity="1" %2$s> %3$s </a>',
1169 - esc_url($product->add_to_cart_url()),
1170 - //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1171 - $this->get_render_attribute_string('button'),
1172 - wp_kses_post($tbn_content)
1173 - ),
1174 - wp_kses_post($product)
1175 - ));
1176 - }
1177 -
1178 - // Default button
1179 - } else {
1275 + ?>
1276 + <a href="<?php echo esc_url(get_permalink()); ?>" <?php $this->print_render_attribute_string($button_slug); ?>>
1277 + <?php
1278 + //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1279 + echo Helper::esc_svg($tbn_content);
1180 1280 ?>
1181 - <a href="<?php echo esc_url(get_permalink()); ?>" <?php $this->print_render_attribute_string('button'); ?>>
1182 - <?php
1183 - //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1184 - echo Helper::esc_svg( $tbn_content );
1185 - ?>
1186 - </a>
1187 - <?php
1188 - }
1281 + </a>
1282 + <?php
1189 1283 }
1284 +
1190 1285 /**
1191 1286 * Renders a post item with various settings and options.
1192 1287 * Important: any changes here should also be considered to `TRAIT_render_product()` from Product Component.
1193 1288 *
1289 + * @param int $index The loop index.
1194 1290 * @param bool $carousel Indicates if the item needs carousel classnames.
1195 1291 * @param bool $legacy Indicates if the item is using legacy classnames.
1196 1292 *
1197 1293 * @return void
1198 1294 */
1199 - function TRAIT_render_item($carousel = false, $legacy = false)
1295 + function TRAIT_render_item($index, $carousel = false, $legacy = false)
1200 1296 {
1201 1297 $settings = $this->get_settings_for_display();
1202 1298 $excerpt_length = $settings['excerpt_trim'];
1203 1299
1204 1300 // Classnames but checking if we the widget is APG (legacy version)
1205 - $item_classes = $legacy ? ['ui-e-post-item', 'ui-e-item'] : ['ui-e-item'] ; // Single item lower wrap class receptor
1301 + $item_classes = $legacy ? ['ui-e-post-item', 'ui-e-item'] : ['ui-e-item']; // Single item lower wrap class receptor
1206 1302 $hover_item_class = $legacy ? 'anim_item' : 'item_hover_animation'; // item hover animation class
1207 1303
1208 1304 // If widget is not carousel type, we set animations classes directly on item selector
1209 - if(!$carousel) {
1305 + if (!$carousel) {
1210 1306 $item_classes[] = 'ui-e-animations-wrp';
1211 1307 $item_classes[] = $settings['animate_items'] === 'ui-e-grid-animate' ? 'elementor-invisible' : '';
1212 1308 $item_classes[] = $settings[$hover_item_class] !== '' ? $settings[$hover_item_class] : '';
1213 -
1214 1309 } else {
1215 1310 // Get entrance and item hover animation classes
1216 - $entrance = (isset($settings['animate_items']) && $settings['animate_items'] == 'ui-e-grid-animate') ? 'elementor-invisible' : '';
1311 + $entrance = $this->is_option('animate_items', 'ui-e-grid-animate') ? 'elementor-invisible' : '';
1217 1312 $hover = isset($settings[$hover_item_class]) ? $settings[$hover_item_class] : '';
1218 1313 $animations = sprintf('%s %s', $entrance, $hover);
1219 1314
1220 1315 // Check if entrance or hover animation are set
@@ -1220,59 +1315,68 @@
1220 1315 // Check if entrance or hover animation are set
1221 1316 $has_animation = !empty($entrance) || !empty($hover)
1222 1317
1223 1318 // Prints extra wrappers required by the carousel script
1224 - ?>
1319 + ?>
1225 1320 <div class="ui-e-wrp swiper-slide">
1226 - <?php if($has_animation) : ?>
1227 - <div class="ui-e-animations-wrp <?php echo esc_attr($animations);?>">
1228 - <?php endif; ?>
1321 + <?php if ($has_animation) : ?>
1322 + <div class="ui-e-animations-wrp <?php echo esc_attr($animations); ?>">
1323 + <?php endif; ?>
1229 1324
1230 - <?php } ?>
1325 + <?php } ?>
1231 1326
1232 - <div class="<?php echo esc_attr( implode(' ', $item_classes));?>">
1233 - <article <?php post_class(); ?>>
1234 - <div class="ui-e-post-top">
1235 - <?php $this->get_post_image(); ?>
1236 - <?php $this->get_post_meta('top'); ?>
1237 - </div>
1238 - <div class="ui-e-post-content">
1239 - <?php $this->get_post_meta('before_title'); ?>
1240 - <?php
1241 - if ($this->get_settings_for_display('title') === 'yes')
1242 - $this->get_post_title();
1243 - ?>
1244 - <?php $this->get_post_meta('after_title'); ?>
1245 - <?php
1246 - if ($this->get_settings_for_display('excerpt'))
1247 - echo wp_kses_post('<div class="ui-e-post-text">' . wp_trim_words(get_the_excerpt(), $excerpt_length) . '</div>');
1248 - ?>
1249 - <?php $this->get_post_meta('bottom'); // button
1250 - ?>
1251 - <?php
1252 - if ( $this->get_settings_for_display('show_button') === 'yes' ) {
1253 - // Add match height spacing element if carousel. May look intrusive, but is the simplest method compared
1254 - // to absolute positioning or catching last content element to apply margin.
1255 - if($carousel && $settings['match_height'] === 'yes'){
1256 - ?>
1327 + <div class="<?php echo esc_attr(implode(' ', $item_classes)); ?>">
1328 + <article <?php post_class(); ?>>
1329 + <div class="ui-e-post-top">
1330 + <?php $this->get_post_image(); ?>
1331 + <?php $this->get_post_meta('top'); ?>
1332 + </div>
1333 +
1334 + <?php if ($this->is_option('global_link', 'yes')) : ?>
1335 + <a href="<?php echo esc_url(get_permalink()); ?>"
1336 + class="ui-e-global-link"
1337 + aria-label="<?php echo esc_attr__('View Post:', 'uicore-elements') . esc_html(the_title_attribute(['echo' => false])); ?>"
1338 + title="<?php echo esc_attr__('View Post:', 'uicore-elements') . esc_html(the_title_attribute(['echo' => false])); ?>"> </a>
1339 + <?php endif; ?>
1340 +
1341 + <div class="ui-e-post-content">
1342 +
1343 + <?php $this->get_post_meta('before_title'); ?>
1344 + <?php
1345 + if ($this->is_option('title', 'yes'))
1346 + $this->get_post_title($settings['title_tag']);
1347 + ?>
1348 + <?php $this->get_post_meta('after_title'); ?>
1349 + <?php
1350 + if ($this->get_settings_for_display('excerpt'))
1351 + echo wp_kses_post('<div class="ui-e-post-text">' . wp_trim_words(get_the_excerpt(), $excerpt_length) . '</div>');
1352 + ?>
1353 + <?php $this->get_post_meta('bottom'); // button
1354 + ?>
1355 + <?php
1356 + if ($this->is_option('show_button', 'yes')) {
1357 + // Add match height spacing element if carousel. May look intrusive, but is the simplest method compared
1358 + // to absolute positioning or catching last content element to apply margin.
1359 + if ($carousel && $this->is_option('match_height', 'yes')) {
1360 + ?>
1257 1361 <span class="ui-e-match-height"></span>
1258 - <?php
1362 + <?php
1363 + }
1364 +
1365 + if (!isset($settings['button_position']) || empty($settings['button_position'])) {
1366 + $this->TRAIT_get_button($index);
1367 + }
1259 1368 }
1369 + ?>
1370 + </div>
1371 + </article>
1372 + </div>
1260 1373
1261 - if( !isset($settings['button_position']) || empty($settings['button_position']) ) {
1262 - $this->TRAIT_get_button();
1263 - }
1264 - }
1265 - ?>
1374 + <?php if ($carousel) { ?>
1266 1375 </div>
1267 - </article>
1376 + <?php if ($has_animation) : ?>
1268 1377 </div>
1378 + <?php endif; ?>
1269 1379
1270 - <?php if($carousel) { ?>
1271 - </div>
1272 - <?php if($has_animation) : ?>
1273 - </div>
1274 - <?php endif; ?>
1275 -
1276 - <?php }
1277 - }
1278 -}
1380 +<?php }
1381 + }
1382 + }