PluginProbe
Borderless – Addons and Templates for Elementor / trunk
Borderless – Addons and Templates for Elementor vtrunk
trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.2 1.2.3 All 78 releases
borderless / modules / elementor / widgets / team-member.php

team-member.php in Borderless – Addons and Templates for Elementor trunk, at modules/elementor/widgets/team-member.php

1,177 lines 29.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Borderless\Widgets;
4
5 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
6
7 use Elementor\Widget_Base;
8 use Elementor\Controls_Manager;
9 use Elementor\Group_Control_Image_Size;
10 use \Elementor\Group_Control_Border;
11 use \Elementor\Group_Control_Typography;
12 use \Elementor\Group_Control_Background;
13 use \Elementor\Group_Control_Css_Filter;
14 use \Elementor\Group_Control_Box_Shadow;
15 use \Elementor\Icons_Manager;
16 use Elementor\Repeater;
17 use Elementor\Utils;
18
19 class Team_Member extends Widget_Base {
20
21 public function get_name() {
22 return 'borderless-elementor-team-member';
23 }
24
25 public function get_title() {
26 return esc_html__( 'Team Member', 'borderless');
27 }
28
29 public function get_icon() {
30 return 'borderless-icon-team-member';
31 }
32
33 public function get_categories() {
34 return [ 'borderless' ];
35 }
36
37 public function get_keywords()
38 {
39 return [
40 'team',
41 'member',
42 'team member',
43 'person',
44 'card',
45 'meet the team',
46 'team builder',
47 'our team',
48 'borderless',
49 'borderless team member',
50 'borderless team members'
51 ];
52 }
53
54 public function get_custom_help_url()
55 {
56 return 'https://wpborderless.com/';
57 }
58
59 protected function _register_controls() {
60
61
62 /*-----------------------------------------------------------------------------------*/
63 /* *. Avatar
64 /*-----------------------------------------------------------------------------------*/
65
66 $this->start_controls_section(
67 'borderless_section_team_member_avatar',
68 [
69 'label' => esc_html__( 'Picture', 'borderless' ),
70 'tab' => Controls_Manager::TAB_CONTENT,
71 ]
72 );
73
74 $this->add_control(
75 'borderless_team_member_avatar',
76 [
77 'label' => __( 'Upload Picture', 'borderless' ),
78 'type' => Controls_Manager::MEDIA,
79 'default' => [
80 'url' => Utils::get_placeholder_image_src(),
81 ],
82 ]
83 );
84
85 $this->add_group_control(
86 Group_Control_Image_Size::get_type(),
87 [
88 'name' => 'borderless_team_member_avatar',
89 'default' => 'large',
90 'separator' => 'none',
91 ]
92 );
93
94 $this->end_controls_section();
95
96
97 /*-----------------------------------------------------------------------------------*/
98 /* *. Content
99 /*-----------------------------------------------------------------------------------*/
100
101 $this->start_controls_section(
102 'borderless_section_team_member_content',
103 [
104 'label' => esc_html__( 'Content', 'borderless')
105 ]
106 );
107
108 $this->add_control(
109 'borderless_team_member_name',
110 [
111 'label' => esc_html__( 'Name', 'borderless'),
112 'type' => Controls_Manager::TEXT,
113 'dynamic' => [
114 'active' => true,
115 ],
116 'default' => esc_html__( 'John Doe', 'borderless'),
117 ]
118 );
119
120 $this->add_control(
121 'borderless_team_member_job',
122 [
123 'label' => esc_html__( 'Job Position', 'borderless'),
124 'type' => Controls_Manager::TEXT,
125 'dynamic' => [
126 'active' => true,
127 ],
128 'default' => esc_html__( 'Full Stack Web Developer', 'borderless'),
129 ]
130 );
131
132 $this->add_control(
133 'borderless_team_member_description',
134 [
135 'label' => esc_html__( 'Description', 'borderless'),
136 'type' => Controls_Manager::TEXTAREA,
137 'dynamic' => [
138 'active' => true,
139 ],
140 'default' => esc_html__( 'Add team member description here. Remove the text if not necessary.', 'borderless'),
141 ]
142 );
143
144 $this->end_controls_section();
145
146
147 /*-----------------------------------------------------------------------------------*/
148 /* *. Social Profiles
149 /*-----------------------------------------------------------------------------------*/
150
151 $this->start_controls_section(
152 'borderless_section_team_member_social_profiles',
153 [
154 'label' => esc_html__( 'Social Profiles', 'borderless')
155 ]
156 );
157
158 $this->add_control(
159 'borderless_team_member_enable_social_profiles',
160 [
161 'label' => esc_html__( 'Enable Social Profiles?', 'borderless'),
162 'type' => Controls_Manager::SWITCHER,
163 'default' => 'yes',
164 ]
165 );
166
167 $repeater = new Repeater();
168
169 $repeater->add_control(
170 'social_icon',
171 [
172 'label' => __( 'Icon', 'borderless' ),
173 'type' => Controls_Manager::ICONS,
174 'fa4compatibility' => 'social',
175 'default' => [
176 'value' => 'fab fa-wordpress',
177 'library' => 'fa-brands',
178 ],
179 'recommended' => [
180 'fa-brands' => [
181 'android',
182 'apple',
183 'behance',
184 'bitbucket',
185 'codepen',
186 'delicious',
187 'deviantart',
188 'digg',
189 'dribbble',
190 'elementor',
191 'facebook',
192 'flickr',
193 'foursquare',
194 'free-code-camp',
195 'github',
196 'gitlab',
197 'globe',
198 'houzz',
199 'instagram',
200 'jsfiddle',
201 'linkedin',
202 'medium',
203 'meetup',
204 'mix',
205 'mixcloud',
206 'odnoklassniki',
207 'pinterest',
208 'product-hunt',
209 'reddit',
210 'shopping-cart',
211 'skype',
212 'slideshare',
213 'snapchat',
214 'soundcloud',
215 'spotify',
216 'stack-overflow',
217 'steam',
218 'telegram',
219 'thumb-tack',
220 'tripadvisor',
221 'tumblr',
222 'twitch',
223 'twitter',
224 'viber',
225 'vimeo',
226 'vk',
227 'weibo',
228 'weixin',
229 'whatsapp',
230 'wordpress',
231 'xing',
232 'yelp',
233 'youtube',
234 '500px',
235 ],
236 'fa-solid' => [
237 'envelope',
238 'link',
239 'rss',
240 ],
241 ],
242 ]
243 );
244
245 $repeater->add_control(
246 'borderless_team_member_social_profiles_link',
247 [
248 'name' => 'link',
249 'label' => esc_html__( 'Link', 'borderless'),
250 'type' => Controls_Manager::URL,
251 'dynamic' => ['active' => true],
252 'label_block' => true,
253 'default' => [
254 'url' => '',
255 'is_external' => 'true',
256 ],
257 'placeholder' => esc_html__( 'Place URL here', 'borderless'),
258 ]
259 );
260
261 $repeater->add_control(
262 'borderless_team_member_social_profiles_item_icon_color',
263 [
264 'label' => __( 'Color', 'borderless' ),
265 'type' => Controls_Manager::SELECT,
266 'default' => 'default',
267 'options' => [
268 'default' => __( 'Official Color', 'borderless' ),
269 'custom' => __( 'Custom', 'borderless' ),
270 ],
271 ]
272 );
273
274 $repeater->add_control(
275 'borderless_team_member_social_profiles_item_icon_primary_color',
276 [
277 'label' => __( 'Primary Color', 'borderless' ),
278 'type' => Controls_Manager::COLOR,
279 'condition' => [
280 'borderless_team_member_social_profiles_item_icon_color' => 'custom',
281 ],
282 'selectors' => [
283 '{{WRAPPER}} {{CURRENT_ITEM}}.elementor-social-icon' => 'background-color: {{VALUE}};',
284 ],
285 ]
286 );
287
288 $repeater->add_control(
289 'borderless_team_member_social_profiles_item_icon_secondary_color',
290 [
291 'label' => __( 'Secondary Color', 'borderless' ),
292 'type' => Controls_Manager::COLOR,
293 'condition' => [
294 'borderless_team_member_social_profiles_item_icon_color' => 'custom',
295 ],
296 'selectors' => [
297 '{{WRAPPER}} {{CURRENT_ITEM}}.elementor-social-icon i' => 'color: {{VALUE}};',
298 '{{WRAPPER}} {{CURRENT_ITEM}}.elementor-social-icon svg' => 'fill: {{VALUE}};',
299 ],
300 ]
301 );
302
303 $this->add_control(
304 'borderless_team_member_social_profiles_links',
305 [
306 'label' => __( 'Social Icons', 'borderless' ),
307 'type' => Controls_Manager::REPEATER,
308 'fields' => $repeater->get_controls(),
309 'condition' => [
310 'borderless_team_member_enable_social_profiles!' => '',
311 ],
312 'default' => [
313 [
314 'social_icon' => [
315 'value' => 'fab fa-facebook',
316 'library' => 'fa-brands',
317 ],
318 ],
319 [
320 'social_icon' => [
321 'value' => 'fab fa-twitter',
322 'library' => 'fa-brands',
323 ],
324 ],
325 [
326 'social_icon' => [
327 'value' => 'fab fa-youtube',
328 'library' => 'fa-brands',
329 ],
330 ],
331 ],
332 'title_field' => '<# var migrated = "undefined" !== typeof __fa4_migrated, social = ( "undefined" === typeof social ) ? false : social; #>{{{ elementor.helpers.getSocialNetworkNameFromIcon( social_icon, social, true, migrated, true ) }}}',
333 ]
334 );
335
336 $this->add_control(
337 'borderless_team_members_social_profiles_view',
338 [
339 'label' => __( 'View', 'borderless' ),
340 'type' => Controls_Manager::HIDDEN,
341 'condition' => [
342 'borderless_team_member_enable_social_profiles!' => '',
343 ],
344 'default' => 'traditional',
345 ]
346 );
347
348 $this->end_controls_section();
349
350
351 /*-----------------------------------------------------------------------------------*/
352 /* *. Avatar - Style
353 /*-----------------------------------------------------------------------------------*/
354
355 $this->start_controls_section(
356 'borderless_section_team_members_image_styles',
357 [
358 'label' => esc_html__( 'Picture', 'borderless'),
359 'tab' => Controls_Manager::TAB_STYLE
360 ]
361 );
362
363 $this->add_responsive_control(
364 'borderless_team_members_image_width',
365 [
366 'label' => esc_html__( 'Width', 'borderless'),
367 'type' => Controls_Manager::SLIDER,
368 'default' => [
369 'unit' => '%',
370 ],
371 'tablet_default' => [
372 'unit' => '%',
373 ],
374 'mobile_default' => [
375 'unit' => '%',
376 ],
377 'size_units' => [ '%', 'px', 'vw' ],
378 'range' => [
379 '%' => [
380 'min' => 1,
381 'max' => 100,
382 ],
383 'px' => [
384 'min' => 1,
385 'max' => 1000,
386 ],
387 'vw' => [
388 'min' => 1,
389 'max' => 100,
390 ],
391 ],
392 'selectors' => [
393 '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure img' => 'width:{{SIZE}}{{UNIT}};',
394 ],
395 ]
396 );
397
398 do_action('borderless/team_member_circle_controls', $this);
399
400 $this->add_responsive_control(
401 'borderless_team_members_image_max_width',
402 [
403 'label' => __( 'Max Width', 'borderless' ),
404 'type' => Controls_Manager::SLIDER,
405 'default' => [
406 'unit' => '%',
407 ],
408 'tablet_default' => [
409 'unit' => '%',
410 ],
411 'mobile_default' => [
412 'unit' => '%',
413 ],
414 'size_units' => [ '%', 'px', 'vw' ],
415 'range' => [
416 '%' => [
417 'min' => 1,
418 'max' => 100,
419 ],
420 'px' => [
421 'min' => 1,
422 'max' => 1000,
423 ],
424 'vw' => [
425 'min' => 1,
426 'max' => 100,
427 ],
428 ],
429 'selectors' => [
430 '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure img' => 'max-width:{{SIZE}}{{UNIT}};',
431 ],
432 ]
433 );
434
435 $this->add_responsive_control(
436 'borderless_team_members_image_height',
437 [
438 'label' => __( 'Height', 'borderless' ),
439 'type' => Controls_Manager::SLIDER,
440 'default' => [
441 'unit' => 'px',
442 ],
443 'tablet_default' => [
444 'unit' => 'px',
445 ],
446 'mobile_default' => [
447 'unit' => 'px',
448 ],
449 'size_units' => [ 'px', 'vh' ],
450 'range' => [
451 'px' => [
452 'min' => 1,
453 'max' => 500,
454 ],
455 'vh' => [
456 'min' => 1,
457 'max' => 100,
458 ],
459 ],
460 'selectors' => [
461 '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure img' => 'height: {{SIZE}}{{UNIT}};',
462 ],
463 ]
464 );
465
466 $this->add_responsive_control(
467 'borderless_team_members_image_margin',
468 [
469 'label' => esc_html__( 'Margin', 'borderless'),
470 'type' => Controls_Manager::DIMENSIONS,
471 'size_units' => [ 'px', 'em', '%', 'rem' ],
472 'selectors' => [
473 '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure img' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
474 ],
475 ]
476 );
477
478 $this->add_responsive_control(
479 'borderless_team_members_image_padding',
480 [
481 'label' => esc_html__( 'Padding', 'borderless'),
482 'type' => Controls_Manager::DIMENSIONS,
483 'size_units' => [ 'px', 'em', '%', 'rem' ],
484 'selectors' => [
485 '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure img' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
486 ],
487 ]
488 );
489
490 $this->add_responsive_control(
491 'borderless_team_members_image_object_fit',
492 [
493 'label' => __( 'Object Fit', 'borderless' ),
494 'type' => Controls_Manager::SELECT,
495 'condition' => [
496 'height[size]!' => '',
497 ],
498 'options' => [
499 '' => __( 'Default', 'borderless' ),
500 'fill' => __( 'Fill', 'borderless' ),
501 'cover' => __( 'Cover', 'borderless' ),
502 'contain' => __( 'Contain', 'borderless' ),
503 ],
504 'default' => '',
505 'selectors' => [
506 '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure img' => 'object-fit: {{VALUE}};',
507 ],
508 ]
509 );
510
511 $this->add_control(
512 'borderless_team_members_image_separator_panel_style',
513 [
514 'type' => Controls_Manager::DIVIDER,
515 'style' => 'thick',
516 ]
517 );
518
519 $this->start_controls_tabs( 'borderless_team_members_image_effects' );
520
521 $this->start_controls_tab( 'normal',
522 [
523 'label' => __( 'Normal', 'borderless' ),
524 ]
525 );
526
527 $this->add_control(
528 'borderless_team_members_image_opacity',
529 [
530 'label' => __( 'Opacity', 'borderless' ),
531 'type' => Controls_Manager::SLIDER,
532 'range' => [
533 'px' => [
534 'max' => 1,
535 'min' => 0.10,
536 'step' => 0.01,
537 ],
538 ],
539 'selectors' => [
540 '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure img' => 'opacity: {{SIZE}};',
541 ],
542 ]
543 );
544
545 $this->add_group_control(
546 Group_Control_Css_Filter::get_type(),
547 [
548 'name' => 'borderless_team_members_image_css_filters',
549 'selector' => '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure img',
550 ]
551 );
552
553 $this->end_controls_tab();
554
555 $this->start_controls_tab( 'hover',
556 [
557 'label' => __( 'Hover', 'borderless' ),
558 ]
559 );
560
561 $this->add_control(
562 'borderless_team_members_image_opacity_hover',
563 [
564 'label' => __( 'Opacity', 'borderless' ),
565 'type' => Controls_Manager::SLIDER,
566 'range' => [
567 'px' => [
568 'max' => 1,
569 'min' => 0.10,
570 'step' => 0.01,
571 ],
572 ],
573 'selectors' => [
574 '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure:hover img' => 'opacity: {{SIZE}};',
575 ],
576 ]
577 );
578
579 $this->add_group_control(
580 Group_Control_Css_Filter::get_type(),
581 [
582 'name' => 'borderless_team_members_image_css_filters_hover',
583 'selector' => '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure:hover img',
584 ]
585 );
586
587 $this->add_control(
588 'borderless_team_members_image_background_hover_transition',
589 [
590 'label' => __( 'Transition Duration', 'borderless' ),
591 'type' => Controls_Manager::SLIDER,
592 'range' => [
593 'px' => [
594 'max' => 3,
595 'step' => 0.1,
596 ],
597 ],
598 'selectors' => [
599 '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure img' => 'transition-duration: {{SIZE}}s',
600 ],
601 ]
602 );
603
604 $this->add_control(
605 'borderless_team_members_image_hover_animation',
606 [
607 'label' => __( 'Hover Animation', 'borderless' ),
608 'type' => Controls_Manager::HOVER_ANIMATION,
609 ]
610 );
611
612 $this->end_controls_tab();
613
614 $this->end_controls_tabs();
615
616 $this->add_group_control(
617 Group_Control_Border::get_type(),
618 [
619 'name' => 'borderless_team_members_image_border',
620 'selector' => '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure img',
621 'separator' => 'before',
622 ]
623 );
624
625 $this->add_responsive_control(
626 'borderless_team_members_image_border_radius',
627 [
628 'label' => __( 'Border Radius', 'borderless' ),
629 'type' => Controls_Manager::DIMENSIONS,
630 'size_units' => [ 'px', '%' ],
631 'selectors' => [
632 '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
633 ],
634 ]
635 );
636
637 $this->add_group_control(
638 Group_Control_Box_Shadow::get_type(),
639 [
640 'name' => 'borderless_team_members_image_box_shadow',
641 'exclude' => [
642 'box_shadow_position',
643 ],
644 'selector' => '{{WRAPPER}} .borderless-elementor-team-member-social-profiles figure img',
645 ]
646 );
647
648 $this->end_controls_section();
649
650
651 /*-----------------------------------------------------------------------------------*/
652 /* *. Content - Style
653 /*-----------------------------------------------------------------------------------*/
654
655 $this->start_controls_section(
656 'borderless_section_team_members_styles_general',
657 [
658 'label' => esc_html__( 'Content', 'borderless'),
659 'tab' => Controls_Manager::TAB_STYLE
660 ]
661 );
662
663 $this->add_control(
664 'content_card_style',
665 [
666 'label' => __( 'Content Card', 'borderless'),
667 'type' => Controls_Manager::HEADING,
668 'separator' => 'before'
669 ]
670 );
671
672 $this->add_control(
673 'content_card_height',
674 [
675 'label' => esc_html__( 'Height', 'borderless'),
676 'type' => Controls_Manager::SLIDER,
677 'size_units' => [ 'px', 'em' ],
678 'range' => [
679 'px' => [
680 'min' => 0,
681 'max' => 500,
682 ],
683 'em' => [
684 'min' => 0,
685 'max' => 200
686 ]
687 ],
688 'default' => [
689 'unit' => 'px',
690 'size' => 'auto'
691 ],
692 'selectors' => [
693 '{{WRAPPER}} .borderless-elementor-team-member-content' => 'min-height: {{SIZE}}{{UNIT}};',
694 ],
695 ]
696 );
697
698 $this->add_control(
699 'borderless_team_members_background',
700 [
701 'label' => esc_html__( 'Content Background Color', 'borderless'),
702 'type' => Controls_Manager::COLOR,
703 'default' => '',
704 'selectors' => [
705 '{{WRAPPER}} .borderless-elementor-team-member-content' => 'background-color: {{VALUE}};',
706 ],
707 ]
708 );
709
710
711
712 $start = is_rtl() ? 'end' : 'start';
713 $end = is_rtl() ? 'start' : 'end';
714
715 $this->add_responsive_control(
716 'borderless_team_members_content_align',
717 [
718 'label' => __( 'Alignment', 'borderless' ),
719 'type' => Controls_Manager::CHOOSE,
720 'condition' => [
721 'borderless_team_member_enable_social_profiles!' => '',
722 ],
723 'options' => [
724 'left' => [
725 'title' => __( 'Left', 'borderless' ),
726 'icon' => 'eicon-text-align-left',
727 ],
728 'center' => [
729 'title' => __( 'Center', 'borderless' ),
730 'icon' => 'eicon-text-align-center',
731 ],
732 'right' => [
733 'title' => __( 'Right', 'borderless' ),
734 'icon' => 'eicon-text-align-right',
735 ],
736 ],
737 'prefix_class' => 'e-grid-align-',
738 'default' => 'center',
739 'selectors' => [
740 '{{WRAPPER}} .borderless-elementor-team-member-content' => 'text-align: {{VALUE}}',
741 ],
742 ]
743 );
744
745 $this->add_responsive_control(
746 'borderless_team_members_content_margin',
747 [
748 'label' => esc_html__( 'Margin', 'borderless'),
749 'type' => Controls_Manager::DIMENSIONS,
750 'size_units' => [ 'px', 'em', '%', 'rem' ],
751 'selectors' => [
752 '{{WRAPPER}} .borderless-elementor-team-member-content' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
753 ],
754 ]
755 );
756
757 $this->add_responsive_control(
758 'borderless_team_members_content_padding',
759 [
760 'label' => esc_html__( 'Padding', 'borderless'),
761 'type' => Controls_Manager::DIMENSIONS,
762 'size_units' => [ 'px', 'em', '%', 'rem' ],
763 'selectors' => [
764 '{{WRAPPER}} .borderless-elementor-team-member-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
765 ],
766 ]
767 );
768
769 $this->add_group_control(
770 Group_Control_Border::get_type(),
771 [
772 'name' => 'borderless_team_members_border',
773 'label' => esc_html__( 'Border', 'borderless'),
774 'selector' => '{{WRAPPER}} .borderless-elementor-team-member-content',
775 ]
776 );
777
778 $this->add_control(
779 'borderless_team_members_border_radius',
780 [
781 'label' => esc_html__( 'Border Radius', 'borderless'),
782 'type' => Controls_Manager::DIMENSIONS,
783 'selectors' => [
784 '{{WRAPPER}} .borderless-elementor-team-member-content' => 'border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;',
785 ],
786 ]
787 );
788
789 $this->end_controls_section();
790
791
792 /*-----------------------------------------------------------------------------------*/
793 /* *. Social Profiles - Style
794 /*-----------------------------------------------------------------------------------*/
795
796 $this->start_controls_section(
797 'borderless_section_team_members_social_profiles_styles',
798 [
799 'label' => esc_html__( 'Social Profiles', 'borderless'),
800 'tab' => Controls_Manager::TAB_STYLE
801 ]
802 );
803
804 $this->add_control(
805 'borderless_team_members_social_profiles_icon_color',
806 [
807 'label' => __( 'Color', 'borderless' ),
808 'type' => Controls_Manager::SELECT,
809 'default' => 'default',
810 'options' => [
811 'default' => __( 'Official Color', 'borderless' ),
812 'custom' => __( 'Custom', 'borderless' ),
813 ],
814 ]
815 );
816
817 $this->add_control(
818 'borderless_team_members_social_profiles_icon_primary_color',
819 [
820 'label' => __( 'Primary Color', 'borderless' ),
821 'type' => Controls_Manager::COLOR,
822 'condition' => [
823 'borderless_team_members_social_profiles_icon_color' => 'custom',
824 ],
825 'selectors' => [
826 '{{WRAPPER}} .elementor-social-icon' => 'background-color: {{VALUE}};',
827 ],
828 ]
829 );
830
831 $this->add_control(
832 'borderless_team_members_social_profiles_icon_secondary_color',
833 [
834 'label' => __( 'Secondary Color', 'borderless' ),
835 'type' => Controls_Manager::COLOR,
836 'condition' => [
837 'borderless_team_members_social_profiles_icon_color' => 'custom',
838 ],
839 'selectors' => [
840 '{{WRAPPER}} .elementor-social-icon i' => 'color: {{VALUE}};',
841 '{{WRAPPER}} .elementor-social-icon svg' => 'fill: {{VALUE}};',
842 ],
843 ]
844 );
845
846 $this->add_control(
847 'borderless_team_members_social_profiles_hover_primary_color',
848 [
849 'label' => __( 'Hover Primary Color', 'borderless' ),
850 'type' => Controls_Manager::COLOR,
851 'default' => '',
852 'condition' => [
853 'borderless_team_members_social_profiles_icon_color' => 'custom',
854 ],
855 'selectors' => [
856 '{{WRAPPER}} .elementor-social-icon:hover' => 'background-color: {{VALUE}};',
857 ],
858 ]
859 );
860
861 $this->add_control(
862 'borderless_team_members_social_profiles_hover_secondary_color',
863 [
864 'label' => __( 'Hover Secondary Color', 'borderless' ),
865 'type' => Controls_Manager::COLOR,
866 'default' => '',
867 'condition' => [
868 'borderless_team_members_social_profiles_icon_color' => 'custom',
869 ],
870 'selectors' => [
871 '{{WRAPPER}} .elementor-social-icon:hover i' => 'color: {{VALUE}};',
872 '{{WRAPPER}} .elementor-social-icon:hover svg' => 'fill: {{VALUE}};',
873 ],
874 ]
875 );
876
877 $this->add_responsive_control(
878 'borderless_team_members_social_profiles_icon_size',
879 [
880 'label' => __( 'Size', 'borderless' ),
881 'type' => Controls_Manager::SLIDER,
882 'range' => [
883 'px' => [
884 'min' => 6,
885 'max' => 300,
886 ],
887 ],
888 'selectors' => [
889 '{{WRAPPER}}' => '--icon-size: {{SIZE}}{{UNIT}}',
890 ],
891 ]
892 );
893
894 $this->add_responsive_control(
895 'borderless_team_members_social_profiles_icon_padding',
896 [
897 'label' => __( 'Padding', 'borderless' ),
898 'type' => Controls_Manager::SLIDER,
899 'selectors' => [
900 '{{WRAPPER}} .elementor-social-icon' => '--icon-padding: {{SIZE}}{{UNIT}}',
901 ],
902 'default' => [
903 'unit' => 'em',
904 ],
905 'tablet_default' => [
906 'unit' => 'em',
907 ],
908 'mobile_default' => [
909 'unit' => 'em',
910 ],
911 'range' => [
912 'em' => [
913 'min' => 0,
914 'max' => 5,
915 ],
916 ],
917 ]
918 );
919
920 $this->add_responsive_control(
921 'borderless_team_members_social_profiles_icon_spacing',
922 [
923 'label' => __( 'Spacing', 'borderless' ),
924 'type' => Controls_Manager::SLIDER,
925 'range' => [
926 'px' => [
927 'min' => 0,
928 'max' => 100,
929 ],
930 ],
931 'default' => [
932 'size' => 5,
933 ],
934 'selectors' => [
935 '{{WRAPPER}}' => '--grid-column-gap: {{SIZE}}{{UNIT}}',
936 ],
937 ]
938 );
939
940 $this->add_responsive_control(
941 'borderless_team_members_social_profiles_row_gap',
942 [
943 'label' => __( 'Rows Gap', 'borderless' ),
944 'type' => Controls_Manager::SLIDER,
945 'default' => [
946 'size' => 0,
947 ],
948 'selectors' => [
949 '{{WRAPPER}}' => '--grid-row-gap: {{SIZE}}{{UNIT}}',
950 ],
951 ]
952 );
953
954 $this->add_group_control(
955 Group_Control_Border::get_type(),
956 [
957 'name' => 'image_border',
958 'selector' => '{{WRAPPER}} .elementor-social-icon',
959 'separator' => 'before',
960 ]
961 );
962
963 $this->add_control(
964 'borderless_team_members_social_profiles_hover_border_color',
965 [
966 'label' => __( 'Hover Color', 'borderless' ),
967 'type' => Controls_Manager::COLOR,
968 'default' => '',
969 'condition' => [
970 'image_border_border!' => '',
971 ],
972 'selectors' => [
973 '{{WRAPPER}} .elementor-social-icon:hover' => 'border-color: {{VALUE}};',
974 ],
975 ]
976 );
977
978 $this->add_control(
979 'borderless_team_members_social_profiles_border_radius',
980 [
981 'label' => __( 'Border Radius', 'borderless' ),
982 'type' => Controls_Manager::DIMENSIONS,
983 'size_units' => [ 'px', '%' ],
984 'selectors' => [
985 '{{WRAPPER}} .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
986 ],
987 ]
988 );
989
990 $this->add_control(
991 'borderless_team_members_social_profiles_shape',
992 [
993 'label' => __( 'Shape', 'borderless' ),
994 'type' => Controls_Manager::SELECT,
995 'condition' => [
996 'borderless_team_member_enable_social_profiles!' => '',
997 ],
998 'default' => 'rounded',
999 'options' => [
1000 'rounded' => __( 'Rounded', 'borderless' ),
1001 'square' => __( 'Square', 'borderless' ),
1002 'circle' => __( 'Circle', 'borderless' ),
1003 ],
1004 'prefix_class' => 'elementor-shape-',
1005 ]
1006 );
1007
1008 $this->add_responsive_control(
1009 'borderless_team_members_social_profiles_columns',
1010 [
1011 'label' => __( 'Columns', 'borderless' ),
1012 'type' => Controls_Manager::SELECT,
1013 'condition' => [
1014 'borderless_team_member_enable_social_profiles!' => '',
1015 ],
1016 'default' => '0',
1017 'options' => [
1018 '0' => __( 'Auto', 'borderless' ),
1019 '1' => '1',
1020 '2' => '2',
1021 '3' => '3',
1022 '4' => '4',
1023 '5' => '5',
1024 '6' => '6',
1025 ],
1026 'prefix_class' => 'elementor-grid%s-',
1027 'selectors' => [
1028 '{{WRAPPER}}' => '--grid-template-columns: repeat({{VALUE}}, auto);',
1029 ],
1030 ]
1031 );
1032
1033 $this->add_control(
1034 'borderless_team_members_social_profiles_hover_animation',
1035 [
1036 'label' => __( 'Hover Animation', 'borderless' ),
1037 'type' => Controls_Manager::HOVER_ANIMATION,
1038 ]
1039 );
1040
1041 $this->add_control(
1042 'borderless_team_members_social_profiles_style',
1043 [
1044 'label' => __( 'Social Profiles Section', 'borderless'),
1045 'type' => Controls_Manager::HEADING,
1046 'separator' => 'before'
1047 ]
1048 );
1049
1050 $this->add_responsive_control(
1051 'borderless_team_members_social_profiles_margin',
1052 [
1053 'label' => esc_html__( 'Margin', 'borderless'),
1054 'type' => Controls_Manager::DIMENSIONS,
1055 'size_units' => [ 'px', 'em', '%', 'rem' ],
1056 'selectors' => [
1057 '{{WRAPPER}} .borderless-elementor-team-member-profiles' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1058 ],
1059 ]
1060 );
1061
1062 $this->add_responsive_control(
1063 'borderless_team_members_social_profiles_padding',
1064 [
1065 'label' => esc_html__( 'Padding', 'borderless'),
1066 'type' => Controls_Manager::DIMENSIONS,
1067 'size_units' => [ 'px', 'em', '%', 'rem' ],
1068 'selectors' => [
1069 '{{WRAPPER}} .borderless-elementor-team-member-profiles' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1070 ],
1071 ]
1072 );
1073
1074 $this->end_controls_section();
1075
1076 }
1077
1078 protected function render() {
1079 $settings = $this->get_settings_for_display();
1080 $fallback_defaults = [
1081 'fa fa-facebook',
1082 'fa fa-twitter',
1083 'fa fa-google-plus',
1084 ];
1085
1086 $class_animation = '';
1087
1088 if ( ! empty( $settings['borderless_team_members_social_profiles_hover_animation'] ) ) {
1089 $class_animation = ' elementor-animation-' . esc_attr($settings['borderless_team_members_social_profiles_hover_animation']);
1090 }
1091
1092 $migration_allowed = Icons_Manager::is_migration_allowed();
1093
1094 echo '<div class="borderless-elementor-team-member">';
1095
1096 if ( !empty( $settings['borderless_team_member_avatar']['url'] ) ) {
1097 echo '
1098 <div class="borderless-elementor-team-member-social-profiles">
1099 <figure>
1100 <img src="'.esc_url($settings['borderless_team_member_avatar']['url']).'" width="500" height="600">
1101 </figure>
1102 </div>
1103 ';
1104 }
1105
1106 echo '<div class="borderless-elementor-team-member-content">';
1107 if ( ! empty( $settings['borderless_team_member_name'] ) ) {
1108 echo '<h3 class="borderless-elementor-team-member-name">'.esc_html($settings['borderless_team_member_name']).'</h3>';
1109 }
1110 if ( ! empty( $settings['borderless_team_member_job'] ) ) {
1111 echo '<h4 class="borderless-elementor-team-member-job">'.esc_html($settings['borderless_team_member_job']).'</h4>';
1112 }
1113 if ( ! empty( $settings['borderless_team_member_description'] ) ) {
1114 echo '<p class="borderless-elementor-team-member-description">'.esc_html($settings['borderless_team_member_description']).'</p>';
1115 }
1116
1117 echo '<div class="borderless-elementor-team-member-profiles elementor-social-icons-wrapper elementor-grid">';
1118 foreach ( $settings['borderless_team_member_social_profiles_links'] as $index => $item ) {
1119 $migrated = isset( $item['__fa4_migrated']['social_icon'] );
1120 $is_new = empty( $item['social'] ) && $migration_allowed;
1121 $social = '';
1122
1123 // add old default
1124 if ( empty( $item['social'] ) && ! $migration_allowed ) {
1125 $item['social'] = isset( $fallback_defaults[ $index ] ) ? $fallback_defaults[ $index ] : 'fa fa-wordpress';
1126 }
1127
1128 if ( ! empty( $item['social'] ) ) {
1129 $social = str_replace( 'fa fa-', '', $item['social'] );
1130 }
1131
1132 if ( ( $is_new || $migrated ) && 'svg' !== $item['social_icon']['library'] ) {
1133 $social = explode( ' ', $item['social_icon']['value'], 2 );
1134 if ( empty( $social[1] ) ) {
1135 $social = '';
1136 } else {
1137 $social = str_replace( 'fa-', '', $social[1] );
1138 }
1139 }
1140 if ( 'svg' === $item['social_icon']['library'] ) {
1141 $social = get_post_meta( $item['social_icon']['value']['id'], '_wp_attachment_image_alt', true );
1142 }
1143
1144 $link_key = 'link_' . $index;
1145
1146 $this->add_render_attribute( $link_key, 'class', [
1147 'elementor-icon',
1148 'elementor-social-icon',
1149 'elementor-social-icon-' . $social . $class_animation,
1150 'elementor-repeater-item-' . $item['_id'],
1151 ] );
1152
1153 $this->add_link_attributes( $link_key, $item['link'] );
1154
1155 echo '<div class="elementor-grid-item">';
1156 echo '<a ' . $this->get_render_attribute_string( $link_key ) . '>';
1157 echo '<span class="elementor-screen-only">' . ucwords( esc_html($social) ) . '</span>';
1158 if ( $is_new || $migrated ) {
1159 Icons_Manager::render_icon( $item['social_icon'], ['aria-hidden' => 'true'] );
1160 } else {
1161 echo '<i class="' . esc_attr( $item['social'] ) . '"></i>';
1162 }
1163 echo '</a>';
1164 echo '</div>';
1165 }
1166 echo '</div>';
1167 echo '</div>';
1168 echo '</div>';
1169 }
1170
1171
1172 protected function _content_template() {
1173
1174 }
1175
1176
1177 }