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 +871 -758 1.2.31.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,17 +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
971 1116 /// TODO: very likely commit `38c618c` on Elements repo make this fallback useless. Test it
972 1117 // Post type fallback for APG
973 - 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'])) {
974 1119 $post_type = $default_query['post_type'] ?? $default_query['query']['post_type'];
975 1120 } else {
976 1121 $post_type = 'post';
977 1122 }
@@ -1000,54 +1145,12 @@
1000 1145 $this->_query = new \WP_Query($query_args);
1001 1146 }
1002 1147 }
1003 1148
1004 - /**
1005 - * Match each meta icon size (if SVG) with the correspondent font size set by the user.
1006 - *
1007 - * @param array $settings Elementor controls settings.
1008 - *
1009 - * @return void
1010 - */
1011 - function TRAIT_set_meta_font_size_to_svg($settings)
1012 - {
1013 - // Required specifically for SVG icons
1014 - if( \Elementor\Plugin::$instance->experiments->is_feature_active('e_font_icon_svg') == false ){
1015 - return;
1016 - }
1017 -
1018 - // Get all available metas
1019 - $metas = ['top_meta', 'before_title_meta', 'after_title_meta', 'bottom_meta'];
1020 - $metas_css = '';
1021 - $default_size = '16px';
1022 -
1023 - // Creates a variable for each meta font-size and set a font-size, falling back to default size as last resource.
1024 - foreach ($metas as $meta) {
1025 -
1026 - // Check if current meta has a font-size set.
1027 - ${$meta . '_size'} = isset( $settings[$meta . '_typography_font_size'] ) ? $settings[$meta . '_typography_font_size'] : $default_size;
1028 -
1029 - // Check if the font-size value is not empty (user might customize other infos but not the font-size)
1030 - ${$meta . '_size'} = !empty( ${$meta .'_size'}['size'] )
1031 - ? ${$meta .'_size'}['size'] . ${$meta .'_size'}['unit']
1032 - : $default_size;
1033 -
1034 - // Creates the css variable
1035 - $metas_css .= '--' . $meta . '-font-size: ' . esc_html(${$meta . '_size'}) . ';';
1036 - }
1037 -
1038 - // print it on the main widget wrapper
1039 - $this->add_render_attribute(
1040 - '_wrapper',
1041 - 'style',
1042 - $metas_css
1043 - );
1044 - }
1045 -
1046 - // Render functions
1149 + // Render functions
1047 1150 function get_post_image()
1048 1151 {
1049 - if ( $this->is_option('image', 'yes', '!==') ) {
1152 + if ($this->is_option('image', 'yes', '!==')) {
1050 1153 return;
1051 1154 }
1052 1155
1053 1156 $pic_id = get_post_thumbnail_id();
@@ -1053,34 +1156,36 @@
1053 1156 $pic_id = get_post_thumbnail_id();
1054 1157 if (!$pic_id)
1055 1158 return;
1056 1159 $size = $this->get_settings_for_display('image_size_select') ?? 'uicore-medium';
1057 - ?>
1058 - <a class="ui-e-post-img-wrapp"
1059 - href="<?php echo esc_url(get_permalink()); ?>"
1060 - 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]); ?>">
1061 1164
1062 - <?php if ($this->get_settings_for_display('masonry') === 'ui-e-maso') { ?>
1063 - <?php the_post_thumbnail($size, ['class' => 'ui-e-post-img']); ?>
1064 - <?php } else { ?>
1065 - <div class="ui-e-post-img" style="background-image:url(<?php echo esc_url( wp_get_attachment_image_url($pic_id, $size)); ?>)"></div>
1066 - <?php } ?>
1067 - </a>
1068 - <?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
1069 1172
1070 1173 }
1071 - function get_post_title()
1174 + function get_post_title(string $tag)
1072 1175 {
1073 - if ( $this->is_option('title', 'yes', '!==') ) {
1176 + if ($this->is_option('title', 'yes', '!==')) {
1074 1177 return;
1075 1178 }
1076 - ?>
1077 - <a href="<?php echo esc_url( get_permalink() );?>" title="<?php echo esc_attr__('View Post:','uicore-elements') . esc_html(the_title_attribute(['echo'=>false])); ?>">
1078 - <h4 class="ui-e-post-title"><span><?php echo esc_html(get_the_title()); ?></span></h4>
1079 - </a>
1080 - <?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
1081 1186 }
1082 - function get_post_meta($position)
1187 + function get_post_meta($position, $product_id = null)
1083 1188 {
1084 1189 $meta_list = $this->get_settings_for_display($position . '_meta');
1085 1190 if (!isset($meta_list[0]) || $meta_list[0]['type'] == '') {
1086 1191 return;
@@ -1086,18 +1191,18 @@
1086 1191 return;
1087 1192 }
1088 1193 echo ($position == 'top') ? '<div class="ui-e-post-top-meta">' : '';
1089 1194 echo ($position == 'after_title') ? '<div class="ui-e-meta-wrapp">' : '';
1090 - echo '<div class="ui-e-post-meta ui-e-'.esc_attr($position).'">';
1091 - foreach ($meta_list as $meta) {
1092 - if($meta['type'] != 'none'){
1093 - $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);
1094 1199
1095 - if( next( $meta_list ) && $this->get_settings_for_display( $position.'_meta_separator' ) ) {
1096 - echo '<span class="ui-e-separator">'.esc_html($this->get_settings_for_display( $position.'_meta_separator' )).'</span>';
1097 - }
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>';
1098 1202 }
1099 1203 }
1204 + }
1100 1205 echo '</div>';
1101 1206 echo ($position == 'top' || $position == 'after_title') ? '</div>' : '';
1102 1207 }
1103 1208 /**
@@ -1111,12 +1216,12 @@
1111 1216 {
1112 1217 $settings = $this->get_settings_for_display();
1113 1218
1114 1219 // Render att slugs
1115 - $button_slug = 'button_'.$index;
1116 - $content_slug = 'content-wrapper_'.$index;
1117 - $icon_slug = 'icon-align_'.$index;
1118 - $text_slug = 'text_'.$index;
1220 + $button_slug = 'button_' . $index;
1221 + $content_slug = 'content-wrapper_' . $index;
1222 + $icon_slug = 'icon-align_' . $index;
1223 + $text_slug = 'text_' . $index;
1119 1224
1120 1225 $this->add_render_attribute($button_slug, [
1121 1226 'class' => ['elementor-button-link', 'elementor-button', 'ui-e-readmore'],
1122 1227 'role' => 'button',
@@ -1136,9 +1241,9 @@
1136 1241 $this->add_render_attribute($button_slug, 'class', 'elementor-animation-' . $settings['hover_animation']);
1137 1242 }
1138 1243
1139 1244 $btn_classes = isset($settings['icon_align'])
1140 - ? ['elementor-button-icon', 'elementor-align-icon-' . $settings['icon_align'] ]
1245 + ? ['elementor-button-icon', 'elementor-align-icon-' . $settings['icon_align']]
1141 1246 : 'elementor-button-icon';
1142 1247
1143 1248 $this->add_render_attribute([
1144 1249 $icon_slug => [
@@ -1148,9 +1253,9 @@
1148 1253 'class' => 'elementor-button-text',
1149 1254 ],
1150 1255 ]);
1151 1256
1152 - if( isset($settings['icon_align']) ){
1257 + if (isset($settings['icon_align'])) {
1153 1258 $this->add_render_attribute($content_slug, 'class', 'elementor-button-content');
1154 1259 }
1155 1260
1156 1261 $tbn_content = '<span ' . $this->get_render_attribute_string($content_slug) . '>';
@@ -1166,15 +1271,15 @@
1166 1271 $tbn_content .= '<span ' . $this->get_render_attribute_string($text_slug) . '>';
1167 1272 $tbn_content .= $settings['text'];
1168 1273 $tbn_content .= '</span> </span>';
1169 1274
1170 - ?>
1171 - <a href="<?php echo esc_url(get_permalink()); ?>" <?php $this->print_render_attribute_string($button_slug); ?>>
1172 - <?php
1173 - //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1174 - echo Helper::esc_svg( $tbn_content );
1175 - ?>
1176 - </a>
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);
1280 + ?>
1281 + </a>
1177 1282 <?php
1178 1283 }
1179 1284
1180 1285 /**
@@ -1192,17 +1297,16 @@
1192 1297 $settings = $this->get_settings_for_display();
1193 1298 $excerpt_length = $settings['excerpt_trim'];
1194 1299
1195 1300 // Classnames but checking if we the widget is APG (legacy version)
1196 - $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
1197 1302 $hover_item_class = $legacy ? 'anim_item' : 'item_hover_animation'; // item hover animation class
1198 1303
1199 1304 // If widget is not carousel type, we set animations classes directly on item selector
1200 - if(!$carousel) {
1305 + if (!$carousel) {
1201 1306 $item_classes[] = 'ui-e-animations-wrp';
1202 1307 $item_classes[] = $settings['animate_items'] === 'ui-e-grid-animate' ? 'elementor-invisible' : '';
1203 1308 $item_classes[] = $settings[$hover_item_class] !== '' ? $settings[$hover_item_class] : '';
1204 -
1205 1309 } else {
1206 1310 // Get entrance and item hover animation classes
1207 1311 $entrance = $this->is_option('animate_items', 'ui-e-grid-animate') ? 'elementor-invisible' : '';
1208 1312 $hover = isset($settings[$hover_item_class]) ? $settings[$hover_item_class] : '';
@@ -1211,59 +1315,68 @@
1211 1315 // Check if entrance or hover animation are set
1212 1316 $has_animation = !empty($entrance) || !empty($hover)
1213 1317
1214 1318 // Prints extra wrappers required by the carousel script
1215 - ?>
1319 + ?>
1216 1320 <div class="ui-e-wrp swiper-slide">
1217 - <?php if($has_animation) : ?>
1218 - <div class="ui-e-animations-wrp <?php echo esc_attr($animations);?>">
1219 - <?php endif; ?>
1321 + <?php if ($has_animation) : ?>
1322 + <div class="ui-e-animations-wrp <?php echo esc_attr($animations); ?>">
1323 + <?php endif; ?>
1220 1324
1221 - <?php } ?>
1325 + <?php } ?>
1222 1326
1223 - <div class="<?php echo esc_attr( implode(' ', $item_classes));?>">
1224 - <article <?php post_class(); ?>>
1225 - <div class="ui-e-post-top">
1226 - <?php $this->get_post_image(); ?>
1227 - <?php $this->get_post_meta('top'); ?>
1228 - </div>
1229 - <div class="ui-e-post-content">
1230 - <?php $this->get_post_meta('before_title'); ?>
1231 - <?php
1232 - if ( $this->is_option('title', 'yes') )
1233 - $this->get_post_title();
1234 - ?>
1235 - <?php $this->get_post_meta('after_title'); ?>
1236 - <?php
1237 - if ($this->get_settings_for_display('excerpt'))
1238 - echo wp_kses_post('<div class="ui-e-post-text">' . wp_trim_words(get_the_excerpt(), $excerpt_length) . '</div>');
1239 - ?>
1240 - <?php $this->get_post_meta('bottom'); // button
1241 - ?>
1242 - <?php
1243 - if ( $this->is_option('show_button', 'yes') ) {
1244 - // Add match height spacing element if carousel. May look intrusive, but is the simplest method compared
1245 - // to absolute positioning or catching last content element to apply margin.
1246 - if($carousel && $this->is_option('match_height', 'yes') ){
1247 - ?>
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 + ?>
1248 1361 <span class="ui-e-match-height"></span>
1249 - <?php
1362 + <?php
1363 + }
1364 +
1365 + if (!isset($settings['button_position']) || empty($settings['button_position'])) {
1366 + $this->TRAIT_get_button($index);
1367 + }
1250 1368 }
1369 + ?>
1370 + </div>
1371 + </article>
1372 + </div>
1251 1373
1252 - if( !isset($settings['button_position']) || empty($settings['button_position']) ) {
1253 - $this->TRAIT_get_button($index);
1254 - }
1255 - }
1256 - ?>
1374 + <?php if ($carousel) { ?>
1257 1375 </div>
1258 - </article>
1376 + <?php if ($has_animation) : ?>
1259 1377 </div>
1378 + <?php endif; ?>
1260 1379
1261 - <?php if($carousel) { ?>
1262 - </div>
1263 - <?php if($has_animation) : ?>
1264 - </div>
1265 - <?php endif; ?>
1266 -
1267 - <?php }
1268 - }
1269 -}
1380 +<?php }
1381 + }
1382 + }