ol(
'overlay',
[
'label' => esc_html__( 'Overlay', 'elementor-pro' ),
'type' => Controls_Manager::SWITCHER,
'label_off' => esc_html__( 'Hide', 'elementor-pro' ),
'label_on' => esc_html__( 'Show', 'elementor-pro' ),
'default' => 'yes',
'selectors' => [
'{{WRAPPER}}' => 'pointer-events: all',
],
'separator' => 'before',
]
);
$this->add_control(
'close_button',
[
'label' => esc_html__( 'Close Button', 'elementor-pro' ),
'type' => Controls_Manager::SWITCHER,
'label_off' => esc_html__( 'Hide', 'elementor-pro' ),
'label_on' => esc_html__( 'Show', 'elementor-pro' ),
'default' => 'yes',
'selectors' => [
// Using flex to make sure that each icon type (i or SVG) will be vertically aligned.
'{{WRAPPER}} .dialog-close-button' => 'display: flex',
],
]
);
$this->add_responsive_control(
'entrance_animation',
[
'label' => esc_html__( 'Entrance Animation', 'elementor-pro' ),
'type' => Controls_Manager::ANIMATION,
'frontend_available' => true,
'separator' => 'before',
]
);
$this->add_responsive_control(
'exit_animation',
[
'label' => esc_html__( 'Exit Animation', 'elementor-pro' ),
'type' => Controls_Manager::EXIT_ANIMATION,
'frontend_available' => true,
]
);
$this->add_control(
'entrance_animation_duration',
[
'label' => esc_html__( 'Animation Duration', 'elementor-pro' ) . ' (sec)',
'type' => Controls_Manager::SLIDER,
'frontend_available' => true,
'default' => [
'size' => 1.2,
],
'range' => [
'px' => [
'min' => 0.1,
'max' => 5,
'step' => 0.1,
],
],
'selectors' => [
'{{WRAPPER}} .dialog-widget-content' => 'animation-duration: {{SIZE}}s',
],
'conditions' => [
'relation' => 'or',
'terms' => [
[
'name' => 'entrance_animation',
'operator' => '!==',
'value' => '',
],
[
'name' => 'exit_animation',
'operator' => '!==',
'value' => '',
],
],
],
]
);
$this->end_controls_section();
parent::register_controls();
$this->start_controls_section(
'section_page_style',
[
'label' => esc_html__( 'Popup', 'elementor-pro' ),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_group_control(
Group_Control_Background::get_type(),
[
'name' => 'background',
'selector' => '{{WRAPPER}} .dialog-widget-content',
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'border',
'selector' => '{{WRAPPER}} .dialog-widget-content',
]
);
$this->add_responsive_control(
'border_radius',
[
'label' => esc_html__( 'Border Radius', 'elementor-pro' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%' ],
'selectors' => [
'{{WRAPPER}} .dialog-widget-content' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}',
],
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'box_shadow',
'selector' => '{{WRAPPER}} .dialog-widget-content',
'fields_options' => [
'box_shadow_type' => [
'default' => 'yes',
],
'box_shadow' => [
'default' => [
'horizontal' => 2,
'vertical' => 8,
'blur' => 23,
'spread' => 3,
'color' => 'rgba(0,0,0,0.2)',
],
],
],
]
);
$this->end_controls_section();
$this->start_controls_section(
'section_overlay',
[
'label' => esc_html__( 'Overlay', 'elementor-pro' ),
'tab' => Controls_Manager::TAB_STYLE,
'condition' => [
'overlay' => 'yes',
],
]
);
$this->add_group_control(
Group_Control_Background::get_type(),
[
'name' => 'overlay_background',
'types' => [ 'classic', 'gradient' ],
'selector' => '{{WRAPPER}}',
'fields_options' => [
'background' => [
'default' => 'classic',
],
'color' => [
'default' => 'rgba(0,0,0,.8)',
],
],
]
);
$this->end_controls_section();
$this->start_controls_section(
'section_close_button',
[
'label' => esc_html__( 'Close Button', 'elementor-pro' ),
'tab' => Controls_Manager::TAB_STYLE,
'condition' => [
'close_button!' => '',
],
]
);
$this->add_control(
'close_button_position',
[
'label' => esc_html__( 'Position', 'elementor-pro' ),
'type' => Controls_Manager::SELECT,
'options' => [
'' => esc_html__( 'Inside', 'elementor-pro' ),
'outside' => esc_html__( 'Outside', 'elementor-pro' ),
],
'frontend_available' => true,
]
);
$this->add_responsive_control(
'close_button_vertical',
[
'label' => esc_html__( 'Vertical Position', 'elementor-pro' ),
'type' => Controls_Manager::SLIDER,
'size_units' => [ '%', 'px' ],
'range' => [
'%' => [
'max' => 100,
'min' => 0,
'step' => 0.1,
],
'px' => [
'max' => 500,
'min' => -500,
],
],
'default' => [
'unit' => '%',
],
'tablet_default' => [
'unit' => '%',
],
'mobile_default' => [
'unit' => '%',
],
'selectors' => [
'{{WRAPPER}} .dialog-close-button' => 'top: {{SIZE}}{{UNIT}}',
],
]
);
$this->add_responsive_control(
'close_button_horizontal',
[
'label' => esc_html__( 'Horizontal Position', 'elementor-pro' ),
'type' => Controls_Manager::SLIDER,
'size_units' => [ '%', 'px' ],
'range' => [
'%' => [
'max' => 100,
'min' => 0,
'step' => 0.1,
],
'px' => [
'max' => 500,
'min' => -500,
],
],
'default' => [
'unit' => '%',
],
'tablet_default' => [
'unit' => '%',
],
'mobile_default' => [
'unit' => '%',
],
'selectors' => [
'body:not(.rtl) {{WRAPPER}} .dialog-close-button' => 'right: {{SIZE}}{{UNIT}}',
'body.rtl {{WRAPPER}} .dialog-close-button' => 'left: {{SIZE}}{{UNIT}}',
],
'separator' => 'after',
]
);
$this->start_controls_tabs( 'close_button_style_tabs' );
$this->start_controls_tab(
'tab_x_button_normal',
[
'label' => esc_html__( 'Normal', 'elementor-pro' ),
]
);
$this->add_control(
'close_button_color',
[
'label' => esc_html__( 'Color', 'elementor-pro' ),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .dialog-close-button i' => 'color: {{VALUE}}',
'{{WRAPPER}} .dialog-close-button svg' => 'fill: {{VALUE}}',
],
]
);
$this->add_control(
'close_button_background_color',
[
'label' => esc_html__( 'Background Color', 'elementor-pro' ),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .dialog-close-button' => 'background-color: {{VALUE}}',
],
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'tab_x_button_hover',
[
'label' => esc_html__( 'Hover', 'elementor-pro' ),
]
);
$this->add_control(
'close_button_hover_color',
[
'label' => esc_html__( 'Color', 'elementor-pro' ),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .dialog-close-button:hover i' => 'color: {{VALUE}}',
],
]
);
$this->add_control(
'close_button_hover_background_color',
[
'label' => esc_html__( 'Background Color', 'elementor-pro' ),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .dialog-close-button:hover' => 'background-color: {{VALUE}}',
],
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->add_responsive_control(
'icon_size',
[
'label' => esc_html__( 'Size', 'elementor-pro' ),
'type' => Controls_Manager::SLIDER,
'selectors' => [
'{{WRAPPER}} .dialog-close-button' => 'font-size: {{SIZE}}{{UNIT}}',
],
'separator' => 'before',
]
);
$this->end_controls_section();
$this->start_controls_section(
'section_advanced',
[
'label' => esc_html__( 'Advanced', 'elementor-pro' ),
'tab' => Controls_Manager::TAB_ADVANCED,
]
);
$this->add_control(
'close_button_delay',
[
'label' => esc_html__( 'Show Close Button After', 'elementor-pro' ) . ' (sec)',
'type' => Controls_Manager::NUMBER,
'min' => 0.1,
'max' => 60,
'step' => 0.1,
'condition' => [
'close_button' => 'yes',
],
'frontend_available' => true,
]
);
$this->add_control(
'close_automatically',
[
'label' => esc_html__( 'Automatically Close After', 'elementor-pro' ) . ' (sec)',
'type' => Controls_Manager::NUMBER,
'min' => 0.1,
'max' => 60,
'step' => 0.1,
'frontend_available' => true,
]
);
$this->add_control(
'prevent_close_on_background_click',
[
'label' => esc_html__( 'Prevent Closing on Overlay', 'elementor-pro' ),
'type' => Controls_Manager::SWITCHER,
'frontend_available' => true,
]
);
$this->add_control(
'prevent_close_on_esc_key',
[
'label' => esc_html__( 'Prevent Closing on ESC key', 'elementor-pro' ),
'type' => Controls_Manager::SWITCHER,
'frontend_available' => true,
]
);
$this->add_control(
'prevent_scroll',
[
'label' => esc_html__( 'Disable Page Scrolling', 'elementor-pro' ),
'type' => Controls_Manager::SWITCHER,
'frontend_available' => true,
]
);
$this->add_control(
'avoid_multiple_popups',
[
'label' => esc_html__( 'Avoid Multiple Popups', 'elementor-pro' ),
'type' => Controls_Manager::SWITCHER,
'description' => esc_html__( 'If the user has seen another popup on the page hide this popup', 'elementor-pro' ),
'frontend_available' => true,
]
);
$this->add_control(
'open_selector',
[
'label' => esc_html__( 'Open By Selector', 'elementor-pro' ),
'type' => Controls_Manager::TEXT,
'placeholder' => esc_html__( '#id, .class', 'elementor-pro' ),
'description' => esc_html__( 'In order to open a popup on selector click, please set your Popup Conditions', 'elementor-pro' ),
'frontend_available' => true,
]
);
$this->add_responsive_control(
'margin',
[
'label' => esc_html__( 'Margin', 'elementor-pro' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%' ],
'separator' => 'before',
'selectors' => [
'{{WRAPPER}} .dialog-widget-content' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'padding',
[
'label' => esc_html__( 'Padding', 'elementor-pro' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => [ 'px', '%' ],
'selectors' => [
'{{WRAPPER}} .dialog-message' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_control(
'classes',
[
'label' => esc_html__( 'CSS Classes', 'elementor-pro' ),
'type' => Controls_Manager::TEXT,
'title' => esc_html__( 'Add your custom class WITHOUT the dot. e.g: my-class', 'elementor-pro' ),
'frontend_available' => true,
]
);
$this->end_controls_section();
Plugin::elementor()->controls_manager->add_custom_css_controls( $this );
}
protected function get_remote_library_config() {
$config = parent::get_remote_library_config();
$config['type'] = 'popup';
$config['default_route'] = 'templates/popups';
$config['autoImportSettings'] = true;
return $config;
}
}