PluginProbe
UiCore Elements – Free widgets and templates for Elementor / 1.2.0
UiCore Elements – Free widgets and templates for Elementor v1.2.0
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
uicore-elements / includes / utils / logo-component.php

logo-component.php in UiCore Elements – Free widgets and templates for Elementor 1.2.0, at includes/utils/logo-component.php

485 lines 19.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace UiCoreElements\Utils;
3
4 use Elementor\Controls_Manager;
5 use Elementor\Utils;
6 use Elementor\Repeater;
7 use Elementor\Group_Control_Image_Size;
8 use Elementor\Group_Control_Box_Shadow;
9 use Elementor\Group_Control_Css_Filter;
10
11 use UiCoreElements\Utils\Carousel_Trait;
12
13 defined('ABSPATH') || exit();
14
15 trait Logo_Trait {
16
17 use Carousel_Trait;
18
19 // Settings
20 protected function TRAIT_register_logo_repeater_controls($logo)
21 {
22 $this->start_controls_section(
23 'section_logo',
24 [
25 /* translators: %s: logo name */
26 'label' => esc_html( sprintf('%s', $logo), 'uicore-elements'),
27 'tab' => Controls_Manager::TAB_CONTENT,
28 ]
29 );
30
31 $repeater = new Repeater();
32 $repeater->add_control(
33 'title',
34 [
35 'label' => esc_html__( 'Title', 'uicore-elements' ),
36 'type' => Controls_Manager::TEXT,
37 ]
38 );
39 $repeater->add_control(
40 'image',
41 [
42 'label' => esc_html__( 'Logo Image', 'uicore-elements' ),
43 'type' => Controls_Manager::MEDIA,
44 'default' => [
45 'url' => Utils::get_placeholder_image_src(),
46 ],
47 ]
48 );
49 $repeater->add_control(
50 'link',
51 [
52 'label' => esc_html__( 'Website URL', 'uicore-elements' ),
53 'type' => Controls_Manager::URL,
54 'show_external' => false,
55 'label_block' => false,
56 ]
57 );
58 $this->add_control(
59 'logo_list',
60 [
61 'show_label' => false,
62 'type' => Controls_Manager::REPEATER,
63 'fields' => $repeater->get_controls(),
64 'title_field' => "{{{ title }}}",
65 'default' => [
66 [
67 'title' => esc_html__( 'Item 1', 'uicore-elements' ),
68 'image' => [ 'url' => Utils::get_placeholder_image_src() ]
69 ],
70 [
71 'title' => esc_html__( 'Item 2', 'uicore-elements' ),
72 'image' => [ 'url' => Utils::get_placeholder_image_src() ]
73 ],
74 [
75 'title' => esc_html__( 'Item 3', 'uicore-elements' ),
76 'image' => [ 'url' => Utils::get_placeholder_image_src() ]
77 ],
78 [
79 'title' => esc_html__( 'Item 4', 'uicore-elements' ),
80 'image' => [ 'url' => Utils::get_placeholder_image_src() ]
81 ],
82 [
83 'title' => esc_html__( 'Item 5', 'uicore-elements' ),
84 'image' => [ 'url' => Utils::get_placeholder_image_src() ]
85 ],
86 [
87 'title' => esc_html__( 'Item 6', 'uicore-elements' ),
88 'image' => [ 'url' => Utils::get_placeholder_image_src() ]
89 ],
90 [
91 'title' => esc_html__( 'Item 7', 'uicore-elements' ),
92 'image' => [ 'url' => Utils::get_placeholder_image_src() ]
93 ],
94 [
95 'title' => esc_html__( 'Item 8', 'uicore-elements' ),
96 'image' => [ 'url' => Utils::get_placeholder_image_src() ]
97 ],
98 ]
99 ]
100 );
101 $this->end_controls_section();
102 }
103 protected function TRAIT_register_logo_adittional_controls()
104 {
105 $this->add_group_control(
106 Group_Control_Image_Size::get_type(),
107 [
108 'name' => 'thumbnail',
109 'default' => 'large',
110 'default' => 'medium',
111 'exclude' => [
112 'custom'
113 ]
114 ]
115 );
116 $this->add_responsive_control(
117 'height',
118 [
119 'label' => esc_html__( 'Item Height', 'uicore-elements' ),
120 'type' => Controls_Manager::SLIDER,
121 'size_units' => [ 'px' ],
122 'range' => [
123 'px' => [
124 'max' => 500,
125 'min' => 100,
126 ]
127 ],
128 'selectors' => [
129 '{{WRAPPER}} .ui-e-item' => 'height: {{SIZE}}{{UNIT}};'
130 ],
131 ]
132 );
133 }
134
135 // Grid Styles
136 protected function TRAIT_register_logos_grid_style_controls()
137 {
138 $this->start_controls_tabs( 'logos_style' );
139
140 $this->start_controls_tab(
141 'tab_logos_style_normal',
142 [
143 'label' => esc_html__( 'Normal', 'uicore-elements' ),
144 ]
145 );
146
147 $this->add_control(
148 'item_bg_color',
149 [
150 'label' => esc_html__( 'Background Color', 'uicore-elements' ),
151 'type' => Controls_Manager::COLOR,
152 'selectors' => [
153 '{{WRAPPER}} figure' => 'background-color: {{VALUE}};',
154 ],
155 ]
156 );
157 // Using Group Control Border overlays script border styling
158 $this->add_control(
159 'item_border_type',
160 [
161 'label' => esc_html__( 'Border Type', 'uicore-elements' ),
162 'type' => Controls_Manager::SELECT,
163 'options' => [
164 'none' => esc_html__( 'None', 'uicore-elements' ),
165 'solid' => esc_html__( 'Solid', 'uicore-elements' ),
166 'double' => esc_html__( 'Double', 'uicore-elements' ),
167 'dotted' => esc_html__( 'Dotted', 'uicore-elements' ),
168 'dashed' => esc_html__( 'Dashed', 'uicore-elements' ),
169 'groove' => esc_html__( 'Groove', 'uicore-elements' ),
170 ],
171 'default' => 'solid',
172 'selectors' => [
173 '{{WRAPPER}} .ui-e-item' => 'border-style: {{VALUE}};',
174 ],
175 ]
176 );
177 $this->add_responsive_control(
178 'item_border_width',
179 [
180 'label' => esc_html__( 'Border Width', 'uicore-elements' ),
181 'type' => Controls_Manager::SLIDER,
182 'default' => [
183 'size' => 2,
184 ],
185 'tablet_default' => [
186 'size' => 2,
187 ],
188 'mobile_default' => [
189 'size' => 2,
190 ],
191 'range' => [
192 'px' => [
193 'min' => 0,
194 'max' => 50,
195 ],
196 ],
197 'selectors' => [
198 '{{WRAPPER}}' => '--ui-e-border-width: {{SIZE}}{{UNIT}};'
199 ],
200 'condition' => [
201 'item_border_type!' => 'none',
202 ]
203 ]
204 );
205 $this->add_control(
206 'item_border_color',
207 [
208 'label' => esc_html__( 'Border Color', 'uicore-elements' ),
209 'type' => Controls_Manager::COLOR,
210 'selectors' => [
211 '{{WRAPPER}} .ui-e-item' => 'border-color: {{VALUE}};',
212 ],
213 'default' => '#EEE',
214 'condition' => [
215 'item_border_type!' => 'none',
216 ]
217 ]
218 );
219 $this->add_responsive_control(
220 'item_border_radius',
221 [
222 'label' => esc_html__( 'Border Radius', 'uicore-elements' ),
223 'type' => Controls_Manager::DIMENSIONS,
224 'size_units' => [ 'px', '%' ],
225 'default' => [
226 'top' => 5,
227 'right' => 5,
228 'bottom' => 5,
229 'left' => 5,
230 'unit' => 'px',
231 'isLinked' => true,
232 ],
233 'selectors' => [
234 // each side is used separately by logo-grid script
235 '{{WRAPPER}}' => '--ui-e-top-radius: {{TOP}}{{UNIT}};
236 --ui-e-right-radius: {{RIGHT}}{{UNIT}};
237 --ui-e-left-radius: {{LEFT}}{{UNIT}};
238 --ui-e-bottom-radius: {{BOTTOM}}{{UNIT}};
239 --ui-e-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
240 ],
241 ]
242 );
243 $this->add_responsive_control(
244 'item_padding',
245 [
246 'label' => esc_html__( 'Padding', 'uicore-elements' ),
247 'type' => Controls_Manager::DIMENSIONS,
248 'size_units' => [ 'px', 'em', '%' ],
249 'default' => [
250 'top' => 20,
251 'right' => 20,
252 'bottom' => 20,
253 'left' => 20,
254 'unit' => 'px',
255 'isLinked' => true,
256 ],
257 'selectors' => [
258 '{{WRAPPER}} figure' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
259 ],
260 ]
261 );
262 $this->add_group_control(
263 Group_Control_Box_Shadow::get_type(),
264 [
265 'name' => 'logos_box_shadow_item',
266 'exclude' => [
267 'box_shadow_position',
268 ],
269 'selector' => '{{WRAPPER}} .ui-e-item',
270 'condition' => [
271 'layout' => 'inner-border'
272 ],
273 ]
274 );
275 $this->add_group_control(
276 Group_Control_Box_Shadow::get_type(),
277 [
278 'name' => 'logos_box_shadow_wrapper',
279 'exclude' => [
280 'box_shadow_position',
281 ],
282 'selector' => '{{WRAPPER}} .ui-e-grid',
283 'condition' => [
284 'layout!' => 'inner-border'
285 ],
286 ]
287 );
288 $this->TRAIT_register_logos_image_style_controls('normal');
289 $this->end_controls_tab();
290
291 $this->start_controls_tab(
292 'tab_logos_style_hover',
293 [
294 'label' => esc_html__( 'Hover', 'uicore-elements' ),
295 ]
296 );
297 $this->add_control(
298 'item_bg_hover_color',
299 [
300 'label' => esc_html__( 'Background Color', 'uicore-elements' ),
301 'type' => Controls_Manager::COLOR,
302 'selectors' => [
303 '{{WRAPPER}} .ui-e-item:hover figure' => 'background-color: {{VALUE}};',
304 ],
305 ]
306 );
307 $this->add_control(
308 'grid_border_hover_color',
309 [
310 'label' => esc_html__( 'Border Color', 'uicore-elements' ),
311 'type' => Controls_Manager::COLOR,
312 'selectors' => [
313 '{{WRAPPER}} .ui-e-item:hover' => 'border-color: {{VALUE}};',
314 ],
315 'condition' => [
316 'item_border_type!' => 'none',
317 'layout' => 'inner-border',
318 ]
319 ]
320 );
321 $this->TRAIT_register_logos_image_style_controls('hover');
322 $this->end_controls_tab();
323
324 $this->end_controls_tabs();
325 }
326 // Logo Image Styles
327 protected function TRAIT_register_logos_image_style_controls($state)
328 {
329 if($state == 'normal'){
330 $this->add_group_control(
331 Group_Control_Css_Filter::get_type(),
332 [
333 'name' => 'image_css_filters',
334 'selector' => '{{WRAPPER}} figure img',
335 ]
336 );
337 $this->add_responsive_control(
338 'image_size',
339 [
340 'label' => esc_html__( 'Image Size', 'uicore-elements' ),
341 'type' => Controls_Manager::SLIDER,
342 'size_units' => [ 'px', '%' ],
343 'range' => [
344 'px' => [
345 'min' => 10,
346 'max' => 500,
347 ],
348 '%' => [
349 'min' => 0,
350 'max' => 100,
351 ],
352 ],
353 'selectors' => [
354 '{{WRAPPER}} img' => 'height: {{SIZE}}{{UNIT}}; width: {{SIZE}}{{UNIT}}; object-fit: contain;'
355 ],
356 ]
357 );
358 } else if ($state == 'hover'){
359 $this->add_group_control(
360 Group_Control_Css_Filter::get_type(),
361 [
362 'name' => 'image_css_filters_hover',
363 'selector' => '{{WRAPPER}} figure:hover img',
364 ]
365 );
366 $this->add_control(
367 'image_bg_hover_transition',
368 [
369 'label' => esc_html__( 'Transition Duration', 'uicore-elements' ),
370 'type' => Controls_Manager::SLIDER,
371 'range' => [
372 'px' => [
373 'max' => 3,
374 'step' => 0.1,
375 ],
376 ],
377 'selectors' => [
378 '{{WRAPPER}} figure img' => 'transition-duration: {{SIZE}}s;',
379 ],
380 ]
381 );
382 } else if($state == 'active'){
383 $this->add_group_control(
384 Group_Control_Css_Filter::get_type(),
385 [
386 'name' => 'image_css_filters_active',
387 'selector' => '{{WRAPPER}} .is-selected figure img',
388 ]
389 );
390 }
391 }
392
393 // Rendering
394 protected function render_logo_figure($data, $size)
395 {
396 $image = wp_get_attachment_image_url($data['id'], $size);
397 $name = isset($data['name']) ? $data['name'] : '';
398 $desc = isset($data['description']) ? $data['description'] : '';
399 $alt = $name . ' : ' . $desc;
400 ?>
401 <figure class="<?php echo esc_attr($this->get_settings_for_display('logo_hover_animation'));?>">
402 <?php
403 if($image) {
404 echo wp_get_attachment_image(
405 $data['id'],
406 $size,
407 false,
408 ['alt' => esc_attr( $alt )]
409 );
410 } else {
411 printf(
412 '<img src="%s" alt="%s">',
413 esc_url( Utils::get_placeholder_image_src()),
414 esc_attr( $alt )
415 );
416 }
417 ?>
418 </figure>
419 <?php
420 }
421 protected function TRAIT_render_logo_item()
422 {
423 $settings = $this->get_settings_for_display();
424
425 // Get entrance and item hover animation classes
426 $entrance = (isset($settings['animate_items']) && $settings['animate_items'] == 'ui-e-grid-animate') ? 'elementor-invisible' : '';
427 $hover = isset($settings['item_hover_animation']) ? $settings['item_hover_animation'] : null;
428 $animations = sprintf('%s %s', $entrance, $hover);
429
430 // Check if any animation that relies on the animation wrapper is set
431 $has_animation = !empty($entrance) || !empty($hover) || !empty($settings['item_hover_animation']) || !empty($settings['logo_hover_animation']);
432
433 // Build wrapper class
434 $is_carousel = strpos($this->get_name(), 'carousel') !== false;
435 $this->add_render_attribute([
436 'wrapper' => [
437 'class' => $is_carousel ? 'ui-e-wrp swiper-slide' : 'ui-e-wrp',
438 ],
439 ]);
440
441 foreach ( $settings['logo_list'] as $index => $item ) {
442 $this->render_logo($index, $item, $settings, $has_animation, $animations);
443 }
444
445 if( $is_carousel ){
446
447 $total_slides = count($settings['logo_list']);
448
449 // Most recent swiper versions requires, if loop, at least one extra slide compared to visible slides
450 if( $this->TRAIT_should_duplicate_slides($total_slides)) {
451 $diff = $this->TRAIT_get_duplication_diff($total_slides);
452 for($i = 0; $i <= $diff; $i++){
453 $this->render_logo($index, $item, $settings, $has_animation, $animations);
454 }
455 }
456 }
457 }
458
459 protected function render_logo($index, $item, $settings, $has_animation, $animations)
460 {
461 // Params
462 $key = 'logo_'.$index;
463 $tag = 'div ';
464 $this->add_render_attribute($key, 'class', 'ui-e-item' );
465
466 // Build URL
467 if (!empty($item['link']['url'])) {
468 $tag = 'a ';
469 $this->add_link_attributes($key, $item['link'] );
470 }
471 ?>
472 <div <?php $this->print_render_attribute_string('wrapper'); ?>>
473 <?php if($has_animation) : ?>
474 <div class='ui-e-animations-wrp <?php echo esc_attr($animations);?>'>
475 <?php endif; ?>
476 <<?php echo esc_html($tag);?> <?php $this->print_render_attribute_string($key); ?>>
477 <?php $this->render_logo_figure($item['image'], $settings['thumbnail_size']); ?>
478 </<?php echo esc_html($tag);?>>
479 <?php if($has_animation) : ?>
480 </div>
481 <?php endif; ?>
482 </div>
483 <?php
484 }
485 }