File "offcanvas-content.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/powerpack-elements142/modules/offcanvas-content/widgets/offcanvas-content.php
File
size: 55.7 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
namespace PowerpackElements\Modules\OffcanvasContent\Widgets;
use PowerpackElements\Base\Powerpack_Widget;
// Elementor Classes
use Elementor\Controls_Manager;
use Elementor\Utils;
use Elementor\Repeater;
use Elementor\Group_Control_Background;
use Elementor\Group_Control_Box_Shadow;
use Elementor\Group_Control_Border;
use Elementor\Group_Control_Typography;
use Elementor\Scheme_Typography;
use Elementor\Scheme_Color;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Offcanvas Content Widget
*/
class Offcanvas_Content extends Powerpack_Widget {
/**
* Retrieve offcanvas content widget name.
*
* @access public
*
* @return string Widget name.
*/
public function get_name() {
return 'pp-offcanvas-content';
}
/**
* Retrieve offcanvas content widget title.
*
* @access public
*
* @return string Widget title.
*/
public function get_title() {
return __( 'Offcanvas Content', 'powerpack' );
}
/**
* Retrieve the list of categories the offcanvas content widget belongs to.
*
* Used to determine where to display the widget in the editor.
*
* @access public
*
* @return array Widget categories.
*/
public function get_categories() {
return [ 'power-pack' ];
}
/**
* Retrieve offcanvas content widget icon.
*
* @access public
*
* @return string Widget icon.
*/
public function get_icon() {
return 'ppicon-offcanvas-content power-pack-admin-icon';
}
/**
* Retrieve the list of scripts the offcanvas content widget depended on.
*
* Used to set scripts dependencies required to run the widget.
*
* @access public
*
* @return array Widget scripts dependencies.
*/
public function get_script_depends() {
return [
'pp-offcanvas-content',
'powerpack-frontend'
];
}
/**
* Retrieve the list of styles the offcanvas content widget depended on.
*
* Used to set styles dependencies required to run the widget.
*
* @access public
*
* @return array Widget styles dependencies.
*/
public function get_style_depends() {
return [
'pp-hamburgers'
];
}
protected function _register_controls() {
/*-----------------------------------------------------------------------------------*/
/* CONTENT TAB
/*-----------------------------------------------------------------------------------*/
/**
* Content Tab: Offcanvas Content
* -------------------------------------------------
*/
$this->start_controls_section(
'section_modal_popup',
[
'label' => __( 'Offcanvas Content', 'powerpack' ),
]
);
$this->add_control(
'content_type',
[
'label' => __( 'Content Type', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'options' => [
'sidebar' => __( 'Sidebar', 'powerpack' ),
'custom' => __( 'Custom Content', 'powerpack' ),
'section' => __( 'Saved Section', 'powerpack' ),
'widget' => __( 'Saved Widget', 'powerpack' ),
'template' => __( 'Saved Page Template', 'powerpack' ),
],
'default' => 'custom',
]
);
global $wp_registered_sidebars;
$options = [];
if ( ! $wp_registered_sidebars ) {
$options[''] = __( 'No sidebars were found', 'powerpack' );
} else {
$options[''] = __( 'Choose Sidebar', 'powerpack' );
foreach ( $wp_registered_sidebars as $sidebar_id => $sidebar ) {
$options[ $sidebar_id ] = $sidebar['name'];
}
}
$default_key = array_keys( $options );
$default_key = array_shift( $default_key );
$this->add_control(
'sidebar',
[
'label' => __( 'Choose Sidebar', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => $default_key,
'options' => $options,
'condition' => [
'content_type' => 'sidebar',
],
]
);
$this->add_control(
'saved_widget',
[
'label' => __( 'Choose Widget', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'options' => $this->get_page_template_options( 'widget' ),
'default' => '-1',
'condition' => [
'content_type' => 'widget',
],
]
);
$this->add_control(
'saved_section',
[
'label' => __( 'Choose Section', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'options' => $this->get_page_template_options( 'section' ),
'default' => '-1',
'condition' => [
'content_type' => 'section',
],
]
);
$this->add_control(
'templates',
[
'label' => __( 'Choose Template', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'options' => $this->get_page_template_options( 'page' ),
'default' => '-1',
'condition' => [
'content_type' => 'template',
],
]
);
$this->add_control(
'custom_content',
[
'label' => '',
'type' => Controls_Manager::REPEATER,
'default' => [
[
'title' => __( 'Box 1', 'powerpack' ),
'description' => __( 'Text box description goes here', 'powerpack' ),
],
[
'title' => __( 'Box 2', 'powerpack' ),
'description' => __( 'Text box description goes here', 'powerpack' ),
],
],
'fields' => [
[
'name' => 'title',
'label' => __( 'Title', 'powerpack' ),
'type' => Controls_Manager::TEXT,
'dynamic' => [
'active' => true,
],
'default' => __( 'Title', 'powerpack' ),
],
[
'name' => 'description',
'label' => __( 'Description', 'powerpack' ),
'type' => Controls_Manager::WYSIWYG,
'dynamic' => [
'active' => true,
],
'default' => '',
],
],
'title_field' => '{{{ title }}}',
'condition' => [
'content_type' => 'custom',
],
]
);
$this->end_controls_section();
/**
* Content Tab: Toggle
* -------------------------------------------------
*/
$this->start_controls_section(
'section_button_settings',
[
'label' => __( 'Toggle', 'powerpack' ),
]
);
$this->add_control(
'toggle_source',
[
'label' => __( 'Toggle Source', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => 'burger',
'options' => [
'button' => __( 'Button', 'powerpack' ),
'burger' => __( 'Burger Icon', 'powerpack' ),
'element-class' => __( 'Element Class', 'powerpack' ),
'element-id' => __( 'Element ID', 'powerpack' ),
],
'frontend_available' => true,
]
);
$this->add_control(
'toggle_class',
[
'label' => __( 'Toggle CSS Class', 'powerpack' ),
'type' => Controls_Manager::TEXT,
'dynamic' => [
'active' => true,
],
'default' => '',
'frontend_available' => true,
'condition' => [
'toggle_source' => 'element-class',
],
]
);
$this->add_control(
'toggle_id',
[
'label' => __( 'Toggle CSS ID', 'powerpack' ),
'type' => Controls_Manager::TEXT,
'dynamic' => [
'active' => true,
],
'default' => '',
'frontend_available' => true,
'condition' => [
'toggle_source' => 'element-id',
],
]
);
$this->add_control(
'button_text',
[
'label' => __( 'Button Text', 'powerpack' ),
'type' => Controls_Manager::TEXT,
'dynamic' => [
'active' => true,
],
'default' => __( 'Click Here', 'powerpack' ),
'condition' => [
'toggle_source' => 'button',
],
]
);
$this->add_control(
'button_icon',
[
'label' => __( 'Button Icon', 'powerpack' ),
'type' => Controls_Manager::ICON,
'default' => '',
'condition' => [
'toggle_source' => 'button',
],
]
);
$this->add_control(
'button_icon_position',
[
'label' => __( 'Icon Position', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => 'before',
'options' => [
'before' => __( 'Before', 'powerpack' ),
'after' => __( 'After', 'powerpack' ),
],
'prefix_class' => 'pp-offcanvas-icon-',
'condition' => [
'toggle_source' => 'button',
'button_icon!' => '',
],
]
);
$this->add_responsive_control(
'button_icon_spacing',
[
'label' => __( 'Icon Spacing', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => '5',
'unit' => 'px',
],
'range' => [
'px' => [
'min' => 0,
'max' => 50,
'step' => 1,
],
],
'size_units' => [ 'px', '%' ],
'selectors' => [
'{{WRAPPER}}.pp-offcanvas-icon-before .pp-offcanvas-toggle-icon' => 'margin-right: {{SIZE}}{{UNIT}}',
'{{WRAPPER}}.pp-offcanvas-icon-after .pp-offcanvas-toggle-icon' => 'margin-left: {{SIZE}}{{UNIT}}',
],
'condition' => [
'toggle_source' => 'button',
'button_icon!' => '',
],
]
);
$this->add_control(
'toggle_effect',
[
'label' => __( 'Animation', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => 'arrow',
'options' => [
'' => __( 'None', 'powerpack' ),
'arrow' => __( 'Arrow Left', 'powerpack' ),
'arrow-r' => __( 'Arrow Right', 'powerpack' ),
'arrowalt' => __( 'Arrow Alt Left', 'powerpack' ),
'arrowalt-r' => __( 'Arrow Alt Right', 'powerpack' ),
'arrowturn' => __( 'Arrow Turn Left', 'powerpack' ),
'arrowturn-r' => __( 'Arrow Turn Right', 'powerpack' ),
'boring' => __( 'Boring', 'powerpack' ),
'collapse' => __( 'Collapse Left', 'powerpack' ),
'collapse-r' => __( 'Collapse Right', 'powerpack' ),
'elastic' => __( 'Elastic Left', 'powerpack' ),
'elastic-r' => __( 'Elastic Right', 'powerpack' ),
'emphatic' => __( 'Emphatic Left', 'powerpack' ),
'emphatic-r' => __( 'Emphatic Right', 'powerpack' ),
'minus' => __( 'Minus', 'powerpack' ),
'slider' => __( 'Slider Left', 'powerpack' ),
'slider-r' => __( 'Slider Right', 'powerpack' ),
'spin' => __( 'Spin Left', 'powerpack' ),
'spin-r' => __( 'Spin Right', 'powerpack' ),
'spring' => __( 'Spring Left', 'powerpack' ),
'spring-r' => __( 'Spring Right', 'powerpack' ),
'squeeze' => __( 'Squeeze', 'powerpack' ),
'stand' => __( 'Stand Left', 'powerpack' ),
'stand-r' => __( 'Stand Right', 'powerpack' ),
'vortex' => __( 'Vortex Left', 'powerpack' ),
'vortex-r' => __( 'Vortex Right', 'powerpack' ),
'3dx' => __( '3DX', 'powerpack' ),
'3dy' => __( '3DY', 'powerpack' ),
'3dxy' => __( '3DXY', 'powerpack' ),
],
'condition' => [
'toggle_source' => 'burger',
],
]
);
$this->add_control(
'burger_label',
[
'label' => __( 'Label', 'powerpack' ),
'type' => Controls_Manager::TEXT,
'dynamic' => [
'active' => true,
],
'default' => __( 'Menu', 'powerpack' ),
'condition' => [
'toggle_source' => 'burger',
],
]
);
$this->end_controls_section();
/**
* Content Tab: Settings
* -------------------------------------------------
*/
$this->start_controls_section(
'section_settings',
[
'label' => __( 'Settings', 'powerpack' ),
]
);
$this->add_control(
'direction',
[
'label' => __( 'Direction', 'powerpack' ),
'type' => Controls_Manager::CHOOSE,
'label_block' => false,
'toggle' => false,
'default' => 'left',
'options' => [
'left' => [
'title' => __( 'Left', 'powerpack' ),
'icon' => 'eicon-h-align-left',
],
'right' => [
'title' => __( 'Right', 'powerpack' ),
'icon' => 'eicon-h-align-right',
],
'top' => [
'title' => __( 'Top', 'powerpack' ),
'icon' => 'eicon-v-align-top',
],
'bottom' => [
'title' => __( 'Bottom', 'powerpack' ),
'icon' => 'eicon-v-align-bottom',
],
],
'frontend_available' => true,
]
);
$this->add_control(
'content_transition',
[
'label' => __( 'Content Transition', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => 'slide',
'options' => [
'slide' => __( 'Slide', 'powerpack' ),
'reveal' => __( 'Reveal', 'powerpack' ),
'push' => __( 'Push', 'powerpack' ),
'slide-along' => __( 'Slide Along', 'powerpack' ),
],
'frontend_available' => true,
'separator' => 'before',
]
);
$this->add_control(
'close_button',
[
'label' => __( 'Show Close Button', 'powerpack' ),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
'label_on' => __( 'Yes', 'powerpack' ),
'label_off' => __( 'No', 'powerpack' ),
'return_value' => 'yes',
'separator' => 'before',
]
);
$this->add_control(
'esc_close',
[
'label' => __( 'Esc to Close', 'powerpack' ),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
'label_on' => __( 'Yes', 'powerpack' ),
'label_off' => __( 'No', 'powerpack' ),
'return_value' => 'yes',
]
);
$this->add_control(
'body_click_close',
[
'label' => __( 'Click anywhere to Close', 'powerpack' ),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
'label_on' => __( 'Yes', 'powerpack' ),
'label_off' => __( 'No', 'powerpack' ),
'return_value' => 'yes',
]
);
$this->end_controls_section();
/*-----------------------------------------------------------------------------------*/
/* STYLE TAB
/*-----------------------------------------------------------------------------------*/
/**
* Style Tab: Offcanvas Bar
* -------------------------------------------------
*/
$this->start_controls_section(
'section_offcanvas_bar_style',
[
'label' => __( 'Offcanvas Bar', 'powerpack' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'offcanvas_bar_width',
[
'label' => __( 'Width', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 300,
'unit' => 'px',
],
'range' => [
'px' => [
'min' => 100,
'max' => 1000,
'step' => 1,
],
],
'size_units' => [ 'px' ],
'selectors' => [
'.pp-offcanvas-content-{{ID}}' => 'width: {{SIZE}}{{UNIT}}',
'.pp-offcanvas-content-{{ID}}.pp-offcanvas-content-top, .pp-offcanvas-content-{{ID}}.pp-offcanvas-content-bottom' => 'width: 100%; height: {{SIZE}}{{UNIT}}',
'.pp-offcanvas-content-reveal.pp-offcanvas-content-{{ID}}-open.pp-offcanvas-content-left .pp-offcanvas-container,
.pp-offcanvas-content-push.pp-offcanvas-content-{{ID}}-open.pp-offcanvas-content-left .pp-offcanvas-container,
.pp-offcanvas-content-slide-along.pp-offcanvas-content-{{ID}}-open.pp-offcanvas-content-left .pp-offcanvas-container' => 'transform: translate3d({{SIZE}}{{UNIT}}, 0, 0)',
'.pp-offcanvas-content-reveal.pp-offcanvas-content-{{ID}}-open.pp-offcanvas-content-right .pp-offcanvas-container,
.pp-offcanvas-content-push.pp-offcanvas-content-{{ID}}-open.pp-offcanvas-content-right .pp-offcanvas-container,
.pp-offcanvas-content-slide-along.pp-offcanvas-content-{{ID}}-open.pp-offcanvas-content-right .pp-offcanvas-container' => 'transform: translate3d(-{{SIZE}}{{UNIT}}, 0, 0)',
'.pp-offcanvas-content-reveal.pp-offcanvas-content-{{ID}}-open.pp-offcanvas-content-top .pp-offcanvas-container,
.pp-offcanvas-content-push.pp-offcanvas-content-{{ID}}-open.pp-offcanvas-content-top .pp-offcanvas-container,
.pp-offcanvas-content-slide-along.pp-offcanvas-content-{{ID}}-open.pp-offcanvas-content-top .pp-offcanvas-container' => 'transform: translate3d(0, {{SIZE}}{{UNIT}}, 0)',
'.pp-offcanvas-content-reveal.pp-offcanvas-content-{{ID}}-open.pp-offcanvas-content-bottom .pp-offcanvas-container,
.pp-offcanvas-content-push.pp-offcanvas-content-{{ID}}-open.pp-offcanvas-content-bottom .pp-offcanvas-container,
.pp-offcanvas-content-slide-along.pp-offcanvas-content-{{ID}}-open.pp-offcanvas-content-bottom .pp-offcanvas-container' => 'transform: translate3d(0, -{{SIZE}}{{UNIT}}, 0)',
]
]
);
$this->add_group_control(
Group_Control_Background::get_type(),
[
'name' => 'offcanvas_bar_bg',
'label' => __( 'Background', 'powerpack' ),
'types' => [ 'classic', 'gradient' ],
'selector' => '.pp-offcanvas-content-{{ID}}',
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'offcanvas_bar_border',
'label' => __( 'Border', 'powerpack' ),
'placeholder' => '1px',
'default' => '1px',
'selector' => '.pp-offcanvas-content-{{ID}}',
]
);
$this->add_control(
'offcanvas_bar_border_radius',
[
'label' => __( 'Border Radius', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%' ],
'selectors' => [
'.pp-offcanvas-content-{{ID}}' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'offcanvas_bar_padding',
[
'label' => __( 'Padding', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', 'em', '%' ],
'selectors' => [
'.pp-offcanvas-content-{{ID}} .pp-offcanvas-body' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'offcanvas_bar_box_shadow',
'selector' => '.pp-offcanvas-content-{{ID}}',
'separator' => 'before',
]
);
$this->end_controls_section();
/**
* Style Tab: Content
* -------------------------------------------------
*/
$this->start_controls_section(
'section_popup_content_style',
[
'label' => __( 'Content', 'powerpack' ),
'tab' => Controls_Manager::TAB_STYLE,
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_responsive_control(
'content_align',
[
'label' => __( 'Alignment', 'powerpack' ),
'type' => Controls_Manager::CHOOSE,
'options' => [
'left' => [
'title' => __( 'Left', 'powerpack' ),
'icon' => 'fa fa-align-left',
],
'center' => [
'title' => __( 'Center', 'powerpack' ),
'icon' => 'fa fa-align-center',
],
'right' => [
'title' => __( 'Right', 'powerpack' ),
'icon' => 'fa fa-align-right',
],
'justify' => [
'title' => __( 'Justified', 'powerpack' ),
'icon' => 'fa fa-align-justify',
],
],
'default' => '',
'selectors' => [
'.pp-offcanvas-content-{{ID}} .pp-offcanvas-body' => 'text-align: {{VALUE}};',
],
]
);
$this->add_control(
'widget_heading',
[
'label' => __( 'Box', 'powerpack' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_control(
'widgets_bg_color',
[
'label' => __( 'Background Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'.pp-offcanvas-content-{{ID}} .pp-offcanvas-custom-widget, .pp-offcanvas-content-{{ID}} .widget' => 'background-color: {{VALUE}}',
],
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'widgets_border',
'label' => __( 'Border', 'powerpack' ),
'placeholder' => '1px',
'default' => '1px',
'selector' => '.pp-offcanvas-content-{{ID}} .pp-offcanvas-custom-widget, .pp-offcanvas-content-{{ID}} .widget',
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_control(
'widgets_border_radius',
[
'label' => __( 'Border Radius', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%' ],
'selectors' => [
'.pp-offcanvas-content-{{ID}} .pp-offcanvas-custom-widget, .pp-offcanvas-content-{{ID}} .widget' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_responsive_control(
'widgets_bottom_spacing',
[
'label' => __( 'Bottom Spacing', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => '20',
'unit' => 'px',
],
'range' => [
'px' => [
'min' => 0,
'max' => 60,
'step' => 1,
],
],
'size_units' => [ 'px', '%' ],
'selectors' => [
'.pp-offcanvas-content-{{ID}} .pp-offcanvas-custom-widget, .pp-offcanvas-content-{{ID}} .widget' => 'margin-bottom: {{SIZE}}{{UNIT}}',
],
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_responsive_control(
'widgets_padding',
[
'label' => __( 'Padding', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', 'em', '%' ],
'selectors' => [
'.pp-offcanvas-content-{{ID}} .pp-offcanvas-custom-widget, .pp-offcanvas-content-{{ID}} .widget' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_control(
'text_heading',
[
'label' => __( 'Text', 'powerpack' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_control(
'content_text_color',
[
'label' => __( 'Text Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'.pp-offcanvas-content-{{ID}} .pp-offcanvas-body, .pp-offcanvas-content-{{ID}} .pp-offcanvas-body *:not(.fa):not(.eicon)' => 'color: {{VALUE}}',
],
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'text_typography',
'label' => __( 'Typography', 'powerpack' ),
'selector' => '.pp-offcanvas-content-{{ID}} .pp-offcanvas-body, .pp-offcanvas-content-{{ID}} .pp-offcanvas-body *:not(.fa):not(.eicon)',
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_control(
'links_heading',
[
'label' => __( 'Links', 'powerpack' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->start_controls_tabs( 'tabs_links_style' );
$this->start_controls_tab(
'tab_links_normal',
[
'label' => __( 'Normal', 'powerpack' ),
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_control(
'content_links_color',
[
'label' => __( 'Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'.pp-offcanvas-content-{{ID}} .pp-offcanvas-body a' => 'color: {{VALUE}}',
],
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'links_typography',
'label' => __( 'Typography', 'powerpack' ),
'scheme' => Scheme_Typography::TYPOGRAPHY_4,
'selector' => '.pp-offcanvas-content-{{ID}} .pp-offcanvas-body a',
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'tab_links_hover',
[
'label' => __( 'Hover', 'powerpack' ),
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->add_control(
'content_links_color_hover',
[
'label' => __( 'Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'.pp-offcanvas-content-{{ID}} .pp-offcanvas-body a:hover' => 'color: {{VALUE}}',
],
'condition' => [
'content_type' => [ 'sidebar', 'custom' ],
],
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->end_controls_section();
/**
* Style Tab: Toggle
* -------------------------------------------------
*/
$this->start_controls_section(
'section_toggle_button_style',
[
'label' => __( 'Toggle', 'powerpack' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'button_align',
[
'label' => __( 'Alignment', 'powerpack' ),
'type' => Controls_Manager::CHOOSE,
'default' => 'left',
'options' => [
'left' => [
'title' => __( 'Left', 'powerpack' ),
'icon' => 'eicon-h-align-left',
],
'center' => [
'title' => __( 'Center', 'powerpack' ),
'icon' => 'eicon-h-align-center',
],
'right' => [
'title' => __( 'Right', 'powerpack' ),
'icon' => 'eicon-h-align-right',
],
],
'selectors' => [
'{{WRAPPER}} .pp-offcanvas-toggle-wrap' => 'text-align: {{VALUE}};',
],
]
);
$this->add_control(
'button_size',
[
'label' => __( 'Size', 'powerpack' ),
'type' => Controls_Manager::SELECT,
'default' => 'md',
'options' => [
'xs' => __( 'Extra Small', 'powerpack' ),
'sm' => __( 'Small', 'powerpack' ),
'md' => __( 'Medium', 'powerpack' ),
'lg' => __( 'Large', 'powerpack' ),
'xl' => __( 'Extra Large', 'powerpack' ),
],
'condition' => [
'toggle_source' => 'button',
],
]
);
$this->start_controls_tabs( 'tabs_button_style' );
$this->start_controls_tab(
'tab_button_normal',
[
'label' => __( 'Normal', 'powerpack' ),
]
);
$this->add_control(
'button_bg_color_normal',
[
'label' => __( 'Background Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-offcanvas-toggle' => 'background-color: {{VALUE}}',
],
]
);
$this->add_control(
'button_text_color_normal',
[
'label' => __( 'Text Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-offcanvas-toggle' => 'color: {{VALUE}}',
'{{WRAPPER}} .pp-hamburger-inner, {{WRAPPER}} .pp-hamburger-inner::before, {{WRAPPER}} .pp-hamburger-inner::after' => 'background-color: {{VALUE}}',
],
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'button_border_normal',
'label' => __( 'Border', 'powerpack' ),
'placeholder' => '1px',
'default' => '1px',
'selector' => '{{WRAPPER}} .pp-offcanvas-toggle',
]
);
$this->add_control(
'button_border_radius',
[
'label' => __( 'Border Radius', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%' ],
'selectors' => [
'{{WRAPPER}} .pp-offcanvas-toggle' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'button_padding',
[
'label' => __( 'Padding', 'powerpack' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', 'em', '%' ],
'selectors' => [
'{{WRAPPER}} .pp-offcanvas-toggle' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'button_box_shadow',
'selector' => '{{WRAPPER}} .pp-offcanvas-toggle',
]
);
$this->add_control(
'toggle_icon_heading',
[
'label' => __( 'Icon', 'powerpack' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
'condition' => [
'toggle_source' => 'burger',
],
]
);
$this->add_responsive_control(
'toggle_icon_size',
[
'label' => __( 'Size', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 1,
],
'range' => [
'px' => [
'min' => 0.1,
'max' => 3,
'step' => 0.01,
],
],
'selectors' => [
'{{WRAPPER}} .pp-hamburger-box' => 'font-size: {{SIZE}}em',
],
'condition' => [
'toggle_source' => 'burger',
],
]
);
$this->add_control(
'toggle_label_heading',
[
'label' => __( 'Label', 'powerpack' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
'condition' => [
'toggle_source' => 'burger',
'burger_label!' => '',
],
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'name' => 'button_typography',
'label' => __( 'Typography', 'powerpack' ),
'scheme' => Scheme_Typography::TYPOGRAPHY_4,
'selector' => '{{WRAPPER}} .pp-offcanvas-toggle',
'condition' => [
'toggle_source' => 'burger',
'burger_label!' => '',
],
]
);
$this->add_responsive_control(
'toggle_label_spacing',
[
'label' => __( 'Spacing', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => '',
],
'range' => [
'px' => [
'min' => 0,
'max' => 30,
'step' => 1,
],
],
'selectors' => [
'{{WRAPPER}} .pp-hamburger-label' => 'margin-left: {{SIZE}}{{UNIT}}',
],
'condition' => [
'toggle_source' => 'burger',
'burger_label!' => '',
],
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'tab_button_hover',
[
'label' => __( 'Hover', 'powerpack' ),
]
);
$this->add_control(
'button_bg_color_hover',
[
'label' => __( 'Background Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-offcanvas-toggle:hover' => 'background-color: {{VALUE}}',
],
]
);
$this->add_control(
'button_text_color_hover',
[
'label' => __( 'Text Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-offcanvas-toggle:hover' => 'color: {{VALUE}}',
],
]
);
$this->add_control(
'button_border_color_hover',
[
'label' => __( 'Border Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .pp-offcanvas-toggle:hover' => 'border-color: {{VALUE}}',
],
]
);
$this->add_control(
'button_animation',
[
'label' => __( 'Animation', 'powerpack' ),
'type' => Controls_Manager::HOVER_ANIMATION,
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'button_box_shadow_hover',
'selector' => '{{WRAPPER}} .pp-offcanvas-toggle:hover',
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->end_controls_section();
/**
* Style Tab: Close Button
* -------------------------------------------------
*/
$this->start_controls_section(
'section_close_button_style',
[
'label' => __( 'Close Button', 'powerpack' ),
'tab' => Controls_Manager::TAB_STYLE,
'condition' => [
'close_button' => 'yes',
],
]
);
$this->add_control(
'close_button_align',
[
'label' => __( 'Alignment', 'powerpack' ),
'type' => Controls_Manager::CHOOSE,
'options' => [
'left' => [
'title' => __( 'Left', 'powerpack' ),
'icon' => 'fa fa-align-left',
],
'center' => [
'title' => __( 'Center', 'powerpack' ),
'icon' => 'fa fa-align-center',
],
'right' => [
'title' => __( 'Right', 'powerpack' ),
'icon' => 'fa fa-align-right',
],
],
'default' => '',
'selectors' => [
'.pp-offcanvas-content-{{ID}} .pp-offcanvas-header' => 'text-align: {{VALUE}};',
],
]
);
$this->add_control(
'close_button_icon',
[
'label' => __( 'Button Icon', 'powerpack' ),
'type' => Controls_Manager::ICON,
'default' => 'fa fa-close',
'condition' => [
'close_button' => 'yes',
],
]
);
$this->add_control(
'close_button_text_color',
[
'label' => __( 'Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'.pp-offcanvas-close-{{ID}}' => 'color: {{VALUE}}',
],
'condition' => [
'close_button' => 'yes',
],
]
);
$this->add_responsive_control(
'close_button_size',
[
'label' => __( 'Size', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => '28',
'unit' => 'px',
],
'range' => [
'px' => [
'min' => 10,
'max' => 80,
'step' => 1,
],
],
'size_units' => [ 'px', '%' ],
'selectors' => [
'.pp-offcanvas-content-{{ID}} .pp-offcanvas-close-{{ID}}' => 'font-size: {{SIZE}}{{UNIT}}',
],
'condition' => [
'close_button' => 'yes',
],
]
);
$this->end_controls_section();
/**
* Style Tab: Overlay
* -------------------------------------------------
*/
$this->start_controls_section(
'section_overlay_style',
[
'label' => __( 'Overlay', 'powerpack' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'overlay_bg_color',
[
'label' => __( 'Color', 'powerpack' ),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'.pp-offcanvas-content-{{ID}}-open .pp-offcanvas-container:after' => 'background: {{VALUE}}',
],
]
);
$this->add_control(
'overlay_opacity',
[
'label' => __( 'Opacity', 'powerpack' ),
'type' => Controls_Manager::SLIDER,
'range' => [
'px' => [
'min' => 0,
'max' => 1,
'step' => 0.01,
],
],
'selectors' => [
'.pp-offcanvas-content-{{ID}}-open .pp-offcanvas-container:after' => 'opacity: {{SIZE}};',
],
]
);
$this->end_controls_section();
}
/**
* Render offcanvas content widget output on the frontend.
*
* Written in PHP and used to generate the final HTML.
*
* @access protected
*/
protected function render() {
$settings = $this->get_settings_for_display();
$settings_attr = array(
'toggle_source' => esc_attr( $settings['toggle_source'] ),
'toggle_id' => esc_attr( $settings['toggle_id'] ),
'toggle_class' => esc_attr( $settings['toggle_class'] ),
'content_id' => esc_attr( $this->get_id() ),
'transition' => esc_attr( $settings['content_transition'] ),
'direction' => esc_attr( $settings['direction'] ),
'esc_close' => esc_attr( $settings['esc_close'] ),
'body_click_close' => esc_attr( $settings['body_click_close'] )
);
$this->add_render_attribute( 'content-wrap', 'class', 'pp-offcanvas-content-wrap');
$this->add_render_attribute( 'content-wrap', 'data-settings', htmlspecialchars( json_encode( $settings_attr ) ) );
$this->add_render_attribute( 'content', 'class',
[
'pp-offcanvas-content',
'pp-offcanvas-content-' . $this->get_id(),
'pp-offcanvas-' . $settings_attr['transition'],
'elementor-element-' . $this->get_id(),
]
);
$this->add_render_attribute( 'content', 'class', 'pp-offcanvas-content-' . $settings['direction'] );
$this->add_render_attribute( 'toggle-button', 'class', [
'pp-offcanvas-toggle',
'pp-offcanvas-toggle-' . esc_attr( $this->get_id() ),
'elementor-button',
'elementor-size-' . $settings['button_size'],
]
);
if ( $settings['button_animation'] ) {
$this->add_render_attribute( 'toggle-button', 'class', 'elementor-animation-' . $settings['button_animation'] );
}
$this->add_render_attribute( 'hamburger', 'class', [
'pp-offcanvas-toggle',
'pp-offcanvas-toggle-' . esc_attr( $this->get_id() ),
'pp-button',
'pp-hamburger',
'pp-hamburger--' . $settings['toggle_effect'],
]
);
?>
<div <?php echo $this->get_render_attribute_string( 'content-wrap' ); ?>>
<?php
if ( $settings['toggle_source'] == 'button' || $settings['toggle_source'] == 'burger' ) {
// Toggle
$this->render_toggle();
} else {
$placeholder = __( 'You have selected to open offcanvas bar using another element. This placeholder will not be shown on the live page.', 'elementor-extras' );
echo $this->render_editor_placeholder( [
'body' => $placeholder,
] );
}
?>
<div <?php echo $this->get_render_attribute_string( 'content' ); ?>>
<?php echo $this->render_close_button(); ?>
<div class="pp-offcanvas-body">
<?php
if ( $settings['content_type'] == 'sidebar' ) {
$this->render_sidebar();
} elseif ( $settings['content_type'] == 'custom' ) {
$this->render_custom_content();
} elseif ( $settings['content_type'] == 'section' && !empty( $settings['saved_section'] ) ) {
echo \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( $settings['saved_section'] );
} elseif ( $settings['content_type'] == 'template' && !empty( $settings['templates'] ) ) {
echo \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( $settings['templates'] );
} elseif ( $settings['content_type'] == 'widget' && !empty( $settings['saved_widget'] ) ) {
echo \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( $settings['saved_widget'] );
}
?>
</div>
</div>
</div>
<?php
}
/**
* Render toggle output on the frontend.
*
* Written in PHP and used to generate the final HTML.
*
* @access protected
*/
protected function render_toggle() {
$settings = $this->get_settings_for_display();
if ( $settings['toggle_source'] == 'button' ) {
if ( $settings['button_text'] != '' || $settings['button_icon'] != '' ) { ?>
<div class="pp-offcanvas-toggle-wrap">
<div <?php echo $this->get_render_attribute_string( 'toggle-button' ); ?>>
<?php if ( ! empty( $settings['button_icon'] ) ) { ?>
<span class="pp-offcanvas-toggle-icon <?php echo esc_attr( $settings['button_icon'] ); ?>" aria-hidden="true"></span>
<?php } ?>
<span class="pp-offcanvas-toggle-text">
<?php echo $settings['button_text']; ?>
</span>
</div>
</div>
<?php }
} elseif ( $settings['toggle_source'] == 'burger' ) { ?>
<div class="pp-offcanvas-toggle-wrap">
<div <?php echo $this->get_render_attribute_string( 'hamburger' ); ?>>
<span class="pp-hamburger-box">
<span class="pp-hamburger-inner"></span>
</span>
<?php if ( $settings['burger_label'] ) { ?>
<span class="pp-hamburger-label">
<?php echo $settings['burger_label']; ?>
</span>
<?php } ?>
</div>
</div>
<?php }
}
/**
* Render sidebar content output on the frontend.
*
* Written in PHP and used to generate the final HTML.
*
* @access protected
*/
protected function render_close_button() {
$settings = $this->get_settings_for_display();
if ( $settings['close_button'] != 'yes' ) {
return;
}
$this->add_render_attribute( 'close-button', 'class',
[
'pp-offcanvas-close',
'pp-offcanvas-close-' . $this->get_id()
]
);
$this->add_render_attribute( 'close-button', 'role', 'button' );
?>
<div class="pp-offcanvas-header">
<div <?php echo $this->get_render_attribute_string( 'close-button' ); ?>>
<?php if ( $settings['close_button_icon'] != '' ) { ?>
<span class="<?php echo $settings['close_button_icon']; ?>"></span>
<?php } else { ?>
<span class="fa fa-close"></span>
<?php } ?>
</div>
</div>
<?php
}
/**
* Render sidebar content output on the frontend.
*
* Written in PHP and used to generate the final HTML.
*
* @access protected
*/
protected function render_sidebar() {
$settings = $this->get_settings_for_display();
$sidebar = $settings['sidebar'];
if ( empty( $sidebar ) ) {
return;
}
dynamic_sidebar( $sidebar );
}
/**
* Render saved template output on the frontend.
*
* Written in PHP and used to generate the final HTML.
*
* @access protected
*/
protected function render_custom_content() {
$settings = $this->get_settings_for_display();
foreach ( $settings['custom_content'] as $index => $item ) :
?>
<div class="pp-offcanvas-custom-widget">
<h3 class="pp-offcanvas-widget-title">
<?php echo $item['title']; ?>
</h3>
<div class="pp-offcanvas-widget-content">
<?php echo $item['description']; ?>
</div>
</div>
<?php
endforeach;
}
/**
* Render saved template output on the frontend.
*
* Written in PHP and used to generate the final HTML.
*
* @access protected
*/
protected function render_saved_template() {
$settings = $this->get_settings_for_display();
if ( $settings['content_type'] == 'section' && !empty( $settings['saved_section'] ) ) {
//$pp_template_id = $settings['templates'];
echo \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( $settings['saved_section'] );
//echo \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( $pp_template_id );
} elseif ( $settings['content_type'] == 'template' && !empty( $settings['templates'] ) ) {
echo \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( $settings['templates'] );
} elseif ( $settings['content_type'] == 'widget' && !empty( $settings['saved_widget'] ) ) {
echo \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( $settings['saved_widget'] );
}
}
/**
* Get Saved Widgets
*
* @param string $type Type.
*
* @return string
*/
public function get_page_template_options( $type = '' ) {
$page_templates = pp_get_page_templates( $type );
$options[-1] = __( 'Select', 'powerpack' );
if ( count( $page_templates ) ) {
foreach ( $page_templates as $id => $name ) {
$options[ $id ] = $name;
}
} else {
$options['no_template'] = __( 'No saved templates found!', 'powerpack' );
}
return $options;
}
/**
* Render offcanvas content widget output in the editor.
*
* Written as a Backbone JavaScript template and used to generate the live preview.
*
* @access protected
*/
protected function _content_template() {}
}