slug = 'ba_image_compare';
$this->vb_support = 'on';
$this->name = esc_html__('Before & After Slider', 'addons-for-divi');
$this->icon_path = $this->dtl_icon_path('before-after');
$this->settings_modal_toggles = array(
'general' => array(
'toggles' => array(
'before' => esc_html__('Before', 'addons-for-divi'),
'after' => esc_html__('After', 'addons-for-divi'),
'settings' => esc_html__('Settings', 'addons-for-divi'),
'orientation' => esc_html__('Orientation', 'addons-for-divi'),
'handle' => esc_html__('Comparison Handle', 'addons-for-divi'),
),
),
'advanced' => array(
'toggles' => array(
'label' => esc_html__('Label', 'addons-for-divi'),
'handle' => esc_html__('Handle', 'addons-for-divi'),
'border' => esc_html__('Border', 'addons-for-divi'),
),
),
);
$this->custom_css_fields = array(
'before_img' => array(
'label' => esc_html__('Before Image', 'addons-for-divi'),
'selector' => '%%order_class%% .twentytwenty-before',
),
'after_img' => array(
'label' => esc_html__('After Image', 'addons-for-divi'),
'selector' => '%%order_class%% .twentytwenty-after',
),
'before_label' => array(
'label' => esc_html__('Before Label', 'addons-for-divi'),
'selector' => '%%order_class%% .twentytwenty-before-label',
),
'after_label' => array(
'label' => esc_html__('After Label', 'addons-for-divi'),
'selector' => '%%order_class%% .twentytwenty-after-label',
),
);
}
public function get_fields()
{
return array(
'before_img' => array(
'label' => esc_html__('Image', 'addons-for-divi'),
'description' => esc_html__('Upload an image or type in the URL of the image you would like to display as before image.', 'addons-for-divi'),
'type' => 'upload',
'option_category' => 'basic_option',
'upload_button_text' => esc_attr__('Upload an image', 'addons-for-divi'),
'choose_text' => esc_attr__('Choose an Image', 'addons-for-divi'),
'update_text' => esc_attr__('Set As Image', 'addons-for-divi'),
'description' => esc_html__('Upload an image to display as before image', 'addons-for-divi'),
'hide_metadata' => true,
'default' => '',
'computed_affects' => array('__compare'),
'toggle_slug' => 'before',
'dynamic_content' => 'image',
),
'before_label' => array(
'label' => esc_html__('Before Label', 'addons-for-divi'),
'description' => esc_html__('Define before label text.', 'addons-for-divi'),
'default' => 'Before',
'type' => 'text',
'option_category' => 'basic_option',
'description' => esc_html__('Define the HTML ALT text for your image here.', ''),
'toggle_slug' => 'before',
),
'before_label_bg' => array(
'label' => esc_html__('Label Background', 'addons-for-divi'),
'description' => esc_html__('Here you can define a custom background for before label.', 'addons-for-divi'),
'default' => $this->default_color,
'type' => 'color-alpha',
'custom_color' => true,
'toggle_slug' => 'before',
),
'after_img' => array(
'label' => esc_html__('Image', 'addons-for-divi'),
'description' => esc_html__('Upload an image or type in the URL of the image you would like to display as after image.', 'addons-for-divi'),
'type' => 'upload',
'option_category' => 'basic_option',
'default' => DIVI_TORQUE_LITE_ASSETS . 'imgs/placeholder.svg',
'upload_button_text' => esc_attr__('Upload an image', 'addons-for-divi'),
'choose_text' => esc_attr__('Choose an Image', 'addons-for-divi'),
'update_text' => esc_attr__('Set As Image', 'addons-for-divi'),
'description' => esc_html__('Upload an image to display at as after image', 'addons-for-divi'),
'hide_metadata' => true,
'computed_affects' => array('__compare'),
'toggle_slug' => 'after',
'dynamic_content' => 'image',
),
'after_label' => array(
'default' => 'After',
'label' => esc_html__('After Label', 'addons-for-divi'),
'description' => esc_html__('Define after label text.', 'addons-for-divi'),
'type' => 'text',
'option_category' => 'basic_option',
'description' => esc_html__('Define the HTML ALT text for your image here.', 'addons-for-divi'),
'toggle_slug' => 'after',
),
'after_label_bg' => array(
'default' => $this->default_color,
'label' => esc_html__('Label Background', 'addons-for-divi'),
'description' => esc_html__('Here you can define a custom background for after label.', 'addons-for-divi'),
'type' => 'color-alpha',
'custom_color' => true,
'toggle_slug' => 'after',
),
'orientation' => array(
'label' => esc_html__('Orientation', 'addons-for-divi'),
'description' => esc_html__('Select orientation.', 'addons-for-divi'),
'type' => 'select',
'option_category' => 'layout',
'options' => array(
'vertical' => __('Vertical', 'addons-for-divi'),
'horizontal' => __('Horizontal', 'addons-for-divi'),
),
'computed_affects' => array('__compare'),
'default' => 'horizontal',
'toggle_slug' => 'settings',
),
'offset_pct' => array(
'label' => esc_html__('Handle Initial Offset', 'addons-for-divi'),
'description' => esc_html__('Define handle initial offset.', 'addons-for-divi'),
'type' => 'select',
'option_category' => 'layout',
'options' => array(
'0.0' => __('0.0', 'addons-for-divi'),
'0.1' => __('0.1', 'addons-for-divi'),
'0.2' => __('0.2', 'addons-for-divi'),
'0.3' => __('0.3', 'addons-for-divi'),
'0.4' => __('0.4', 'addons-for-divi'),
'0.5' => __('0.5', 'addons-for-divi'),
'0.6' => __('0.6', 'addons-for-divi'),
'0.7' => __('0.7', 'addons-for-divi'),
'0.8' => __('0.8', 'addons-for-divi'),
'0.9' => __('0.9', 'addons-for-divi'),
),
'computed_affects' => array('__compare'),
'default' => '0.5',
'toggle_slug' => 'settings',
),
'move_on_hover' => array(
'label' => esc_html__('Move on Hover', 'addons-for-divi'),
'description' => esc_html__('Here you can choose whether handle should be moved on hover.', 'addons-for-divi'),
'type' => 'yes_no_button',
'options' => array(
'on' => esc_html__('Yes', 'addons-for-divi'),
'off' => esc_html__('No', 'addons-for-divi'),
),
'computed_affects' => array('__compare'),
'default' => 'off',
'toggle_slug' => 'settings',
),
'overlay' => array(
'label' => esc_html__('Use Overlay on Hover', 'addons-for-divi'),
'description' => esc_html__('Here you can choose whether overlay should be used on hover.', 'addons-for-divi'),
'type' => 'yes_no_button',
'options' => array(
'on' => esc_html__('Yes', 'addons-for-divi'),
'off' => esc_html__('No', 'addons-for-divi'),
),
'computed_affects' => array('__compare'),
'default' => 'on',
'toggle_slug' => 'settings',
),
'show_label' => array(
'label' => esc_html__('Show Before/After Label', 'addons-for-divi'),
'description' => esc_html__('Here you can choose whether before/after label should be used.', 'addons-for-divi'),
'type' => 'select',
'options' => array(
'always' => __('Always', 'addons-for-divi'),
'on_hover' => __('On Hover', 'addons-for-divi'),
),
'default' => 'always',
'toggle_slug' => 'settings',
'show_if' => array(
'overlay' => 'on',
),
),
'label_padding' => array(
'label' => esc_html__('Padding', 'addons-for-divi'),
'description' => esc_html__('Here you can define a custom padding for the label.', 'addons-for-divi'),
'type' => 'custom_padding',
'tab_slug' => 'advanced',
'toggle_slug' => 'label',
'default' => '5px|20px|5px|20px',
'mobile_options' => true,
),
'label_height' => array(
'label' => esc_html__('Height', 'addons-for-divi'),
'description' => esc_html__('Here you can define a custom label height.', 'addons-for-divi'),
'type' => 'range',
'default_unit' => 'px',
'default' => 'initial',
'range_settings' => array(
'min' => 0,
'step' => 1,
'max' => 200,
),
'toggle_slug' => 'label',
'tab_slug' => 'advanced',
'mobile_options' => true,
),
'label_width' => array(
'label' => esc_html__('Width', 'addons-for-divi'),
'description' => esc_html__('Here you can define a custom label width.', 'addons-for-divi'),
'type' => 'range',
'default_unit' => 'px',
'default' => 'initial',
'range_settings' => array(
'min' => 0,
'step' => 1,
'max' => 300,
),
'toggle_slug' => 'label',
'tab_slug' => 'advanced',
'mobile_options' => true,
),
'handle_style' => array(
'label' => esc_html__('Handle Style', 'addons-for-divi'),
'description' => esc_html__('Here you can select a different handle type.', 'addons-for-divi'),
'type' => 'select',
'default' => 'handle-1',
'options' => array(
'handle-1' => __('Style 1', 'addons-for-divi'),
'handle-2' => __('Style 2', 'addons-for-divi'),
),
'toggle_slug' => 'handle',
'tab_slug' => 'advanced',
),
'handle_color' => array(
'default' => '#ffffff',
'label' => esc_html__('Handle Color', 'addons-for-divi'),
'description' => esc_html__('Here you can define a custom handle color.', 'addons-for-divi'),
'type' => 'color-alpha',
'custom_color' => true,
'toggle_slug' => 'handle',
'tab_slug' => 'advanced',
),
'arrow_color' => array(
'default' => '#ffffff',
'label' => esc_html__('Arrow Color', 'addons-for-divi'),
'description' => esc_html__('Here you can define a custom color for the arrows.', 'addons-for-divi'),
'type' => 'color-alpha',
'custom_color' => true,
'toggle_slug' => 'handle',
'tab_slug' => 'advanced',
'show_if' => array(
'handle_style' => 'handle-2',
),
),
'__compare' => array(
'type' => 'computed',
'computed_callback' => array('DTQ_Image_Compare', 'get_image_compare'),
'computed_depends_on' => array(
'before_img',
'after_img',
'move_on_hover',
'offset_pct',
'orientation',
'overlay',
'show_label',
),
),
);
}
public function get_advanced_fields_config()
{
$advanced_fields = array();
$advanced_fields['text'] = array();
$advanced_fields['fonts']['label'] = array(
'label' => esc_html__('Label', 'addons-for-divi'),
'css' => array(
'main' => '%%order_class%% .twentytwenty-before-label:before, %%order_class%% .twentytwenty-after-label:before',
'important' => 'all',
),
'hide_text_align' => true,
'toggle_slug' => 'label',
);
$advanced_fields['borders']['label'] = array(
'toggle_slug' => 'label',
'css' => array(
'main' => array(
'border_radii' => '%%order_class%% .twentytwenty-overlay div:before',
'border_styles' => '%%order_class%% .twentytwenty-overlay div:before',
),
'important' => 'all',
),
'defaults' => array(
'border_radii' => 'on|4px|4px|4px|4px',
'border_styles' => array(
'width' => '0px',
'color' => '#333333',
'style' => 'solid',
),
),
);
$advanced_fields['borders']['main'] = array(
'toggle_slug' => 'border',
'css' => array(
'main' => array(
'border_radii' => '%%order_class%%',
'border_styles' => '%%order_class%%',
),
'important' => 'all',
),
'defaults' => array(
'border_radii' => 'on|0px|0px|0px|0px',
'border_styles' => array(
'width' => '0px',
'color' => '#333333',
'style' => 'solid',
),
),
);
return $advanced_fields;
}
static function get_image_compare($args = array())
{
wp_enqueue_script('divi-torque-lite-event-move');
wp_enqueue_script('divi-torque-lite-twentytwenty');
$defaults = array(
'before_img' => '',
'after_img' => '',
'before_label' => 'Before',
'after_label' => 'After',
'overlay' => '',
);
$args = wp_parse_args($args, $defaults);
$before_img = $args['before_img'];
$after_img = $args['after_img'];
$before_label = $args['before_label'];
$after_label = $args['after_label'];
$html = sprintf(
'
',
esc_url($before_img),
esc_url($after_img),
esc_attr($before_label),
esc_attr($after_label)
);
return $html;
}
public function render($attrs, $content, $render_slug)
{
$before_img = $this->props['before_img'];
$after_img = $this->props['after_img'];
$orientation = $this->props['orientation'];
$before_label = $this->props['before_label'];
$after_label = $this->props['after_label'];
$move_on_hover = $this->props['move_on_hover'];
$offset_pct = $this->props['offset_pct'];
$overlay = $this->props['overlay'];
$order_class = self::get_module_order_class($render_slug);
$order_number = str_replace('_', '', str_replace($this->slug, '', $order_class));
$this->apply_css($render_slug);
$data_string = sprintf(
'data-orientation = "%1$s"
data-moveonhover = "%2$s"
data-beforelabel = "%3$s"
data-afterlabel = "%4$s"
data-offsetpct = "%5$s"
data-ordernumber = "%6$s"
data-overlay = "%7$s"',
$orientation,
$move_on_hover,
$before_label,
$after_label,
$offset_pct,
$order_number,
$overlay
);
ob_start();
$images = self::get_image_compare(
array(
'before_img' => esc_url($before_img),
'after_img' => esc_url($after_img),
'before_label' => esc_attr($before_label),
'after_label' => esc_attr($after_label),
)
);
$html = sprintf(
'