control_groups['image'] = array( 'title' => esc_html__( 'Image', 'bricksable' ), 'tab' => 'content', ); $this->control_groups['label'] = array( 'title' => esc_html__( 'Labels', 'bricksable' ), 'tab' => 'content', ); $this->control_groups['control'] = array( 'title' => esc_html__( 'Control', 'bricksable' ), 'tab' => 'content', ); $this->control_groups['settings'] = array( 'title' => esc_html__( 'Settings', 'bricksable' ), 'tab' => 'content', ); unset( $this->control_groups['_typography'] ); } public function set_controls() { // Images. $this->controls['before_image'] = array( 'tab' => 'content', 'group' => 'image', 'type' => 'image', 'default' => array( 'full' => 'https://source.unsplash.com/random/800x400?moon', 'url' => 'https://source.unsplash.com/random/800x400?moon', ), ); $this->controls['before_image_filter'] = array( 'tab' => 'content', 'group' => 'image', 'label' => esc_html__( 'Before Image filters', 'bricksable' ), 'type' => 'filters', 'inline' => true, 'css' => array( array( 'property' => 'filter', 'selector' => '.ba-before-after-img-before', ), ), ); $this->controls['after_image'] = array( 'tab' => 'content', 'group' => 'image', 'type' => 'image', 'default' => array( 'full' => 'https://source.unsplash.com/random/800x400?earth', 'url' => 'https://source.unsplash.com/random/800x400?earth', ), ); $this->controls['after_image_filter'] = array( 'tab' => 'content', 'group' => 'image', 'label' => esc_html__( 'After Image filters', 'bricksable' ), 'type' => 'filters', 'inline' => true, 'css' => array( array( 'property' => 'filter', 'selector' => '.ba-before-after-img-after', ), ), ); // Labels. $this->controls['show_labels'] = array( 'tab' => 'content', 'group' => 'label', 'label' => esc_html__( 'Show Labels', 'bricksable' ), 'type' => 'checkbox', ); $this->controls['labels_onHover'] = array( 'tab' => 'content', 'group' => 'label', 'label' => esc_html__( 'Show Labels On Hover', 'bricksable' ), 'type' => 'checkbox', 'required' => array( 'show_labels', '=', true ), ); $this->controls['before_label'] = array( 'tab' => 'content', 'group' => 'label', 'label' => esc_html__( 'Before Label', 'bricksable' ), 'type' => 'text', 'inline' => true, 'default' => 'Before Label', 'hasDynamicData' => 'text', 'required' => array( 'show_labels', '=', true ), ); $this->controls['after_label'] = array( 'tab' => 'content', 'group' => 'label', 'label' => esc_html__( 'After Label', 'bricksable' ), 'type' => 'text', 'inline' => true, 'default' => 'After Label', 'hasDynamicData' => 'text', 'required' => array( 'show_labels', '=', true ), ); $this->controls['labels_alignment'] = array( 'tab' => 'content', 'group' => 'label', 'label' => esc_html__( 'Vertical align', 'bricksable' ), 'type' => 'select', 'options' => $this->control_options['alignItems'], 'css' => array( array( 'property' => 'align-items', 'selector' => '.ba-before-after-image-wrapper', ), array( 'property' => 'justify-content', 'selector' => '.ba-before-after-image-wrapper', ), ), 'inline' => true, 'default' => 'center', 'placeholder' => esc_html__( 'Center', 'bricksable' ), 'required' => array( 'show_labels', '=', true ), ); $this->controls['labels_typography'] = array( 'tab' => 'content', 'group' => 'label', 'label' => esc_html__( 'Labels Typography', 'bricksable' ), 'type' => 'typography', 'css' => array( array( 'property' => 'font', 'selector' => '.ba-before-after-image-label', ), ), 'inline' => true, 'small' => true, 'required' => array( 'show_labels', '=', true ), ); $this->controls['labels_background_color'] = array( 'tab' => 'content', 'group' => 'label', 'label' => esc_html__( 'Labels background color', 'bricksable' ), 'type' => 'color', 'inline' => true, 'default' => 'rgba(0,0,0,0.33)', 'css' => array( array( 'property' => 'background-color', 'selector' => '.ba-before-after-image-label', ), ), 'required' => array( 'show_labels', '=', true ), ); $this->controls['labels_border'] = array( 'tab' => 'content', 'group' => 'label', 'label' => esc_html__( 'Labels border', 'bricksable' ), 'type' => 'border', 'css' => array( array( 'property' => 'border', 'selector' => '.ba-before-after-image-label', ), ), 'inline' => true, 'small' => true, 'default' => array( 'radius' => array( 'top' => 3, 'right' => 3, 'bottom' => 3, 'left' => 3, ), ), 'required' => array( 'show_labels', '=', true ), ); $this->controls['labels_BoxShadow'] = array( 'tab' => 'content', 'group' => 'label', 'label' => esc_html__( 'Labels box shadow', 'bricksable' ), 'type' => 'box-shadow', 'css' => array( array( 'property' => 'box-shadow', 'selector' => '.ba-before-after-image-label', ), ), 'inline' => true, 'small' => true, 'required' => array( 'show_labels', '=', true ), ); $this->controls['labels_Padding'] = array( 'tab' => 'content', 'group' => 'label', 'label' => esc_html__( 'Padding', 'bricksable' ), 'type' => 'dimensions', 'css' => array( array( 'property' => 'padding', 'selector' => '.ba-before-after-image-label', ), ), 'required' => [ 'show_labels', '=', true ], ); // Controls. $this->controls['control_line_color'] = array( 'tab' => 'content', 'group' => 'control', 'label' => esc_html__( 'Control Line Color', 'bricksable' ), 'type' => 'color', 'inline' => true, 'default' => '#ffffff', 'css' => array( array( 'property' => 'background-color', 'selector' => '.ba-before-after-image-control-line', ), array( 'property' => 'border-color', 'selector' => '.ba-before-after-image-circle', ), ), ); $this->controls['control_arrow_color'] = array( 'tab' => 'content', 'group' => 'control', 'label' => esc_html__( 'Control Arrow Color', 'bricksable' ), 'type' => 'color', 'inline' => true, 'default' => '#ffffff', 'css' => array( array( 'property' => 'border-right-color', 'selector' => '.ba-before-after-image-arrow-wrapper .ba-before-after-image-arrow-left', ), array( 'property' => 'border-left-color', 'selector' => '.ba-before-after-image-arrow-wrapper .ba-before-after-image-arrow-right', ), ), ); $this->controls['add_circle'] = array( 'tab' => 'content', 'group' => 'control', 'label' => esc_html__( 'Add Circle', 'bricksable' ), 'type' => 'checkbox', 'description' => esc_html__( 'Add Circle type to the control handler.', 'bricksable' ), 'default' => true, ); $this->controls['control_circle_background_color'] = array( 'tab' => 'content', 'group' => 'control', 'label' => esc_html__( 'Control Circle Background Color', 'bricksable' ), 'type' => 'color', 'inline' => true, 'css' => array( array( 'property' => 'background-color', 'selector' => '.ba-before-after-image-circle', ), ), 'required' => array( 'add_circle', '=', true ), ); $this->controls['control_circle_size'] = array( 'tab' => 'content', 'group' => 'control', 'label' => esc_html__( 'Circle Size', 'bricksable' ), 'type' => 'slider', 'units' => array( 'px' => array( 'min' => 1, 'max' => 100, 'step' => 1, ), ), 'css' => array( array( 'property' => 'width', 'selector' => '.ba-before-after-image-circle', ), array( 'property' => 'height', 'selector' => '.ba-before-after-image-circle', ), ), 'default' => '50px', 'required' => array( 'add_circle', '=', true ), ); $this->controls['control_circle_radius'] = array( 'tab' => 'content', 'group' => 'control', 'label' => esc_html__( 'Circle Radius', 'bricksable' ), 'type' => 'slider', 'units' => array( 'px' => array( 'min' => 1, 'max' => 50, 'step' => 1, ), ), 'css' => array( array( 'property' => 'border-radius', 'selector' => '.ba-before-after-image-circle', ), ), 'default' => '50px', 'required' => array( 'add_circle', '=', true ), ); $this->controls['control_handler_width'] = array( 'tab' => 'content', 'group' => 'control', 'label' => esc_html__( 'Handler width', 'bricksable' ), 'type' => 'slider', 'units' => array( 'px' => array( 'min' => 1, 'max' => 20, 'step' => 1, ), ), 'css' => array( array( 'property' => 'width', 'selector' => '.ba-before-after-image-horizontal .ba-before-after-image-control-line', ), array( 'property' => 'height', 'selector' => '.ba-before-after-image-vertical .ba-before-after-image-control-line', ), array( 'property' => 'border-width', 'selector' => '.ba-before-after-image-circle', ), ), 'default' => '2px', ); // Settings. $this->controls['vertical_mode'] = array( 'tab' => 'content', 'group' => 'settings', 'label' => esc_html__( 'Vertical Mode', 'bricksable' ), 'type' => 'checkbox', ); $this->controls['slider_move_type'] = array( 'tab' => 'content', 'group' => 'settings', 'label' => esc_html__( 'Slider Move Type', 'bricksable' ), 'type' => 'select', 'options' => array( 'mouse_click' => esc_html__( 'Move on Click', 'bricksable' ), 'mouse_hover' => esc_html__( 'Move on Hover', 'bricksable' ), ), 'inline' => true, 'clearable' => false, 'pasteStyles' => false, 'default' => 'mouse_click', ); $this->controls['starting_point'] = array( 'tab' => 'content', 'group' => 'settings', 'label' => esc_html__( 'Starting point', 'bricksable' ), 'type' => 'number', 'min' => 0, 'max' => 100, 'step' => '10', 'default' => 50, 'inline' => true, 'description' => esc_html__( 'The percentage to show of the before image.', 'bricksable' ), ); } public function enqueue_scripts() { if ( '' === get_option( 'bricksable_combine_minify_js' ) || false === get_option( 'bricksable_combine_minify_js' ) ) { wp_enqueue_script( 'ba-before-after-image' ); wp_localize_script( 'ba-before-after-image', 'bricksableBeforeAfterImageData', array( 'BeforeAfterImageInstances' => array(), ) ); } } public function get_before_image_settings( $settings ) { if ( ! isset( $settings['before_image'] ) ) { $settings['before_image'] = array( 'id' => 0, 'url' => '', ); return $settings; } $image = $settings['before_image']; if ( isset( $image['useDynamicData']['name'] ) ) { $images = $this->render_dynamic_data_tag( $image['useDynamicData']['name'] ); $image['id'] = empty( $images ) ? 0 : $images[0]; } else { $image['id'] = isset( $image['id'] ) ? $image['id'] : 0; } // Image Size. $image['size'] = isset( $image['size'] ) ? $settings['image']['size'] : BRICKS_DEFAULT_IMAGE_SIZE; // Image URL. if ( ! isset( $image['url'] ) ) { $image['url'] = wp_get_attachment_image_url( $image['id'], $image['size'] ); } $settings['before_image'] = $image; return $settings; } public function get_after_image_settings( $settings ) { if ( ! isset( $settings['after_image'] ) ) { $settings['after_image'] = array( 'id' => 1, 'url' => '', ); return $settings; } $image = $settings['after_image']; if ( isset( $image['useDynamicData']['name'] ) ) { $images = $this->render_dynamic_data_tag( $image['useDynamicData']['name'] ); $image['id'] = empty( $images ) ? 0 : $images[0]; } else { $image['id'] = isset( $image['id'] ) ? $image['id'] : 0; } // Image Size. $image['size'] = isset( $image['size'] ) ? $settings['image']['size'] : BRICKS_DEFAULT_IMAGE_SIZE; // Image URL. if ( ! isset( $image['url'] ) ) { $image['url'] = wp_get_attachment_image_url( $image['id'], $image['size'] ); } $settings['after_image'] = $image; return $settings; } public function render() { $settings = $this->settings; $before_settings = $this->get_before_image_settings( $settings ); $after_settings = $this->get_after_image_settings( $settings ); $labels_on_hover = isset( $settings['labels_onHover'] ) ? true : false; $image_wrapper_classes = array( 'ba-before-after-image-wrapper' ); $image_wrapper_classes[] = true === $labels_on_hover ? 'ba-before-after-image-label-on-hover' : ''; $image_before_atts = array(); $image_before_atts['id'] = isset( $image_before_atts['id'] ) ? 'image-' . $settings['before_image']['id'] : ''; $image_after_atts = array(); $image_after_atts['id'] = isset( $image_after_atts['id'] ) ? 'image-' . $settings['after_image']['id'] : ''; $before_after_image_options = array( 'addCircle' => isset( $settings['add_circle'] ) ? true : false, 'verticalMode' => isset( $settings['vertical_mode'] ) ? true : false, 'onHover' => $labels_on_hover, 'hoverStart' => 'mouse_hover' === $settings['slider_move_type'] ? true : false, 'startingPoint' => isset( $settings['starting_point'] ) ? intval( $settings['starting_point'] ) : 50, ); $this->set_attribute( 'image-wrapper', 'class', $image_wrapper_classes ); $this->set_attribute( 'image-wrapper', 'id', esc_attr( 'ba-before-after-image-' . $this->id ) ); $this->set_attribute( 'image-wrapper', 'data-ba-bricks-before-after-image-options', wp_json_encode( $before_after_image_options ) ); echo '