This repository has been archived on 2022-06-23. You can view files and clone it, but cannot push or open issues or pull requests.
divi/includes/builder/module/helpers/Slider.php

138 lines
4.1 KiB
PHP

<?php
/**
* Class ET_Builder_Module_Helper_Slider
*/
class ET_Builder_Module_Helper_Slider {
/**
* Returns slider arrows CSS selector
*
* @since 3.25.3
*
* @param string $prefix
*
* @return string
*/
public function get_arrows_selector( $prefix = '%%order_class%%' ) {
return implode(
',',
array(
"$prefix .et-pb-slider-arrows .et-pb-arrow-prev",
"$prefix .et-pb-slider-arrows .et-pb-arrow-next",
)
);
}
/**
* Returns slider dots CSS selector
*
* @since 3.25.3
*
* @param string $prefix
*
* @return string
*/
public function get_dots_selector( $prefix = '%%order_class%%' ) {
return "$prefix .et-pb-controllers a, $prefix .et-pb-controllers .et-pb-active-control";
}
/**
* Reapply (fullwidth) post slider's module background on slide item which has featured image
*
* @since 4.3.3
*
* @param array $args {
* @type int $slide_post_id
* @type string|bool $post_featured_image
* @type string $render_slug
* @type array $props
* }
*/
public static function reapply_module_background_on_slide( $args = array() ) {
$defaults = array(
'slide_post_id' => 0,
'post_featured_image' => false,
'render_slug' => '',
'props' => array(),
);
// Parse argument
$args = wp_parse_args( $args, $defaults );
// Create slide class
$slide_id_class = "et_pb_post_slide-{$args['slide_post_id']}";
// Reapply background color (affecting blend mode), gradient (can be placed on top of image
// creating overlay-effect), and images (gradient is actually image) if:
// 1. Featured image exist on current slide
// 2. Featured image is shown (responsive)
// 3. Featured image placement is placed on background
// 4. Parallax (responsive) is off
// 1. Exit if featured image doesn't exist on current slide
if ( ! $args['post_featured_image'] ) {
return;
}
$props = $args['props'];
// 2. Exit if featured image is not shown
$is_show_image_responsive = et_pb_responsive_options()->is_responsive_enabled( $props, 'show_image' );
$is_featured_image_shown = $is_show_image_responsive ?
in_array( 'on', et_pb_responsive_options()->get_property_values( $props, 'show_image' ) ) :
'on' === et_()->array_get( $props, 'show_image' );
if ( ! $is_featured_image_shown ) {
return;
}
// 3. Exit if feature image is not placed in background
if ( 'background' !== et_()->array_get( $props, 'image_placement' ) ) {
return;
}
// 4. Exit if parallax is activated
$is_parallax_responsive = et_pb_responsive_options()->is_responsive_enabled( $props, 'parallax' );
$is_parallax_active = $is_parallax_responsive ?
in_array( 'on', et_pb_responsive_options()->get_property_values( $props, 'parallax' ) ) :
'on' === et_()->array_get( $props, 'parallax' );
if ( $is_parallax_active ) {
return;
}
// Process background
$props['background_image'] = $args['post_featured_image'];
$props['background_enable_image'] = 'on';
// Background responsive is generally set via background_last_edited instead of each background
// type's *_last_edited; when background's responsive active and no background image is set,
// background-image property will be set to `initial` and featured image on current image got
// removed on current breakpoint. Thus, Set background image responsive attribute on current
// background_image attribute to keep it visible
if ( et_pb_responsive_options()->is_responsive_enabled( $props, 'background' ) ) {
$props['background_image_last_edited'] = '';
$props['background_image_tablet'] = $args['post_featured_image'];
$props['background_image_phone'] = $args['post_featured_image'];
}
if ( et_builder_is_hover_enabled( 'background', $props ) ) {
$props['background_image__hover'] = $args['post_featured_image'];
}
et_pb_background_options()->get_background_style(
array(
'props' => $props,
'selector' => "%%order_class%% .{$slide_id_class}",
'selector_hover' => "%%order_class%%:hover .{$slide_id_class}",
'function_name' => $args['render_slug'],
)
);
return;
}
}