PluginProbe ʕ •ᴥ•ʔ
Spider Elements – Premium Elementor Widgets & Addons Library / 1.6.5
Spider Elements – Premium Elementor Widgets & Addons Library v1.6.5
trunk 1.0.0 1.1.0 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.7.0 1.8.0 1.9.0
spider-elements / widgets / Accordion.php
spider-elements / widgets Last commit date
templates 1 year ago Accordion.php 1 year ago Alerts_Box.php 1 year ago Before_after.php 1 year ago Blog_Grid.php 1 year ago Cheat_Sheet.php 1 year ago Counter.php 1 year ago Icon_Box.php 1 year ago Integrations.php 1 year ago List_Item.php 1 year ago Tabs.php 1 year ago Team_Carousel.php 1 year ago Testimonial.php 1 year ago Timeline.php 1 year ago Video_Playlist.php 1 year ago Video_Popup.php 1 year ago
Accordion.php
674 lines
1 <?php
2 /**
3 * Use namespace to avoid conflict
4 */
5
6 namespace SPEL\Widgets;
7
8 use Elementor\Controls_Manager;
9 use Elementor\Group_Control_Text_Shadow;
10 use Elementor\Group_Control_Text_Stroke;
11 use Elementor\Group_Control_Typography;
12 use Elementor\Repeater;
13 use Elementor\Widget_Base;
14
15
16 // Exit if accessed directly
17 if ( ! defined( 'ABSPATH' ) ) {
18 exit;
19 }
20
21 /**
22 * Class Accordion
23 * @package spider\Widgets
24 */
25 class Accordion extends Widget_Base {
26
27 public function get_name(): string
28 {
29 return 'spel_accordion'; // ID of the widget (Don't change this name)
30 }
31
32 public function get_title(): string
33 {
34 return esc_html__( 'SE Accordion', 'spider-elements' );
35 }
36
37 public function get_icon(): string
38 {
39 return 'eicon-accordion spel-icon';
40 }
41
42 public function get_keywords(): array
43 {
44 return [ 'spider', 'spider elements', 'toggle', 'accordion', 'collapse', 'faq', 'tabs', 'tab', ];
45 }
46
47 public function get_categories(): array
48 {
49 return [ 'spider-elements' ];
50 }
51
52 /**
53 * Name: get_style_depends()
54 * Desc: Register the required CSS dependencies for the frontend.
55 */
56 public function get_style_depends(): array
57 {
58 return [ 'spel-main', 'elegant-icon' ];
59 }
60
61 /**
62 * Name: get_script_depends()
63 * Desc: Register the required JS dependencies for the frontend.
64 */
65 public function get_script_depends(): array
66 {
67 return [ 'spel-el-widgets' ];
68 }
69
70
71 /**
72 * Name: register_controls()
73 * Desc: Register controls for these widgets
74 * Params: no params
75 * Return: @void
76 * Since: @1.0.0
77 * Package: @spider-elements
78 * Author: spider-themes
79 */
80 protected function register_controls(): void
81 {
82 $this->elementor_content_control();
83 $this->elementor_style_control();
84 }
85
86
87 /**
88 * Name: elementor_content_control()
89 * Desc: Register the Content Tab output on the Elementor editor.
90 * Params: no params
91 * Return: @void
92 * Since: @1.0.0
93 * Package: @spider-elements
94 * Author: spider-themes
95 */
96 public function elementor_content_control(): void
97 {
98
99 //=================== Section Accordion ===================//
100 $this->start_controls_section(
101 'sec_accordion', [
102 'label' => esc_html__( 'Accordion', 'spider-elements' ),
103 ]
104 );
105
106 $repeater = new Repeater();
107 $repeater->add_control(
108 'collapse_state', [
109 'label' => esc_html__( 'Expanded', 'spider-elements' ),
110 'type' => Controls_Manager::SWITCHER,
111 'label_on' => esc_html__( 'Yes', 'spider-elements' ),
112 'label_off' => esc_html__( 'No', 'spider-elements' ),
113 'return_value' => 'yes',
114 'default' => 'no',
115 'separator' => 'after',
116 ]
117 );
118
119 $repeater->add_control(
120 'title', [
121 'label' => esc_html__( 'Title', 'spider-elements' ),
122 'type' => Controls_Manager::TEXT,
123 'default' => esc_html__( 'Accordion Title', 'spider-elements' ),
124 'label_block' => true,
125 'dynamic' => [
126 'active' => true,
127 ],
128 ]
129 );
130
131 $repeater->add_control(
132 'content_type', [
133 'label' => esc_html__( 'Content Type', 'spider-elements' ),
134 'type' => Controls_Manager::SELECT,
135 'options' => [
136 'content' => esc_html__( 'Contents', 'spider-elements' ),
137 'el_template' => esc_html__( 'Saved Template', 'spider-elements' ),
138 ],
139 'default' => 'content',
140 ]
141 );
142
143 $repeater->add_control(
144 'normal_content', [
145 'label' => esc_html__( 'Content Text', 'spider-elements' ),
146 'type' => Controls_Manager::WYSIWYG,
147 'label_block' => true,
148 'default' => esc_html__( 'Accordion Content', 'spider-elements' ),
149 'condition' => [
150 'content_type' => 'content'
151 ]
152 ]
153
154 );
155
156 $repeater->add_control(
157 'el_content', [
158 'label' => esc_html__( 'Select Template', 'spider-elements' ),
159 'type' => Controls_Manager::SELECT,
160 'options' => spel_get_el_templates(),
161 'label_block' => true,
162 'default' => esc_html__( 'Accordion Content', 'spider-elements' ),
163 'condition' => [
164 'content_type' => 'el_template'
165 ]
166 ]
167 );
168
169 $this->add_control(
170 'accordions', [
171 'label' => 'Accordion Items',
172 'type' => Controls_Manager::REPEATER,
173 'fields' => $repeater->get_controls(),
174 'default' => [
175 [
176 'title' => esc_html__( 'Accordion #1', 'spider-elements' ),
177 'tab_content' => esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.',
178 'spider-elements' ),
179 ],
180 [
181 'title' => esc_html__( 'Accordion #2', 'spider-elements' ),
182 'tab_content' => esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.',
183 'spider-elements' ),
184 ],
185 [
186 'title' => esc_html__( 'Accordion #3', 'spider-elements' ),
187 'tab_content' => esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.',
188 'spider-elements' ),
189 ],
190 ],
191 'title_field' => '{{{ title }}}',
192 ]
193 );
194
195 $this->add_control(
196 'plus-icon', [
197 'label' => esc_html__( 'Icon', 'spider-elements' ),
198 'type' => Controls_Manager::ICONS,
199 'label_block' => true,
200 'default' => [
201 'value' => 'icon_plus',
202 'library' => 'solid',
203 ],
204 'separator' => 'before'
205 ]
206 );
207
208 $this->add_control(
209 'minus-icon', [
210 'label' => esc_html__( 'Active Icon', 'spider-elements' ),
211 'type' => Controls_Manager::ICONS,
212 'default' => [
213 'value' => 'icon_minus-06',
214 'library' => 'solid',
215 ]
216 ]
217 );
218
219 $this->add_control(
220 'icon_align',
221 [
222 'label' => esc_html__( 'Icon Alignment', 'spider-elements' ),
223 'type' => Controls_Manager::CHOOSE,
224 'options' => [
225 'left' => [
226 'title' => esc_html__( 'Start', 'spider-elements' ),
227 'icon' => 'eicon-h-align-left'
228 ],
229 'right' => [
230 'title' => esc_html__( 'End', 'spider-elements' ),
231 'icon' => 'eicon-h-align-right'
232 ],
233 ],
234 'default' => is_rtl() ? 'left' : 'right',
235 'toggle' => false,
236 ]
237 );
238
239 $this->add_responsive_control(
240 'icon_space',
241 [
242 'label' => esc_html__( 'Icon Spacing', 'spider-elements' ),
243 'type' => Controls_Manager::SLIDER,
244 'size_units' => [ 'px', '%', 'em' ],
245 'range' => [
246 'px' => [
247 'min' => 0,
248 'max' => 500,
249 ],
250 ],
251 'default' => [
252 'size' => 30,
253 'unit' => 'px',
254 ],
255 'selectors' => [
256 '{{WRAPPER}} .card .card-header button .expanded-icon' => 'margin-right: {{SIZE}}{{UNIT}};',
257 '{{WRAPPER}} .card .card-header button .collapsed-icon' => 'margin-right: {{SIZE}}{{UNIT}};',
258 '{{WRAPPER}} .card .card-header button.icon-align-left .expanded-icon' => 'margin-left: {{SIZE}}{{UNIT}};',
259 '{{WRAPPER}} .card .card-header button.icon-align-left .collapsed-icon' => 'margin-left: {{SIZE}}{{UNIT}};',
260 ],
261 ]
262 );
263
264 $this->add_control(
265 'is_toggle', [
266 'label' => esc_html__( 'Toggle', 'spider-elements' ),
267 'type' => Controls_Manager::SWITCHER,
268 'separator' => 'before',
269 'label_on' => esc_html__( 'Yes', 'spider-elements' ),
270 'label_off' => esc_html__( 'No', 'spider-elements' ),
271 'return_value' => 'yes',
272 'default' => '',
273 ]
274 );
275
276 $this->add_control(
277 'faq_schema',
278 [
279 'label' => esc_html__( 'FAQ Schema', 'spider-elements' ),
280 'type' => Controls_Manager::SWITCHER,
281 'separator' => 'before',
282 ]
283 );
284
285 $this->add_control(
286 'title_tag', [
287 'label' => esc_html__( 'Title Tag', 'spider-elements' ),
288 'type' => Controls_Manager::SELECT,
289 'separator' => 'before',
290 'default' => 'h6',
291 'options' => spel_get_title_tags(),
292 ]
293 );
294
295 $this->end_controls_section(); // End Accordion Settings
296
297 }
298
299
300 /**
301 * Name: elementor_style_control()
302 * Desc: Register the Style Tab output on the Elementor editor.
303 * Params: no params
304 * Return: @void
305 * Since: @1.0.0
306 * Package: @spider-elements
307 * Author: spider-themes
308 */
309 public function elementor_style_control(): void
310 {
311
312 //============================= Accordion Settings Style =============================//
313 $this->start_controls_section(
314 'sec_title_style', [
315 'label' => esc_html__( 'Accordion', 'spider-elements' ),
316 'tab' => Controls_Manager::TAB_STYLE,
317 ]
318 );
319
320 $this->add_group_control(
321 \Elementor\Group_Control_Border::get_type(), [
322 'name' => 'accordion_border',
323 'selector' => '{{WRAPPER}} .spel-accordion .card',
324 ]
325 );
326
327 $this->add_responsive_control(
328 'acc_item_border_radius', [
329 'label' => esc_html__( 'Border Radius', 'spider-elements' ),
330 'type' => Controls_Manager::DIMENSIONS,
331 'size_units' => [ 'px', '%', 'em' ],
332 'selectors' => [
333 '{{WRAPPER}} .spel-accordion .card' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
334 ],
335 ]
336 );
337
338 $this->add_control(
339 'is_border_bottom', [
340 'label' => esc_html__( 'Border Bottom', 'spider-elements' ),
341 'type' => \Elementor\Controls_Manager::SWITCHER,
342 'label_on' => esc_html__( 'Yes', 'spider-elements' ),
343 'label_off' => esc_html__( 'No', 'spider-elements' ),
344 'return_value' => 'yes',
345 'default' => 'yes',
346 'separator' => 'before',
347 ]
348 );
349
350 $this->add_group_control(
351 \Elementor\Group_Control_Box_Shadow::get_type(),
352 [
353 'name' => 'accordion_box_shadow',
354 'selector' => '{{WRAPPER}} .spel-accordion .card',
355 ]
356 );
357
358 $this->add_responsive_control(
359 'accordion_bottom_spacing', [
360 'label' => esc_html__( 'Spacing', 'spider-elements' ),
361 'description' => esc_html__( 'Spacing between the accordions', 'spider-elements' ),
362 'type' => Controls_Manager::SLIDER,
363 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ],
364 'range' => [
365 'px' => [
366 'max' => 100,
367 ],
368 'em' => [
369 'max' => 0,
370 ],
371 ],
372 'selectors' => [
373 '{{WRAPPER}} .spel-accordion .card' => 'margin-bottom: {{SIZE}}{{UNIT}} !important;',
374 ],
375 ]
376 );
377
378 $this->end_controls_section();
379
380
381 //=============Accordion Title Style Section===============
382 $this->start_controls_section(
383 'section_toggle_style_title',
384 [
385 'label' => esc_html__( 'Title', 'spider-elements' ),
386 'tab' => Controls_Manager::TAB_STYLE,
387 ]
388 );
389
390 $this->add_group_control(
391 Group_Control_Typography::get_type(), [
392 'name' => 'title_typography',
393 'selector' => '{{WRAPPER}} .card .card-header button.collapsed, {{WRAPPER}} .card .card-header button',
394 ]
395 );
396
397 $this->add_control(
398 'title_color', [
399 'label' => esc_html__( 'Text Color', 'spider-elements' ),
400 'type' => Controls_Manager::COLOR,
401 'selectors' => [
402 '{{WRAPPER}} .accordion_inner button' => 'color: {{VALUE}};',
403 ],
404 ]
405 );
406
407 $this->add_control(
408 'tab_active_color', [
409 'label' => esc_html__( 'Active Color', 'spider-elements' ),
410 'type' => Controls_Manager::COLOR,
411 'selectors' => [
412 '{{WRAPPER}} .spel-accordion .collapsed .accordion_btn_link' => 'color: {{VALUE}};',
413 ],
414 ]
415 );
416
417 $this->add_group_control(
418 \Elementor\Group_Control_Background::get_type(), [
419 'name' => 'accordion_title_bg_color',
420 'types' => [ 'classic', 'gradient' ],
421 'exclude' => [ 'image' ],
422 'selector' => '{{WRAPPER}} .card-header button.collapsed, {{WRAPPER}} .card-header button',
423 ]
424 );
425
426 $this->add_group_control(
427 Group_Control_Text_Stroke::get_type(), [
428 'name' => 'text_stroke',
429 'selector' => '{{WRAPPER}} .card .card-header button.collapsed, {{WRAPPER}} .card .card-header button',
430 ]
431 );
432
433 $this->add_group_control(
434 Group_Control_Text_Shadow::get_type(),
435 [
436 'name' => 'title_shadow',
437 'selector' => '{{WRAPPER}} .card .card-header button.collapsed, {{WRAPPER}} .card .card-header button',
438 ]
439 );
440
441 $this->add_responsive_control(
442 'title_padding',
443 [
444 'label' => esc_html__( 'Padding', 'spider-elements' ),
445 'type' => Controls_Manager::DIMENSIONS,
446 'size_units' => [ 'px', 'em', '%' ],
447 'selectors' => [
448 '{{WRAPPER}} .card .card-header button.collapsed' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
449 '{{WRAPPER}} .card .card-header button' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
450 ],
451 ]
452 );
453
454 $this->end_controls_section(); //End Accordion title
455
456 //================= Content Style ===================
457 $this->start_controls_section(
458 'section_toggle_style_content',
459 [
460 'label' => esc_html__( 'Content', 'spider-elements' ),
461 'tab' => Controls_Manager::TAB_STYLE,
462 ]
463 );
464
465 $this->add_group_control(
466 Group_Control_Typography::get_type(), [
467 'name' => 'content_typography',
468 'selector' => '{{WRAPPER}} .spel-accordion .card .card-body p',
469 ]
470 );
471
472 $this->add_control(
473 'content_color', [
474 'label' => esc_html__( 'Text Color', 'spider-elements' ),
475 'type' => Controls_Manager::COLOR,
476 'selectors' => [
477 '{{WRAPPER}} .elementor-widget-container .card-body' => 'color: {{VALUE}};',
478 ],
479 ]
480 );
481
482 $this->add_group_control(
483 \Elementor\Group_Control_Background::get_type(), [
484 'name' => 'accordion_content_bg_color',
485 'types' => [ 'classic', 'gradient' ],
486 'exclude' => [ 'image' ],
487 'selector' => '{{WRAPPER}} .elementor-widget-container .card-body ',
488 ]
489 );
490
491 $this->add_group_control(
492 Group_Control_Text_Shadow::get_type(),
493 [
494 'name' => 'content_shadow',
495 'selector' => '{{WRAPPER}} .elementor-widget-container .card-body',
496 ]
497 );
498
499 $this->add_responsive_control(
500 'content_padding',
501 [
502 'label' => esc_html__( 'Padding', 'spider-elements' ),
503 'type' => Controls_Manager::DIMENSIONS,
504 'size_units' => [ 'px', 'em', '%' ],
505 'selectors' => [
506 '{{WRAPPER}} .elementor-widget-container .card-body' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
507 ],
508 ]
509 );
510
511 $this->end_controls_section();
512 //end accordion content style section//
513
514
515 // ============Accordion Icon Style Section==============
516 $this->start_controls_section(
517 'section_toggle_style_icon',
518 [
519 'label' => esc_html__( 'Icon', 'spider-elements' ),
520 'tab' => Controls_Manager::TAB_STYLE
521 ]
522 );
523
524 $this->add_responsive_control(
525 'icon_size',
526 [
527 'label' => esc_html__( 'Size', 'spider-elements' ),
528 'type' => Controls_Manager::SLIDER,
529 'size_units' => [ 'px', '%', 'em', 'rem', 'vw', 'custom' ],
530 'range' => [
531 'px' => [
532 'min' => 6,
533 'max' => 300,
534 ],
535 ],
536 'selectors' => [
537 '{{WRAPPER}} .expanded-icon' => 'font-size: {{SIZE}}{{UNIT}};',
538 '{{WRAPPER}} .collapsed-icon' => 'font-size: {{SIZE}}{{UNIT}};',
539 ],
540 ]
541 );
542
543 // Accordion icon Normal/Active/ State
544 $this->start_controls_tabs(
545 'style_accordion_icon_tabs'
546 );
547
548 //=== Normal icon
549 $this->start_controls_tab(
550 'style_accordion_icon_normal', [
551 'label' => esc_html__( 'Normal', 'spider-elements' ),
552 ]
553 );
554
555 $this->add_control(
556 'acc_icon_color',
557 [
558 'label' => esc_html__( 'Color', 'spider-elements' ),
559 'type' => Controls_Manager::COLOR,
560 'selectors' => [
561 '{{WRAPPER}} .card-header button .expanded-icon' => 'color: {{VALUE}};',
562
563 ],
564 ]
565 );
566
567 $this->add_control(
568 'acc_icon_bg_color',
569 [
570 'label' => esc_html__( 'Background', 'spider-elements' ),
571 'type' => Controls_Manager::COLOR,
572 'selectors' => [
573 '{{WRAPPER}} .card .card-header button .expanded-icon' => 'background: {{VALUE}};',
574
575 ],
576 ]
577 );
578
579 $this->end_controls_tab(); //End Normal icon
580
581
582 //=== Active icon====
583 $this->start_controls_tab(
584 'acc_icon_active', [
585 'label' => esc_html__( 'Active', 'spider-elements' ),
586 ]
587 );
588
589 $this->add_control(
590 'icon_active_color', [
591 'label' => esc_html__( 'Color', 'spider-elements' ),
592 'type' => Controls_Manager::COLOR,
593 'selectors' => [
594 '{{WRAPPER}} .card-header button .collapsed-icon' => 'color: {{VALUE}};',
595 ],
596 ]
597 );
598
599 $this->add_control(
600 'icon_active_bg_color', [
601 'label' => esc_html__( 'Background', 'spider-elements' ),
602 'type' => Controls_Manager::COLOR,
603 'selectors' => [
604 '{{WRAPPER}} .card .card-header button .collapsed-icon' => 'background: {{VALUE}};',
605 ],
606 ]
607 );
608
609
610 $this->end_controls_tab(); // End Active Tab Title
611 $this->end_controls_tabs(); // End Accordion icon Normal/Active/ State
612
613 $this->add_responsive_control(
614 'acc_padding', [
615 'label' => esc_html__( 'Padding', 'spider-elements' ),
616 'type' => Controls_Manager::DIMENSIONS,
617 'size_units' => [ 'px', '%', 'em' ],
618 'separator' => 'before',
619 'selectors' => [
620 '{{WRAPPER}} .expanded-icon' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
621 '{{WRAPPER}} .collapsed-icon' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
622 ],
623 ]
624 );
625
626 $this->add_responsive_control(
627 'acc_border_radius', [
628 'label' => esc_html__( 'Radius', 'spider-elements' ),
629 'type' => Controls_Manager::DIMENSIONS,
630 'size_units' => [ 'px', '%', 'em' ],
631 'selectors' => [
632 '{{WRAPPER}} .expanded-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
633 '{{WRAPPER}} .collapsed-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
634 ],
635 ]
636 );
637
638 $this->end_controls_section();
639 //end accordion icon style section//
640
641 }
642 // ==================End accordion all style controls===============
643
644 /**
645 * Name: elementor_render()
646 * Desc: Render the widget output on the frontend.
647 * Params: no params
648 * Return: @void
649 * Since: @1.0.0
650 * Package: @spider-elements
651 * Author: spider-themes
652 */
653 protected function render(): void
654 {
655
656 $settings = $this->get_settings_for_display();
657 extract( $settings );
658
659 $title_tag = ! empty ( $settings['title_tag'] ) ? $settings['title_tag'] : 'h6';
660 $accordions = ! empty ( $settings['accordions'] ) ? $settings['accordions'] : '';
661 $icon_align = ! empty ( $settings['icon_align'] ) ? $settings['icon_align'] : 'right';
662 $icon_align_class = ! empty ( $icon_align == 'left' ) ? ' icon-align-left' : '';
663
664 $is_toggle = ! empty ( $settings['is_toggle'] ) ? $settings['is_toggle'] : '';
665 $toggle_id = ! empty( $is_toggle == 'yes' ) ? 'id=accordionExample-' . $this->get_id() : '';
666 $toggle_bs_parent_id = ! empty( $is_toggle == 'yes' ) ? 'data-bs-parent=#accordionExample-' . $this->get_id() : '';
667
668 //======================== Template Parts ========================//
669 include "templates/accordion/accordion.php";
670
671 }
672 }
673
674