PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.6.0
ShopBuilder – WooCommerce Builder For Elementor v2.6.0
3.4.2 3.4.1 3.4.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 All 63 releases
← All changes | app/Elementor/Render/GeneralAddons.php +25 -160 3.4.02.6.0 View file →
@@ -76,8 +76,10 @@
76 76 * @var bool
77 77 */
78 78 public $is_post_pagination = false;
79 79
80 +
81 +
80 82 /**
81 83 * Grid check.
82 84 *
83 85 * @var bool
@@ -146,12 +148,8 @@
146 148 if ( $this->is_grid ) {
147 149 $container_attributes['style'] = apply_filters( 'rtsb/general_widget/container/attr', $style_attr, $this->settings );
148 150 }
149 151
150 - if ( ! empty( $args['container_attr'] ) ) {
151 - $container_attributes = array_merge( $container_attributes, $args['container_attr'] );
152 - }
153 -
154 152 $row_args = wp_parse_args(
155 153 $this->get_row_args(),
156 154 [
157 155 'layout' => $raw_layout,
@@ -299,19 +297,15 @@
299 297 *
300 298 * @return void
301 299 */
302 300 private function slider_wrapper_start() {
303 - if ( 'rtsb-hero-slider' === $this->unique_name ) {
304 - $slider_data = self::get_hero_slider_data( $this->settings );
305 - } else {
306 - $slider_data = $this->get_slider_data();
307 - $slider_options = $slider_data['data'] ?? '';
308 - $slider_classes = $slider_data['class'] ?? '';
309 - $slider_data = [
310 - 'class' => 'rtsb-carousel-slider swiper ' . $slider_classes,
311 - 'data' => $slider_options,
312 - ];
313 - }
301 + $slider_data = $this->get_slider_data();
302 + $slider_options = $slider_data['data'] ?? '';
303 + $slider_classes = $slider_data['class'] ?? '';
304 + $slider_data = [
305 + 'class' => 'rtsb-carousel-slider swiper ' . $slider_classes,
306 + 'data' => $slider_options,
307 + ];
314 308
315 309 // Adding slider attributes.
316 310 $this->add_attribute(
317 311 'rtsb_slider_attr_' . $this->id,
@@ -346,29 +340,16 @@
346 340 $metas = $this->get_slider_meta_dataset( $this->settings, $this->template_name, $this->settings );
347 341
348 342 return RenderHelpers::slider_data( (array) $metas, $this->settings );
349 343 }
350 -
351 344 /**
352 - * Prepares and returns slider configuration dataset for rendering in Elementor or frontend use.
345 + * Gets slider data for the carousel.
353 346 *
354 - * This method collects various slider-related metadata settings, normalizes them using helper
355 - * functions, and returns a structured dataset used to initialize and render a responsive slider.
356 - *
357 - * @since 1.0.0
358 - *
359 - * @param array $meta Metadata array containing configuration values for the slider.
360 - * Example keys: 'cols', 'cols_tablet', 'slider_loop', etc.
361 - * @param string $template The template identifier or slug used for rendering slider content.
362 - * @param array $raw_settings Raw settings passed directly from Elementor widget settings or similar source.
363 - *
364 - * @return array|null Returns an array of slider settings suitable for frontend use,
365 - * optionally modified by the 'rtsb/elementor/render/slider_dataset_final' filter.
347 + * @return string
366 348 */
367 349 protected function get_slider_meta_dataset( array $meta, $template = '', $raw_settings = [] ) {
368 350 $data = [
369 351 'widget' => 'custom',
370 - 'widget_name' => $this->unique_name,
371 352 'template' => RenderHelpers::get_data( $template, '', '' ),
372 353 'raw_settings' => $raw_settings,
373 354 'd_cols' => RenderHelpers::get_data( $meta, 'cols', 0 ),
374 355 't_cols' => RenderHelpers::get_data( $meta, 'cols_tablet', 2 ),
@@ -387,9 +368,9 @@
387 368 'auto_height' => ! empty( $meta['slider_auto_height'] ),
388 369 'speed' => RenderHelpers::get_data( $meta, 'slide_speed', 2000 ),
389 370 'space_between' => isset( $meta['grid_gap']['size'] ) && strlen( $meta['grid_gap']['size'] ) ? $meta['grid_gap']['size'] : 30,
390 371 'auto_play_timeout' => RenderHelpers::get_data( $meta, 'autoplay_timeout', 5000 ),
391 - 'nav_position' => RenderHelpers::get_data( $meta, 'slider_nav_position', 'standard' ),
372 + 'nav_position' => RenderHelpers::get_data( $meta, 'slider_nav_position', 'top' ),
392 373 'left_arrow_icon' => RenderHelpers::get_data( $meta, 'slider_left_arrow_icon', [] ),
393 374 'right_arrow_icon' => RenderHelpers::get_data( $meta, 'slider_right_arrow_icon', [] ),
394 375 ];
395 376 if ( ! empty( $meta['cols_widescreen'] ) ) {
@@ -406,122 +387,22 @@
406 387
407 388 if ( ! empty( $meta['cols_mobile_extra'] ) ) {
408 389 $data['me_cols'] = $meta['cols_mobile_extra'];
409 390 }
410 -
411 391 return apply_filters( 'rtsb/elementor/render/slider_dataset_final', $data, $meta, $raw_settings );
412 392 }
413 393
414 - /**
415 - * Generates the configuration and CSS class for the hero slider carousel.
416 - *
417 - * Prepares Swiper-compatible slider options and associated class names based on
418 - * the provided metadata. This includes autoplay settings, pagination type,
419 - * lazy loading, effects (e.g., parallax, fade), and responsive breakpoints.
420 - *
421 - * @since 1.0.0
422 - *
423 - * @param array $meta Metadata array for the slider settings, including keys like
424 - * 'slide_speed', 'slider_loop', 'slider_pagi_type', etc.
425 - *
426 - * @return array Returns an associative array containing:
427 - * - 'data' (string): JSON-encoded slider options for Swiper.
428 - * - 'class' (string): Additional CSS class names for the carousel container.
429 - */
430 - protected function get_hero_slider_data( array $meta ) {
431 - $has_dots = $meta['slider_pagi'] ? ' has-dot' : ' no-dot';
432 - $has_dots .= $meta['slider_nav'] ? ' has-nav' : ' no-nav';
433 - $has_dynamic_dots = $meta['slider_dynamic_pagi'] ? true : false;
434 - $breakpoints = [
435 - 0 => [
436 - 'slidesPerView' => 1,
437 - 'slidesPerGroup' => 1,
438 - 'pagination' => [
439 - 'dynamicBullets' => $has_dynamic_dots,
440 - 'type' => RenderHelpers::get_data( $meta, 'slider_pagi_type', 'bullet' ),
441 - ],
442 - ],
443 - 768 => [
444 - 'slidesPerView' => 1,
445 - 'slidesPerGroup' => 1,
446 - 'pagination' => [
447 - 'dynamicBullets' => $has_dynamic_dots,
448 - 'type' => RenderHelpers::get_data( $meta, 'slider_pagi_type', 'bullet' ),
449 - ],
450 - ],
451 - 1025 => [
452 - 'slidesPerView' => 1,
453 - 'slidesPerGroup' => 1,
454 - 'pagination' => [
455 - 'dynamicBullets' => $has_dynamic_dots,
456 - 'type' => RenderHelpers::get_data( $meta, 'slider_pagi_type', 'bullet' ),
457 - ],
458 - ],
459 - ];
460 - $slider_options = [
461 - 'slidesPerView' => 1,
462 - 'slidesPerGroup' => 1,
463 - 'speed' => absint( RenderHelpers::get_data( $meta, 'slide_speed', 2000 ) ),
464 - 'loop' => ! empty( $meta['slider_loop'] ),
465 - 'autoHeight' => ! empty( $meta['slider_auto_height'] ),
466 - 'preloadImages' => ! empty( $meta['slider_lazy_load'] ),
467 - 'lazy' => ! empty( $meta['slider_lazy_load'] ),
468 - 'breakpoints' => $breakpoints,
469 - ];
470 - if ( $meta['slide_autoplay'] ) {
471 - $slider_options['autoplay'] = [
472 - 'delay' => absint( RenderHelpers::get_data( $meta, 'autoplay_timeout', 5000 ) ),
473 - 'pauseOnMouseEnter' => ! empty( $meta['pause_hover'] ),
474 - 'disableOnInteraction' => false,
475 - ];
476 - }
477 - if ( 'fraction' === $meta['slider_pagi_type'] ) {
478 - unset( $slider_options['pagination']['dynamicBullets'] );
479 - }
480 - if ( 'parallax' === $meta['slider_effect'] ) {
481 - $slider_options['parallax'] = true;
482 - } else {
483 - $slider_options['effect'] = $meta['slider_effect'];
484 - }
485 - if ( 'fade' === $meta['slider_effect'] ) {
486 - $slider_options['crossFade'] = true;
487 - }
488 394
489 - $slider_options = apply_filters( 'rtsb/elementor/render/hero_slider_dataset', $slider_options, $this->settings );
490 - $carouselClass = 'rtsb-hero-carousel-slider slider-loading rtsb-pos-s ' . $has_dots;
491 - return [
492 - 'data' => esc_js( wp_json_encode( $slider_options ) ),
493 - 'class' => $carouselClass,
494 - ];
495 - }
496 -
497 -
498 395 /**
499 - * Renders the carousel slider navigation arrows and pagination markup.
396 + * Renders the carousel slider buttons.
500 397 *
501 - * This method returns HTML for Swiper navigation buttons (left/right arrows)
502 - * and optional pagination dots, depending on the provided slider settings.
503 - *
504 - * @since 1.0.0
505 - *
506 - * @param array $settings Slider configuration options. Expected keys:
507 - * - 'slider_left_arrow_icon' (string) Icon for the left arrow.
508 - * - 'slider_right_arrow_icon' (string) Icon for the right arrow.
509 - * - 'slider_nav' (bool) Whether to show navigation arrows.
510 - * - 'slider_pagi' (bool) Whether to show pagination.
511 - * - 'slider_pagi_type' (string) (Optional) Pagination style (e.g., 'bullets', 'fraction').
512 - *
513 - * @return string HTML markup for the slider navigation and pagination.
398 + * @return string
514 399 */
515 400 protected function slider_buttons( $settings ) {
516 - $html = '';
517 - $pagination_type = '';
518 - $left_icon = $settings['slider_left_arrow_icon'] ?? '';
519 - $right_icon = $settings['slider_right_arrow_icon'] ?? '';
520 - $is_hero_carousel = 'rtsb-hero-slider' === $this->unique_name;
521 - if ( $is_hero_carousel && ! empty( $settings['slider_pagi_type'] ) ) {
522 - $pagination_type = $settings['slider_pagi_type'];
523 - }
401 + $html = '';
402 + $left_icon = $settings['slider_left_arrow_icon'];
403 + $right_icon = $settings['slider_right_arrow_icon'];
404 +
524 405 if ( ! empty( $settings['slider_nav'] ) ) {
525 406 $html .=
526 407 '<div class="swiper-nav">
527 408 <div class="swiper-arrow swiper-button-next">
@@ -532,18 +413,11 @@
532 413 </div>
533 414 </div>';
534 415 }
535 416
536 - $html .= ! empty( $settings['slider_pagi'] ) ? '<div class="swiper-pagination rtsb-pos-s ' . esc_attr( $pagination_type ) . '"></div>' : '';
417 + $html .= ! empty( $settings['slider_pagi'] ) ? '<div class="swiper-pagination rtsb-pos-s"></div>' : '';
537 418
538 - /**
539 - * Filters the slider navigation + pagination markup.
540 - *
541 - * @param string $html Slider buttons (arrows + pagination) HTML.
542 - * @param array $settings Widget settings.
543 - * @param GeneralAddons $instance Current render instance (exposes unique_name, id, etc.).
544 - */
545 - return apply_filters( 'rtsb/general/slider_buttons/html', $html, $settings, $this );
419 + return $html;
546 420 }
547 421 /**
548 422 * Preloader.
549 423 *
@@ -549,11 +423,8 @@
549 423 *
550 424 * @return string
551 425 */
552 426 public function pre_loader() {
553 - if ( ! Fns::enable_loader() ) {
554 - return '';
555 - }
556 427 if ( $this->is_carousel ) {
557 428 return '<div class="rtsb-elements-loading rtsb-ball-clip-rotate"><div></div></div>';
558 429 }
559 430 return '';
@@ -643,9 +514,9 @@
643 514 ];
644 515 $args = wp_parse_args( $args, $default_args );
645 516 ?>
646 517 <a <?php Fns::print_html( $args['button_attributes'] ); ?>>
647 - <span class="text-wrap <?php echo esc_attr( 'icon-' . $args['sb_button_icon_position'] ); ?>">
518 + <span class="text-wrap <?php echo esc_attr('icon-'. $args['sb_button_icon_position'] ); ?>">
648 519 <?php
649 520 Fns::print_html( self::render_button_icon( 'left', $args['sb_button_icon'], $args['sb_button_icon_position'] ) );
650 521 Fns::print_html( '<span class="text">' );
651 522 Fns::print_html( $args['sb_button_content'] );
@@ -659,20 +530,14 @@
659 530 </a>
660 531 <?php
661 532 }
662 533 /**
663 - * Renders an icon HTML markup based on position match.
534 + * Function to render icon.
664 535 *
665 - * Compares the desired icon position with the configured position
666 - * and renders the icon HTML if they match.
536 + * @param string $position icon position ('left' or 'right').
537 + * @param array $icon Position of the separator in settings.
667 538 *
668 - * @since 1.0.0
669 - *
670 - * @param string $position Desired position to render the icon ('left' or 'right').
671 - * @param string $icon Icon identifier or SVG markup.
672 - * @param string $icon_position Actual position set in the settings ('left' or 'right').
673 - *
674 - * @return string Icon HTML if position matches; otherwise, an empty string.
539 + * @return string
675 540 */
676 541 public static function render_button_icon( $position, $icon, $icon_position ) {
677 542 $html = '';
678 543