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( '%3$s %4$s', 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( '
%1$s
', $images, $data_string ); ob_get_clean(); if (!empty($before_img)) { return $html; } } public function apply_css($render_slug) { $before_label_bg = $this->props['before_label_bg']; $after_label_bg = $this->props['after_label_bg']; $show_label = $this->props['show_label']; $handle_color = $this->props['handle_color']; $label_height = $this->props['label_height']; $label_width = $this->props['label_width']; // handle_color. if ('handle-1' === $this->props['handle_style']) { $arrow_color = $this->props['handle_color']; } elseif ('handle-2' === $this->props['handle_style']) { $arrow_color = $this->props['arrow_color']; ET_Builder_Element::set_style( $render_slug, array( 'selector' => '%%order_class%% .dtq-image-compare .twentytwenty-handle', 'declaration' => 'background-color:' . $handle_color . ';', ) ); } ET_Builder_Element::set_style( $render_slug, array( 'selector' => '%%order_class%% .dtq-image-compare .twentytwenty-horizontal .twentytwenty-handle:before, %%order_class%% .dtq-image-compare .twentytwenty-horizontal .twentytwenty-handle:after, %%order_class%% .dtq-image-compare .twentytwenty-vertical .twentytwenty-handle:before, %%order_class%% .dtq-image-compare .twentytwenty-vertical .twentytwenty-handle:after', 'declaration' => 'background:' . $handle_color . ';', ) ); ET_Builder_Element::set_style( $render_slug, array( 'selector' => '%%order_class%% .dtq-image-compare .twentytwenty-handle', 'declaration' => 'border: 3px solid ' . $handle_color . ';', ) ); ET_Builder_Element::set_style( $render_slug, array( 'selector' => '%%order_class%% .dtq-image-compare .twentytwenty-right-arrow', 'declaration' => 'border-left: 6px solid ' . $arrow_color . ';', ) ); ET_Builder_Element::set_style( $render_slug, array( 'selector' => '%%order_class%% .dtq-image-compare .twentytwenty-left-arrow', 'declaration' => 'border-right: 6px solid ' . $arrow_color . ';', ) ); ET_Builder_Element::set_style( $render_slug, array( 'selector' => '%%order_class%% .dtq-image-compare .twentytwenty-up-arrow', 'declaration' => 'border-bottom: 6px solid ' . $arrow_color . ';', ) ); ET_Builder_Element::set_style( $render_slug, array( 'selector' => '%%order_class%% .dtq-image-compare .twentytwenty-down-arrow', 'declaration' => 'border-top: 6px solid ' . $arrow_color . ';', ) ); // handle_color end. // Label. if ('initial' !== $label_height) { $this->get_responsive_styles( 'label_height', '%%order_class%% .twentytwenty-overlay div:before', array('primary' => 'height'), array('default' => 'initial'), $render_slug ); } if ('initial' !== $label_width) { $this->get_responsive_styles( 'label_width', '%%order_class%% .twentytwenty-overlay div:before', array('primary' => 'width'), array('default' => 'initial'), $render_slug ); } $this->get_responsive_styles( 'label_padding', '%%order_class%% .twentytwenty-overlay div:before', array('primary' => 'padding'), array('default' => '5px|20px|5px|20px'), $render_slug ); if ($show_label === 'on_hover') { ET_Builder_Element::set_style( $render_slug, array( 'selector' => '%%order_class%% .twentytwenty-before-label, %%order_class%% .twentytwenty-after-label', 'declaration' => 'opacity:0;', ) ); ET_Builder_Element::set_style( $render_slug, array( 'selector' => '%%order_class%%:hover .twentytwenty-before-label, %%order_class%%:hover .twentytwenty-after-label', 'declaration' => 'opacity:1;', ) ); } if (!empty($before_label_bg)) { ET_Builder_Element::set_style( $render_slug, array( 'selector' => '%%order_class%% .twentytwenty-before-label:before', 'declaration' => sprintf('background-color: %1$s!important;', $before_label_bg), ) ); } if (!empty($after_label_bg)) { ET_Builder_Element::set_style( $render_slug, array( 'selector' => '%%order_class%% .twentytwenty-after-label:before', 'declaration' => sprintf('background-color: %1$s!important;', esc_html($after_label_bg)), ) ); } } } new DTQ_Image_Compare();