trAvis - MANAGER
Edit File: plus-column-width.php
<?php use Elementor\Controls_Manager; use Elementor\Widget_Base; use Elementor\Utils; use Elementor\Group_Control_Typography; use Elementor\Group_Control_Box_Shadow; use Elementor\Group_Control_Border; use Elementor\Group_Control_Background; if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly class Theplus_Column_Responsive extends Elementor\Widget_Base { public function __construct() { parent::__construct(); $this->init(); } public function get_name() { return 'plus-column-responsive'; } public function tp_register_controls( $element, $section_id ) { $plus_extras=theplus_get_option('general','extras_elements'); if($element->get_name() == 'column') { $element->start_controls_section( 'plus_column_responsive_section', [ 'label' => esc_html__( 'Plus Extras', 'theplus' ), 'tab' => \Elementor\Controls_Manager::TAB_ADVANCED, ] ); if((isset($plus_extras) && empty($plus_extras)) || (!empty($plus_extras) && in_array('column_mouse_cursor',$plus_extras))){ $element->add_control( 'plus_column_cursor_point', [ 'label' => esc_html__( 'Mouse Cursor Pointer', 'theplus' ), 'type' => \Elementor\Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'theplus' ), 'label_off' => esc_html__( 'No', 'theplus' ), 'default' => 'no', ] ); $element->add_control( 'plus_pointer_style', [ 'label' => esc_html__( 'Mouse Cursor Style', 'theplus' ), 'type' => Controls_Manager::SELECT, 'default' => 'cursor-icon', 'options' => [ 'cursor-icon' => esc_html__( 'Cursor Icon', 'theplus' ), 'follow-image' => esc_html__( 'Follow Image', 'theplus' ), 'follow-text' => esc_html__( 'Follow Text', 'theplus' ), ], 'condition' => [ 'plus_column_cursor_point' => 'yes', ], ] ); $element->add_control( 'plus_pointer_icon', [ 'label' => esc_html__( 'Cursor Icon', 'theplus' ), 'type' => Controls_Manager::MEDIA, 'default' => [ 'url' => '', ], 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_pointer_style' => ['cursor-icon','follow-image'], ], ] ); $element->add_control( 'plus_pointer_iconwidth', [ 'label' => esc_html__( 'Icon Max Width', 'theplus' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 500, 'step' => 1, ], ], 'default' => [ 'unit' => 'px', 'size' => 100, ], 'selectors' => [ '{{WRAPPER}}.plus_column_{{ID}} .plus-cursor-pointer-follow' => 'max-width: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_pointer_style' => ['follow-image'], ], ] ); $element->add_control( 'plus_pointer_text', [ 'label' => esc_html__( 'Follow Text', 'theplus' ), 'type' => \Elementor\Controls_Manager::TEXT, 'default' => esc_html__( 'Follow Text', 'theplus' ), 'placeholder' => esc_html__( 'Follow Text', 'theplus' ), 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_pointer_style' => 'follow-text', ], ] ); $element->add_control( 'plus_pointer_left_offset', [ 'label' => esc_html__( 'Cursor Left Offset', 'theplus' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => -500, 'max' => 500, 'step' => 1, ], ], 'default' => [ 'unit' => 'px', 'size' => 10, ], 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_pointer_style' => ['follow-text','follow-image'], ], ] ); $element->add_control( 'plus_pointer_top_offset', [ 'label' => esc_html__( 'Cursor Top Offset', 'theplus' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => -500, 'max' => 500, 'step' => 1, ], ], 'default' => [ 'unit' => 'px', 'size' => 10, ], 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_pointer_style' => ['follow-text','follow-image'], ], ] ); $element->add_control( 'plus_column_click_cursor', [ 'label' => esc_html__( 'Mouse Cursor Click', 'theplus' ), 'type' => \Elementor\Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'theplus' ), 'label_off' => esc_html__( 'No', 'theplus' ), 'default' => 'no', 'condition' => [ 'plus_column_cursor_point' => 'yes', ], ] ); $element->add_control( 'plus_pointer_click_icon', [ 'label' => esc_html__( 'Cursor Click Icon', 'theplus' ), 'type' => Controls_Manager::MEDIA, 'default' => [ 'url' => '', ], 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_column_click_cursor' => 'yes', 'plus_pointer_style' => ['cursor-icon','follow-image'], ], ] ); $element->add_control( 'plus_pointer_click_text', [ 'label' => esc_html__( 'Click Follow Text', 'theplus' ), 'type' => \Elementor\Controls_Manager::TEXT, 'default' => esc_html__( 'See More', 'theplus' ), 'placeholder' => esc_html__( 'See More', 'theplus' ), 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_column_click_cursor' => 'yes', 'plus_pointer_style' => 'follow-text', ], ] ); $element->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'pointer_typography', 'selector' => '{{WRAPPER}}.plus_column_{{ID}} .plus-cursor-pointer-follow-text', 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_pointer_style' => 'follow-text', ], 'separator' => 'before', ] ); $element->add_control( 'pointer_text_color', [ 'label' => esc_html__( 'Text Color', 'theplus' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ '{{WRAPPER}}.plus_column_{{ID}} .plus-cursor-pointer-follow-text' => 'color: {{VALUE}}', ], 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_pointer_style' => 'follow-text', ], ] ); $element->add_responsive_control( 'pointer_padding', [ 'label' => esc_html__( 'Text Padding', 'theplus' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', 'em' ], 'default' =>[ 'top' => '10', 'right' => '15', 'bottom' => '10', 'left' => '15', ], 'selectors' => [ '{{WRAPPER}}.plus_column_{{ID}} .plus-cursor-pointer-follow-text' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_pointer_style' => 'follow-text', ], ] ); $element->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'pointer_border', 'label' => esc_html__( 'Border', 'theplus' ), 'selector' => '{{WRAPPER}}.plus_column_{{ID}} .plus-cursor-pointer-follow-text', 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_pointer_style' => 'follow-text', ], ] ); $element->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'pointer_background', 'label' => esc_html__( 'Background', 'theplus' ), 'types' => [ 'classic', 'gradient' ], 'selector' => '{{WRAPPER}}.plus_column_{{ID}} .plus-cursor-pointer-follow-text', 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_pointer_style' => 'follow-text', ], ] ); $element->add_control( 'pointer_border_radius', [ 'label' => esc_html__( 'Border Radius', 'theplus' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', '%', 'em' ], 'selectors' => [ '{{WRAPPER}}.plus_column_{{ID}} .plus-cursor-pointer-follow-text' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_pointer_style' => 'follow-text', ], ] ); $element->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'pointer_box_shadow', 'label' => esc_html__( 'Text Box Shadow', 'theplus' ), 'selector' => '{{WRAPPER}}.plus_column_{{ID}} .plus-cursor-pointer-follow-text', 'condition' => [ 'plus_column_cursor_point' => 'yes', 'plus_pointer_style' => 'follow-text', ], ] ); } if((isset($plus_extras) && empty($plus_extras)) || (!empty($plus_extras) && in_array('column_sticky',$plus_extras))){ $element->add_control( 'plus_column_sticky', [ 'label' => esc_html__( 'Sticky Column', 'theplus' ), 'type' => \Elementor\Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'theplus' ), 'label_off' => esc_html__( 'No', 'theplus' ), 'return_value' => 'true', 'default' => 'false', 'separator' => 'before', ] ); $element->add_control( 'plus_sticky_top_spacing', [ 'label' => esc_html__( 'Top Spacing', 'theplus' ), 'type' => \Elementor\Controls_Manager::NUMBER, 'default' => 40, 'min' => 0, 'max' => 500, 'step' => 1, 'condition' => [ 'plus_column_sticky' => 'true', ], ] ); $element->add_control( 'plus_sticky_bottom_spacing', [ 'label' => esc_html__( 'Bottom Spacing', 'theplus' ), 'type' => \Elementor\Controls_Manager::NUMBER, 'default' => 40, 'min' => 0, 'max' => 500, 'step' => 1, 'condition' => [ 'plus_column_sticky' => 'true', ], ] ); $element->add_control( 'plus_sticky_enable_desktop', [ 'label' => esc_html__( 'Sticky Desktop', 'theplus' ), 'type' => \Elementor\Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Enable', 'theplus' ), 'label_off' => esc_html__( 'Disable', 'theplus' ), 'default' => 'yes', 'condition' => [ 'plus_column_sticky' => 'true', ], ] ); $element->add_control( 'plus_sticky_enable_tablet', [ 'label' => esc_html__( 'Sticky Tablet', 'theplus' ), 'type' => \Elementor\Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Enable', 'theplus' ), 'label_off' => esc_html__( 'Disable', 'theplus' ), 'default' => 'yes', 'condition' => [ 'plus_column_sticky' => 'true', ], ] ); $element->add_control( 'plus_sticky_enable_mobile', [ 'label' => esc_html__( 'Sticky Mobile', 'theplus' ), 'type' => \Elementor\Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Enable', 'theplus' ), 'label_off' => esc_html__( 'Disable', 'theplus' ), 'default' => 'no', 'condition' => [ 'plus_column_sticky' => 'true', ], ] ); } if((isset($plus_extras) && empty($plus_extras)) || (!empty($plus_extras) && in_array('order_sort_column',$plus_extras))){ $element->add_responsive_control( 'plus_column_width', [ 'label' => esc_html__( 'Column Width', 'theplus' ), 'type' => \Elementor\Controls_Manager::TEXT, 'label_block' => true, 'description' => 'E.g. 300px, 40%, calc(100%-400px)', 'selectors' => [ '{{WRAPPER}}' => 'width: {{VALUE}} !important;', ], 'separator' => 'before', ] ); $element->add_responsive_control( 'plus_column_order', [ 'label' => esc_html__( 'Column Order', 'theplus' ), 'type' => \Elementor\Controls_Manager::NUMBER, 'min' => 0, 'max' => 20, 'step' => 1, 'default' => '', 'separator' => 'before', 'description' => 'E.g. 0,1,2,3,etc.', 'selectors' => [ '{{WRAPPER}}' => 'order: {{VALUE}}', ], ] ); } if((isset($plus_extras) && empty($plus_extras)) || (!empty($plus_extras) && in_array('custom_width_column',$plus_extras))){ $element->add_control( 'plus_responsive_column_heading', [ 'label' => esc_html__( 'Responsive Options for Breakpoints', 'theplus' ), 'type' => \Elementor\Controls_Manager::HEADING, 'separator' => 'before', ] ); $repeater = new \Elementor\Repeater(); $repeater->add_control( 'plus_media_max_width', [ 'label' => esc_html__( '@Media Max-Width Value', 'theplus' ), 'type' => \Elementor\Controls_Manager::SWITCHER, 'default' => 'no', 'label_on' => 'Yes', 'label_off' => 'No', 'return_value' => 'yes', ] ); $repeater->add_control( 'media_max_width', [ 'label' => esc_html__( 'Select Max-Width Value(px)', 'theplus' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 3000, 'step' => 1, ], ], 'default' => [ 'unit' => 'px', 'size' => 0, ], 'condition' => [ 'plus_media_max_width' => 'yes', ], ] ); $repeater->add_control( 'plus_media_min_width', [ 'label' => esc_html__( '@Media Min-Width Value', 'theplus' ), 'type' => \Elementor\Controls_Manager::SWITCHER, 'default' => 'no', 'label_on' => 'Yes', 'label_off' => 'No', 'return_value' => 'yes', ] ); $repeater->add_control( 'media_min_width', [ 'label' => esc_html__( 'Select Min-Width Value(px)', 'theplus' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => 0, 'max' => 3000, 'step' => 1, ], ], 'default' => [ 'unit' => 'px', 'size' => 0, ], 'condition' => [ 'plus_media_min_width' => 'yes', ], ] ); $repeater->add_control( 'plus_column_width', [ 'label' => esc_html__( 'Column Width', 'theplus' ), 'type' => \Elementor\Controls_Manager::TEXT, 'label_block' => true, 'description' => 'E.g. 300px, 40%, calc(100%-400px)', 'separator' => 'before', ] ); $repeater->add_responsive_control( 'plus_column_margin', [ 'label' => esc_html__( 'Margin', 'theplus' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', 'em' ], 'selectors' => [ '{{WRAPPER}} .your-class' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $repeater->add_responsive_control( 'plus_column_padding', [ 'label' => esc_html__( 'Padding', 'theplus' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => [ 'px', 'em' ], 'selectors' => [ '{{WRAPPER}} .your-class' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $repeater->add_control( 'plus_column_hide', [ 'label' => esc_html__( 'Column Visibility', 'theplus' ), 'type' => \Elementor\Controls_Manager::SWITCHER, 'default' => '', 'label_on' => 'Hide', 'label_off' => 'Show', 'return_value' => 'yes', 'separator' => 'before', ] ); $repeater->add_control( 'plus_column_order', [ 'label' => esc_html__( 'Column Order', 'theplus' ), 'type' => \Elementor\Controls_Manager::NUMBER, 'min' => 0, 'max' => 20, 'step' => 1, 'default' => '', 'separator' => 'before', 'description' => 'E.g. 0,1,2,3,etc.', ] ); $element->add_control( 'plus_column_responsive_list', [ 'type' => \Elementor\Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'title_field' => 'Min: {{{plus_media_min_width}}} - Max: {{{plus_media_min_width}}}', ] ); } if((isset($plus_extras) && empty($plus_extras)) || (!empty($plus_extras) && in_array('column_custom_css',$plus_extras))){ $element->add_control( 'plus_custom_css', [ 'label' => esc_html__( 'Custom CSS', 'theplus' ), 'type' => \Elementor\Controls_Manager::CODE, 'language' => 'css', 'render_type' => 'ui', 'separator' => 'none', 'rows' => 20, 'separator' => 'before', ] ); } $element->end_controls_section(); } } public function section_register_controls( $element, $section_id ) { $plus_extras=theplus_get_option('general','extras_elements'); if($element->get_name() == 'section') { $element->start_controls_section( 'plus_section_responsive_section', [ 'label' => esc_html__( 'Plus Extras', 'theplus' ), 'tab' => Controls_Manager::TAB_ADVANCED, ] ); if((isset($plus_extras) && empty($plus_extras)) || (!empty($plus_extras) && in_array('section_scroll_animation',$plus_extras))){ $element->add_control( 'plus_section_scroll_animation_in', [ 'label' => esc_html__( 'In/Entrance Animation', 'theplus' ), 'type' => Controls_Manager::SELECT, 'default' => 'none', 'options' => [ 'none' => esc_html__( 'None', 'theplus' ), 'scale-smaller' => esc_html__( 'Scale smaller', 'theplus' ), 'fade' => esc_html__( 'Fade in', 'theplus' ), 'rotate-back' => esc_html__( '3D Rotate backward', 'theplus' ), 'rotate-forward' => esc_html__( '3D Rotate forward', 'theplus' ), 'carousel' => esc_html__( 'Carousel forward', 'theplus' ), 'fly-up' => esc_html__( 'Fly up', 'theplus' ), 'fly-left' => esc_html__( 'Fly left', 'theplus' ), 'fly-right' => esc_html__( 'Fly right', 'theplus' ), 'cube' => esc_html__( '3D cube (use 3D cube entrance animation on the next row to make this look good)', 'theplus' ), ], ] ); $element->add_control( 'plus_section_scroll_animation_out', [ 'label' => esc_html__( 'Exit Animation', 'theplus' ), 'type' => Controls_Manager::SELECT, 'default' => 'none', 'options' => [ 'none' => esc_html__( 'None', 'theplus' ), 'scale-smaller' => esc_html__( 'Scale smaller', 'theplus' ), 'fade' => esc_html__( 'Fade out', 'theplus' ), 'rotate-back' => esc_html__( '3D Rotate backward', 'theplus' ), 'rotate-forward' => esc_html__( '3D Rotate forward', 'theplus' ), 'carousel' => esc_html__( 'Carousel forward', 'theplus' ), 'fly-up' => esc_html__( 'Fly up', 'theplus' ), 'fly-left' => esc_html__( 'Fly left', 'theplus' ), 'fly-right' => esc_html__( 'Fly right', 'theplus' ), 'cube' => esc_html__( '3D cube (use 3D cube entrance animation on the next row to make this look good)', 'theplus' ), ], ] ); $element->add_control( 'plus_section_scroll_in_delay', [ 'label' => esc_html__( 'Entrance Delay', 'theplus' ), 'type' => Controls_Manager::NUMBER, 'min' => -20, 'max' => 20, 'step' => 1, 'default' => '', 'description' => esc_html__( 'Add any value from -20 to 20. Tip: Positive numbers lengthen the entrance animation duration, and negative numbers shorten it.','theplus' ), 'condition' => [ 'plus_section_scroll_animation_in' => ['fly-up','fly-left','fly-right','scale-smaller','fade','rotate-forward','rotate-back'], ], ] ); $element->add_control( 'plus_section_scroll_out_delay', [ 'label' => esc_html__( 'Exit Delay', 'theplus' ), 'type' => Controls_Manager::NUMBER, 'min' => -20, 'max' => 20, 'step' => 1, 'default' => '', 'description' => esc_html__( 'The exit animation triggers when your container reaches more than 1/3th of the screen from the top (some effects are different, some are unchangeable). Add any value from -20 to 20.(Tip: Positive numbers lengthen the entrance animation duration, and negative numbers shorten it.)','theplus' ), 'condition' => [ 'plus_section_scroll_animation_out' => ['fly-up','fly-left','fly-right','scale-smaller','fade','rotate-forward','rotate-back'], ], ] ); $element->add_control( 'plus_section_scroll_overflow', [ 'label' => esc_html__( 'Fix Body Overflow', 'theplus' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'theplus' ), 'label_off' => esc_html__( 'No', 'theplus' ), 'return_value' => 'yes', 'default' => 'no', 'description' => esc_html__('Check this if you see an unwanted scrollbar that shows up for a very short time while scrolling with some effects & some themes.', 'theplus' ), ] ); $element->add_control( 'plus_section_scroll_mobile_disable', [ 'label' => esc_html__( 'Mobile Disable/Off', 'theplus' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'theplus' ), 'label_off' => esc_html__( 'No', 'theplus' ), 'return_value' => 'yes', 'default' => 'no', 'description' => esc_html__('Note : If you disable this option, It will be disabled for all sections of page.', 'theplus' ), ] ); } if(isset($plus_extras) && (empty($plus_extras) || (!empty($plus_extras) && in_array('section_custom_css',$plus_extras)))){ $element->add_control( 'plus_section_overflow_hidden', [ 'label' => esc_html__( 'Section Overflow Hidden', 'theplus' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'theplus' ), 'label_off' => esc_html__( 'No', 'theplus' ), 'return_value' => 'yes', 'default' => 'no', 'description' => esc_html__('If, Check Yes section scrollbar Overflow Hidden.', 'theplus' ), 'separator' => 'before', ] ); $element->add_control( 'plus_custom_css', [ 'label' => esc_html__( 'Custom CSS', 'theplus' ), 'type' => \Elementor\Controls_Manager::CODE, 'language' => 'css', 'render_type' => 'ui', 'separator' => 'none', 'rows' => 20, 'separator' => 'before', ] ); } $element->end_controls_section(); } } public function before_render_element($element) { $settings = $element->get_settings(); $column_wrapper_id= $element->get_id(); $post_id = get_the_ID(); $data = $element->get_data(); $type = isset( $data['elType'] ) ? $data['elType'] : 'column'; //$settings = $data['settings']; $plus_extras=theplus_get_option('general','extras_elements'); if ( 'column' !== $type ) { return; } if((isset($plus_extras) && empty($plus_extras)) || (!empty($plus_extras) && in_array('column_mouse_cursor',$plus_extras))){ if ( isset( $settings['plus_column_cursor_point'] ) && $settings['plus_column_cursor_point']=='yes') { $cursor_pointer = array(); $cursor_pointer['style'] = (!empty($settings['plus_pointer_style'])) ? $settings['plus_pointer_style'] : ''; if(!empty($settings['plus_pointer_style']) && ($settings['plus_pointer_style'] =='cursor-icon' || $settings['plus_pointer_style'] =='follow-image' ) ){ $cursor_pointer['cursor_icon'] = (!empty($settings['plus_pointer_icon']['url'])) ? $settings['plus_pointer_icon']['url'] : ''; if( !empty($settings['plus_column_click_cursor']) && $settings['plus_column_click_cursor'] == 'yes' && !empty($settings['plus_pointer_click_icon']['url']) ){ $cursor_pointer['cursor_see_more'] = 'yes'; $cursor_pointer['cursor_see_icon'] = (!empty($settings['plus_pointer_click_icon']['url'])) ? $settings['plus_pointer_click_icon']['url'] : ''; $cursor_pointer['cursor_adjust_left'] = (!empty($settings["plus_pointer_left_offset"]["size"])) ? $settings["plus_pointer_left_offset"]["size"] : 0; $cursor_pointer['cursor_adjust_top'] = (!empty($settings["plus_pointer_top_offset"]["size"])) ? $settings["plus_pointer_top_offset"]["size"] : 0; } }else if(!empty($settings['plus_pointer_style']) && $settings['plus_pointer_style'] =='follow-text'){ $cursor_pointer['cursor_text'] = (!empty($settings['plus_pointer_text'])) ? $settings['plus_pointer_text'] : ''; if( !empty($settings['plus_column_click_cursor']) && $settings['plus_column_click_cursor'] == 'yes' && !empty($settings['plus_pointer_click_text']) ){ $cursor_pointer['cursor_see_more'] = 'yes'; $cursor_pointer['cursor_see_text'] = (!empty($settings['plus_pointer_click_text'])) ? $settings['plus_pointer_click_text'] : ''; $cursor_pointer['cursor_adjust_left'] = (!empty($settings["plus_pointer_left_offset"]["size"])) ? $settings["plus_pointer_left_offset"]["size"] : 0; $cursor_pointer['cursor_adjust_top'] = (!empty($settings["plus_pointer_top_offset"]["size"])) ? $settings["plus_pointer_top_offset"]["size"] : 0; } } if(!empty($settings['plus_pointer_style'])){ $element->add_render_attribute( '_wrapper', [ 'class' => 'plus_cursor_pointer plus_column_'.$element->get_id().' plus-'.$settings['plus_pointer_style'], 'data-plus-cursor-settings' => json_encode( $cursor_pointer ), ] ); } } } if((isset($plus_extras) && empty($plus_extras)) || (!empty($plus_extras) && in_array('column_sticky',$plus_extras))){ if ( isset( $settings['plus_column_sticky'] ) && $settings['plus_column_sticky']=='true') { $array_enable=array(); if(isset($settings['plus_sticky_enable_desktop']) && $settings['plus_sticky_enable_desktop']=='yes'){ $array_enable[]= 'desktop'; } if(isset($settings['plus_sticky_enable_tablet']) && $settings['plus_sticky_enable_tablet']=='yes'){ $array_enable[]= 'tablet'; } if(isset($settings['plus_sticky_enable_mobile']) && $settings['plus_sticky_enable_mobile']=='yes'){ $array_enable[]= 'mobile'; } $column_settings = array( 'id' => $data['id'], 'sticky' => filter_var( $settings['plus_column_sticky'], FILTER_VALIDATE_BOOLEAN ), 'topSpacing' => isset( $settings['plus_sticky_top_spacing'] ) ? $settings['plus_sticky_top_spacing'] : 40, 'bottomSpacing' => isset( $settings['plus_sticky_bottom_spacing'] ) ? $settings['plus_sticky_bottom_spacing'] : 40, 'stickyOn' => !empty( $array_enable ) ? $array_enable : array( 'desktop', 'tablet' ), ); if ( filter_var( $settings['plus_column_sticky'], FILTER_VALIDATE_BOOLEAN ) ) { $element->add_render_attribute( '_wrapper', array( 'class' => 'plus-sticky-column-sticky', 'data-plus-sticky-column-settings' => json_encode( $column_settings ), ) ); } $this->columns_data[ $data['id'] ] = $column_settings; } } if((isset($plus_extras) && empty($plus_extras)) || (!empty($plus_extras) && in_array('custom_width_column',$plus_extras))){ if ( array_key_exists( 'plus_column_responsive_list',$settings ) ) { $list = $settings['plus_column_responsive_list']; if( !empty($list[0]['media_max_width']['size']) || !empty($list[0]['media_min_width']['size']) ) { $media_query = '@media '; $index = 0; $style=$max_width=$min_width=$betwn_and=''; foreach ($list as $item) { $index++; $max_width=$min_width=$betwn_and=''; if(!empty($item['media_max_width']['size']) && !empty($item["plus_media_max_width"]) && $item["plus_media_max_width"]=='yes') { $max_width = '(max-width: '.$item['media_max_width']['size'].$item['media_max_width']['unit'].') '; } if(!empty($item['media_min_width']['size']) && !empty($item["plus_media_min_width"]) && $item["plus_media_min_width"]=='yes') { $min_width = ' (min-width: '.$item['media_min_width']['size'].$item['media_min_width']['unit'].') '; } if(!empty($item['media_max_width']['size']) && !empty($item['media_min_width']['size']) && $item["plus_media_max_width"]=='yes' && $item["plus_media_min_width"]=='yes'){ $betwn_and =' and '; } $style .= $media_query . $max_width . $betwn_and . $min_width .'{'; $style .= '.elementor-element.elementor-column.elementor-element-'.$column_wrapper_id.'{'; if(!empty($item['plus_column_width'])){ $style .= 'width : '. $item['plus_column_width'].' !important;'; } if(!empty($item['plus_column_hide'])){ $style .= 'display : none;'; } if(!empty($item['plus_column_order'])){ $style .= 'order : '.$item['plus_column_order'].';'; } $style .= '}'; $style .= '.elementor-element.elementor-column.elementor-element-'.$column_wrapper_id.' > .elementor-column{'; if(!empty($item['plus_column_margin']["top"]) || !empty($item['plus_column_margin']["right"]) || !empty($item['plus_column_margin']["bottom"]) || !empty($item['plus_column_margin']["left"])){ $top_margin = ($item['plus_column_margin']["top"]) ? $item['plus_column_margin']["top"].$item['plus_column_margin']["unit"] : 0; $right_margin = ($item['plus_column_margin']["right"]) ? $item['plus_column_margin']["right"].$item['plus_column_margin']["unit"] : 0; $bottom_margin = ($item['plus_column_margin']["bottom"]) ? $item['plus_column_margin']["bottom"].$item['plus_column_margin']["unit"] : 0; $left_margin = ($item['plus_column_margin']["left"]) ? $item['plus_column_margin']["left"].$item['plus_column_margin']["unit"] : 0; $style .= 'margin : '.$top_margin.' '.$right_margin.' '.$bottom_margin.' '.$left_margin.' !important;'; } if(!empty($item['plus_column_padding']["top"]) || !empty($item['plus_column_padding']["right"]) || !empty($item['plus_column_padding']["bottom"]) || !empty($item['plus_column_padding']["left"])){ $top_padding = ($item['plus_column_padding']["top"]) ? $item['plus_column_padding']["top"].$item['plus_column_padding']["unit"] : 0; $right_padding = ($item['plus_column_padding']["right"]) ? $item['plus_column_padding']["right"].$item['plus_column_padding']["unit"] : 0; $bottom_padding = ($item['plus_column_padding']["bottom"]) ? $item['plus_column_padding']["bottom"].$item['plus_column_padding']["unit"] : 0; $left_padding = ($item['plus_column_padding']["left"]) ? $item['plus_column_padding']["left"].$item['plus_column_padding']["unit"] : 0; $style .= 'padding : '.$top_padding.' '.$right_padding.' '.$bottom_padding.' '.$left_padding.' !important;'; } $style .= '}'; $style .= '}'; } if(!empty($style)){ echo '<style>'.$style.'</style>'; } } } } } /** * Before Section Render * */ public function plus_before_render_section($element) { $settings = $element->get_settings_for_display(); $scroll_animation_in = $settings['plus_section_scroll_animation_in']; $scroll_animation_out = $settings['plus_section_scroll_animation_out']; $in_delay = ($settings['plus_section_scroll_in_delay']!='') ? $settings['plus_section_scroll_in_delay'] : '-5'; $out_delay = ($settings['plus_section_scroll_out_delay']!='') ? $settings['plus_section_scroll_out_delay'] : '-5'; $overflow_section= ($settings['plus_section_scroll_overflow']=='yes') ? 'true' : 'false'; $mobile_disable= ($settings['plus_section_scroll_mobile_disable']=='yes') ? 'true' : 'false'; $plus_extras=theplus_get_option('general','extras_elements'); if(isset($plus_extras) && (empty($plus_extras) || (!empty($plus_extras) && in_array('section_custom_css',$plus_extras)))){ $section_overflow_hidden= ($settings['plus_section_overflow_hidden']=='yes') ? 'yes' : 'no'; if($section_overflow_hidden=='yes'){ $element->add_render_attribute( '_wrapper', [ 'class' => 'plus_row_scroll_overflow', ] ); } } if($scroll_animation_in != 'none' || $scroll_animation_out != 'none' ){ $element->add_render_attribute( '_wrapper', [ 'class' => 'plus_row_scroll', 'data-row-exit' => $scroll_animation_out, 'data-row-entrance' => $scroll_animation_in, 'data-body-overflow' => $overflow_section, 'data-row-mobile-off' => $mobile_disable, ] ); //cube out if($scroll_animation_out=='cube'){ $element->add_render_attribute( '_wrapper', [ 'data-5p-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(91deg) translateX(0vw) translateY(0vh);transform-origin: !50% 100%;', 'data-20p-center-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 100%;', ] ); } //fly-up out if($scroll_animation_out=='fly-up'){ $element->add_render_attribute( '_wrapper', [ 'data-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(-30vh);', 'data-'.$out_delay.'p-center-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);', ] ); } //fly-left out if($scroll_animation_out=='fly-left'){ $element->add_render_attribute( '_wrapper', [ 'data-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(-100vw) translateY(0vh);', 'data-'.$out_delay.'p-center-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);', ] ); } //fly-right out if($scroll_animation_out=='fly-right'){ $element->add_render_attribute( '_wrapper', [ 'data-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(100vw) translateY(0vh);opacity: 0;', 'data-'.$out_delay.'p-center-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);opacity: 1;', ] ); } //scale-smaller out if($scroll_animation_out=='scale-smaller'){ $element->add_render_attribute( '_wrapper', [ 'data-top-bottom' => 'transform: perspective(1000px) scale(0.7) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 100%;opacity: 0.4;', 'data-'.$out_delay.'p-center-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 100%;opacity: 1;', ] ); } //fade out if($scroll_animation_out=='fade'){ $element->add_render_attribute( '_wrapper', [ 'data-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);opacity: 0.0;', 'data-'.$out_delay.'p-center-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);opacity: 1;', ] ); } //carousel out if($scroll_animation_out=='carousel'){ $element->add_render_attribute( '_wrapper', [ 'data-top-bottom' => 'transform: perspective(1000px) scale(0.4) rotateX(0deg) translateX(0vw) translateY(50vh);opacity: 1;z-index: 0;', 'data--1-top-bottom' => 'transform: perspective(1000px) scale(0.4) rotateX(0deg) translateX(0vw) translateY(50vh);opacity: 0;z-index: 0;', 'data--20p-center-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);opacity: 1;z-index: 0;', 'data--19.999p-center-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);opacity: 1;z-index: 1;', ] ); } //stick out if($scroll_animation_out=='stick'){ $element->add_render_attribute( '_wrapper', [ 'data--1-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(50vh);transform-origin: !50% 0%;opacity: 0;z-index: 1;', 'data-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(50vh);transform-origin: !50% 0%;opacity: 1;z-index: 1;', 'data-center-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 0%;opacity: 1;z-index: 1;', 'data-smooth-scrolling' => 'off', ] ); } //stick-fly-left out if($scroll_animation_out=='stick-fly-left'){ $element->add_render_attribute( '_wrapper', [ 'data-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(-100vw) translateY(100vh);z-index: 2;opacity: 1;', 'data-bottom-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);z-index: 2;opacity: 1;', 'data-1-bottom-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);z-index: 1;opacity: 1;', ] ); } //stick-fly-right out if($scroll_animation_out=='stick-fly-right'){ $element->add_render_attribute( '_wrapper', [ 'data-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(100vw) translateY(100vh);z-index: 2;transform-origin: !50% 50%;opacity: 1;', 'data-bottom-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);z-index: 2;transform-origin: !50% 50%;opacity: 1;', 'data-1-bottom-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);z-index: 1;transform-origin: !50% 50%;opacity: 1;', 'data-smooth-scrolling-exit' => "off", ] ); } //stick-fly-down out if($scroll_animation_out=='stick-fly-down'){ $element->add_render_attribute( '_wrapper', [ 'data-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(200%);z-index: 2;opacity: 1;transform-origin: !50% 50%;', 'data-bottom-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);z-index: 2;opacity: 1;transform-origin: !50% 50%;', 'data-1-bottom-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);z-index: 1;opacity: 1;transform-origin: !50% 50%;', 'data--1-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);z-index: 1;opacity: 0;transform-origin: !50% 50%;', ] ); } //rotate-forward out if($scroll_animation_out=='rotate-forward'){ $element->add_render_attribute( '_wrapper', [ 'data-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(-70deg) translateX(0vw) translateY(0vh);transform-origin: !50% 100%;opacity: 1;', 'data-'.$out_delay.'p-center-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 100%;opacity: 1;', ] ); } //rotate-back out if($scroll_animation_out=='rotate-back'){ $element->add_render_attribute( '_wrapper', [ 'data-top-bottom' => 'transform: perspective(1000px) scale(1) rotateX(70deg) translateX(0vw) translateY(0vh);transform-origin: !50% 100%;', 'data-'.$out_delay.'p-center-bottom' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 100%;', ] ); } //cube in if($scroll_animation_in=='cube'){ $element->add_render_attribute( '_wrapper', [ 'data--20p-center-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 0%;', 'data--5p-bottom-top' => 'transform: perspective(1000px) scale(1) rotateX(-91deg) translateX(0vw) translateY(0vh);transform-origin: !50% 0%;', ] ); } //fly-up in if($scroll_animation_in=='fly-up'){ $element->add_render_attribute( '_wrapper', [ 'data-'.$in_delay.'p-center-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 100%;', 'data-bottom-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(30vh);transform-origin: !50% 100%;', ] ); } //fly-left in if($scroll_animation_in=='fly-left'){ $element->add_render_attribute( '_wrapper', [ 'data-'.$in_delay.'p-center-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);', 'data-bottom-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(100vw) translateY(0vh);', ] ); } //fly-right in if($scroll_animation_in=='fly-right'){ $element->add_render_attribute( '_wrapper', [ 'data-'.$in_delay.'p-center-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);opacity: 1;', 'data-bottom-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(-100vw) translateY(0vh);opacity: 1;', ] ); } //scale-smaller in if($scroll_animation_in=='scale-smaller'){ $element->add_render_attribute( '_wrapper', [ 'data-'.$in_delay.'p-center-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 0%;opacity: 1;', 'data-bottom-top' => 'transform: perspective(1000px) scale(1.2) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 0%;opacity: 0.4;', ] ); } //fade in if($scroll_animation_in=='fade'){ $element->add_render_attribute( '_wrapper', [ 'data-'.$in_delay.'p-center-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 50%;opacity: 1;', 'data-bottom-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 100%;transform-origin: !50% 50%;opacity: 0.0;', ] ); } //carousel in if($scroll_animation_in=='carousel'){ $element->add_render_attribute( '_wrapper', [ 'data-20p-center-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);opacity: 1;z-index: 0;', 'data-19.9999p-center-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);opacity: 1;z-index: 1;', 'data-bottom-top' => 'transform: perspective(1000px) scale(0.4) rotateX(0deg) translateX(0vw) translateY(-50vh);opacity: 1;z-index: 1;', 'data-1-bottom-top' => 'transform: perspective(1000px) scale(0.4) rotateX(0deg) translateX(0vw) translateY(-50vh);opacity: 0;z-index: 0;', ] ); } //stick in if($scroll_animation_in=='stick'){ $element->add_render_attribute( '_wrapper', [ 'data-1-top-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 0%;opacity: 1;z-index: 1;', 'data-2-top-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 0%;opacity: 1;z-index: 0;', 'data-bottom-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(-100vh);transform-origin: !50% 0%;opacity: 1;z-index: 0;', 'data-1-bottom-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 0%;opacity: 0;z-index: 0;', 'data-smooth-scrolling' => 'off', ] ); } //rotate-forward in if($scroll_animation_in=='rotate-forward'){ $element->add_render_attribute( '_wrapper', [ 'data-'.$in_delay.'p-center-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 0%;', 'data-bottom-top' => 'transform: perspective(1000px) scale(1) rotateX(-70deg) translateX(0vw) translateY(0vh);transform-origin: !50% 0%;', ] ); } //rotate-back in if($scroll_animation_in=='rotate-back'){ $element->add_render_attribute( '_wrapper', [ 'data-'.$in_delay.'p-center-top' => 'transform: perspective(1000px) scale(1) rotateX(0deg) translateX(0vw) translateY(0vh);transform-origin: !50% 0%;', 'data-bottom-top' => 'transform: perspective(1000px) scale(1) rotateX(70deg) translateX(0vw) translateY(0vh);transform-origin: !50% 0%;', ] ); } } } /** * @param $post_css Post * @param $element Element_Base */ public function add_post_css( $post_css, $element ) { if ( $post_css instanceof Dynamic_CSS ) { return; } $element_settings = $element->get_settings(); if ( empty( $element_settings['plus_custom_css'] ) ) { return; } $css = trim( $element_settings['plus_custom_css'] ); if ( empty( $css ) ) { return; } $css = str_replace( 'selector', $post_css->get_element_unique_selector( $element ), $css ); $css = $css; $post_css->get_stylesheet()->add_raw_css( $css ); } protected function init($data='') { $theplus_options=get_option('theplus_options'); $plus_extras=theplus_get_option('general','extras_elements'); if((isset($plus_extras) && empty($plus_extras) && empty($theplus_options)) || (!empty($plus_extras) && (in_array('column_sticky',$plus_extras) || in_array('custom_width_column',$plus_extras) || in_array('order_sort_column',$plus_extras) || in_array('column_custom_css',$plus_extras)))){ add_action( 'elementor/element/column/section_advanced/after_section_end', [ $this, 'tp_register_controls' ], 10, 2 ); } if((isset($plus_extras) && empty($plus_extras) && empty($theplus_options)) || (!empty($plus_extras) && in_array('section_scroll_animation',$plus_extras))){ add_action( 'elementor/frontend/section/before_render', [ $this, 'plus_before_render_section'], 10, 1 ); } add_action( 'elementor/frontend/column/before_render', [ $this, 'before_render_element'], 10, 1 ); add_action( 'elementor/frontend/element/before_render', array( $this, 'before_render_element' ) ); add_action( 'elementor/element/parse_css', [ $this, 'add_post_css' ], 10, 2 ); if((isset($plus_extras) && empty($plus_extras) && empty($theplus_options)) || (!empty($plus_extras) && (in_array('section_scroll_animation',$plus_extras) || in_array('section_custom_css',$plus_extras)))){ add_action( 'elementor/element/section/section_advanced/after_section_end', [ $this, 'section_register_controls' ], 10, 2 ); } } }