addons/jet-accordion-widget.php000075500000107216151121477560012552 0ustar00 '.jet-accordion', 'toggle' => '.jet-accordion > .jet-accordion__inner > .jet-toggle', 'control' => '.jet-accordion > .jet-accordion__inner > .jet-toggle > .jet-toggle__control', 'active_control' => '.jet-accordion > .jet-accordion__inner > .jet-toggle.active-toggle > .jet-toggle__control', 'content' => '.jet-accordion > .jet-accordion__inner > .jet-toggle > .jet-toggle__content', 'label' => '.jet-toggle__label-text', 'icon' => '.jet-toggle__label-icon', ) ); $this->start_controls_section( 'section_items_data', array( 'label' => esc_html__( 'Items', 'jet-tabs' ), ) ); do_action( 'jet-engine-query-gateway/control', $this, 'toggles' ); $repeater = new Repeater(); $repeater->add_control( 'item_active', array( 'label' => esc_html__( 'Active', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'jet-tabs' ), 'label_off' => esc_html__( 'No', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', ) ); $repeater->add_control( $this->__new_icon_prefix . 'item_icon', array( 'label' => esc_html__( 'Icon', 'jet-tabs' ), 'type' => Controls_Manager::ICONS, 'label_block' => false, 'skin' => 'inline', 'fa4compatibility' => 'item_icon', 'default' => array( 'value' => 'fas fa-plus', 'library' => 'fa-solid', ), ) ); $repeater->add_control( $this->__new_icon_prefix . 'item_active_icon', array( 'label' => esc_html__( 'Active Icon', 'jet-tabs' ), 'type' => Controls_Manager::ICONS, 'label_block' => false, 'skin' => 'inline', 'fa4compatibility' => 'item_active_icon', 'default' => array( 'value' => 'fas fa-minus', 'library' => 'fa-solid', ), ) ); $repeater->add_control( 'item_label', array( 'label' => esc_html__( 'Label', 'jet-tabs' ), 'type' => Controls_Manager::TEXT, 'default' => esc_html__( 'New Tab', 'jet-tabs' ), 'dynamic' => array( 'active' => true, ), ) ); $repeater->add_control( 'content_type', array( 'label' => esc_html__( 'Content Type', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'template', 'options' => array( 'template' => esc_html__( 'Template', 'jet-tabs' ), 'editor' => esc_html__( 'Editor', 'jet-tabs' ), ), 'label_block' => 'true', ) ); $repeater->add_control( 'item_template_id', array( 'label' => esc_html__( 'Choose Template', 'jet-tabs' ), 'type' => 'jet-query', 'query_type' => 'elementor_templates', 'edit_button' => array( 'active' => true, 'label' => esc_html__( 'Edit Template', 'jet-tabs' ), ), 'condition' => array( 'content_type' => 'template', ) ) ); $repeater->add_control( 'item_editor_content', array( 'label' => esc_html__( 'Content', 'jet-tabs' ), 'type' => Controls_Manager::WYSIWYG, 'default' => esc_html__( 'Tab Item Content', 'jet-tabs' ), 'dynamic' => array( 'active' => true, ), 'condition' => array( 'content_type' => 'editor', ) ) ); $repeater->add_control( 'control_id', array( 'label' => esc_html__( 'Control CSS ID', 'jet-tabs' ), 'type' => Controls_Manager::TEXT, 'dynamic' => array( 'active' => true, ), ) ); $repeater->add_control( 'item_custom_css_class', array( 'label' => esc_html__( 'Item Custom CSS Class', 'jet-tabs' ), 'type' => Controls_Manager::TEXT, 'dynamic' => array( 'active' => true, ), ) ); $this->add_control( 'toggles', array( 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'default' => array( array( 'item_label' => esc_html__( 'Toggle #1', 'jet-tabs' ), ), array( 'item_label' => esc_html__( 'Toggle #2', 'jet-tabs' ), ), array( 'item_label' => esc_html__( 'Toggle #3', 'jet-tabs' ), ), ), 'title_field' => '{{{ item_label }}}', ) ); $this->end_controls_section(); $this->start_controls_section( 'section_settings_data', array( 'label' => esc_html__( 'Settings', 'jet-tabs' ), ) ); $this->add_control( 'item_html_tag', array( 'label' => esc_html__( 'HTML Tag', 'jet-tabs' ), 'description' => esc_html__( 'Select the HTML Tag for the Item\'s label', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'options' => $this->get_available_item_html_tags(), 'default' => 'div', ) ); $this->add_control( 'collapsible', array( 'label' => esc_html__( 'Collapsible', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'jet-tabs' ), 'label_off' => esc_html__( 'No', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', ) ); $this->add_control( 'show_effect', array( 'label' => esc_html__( 'Show Effect', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'move-up', 'options' => array( 'none' => esc_html__( 'None', 'jet-tabs' ), 'fade' => esc_html__( 'Fade', 'jet-tabs' ), 'zoom-in' => esc_html__( 'Zoom In', 'jet-tabs' ), 'zoom-out' => esc_html__( 'Zoom Out', 'jet-tabs' ), 'move-up' => esc_html__( 'Move Up', 'jet-tabs' ), 'fall-perspective' => esc_html__( 'Fall Perspective', 'jet-tabs' ), ), ) ); $this->add_control( 'ajax_template', array( 'label' => esc_html__( 'Use Ajax Loading for Template', 'jet-tabs' ), 'description' => esc_html__( 'Note: Do not use with query or dynamic data', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'jet-tabs' ), 'label_off' => esc_html__( 'Off', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', ) ); $this->add_control( 'faq_schema', array( 'label' => esc_html__( 'FAQ Schema', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'separator' => 'before', ) ); $this->add_control( 'content_scrolling', array( 'label' => esc_html__( 'Scrolling to the Content', 'jet-tabs' ), 'description' => esc_html__( 'Scrolling to the Content after Switching Tab Control', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'jet-tabs' ), 'label_off' => esc_html__( 'Off', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', ) ); $this->add_control( 'content_scrolling_offset', array( 'label' => esc_html__( 'Scrolling offset (px)', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'range' => array( 'px' => array( 'min' => 0, 'max' => 100, ), ), 'default' => array( 'unit' => 'px', 'size' => 0, ), 'condition' => array( 'content_scrolling' => 'yes' ) ) ); $this->add_control( 'content_scrolling_delay', array( 'label' => esc_html__( 'Scroll animation speed (ms)', 'jet-tabs' ), 'type' => Controls_Manager::NUMBER, 'default' => 500, 'min' => 100, 'max' => 10000, 'step' => 10, 'condition' => array( 'content_scrolling' => 'yes' ), ) ); $this->end_controls_section(); $this->__start_controls_section( 'section_accordion_container_style', array( 'label' => esc_html__( 'Accordion Container', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'instance_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['instance'], ), 25 ); $this->__add_responsive_control( 'instance_padding', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['instance'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'instance_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['instance'], ), 25 ); $this->__add_control( 'instance_border_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['instance'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'instance_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['instance'], ), 100 ); $this->__end_controls_section(); /** * Toggle Style Section */ $this->__start_controls_section( 'section_toggle_style', array( 'label' => esc_html__( 'Toggle', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'toggle_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['toggle'], ), 25 ); $this->__add_responsive_control( 'toggle_padding', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['toggle'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_responsive_control( 'toggle_margin', array( 'label' => esc_html__( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['toggle'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'toggle_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'selector' => '{{WRAPPER}} ' . $css_scheme['toggle'], ), 25 ); $this->__add_control( 'toggle_border_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['toggle'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'toggle_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['toggle'], ), 100 ); $this->__end_controls_section(); /** * Toggle Control Style Section */ $this->__start_controls_section( 'section_toggle_control_style', array( 'label' => esc_html__( 'Toggle Control', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_control( 'toggle_icon_heading', array( 'label' => esc_html__( 'Icon ', 'jet-tabs' ), 'type' => Controls_Manager::HEADING, ), 25 ); $this->__add_control( 'toggle_icon_position', array( 'label' => esc_html__( 'Position', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'options' => array( 'left' => array( 'title' => esc_html__( 'Left', 'jet-tabs' ), 'icon' => 'eicon-h-align-left', ), 'right' => array( 'title' => esc_html__( 'Right', 'jet-tabs' ), 'icon' => 'eicon-h-align-right', ), ), 'default' => 'left', 'label_block' => false, 'classes' => 'jet-tabs-text-align-control', ), 25 ); $this->__add_responsive_control( 'toggle_icon_margin', array( 'label' => esc_html__( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ' ' . $css_scheme['icon'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_responsive_control( 'toggle_label_aligment', array( 'label' => esc_html__( 'Alignment', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'flex-start', 'options' => array( 'flex-start' => array( 'title' => esc_html__( 'Start', 'jet-tabs' ), 'icon' => ! is_rtl() ? 'fa fa-arrow-left' : 'fa fa-arrow-right', ), 'center' => array( 'title' => esc_html__( 'Center', 'jet-tabs' ), 'icon' => 'fa fa-align-center', ), 'space-between' => array( 'title' => esc_html__( 'Justify', 'jet-tabs' ), 'icon' => 'fa fa-align-justify', ), 'flex-end' => array( 'title' => esc_html__( 'End', 'jet-tabs' ), 'icon' => ! is_rtl() ? 'fa fa-arrow-right' : 'fa fa-arrow-left', ), ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] => 'justify-content: {{VALUE}};', ), 'separator' => 'before', ), 25 ); $this->__add_responsive_control( 'toggle_label_text_aligment', array( 'label' => esc_html__( 'Text Alignment', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'left', 'options' => array( 'left' => array( 'title' => esc_html__( 'Left', 'jet-tabs' ), 'icon' => 'eicon-text-align-left', ), 'center' => array( 'title' => esc_html__( 'Center', 'jet-tabs' ), 'icon' => 'eicon-text-align-center', ), 'right' => array( 'title' => esc_html__( 'Right', 'jet-tabs' ), 'icon' => 'eicon-text-align-right', ), ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['label'] => 'text-align: {{VALUE}};', ), ), 25 ); $this->__start_controls_tabs( 'toggle_general_styles' ); $this->__start_controls_tab( 'toggle_control_normal', array( 'label' => esc_html__( 'Normal', 'jet-tabs' ), ) ); $this->__add_control( 'toggle_label_color', array( 'label' => esc_html__( 'Text Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'global' => array( 'default' => Global_Colors::COLOR_TEXT, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ' ' . $css_scheme['label'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'toggle_label_typography', 'selector' => '{{WRAPPER}} '. $css_scheme['control'] . ' ' . $css_scheme['label'], 'global' => array( 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ), ), 50 ); $this->__add_group_control( \Jet_Tabs_Group_Control_Box_Style::get_type(), array( 'label' => esc_html__( 'Icon', 'jet-tabs' ), 'name' => 'toggle_icon_box', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . ' ' . $css_scheme['icon'] . ' .icon-normal', ), 25 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'toggle_control_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'], ), 25 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'toggle_control_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'], ), 25 ); $this->__end_controls_tab(); $this->__start_controls_tab( 'toggle_control_hover', array( 'label' => esc_html__( 'Hover', 'jet-tabs' ), ) ); $this->__add_control( 'toggle_label_color_hover', array( 'label' => esc_html__( 'Text Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'global' => array( 'default' => Global_Colors::COLOR_TEXT, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ':hover ' . $css_scheme['label'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'toggle_label_typography_hover', 'selector' => '{{WRAPPER}} '. $css_scheme['control'] . ':hover ' . $css_scheme['label'], 'global' => array( 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ), ), 50 ); $this->__add_group_control( \Jet_Tabs_Group_Control_Box_Style::get_type(), array( 'label' => esc_html__( 'Icon', 'jet-tabs' ), 'name' => 'toggle_icon_box_hover', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . ':hover ' . $css_scheme['icon'] . ' .icon-normal', ), 25 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'toggle_control_background_hover', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . ':hover', ), 25 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'toggle_control_border_hover', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . ':hover', ), 25 ); $this->__end_controls_tab(); $this->__start_controls_tab( 'toggle_control_active', array( 'label' => esc_html__( 'Active', 'jet-tabs' ), ) ); $this->__add_control( 'toggle_label_color_active', array( 'label' => esc_html__( 'Text Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'global' => array( 'default' => Global_Colors::COLOR_TEXT, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['active_control'] . ' ' . $css_scheme['label'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'toggle_label_typography_active', 'selector' => '{{WRAPPER}} '. $css_scheme['active_control'] . ' ' . $css_scheme['label'], 'global' => array( 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ), ), 50 ); $this->__add_group_control( \Jet_Tabs_Group_Control_Box_Style::get_type(), array( 'label' => esc_html__( 'Icon', 'jet-tabs' ), 'name' => 'toggle_icon_box_active', 'selector' => '{{WRAPPER}} ' . $css_scheme['toggle'] . '.active-toggle ' . $css_scheme['icon'] . ' .icon-active', ), 25 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'toggle_control_background_active', 'selector' => '{{WRAPPER}} ' . $css_scheme['toggle'] . '.active-toggle > .jet-toggle__control', ), 25 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'toggle_control_border_active', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['toggle'] . '.active-toggle > .jet-toggle__control', ), 25 ); $this->__end_controls_tab(); $this->__end_controls_tabs(); $this->__add_responsive_control( 'toggle_control_padding', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'separator' => 'before', 'custom_units' => true, ), 50 ); $this->__add_control( 'toggle_control_border_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'toggle_control_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'], ), 100 ); $this->__end_controls_section(); /** * Toggle Content Style Section */ $this->__start_controls_section( 'section_tabs_content_style', array( 'label' => esc_html__( 'Toggle Content', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'tabs_content_typography', 'selector' => '{{WRAPPER}} ' . $css_scheme['content'], ), 50 ); $this->__add_control( 'tabs_content_text_color', array( 'label' => esc_html__( 'Text color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content'] => 'color: {{VALUE}};', ), ), 25 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'tabs_content_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['content'], ), 25 ); $this->__add_responsive_control( 'tabs_content_padding', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content'] . ' > .jet-toggle__content-inner' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_responsive_control( 'tabs_content_margin', array( 'label' => esc_html__( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'tabs_content_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['content'], ), 25 ); $this->__add_responsive_control( 'tabs_content_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'tabs_content_box_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['content'], ), 100 ); $this->__add_control( 'tabs_content_loader_style_heading', array( 'label' => esc_html__( 'Loader Styles', 'jet-tabs' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', 'condition' => array( 'ajax_template' => 'yes', ), ), 25 ); $this->__add_control( 'tabs_content_loader_color', array( 'label' => esc_html__( 'Loader color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content'] . ' .jet-tabs-loader' => 'border-color: {{VALUE}}; border-top-color: white;', ), 'condition' => array( 'ajax_template' => 'yes', ), ), 25 ); $this->__end_controls_section(); } /** * [render description] * @return [type] [description] */ protected function render() { $this->__context = 'render'; $toggles = $this->get_settings_for_display( 'toggles' ); $toggles = apply_filters( 'jet-tabs/widget/loop-items', $toggles, 'toggles', $this ); $faq_schema = $this->get_settings_for_display( 'faq_schema' ); $id_int = substr( $this->get_id_int(), 0, 3 ); $show_effect = $this->get_settings( 'show_effect' ); $ajax_template = filter_var( $this->get_settings( 'ajax_template' ), FILTER_VALIDATE_BOOLEAN ); $settings = array( 'collapsible' => filter_var( $this->get_settings( 'collapsible' ), FILTER_VALIDATE_BOOLEAN ), 'ajaxTemplate' => $ajax_template, 'switchScrolling' => filter_var( $this->get_settings( 'content_scrolling' ), FILTER_VALIDATE_BOOLEAN ), 'switchScrollingOffset' => !empty( $this->get_settings_for_display( 'content_scrolling_offset' ) ) ? $this->get_settings_for_display( 'content_scrolling_offset' ) : 0, 'switchScrollingDelay' => !empty( $this->get_settings_for_display( 'content_scrolling_delay' ) ) ? $this->get_settings_for_display( 'content_scrolling_delay' ) : 500 ); $this->add_render_attribute( 'instance', array( 'class' => array( 'jet-accordion', ), 'data-settings' => json_encode( $settings ), ) ); $toggle_icon_position = $this->get_settings( 'toggle_icon_position' ); $toggle_item_label_tag = ! empty( $this->get_settings( 'item_html_tag' ) ) ? $this->get_settings( 'item_html_tag' ) : 'div'; $toggle_item_label_tag = $this->validate_html_tag( $toggle_item_label_tag ); ?>
get_render_attribute_string( 'instance' ); ?>>
$item ) { do_action( 'jet-engine-query-gateway/do-item', $item ); $toggle_count = $index + 1; $toggle_setting_key = $this->get_repeater_setting_key( 'jet_toggle', 'toggles', $index ); $toggle_control_setting_key = $this->get_repeater_setting_key( 'jet_toggle_control', 'toggles', $index ); $toggle_content_setting_key = $this->get_repeater_setting_key( 'jet_toggle_content', 'toggles', $index ); $is_item_active = filter_var( $item['item_active'], FILTER_VALIDATE_BOOLEAN ); $toggle_control_id = ! empty( $item['control_id'] ) ? esc_attr( $item['control_id'] ) : 'jet-toggle-control-' . $id_int . $toggle_count; $this->add_render_attribute( $toggle_control_setting_key, array( 'id' => $toggle_control_id, 'class' => array( 'jet-toggle__control', 'elementor-menu-anchor', ), 'data-toggle' => $toggle_count, 'role' => 'button', 'tabindex' => 0, 'aria-controls' => 'jet-toggle-content-' . $id_int . $toggle_count, 'aria-expanded' => $is_item_active ? 'true' : 'false', 'data-template-id' => ! empty( $item['item_template_id'] ) ? $item['item_template_id'] : 'false', ) ); $toggle_control_icon_html = ''; $normal_icon_html = $this->__get_icon( 'item_icon', $item, '%s' ); $active_icon_html = $this->__get_icon( 'item_active_icon', $item, '%s' ); if ( ! empty( $normal_icon_html ) && ! empty( $active_icon_html ) ) { $toggle_control_icon_html .= sprintf( '
%1$s%2$s
', $normal_icon_html, $active_icon_html, $toggle_icon_position ); } $toggle_control_label_html = ''; if ( ! empty( $item['item_label'] ) ) { $toggle_control_label_html = sprintf( '<%1$s class="jet-toggle__label-text">%2$s', esc_attr( $toggle_item_label_tag ), $item['item_label'] ); } $this->add_render_attribute( $toggle_content_setting_key, array( 'id' => 'jet-toggle-content-' . $id_int . $toggle_count, 'class' => array( 'jet-toggle__content' ), 'data-toggle' => $toggle_count, 'role' => 'region', 'data-template-id' => ! empty( $item['item_template_id'] ) ? $item['item_template_id'] : 'false', ) ); $content_html = ''; switch ( $item[ 'content_type' ] ) { case 'template': if ( ! empty( $item['item_template_id'] ) ) { // for multi-language plugins $template_id = apply_filters( 'jet-tabs/widgets/template_id', $item['item_template_id'], $this ); $template_content = jet_tabs()->elementor()->frontend->get_builder_content( $template_id ); if ( ! empty( $template_content ) ) { if ( ! $ajax_template ) { $content_html .= $template_content; } else { $content_html .= '
'; } if ( jet_tabs_integration()->is_edit_mode() ) { $link = add_query_arg( array( 'elementor' => '', 'jet-tabs-canvas' => '', ), get_permalink( $item['item_template_id'] ) ); $content_html .= sprintf( '
%s
', $link, esc_html__( 'Edit Template', 'jet-tabs' ) ); } } else { $content_html = $this->no_template_content_message(); } } else { $content_html = $this->no_templates_message(); } break; case 'editor': $content_html = $this->parse_text_editor( $item['item_editor_content'] ); break; } $item_custom_css_class = ! empty( $item['item_custom_css_class'] ) ? esc_attr( $item['item_custom_css_class'] ) : ''; $this->add_render_attribute( $toggle_setting_key, array( 'class' => array( $item_custom_css_class, 'jet-accordion__item', 'jet-toggle', 'jet-toggle-' . $show_effect . '-effect', $is_item_active ? 'active-toggle' : '', ), ) ); ?>
get_render_attribute_string( $toggle_setting_key ); // phpcs:ignore ?>>
get_render_attribute_string( $toggle_control_setting_key ); // phpcs:ignore ?>>
get_render_attribute_string( $toggle_content_setting_key ); // phpcs:ignore ?>>
add_item( $item['item_label'], $content_html ); } } do_action( 'jet-engine-query-gateway/reset-item' ); ?>
' . esc_html__( 'You Haven’t Saved Templates Yet.', 'jet-tabs' ) . '
'; } /** * [no_templates_message description] * @return [type] [description] */ public function no_templates_message() { $message = '' . esc_html__( 'Template is not defined. ', 'jet-tabs' ) . ''; $link = add_query_arg( array( 'post_type' => 'elementor_library', 'action' => 'elementor_new_post', '_wpnonce' => wp_create_nonce( 'elementor_action_new_post' ), 'template_type' => 'section', ), esc_url( admin_url( '/edit.php' ) ) ); $new_link = '' . esc_html__( 'Select an existing template or create a ', 'jet-tabs' ) . '' . esc_html__( 'new one', 'jet-tabs' ) . '' ; return sprintf( '
%1$s%2$s
', $message, jet_tabs_integration()->in_elementor() ? $new_link : '' ); } /** * [no_template_content_message description] * @return [type] [description] */ public function no_template_content_message() { $message = '' . esc_html__( 'The toggles are working. Please, note, that you have to add a template to the library in order to be able to display it inside the toggles.', 'jet-tabs' ) . ''; return sprintf( '
%1$s
', $message ); } /** * [get_template_edit_link description] * @param [type] $template_id [description] * @return [type] [description] */ public function get_template_edit_link( $template_id ) { $link = add_query_arg( 'elementor', '', get_permalink( $template_id ) ); return ' ' . esc_html__( 'Edit Template', 'jet-tabs' ) . ''; } } addons/jet-image-accordion-widget.php000075500000103776151121477560013641 0ustar00 '.jet-image-accordion', 'list' => '.jet-image-accordion__list', 'item' => '.jet-image-accordion__item', 'item_inner' => '.jet-image-accordion__inner', 'image' => '.jet-image-accordion__image-instance', 'content_container' => '.jet-image-accordion__content', 'title_default' => '.jet-image-accordion__title-default', 'title' => '.jet-image-accordion__title', 'desc' => '.jet-image-accordion__desc', 'button_container' => '.jet-image-accordion__button-container', 'button' => '.jet-image-accordion__button', ) ); $this->start_controls_section( 'section_items_data', array( 'label' => esc_html__( 'Items', 'jet-tabs' ), ) ); do_action( 'jet-engine-query-gateway/control', $this, 'item_list' ); $repeater = new Repeater(); $repeater->add_control( 'item_active', array( 'label' => esc_html__( 'Active', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'jet-tabs' ), 'label_off' => esc_html__( 'No', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', ) ); $repeater->add_control( 'item_image', array( 'label' => esc_html__( 'Image', 'jet-tabs' ), 'type' => Controls_Manager::MEDIA, 'dynamic' => array( 'active' => true ), 'default' => array( 'url' => Utils::get_placeholder_image_src(), ), ) ); $repeater->add_control( 'item_title', array( 'label' => esc_html__( 'Title', 'jet-tabs' ), 'type' => Controls_Manager::TEXT, 'dynamic' => array( 'active' => true ), ) ); $repeater->add_control( 'item_desc', array( 'label' => esc_html__( 'Description', 'jet-tabs' ), 'type' => Controls_Manager::TEXTAREA, 'dynamic' => array( 'active' => true ), ) ); $repeater->add_control( 'item_link_text', array( 'label' => esc_html__( 'Button text', 'jet-tabs' ), 'type' => Controls_Manager::TEXT, 'default' => esc_html__( 'More', 'jet-tabs' ), 'dynamic' => array( 'active' => true ), ) ); $repeater->add_control( 'item_link', array( 'label' => esc_html__( 'Link', 'jet-tabs' ), 'type' => Controls_Manager::URL, 'placeholder' => 'http://your-link.com', 'dynamic' => array( 'active' => true ), 'default' => array( 'url' => '#', ), ) ); $this->add_control( 'item_list', array( 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'default' => array( array( 'item_image' => array( 'url' => Utils::get_placeholder_image_src(), ), 'item_title' => esc_html__( 'Item #1', 'jet-tabs' ), 'item_desc' => esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'jet-tabs' ), ), array( 'item_image' => array( 'url' => Utils::get_placeholder_image_src(), ), 'item_title' => esc_html__( 'Item #2', 'jet-tabs' ), 'item_desc' => esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'jet-tabs' ), ), array( 'item_image' => array( 'url' => Utils::get_placeholder_image_src(), ), 'item_title' => esc_html__( 'Item #3', 'jet-tabs' ), 'item_desc' => esc_html__( 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'jet-tabs' ), ), ), 'title_field' => '{{{ item_title }}}', ) ); $this->end_controls_section(); $this->start_controls_section( 'section_settings', array( 'label' => esc_html__( 'Settings', 'jet-tabs' ), ) ); $this->add_control( 'title_display', array( 'label' => esc_html__( 'Title Display', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'options' => array( 'on_hover' => esc_html__( 'On hover', 'jet-tabs' ), 'on_default_state' => esc_html__( 'On default state', 'jet-tabs' ), 'on_both_states' => esc_html__( 'On default state & on hover', 'jet-tabs' ), ), 'default' => 'on_hover', ) ); $this->add_control( 'item_html_tag', array( 'label' => esc_html__( 'Title HTML Tag', 'jet-tabs' ), 'description' => esc_html__( 'Select the HTML Tag for the Item\'s title', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'options' => $this->get_available_item_html_tags(), 'default' => 'h5', ) ); $this->add_control( 'img_size', array( 'type' => 'select', 'label' => esc_html__( 'Images Size', 'jet-tabs' ), 'default' => 'full', 'options' => $this->get_image_sizes(), ) ); $this->add_responsive_control( 'instance_orientation', array( 'label' => esc_html__( 'Orientation', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'vertical', 'options' => array( 'vertical' => esc_html__( 'Vertical', 'jet-tabs' ), 'horizontal' => esc_html__( 'Horizontal', 'jet-tabs' ), ), 'selectors_dictionary' => array( 'vertical' => 'flex-direction: row', 'horizontal' => 'flex-direction: column', ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['list'] => '{{VALUE}}' ), ) ); $this->add_control( 'active_size', array( 'label' => esc_html__( 'Active Size(%)', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'range' => array( '%' => array( 'min' => 50, 'max' => 100, ), ), 'default' => array( 'unit' => '%', 'size' => 50, ), ) ); $this->add_control( 'anim_duration', array( 'label' => esc_html__( 'Animation Duration', 'jet-tabs' ), 'type' => Controls_Manager::NUMBER, 'default' => 500, 'min' => 100, 'max' => 3000, 'step' => 100, ) ); $this->add_control( 'anim_ease', array( 'label' => esc_html__( 'Easing', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'circ', 'options' => array( 'sine' => esc_html__( 'Sine', 'jet-tabs' ), 'quint' => esc_html__( 'Quint', 'jet-tabs' ), 'cubic' => esc_html__( 'Cubic', 'jet-tabs' ), 'expo' => esc_html__( 'Expo', 'jet-tabs' ), 'circ' => esc_html__( 'Circ', 'jet-tabs' ), 'back' => esc_html__( 'Back', 'jet-tabs' ), ), ) ); $this->end_controls_section(); $this->__start_controls_section( 'section_container_style', array( 'label' => esc_html__( 'Container', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_responsive_control( 'instance_height', array( 'label' => esc_html__( 'Height(px)', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'range' => array( 'px' => array( 'min' => 100, 'max' => 1000, ), ), 'default' => array( 'unit' => 'px', 'size' => 600, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['list'] => 'height: {{SIZE}}{{UNIT}}', ), ), 25 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'instance_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['instance'], ), 100 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'instance_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['instance'], ), 50 ); $this->__add_control( 'instance_border_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['instance'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'instance_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['instance'], ), 100 ); $this->__end_controls_section(); $this->__start_controls_section( 'section_item_style', array( 'label' => esc_html__( 'Item', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_responsive_control( 'item_gutter', array( 'label' => esc_html__( 'Item Gutter', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'range' => array( 'px' => array( 'min' => 0, 'max' => 50, ), ), 'default' => array( 'unit' => 'px', 'size' => 4, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['item'] => 'margin: calc({{SIZE}}{{UNIT}} / 2);', '{{WRAPPER}} ' . $css_scheme['list'] => 'margin: calc(-{{SIZE}}{{UNIT}} / 2);', ), ), 25 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'item_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['item'], ), 100 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'item_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['item'], ), 50 ); $this->__add_control( 'item_border_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['item'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'item_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['item'], ), 100 ); $this->__add_control( 'item_cover_style_heading', array( 'label' => esc_html__( 'Cover Styles', 'jet-tabs' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ), 50 ); $this->__start_controls_tabs( 'item_cover_tabs_styles', 50 ); $this->__start_controls_tab( 'item_cover_normal', array( 'label' => esc_html__( 'Normal', 'jet-tabs' ), ), 50 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'item_cover_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['item'] . ':before', ), 25 ); $this->__end_controls_tab( 50 ); $this->__start_controls_tab( 'item_cover_active', array( 'label' => esc_html__( 'Active', 'jet-tabs' ), ), 50 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'item_cover_background_active', 'selector' => '{{WRAPPER}} ' . $css_scheme['item'] . '.active-accordion:before', ), 50 ); $this->__end_controls_tab( 50 ); $this->__end_controls_tabs( 50 ); $this->__end_controls_section(); /** * Content Style Section */ $this->__start_controls_section( 'section_content_style', array( 'label' => esc_html__( 'Content', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_responsive_control( 'items_alignment', array( 'label' => esc_html__( 'Alignment', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'center', 'options' => array( 'flex-start' => array( 'title' => esc_html__( 'Top', 'jet-tabs' ), 'icon' => 'eicon-v-align-top', ), 'center' => array( 'title' => esc_html__( 'Center', 'jet-tabs' ), 'icon' => 'eicon-v-align-middle', ), 'flex-end' => array( 'title' => esc_html__( 'Bottom', 'jet-tabs' ), 'icon' => 'eicon-v-align-bottom', ), ), 'selectors' => array( '{{WRAPPER}} '. $css_scheme['content_container'] => 'justify-content: {{VALUE}};', ), ), 25 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'item_content_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['content_container'], ), 50 ); $this->__add_responsive_control( 'item_content_padding', array( 'label' => __( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content_container'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__end_controls_section(); /** * Title Default Style Section */ $this->__start_controls_section( 'section_title_default_style', array( 'label' => esc_html__( 'Title (Default)', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_responsive_control( 'title_default_horizontal_alignment', array( 'label' => esc_html__( 'Horizontal Alignment', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'center', 'options' => array( 'left' => array( 'title' => esc_html__( 'Left', 'jet-tabs' ), 'icon' => 'eicon-h-align-left', ), 'center' => array( 'title' => esc_html__( 'Center', 'jet-tabs' ), 'icon' => 'eicon-h-align-center', ), 'right' => array( 'title' => esc_html__( 'Right', 'jet-tabs' ), 'icon' => 'eicon-h-align-right', ), ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['title_default'] => 'justify-content: {{VALUE}};', ), ), 25 ); $this->__add_responsive_control( 'title_default_vertical_alignment', array( 'label' => esc_html__( 'Vertical Alignment', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'flex-start', 'options' => array( 'flex-start' => array( 'title' => esc_html__( 'Top', 'jet-tabs' ), 'icon' => 'eicon-v-align-top', ), 'center' => array( 'title' => esc_html__( 'Center', 'jet-tabs' ), 'icon' => 'eicon-v-align-middle', ), 'flex-end' => array( 'title' => esc_html__( 'Bottom', 'jet-tabs' ), 'icon' => 'eicon-v-align-bottom', ), ), 'selectors' => array( '{{WRAPPER}} '. $css_scheme['title_default'] => 'align-self: {{VALUE}};', ), ), 25 ); $this->__add_control( 'title_default_color', array( 'label' => esc_html__( 'Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['title_default'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'title_default_typography', 'selector' => '{{WRAPPER}} ' . $css_scheme['title_default'] , 'global' => array( 'default' => Global_Typography::TYPOGRAPHY_TEXT, ), ), 50 ); $this->__add_responsive_control( 'title_default_padding', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['title_default'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 100 ); $this->__add_responsive_control( 'title_default_margin', array( 'label' => esc_html__( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['title_default'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__end_controls_section(); /** * Title Style Section */ $this->__start_controls_section( 'section_title_style', array( 'label' => esc_html__( 'Title', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_responsive_control( 'title_alignment', array( 'label' => esc_html__( 'Alignment', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'left', 'options' => array( 'left' => array( 'title' => esc_html__( 'Left', 'jet-tabs' ), 'icon' => 'eicon-h-align-left', ), 'center' => array( 'title' => esc_html__( 'Center', 'jet-tabs' ), 'icon' => 'eicon-h-align-center', ), 'right' => array( 'title' => esc_html__( 'Right', 'jet-tabs' ), 'icon' => 'eicon-h-align-right', ), ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['title'] => 'text-align: {{VALUE}};', ), 'classes' => 'jet-elements-text-align-control', ), 25 ); $this->__add_control( 'title_color', array( 'label' => esc_html__( 'Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['title'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'title_typography', 'selector' => '{{WRAPPER}} ' . $css_scheme['title'], 'global' => array( 'default' => Global_Typography::TYPOGRAPHY_TEXT, ), ), 50 ); $this->__add_responsive_control( 'title_padding', array( 'label' => __( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['title'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 100 ); $this->__add_responsive_control( 'title_margin', array( 'label' => __( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['title'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__end_controls_section(); /** * Description Style Section */ $this->__start_controls_section( 'section_desc_style', array( 'label' => esc_html__( 'Description', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_responsive_control( 'desc_alignment', array( 'label' => esc_html__( 'Alignment', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'left', 'options' => array( 'left' => array( 'title' => esc_html__( 'Left', 'jet-tabs' ), 'icon' => 'eicon-h-align-left', ), 'center' => array( 'title' => esc_html__( 'Center', 'jet-tabs' ), 'icon' => 'eicon-h-align-center', ), 'right' => array( 'title' => esc_html__( 'Right', 'jet-tabs' ), 'icon' => 'eicon-h-align-right', ), ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['desc'] => 'text-align: {{VALUE}};', ), 'classes' => 'jet-elements-text-align-control', ), 25 ); $this->__add_control( 'desc_color', array( 'label' => esc_html__( 'Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['desc'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'desc_typography', 'selector' => '{{WRAPPER}} ' . $css_scheme['desc'], 'global' => array( 'default' => Global_Typography::TYPOGRAPHY_TEXT, ), ), 50 ); $this->__add_responsive_control( 'desc_padding', array( 'label' => __( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['desc'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 100 ); $this->__add_responsive_control( 'desc_margin', array( 'label' => __( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['desc'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__end_controls_section(); /** * Action Button Style Section */ $this->__start_controls_section( 'section_action_button_style', array( 'label' => esc_html__( 'Action Button', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_responsive_control( 'button_alignment', array( 'label' => esc_html__( 'Alignment', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'flex-start', 'options' => array( 'flex-start' => array( 'title' => ! is_rtl() ? esc_html__( 'Left', 'jet-tabs' ) : esc_html__( 'Right', 'jet-tabs' ), 'icon' => ! is_rtl() ? 'eicon-h-align-left' : 'eicon-h-align-right', ), 'center' => array( 'title' => esc_html__( 'Center', 'jet-tabs' ), 'icon' => 'eicon-h-align-center', ), 'flex-end' => array( 'title' => ! is_rtl() ? esc_html__( 'Right', 'jet-tabs' ) : esc_html__( 'Left', 'jet-tabs' ), 'icon' => ! is_rtl() ? 'eicon-h-align-right' : 'eicon-h-align-left', ), ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['button'] => 'align-self: {{VALUE}};', ), ), 25 ); $this->__add_responsive_control( 'button_padding', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['button'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_responsive_control( 'button_margin', array( 'label' => __( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['button'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__start_controls_tabs( 'tabs_button_style' ); $this->__start_controls_tab( 'tab_button_normal', array( 'label' => esc_html__( 'Normal', 'jet-tabs' ), ) ); $this->__add_control( 'button_color', array( 'label' => esc_html__( 'Text Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['button'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_control( 'button_bg_color', array( 'label' => esc_html__( 'Background Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'global' => array( 'default' => Global_Colors::COLOR_PRIMARY, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['button'] => 'background-color: {{VALUE}}', ), ), 25 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'button_typography', 'selector' => '{{WRAPPER}} ' . $css_scheme['button'], 'global' => array( 'default' => Global_Typography::TYPOGRAPHY_ACCENT, ), ), 50 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'button_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['button'], ), 50 ); $this->__add_responsive_control( 'button_border_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['button'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'button_box_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['button'], ), 100 ); $this->__end_controls_tab(); $this->__start_controls_tab( 'tab_button_hover', array( 'label' => esc_html__( 'Hover', 'jet-tabs' ), ) ); $this->__add_control( 'button_hover_color', array( 'label' => esc_html__( 'Text Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['button'] . ':hover' => 'color: {{VALUE}}', ), ), 25 ); $this->__add_control( 'primary_button_hover_bg_color', array( 'label' => esc_html__( 'Background Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['button'] . ':hover' => 'background-color: {{VALUE}}', ), ), 25 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'button_hover_typography', 'selector' => '{{WRAPPER}} ' . $css_scheme['button'] . ':hover', ), 50 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'button_hover_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['button'] . ':hover', ), 50 ); $this->__add_responsive_control( 'button_hover_border_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['button'] . ':hover' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'button_hover_box_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['button'] . ':hover', ), 100 ); $this->__end_controls_tab(); $this->__end_controls_tabs(); $this->__end_controls_section(); /** * Order Style Section */ $this->__start_controls_section( 'section_order_style', array( 'label' => esc_html__( 'Content Order and Alignment', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_control( 'title_order', array( 'label' => esc_html__( 'Title Order', 'jet-tabs' ), 'type' => Controls_Manager::NUMBER, 'default' => 1, 'min' => 1, 'max' => 3, 'step' => 1, 'selectors' => array( '{{WRAPPER}} '. $css_scheme['title'] => 'order: {{VALUE}};', ), ), 25 ); $this->__add_control( 'desc_order', array( 'label' => esc_html__( 'Description Order', 'jet-tabs' ), 'type' => Controls_Manager::NUMBER, 'default' => 2, 'min' => 1, 'max' => 3, 'step' => 1, 'selectors' => array( '{{WRAPPER}} '. $css_scheme['desc'] => 'order: {{VALUE}};', ), ), 25 ); $this->__add_control( 'button_order', array( 'label' => esc_html__( 'Button Order', 'jet-tabs' ), 'type' => Controls_Manager::NUMBER, 'default' => 3, 'min' => 1, 'max' => 3, 'step' => 1, 'selectors' => array( '{{WRAPPER}} '. $css_scheme['button'] => 'order: {{VALUE}};', ), ), 25 ); $this->__end_controls_section(); } /** * [render description] * @return [type] [description] */ protected function render() { $this->__context = 'render'; $this->__open_wrap(); include $this->__get_global_template( 'index' ); $this->__close_wrap(); } /** * Generate setting json * * @return string */ public function generate_setting_json() { $module_settings = $this->get_settings(); $settings = array( 'orientation' => $module_settings['instance_orientation'] ?? 'vertical', 'activeSize' => $module_settings['active_size'], 'duration' => $module_settings['anim_duration'], 'activeItem' => $this->get_active_item(), ); $settings = json_encode( $settings ); return $settings; } /** * [__generate_action_button description] * @param boolean $cover_location [description] * @return [type] [description] */ public function __generate_action_button( $cover_location = false ) { $item = $this->__processed_item; $button_url = $item[ 'item_link' ]; $button_text = $item[ 'item_link_text' ]; if ( empty( $button_url ) ) { return false; } if ( is_array( $button_url ) && empty( $button_url['url'] ) ) { return false; } $attr_name = 'url_' . $this->item_count; $this->add_render_attribute( $attr_name, 'class', array( 'elementor-button', 'elementor-size-md', 'jet-image-accordion__button', ) ); $this->add_render_attribute( $attr_name, 'role', 'button' ); $this->add_render_attribute( $attr_name, 'tabindex', 0 ); if ( is_array( $button_url ) ) { if ( method_exists( $this, 'add_link_attributes' ) ) { $this->add_link_attributes( $attr_name, $button_url ); } else { $this->add_render_attribute( $attr_name, 'href', $button_url['url'] ); if ( $button_url['is_external'] ) { $this->add_render_attribute( $attr_name, 'target', '_blank' ); } if ( ! empty( $button_url['nofollow'] ) ) { $this->add_render_attribute( $attr_name, 'rel', 'nofollow' ); } } } else { $this->add_render_attribute( $attr_name, 'href', $button_url ); } $format = apply_filters( 'jet-tabs/image-accordion/action-button-format', '%2$s' ); $this->item_count++; return sprintf( $format, $this->get_render_attribute_string( $attr_name ), $button_text ); } /** * Get active toggle item * * @return int */ public function get_active_item() { $active_index = -1; $items = $this->get_settings( 'item_list' ); $items = apply_filters( 'jet-tabs/widget/loop-items', $items, 'item_list', $this ); foreach ( $items as $index => $item ) { if ( array_key_exists( 'item_active', $item ) && filter_var( $item['item_active'], FILTER_VALIDATE_BOOLEAN ) ) { $active_index = $index; } } return $active_index; } /** * Get item image */ public function __loop_item_image() { $settings = $this->get_settings_for_display(); $item = $this->__processed_item; $image = $item['item_image']; $size = isset( $settings['img_size'] ) ? $settings['img_size'] : 'full'; $format = '%2$s'; if ( empty( $image['id'] ) && empty( $image['url'] ) ) { return sprintf( $format, Utils::get_placeholder_image_src(), '' ); } if ( empty( $image['id'] ) ) { return sprintf( $format, $image['url'], '' ); } $src = wp_get_attachment_image_url( $image['id'], $size ); $alt = Control_Media::get_image_alt( $image ); return sprintf( $format, esc_url( $src ), esc_attr( $alt ) ); } /** * Returns image size array in slug => name format * * @return array */ public function get_image_sizes() { global $_wp_additional_image_sizes; $sizes = get_intermediate_image_sizes(); $result = array(); foreach ( $sizes as $size ) { if ( in_array( $size, array( 'thumbnail', 'medium', 'medium_large', 'large' ) ) ) { $result[ $size ] = ucwords( trim( str_replace( array( '-', '_' ), array( ' ', ' ' ), $size ) ) ); } else { $result[ $size ] = sprintf( '%1$s (%2$sx%3$s)', ucwords( trim( str_replace( array( '-', '_' ), array( ' ', ' ' ), $size ) ) ), $_wp_additional_image_sizes[ $size ]['width'], $_wp_additional_image_sizes[ $size ]['height'] ); } } return array_merge( array( 'full' => esc_html__( 'Full', 'jet-elements' ), ), $result ); } } addons/jet-switcher-widget.php000075500000056446151121477560012451 0ustar00 '.jet-switcher', 'control_wrapper' => '.jet-switcher > .jet-switcher__control-wrapper', 'control' => '.jet-switcher > .jet-switcher__control-wrapper > .jet-switcher__control-instance', 'disable_control' => '.jet-switcher.jet-switcher--disable > .jet-switcher__control-wrapper', 'enable_control' => '.jet-switcher.jet-switcher--enable > .jet-switcher__control-wrapper', 'content_wrapper' => '.jet-switcher > .jet-switcher__content-wrapper', 'content' => '.jet-switcher > .jet-switcher__content-wrapper > .jet-switcher__content', ) ); $this->start_controls_section( 'section_items_data', array( 'label' => esc_html__( 'Items', 'jet-tabs' ), ) ); $this->start_controls_tabs( 'swither_content_tabs' ); $this->start_controls_tab( 'swither_content_tabs_disable_state', array( 'label' => esc_html__( 'Disable', 'jet-tabs' ), ) ); $this->add_control( 'disable_label', array( 'label' => esc_html__( 'Label', 'jet-tabs' ), 'type' => Controls_Manager::TEXT, 'default' => esc_html__( 'Disable', 'jet-tabs' ), 'dynamic' => array( 'active' => true, ), ) ); $this->add_control( 'disable_content_type', array( 'label' => esc_html__( 'Content Type', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'template', 'options' => array( 'template' => esc_html__( 'Template', 'jet-tabs' ), 'editor' => esc_html__( 'Editor', 'jet-tabs' ), ), 'label_block' => 'true', ) ); $this->add_control( 'disable_template_id', array( 'label' => esc_html__( 'Template', 'jet-tabs' ), 'type' => 'jet-query', 'query_type' => 'elementor_templates', 'edit_button' => array( 'active' => true, 'label' => esc_html__( 'Edit Template', 'jet-tabs' ), ), 'condition' => array( 'disable_content_type' => 'template', ) ) ); $this->add_control( 'disable_item_editor_content', array( 'label' => esc_html__( 'Content', 'jet-tabs' ), 'type' => Controls_Manager::WYSIWYG, 'default' => esc_html__( 'Tab Item Content', 'jet-tabs' ), 'dynamic' => array( 'active' => true, ), 'condition' => array( 'disable_content_type' => 'editor', ) ) ); $this->end_controls_tab(); $this->start_controls_tab( 'swither_content_tabs_enable_state', array( 'label' => esc_html__( 'Enable', 'jet-tabs' ), ) ); $this->add_control( 'enable_label', array( 'label' => esc_html__( 'Label', 'jet-tabs' ), 'type' => Controls_Manager::TEXT, 'default' => esc_html__( 'Enable', 'jet-tabs' ), 'dynamic' => array( 'active' => true, ), ) ); $this->add_control( 'enable_content_type', array( 'label' => esc_html__( 'Content Type', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'template', 'options' => array( 'template' => esc_html__( 'Template', 'jet-tabs' ), 'editor' => esc_html__( 'Editor', 'jet-tabs' ), ), 'label_block' => 'true', ) ); $this->add_control( 'enable_template_id', array( 'label' => esc_html__( 'Template', 'jet-tabs' ), 'type' => 'jet-query', 'query_type' => 'elementor_templates', 'edit_button' => array( 'active' => true, 'label' => esc_html__( 'Edit Template', 'jet-tabs' ), ), 'condition' => array( 'enable_content_type' => 'template', ) ) ); $this->add_control( 'enable_item_editor_content', array( 'label' => esc_html__( 'Content', 'jet-tabs' ), 'type' => Controls_Manager::WYSIWYG, 'default' => esc_html__( 'Tab Item Content', 'jet-tabs' ), 'dynamic' => array( 'active' => true, ), 'condition' => array( 'enable_content_type' => 'editor', ) ) ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); $this->start_controls_section( 'section_settings_data', array( 'label' => esc_html__( 'Settings', 'jet-tabs' ), ) ); $this->add_control( 'initial_state', array( 'label' => esc_html__( 'Initial State', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Enable', 'jet-tabs' ), 'label_off' => esc_html__( 'Disable', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', ) ); $this->add_control( 'switcher_preset', array( 'label' => esc_html__( 'Switcher Preset', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'preset-1', 'options' => array( 'preset-1' => esc_html__( 'Preset-1', 'jet-tabs' ), 'preset-2' => esc_html__( 'Preset-2', 'jet-tabs' ), ), ) ); $this->add_control( 'show_effect', array( 'label' => esc_html__( 'Show Effect', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'move-up', 'options' => array( 'none' => esc_html__( 'None', 'jet-tabs' ), 'fade' => esc_html__( 'Fade', 'jet-tabs' ), 'zoom-in' => esc_html__( 'Zoom In', 'jet-tabs' ), 'zoom-out' => esc_html__( 'Zoom Out', 'jet-tabs' ), 'move-up' => esc_html__( 'Move Up', 'jet-tabs' ), 'fall-perspective' => esc_html__( 'Fall Perspective', 'jet-tabs' ), ), ) ); $this->end_controls_section(); $this->__start_controls_section( 'section_swither_control_style', array( 'label' => esc_html__( 'Switcher Control', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_responsive_control( 'swither_control_width', array( 'label' => esc_html__( 'Width', 'jet-tabs' ), 'type' => Controls_Manager::NUMBER, 'default' => 180, 'min' => 20, 'max' => 300, 'step' => 1, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] => 'width: {{VALUE}}px', ), ), 25 ); $this->__add_responsive_control( 'swither_control_height', array( 'label' => esc_html__( 'Height', 'jet-tabs' ), 'type' => Controls_Manager::NUMBER, 'default' => 60, 'min' => 10, 'max' => 100, 'step' => 1, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] => 'height: {{VALUE}}px', ), ), 25 ); $this->__add_responsive_control( 'swither_handler_width', array( 'label' => esc_html__( 'Handler Width', 'jet-tabs' ), 'type' => Controls_Manager::NUMBER, 'default' => 60, 'min' => 1, 'max' => 300, 'step' => 1, 'condition' => array( 'switcher_preset' => 'preset-2', ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ' .jet-switcher__control-handler' => 'width: {{VALUE}}px', '{{WRAPPER}} ' . $css_scheme['enable_control'] . ' .jet-switcher__control-handler' => 'left: calc(100% - {{VALUE}}px)', ), ) ); $this->__add_responsive_control( 'swither_container_margin', array( 'label' => esc_html__( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control_wrapper'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'swither_container_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'], ), 50 ); $this->__add_responsive_control( 'swither_container_border_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'swither_container_box_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'], ), 100 ); $this->__add_control( 'handler_style_heading', array( 'label' => esc_html__( 'Handler', 'jet-tabs' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ), 75 ); $this->__add_responsive_control( 'swither_handler_offset', array( 'label' => esc_html__( 'Handler Offset', 'jet-tabs' ), 'type' => Controls_Manager::NUMBER, 'default' => 3, 'min' => 0, 'max' => 20, 'step' => 1, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ' .jet-switcher__control-handler span' => 'margin: {{VALUE}}px', ), ), 75 ); $this->__add_control( 'labels_style_heading', array( 'label' => esc_html__( 'Typography', 'jet-tabs' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ), 50 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'label' => esc_html__( 'Labels', 'jet-tabs' ), 'name' => 'swither_control_labels_typography', 'selector' => '{{WRAPPER}} '. $css_scheme['control_wrapper'] . ' .jet-switcher__label-text', ), 50 ); $this->__add_control( 'control_state_style_heading', array( 'label' => esc_html__( 'States', 'jet-tabs' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ) ); $this->__start_controls_tabs( 'swither_control_styles_tabs' ); $this->__start_controls_tab( 'swither_control_styles_disable_tab', array( 'label' => esc_html__( 'Disable', 'jet-tabs' ), ) ); $this->__add_control( 'control_disable_background_color', array( 'label' => esc_html__( 'Control Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['disable_control'] . ' .jet-switcher__control-instance' => 'background-color: {{VALUE}}', ), ), 25 ); $this->__add_control( 'control_handler_disable_background_color', array( 'label' => esc_html__( 'Handler Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['disable_control'] . ' .jet-switcher__control-handler span' => 'background-color: {{VALUE}}', ), ), 25 ); $this->__add_control( 'control_disable_state_disable_label_color', array( 'label' => esc_html__( 'Disable Label Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['disable_control'] . ' .jet-switcher__control--disable' => 'color: {{VALUE}}', ), ), 25 ); $this->__add_control( 'control_disable_state_enable_label_color', array( 'label' => esc_html__( 'Enable Label Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['disable_control'] . ' .jet-switcher__control--enable' => 'color: {{VALUE}}', ), ), 25 ); $this->__end_controls_tab(); $this->__start_controls_tab( 'swither_control_styles_enable_tab', array( 'label' => esc_html__( 'Enable', 'jet-tabs' ), ) ); $this->__add_control( 'control_enable_background_color', array( 'label' => esc_html__( 'Control Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['enable_control'] . ' .jet-switcher__control-instance' => 'background-color: {{VALUE}}', ), ), 25 ); $this->__add_control( 'control_handler_enable_background_color', array( 'label' => esc_html__( 'Handler Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['enable_control'] . ' .jet-switcher__control-handler span' => 'background-color: {{VALUE}}', ), ), 25 ); $this->__add_control( 'control_enable_state_disable_label_color', array( 'label' => esc_html__( 'Disable Label Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['enable_control'] . ' .jet-switcher__control--disable' => 'color: {{VALUE}}', ), ), 25 ); $this->__add_control( 'control_enable_state_enable_label_color', array( 'label' => esc_html__( 'Enable Label Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['enable_control'] . ' .jet-switcher__control--enable' => 'color: {{VALUE}}', ), ), 25 ); $this->__end_controls_tab(); $this->__end_controls_tabs(); $this->__end_controls_section(); /** * Swither Content Style Section */ $this->__start_controls_section( 'section_swither_content_style', array( 'label' => esc_html__( 'Switcher Content', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'tabs_content_typography', 'selector' => '{{WRAPPER}} ' . $css_scheme['content'], ), 50 ); $this->__add_control( 'tabs_content_text_color', array( 'label' => esc_html__( 'Text color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content'] => 'color: {{VALUE}};', ), ), 25 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'swither_content_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['content_wrapper'], ), 25 ); $this->__add_responsive_control( 'swither_content_padding', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'swither_content_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['content_wrapper'], ), 50 ); $this->__add_responsive_control( 'swither_content_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content_wrapper'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'tabs_content_box_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['content_wrapper'], ), 100 ); $this->__end_controls_section(); } /** * [render description] * @return [type] [description] */ protected function render() { $this->__context = 'render'; $widget_settings = $this->get_settings_for_display(); $show_effect = $widget_settings[ 'show_effect' ]; $switcher_preset = $widget_settings[ 'switcher_preset' ]; $initial_state = filter_var( $widget_settings[ 'initial_state' ], FILTER_VALIDATE_BOOLEAN ); $allowed_presets = [ 'preset-1', 'preset-2' ]; $switcher_preset = in_array( $switcher_preset, $allowed_presets ) ? $switcher_preset : 'preset-1'; $settings = array( 'effect' => $widget_settings[ 'show_effect' ], ); $this->add_render_attribute( 'instance', array( 'class' => array( 'jet-switcher', 'jet-switcher--' . $switcher_preset, 'jet-switcher-' . $show_effect . '-effect', $initial_state ? 'jet-switcher--enable' : 'jet-switcher--disable', ), 'data-settings' => json_encode( $settings ), ) ); ?>
get_render_attribute_string( 'instance' ); // phpcs:ignore ?>>
get_template( $this->get_name() . '/global/' . sanitize_file_name( $switcher_preset ) . '.php' ); ?>
add_render_attribute( 'jet_switcher_content_disable', array( 'id' => 'jet-switcher-content-disable-' . $this->get_id(), 'class' => array( 'jet-switcher__content', 'jet-switcher__content--disable', ! $initial_state ? 'active-content' : '', ), 'aria-hidden' => ! $initial_state ? 'false' : 'true', ) ); switch ( $widget_settings['disable_content_type'] ) { case 'template': $disable_content_html = $this->get_template_content_by_id( $widget_settings['disable_template_id'] ); break; case 'editor': $disable_content_html = $this->parse_text_editor( $widget_settings['disable_item_editor_content'] ); break; } echo sprintf( '
%2$s
', $this->get_render_attribute_string( 'jet_switcher_content_disable' ), $disable_content_html ); // phpcs:ignore $this->add_render_attribute( 'jet_switcher_content_enable', array( 'id' => 'jet-switcher-content-enable-' . $this->get_id(), 'class' => array( 'jet-switcher__content', 'jet-switcher__content--enable', $initial_state ? 'active-content' : '', ), 'aria-hidden' => $initial_state ? 'false' : 'true', ) ); switch ( $widget_settings['enable_content_type'] ) { case 'template': $enable_content_html = $this->get_template_content_by_id( $widget_settings['enable_template_id'] ); break; case 'editor': $enable_content_html = $this->parse_text_editor( $widget_settings['enable_item_editor_content'] ); break; } echo sprintf( '
%2$s
', $this->get_render_attribute_string( 'jet_switcher_content_enable' ), $enable_content_html );// phpcs:ignore ?>
elementor()->frontend->get_builder_content( $template_id ); if ( ! empty( $template_content ) ) { $content_html .= $template_content; if ( jet_tabs_integration()->is_edit_mode() ) { $link = add_query_arg( array( 'elementor' => '', ), get_permalink( $template_id ) ); $content_html .= sprintf( '
%s
', $link, esc_html__( 'Edit Template', 'jet-tabs' ) ); } } else { $content_html = $this->no_template_content_message(); } } else { $content_html = $this->no_templates_message(); } return $content_html; } /** * [empty_templates_message description] * @return [type] [description] */ public function empty_templates_message() { return '
' . esc_html__( 'You Haven’t Saved Templates Yet.', 'jet-tabs' ) . '
'; } /** * [no_templates_message description] * @return [type] [description] */ public function no_templates_message() { $message = '' . esc_html__( 'Template is not defined. ', 'jet-tabs' ) . ''; $link = add_query_arg( array( 'post_type' => 'elementor_library', 'action' => 'elementor_new_post', '_wpnonce' => wp_create_nonce( 'elementor_action_new_post' ), 'template_type' => 'section', ), esc_url( admin_url( '/edit.php' ) ) ); $new_link = '' . esc_html__( 'Select an existing template or create a ', 'jet-tabs' ) . '' . esc_html__( 'new one', 'jet-tabs' ) . '' ; return sprintf( '
%1$s%2$s
', $message, jet_tabs_integration()->in_elementor() ? $new_link : '' ); } /** * [no_template_content_message description] * @return [type] [description] */ public function no_template_content_message() { $message = '' . esc_html__( 'The switcher are working. Please, note, that you have to add a template to the library in order to be able to display it inside the switcher.', 'jet-tabs' ) . ''; return sprintf( '
%1$s
', $message ); } /** * [get_template_edit_link description] * @param [type] $template_id [description] * @return [type] [description] */ public function get_template_edit_link( $template_id ) { $link = add_query_arg( 'elementor', '', get_permalink( $template_id ) ); return ' ' . esc_html__( 'Edit Template', 'jet-tabs' ) . ''; } } addons/jet-tabs-widget.php000075500000206744151121477560011550 0ustar00 '> .elementor-widget-container > .jet-tabs', 'control_wrapper' => '> .elementor-widget-container > .jet-tabs > .jet-tabs__control-wrapper', 'control' => '> .elementor-widget-container > .jet-tabs > .jet-tabs__control-wrapper > .jet-tabs__control', 'content_wrapper' => '> .elementor-widget-container > .jet-tabs > .jet-tabs__content-wrapper', 'content' => '> .elementor-widget-container > .jet-tabs > .jet-tabs__content-wrapper > .jet-tabs__content', 'label' => '.jet-tabs__label-text', 'icon' => '.jet-tabs__label-icon', 'control_swiper_wrapper' => '> .elementor-widget-container > .jet-tabs > .jet-tabs__control-wrapper > .jet-tabs-swiper-container > .swiper-wrapper', 'control_swiper' => '> .elementor-widget-container > .jet-tabs > .jet-tabs__control-wrapper > .jet-tabs-swiper-container > .swiper-wrapper > .jet-tabs__control', ) ); $this->start_controls_section( 'section_items_data', array( 'label' => esc_html__( 'Items', 'jet-tabs' ), ) ); do_action( 'jet-engine-query-gateway/control', $this, 'tabs' ); $repeater = new Repeater(); $repeater->add_control( 'item_active', array( 'label' => esc_html__( 'Active', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'jet-tabs' ), 'label_off' => esc_html__( 'No', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', ) ); $repeater->add_control( 'item_use_image', array( 'label' => esc_html__( 'Use Image?', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'jet-tabs' ), 'label_off' => esc_html__( 'No', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', ) ); $repeater->add_control( $this->__new_icon_prefix . 'item_icon', array( 'label' => esc_html__( 'Icon', 'jet-tabs' ), 'type' => Controls_Manager::ICONS, 'label_block' => false, 'skin' => 'inline', 'fa4compatibility' => 'item_icon', 'default' => array( 'value' => 'fas fa-arrow-circle-right', 'library' => 'fa-solid', ), ) ); $repeater->add_control( 'item_image', array( 'label' => esc_html__( 'Image', 'jet-tabs' ), 'type' => Controls_Manager::MEDIA, 'dynamic' => array( 'active' => true, ), ) ); $repeater->add_control( 'item_label', array( 'label' => esc_html__( 'Label', 'jet-tabs' ), 'type' => Controls_Manager::TEXT, 'default' => esc_html__( 'New Tab', 'jet-tabs' ), 'dynamic' => array( 'active' => true, ), ) ); $repeater->add_control( 'content_type', array( 'label' => esc_html__( 'Content Type', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'template', 'options' => array( 'template' => esc_html__( 'Template', 'jet-tabs' ), 'editor' => esc_html__( 'Editor', 'jet-tabs' ), ), 'label_block' => 'true', ) ); $repeater->add_control( 'item_template_id', array( 'label' => esc_html__( 'Choose Template', 'jet-tabs' ), 'type' => 'jet-query', 'query_type' => 'elementor_templates', 'edit_button' => array( 'active' => true, 'label' => esc_html__( 'Edit Template', 'jet-tabs' ), ), 'condition' => array( 'content_type' => 'template', ) ) ); $repeater->add_control( 'item_editor_content', array( 'label' => esc_html__( 'Content', 'jet-tabs' ), 'type' => Controls_Manager::WYSIWYG, 'default' => esc_html__( 'Tab Item Content', 'jet-tabs' ), 'dynamic' => array( 'active' => true, ), 'condition' => array( 'content_type' => 'editor', ) ) ); $repeater->add_control( 'control_id', array( 'label' => esc_html__( 'Control CSS ID', 'jet-tabs' ), 'type' => Controls_Manager::TEXT, 'dynamic' => array( 'active' => true, ), ) ); $this->add_control( 'tabs', array( 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'default' => array( array( 'item_label' => esc_html__( 'Tab #1', 'jet-tabs' ), ), array( 'item_label' => esc_html__( 'Tab #2', 'jet-tabs' ), ), array( 'item_label' => esc_html__( 'Tab #3', 'jet-tabs' ), ), ), 'title_field' => '{{{ item_label }}}', ) ); $this->end_controls_section(); $this->start_controls_section( 'section_settings_data', array( 'label' => esc_html__( 'Settings', 'jet-tabs' ), ) ); $this->add_control( 'item_html_tag', array( 'label' => esc_html__( 'Item Label HTML Tag', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'options' => $this->get_available_item_html_tags(), 'default' => 'div', ) ); $this->add_responsive_control( 'tabs_position', array( 'label' => esc_html__( 'Tabs Position', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'top', 'options' => array( 'left' => esc_html__( 'Left', 'jet-tabs' ), 'top' => esc_html__( 'Top', 'jet-tabs' ), 'right' => esc_html__( 'Right', 'jet-tabs' ), 'bottom' => esc_html__( 'Bottom', 'jet-tabs' ), ), 'frontend_available' => true, 'render_type' => 'template', ) ); $this->add_control( 'show_effect', array( 'label' => esc_html__( 'Show Effect', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'move-up', 'options' => array( 'none' => esc_html__( 'None', 'jet-tabs' ), 'fade' => esc_html__( 'Fade', 'jet-tabs' ), 'zoom-in' => esc_html__( 'Zoom In', 'jet-tabs' ), 'zoom-out' => esc_html__( 'Zoom Out', 'jet-tabs' ), 'move-up' => esc_html__( 'Move Up', 'jet-tabs' ), 'fall-perspective' => esc_html__( 'Fall Perspective', 'jet-tabs' ), ), ) ); $this->add_control( 'tabs_event', array( 'label' => esc_html__( 'Tabs Event', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'click', 'options' => array( 'click' => esc_html__( 'Click', 'jet-tabs' ), 'hover' => esc_html__( 'Hover', 'jet-tabs' ), ), ) ); $this->add_control( 'auto_switch', array( 'label' => esc_html__( 'Auto Switch', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'jet-tabs' ), 'label_off' => esc_html__( 'Off', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', ) ); $this->add_control( 'auto_switch_delay', array( 'label' => esc_html__( 'Auto Switch Delay', 'jet-tabs' ), 'type' => Controls_Manager::NUMBER, 'default' => 3000, 'min' => 1000, 'max' => 20000, 'step' => 100, 'condition' => array( 'auto_switch' => 'yes', ), ) ); $this->add_control( 'no_active_tabs', array( 'label' => esc_html__( 'No Active Tabs', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'jet-tabs' ), 'label_off' => esc_html__( 'Off', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', 'frontend_available' => true, ) ); $this->add_control( 'ajax_template', array( 'label' => esc_html__( 'Use Ajax Loading for Template', 'jet-tabs' ), 'description' => wp_kses_post( sprintf( __( 'If you need to use dynamic data inside the template, please switch Ajax Request Type to Self.', 'jet-tabs' ), esc_url( admin_url( 'admin.php?page=jet-dashboard-settings-page&subpage=jet-tabs-general-settings' ) ) ) ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'jet-tabs' ), 'label_off' => esc_html__( 'Off', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', ) ); $this->add_control( 'tab_control_switching', array( 'label' => esc_html__( 'Scrolling to the Content', 'jet-tabs' ), 'description' => esc_html__( 'Scrolling to the Content after Switching Tab Control', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'jet-tabs' ), 'label_off' => esc_html__( 'Off', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', ) ); $this->add_control( 'tab_control_switching_offset', array( 'label' => esc_html__( 'Scrolling offset (px)', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'range' => array( 'px' => array( 'min' => 0, 'max' => 100, ), ), 'default' => array( 'unit' => 'px', 'size' => 0, ), 'condition' => array( 'tab_control_switching' => 'yes' ) ) ); $this->add_control( 'tab_scrolling_navigation', array( 'label' => esc_html__( 'Scrolling Tabs Navigation', 'jet-tabs' ), 'description' => esc_html__( 'Scrolling tabs navigation if it does not fit in viewport', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'jet-tabs' ), 'label_off' => esc_html__( 'Off', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', 'condition' => array( 'tabs_position!' => ['left', 'right'], ), ) ); $this->add_control( 'tab_scroll_type', array( 'label' => esc_html__( 'Scroll Type', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'plain', 'options' => array( 'plain' => esc_html__( 'Plain', 'jet-tabs' ), 'slider' => esc_html__( 'Slider', 'jet-tabs' ), ), 'condition' => array( 'tab_scrolling_navigation' => 'yes', 'tabs_position!' => ['left', 'right'], ), ) ); $this->add_control( 'fixed_slide_width', array( 'label' => esc_html__( 'Fixed Slide Width', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'jet-tabs' ), 'label_off' => esc_html__( 'Off', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', 'condition' => array( 'tab_scrolling_navigation' => 'yes', 'tab_scroll_type' => 'slider', 'tabs_position!' => ['left', 'right'], ), ) ); $this->add_control( 'slide_width_value', array( 'label' => esc_html__( 'Slide Width', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'px', '%', 'em' ), 'range' => array( 'px' => array( 'min' => 50, 'max' => 500, ), '%' => array( 'min' => 10, 'max' => 100, ), 'em' => array( 'min' => 1, 'max' => 50, ), ), 'default' => array( 'unit' => 'px', 'size' => 200, ), 'condition' => array( 'tabs_position!' => ['left', 'right'], 'tab_scrolling_navigation' => 'yes', 'tab_scroll_type' => 'slider', 'fixed_slide_width' => 'yes', ), ) ); $this->add_control( 'slider_centered', array( 'label' => esc_html__( 'Centered', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'jet-tabs' ), 'label_off' => esc_html__( 'Off', 'jet-tabs' ), 'return_value' => 'yes', 'default' => '', 'condition' => array( 'tab_scrolling_navigation' => 'yes', 'tab_scroll_type' => 'slider', 'tabs_position!' => ['left', 'right'], ), ) ); $this->add_control( 'slider_looped', array( 'label' => esc_html__( 'Looped', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'jet-tabs' ), 'label_off' => esc_html__( 'Off', 'jet-tabs' ), 'return_value' => 'yes', 'default' => '', 'condition' => array( 'tab_scrolling_navigation' => 'yes', 'tab_scroll_type' => 'slider', 'tabs_position!' => ['left', 'right'], ), ) ); $this->add_control( 'slider_show_nav', array( 'type' => Controls_Manager::SWITCHER, 'label' => __( 'Enable Navigation', 'jet-tabs' ), 'label_on' => esc_html__( 'On', 'jet-tabs' ), 'label_off' => esc_html__( 'Off', 'jet-tabs' ), 'return_value' => 'yes', 'default' => 'false', 'condition' => array( 'tabs_position!' => ['left', 'right'], 'tab_scrolling_navigation' => 'yes', 'tab_scroll_type' => 'slider', ), ) ); $this->end_controls_section(); $this->__start_controls_section( 'section_general_style', array( 'label' => esc_html__( 'General', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_responsive_control( 'tabs_control_wrapper_width', array( 'label' => esc_html__( 'Tabs Control Width', 'jet-tabs' ), 'description' => esc_html__( 'Working with left or right tabs position', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'px', '%', ), 'range' => array( '%' => array( 'min' => 10, 'max' => 50, ), 'px' => array( 'min' => 100, 'max' => 500, ), ), 'selectors' => array( '{{WRAPPER}} .jet-tabs.jet-tabs-position-left > .jet-tabs__control-wrapper' => 'min-width: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .jet-tabs.jet-tabs-position-right > .jet-tabs__control-wrapper' => 'min-width: {{SIZE}}{{UNIT}}', '{{WRAPPER}} .jet-tabs.jet-tabs-position-left > .jet-tabs__content-wrapper' => 'min-width: calc(100% - {{SIZE}}{{UNIT}})', '{{WRAPPER}} .jet-tabs.jet-tabs-position-right > .jet-tabs__content-wrapper' => 'min-width: calc(100% - {{SIZE}}{{UNIT}})', ), ), 25 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'tabs_container_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['instance'], ), 25 ); $this->__add_responsive_control( 'tabs_container_padding', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['instance'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_responsive_control( 'tabs_container_margin', array( 'label' => esc_html__( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['instance'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'tabs_container_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['instance'], ), 100 ); $this->__add_responsive_control( 'tabs_container_border_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['instance'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 100 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'tabs_container_box_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['instance'], ), 100 ); $this->__end_controls_section(); /** * Tabs Control Style Section */ $this->__start_controls_section( 'section_tabs_control_style', array( 'label' => esc_html__( 'Tabs Control', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_responsive_control( 'tabs_controls_container_aligment', array( 'label' => esc_html__( 'Tabs Container Alignment', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'flex-start', 'options' => array( 'flex-start' => array( 'title' => ! is_rtl() ? esc_html__( 'Start', 'jet-tabs' ) : esc_html__( 'End', 'jet-tabs' ), 'icon' => ! is_rtl() ? 'eicon-h-align-left' : 'eicon-h-align-right', ), 'center' => array( 'title' => esc_html__( 'Center', 'jet-tabs' ), 'icon' => 'eicon-h-align-center', ), 'flex-end' => array( 'title' => ! is_rtl() ? esc_html__( 'End', 'jet-tabs' ) : esc_html__( 'Start', 'jet-tabs' ), 'icon' => ! is_rtl() ? 'eicon-h-align-right' : 'eicon-h-align-left', ), 'stretch' => array( 'title' => esc_html__( 'Stretch', 'jet-tabs' ), 'icon' => 'eicon-h-align-stretch', ), ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control_wrapper'] => 'align-self: {{VALUE}};', '{{WRAPPER}} ' . $css_scheme['control_swiper'] => 'align-self: {{VALUE}};', ), ), 100 ); $this->__add_responsive_control( 'tabs_controls_aligment', array( 'label' => esc_html__( 'Tabs Alignment', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'flex-start', 'options' => array( 'flex-start' => array( 'title' => ! is_rtl() ? esc_html__( 'Start', 'jet-tabs' ) : esc_html__( 'End', 'jet-tabs' ), 'icon' => ! is_rtl() ? 'eicon-h-align-left' : 'eicon-h-align-right', ), 'center' => array( 'title' => esc_html__( 'Center', 'jet-tabs' ), 'icon' => 'eicon-h-align-center', ), 'flex-end' => array( 'title' => ! is_rtl() ? esc_html__( 'End', 'jet-tabs' ) : esc_html__( 'Start', 'jet-tabs' ), 'icon' => ! is_rtl() ? 'eicon-h-align-right' : 'eicon-h-align-left', ), 'stretch' => array( 'title' => esc_html__( 'Stretch', 'jet-tabs' ), 'icon' => 'eicon-h-align-stretch', ), ), 'selectors_dictionary' => array( 'flex-start' => 'justify-content: flex-start;', 'center' => 'justify-content: center;', 'flex-end' => 'justify-content: flex-end;', 'stretch' => 'flex-grow: 1;', ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control_wrapper'] => '{{VALUE}}', '{{WRAPPER}} ' . $css_scheme['control'] => '{{VALUE}}', ), ), 100 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'tabs_content_wrapper_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['control_wrapper'], ), 25 ); $this->__add_responsive_control( 'tabs_control_wrapper_padding', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control_wrapper'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_responsive_control( 'tabs_control_wrapper_margin', array( 'label' => esc_html__( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control_wrapper'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'tabs_control_wrapper_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['control_wrapper'], ), 25 ); $this->__add_responsive_control( 'tabs_control_wrapper_border_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control_wrapper'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'tabs_control_wrapper_box_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['control_wrapper'], ), 100 ); $this->__end_controls_section(); /** * Tabs Control Style Section */ $this->__start_controls_section( 'section_tabs_control_item_style', array( 'label' => esc_html__( 'Tabs Control Item', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_responsive_control( 'tabs_controls_item_aligment_left_right_icon', array( 'label' => esc_html__( 'Alignment', 'jet-tabs' ), 'description' => esc_html__( 'Working with left or right tabs position and left or right icon position', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'center', 'options' => array( 'flex-start' => array( 'title' => esc_html__( 'Start', 'jet-tabs' ), 'icon' => 'eicon-arrow-left', ), 'center' => array( 'title' => esc_html__( 'Center', 'jet-tabs' ), 'icon' => 'eicon-text-align-center', ), 'flex-end' => array( 'title' => esc_html__( 'End', 'jet-tabs' ), 'icon' => 'eicon-arrow-right', ), ), 'condition' => array( 'tabs_position!' => ['top', 'bottom'], ), 'selectors' => array( '{{WRAPPER}} .jet-tabs.jet-tabs-position-left > .jet-tabs__control-wrapper > .jet-tabs__control.jet-tabs__control-icon-left .jet-tabs__control-inner' => 'justify-content: {{VALUE}};', '{{WRAPPER}} .jet-tabs.jet-tabs-position-left > .jet-tabs__control-wrapper > .jet-tabs__control.jet-tabs__control-icon-right .jet-tabs__control-inner' => 'justify-content: {{VALUE}};', '{{WRAPPER}} .jet-tabs.jet-tabs-position-right > .jet-tabs__control-wrapper > .jet-tabs__control.jet-tabs__control-icon-left .jet-tabs__control-inner' => 'justify-content: {{VALUE}};', '{{WRAPPER}} .jet-tabs.jet-tabs-position-right > .jet-tabs__control-wrapper > .jet-tabs__control.jet-tabs__control-icon-right .jet-tabs__control-inner' => 'justify-content: {{VALUE}};', ), 'classes' => 'jet-tabs-text-align-control', ), 25 ); $this->__add_responsive_control( 'tabs_controls_item_aligment_top_icon', array( 'label' => esc_html__( 'Alignment', 'jet-tabs' ), 'description' => esc_html__( 'Working with left or right tabs position and top icon position', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'center', 'options' => array( 'flex-start' => array( 'title' => ! is_rtl() ? esc_html__( 'Start', 'jet-tabs' ) : esc_html__( 'End', 'jet-tabs' ), 'icon' => ! is_rtl() ? 'eicon-arrow-left' : 'eicon-arrow-right', ), 'center' => array( 'title' => esc_html__( 'Center', 'jet-tabs' ), 'icon' => 'eicon-text-align-center', ), 'flex-end' => array( 'title' => ! is_rtl() ? esc_html__( 'End', 'jet-tabs' ) : esc_html__( 'Start', 'jet-tabs' ), 'icon' => ! is_rtl() ? 'eicon-arrow-right' : 'eicon-arrow-left', ), ), 'condition' => array( 'tabs_position!' => ['top', 'bottom'], ), 'selectors' => array( '{{WRAPPER}} .jet-tabs.jet-tabs-position-left > .jet-tabs__control-wrapper > .jet-tabs__control.jet-tabs__control-icon-top .jet-tabs__control-inner' => 'align-items: {{VALUE}};', '{{WRAPPER}} .jet-tabs.jet-tabs-position-right > .jet-tabs__control-wrapper > .jet-tabs__control.jet-tabs__control-icon-top .jet-tabs__control-inner' => 'align-items: {{VALUE}}', ), ), 25 ); $this->__add_control( 'tabs_control_icon_style_devider', array( 'type' => Controls_Manager::DIVIDER, ) ); $this->__add_control( 'tabs_control_icon_style_heading', array( 'label' => esc_html__( 'Icon Styles', 'jet-tabs' ), 'type' => Controls_Manager::HEADING, ) ); $this->__add_responsive_control( 'tabs_control_icon_margin', array( 'label' => esc_html__( 'Icon Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ' .jet-tabs__label-icon' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ' .jet-tabs__label-icon' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_responsive_control( 'tabs_control_image_margin', array( 'label' => esc_html__( 'Image Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ' .jet-tabs__label-image' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ' .jet-tabs__label-image' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 100 ); $this->__add_responsive_control( 'tabs_control_image_width', array( 'label' => esc_html__( 'Image Width', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'px', 'em', 'rem', '%', ), 'range' => array( 'px' => array( 'min' => 10, 'max' => 100, ), ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ' .jet-tabs__label-image' => 'width: {{SIZE}}{{UNIT}}', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ' .jet-tabs__label-image' => 'width: {{SIZE}}{{UNIT}}', ), ), 100 ); $this->__add_control( 'tabs_control_icon_position', array( 'label' => esc_html__( 'Icon Position', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'left', 'options' => array( 'left' => esc_html__( 'Left', 'jet-tabs' ), 'top' => esc_html__( 'Top', 'jet-tabs' ), 'right' => esc_html__( 'Right', 'jet-tabs' ), ), ), 50 ); $this->__add_control( 'tabs_control_state_style_heading', array( 'label' => esc_html__( 'State Styles', 'jet-tabs' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', ) ); $this->__start_controls_tabs( 'tabs_control_styles' ); $this->__start_controls_tab( 'tabs_control_normal', array( 'label' => esc_html__( 'Normal', 'jet-tabs' ), ) ); $this->__add_control( 'tabs_control_label_color', array( 'label' => esc_html__( 'Text Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'global' => array( 'default' => Global_Colors::COLOR_TEXT, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ' ' . $css_scheme['label'] => 'color: {{VALUE}}', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ' ' . $css_scheme['label'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'tabs_control_label_typography', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . ' ' . $css_scheme['label'] . ', {{WRAPPER}} ' . $css_scheme['control_swiper'] . ' ' . $css_scheme['label'], 'global' => array( 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ), ), 50 ); $this->__add_control( 'tabs_control_icon_color', array( 'label' => esc_html__( 'Icon Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'global' => array( 'default' => Global_Colors::COLOR_TEXT, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ' ' . $css_scheme['icon'] => 'color: {{VALUE}}', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ' ' . $css_scheme['icon'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_responsive_control( 'tabs_control_icon_size', array( 'label' => esc_html__( 'Icon Size', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'px', 'em', 'rem', ), 'range' => array( 'px' => array( 'min' => 18, 'max' => 200, ), ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ' ' . $css_scheme['icon'] => 'font-size: {{SIZE}}{{UNIT}}', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ' ' . $css_scheme['icon'] => 'font-size: {{SIZE}}{{UNIT}}', ), ), 50 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'tabs_control_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . ', {{WRAPPER}} ' . $css_scheme['control_swiper'], ), 25 ); $this->__add_responsive_control( 'tabs_control_padding', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ' .jet-tabs__control-inner' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ' .jet-tabs__control-inner' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_responsive_control( 'tabs_control_margin', array( 'label' => esc_html__( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', '{{WRAPPER}} ' . $css_scheme['control_swiper'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'tabs_control_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . ', {{WRAPPER}} ' . $css_scheme['control_swiper'], ), 25 ); $this->__add_responsive_control( 'tabs_control_border_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', '{{WRAPPER}} ' . $css_scheme['control_swiper'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'tabs_control_box_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . ', {{WRAPPER}} ' . $css_scheme['control_swiper'], ), 100 ); $this->__end_controls_tab(); $this->__start_controls_tab( 'tabs_control_hover', array( 'label' => esc_html__( 'Hover', 'jet-tabs' ), ) ); $this->__add_control( 'tabs_control_label_color_hover', array( 'label' => esc_html__( 'Text Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'global' => array( 'default' => Global_Colors::COLOR_SECONDARY, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ':hover ' . $css_scheme['label'] => 'color: {{VALUE}}', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ':hover ' . $css_scheme['label'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'tabs_control_label_typography_hover', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . ':hover ' . $css_scheme['label'] . ', {{WRAPPER}} ' . $css_scheme['control_swiper'] . ':hover ' . $css_scheme['label'], 'global' => array( 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ), ), 50 ); $this->__add_control( 'tabs_control_icon_color_hover', array( 'label' => esc_html__( 'Icon Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'global' => array( 'default' => Global_Colors::COLOR_SECONDARY, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ':hover ' . $css_scheme['icon'] => 'color: {{VALUE}}', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ':hover ' . $css_scheme['icon'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_responsive_control( 'tabs_control_icon_size_hover', array( 'label' => esc_html__( 'Icon Size', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'px', 'em', 'rem', ), 'range' => array( 'px' => array( 'min' => 18, 'max' => 200, ), ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ':hover ' . $css_scheme['icon'] => 'font-size: {{SIZE}}{{UNIT}}', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ':hover ' . $css_scheme['icon'] => 'font-size: {{SIZE}}{{UNIT}}', ), ), 50 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'tabs_control_background_hover', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . ':hover' . ', {{WRAPPER}} ' . $css_scheme['control_swiper'] . ':hover', ), 25 ); $this->__add_responsive_control( 'tabs_control_padding_hover', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ':hover' . ' .jet-tabs__control-inner' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ':hover' . ' .jet-tabs__control-inner' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_responsive_control( 'tabs_control_margin_hover', array( 'label' => esc_html__( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ':hover' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ':hover' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'tabs_control_border_hover', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . ':hover' . ', {{WRAPPER}} ' . $css_scheme['control_swiper'] . ':hover', ), 25 ); $this->__add_responsive_control( 'tabs_control_border_radius_hover', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . ':hover' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . ':hover' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'tabs_control_box_shadow_hover', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . ':hover' . ', {{WRAPPER}} ' . $css_scheme['control_swiper'] . ':hover', ), 100 ); $this->__end_controls_tab(); $this->__start_controls_tab( 'tabs_control_active', array( 'label' => esc_html__( 'Active', 'jet-tabs' ), ) ); $this->__add_control( 'tabs_control_label_color_active', array( 'label' => esc_html__( 'Text Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'global' => array( 'default' => Global_Colors::COLOR_PRIMARY, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . '.active-tab ' . $css_scheme['label'] => 'color: {{VALUE}}', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . '.active-tab ' . $css_scheme['label'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'tabs_control_label_typography_active', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . '.active-tab ' . $css_scheme['label'] . ', {{WRAPPER}} ' . $css_scheme['control_swiper'] . '.active-tab ' . $css_scheme['label'], 'global' => array( 'default' => Global_Typography::TYPOGRAPHY_PRIMARY, ), ), 50 ); $this->__add_control( 'tabs_control_icon_color_active', array( 'label' => esc_html__( 'Icon Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'global' => array( 'default' => Global_Colors::COLOR_PRIMARY, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . '.active-tab ' . $css_scheme['icon'] => 'color: {{VALUE}}', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . '.active-tab ' . $css_scheme['icon'] => 'color: {{VALUE}}', ), ), 25 ); $this->__add_responsive_control( 'tabs_control_icon_size_active', array( 'label' => esc_html__( 'Icon Size', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'px', 'em', 'rem', ), 'range' => array( 'px' => array( 'min' => 18, 'max' => 200, ), ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . '.active-tab ' . $css_scheme['icon'] => 'font-size: {{SIZE}}{{UNIT}}', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . '.active-tab ' . $css_scheme['icon'] => 'font-size: {{SIZE}}{{UNIT}}', ), ), 50 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'tabs_control_background_active', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . '.active-tab' . ', {{WRAPPER}} ' . $css_scheme['control_swiper'] . '.active-tab', ), 25 ); $this->__add_responsive_control( 'tabs_control_padding_active', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . '.active-tab' . ' .jet-tabs__control-inner' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . '.active-tab' . ' .jet-tabs__control-inner' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_responsive_control( 'tabs_control_margin_active', array( 'label' => esc_html__( 'Margin', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . '.active-tab' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . '.active-tab' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'tabs_control_border_active', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . '.active-tab' . ', {{WRAPPER}} ' . $css_scheme['control_swiper'] . '.active-tab', ), 25 ); $this->__add_responsive_control( 'tabs_control_border_radius_active', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control'] . '.active-tab' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', '{{WRAPPER}} ' . $css_scheme['control_swiper'] . '.active-tab' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'tabs_control_box_shadow_active', 'selector' => '{{WRAPPER}} ' . $css_scheme['control'] . '.active-tab' . ', {{WRAPPER}} ' . $css_scheme['control_swiper'] . '.active-tab', ), 100 ); $this->__end_controls_tab(); $this->__end_controls_tabs(); $this->__end_controls_section(); /** * Tabs Content Style Section */ $this->__start_controls_section( 'section_tabs_content_style', array( 'label' => esc_html__( 'Tabs Content', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'show_label' => false, ) ); $this->__add_control( 'tabs_content_text_color', array( 'label' => esc_html__( 'Text color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content'] => 'color: {{VALUE}};', ), ), 25 ); $this->__add_group_control( Group_Control_Typography::get_type(), array( 'name' => 'tabs_content_typography', 'selector' => '{{WRAPPER}} ' . $css_scheme['content'], ), 50 ); $this->__add_group_control( Group_Control_Background::get_type(), array( 'name' => 'tabs_content_background', 'selector' => '{{WRAPPER}} ' . $css_scheme['content_wrapper'], ), 25 ); $this->__add_responsive_control( 'tabs_content_padding', array( 'label' => esc_html__( 'Padding', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'vw', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 50 ); $this->__add_group_control( Group_Control_Border::get_type(), array( 'name' => 'tabs_content_border', 'label' => esc_html__( 'Border', 'jet-tabs' ), 'placeholder' => '1px', 'default' => '1px', 'selector' => '{{WRAPPER}} ' . $css_scheme['content_wrapper'], ), 25 ); $this->__add_responsive_control( 'tabs_content_radius', array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%', 'em', 'rem', 'custom' ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content_wrapper'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'custom_units' => true, ), 75 ); $this->__add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'tabs_content_box_shadow', 'selector' => '{{WRAPPER}} ' . $css_scheme['content_wrapper'], ), 100 ); $this->__add_control( 'tabs_content_loader_style_heading', array( 'label' => esc_html__( 'Loader Styles', 'jet-tabs' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', 'condition' => array( 'ajax_template' => 'yes', ), ), 25 ); $this->__add_control( 'tabs_content_loader_color', array( 'label' => esc_html__( 'Loader color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['content'] . ' .jet-tabs-loader' => 'border-color: {{VALUE}}; border-top-color: white;', ), 'condition' => array( 'ajax_template' => 'yes', ), ), 25 ); $this->__end_controls_section(); /** * Tabs Slider Navigation */ $this->start_controls_section( 'section_navigation_style', array( 'label' => esc_html__( 'Navigation', 'jet-tabs' ), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => array( 'tab_scrolling_navigation' => 'yes', 'tab_scroll_type' => 'slider', 'tabs_position!' => ['left', 'right'], 'slider_show_nav' => 'yes', ), ) ); $this->add_control( 'heading_arrows_style', array( 'label' => esc_html__( 'Arrows', 'jet-tabs' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', 'condition' => array( 'tab_scrolling_navigation' => 'yes', 'tab_scroll_type' => 'slider', 'tabs_position!' => ['left', 'right'], 'slider_show_nav' => 'yes', ), ) ); $this->add_responsive_control( 'arrows_size', array( 'label' => __( 'Size', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => array( 'px' => array( 'min' => 6, 'max' => 80, ), ), 'default' => array( 'unit' => 'px', 'size' => 24, ), 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control_wrapper'] . ' .swiper-button-next:after, {{WRAPPER}} ' . $css_scheme['control_wrapper'] . ' .swiper-button-prev:after' => 'font-size: {{SIZE}}{{UNIT}};', ), 'condition' => array( 'tab_scrolling_navigation' => 'yes', 'tab_scroll_type' => 'slider', 'tabs_position!' => ['left', 'right'], 'slider_show_nav' => 'yes', ), ) ); $this->add_control( 'arrows_position', array( 'label' => esc_html__( 'Position', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'default' => 'inside', 'options' => array( 'inside' => esc_html__( 'Inside', 'jet-tabs' ), 'outside' => esc_html__( 'Outside', 'jet-tabs' ), ), 'prefix_class' => 'jet-tabs-nav-position-', 'condition' => array( 'tab_scrolling_navigation' => 'yes', 'tab_scroll_type' => 'slider', 'tabs_position!' => ['left', 'right'], 'slider_show_nav' => 'yes', ), ) ); $this->start_controls_tabs( 'tabs_arrows_colors' ); $this->start_controls_tab( 'tab_arrows_normal', array( 'label' => __( 'Normal', 'jet-tabs' ), ) ); $this->add_control( 'arrows_color', array( 'label' => __( 'Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control_wrapper'] . ' .swiper-button-next, {{WRAPPER}} ' . $css_scheme['control_wrapper'] . ' .swiper-button-prev' => 'color: {{VALUE}};', ), ) ); $this->end_controls_tab(); $this->start_controls_tab( 'tab_arrows_hover', array( 'label' => __( 'Hover', 'jet-tabs' ), ) ); $this->add_control( 'arrows_color_hover', array( 'label' => __( 'Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} ' . $css_scheme['control_wrapper'] . ' .swiper-button-next:hover, {{WRAPPER}} ' . $css_scheme['control_wrapper'] . ' .swiper-button-prev:hover' => 'color: {{VALUE}};', ), ) ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); } public function get_tab_item_content( $item = array(), $index = 0, $args = array() ) { $tab_count = $index + 1; $tab_content_setting_key = $this->get_repeater_setting_key( 'tab_content', 'tabs', $index ); $id_int = $args['id_int']; $active_index = $args['active_index']; $no_active_tabs = $args['no_active_tabs']; $ajax_template = $args['ajax_template']; $this->add_render_attribute( $tab_content_setting_key, array( 'id' => 'jet-tabs-content-' . $id_int . $tab_count, 'class' => array( 'jet-tabs__content', ( $index === $active_index && ! $no_active_tabs ) ? 'active-content' : '', ), 'data-tab' => $tab_count, 'role' => 'tabpanel', 'aria-hidden' => $index === $active_index ? 'false' : 'true', 'data-template-id' => ! empty( $item['item_template_id'] ) ? $item['item_template_id'] : 'false', ) ); $content_html = ''; $template_cache_settings = jet_tabs_settings()->get( 'useTemplateCache', [ 'enable' => false, 'cacheExpiration' => 'week', ] ); $elementor_template = new Elementor_Template(); $in_elementor = jet_tabs_integration()->in_elementor(); switch ( $item[ 'content_type' ] ) { case 'template': if ( ! empty( $item['item_template_id'] ) ) { $template_id = apply_filters( 'jet-tabs/widgets/template_id', $item['item_template_id'], $this ); $template_content = jet_tabs()->elementor()->frontend->get_builder_content_for_display( $template_id ); if ( ! empty( $template_content ) ) { if ( ! $ajax_template ) { if ( $template_cache_settings['enable'] && ! $in_elementor && is_array( $template_content ) ) { $content_html .= $template_content['template_content']; $template_styles = $template_content['template_styles'] ?? []; $template_scripts = $template_content['template_scripts'] ?? []; $this->styles_to_enqueue = wp_parse_args( $template_styles, $this->styles_to_enqueue ); $this->scripts_to_enqueue = wp_parse_args( $template_scripts, $this->scripts_to_enqueue ); } else { $content_html .= is_array( $template_content ) ? ( $template_content['template_content'] ?? '' ) : $template_content; } } else { $content_html .= '
'; } if ( jet_tabs_integration()->is_edit_mode() ) { $link = add_query_arg( array( 'elementor' => '', ), get_permalink( $item['item_template_id'] ) ); $content_html .= sprintf( '
%s
', $link, esc_html__( 'Edit Template', 'jet-tabs' ) ); } } else { $content_html = $this->no_template_content_message(); } } else { $content_html = $this->no_templates_message(); } break; case 'editor': $content_html = $this->parse_text_editor( $item['item_editor_content'] ); break; } return sprintf( '
%2$s
', $this->get_render_attribute_string( $tab_content_setting_key ), $content_html ); } /** * [render description] * @return [type] [description] */ protected function render() { $this->__context = 'render'; $tabs = $this->get_settings_for_display( 'tabs' ); $id_int = substr( $this->get_id_int(), 0, 3 ); $tabs_position = $this->get_settings( 'tabs_position' ); $tabs_position_tablet = $this->get_settings( 'tabs_position_tablet' ); $tabs_position_mobile = $this->get_settings( 'tabs_position_mobile' ); $show_effect = $this->get_settings( 'show_effect' ); $no_active_tabs = filter_var( $this->get_settings( 'no_active_tabs' ), FILTER_VALIDATE_BOOLEAN ); $ajax_template = filter_var( $this->get_settings( 'ajax_template' ), FILTER_VALIDATE_BOOLEAN ); $tabs_item_label_tag = ! empty( $this->get_settings( 'item_html_tag' ) ) ? $this->get_settings( 'item_html_tag' ) : 'div'; $tabs_scrolling_navigation = filter_var( $this->get_settings( 'tab_scrolling_navigation' ), FILTER_VALIDATE_BOOLEAN ); $tab_scroll_type = $this->get_settings( 'tab_scroll_type' ); $fixed_slide_width = filter_var( $this->get_settings( 'fixed_slide_width' ), FILTER_VALIDATE_BOOLEAN ); $slide_width_value = $this->get_settings( 'slide_width_value' ); $slider_centered = filter_var( $this->get_settings( 'slider_centered' ), FILTER_VALIDATE_BOOLEAN ); $slider_looped = filter_var( $this->get_settings( 'slider_looped' ), FILTER_VALIDATE_BOOLEAN ); $slider_show_nav = filter_var( $this->get_settings( 'slider_show_nav' ), FILTER_VALIDATE_BOOLEAN ); $tabs = apply_filters( 'jet-tabs/widget/loop-items', $tabs, 'tabs', $this ); if ( ! $tabs || empty( $tabs ) ) { return false; } $active_index = -1; foreach ( $tabs as $index => $item ) { if ( ! is_array( $item ) ) { continue; } // Find first active tab if ( $active_index === -1 && array_key_exists( 'item_active', $item ) && filter_var( $item['item_active'], FILTER_VALIDATE_BOOLEAN ) ) { $active_index = $index; } if ( 'template' === ( $item['content_type'] ?? '' ) && ! empty( $item['item_template_id'] ) ) { $post_status = get_post_status( $item['item_template_id'] ); if ( 'draft' === $post_status || 'trash' === $post_status ) { unset( $tabs[ $index ] ); } } } if ( $active_index === -1 ) { $active_index = 0; } $settings = array( 'activeIndex' => ! $no_active_tabs ? $active_index : -1, 'event' => $this->get_settings( 'tabs_event' ), 'autoSwitch' => filter_var( $this->get_settings( 'auto_switch' ), FILTER_VALIDATE_BOOLEAN ), 'autoSwitchDelay' => $this->get_settings( 'auto_switch_delay' ), 'ajaxTemplate' => $ajax_template, 'tabsPosition' => $tabs_position, 'switchScrolling' => filter_var( $this->get_settings( 'tab_control_switching' ), FILTER_VALIDATE_BOOLEAN ), 'switchScrollingOffset' => ! empty( $this->get_settings_for_display( 'tab_control_switching_offset' ) ) ? $this->get_settings_for_display( 'tab_control_switching_offset' ) : 0 ); $attributes = array( 'class' => array( 'jet-tabs', 'jet-tabs-position-' . $tabs_position, 'jet-tabs-' . $show_effect . '-effect', ( $ajax_template ) ? 'jet-tabs-ajax-template' : '', ), 'data-settings' => json_encode( $settings ), ); if ( $tabs_scrolling_navigation && $tab_scroll_type === 'slider' && ( $tabs_position === 'top' || $tabs_position === 'bottom' ) ) { $swiper_settings = array( 'slidesPerView' => $fixed_slide_width ? 'fixed' : 'auto', 'itemWidth' => $fixed_slide_width ? $slide_width_value['size'] . $slide_width_value['unit'] : 'auto', 'centeredSlides'=> $slider_centered, 'loop' => $slider_looped, ); $attributes['data-swiper-settings'] = json_encode( $swiper_settings ); } $this->add_render_attribute( 'instance', $attributes ); $tabs_content = array(); ?>
get_render_attribute_string( 'instance' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
$item ) { do_action( 'jet-engine-query-gateway/do-item', $item ); $tab_count = $index + 1; $tab_title_setting_key = $this->get_repeater_setting_key( 'jet_tab_control', 'tabs', $index ); $tab_control_id = ! empty( $item['control_id'] ) ? esc_attr( $item['control_id'] ) : 'jet-tabs-control-' . $id_int . $tab_count; $this->add_render_attribute( $tab_title_setting_key, array( 'id' => $tab_control_id, 'class' => array( 'jet-tabs__control', 'jet-tabs__control-icon-' . $this->get_settings( 'tabs_control_icon_position' ), 'elementor-menu-anchor', ( $index === $active_index && ! $no_active_tabs ) ? 'active-tab' : '', ( $tabs_scrolling_navigation && $tab_scroll_type === 'slider' ) ? 'swiper-slide' : '', ), 'data-tab' => $tab_count, 'tabindex' => 0, 'role' => 'tab', 'aria-controls' => 'jet-tabs-content-' . $id_int . $tab_count, 'aria-expanded' => $index === $active_index ? 'true' : 'false', 'data-template-id' => ! empty( $item['item_template_id'] ) ? $item['item_template_id'] : 'false', ) ); $title_icon_html = $this->__get_icon( 'item_icon', $item, '
%s
' ); $title_image_html = ''; if ( ! empty( $item['item_image']['url'] ) ) { $title_image_html = sprintf( '', $item['item_image']['url'] ); } $title_label_html = ''; if ( ! empty( $item['item_label'] ) ) { $title_label_html = sprintf( '<' . $tabs_item_label_tag . ' class="jet-tabs__label-text">%1$s', $item['item_label'] ); } if ( 'right' === $this->get_settings( 'tabs_control_icon_position' ) ) { echo sprintf( '
%2$s%3$s
', $this->get_render_attribute_string( $tab_title_setting_key ), // phpcs:ignore $title_label_html, // phpcs:ignore filter_var( $item['item_use_image'], FILTER_VALIDATE_BOOLEAN ) ? $title_image_html : $title_icon_html // phpcs:ignore ); } else { echo sprintf( '
%2$s%3$s
', $this->get_render_attribute_string( $tab_title_setting_key ), // phpcs:ignore filter_var( $item['item_use_image'], FILTER_VALIDATE_BOOLEAN ) ? $title_image_html : $title_icon_html, // phpcs:ignore $title_label_html // phpcs:ignore ); } $tabs_content[] = $this->get_tab_item_content( $item, $index, array( 'id_int' => $id_int, 'active_index' => $active_index, 'no_active_tabs' => $no_active_tabs, 'ajax_template' => $ajax_template, ) ); } do_action( 'jet-engine-query-gateway/reset-item' ); ?>
$tab ) { echo $tab; // phpcs:ignore } ?>
maybe_enqueue_styles(); $this->maybe_enqueue_scripts(); ?>
' . esc_html__( 'You Haven’t Saved Templates Yet.', 'jet-tabs' ) . '
'; } /** * [no_templates_message description] * @return [type] [description] */ public function no_templates_message() { $message = '' . esc_html__( 'Template is not defined. ', 'jet-tabs' ) . ''; $link = add_query_arg( array( 'post_type' => 'elementor_library', 'action' => 'elementor_new_post', '_wpnonce' => wp_create_nonce( 'elementor_action_new_post' ), 'template_type' => 'section', ), esc_url( admin_url( '/edit.php' ) ) ); $new_link = '' . esc_html__( 'Select an existing template or create a ', 'jet-tabs' ) . '' . esc_html__( 'new one', 'jet-tabs' ) . '' ; return sprintf( '
%1$s%2$s
', $message, jet_tabs_integration()->in_elementor() ? $new_link : '' ); } /** * [no_template_content_message description] * @return [type] [description] */ public function no_template_content_message() { $message = '' . esc_html__( 'The tabs are working. Please, note, that you have to add a template to the library in order to be able to display it inside the tabs.', 'jet-tabs' ) . ''; return sprintf( '
%1$s
', $message ); } /** * [get_template_edit_link description] * @param [type] $template_id [description] * @return [type] [description] */ public function get_template_edit_link( $template_id ) { $link = add_query_arg( 'elementor', '', get_permalink( $template_id ) ); return ' ' . esc_html__( 'Edit Template', 'jet-tabs' ) . ''; } /** * Get seconds by tag for transient caching * * @param string $tag Time duration tag * @return string|int Returns 'none' or seconds */ public static function get_cache_timeout($tag = 'none') { if ('none' === $tag) { return 'none'; } switch ($tag) { case 'hour': $delay = HOUR_IN_SECONDS; break; case 'day': $delay = DAY_IN_SECONDS; break; case '3days': $delay = 3 * DAY_IN_SECONDS; break; case 'week': $delay = WEEK_IN_SECONDS; break; case 'month': $delay = MONTH_IN_SECONDS; break; default: $delay = 'none'; break; } return $delay; } /** * @return false|void */ public function maybe_enqueue_styles() { $style_depends = $this->get_styles_to_enqueue(); if ( empty( $style_depends ) ) { return false; } foreach ( $style_depends as $key => $style_data ) { $style_handle = $style_data['handle']; if ( wp_style_is( $style_handle ) ) { continue; } $style_obj = $style_data['obj']; if ( $style_obj ) { if ( ! isset( wp_styles()->registered[ $style_handle ] ) ) { wp_styles()->registered[ $style_handle ] = $style_obj; } wp_enqueue_style( $style_obj->handle, $style_obj->src, $style_obj->deps, $style_obj->ver ); } else { wp_enqueue_style( $style_handle, $style_data['src'] ); } } } /** * [] * @return [type] [description] */ public function maybe_enqueue_scripts() { $script_depends = $this->get_scripts_to_enqueue(); if ( empty( $script_depends ) ) { return false; } foreach ( $script_depends as $script => $script_data ) { $script_handle = $script_data['handle']; $script_obj = $script_data['obj']; if ( wp_script_is( $script_handle ) ) { continue; } wp_scripts()->registered[ $script_handle ] = $script_obj; } foreach ( $script_depends as $script => $script_data ) { $script_handle = $script_data['handle']; if ( wp_script_is( $script_handle ) ) { continue; } $script_obj = $script_data['obj']; wp_enqueue_script( $script_obj->handle, $script_obj->src, $script_obj->deps, $script_obj->ver ); wp_scripts()->print_extra_script( $script_obj->handle ); } } public function get_styles_to_enqueue() { return $this->styles_to_enqueue; } /** * Get script dependencies. * * Retrieve the list of script dependencies the element requires. * * @since 1.3.0 * @access public * * @return array Element scripts dependencies. */ public function get_scripts_to_enqueue() { return $this->scripts_to_enqueue; } /** * @var array */ public $styles_to_enqueue = []; /** * [$depended_scripts description] * @var array */ public $scripts_to_enqueue = []; } base/json-ld-schema.php000075500000003426151121477560011014 0ustar00hooked ) { add_action( 'wp_footer', [ $this, 'print_schema' ], 999 ); $this->hooked = true; } $this->schema[] = array( '@type' => 'Question', 'name' => wp_strip_all_tags( $question ), 'acceptedAnswer' => array( '@type' => 'Answer', 'text' => wp_strip_all_tags( $answer ), ), ); } /** * Print schema in JSON-LD format * * @return void */ public function print_schema() { if ( ! empty( $this->schema ) ) { $json_ld = array( '@context' => 'https://schema.org', '@type' => 'FAQPage', 'mainEntity' => $this->schema, ); echo ''; } } } } base/class-jet-tabs-base.php000075500000043247151121477560011741 0ustar00__load_level = (int)jet_tabs_settings()->get( 'widgets_load_level', 100 ); $widget_name = $this->get_name(); $this->__include_controls = apply_filters( "jet-tabs/editor/{$widget_name}/include-controls", [], $widget_name, $this ); $this->__exclude_controls = apply_filters( "jet-tabs/editor/{$widget_name}/exclude-controls", [], $widget_name, $this ); } /** * Get globaly affected template * * @param [type] $name [description] * @return [type] [description] */ public function __get_global_template( $name = null ) { $template = call_user_func( array( $this, sprintf( '__get_%s_template', $this->__context ) ) ); if ( ! $template ) { $template = jet_tabs()->get_template( $this->get_name() . '/global/' . $name . '.php' ); } return $template; } /** * Get front-end template * @param [type] $name [description] * @return [type] [description] */ public function __get_render_template( $name = null ) { return jet_tabs()->get_template( $this->get_name() . '/render/' . $name . '.php' ); } /** * Get editor template * @param [type] $name [description] * @return [type] [description] */ public function __get_edit_template( $name = null ) { return jet_tabs()->get_template( $this->get_name() . '/edit/' . $name . '.php' ); } /** * Get global looped template for settings * Required only to process repeater settings. * * @param string $name Base template name. * @param string $setting Repeater setting that provide data for template. * @return void */ public function __get_global_looped_template( $name = null, $setting = null ) { $templates = array( 'start' => $this->__get_global_template( $name . '-loop-start' ), 'loop' => $this->__get_global_template( $name . '-loop-item' ), 'end' => $this->__get_global_template( $name . '-loop-end' ), ); call_user_func( array( $this, sprintf( '__get_%s_looped_template', $this->__context ) ), $templates, $setting ); } /** * Get render mode looped template * * @param array $templates [description] * @param [type] $setting [description] * @return [type] [description] */ public function __get_render_looped_template( $templates = array(), $setting = null ) { $loop = $this->get_settings_for_display( $setting ); $loop = apply_filters( 'jet-tabs/widget/loop-items', $loop, $setting, $this ); if ( empty( $loop ) ) { return; } if ( ! empty( $templates['start'] ) ) { include $templates['start']; } do_action( 'jet-engine-query-gateway/before-loop', $setting, $this ); foreach ( $loop as $item ) { $this->__processed_item = $item; if ( ! empty( $templates['start'] ) ) { include $templates['loop']; } $this->__processed_index++; } do_action( 'jet-engine-query-gateway/reset-item' ); $this->__processed_item = false; $this->__processed_index = 0; if ( ! empty( $templates['end'] ) ) { include $templates['end']; } } /** * Get edit mode looped template * * @param array $templates [description] * @param [type] $setting [description] * @return [type] [description] */ public function __get_edit_looped_template( $templates = array(), $setting = null ) { ?> <# if ( settings. ) { #> // phpcs:ignore <# _.each( settings., function( item ) { #> // phpcs:ignore <# } ); #> <# } #> __context ) ), $keys, $format ); } /** * Loop edit item * * @param [type] $keys [description] * @param string $format [description] * @param boolean $nested_key [description] * @return [type] [description] */ public function __edit_loop_item( $keys = array(), $format = '%s' ) { $settings = $keys[0]; if ( isset( $keys[1] ) ) { $settings .= '.' . $keys[1]; } ob_start(); echo '<# if ( item.' . $settings . ' ) { #>'; // phpcs:ignore printf( $format, '{{{ item.' . $settings . ' }}}' ); // phpcs:ignore echo '<# } #>'; return ob_get_clean(); } /** * Loop render item * * @param string $format [description] * @param [type] $key [description] * @param boolean $nested_key [description] * @return [type] [description] */ public function __render_loop_item( $keys = array(), $format = '%s' ) { $item = $this->__processed_item; $key = $keys[0]; $nested_key = isset( $keys[1] ) ? $keys[1] : false; if ( empty( $item ) || ! isset( $item[ $key ] ) ) { return false; } if ( false === $nested_key || ! is_array( $item[ $key ] ) ) { $value = $item[ $key ]; } else { $value = isset( $item[ $key ][ $nested_key ] ) ? $item[ $key ][ $nested_key ] : false; } if ( ! empty( $value ) ) { return sprintf( $format, $value ); } } /** * Include global template if any of passed settings is defined * * @param [type] $name [description] * @param [type] $settings [description] * @return [type] [description] */ public function __glob_inc_if( $name = null, $settings = array() ) { $template = $this->__get_global_template( $name ); call_user_func( array( $this, sprintf( '__%s_inc_if', $this->__context ) ), $template, $settings ); } /** * Include render template if any of passed setting is not empty * * @param [type] $file [description] * @param [type] $settings [description] * @return [type] [description] */ public function __render_inc_if( $file = null, $settings = array() ) { foreach ( $settings as $setting ) { $val = $this->get_settings_for_display( $setting ); if ( ! empty( $val ) ) { include $file; return; } } } /** * Include render template if any of passed setting is not empty * * @param [type] $file [description] * @param [type] $settings [description] * @return [type] [description] */ public function __edit_inc_if( $file = null, $settings = array() ) { $condition = null; $sep = null; foreach ( $settings as $setting ) { $condition .= $sep . 'settings.' . $setting; $sep = ' || '; } ?> <# if ( ) { #> <# } #> ', $this->get_name() ); // phpcs:ignore } /** * Close standard wrapper * * @return void */ public function __close_wrap() { echo ''; } /** * Print HTML markup if passed setting not empty. * * @param string $setting Passed setting. * @param string $format Required markup. * @param array $args Additional variables to pass into format string. * @param bool $echo Echo or return. * @return string|void */ public function __html( $setting = null, $format = '%s' ) { call_user_func( array( $this, sprintf( '__%s_html', $this->__context ) ), $setting, $format ); } /** * Returns HTML markup if passed setting not empty. * * @param string $setting Passed setting. * @param string $format Required markup. * @param array $args Additional variables to pass into format string. * @param bool $echo Echo or return. * @return string|void */ public function __get_html( $setting = null, $format = '%s' ) { ob_start(); $this->__html( $setting, $format ); return ob_get_clean(); } /** * Print HTML template * * @param [type] $setting [description] * @param [type] $format [description] * @return [type] [description] */ public function __render_html( $setting = null, $format = '%s' ) { if ( is_array( $setting ) ) { $key = $setting[1]; $setting = $setting[0]; } $val = $this->get_settings_for_display( $setting ); if ( ! is_array( $val ) && '0' === $val ) { printf( $format, $val ); // phpcs:ignore } if ( is_array( $val ) && empty( $val[ $key ] ) ) { return ''; } if ( ! is_array( $val ) && empty( $val ) ) { return ''; } if ( is_array( $val ) ) { printf( $format, $val[ $key ] ); // phpcs:ignore } else { printf( $format, $val ); // phpcs:ignore } } /** * Print underscore template * * @param [type] $setting [description] * @param [type] $format [description] * @return [type] [description] */ public function __edit_html( $setting = null, $format = '%s' ) { if ( is_array( $setting ) ) { $setting = $setting[0] . '.' . $setting[1]; } echo '<# if ( settings.' . $setting . ' ) { #>'; // phpcs:ignore printf( $format, '{{{ settings.' . $setting . ' }}}' ); // phpcs:ignore echo '<# } #>'; } /** * Set posts query results */ public function __set_query( $posts ) { $this->__query = $posts; } /** * Return posts query results */ public function __get_query() { return $this->__query; } /** * [__add_control description] * @param boolean $control_id [description] * @param array $control_args [description] * @param integer $load_level [description] * @return [type] [description] */ public function __add_control( $control_id = false, $control_args = [], $load_level = 100 ) { if ( ( $this->__load_level < $load_level || 0 === $this->__load_level || in_array( $control_id, $this->__exclude_controls ) ) && !in_array( $control_id, $this->__include_controls ) ) { return false; } if ( function_exists( 'jet_styles_manager' ) && jet_styles_manager()->compatibility ) { $control_args = jet_styles_manager()->compatibility->set_control_args( $control_args, $load_level, 'jet-tabs' ); } $this->add_control( $control_id, $control_args ); } /** * [__add_responsive_control description] * @param boolean $control_id [description] * @param array $control_args [description] * @param integer $load_level [description] * @return [type] [description] */ public function __add_responsive_control( $control_id = false, $control_args = [], $load_level = 100 ) { if ( ( $this->__load_level < $load_level || 0 === $this->__load_level || in_array( $control_id, $this->__exclude_controls ) ) && !in_array( $control_id, $this->__include_controls ) ) { return false; } if ( function_exists( 'jet_styles_manager' ) && jet_styles_manager()->compatibility ) { $control_args = jet_styles_manager()->compatibility->set_control_args( $control_args, $load_level, 'jet-tabs' ); } $this->add_responsive_control( $control_id, $control_args ); } /** * [__add_group_control description] * @param boolean $group_control_type [description] * @param array $group_control_args [description] * @param integer $load_level [description] * @return [type] [description] */ public function __add_group_control( $group_control_type = false, $group_control_args = [], $load_level = 100 ) { if ( ( $this->__load_level < $load_level || 0 === $this->__load_level || in_array( $group_control_args['name'], $this->__exclude_controls ) ) && !in_array( $group_control_args['name'], $this->__include_controls ) ) { return false; } if ( function_exists( 'jet_styles_manager' ) && jet_styles_manager()->compatibility ) { $group_control_args = jet_styles_manager()->compatibility->set_group_control_args( $group_control_type, $group_control_args, $load_level, 'jet-tabs' ); } $this->add_group_control( $group_control_type, $group_control_args ); } /** * [__start_controls_section description] * @param boolean $controls_section_id [description] * @param array $controls_section_args [description] * @param integer $load_level [description] * @return [type] [description] */ public function __start_controls_section( $controls_section_id = false, $controls_section_args = [], $load_level = 25 ) { if ( ! $controls_section_id || $this->__load_level < $load_level || 0 === $this->__load_level ) { return false; } $this->start_controls_section( $controls_section_id, $controls_section_args ); } /** * [__end_controls_section description] * @param integer $load_level [description] * @return [type] [description] */ public function __end_controls_section( $load_level = 25 ) { if ( $this->__load_level < $load_level || 0 === $this->__load_level ) { return false; } $this->end_controls_section(); } /** * [__start_controls_tabs description] * @param boolean $tabs_id [description] * @param integer $load_level [description] * @return [type] [description] */ public function __start_controls_tabs( $tabs_id = false, $load_level = 25 ) { if ( ! $tabs_id || $this->__load_level < $load_level || 0 === $this->__load_level ) { return false; } $this->start_controls_tabs( $tabs_id ); } /** * [__end_controls_tabs description] * @param integer $load_level [description] * @return [type] [description] */ public function __end_controls_tabs( $load_level = 25 ) { if ( $this->__load_level < $load_level || 0 === $this->__load_level ) { return false; } $this->end_controls_tabs(); } /** * [__start_controls_tab description] * @param boolean $tab_id [description] * @param array $tab_args [description] * @param integer $load_level [description] * @return [type] [description] */ public function __start_controls_tab( $tab_id = false, $tab_args = [], $load_level = 25 ) { if ( ! $tab_id || $this->__load_level < $load_level || 0 === $this->__load_level ) { return false; } $this->start_controls_tab( $tab_id, $tab_args ); } /** * [__end_controls_tab description] * @param integer $load_level [description] * @return [type] [description] */ public function __end_controls_tab( $load_level = 25 ) { if ( $this->__load_level < $load_level || 0 === $this->__load_level ) { return false; } $this->end_controls_tab(); } /** * Returns HTML icon markup * * @param array $setting * @param array $settings * @param string $format * @param string $icon_class * @return string */ public function __get_icon( $setting = null, $settings = null, $format = '%s', $icon_class = '' ) { return $this->__render_icon( $setting, $settings, $format, $icon_class, false ); } /** * Print HTML icon template * * @param array $setting * @param array $settings * @param string $format * @param string $icon_class * @param bool $echo * * @return void|string */ public function __render_icon( $setting = null, $settings = null, $format = '%s', $icon_class = '', $echo = true ) { if ( null === $settings ) { $settings = $this->get_settings_for_display(); } $new_setting = $this->__new_icon_prefix . $setting; $migrated = isset( $settings['__fa4_migrated'][ $new_setting ] ); $is_new = ( empty( $settings[ $setting ] ) || 'false' === $settings[ $setting ] ) && class_exists( 'Elementor\Icons_Manager' ) && Icons_Manager::is_migration_allowed(); $icon_html = ''; if ( $is_new || $migrated ) { $attr = array(); if ( ! empty( $icon_class ) ) { $attr['class'] = $icon_class; } if ( isset( $settings[ $new_setting ] ) ) { ob_start(); Icons_Manager::render_icon( $settings[ $new_setting ], $attr ); $icon_html = ob_get_clean(); } } else if ( ! empty( $settings[ $setting ] ) ) { if ( empty( $icon_class ) ) { $icon_class = $settings[ $setting ]; } else { $icon_class .= ' ' . $settings[ $setting ]; } $icon_html = sprintf( '', esc_attr( $icon_class ) ); } if ( empty( $icon_html ) ) { return; } if ( ! $echo ) { return sprintf( $format, $icon_html ); } printf( $format, $icon_html ); // phpcs:ignore } /** * Return available html tag list * @return array */ public function get_available_item_html_tags() { return array( 'h1' => esc_html__( 'H1', 'jet-tabs' ), 'h2' => esc_html__( 'H2', 'jet-tabs' ), 'h3' => esc_html__( 'H3', 'jet-tabs' ), 'h4' => esc_html__( 'H4', 'jet-tabs' ), 'h5' => esc_html__( 'H5', 'jet-tabs' ), 'h6' => esc_html__( 'H6', 'jet-tabs' ), 'div' => esc_html__( 'div', 'jet-tabs' ), 'span' => esc_html__( 'span', 'jet-tabs' ), 'p' => esc_html__( 'p', 'jet-tabs' ), ); } public function validate_html_tag( $tag ) { $allowed_tags = array( 'article', 'aside', 'div', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'main', 'nav', 'p', 'section', 'span', ); return in_array( strtolower( $tag ), $allowed_tags ) ? $tag : 'div'; } } compatibility/wpml-modules/jet-wpml-accordion.php000075500000001400151121477560016260 0ustar00plugin_path( 'includes/compatibility/wpml-modules/jet-wpml-accordion.php' ); require jet_tabs()->plugin_path( 'includes/compatibility/wpml-modules/jet-wpml-image-accordion.php' ); require jet_tabs()->plugin_path( 'includes/compatibility/wpml-modules/jet-wpml-tabs.php' ); } /** * Add wpml translation nodes * * @param array $nodes_to_translate * * @return array */ public function add_wpml_translatable_nodes( $nodes_to_translate ) { $nodes_to_translate['jet-accordion'] = array( 'conditions' => array( 'widgetType' => 'jet-accordion' ), 'integration-class' => 'Jet_Tabs_WPML_Accordion', ); $nodes_to_translate['jet-image-accordion'] = array( 'conditions' => array( 'widgetType' => 'jet-image-accordion' ), 'integration-class' => 'Jet_Tabs_WPML_Image_Accordion', ); $nodes_to_translate['jet-switcher'] = array( 'conditions' => array( 'widgetType' => 'jet-switcher' ), 'fields' => array( array( 'field' => 'disable_label', 'type' => esc_html__( 'Jet Switcher: Disable Label', 'jet-tabs' ), 'editor_type' => 'LINE', ), array( 'field' => 'disable_item_editor_content', 'type' => esc_html__( 'Jet Switcher: Disable Editor Content', 'jet-tabs' ), 'editor_type' => 'VISUAL', ), array( 'field' => 'enable_label', 'type' => esc_html__( 'Jet Switcher: Enable Label', 'jet-tabs' ), 'editor_type' => 'LINE', ), array( 'field' => 'enable_item_editor_content', 'type' => esc_html__( 'Jet Switcher: Enable Editor Content', 'jet-tabs' ), 'editor_type' => 'VISUAL', ), ), ); $nodes_to_translate['jet-tabs'] = array( 'conditions' => array( 'widgetType' => 'jet-tabs' ), 'integration-class' => 'Jet_Tabs_WPML_Tabs', ); return $nodes_to_translate; } /** * Set WPML translated template. * * @param $template_id * * @return mixed|void */ public function set_wpml_translated_template_id( $template_id ) { $post_type = get_post_type( $template_id ); return apply_filters( 'wpml_object_id', $template_id, $post_type, true ); } /** * Set Polylang translated template. * * @param $template_id * * @return false|int|null */ public function set_pll_translated_template_id( $template_id ) { if ( function_exists( 'pll_get_post' ) ) { $translation_template_id = pll_get_post( $template_id ); if ( null === $translation_template_id ) { // the current language is not defined yet return $template_id; } elseif ( false === $translation_template_id ) { //no translation yet return $template_id; } elseif ( $translation_template_id > 0 ) { // return translated post id return $translation_template_id; } } return $template_id; } /** * Returns the instance. * * @since 1.0.0 * @return Jet_Tabs_Compatibility */ public static function get_instance() { // If the single instance hasn't been set, set it now. if ( null == self::$instance ) { self::$instance = new self; } return self::$instance; } } } /** * Returns instance of Jet_Tabs_Compatibility * * @return Jet_Tabs_Compatibility */ function jet_tabs_compatibility() { return Jet_Tabs_Compatibility::get_instance(); } controls/groups/class-jet-tabs-group-control-box-style.php000075500000022202151121477560020021 0ustar00 esc_html__( 'Color', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{SELECTOR}}' => 'color: {{VALUE}}', ), ); $fields['background'] = array( 'label' => _x( 'Background Type', 'Background Control', 'jet-tabs' ), 'type' => Controls_Manager::CHOOSE, 'options' => array( 'color' => array( 'title' => _x( 'Classic', 'Background Control', 'jet-tabs' ), 'icon' => 'fa fa-paint-brush', ), 'gradient' => array( 'title' => _x( 'Gradient', 'Background Control', 'jet-tabs' ), 'icon' => 'fa fa-barcode', ), ), 'label_block' => false, 'render_type' => 'ui', ); $fields['color'] = array( 'label' => _x( 'Color', 'Background Control', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'title' => _x( 'Background Color', 'Background Control', 'jet-tabs' ), 'selectors' => array( '{{SELECTOR}}' => 'background-color: {{VALUE}};', ), 'condition' => array( 'background' => array( 'color', 'gradient' ), ), ); $fields['color_stop'] = array( 'label' => _x( 'Location', 'Background Control', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( '%' ), 'default' => array( 'unit' => '%', 'size' => 0, ), 'render_type' => 'ui', 'condition' => array( 'background' => array( 'gradient' ), ), 'of_type' => 'gradient', ); $fields['color_b'] = array( 'label' => _x( 'Second Color', 'Background Control', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'default' => '#f2295b', 'render_type' => 'ui', 'condition' => array( 'background' => array( 'gradient' ), ), 'of_type' => 'gradient', ); $fields['color_b_stop'] = array( 'label' => _x( 'Location', 'Background Control', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( '%' ), 'default' => array( 'unit' => '%', 'size' => 100, ), 'render_type' => 'ui', 'condition' => array( 'background' => array( 'gradient' ), ), 'of_type' => 'gradient', ); $fields['gradient_type'] = array( 'label' => _x( 'Type', 'Background Control', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'options' => array( 'linear' => _x( 'Linear', 'Background Control', 'jet-tabs' ), 'radial' => _x( 'Radial', 'Background Control', 'jet-tabs' ), ), 'default' => 'linear', 'render_type' => 'ui', 'condition' => array( 'background' => array( 'gradient' ), ), 'of_type' => 'gradient', ); $fields['gradient_angle'] = array( 'label' => _x( 'Angle', 'Background Control', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'deg' ), 'default' => array( 'unit' => 'deg', 'size' => 180, ), 'range' => array( 'deg' => array( 'step' => 10, ), ), 'selectors' => array( '{{SELECTOR}}' => 'background-color: transparent; background-image: linear-gradient({{SIZE}}{{UNIT}}, {{color.VALUE}} {{color_stop.SIZE}}{{color_stop.UNIT}}, {{color_b.VALUE}} {{color_b_stop.SIZE}}{{color_b_stop.UNIT}})', ), 'condition' => array( 'background' => array( 'gradient' ), 'gradient_type' => 'linear', ), 'of_type' => 'gradient', ); $fields['gradient_position'] = array( 'label' => _x( 'Position', 'Background Control', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'options' => array( 'center center' => _x( 'Center Center', 'Background Control', 'jet-tabs' ), 'center left' => _x( 'Center Left', 'Background Control', 'jet-tabs' ), 'center right' => _x( 'Center Right', 'Background Control', 'jet-tabs' ), 'top center' => _x( 'Top Center', 'Background Control', 'jet-tabs' ), 'top left' => _x( 'Top Left', 'Background Control', 'jet-tabs' ), 'top right' => _x( 'Top Right', 'Background Control', 'jet-tabs' ), 'bottom center' => _x( 'Bottom Center', 'Background Control', 'jet-tabs' ), 'bottom left' => _x( 'Bottom Left', 'Background Control', 'jet-tabs' ), 'bottom right' => _x( 'Bottom Right', 'Background Control', 'jet-tabs' ), ), 'default' => 'center center', 'selectors' => array( '{{SELECTOR}}' => 'background-color: transparent; background-image: radial-gradient(at {{VALUE}}, {{color.VALUE}} {{color_stop.SIZE}}{{color_stop.UNIT}}, {{color_b.VALUE}} {{color_b_stop.SIZE}}{{color_b_stop.UNIT}})', ), 'condition' => array( 'background' => array( 'gradient' ), 'gradient_type' => 'radial', ), 'of_type' => 'gradient', ); $fields['box_font_size'] = array( 'label' => esc_html__( 'Icon Size', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'px', 'em', 'rem', ), 'responsive' => true, 'range' => array( 'px' => array( 'min' => 5, 'max' => 500, ), ), 'selectors' => array( '{{SELECTOR}}' => 'font-size: {{SIZE}}{{UNIT}}', ), ); $fields['box_size'] = array( 'label' => esc_html__( 'Box Size', 'jet-tabs' ), 'type' => Controls_Manager::SLIDER, 'size_units' => array( 'px', 'em', '%', ), 'range' => array( 'px' => array( 'min' => 5, 'max' => 500, ), ), 'responsive' => true, 'selectors' => array( '{{SELECTOR}}' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};', ), ); $fields['box_border'] = array( 'label' => _x( 'Border Type', 'Border Control', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'options' => array( '' => __( 'None', 'jet-tabs' ), 'solid' => _x( 'Solid', 'Border Control', 'jet-tabs' ), 'double' => _x( 'Double', 'Border Control', 'jet-tabs' ), 'dotted' => _x( 'Dotted', 'Border Control', 'jet-tabs' ), 'dashed' => _x( 'Dashed', 'Border Control', 'jet-tabs' ), ), 'selectors' => array( '{{SELECTOR}}' => 'border-style: {{VALUE}};', ), ); $fields['box_border_width'] = array( 'label' => _x( 'Width', 'Border Control', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'selectors' => array( '{{SELECTOR}}' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'condition' => array( 'box_border!' => '', ), ); $fields['box_border_color'] = array( 'label' => _x( 'Color', 'Border Control', 'jet-tabs' ), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => array( '{{SELECTOR}}' => 'border-color: {{VALUE}};', ), 'condition' => array( 'box_border!' => '', ), ); $fields['box_border_radius'] = array( 'label' => esc_html__( 'Border Radius', 'jet-tabs' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%' ), 'selectors' => array( '{{SELECTOR}}' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), ); $fields['allow_box_shadow'] = array( 'label' => _x( 'Box Shadow', 'Box Shadow Control', 'jet-tabs' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'Yes', 'jet-tabs' ), 'label_off' => esc_html__( 'No', 'jet-tabs' ), 'return_value' => 'yes', 'separator' => 'before', 'render_type' => 'ui', ); $fields['box_shadow'] = array( 'label' => _x( 'Box Shadow', 'Box Shadow Control', 'jet-tabs' ), 'type' => Controls_Manager::BOX_SHADOW, 'condition' => array( 'allow_box_shadow!' => '', ), 'selectors' => array( '{{SELECTOR}}' => 'box-shadow: {{HORIZONTAL}}px {{VERTICAL}}px {{BLUR}}px {{SPREAD}}px {{COLOR}} {{box_shadow_position.VALUE}};', ), ); $fields['box_shadow_position'] = array( 'label' => _x( 'Position', 'Box Shadow Control', 'jet-tabs' ), 'type' => Controls_Manager::SELECT, 'options' => array( ' ' => _x( 'Outline', 'Box Shadow Control', 'jet-tabs' ), 'inset' => _x( 'Inset', 'Box Shadow Control', 'jet-tabs' ), ), 'condition' => array( 'allow_box_shadow!' => '', ), 'default' => ' ', 'render_type' => 'ui', ); return $fields; } protected function prepare_fields( $fields ) { array_walk( $fields, function ( &$field, $field_name ) { if ( in_array( $field_name, array( 'popover_toggle' ) ) ) { return; } $condition = array( 'popover_toggle!' => '', ); if( isset( $field['condition'] ) ) { $field['condition'] = array_merge( $field['condition'], $condition ); } else { $field['condition'] = $condition; } } ); return parent::prepare_fields( $fields ); } } modules/db-updater/cx-db-updater.php000075500000015644151121477560013441 0ustar00 '', 'url' => '', 'callbacks' => array(), 'slug' => null, 'version' => null, 'labels' => array( 'start_update' => 'Start Update', 'data_update' => 'Data Update', 'messages' => array( 'error' => 'Module DB Updater init error in %s - version and slug is required arguments', 'update' => 'We need to update your database to the latest version.', 'updated' => 'Update complete, thank you for updating to the latest version!', ), ), ); /** * Option key for DB version. * * @since 1.0.0 * @var string */ protected $version_key = '%s-db-version'; /** * Nonce format. * * @since 1.0.0 * @var string */ protected $nonce = '_%s-db-update-nonce'; /** * Messages array. * * @since 1.0.0 * @var array */ protected $messages = array(); /** * Update done trigger. * * @since 1.0.0 * @var bool */ protected $updated = false; /** * Cherry_Db_Updater constructor. * * @since 1.0.0 * @param array $args Module arguments. * @return void */ public function __construct( $args = array() ) { $this->args = wp_parse_args( $args, $this->args ); if ( ! is_admin() || ! current_user_can( 'update_plugins' ) ) { return; } add_action( 'admin_notices', array( $this, 'init_notices' ) ); add_action( 'admin_init', array( $this, 'do_update' ) ); $this->messages = $this->args['labels']['messages']; } /** * Process DB update. * * @since 1.0.0 */ public function do_update() { if ( ! $this->is_current_update() ) { return; } $callbacks = $this->prepare_callbacks(); if ( ! empty( $callbacks ) ) { foreach ( $callbacks as $callback ) { if ( is_callable( $callback ) ) { call_user_func( $callback ); } } } $this->set_updated(); } /** * Finalize update. * * @since 1.0.0 */ public function set_updated() { $this->updated = true; $option = sprintf( $this->version_key, esc_attr( $this->args['slug'] ) ); update_option( $option, esc_attr( $this->args['version'] ) ); } /** * Prepare callbacks array. * * @since 1.0.0 * @return array */ private function prepare_callbacks() { $callbacks = array(); if ( empty( $this->args['callbacks'] ) ) { return $callbacks; } ksort( $this->args['callbacks'] ); foreach ( $this->args['callbacks'] as $ver => $ver_cb ) { if ( version_compare( $this->get_current_version(), $ver, '<' ) ) { $callbacks = array_merge( $callbacks, $ver_cb ); } } return $callbacks; } /** * Check if we processed update for plugin passed in arguments. * * @since 1.0.0 * @return bool */ private function is_current_update() { if ( empty( $_GET['cherry_x_db_update'] ) || empty( $_GET['slug'] ) || empty( $_GET['_nonce'] ) ) { return false; } if ( $_GET['slug'] !== $this->args['slug'] ) { return false; } $nonce_action = sprintf( $this->nonce, esc_attr( $this->args['slug'] ) ); if ( ! wp_verify_nonce( $_GET['_nonce'], $nonce_action ) ) { return false; } return true; } /** * Init admin notices. * * @since 1.0.0 * @return void */ public function init_notices() { $enabled = $this->validate_module_args(); if ( ! $enabled ) { return; } $slug = esc_attr( $this->args['slug'] ); if ( $this->is_update_required() ) { $this->show_notice( $slug ); } if ( $this->is_updated() ) { $this->show_updated_notice(); } } /** * Returns current DB version. * * @since 1.0.0 * @return string */ private function get_current_version() { $option = sprintf( $this->version_key, esc_attr( $this->args['slug'] ) ); return get_option( $option, '1.0.0' ); } /** * Check if database requires update. * * @since 1.0.0 * @return bool */ private function is_update_required() { $current = $this->get_current_version(); return version_compare( $current, esc_attr( $this->args['version'] ), '<' ); } /** * Check if update was successfully done. * * @since 1.0.0 * @return bool */ private function is_updated() { if ( ! $this->is_current_update() ) { return false; } return (bool) $this->updated; } /** * Validate module arguments. * * @since 1.0.0 * @return bool */ private function validate_module_args() { if ( empty( $this->args['slug'] ) || empty( $this->args['version'] ) ) { echo '

'; printf( $this->messages['error'], '' . str_replace( untrailingslashit( ABSPATH ), '', $this->args['path'] ) . '' ); echo '

'; return false; } return true; } /** * Show notice. * * @since 1.0.0 * @param string $slug Plugin slug. * @return void */ private function show_notice( $slug ) { echo '
'; echo '

'; $this->notice_title( $slug ); echo $this->messages['update']; echo '

'; echo '

'; $this->notice_submit( $slug ); echo '

'; echo '
'; } /** * Show update notice. * * @since 1.0.0 * @return void */ private function show_updated_notice() { $slug = esc_attr( $this->args['slug'] ); echo '
'; echo '

'; $this->notice_title( $slug ); echo $this->messages['updated']; echo '

'; echo '
'; } /** * Show plugin notice submit button. * * @since 1.0.0 * @param string $slug Plugin slug. * @return void */ private function notice_submit( $slug = '' ) { $format = '%2$s'; $label = $this->args['labels']['start_update']; $url = add_query_arg( array( 'cherry_x_db_update' => true, 'slug' => $slug, '_nonce' => $this->create_nonce( $slug ), ), esc_url( admin_url( 'index.php' ) ) ); printf( $format, $url, $label ); } /** * Create DB update nonce. * * @since 1.0.0 * @param string $slug Plugin slug. * @return string */ private function create_nonce( $slug ) { return wp_create_nonce( sprintf( $this->nonce, $slug ) ); } /** * Show plugin notice title. * * @since 1.0.0 * @param string $slug Plugin slug. * @return void */ private function notice_title( $slug ) { $name = str_replace( '-', ' ', $slug ); $name = ucwords( $name ); printf( '%1$s %2$s – ', $name, $this->args['labels']['data_update'] ); } } } modules/jet-cache/inc/functions.php000075500000001027151121477560013345 0ustar00db_manager->set_cache( $key, $data, $expiration, $source_id, $source ); } /** * @param $transient * * @return false|mixed */ function jet_get_transient( $key = false, $default = false ) { return \Jet_Cache\Manager::get_instance()->db_manager->get_cache( $key, $default ); }modules/jet-cache/inc/db-manager.php000075500000011677151121477560013346 0ustar00init_db_required(); } /** * [wpdb description] * @return [type] [description] */ public function wpdb() { global $wpdb; return $wpdb; } /** * Return table name by key * * @param string $table table key. * @return string */ public static function tables( $table = null, $return = 'all' ) { global $wpdb; $prefix = 'jet_'; $tables = [ 'cache' => [ 'name' => $wpdb->prefix . $prefix . 'cache', 'export_name' => $prefix . 'cache', 'query' => " id bigint(20) NOT NULL AUTO_INCREMENT, source varchar(191) DEFAULT 'default' NOT NULL, source_id bigint(20) DEFAULT '0' NOT NULL, cache_key varchar(191), cache_data longtext, cache_expired text, PRIMARY KEY (id) ", ], ]; if ( ! $table && 'all' === $return ) { return $tables; } switch ( $return ) { case 'all': return isset( $tables[ $table ] ) ? $tables[ $table ] : false; case 'name': return isset( $tables[ $table ] ) ? $tables[ $table ]['name'] : false; case 'query': return isset( $tables[ $table ] ) ? $tables[ $table ]['query'] : false; } return false; } /** * @return void */ public function init_db_required() { global $wpdb; $table_name = $wpdb->prefix . 'jet_cache'; if ( empty( $wpdb->get_var( "SHOW TABLES LIKE '$table_name'" ) ) ) { self::create_tables(); } } /** * Create all tables on activation * * @return [type] [description] */ public static function create_tables() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); foreach ( self::tables() as $table ) { $table_name = $table['name']; $table_query = $table['query']; if ( $table_name !== $wpdb->get_var( "SHOW TABLES LIKE '$table_name'" ) ) { $sql = "CREATE TABLE $table_name ( $table_query ) $charset_collate;"; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); } } } /** * @param $key * @param $data * @param $expiration * @return bool|int|\mysqli_result|null */ public function set_cache( $key = false, $data = [], $expiration = 0, $source_id = 0, $source = 'default' ) { $table_name = $this->tables( 'cache', 'name' ); $cache_row = $this->wpdb()->get_row( $this->wpdb()->prepare( "SELECT * FROM $table_name WHERE cache_key = %s", $key ), OBJECT ); $cache_data = maybe_serialize( $data ); $status = false; $expiration_time = time() + (int) $expiration; if ( empty( $cache_row ) ) { $status = $this->wpdb()->insert( $table_name, [ 'source' => $source, 'source_id' => $source_id, 'cache_key' => $key, 'cache_data' => $cache_data, 'cache_expired' => $expiration_time, ] ); } return $status; } /** * [insert_review description] * @param array $args [description] * @return [type] [description] */ public function get_cache( $key = false, $default = false ) { $table_name = $this->tables( 'cache', 'name' ); $cache_row = $this->wpdb()->get_row( $this->wpdb()->prepare( "SELECT * FROM $table_name WHERE cache_key = %s", $key ), OBJECT ); if ( empty( $cache_row ) ) { return $default; } $cache_expired = $cache_row->cache_expired; if ( ! empty( $cache_expired ) && $cache_expired < time() ) { $this->delete_cache( $key ); return false; } return maybe_unserialize( $cache_row->cache_data ); } /** * @param $key * @return bool|int|\mysqli_result|null */ public function delete_cache( $key = false ) { if ( ! $key ) { return false; } $table_name = $this->tables( 'cache', 'name' ); return $this->wpdb()->delete( $table_name, [ 'cache_key' => $key ] ); } /** * @param $key * @return bool|int|\mysqli_result|null */ public function delete_cache_by_instance_id( $source_id = false, $source = false ) { if ( ! $source_id ) { return false; } $table_name = $this->tables( 'cache', 'name' ); $params = [ 'source_id' => $source_id ]; if ( ! empty( $source ) ) { $params['source'] = $source; } return $this->wpdb()->delete( $table_name, $params ); } /** * @param $key * @return bool|int|\mysqli_result|null */ public function delete_cache_by_source( $source = false ) { if ( ! $source ) { return false; } $table_name = $this->tables( 'cache', 'name' ); $params = [ 'source' => $source ]; return $this->wpdb()->delete( $table_name, $params ); } /** * Returns the instance. * * @return object * @since 1.0.0 */ public static function get_instance() { // If the single instance hasn't been set, set it now. if ( null == self::$instance ) { self::$instance = new self; } return self::$instance; } } modules/jet-cache/jet-cache.php000075500000002606151121477560012413 0ustar00load_files(); $this->db_manager = new DB_Manager(); } /** * [load_files description] * @return [type] [description] */ public function load_files() { /** * Modules */ require $this->path . 'inc/db-manager.php'; require $this->path . 'inc/functions.php'; } /** * Returns the instance. * * @since 1.0.0 * @access public * @return object */ public static function get_instance() { // If the single instance hasn't been set, set it now. if ( null == self::$instance ) { self::$instance = new self; } return self::$instance; } } modules/jet-dashboard/assets/css/jet-dashboard-admin.css000075500000201022151121477560017335 0ustar00.jet-dashboard-page .cx-vui-button{font-size:14px;font-weight:400;background-color:rgba(0,0,0,0)}.jet-dashboard-page .cx-vui-button:hover{background-color:rgba(0,0,0,0)}.jet-dashboard-page .cx-vui-button .cx-vui-button__content>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page .cx-vui-button .cx-vui-button__content .button-icon{margin-right:5px}.jet-dashboard-page .cx-vui-button .cx-vui-button__content .button-dropdown-icon{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-left:10px}.jet-dashboard-page .cx-vui-button .cx-vui-button__content .button-dropdown-icon svg{margin:0}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-default{color:#007cba;-webkit-box-shadow:inset 0 0 0 1px #e0e0e0;box-shadow:inset 0 0 0 1px #e0e0e0}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-default:hover{background-color:rgba(224,224,224,.3)}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-default .cx-vui-button__loader svg,.jet-dashboard-page .cx-vui-button.cx-vui-button--style-default .cx-vui-button__loader path{fill:#007cba}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-default .button-icon,.jet-dashboard-page .cx-vui-button.cx-vui-button--style-default path{fill:#007cba}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-accent{color:#007cba;-webkit-box-shadow:inset 0 0 0 1px #007cba;box-shadow:inset 0 0 0 1px #007cba}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-accent:hover{background-color:rgba(0,124,186,.07)}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-accent .cx-vui-button__loader svg,.jet-dashboard-page .cx-vui-button.cx-vui-button--style-accent .cx-vui-button__loader path{fill:#007cba}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-accent .button-icon,.jet-dashboard-page .cx-vui-button.cx-vui-button--style-accent path{fill:#007cba}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-danger{color:#d6336c;-webkit-box-shadow:inset 0 0 0 1px #d6336c;box-shadow:inset 0 0 0 1px #d6336c}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-danger:hover{background-color:rgba(214,51,108,.07)}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-danger .cx-vui-button__loader svg,.jet-dashboard-page .cx-vui-button.cx-vui-button--style-danger .cx-vui-button__loader path{fill:#d6336c}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-danger .button-icon,.jet-dashboard-page .cx-vui-button.cx-vui-button--style-danger path{fill:#d6336c}.jet-dashboard-page__banners{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:20px}.jet-dashboard-page__banner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;gap:20px;border-radius:4px;color:#23282d;overflow:hidden;min-width:300px;position:relative;background-size:cover;background-position:50% 50%;-webkit-box-shadow:0px 2px 6px rgba(35,40,45,.07);box-shadow:0px 2px 6px rgba(35,40,45,.07)}.jet-dashboard-page__banner .banner-frame{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;border-radius:4px}.jet-dashboard-page__banner .banner-inner{height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px}.jet-dashboard-page__banner .banner-label{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;margin-bottom:38px}.jet-dashboard-page__banner .banner-title{font-size:20px;line-height:28px;margin-bottom:10px}.jet-dashboard-page__banner .banner-content{font-size:14px;line-height:18px;margin-bottom:20px}.jet-dashboard-page__banner .banner-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-page__banner .banner-buttons .cx-vui-button{margin-right:10px}.jet-dashboard-page__banner .banner-buttons .cx-vui-button:last-child{margin-right:0}.jet-dashboard-page__banner.col-4-4{width:100%}.jet-dashboard-page__banner.col-4-3{width:75%}.jet-dashboard-page__banner.col-4-2{width:50%}.jet-dashboard-page__banner.col-4-1{width:25%}.jet-dashboard-page__banner.premade-preset .banner-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;padding:20px 30px 30px 30px}.jet-dashboard-page__banner.light-1-preset{background-color:#fff}.jet-dashboard-page__banner.light-1-preset .banner-label{color:#bb97ff}.jet-dashboard-page__banner.light-1-preset .banner-content{color:#7b7e81}.jet-dashboard-page__banner.light-2-preset{background-image:url("../images/banner-light-bg-1.png");background-color:#f6f9fe;background-size:100% 98px;background-position:50% 0;background-repeat:no-repeat}.jet-dashboard-page__banner.light-2-preset .banner-frame{background-color:#fff;margin:10px}.jet-dashboard-page__banner.light-2-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.light-2-preset .banner-content{color:#7b7e81}.jet-dashboard-page__banner.light-3-preset{background-color:#fff}.jet-dashboard-page__banner.light-3-preset:before{display:block;position:absolute;width:152px;height:152px;top:-50px;right:-30px;background-color:#f6f9fe;content:"";border-radius:50%;z-index:1}.jet-dashboard-page__banner.light-3-preset:after{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-image:url("../images/youtube-icons.svg");background-size:120px;background-position:calc(100% - 5px) -20px;background-repeat:no-repeat;content:"";z-index:2}.jet-dashboard-page__banner.light-3-preset .banner-inner{position:relative;z-index:3}.jet-dashboard-page__banner.light-3-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.light-3-preset .banner-content{color:#7b7e81}.jet-dashboard-page__banner.light-4-preset{background-color:#fff}.jet-dashboard-page__banner.light-4-preset:before{display:block;position:absolute;width:152px;height:152px;top:-50px;right:-30px;background-color:#f6f9fe;border-radius:50%;content:"";z-index:1}.jet-dashboard-page__banner.light-4-preset:after{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-image:url("../images/elementor-wordpress-icon.svg");background-size:120px;background-position:calc(100% - 10px) -55px;background-repeat:no-repeat;content:"";z-index:2}.jet-dashboard-page__banner.light-4-preset .banner-inner{position:relative;z-index:3}.jet-dashboard-page__banner.light-4-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.light-4-preset .banner-content{color:#7b7e81}.jet-dashboard-page__banner.dark-1-preset{background-color:#0f1419}.jet-dashboard-page__banner.dark-1-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.dark-1-preset .banner-title{color:#fff}.jet-dashboard-page__banner.dark-1-preset .banner-content{color:#fff}.jet-dashboard-page__banner.dark-1-preset .cx-vui-button{color:#4efec3;-webkit-box-shadow:inset 0 0 0 1px #4efec3;box-shadow:inset 0 0 0 1px #4efec3}.jet-dashboard-page__banner.dark-2-preset{background-color:#0f1419}.jet-dashboard-page__banner.dark-2-preset:before{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:-o-radial-gradient(2.82% -9.25%, 120px 120px, rgba(40, 112, 93, 0.81) 0%, rgba(40, 112, 93, 0) 100%);background:radial-gradient(120px 120px at 2.82% -9.25%, rgba(40, 112, 93, 0.81) 0%, rgba(40, 112, 93, 0) 100%);content:"";z-index:1}.jet-dashboard-page__banner.dark-2-preset:after{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:-o-radial-gradient(94.51% 127.17%, 190px 190px, #5B77E7 0%, rgba(91, 119, 231, 0) 100%);background:radial-gradient(190px 190px at 94.51% 127.17%, #5B77E7 0%, rgba(91, 119, 231, 0) 100%);content:"";z-index:2}.jet-dashboard-page__banner.dark-2-preset .banner-inner{position:relative;z-index:3}.jet-dashboard-page__banner.dark-2-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.dark-2-preset .banner-title{color:#fff}.jet-dashboard-page__banner.dark-2-preset .banner-content{color:#fff}.jet-dashboard-page__banner.dark-2-preset .cx-vui-button{color:#4efec3;-webkit-box-shadow:inset 0 0 0 1px #4efec3;box-shadow:inset 0 0 0 1px #4efec3}.jet-dashboard-page__banner.dark-3-preset{background-color:#0f1419}.jet-dashboard-page__banner.dark-3-preset:before{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:-o-radial-gradient(91% -24.9%, 190px 190px, rgba(91, 119, 231, 0.88) 0%, rgba(91, 119, 231, 0) 100%);background:radial-gradient(190px 190px at 91% -24.9%, rgba(91, 119, 231, 0.88) 0%, rgba(91, 119, 231, 0) 100%);content:"";z-index:1}.jet-dashboard-page__banner.dark-3-preset:after{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-image:url("../images/youtube-icons.svg");background-size:120px;background-position:calc(100% - 5px) -20px;background-repeat:no-repeat;content:"";z-index:2}.jet-dashboard-page__banner.dark-3-preset .banner-inner{position:relative;z-index:3}.jet-dashboard-page__banner.dark-3-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.dark-3-preset .banner-title{color:#fff}.jet-dashboard-page__banner.dark-3-preset .banner-content{color:#fff}.jet-dashboard-page__banner.dark-3-preset .cx-vui-button{color:#4efec3;-webkit-box-shadow:inset 0 0 0 1px #4efec3;box-shadow:inset 0 0 0 1px #4efec3}.jet-dashboard-page__banner.dark-4-preset{background-color:#0f1419}.jet-dashboard-page__banner.dark-4-preset:before{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:-o-radial-gradient(91% -24.9%, 190px 190px, rgba(91, 119, 231, 0.88) 0%, rgba(91, 119, 231, 0) 100%);background:radial-gradient(190px 190px at 91% -24.9%, rgba(91, 119, 231, 0.88) 0%, rgba(91, 119, 231, 0) 100%);content:"";z-index:1}.jet-dashboard-page__banner.dark-4-preset:after{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-image:url("../images/elementor-wordpress-icon.svg");background-size:120px;background-position:calc(100% - 20px) -60px;background-repeat:no-repeat;content:"";z-index:2}.jet-dashboard-page__banner.dark-4-preset .banner-inner{position:relative;z-index:3}.jet-dashboard-page__banner.dark-4-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.dark-4-preset .banner-title{color:#fff}.jet-dashboard-page__banner.dark-4-preset .banner-content{color:#fff}.jet-dashboard-page__banner.dark-4-preset .cx-vui-button{color:#4efec3;-webkit-box-shadow:inset 0 0 0 1px #4efec3;box-shadow:inset 0 0 0 1px #4efec3}.jet-dashboard-page .cx-vui-alert{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;padding:10px 20px;margin-top:20px;background-color:#f4f4f5;border-radius:4px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jet-dashboard-page .cx-vui-alert .cx-vui-alert__icon{margin-top:3px;margin-right:10px}.jet-dashboard-page .cx-vui-alert .cx-vui-alert__message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;color:#7b7e81;font-size:13px}.jet-dashboard-page .cx-vui-alert.info-type{background-color:#edf6fa}.jet-dashboard-page .cx-vui-alert.info-type .cx-vui-alert__icon svg{fill:#007cba}.jet-dashboard-page .cx-vui-alert.info-type .cx-vui-alert__message{color:#007cba}.jet-dashboard-page .cx-vui-alert.success-type{background-color:#e9f6ea}.jet-dashboard-page .cx-vui-alert.success-type .cx-vui-alert__icon svg{fill:#46b450}.jet-dashboard-page .cx-vui-alert.success-type .cx-vui-alert__message{color:#46b450}.jet-dashboard-page .cx-vui-alert.error-type{background-color:#fbf0f0}.jet-dashboard-page .cx-vui-alert.error-type .cx-vui-alert__icon svg{fill:#c92c2c}.jet-dashboard-page .cx-vui-alert.error-type .cx-vui-alert__message{color:#c92c2c}.jet-dashboard-page__alerts{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-page__alert{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:20px;background-color:#fff;-webkit-box-shadow:0px 2px 6px rgba(35,40,45,.07);box-shadow:0px 2px 6px rgba(35,40,45,.07);padding:20px 30px;margin-top:10px}.jet-dashboard-page__alert:first-child{margin-top:0}.jet-dashboard-page__alert.info-type .alert-type-line{background:#3dddc1;background:-webkit-gradient(linear, left bottom, left top, from(#3DDDC1), to(#5099E6)),#5099e6;background:-o-linear-gradient(bottom, #3DDDC1 0%, #5099E6 100%),#5099e6;background:linear-gradient(0deg, #3DDDC1 0%, #5099E6 100%),#5099e6}.jet-dashboard-page__alert.success-type .alert-type-line{background:#40d825;background:-webkit-gradient(linear, left top, left bottom, from(#40D825), to(#B1EF3A));background:-o-linear-gradient(top, #40D825 0%, #B1EF3A 100%);background:linear-gradient(180deg, #40D825 0%, #B1EF3A 100%)}.jet-dashboard-page__alert.danger-type .alert-type-line{background:#fedb22;background:-webkit-gradient(linear, left bottom, left top, from(#FEDB22), to(#FFA901)),#5099e6;background:-o-linear-gradient(bottom, #FEDB22 0%, #FFA901 100%),#5099e6;background:linear-gradient(0deg, #FEDB22 0%, #FFA901 100%),#5099e6}.jet-dashboard-page__alert.error-type .alert-type-line{background:#ff8b8b;background:-webkit-gradient(linear, left bottom, left top, from(#FF8B8B), to(#F5435A)),#5099e6;background:-o-linear-gradient(bottom, #FF8B8B 0%, #F5435A 100%),#5099e6;background:linear-gradient(0deg, #FF8B8B 0%, #F5435A 100%),#5099e6}.jet-dashboard-page__alert .alert-type-line{display:block;position:absolute;width:4px;height:100%;top:0;left:0;background:-webkit-gradient(linear, left bottom, left top, from(#5B77E7), color-stop(53.65%, #49B5D2), to(#26E8A8));background:-o-linear-gradient(bottom, #5B77E7 0%, #49B5D2 53.65%, #26E8A8 100%);background:linear-gradient(0deg, #5B77E7 0%, #49B5D2 53.65%, #26E8A8 100%)}.jet-dashboard-page__alert .alert-close{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:7px;right:7px;cursor:pointer}.jet-dashboard-page__alert .alert-icon{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:80px;width:48px}.jet-dashboard-page__alert .alert-icon svg{width:100%;height:auto}.jet-dashboard-page__alert .alert-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;gap:10px}.jet-dashboard-page__alert .alert-title{color:#23282d;font-size:14px;line-height:18px;font-weight:500}.jet-dashboard-page__alert .alert-message{color:#7b7e81;font-size:13px;line-height:16px}.jet-dashboard-page__alert .alert-buttons .cx-vui-button{margin-right:10px}.jet-dashboard-page__alert .alert-buttons .cx-vui-button:last-child{margin-right:0}.jet-dashboard-page .cx-vui-popup .cx-vui-popup__header{text-align:center;margin-bottom:30px}.jet-dashboard-page .cx-vui-popup .cx-vui-popup__header-label{font-weight:500;font-size:24px;line-height:36px;text-align:center;color:#23282d}.jet-dashboard-page .cx-vui-popup.license-manager-popup .cx-vui-popup__body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;overflow:hidden;max-height:calc(100% - 100px)}.jet-dashboard-page .cx-vui-popup.license-manager-popup .cx-vui-popup__header{padding-bottom:15px;border-bottom:1px solid #dcdcdd}.jet-dashboard-page .cx-vui-popup.license-manager-popup .cx-vui-popup__header .cx-vui-popup__header-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page .cx-vui-popup.license-manager-popup .cx-vui-popup__content{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow-y:auto}.jet-dashboard-page .cx-vui-popup.license-manager-popup .cx-vui-popup__content .license-manager{width:100%;max-width:1260px}.jet-dashboard-page .cx-vui-popup.license-activation-popup .cx-vui-popup__header{text-align:center}.jet-dashboard-page .cx-vui-popup.license-activation-popup .popup-licence-control{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:10px}.jet-dashboard-page .cx-vui-popup.license-activation-popup .popup-licence-control p{width:100%}.jet-dashboard-page .cx-vui-popup.license-activation-popup .popup-licence-control .popup-licence__key{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-page .cx-vui-popup.license-activation-popup .popup-licence-control .popup-licence__key input{border-radius:4px 0 0 4px}.jet-dashboard-page .cx-vui-popup.license-activation-popup .popup-licence-control .popup-licence__action-button{border-radius:0 4px 4px 0;-webkit-box-shadow:none;box-shadow:none}.jet-dashboard-page .cx-vui-popup.license-deactivation-popup .cx-vui-popup__content{text-align:center}.jet-dashboard-page .cx-vui-popup.license-deactivation-popup .cx-vui-popup__content .show-license-manager{margin-top:20px}.jet-dashboard-page .cx-vui-popup.update-check-popup .cx-vui-popup__content{text-align:center}.jet-dashboard-page .cx-vui-popup.update-check-popup .cx-vui-popup__content svg{margin-bottom:20px}.jet-dashboard-page .cx-vui-popup.update-check-popup .cx-vui-popup__content p{text-align:center;line-height:30px}.jet-dashboard-page .cx-vui-popup.update-check-popup .cx-vui-popup__content p span{font-size:20px;color:#23282d;display:block}.jet-dashboard-page .cx-vui-popup.update-check-popup .cx-vui-popup__content .cx-vui-button{margin-top:20px}.jet-dashboard-page .cx-vui-popup.rollback-popup p{text-align:center;line-height:30px}.jet-dashboard-page .cx-vui-popup.rollback-popup p i{display:block;color:#d6336c}.jet-dashboard-page .cx-vui-popup.rollback-popup .cx-vui-button{margin-top:10px;width:100%}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner.responce-type-error .responce-data-popup__title{color:#c92c2c}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner.responce-type-success .responce-data-popup__title{color:#46b450}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner .responce-data-popup__header{padding-bottom:15px;border-bottom:1px solid #dcdcdd;margin-bottom:30px}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner .responce-data-popup__title{font-weight:500;font-size:24px;line-height:36px;color:#23282d}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner p:last-child{padding-bottom:0}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner p .activation-limit{display:inline-block;width:20px;height:20px;text-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%;color:#fff;background-color:#007cba}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner .responce-data-popup__activated-sites{margin-bottom:20px}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner .responce-data-popup__activated-sites p{padding-bottom:5px}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner .responce-data-popup__activated-sites .site-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;max-height:100px;overflow-y:auto}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner .responce-data-popup__activated-sites .site-list .site-item{margin:0 0 0 10px}.jet-dashboard-page .cx-vui-popup.video-guide-popup .cx-vui-popup__body{padding:0;border-radius:0;background-color:#000}.jet-dashboard-page .cx-vui-popup.video-guide-popup .cx-vui-popup__body iframe{width:100%;min-height:450px}.jet-dashboard-page .cx-vui-popup.video-guide-popup .cx-vui-popup__content>div{line-height:0}.jet-dashboard-page .cx-vui-popup.service-actions-popup .service-actions-popup__form{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page .cx-vui-popup.service-actions-popup .service-actions-popup__form>.cx-vui-component-raw{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-page .cx-vui-popup.service-actions-popup .service-actions-popup__form>.cx-vui-component-raw select{max-width:100%}.jet-dashboard-page .cx-vui-popup.service-actions-popup .service-actions-popup__form .cx-vui-button{margin-left:10px}.jet-dashboard-welcome-page{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;gap:20px}.jet-dashboard-welcome-page__sidebar{position:relative;width:300px}.jet-dashboard-welcome-page__content{-webkit-box-flex:1;-ms-flex:1 1 600px;flex:1 1 600px}.jet-dashboard-welcome-page__updates .jet-dashboard-page-badge{position:absolute;top:0;right:0;z-index:1}.jet-dashboard-welcome-page__licenses .licence-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jet-dashboard-welcome-page__licenses .licence-list .licence-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-bottom:12px}.jet-dashboard-welcome-page__licenses .licence-list .licence-item:last-child{margin-bottom:0}.jet-dashboard-welcome-page__licenses .licence-list .licence-item .licence-item-icon{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:10px}.jet-dashboard-welcome-page__licenses .licence-list .licence-item .licence-item-info{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jet-dashboard-welcome-page__licenses .licence-list .licence-item .licence-item-name{font-weight:500;font-size:12px;line-height:16px;color:#7b7e81}.jet-dashboard-welcome-page__licenses .licence-list .licence-item .lifetime{color:#46b450}.jet-dashboard-welcome-page__licenses .licence-list .licence-item .expire-date{color:#d6336c}.jet-dashboard-welcome-page__avaliable-plugins div.cx-vui-subtitle{margin-bottom:0}.jet-dashboard-welcome-page__wizard-section div.cx-vui-subtitle{margin-bottom:0}.jet-dashboard-welcome-page__wizard-section div.cx-vui-subtitle .cx-vui-subtitle__label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-welcome-page__wizard-section div.cx-vui-subtitle .cx-vui-subtitle__label svg{margin-right:20px}.jet-dashboard-welcome-page__more-plugins .plugin-list--more-plugins div.plugin-item{width:calc(33.3333% - 20px)}.jet-dashboard-welcome-page__get-more-banner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;background-color:#edf6ff;background-image:url("https://api.crocoblock.com/downloads/images/jet-dashboard/get-more-banner-bg.svg");background-position:0 50%;background-repeat:no-repeat;background-size:contain}.jet-dashboard-welcome-page__get-more-banner .get-more-banner-content{width:calc(50% - 10px)}.jet-dashboard-welcome-page__get-more-banner .get-more-banner-content .desc{font-size:14px;line-height:18px;color:#23282d}.jet-dashboard-welcome-page__get-more-banner .get-more-banner-content .title{font-size:20px;line-height:28px;font-weight:600;color:#23282d;margin:0 0 15px 0}.jet-dashboard-welcome-page__get-more-banner .get-more-banner-content .cx-vui-button{color:#007cba;-webkit-box-shadow:inset 0 0 0 1px #007cba;box-shadow:inset 0 0 0 1px #007cba}.jet-dashboard-welcome-page .extras-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:20px}.jet-dashboard-welcome-page .extras-list .extras-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:calc(50% - 20px);min-height:67px;border:1px solid #e0e0e0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;overflow:hidden}.jet-dashboard-welcome-page .extras-list .extras-item__logo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:55px;max-width:55px;background-color:#f3f5fc}.jet-dashboard-welcome-page .extras-list .extras-item__details{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:10px 10px 12px 10px}.jet-dashboard-welcome-page .extras-list .extras-item__name{font-weight:500;font-size:14px;line-height:18px}.jet-dashboard-welcome-page .extras-list .extras-item__desc{margin:5px 0 0 0}.jet-dashboard-welcome-page .extras-list .extras-item .cx-vui-button{margin-top:10px}.jet-dashboard-welcome-page .offers-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:20px;margin-bottom:-30px}.jet-dashboard-welcome-page .offers-list .offers-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:calc(50% - 20px);margin-bottom:30px;-webkit-box-sizing:border-box;box-sizing:border-box}.jet-dashboard-welcome-page .offers-list .offers-item__logo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;width:60px;max-width:60px;margin-right:20px}.jet-dashboard-welcome-page .offers-list .offers-item__details{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jet-dashboard-welcome-page .offers-list .offers-item__name{font-weight:500;font-size:14px;line-height:18px}.jet-dashboard-welcome-page .offers-list .offers-item__desc{margin:5px 0 0 0}.jet-dashboard-welcome-page .offers-list .offers-item .cx-vui-button{margin-top:5px}.jet-dashboard-settings-page__inner.jet-dashboard-page__panel{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding-left:0}.jet-dashboard-settings-page .subpage-category-list{min-width:228px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin-right:20px}.jet-dashboard-settings-page .subpage-content{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-settings-page .plugin-settings-toggle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:228px;border-top:1px solid #dcdcdd}.jet-dashboard-settings-page .plugin-settings-toggle:first-child{border-top:none}.jet-dashboard-settings-page .plugin-settings-toggle__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px 20px 15px 30px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.jet-dashboard-settings-page .plugin-settings-toggle__header-label{font-weight:500;font-size:14px;line-height:18px;color:#23282d}.jet-dashboard-settings-page .plugin-settings-toggle__header-marker{width:20px;height:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-settings-page .plugin-settings-toggle__links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-settings-page .plugin-settings-toggle__link{border-style:solid;border-color:#fff;border-width:0 0 0 2px}.jet-dashboard-settings-page .plugin-settings-toggle__link:hover{background-color:#f5f8fd}.jet-dashboard-settings-page .plugin-settings-toggle__link:hover span{color:#007cba}.jet-dashboard-settings-page .plugin-settings-toggle__link.active{border-color:#007cba;background-color:#e9f0fd}.jet-dashboard-settings-page .plugin-settings-toggle__link.active span{color:#007cba}.jet-dashboard-settings-page .plugin-settings-toggle__link span{display:block;font-size:14px;line-height:18px;color:#23282d;padding:11px 0 11px 52px;text-decoration:none;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.jet-dashboard-settings-page .plugin-settings-toggle__link span:focus{outline:none;-webkit-box-shadow:none;box-shadow:none}.jet-dashboard-license-page{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-license-page .avaliable-plugins{margin-top:20px}.jet-dashboard-license-page .more-plugins{margin-top:20px}.jet-dashboard-license-page .add-new-license{display:-webkit-box;display:-ms-flexbox;display:flex}.jet-dashboard-license-page .add-new-license .cx-vui-button__content>span{display:-webkit-box;display:-ms-flexbox;display:flex}.jet-dashboard-license-page .add-new-license .cx-vui-button__content .dashicons{font-size:16px;margin:0 4px 0 -5px}.jet-dashboard-license-page .license-manager{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-license-page .license-manager .license-list{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap}.jet-dashboard-license-page .license-manager .license-list .license-item{margin:10px}.jet-dashboard-license-page .license-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:400px}.jet-dashboard-license-page .license-item__label{font-weight:500;font-size:24px;line-height:36px;text-align:center;color:#23282d;margin-bottom:40px}.jet-dashboard-license-page .license-item__control{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-license-page .license-item__control .license-item__activation-message{text-align:center;margin-bottom:30px}.jet-dashboard-license-page .license-item__control .license-item__action-button{margin-top:10px}.jet-dashboard-license-page .license-item__deactivation{-ms-flex-item-align:start;align-self:flex-start}.jet-dashboard-license-page .license-item.license-activated .license-status{color:#46b450}.jet-dashboard-license-page .license-item.license-activated .license-item__deactivation{color:#d6336c;-webkit-box-shadow:inset 0 0 0 1px #d6336c;box-shadow:inset 0 0 0 1px #d6336c}.jet-dashboard-license-page .license-details{margin:30px 0}.jet-dashboard-license-page .license-details__label{color:#23282d;font-size:15px;font-weight:700;margin-bottom:20px}.jet-dashboard-license-page .license-details__fields{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-license-page .license-details__field{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin-bottom:10px}.jet-dashboard-license-page .license-details__field:last-child{margin-bottom:0}.jet-dashboard-license-page .license-details__field .label{min-width:110px;font-weight:700;color:#23282d}.jet-dashboard-license-page .license-details__field .status-label{text-transform:capitalize;color:#46b450}.jet-dashboard-license-page .license-details__field .license-type{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-license-page .license-details__field .license-type svg{width:110px;height:auto}.jet-dashboard-license-page .license-details__field .included-plugin-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-license-page .license-details__field .included-plugin-list .included-plugin{width:50%;margin-bottom:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-license-page .license-details__field .included-plugin-list .included-plugin svg{margin-right:5px}.jet-dashboard-license-page .license-details__field.license-status{color:#c92c2c;font-weight:700;text-transform:capitalize}.jet-dashboard-license-page .license-details__field.license-type{text-transform:capitalize}.jet-dashboard-license-page .license-details__field.license-plugins{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-license-page .license-details__actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:20px}.jet-dashboard-license-page .license-details__actions .show-license-manager{font-size:13px}.jet-dashboard-license-page .license-details__actions .cx-vui-button{margin-left:5px}.jet-dashboard-license-page .license-details__actions .cx-vui-button:first-child{margin-left:0}.jet-dashboard-upsale-page__inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background-image:-o-linear-gradient(23.82deg, #E9EFFD 22.28%, #FFFFFF 100%);background-image:linear-gradient(66.18deg, #E9EFFD 22.28%, #FFFFFF 100%);height:100vh;min-height:400px;gap:40px}.jet-dashboard-upsale-page__extra-image{width:50%;background-image:url("https://api.crocoblock.com/downloads/images/jet-dashboard/upsale-bg.png");background-position:50%;background-repeat:no-repeat;background-size:contain}.jet-dashboard-upsale-page__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;width:50%;font-size:18px;line-height:24px}@media(max-width: 1140px){.jet-dashboard-upsale-page__content{font-size:14px;line-height:20px}}.jet-dashboard-upsale-page__features{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:30px;margin-bottom:40px}@media(max-width: 1140px){.jet-dashboard-upsale-page__features{gap:15px}}.jet-dashboard-upsale-page__feature{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.jet-dashboard-upsale-page__feature span{color:#7b7e81}.jet-dashboard-upsale-page__title{font-weight:500;font-size:40px;line-height:48px;color:#23282d;margin-bottom:20px}@media(max-width: 1140px){.jet-dashboard-upsale-page__title{font-size:32px}}.jet-dashboard-upsale-page__desc{font-weight:normal;color:#7b7e81;max-width:460px;margin-bottom:40px}.jet-dashboard-page{font-family:Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;margin:20px 16px 0 15px;visibility:hidden}.jet-dashboard-page.inited{visibility:visible}.jet-dashboard-page .proccesing-state{opacity:.5;pointer-events:none}.jet-dashboard-page__body{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;gap:20px}@media(max-width: 1140px){.jet-dashboard-page__body{-ms-flex-wrap:wrap;flex-wrap:wrap}}.jet-dashboard-page__notice-list{width:100%;margin-bottom:20px}.jet-dashboard-page__before-content{width:100%}.jet-dashboard-page__content{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;max-width:calc(100% - 320px)}@media(max-width: 1140px){.jet-dashboard-page__content{max-width:100%;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}}.jet-dashboard-page__before-sidebar{width:100%;margin-bottom:20px}.jet-dashboard-page__sidebar-container{position:relative;width:300px;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}@media(max-width: 1140px){.jet-dashboard-page__sidebar-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;width:100%}.jet-dashboard-page__sidebar-container>div{margin:0 20px 0 0}.jet-dashboard-page__sidebar-container>div:last-child{margin-right:0}}.jet-dashboard-page__sidebar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;gap:20px}@media(max-width: 1140px){.jet-dashboard-page__sidebar{width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.jet-dashboard-page__after-sidebar{width:100%;margin-top:20px}.jet-dashboard-page__header{position:relative;padding:20px 30px;background:-o-radial-gradient(61.68% 157.61%, 34.83% 346.74%, rgba(38, 232, 168, 0.8) 17.85%, rgba(38, 232, 168, 0) 100%),-o-radial-gradient(78.71% -77.17%, 19.98% 198.91%, rgba(91, 119, 231, 0.9) 0%, rgba(91, 119, 231, 0) 100%),-o-radial-gradient(32.75% -216.3%, 38.43% 382.61%, rgba(0, 132, 68, 0.8) 47.64%, rgba(0, 132, 68, 0) 100%),#23282d;background:radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(38, 232, 168, 0.8) 17.85%, rgba(38, 232, 168, 0) 100%),radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(91, 119, 231, 0.9) 0%, rgba(91, 119, 231, 0) 100%),radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(0, 132, 68, 0.8) 47.64%, rgba(0, 132, 68, 0) 100%),#23282d;margin-bottom:20px;border-radius:4px;overflow:hidden;-webkit-box-shadow:0px 2px 6px rgba(35,40,45,.07);box-shadow:0px 2px 6px rgba(35,40,45,.07)}.jet-dashboard-page__header .header-title{color:#fff;font-size:24px;line-height:32px;font-weight:500;margin:0}.jet-dashboard-page__header .header-desc{color:#fff;font-size:15px;line-height:22px;font-weight:normal;margin-top:5px;color:#26e8a8}.jet-dashboard-page__header .header-icon-link{position:absolute;top:19px;right:21px;width:56px;height:56px;border-radius:50%;background:-webkit-gradient(linear, left top, left bottom, from(#E52D27), color-stop(100.03%, #BF171D));background:-o-linear-gradient(top, #E52D27 0%, #BF171D 100.03%);background:linear-gradient(180deg, #E52D27 0%, #BF171D 100.03%)}.jet-dashboard-page__header .header-icon-link a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:56px;height:56px;line-height:0}.jet-dashboard-page__header .header-icon-link svg{-webkit-transition:-webkit-transform .25s ease;transition:-webkit-transform .25s ease;-o-transition:transform .25s ease;transition:transform .25s ease;transition:transform .25s ease, -webkit-transform .25s ease}.jet-dashboard-page__header .header-icon-link:hover svg{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}.jet-dashboard-page__header.lifetime-product-type{background:-o-radial-gradient(61.68% 157.61%, 34.83% 346.74%, rgba(254, 219, 34, 0.8) 17.85%, rgba(254, 219, 34, 0) 100%),-o-radial-gradient(78.71% -77.17%, 19.98% 198.91%, rgba(195, 109, 0, 0.9) 0%, rgba(195, 109, 0, 0) 100%),-o-radial-gradient(32.75% -216.3%, 38.43% 382.61%, rgba(195, 109, 0, 0.8) 47.64%, rgba(195, 109, 0, 0) 100%),#23282d;background:radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(254, 219, 34, 0.8) 17.85%, rgba(254, 219, 34, 0) 100%),radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(195, 109, 0, 0.9) 0%, rgba(195, 109, 0, 0) 100%),radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(195, 109, 0, 0.8) 47.64%, rgba(195, 109, 0, 0) 100%),#23282d}.jet-dashboard-page__header.lifetime-product-type .header-desc{color:#fedb22}.jet-dashboard-page__header.all-inclusive-product-type{background:-o-radial-gradient(61.68% 157.61%, 34.83% 346.74%, rgba(111, 139, 251, 0.8) 17.85%, rgba(111, 139, 251, 0) 100%),-o-radial-gradient(78.71% -77.17%, 19.98% 198.91%, rgba(255, 8, 201, 0.9) 0%, rgba(255, 8, 201, 0) 100%),-o-radial-gradient(32.75% -216.3%, 38.43% 382.61%, rgba(41, 69, 181, 0.8) 47.64%, rgba(41, 69, 181, 0) 100%),#23282d;background:radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(111, 139, 251, 0.8) 17.85%, rgba(111, 139, 251, 0) 100%),radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(255, 8, 201, 0.9) 0%, rgba(255, 8, 201, 0) 100%),radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(41, 69, 181, 0.8) 47.64%, rgba(41, 69, 181, 0) 100%),#23282d}.jet-dashboard-page__header.all-inclusive-product-type .header-desc{color:#00e0ff}.jet-dashboard-page__header.plugin-set-product-type{background:-o-radial-gradient(61.68% 157.61%, 34.83% 346.74%, rgba(38, 232, 168, 0.8) 17.85%, rgba(38, 232, 168, 0) 100%),-o-radial-gradient(78.71% -77.17%, 19.98% 198.91%, rgba(91, 119, 231, 0.9) 0%, rgba(91, 119, 231, 0) 100%),-o-radial-gradient(32.75% -216.3%, 38.43% 382.61%, rgba(91, 119, 231, 0.8) 47.64%, rgba(91, 119, 231, 0) 100%),#23282d;background:radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(38, 232, 168, 0.8) 17.85%, rgba(38, 232, 168, 0) 100%),radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(91, 119, 231, 0.9) 0%, rgba(91, 119, 231, 0) 100%),radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(91, 119, 231, 0.8) 47.64%, rgba(91, 119, 231, 0) 100%),#23282d}.jet-dashboard-page__header.plugin-set-product-type .header-desc{color:#26e8a8}.jet-dashboard-page__header.theme-plugin-bundle-product-type{background:-o-radial-gradient(61.68% 157.61%, 34.83% 346.74%, rgba(252, 133, 119, 0.8) 17.85%, rgba(252, 133, 119, 0) 100%),-o-radial-gradient(32.75% -216.3%, 38.43% 382.61%, rgba(25, 118, 211, 0.8) 47.64%, rgba(25, 118, 211, 0) 100%),-o-radial-gradient(78.71% -77.17%, 19.98% 198.91%, rgba(95, 49, 159, 0.9) 0%, rgba(95, 49, 159, 0) 100%),#23282d;background:radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(252, 133, 119, 0.8) 17.85%, rgba(252, 133, 119, 0) 100%),radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(25, 118, 211, 0.8) 47.64%, rgba(25, 118, 211, 0) 100%),radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(95, 49, 159, 0.9) 0%, rgba(95, 49, 159, 0) 100%),#23282d}.jet-dashboard-page__header.theme-plugin-bundle-product-type .header-desc{color:#00e0ff}.jet-dashboard-page__before-component{margin-bottom:20px}.jet-dashboard-page__inner-component{margin-top:20px}.jet-dashboard-page__after-component{margin-top:20px}.jet-dashboard-page p{font-size:13px;color:#7b7e81;margin:0 0 10px 0}.jet-dashboard-page .dashicons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page .cx-vui-subtitle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page .cx-vui-subtitle--controls{padding-bottom:20px;border-bottom:1px solid #dcdcdd;margin-bottom:20px}.jet-dashboard-page .cx-vui-subtitle__label{font-size:20px;line-height:24px;font-weight:normal}.jet-dashboard-page .cx-vui-subtitle__buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page .cx-vui-subtitle__buttons .cx-vui-button{margin-left:10px}.jet-dashboard-page .cx-vui-collapse__heading{padding:15px 0}.jet-dashboard-page .cx-vui-collapse__heading .cx-vui-subtitle{font-size:14px;font-weight:500}.jet-dashboard-page .cx-vui-collapse .cx-vui-collapse .cx-vui-collapse__heading{padding:15px}.jet-dashboard-page .cx-vui-tabs__nav{background-color:#fff}.jet-dashboard-page .cx-vui-tabs__nav-item{font-size:14px;font-weight:500}.jet-dashboard-page .cx-vui-component__label{font-size:14px;font-weight:400}.jet-dashboard-page .cx-vui-component__desc{font-size:12px}.jet-dashboard-page .cx-vui-dimensions{position:relative}.jet-dashboard-page .cx-vui-dimensions__units{margin-right:0}.jet-dashboard-page .cx-vui-dimensions__inputs .cx-vui-component-raw{min-width:25%}.jet-dashboard-page .cx-vui-dimensions__link{width:22px;height:22px;position:absolute;top:0;margin-left:0}.jet-dashboard-page__panel{min-width:292px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;padding:30px;background-color:#fff;-webkit-box-shadow:0px 2px 6px rgba(35,40,45,.07);box-shadow:0px 2px 6px rgba(35,40,45,.07)}.jet-dashboard-page__panel~.jet-dashboard-page__panel{margin-top:20px}.jet-dashboard-page__panel>.cx-vui-subtitle{margin-bottom:20px}.jet-dashboard-page__panel-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page__panel-header .panel-header-icon{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:46px;height:46px;border-radius:50%;border:1px solid #7b7e81;margin-right:12px}.jet-dashboard-page__panel-header .panel-header-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jet-dashboard-page__panel-header .panel-header-content .panel-header-desc{font-size:14px;line-height:18px;font-weight:300;color:#7b7e81;margin-bottom:3px}.jet-dashboard-page__panel-header .panel-header-content .panel-header-title{font-size:20px;line-height:24px;color:#23282d}.jet-dashboard-page__panel-content{margin-top:12px;border-top:1px solid #dcdcdd;padding-top:23px;font-size:12px;line-height:16px;color:#7b7e81}.jet-dashboard-page__panel-controls{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:20px}.jet-dashboard-page__guide{width:100%}@media(max-width: 1140px){.jet-dashboard-page__guide{width:50%}}.jet-dashboard-page__guide-video{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:162px;background-color:#fff;background-size:cover;background-position:50%;overflow:hidden;border-radius:3px 3px 0 0;cursor:pointer}.jet-dashboard-page__guide-video svg{-webkit-transition:all .25s ease;-o-transition:all .25s ease;transition:all .25s ease}.jet-dashboard-page__guide-video:hover svg{-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}.jet-dashboard-page__guide-content{background-color:#fff;padding:20px 30px 40px 30px;border-radius:0 0 3px 3px}.jet-dashboard-page__guide-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jet-dashboard-page__guide-link{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:22px}.jet-dashboard-page__guide-link:last-child{margin-bottom:0}.jet-dashboard-page__guide-link a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;font-size:14px;line-height:18px;color:#007cba;text-decoration:none}.jet-dashboard-page__guide-link a:hover{color:#066ea2;text-decoration:underline}.jet-dashboard-page__guide-link a svg{margin-top:3px;margin-left:10px}.jet-dashboard-page__help-center{width:100%}@media(max-width: 1140px){.jet-dashboard-page__help-center{width:50%}}.jet-dashboard-page__help-center-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:12px;border-top:1px solid #dcdcdd;padding-top:23px}.jet-dashboard-page__help-center-link{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:22px}.jet-dashboard-page__help-center-link:last-child{margin-bottom:0}.jet-dashboard-page__help-center-link a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;line-height:18px;color:#007cba;text-decoration:none}.jet-dashboard-page__help-center-link a:hover{color:#066ea2;text-decoration:underline}.jet-dashboard-page__help-center-link a .help-center-link-icon{margin-right:28px}.jet-dashboard-page .plugin-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap}.jet-dashboard-page .plugin-list .plugin-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-page .plugin-list .plugin-item__inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-page .plugin-list .plugin-item.activate-avaliable .plugin-label{color:#7b7e81}.jet-dashboard-page .plugin-list .plugin-item.activate-avaliable .plugin-version{background-color:#dfdfdf}.jet-dashboard-page .plugin-list .plugin-item.update-avaliable .plugin-version{background-color:#d6336c}.jet-dashboard-page .plugin-list .plugin-tumbnail{position:relative;line-height:0;margin-right:12px}.jet-dashboard-page .plugin-list .plugin-tumbnail img{width:80px}.jet-dashboard-page .plugin-list .plugin-info{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-page .plugin-list .plugin-name{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#23282d;font-weight:500}.jet-dashboard-page .plugin-list .plugin-desc{margin:10px 0 0 0}.jet-dashboard-page .plugin-list .plugin-version{font-size:12px;padding:0 4px;border-radius:2px;background-color:#46b450;color:#fff;white-space:nowrap;margin-left:8px}.jet-dashboard-page .plugin-list .plugin-rollback{line-height:0;margin-left:10px;cursor:pointer}.jet-dashboard-page .plugin-list .plugin-rollback .cx-vui-button{font-size:13px;white-space:nowrap}.jet-dashboard-page .plugin-list .plugin-rollback span{color:#007cba}.jet-dashboard-page .plugin-list .plugin-actions{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:nowrap;flex-wrap:nowrap;margin-top:7px}.jet-dashboard-page .plugin-list .plugin-actions .cx-vui-button{margin-left:8px}.jet-dashboard-page .plugin-list .plugin-actions .cx-vui-button:first-child{margin-left:0}.jet-dashboard-page .plugin-list .plugin-actions .show-license-control{color:#46b450}.jet-dashboard-page .plugin-list .plugin-actions .deactivate-plugin-button{color:#d6336c}.jet-dashboard-page .plugin-list .plugin-update-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:5px;color:#7b7e81;font-size:13px}.jet-dashboard-page .plugin-list .plugin-update-label .latest-version{color:#007dba;font-weight:500;margin:0 3px}.jet-dashboard-page .plugin-list .plugin-update-label .cx-vui-button{font-size:13px;margin-left:3px}.jet-dashboard-page .plugin-list--installed-plugins{margin:-15px 0}.jet-dashboard-page .plugin-list--installed-plugins .plugin-item{width:50%;margin:15px 0}@media(max-width: 1140px){.jet-dashboard-page .plugin-list--installed-plugins .plugin-item{width:100%}}.jet-dashboard-page .plugin-list--avaliable-plugins{margin:-10px}.jet-dashboard-page .plugin-list--avaliable-plugins .plugin-item{width:calc(33.3333% - 20px);margin:10px}@media(max-width: 1140px){.jet-dashboard-page .plugin-list--avaliable-plugins .plugin-item{width:100%;margin:10px 0}}.jet-dashboard-page .plugin-list--avaliable-plugins .plugin-item .plugin-tumbnail{width:58px;margin:0;border-radius:4px 0 0 4px;overflow:hidden}.jet-dashboard-page .plugin-list--avaliable-plugins .plugin-item .plugin-tumbnail img{width:65px;margin-left:-3px}.jet-dashboard-page .plugin-list--avaliable-plugins .plugin-item .plugin-info{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;padding:10px 12px;border-width:1px 0 1px 0;border-right:1px;border-style:solid;border-color:#e0e0e0;border-radius:0 4px 4px 0}.jet-dashboard-page .plugin-list--more-plugins{margin:-10px -10px -30px -10px}.jet-dashboard-page .plugin-list--more-plugins .plugin-item{width:calc(25% - 20px);margin:10px 10px 30px 10px}@media(max-width: 1140px){.jet-dashboard-page .plugin-list--more-plugins .plugin-item{width:calc(50% - 20px)}}.jet-dashboard-page .plugin-list--more-plugins .plugin-item__inner{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-page .plugin-list--more-plugins .plugin-item__inner .plugin-tumbnail{margin:0 0 25px 0}.jet-dashboard-page .plugin-list--more-plugins .plugin-item__inner .plugin-tumbnail img{width:auto;max-width:70%}.jet-dashboard-page .plugin-list--more-plugins .plugin-item__inner .plugin-info{-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-page .plugin-list--more-plugins .plugin-item__inner .plugin-info .plugin-actions{-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;margin-top:10px}.jet-dashboard-page .plugin-list--registered-plugins{margin:-10px}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item{width:calc(50% - 20px);margin:10px}@media(max-width: 1140px){.jet-dashboard-page .plugin-list--registered-plugins .plugin-item{width:100%}}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .button-dropdown-icon{-webkit-transition:-webkit-transform .25s;transition:-webkit-transform .25s;-o-transition:transform .25s;transition:transform .25s;transition:transform .25s, -webkit-transform .25s}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item.dropdown-visible .button-dropdown-icon{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .plugin-tumbnail{width:58px;margin:0;border-radius:4px 0 0 4px;overflow:hidden}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .plugin-tumbnail img{width:65px;margin-left:-3px}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .plugin-info{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;padding:10px 12px;border-width:1px 0 1px 0;border-right:1px;margin-right:12px;border-style:solid;border-color:#e0e0e0;border-radius:0 4px 4px 0}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .useful-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;position:absolute;overflow:hidden;width:207px;top:calc(100% - 38px);right:-30px;background-color:#fff;-webkit-box-shadow:0px 4px 10px rgba(35,40,45,.3);box-shadow:0px 4px 10px rgba(35,40,45,.3);border-radius:0px 0px 4px 4px;z-index:1}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .useful-links .useful-link{padding:12px;background-color:#fff;font-size:14px;line-height:16px;color:#007cba;text-decoration:none}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .useful-links .useful-link:hover{background-color:#f4f4f5}.jet-dashboard-page .jet-dashboard-page-badge{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:16px;height:16px;border-radius:50%;background:#ec1414;border:1px solid #fff;-webkit-box-sizing:border-box;box-sizing:border-box;font-weight:bold;font-size:12px;line-height:16px;color:#fff}.cx-vui-notices{z-index:10000}.fade-enter{opacity:0}.fade-enter-active{-webkit-transition:opacity .25s;-o-transition:opacity .25s;transition:opacity .25s}.fade-enter-to{opacity:1}.fade-leave{opacity:1}.fade-leave-active{-webkit-transition:opacity .25s;-o-transition:opacity .25s;transition:opacity .25s}.fade-leave-to{opacity:0}.popup-enter{opacity:0}.popup-enter .cx-vui-popup__body{-webkit-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}.popup-enter-active{-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}.popup-enter-active .cx-vui-popup__body{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;-o-transition:transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s}.popup-enter-to{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.popup-enter-to .cx-vui-popup__body{-webkit-transform:translateY(0px);-ms-transform:translateY(0px);transform:translateY(0px)}.popup-leave{opacity:1}.popup-leave-active{-webkit-transition:opacity .25s;-o-transition:opacity .25s;transition:opacity .25s}.popup-leave-to{opacity:0}.dropdown-menu-enter{opacity:0;-webkit-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}.dropdown-menu-enter-active{-webkit-transition:opacity .25s,-webkit-transform .25s;transition:opacity .25s,-webkit-transform .25s;-o-transition:opacity .25s,transform .25s;transition:opacity .25s,transform .25s;transition:opacity .25s,transform .25s,-webkit-transform .25s}.dropdown-menu-enter-to{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.dropdown-menu-leave{opacity:1}.dropdown-menu-leave-active{-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.dropdown-menu-leave-to{opacity:0}modules/jet-dashboard/assets/css/jet-dashboard-admin-inline.css000075500000000551151121477560020615 0ustar00#adminmenu #toplevel_page_jet-dashboard a[href*="admin.php?page=jet-dashboard-license-page&subpage=license-manager"] { color: #4aa5f5; } #adminmenu #toplevel_page_jet-dashboard a[href="admin.php?page=jet-dashboard-upsale-page"] { color: #F5C546; } #adminmenu #toplevel_page_jet-dashboard a[href*="https://account.crocoblock.com/upgrade"] { color: #F5C546; } modules/jet-dashboard/assets/css/wp-admin-styles.css000075500000007254151121477560016610 0ustar00body{--jet-button-padding-y: 7px;--jet-button-padding-x: 14px;--jet-button-font-size: 13px;--jet-button-font-weight: 500;--jet-button-line-height: 19px;--jet-button-border-radius: 3px}.jet-notice{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;border:1px solid #c3c4c7;border-left-width:0;padding:16px;gap:16px}.jet-notice--info .jet-notice__type-line{background:#3dddc1;background:-webkit-gradient(linear, left bottom, left top, from(#3DDDC1), to(#5099E6)),#5099e6;background:-o-linear-gradient(bottom, #3DDDC1 0%, #5099E6 100%),#5099e6;background:linear-gradient(0deg, #3DDDC1 0%, #5099E6 100%),#5099e6}.jet-notice--success .jet-notice__type-line{background:#40d825;background:-webkit-gradient(linear, left top, left bottom, from(#40D825), to(#B1EF3A));background:-o-linear-gradient(top, #40D825 0%, #B1EF3A 100%);background:linear-gradient(180deg, #40D825 0%, #B1EF3A 100%)}.jet-notice--warning .jet-notice__type-line{background:#fedb22;background:-webkit-gradient(linear, left bottom, left top, from(#FEDB22), to(#FFA901)),#5099e6;background:-o-linear-gradient(bottom, #FEDB22 0%, #FFA901 100%),#5099e6;background:linear-gradient(0deg, #FEDB22 0%, #FFA901 100%),#5099e6}.jet-notice--error .jet-notice__type-line{background:#ff8b8b;background:-webkit-gradient(linear, left bottom, left top, from(#FF8B8B), to(#F5435A)),#5099e6;background:-o-linear-gradient(bottom, #FF8B8B 0%, #F5435A 100%),#5099e6;background:linear-gradient(0deg, #FF8B8B 0%, #F5435A 100%),#5099e6}.jet-notice__type-line{display:block;position:absolute;width:4px;height:calc(100% + 2px);top:-1px;left:0}.jet-notice__icon-wrapper{width:24px}.jet-notice__icon-wrapper svg{width:100%;height:auto}.jet-notice__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-notice__content h3{margin:0}.jet-notice__content p{line-height:1.2;padding:0;margin:8px 0 0 0}.jet-notice__title{font-size:1.0625rem;line-height:1.2}.jet-notice__message{color:#7b7e81;font-size:13px;line-height:16px}.jet-notice__actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:16px;margin-top:16px}.jet-button{display:inline-block;font-weight:var(--jet-button-font-weight);text-align:center;text-decoration:none;border:1px solid #dcdcdd;background:rgba(0,0,0,0);color:#7b7e81;-webkit-box-shadow:none;box-shadow:none;padding:var(--jet-button-padding-y) var(--jet-button-padding-x);font-size:var(--jet-button-font-size);line-height:var(--jet-button-line-height);border-radius:var(--jet-button-border-radius);white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:background-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:background-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}.jet-button:hover{color:#7b7e81;background-color:#f3f5f6}.jet-button--primary{color:#fff;border-color:#007cba;background-color:#007cba}.jet-button--accent{color:#007cba;border-color:#007cba}.jet-button--accent:hover{color:#57595b}modules/jet-dashboard/assets/css/jet-dashboard-admin-rtl.css000075500000201170151121477560020140 0ustar00.jet-dashboard-page .cx-vui-button{font-size:14px;font-weight:400;background-color:rgba(0,0,0,0)}.jet-dashboard-page .cx-vui-button:hover{background-color:rgba(0,0,0,0)}.jet-dashboard-page .cx-vui-button .cx-vui-button__content>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page .cx-vui-button .cx-vui-button__content .button-icon{margin-left:5px}.jet-dashboard-page .cx-vui-button .cx-vui-button__content .button-dropdown-icon{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:10px}.jet-dashboard-page .cx-vui-button .cx-vui-button__content .button-dropdown-icon svg{margin:0}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-default{color:#007cba;-webkit-box-shadow:inset 0 0 0 1px #e0e0e0;box-shadow:inset 0 0 0 1px #e0e0e0}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-default:hover{background-color:rgba(224,224,224,.3)}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-default .cx-vui-button__loader svg,.jet-dashboard-page .cx-vui-button.cx-vui-button--style-default .cx-vui-button__loader path{fill:#007cba}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-default .button-icon,.jet-dashboard-page .cx-vui-button.cx-vui-button--style-default path{fill:#007cba}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-accent{color:#007cba;-webkit-box-shadow:inset 0 0 0 1px #007cba;box-shadow:inset 0 0 0 1px #007cba}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-accent:hover{background-color:rgba(0,124,186,.07)}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-accent .cx-vui-button__loader svg,.jet-dashboard-page .cx-vui-button.cx-vui-button--style-accent .cx-vui-button__loader path{fill:#007cba}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-accent .button-icon,.jet-dashboard-page .cx-vui-button.cx-vui-button--style-accent path{fill:#007cba}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-danger{color:#d6336c;-webkit-box-shadow:inset 0 0 0 1px #d6336c;box-shadow:inset 0 0 0 1px #d6336c}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-danger:hover{background-color:rgba(214,51,108,.07)}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-danger .cx-vui-button__loader svg,.jet-dashboard-page .cx-vui-button.cx-vui-button--style-danger .cx-vui-button__loader path{fill:#d6336c}.jet-dashboard-page .cx-vui-button.cx-vui-button--style-danger .button-icon,.jet-dashboard-page .cx-vui-button.cx-vui-button--style-danger path{fill:#d6336c}.jet-dashboard-page__banners{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:20px}.jet-dashboard-page__banner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;gap:20px;border-radius:4px;color:#23282d;overflow:hidden;min-width:300px;position:relative;background-size:cover;background-position:50% 50%;-webkit-box-shadow:0px 2px 6px rgba(35,40,45,.07);box-shadow:0px 2px 6px rgba(35,40,45,.07)}.jet-dashboard-page__banner .banner-frame{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;border-radius:4px}.jet-dashboard-page__banner .banner-inner{height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px}.jet-dashboard-page__banner .banner-label{font-weight:500;font-size:14px;line-height:18px;text-transform:uppercase;margin-bottom:38px}.jet-dashboard-page__banner .banner-title{font-size:20px;line-height:28px;margin-bottom:10px}.jet-dashboard-page__banner .banner-content{font-size:14px;line-height:18px;margin-bottom:20px}.jet-dashboard-page__banner .banner-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-page__banner .banner-buttons .cx-vui-button{margin-right:10px}.jet-dashboard-page__banner .banner-buttons .cx-vui-button:last-child{margin-right:0}.jet-dashboard-page__banner.col-4-4{width:100%}.jet-dashboard-page__banner.col-4-3{width:75%}.jet-dashboard-page__banner.col-4-2{width:50%}.jet-dashboard-page__banner.col-4-1{width:25%}.jet-dashboard-page__banner.premade-preset .banner-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;padding:20px 30px 30px 30px}.jet-dashboard-page__banner.light-1-preset{background-color:#fff}.jet-dashboard-page__banner.light-1-preset .banner-label{color:#bb97ff}.jet-dashboard-page__banner.light-1-preset .banner-content{color:#7b7e81}.jet-dashboard-page__banner.light-2-preset{background-image:url("../images/banner-light-bg-1.png");background-color:#f6f9fe;background-size:100% 98px;background-position:50% 0;background-repeat:no-repeat}.jet-dashboard-page__banner.light-2-preset .banner-frame{background-color:#fff;margin:10px}.jet-dashboard-page__banner.light-2-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.light-2-preset .banner-content{color:#7b7e81}.jet-dashboard-page__banner.light-3-preset{background-color:#fff}.jet-dashboard-page__banner.light-3-preset:before{display:block;position:absolute;width:152px;height:152px;top:-50px;right:-30px;background-color:#f6f9fe;content:"";border-radius:50%;z-index:1}.jet-dashboard-page__banner.light-3-preset:after{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-image:url("../images/youtube-icons.svg");background-size:120px;background-position:calc(0% - 5px) -20px;background-repeat:no-repeat;content:"";z-index:2}.jet-dashboard-page__banner.light-3-preset .banner-inner{position:relative;z-index:3}.jet-dashboard-page__banner.light-3-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.light-3-preset .banner-content{color:#7b7e81}.jet-dashboard-page__banner.light-4-preset{background-color:#fff}.jet-dashboard-page__banner.light-4-preset:before{display:block;position:absolute;width:152px;height:152px;top:-50px;right:-30px;background-color:#f6f9fe;border-radius:50%;content:"";z-index:1}.jet-dashboard-page__banner.light-4-preset:after{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-image:url("../images/elementor-wordpress-icon.svg");background-size:120px;background-position:calc(0% - 10px) -55px;background-repeat:no-repeat;content:"";z-index:2}.jet-dashboard-page__banner.light-4-preset .banner-inner{position:relative;z-index:3}.jet-dashboard-page__banner.light-4-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.light-4-preset .banner-content{color:#7b7e81}.jet-dashboard-page__banner.dark-1-preset{background-color:#0f1419}.jet-dashboard-page__banner.dark-1-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.dark-1-preset .banner-title{color:#fff}.jet-dashboard-page__banner.dark-1-preset .banner-content{color:#fff}.jet-dashboard-page__banner.dark-1-preset .cx-vui-button{color:#4efec3;-webkit-box-shadow:inset 0 0 0 1px #4efec3;box-shadow:inset 0 0 0 1px #4efec3}.jet-dashboard-page__banner.dark-2-preset{background-color:#0f1419}.jet-dashboard-page__banner.dark-2-preset:before{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:-o-radial-gradient(2.82% -9.25%, 120px 120px, rgba(40, 112, 93, 0.81) 0%, rgba(40, 112, 93, 0) 100%);background:radial-gradient(120px 120px at 2.82% -9.25%, rgba(40, 112, 93, 0.81) 0%, rgba(40, 112, 93, 0) 100%);content:"";z-index:1}.jet-dashboard-page__banner.dark-2-preset:after{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:-o-radial-gradient(94.51% 127.17%, 190px 190px, #5B77E7 0%, rgba(91, 119, 231, 0) 100%);background:radial-gradient(190px 190px at 94.51% 127.17%, #5B77E7 0%, rgba(91, 119, 231, 0) 100%);content:"";z-index:2}.jet-dashboard-page__banner.dark-2-preset .banner-inner{position:relative;z-index:3}.jet-dashboard-page__banner.dark-2-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.dark-2-preset .banner-title{color:#fff}.jet-dashboard-page__banner.dark-2-preset .banner-content{color:#fff}.jet-dashboard-page__banner.dark-2-preset .cx-vui-button{color:#4efec3;-webkit-box-shadow:inset 0 0 0 1px #4efec3;box-shadow:inset 0 0 0 1px #4efec3}.jet-dashboard-page__banner.dark-3-preset{background-color:#0f1419}.jet-dashboard-page__banner.dark-3-preset:before{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:-o-radial-gradient(91% -24.9%, 190px 190px, rgba(91, 119, 231, 0.88) 0%, rgba(91, 119, 231, 0) 100%);background:radial-gradient(190px 190px at 91% -24.9%, rgba(91, 119, 231, 0.88) 0%, rgba(91, 119, 231, 0) 100%);content:"";z-index:1}.jet-dashboard-page__banner.dark-3-preset:after{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-image:url("../images/youtube-icons.svg");background-size:120px;background-position:calc(0% - 5px) -20px;background-repeat:no-repeat;content:"";z-index:2}.jet-dashboard-page__banner.dark-3-preset .banner-inner{position:relative;z-index:3}.jet-dashboard-page__banner.dark-3-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.dark-3-preset .banner-title{color:#fff}.jet-dashboard-page__banner.dark-3-preset .banner-content{color:#fff}.jet-dashboard-page__banner.dark-3-preset .cx-vui-button{color:#4efec3;-webkit-box-shadow:inset 0 0 0 1px #4efec3;box-shadow:inset 0 0 0 1px #4efec3}.jet-dashboard-page__banner.dark-4-preset{background-color:#0f1419}.jet-dashboard-page__banner.dark-4-preset:before{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background:-o-radial-gradient(91% -24.9%, 190px 190px, rgba(91, 119, 231, 0.88) 0%, rgba(91, 119, 231, 0) 100%);background:radial-gradient(190px 190px at 91% -24.9%, rgba(91, 119, 231, 0.88) 0%, rgba(91, 119, 231, 0) 100%);content:"";z-index:1}.jet-dashboard-page__banner.dark-4-preset:after{display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-image:url("../images/elementor-wordpress-icon.svg");background-size:120px;background-position:calc(0% - 20px) -60px;background-repeat:no-repeat;content:"";z-index:2}.jet-dashboard-page__banner.dark-4-preset .banner-inner{position:relative;z-index:3}.jet-dashboard-page__banner.dark-4-preset .banner-label{color:#26e8a8}.jet-dashboard-page__banner.dark-4-preset .banner-title{color:#fff}.jet-dashboard-page__banner.dark-4-preset .banner-content{color:#fff}.jet-dashboard-page__banner.dark-4-preset .cx-vui-button{color:#4efec3;-webkit-box-shadow:inset 0 0 0 1px #4efec3;box-shadow:inset 0 0 0 1px #4efec3}.jet-dashboard-page .cx-vui-alert{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;padding:10px 20px;margin-top:20px;background-color:#f4f4f5;border-radius:4px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jet-dashboard-page .cx-vui-alert .cx-vui-alert__icon{margin-top:3px;margin-left:10px}.jet-dashboard-page .cx-vui-alert .cx-vui-alert__message{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;color:#7b7e81;font-size:13px}.jet-dashboard-page .cx-vui-alert.info-type{background-color:#edf6fa}.jet-dashboard-page .cx-vui-alert.info-type .cx-vui-alert__icon svg{fill:#007cba}.jet-dashboard-page .cx-vui-alert.info-type .cx-vui-alert__message{color:#007cba}.jet-dashboard-page .cx-vui-alert.success-type{background-color:#e9f6ea}.jet-dashboard-page .cx-vui-alert.success-type .cx-vui-alert__icon svg{fill:#46b450}.jet-dashboard-page .cx-vui-alert.success-type .cx-vui-alert__message{color:#46b450}.jet-dashboard-page .cx-vui-alert.error-type{background-color:#fbf0f0}.jet-dashboard-page .cx-vui-alert.error-type .cx-vui-alert__icon svg{fill:#c92c2c}.jet-dashboard-page .cx-vui-alert.error-type .cx-vui-alert__message{color:#c92c2c}.jet-dashboard-page__alerts{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-page__alert{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:20px;background-color:#fff;-webkit-box-shadow:0px 2px 6px rgba(35,40,45,.07);box-shadow:0px 2px 6px rgba(35,40,45,.07);padding:20px 30px;margin-top:10px}.jet-dashboard-page__alert:first-child{margin-top:0}.jet-dashboard-page__alert.info-type .alert-type-line{background:#3dddc1;background:-webkit-gradient(linear, left bottom, left top, from(#3DDDC1), to(#5099E6)),#5099e6;background:-o-linear-gradient(bottom, #3DDDC1 0%, #5099E6 100%),#5099e6;background:linear-gradient(0deg, #3DDDC1 0%, #5099E6 100%),#5099e6}.jet-dashboard-page__alert.success-type .alert-type-line{background:#40d825;background:-webkit-gradient(linear, left top, left bottom, from(#40D825), to(#B1EF3A));background:-o-linear-gradient(top, #40D825 0%, #B1EF3A 100%);background:linear-gradient(180deg, #40D825 0%, #B1EF3A 100%)}.jet-dashboard-page__alert.danger-type .alert-type-line{background:#fedb22;background:-webkit-gradient(linear, left bottom, left top, from(#FEDB22), to(#FFA901)),#5099e6;background:-o-linear-gradient(bottom, #FEDB22 0%, #FFA901 100%),#5099e6;background:linear-gradient(0deg, #FEDB22 0%, #FFA901 100%),#5099e6}.jet-dashboard-page__alert.error-type .alert-type-line{background:#ff8b8b;background:-webkit-gradient(linear, left bottom, left top, from(#FF8B8B), to(#F5435A)),#5099e6;background:-o-linear-gradient(bottom, #FF8B8B 0%, #F5435A 100%),#5099e6;background:linear-gradient(0deg, #FF8B8B 0%, #F5435A 100%),#5099e6}.jet-dashboard-page__alert .alert-type-line{display:block;position:absolute;width:4px;height:100%;top:0;left:0;background:-webkit-gradient(linear, left bottom, left top, from(#5B77E7), color-stop(53.65%, #49B5D2), to(#26E8A8));background:-o-linear-gradient(bottom, #5B77E7 0%, #49B5D2 53.65%, #26E8A8 100%);background:linear-gradient(0deg, #5B77E7 0%, #49B5D2 53.65%, #26E8A8 100%)}.jet-dashboard-page__alert .alert-close{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:7px;right:7px;cursor:pointer}.jet-dashboard-page__alert .alert-icon{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:80px;width:48px}.jet-dashboard-page__alert .alert-icon svg{width:100%;height:auto}.jet-dashboard-page__alert .alert-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;gap:10px}.jet-dashboard-page__alert .alert-title{color:#23282d;font-size:14px;line-height:18px;font-weight:500}.jet-dashboard-page__alert .alert-message{color:#7b7e81;font-size:13px;line-height:16px}.jet-dashboard-page__alert .alert-buttons .cx-vui-button{margin-right:10px}.jet-dashboard-page__alert .alert-buttons .cx-vui-button:last-child{margin-right:0}.jet-dashboard-page .cx-vui-popup .cx-vui-popup__header{text-align:center;margin-bottom:30px}.jet-dashboard-page .cx-vui-popup .cx-vui-popup__header-label{font-weight:500;font-size:24px;line-height:36px;text-align:center;color:#23282d}.jet-dashboard-page .cx-vui-popup.license-manager-popup .cx-vui-popup__body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;overflow:hidden;max-height:calc(100% - 100px)}.jet-dashboard-page .cx-vui-popup.license-manager-popup .cx-vui-popup__header{padding-bottom:15px;border-bottom:1px solid #dcdcdd}.jet-dashboard-page .cx-vui-popup.license-manager-popup .cx-vui-popup__header .cx-vui-popup__header-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page .cx-vui-popup.license-manager-popup .cx-vui-popup__content{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow-y:auto}.jet-dashboard-page .cx-vui-popup.license-manager-popup .cx-vui-popup__content .license-manager{width:100%;max-width:1260px}.jet-dashboard-page .cx-vui-popup.license-activation-popup .cx-vui-popup__header{text-align:center}.jet-dashboard-page .cx-vui-popup.license-activation-popup .popup-licence-control{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:10px}.jet-dashboard-page .cx-vui-popup.license-activation-popup .popup-licence-control p{width:100%}.jet-dashboard-page .cx-vui-popup.license-activation-popup .popup-licence-control .popup-licence__key{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-page .cx-vui-popup.license-activation-popup .popup-licence-control .popup-licence__key input{border-radius:0 4px 4px 0}.jet-dashboard-page .cx-vui-popup.license-activation-popup .popup-licence-control .popup-licence__action-button{border-radius:4px 0 0 4px;-webkit-box-shadow:none;box-shadow:none}.jet-dashboard-page .cx-vui-popup.license-deactivation-popup .cx-vui-popup__content{text-align:center}.jet-dashboard-page .cx-vui-popup.license-deactivation-popup .cx-vui-popup__content .show-license-manager{margin-top:20px}.jet-dashboard-page .cx-vui-popup.update-check-popup .cx-vui-popup__content{text-align:center}.jet-dashboard-page .cx-vui-popup.update-check-popup .cx-vui-popup__content svg{margin-bottom:20px}.jet-dashboard-page .cx-vui-popup.update-check-popup .cx-vui-popup__content p{text-align:center;line-height:30px}.jet-dashboard-page .cx-vui-popup.update-check-popup .cx-vui-popup__content p span{font-size:20px;color:#23282d;display:block}.jet-dashboard-page .cx-vui-popup.update-check-popup .cx-vui-popup__content .cx-vui-button{margin-top:20px}.jet-dashboard-page .cx-vui-popup.rollback-popup p{text-align:center;line-height:30px}.jet-dashboard-page .cx-vui-popup.rollback-popup p i{display:block;color:#d6336c}.jet-dashboard-page .cx-vui-popup.rollback-popup .cx-vui-button{margin-top:10px;width:100%}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner.responce-type-error .responce-data-popup__title{color:#c92c2c}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner.responce-type-success .responce-data-popup__title{color:#46b450}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner .responce-data-popup__header{padding-bottom:15px;border-bottom:1px solid #dcdcdd;margin-bottom:30px}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner .responce-data-popup__title{font-weight:500;font-size:24px;line-height:36px;color:#23282d}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner p:last-child{padding-bottom:0}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner p .activation-limit{display:inline-block;width:20px;height:20px;text-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%;color:#fff;background-color:#007cba}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner .responce-data-popup__activated-sites{margin-bottom:20px}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner .responce-data-popup__activated-sites p{padding-bottom:5px}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner .responce-data-popup__activated-sites .site-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;max-height:100px;overflow-y:auto}.jet-dashboard-page .cx-vui-popup.responce-data-popup .responce-data-popup__inner .responce-data-popup__activated-sites .site-list .site-item{margin:0 10px 0 0}.jet-dashboard-page .cx-vui-popup.video-guide-popup .cx-vui-popup__body{padding:0;border-radius:0;background-color:#000}.jet-dashboard-page .cx-vui-popup.video-guide-popup .cx-vui-popup__body iframe{width:100%;min-height:450px}.jet-dashboard-page .cx-vui-popup.video-guide-popup .cx-vui-popup__content>div{line-height:0}.jet-dashboard-page .cx-vui-popup.service-actions-popup .service-actions-popup__form{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page .cx-vui-popup.service-actions-popup .service-actions-popup__form>.cx-vui-component-raw{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-page .cx-vui-popup.service-actions-popup .service-actions-popup__form>.cx-vui-component-raw select{max-width:100%}.jet-dashboard-page .cx-vui-popup.service-actions-popup .service-actions-popup__form .cx-vui-button{margin-right:10px}.jet-dashboard-welcome-page{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;gap:20px}.jet-dashboard-welcome-page__sidebar{position:relative;width:300px}.jet-dashboard-welcome-page__content{-webkit-box-flex:1;-ms-flex:1 1 600px;flex:1 1 600px}.jet-dashboard-welcome-page__updates .jet-dashboard-page-badge{position:absolute;top:0;right:0;z-index:1}.jet-dashboard-welcome-page__licenses .licence-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jet-dashboard-welcome-page__licenses .licence-list .licence-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-bottom:12px}.jet-dashboard-welcome-page__licenses .licence-list .licence-item:last-child{margin-bottom:0}.jet-dashboard-welcome-page__licenses .licence-list .licence-item .licence-item-icon{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-left:10px}.jet-dashboard-welcome-page__licenses .licence-list .licence-item .licence-item-info{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jet-dashboard-welcome-page__licenses .licence-list .licence-item .licence-item-name{font-weight:500;font-size:12px;line-height:16px;color:#7b7e81}.jet-dashboard-welcome-page__licenses .licence-list .licence-item .lifetime{color:#46b450}.jet-dashboard-welcome-page__licenses .licence-list .licence-item .expire-date{color:#d6336c}.jet-dashboard-welcome-page__avaliable-plugins div.cx-vui-subtitle{margin-bottom:0}.jet-dashboard-welcome-page__wizard-section div.cx-vui-subtitle{margin-bottom:0}.jet-dashboard-welcome-page__wizard-section div.cx-vui-subtitle .cx-vui-subtitle__label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-welcome-page__wizard-section div.cx-vui-subtitle .cx-vui-subtitle__label svg{margin-left:20px}.jet-dashboard-welcome-page__more-plugins .plugin-list--more-plugins div.plugin-item{width:calc(33.3333% - 20px)}.jet-dashboard-welcome-page__get-more-banner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;background-color:#edf6ff;background-image:url("https://api.crocoblock.com/downloads/images/jet-dashboard/get-more-banner-bg.svg");background-position:0 50%;background-repeat:no-repeat;background-size:contain}.jet-dashboard-welcome-page__get-more-banner .get-more-banner-content{width:calc(50% - 10px)}.jet-dashboard-welcome-page__get-more-banner .get-more-banner-content .desc{font-size:14px;line-height:18px;color:#23282d}.jet-dashboard-welcome-page__get-more-banner .get-more-banner-content .title{font-size:20px;line-height:28px;font-weight:600;color:#23282d;margin:0 0 15px 0}.jet-dashboard-welcome-page__get-more-banner .get-more-banner-content .cx-vui-button{color:#007cba;-webkit-box-shadow:inset 0 0 0 1px #007cba;box-shadow:inset 0 0 0 1px #007cba}.jet-dashboard-welcome-page .extras-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:20px}.jet-dashboard-welcome-page .extras-list .extras-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:calc(50% - 20px);min-height:67px;border:1px solid #e0e0e0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;overflow:hidden}.jet-dashboard-welcome-page .extras-list .extras-item__logo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:55px;max-width:55px;background-color:#f3f5fc}.jet-dashboard-welcome-page .extras-list .extras-item__details{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding:10px 10px 12px 10px}.jet-dashboard-welcome-page .extras-list .extras-item__name{font-weight:500;font-size:14px;line-height:18px}.jet-dashboard-welcome-page .extras-list .extras-item__desc{margin:5px 0 0 0}.jet-dashboard-welcome-page .extras-list .extras-item .cx-vui-button{margin-top:10px}.jet-dashboard-welcome-page .offers-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:20px;margin-bottom:-30px}.jet-dashboard-welcome-page .offers-list .offers-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:calc(50% - 20px);margin-bottom:30px;-webkit-box-sizing:border-box;box-sizing:border-box}.jet-dashboard-welcome-page .offers-list .offers-item__logo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;width:60px;max-width:60px;margin-left:20px}.jet-dashboard-welcome-page .offers-list .offers-item__details{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.jet-dashboard-welcome-page .offers-list .offers-item__name{font-weight:500;font-size:14px;line-height:18px}.jet-dashboard-welcome-page .offers-list .offers-item__desc{margin:5px 0 0 0}.jet-dashboard-welcome-page .offers-list .offers-item .cx-vui-button{margin-top:5px}.jet-dashboard-settings-page__inner.jet-dashboard-page__panel{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;padding-left:0}.jet-dashboard-settings-page .subpage-category-list{min-width:228px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin-left:20px}.jet-dashboard-settings-page .subpage-content{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-settings-page .plugin-settings-toggle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:228px;border-top:1px solid #dcdcdd}.jet-dashboard-settings-page .plugin-settings-toggle:first-child{border-top:none}.jet-dashboard-settings-page .plugin-settings-toggle__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px 20px 15px 30px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.jet-dashboard-settings-page .plugin-settings-toggle__header-label{font-weight:500;font-size:14px;line-height:18px;color:#23282d}.jet-dashboard-settings-page .plugin-settings-toggle__header-marker{width:20px;height:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-settings-page .plugin-settings-toggle__links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-settings-page .plugin-settings-toggle__link{border-style:solid;border-color:#fff;border-width:0 2px 0 0}.jet-dashboard-settings-page .plugin-settings-toggle__link:hover{background-color:#f5f8fd}.jet-dashboard-settings-page .plugin-settings-toggle__link:hover span{color:#007cba}.jet-dashboard-settings-page .plugin-settings-toggle__link.active{border-color:#007cba;background-color:#e9f0fd}.jet-dashboard-settings-page .plugin-settings-toggle__link.active span{color:#007cba}.jet-dashboard-settings-page .plugin-settings-toggle__link span{display:block;font-size:14px;line-height:18px;color:#23282d;padding:11px 52px 11px 0;text-decoration:none;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.jet-dashboard-settings-page .plugin-settings-toggle__link span:focus{outline:none;-webkit-box-shadow:none;box-shadow:none}.jet-dashboard-license-page{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-license-page .avaliable-plugins{margin-top:20px}.jet-dashboard-license-page .more-plugins{margin-top:20px}.jet-dashboard-license-page .add-new-license{display:-webkit-box;display:-ms-flexbox;display:flex}.jet-dashboard-license-page .add-new-license .cx-vui-button__content>span{display:-webkit-box;display:-ms-flexbox;display:flex}.jet-dashboard-license-page .add-new-license .cx-vui-button__content .dashicons{font-size:16px;margin:0 -5px 0 4px}.jet-dashboard-license-page .license-manager{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-license-page .license-manager .license-list{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap}.jet-dashboard-license-page .license-manager .license-list .license-item{margin:10px}.jet-dashboard-license-page .license-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:400px}.jet-dashboard-license-page .license-item__label{font-weight:500;font-size:24px;line-height:36px;text-align:center;color:#23282d;margin-bottom:40px}.jet-dashboard-license-page .license-item__control{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-license-page .license-item__control .license-item__activation-message{text-align:center;margin-bottom:30px}.jet-dashboard-license-page .license-item__control .license-item__action-button{margin-top:10px}.jet-dashboard-license-page .license-item__deactivation{-ms-flex-item-align:start;align-self:flex-start}.jet-dashboard-license-page .license-item.license-activated .license-status{color:#46b450}.jet-dashboard-license-page .license-item.license-activated .license-item__deactivation{color:#d6336c;-webkit-box-shadow:inset 0 0 0 1px #d6336c;box-shadow:inset 0 0 0 1px #d6336c}.jet-dashboard-license-page .license-details{margin:30px 0}.jet-dashboard-license-page .license-details__label{color:#23282d;font-size:15px;font-weight:700;margin-bottom:20px}.jet-dashboard-license-page .license-details__fields{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-license-page .license-details__field{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin-bottom:10px}.jet-dashboard-license-page .license-details__field:last-child{margin-bottom:0}.jet-dashboard-license-page .license-details__field .label{min-width:110px;font-weight:700;color:#23282d}.jet-dashboard-license-page .license-details__field .status-label{text-transform:capitalize;color:#46b450}.jet-dashboard-license-page .license-details__field .license-type{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-license-page .license-details__field .license-type svg{width:110px;height:auto}.jet-dashboard-license-page .license-details__field .included-plugin-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-license-page .license-details__field .included-plugin-list .included-plugin{width:50%;margin-bottom:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-license-page .license-details__field .included-plugin-list .included-plugin svg{margin-left:5px}.jet-dashboard-license-page .license-details__field.license-status{color:#c92c2c;font-weight:700;text-transform:capitalize}.jet-dashboard-license-page .license-details__field.license-type{text-transform:capitalize}.jet-dashboard-license-page .license-details__field.license-plugins{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-license-page .license-details__actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:20px}.jet-dashboard-license-page .license-details__actions .show-license-manager{font-size:13px}.jet-dashboard-license-page .license-details__actions .cx-vui-button{margin-right:5px}.jet-dashboard-license-page .license-details__actions .cx-vui-button:first-child{margin-right:0}.jet-dashboard-upsale-page__inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;background-image:-o-linear-gradient(23.82deg, #E9EFFD 22.28%, #FFFFFF 100%);background-image:linear-gradient(66.18deg, #E9EFFD 22.28%, #FFFFFF 100%);height:100vh;min-height:400px;gap:40px}.jet-dashboard-upsale-page__extra-image{width:50%;background-image:url("https://api.crocoblock.com/downloads/images/jet-dashboard/upsale-bg.png");background-position:50%;background-repeat:no-repeat;background-size:contain}.jet-dashboard-upsale-page__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;width:50%;font-size:18px;line-height:24px}@media(max-width: 1140px){.jet-dashboard-upsale-page__content{font-size:14px;line-height:20px}}.jet-dashboard-upsale-page__features{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:30px;margin-bottom:40px}@media(max-width: 1140px){.jet-dashboard-upsale-page__features{gap:15px}}.jet-dashboard-upsale-page__feature{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.jet-dashboard-upsale-page__feature span{color:#7b7e81}.jet-dashboard-upsale-page__title{font-weight:500;font-size:40px;line-height:48px;color:#23282d;margin-bottom:20px}@media(max-width: 1140px){.jet-dashboard-upsale-page__title{font-size:32px}}.jet-dashboard-upsale-page__desc{font-weight:normal;color:#7b7e81;max-width:460px;margin-bottom:40px}.cx-vui-notices .cx-vui-notice__icon{margin:0 0 0 15px}.cx-vui-notices .cx-vui-notice__close{margin:-2px 10px 0 0}.jet-dashboard-page{font-family:Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;margin:20px 16px 0 15px;visibility:hidden}.jet-dashboard-page.inited{visibility:visible}.jet-dashboard-page .proccesing-state{opacity:.5;pointer-events:none}.jet-dashboard-page__body{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;gap:20px}@media(max-width: 1140px){.jet-dashboard-page__body{-ms-flex-wrap:wrap;flex-wrap:wrap}}.jet-dashboard-page__notice-list{width:100%;margin-bottom:20px}.jet-dashboard-page__before-content{width:100%}.jet-dashboard-page__content{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;max-width:calc(100% - 320px)}@media(max-width: 1140px){.jet-dashboard-page__content{max-width:100%;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}}.jet-dashboard-page__before-sidebar{width:100%;margin-bottom:20px}.jet-dashboard-page__sidebar-container{position:relative;width:300px;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}@media(max-width: 1140px){.jet-dashboard-page__sidebar-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;width:100%}.jet-dashboard-page__sidebar-container>div{margin:0 20px 0 0}.jet-dashboard-page__sidebar-container>div:last-child{margin-right:0}}.jet-dashboard-page__sidebar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;gap:20px}@media(max-width: 1140px){.jet-dashboard-page__sidebar{width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.jet-dashboard-page__after-sidebar{width:100%;margin-top:20px}.jet-dashboard-page__header{position:relative;padding:20px 30px;background:-o-radial-gradient(61.68% 157.61%, 34.83% 346.74%, rgba(38, 232, 168, 0.8) 17.85%, rgba(38, 232, 168, 0) 100%),-o-radial-gradient(78.71% -77.17%, 19.98% 198.91%, rgba(91, 119, 231, 0.9) 0%, rgba(91, 119, 231, 0) 100%),-o-radial-gradient(32.75% -216.3%, 38.43% 382.61%, rgba(0, 132, 68, 0.8) 47.64%, rgba(0, 132, 68, 0) 100%),#23282d;background:radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(38, 232, 168, 0.8) 17.85%, rgba(38, 232, 168, 0) 100%),radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(91, 119, 231, 0.9) 0%, rgba(91, 119, 231, 0) 100%),radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(0, 132, 68, 0.8) 47.64%, rgba(0, 132, 68, 0) 100%),#23282d;margin-bottom:20px;border-radius:4px;overflow:hidden;-webkit-box-shadow:0px 2px 6px rgba(35,40,45,.07);box-shadow:0px 2px 6px rgba(35,40,45,.07)}.jet-dashboard-page__header .header-title{color:#fff;font-size:24px;line-height:32px;font-weight:500;margin:0}.jet-dashboard-page__header .header-desc{color:#fff;font-size:15px;line-height:22px;font-weight:normal;margin-top:5px;color:#26e8a8}.jet-dashboard-page__header .header-icon-link{position:absolute;top:19px;right:21px;width:56px;height:56px;border-radius:50%;background:-webkit-gradient(linear, left top, left bottom, from(#E52D27), color-stop(100.03%, #BF171D));background:-o-linear-gradient(top, #E52D27 0%, #BF171D 100.03%);background:linear-gradient(180deg, #E52D27 0%, #BF171D 100.03%)}.jet-dashboard-page__header .header-icon-link a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:56px;height:56px;line-height:0}.jet-dashboard-page__header .header-icon-link svg{-webkit-transition:-webkit-transform .25s ease;transition:-webkit-transform .25s ease;-o-transition:transform .25s ease;transition:transform .25s ease;transition:transform .25s ease, -webkit-transform .25s ease}.jet-dashboard-page__header .header-icon-link:hover svg{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}.jet-dashboard-page__header.lifetime-product-type{background:-o-radial-gradient(61.68% 157.61%, 34.83% 346.74%, rgba(254, 219, 34, 0.8) 17.85%, rgba(254, 219, 34, 0) 100%),-o-radial-gradient(78.71% -77.17%, 19.98% 198.91%, rgba(195, 109, 0, 0.9) 0%, rgba(195, 109, 0, 0) 100%),-o-radial-gradient(32.75% -216.3%, 38.43% 382.61%, rgba(195, 109, 0, 0.8) 47.64%, rgba(195, 109, 0, 0) 100%),#23282d;background:radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(254, 219, 34, 0.8) 17.85%, rgba(254, 219, 34, 0) 100%),radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(195, 109, 0, 0.9) 0%, rgba(195, 109, 0, 0) 100%),radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(195, 109, 0, 0.8) 47.64%, rgba(195, 109, 0, 0) 100%),#23282d}.jet-dashboard-page__header.lifetime-product-type .header-desc{color:#fedb22}.jet-dashboard-page__header.all-inclusive-product-type{background:-o-radial-gradient(61.68% 157.61%, 34.83% 346.74%, rgba(111, 139, 251, 0.8) 17.85%, rgba(111, 139, 251, 0) 100%),-o-radial-gradient(78.71% -77.17%, 19.98% 198.91%, rgba(255, 8, 201, 0.9) 0%, rgba(255, 8, 201, 0) 100%),-o-radial-gradient(32.75% -216.3%, 38.43% 382.61%, rgba(41, 69, 181, 0.8) 47.64%, rgba(41, 69, 181, 0) 100%),#23282d;background:radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(111, 139, 251, 0.8) 17.85%, rgba(111, 139, 251, 0) 100%),radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(255, 8, 201, 0.9) 0%, rgba(255, 8, 201, 0) 100%),radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(41, 69, 181, 0.8) 47.64%, rgba(41, 69, 181, 0) 100%),#23282d}.jet-dashboard-page__header.all-inclusive-product-type .header-desc{color:#00e0ff}.jet-dashboard-page__header.plugin-set-product-type{background:-o-radial-gradient(61.68% 157.61%, 34.83% 346.74%, rgba(38, 232, 168, 0.8) 17.85%, rgba(38, 232, 168, 0) 100%),-o-radial-gradient(78.71% -77.17%, 19.98% 198.91%, rgba(91, 119, 231, 0.9) 0%, rgba(91, 119, 231, 0) 100%),-o-radial-gradient(32.75% -216.3%, 38.43% 382.61%, rgba(91, 119, 231, 0.8) 47.64%, rgba(91, 119, 231, 0) 100%),#23282d;background:radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(38, 232, 168, 0.8) 17.85%, rgba(38, 232, 168, 0) 100%),radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(91, 119, 231, 0.9) 0%, rgba(91, 119, 231, 0) 100%),radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(91, 119, 231, 0.8) 47.64%, rgba(91, 119, 231, 0) 100%),#23282d}.jet-dashboard-page__header.plugin-set-product-type .header-desc{color:#26e8a8}.jet-dashboard-page__header.theme-plugin-bundle-product-type{background:-o-radial-gradient(61.68% 157.61%, 34.83% 346.74%, rgba(252, 133, 119, 0.8) 17.85%, rgba(252, 133, 119, 0) 100%),-o-radial-gradient(32.75% -216.3%, 38.43% 382.61%, rgba(25, 118, 211, 0.8) 47.64%, rgba(25, 118, 211, 0) 100%),-o-radial-gradient(78.71% -77.17%, 19.98% 198.91%, rgba(95, 49, 159, 0.9) 0%, rgba(95, 49, 159, 0) 100%),#23282d;background:radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(252, 133, 119, 0.8) 17.85%, rgba(252, 133, 119, 0) 100%),radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(25, 118, 211, 0.8) 47.64%, rgba(25, 118, 211, 0) 100%),radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(95, 49, 159, 0.9) 0%, rgba(95, 49, 159, 0) 100%),#23282d}.jet-dashboard-page__header.theme-plugin-bundle-product-type .header-desc{color:#00e0ff}.jet-dashboard-page__before-component{margin-bottom:20px}.jet-dashboard-page__inner-component{margin-top:20px}.jet-dashboard-page__after-component{margin-top:20px}.jet-dashboard-page p{font-size:13px;color:#7b7e81;margin:0 0 10px 0}.jet-dashboard-page .dashicons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page .cx-vui-subtitle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page .cx-vui-subtitle--controls{padding-bottom:20px;border-bottom:1px solid #dcdcdd;margin-bottom:20px}.jet-dashboard-page .cx-vui-subtitle__label{font-size:20px;line-height:24px;font-weight:normal}.jet-dashboard-page .cx-vui-subtitle__buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page .cx-vui-subtitle__buttons .cx-vui-button{margin-left:10px}.jet-dashboard-page .cx-vui-collapse__heading{padding:15px 0}.jet-dashboard-page .cx-vui-collapse__heading .cx-vui-subtitle{font-size:14px;font-weight:500}.jet-dashboard-page .cx-vui-collapse .cx-vui-collapse .cx-vui-collapse__heading{padding:15px}.jet-dashboard-page .cx-vui-tabs__nav{background-color:#fff}.jet-dashboard-page .cx-vui-tabs__nav-item{font-size:14px;font-weight:500}.jet-dashboard-page .cx-vui-component__label{font-size:14px;font-weight:400}.jet-dashboard-page .cx-vui-component__desc{font-size:12px}.jet-dashboard-page .cx-vui-dimensions{position:relative}.jet-dashboard-page .cx-vui-dimensions__units{margin-right:0}.jet-dashboard-page .cx-vui-dimensions__inputs .cx-vui-component-raw{min-width:25%}.jet-dashboard-page .cx-vui-dimensions__link{width:22px;height:22px;position:absolute;top:0;margin-left:0}.jet-dashboard-page__panel{min-width:292px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;padding:30px;background-color:#fff;-webkit-box-shadow:0px 2px 6px rgba(35,40,45,.07);box-shadow:0px 2px 6px rgba(35,40,45,.07)}.jet-dashboard-page__panel~.jet-dashboard-page__panel{margin-top:20px}.jet-dashboard-page__panel>.cx-vui-subtitle{margin-bottom:20px}.jet-dashboard-page__panel-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.jet-dashboard-page__panel-header .panel-header-icon{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:46px;height:46px;border-radius:50%;border:1px solid #7b7e81;margin-left:12px}.jet-dashboard-page__panel-header .panel-header-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jet-dashboard-page__panel-header .panel-header-content .panel-header-desc{font-size:14px;line-height:18px;font-weight:300;color:#7b7e81;margin-bottom:3px}.jet-dashboard-page__panel-header .panel-header-content .panel-header-title{font-size:20px;line-height:24px;color:#23282d}.jet-dashboard-page__panel-content{margin-top:12px;border-top:1px solid #dcdcdd;padding-top:23px;font-size:12px;line-height:16px;color:#7b7e81}.jet-dashboard-page__panel-controls{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:20px}.jet-dashboard-page__guide{width:100%}@media(max-width: 1140px){.jet-dashboard-page__guide{width:50%}}.jet-dashboard-page__guide-video{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:162px;background-color:#fff;background-size:cover;background-position:50%;overflow:hidden;border-radius:3px 3px 0 0;cursor:pointer}.jet-dashboard-page__guide-video svg{-webkit-transition:all .25s ease;-o-transition:all .25s ease;transition:all .25s ease}.jet-dashboard-page__guide-video:hover svg{-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}.jet-dashboard-page__guide-content{background-color:#fff;padding:20px 30px 40px 30px;border-radius:0 0 3px 3px}.jet-dashboard-page__guide-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.jet-dashboard-page__guide-link{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:22px}.jet-dashboard-page__guide-link:last-child{margin-bottom:0}.jet-dashboard-page__guide-link a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;font-size:14px;line-height:18px;color:#007cba;text-decoration:none}.jet-dashboard-page__guide-link a:hover{color:#066ea2;text-decoration:underline}.jet-dashboard-page__guide-link a svg{margin-top:3px;margin-right:10px}.jet-dashboard-page__help-center{width:100%}@media(max-width: 1140px){.jet-dashboard-page__help-center{width:50%}}.jet-dashboard-page__help-center-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-top:12px;border-top:1px solid #dcdcdd;padding-top:23px}.jet-dashboard-page__help-center-link{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:22px}.jet-dashboard-page__help-center-link:last-child{margin-bottom:0}.jet-dashboard-page__help-center-link a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;line-height:18px;color:#007cba;text-decoration:none}.jet-dashboard-page__help-center-link a:hover{color:#066ea2;text-decoration:underline}.jet-dashboard-page__help-center-link a .help-center-link-icon{margin-left:28px}.jet-dashboard-page .plugin-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap}.jet-dashboard-page .plugin-list .plugin-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-page .plugin-list .plugin-item__inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-page .plugin-list .plugin-item.activate-avaliable .plugin-label{color:#7b7e81}.jet-dashboard-page .plugin-list .plugin-item.activate-avaliable .plugin-version{background-color:#dfdfdf}.jet-dashboard-page .plugin-list .plugin-item.update-avaliable .plugin-version{background-color:#d6336c}.jet-dashboard-page .plugin-list .plugin-tumbnail{position:relative;line-height:0;margin-left:12px}.jet-dashboard-page .plugin-list .plugin-tumbnail img{width:80px}.jet-dashboard-page .plugin-list .plugin-info{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.jet-dashboard-page .plugin-list .plugin-name{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#23282d;font-weight:500}.jet-dashboard-page .plugin-list .plugin-desc{margin:10px 0 0 0}.jet-dashboard-page .plugin-list .plugin-version{font-size:12px;padding:0 4px;border-radius:2px;background-color:#46b450;color:#fff;white-space:nowrap;margin-right:8px}.jet-dashboard-page .plugin-list .plugin-rollback{line-height:0;margin-right:10px;cursor:pointer}.jet-dashboard-page .plugin-list .plugin-rollback .cx-vui-button{font-size:13px;white-space:nowrap}.jet-dashboard-page .plugin-list .plugin-rollback span{color:#007cba}.jet-dashboard-page .plugin-list .plugin-actions{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:nowrap;flex-wrap:nowrap;margin-top:7px}.jet-dashboard-page .plugin-list .plugin-actions .cx-vui-button{margin-right:8px}.jet-dashboard-page .plugin-list .plugin-actions .cx-vui-button:first-child{margin-right:0}.jet-dashboard-page .plugin-list .plugin-actions .show-license-control{color:#46b450}.jet-dashboard-page .plugin-list .plugin-actions .deactivate-plugin-button{color:#d6336c}.jet-dashboard-page .plugin-list .plugin-update-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:5px;color:#7b7e81;font-size:13px}.jet-dashboard-page .plugin-list .plugin-update-label .latest-version{color:#007dba;font-weight:500;margin:0 3px}.jet-dashboard-page .plugin-list .plugin-update-label .cx-vui-button{font-size:13px;margin-right:3px}.jet-dashboard-page .plugin-list--installed-plugins{margin:-15px 0}.jet-dashboard-page .plugin-list--installed-plugins .plugin-item{width:50%;margin:15px 0}@media(max-width: 1140px){.jet-dashboard-page .plugin-list--installed-plugins .plugin-item{width:100%}}.jet-dashboard-page .plugin-list--avaliable-plugins{margin:-10px}.jet-dashboard-page .plugin-list--avaliable-plugins .plugin-item{width:calc(33.3333% - 20px);margin:10px}@media(max-width: 1140px){.jet-dashboard-page .plugin-list--avaliable-plugins .plugin-item{width:100%;margin:10px 0}}.jet-dashboard-page .plugin-list--avaliable-plugins .plugin-item .plugin-tumbnail{width:58px;margin:0;border-radius:0 4px 4px 0;overflow:hidden}.jet-dashboard-page .plugin-list--avaliable-plugins .plugin-item .plugin-tumbnail img{width:65px;margin-left:-3px}.jet-dashboard-page .plugin-list--avaliable-plugins .plugin-item .plugin-info{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;padding:10px 12px;border-width:1px 0 1px 0;border-left:1px;border-style:solid;border-color:#e0e0e0;border-radius:4px 0 0 4px}.jet-dashboard-page .plugin-list--more-plugins{margin:-10px -10px -30px -10px}.jet-dashboard-page .plugin-list--more-plugins .plugin-item{width:calc(25% - 20px);margin:10px 10px 30px 10px}@media(max-width: 1140px){.jet-dashboard-page .plugin-list--more-plugins .plugin-item{width:calc(50% - 20px)}}.jet-dashboard-page .plugin-list--more-plugins .plugin-item__inner{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-page .plugin-list--more-plugins .plugin-item__inner .plugin-tumbnail{margin:0 0 25px 0}.jet-dashboard-page .plugin-list--more-plugins .plugin-item__inner .plugin-tumbnail img{width:auto;max-width:70%}.jet-dashboard-page .plugin-list--more-plugins .plugin-item__inner .plugin-info{-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.jet-dashboard-page .plugin-list--more-plugins .plugin-item__inner .plugin-info .plugin-actions{-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;margin-top:10px}.jet-dashboard-page .plugin-list--registered-plugins{margin:-10px}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item{width:calc(50% - 20px);margin:10px}@media(max-width: 1140px){.jet-dashboard-page .plugin-list--registered-plugins .plugin-item{width:100%}}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .button-dropdown-icon{-webkit-transition:-webkit-transform .25s;transition:-webkit-transform .25s;-o-transition:transform .25s;transition:transform .25s;transition:transform .25s, -webkit-transform .25s}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item.dropdown-visible .button-dropdown-icon{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .plugin-tumbnail{width:58px;margin:0;border-radius:0 4px 4px 0;overflow:hidden}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .plugin-tumbnail img{width:65px;margin-left:-3px}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .plugin-info{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;padding:10px 12px;border-width:1px 0 1px 0;border-left:1px;margin-left:12px;border-style:solid;border-color:#e0e0e0;border-radius:4px 0 0 4px}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .useful-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;position:absolute;overflow:hidden;width:207px;top:calc(100% - 38px);left:-30px;background-color:#fff;-webkit-box-shadow:0px 4px 10px rgba(35,40,45,.3);box-shadow:0px 4px 10px rgba(35,40,45,.3);border-radius:0px 0px 4px 4px;z-index:1}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .useful-links .useful-link{padding:12px;background-color:#fff;font-size:14px;line-height:16px;color:#007cba;text-decoration:none}.jet-dashboard-page .plugin-list--registered-plugins .plugin-item .useful-links .useful-link:hover{background-color:#f4f4f5}.jet-dashboard-page .jet-dashboard-page-badge{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:16px;height:16px;border-radius:50%;background:#ec1414;border:1px solid #fff;-webkit-box-sizing:border-box;box-sizing:border-box;font-weight:bold;font-size:12px;line-height:16px;color:#fff}.cx-vui-notices{z-index:10000}.fade-enter{opacity:0}.fade-enter-active{-webkit-transition:opacity .25s;-o-transition:opacity .25s;transition:opacity .25s}.fade-enter-to{opacity:1}.fade-leave{opacity:1}.fade-leave-active{-webkit-transition:opacity .25s;-o-transition:opacity .25s;transition:opacity .25s}.fade-leave-to{opacity:0}.popup-enter{opacity:0}.popup-enter .cx-vui-popup__body{-webkit-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}.popup-enter-active{-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}.popup-enter-active .cx-vui-popup__body{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;-o-transition:transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s}.popup-enter-to{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.popup-enter-to .cx-vui-popup__body{-webkit-transform:translateY(0px);-ms-transform:translateY(0px);transform:translateY(0px)}.popup-leave{opacity:1}.popup-leave-active{-webkit-transition:opacity .25s;-o-transition:opacity .25s;transition:opacity .25s}.popup-leave-to{opacity:0}.dropdown-menu-enter{opacity:0;-webkit-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}.dropdown-menu-enter-active{-webkit-transition:opacity .25s,-webkit-transform .25s;transition:opacity .25s,-webkit-transform .25s;-o-transition:opacity .25s,transform .25s;transition:opacity .25s,transform .25s;transition:opacity .25s,transform .25s,-webkit-transform .25s}.dropdown-menu-enter-to{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.dropdown-menu-leave{opacity:1}.dropdown-menu-leave-active{-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.dropdown-menu-leave-to{opacity:0}modules/jet-dashboard/assets/images/youtube-icons.svg000075500000006063151121477560017041 0ustar00 modules/jet-dashboard/assets/images/banner-light-bg-1.png000075500000033064151121477560017320 0ustar00PNG  IHDR$b) pHYs  sRGBgAMA a5IDATx}ݮmWqWl$C N@$8pB6Q䪁<@rNc"-9w}ѝ>Cj)>H4(HO7nMps\klQkOW5ƜK~?j"UD?;]_XeBĮbI[4Lg"w|5.E=]\]u7m|7tŲX;L~Z%W죵)k:~QOvyKvk *+V֪lY͖ID6/cگ49V}յy[뽍jghb<zԤw6k5yӼja%iT1aVgol![۷zmuZޱ<m:M=sܼvjivy׶^Nne':47V7alJ?+;m3Izr3TMCGD` 'M W7ЀepZ¬7>y˫KOR Yҍ]1 $mmkԛ31xm3KqQ6p|@Kf"V6/.Tu3W2p0SgQ[G̸zKB&\rL `lw#Rg &|L,llWBD:6@KJ ٍw6m+p+Tץh`  vfY6`iX+DO8ϾkkU e}EXgyM5Qhp˴ Fa[Hk%H;zeBW8j4e &Ψ !/ u`a͙X(E4VRUQ6VֿlXCӢqqwF1V'g`MJ6 VYd|gk>9!Z n#L?*f]Av q$>7Z]M-,*@0,MDac)ML`gcE{/]f+8ԛ2N_͑?iQqd-'Ϟbo dIŢu;H#b_+(b a ׂ70Rrh`* .m_zG.(ʊq; >Drjb 0z{ 07),у>-o7L`+j1n1p*Üiۚ DBT쭤y H缆YVVS׻0e&K:Zn)C6`Щ)hPsWsvpV׊; "ԞKwѲ H㬐=j0-ܧ "V/ƾq Я,Higo*‰' OA.8\e>.2"Rs Spa+@t K%VR_CU 6'BȀ{\CU"r5􉾹&=~0iON aP2Ƶ1I*wCܰ % @{ ـ1J\ auVEZ.Ӄ0 tI~ZWr;6oK%(a/Nca^:!-Blg0GRd``.3`8bŵb'^CuXGianmU= $B{!8+(N$31P,z5@ |3l1} fA$'`6PޙRׄtUjl"ķh:G3w8x/x rĭtm'jё]j6 Q'Z"AmŸlho3 /7*b|ܠ z07Rni%1$_,} 4LJ;i>;L[tOmLKAu2UE O҅FpڹaG56LÉ~>A Mq 0,՘dd5@L Ta3< lsFotơ(x]]s.bVԆJqԝ0& @uO-}O .an3L"XvmrTHsplfmp$Oe 'twhpFXRpir\46[BlI 6C;Ւ $$C>ŎL'P W=Ǖfcl[t ko#JJEW=vD0Bl)WcC_ $H[ƅf{=S,@a+Q'&XITTe쯮fCbJ @CF$6'<&|5H_{ qqω儠PFA$Wg)@H,IZݰ#a=p7V-h>t3 2kk!/g?J2FJ+NM ]0潆%. aiƁH&$@¼Ki|R&MB&Hƙ4W Fk8l%A 'Ƥ <,g, 8 l^W17FZmgo4w GWlԠcq]5HQ~i $MbPgI _EҶDl,D * iԡЁ` O,&[fOM'h~K@AF0Y4H W%T]Ԁ$FSB1)Ny'Nʒ Jk "]u,QL%6 o(JwTp|]j-SW>lk6rr%N!0]΀H$øØ ؈8k4gpnYT$Xdxr̋+4;ԬH10YlHez/ؐN[cp8y܃o3$y_̽ų2]T9^pPr$D:SxEe%>Ũ8 "lZCƄ܏Y-3ᤓIB77Kus7 4g8D_.xsp),( c&`s8٧aMWܸ7k!n՞a i% [,OLU*hE~3fÄ@ ^pe{ۊ~n[\ x z2QwDs.T܉*)OoK-(ni(h,| RO2>0zRN?6pAb1$w"æsq$W/]D%Ltu:De'n'ҭą@GK 1%4Xk>'Z]npzKŊd +B@KY籸Kpt2QgqZAHsĒ6sM%K#]}|oBG`iL{gK&\iwd0N)` pyF1_vu2K2=e':٦ Gi`Jo qx_ r@i9!d:jf-k ,1!$WƄ4(uI?`vfbOBd6joP2Jr< cԓecI*A%aJK -|!WبMF+-6 INUH/C̋lQor"61pq\-.K[TJYrn|rJ˩tkjsnsMKx18 0ASN`>1.K)i Iu: Ah$#Ik,S$gPwj,D8 s0 \NӴ0'ģl=r./ ~J1to`ZCW_mBNai:#`~z'c.YSҾ\`{2&t ;_G`] RW{'ٹj#,l$O؛`ۺ݂~C0|lAו\K^&^0ÐB@i8YW1Z ^o#It@(*8Ti%_}h >}4cKenkVǂX ^YbE_ 7J4Oq#4,q֍ri,3  ;~"?(]'8\`Mp]e]E\c (&ԲUG(Ǣ.N 1sލ~ { CZW<\$ {+>hihU(H5 #""'$aLCn[էL+m|Zde'ԍO 0"8"RbNzg-57y@3>vbyrj*kA-Oe)tr0FrwY~smjN 삝#Du.ܜIHbl[U7*5Ff27Sxc k-J$8mukXXVm]'O C=M:ax|*t WM#VV~(}axMK>o ك/֕!iUvVUp3֮kٖ`i8'_y /#ׯ_7ϯޣRsqu-o*ބUP@,@Vc718x!(^Pe.1PyXJ-tk#U=H;RƂW\+hu 8*UhFLڵ>!bgļ"'{,d:GAR׹2c/c14ƏvDEs1Ht>J~OxLug ') :>"`-!>tO%r ,#'02cZձj|EkN/ * L4V}M)VG{ 5J ux.I (eC})KFb:A3q?%]Jm+;R,+ܮЊKLj1s]N`!:ը˖)%o0*ae{~-`Az솠8.2~1/I֛&EH*H"=9,lֺ~g'7gn>zyOOӵ3\;3= eFFG*Z^1) Y1J^H҃ACAJoٵ & <”қJ%u7Bd:J(Z @A o$5~`~2ed*:\Q`cT-پ0%ew]-=y;p%N]JP%ƸP֑~XIz*P=^za( Yvgv+ A>6]! .HRď ]R]1.4I @ ˌ-y*Y uF _e8e掬}}>dHuE'<(ϐxY 0C=bdtsǁ-N/& \i"ގLx9<FwpmvEFvB ӭqR\Yn^rr>V ή\+Ϭ={ + B%6$)&ogM (]j}JG;# i~)!Bᦍ@@?kTT-32ϿDabMS)kQcynXY("$u`{s;@El\fF(3ĨZK_mc >К=:ɵk wqϮCmkH Dd)`: Hʏ9(Z#[J`u,ϣG͡bɒ^/]sG4u,CF@7/S]H+ \d:e`)@^+LAq`Ȟ,iЎ8DQ2&(Q`SA!2Eg+㊑OpHgPOܺz{\^OC̍ @@nLo% {0I&Vl"02p;heq`2sgCdHmUp# "Ru Hxu:[ (F)- +%U̮-ŽļG7P;wH`FΥv,7u `E&rs^?>0.[w.pmqmLF5UƥKtp ʵ Z >-8Vwk2, XhJƧ;6TA2Z^)Edq(h^cHH]…,O1t;XD!&KIotƀȂDv`I,6Z69^˶ݮ^j[OL&+_XMP Rn\z~c +VEuMc كP@2Vu;bzgT΍6* ql'1-+  }P#.HeGh~,R4pBPْ//2ͥaGXP2.7.}cDnMzgȵkVp=n=ΉAcd^bRz4UD3Jriz"^֓g_JRa:7\ymcHg2.wK9j.Iɝeϖf]c2YX̳M=ࢹ΋ԺáR?wv+7'nb;VNWpݻֹjWxEőx6b.^ϗ/^ƍ ݲ>O3wx@`fuc!AGP`dk0Q@ sǖ*!iT.A*GvEjRzgZV :ޓ.ܕy?1Nez~}y/Ɇl驳NOޥ׶|eʧ} c`8y]%Ɠ L֚S=ܦRN 1AۢQ<f>~c,3" <F! *"GXĬXJ4 ,qkG2 W{fuƟAANn8)S^Ax{ǏgF^T$0~[AeoT]&7#X_'A]x#.YёHF6vm!Fd:TO^#Scd5\[G(3>/eYr]$~;rt"&O9;{Ĕ)?nQ9_s?:IN/NqeuYu,<0jdZE@C]\AG7hx{07@"밗kwe[F W. D'!G91Uhp&D BGBD;4BY׀._y8E6="2$eIjNӦh\P^!8̖2B3[r'^}RDs_4QVzYVY}) !0w^ ܿjq!|\Z)" vO@yvJ `>D2%H}{+7n} SɤSO/,#5;[x[c`zNd9VENsӬ} YKeO0@_w :9ɘ9Sh.V~`UP@>ZFc8г?cʔ780:?RV}ѸYK%UVX3^TPIpo-դ<~pHƕD}hj֞q_.R!E {ZnR:b(q"(#ؤ(wR5$VtML?sw^:`̹VX}b-z"QaGd;s`%.#ˀJGorWYMK薅TugО iPxvD;y}=7obʔ#+l;rq=wSMw QtQݨs/K"5^[D'br="P\Ε8?;ٔw\==^le&fiuG[V#\] /<5]:eP("#8ǎP尷XԿ=?)SanheW}c;2o9&ugm8 ڇ>'q.{a*VS09 wJ~Q",g/w)S wKh  U=rWbt %Z˞Gw*ʐ>6豋 7rw-\RO4&Y?v85Dխ;r}Lҥ[Oݯ/~9C2z0;<Cue'Eb(d@h;ݶV4 y k+?bʔ)GOm^&JrhtkO{5۳J+W @ >`{oS>-.O$joFB2IW FS;xӿw]_64v蔺`{Y,7 }yQU%]) R)`I 0q k?y*ٳWͣ?гϘ2e+͛7q~O{Zqwv ܾОȰc.S:C._UI/by0V=ՖzXo{_Ŕ)S~.mWVKբ?p,ͫݵq ] ms N;r?M2A tAU=?kM02}Qh.܎,o﫻Vd%yعԲįwv?l`ڟޢQF sM.ґ Q77hʔW6?c.ov\Z9}rR+7f9E+oaʔ)o\zz"y}G0/RP>DsrvQ^"| FSr~~i{~#? 4<$;5~YRA^įN }g SLɏ]] 1˃!ՄiHZHU t6P1?^ /p & b:뭡S c}W&S>-wsߛwO&҃~iyT6{}-ߙ XD'*(8T@P+HCk SLyJO}i\?]M?x]ŵcmGPZVdOVft>/;e[@}T͹,Ou>.{sHHADG}<%L2-)/]ՠ^>< %量=Vq)Sc=g"Ǽ-_g Uݟ3؋cѳcʔ)oyَ}X!U9~~? .v \c &p_Lyһ3K_^6ZLﱦtdיя}SLyJKgJJIQaN˦5 %JֈdFSݷΔ_Fmwl pl"DKWM7mʔw)oԗMP)"G {禛6e;I^Ƒ4)CJ +pI/`ww&M2}c0[w90n7׾\ {'r<6hʔwlNЙO߻s!Dm?8eʔI"֏DkdXRnM~p Z@\.^V2eJ__({%)rkURT߶ԌG܊3_7N2E͵S}\l32eqvnz~Z̩_ W۶yd= ~2> ?m>hʔ)(<g<99+\}no4~^n?gLj[+HvDo< g`O2g_yb3Rr o DS<:M2Wr+W,xF~o7'0eʔ)|C;bmGqeJ~q~SL ʧ?;*'qAÄNZg{ʔ)l;o'_.Il%=LZʶ,}R..%SLyd r5Ƚec"=>vOڔ)S^7?s]ꎝ|$C1#,r1ObO2~{SOݯw_V85ؽ-)S2=v0eʔ)o|㛧k@Ζ;FSLy%8^SLKS\н1+/|ڔ)S~i=_Ô)SYƽ>IENDB`modules/jet-dashboard/assets/images/banner-light-bg-1.svg000075500000001121151121477560017320 0ustar00 modules/jet-dashboard/assets/images/elementor-wordpress-icon.svg000075500000012572151121477560021204 0ustar00 modules/jet-dashboard/assets/js/upsale-page.js000075500000002207151121477560015417 0ustar00( function () { 'use strict'; Vue.component( 'upsale-page', { template: '#jet-dashboard-upsale-page', props: { subpage: [ String, Boolean ] }, data: function() { return { generalConfig: window.JetDashboardConfig.generalConfig || [], }; }, computed: { getCrocoblockLink: function() { let baseUrl = this.generalConfig.pricingPageUrl || 'https://crocoblock.com/pricing/', licenseType = `${ this.$root.licenseType }-license` || 'not-activated-license', themeAuthor = this.$root.themeInfo.authorSlug || 'unknow-author', utmString = window.JetDasboard.getUtmParamsString( { utm_source: `dashboard/${ this.$root.pageModule }`, utm_medium: `${ licenseType }/${ themeAuthor }`, utm_campaign: 'upsale-crocoblock', } ); if ( utmString ) { return `${ baseUrl }?${ utmString }`; } return baseUrl; }, }, methods: { navigateToLicensePage: function() { window.location.href = window.JetDashboardConfig.licensePageUrl; }, navigateToLicenseManager: function() { window.location.href = window.JetDashboardConfig.licenseManagerUrl; } } } ); } )(); modules/jet-dashboard/assets/js/jet-dashboard-class.js000075500000061532151121477560017034 0ustar00'use strict'; class JetDasboardClass { /** * [constructor description] * @return {[type]} [description] */ constructor() { //this.JetDasboardPageInstance = false; this.initVueComponents(); } /** * [initVueComponents description] * @return {[type]} [description] */ initVueComponents() { let _this = this; Vue.component( 'jet-dashboard-before-content', { template: '#jet-dashboard-before-content', props: { config: [ Object, Boolean ] }, computed: { configDefined: function() { return this.config ? true : false; }, visible: function() { return this.configDefined && this.config['visible'] ? true : false; }, bannersList: function() { return this.configDefined && this.config['bannersData'] ? this.config['bannersData'] : []; } } } ); Vue.component( 'jet-dashboard-header', { template: '#jet-dashboard-header', props: { config: [ Object, Boolean ] }, data: function() { return {} }, computed: { classes: function() { return [ this.licenseType ? `${ this.licenseType }-license-type` : '', this.productType ? `${ this.productType }-product-type` : '', ]; }, configDefined: function() { return this.config ? true : false; }, visible: function() { return this.configDefined && this.config['visible'] ? true : false; }, licenseType: function() { return this.configDefined && this.config['licenseType'] ? this.config['licenseType'] : false; }, productType: function() { return this.configDefined && this.config['productType'] ? this.config['productType'] : false; }, title: function() { return this.configDefined && this.config['title'] ? this.config['title'] : false; }, desc: function() { return this.configDefined && this.config['desc'] ? this.config['desc'] : false; }, videoLink: function() { let visibleMap = [ 'default', 'theme-plugin-bundle', 'single-plugin', ]; return this.configDefined && this.config['videoLink'] && visibleMap.includes( this.productType ) ? this.config['videoLink'] : false; }, } } ); Vue.component( 'jet-dashboard-before-component', { template: '#jet-dashboard-before-component', props: { config: [ Object, Boolean ] }, computed: { configDefined: function() { return this.config ? true : false; }, visible: function() { return this.configDefined && this.config['visible'] ? true : false; }, bannersList: function() { return this.configDefined && this.config['bannersData'] ? this.config['bannersData'] : []; } } } ); Vue.component( 'jet-dashboard-inner-component', { template: '#jet-dashboard-inner-component', props: { config: [ Object, Boolean ] }, computed: { configDefined: function() { return this.config ? true : false; }, visible: function() { return this.configDefined && this.config['visible'] ? true : false; }, bannersList: function() { return this.configDefined && this.config['bannersData'] ? this.config['bannersData'] : []; } } } ); Vue.component( 'jet-dashboard-after-component', { template: '#jet-dashboard-after-component', props: { config: [ Object, Boolean ] }, computed: { configDefined: function() { return this.config ? true : false; }, visible: function() { return this.configDefined && this.config['visible'] ? true : false; }, bannersList: function() { return this.configDefined && this.config['bannersData'] ? this.config['bannersData'] : []; } } } ); Vue.component( 'jet-dashboard-before-sidebar', { template: '#jet-dashboard-before-sidebar', props: { config: [ Object, Boolean ] }, computed: { configDefined: function() { return this.config ? true : false; }, visible: function() { return this.configDefined && this.config['visible'] ? true : false; }, bannersList: function() { return this.configDefined && this.config['bannersData'] ? this.config['bannersData'] : []; } } } ); Vue.component( 'jet-dashboard-sidebar', { template: '#jet-dashboard-sidebar', props: { config: [ Object, Boolean ], guide: [ Object, Boolean ], helpCenter: [ Object, Boolean ], }, data: function() { return { themeInfo: window.JetDashboardConfig.themeInfo || false, videoPopupEnable: false, videoEmbed: false } }, computed: { configDefined: function() { return this.config ? true : false; }, visible: function() { return this.configDefined && this.config['visible'] ? true : false; }, guideVideos: function() { return this.guide.videos; }, guideLinks: function() { let rawGuideLinks = this.guide.links, guideLinks = []; guideLinks = rawGuideLinks.map( ( linkData ) => { let licenseType = `${ this.$root.licenseType }-license` || 'not-activated-license', themeAuthor = this.$root.themeInfo.authorSlug || 'unknow-author', utmString = _this.getUtmParamsString( { utm_source: `dashboard/${ this.$root.pageModule }`, utm_medium: `${ licenseType }/${ themeAuthor }`, utm_campaign: 'guide-link', } ); if ( utmString ) { let itemLink = linkData.link; linkData.link = `${ itemLink }?${ utmString }`; } return linkData; } ); return guideLinks; }, helpCenterLinks: function() { return this.helpCenter.links; }, videoPopupVisible: function() { return this.videoPopupEnable; } }, methods: { openVideoPopupHandler: function( embed ) { this.videoPopupEnable = true; this.videoEmbed = embed; } } } ); Vue.component( 'jet-dashboard-after-sidebar', { template: '#jet-dashboard-after-sidebar', props: { config: [ Object, Boolean ] }, computed: { configDefined: function() { return this.config ? true : false; }, visible: function() { return this.configDefined && this.config['visible'] ? true : false; }, bannersList: function() { return this.configDefined && this.config['bannersData'] ? this.config['bannersData'] : []; } } } ); Vue.component( 'jet-dashboard-banner', { template: '#jet-dashboard-banner', props: { config: [ Object, Boolean ] }, data: function() { return {} }, mounted: function(){ if ( this.customCss ) { this.insertInlineStyles(); } if ( this.customScript ) { this.insertInlineScripts(); } }, computed: { configDefined: function() { return this.config; }, classes: function() { let classes = [ 'jet-dashboard-page__banner', 'custom' !== this.preset ? 'premade-preset' : false, `${this.config['preset']}-preset`, this.config['size'] ]; return classes; }, visible: function() { return this.configDefined ? true : false; }, preset: function() { return this.configDefined && this.config['preset'] ? this.config['preset'] : 'light'; }, label: function() { return this.configDefined && this.config['label'] ? this.config['label'] : false; }, title: function() { return this.configDefined && this.config['title'] ? this.config['title'] : false; }, content: function() { return this.configDefined && this.config['content'] ? this.config['content'] : false; }, buttons: function() { return this.configDefined && this.config['buttons'] && 0 < this.config['buttons'].length ? this.config['buttons'] : false; }, customHtml: function() { return this.configDefined && this.config['customHtml'] && '' !== this.config['customHtml'].length ? this.config['customHtml'] : false; }, customCss: function() { return this.configDefined && this.config['customCss'] && '' !== this.config['customCss'].length ? this.config['customCss'] : false; }, customScript: function() { return this.configDefined && this.config['customScript'] && '' !== this.config['customScript'].length ? this.config['customScript'] : false; }, }, methods: { generateUrmLik: function( linkData ) { let rawLink = linkData.link, licenseType = `${ this.$root.licenseType }-license` || 'not-activated-license', themeAuthor = this.$root.themeInfo.authorSlug || 'unknow-author', utmSource = linkData.hasOwnProperty( 'utmSource' ) && '' !== linkData.utmSource ? linkData.utmSource : `dashboard/${ this.$root.pageModule }`, utmMedium = linkData.hasOwnProperty( 'utmMedium' ) && '' !== linkData.utmMedium ? linkData.utmMedium : `${ licenseType }/${ themeAuthor }`, utmCampain = linkData.hasOwnProperty( 'utmCampain' ) && '' !== linkData.utmCampain ? linkData.utmCampain : 'banner-action', utmString = _this.getUtmParamsString( { utm_source: utmSource, utm_medium: utmMedium, utm_campaign: utmCampain, utm_content: this.title || '' } ); if ( utmString ) { rawLink = `${ rawLink }?${ utmString }`; } return rawLink; }, insertInlineStyles: function() { let customCss = this.customCss, cssTag = document.createElement( 'style' ); cssTag.type = 'text/css'; cssTag.setAttributeNode( document.createAttribute( 'scopped' ) ); cssTag.appendChild( document.createTextNode( customCss ) ); this.$el.appendChild( cssTag ); }, insertInlineScripts: function() { let customScript = this.customScript, scriptTag = document.createElement( 'script' ); scriptTag.setAttributeNode( document.createAttribute( 'async' ) ); scriptTag.appendChild( document.createTextNode( customScript ) ); this.$el.appendChild( scriptTag ); } } } ); Vue.component( 'jet-dashboard-alert-list', { template: '#jet-dashboard-alert-list', props: { alertList: Array }, data: function() { return {} }, computed: { visible: function() { return 0 !== this.alertList.length; } } } ); Vue.component( 'jet-dashboard-alert-item', { template: '#jet-dashboard-alert-item', props: { config: [ Object, Boolean ] }, data: function() { return { alertVisible: true } }, mounted: function() { let localStorageNotices = _this.getLocalStorageData( 'notices', {} ); if ( localStorageNotices.hasOwnProperty( this.config.id ) ) { let noticeData = localStorageNotices[ this.config.id ]; this.alertVisible = noticeData.closed ? false : true; } if ( this.config.duration ) { setTimeout( () => { this.alertVisible = false; } , this.config.duration ); } }, computed: { configDefined: function() { return this.config; }, visible: function() { return this.configDefined && this.alertVisible ? true : false; }, classes: function() { let classes = [ 'jet-dashboard-page__alert', `${ this.type }-type`, this.config.customClass ]; return classes; }, type: function() { return this.configDefined && this.config['type'] ? this.config['type'] : false; }, iconHtml: function() { let defaultIcon = false; switch( this.type ) { case 'info': defaultIcon = ''; break; case 'success': defaultIcon = ''; break; case 'danger': defaultIcon = ''; break; case 'error': defaultIcon = ''; break; } return this.configDefined && this.config['icon'] ? this.config['icon'] : defaultIcon; }, title: function() { return this.configDefined && this.config['title'] ? this.config['title'] : false; }, message: function() { return this.configDefined && this.config['message'] ? this.config['message'] : false; }, buttons: function() { return this.configDefined && this.config['buttons'] ? this.config['buttons'] : false; }, }, methods: { closeAlert: function() { let localStorageNotices = JetDasboard.getLocalStorageData( 'notices', {} ); localStorageNotices[ this.config.id ] = { closed: true } JetDasboard.setLocalStorageData( 'notices', localStorageNotices ); this.alertVisible = false; } } } ); Vue.component( 'plugin-item-more', { template: '#jet-dashboard-plugin-item-more', props: { pluginData: Object }, data: function() { return { themeInfo: window.JetDashboardConfig.themeInfo || false, } }, computed: { demoLink: function() { let pluginDemoLink = this.pluginData.demo, licenseType = `${ this.$root.licenseType }-license` || 'not-activated-license', themeAuthor = this.$root.themeInfo.authorSlug || 'unknow-author', utmString = _this.getUtmParamsString( { utm_source: `dashboard/${ this.$root.pageModule }`, utm_medium: `${ licenseType }/${ themeAuthor }`, utm_campaign: 'upsale-more-plugins', utm_content: 'get-more-plugins-section' } ); if ( utmString ) { pluginDemoLink = `${ pluginDemoLink }?${ utmString }`; } return pluginDemoLink; } } } ); } /** * [initVueInstance description] * @return {[type]} [description] */ initDashboardPageInstance() { Vue.config.devtools = true; if ( ! jQuery('#wpbody')[0] ) { return false; } return new Vue( { el: '#wpbody', data: { pageModule: window.JetDashboardConfig.pageModule || false, subPageModule: window.JetDashboardConfig.subPageModule || false, pageConfig: window.JetDashboardConfig.pageModuleConfig, licenseList: window.JetDashboardConfig.licenseList || [], themeInfo: window.JetDashboardConfig.themeInfo || false, helpCenterConfig: window.JetDashboardConfig.helpCenterConfig, avaliableBanners: window.JetDashboardConfig.avaliableBanners, noticeList: window.JetDashboardConfig.noticeList || [], serviceAction: '', serviceActionsVisible: false, serviceActionProcessed: false, ajaxServiceAction: null, serviceActionOptions: window.JetDashboardConfig.serviceActionOptions || [], }, mounted: function() { this.$refs.jetDashboardPage.classList.add( 'inited' ); this.simpleNoticeList.forEach( ( noticeData, index ) => { let itemTimeout = ( index * 500 ) + 1000; setTimeout( () => { this.$CXNotice.add( { message: noticeData.message, type: noticeData.type, duration: noticeData.duration ? noticeData.duration : 99999, } ); } , itemTimeout ); } ); if ( jQuery( '#toplevel_page_jet-dashboard' )[0] ) { let wpSubmenuItems = jQuery( '#toplevel_page_jet-dashboard .wp-submenu > li' ), urlParams = new URLSearchParams( window.location.href ), currentSubpage = urlParams.get( 'subpage' ) || false; if ( currentSubpage ) { wpSubmenuItems.each( ( index, item ) => { let $item = jQuery( item ), urlParams = new URLSearchParams( jQuery( 'a', $item ).attr( 'href' ) ), page = urlParams.get( 'admin.php?page' ) || false, subpage = urlParams.get( 'subpage' ) || false; if ( subpage === currentSubpage ) { wpSubmenuItems.removeClass( 'current' ); $item.addClass('current'); } } ); } } // hotkey catching document.onkeyup = ( event ) => { // Debug console hotkey ctrlKey + altKey + D if ( event.ctrlKey && event.altKey && event.which === 68 ) { this.serviceActionsVisible = true; } }; }, computed: { beforeContentConfig: function() { let beforeContentConfig = this.pageConfig['before-content'] || false, bannersData = this.getBannerListForArea( beforeContentConfig ); beforeContentConfig = Object.assign( beforeContentConfig, { bannersData: bannersData } ); return beforeContentConfig; }, headerConfig: function() { let headerPageConfig = this.pageConfig['header'] || false; headerPageConfig = Object.assign( headerPageConfig, { licenseType: this.licenseType, productType: this.productType } ); return headerPageConfig; }, beforeComponentConfig: function() { let beforeComponentConfig = this.pageConfig['before-component'] || false, bannersData = this.getBannerListForArea( beforeComponentConfig ); beforeComponentConfig = Object.assign( beforeComponentConfig, { bannersData: bannersData } ); return beforeComponentConfig; }, afterComponentConfig: function() { let afterComponentConfig = this.pageConfig['after-component'] || false, bannersData = this.getBannerListForArea( afterComponentConfig ); afterComponentConfig = Object.assign( afterComponentConfig, { bannersData: bannersData } ); return afterComponentConfig; }, beforeSidebarConfig: function() { let beforeSidebarConfig = this.pageConfig['before-sidebar'] || false, bannersData = this.getBannerListForArea( beforeSidebarConfig ); beforeSidebarConfig = Object.assign( beforeSidebarConfig, { bannersData: bannersData } ); return beforeSidebarConfig; }, sidebarConfig: function() { let sidebarConfig = this.pageConfig['sidebar'] || false; return sidebarConfig; }, sidebarVisible: function() { if ( this.sidebarConfig && this.sidebarConfig['visible'] ) { return true; } return false; }, afterSidebarConfig: function() { let afterSidebarConfig = this.pageConfig['after-sidebar'] || false, bannersData = this.getBannerListForArea( afterSidebarConfig ); afterSidebarConfig = Object.assign( afterSidebarConfig, { bannersData: bannersData } ); return afterSidebarConfig; }, guideConfig: function() { let guideConfig = this.pageConfig['guide'] || false; return guideConfig; }, alertNoticeList: function() { return this.noticeList.filter( ( noticeData ) => { return noticeData.page.includes( this.pageModule ) && 'alert' === noticeData.preset; } ); }, simpleNoticeList: function() { return this.noticeList.filter( ( noticeData ) => { return this.pageModule === noticeData.page && 'notice' === noticeData.preset; } ); }, licenseType: function() { let licenseMap = [ 'crocoblock', 'tm', 'envato', ], licenseType = 'not-activated'; for ( let type of licenseMap ) { let typeCheck = this.licenseList.some( ( license ) => { let details = license.licenseDetails, licenseType = details.type || false; return licenseType && licenseType === type; } ); if ( typeCheck ) { licenseType = type; break; } } return licenseType; }, productType: function() { let productMap = [ 'lifetime', 'all-inclusive', 'plugin-set', 'theme-plugin-bundle', 'single-plugin', ], productType = 'not-activated'; for ( let type of productMap ) { let typeCheck = this.licenseList.some( ( license ) => { let details = license.licenseDetails, category = details.product_category || false; return category && type === category; } ); if ( typeCheck ) { productType = type; break; } } return productType; }, }, methods: { executeServiceAction: function() { var self = this; self.ajaxServiceAction = jQuery.ajax( { type: 'POST', url: window.JetDashboardConfig.ajaxUrl, dataType: 'json', data: { action: 'jet_dashboard_debug_action', data: { action: self.serviceAction, nonce: window.JetDashboardConfig.nonce, } }, beforeSend: function( jqXHR, ajaxSettings ) { if ( null !== self.ajaxServiceAction ) { self.ajaxServiceAction.abort(); } self.serviceActionProcessed = true; }, success: function( responce, textStatus, jqXHR ) { self.serviceActionProcessed = false; self.$CXNotice.add( { message: responce.message, type: responce.status, duration: 3000, } ); setTimeout( function() { window.location.reload(); }, 1000 ); } } ); }, getBannerListForArea( areaConfig ) { let bannersData = []; if ( areaConfig && areaConfig.hasOwnProperty( 'banners' ) ) { bannersData = this.avaliableBanners.filter( ( avaliableBanner ) => { return areaConfig.banners.includes( avaliableBanner.id ) && ( '' === avaliableBanner.licenseType || avaliableBanner.licenseType === this.productType ); } ); } return bannersData; } } } ); } getUtmParamsString( data = {} ) { let utmString = false; if ( 0 === Object.keys( data ).length ) { return utmString; } utmString = Object.keys( data ).map( ( key ) => { return [ key, data[ key ] ].map( encodeURIComponent ).join( '=' ); } ).join( '&' ); return utmString; } /** * [getLocalStorageData description] * @return {[type]} [description] */ getLocalStorageData( _key = false, _default = false ) { try { let jetDasboardData = JSON.parse( window.localStorage.getItem( 'jetDasboardData' ) ); if ( _key ) { if ( jetDasboardData.hasOwnProperty( _key ) ) { return jetDasboardData[ _key ]; } else { return _default; } } return jetDasboardData; } catch ( e ) { return _default; } } /** * Set localStorage data. * * @return {object|boolean} */ setLocalStorageData( key, data ) { let jetDasboardData = this.getLocalStorageData() || {}; jetDasboardData[ key ] = data; window.localStorage.setItem( 'jetDasboardData', JSON.stringify( jetDasboardData ) ); } } modules/jet-dashboard/assets/js/jet-dashboard.js000075500000000413151121477560015720 0ustar00'use strict'; const { __, _x, _n, _nx, sprintf } = wp.i18n; window.JetDashboardEventBus = new Vue(); window.JetDasboard = new JetDasboardClass(); //window.JetDasboard.initVueComponents(); window.JetDasboardPageInstance = JetDasboard.initDashboardPageInstance(); modules/jet-dashboard/assets/js/license-page.js000075500000046567151121477560015571 0ustar00(function () { 'use strict'; Vue.component( 'license-item', { template: '#jet-dashboard-license-item', props: { licenseData: Object, type: String }, data: function() { return { licenseKey: this.licenseData.licenseKey, licenseStatus: this.licenseData.licenseStatus, licenseDetails: this.licenseData.licenseDetails, activationStatus: false, ajaxLicenseAction: null, } }, computed: { isLicenseActive: function() { return 'active' === this.licenseStatus ? true : false; }, licenseActionType: function() { return ! this.isLicenseActive ? 'activate' : 'deactivate'; }, maskedLicenseKey: function() { let licenseKey = this.licenseKey, licenseKeyArray = licenseKey.split(''), maskerLicenseArray = []; maskerLicenseArray = licenseKeyArray.map( ( item, index ) => { if ( index > 4 && index < licenseKeyArray.length - 4 ) { return '*'; } return item; } ); return maskerLicenseArray.join(''); }, /*licenseStatus: function() { return this.isLicenseActive ? 'activated' : 'not-activated'; },*/ licenseType: function() { return this.licenseDetails.type ? this.licenseDetails.type : ''; }, productName: function() { return this.licenseDetails.product_name ? this.licenseDetails.product_name : ''; }, isLicenseExpired: function() { return 'expired' === this.licenseStatus ? true : false; }, expireDate: function() { let expireCases = [ '0000-00-00 00:00:00', '1000-01-01 00:00:00', 'lifetime' ]; if ( expireCases.includes( this.licenseDetails.expire ) ) { return 'Lifetime'; } return this.licenseDetails.expire; }, licensePlugins: function() { return this.licenseDetails.plugins ? this.licenseDetails.plugins : []; }, }, methods: { showLicenseManager: function() { window.JetDashboardEventBus.$emit( 'showLicenseManager' ); }, licenseAction: function() { var self = this, actionType = self.licenseActionType; self.activationStatus = true; self.ajaxLicenseAction = jQuery.ajax( { type: 'POST', url: window.JetDashboardConfig.ajaxUrl, dataType: 'json', data: { action: 'jet_license_action', data: { license: self.licenseKey, action: actionType, nonce: window.JetDashboardConfig.nonce, } }, beforeSend: function( jqXHR, ajaxSettings ) { if ( null !== self.ajaxLicenseAction ) { self.ajaxLicenseAction.abort(); } }, success: function( responce, textStatus, jqXHR ) { self.activationStatus = false; self.$CXNotice.add( { message: responce.message, type: responce.status, duration: 4000, } ); let licenseStatus = responce.status, licenseDetails = responce.data; if ( 'success' === licenseStatus ) { if ( 'activate' === actionType ) { self.licenseStatus = 'active'; self.licenseDetails = licenseDetails; window.JetDashboardEventBus.$emit( 'addLicenseItem', { 'licenseKey': self.licenseKey, 'licenseStatus': 'active', 'licenseDetails': licenseDetails, } ); } if ( 'deactivate' === actionType ) { window.JetDashboardEventBus.$emit( 'removeLicenseItem', self.licenseKey ); } } if ( 'error' === licenseStatus ) { if ( 'limit_exceeded' === responce.code ) { window.JetDashboardEventBus.$emit( 'showResponcePopup', responce ); } } } } ); } } } ); Vue.component( 'plugin-item-installed', { template: '#jet-dashboard-plugin-item-installed', props: { pluginData: Object }, data: function() { return { actionPlugin: false, actionPluginRequest: null, actionPluginProcessed: false, licenseActionProcessed: false, updatePluginProcessed: false, rollbackPluginProcessed: false, licenseKey: '', ajaxLicenseAction: null, rollbackPopupVisible: false, rollbackVersion: this.pluginData['version'] } }, computed: { deactivateAvaliable: function() { return ( this.pluginData['isInstalled'] && this.pluginData['isActivated'] ) ? true : false; }, activateAvaliable: function() { return ( this.pluginData['isInstalled'] && !this.pluginData['isActivated'] ) ? true : false; }, updateAvaliable: function() { return ( this.pluginData['updateAvaliable'] ) ? true : false; }, updateActionAvaliable: function() { return ( this.pluginData['licenseActivated'] && this.pluginData['updateAvaliable'] ) ? true : false; }, activateLicenseVisible: function() { return ( this.pluginData['licenseControl'] && !this.pluginData['licenseActivated'] ) ? true : false; }, deactivateLicenseVisible: function() { return ( this.pluginData['licenseActivated'] ) ? true : false; }, versionRollbackAvaliable: function() { return ( 0 < this.pluginData['versions'].length ) && this.pluginData['licenseActivated'] && this.deactivateAvaliable ? true : false; }, rollbackButtonVisible: function() { return this.rollbackVersion !== this.pluginData['currentVersion']; }, proccesingState: function() { return this.actionPluginProcessed || this.updatePluginProcessed || this.rollbackPluginProcessed; }, rollbackOptions: function() { return this.pluginData['versions'].map( ( version ) => { let label = version; if ( label === this.pluginData['currentVersion'] ) { label = label + ' - Current Version'; } if ( label === this.pluginData['version'] ) { label = label + ' - Latest Version'; } return { label: label, value: version, } } ); } }, methods: { deactivatePlugin: function() { this.actionPlugin = 'deactivate'; this.pluginAction(); }, activatePlugin: function() { this.actionPlugin = 'activate'; this.pluginAction(); }, updatePlugin: function() { if ( this.updateActionAvaliable ) { this.actionPlugin = 'update'; this.pluginAction(); } else { window.JetDashboardEventBus.$emit( 'showPopupUpdateCheck' ); } }, showPopupActivation: function() { window.JetDashboardEventBus.$emit( 'showPopupActivation', this.pluginData['slug'] ); }, showRollbackPopup: function() { this.rollbackPopupVisible = true; }, rollbackPluginVersion: function() { this.actionPlugin = 'rollback'; this.pluginAction(); }, pluginAction: function() { let self = this; self.actionPluginRequest = jQuery.ajax( { type: 'POST', url: window.JetDashboardConfig.ajaxUrl, dataType: 'json', data: { action: 'jet_dashboard_plugin_action', data: { action: self.actionPlugin, plugin: self.pluginData['slug'], version: self.rollbackVersion, nonce: window.JetDashboardConfig.nonce, } }, beforeSend: function( jqXHR, ajaxSettings ) { if ( null !== self.actionPluginRequest ) { self.actionPluginRequest.abort(); } switch( self.actionPlugin ) { case 'activate': case 'deactivate': self.actionPluginProcessed = true; break; case 'update': self.updatePluginProcessed = true; break; case 'rollback': self.rollbackPluginProcessed = true; break; } }, success: function( responce, textStatus, jqXHR ) { switch( self.actionPlugin ) { case 'activate': case 'deactivate': self.actionPluginProcessed = false; break; case 'update': self.updatePluginProcessed = false; break; case 'rollback': self.rollbackPluginProcessed = false; break; } self.$CXNotice.add( { message: responce.message, type: responce.status, duration: 3000, } ); if ( 'success' === responce.status ) { self.rollbackPopupVisible = false; window.JetDashboardEventBus.$emit( 'updateUserPluginData', { 'slug': self.pluginData['slug'], 'pluginData': responce.data, } ); } } } ); }, deactivateLicense: function() { window.JetDashboardEventBus.$emit( 'showPopupDeactivation', this.pluginData['slug'] ); } } } ); Vue.component( 'plugin-item-avaliable', { template: '#jet-dashboard-plugin-item-avaliable', props: { pluginData: Object, }, data: function() { return { pluginActionRequest: null, pluginActionType: false, pluginActionProcessed: false, } }, computed: { installAvaliable: function() { return !this.pluginData['isInstalled'] ? true : false; }, }, methods: { installPlugin: function() { this.pluginActionType = 'install'; this.pluginAction(); }, pluginAction: function() { let self = this; self.pluginActionRequest = jQuery.ajax( { type: 'POST', url: window.JetDashboardConfig.ajaxUrl, dataType: 'json', data: { action: 'jet_dashboard_plugin_action', data: { action: self.pluginActionType, plugin: self.pluginData['slug'], nonce: window.JetDashboardConfig.nonce, } }, beforeSend: function( jqXHR, ajaxSettings ) { if ( null !== self.pluginActionRequest ) { self.pluginActionRequest.abort(); } self.pluginActionProcessed = true; }, success: function( responce, textStatus, jqXHR ) { self.pluginActionProcessed = false; self.$CXNotice.add( { message: responce.message, type: responce.status, duration: 3000, } ); if ( 'success' === responce.status ) { window.JetDashboardEventBus.$emit( 'updateUserPluginData', { 'slug': self.pluginData['slug'], 'pluginData': responce.data, } ); } } } ); } } } ); Vue.component( 'responce-info', { template: '#jet-dashboard-responce-info', props: { responceData: Object }, data: function() { return {} }, computed: { isResponceEmpty: function() { return 0 === Object.entries( this.responceData ).length ? true : false; }, type: function() { return this.responceData.hasOwnProperty('status') ? this.responceData.status : 'error'; }, code: function() { return this.responceData.hasOwnProperty('code') ? this.responceData.code : 'error'; }, title: function() { return this.responceData.hasOwnProperty('message') ? this.responceData.message : ''; }, responceDetails: function() { return this.responceData.hasOwnProperty('data') ? this.responceData.data : {}; }, activationLimit: function() { if ( ! this.responceDetails.hasOwnProperty('activation_limit') ) { return 1; } return 0 !== this.responceDetails['activation_limit'] ? this.responceDetails['activation_limit'] : 'unlimited'; }, activatedSites: function() { if ( ! this.responceDetails.hasOwnProperty('sites') ) { return []; } return 0 !== this.responceDetails['sites'] ? this.responceDetails['sites'] : []; } } } ); Vue.component( 'license-page', { template: '#jet-dashboard-license-page', props: { subpage: [ String, Boolean ] }, data: function() { return { allJetPlugins: window.JetDashboardConfig.allJetPlugins || {}, licenseList: window.JetDashboardConfig.licenseList || [], licenseManagerVisible: false, licensePopupVisible: false, deactivatePopupVisible: false, updateCheckPopupVisible: false, debugConsoleVisible: false, responcePopupVisible: false, licenseActionProcessed: false, ajaxLicenseAction: null, activatingPluginSlug: false, responceData: {}, proccesingState: false, checkUpdatesAction: null, checkUpdatesProcessed: false }; }, mounted: function() { window.JetDashboardEventBus.$on( 'addLicenseItem', this.addLicense ); window.JetDashboardEventBus.$on( 'removeLicenseItem', this.removeLicense ); window.JetDashboardEventBus.$on( 'updateUserPluginData', this.updateUserPluginData ); window.JetDashboardEventBus.$on( 'showLicenseManager', this.showLicenseManager ); window.JetDashboardEventBus.$on( 'showPopupActivation', this.showPopupActivation ); window.JetDashboardEventBus.$on( 'showPopupDeactivation', this.showPopupDeactivation ); window.JetDashboardEventBus.$on( 'showPopupUpdateCheck', this.showPopupUpdateCheck ); window.JetDashboardEventBus.$on( 'showResponcePopup', this.showResponcePopup ); if ( window.location.href ) { const urlParams = new URLSearchParams( window.location.href ); switch( urlParams.get('subpage') ) { case 'license-manager': this.showLicenseManager(); break; } } }, computed: { newlicenseData: function() { return { 'licenseStatus': 'inactive', 'licenseKey': '', 'licenseDetails': {}, }; }, licencePluginList: function() { let licencePluginList = {}; for ( let licence of this.licenseList ) { let plugins = licence['licenseDetails']['plugins']; for ( let plugin in plugins ) { let pluginData = plugins[ plugin ]; let pluginSlug = pluginData.slug; if ( ! licencePluginList.hasOwnProperty( plugin ) ) { licencePluginList[ plugin ] = pluginData; } } } return licencePluginList; }, installedPluginList: function() { let installedPluginList = {}; for ( let pluginSlug in this.allJetPlugins ) { if ( this.allJetPlugins[ pluginSlug ][ 'isInstalled' ] ) { let pluginData = this.allJetPlugins[ pluginSlug ]; let licenseActivated = this.licencePluginList.hasOwnProperty( pluginSlug ) ? true : false; this.$set( pluginData, 'licenseActivated', licenseActivated ); installedPluginList[ pluginSlug ] = pluginData; } } return installedPluginList; }, installedPluginListVisible: function() { return 0 !== Object.keys( this.installedPluginList ).length ? true : false; }, avaliablePluginList: function() { let avaliablePluginList = {}; for ( let pluginSlug in this.allJetPlugins ) { if ( ( ! this.allJetPlugins[ pluginSlug ]['isInstalled'] ) && this.licencePluginList.hasOwnProperty( pluginSlug ) ) { let pluginData = this.allJetPlugins[ pluginSlug ]; let licenseActivated = this.licencePluginList.hasOwnProperty( pluginSlug ) ? true : false; this.$set( pluginData, 'licenseActivated', licenseActivated ); avaliablePluginList[ pluginSlug ] = pluginData; } } return avaliablePluginList; }, avaliablePluginListVisible: function() { return 0 !== Object.keys( this.avaliablePluginList ).length ? true : false; }, morePluginList: function() { let morePluginList = {}; for ( let pluginSlug in this.allJetPlugins ) { if ( ( ! this.allJetPlugins[ pluginSlug ]['isInstalled'] ) && ( ! this.licencePluginList.hasOwnProperty( pluginSlug ) ) ) { let pluginData = this.allJetPlugins[ pluginSlug ]; let licenseActivated = this.licencePluginList.hasOwnProperty( pluginSlug ) ? true : false; this.$set( pluginData, 'licenseActivated', licenseActivated ); morePluginList[ pluginSlug ] = pluginData; } } return morePluginList; }, morePluginListVisible: function() { return Object.keys( this.morePluginList ).length ? true : false; }, }, methods: { showLicenseManager: function() { this.deactivatePopupVisible = false; this.licensePopupVisible = false; this.licenseManagerVisible = true; }, maybeClearSubpageParam: function() { if ( window.location.href ) { let urlParams = new URLSearchParams( window.location.search ); if ( urlParams.get( 'subpage' ) ) { urlParams.delete( 'subpage' ); let clearedParams = urlParams.toString(); window.open( `${ window.location.origin + window.location.pathname }?${ clearedParams }`, '_self' ); } } }, showPopupActivation: function( slug ) { this.activatingPluginSlug = slug; this.updateCheckPopupVisible = false; this.licensePopupVisible = true; }, showPopupDeactivation: function( slug ) { this.deactivatePopupVisible = true; }, showPopupUpdateCheck: function() { this.updateCheckPopupVisible = true; }, showResponcePopup: function( responceData ) { this.deactivatePopupVisible = false; this.licensePopupVisible = false; this.licenseManagerVisible = false; this.responcePopupVisible = true; this.responceData = responceData; }, addNewLicense: function() { this.licenseManagerVisible = false; this.licensePopupVisible = true; }, addLicense: function( licenseData ) { this.licenseList.push( licenseData ); self.proccesingState = true; setTimeout( function() { window.location.reload(); }, 3000 ); }, removeLicense: function( licenceKey ) { let removingIndex = false; for ( let licenceIndex in this.licenseList ) { let licenseData = this.licenseList[ licenceIndex ]; if ( licenseData['licenseKey'] === licenceKey ) { removingIndex = licenceIndex; break; } } if ( removingIndex ) { this.licenseList.splice( removingIndex, 1 ); } this.licensePopupVisible = false; setTimeout( function() { window.location.reload(); }, 500 ); }, checkPluginsUpdate: function() { var self = this; self.checkUpdatesAction = jQuery.ajax( { type: 'POST', url: window.JetDashboardConfig.ajaxUrl, dataType: 'json', data: { action: 'jet_dashboard_debug_action', data: { action: 'check-plugin-update', nonce: window.JetDashboardConfig.nonce, } }, beforeSend: function( jqXHR, ajaxSettings ) { if ( null !== self.checkUpdatesAction ) { self.checkUpdatesAction.abort(); } self.checkUpdatesProcessed = true; }, success: function( responce, textStatus, jqXHR ) { self.checkUpdatesProcessed = false; self.$CXNotice.add( { message: responce.message, type: responce.status, duration: 3000, } ); self.proccesingState = true; setTimeout( function() { window.location.reload(); }, 1000 ); } } ); }, updateUserPluginData: function( data ) { let slug = data.slug, pluginData = data.pluginData; this.allJetPlugins[ slug ] = Object.assign( {}, this.allJetPlugins[ slug ], pluginData ); this.proccesingState = true; setTimeout( function() { window.location.reload(); }, 1000 ); }, licenseAction: function() { var self = this; self.ajaxLicenseAction = jQuery.ajax( { type: 'POST', url: window.JetDashboardConfig.ajaxUrl, dataType: 'json', data: { action: 'jet_license_action', data: { license: self.licenseKey, action: 'activate', nonce: window.JetDashboardConfig.nonce, } }, beforeSend: function( jqXHR, ajaxSettings ) { if ( null !== self.ajaxLicenseAction ) { self.ajaxLicenseAction.abort(); } self.licenseActionProcessed = true; }, success: function( responce, textStatus, jqXHR ) { self.licenseActionProcessed = false; self.$CXNotice.add( { message: responce.message, type: responce.status, duration: 3000, } ); if ( 'success' === responce.status ) { self.addLicense( { 'licenseKey': self.licenseKey, 'licenseStatus': 'active', 'licenseDetails': responce.data, } ); } } } ); } } } ); })(); modules/jet-dashboard/assets/js/settings-page.js000075500000004161151121477560015767 0ustar00( function () { 'use strict'; Vue.component( 'plugin-settings-toggle', { template: '#jet-dashboard-plugin-settings-toggle', props: { config: [ Object, Boolean ] }, data: function() { return { fold: false, pageModule: this.$root.pageModule || false, subPageModule: this.$root.subPageModule || false, }; }, mounted: function() { let activeSettingsCategory = JetDasboard.getLocalStorageData( 'activeSettingsCategory', false ); if ( this.config.hasOwnProperty( 'moduleList' ) ) { let moduleCheck = this.config.moduleList.some( ( moduleData ) => { return moduleData.page === this.subPageModule; } ); if ( moduleCheck) { this.fold = true; } } }, computed: { linksList: function() { return this.config.moduleList; }, islinksEmpty: function() { return 0 !== this.linksList.length; }, linksVisible: function() { return this.fold && this.islinksEmpty; } }, methods: { toggleHandler: function( moduleSlug ) { this.fold = ! this.fold; }, navigateHandler: function( link, moduleSlug, category ) { window.JetDashboardEventBus.$emit( 'settingsPage/navigateHandler', { 'link': link, 'moduleSlug': moduleSlug, 'category': category, } ); } } } ); Vue.component( 'settings-page', { template: '#jet-dashboard-settings-page', props: { subpage: [ String, Boolean ] }, data: function() { return { categoryList: window.JetDashboardConfig.categoryList || [], proccesingState: false }; }, mounted: function() { window.JetDashboardEventBus.$on( 'settingsPage/navigateHandler', this.navigateHandler ); }, methods: { navigateHandler: function( payload ) { let link = payload.link || false, moduleSlug = payload.moduleSlug || false, category = payload.category || false; if ( ! link || ! moduleSlug ) { return false; } if ( moduleSlug !== this.$root.subPageModule ) { this.proccesingState = true; JetDasboard.setLocalStorageData( 'activeSettingsCategory', category ); window.open( link, '_self' ); } } } } ); } )(); modules/jet-dashboard/assets/js/welcome-page.js000075500000033457151121477560015574 0ustar00( function () { 'use strict'; Vue.component( 'plugin-item-registered', { template: '#jet-dashboard-plugin-item-registered', props: { pluginData: Object, }, data: function() { return { usefulLinksToggle: false } }, computed: { itemClass: function() { return [ 'plugin-item', 'plugin-item--registered', this.dropdownVisible ? 'dropdown-visible' : '' ]; }, usefulLinksEmpty: function() { return 0 === this.pluginData.usefulLinks.length; }, mainLinkItem: function() { if ( ! this.usefulLinksEmpty ) { let firstItem = this.pluginData.usefulLinks[0]; return { 'url': firstItem.url, 'label': firstItem.label, 'target': firstItem.target, }; } return { 'url': this.pluginData.docs, 'label': __( 'Go to docs', 'jet-dashboard' ), 'target': '_blank' }; }, dropdownLinkItems: function() { let usefulLinks = this.pluginData.usefulLinks; return usefulLinks; }, dropdownAvaliable: function() { return 1 < this.dropdownLinkItems.length; }, dropdownVisible: function() { return this.usefulLinksToggle && 1 < this.dropdownLinkItems.length; }, }, methods: { mouseoverHandle: function() { this.usefulLinksToggle = true; }, mouseleaveHandle: function() { this.usefulLinksToggle = false; }, } } ); Vue.component( 'offers-item', { template: '#jet-dashboard-offers-item', props: { config: Object, }, data: function() { return {} }, computed: { itemClass: function() { return [ 'offers-item', ]; }, configDefined: function() { return this.config; }, logo: function() { return this.configDefined && this.config['logo'] ? this.config['logo'] : false; }, name: function() { return this.configDefined && this.config['name'] ? this.config['name'] : false; }, desc: function() { return this.configDefined && this.config['desc'] ? this.config['desc'] : false; }, actionConfig: function() { return this.configDefined && this.config['actionUrl'] && this.config['actionLabel'] ? { url: this.config['actionUrl'], label: this.config['actionLabel'] } : false; }, }, } ); Vue.component( 'extras-item', { template: '#jet-dashboard-extras-item', props: { config: Object, }, data: function() { return { adminUrl: window.JetDashboardConfig.adminUrl || '#', userPlugins: window.JetDashboardConfig.userPlugins || {}, } }, computed: { itemClass: function() { return [ 'extras-item', ]; }, configDefined: function() { return this.config || false; }, logo: function() { return this.configDefined && this.config['logo'] ? this.config['logo'] : false; }, name: function() { return this.configDefined && this.config['name'] ? this.config['name'] : false; }, desc: function() { return this.configDefined && this.config['desc'] ? this.config['desc'] : false; }, actionType: function() { return this.configDefined && this.config['actionType'] ? this.config['actionType'] : 'external'; }, requirementPlugin: function() { return this.configDefined && this.config['requirementPlugin'] ? this.config['requirementPlugin'] : false; }, actionConfig: function() { let actionConfig = false; switch( this.actionType ) { case 'external': actionConfig = this.configDefined && this.config['externalUrl'] && this.config['externalLabel'] ? { url: this.config['externalUrl'], label: this.config['externalLabel'], target: '_blank' } : false; break; case 'dashboard': if ( this.requirementPlugin && this.userPlugins.hasOwnProperty( this.requirementPlugin ) && this.userPlugins[ this.requirementPlugin ].isActivated ) { actionConfig = this.configDefined && this.config['dashboardUrl'] && this.config['dashboardLabel'] ? { url: this.adminUrl + this.config['dashboardUrl'], label: this.config['dashboardLabel'], target: '_self' } : false; } else { actionConfig = this.configDefined && this.config['externalUrl'] && this.config['externalLabel'] ? { url: this.config['externalUrl'], label: this.config['externalLabel'], target: '_blank' } : false; } break; } return actionConfig; }, }, } ); Vue.component( 'welcome-page', { template: '#jet-dashboard-welcome-page', props: { subpage: [ String, Boolean ] }, data: function() { return { proccesingState: false, allJetPlugins: window.JetDashboardConfig.allJetPlugins || {}, licenseList: window.JetDashboardConfig.licenseList || [], avaliableBanners: window.JetDashboardConfig.avaliableBanners || [], offersConfig: window.JetDashboardConfig.offersConfig || [], extrasConfig: window.JetDashboardConfig.extrasConfig || [], generalConfig: window.JetDashboardConfig.generalConfig || [], crocoWizardData: window.JetDashboardConfig.crocoWizardData || false, themeInfo: window.JetDashboardConfig.themeInfo || false, actionPlugin: false, actionPluginRequest: null, actionPluginProcessed: false, }; }, computed: { innerComponentConfig: function() { let innerComponentConfig = this.$root.pageConfig['inner-component'] || false, bannersData = this.$root.getBannerListForArea( innerComponentConfig ); innerComponentConfig = Object.assign( innerComponentConfig, { bannersData: bannersData } ); return innerComponentConfig; }, isLicenseActivated: function() { return 0 !== this.licenseList.length; }, licencePluginList: function() { let licencePluginList = {}; for ( let licence of this.licenseList ) { let plugins = licence['licenseDetails']['plugins']; for ( let plugin in plugins ) { let pluginData = plugins[ plugin ]; let pluginSlug = pluginData.slug; if ( ! licencePluginList.hasOwnProperty( plugin ) ) { licencePluginList[ plugin ] = pluginData; } } } return licencePluginList; }, registeredPluginList: function() { let registeredPluginList = {}; for ( let pluginSlug in this.allJetPlugins ) { if ( this.allJetPlugins[ pluginSlug ][ 'isInstalled' ] && this.allJetPlugins[ pluginSlug ][ 'isActivated' ] ) { registeredPluginList[ pluginSlug ] = this.allJetPlugins[ pluginSlug ]; } } return registeredPluginList; }, avaliablePluginList: function() { let avaliablePluginList = {}; for ( let pluginSlug in this.allJetPlugins ) { if ( ( ! this.allJetPlugins[ pluginSlug ]['isInstalled'] ) && this.licencePluginList.hasOwnProperty( pluginSlug ) ) { let pluginData = this.allJetPlugins[ pluginSlug ]; avaliablePluginList[ pluginSlug ] = pluginData; } } return avaliablePluginList; }, avaliablePluginCount: function() { return Object.keys( this.avaliablePluginList ).length; }, morePluginList: function() { let morePluginList = {}; for ( let pluginSlug in this.allJetPlugins ) { if ( ( ! this.allJetPlugins[ pluginSlug ]['isInstalled'] ) && ( ! this.licencePluginList.hasOwnProperty( pluginSlug ) ) ) { let pluginData = this.allJetPlugins[ pluginSlug ]; morePluginList[ pluginSlug ] = pluginData; } } return morePluginList; }, morePluginsVisible: function() { return 0 !== Object.keys( this.morePluginList ).length; }, updatePluginList: function() { let updatePluginList = {}; for ( let pluginSlug in this.registeredPluginList ) { if ( this.registeredPluginList[ pluginSlug ][ 'updateAvaliable' ] ) { updatePluginList[ pluginSlug ] = this.registeredPluginList[ pluginSlug ]; } } return updatePluginList; }, updatePluginCount: function() { return Object.keys( this.updatePluginList ).length; }, updatesMessage: function() { let updateMessage = sprintf( _n( 'You can update %s plugin', 'You can update %s plugins', this.updatePluginCount, 'jet-dashboard' ), this.updatePluginCount ), noUpdatesMessage = __( 'All plugins updated', 'jet-dashboard' ), message = ( 0 === this.updatePluginCount ) ? noUpdatesMessage : updateMessage; if ( ! this.isLicenseActivated ) { message = __( 'Activate license to update your JetPlugins', 'jet-dashboard' ); } return message; }, avaliableToInstallMessage: function() { let avaliableMessage = sprintf( _n( 'You can install %s more Plugin with your licence', 'You can install %s more Plugins with your licence', this.avaliablePluginCount, 'jet-dashboard' ), this.avaliablePluginCount ), noAvaliableMessage = __( 'All available plugins are already installed', 'jet-dashboard' ); return 0 === this.avaliablePluginCount ? noAvaliableMessage : avaliableMessage; }, avaliableOffers: function() { return this.offersConfig.offerList || []; }, isWizardInstalled: function() { return this.crocoWizardData.isInstalled || false; }, isWizardActivated: function() { return this.crocoWizardData.isActivated || false; }, wizardSectionsVisible: function() { let productType = this.$root.productType, visibleMap = [ 'plugin-set', 'all-inclusive', 'lifetime', ]; return ( !this.isWizardInstalled || !this.isWizardActivated ) && visibleMap.includes( productType ); }, wizardSectionsTitle: function() { let productType = this.$root.productType, title = __( 'Try quickstart installation', 'jet-dashboard' ); switch( productType ) { case 'lifetime': case 'all-inclusive': title = __( 'Unpack Free All-inclusive items', 'jet-dashboard' ); break; case 'default': title = __( 'Try quickstart installation', 'jet-dashboard' ); break; } return title; }, offersVisible: function() { return 0 !== this.avaliableOffers.length; }, avaliableExtras: function() { return this.extrasConfig.extraList || []; }, extrasVisible: function() { let productType = this.$root.productType, visibleMap = [ 'all-inclusive', 'lifetime', ]; return 0 !== this.avaliableExtras.length && visibleMap.includes( productType ) && ! this.wizardSectionsVisible; }, getMoreBannerVisible: function() { let productType = this.$root.productType, visibleMap = [ 'not-activated', 'theme-plugin-bundle', 'single-plugin', ]; return visibleMap.includes( productType ); }, getMoreBannerLink: function() { let baseUrl = this.generalConfig.pricingPageUrl || 'https://crocoblock.com/pricing/', licenseType = `${ this.$root.licenseType }-license` || 'not-activated-license', themeAuthor = this.$root.themeInfo.authorSlug || 'unknow-author', utmString = window.JetDasboard.getUtmParamsString( { utm_source: `dashboard/${ this.$root.pageModule }`, utm_medium: `${ licenseType }/${ themeAuthor }`, utm_campaign: 'upsale-crocoblock', utm_content: 'banner-60-percent' } ); if ( utmString ) { return `${ baseUrl }?${ utmString }`; } return baseUrl; }, isLifetime: function() { let productType = this.$root.productType; return 'lifetime' === productType ? true : false; } }, methods: { getLicenseExpireMessage: function( rawDate = '' ) { let convertedDate = this.convertDateFormat( rawDate ), expireCases = [ '0000-00-00 00:00:00', '1000-01-01 00:00:00', 'lifetime' ]; if ( expireCases.includes( rawDate ) ) { return __( 'Lifetime', 'jet-dashboard' ); } return sprintf( __( 'Licence expires %s', 'jet-dashboard' ), convertedDate ); }, convertDateFormat: function( _date = '' ) { let lifetimeCases = [ '0000-00-00 00:00:00', '1000-01-01 00:00:00', 'lifetime' ], rawDate = lifetimeCases.includes( _date ) ? '1000-01-01 00:00:00' : _date, timeStamp = Date.parse( rawDate ), dateTimeFormat = new Intl.DateTimeFormat( 'en', { year: 'numeric', month: 'short', day: '2-digit' } ), [ { value: month },,{ value: day },,{ value: year } ] = dateTimeFormat.formatToParts( timeStamp ), convertedDate = `${ month }. ${ day }, ${ year }`; return convertedDate; }, wizardActionHandle: function() { let self = this, action = false; if ( ! this.isWizardInstalled ) { action = 'install'; } if ( this.isWizardInstalled && ! this.isWizardActivated ) { action = 'activate'; } self.actionPluginRequest = jQuery.ajax( { type: 'POST', url: window.JetDashboardConfig.ajaxUrl, dataType: 'json', data: { action: 'jet_dashboard_wizard_plugin_action', data: { plugin: 'crocoblock-wizard/crocoblock-wizard.php', action: action, nonce: window.JetDashboardConfig.nonce, } }, beforeSend: function( jqXHR, ajaxSettings ) { if ( null !== self.actionPluginRequest ) { self.actionPluginRequest.abort(); } self.actionPluginProcessed = true; }, success: function( responce, textStatus, jqXHR ) { self.actionPluginProcessed = false; self.$CXNotice.add( { message: responce.message, type: responce.status, duration: 3000, } ); if ( 'success' === responce.status ) { self.proccesingState = true; setTimeout( function() { window.location.reload(); }, 1000 ); //self.crocoWizardData = responce.data; } } } ); }, pluginAction: function( plugin_file, action ) { }, navigateToLicensePage: function() { window.location.href = window.JetDashboardConfig.licensePageUrl; }, navigateToLicenseManager: function() { window.location.href = window.JetDashboardConfig.licenseManagerUrl; } } } ); } )(); modules/jet-dashboard/assets/scss/mixins/_direction.scss000075500000005017151121477560017542 0ustar00// // Variables // $start: left; $end: right; @if ($direction == rtl) { $start: right; $end: left; } // // Internal Mixins // @mixin _dimension($dimension, $top, $right, $bottom, $left){ @if ($direction == rtl) { #{$dimension}: $top $left $bottom $right; } @else { #{$dimension}: $top $right $bottom $left; } } @mixin _dimension_side($dimension, $side, $value) { @if ($direction == rtl and $side == start) or ($direction == ltr and $side == end) { #{$dimension}-right: $value; } @else { #{$dimension}-left: $value; } } @mixin _dimension_side_property($dimension, $side, $property, $value) { @if ($direction == rtl and $side == start) or ($direction == ltr and $side == end) { #{$dimension}-right-#{$property}: $value; } @else { #{$dimension}-left-#{$property}: $value; } } // // Mixins // @mixin start($value) { @if $direction == rtl { right: $value; } @else { left: $value; } } @mixin end($value) { @if $direction == rtl { left: $value; } @else { right: $value; } } // Padding Mixins @mixin padding($top, $right, $bottom, $left) { @include _dimension(padding, $top, $right, $bottom, $left); } @mixin padding-start($value) { @include _dimension_side(padding, start, $value); } @mixin padding-end($value) { @include _dimension_side(padding, end, $value); } // Margin Mixins @mixin margin($top, $right, $bottom, $left) { @include _dimension(margin, $top, $right, $bottom, $left); } @mixin margin-start($value) { @include _dimension_side(margin, start, $value); } @mixin margin-end($value) { @include _dimension_side(margin, end, $value); } // Border Mixins @mixin border-width($top, $right, $bottom, $left) { @include _dimension(border-width, $top, $right, $bottom, $left); } @mixin border-start($value) { @include _dimension_side(border, start, $value); } @mixin border-end($value) { @include _dimension_side(border, end, $value); } @mixin border-start-property($property, $value){ @include _dimension_side_property(border, start, $property, $value); } @mixin border-end-property($property, $value){ @include _dimension_side_property(border, end, $property, $value); } // Box-Shadow Mixins @mixin direction-box-shadow($x, $extra-values) { @if $direction == rtl { $x: -$x; } box-shadow: $x $extra-values; } // // Functions // @function getValueByDirection($value-for-left, $value-for-right) { @if ($direction == rtl) { @return $value-for-right; } @return $value-for-left; } @function getInverseDirection() { @if ($direction == rtl) { @return ltr; } @return rtl; } modules/jet-dashboard/assets/scss/modules/upsale-page.scss000075500000002450151121477560017765 0ustar00.jet-dashboard-upsale-page { &__inner { display: flex; justify-content: flex-end; align-items: stretch; background-image: linear-gradient(66.18deg, #E9EFFD 22.28%, #FFFFFF 100%); height: 100vh; min-height: 400px; gap: 40px; } &__extra-image { width: 50%; background-image: url( 'https://api.crocoblock.com/downloads/images/jet-dashboard/upsale-bg.png' ); background-position: 50%; background-repeat: no-repeat; background-size: contain; } &__content { display: flex; flex-direction: column; justify-content: center; align-items: flex-start; width: 50%; font-size: 18px; line-height: 24px; @media (max-width: 1140px) { font-size: 14px; line-height: 20px; } } &__features { display: flex; justify-content: flex-start; align-items: center; flex-wrap: wrap; gap: 30px; margin-bottom: 40px; @media (max-width: 1140px) { gap: 15px; } } &__feature { display: flex; justify-content: flex-start; align-items: center; gap: 10px; span { color: #7B7E81; } } &__title { font-weight: 500; font-size: 40px; line-height: 48px; color: #23282D; margin-bottom: 20px; @media (max-width: 1140px) { font-size: 32px; } } &__desc { font-weight: normal; color: #7B7E81; max-width: 460px; margin-bottom: 40px; } } modules/jet-dashboard/assets/scss/modules/popups.scss000075500000007653151121477560017122 0ustar00.jet-dashboard-page { .cx-vui-popup { .cx-vui-popup__header { text-align: center; margin-bottom: 30px; } .cx-vui-popup__header-label { font-weight: 500; font-size: 24px; line-height: 36px; text-align: center; color: #23282D; } .cx-vui-popup__content { } &.license-manager-popup { .cx-vui-popup__body { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; overflow: hidden; max-height: calc( 100% - 100px ); } .cx-vui-popup__header { padding-bottom: 15px; border-bottom: 1px solid #DCDCDD; .cx-vui-popup__header-inner { display: flex; justify-content: space-between; align-items: center; } } .cx-vui-popup__content { flex: 1 1 auto; overflow-y: auto; .license-manager { width: 100%; max-width: 1260px; } } } &.license-activation-popup { .cx-vui-popup__header { text-align: center; } .cx-vui-popup__body { } .popup-licence-control { width: 100%; display: flex; justify-content: flex-start; align-items: flex-start; flex-wrap: wrap; margin-top: 10px; p { width: 100%; } .popup-licence__key { flex: 1 1 auto; input { border-radius: getValueByDirection(4px 0 0 4px, 0 4px 4px 0); } } .popup-licence__action-button { border-radius: getValueByDirection(0 4px 4px 0, 4px 0 0 4px); box-shadow: none; } } } &.license-deactivation-popup { .cx-vui-popup__content { text-align: center; .show-license-manager { margin-top: 20px; } } } &.update-check-popup { .cx-vui-popup__content { text-align: center; svg { margin-bottom: 20px; } p { text-align: center; line-height: 30px; span { font-size: 20px; color: #23282d; display: block; } } .cx-vui-button { margin-top: 20px; } } } &.rollback-popup { p { text-align: center; line-height: 30px; i { display: block; color: #D6336C; } } .cx-vui-button { margin-top: 10px; width: 100%; } } &.responce-data-popup { .responce-data-popup__inner { &.responce-type-error { .responce-data-popup__title { color: #C92C2C; } } &.responce-type-success { .responce-data-popup__title { color: #46B450; } } .responce-data-popup__header { padding-bottom: 15px; border-bottom: 1px solid #DCDCDD; margin-bottom: 30px; } .responce-data-popup__title { font-weight: 500; font-size: 24px; line-height: 36px; color: #23282D; } p { &:last-child { padding-bottom: 0; } .activation-limit { display: inline-block; width: 20px; height: 20px; text-align: center; justify-content: center; align-items: center; border-radius: 50%; color: white; background-color: #007CBA; } } .responce-data-popup__activated-sites { margin-bottom: 20px; p { padding-bottom: 5px; } .site-list { display: flex; justify-content: flex-start; align-items: flex-start; flex-wrap: wrap; max-height: 100px; overflow-y: auto; .site-item { @include margin(0, 0, 0, 10px); } } } } } &.video-guide-popup { .cx-vui-popup__body { padding: 0; border-radius: 0; background-color: #000; iframe { width: 100%; min-height: 450px; } } .cx-vui-popup__content { > div { line-height: 0; } } } &.service-actions-popup { .service-actions-popup__form { display: flex; justify-content: flex-start; align-items: center; > .cx-vui-component-raw { flex: 1 1 auto; select { max-width: 100%; } } .cx-vui-button { @include margin-start(10px); } } } } } modules/jet-dashboard/assets/scss/modules/banners.scss000075500000015206151121477560017215 0ustar00.jet-dashboard-page { &__banners { display: flex; justify-content: flex-start; align-items: stretch; flex-wrap: wrap; gap: 20px; } &__banner { display: flex; flex-direction: column; align-items: stretch; gap: 20px; border-radius: 4px; color: #23282D; overflow: hidden; min-width: 300px; position: relative; background-size: cover; background-position: 50% 50%; box-shadow: 0px 2px 6px rgba(35, 40, 45, 0.07); .banner-frame { display: flex; flex-direction: column; align-items: stretch; border-radius: 4px; } .banner-inner { height: 100%; box-sizing: border-box; border-radius: 4px; } .banner-label { font-weight: 500; font-size: 14px; line-height: 18px; text-transform: uppercase; margin-bottom: 38px; } .banner-title { font-size: 20px; line-height: 28px; margin-bottom: 10px; } .banner-content { font-size: 14px; line-height: 18px; margin-bottom: 20px; } .banner-buttons { display: flex; justify-content: flex-start; align-items: flex-end; flex: 1 1 auto; .cx-vui-button { margin-right: 10px; &:last-child { margin-right: 0; } } } &.col-4-4 { width: 100%; } &.col-4-3 { width: 75%; } &.col-4-2 { width: 50%; } &.col-4-1 { width: 25%; } &.premade-preset { .banner-inner { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; padding: 20px 30px 30px 30px; } } &.light-1-preset { background-color: white; .banner-label { color: #BB97FF; } .banner-content { color: #7B7E81; } } &.light-2-preset { background-image: url( '../images/banner-light-bg-1.png' ); background-color: #F6F9FE; background-size: 100% 98px; background-position: 50% 0; background-repeat: no-repeat; .banner-frame { background-color: white; margin: 10px; } .banner-label { color: #26E8A8; } .banner-content { color: #7B7E81; } } &.light-3-preset { background-color: white; &:before { display: block; position: absolute; width: 152px; height: 152px; top: -50px; right: -30px; background-color: #F6F9FE; content:''; border-radius: 50%; z-index: 1; } &:after { display: block; position: absolute; width: 100%; height: 100%; top: 0; left: 0; background-image: url( '../images/youtube-icons.svg' ); background-size: 120px; background-position: getValueByDirection( calc(100% - 5px) -20px, calc(0% - 5px) -20px ); background-repeat: no-repeat; content:''; z-index: 2; } .banner-inner { position: relative; z-index: 3; } .banner-label { color: #26E8A8; } .banner-content { color: #7B7E81; } } &.light-4-preset { background-color: white; &:before { display: block; position: absolute; width: 152px; height: 152px; top: -50px; right: -30px; background-color: #F6F9FE; border-radius: 50%; content:''; z-index: 1; } &:after { display: block; position: absolute; width: 100%; height: 100%; top: 0; left: 0; background-image: url( '../images/elementor-wordpress-icon.svg' ); background-size: 120px; background-position: getValueByDirection( calc(100% - 10px) -55px, calc(0% - 10px) -55px ); background-repeat: no-repeat; content:''; z-index: 2; } .banner-inner { position: relative; z-index: 3; } .banner-label { color: #26E8A8; } .banner-content { color: #7B7E81; } } &.dark-1-preset { background-color: #0F1419; .banner-label { color: #26E8A8; } .banner-title { color: white; } .banner-content { color: white; } .cx-vui-button { color: #4EFEC3; box-shadow: inset 0 0 0 1px #4EFEC3; } } &.dark-2-preset { background-color: #0F1419; &:before { display: block; position: absolute; width: 100%; height: 100%; top: 0; left: 0; background: radial-gradient(120px 120px at 2.82% -9.25%, rgba(40,112,93,0.81) 0%, rgba(40,112,93,0) 100%); content:''; z-index: 1; } &:after { display: block; position: absolute; width: 100%; height: 100%; top: 0; left: 0; background: radial-gradient(190px 190px at 94.51% 127.17%, #5B77E7 0%, rgba(91,119,231,0) 100%); content:''; z-index: 2; } .banner-inner { position: relative; z-index: 3; } .banner-label { color: #26E8A8; } .banner-title { color: white; } .banner-content { color: white; } .cx-vui-button { color: #4EFEC3; box-shadow: inset 0 0 0 1px #4EFEC3; } } &.dark-3-preset { background-color: #0F1419; &:before { display: block; position: absolute; width: 100%; height: 100%; top: 0; left: 0; background: radial-gradient(190px 190px at 91% -24.9%, rgba(91,119,231,0.88) 0%, rgba(91,119,231,0) 100%); content:''; z-index: 1; } &:after { display: block; position: absolute; width: 100%; height: 100%; top: 0; left: 0; background-image: url( '../images/youtube-icons.svg' ); background-size: 120px; background-position: getValueByDirection( calc(100% - 5px) -20px, calc(0% - 5px) -20px ); background-repeat: no-repeat; content:''; z-index: 2; } .banner-inner { position: relative; z-index: 3; } .banner-label { color: #26E8A8; } .banner-title { color: white; } .banner-content { color: white; } .cx-vui-button { color: #4EFEC3; box-shadow: inset 0 0 0 1px #4EFEC3; } } &.dark-4-preset { background-color: #0F1419; &:before { display: block; position: absolute; width: 100%; height: 100%; top: 0; left: 0; background: radial-gradient(190px 190px at 91% -24.9%, rgba(91,119,231,0.88) 0%, rgba(91,119,231,0) 100%); content:''; z-index: 1; } &:after { display: block; position: absolute; width: 100%; height: 100%; top: 0; left: 0; background-image: url( '../images/elementor-wordpress-icon.svg' ); background-size: 120px; background-position: getValueByDirection( calc(100% - 20px) -60px, calc(0% - 20px) -60px ); background-repeat: no-repeat; content:''; z-index: 2; } .banner-inner { position: relative; z-index: 3; } .banner-label { color: #26E8A8; } .banner-title { color: white; } .banner-content { color: white; } .cx-vui-button { color: #4EFEC3; box-shadow: inset 0 0 0 1px #4EFEC3; } } &.custom-preset { } } } modules/jet-dashboard/assets/scss/modules/alerts.scss000075500000005643151121477560017063 0ustar00.jet-dashboard-page { .cx-vui-alert { width: 100%; box-sizing: border-box; padding: 10px 20px; margin-top: 20px; background-color: #F4F4F5; border-radius: 4px; display: flex; justify-content: flex-start; align-items: flex-start; .cx-vui-alert__icon { margin-top: 3px; @include margin-end(10px); } .cx-vui-alert__message { flex: 1 1 auto; color: #7B7E81; font-size: 13px; } &.info-type { background-color: #EDF6FA; .cx-vui-alert__icon { svg { fill: #007CBA; } } .cx-vui-alert__message { color: #007CBA; } } &.success-type { background-color: #E9F6EA; .cx-vui-alert__icon { svg { fill: #46B450; } } .cx-vui-alert__message { color: #46B450; } } &.error-type { background-color: #FBF0F0; .cx-vui-alert__icon { svg { fill: #C92C2C; } } .cx-vui-alert__message { color: #C92C2C; } } } &__alerts { width: 100%; display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; } &__alert { position: relative; display: flex; justify-content: flex-start; align-items: center; gap: 20px; background-color: #FFFFFF; box-shadow: 0px 2px 6px rgba(35, 40, 45, 0.07); padding: 20px 30px; margin-top: 10px; &:first-child { margin-top: 0; } &.info-type { .alert-type-line { background: #3DDDC1; background: linear-gradient(0deg, #3DDDC1 0%, #5099E6 100%), #5099E6; } } &.success-type { .alert-type-line { background: #40D825; background: linear-gradient(180deg, #40D825 0%, #B1EF3A 100%); } } &.danger-type { .alert-type-line { background: #FEDB22; background: linear-gradient(0deg, #FEDB22 0%, #FFA901 100%), #5099E6; } } &.error-type { .alert-type-line { background: #FF8B8B; background: linear-gradient(0deg, #FF8B8B 0%, #F5435A 100%), #5099E6; } } .alert-type-line { display: block; position: absolute; width: 4px; height: 100%; top: 0; left: 0; background: linear-gradient(0deg, #5B77E7 0%, #49B5D2 53.65%, #26E8A8 100%); } .alert-close { display: flex; justify-content: center; align-items: center; position: absolute; top: 7px; right: 7px; cursor: pointer; } .alert-icon { position: relative; display: flex; justify-content: center; align-items: center; max-width: 80px; width: 48px; svg { width: 100%; height: auto; } } .alert-content { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; flex: 1 1 auto; gap: 10px; } .alert-title { color: #23282D; font-size: 14px; line-height: 18px; font-weight: 500; } .alert-message { color: #7B7E81; font-size: 13px; line-height: 16px; } .alert-buttons { .cx-vui-button { margin-right: 10px; &:last-child { margin-right: 0; } } } } } modules/jet-dashboard/assets/scss/modules/welcome-page.scss000075500000007543151121477560020137 0ustar00.jet-dashboard-welcome-page { display: flex; justify-content: flex-start; align-items: flex-start; gap: 20px; &__sidebar { position: relative; width: 300px; } &__content { flex: 1 1 600px; } &__updates { .jet-dashboard-page-badge { position: absolute; top: 0; right: 0; z-index: 1; } .jet-dashboard-page__panel-content { } } &__licenses { .jet-dashboard-page__panel-content { } .licence-list { display: flex; flex-direction: column; .licence-item { display: flex; justify-content: flex-start; align-items: flex-start; margin-bottom: 12px; &:last-child { margin-bottom: 0; } .licence-item-icon { display: flex; justify-content: center; align-items: center; @include margin-end(10px); } .licence-item-info { display: flex; flex-direction: column; } .licence-item-name { font-weight: 500; font-size: 12px; line-height: 16px; color: #7B7E81; } .licence-item-expire { } .lifetime { color: #46B450; } .expire-date { color: #D6336C; } } } } &__avaliable-plugins { div.cx-vui-subtitle { margin-bottom: 0; } } &__wizard-section { div.cx-vui-subtitle { margin-bottom: 0; .cx-vui-subtitle__label { display: flex; justify-content: flex-start; align-items: center; svg { @include margin-end(20px); } } } } &__more-plugins { .plugin-list--more-plugins { div.plugin-item { width: calc(33.3333% - 20px); } } } &__get-more-banner { display: flex; justify-content: flex-end; background-color: #EDF6FF; background-image: url( 'https://api.crocoblock.com/downloads/images/jet-dashboard/get-more-banner-bg.svg' ); background-position: 0 50%; background-repeat: no-repeat; background-size: contain; .get-more-banner-content { width: calc(50% - 10px); .desc { font-size: 14px; line-height: 18px; color: #23282D; } .title { font-size: 20px; line-height: 28px; font-weight: 600; color: #23282D; margin: 0 0 15px 0; } .cx-vui-button { color: #007CBA; box-shadow: inset 0 0 0 1px #007CBA; } } } .extras-list { display: flex; justify-content: flex-start; align-items: stretch; flex-wrap: wrap; gap: 20px; .extras-item { display: flex; justify-content: flex-start; align-items: stretch; width: calc(50% - 20px); min-height: 67px; border: 1px solid #E0E0E0; box-sizing: border-box; border-radius: 4px; overflow: hidden; &__logo { display: flex; justify-content: center; align-items: center; width: 55px; max-width: 55px; background-color: #F3F5FC; } &__details { flex: 1 1 auto; display: flex; flex-direction: column; justify-content: center; align-items: flex-start; padding: 10px 10px 12px 10px; } &__name { font-weight: 500; font-size: 14px; line-height: 18px; } &__desc { margin: 5px 0 0 0; } .cx-vui-button { margin-top: 10px; } } } .offers-list { display: flex; justify-content: flex-start; align-items: stretch; flex-wrap: wrap; gap: 20px; margin-bottom: -30px; .offers-item { display: flex; justify-content: flex-start; align-items: stretch; width: calc(50% - 20px); margin-bottom: 30px; box-sizing: border-box; &__logo { display: flex; justify-content: center; align-items: flex-start; width: 60px; max-width: 60px; @include margin-end(20px); } &__details { flex: 1 1 auto; display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; } &__name { font-weight: 500; font-size: 14px; line-height: 18px; } &__desc { margin: 5px 0 0 0; } .cx-vui-button { margin-top: 5px; } } } } modules/jet-dashboard/assets/scss/modules/buttons.scss000075500000002557151121477560017270 0ustar00.jet-dashboard-page { .cx-vui-button { font-size: 14px; font-weight: 400; background-color: transparent; &:hover { background-color: transparent; } .cx-vui-button__content { > span { display: flex; justify-content: flex-start; align-items: center; } .button-icon { @include margin-end(5px); } .button-dropdown-icon { display: flex; justify-content: center; align-items: center; @include margin-start(10px); svg { margin: 0; } } } &.cx-vui-button--style-default { color: #007cba; box-shadow: inset 0 0 0 1px #E0E0E0; &:hover { background-color: rgba(224, 224, 224, 0.3); } .cx-vui-button__loader { svg, path { fill: #007cba; } } .button-icon, path { fill: #007cba; } } &.cx-vui-button--style-accent { color: #007cba; box-shadow: inset 0 0 0 1px #007cba; &:hover { background-color: rgba(0, 124, 186, 0.07); } .cx-vui-button__loader { svg, path { fill: #007cba; } } .button-icon, path { fill: #007cba; } } &.cx-vui-button--style-danger { color: #D6336C; box-shadow: inset 0 0 0 1px #D6336C; &:hover { background-color: rgba(214, 51, 108, 0.07); } .cx-vui-button__loader { svg, path { fill: #D6336C; } } .button-icon, path { fill: #D6336C; } } } } modules/jet-dashboard/assets/scss/modules/license-page.scss000075500000006075151121477560020125 0ustar00.jet-dashboard-license-page { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; .avaliable-plugins { margin-top: 20px; } .more-plugins { margin-top: 20px; } .add-new-license { display: flex; .cx-vui-button__content { > span { display: flex; } .dashicons { font-size: 16px; @include margin(0, 4px, 0, -5px); } } } .license-manager { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; .license-list { width: 100%; display: flex; justify-content: flex-start; align-items: stretch; flex-wrap: wrap; .license-item { margin: 10px; } } } .license-item { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; width: 400px; &__label { font-weight: 500; font-size: 24px; line-height: 36px; text-align: center; color: #23282D; margin-bottom: 40px; } &__control { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; .license-item__activation-message { text-align: center; margin-bottom: 30px; } .license-item__key { } .license-item__action-button { margin-top: 10px; } } &__details {} &__deactivation { align-self: flex-start; } &.license-activated { .license-status { color: #46B450; } .license-item__deactivation { color: #D6336C; box-shadow: inset 0 0 0 1px #D6336C; } } } .license-details { margin: 30px 0; &__label { color: #23282D; font-size: 15px; font-weight: 700; margin-bottom: 20px; } &__fields { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; } &__field { display: flex; justify-content: flex-start; align-items: stretch; margin-bottom: 10px; &:last-child { margin-bottom: 0; } .label { min-width: 110px; font-weight: 700; color: #23282D; } .status-label { text-transform: capitalize; color: #46B450; } .license-type { display: flex; justify-content: center; align-items: center; svg { width: 110px; height: auto; } } .included-plugin-list { display: flex; justify-content: flex-start; align-items: flex-start; flex-wrap: wrap; flex: 1 1 auto; .included-plugin { width: 50%; margin-bottom: 10px; display: flex; justify-content: flex-start; align-items: center; svg { @include margin-end(5px); } } } &.license-status { color: #C92C2C; font-weight: 700; text-transform: capitalize; } &.license-type { text-transform: capitalize; } &.license-plugins { flex: 1 1 auto; } } &__actions { display: flex; justify-content: space-between; align-items: center; margin-top: 20px; .show-license-manager { font-size: 13px; } .cx-vui-button { @include margin-start(5px); &:first-child { @include margin-start(0); } } } } } modules/jet-dashboard/assets/scss/modules/settings-page.scss000075500000003412151121477560020333 0ustar00.jet-dashboard-settings-page { &__inner { &.jet-dashboard-page__panel { display: flex; justify-content: flex-start; align-items: flex-start; padding-left: 0; } } .subpage-category-list { min-width: 228px; display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; @include margin-end(20px); } .subpage-content { flex: 1 1 auto; } .plugin-settings-toggle { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; width: 228px; border-top: 1px solid #DCDCDD; &:first-child { border-top: none; } &__header { display: flex; justify-content: space-between; align-items: center; padding: 15px 20px 15px 30px; box-sizing: border-box; cursor: pointer; } &__header-label { font-weight: 500; font-size: 14px; line-height: 18px; color: #23282D; } &__header-marker { width: 20px; height: 20px; display: flex; justify-content: center; align-items: center; } &__links { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; } &__link { border-style: solid; border-color: white; border-width: getValueByDirection( 0 0 0 2px, 0 2px 0 0 ); &:hover { background-color: #f5f8fd; span { color: #007CBA; } } &.active { border-color: #007CBA; background-color: #E9F0FD; span { color: #007CBA; } } span { display: block; font-size: 14px; line-height: 18px; color: #23282D; padding: getValueByDirection( 11px 0 11px 52px, 11px 52px 11px 0 ); text-decoration: none; box-sizing: border-box; cursor: pointer; &:focus { outline: none; box-shadow: none; } } } } } modules/jet-dashboard/assets/scss/wp-admin-styles.scss000075500000004767151121477560017164 0ustar00body { --jet-button-padding-y: 7px; --jet-button-padding-x: 14px; --jet-button-font-size: 13px; --jet-button-font-weight: 500; --jet-button-line-height: 19px; --jet-button-border-radius: 3px; } .jet-notice { display: flex; justify-content: flex-start; border: 1px solid #c3c4c7; border-left-width: 0; padding: 16px; gap: 16px; //box-shadow: 0px 2px 6px rgba(35,40,45,.07); &--info { .jet-notice__type-line { background: #3DDDC1; background: linear-gradient(0deg, #3DDDC1 0%, #5099E6 100%), #5099E6; } } &--success { .jet-notice__type-line { background: #40D825; background: linear-gradient(180deg, #40D825 0%, #B1EF3A 100%); } } &--warning { .jet-notice__type-line { background: #FEDB22; background: linear-gradient(0deg, #FEDB22 0%, #FFA901 100%), #5099E6; } } &--error { .jet-notice__type-line { background: #FF8B8B; background: linear-gradient(0deg, #FF8B8B 0%, #F5435A 100%), #5099E6; } } &__type-line { display: block; position: absolute; width: 4px; height: calc(100% + 2px); top: -1px; left: 0; } &__icon-wrapper { width: 24px; svg { width: 100%; height: auto; } } &__content { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; flex: 1 1 auto; h3 { margin: 0; } p { line-height: 1.2; padding: 0; margin: 8px 0 0 0; } } &__title { font-size: 1.0625rem; line-height: 1.2; } &__message { color: #7B7E81; font-size: 13px; line-height: 16px; } &__actions { display: flex; justify-content: flex-start; align-items: center; gap: 16px; margin-top: 16px; } .notice-dismiss { } } .jet-button { display: inline-block; font-weight: var(--jet-button-font-weight); text-align: center; text-decoration: none; border: 1px solid #DCDCDD; background: transparent; color: #7B7E81; box-shadow: none; padding: var(--jet-button-padding-y) var(--jet-button-padding-x); font-size: var(--jet-button-font-size); line-height: var(--jet-button-line-height); border-radius: var(--jet-button-border-radius); white-space: nowrap; vertical-align: middle; -webkit-user-select: none; -moz-user-select: none; user-select: none; transition: background-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; &:hover { color: #7B7E81; background-color: #f3f5f6; } &--primary { color: white; border-color: #007CBA; background-color: #007CBA; } &--accent { color: #007CBA; border-color: #007CBA; &:hover { color: #57595b; } } }modules/jet-dashboard/assets/scss/jet-dashboard-admin.scss000075500000037340151121477560017715 0ustar00$direction: ltr !default; @import "mixins/direction"; @import "modules/buttons"; @import "modules/banners"; @import "modules/alerts"; @import "modules/popups"; @import "modules/welcome-page"; @import "modules/settings-page"; @import "modules/license-page"; @import "modules/upsale-page"; @if (rtl == $direction) { .cx-vui-notices .cx-vui-notice { &__icon { margin: 0 0 0 15px; } &__close { margin: -2px 10px 0 0; } } } .jet-dashboard-page { font-family: Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif; margin: 20px 16px 0 15px; visibility: hidden; &.inited { visibility: visible; } .proccesing-state { opacity: 0.5; pointer-events: none; } &__body { position: relative; display: flex; flex-wrap: wrap; justify-content: flex-start; align-items: stretch; gap: 20px; @media (max-width: 1140px) { flex-wrap: wrap; } } &__notice-list { width: 100%; margin-bottom: 20px; } &__before-content { width: 100%; } &__content { flex: 1 1 auto; order: 1; max-width: calc(100% - 320px); @media (max-width: 1140px) { max-width: 100%; order: 2; } } &__before-sidebar { width: 100%; margin-bottom: 20px; } &__sidebar-container { position: relative; width: 300px; order: 2; @media (max-width: 1140px) { display: flex; order: 1; width: 100%; > div { margin: 0 20px 0 0; &:last-child { margin-right: 0; } } } } &__sidebar { display: flex; flex-direction: column; align-items: stretch; gap: 20px; @media (max-width: 1140px) { width: 100%; flex-direction: row; } } &__after-sidebar { width: 100%; margin-top: 20px; } &__header { position: relative; padding: 20px 30px; background: radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(38, 232, 168, 0.8) 17.85%, rgba(38, 232, 168, 0) 100%), radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(91, 119, 231, 0.9) 0%, rgba(91, 119, 231, 0) 100%), radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(0, 132, 68, 0.8) 47.64%, rgba(0, 132, 68, 0) 100%), #23282D; margin-bottom: 20px; border-radius: 4px; overflow: hidden; box-shadow: 0px 2px 6px rgba(35,40,45,0.07); .header-inner {} .header-title { color: white; font-size: 24px; line-height: 32px; font-weight: 500; margin: 0; } .header-desc { color: white; font-size: 15px; line-height: 22px; font-weight: normal; margin-top: 5px; color: #26E8A8; } .header-icon-link { position: absolute; top: 19px; right: 21px; width: 56px; height: 56px; border-radius: 50%; background: linear-gradient( 180deg, #E52D27 0%, #BF171D 100.03% ); a { display: flex; justify-content: center; align-items: center; width: 56px; height: 56px; line-height: 0; } svg { transition: transform .25s ease; } &:hover { svg { transform: scale(1.2); } } } &.lifetime-product-type { background: radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(254, 219, 34, 0.8) 17.85%, rgba(254, 219, 34, 0) 100%), radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(195, 109, 0, 0.9) 0%, rgba(195, 109, 0, 0) 100%), radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(195, 109, 0, 0.8) 47.64%, rgba(195, 109, 0, 0) 100%), #23282D; .header-desc { color: #FEDB22; } } &.all-inclusive-product-type { background: radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(111, 139, 251, 0.8) 17.85%, rgba(111, 139, 251, 0) 100%), radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(255, 8, 201, 0.9) 0%, rgba(255, 8, 201, 0) 100%), radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(41, 69, 181, 0.8) 47.64%, rgba(41, 69, 181, 0) 100%), #23282D; .header-desc { color: #00E0FF; } } &.plugin-set-product-type { background: radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(38, 232, 168, 0.8) 17.85%, rgba(38, 232, 168, 0) 100%), radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(91, 119, 231, 0.9) 0%, rgba(91, 119, 231, 0) 100%), radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(91, 119, 231, 0.8) 47.64%, rgba(91, 119, 231, 0) 100%), #23282D; .header-desc { color: #26E8A8; } } &.theme-plugin-bundle-product-type { background: radial-gradient(34.83% 346.74% at 61.68% 157.61%, rgba(252, 133, 119, 0.8) 17.85%, rgba(252, 133, 119, 0) 100%), radial-gradient(38.43% 382.61% at 32.75% -216.3%, rgba(25, 118, 211, 0.8) 47.64%, rgba(25, 118, 211, 0) 100%), radial-gradient(19.98% 198.91% at 78.71% -77.17%, rgba(95, 49, 159, 0.9) 0%, rgba(95, 49, 159, 0) 100%), #23282D; .header-desc { color: #00E0FF; } } } &__before-component { margin-bottom: 20px; } &__inner-component { margin-top: 20px; } &__after-component { margin-top: 20px; } p { font-size: 13px; color: #7b7e81; margin: 0 0 10px 0; } .dashicons { display: flex; justify-content: center; align-items: center; } .cx-vui-subtitle { display: flex; justify-content: space-between; align-items: center; &--controls { padding-bottom: 20px; border-bottom: 1px solid #DCDCDD; margin-bottom: 20px; } &__label { font-size: 20px; line-height: 24px; font-weight: normal; } &__buttons { display: flex; justify-content: flex-end; align-items: center; .cx-vui-button { margin-left: 10px; } } } .cx-vui-collapse { &__heading { padding: 15px 0; .cx-vui-subtitle { font-size: 14px; font-weight: 500; } } .cx-vui-collapse { .cx-vui-collapse__heading { padding: 15px; } } } .cx-vui-tabs { &__nav { background-color: white; } &__nav-item { font-size: 14px; font-weight: 500; } } .cx-vui-component { &__label { font-size: 14px; font-weight: 400; } &__desc { font-size: 12px; } } .cx-vui-dimensions { position: relative; &__units { margin-right: 0; } &__inputs { .cx-vui-component-raw { min-width: 25%; } } &__link { width: 22px; height: 22px; position: absolute; top: 0; margin-left: 0; } } } .jet-dashboard-page { &__panel { min-width: 292px; box-sizing: border-box; border-radius: 4px; padding: 30px; background-color: white; box-shadow: 0px 2px 6px rgba(35, 40, 45, 0.07); & ~ .jet-dashboard-page__panel { margin-top: 20px; } > .cx-vui-subtitle { margin-bottom: 20px; } } &__panel-header { display: flex; justify-content: flex-start; align-items: center; .panel-header-icon { position: relative; display: flex; justify-content: center; align-items: center; width: 46px; height: 46px; border-radius: 50%; border: 1px solid #7B7E81; @include margin-end(12px); } .panel-header-content { display: flex; flex-direction: column; .panel-header-desc { font-size: 14px; line-height: 18px; font-weight: 300; color: #7B7E81; margin-bottom: 3px; } .panel-header-title { font-size: 20px; line-height: 24px; color: #23282D; } } } &__panel-content { margin-top: 12px; border-top: 1px solid #DCDCDD; padding-top: 23px; font-size: 12px; line-height: 16px; color: #7B7E81; } &__panel-controls { display: flex; justify-content: flex-start; align-items: center; margin-top: 20px; } &__guide { width: 100%; @media (max-width: 1140px) { width: calc( 100% / 2 ); } } &__guide-videos {} &__guide-video { display: flex; justify-content: center; align-items: center; height: 162px; background-color: white; background-size: cover; background-position: 50%; overflow: hidden; border-radius: 3px 3px 0 0; cursor: pointer; svg { transition: all .25s ease; } &:hover { svg { transform: scale(1.1); } } } &__guide-content { background-color: white; padding: 20px 30px 40px 30px; border-radius: 0 0 3px 3px; } &__guide-links { display: flex; flex-direction: column; } &__guide-link { display: flex; justify-content: flex-start; margin-bottom: 22px; &:last-child { margin-bottom: 0; } a { display: flex; justify-content: flex-start; align-items: flex-start; font-size: 14px; line-height: 18px; color: #007CBA; text-decoration: none; &:hover { color: #066EA2; text-decoration: underline; } svg { margin-top: 3px; @include margin-start(10px); } } } &__help-center { width: 100%; @media (max-width: 1140px) { width: calc( 100% / 2 ); } } &__help-center-links { display: flex; flex-direction: column; margin-top: 12px; border-top: 1px solid #DCDCDD; padding-top: 23px; } &__help-center-link { display: flex; justify-content: flex-start; margin-bottom: 22px; &:last-child { margin-bottom: 0; } a { display: flex; justify-content: flex-start; align-items: center; font-size: 14px; line-height: 18px; color: #007CBA; text-decoration: none; &:hover { color: #066EA2; text-decoration: underline; } .help-center-link-icon { @include margin-end(28px); } } } .plugin-list { display: flex; justify-content: flex-start; align-items: stretch; flex-wrap: wrap; .plugin-item { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; &__inner { display: flex; justify-content: flex-start; align-items: stretch; } &.activate-avaliable { .plugin-label { color: #7B7E81; } .plugin-version { background-color: #DFDFDF; } } &.update-avaliable { .plugin-version { background-color: #D6336C; } } } .plugin-tumbnail { position: relative; line-height: 0; @include margin-end(12px); img { width: 80px; } } .plugin-info { display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; flex: 1 1 auto; } .plugin-name { display: flex; justify-content: flex-start; align-items: center; font-size: 14px; color: #23282d; font-weight: 500; } .plugin-desc { margin: 10px 0 0 0; } .plugin-version { font-size: 12px; padding: 0 4px; border-radius: 2px; background-color: #46B450; color: white; white-space: nowrap; @include margin-start(8px); } .plugin-rollback { line-height: 0; @include margin-start(10px); cursor: pointer; .cx-vui-button { font-size: 13px; white-space: nowrap; } span { color: #007cba; } } .plugin-actions { width: 100%; display: flex; justify-content: flex-start; align-items: center; flex-wrap: nowrap; margin-top: 7px; .cx-vui-button { @include margin-start(8px); &:first-child { @include margin-start(0); } } .show-license-control { color: #46B450; } .deactivate-plugin-button { color: #D6336C; } } .plugin-update-label { display: flex; justify-content: flex-start; align-items: center; margin-top: 5px; color: #7B7E81; font-size: 13px; .latest-version { color: #007DBA; font-weight: 500; margin: 0 3px; } .cx-vui-button { font-size: 13px; @include margin-start(3px); } } &--installed-plugins { margin: -15px 0; .plugin-item { width: 50%; margin: 15px 0; @media (max-width: 1140px) { width: 100%; } } } &--avaliable-plugins { margin: -10px; .plugin-item { width: calc(33.3333% - 20px); margin: 10px; @media (max-width: 1140px) { width: 100%; margin: 10px 0; } .plugin-tumbnail { width: 58px; margin: 0; border-radius: getValueByDirection( 4px 0 0 4px, 0 4px 4px 0 ); overflow: hidden; img { width: 65px; margin-left: -3px; } } .plugin-info { display: flex; flex-direction: column; justify-content: center; align-items: stretch; padding: 10px 12px; border-width: 1px 0 1px 0; @include border-end(1px); border-style: solid; border-color: #E0E0E0; border-radius: getValueByDirection( 0 4px 4px 0, 4px 0 0 4px); } } } &--more-plugins { margin: -10px -10px -30px -10px; .plugin-item { width: calc(25% - 20px); margin: 10px 10px 30px 10px; @media (max-width: 1140px) { width: calc(50% - 20px); } &__inner { height: 100%; display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; .plugin-tumbnail { margin: 0 0 25px 0; img { width: auto; max-width: 70%; } } .plugin-info { flex: 1 1 100%; display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; .plugin-actions { flex: 1 1 100%; align-items: flex-end; margin-top: 10px; } } } } } &--registered-plugins { margin: -10px; .plugin-item { width: calc(50% - 20px); margin: 10px; @media (max-width: 1140px) { width: 100%; } .button-dropdown-icon { transition: transform .25s; } &.dropdown-visible { .button-dropdown-icon { transform: rotate(-90deg); } } .plugin-tumbnail { width: 58px; margin: 0; border-radius: getValueByDirection( 4px 0 0 4px, 0 4px 4px 0 ); overflow: hidden; img { width: 65px; margin-left: -3px; } } .plugin-info { position: relative; display: flex; flex-direction: column; justify-content: center; align-items: stretch; padding: 10px 12px; border-width: 1px 0 1px 0; @include border-end(1px); @include margin-end(12px); border-style: solid; border-color: #E0E0E0; border-radius: getValueByDirection( 0 4px 4px 0, 4px 0 0 4px ); } .useful-links { display: flex; flex-direction: column; justify-content: flex-start; align-items: stretch; position: absolute; overflow: hidden; width: 207px; top: calc(100% - 38px); @include end(-30px); background-color: white; box-shadow: 0px 4px 10px rgba(35, 40, 45, 0.3); border-radius: 0px 0px 4px 4px; z-index: 1; .useful-link { padding: 12px; background-color: white; font-size: 14px; line-height: 16px; color: #007CBA; text-decoration: none; &:hover { background-color: #F4F4F5; } } } } } } .jet-dashboard-page-badge { display: flex; justify-content: center; align-items: center; width: 16px; height: 16px; border-radius: 50%; background: #EC1414; border: 1px solid #FFFFFF; box-sizing: border-box; font-weight: bold; font-size: 12px; line-height: 16px; color: #FFFFFF; } } .cx-vui-notices { z-index: 10000; //min-width: 450px; } /* * Fade Animation */ .fade-enter { opacity: 0; } .fade-enter-active { transition: opacity .25s; } .fade-enter-to { opacity: 1; } .fade-leave { opacity: 1; } .fade-leave-active { transition: opacity .25s; } .fade-leave-to { opacity: 0; } /* * Popup Animation */ .popup-enter { opacity: 0; .cx-vui-popup__body { transform: translateY(10px); } } .popup-enter-active { transition: opacity .3s; .cx-vui-popup__body { transition: transform .3s; } } .popup-enter-to { opacity: 1; transform: translateY(0); .cx-vui-popup__body { transform: translateY(0px); } } .popup-leave { opacity: 1; } .popup-leave-active { transition: opacity .25s; } .popup-leave-to { opacity: 0; } /* * Dropdown Menu Animation */ .dropdown-menu-enter { opacity: 0; transform: translateY(10px); } .dropdown-menu-enter-active { transition: opacity .25s, transform .25s; } .dropdown-menu-enter-to { opacity: 1; transform: translateY(0); } .dropdown-menu-leave { opacity: 1; } .dropdown-menu-leave-active { transition: opacity .2s; } .dropdown-menu-leave-to { opacity: 0; } modules/jet-dashboard/assets/scss/jet-dashboard-admin-rtl.scss000075500000000060151121477560020501 0ustar00$direction: rtl; @import "jet-dashboard-admin";modules/jet-dashboard/inc/compatibility/themes/hello.php000075500000001064151121477560017463 0ustar00registered_themes = apply_filters( 'jet-dashboard/compatibility-manager/registered-themes', array( 'helloelementor' => array( 'class' => '\\Jet_Dashboard\\Compatibility\\Theme\\Hello', 'args' => array(), ), ) ); $this->registered_plugins = apply_filters( 'jet-dashboard/compatibility-manager/registered-plugins', array() ); $this->maybe_load_theme_module(); } /** * [maybe_load_theme_module description] * @return [type] [description] */ public function maybe_load_theme_module() { $style_parent_theme = wp_get_theme( get_template() ); $theme_slug = strtolower( preg_replace('/\s+/', '', $style_parent_theme->get('Name') ) ); $this->load_theme_compat_class( $theme_slug ); } /** * Load module by slug * * @param [type] $module [description] * @return [type] [description] */ public function load_theme_compat_class( $theme ) { $theme_module_data = $this->get_theme_compatibility_module( $theme ); if ( ! $theme_module_data ) { return; } $theme_module_class = $theme_module_data['class']; $theme_module_args = isset( $theme_module_data['args'] ) ? $theme_module_data['args'] : array(); $theme_module_instance = new $theme_module_class( $theme_module_args ); return $theme_module_instance; } /** * [get_module description] * @param [type] $module [description] * @return [type] [description] */ public function get_theme_compatibility_module( $theme ) { if ( ! isset( $this->registered_themes[ $theme ] ) ) { return false; } return $this->registered_themes[ $theme ]; } } modules/jet-dashboard/inc/compatibility/base-theme.php000075500000001550151121477560017105 0ustar00init(); add_filter( 'jet-dashboard/data-manager/theme-info', array( $this, 'theme_info_data' ) ); } /** * [init description] * @return [type] [description] */ public function init() {} /** * [theme_info_data description] * @param array $theme_data [description] * @return [type] [description] */ public function theme_info_data( $theme_data = array() ) { return $theme_data; } } modules/jet-dashboard/inc/modules/license/module.php000075500000007621151121477560016606 0ustar00dashboard_slug, esc_html__( 'Update & Installation', 'jet-dashboard' ), esc_html__( 'Update & Installation', 'jet-dashboard' ), 'manage_options', Dashboard::get_instance()->dashboard_slug . '-license-page', function() { include Dashboard::get_instance()->get_view( 'common/dashboard' ); } ); } /** * [register_license_page description] * @return [type] [description] */ public function register_license_page() { add_submenu_page( Dashboard::get_instance()->dashboard_slug, esc_html__( 'License', 'jet-dashboard' ), esc_html__( 'License', 'jet-dashboard' ), 'manage_options', add_query_arg( array( 'page' => 'jet-dashboard-license-page', 'subpage' => 'license-manager' ), admin_url( 'admin.php' ) ) ); } /** * [get_page_link description] * @return [type] [description] */ public function get_page_link() { return Dashboard::get_instance()->get_dashboard_page_url( $this->get_page_slug(), $this->get_parent_slug() ); } /** * Enqueue module-specific assets * * @return void */ public function enqueue_module_assets() { wp_enqueue_script( 'jet-dashboard-license-page', Dashboard::get_instance()->get_dashboard_url() . 'assets/js/license-page.js', array( 'cx-vue-ui' ), Dashboard::get_instance()->get_dashboard_version(), true ); } /** * License page config * * @param array $config [description] * @param string $subpage [description] * @return [type] [description] */ public function page_config( $config = array(), $page = false, $subpage = false ) { $config['pageModule'] = $this->get_page_slug(); $config['allJetPlugins'] = Dashboard::get_instance()->plugin_manager->get_plugin_data_list(); return $config; } /** * [page_templates description] * @param array $templates [description] * @param string $subpage [description] * @return [type] [description] */ public function page_templates( $templates = array(), $page = false, $subpage = false ) { $templates['license-page'] = Dashboard::get_instance()->get_view( 'license/main' ); $templates['license-item'] = Dashboard::get_instance()->get_view( 'license/license-item' ); $templates['plugin-item-installed'] = Dashboard::get_instance()->get_view( 'license/plugin-item-installed' ); $templates['plugin-item-avaliable'] = Dashboard::get_instance()->get_view( 'license/plugin-item-avaliable' ); $templates['plugin-item-more'] = Dashboard::get_instance()->get_view( 'license/plugin-item-more' ); $templates['responce-info'] = Dashboard::get_instance()->get_view( 'license/responce-info' ); return $templates; } } modules/jet-dashboard/inc/modules/settings/module.php000075500000010052151121477560017014 0ustar00module_manager->get_registered_subpage_modules() ) ) { return; } add_submenu_page( Dashboard::get_instance()->dashboard_slug, esc_html__( 'JetPlugins Settings', 'jet-dashboard' ), esc_html__( 'JetPlugins Settings', 'jet-dashboard' ), 'manage_options', Dashboard::get_instance()->dashboard_slug . '-settings-page', function() { include Dashboard::get_instance()->get_view( 'common/dashboard' ); } ); } /** * [get_page_link description] * @return [type] [description] */ public function get_page_link() { return Dashboard::get_instance()->get_dashboard_page_url( $this->get_page_slug(), $this->get_parent_slug() ); } public function init() { $page_slug = $this->get_page_slug(); $subpage = Dashboard::get_instance()->get_subpage(); if ( ! $subpage ) { $subpage_module_list = Dashboard::get_instance()->module_manager->get_subpage_module_list( $page_slug ); $this->default_subpage_module = ! empty( $subpage_module_list ) ? array_values( $subpage_module_list )[0]['page'] : false; Dashboard::get_instance()->module_manager->load_subpage_module( $this->default_subpage_module ); } } /** * Enqueue module-specific assets * * @return void */ public function enqueue_module_assets() { wp_enqueue_script( 'jet-dashboard-settings-page', Dashboard::get_instance()->get_dashboard_url() . 'assets/js/settings-page.js', array( 'cx-vue-ui' ), Dashboard::get_instance()->get_dashboard_version(), true ); } /** * License page config * * @param array $config [description] * @param string $subpage [description] * @return [type] [description] */ public function page_config( $config = array(), $page = false, $subpage = false ) { $config['pageModule'] = $this->get_page_slug(); $config['subPageModule'] = $this->default_subpage_module; $config['subpageList'] = Dashboard::get_instance()->module_manager->get_subpage_module_list( $this->get_page_slug() ); $config['categoryList'] = Dashboard::get_instance()->module_manager->get_subpage_category_list( $this->get_page_slug() ); if ( ! Dashboard::get_instance()->get_subpage() ) { $config['pageModuleConfig'] = Dashboard::get_instance()->data_manager->get_dashboard_page_config( $this->get_page_slug(), $this->default_subpage_module ); } return $config; } /** * [page_templates description] * @param array $templates [description] * @param string $subpage [description] * @return [type] [description] */ public function page_templates( $templates = array(), $page = false, $subpage = false ) { $templates['settings-page'] = Dashboard::get_instance()->get_view( 'settings/main' ); $templates['plugin-settings-toggle'] = Dashboard::get_instance()->get_view( 'settings/plugin-settings-toggle' ); return $templates; } } modules/jet-dashboard/inc/modules/upsale/module.php000075500000013035151121477570016452 0ustar00get_dashboard_page_url( $this->get_page_slug(), $this->get_parent_slug() ); } /** * [init description] * @return [type] [description] */ public function create() { add_action( 'admin_menu', array( $this, 'register_page' ), 9999 ); } /** * [register_page description] * @return [type] [description] */ public function register_page() { $primary_license_data = $this->get_primary_license_data(); $theme_info = Dashboard::get_instance()->data_manager->get_theme_info(); $license_type = ! empty( $primary_license_data['type'] ) ? $primary_license_data['type'] . '-license' : 'license-not-activated'; $utm_medium = $license_type . '/' . $theme_info['authorSlug']; if ( 'crocoblock' === $primary_license_data['type'] ) { if ( 'lifetime' === $primary_license_data['product'] ) { return false; } if ( 'all-inclusive' === $primary_license_data['product'] ) { add_submenu_page( Dashboard::get_instance()->dashboard_slug, esc_html__( 'Go Lifetime', 'jet-dashboard' ), esc_html__( 'Go Lifetime', 'jet-dashboard' ), 'manage_options', add_query_arg( array( 'utm_source' => 'dashboard', 'utm_medium' => $utm_medium, 'utm_campaign' => 'upgrade-to-lifetime', ), $this->croco_upgrade_link . $primary_license_data['key'] ) ); return false; } add_submenu_page( Dashboard::get_instance()->dashboard_slug, esc_html__( 'Go All-Inclusive', 'jet-dashboard' ), esc_html__( 'Go All-Inclusive', 'jet-dashboard' ), 'manage_options', add_query_arg( array( 'utm_source' => 'dashboard', 'utm_medium' => $utm_medium, 'utm_campaign' => 'upgrade-to-all-inclusive', ), $this->croco_upgrade_link . $primary_license_data['key'] ) ); return false; } add_submenu_page( Dashboard::get_instance()->dashboard_slug, $this->get_upsale_page_label(), $this->get_upsale_page_label(), 'manage_options', Dashboard::get_instance()->dashboard_slug . '-upsale-page', function() { include Dashboard::get_instance()->get_view( 'common/dashboard' ); } ); return false; } /** * [get_primary_license_data description] * @return [type] [description] */ public function get_primary_license_data() { if ( null !== $this->primary_license_data ) { return $this->primary_license_data; } $this->primary_license_data = Dashboard::get_instance()->license_manager->get_primary_license_data(); return $this->primary_license_data; } /** * [get_upsale_page_label description] * @return [type] [description] */ public function get_upsale_page_label() { $primary_license_data = $this->get_primary_license_data(); if ( 'crocoblock' === $primary_license_data['type'] ) { if ( 'all-inclusive' === $primary_license_data['product'] ) { return esc_html__( 'Go Lifetime', 'jet-dashboard' ); } return esc_html__( 'Go All-Inclusive', 'jet-dashboard' ); } return esc_html__( 'Get Crocoblock', 'jet-dashboard' ); } /** * Enqueue module-specific assets * * @return void */ public function enqueue_module_assets() { wp_enqueue_script( 'jet-dashboard-upsale-page', Dashboard::get_instance()->get_dashboard_url() . 'assets/js/upsale-page.js', array( 'cx-vue-ui' ), Dashboard::get_instance()->get_dashboard_version(), true ); } /** * License page config * * @param array $config [description] * @param string $subpage [description] * @return [type] [description] */ public function page_config( $config = array(), $page = false, $subpage = false ) { $config['pageModule'] = $this->get_page_slug(); $config['offersConfig'] = Dashboard::get_instance()->data_manager->get_dashboard_config( 'offers' ); $config['extrasConfig'] = Dashboard::get_instance()->data_manager->get_dashboard_config( 'extras' ); $config['generalConfig'] = Dashboard::get_instance()->data_manager->get_dashboard_config( 'general' ); return $config; } /** * Add welcome component template * * @param array $templates [description] * @param string $subpage [description] * @return [type] [description] */ public function page_templates( $templates = array(), $page = false, $subpage = false ) { $templates['upsale-page'] = Dashboard::get_instance()->get_view( 'upsale/main' ); return $templates; } } modules/jet-dashboard/inc/modules/welcome/module.php000075500000007016151121477570016616 0ustar00get_dashboard_page_url( $this->get_page_slug(), $this->get_parent_slug() ); } /** * [init description] * @return [type] [description] */ public function init() { } /** * Enqueue module-specific assets * * @return void */ public function enqueue_module_assets() { wp_enqueue_script( 'jet-dashboard-welcome-page', Dashboard::get_instance()->get_dashboard_url() . 'assets/js/welcome-page.js', array( 'cx-vue-ui' ), Dashboard::get_instance()->get_dashboard_version(), true ); } /** * License page config * * @param array $config [description] * @param string $subpage [description] * @return [type] [description] */ public function page_config( $config = array(), $page = false, $subpage = false ) { $config['pageModule'] = $this->get_page_slug(); $config['allJetPlugins'] = Dashboard::get_instance()->plugin_manager->get_plugin_data_list(); $config['userPlugins'] = Dashboard::get_instance()->plugin_manager->get_user_plugins(); $config['offersConfig'] = Dashboard::get_instance()->data_manager->get_dashboard_config( 'offers' ); $config['extrasConfig'] = Dashboard::get_instance()->data_manager->get_dashboard_config( 'extras' ); $config['generalConfig'] = Dashboard::get_instance()->data_manager->get_dashboard_config( 'general' ); $config['adminUrl'] = admin_url(); $config['licensePageUrl'] = Dashboard::get_instance()->get_dashboard_page_url( 'license-page' ); $config['licenseManagerUrl'] = Dashboard::get_instance()->get_dashboard_page_url( 'license-page', 'license-manager' ); $config['crocoWizardData'] = Dashboard::get_instance()->plugin_manager->get_user_plugin( 'crocoblock-wizard/crocoblock-wizard.php' ); return $config; } /** * Add welcome component template * * @param array $templates [description] * @param string $subpage [description] * @return [type] [description] */ public function page_templates( $templates = array(), $page = false, $subpage = false ) { $templates['welcome-page'] = Dashboard::get_instance()->get_view( 'welcome/main' ); $templates['plugin-item-registered'] = Dashboard::get_instance()->get_view( 'welcome/plugin-item-registered' ); $templates['plugin-item-more'] = Dashboard::get_instance()->get_view( 'license/plugin-item-more' ); $templates['offers-item'] = Dashboard::get_instance()->get_view( 'welcome/offers-item' ); $templates['extras-item'] = Dashboard::get_instance()->get_view( 'welcome/extras-item' ); return $templates; } } modules/jet-dashboard/inc/modules/welcome/dev-test.php000075500000002703151121477570017062 0ustar00get_dashboard_page_url( $this->get_page_slug(), $this->get_parent_slug() ); } /** * License page config * * @param array $config [description] * @param string $subpage [description] * @return [type] [description] */ public function page_config( $config = array(), $page = false, $subpage = false ) { $config['pageModule'] = $this->get_parent_slug(); $config['subPageModule'] = $this->get_page_slug(); return $config; } } modules/jet-dashboard/inc/modules/page-base.php000075500000004532151121477570015522 0ustar00args = wp_parse_args( $args, $this->args ); $this->create(); } /** * Initialize module-specific parts * * @return [type] [description] */ public function init_module() { $this->init(); add_action( 'jet-dashboard/before-enqueue-assets', array( $this, 'assets' ) ); return $this; } /** * [create description] * @return [type] [description] */ public function create() {} /** * [init description] * @return [type] [description] */ public function init() {} /** * Register module assets * * @return [type] [description] */ public function assets() { $this->enqueue_module_assets(); add_filter( 'jet-dashboard/js-page-config', array( $this, 'page_config' ), 10, 3 ); add_filter( 'jet-dashboard/js-page-templates', array( $this, 'page_templates' ), 10, 3 ); } /** * Enqueue module-specific assets * * @return void */ public function enqueue_module_assets() {} /** * Modify page config * * @param [type] $config [description] * @return [type] [description] */ public function page_config( $config = array(), $page = false, $subpage = false ) { return $config; } /** * Add page templates * * @param [type] $config [description] * @return [type] [description] */ public function page_templates( $templates = array(), $page = false, $subpage = false ) { return $templates; } } modules/jet-dashboard/inc/modules/manager.php000075500000022101151121477570015300 0ustar00registered_category = apply_filters( 'jet-dashboard/module-manager/registered-module-category', array( 'other' => array( 'name' => 'Other', 'slug' => 'other', 'priority' => 100 ), ) ); $this->registered_page_modules = apply_filters( 'jet-dashboard/module-manager/registered-page-modules', array( 'welcome-page' => array( 'class' => '\\Jet_Dashboard\\Modules\\Welcome\\Module', 'args' => array(), ), 'license-page' => array( 'class' => '\\Jet_Dashboard\\Modules\\License\\Module', 'args' => array(), ), 'settings-page' => array( 'class' => '\\Jet_Dashboard\\Modules\\Settings\\Module', 'args' => array(), ), 'upsale-page' => array( 'class' => '\\Jet_Dashboard\\Modules\\Upsale\\Module', 'args' => array(), ), ) ); $this->registered_subpage_modules = apply_filters( 'jet-dashboard/module-manager/registered-subpage-modules', array( 'dev-test-page' => array( 'class' => '\\Jet_Dashboard\\Modules\\Welcome\\Dev_Test', 'args' => array(), ), ) ); add_action( 'init', array( $this, 'init_modules' ), 999 ); } /** * Initialize modules on aproppriate AJAX or on module page * * @return [type] [description] */ public function init_modules() { $registered_page_modules = $this->get_registered_page_modules(); foreach ( $registered_page_modules as $module_slug => $module_data ) { $page_module_class = $module_data['class']; if ( class_exists( $page_module_class ) ) { $page_module_args = isset( $module_data['args'] ) ? $module_data['args'] : array(); $this->page_instance_modules[ $module_slug ] = new $page_module_class( $page_module_args ); } } $this->maybe_load_page_module(); $this->maybe_load_subpage_module(); } /** * [register_module_category description] * @param boolean $config [description] * @return [type] [description] */ public function register_module_category( $config = false ) { $default_config = array( 'name' => 'Other', 'slug' => 'other', 'priority' => 100 ); if ( ! $config || ! isset( $config['slug'] ) || ! isset( $config['name'] ) ) { return false; } $category_config = wp_parse_args( $config, $default_config ); if ( array_key_exists( $category_config['slug'], $this->registered_category ) ) { return; } $this->registered_category[ $category_config['slug'] ] = $category_config; } /** * [register_page_module description] * @return [type] [description] */ public function register_page_module( $page = false, $page_data = false ) { if ( ! $page || ! $page_data ) { return; } if ( array_key_exists( $page, $this->registered_page_modules ) ) { return; } if ( ! isset( $page_data['class'] ) || ! class_exists( $page_data['class'] ) ) { return; } $this->registered_page_modules[ $page ] = $page_data; } /** * [register_subpage_module description] * @param boolean $subpage [description] * @param boolean $subpage_data [description] * @return [type] [description] */ public function register_subpage_module( $subpage = false, $subpage_data = false ) { if ( ! $subpage || ! $subpage_data ) { return; } if ( array_key_exists( $subpage, $this->registered_subpage_modules ) ) { return; } if ( ! isset( $subpage_data['class'] ) || ! class_exists( $subpage_data['class'] ) ) { return; } $this->registered_subpage_modules[ $subpage ] = $subpage_data; } /** * [get_subpage_modules description] * @return [type] [description] */ public function get_registered_category() { return $this->registered_category; } /** * [get_page_modules description] * @return [type] [description] */ public function get_registered_page_modules() { return $this->registered_page_modules; } /** * [get_subpage_modules description] * @return [type] [description] */ public function get_registered_subpage_modules() { return $this->registered_subpage_modules; } /** * Maybe load on regular request * * @return [type] [description] */ public function maybe_load_page_module() { if ( ! Dashboard::get_instance()->is_dashboard_page() ) { return; } $page_module = Dashboard::get_instance()->get_page(); $this->load_page_module( $page_module ); } /** * Load module by slug * * @param [type] $module [description] * @return [type] [description] */ public function load_page_module( $page_module ) { if ( ! isset( $this->page_instance_modules[ $page_module ] ) ) { return; } $page_module_instance = $this->page_instance_modules[ $page_module ]; return $page_module_instance->init_module(); } /** * [maybe_load_subpage_module description] * @return [type] [description] */ public function maybe_load_subpage_module() { if ( ! Dashboard::get_instance()->is_dashboard_page() ) { return; } $subpage_module = Dashboard::get_instance()->get_subpage(); $this->load_subpage_module( $subpage_module ); } /** * [load_subpage_module description] * @param [type] $subpage_module [description] * @return [type] [description] */ public function load_subpage_module( $subpage_module ) { if ( ! isset( $this->registered_subpage_modules[ $subpage_module ] ) ) { return; } $subpage_module_data = $this->get_subpage_module( $subpage_module ); if ( ! $subpage_module_data ) { return; } $subpage_module_class = $subpage_module_data['class']; $subpage_module_args = isset( $subpage_module_data['args'] ) ? $subpage_module_data['args'] : array(); $subpage_module_instance = new $subpage_module_class( $subpage_module_args ); return $subpage_module_instance->init_module(); } /** * [get_module description] * @param [type] $module [description] * @return [type] [description] */ public function get_page_module( $page_module ) { if ( ! isset( $this->registered_page_modules[ $page_module ] ) ) { return false; } return $this->registered_page_modules[ $page_module ]; } /** * [get_subpage_module description] * @param [type] $subpage_module [description] * @return [type] [description] */ public function get_subpage_module( $subpage_module ) { if ( ! isset( $this->registered_subpage_modules[ $subpage_module ] ) ) { return false; } return $this->registered_subpage_modules[ $subpage_module ]; } /** * [get_subpage_module_list description] * @param [type] $page_module [description] * @return [type] [description] */ public function get_subpage_module_list( $page_module = false ) { $subpage_modules = $this->get_registered_subpage_modules(); $subpage_module_list = array(); foreach ( $subpage_modules as $subpage_slug => $subpage_data ) { $subpage_module_class = $subpage_data['class']; $subpage_module_args = isset( $subpage_data['args'] ) ? $subpage_data['args'] : array(); $subpage_module_instance = new $subpage_module_class( $subpage_module_args ); $subpage_module_list[] = array( 'name' => $subpage_module_instance->get_page_name(), 'parent' => $subpage_module_instance->get_parent_slug(), 'page' => $subpage_module_instance->get_page_slug(), 'link' => $subpage_module_instance->get_page_link(), 'category' => $subpage_module_instance->get_category(), ); } if ( $page_module ) { $subpage_module_list = array_filter( $subpage_module_list, function( $subpage_module ) use ( $page_module ) { return $page_module === $subpage_module['parent']; } ); } return $subpage_module_list; } /** * [get_subpage_category_list description] * @return [type] [description] */ public function get_subpage_category_list( $page_module ) { $subpage_module_list = $this->get_subpage_module_list( $page_module ); $registered_category = $this->get_registered_category(); $subpage_category_list = array(); if ( array( $registered_category ) && ! empty( $registered_category ) ) { foreach ( $registered_category as $category => $category_data ) { $module_list = array(); foreach ( $subpage_module_list as $key => $module_data ) { if ( $category === $module_data['category'] ) { $module_list[] = $module_data; } } if ( ! empty( $module_list ) ) { $category_data['moduleList'] = $module_list; $subpage_category_list[] = $category_data; } } usort( $subpage_category_list, function( $a, $b ) { return $a['priority'] - $b['priority']; } ); } return $subpage_category_list; } } modules/jet-dashboard/inc/utils.php000075500000015057151121477570013372 0ustar00 $license_data ) { if ( ! isset( $license_data['licenseDetails'] ) ) { continue; } $license_details = $license_data['licenseDetails']; if ( ! isset( $license_details['site_url'] ) ) { continue; } $sites[] = $license_details['site_url']; } if ( empty( $sites ) ) { return false; } return $sites; } /** * @return bool */ public static function is_site_activated() { $current_site = strtolower( Utils::get_site_url() ); $license_sites = Utils::get_license_site_url(); if ( ! in_array( $current_site, $license_sites ) ) { return false; } return true; } /** * [get description] * @param [type] $setting [description] * @param boolean $default [description] * @return [type] [description] */ public static function get_license_data( $setting = false, $default = false ) { if ( ! $setting ) { return get_option( self::$license_data_key, array() ); } if ( null === self::$license_data ) { self::$license_data = get_option( self::$license_data_key, array() ); } return isset( self::$license_data[ $setting ] ) ? self::$license_data[ $setting ] : $default; } /** * [set_license_data description] * @param [type] $setting [description] * @param boolean $value [description] */ public static function set_license_data( $setting = false, $value = false ) { $current_license_data = get_option( self::$license_data_key, array() ); $current_license_data[ $setting ] = $value; update_option( self::$license_data_key, $current_license_data ); } /** * [get_license_list description] * @return [type] [description] */ public static function get_license_list() { $license_list = self::get_license_data( 'license-list', [] ); return $license_list; } /** * [license_data_expire_sync description] * @return [type] [description] */ public static function license_data_expire_sync() { $license_list = self::get_license_data( 'license-list', [] ); if ( ! empty( $license_list ) ) { foreach ( $license_list as $license_key => $license_data ) { $license_details = $license_data['licenseDetails']; $is_expired = ( 'expired' === $license_data['licenseStatus'] ) ? true : false; if ( ! empty( $license_details ) ) { $is_expired = self::license_expired_check( $license_details['expire'] ); } if ( $is_expired ) { $license_list[$license_key]['licenseStatus'] = 'expired'; } } } self::set_license_data( 'license-list', $license_list ); } /** * [get_plugin_license_key description] * @param boolean $setting [description] * @param boolean $value [description] * @return [type] [description] */ public static function get_plugin_license_key( $plugin_slug ) { $license_list = self::get_license_data( 'license-list', [] ); $plugin_license_key = false; if ( ! empty( $license_list ) ) { foreach ( $license_list as $license_key => $license_data ) { if ( 'expired' === $license_data['licenseStatus'] ) { continue; } $license_details = $license_data['licenseDetails']; if ( empty( $license_details ) ) { continue; } $is_expired = self::license_expired_check( $license_details['expire'] ); if ( $is_expired ) { $license_list[$license_key]['licenseStatus'] = 'expired'; continue; } $license_plugins = $license_details['plugins']; if ( array_key_exists( $plugin_slug, $license_plugins ) ) { $plugin_license_key = $license_key; break; } } } if ( $plugin_license_key ) { return $plugin_license_key; } return false; } /** * [package_url description] * @param [type] $key [description] * @return [type] [description] */ public static function package_url( $plugin_slug = false, $version = false ) { $license_key = self::get_plugin_license_key( $plugin_slug ); if ( ! $license_key ) { return false; } return add_query_arg( array( 'action' => 'get_plugin_update', 'license' => self::get_plugin_license_key( $plugin_slug ), 'plugin' => $plugin_slug, 'version' => $version, 'site_url' => urlencode( self::get_site_url() ), ), self::get_api_url() ); } /** * [if_license_expire_check description] * @param boolean $expire_date [description] * @return [type] [description] */ public static function license_expired_check( $expire_date = false, $day_to_expire = 0 ) { if ( '0000-00-00 00:00:00' === $expire_date || '1000-01-01 00:00:00' === $expire_date || 'lifetime' === $expire_date ) { return false; } $current_time = time(); $current_time = strtotime( sprintf( '+%s day', $day_to_expire ), $current_time ); $expire_time = strtotime( $expire_date ); if ( $current_time > $expire_time ) { return true; } return false; } /** * @param array $attributes * @return string */ public static function print_html_attributes( $attributes = [] ) { $rendered_attributes = []; foreach ( $attributes as $attribute_key => $attribute_values ) { if ( is_array( $attribute_values ) ) { $attribute_values = implode( ' ', $attribute_values ); } $rendered_attributes[] = sprintf( '%1$s="%2$s"', $attribute_key, esc_attr( $attribute_values ) ); } return implode( ' ', $rendered_attributes ); } }modules/jet-dashboard/inc/notice-manager.php000075500000021347151121477570015122 0ustar00registered_notices; } $page_notices = array_filter( $this->registered_notices, function( $notice ) { return $page_slug === $notice['page']; } ); if ( ! empty( $page_notices ) ) { return $page_notices; } return false; }*/ /** * @return void */ public function admin_notices() { //$this->maybe_show_empty_license(); } /** * @param $page_slug * @return array|false */ public function get_registered_notices( $page_slug = false ) { if ( !$page_slug ) { return $this->registered_notices; } $page_notices = array_filter( $this->registered_notices, function ( $notice ) use ( $page_slug ) { if ( is_array( $notice['page'] ) && in_array( $page_slug, $notice['page'] ) ) { return true; } elseif ( $page_slug === $notice['page'] ) { return true; } return false; } ); if ( !empty( $page_notices ) ) { return array_values( $page_notices ); } return false; } /** * [get_registered_plugins description] * @return [type] [description] */ public function register_notice( $notice_args = array() ) { /*Dashboard::get_instance()->notice_manager->register_notice( array( 'id' => 'alert-notice-1', 'page' => 'welcome-page', 'preset' => 'alert', 'type' => 'info', 'title' => 'Info', 'message' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 'buttons' => array( ), ) );*/ $defaults = array( 'id' => false, 'page' => array(), 'preset' => 'alert', // alert, notice 'type' => 'info', // info, success, danger, error 'typeBgColor' => false, // info, success, danger, error 'duration' => false, 'icon' => false, 'title' => '', 'message' => '', 'buttons' => array(), 'customClass' => '', ); $notice_args = wp_parse_args( $notice_args, $defaults ); if ( !$notice_args['id'] || !$notice_args['page'] || empty( $notice_args['message'] ) ) { return false; } if ( ! is_array( $notice_args['page'] ) ) { $pages[] = $notice_args['page']; $notice_args['page'] = $pages; } $this->registered_notices[] = $notice_args; } /** * @return void */ public function maybe_show_empty_license() { $license_list = Utils::get_license_list(); $this->print_admin_notice( [ 'id' => 'jet-empty-license', 'title' => esc_html__( 'Your site.', 'jet-dashboard' ), 'description' => esc_html__( 'Your site database needs to be updated to the latest version.', 'jet-dashboard' ), 'type' => 'info', 'button' => [ 'text' => esc_html__( 'Update Now', 'jet-dashboard' ), 'url' => '#', 'class' => 'e-button e-button--cta', ], ] ); } /** * @param array $options * @return void */ public function print_admin_notice( array $options ) { global $pagenow; if ( in_array( $pagenow, self::EXCLUDE_PAGES ) ) { return; } $default_options = [ 'id' => null, 'title' => '', 'description' => '', 'classes' => [ 'notice', 'jet-notice' ], // We include WP's default notice class so it will be properly handled by WP's js handler 'type' => '', 'dismissible' => true, 'icon' => '', 'button' => [], 'button_secondary' => [], ]; $options = array_replace_recursive( $default_options, $options ); $notice_classes = $options['classes']; $dismiss_button = ''; $icon = ''; if ( $options['type'] ) { $notice_classes[] = 'jet-notice--' . $options['type']; } if ( $options['dismissible'] ) { $label = esc_html__( 'Dismiss this notice.', 'elementor' ); $notice_classes[] = 'is-dismissible'; $notice_classes[] = 'jet-notice--dismissible'; $dismiss_button = ''; } if ( $options['icon'] ) { $notice_classes[] = 'jet-notice--extended'; $icon = '
' . $options['icon'] . '
'; } $wrapper_attributes = [ 'class' => $notice_classes, ]; if ( $options['id'] ) { $wrapper_attributes['data-notice_id'] = $options['id']; } ?>
>

$button_settings ) { if ( empty( $button_settings['variant'] ) && $index ) { $button_settings['variant'] = 'outline'; } if ( empty( $button_settings['text'] ) ) { continue; } //$button = new Button( $button_settings ); $this->print_button( $button_settings ); } ?>
[ 'jet-button' ], 'icon' => '', 'new_tab' => false, 'text' => '', 'type' => '', 'url' => '', 'variant' => '', 'before' => '', ]; $options = array_replace_recursive( $default_options, $options ); if ( empty( $options['text'] ) ) { return; } $html_tag = ! empty( $options['url'] ) ? 'a' : 'button'; $before = ''; $icon = ''; $attributes = []; if ( ! empty( $options['icon'] ) ) { $icon = ''; } $classes = $options['classes']; if ( ! empty( $options['type'] ) ) { $classes[] = 'jet-button--' . $options['type']; } if ( ! empty( $options['variant'] ) ) { $classes[] = 'jet-button--' . $options['variant']; } if ( ! empty( $options['before'] ) ) { $before = '' . wp_kses_post( $options['before'] ) . ''; } if ( ! empty( $options['url'] ) ) { $attributes['href'] = $options['url']; if ( $options['new_tab'] ) { $attributes['target'] = '_blank'; } } $attributes['class'] = $classes; $html = $before . '<' . $html_tag . ' ' . Utils::print_html_attributes( $attributes ) . '>'; $html .= $icon; $html .= '' . sanitize_text_field( $options['text'] ) . ''; $html .= ''; echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * @since 2.9.0 * @access public */ public function __construct() { add_action( 'admin_notices', [ $this, 'admin_notices' ], 20 ); } } modules/jet-dashboard/inc/plugin-manager.php000075500000073650151121477570015143 0ustar00get_registered_plugins(); if ( ! empty( $registered_plugins ) ) { foreach ( $registered_plugins as $plugin_file => $plugin_data ) { add_filter( 'in_plugin_update_message-' . $plugin_file , array( $this, 'in_plugin_update_message' ), 10, 2 ); } } /** * Need for test update - set_site_transient( 'update_plugins', null ); */ add_action( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) ); add_action( 'admin_init', array( $this, 'generate_register_plugin_data' ) ); add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 ); add_filter( 'plugin_row_meta', array( $this, 'plugin_row_meta' ), 10, 3 ); add_filter( 'http_request_args', array( $this, 'allow_unsafe_urls' ) ); add_action( 'activated_plugin', array( $this, 'activate_plugin_handle' ), 10, 2 ); add_action( 'wp_ajax_jet_dashboard_plugin_action', array( $this, 'plugin_action' ) ); add_action( 'wp_ajax_jet_dashboard_wizard_plugin_action', array( $this, 'wizard_plugin_action' ) ); } /** * [admin_init description] * @return [type] [description] */ public function generate_register_plugin_data() { $registered_plugins = Dashboard::get_instance()->get_registered_plugins(); if ( ! empty( $registered_plugins ) ) { foreach ( $registered_plugins as $plugin_file => $plugin_data ) { $plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_file ); $this->registered_plugins_data[ $plugin_file ] = array( 'name' => $plugin_info['Name'], 'author' => $plugin_info['Author'], 'plugin_url' => $plugin_info['PluginURI'], 'requires' => '5.2', 'tested' => '', 'banners' => array( 'high' => sprintf( 'https://account.crocoblock.com/free-download/images/jetbanners/%s.png', $plugin_data['slug'] ), 'low' => sprintf( 'https://account.crocoblock.com/free-download/images/jetbanners/%s.png', $plugin_data['slug'] ), ), 'version' => false, 'changelog' => false, 'slug' => $plugin_data['slug'], 'transient_key' => $plugin_data['slug'] . '_plugin_info_data' ); } } } /** * [plugins_api_filter description] * @param [type] $_data [description] * @param string $_action [description] * @param [type] $_args [description] * @return [type] [description] */ public function plugins_api_filter( $_data, $_action = '', $_args = null ) { if ( 'plugin_information' !== $_action ) { return $_data; } if ( ! isset( $_args->slug ) ) { return $_data; } $registered_plugin_data = false; foreach ( $this->registered_plugins_data as $plugin_file => $plugin_data ) { if ( $plugin_data['slug'] === $_args->slug ) { $registered_plugin_data = $plugin_data; break; } } if ( ! $registered_plugin_data ) { return $_data; } $plugin_api_data = get_site_transient( $registered_plugin_data['transient_key'] ); if ( empty( $plugin_api_data ) ) { $changelog_remote_response = Dashboard::get_instance()->data_manager->changelog_remote_query( $registered_plugin_data['slug'] ); if ( ! $changelog_remote_response ) { return $_data; } $plugin_api_data = new \stdClass(); $plugin_api_data->name = $registered_plugin_data['name']; $plugin_api_data->slug = $registered_plugin_data['slug']; $plugin_api_data->author = $registered_plugin_data['author']; $plugin_api_data->homepage = $registered_plugin_data['plugin_url']; $plugin_api_data->requires = $registered_plugin_data['requires']; $plugin_api_data->tested = $registered_plugin_data['tested']; $plugin_api_data->banners = $registered_plugin_data['banners']; $plugin_api_data->version = $changelog_remote_response->current_version; $plugin_api_data->sections = array( 'changelog' => $changelog_remote_response->changelog, ); // Expires in 1 day set_site_transient( $registered_plugin_data['transient_key'], $plugin_api_data, DAY_IN_SECONDS ); } $_data = $plugin_api_data; return $_data; } /** * [changelog_remote_query description] * @param [type] $slug [description] * @return [type] [description] */ public function changelog_remote_query( $slug ) { $response = wp_remote_get( sprintf( $this->jet_changelog_url, $slug ) ); if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != '200' ) { return false; } $response = json_decode( $response['body'] ); return $response; } /** * [plugin_row_meta description] * @param [type] $plugin_meta [description] * @param [type] $plugin_file [description] * @param [type] $plugin_data [description] * @return [type] [description] */ public function plugin_row_meta( $plugin_meta, $plugin_file, $plugin_data ) { if ( array_key_exists( $plugin_file, $this->registered_plugins_data ) && empty( $plugin_data['update'] ) ) { $plugin_meta['view-details'] = sprintf( '%s', esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $this->registered_plugins_data[ $plugin_file ]['slug'] . '&TB_iframe=true&width=600&height=550' ) ), esc_attr( sprintf( __( 'More information about %s', 'jet-tricks' ), $this->registered_plugins_data[ $plugin_file ]['name'] ) ), esc_attr( $this->registered_plugins_data[ $plugin_file ]['name'] ), 'View details' ); } return $plugin_meta; } /** * [activate_plugin_handle description] * @param [type] $plugin [description] * @param [type] $network_wide [description] * @return [type] [description] */ public function activate_plugin_handle( $plugin, $network_wide ) { $jet_plugin_list = $this->get_remote_jet_plugin_list(); $is_jet_plugin = array_search( $plugin, array_column( $jet_plugin_list, 'slug' ) ); if ( ! $is_jet_plugin ) { return false; } $query_url = add_query_arg( array( 'action' => 'plugin_activate_action', 'license' => Utils::get_plugin_license_key( $plugin ), 'plugin' => $plugin, 'site_url' => urlencode( Utils::get_site_url() ), ), Utils::get_api_url() ); wp_remote_post( $query_url, array( 'timeout' => 30, //'blocking' => false ) ); return false; } /** * [plugin_row_meta description] * @param [type] $plugin_meta [description] * @param [type] $plugin_file [description] * @param [type] $plugin_data [description] * @return [type] [description] */ public function in_plugin_update_message( $plugin_data, $response ) { if ( ! $response->package ) { echo sprintf( ' %2$s', Dashboard::get_instance()->get_dashboard_page_url( 'license-page', 'license-manager' ), 'Activate your license for automatic updates.' ); } } /** * Process update. * * @since 1.0.0 * @param object $data Update data. * @return object */ public function check_update( $data ) { if ( empty( $data ) ) { return false; } delete_site_transient( 'jet_dashboard_remote_jet_plugin_list' ); $registered_plugins = Dashboard::get_instance()->get_registered_plugins(); foreach ( $registered_plugins as $plugin_slug => $plugin_data ) { $new_update_version = $this->check_new_update_version( $plugin_data ); if ( $new_update_version ) { // Delete plugin api transient data if ( ! empty( $this->registered_plugins_data ) && isset( $this->registered_plugins_data[ $plugin_data['file'] ] ) ) { delete_site_transient( $this->registered_plugins_data[ $plugin_data['file'] ]['transient_key'] ); } $update = new \stdClass(); $update->slug = $plugin_data['slug']; $update->plugin = $plugin_data['file']; $update->new_version = $new_update_version; $update->url = false; $update->package = Utils::package_url( $plugin_data['file'] ); $data->response[ $plugin_data['file'] ] = $update; } } return $data; } /** * [check_update description] * @return [type] [description] */ public function check_new_update_version( $plugin_data = false ) { $remote_plugin_data = $this->get_remote_jet_plugin_list(); if ( ! $remote_plugin_data || ! is_array( $remote_plugin_data ) ) { return false; } $new_version = '1.0.0'; foreach ( $remote_plugin_data as $key => $plugin ) { if ( $plugin_data['file'] === $plugin['slug'] ) { $new_version = $plugin['version']; break; } } if ( version_compare( $plugin_data['version'], $new_version, '<' ) ) { return $new_version; } return false; } /** * Remote request to updater API. * * @since 1.0.0 * @return array|bool */ public function get_remote_jet_plugin_list() { $remote_jet_plugin_list = get_site_transient( 'jet_dashboard_remote_jet_plugin_list' ); if ( $remote_jet_plugin_list ) { return $remote_jet_plugin_list; } $query_url = add_query_arg( array( 'action' => 'get_plugins_data', ), Utils::get_api_url() ); $response = wp_remote_get( $query_url, array( 'timeout' => 30, ) ); if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != '200' ) { return false; } $response = json_decode( $response['body'], true ); if ( 'error' === $response['status'] ) { return false; } if ( ! isset( $response['data'] ) ) { return false; } $remote_jet_plugin_list = $response['data']; set_site_transient( 'jet_dashboard_remote_jet_plugin_list', $remote_jet_plugin_list, HOUR_IN_SECONDS * 24 ); return $remote_jet_plugin_list; } /** * [get_plugin_list description] * @return [type] [description] */ public function get_plugin_data_list() { $jet_plugin_list = $this->get_remote_jet_plugin_list(); $user_plugin_list = $this->get_user_plugins(); $registered_plugins = Dashboard::get_instance()->get_registered_plugins(); $plugins_list = []; if ( ! empty( $jet_plugin_list ) ) { foreach ( $jet_plugin_list as $key => $plugin_data ) { $plugin_slug = $plugin_data['slug']; if ( array_key_exists( $plugin_slug, $user_plugin_list ) ) { $plugin_data = wp_parse_args( $plugin_data, $user_plugin_list[ $plugin_slug ] ); } else { $plugin_data = wp_parse_args( $plugin_data, array( 'version' => $plugin_data['version'], 'currentVersion' => $plugin_data['version'], 'updateAvaliable' => false, 'isActivated' => false, 'isInstalled' => false, ) ); } $plugin_data['licenseControl'] = array_key_exists( $plugin_slug, $registered_plugins ) ? true : false; $plugin_data['usefulLinks'] = array_key_exists( $plugin_slug, $registered_plugins ) ? $registered_plugins[ $plugin_slug ]['plugin_links'] : array(); $plugins_list[ $plugin_data['slug'] ] = $plugin_data; } } return $plugins_list; } /** * [get_plugin_data description] * @return [type] [description] */ public function get_user_plugins() { if ( ! $this->user_plugins ) { if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $this->user_plugins = get_plugins(); } $plugin_list = array(); if ( $this->user_plugins ) { foreach ( $this->user_plugins as $plugin_file => $plugin_data ) { $current_version = $plugin_data['Version']; $latest_version = $this->get_latest_version( $plugin_file ); $plugin_list[ $plugin_file ] = array( 'version' => $latest_version, 'currentVersion' => $current_version, 'updateAvaliable' => version_compare( $latest_version, $current_version, '>' ), 'isActivated' => is_plugin_active( $plugin_file ), 'isInstalled' => true, ); } } return $plugin_list; } /** * [is_plugin_installed description] * @param [type] $plugin_file [description] * @param boolean $plugin_url [description] * @return boolean [description] */ public function get_user_plugin( $plugin_file = false ) { if ( ! $plugin_file ) { return false; } $user_plugins = $this->get_user_plugins(); if ( isset( $user_plugins[ $plugin_file ] ) ) { return $user_plugins[ $plugin_file ]; } return false; } /** * [get_installed_plugin_data description] * @param [type] $plugin [description] * @return [type] [description] */ public function get_installed_plugin_data( $plugin_file ) { if ( ! $this->user_plugins ) { if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $this->user_plugins = get_plugins(); } $plugin_data = $this->user_plugins[ $plugin_file ]; $current_version = $plugin_data['Version']; $latest_version = $this->get_latest_version( $plugin_file ); return array( 'version' => $latest_version, 'currentVersion' => $current_version, 'updateAvaliable' => version_compare( $latest_version, $current_version, '>' ), 'isActivated' => is_plugin_active( $plugin_file ), 'isInstalled' => true, ); } /** * Get latest version for passed plugin * * @param [type] $remote_plugin_data [description] * @return [type] [description] */ public function get_latest_version( $plugin_file ) { if ( ! $this->update_plugins ) { $this->update_plugins = get_site_transient( 'update_plugins' ); } $no_update = isset( $this->update_plugins->no_update ) ? $this->update_plugins->no_update : false; $to_update = isset( $this->update_plugins->response ) ? $this->update_plugins->response : false; if ( $to_update && ! empty( $to_update ) && array_key_exists( $plugin_file, $to_update ) ) { $version = $to_update[ $plugin_file ]->new_version; } elseif ( ! empty( $no_update ) && array_key_exists( $plugin_file, $no_update ) ) { $version = $no_update[ $plugin_file ]->new_version; } elseif ( array_key_exists( $plugin_file, $this->user_plugins ) ) { $version = $this->user_plugins[ $plugin_file ]['Version']; } else { $version = '1.0.0'; } return $version; } /** * [install_plugin description] * @param [type] $plugin [description] * @param boolean $plugin_url [description] * @return [type] [description] */ public function plugin_action() { $data = ( ! empty( $_POST['data'] ) ) ? $_POST['data'] : false; if ( ! $data ) { wp_send_json( array( 'status' => 'error', 'message' => $this->sys_messages['server_error'] ) ); } // Nonce checking here. The capability checking is in the appropriate methods below if ( ! isset( $data['nonce'] ) || ! wp_verify_nonce( $data['nonce'], 'jet-dashboard' ) ) { wp_send_json( [ 'status' => 'error', 'message' => __( 'Page has expired. Please reload this page.', 'jet-dashboard' ), ] ); } $action = $data['action']; $plugin = $data['plugin']; $version = isset( $data['version'] ) ? $data['version'] : false; switch ( $action ) { case 'activate': $this->activate_plugin( $plugin ); break; case 'deactivate': $this->deactivate_plugin( $plugin ); break; case 'install': $this->install_plugin( $plugin ); break; case 'update': $this->update_plugin( $plugin ); break; case 'rollback': $this->rollback_plugin( $plugin, $version ); break; } wp_send_json( array( 'status' => 'success', 'message' => 'Success', 'data' => [], ) ); } /** * [install_plugin description] * @param [type] $plugin [description] * @param boolean $plugin_url [description] * @return [type] [description] */ public function wizard_plugin_action() { $data = ( ! empty( $_POST['data'] ) ) ? $_POST['data'] : false; if ( ! $data ) { wp_send_json( array( 'status' => 'error', 'message' => $this->sys_messages['server_error'] ) ); } // Nonce checking here. The capability checking is in the appropriate methods below if ( ! isset( $data['nonce'] ) || ! wp_verify_nonce( $data['nonce'], 'jet-dashboard' ) ) { wp_send_json( [ 'type' => 'error', 'title' => __( 'Error', 'jet-dashboard' ), 'desc' => __( 'Server error. Stop cheating!!!', 'jet-dashboard' ), ] ); } $action = $data['action']; $plugin = $data['plugin']; switch ( $action ) { case 'install': $this->install_plugin( $plugin, 'https://account.crocoblock.com/free-download/crocoblock-wizard.zip' ); break; case 'activate': $this->activate_plugin( $plugin ); break; } wp_send_json( array( 'status' => 'error', 'message' => 'Server Error', 'data' => [], ) ); } /** * Performs plugin activation * * @param [type] $plugin [description] * @return [type] [description] */ public function activate_plugin( $plugin_file ) { $status = array(); if ( ! current_user_can( 'activate_plugins' ) ) { wp_send_json( array( 'status' => 'error', 'message' => 'Sorry, you are not allowed to install plugins on this site.' ) ); } if ( ! $plugin_file ) { wp_send_json( array( 'status' => 'error', 'message' => 'Plugin slug is required' ) ); } $activate = null; if ( ! is_plugin_active( $plugin_file ) ) { $activate = activate_plugin( $plugin_file ); } if ( is_wp_error( $activate ) ) { wp_send_json( array( 'status' => 'error', 'message' => $activate->get_error_message(), ) ); } wp_send_json( array( 'status' => 'success', 'message' => 'The plugin has been activated', 'data' => $this->get_installed_plugin_data( $plugin_file ), ) ); } /** * Performs plugin activation * * @param [type] $plugin [description] * @return [type] [description] */ public function deactivate_plugin( $plugin_file ) { $status = array(); if ( ! current_user_can( 'activate_plugins' ) ) { wp_send_json( array( 'status' => 'error', 'message' => 'Sorry, you are not allowed to install plugins on this site.' ) ); } if ( ! $plugin_file ) { wp_send_json( array( 'status' => 'error', 'message' => 'Plugin slug is required' ) ); } $deactivate_handler = null; if ( is_plugin_active( $plugin_file ) ) { $deactivate_handler = deactivate_plugins( $plugin_file ); } if ( is_wp_error( $deactivate_handler ) ) { wp_send_json( array( 'status' => 'error', 'message' => $deactivate_handler->get_error_message(), ) ); } wp_send_json( array( 'status' => 'success', 'message' => 'The plugin has been deactivated', 'data' => $this->get_installed_plugin_data( $plugin_file ), ) ); } /** * Perform plugin installtion by passed plugin slug and plugin package URL (optional) * * @param [type] $plugin [description] * @param boolean $plugin_url [description] * @return [type] [description] */ public function install_plugin( $plugin_file, $plugin_url = false ) { $status = array(); if ( ! current_user_can( 'install_plugins' ) ) { wp_send_json( array( 'status' => 'error', 'message' => 'Sorry, you are not allowed to install plugins on this site.' ) ); } if ( ! $plugin_file ) { wp_send_json( array( 'status' => 'error', 'message' => 'Plugin slug is required' ) ); } if ( ! Utils::is_site_activated() ) { wp_send_json( array( 'status' => 'error', 'message' => 'These licenses are invalid. Deactivate the license and activate it again.' ) ); } if ( ! $plugin_url ) { $package = Utils::package_url( $plugin_file ); } else { $package = $plugin_url; } include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); $skin = new \WP_Ajax_Upgrader_Skin(); $upgrader = new \Plugin_Upgrader( $skin ); $result = $upgrader->install( $package ); if ( is_wp_error( $result ) ) { $status['errorCode'] = $result->get_error_code(); $status['errorMessage'] = $result->get_error_message(); wp_send_json( array( 'status' => 'error', 'message' => $result->get_error_message(), 'data' => [], ) ); } elseif ( is_wp_error( $skin->result ) ) { $status['errorCode'] = $skin->result->get_error_code(); $status['errorMessage'] = $skin->result->get_error_message(); wp_send_json( array( 'status' => 'error', 'message' => $skin->result->get_error_message(), 'data' => [], ) ); } elseif ( $skin->get_errors()->get_error_code() ) { $status['errorMessage'] = $skin->get_error_messages(); wp_send_json( array( 'status' => 'error', 'message' => $skin->get_error_messages(), 'data' => [], ) ); } elseif ( is_null( $result ) ) { global $wp_filesystem; $status['errorMessage'] = 'Unable to connect to the filesystem. Please confirm your credentials.'; // Pass through the error from WP_Filesystem if one was raised. if ( $wp_filesystem instanceof \WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) { $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() ); } wp_send_json( array( 'status' => 'error', 'message' => $status['errorMessage'], 'data' => [], ) ); } wp_send_json( array( 'status' => 'success', 'message' => 'The plugin has been Installed', 'data' => $this->get_installed_plugin_data( $plugin_file ), ) ); } /** * [update_plugin description] * @param [type] $plugin_slug [description] * @return [type] [description] */ public function update_plugin( $plugin_file ) { if ( ! current_user_can( 'update_plugins' ) ) { wp_send_json( array( 'status' => 'error', 'message' => 'Sorry, you are not allowed to update plugins on this site.' ) ); } if ( ! $plugin_file ) { wp_send_json( array( 'status' => 'error', 'message' => 'Plugin slug is required' ) ); } if ( ! Utils::is_site_activated() ) { wp_send_json( array( 'status' => 'error', 'message' => 'These licenses are invalid. Deactivate the license and activate it again.' ) ); } $plugin = plugin_basename( sanitize_text_field( wp_unslash( $plugin_file ) ) ); $slug = dirname( $plugin ); $status = array( 'update' => 'plugin', 'slug' => $slug, 'oldVersion' => '', 'newVersion' => '', ); if ( 0 !== validate_file( $plugin ) ) { wp_send_json( array( 'status' => 'error', 'message' => 'Sorry, you are not allowed to update plugins for this site.', ) ); } $plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); wp_update_plugins(); $skin = new \WP_Ajax_Upgrader_Skin(); $upgrader = new \Plugin_Upgrader( $skin ); $result = $upgrader->bulk_upgrade( array( $plugin ) ); $upgrade_messages = []; if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { $upgrade_messages = $skin->get_upgrade_messages(); } if ( is_wp_error( $skin->result ) ) { wp_send_json( array( 'status' => 'error', 'message' => $skin->result->get_error_message(), 'debug' => $upgrade_messages, ) ); } elseif ( $skin->get_errors()->get_error_code() ) { wp_send_json( array( 'status' => 'error', 'message' => $skin->get_error_messages(), 'debug' => $upgrade_messages, ) ); } elseif ( is_array( $result ) && ! empty( $result[ $plugin ] ) ) { $plugin_update_data = current( $result ); /* * If the `update_plugins` site transient is empty (e.g. when you update * two plugins in quick succession before the transient repopulates), * this may be the return. * * Preferably something can be done to ensure `update_plugins` isn't empty. * For now, surface some sort of error here. */ if ( true === $plugin_update_data ) { wp_send_json( array( 'status' => 'error', 'message' => 'Plugin update failed.', 'debug' => $upgrade_messages, ) ); } $plugin_data = get_plugins( '/' . $result[ $plugin ]['destination_name'] ); $plugin_data = reset( $plugin_data ); wp_send_json( array( 'status' => 'success', 'message' => 'The plugin has been updated', 'data' => $this->get_installed_plugin_data( $plugin_file ), ) ); } elseif ( false === $result ) { global $wp_filesystem; $errorMessage = 'Unable to connect to the filesystem. Please confirm your credentials.'; // Pass through the error from WP_Filesystem if one was raised. if ( $wp_filesystem instanceof \WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) { $errorMessage = esc_html( $wp_filesystem->errors->get_error_message() ); } wp_send_json( array( 'status' => 'error', 'message' => $errorMessage, ) ); } wp_send_json( array( 'status' => 'error', 'message' => 'Plugin update failed.', ) ); } /** * [update_plugin_to_version description] * @param boolean $plugin_file [description] * @param boolean $version [description] * @return [type] [description] */ public function rollback_plugin( $plugin_file = false, $version = false ) { $status = array(); if ( ! current_user_can( 'install_plugins' ) ) { wp_send_json( array( 'status' => 'error', 'message' => 'Sorry, you are not allowed to install plugins on this site.' ) ); } if ( ! $plugin_file ) { wp_send_json( array( 'status' => 'error', 'message' => 'Plugin slug is required' ) ); } if ( ! Utils::is_site_activated() ) { wp_send_json( array( 'status' => 'error', 'message' => 'These licenses are invalid. Deactivate the license and activate it again.' ) ); } $package = Utils::package_url( $plugin_file ); include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); $skin = new \WP_Ajax_Upgrader_Skin(); $plugin_upgrader = new \Plugin_Upgrader( $skin ); $plugin_upgrader->init(); $plugin_upgrader->upgrade_strings(); // Get the URL to the zip file. $package = Utils::package_url( $plugin_file, $version ); add_filter( 'upgrader_pre_install', array( $plugin_upgrader, 'active_before' ), 10, 2 ); add_filter( 'upgrader_clear_destination', array( $plugin_upgrader, 'delete_old_plugin' ), 10, 4 ); add_filter( 'upgrader_post_install', array( $plugin_upgrader, 'active_after' ), 10, 2 ); add_action( 'upgrader_process_complete', 'wp_clean_plugins_cache', 9, 0 ); $result = $plugin_upgrader->run( array( 'package' => $package, 'destination' => WP_PLUGIN_DIR, 'clear_destination' => true, 'clear_working' => true, 'hook_extra' => array( 'plugin' => $plugin_file, 'type' => 'plugin', 'action' => 'update', ), ) ); remove_action( 'upgrader_process_complete', 'wp_clean_plugins_cache', 9 ); remove_filter( 'upgrader_pre_install', array( $plugin_upgrader, 'active_before' ) ); remove_filter( 'upgrader_clear_destination', array( $plugin_upgrader, 'delete_old_plugin' ) ); remove_filter( 'upgrader_post_install', array( $plugin_upgrader, 'active_after' ) ); // Force refresh of plugin update information. wp_clean_plugins_cache( true ); $upgrade_messages = []; if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { $upgrade_messages = $skin->get_upgrade_messages(); } if ( is_wp_error( $skin->result ) ) { wp_send_json( array( 'status' => 'error', 'message' => $skin->result->get_error_message(), 'debug' => $upgrade_messages, ) ); } elseif ( $skin->get_errors()->get_error_code() ) { wp_send_json( array( 'status' => 'error', 'message' => $skin->get_error_messages(), 'debug' => $upgrade_messages, ) ); } elseif ( $result ) { wp_send_json( array( 'status' => 'success', 'message' => 'Plugin version has been changed', 'data' => $this->get_installed_plugin_data( $plugin_file ), ) ); } elseif ( false === $result ) { global $wp_filesystem; $errorMessage = 'Unable to connect to the filesystem. Please confirm your credentials.'; // Pass through the error from WP_Filesystem if one was raised. if ( $wp_filesystem instanceof \WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) { $errorMessage = esc_html( $wp_filesystem->errors->get_error_message() ); } wp_send_json( array( 'status' => 'error', 'message' => $errorMessage, ) ); } wp_send_json( array( 'status' => 'error', 'message' => 'Plugin update failed.', ) ); } /** * [allow_unsafe_urls description] * @param [type] $args [description] * @return [type] [description] */ public function allow_unsafe_urls( $args ) { if ( isset( $_REQUEST['action'] ) && 'jet_dashboard_plugin_action' === $_REQUEST['action'] ) { $args['reject_unsafe_urls'] = false; } return $args; } }modules/jet-dashboard/inc/license-manager.php000075500000034556151121477570015271 0ustar00sys_messages = apply_filters( 'jet_dashboard_license_sys_messages', array( 'internal' => 'Internal error. Please, try again later', 'server_error' => 'Server error. Please, try again later', ) ); add_action( 'wp_ajax_jet_license_action', array( $this, 'jet_license_action' ) ); add_action( 'init', array( $this, 'maybe_modify_tm_license_data' ), -997 ); $this->license_expire_check(); $this->license_to_day_expire_check(); $this->maybe_theme_core_license_exist(); $this->maybe_modify_license_data(); $this->maybe_site_not_activated(); } /** * Proccesing subscribe form ajax * * @return void */ public function jet_license_action() { $data = ( ! empty( $_POST['data'] ) ) ? $_POST['data'] : false; if ( ! $data ) { wp_send_json( array( 'status' => 'error', 'code' => 'server_error', 'message' => $this->sys_messages['server_error'], 'data' => [], ) ); } if ( ! isset( $data['nonce'] ) || ! wp_verify_nonce( $data['nonce'], 'jet-dashboard' ) ) { wp_send_json( [ 'status' => 'error', 'code' => 'server_error', 'message' => __( 'Page has expired. Please reload this page.', 'jet-dashboard' ), 'data' => [], ] ); } if ( ! current_user_can( 'manage_options' ) ) { wp_send_json( [ 'status' => 'error', 'code' => 'server_error', 'message' => __( 'Sorry, you are not allowed to manage license data on this site.', 'jet-dashboard' ), 'data' => [], ] ); } $license_action = $data['action']; $license_key = $data['license']; if ( empty( $license_key ) && isset( $data['plugin'] ) ) { $license_key = Utils::get_plugin_license_key( $data['plugin'] ); } $responce = $this->license_action_query( $license_action . '_license', $license_key ); $responce_data = []; if ( 'error' === $responce['status'] ) { wp_send_json( array( 'status' => 'error', 'code' => 'server_error', 'message' => $responce['message'], 'data' => [], ) ); } if ( isset( $responce['data'] ) ) { $responce_data = $responce['data']; } if ( 'activate' === $license_action && empty( $responce_data ) ) { wp_send_json( array( 'status' => 'error', 'code' => 'server_error', 'message' => 'Server Error. Try again later', 'data' => [], ) ); } $responce_data = $this->maybe_modify_responce_data( $responce_data ); $responce_data = $this->maybe_modify_tm_responce_data( $responce_data ); switch ( $license_action ) { case 'activate': $this->update_license_list( $license_key, $responce_data ); break; case 'deactivate': $license_list = Utils::get_license_data( 'license-list', [] ); unset( $license_list[ $license_key ] ); Utils::set_license_data( 'license-list', $license_list ); break; } $responce_data['license_key'] = $license_key; set_site_transient( 'update_plugins', null ); wp_send_json( array( 'status' => 'success', 'code' => $responce['code'], 'message' => $responce['message'], 'data' => $responce_data, ) ); } /** * @param $responce * @return array|mixed */ public function maybe_modify_responce_data( $responce = array() ) { if ( empty( $responce ) ) { return $responce; } if ( isset( $responce['sites'] ) && ! empty( $responce['sites'] ) ) { $responce['sites'] = []; } return $responce; } /** * [maybe_tm_modify_data description] * @param array $responce [description] * @return [type] [description] */ public function maybe_modify_tm_responce_data( $responce = array() ) { if ( empty( $responce ) ) { return $responce; } if ( ! isset( $responce['type'] ) ) { return $responce; } if ( 'tm' === $responce['type'] ) { $responce_plugins = $responce['plugins']; $user_plugins = Dashboard::get_instance()->plugin_manager->get_user_plugins(); $tm_plugin_list = array(); foreach ( $responce_plugins as $plugin_file => $plugin_data ) { if ( array_key_exists( $plugin_file, $user_plugins ) ) { $tm_plugin_list[ $plugin_file ] = $plugin_data; } } if ( ! empty( $tm_plugin_list ) ) { $responce['plugins'] = $tm_plugin_list; return $responce; } } return $responce; } /** * [update_license_list description] * @param boolean $responce [description] * @return [type] [description] */ public function update_license_list( $license_key = '', $responce = false ) { $license_list = Utils::get_license_data( 'license-list', [] ); $license_list[ $responce['license'] ] = array( 'licenseStatus' => 'active', 'licenseKey' => $responce['license'], 'licenseDetails' => $responce, ); Utils::set_license_data( 'license-list', $license_list ); } /** * Remote request to updater API. * * @since 1.0.0 * @return array|bool */ public function license_action_query( $action = '', $license = '' ) { $query_url = add_query_arg( array( 'action' => $action, 'license' => $license, 'site_url' => urlencode( Utils::get_site_url() ), ), Utils::get_api_url() ); $response = wp_remote_get( $query_url, array( 'timeout' => 60, ) ); if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != '200' ) { return false; } return json_decode( $response['body'], true ); } /** * [license_expire_check description] * @return [type] [description] */ public function license_expire_check() { $jet_dashboard_license_expire_check = get_site_transient( 'jet_dashboard_license_expire_check' ); if ( $jet_dashboard_license_expire_check ) { return false; } Utils::license_data_expire_sync(); set_site_transient( 'jet_dashboard_license_expire_check', 'true', HOUR_IN_SECONDS * 12 ); } /** * [license_to_day_expire_check description] * @return [type] [description] */ public function license_to_day_expire_check() { $primary_license_data = $this->get_primary_license_data(); $expire = $primary_license_data['expire']; if ( Utils::license_expired_check( $expire, 30 ) ) { Dashboard::get_instance()->notice_manager->register_notice( array( 'id' => '30days-to-license-expire', 'page' => 'welcome-page', 'preset' => 'alert', 'type' => 'danger', 'title' => esc_html__( 'License expires soon!', 'jet-dashboard' ), 'message' => esc_html__( 'Your primary license will expire in 30 days. You can renew you current licese in your crocoblock account', 'jet-dashboard' ), 'buttons' => array( array( 'label' => esc_html__( 'Go to account', 'jet-dashboard' ), 'url' => 'https://account.crocoblock.com/', 'style' => 'accent', ) ), ) ); } } /** * @return bool */ public function is_sublicense() { $primary_license_data = $this->get_primary_license_data(); if ( isset( $primary_license_data['is_sublicense'] ) && $primary_license_data['is_sublicense'] ) { return true; } return false; } /** * [get_primary_license_data description] * @return [type] [description] */ public function get_primary_license_data() { $license_list = array_values( Utils::get_license_list() ); $license_type_map = array( 'crocoblock', 'tm', 'envato', ); foreach ( $license_type_map as $key => $license_type ) { $filtered_license_type = array_filter( $license_list, function( $license_data ) use ( $license_type ) { $license_details = $license_data[ 'licenseDetails' ]; return $license_details['type'] === $license_type; } ); if ( ! empty( $filtered_license_type ) ) { break; } } $product_category_map = array( 'lifetime', 'all-inclusive', 'plugin-set', 'theme-plugin-bundle', 'single-plugin', ); foreach ( $product_category_map as $key => $product_category ) { $filtered = array_filter( $filtered_license_type, function( $license_data ) use ( $product_category ) { $license_details = $license_data[ 'licenseDetails' ]; $license_product = isset( $license_details['product_category'] ) ? $license_details['product_category'] : ''; return $license_product === $product_category || empty( $license_product ); } ); if ( ! empty( $filtered ) ) { break; } } if ( empty( $filtered ) ) { return array( 'key' => '', 'product' => '', 'type' => '', 'expire' => '', 'is_sublicense' => false, ); } $filtered_license = array_values( $filtered )[0]; if ( ! isset( $filtered_license['licenseDetails'] ) ) { return array( 'key' => '', 'product' => '', 'type' => '', 'expire' => '', 'is_sublicense' => false, ); } return array( 'key' => $filtered_license['licenseDetails']['license'], 'product' => isset( $filtered_license['licenseDetails']['product_category'] ) ? $filtered_license['licenseDetails']['product_category'] : '', 'type' => $filtered_license['licenseDetails']['type'], 'expire' => $filtered_license['licenseDetails']['expire'], 'is_sublicense' => isset( $filtered_license['licenseDetails']['is_sublicense'] ) ? $filtered_license['licenseDetails']['is_sublicense'] : false, ); } /** * @return void */ public function maybe_modify_license_data() { $license_list = Utils::get_license_data( 'license-list', array() ); if ( empty( $license_list ) ) { return; } foreach ( $license_list as $license_key => $license_data ) { if ( ! isset( $license_data['licenseDetails'] ) ) { continue; } $license_details = $license_data['licenseDetails']; if ( isset( $license_details['sites'] ) ) { $license_list[ $license_key ]['licenseDetails']['sites'] = []; } if ( ! isset( $license_details['site_url'] ) ) { $license_list[ $license_key ]['licenseDetails']['site_url'] = strtolower( Utils::get_site_url() ); } } Utils::set_license_data( 'license-list', $license_list ); } /** * [maybe_theme_core_license_exist description] * @return [type] [description] */ public function maybe_theme_core_license_exist() { $jet_theme_core_key = get_option( 'jet_theme_core_license', false ); if ( ! $jet_theme_core_key ) { return false; } $jet_theme_core_license_sync = get_option( 'jet_theme_core_sync', 'false' ); if ( filter_var( $jet_theme_core_license_sync, FILTER_VALIDATE_BOOLEAN ) ) { return false; } $license_list = Utils::get_license_data( 'license-list', [] ); if ( array_key_exists( $jet_theme_core_key, $license_list ) ) { return false; } $responce = $this->license_action_query( 'activate_license', $jet_theme_core_key ); $responce_data = isset( $responce['data'] ) ? $responce['data'] : []; $license_list[ $jet_theme_core_key ] = array( 'licenseStatus' => 'active', 'licenseKey' => $jet_theme_core_key, 'licenseDetails' => $responce_data, ); update_option( 'jet_theme_core_sync', 'true' ); if ( 'error' === $responce['status'] ) { Utils::set_license_data( 'license-list', $license_list ); return false; } Utils::set_license_data( 'license-list', $license_list ); } /** * [maybe_site_not_activated description] * @return [type] [description] */ public function maybe_site_not_activated() { $license_sites = Utils::get_license_site_url(); if ( empty( $license_sites ) ) { Dashboard::get_instance()->notice_manager->register_notice( array( 'id' => 'license-not-activated', 'page' => [ 'license-page', 'welcome-page' ], 'preset' => 'alert', 'type' => 'danger', 'title' => esc_html__( 'The site is not activated', 'jet-dashboard' ), 'message' => esc_html__( 'Your license key is not activated for this site. Go to the license manager and activate your key', 'jet-dashboard' ), 'buttons' => array( array( 'label' => esc_html__( 'Activate', 'jet-dashboard' ), 'url' => add_query_arg( array( 'page' => 'jet-dashboard-license-page', 'subpage' => 'license-manager' ), admin_url( 'admin.php' ) ), 'style' => 'accent', ) ), ) ); return; } if ( ! Utils::is_site_activated() ) { Dashboard::get_instance()->notice_manager->register_notice( array( 'id' => 'site-not-activated', 'page' => [ 'license-page', 'welcome-page' ], 'preset' => 'alert', 'type' => 'danger', 'title' => esc_html__( 'This site is not activated', 'jet-dashboard' ), 'message' => esc_html__( 'This site is not activated for this license. Go to the license manager deactivate your license and activate your key again', 'jet-dashboard' ), 'buttons' => array( array( 'label' => esc_html__( 'Activate', 'jet-dashboard' ), 'url' => add_query_arg( array( 'page' => 'jet-dashboard-license-page', 'subpage' => 'license-manager' ), admin_url( 'admin.php' ) ), 'style' => 'accent', ) ), ) ); } } /** * [maybe_tm_license_pluging_sync description] * @return [type] [description] */ public function maybe_modify_tm_license_data() { $is_modify_tm_license_data = get_option( 'jet_is_modify_tm_license_data', 'false' ); if ( filter_var( $is_modify_tm_license_data, FILTER_VALIDATE_BOOLEAN ) ) { return false; } $license_list = Utils::get_license_data( 'license-list', [] ); if ( $license_list && ! empty( $license_list ) ) { $user_plugins = Dashboard::get_instance()->plugin_manager->get_user_plugins(); foreach ( $license_list as $license_key => $license_data ) { $license_details = $license_data['licenseDetails']; if ( ! empty( $license_details ) && 'tm' === $license_details['type'] ) { $license_plugins = $license_details['plugins']; $tm_plugin_list = array(); foreach ( $license_plugins as $plugin_file => $plugin_data ) { if ( array_key_exists( $plugin_file, $user_plugins ) ) { $tm_plugin_list[ $plugin_file ] = $plugin_data; } } $license_list[ $license_key ]['licenseDetails']['plugins'] = $tm_plugin_list; } } Utils::set_license_data( 'license-list', $license_list ); update_option( 'jet_is_modify_tm_license_data', 'true' ); } } } modules/jet-dashboard/inc/data-manager.php000075500000016313151121477570014547 0ustar00dashboard_config_remote_query( 'all-config' ); if ( ! $all_config_data ) { return false; } // Expires in 1 day set_site_transient( 'jet-dashboard-all-config-data', $all_config_data, DAY_IN_SECONDS ); } if ( ! empty( $key ) && isset( $all_config_data[ $key ] ) ) { return $all_config_data[ $key ]; } return $all_config_data; } /** * [get_dashboard_page_config description] * @param boolean $page [description] * @return [type] [description] */ public function get_dashboard_page_config( $page = false, $subpage = false ) { $dashboard_config = $this->get_dashboard_config(); if ( ! isset( $dashboard_config['pagesConfig'] ) ) { return false; } $page_config = false; if ( is_array( $dashboard_config['pagesConfig'] ) ) { if ( $subpage ) { foreach( $dashboard_config['pagesConfig'] as $page_data ) { if ( $subpage === $page_data['slug'] && $page === $page_data['parent-slug'] ) { $page_config = $page_data; break; } } } if ( ! $page_config ) { foreach( $dashboard_config['pagesConfig'] as $page_data ) { if ( $page === $page_data['slug'] ) { $page_config = $page_data; break; } } } } return $page_config; } /** * [changelog_remote_query description] * @param [type] $slug [description] * @return [type] [description] */ public function dashboard_config_remote_query( $slug ) { $response = wp_remote_get( sprintf( $this->jet_dashboard_config_url, $slug ), array( 'timeout' => 60, ) ); if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != '200' ) { return false; } $response = json_decode( $response['body'], true ); return $response; } /** * [changelog_remote_query description] * @param [type] $slug [description] * @return [type] [description] */ public function changelog_remote_query( $slug ) { $response = wp_remote_get( sprintf( $this->jet_changelog_url, $slug ) ); if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != '200' ) { return false; } $response = json_decode( $response['body'] ); return $response; } /** * [get_theme_info description] * @return [type] [description] */ public function get_theme_info() { $style_parent_theme = wp_get_theme( get_template() ); return apply_filters( 'jet-dashboard/data-manager/theme-info', array( 'name' => $style_parent_theme->get('Name'), 'theme' => strtolower( preg_replace('/\s+/', '', $style_parent_theme->get('Name') ) ), 'version' => $style_parent_theme->get('Version'), 'author' => $style_parent_theme->get('Author'), 'authorSlug' => strtolower( preg_replace('/\s+/', '', $style_parent_theme->get('Author') ) ), ) ); } /** * [jet_dashboard_debug_action description] * @return [type] [description] */ public function get_service_action_list() { return array( array( 'label' => 'Check Plugins Update', 'value' => 'check-plugin-update', ), array( 'label' => 'Delete License Data', 'value' => 'delete-license-data', ), array( 'label' => 'License Expire Check', 'value' => 'license-expire-check', ), array( 'label' => 'Modify Tm License Data', 'value' => 'modify-tm-license-data', ), array( 'label' => 'Reset Transient Cache', 'value' => 'reset-transient-cache', ), ); } /** * Proccesing subscribe form ajax * * @return void */ public function jet_dashboard_debug_action() { $data = ( ! empty( $_POST['data'] ) ) ? $_POST['data'] : false; if ( ! $data || ! isset( $data['action'] ) ) { wp_send_json( array( 'status' => 'error', 'code' => 'server_error', 'message' => $this->sys_messages['server_error'], 'data' => [], ) ); } if ( ! isset( $data['nonce'] ) || ! wp_verify_nonce( $data['nonce'], 'jet-dashboard' ) ) { wp_send_json( [ 'status' => 'error', 'code' => 'server_error', 'message' => __( 'Page has expired. Please reload this page.', 'jet-dashboard' ), 'data' => [], ] ); } if ( ! current_user_can( 'manage_options' ) ) { wp_send_json( [ 'status' => 'error', 'code' => 'server_error', 'message' => __( 'Sorry, you are not allowed to do that on this site.', 'jet-dashboard' ), 'data' => [], ] ); } $license_action = $data['action']; switch ( $license_action ) { case 'check-plugin-update': delete_site_transient( 'update_plugins' ); wp_send_json( array( 'status' => 'success', 'code' => 'plugin_update_cheking', 'message' => 'Plugins Update Checked', 'data' => [], ) ); break; case 'delete-license-data': Utils::set_license_data( 'license-list', [] ); wp_send_json( array( 'status' => 'success', 'code' => 'license_deleted', 'message' => 'License data has been deleted', 'data' => [], ) ); break; case 'license-expire-check': delete_site_transient( 'jet_dashboard_license_expire_check' ); wp_send_json( array( 'status' => 'success', 'code' => 'transient_deleted', 'message' => 'License Expire Checked', 'data' => [], ) ); break; case 'modify-tm-license-data': update_option( 'jet_is_modify_tm_license_data', 'false' ); wp_send_json( array( 'status' => 'success', 'code' => 'transient_deleted', 'message' => 'Tm license modified', 'data' => [], ) ); break; case 'reset-transient-cache': delete_site_transient( 'jet-dashboard-all-config-data' ); delete_site_transient( 'jet_dashboard_remote_jet_plugin_list' ); delete_site_transient( 'kava_theme_data' ); delete_site_transient( 'update_themes' ); delete_site_transient( 'jet_core_theme_data' ); wp_send_json( array( 'status' => 'success', 'code' => 'transient_deleted', 'message' => 'Transient Cache Deleted', 'data' => [], ) ); break; default: wp_send_json( array( 'status' => 'error', 'code' => 'action_not_found', 'message' => 'Action Not Found', 'data' => [], ) ); break; } exit; } } modules/jet-dashboard/inc/wp-dashboard-manager.php000075500000025657151121477570016224 0ustar00 -1, 'label' => 'Crocoblock Section' ) ), $positions ); } ); add_filter( 'jet-engine/tools/default-menu-position', function() { return -1; } ); } /** * @return void */ public function modify_admin_menu_order() { global $menu; $first_index = $last_index = $this->first_index; $first_plugin_index = $last_plugin_index = $this->first_plugin_index; $first_post_type_index = $last_post_type_index = $this->first_post_type_index; $first_cct_index = $last_cct_index = $this->first_cct_index; $first_options_pages_index = $last_options_pages_index = $this->first_options_pages_index; $is_jet_plugin_before_separator = false; $is_jet_engine_post_type_separator = false; $is_jet_engine_cct_separator = false; $is_jet_engine_options_pages_separator = false; $tmpmenu = $menu; foreach ( $tmpmenu as $index => $item_data ) { if ( empty( $item_data[2] ) ) { continue; } if ( 'jet-dashboard' === $item_data[2] ) { unset( $menu[ $index ] ); $menu[ '' . $first_index ] = $item_data; } $is_jet_plugin = $this->is_jet_plugin( $item_data ); if ( $is_jet_plugin ) { if ( ! $is_jet_plugin_before_separator ) { $last_plugin_index = $last_plugin_index + 0.00001; $last_plugin_index = number_format( $last_plugin_index, 5 ); $last_index = $last_plugin_index; } $is_jet_plugin_before_separator = true; if ( $index < $first_plugin_index || $index > $last_plugin_index ) { unset( $menu[ $index ] ); $item_data[4] = $item_data[4] . ' jet-plugin'; $menu[ '' . $last_plugin_index ] = $item_data; $this->add_plugin_index_data( $last_plugin_index, $item_data[2] ); $last_plugin_index = $last_plugin_index + 0.00001; $last_plugin_index = number_format( $last_plugin_index, 5 ); $last_index = $last_plugin_index; } } if ( function_exists( 'jet_engine' ) && method_exists(jet_engine(), 'get_instances' ) ) { $is_jet_engine_post_type = $this->is_jet_engine_post_type( $item_data ); if ( $is_jet_engine_post_type ) { $is_jet_engine_post_type_separator = true; if ( $index < $first_post_type_index || $index > $last_post_type_index ) { unset( $menu[ $index ] ); $item_data[4] = $item_data[4] . ' jet-engine-post-type'; $menu[ '' . $last_post_type_index ] = $item_data; $this->post_type_indexes[] = $last_post_type_index; $last_post_type_index = $last_post_type_index + 0.00001; $last_post_type_index = number_format( $last_post_type_index, 5 ); $last_index = $last_post_type_index; } } $is_jet_engine_cct = $this->is_jet_engine_cct( $item_data ); if ( $is_jet_engine_cct ) { $is_jet_engine_cct_separator = true; if ( $index < $first_cct_index || $index > $last_cct_index ) { unset( $menu[ $index ] ); $item_data[4] = $item_data[4] . ' jet-engine-cct'; $menu[ '' . $last_cct_index ] = $item_data; $this->cct_indexes[] = $last_cct_index; $last_cct_index = $last_cct_index + 0.00001; $last_cct_index = number_format( $last_cct_index, 5 ); $last_index = $last_cct_index; } } $is_jet_engine_options_page = $this->is_jet_options_page( $item_data ); if ( $is_jet_engine_options_page ) { $is_jet_engine_options_pages_separator = true; if ( $index < $last_options_pages_index || $index > $last_options_pages_index ) { unset( $menu[ $index ] ); $item_data[4] = $item_data[4] . ' jet-engine-options-page'; $menu[ '' . $last_options_pages_index ] = $item_data; $this->options_pages_indexes[] = $last_options_pages_index; $last_options_pages_index = $last_options_pages_index + 0.00001; $last_options_pages_index = number_format( $last_options_pages_index, 5 ); $last_index = $last_options_pages_index; } } } } if ( $is_jet_plugin_before_separator ) { $menu[ '' . $first_plugin_index ] = array( '', 'read', 'separator-croco-plugins-before', '', 'wp-menu-separator separator-croco separator-croco--plugins-before' ); } if ( $is_jet_engine_post_type_separator ) { $menu[ '' . $last_plugin_index ] = array( '', 'read', 'separator-croco-post-type-before', '', 'wp-menu-separator separator-croco separator-croco--post-type-before' ); } if ( $is_jet_engine_cct_separator ) { $menu[ '' . $last_post_type_index ] = array( '', 'read', 'separator-croco-cct-before', '', 'wp-menu-separator separator-croco separator-croco--cct-before' ); } if ( $is_jet_engine_options_pages_separator ) { $menu[ '' . $last_cct_index ] = array( '', 'read', 'separator-croco-options-pages-before', '', 'wp-menu-separator separator-croco separator-croco--options-pages-before' ); } if ( $is_jet_plugin_before_separator || $is_jet_engine_post_type_separator || $is_jet_engine_cct_separator || $is_jet_engine_options_pages_separator ) { $menu[ '' . $this->last_index ] = array( '', 'read', 'separator-croco-after', '', 'wp-menu-separator separator-croco separator-croco--after' ); } } /** * @return array */ public function get_plugin_indexes() { return $this->plugin_indexes; } /** * @param $index * @param $data * @return void */ public function add_plugin_index_data( $index = false, $slug = '' ) { $this->plugin_indexes[ '' . $index ] = $slug; } /** * @return array */ public function get_post_type_indexes() { return $this->post_type_indexes; } /** * @return array */ public function get_cct_indexes() { return $this->cct_indexes; } /** * @return string[] */ public function get_plugin_slugs () { $default_plugin_slugs = [ 'jet-elements', 'jet-tabs', 'jet-reviews', 'jet-menu', 'jet-blog', 'jet-blocks', 'jet-tricks', 'jet-smart-filters', 'jet-popup', 'jet-search', 'jet-woo-builder', 'jet-woo-product-gallery', 'jet-compare-wishlist', 'jet-engine', 'jet-abaf-bookings', 'jet-style-manager', 'jet-apb-appointments', 'jet-theme-core', 'jet-form-builder', ]; return array_merge( $this->additional_plugins, $default_plugin_slugs ); } /** * @param $slug * @return void */ public function add_additional_plugin( $slug = false ) { if ( ! $slug ) { return; } $this->additional_plugins[] = $slug; } /** * @param $page_title * @param $menu_title * @param $capability * @param $menu_slug * @param $callback * @param $icon_url * @return void */ public function add_plugin_page( $page_title = false, $menu_title = false, $capability = '', $menu_slug = '', $callback = '', $icon_url = '' ) { $plugin_indexes = $this->get_plugin_indexes(); if ( empty( $plugin_indexes ) ) { $index = $this->first_plugin_index; } else { $index = array_key_last( $plugin_indexes ); } $this->add_additional_plugin( $menu_slug ); add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $callback, $icon_url ); } /** * @param $item_data * @return bool */ public function is_jet_plugin( $item_data ) { $plugin_slugs = $this->get_plugin_slugs(); foreach ( $plugin_slugs as $plugin_slug ) { if ( in_array( str_replace( 'edit.php?post_type=', '', $item_data[2] ), $plugin_slugs ) ) { return true; } } return false; } /** * @param $item_data * @return bool */ public function is_jet_engine_post_type( $item_data ) { $post_types_list = $this->get_allowed_post_types(); if ( empty( $post_types_list ) ) { return false; } $check_post_type = str_replace( 'edit.php?post_type=', '', $item_data[2] ); if ( $check_post_type && in_array( $check_post_type, $post_types_list ) ) { return true; } else { return false; } } /** * @return array|mixed|null */ public function get_allowed_post_types() { if ( null !== $this->allowed_post_types ) { return $this->allowed_post_types; } $post_types = jet_engine()->get_instances( 'post-type' ); return $this->allowed_post_types = array_filter( array_map( function( $item ) { if ( isset( $item['menu_position'] ) && -1 == $item['menu_position'] ) { return $item['slug']; } else { return false; } }, $post_types ) ); } /** * @param $item_d * @return bool */ public function is_jet_engine_cct( $item_data ) { if ( ! str_contains( $item_data[2], 'jet-cct-' ) ) { return false; } $cct_slug = str_replace( 'jet-cct-', '', $item_data[2] ); $allowed_cct = $this->get_allowed_cct(); return in_array( $cct_slug, $allowed_cct ); } /** * @return array|mixed|null */ public function get_allowed_cct() { if ( null !== $this->allowed_cct ) { return $this->allowed_cct; } $cct = jet_engine()->get_instances( 'custom-content-type' ); return $this->allowed_cct = array_filter( array_map( function( $item ) { if ( isset( $item['args']['position'] ) && -1 == $item['args']['position'] ) { return $item['args']['slug']; } else { return false; } }, $cct ) ); } /** * @param $item_data * @return void */ public function is_jet_options_page( $item_data ) { // if ( ! str_contains( $item_data[2], '-options-page' ) ) { // return false; // } $allowed_options_pages = $this->get_allowed_options_pages(); return in_array( $item_data[2], $allowed_options_pages ); } /** * @return array|mixed|null */ public function get_allowed_options_pages() { if ( null !== $this->allowed_options_pages ) { return $this->allowed_options_pages; } $options_pages = jet_engine()->get_instances( 'options-page' ); return $this->allowed_options_pages = array_filter( array_map( function( $item ) { if ( isset( $item['position'] ) && -1 == $item['position'] ) { return $item['slug']; } else { return false; } }, $options_pages ) ); } }modules/jet-dashboard/views/common/alert-item.php000075500000002252151121477570016142 0ustar00
{{ button.label }}
modules/jet-dashboard/views/common/before-component.php000075500000000402151121477570017334 0ustar00
modules/jet-dashboard/views/common/inner-component.php000075500000000401151121477570017204 0ustar00
modules/jet-dashboard/views/common/before-content.php000075500000000400151121477570017002 0ustar00
modules/jet-dashboard/views/common/header.php000075500000002571151121477570015333 0ustar00 modules/jet-dashboard/views/common/banner.php000075500000001670151121477570015347 0ustar00
modules/jet-dashboard/views/common/alert-list.php000075500000000320151121477570016151 0ustar00
modules/jet-dashboard/views/common/before-sidebar.php000075500000000400151121477570016741 0ustar00
modules/jet-dashboard/views/common/after-sidebar.php000075500000000377151121477570016615 0ustar00
modules/jet-dashboard/views/common/sidebar.php000075500000012040151121477570015504 0ustar00 modules/jet-dashboard/views/common/after-component.php000075500000000401151121477570017172 0ustar00
modules/jet-dashboard/views/common/dashboard.php000075500000004036151121477570016030 0ustar00
Service Actions
Go
modules/jet-dashboard/views/license/plugin-item-avaliable.php000075500000001576151121477570020411 0ustar00
{{ pluginData.name }}
Install
modules/jet-dashboard/views/license/plugin-item-more.php000075500000001065151121477570017424 0ustar00

{{ pluginData.desc }}

Get Plugin
modules/jet-dashboard/views/license/main.php000075500000027262151121477570015165 0ustar00

Ooops!

modules/jet-dashboard/views/license/plugin-item-installed.php000075500000013107151121477570020441 0ustar00
{{ pluginData.name }} {{ pluginData.currentVersion }} Change Version
Your plugin is up to date
Version {{pluginData.version}} available Update Now
Activate License Deactivate License Activate Plugin Deactivate Plugin
{{ pluginData.name }} version rollback

Warning: Please backup your database before making the rollback.

Reinstall version {{ rollbackVersion }}
modules/jet-dashboard/views/license/license-item.php000075500000010717151121477570016614 0ustar00

{{ maskedLicenseKey }}
{{ productName }}
{{ licenseStatus }}
{{ licenseType }}
{{ expireDate }}
{{ plugin.name }}
modules/jet-dashboard/views/license/responce-info.php000075500000002315151121477570017000 0ustar00
{{ title }}

You have reached the limit of sites available for license activation. Your activation limit is {{ activationLimit }}

You have already activated current license on these sites:

If you want to activate a license on this site, you should deactivate the license on the sites where the license has been already activated.

Also, we provide an upgrade option that will allow you to get all Jet Plugins for unlimited websites. Update Now

modules/jet-dashboard/views/settings/main.php000075500000000767151121477570015404 0ustar00
modules/jet-dashboard/views/settings/plugin-settings-toggle.php000075500000002162151121477570021062 0ustar00
modules/jet-dashboard/views/upsale/main.php000075500000012504151121477570015025 0ustar00
modules/jet-dashboard/views/welcome/main.php000075500000037052151121477570015174 0ustar00
{{ updatePluginCount }}
{{ licenceItem.licenseDetails.product_name }}
modules/jet-dashboard/views/welcome/offers-item.php000075500000001516151121477570016464 0ustar00

modules/jet-dashboard/views/welcome/plugin-item-registered.php000075500000010754151121477570020635 0ustar00
{{ pluginData.name }}
modules/jet-dashboard/views/welcome/extras-item.php000075500000001067151121477570016507 0ustar00

modules/jet-dashboard/jet-dashboard.php000075500000133672151121477570014174 0ustar00 '', 'url' => '', 'cx_ui_instance' => false, 'plugin_data' => array( 'slug' => false, 'file' => '', 'version' => '', 'plugin_links' => array() ), ); /** * [$args description] * @var array */ public $args = array(); /** * [$cx_ui_instance description] * @var boolean */ public $cx_ui_instance = false; /** * [$plugin_slug description] * @var boolean */ public $plugin_data = false; /** * [$assets_enqueued description] * @var boolean */ protected $assets_enqueued = false; /** * [$registered_plugins description] * @var array */ public $registered_plugins = array(); /** * Jet_Dashboard constructor. * * @since 1.0.0 * @access public * @return void */ public function __construct() { $this->load_files(); add_action( 'init', array( $this, 'init_managers' ), -998 ); add_action( 'admin_menu', array( $this, 'register_page' ), -999 ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_dashboard_assets' ) ); add_action( 'admin_head', array( $this, 'modify_item_styles') ); } /** * [load_files description] * @return [type] [description] */ public function load_files() { /** * Modules */ require $this->path . 'inc/modules/manager.php'; require $this->path . 'inc/modules/page-base.php'; require $this->path . 'inc/modules/welcome/module.php'; require $this->path . 'inc/modules/welcome/dev-test.php'; require $this->path . 'inc/modules/license/module.php'; require $this->path . 'inc/modules/settings/module.php'; require $this->path . 'inc/modules/upsale/module.php'; require $this->path . 'inc/utils.php'; require $this->path . 'inc/wp-dashboard-manager.php'; require $this->path . 'inc/license-manager.php'; require $this->path . 'inc/plugin-manager.php'; require $this->path . 'inc/data-manager.php'; require $this->path . 'inc/notice-manager.php'; /** * Compatibility */ require $this->path . 'inc/compatibility/manager.php'; require $this->path . 'inc/compatibility/base-theme.php'; require $this->path . 'inc/compatibility/themes/hello.php'; } /** * [init_managers description] * @param array $args [description] * @return [type] [description] */ public function init_managers() { $this->module_manager = new Modules\Manager(); $this->notice_manager = new Notice_Manager(); $this->data_manager = new Data_Manager(); $this->license_manager = new License_Manager(); $this->plugin_manager = new Plugin_Manager(); $this->compat_manager = new Compatibility\Manager(); $this->wp_dashboard_manager = new WP_Dashboard_Manager(); } /** * [init description] * @return [type] [description] */ public function init( $args = [] ) { $this->args = wp_parse_args( $args, $this->default_args ); $this->path = ! empty( $this->args['path'] ) ? $this->args['path'] : false; $this->url = ! empty( $this->args['url'] ) ? $this->args['url'] : false; if ( ! $this->path || ! $this->url || ! $this->args['cx_ui_instance'] ) { wp_die( 'Jet_Dashboard not initialized. Module URL, Path, UI instance and plugin data should be passed into constructor', 'Jet_Dashboard Error' ); } $plugin_data = wp_parse_args( $this->args['plugin_data'], $this->default_args['plugin_data'] ); $this->register_plugin( $this->args['plugin_data']['file'], $plugin_data ); } /** * Register add/edit page * * @return void */ public function register_page() { add_menu_page( esc_html__( 'Crocoblock', 'jet-dashboard' ), esc_html__( 'Crocoblock', 'jet-dashboard' ), 'manage_options', $this->dashboard_slug, function() { include $this->get_view( 'common/dashboard' ); }, 'data:image/svg+xml;base64,' . base64_encode('' ), '60.1' ); add_submenu_page( $this->dashboard_slug, esc_html__( 'Dashboard', 'jet-dashboard' ), esc_html__( 'Dashboard', 'jet-dashboard' ), 'manage_options', $this->dashboard_slug ); do_action( 'jet-dashboard/after-page-registration', $this ); } /** * [maybe_modify_subpages_links description] * @return [type] [description] */ public function maybe_modify_subpages_links() { global $submenu; $submenu['jet-dashboard'][3][2] = 'admin.php?page=jet-dashboard-license-page&subpage=license-manager'; } /** * [render_dashboard description] * @return [type] [description] */ public function render_dashboard() { include $this->get_view( 'common/dashboard' ); } /** * [get_dashboard_version description] * @return [type] [description] */ public function get_dashboard_path() { return $this->path; } /** * [get_dashboard_version description] * @return [type] [description] */ public function get_dashboard_url() { return $this->url; } /** * [get_dashboard_version description] * @return [type] [description] */ public function get_dashboard_version() { return $this->version; } /** * [get_registered_plugins description] * @return [type] [description] */ public function get_registered_plugins() { return $this->registered_plugins; } /** * [get_registered_plugins description] * @return [type] [description] */ public function register_plugin( $plugin_slug = false, $plugin_data = array() ) { if ( ! array_key_exists( $plugin_slug, $this->registered_plugins ) ) { $this->registered_plugins[ $plugin_slug ] = $plugin_data; } return false; } /** * Returns path to view file * * @param [type] $path [description] * @return [type] [description] */ public function get_view( $path ) { return apply_filters( 'jet-dashboard/get-view', $this->path . 'views/' . $path . '.php' ); } /** * Returns wizard initial subpage * * @return string */ public function get_initial_page() { return 'welcome-page'; } /** * Check if dashboard page is currently displayiing * * @return boolean [description] */ public function is_dashboard_page() { return ( ! empty( $_GET['page'] ) && false !== strpos( $_GET['page'], $this->dashboard_slug ) ); } /** * Returns current subpage slug * * @return string */ public function get_page() { if ( null === $this->page ) { $page = isset( $_GET['page'] ) && $this->dashboard_slug !== $_GET['page'] ? esc_attr( $_GET['page'] ) : $this->dashboard_slug . '-' . $this->get_initial_page(); $this->page = str_replace( $this->dashboard_slug . '-', '', $page ); } return $this->page; } /** * [get_subpage description] * @return [type] [description] */ public function get_subpage() { if ( null === $this->subpage ) { $this->subpage = isset( $_GET['subpage'] ) && $this->is_dashboard_page() ? esc_attr( $_GET['subpage'] ) : false; } return $this->subpage; } /** * [get_admin_url description] * @return [type] [description] */ public function get_dashboard_page_url( $page = null, $subpage = null, $args = array() ) { $page = $this->dashboard_slug . '-' . $page; $page_args = array( 'page' => $page, 'subpage' => $subpage, ); if ( ! empty( $args ) ) { $page_args = array_merge( $page_args, $args ); } return add_query_arg( $page_args, admin_url( 'admin.php' ) ); } /** * [init_ui_instance description] * @param boolean $ui_callback [description] * @return [type] [description] */ public function init_ui_instance( $ui_callback = false ) { if ( $ui_callback && is_object( $ui_callback ) && 'CX_Vue_UI' === get_class( $ui_callback ) ) { $this->cx_ui_instance = $ui_callback; } if ( ! $ui_callback || ! is_callable( $ui_callback ) ) { return; } $this->cx_ui_instance = call_user_func( $ui_callback ); } /** * [enqueue_dashboard_assets description] * @param [type] $hook [description] * @return [type] [description] */ public function enqueue_dashboard_assets( $hook ) { // Enqueue WP Admin assets $this->enqueue_wp_admin_assets(); if ( ! $this->is_dashboard_page() ) { return false; } if ( $this->assets_enqueued ) { return false; } $this->enqueue_assets(); $this->assets_enqueued = true; } /** * @return void */ public function enqueue_wp_admin_assets() { wp_enqueue_style( 'jet-wp-admin-styles', $this->url . 'assets/css/wp-admin-styles.css', false, $this->version ); } /** * [modify_item_styles description] * @return [type] [description] */ public function modify_item_styles() { echo ''; } /** * Enqueue builder assets * * @return void */ public function enqueue_assets() { $this->init_ui_instance( $this->args['cx_ui_instance'] ); $this->cx_ui_instance->enqueue_assets(); wp_enqueue_script( 'jet-dashboard-class-script', $this->url . 'assets/js/jet-dashboard-class.js', array( 'cx-vue-ui' ), $this->version, true ); do_action( 'jet-dashboard/before-enqueue-assets', $this, $this->get_page() ); $direction_suffix = is_rtl() ? '-rtl' : ''; wp_enqueue_style( 'jet-dashboard-admin-css', $this->url . 'assets/css/jet-dashboard-admin' . $direction_suffix . '.css', false, $this->version ); wp_enqueue_script( 'jet-dashboard-script', $this->url . 'assets/js/jet-dashboard.js', array( 'cx-vue-ui' ), $this->version, true ); do_action( 'jet-dashboard/after-enqueue-assets', $this, $this->get_page() ); wp_set_script_translations( 'jet-dashboard-script', 'jet-dashboard' ); wp_localize_script( 'jet-dashboard-script', 'JetDashboardConfig', apply_filters( 'jet-dashboard/js-page-config', array( 'pageModule' => false, 'subPageModule' => false, 'themeInfo' => $this->data_manager->get_theme_info(), 'licenseList' => array_values( Utils::get_license_list() ), 'primaryLicenseData' => $this->license_manager->get_primary_license_data(), 'ajaxUrl' => esc_url( admin_url( 'admin-ajax.php' ) ), 'nonce' => wp_create_nonce( $this->dashboard_slug ), 'pageModuleConfig' => $this->data_manager->get_dashboard_page_config( $this->get_page(), $this->get_subpage() ), 'helpCenterConfig' => $this->data_manager->get_dashboard_config( 'helpCenter' ), 'avaliableBanners' => $this->data_manager->get_dashboard_config( 'banners' ), 'noticeList' => $this->notice_manager->get_registered_notices( $this->get_page() ), 'serviceActionOptions' => $this->data_manager->get_service_action_list(), ), $this->get_page(), $this->get_subpage() ) ); add_action( 'admin_footer', array( $this, 'print_vue_templates' ), 0 ); } /** * Print components templates * * @return void */ public function print_vue_templates() { $templates = apply_filters( 'jet-dashboard/js-page-templates', array( 'alert-list' => $this->get_view( 'common/alert-list' ), 'alert-item' => $this->get_view( 'common/alert-item' ), 'banner' => $this->get_view( 'common/banner' ), 'before-content' => $this->get_view( 'common/before-content' ), 'header' => $this->get_view( 'common/header' ), 'before-component' => $this->get_view( 'common/before-component' ), 'inner-component' => $this->get_view( 'common/inner-component' ), 'after-component' => $this->get_view( 'common/after-component' ), 'before-sidebar' => $this->get_view( 'common/before-sidebar' ), 'sidebar' => $this->get_view( 'common/sidebar' ), 'after-sidebar' => $this->get_view( 'common/after-sidebar' ), ), $this->get_page(), $this->get_subpage() ); foreach ( $templates as $name => $path ) { ob_start(); include $path; $content = ob_get_clean(); printf( '', $name, $content ); } } /** * Returns the instance. * * @since 1.0.0 * @access public * @return object */ public static function get_instance() { // If the single instance hasn't been set, set it now. if ( null == self::$instance ) { self::$instance = new self; } return self::$instance; } } modules/jet-elementor-extension/assets/js/editor.js000075500000017473151121477570016573 0ustar00(function( $ ) { 'use strict'; var JetElemExtEditor = { init: function() { var QueryControlItemView = elementor.modules.controls.Select2.extend({ hasTitles: false, loadEditUrl: false, ui: function() { var ui = elementor.modules.controls.Select2.prototype.ui.apply( this, arguments ); _.extend( ui, { jetEngineCreateButton: 'a.jet-engine-create-listing', } ); return ui; }, events: function() { var events = elementor.modules.controls.Select2.prototype.events.apply( this, arguments ); _.extend( events, { 'click @ui.jetEngineCreateButton': 'onCreateButtonClick', } ); return events; }, getQueryArgs: function() { var args = this.model.get( 'query' ); if ( this.model.get( 'prevent_looping' ) ) { if ( !args.post__not_in ) { args.post__not_in = []; } var currentDocID = elementor.documents.getCurrentId(); if ( -1 === args.post__not_in.indexOf( currentDocID ) ) { args.post__not_in.push( currentDocID ); } var $currentDoc = elementor.$previewContents.find('[data-elementor-id="' + elementor.documents.getCurrentId() + '"]').first(), $parentsDocs = $currentDoc.parents( '.elementor[data-elementor-type]' ); if ( $parentsDocs[0] ) { $parentsDocs.each( function() { var docID = $( this ).data( 'elementor-id' ); if ( -1 === args.post__not_in.indexOf( docID ) ) { args.post__not_in.push( docID ); } } ); } } return args; }, getSelect2DefaultOptions: function getSelect2DefaultOptions() { var self = this; return jQuery.extend( elementor.modules.controls.Select2.prototype.getSelect2DefaultOptions.apply( this, arguments ), { ajax: { url: ajaxurl, cache: true, dataType: 'json', data: function( params ) { return { q: params.term, action: 'jet_query_control_options', query_type: self.model.get( 'query_type' ), query: self.getQueryArgs(), signature: self.model.get( 'signature' ), }; }, processResults: function( response ) { return { results: response.data.results }; } }, minimumInputLength: 1 }); }, getOptionsTitles: function getOptionsTitles() { var self = this, query_ids = this.getControlValue(); if ( !query_ids ) { return; } if ( !_.isArray( query_ids ) ) { query_ids = [query_ids]; } if ( ! query_ids[0] ) { return; } jQuery.ajax( { url: ajaxurl, dataType: 'json', data: { action: 'jet_query_control_options', query_type: self.model.get( 'query_type' ), query: self.getQueryArgs(), ids: query_ids, signature: self.model.get( 'signature' ), }, beforeSend: function() { self.ui.select.prop( 'disabled', true ); }, success: function( response ) { self.hasTitles = true; self.model.set( 'options', self.prepareOptions( response.data.results ) ); self.render(); } } ); }, prepareOptions: function prepareOptions( options ) { var result = {}; jQuery.each( options, function( index, item ) { result[ item.id ] = item.text; } ); return result; }, renderEditButton: function renderEditButton() { if ( this.loadEditUrl ) { return; } if ( this.model.get( 'multiple' ) ) { return; } var editBtnConfig = this.model.get( 'edit_button' ); if ( !editBtnConfig || !editBtnConfig.active ) { return; } var self = this, value = this.getControlValue(), $editBtnWrap = this.$el.find( '.jet-query-edit-btn-wrap' ), $editBtn = this.$el.find( '.jet-query-edit-btn' ); if ( !value ) { $editBtnWrap.remove(); return; } this.loadEditUrl = true; jQuery.ajax( { url: ajaxurl, dataType: 'json', data: { action: 'jet_query_get_edit_url', id: value, query_type: self.model.get( 'query_type' ), }, success: function( response ) { if ( ! response.success ) { return; } if ( ! response.data.edit_url ) { $editBtnWrap.remove(); return; } var editUrl = response.data.edit_url; if ( $editBtn[0] ) { $editBtn.attr( 'href', editUrl ) } else { $editBtn = jQuery( '', { class: 'elementor-button elementor-button-default jet-query-edit-btn', href: editUrl, target: '_blank', html: '' + editBtnConfig.label, } ); $editBtnWrap = jQuery( '
', { class: 'jet-query-edit-btn-wrap', html: $editBtn, } ); self.$el.find( '.elementor-control-field' ).after( $editBtnWrap ); } self.loadEditUrl = false; }, fail: function() { self.loadEditUrl = false; } } ); }, renderCreateButton: function() { var createButton = this.model.get( 'create_button' ); if ( ! createButton ) { return; } var $createHandler = jQuery( '
Create new listing item' ); this.$el.find( '.elementor-control-field' ).after( $createHandler ); $createHandler }, onCreateButtonClick: function( event ) { event.preventDefault(); var createButton = this.model.get( 'create_button' ); var handler = createButton.handler || 'JetListings'; if ( window[ handler ] && window[ handler ].onEditorCreateClick ) { window[ handler ].onEditorCreateClick( this ); } }, onInputChange: function() { this.renderEditButton(); }, onReady: function onReady() { this.ui.select.select2( this.getSelect2Options() ); if ( !this.hasTitles ) { this.getOptionsTitles(); } this.renderEditButton(); this.renderCreateButton(); } }); var RepeaterControlItemView = elementor.modules.controls.Repeater.extend({ className: function className() { return elementor.modules.controls.Repeater.prototype.className.apply( this, arguments ) + ' elementor-control-type-repeater'; }, callParentFunction( functionName, args = [] ) { const widgetType = this.options.container.model.get( 'widgetType' ); const parentFunction = elementor.modules.controls.Repeater.prototype[ functionName ]; if ( ! elementor.widgetsCache[ widgetType ] || ! elementor.widgetsCache[ widgetType ]?.support_nesting ) { parentFunction.apply( this, args ); return; } elementor.widgetsCache[ widgetType ].support_nesting = false; parentFunction.apply( this, args ); elementor.widgetsCache[ widgetType ].support_nesting = true; }, onButtonAddRowClick() { this.callParentFunction( 'onButtonAddRowClick' ); }, onChildviewClickRemove( childView ) { this.callParentFunction( 'onChildviewClickRemove', [ childView ] ); }, onChildviewClickDuplicate( childView ) { this.callParentFunction( 'onChildviewClickDuplicate', [ childView ] ); } }); var Select2ControlItemView = elementor.modules.controls.Select2.extend({ className: function className() { return elementor.modules.controls.Repeater.prototype.className.apply( this, arguments ) + ' elementor-control-type-select2'; } }); // Add controls views elementor.addControlView( 'jet-query', QueryControlItemView ); elementor.addControlView( 'jet-repeater', RepeaterControlItemView ); elementor.addControlView( 'jet-select2', Select2ControlItemView ); } }; $( window ).on( 'elementor:init', JetElemExtEditor.init ); }( jQuery )); modules/jet-elementor-extension/inc/controls/query.php000075500000002215151121477570017307 0ustar00%s', $inline_css ); } /** * @param string|array $value * @param array $config * * @return string|array */ public function before_save( $value, array $config ) { if ( ! is_array( $value ) ) { if ( ! empty( $value ) ) { $value = absint( $value ); } } else { $value = array_map( 'absint', $value ); } return $value; } protected function get_default_settings() { return array_merge( parent::get_default_settings(), array( 'query_type' => 'post', 'query' => array(), 'signature' => \Jet_Elementor_Extension\Ajax_Handlers::create_signature( array() ), 'prevent_looping' => false, 'edit_button' => array( 'active' => false, 'label' => 'Edit Template', ), ) ); } } modules/jet-elementor-extension/inc/controls/select2.php000075500000004325151121477570017507 0ustar00
<# if ( data.label ) {#> <# } #>
<# var multiple = ( data.multiple ) ? 'multiple' : ''; #>
<# if ( data.description ) { #>
{{{ data.description }}}
<# } #> documents->get( $id )->get_edit_url(); } else { $edit_url = get_edit_post_link( $id, '' ); } break; case 'tax': $edit_url = get_edit_term_link( $id ); break; } $data = array( 'edit_url' => $edit_url, ); wp_send_json_success( $data ); } /** * Generate a custom secret key for the cases when NONCE_KEY is not set. * * @return string */ public static function custom_sercret_key() { $secret_key = get_option( 'jet-elementor-extension-secret-key', '' ); if ( ! $secret_key ) { $secret_key = wp_generate_password( 64, false ); update_option( 'jet-elementor-extension-secret-key', $secret_key ); } return $secret_key; } /** * Create a signature for the request. * * @return void */ public static function create_signature( $query = array() ) { if ( ! is_array( $query ) ) { $query = array(); } $allowed_keys = array( 'post__not_in', 'meta_query', 'post_type', 'posts_per_page', ); foreach ( $allowed_keys as $key ) { if ( isset( $query[ $key ] ) ) { unset( $query[ $key ] ); } } foreach ( $query as $key => $value ) { if ( ! is_array( $value ) ) { $query[ $key ] = (string) $value; } } ksort( $query ); $secret_key = defined( 'NONCE_KEY' ) ? NONCE_KEY : self::custom_sercret_key(); $signature = md5( wp_json_encode( $query ) . $secret_key ); return $signature; } /** * Sanitize query arguments. * * @param array $query_args Query arguments. * * @return array */ public function sanitize_query( $query_args ) { if ( ! is_array( $query_args ) ) { return array(); } $allowed_keys = array( 'post_type', 'post__in', 'tax_query', 'meta_query', 's_title', // Custom key for searching by title. ); foreach ( $query_args as $key => $value ) { if ( ! in_array( $key, $allowed_keys, true ) ) { unset( $query_args[ $key ] ); } } return $query_args; } /** * Validate signature from request to ensure it wasn't hijacked * * @param array $data * @return bool */ public function validate_request_signature( $data ) { $input_signature = ! empty( $data['signature'] ) ? $data['signature'] : false; $query = ! empty( $data['query'] ) ? $data['query'] : array(); $generated_signature = self::create_signature( $query ); return $input_signature === $generated_signature; } /** * Get Query control options list. */ public function get_query_control_options() { if ( ! current_user_can( 'edit_posts' ) ) { wp_send_json_error(); } $data = $_REQUEST; if ( ! isset( $data['query_type'] ) ) { wp_send_json_error(); return; } if ( ! $this->validate_request_signature( $data ) ) { wp_send_json_error(); } $results = array(); switch ( $data['query_type'] ) { case 'post': $default_query_args = array( 'post_type' => 'any', 'post_status' => 'publish', 'posts_per_page' => - 1, 'suppress_filters' => false, 'ignore_sticky_posts' => true, 'orderby' => 'title', 'order' => 'ASC', ); $query_args = ! empty( $data['query'] ) ? $this->sanitize_query( $data['query'] ) : array(); $query_args = wp_parse_args( $query_args, $default_query_args ); if ( ! empty( $data['q'] ) ) { $query_args['s_title'] = $data['q']; } if ( ! empty( $data['ids'] ) && is_array( $data['ids'] ) ) { $query_args['post__in'] = array_map( 'absint', $data['ids'] ); } add_filter( 'posts_where', array( $this, 'force_search_by_title' ), 10, 2 ); $posts = get_posts( $query_args ); remove_filter( 'posts_where', array( $this, 'force_search_by_title' ), 10 ); foreach ( $posts as $post ) { $results[] = array( 'id' => $post->ID, 'text' => $post->post_title, ); } break; case 'elementor_templates': $document_types = \Elementor\Plugin::instance()->documents->get_document_types( array( 'show_in_library' => true, ) ); $default_query_args = array( 'post_type' => \Elementor\TemplateLibrary\Source_Local::CPT, 'post_status' => 'publish', 'posts_per_page' => - 1, 'suppress_filters' => false, 'orderby' => 'title', 'order' => 'ASC', 'meta_query' => array( array( 'key' => \Elementor\Core\Base\Document::TYPE_META_KEY, 'value' => array_keys( $document_types ), 'compare' => 'IN', ), ), ); $query_args = ! empty( $data['query'] ) ? $data['query'] : array(); $query_args = wp_parse_args( $query_args, $default_query_args ); if ( ! empty( $data['q'] ) ) { $query_args['s_title'] = $data['q']; } if ( ! empty( $data['ids'] ) && is_array( $data['ids'] ) ) { $query_args['post__in'] = array_map( 'absint', $data['ids'] ); } add_filter( 'posts_where', array( $this, 'force_search_by_title' ), 10, 2 ); $posts = get_posts( $query_args ); remove_filter( 'posts_where', array( $this, 'force_search_by_title' ), 10 ); foreach ( $posts as $post ) { $results[] = array( 'id' => $post->ID, 'text' => sprintf( '%1$s (%2$s)', $post->post_title, \Elementor\TemplateLibrary\Source_Local::get_template_type( $post->ID ) ), ); } break; case 'tax': $default_terms_args = array( 'hide_empty' => false, ); $terms_args = ! empty( $data['query'] ) ? $data['query'] : array(); $terms_args = wp_parse_args( $terms_args, $default_terms_args ); if ( ! empty( $data['q'] ) ) { $terms_args['search'] = $data['q']; } if ( empty( $terms_args['taxonomy'] ) ) { $terms_args['taxonomy'] = get_taxonomies( array( 'show_in_nav_menus' => true ), 'names' ); } if ( ! empty( $data['ids'] ) && is_array( $data['ids'] ) ) { $terms_args['include'] = array_map( 'absint', $data['ids'] ); } $terms = get_terms( $terms_args ); global $wp_taxonomies; foreach ( $terms as $term ) { $results[] = array( 'id' => $term->term_id, 'text' => sprintf( '%1$s: %2$s', $wp_taxonomies[ $term->taxonomy ]->label, $term->name ), ); } break; } $data = array( 'results' => $results, ); wp_send_json_success( $data ); } /** * Force query to look in post title while searching. * * @param string $where * @param object $query * @return string */ public function force_search_by_title( $where, $query ) { $args = $query->query; if ( ! isset( $args['s_title'] ) ) { return $where; } global $wpdb; $search = esc_sql( $wpdb->esc_like( $args['s_title'] ) ); $where .= " AND {$wpdb->posts}.post_title LIKE '%$search%'"; return $where; } } modules/jet-elementor-extension/jet-elementor-extension.php000075500000006263151121477570020321 0ustar00path = $args['path']; $this->url = $args['url']; $this->load_files(); new Ajax_Handlers(); $register_controls_action = 'elementor/controls/controls_registered'; if ( defined( 'ELEMENTOR_VERSION' ) && version_compare( ELEMENTOR_VERSION, '3.5.0', '>=' ) ) { $register_controls_action = 'elementor/controls/register'; } add_action( $register_controls_action, array( $this, 'register_controls' ) ); add_action( 'elementor/editor/before_enqueue_scripts', array( $this, 'enqueue_editor_scripts' ) ); } /** * Load required files. */ public function load_files() { require trailingslashit( $this->path ) . 'inc/controls/query.php'; require trailingslashit( $this->path ) . 'inc/controls/repeater.php'; require trailingslashit( $this->path ) . 'inc/controls/select2.php'; require trailingslashit( $this->path ) . 'inc/ajax-handlers.php'; } /** * Register new controls. * * @param object $controls_manager Controls manager instance. * @return void */ public function register_controls( $controls_manager ) { if ( defined( 'ELEMENTOR_VERSION' ) && version_compare( ELEMENTOR_VERSION, '3.5.0', '>=' ) ) { $controls_manager->register( new Query_Control() ); $controls_manager->register( new Repeater_Control() ); $controls_manager->register( new Select2_Control() ); } else { $controls_manager->register_control( 'jet-query', new Query_Control() ); $controls_manager->register_control( 'jet-repeater', new Repeater_Control() ); $controls_manager->register_control( 'jet-select2', new Select2_Control() ); } } /** * Enqueue editor scripts. */ public function enqueue_editor_scripts() { wp_enqueue_script( 'jet-elementor-ext-editor', $this->url . 'assets/js/editor.js', array( 'jquery' ), $this->version, true ); } /** * Returns the instance. * * @since 1.0.0 * @param array $args * @access public * @return object */ public static function get_instance( array $args = array() ) { // If the single instance hasn't been set, set it now. if ( null == self::$instance ) { self::$instance = new self( $args ); } return self::$instance; } } } modules/vue-ui/assets/js/vue.min.js000075500000266753151121477570013323 0ustar00/*! * Vue.js v2.6.10 * (c) 2014-2019 Evan You * Released under the MIT License. */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Vue=t()}(this,function(){"use strict";var e=Object.freeze({});function t(e){return null==e}function n(e){return null!=e}function r(e){return!0===e}function i(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function o(e){return null!==e&&"object"==typeof e}var a=Object.prototype.toString;function s(e){return"[object Object]"===a.call(e)}function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return n(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function l(e){return null==e?"":Array.isArray(e)||s(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}var m=Object.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\w)/g,b=g(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():""})}),$=g(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w=/\B([A-Z])/g,C=g(function(e){return e.replace(w,"-$1").toLowerCase()});var x=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function k(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function A(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n0,Z=J&&J.indexOf("edge/")>0,G=(J&&J.indexOf("android"),J&&/iphone|ipad|ipod|ios/.test(J)||"ios"===K),X=(J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J),J&&J.match(/firefox\/(\d+)/)),Y={}.watch,Q=!1;if(z)try{var ee={};Object.defineProperty(ee,"passive",{get:function(){Q=!0}}),window.addEventListener("test-passive",null,ee)}catch(e){}var te=function(){return void 0===B&&(B=!z&&!V&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),B},ne=z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return"function"==typeof e&&/native code/.test(e.toString())}var ie,oe="undefined"!=typeof Symbol&&re(Symbol)&&"undefined"!=typeof Reflect&&re(Reflect.ownKeys);ie="undefined"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ae=S,se=0,ce=function(){this.id=se++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){h(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(o&&!y(i,"default"))a=!1;else if(""===a||a===C(e)){var c=Pe(String,i.type);(c<0||s0&&(st((u=e(u,(a||"")+"_"+c))[0])&&st(f)&&(s[l]=he(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?st(f)?s[l]=he(f.text+u):""!==u&&s.push(he(u)):st(u)&&st(f)?s[l]=he(f.text+u.text):(r(o._isVList)&&n(u.tag)&&t(u.key)&&n(a)&&(u.key="__vlist"+a+"_"+c+"__"),s.push(u)));return s}(e):void 0}function st(e){return n(e)&&n(e.text)&&!1===e.isComment}function ct(e,t){if(e){for(var n=Object.create(null),r=oe?Reflect.ownKeys(e):Object.keys(e),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!o&&!r.$hasNormal)return r;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=pt(n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=dt(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),R(i,"$stable",a),R(i,"$key",s),R(i,"$hasNormal",o),i}function pt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:at(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function dt(e,t){return function(){return e[t]}}function vt(e,t){var r,i,a,s,c;if(Array.isArray(e)||"string"==typeof e)for(r=new Array(e.length),i=0,a=e.length;idocument.createEvent("Event").timeStamp&&(sn=function(){return cn.now()})}function un(){var e,t;for(an=sn(),rn=!0,Qt.sort(function(e,t){return e.id-t.id}),on=0;onon&&Qt[n].id>e.id;)n--;Qt.splice(n+1,0,e)}else Qt.push(e);nn||(nn=!0,Ye(un))}}(this)},fn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||o(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Re(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},fn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},fn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},fn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var pn={enumerable:!0,configurable:!0,get:S,set:S};function dn(e,t,n){pn.get=function(){return this[t][n]},pn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,pn)}function vn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&$e(!1);var o=function(o){i.push(o);var a=Me(o,t,n,e);xe(r,o,a),o in e||dn(e,"_props",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]="function"!=typeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;s(t=e._data="function"==typeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return Re(e,t,"data()"),{}}finally{fe()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];r&&y(r,o)||(a=void 0,36!==(a=(o+"").charCodeAt(0))&&95!==a&&dn(e,"_data",o))}var a;Ce(t,!0)}(e):Ce(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=te();for(var i in t){var o=t[i],a="function"==typeof o?o:o.get;r||(n[i]=new fn(e,a||S,S,hn)),i in e||mn(e,i,o)}}(e,t.computed),t.watch&&t.watch!==Y&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,"[object RegExp]"===a.call(n)&&e.test(t));var n}function An(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=xn(a.componentOptions);s&&!t(s)&&On(n,o,r,i)}}}function On(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,h(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=bn++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=De($n(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&qt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,i=r&&r.context;t.$slots=ut(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,r,i){return Pt(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Pt(t,e,n,r,i,!0)};var o=r&&r.data;xe(t,"$attrs",o&&o.attrs||e,null,!0),xe(t,"$listeners",n._parentListeners||e,null,!0)}(n),Yt(n,"beforeCreate"),function(e){var t=ct(e.$options.inject,e);t&&($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),vn(n),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(n),Yt(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(wn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=ke,e.prototype.$delete=Ae,e.prototype.$watch=function(e,t,n){if(s(t))return _n(this,e,t,n);(n=n||{}).user=!0;var r=new fn(this,e,t,n);if(n.immediate)try{t.call(this,r.value)}catch(e){Re(e,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(wn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var i=0,o=e.length;i1?k(t):t;for(var n=k(arguments,1),r='event handler for "'+e+'"',i=0,o=t.length;iparseInt(this.max)&&On(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return F}};Object.defineProperty(e,"config",t),e.util={warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set=ke,e.delete=Ae,e.nextTick=Ye,e.observable=function(e){return Ce(e),e},e.options=Object.create(null),M.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,A(e.options.components,Tn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=k(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=De(this.options,e),this}}(e),Cn(e),function(e){M.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&s(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}(e)}(wn),Object.defineProperty(wn.prototype,"$isServer",{get:te}),Object.defineProperty(wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(wn,"FunctionalRenderContext",{value:Tt}),wn.version="2.6.10";var En=p("style,class"),Nn=p("input,textarea,option,select,progress"),jn=function(e,t,n){return"value"===n&&Nn(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Dn=p("contenteditable,draggable,spellcheck"),Ln=p("events,caret,typing,plaintext-only"),Mn=function(e,t){return Hn(t)||"false"===t?"false":"contenteditable"===e&&Ln(t)?t:"true"},In=p("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Fn="http://www.w3.org/1999/xlink",Pn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Rn=function(e){return Pn(e)?e.slice(6,e.length):""},Hn=function(e){return null==e||!1===e};function Bn(e){for(var t=e.data,r=e,i=e;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(t=Un(i.data,t));for(;n(r=r.parent);)r&&r.data&&(t=Un(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Vn(t));return""}(t.staticClass,t.class)}function Un(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+" "+t:e:t||""}function Vn(e){return Array.isArray(e)?function(e){for(var t,r="",i=0,o=e.length;i-1?hr(e,t,n):In(t)?Hn(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Dn(t)?e.setAttribute(t,Mn(t,n)):Pn(t)?Hn(n)?e.removeAttributeNS(Fn,Rn(t)):e.setAttributeNS(Fn,t,n):hr(e,t,n)}function hr(e,t,n){if(Hn(n))e.removeAttribute(t);else{if(q&&!W&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var mr={create:dr,update:dr};function yr(e,r){var i=r.elm,o=r.data,a=e.data;if(!(t(o.staticClass)&&t(o.class)&&(t(a)||t(a.staticClass)&&t(a.class)))){var s=Bn(r),c=i._transitionClasses;n(c)&&(s=zn(s,Vn(c))),s!==i._prevClass&&(i.setAttribute("class",s),i._prevClass=s)}}var gr,_r,br,$r,wr,Cr,xr={create:yr,update:yr},kr=/[\w).+\-_$\]]/;function Ar(e){var t,n,r,i,o,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r=0&&" "===(h=e.charAt(v));v--);h&&kr.test(h)||(u=!0)}}else void 0===i?(d=r+1,i=e.slice(0,r).trim()):m();function m(){(o||(o=[])).push(e.slice(d,r).trim()),d=r+1}if(void 0===i?i=e.slice(0,r).trim():0!==d&&m(),o)for(r=0;r-1?{exp:e.slice(0,$r),key:'"'+e.slice($r+1)+'"'}:{exp:e,key:null};_r=e,$r=wr=Cr=0;for(;!zr();)Vr(br=Ur())?Jr(br):91===br&&Kr(br);return{exp:e.slice(0,wr),key:e.slice(wr+1,Cr)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function Ur(){return _r.charCodeAt(++$r)}function zr(){return $r>=gr}function Vr(e){return 34===e||39===e}function Kr(e){var t=1;for(wr=$r;!zr();)if(Vr(e=Ur()))Jr(e);else if(91===e&&t++,93===e&&t--,0===t){Cr=$r;break}}function Jr(e){for(var t=e;!zr()&&(e=Ur())!==t;);}var qr,Wr="__r",Zr="__c";function Gr(e,t,n){var r=qr;return function i(){null!==t.apply(null,arguments)&&Qr(e,i,n,r)}}var Xr=Ve&&!(X&&Number(X[1])<=53);function Yr(e,t,n,r){if(Xr){var i=an,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}qr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function Qr(e,t,n,r){(r||qr).removeEventListener(e,t._wrapper||t,n)}function ei(e,r){if(!t(e.data.on)||!t(r.data.on)){var i=r.data.on||{},o=e.data.on||{};qr=r.elm,function(e){if(n(e[Wr])){var t=q?"change":"input";e[t]=[].concat(e[Wr],e[t]||[]),delete e[Wr]}n(e[Zr])&&(e.change=[].concat(e[Zr],e.change||[]),delete e[Zr])}(i),rt(i,o,Yr,Qr,Gr,r.context),qr=void 0}}var ti,ni={create:ei,update:ei};function ri(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a=r.elm,s=e.data.domProps||{},c=r.data.domProps||{};for(i in n(c.__ob__)&&(c=r.data.domProps=A({},c)),s)i in c||(a[i]="");for(i in c){if(o=c[i],"textContent"===i||"innerHTML"===i){if(r.children&&(r.children.length=0),o===s[i])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===i&&"PROGRESS"!==a.tagName){a._value=o;var u=t(o)?"":String(o);ii(a,u)&&(a.value=u)}else if("innerHTML"===i&&qn(a.tagName)&&t(a.innerHTML)){(ti=ti||document.createElement("div")).innerHTML=""+o+"";for(var l=ti.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!==s[i])try{a[i]=o}catch(e){}}}}function ii(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var r=e.value,i=e._vModifiers;if(n(i)){if(i.number)return f(r)!==f(t);if(i.trim)return r.trim()!==t.trim()}return r!==t}(e,t))}var oi={create:ri,update:ri},ai=g(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function si(e){var t=ci(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ci(e){return Array.isArray(e)?O(e):"string"==typeof e?ai(e):e}var ui,li=/^--/,fi=/\s*!important$/,pi=function(e,t,n){if(li.test(t))e.style.setProperty(t,n);else if(fi.test(n))e.style.setProperty(C(t),n.replace(fi,""),"important");else{var r=vi(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(yi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function _i(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(yi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function bi(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&A(t,$i(e.name||"v")),A(t,e),t}return"string"==typeof e?$i(e):void 0}}var $i=g(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}}),wi=z&&!W,Ci="transition",xi="animation",ki="transition",Ai="transitionend",Oi="animation",Si="animationend";wi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ki="WebkitTransition",Ai="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Oi="WebkitAnimation",Si="webkitAnimationEnd"));var Ti=z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ti(function(){Ti(e)})}function Ni(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),gi(e,t))}function ji(e,t){e._transitionClasses&&h(e._transitionClasses,t),_i(e,t)}function Di(e,t,n){var r=Mi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Ci?Ai:Si,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=Ci,l=a,f=o.length):t===xi?u>0&&(n=xi,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?Ci:xi:null)?n===Ci?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===Ci&&Li.test(r[ki+"Property"])}}function Ii(e,t){for(;e.length1}function Ui(e,t){!0!==t.data.show&&Pi(t)}var zi=function(e){var o,a,s={},c=e.modules,u=e.nodeOps;for(o=0;ov?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d>y&&$(0,r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)&&u.setTextContent(p,""),_(p,null,y,0,y.length-1,o)):n(h)?$(0,h,0,h.length-1):n(e.text)&&u.setTextContent(p,""):e.text!==i.text&&u.setTextContent(p,i.text),n(v)&&n(d=v.hook)&&n(d=d.postpatch)&&d(e,i)}}}function k(e,t,i){if(r(i)&&n(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o-1,a.selected!==o&&(a.selected=o);else if(N(Wi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function qi(e,t){return t.every(function(t){return!N(t,e)})}function Wi(e){return"_value"in e?e._value:e.value}function Zi(e){e.target.composing=!0}function Gi(e){e.target.composing&&(e.target.composing=!1,Xi(e.target,"input"))}function Xi(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Yi(e){return!e.componentInstance||e.data&&e.data.transition?e:Yi(e.componentInstance._vnode)}var Qi={model:Vi,show:{bind:function(e,t,n){var r=t.value,i=(n=Yi(n)).data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&i?(n.data.show=!0,Pi(n,function(){e.style.display=o})):e.style.display=r?o:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Yi(n)).data&&n.data.transition?(n.data.show=!0,r?Pi(n,function(){e.style.display=e.__vOriginalDisplay}):Ri(n,function(){e.style.display="none"})):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},eo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function to(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?to(zt(t.children)):e}function no(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[b(o)]=i[o];return t}function ro(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var io=function(e){return e.tag||Ut(e)},oo=function(e){return"show"===e.name},ao={name:"transition",props:eo,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(io)).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a=to(o);if(!a)return o;if(this._leaving)return ro(e,o);var s="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?s+"comment":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=no(this),u=this._vnode,l=to(u);if(a.data.directives&&a.data.directives.some(oo)&&(a.data.show=!0),l&&l.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(a,l)&&!Ut(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},c);if("out-in"===r)return this._leaving=!0,it(f,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),ro(e,o);if("in-out"===r){if(Ut(a))return u;var p,d=function(){p()};it(c,"afterEnter",d),it(c,"enterCancelled",d),it(f,"delayLeave",function(e){p=e})}}return o}}},so=A({tag:String,moveClass:String},eo);function co(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function uo(e){e.data.newPos=e.elm.getBoundingClientRect()}function lo(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete so.mode;var fo={Transition:ao,TransitionGroup:{props:so,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Zt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=no(this),s=0;s-1?Gn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Gn[e]=/HTMLUnknownElement/.test(t.toString())},A(wn.options.directives,Qi),A(wn.options.components,fo),wn.prototype.__patch__=z?zi:S,wn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=ve),Yt(e,"beforeMount"),r=function(){e._update(e._render(),n)},new fn(e,r,S,{before:function(){e._isMounted&&!e._isDestroyed&&Yt(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Yt(e,"mounted")),e}(this,e=e&&z?Yn(e):void 0,t)},z&&setTimeout(function(){F.devtools&&ne&&ne.emit("init",wn)},0);var po=/\{\{((?:.|\r?\n)+?)\}\}/g,vo=/[-.*+?^${}()|[\]\/\\]/g,ho=g(function(e){var t=e[0].replace(vo,"\\$&"),n=e[1].replace(vo,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")});var mo={staticKeys:["staticClass"],transformNode:function(e,t){t.warn;var n=Fr(e,"class");n&&(e.staticClass=JSON.stringify(n));var r=Ir(e,"class",!1);r&&(e.classBinding=r)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}};var yo,go={staticKeys:["staticStyle"],transformNode:function(e,t){t.warn;var n=Fr(e,"style");n&&(e.staticStyle=JSON.stringify(ai(n)));var r=Ir(e,"style",!1);r&&(e.styleBinding=r)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},_o=function(e){return(yo=yo||document.createElement("div")).innerHTML=e,yo.textContent},bo=p("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),$o=p("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),wo=p("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Co=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,xo=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ko="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+P.source+"]*",Ao="((?:"+ko+"\\:)?"+ko+")",Oo=new RegExp("^<"+Ao),So=/^\s*(\/?)>/,To=new RegExp("^<\\/"+Ao+"[^>]*>"),Eo=/^]+>/i,No=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Io=/&(?:lt|gt|quot|amp|#39);/g,Fo=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Po=p("pre,textarea",!0),Ro=function(e,t){return e&&Po(e)&&"\n"===t[0]};function Ho(e,t){var n=t?Fo:Io;return e.replace(n,function(e){return Mo[e]})}var Bo,Uo,zo,Vo,Ko,Jo,qo,Wo,Zo=/^@|^v-on:/,Go=/^v-|^@|^:/,Xo=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Yo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Qo=/^\(|\)$/g,ea=/^\[.*\]$/,ta=/:(.*)$/,na=/^:|^\.|^v-bind:/,ra=/\.[^.\]]+(?=[^\]]*$)/g,ia=/^v-slot(:|$)|^#/,oa=/[\r\n]/,aa=/\s+/g,sa=g(_o),ca="_empty_";function ua(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ma(t),rawAttrsMap:{},parent:n,children:[]}}function la(e,t){Bo=t.warn||Sr,Jo=t.isPreTag||T,qo=t.mustUseProp||T,Wo=t.getTagNamespace||T;t.isReservedTag;zo=Tr(t.modules,"transformNode"),Vo=Tr(t.modules,"preTransformNode"),Ko=Tr(t.modules,"postTransformNode"),Uo=t.delimiters;var n,r,i=[],o=!1!==t.preserveWhitespace,a=t.whitespace,s=!1,c=!1;function u(e){if(l(e),s||e.processed||(e=fa(e,t)),i.length||e===n||n.if&&(e.elseif||e.else)&&da(n,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)a=e,(u=function(e){var t=e.length;for(;t--;){if(1===e[t].type)return e[t];e.pop()}}(r.children))&&u.if&&da(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o=e.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[o]=e}r.children.push(e),e.parent=r}var a,u;e.children=e.children.filter(function(e){return!e.slotScope}),l(e),e.pre&&(s=!1),Jo(e.tag)&&(c=!1);for(var f=0;f]*>)","i")),p=e.replace(f,function(e,n,r){return u=r.length,Do(l)||"noscript"===l||(n=n.replace(//g,"$1").replace(//g,"$1")),Ro(l,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""});c+=e.length-p.length,e=p,A(l,c-u,c)}else{var d=e.indexOf("<");if(0===d){if(No.test(e)){var v=e.indexOf("--\x3e");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(jo.test(e)){var h=e.indexOf("]>");if(h>=0){C(h+2);continue}}var m=e.match(Eo);if(m){C(m[0].length);continue}var y=e.match(To);if(y){var g=c;C(y[0].length),A(y[1],g,c);continue}var _=x();if(_){k(_),Ro(_.tagName,e)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(d>=0){for($=e.slice(d);!(To.test($)||Oo.test($)||No.test($)||jo.test($)||(w=$.indexOf("<",1))<0);)d+=w,$=e.slice(d);b=e.substring(0,d)}d<0&&(b=e),b&&C(b.length),t.chars&&b&&t.chars(b,c-b.length,c)}if(e===n){t.chars&&t.chars(e);break}}function C(t){c+=t,e=e.substring(t)}function x(){var t=e.match(Oo);if(t){var n,r,i={tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n=e.match(So))&&(r=e.match(xo)||e.match(Co));)r.start=c,C(r[0].length),r.end=c,i.attrs.push(r);if(n)return i.unarySlash=n[1],C(n[0].length),i.end=c,i}}function k(e){var n=e.tagName,c=e.unarySlash;o&&("p"===r&&wo(n)&&A(r),s(n)&&r===n&&A(n));for(var u=a(n)||!!c,l=e.attrs.length,f=new Array(l),p=0;p=0&&i[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=i.length-1;u>=a;u--)t.end&&t.end(i[u].tag,n,o);i.length=a,r=a&&i[a-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,o):"p"===s&&(t.start&&t.start(e,[],!1,n,o),t.end&&t.end(e,n,o))}A()}(e,{warn:Bo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p=r&&r.ns||Wo(e);q&&"svg"===p&&(o=function(e){for(var t=[],n=0;nc&&(s.push(o=e.slice(c,i)),a.push(JSON.stringify(o)));var u=Ar(r[1].trim());a.push("_s("+u+")"),s.push({"@binding":u}),c=i+r[0].length}return c-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),Mr(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Br(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Br(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Br(t,"$$c")+"}",null,!0)}(e,r,i);else if("input"===o&&"radio"===a)!function(e,t,n){var r=n&&n.number,i=Ir(e,"value")||"null";Er(e,"checked","_q("+t+","+(i=r?"_n("+i+")":i)+")"),Mr(e,"change",Br(t,i),null,!0)}(e,r,i);else if("input"===o||"textarea"===o)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,u=o?"change":"range"===r?Wr:"input",l="$event.target.value";s&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var f=Br(t,l);c&&(f="if($event.target.composing)return;"+f),Er(e,"value","("+t+")"),Mr(e,u,f,null,!0),(s||a)&&Mr(e,"blur","$forceUpdate()")}(e,r,i);else if(!F.isReservedTag(o))return Hr(e,r,i),!1;return!0},text:function(e,t){t.value&&Er(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&Er(e,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(e){return"pre"===e},isUnaryTag:bo,mustUseProp:jn,canBeLeftOpenTag:$o,isReservedTag:Wn,getTagNamespace:Zn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}(ba)},xa=g(function(e){return p("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))});function ka(e,t){e&&($a=xa(t.staticKeys||""),wa=t.isReservedTag||T,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||d(e.tag)||!wa(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every($a)))}(t);if(1===t.type){if(!wa(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n|^function\s*(?:[\w$]+)?\s*\(/,Oa=/\([^)]*?\);*$/,Sa=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Ta={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Na=function(e){return"if("+e+")return null;"},ja={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Na("$event.target !== $event.currentTarget"),ctrl:Na("!$event.ctrlKey"),shift:Na("!$event.shiftKey"),alt:Na("!$event.altKey"),meta:Na("!$event.metaKey"),left:Na("'button' in $event && $event.button !== 0"),middle:Na("'button' in $event && $event.button !== 1"),right:Na("'button' in $event && $event.button !== 2")};function Da(e,t){var n=t?"nativeOn:":"on:",r="",i="";for(var o in e){var a=La(e[o]);e[o]&&e[o].dynamic?i+=o+","+a+",":r+='"'+o+'":'+a+","}return r="{"+r.slice(0,-1)+"}",i?n+"_d("+r+",["+i.slice(0,-1)+"])":n+r}function La(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return La(e)}).join(",")+"]";var t=Sa.test(e.value),n=Aa.test(e.value),r=Sa.test(e.value.replace(Oa,""));if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)if(ja[s])o+=ja[s],Ta[s]&&a.push(s);else if("exact"===s){var c=e.modifiers;o+=Na(["ctrl","shift","alt","meta"].filter(function(e){return!c[e]}).map(function(e){return"$event."+e+"Key"}).join("||"))}else a.push(s);return a.length&&(i+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(Ma).join("&&")+")return null;"}(a)),o&&(i+=o),"function($event){"+i+(t?"return "+e.value+"($event)":n?"return ("+e.value+")($event)":r?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(r?"return "+e.value:e.value)+"}"}function Ma(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=Ta[e],r=Ea[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var Ia={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:S},Fa=function(e){this.options=e,this.warn=e.warn||Sr,this.transforms=Tr(e.modules,"transformCode"),this.dataGenFns=Tr(e.modules,"genData"),this.directives=A(A({},Ia),e.directives);var t=e.isReservedTag||T;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Pa(e,t){var n=new Fa(t);return{render:"with(this){return "+(e?Ra(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function Ra(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Ha(e,t);if(e.once&&!e.onceProcessed)return Ba(e,t);if(e.for&&!e.forProcessed)return za(e,t);if(e.if&&!e.ifProcessed)return Ua(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',r=qa(e,t),i="_t("+n+(r?","+r:""),o=e.attrs||e.dynamicAttrs?Ga((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a=e.attrsMap["v-bind"];!o&&!a||r||(i+=",null");o&&(i+=","+o);a&&(i+=(o?"":",null")+","+a);return i+")"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:qa(t,n,!0);return"_c("+e+","+Va(t,n)+(r?","+r:"")+")"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=Va(e,t));var i=e.inlineTemplate?null:qa(e,t,!0);n="_c('"+e.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o>>0}(a):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var o=function(e,t){var n=e.children[0];if(n&&1===n.type){var r=Pa(n,t.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map(function(e){return"function(){"+e+"}"}).join(",")+"]}"}}(e,t);o&&(n+=o+",")}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+Ga(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ka(e){return 1===e.type&&("slot"===e.tag||e.children.some(Ka))}function Ja(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return Ua(e,t,Ja,"null");if(e.for&&!e.forProcessed)return za(e,t,Ja);var r=e.slotScope===ca?"":String(e.slotScope),i="function("+r+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(qa(e,t)||"undefined")+":undefined":qa(e,t)||"undefined":Ra(e,t))+"}",o=r?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+i+o+"}"}function qa(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?t.maybeComponent(a)?",1":",0":"";return""+(r||Ra)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r':'
',ts.innerHTML.indexOf(" ")>0}var os=!!z&&is(!1),as=!!z&&is(!0),ss=g(function(e){var t=Yn(e);return t&&t.innerHTML}),cs=wn.prototype.$mount;return wn.prototype.$mount=function(e,t){if((e=e&&Yn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=ss(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i=rs(r,{outputSourceRange:!1,shouldDecodeNewlines:os,shouldDecodeNewlinesForHref:as,delimiters:n.delimiters,comments:n.comments},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return cs.call(this,e,t)},wn.compile=rs,wn});modules/vue-ui/assets/js/vue.js000075500001232726151121477570012533 0ustar00/*! * Vue.js v2.6.10 * (c) 2014-2019 Evan You * Released under the MIT License. */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.Vue = factory()); }(this, function () { 'use strict'; /* */ var emptyObject = Object.freeze({}); // These helpers produce better VM code in JS engines due to their // explicitness and function inlining. function isUndef (v) { return v === undefined || v === null } function isDef (v) { return v !== undefined && v !== null } function isTrue (v) { return v === true } function isFalse (v) { return v === false } /** * Check if value is primitive. */ function isPrimitive (value) { return ( typeof value === 'string' || typeof value === 'number' || // $flow-disable-line typeof value === 'symbol' || typeof value === 'boolean' ) } /** * Quick object check - this is primarily used to tell * Objects from primitive values when we know the value * is a JSON-compliant type. */ function isObject (obj) { return obj !== null && typeof obj === 'object' } /** * Get the raw type string of a value, e.g., [object Object]. */ var _toString = Object.prototype.toString; function toRawType (value) { return _toString.call(value).slice(8, -1) } /** * Strict object type check. Only returns true * for plain JavaScript objects. */ function isPlainObject (obj) { return _toString.call(obj) === '[object Object]' } function isRegExp (v) { return _toString.call(v) === '[object RegExp]' } /** * Check if val is a valid array index. */ function isValidArrayIndex (val) { var n = parseFloat(String(val)); return n >= 0 && Math.floor(n) === n && isFinite(val) } function isPromise (val) { return ( isDef(val) && typeof val.then === 'function' && typeof val.catch === 'function' ) } /** * Convert a value to a string that is actually rendered. */ function toString (val) { return val == null ? '' : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString) ? JSON.stringify(val, null, 2) : String(val) } /** * Convert an input value to a number for persistence. * If the conversion fails, return original string. */ function toNumber (val) { var n = parseFloat(val); return isNaN(n) ? val : n } /** * Make a map and return a function for checking if a key * is in that map. */ function makeMap ( str, expectsLowerCase ) { var map = Object.create(null); var list = str.split(','); for (var i = 0; i < list.length; i++) { map[list[i]] = true; } return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; } } /** * Check if a tag is a built-in tag. */ var isBuiltInTag = makeMap('slot,component', true); /** * Check if an attribute is a reserved attribute. */ var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is'); /** * Remove an item from an array. */ function remove (arr, item) { if (arr.length) { var index = arr.indexOf(item); if (index > -1) { return arr.splice(index, 1) } } } /** * Check whether an object has the property. */ var hasOwnProperty = Object.prototype.hasOwnProperty; function hasOwn (obj, key) { return hasOwnProperty.call(obj, key) } /** * Create a cached version of a pure function. */ function cached (fn) { var cache = Object.create(null); return (function cachedFn (str) { var hit = cache[str]; return hit || (cache[str] = fn(str)) }) } /** * Camelize a hyphen-delimited string. */ var camelizeRE = /-(\w)/g; var camelize = cached(function (str) { return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; }) }); /** * Capitalize a string. */ var capitalize = cached(function (str) { return str.charAt(0).toUpperCase() + str.slice(1) }); /** * Hyphenate a camelCase string. */ var hyphenateRE = /\B([A-Z])/g; var hyphenate = cached(function (str) { return str.replace(hyphenateRE, '-$1').toLowerCase() }); /** * Simple bind polyfill for environments that do not support it, * e.g., PhantomJS 1.x. Technically, we don't need this anymore * since native bind is now performant enough in most browsers. * But removing it would mean breaking code that was able to run in * PhantomJS 1.x, so this must be kept for backward compatibility. */ /* istanbul ignore next */ function polyfillBind (fn, ctx) { function boundFn (a) { var l = arguments.length; return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx) } boundFn._length = fn.length; return boundFn } function nativeBind (fn, ctx) { return fn.bind(ctx) } var bind = Function.prototype.bind ? nativeBind : polyfillBind; /** * Convert an Array-like object to a real Array. */ function toArray (list, start) { start = start || 0; var i = list.length - start; var ret = new Array(i); while (i--) { ret[i] = list[i + start]; } return ret } /** * Mix properties into target object. */ function extend (to, _from) { for (var key in _from) { to[key] = _from[key]; } return to } /** * Merge an Array of Objects into a single Object. */ function toObject (arr) { var res = {}; for (var i = 0; i < arr.length; i++) { if (arr[i]) { extend(res, arr[i]); } } return res } /* eslint-disable no-unused-vars */ /** * Perform no operation. * Stubbing args to make Flow happy without leaving useless transpiled code * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). */ function noop (a, b, c) {} /** * Always return false. */ var no = function (a, b, c) { return false; }; /* eslint-enable no-unused-vars */ /** * Return the same value. */ var identity = function (_) { return _; }; /** * Generate a string containing static keys from compiler modules. */ function genStaticKeys (modules) { return modules.reduce(function (keys, m) { return keys.concat(m.staticKeys || []) }, []).join(',') } /** * Check if two values are loosely equal - that is, * if they are plain objects, do they have the same shape? */ function looseEqual (a, b) { if (a === b) { return true } var isObjectA = isObject(a); var isObjectB = isObject(b); if (isObjectA && isObjectB) { try { var isArrayA = Array.isArray(a); var isArrayB = Array.isArray(b); if (isArrayA && isArrayB) { return a.length === b.length && a.every(function (e, i) { return looseEqual(e, b[i]) }) } else if (a instanceof Date && b instanceof Date) { return a.getTime() === b.getTime() } else if (!isArrayA && !isArrayB) { var keysA = Object.keys(a); var keysB = Object.keys(b); return keysA.length === keysB.length && keysA.every(function (key) { return looseEqual(a[key], b[key]) }) } else { /* istanbul ignore next */ return false } } catch (e) { /* istanbul ignore next */ return false } } else if (!isObjectA && !isObjectB) { return String(a) === String(b) } else { return false } } /** * Return the first index at which a loosely equal value can be * found in the array (if value is a plain object, the array must * contain an object of the same shape), or -1 if it is not present. */ function looseIndexOf (arr, val) { for (var i = 0; i < arr.length; i++) { if (looseEqual(arr[i], val)) { return i } } return -1 } /** * Ensure a function is called only once. */ function once (fn) { var called = false; return function () { if (!called) { called = true; fn.apply(this, arguments); } } } var SSR_ATTR = 'data-server-rendered'; var ASSET_TYPES = [ 'component', 'directive', 'filter' ]; var LIFECYCLE_HOOKS = [ 'beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'beforeDestroy', 'destroyed', 'activated', 'deactivated', 'errorCaptured', 'serverPrefetch' ]; /* */ var config = ({ /** * Option merge strategies (used in core/util/options) */ // $flow-disable-line optionMergeStrategies: Object.create(null), /** * Whether to suppress warnings. */ silent: false, /** * Show production mode tip message on boot? */ productionTip: "development" !== 'production', /** * Whether to enable devtools */ devtools: "development" !== 'production', /** * Whether to record perf */ performance: false, /** * Error handler for watcher errors */ errorHandler: null, /** * Warn handler for watcher warns */ warnHandler: null, /** * Ignore certain custom elements */ ignoredElements: [], /** * Custom user key aliases for v-on */ // $flow-disable-line keyCodes: Object.create(null), /** * Check if a tag is reserved so that it cannot be registered as a * component. This is platform-dependent and may be overwritten. */ isReservedTag: no, /** * Check if an attribute is reserved so that it cannot be used as a component * prop. This is platform-dependent and may be overwritten. */ isReservedAttr: no, /** * Check if a tag is an unknown element. * Platform-dependent. */ isUnknownElement: no, /** * Get the namespace of an element */ getTagNamespace: noop, /** * Parse the real tag name for the specific platform. */ parsePlatformTagName: identity, /** * Check if an attribute must be bound using property, e.g. value * Platform-dependent. */ mustUseProp: no, /** * Perform updates asynchronously. Intended to be used by Vue Test Utils * This will significantly reduce performance if set to false. */ async: true, /** * Exposed for legacy reasons */ _lifecycleHooks: LIFECYCLE_HOOKS }); /* */ /** * unicode letters used for parsing html tags, component names and property paths. * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname * skipping \u10000-\uEFFFF due to it freezing up PhantomJS */ var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/; /** * Check if a string starts with $ or _ */ function isReserved (str) { var c = (str + '').charCodeAt(0); return c === 0x24 || c === 0x5F } /** * Define a property. */ function def (obj, key, val, enumerable) { Object.defineProperty(obj, key, { value: val, enumerable: !!enumerable, writable: true, configurable: true }); } /** * Parse simple path. */ var bailRE = new RegExp(("[^" + (unicodeRegExp.source) + ".$_\\d]")); function parsePath (path) { if (bailRE.test(path)) { return } var segments = path.split('.'); return function (obj) { for (var i = 0; i < segments.length; i++) { if (!obj) { return } obj = obj[segments[i]]; } return obj } } /* */ // can we use __proto__? var hasProto = '__proto__' in {}; // Browser environment sniffing var inBrowser = typeof window !== 'undefined'; var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform; var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase(); var UA = inBrowser && window.navigator.userAgent.toLowerCase(); var isIE = UA && /msie|trident/.test(UA); var isIE9 = UA && UA.indexOf('msie 9.0') > 0; var isEdge = UA && UA.indexOf('edge/') > 0; var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android'); var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios'); var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge; var isPhantomJS = UA && /phantomjs/.test(UA); var isFF = UA && UA.match(/firefox\/(\d+)/); // Firefox has a "watch" function on Object.prototype... var nativeWatch = ({}).watch; var supportsPassive = false; if (inBrowser) { try { var opts = {}; Object.defineProperty(opts, 'passive', ({ get: function get () { /* istanbul ignore next */ supportsPassive = true; } })); // https://github.com/facebook/flow/issues/285 window.addEventListener('test-passive', null, opts); } catch (e) {} } // this needs to be lazy-evaled because vue may be required before // vue-server-renderer can set VUE_ENV var _isServer; var isServerRendering = function () { if (_isServer === undefined) { /* istanbul ignore if */ if (!inBrowser && !inWeex && typeof global !== 'undefined') { // detect presence of vue-server-renderer and avoid // Webpack shimming the process _isServer = global['process'] && global['process'].env.VUE_ENV === 'server'; } else { _isServer = false; } } return _isServer }; // detect devtools var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; /* istanbul ignore next */ function isNative (Ctor) { return typeof Ctor === 'function' && /native code/.test(Ctor.toString()) } var hasSymbol = typeof Symbol !== 'undefined' && isNative(Symbol) && typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys); var _Set; /* istanbul ignore if */ // $flow-disable-line if (typeof Set !== 'undefined' && isNative(Set)) { // use native Set when available. _Set = Set; } else { // a non-standard Set polyfill that only works with primitive keys. _Set = /*@__PURE__*/(function () { function Set () { this.set = Object.create(null); } Set.prototype.has = function has (key) { return this.set[key] === true }; Set.prototype.add = function add (key) { this.set[key] = true; }; Set.prototype.clear = function clear () { this.set = Object.create(null); }; return Set; }()); } /* */ var warn = noop; var tip = noop; var generateComponentTrace = (noop); // work around flow check var formatComponentName = (noop); { var hasConsole = typeof console !== 'undefined'; var classifyRE = /(?:^|[-_])(\w)/g; var classify = function (str) { return str .replace(classifyRE, function (c) { return c.toUpperCase(); }) .replace(/[-_]/g, ''); }; warn = function (msg, vm) { var trace = vm ? generateComponentTrace(vm) : ''; if (config.warnHandler) { config.warnHandler.call(null, msg, vm, trace); } else if (hasConsole && (!config.silent)) { console.error(("[Vue warn]: " + msg + trace)); } }; tip = function (msg, vm) { if (hasConsole && (!config.silent)) { console.warn("[Vue tip]: " + msg + ( vm ? generateComponentTrace(vm) : '' )); } }; formatComponentName = function (vm, includeFile) { if (vm.$root === vm) { return '' } var options = typeof vm === 'function' && vm.cid != null ? vm.options : vm._isVue ? vm.$options || vm.constructor.options : vm; var name = options.name || options._componentTag; var file = options.__file; if (!name && file) { var match = file.match(/([^/\\]+)\.vue$/); name = match && match[1]; } return ( (name ? ("<" + (classify(name)) + ">") : "") + (file && includeFile !== false ? (" at " + file) : '') ) }; var repeat = function (str, n) { var res = ''; while (n) { if (n % 2 === 1) { res += str; } if (n > 1) { str += str; } n >>= 1; } return res }; generateComponentTrace = function (vm) { if (vm._isVue && vm.$parent) { var tree = []; var currentRecursiveSequence = 0; while (vm) { if (tree.length > 0) { var last = tree[tree.length - 1]; if (last.constructor === vm.constructor) { currentRecursiveSequence++; vm = vm.$parent; continue } else if (currentRecursiveSequence > 0) { tree[tree.length - 1] = [last, currentRecursiveSequence]; currentRecursiveSequence = 0; } } tree.push(vm); vm = vm.$parent; } return '\n\nfound in\n\n' + tree .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm) ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)") : formatComponentName(vm))); }) .join('\n') } else { return ("\n\n(found in " + (formatComponentName(vm)) + ")") } }; } /* */ var uid = 0; /** * A dep is an observable that can have multiple * directives subscribing to it. */ var Dep = function Dep () { this.id = uid++; this.subs = []; }; Dep.prototype.addSub = function addSub (sub) { this.subs.push(sub); }; Dep.prototype.removeSub = function removeSub (sub) { remove(this.subs, sub); }; Dep.prototype.depend = function depend () { if (Dep.target) { Dep.target.addDep(this); } }; Dep.prototype.notify = function notify () { // stabilize the subscriber list first var subs = this.subs.slice(); if (!config.async) { // subs aren't sorted in scheduler if not running async // we need to sort them now to make sure they fire in correct // order subs.sort(function (a, b) { return a.id - b.id; }); } for (var i = 0, l = subs.length; i < l; i++) { subs[i].update(); } }; // The current target watcher being evaluated. // This is globally unique because only one watcher // can be evaluated at a time. Dep.target = null; var targetStack = []; function pushTarget (target) { targetStack.push(target); Dep.target = target; } function popTarget () { targetStack.pop(); Dep.target = targetStack[targetStack.length - 1]; } /* */ var VNode = function VNode ( tag, data, children, text, elm, context, componentOptions, asyncFactory ) { this.tag = tag; this.data = data; this.children = children; this.text = text; this.elm = elm; this.ns = undefined; this.context = context; this.fnContext = undefined; this.fnOptions = undefined; this.fnScopeId = undefined; this.key = data && data.key; this.componentOptions = componentOptions; this.componentInstance = undefined; this.parent = undefined; this.raw = false; this.isStatic = false; this.isRootInsert = true; this.isComment = false; this.isCloned = false; this.isOnce = false; this.asyncFactory = asyncFactory; this.asyncMeta = undefined; this.isAsyncPlaceholder = false; }; var prototypeAccessors = { child: { configurable: true } }; // DEPRECATED: alias for componentInstance for backwards compat. /* istanbul ignore next */ prototypeAccessors.child.get = function () { return this.componentInstance }; Object.defineProperties( VNode.prototype, prototypeAccessors ); var createEmptyVNode = function (text) { if ( text === void 0 ) text = ''; var node = new VNode(); node.text = text; node.isComment = true; return node }; function createTextVNode (val) { return new VNode(undefined, undefined, undefined, String(val)) } // optimized shallow clone // used for static nodes and slot nodes because they may be reused across // multiple renders, cloning them avoids errors when DOM manipulations rely // on their elm reference. function cloneVNode (vnode) { var cloned = new VNode( vnode.tag, vnode.data, // #7975 // clone children array to avoid mutating original in case of cloning // a child. vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory ); cloned.ns = vnode.ns; cloned.isStatic = vnode.isStatic; cloned.key = vnode.key; cloned.isComment = vnode.isComment; cloned.fnContext = vnode.fnContext; cloned.fnOptions = vnode.fnOptions; cloned.fnScopeId = vnode.fnScopeId; cloned.asyncMeta = vnode.asyncMeta; cloned.isCloned = true; return cloned } /* * not type checking this file because flow doesn't play well with * dynamically accessing methods on Array prototype */ var arrayProto = Array.prototype; var arrayMethods = Object.create(arrayProto); var methodsToPatch = [ 'push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse' ]; /** * Intercept mutating methods and emit events */ methodsToPatch.forEach(function (method) { // cache original method var original = arrayProto[method]; def(arrayMethods, method, function mutator () { var args = [], len = arguments.length; while ( len-- ) args[ len ] = arguments[ len ]; var result = original.apply(this, args); var ob = this.__ob__; var inserted; switch (method) { case 'push': case 'unshift': inserted = args; break case 'splice': inserted = args.slice(2); break } if (inserted) { ob.observeArray(inserted); } // notify change ob.dep.notify(); return result }); }); /* */ var arrayKeys = Object.getOwnPropertyNames(arrayMethods); /** * In some cases we may want to disable observation inside a component's * update computation. */ var shouldObserve = true; function toggleObserving (value) { shouldObserve = value; } /** * Observer class that is attached to each observed * object. Once attached, the observer converts the target * object's property keys into getter/setters that * collect dependencies and dispatch updates. */ var Observer = function Observer (value) { this.value = value; this.dep = new Dep(); this.vmCount = 0; def(value, '__ob__', this); if (Array.isArray(value)) { if (hasProto) { protoAugment(value, arrayMethods); } else { copyAugment(value, arrayMethods, arrayKeys); } this.observeArray(value); } else { this.walk(value); } }; /** * Walk through all properties and convert them into * getter/setters. This method should only be called when * value type is Object. */ Observer.prototype.walk = function walk (obj) { var keys = Object.keys(obj); for (var i = 0; i < keys.length; i++) { defineReactive$$1(obj, keys[i]); } }; /** * Observe a list of Array items. */ Observer.prototype.observeArray = function observeArray (items) { for (var i = 0, l = items.length; i < l; i++) { observe(items[i]); } }; // helpers /** * Augment a target Object or Array by intercepting * the prototype chain using __proto__ */ function protoAugment (target, src) { /* eslint-disable no-proto */ target.__proto__ = src; /* eslint-enable no-proto */ } /** * Augment a target Object or Array by defining * hidden properties. */ /* istanbul ignore next */ function copyAugment (target, src, keys) { for (var i = 0, l = keys.length; i < l; i++) { var key = keys[i]; def(target, key, src[key]); } } /** * Attempt to create an observer instance for a value, * returns the new observer if successfully observed, * or the existing observer if the value already has one. */ function observe (value, asRootData) { if (!isObject(value) || value instanceof VNode) { return } var ob; if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { ob = value.__ob__; } else if ( shouldObserve && !isServerRendering() && (Array.isArray(value) || isPlainObject(value)) && Object.isExtensible(value) && !value._isVue ) { ob = new Observer(value); } if (asRootData && ob) { ob.vmCount++; } return ob } /** * Define a reactive property on an Object. */ function defineReactive$$1 ( obj, key, val, customSetter, shallow ) { var dep = new Dep(); var property = Object.getOwnPropertyDescriptor(obj, key); if (property && property.configurable === false) { return } // cater for pre-defined getter/setters var getter = property && property.get; var setter = property && property.set; if ((!getter || setter) && arguments.length === 2) { val = obj[key]; } var childOb = !shallow && observe(val); Object.defineProperty(obj, key, { enumerable: true, configurable: true, get: function reactiveGetter () { var value = getter ? getter.call(obj) : val; if (Dep.target) { dep.depend(); if (childOb) { childOb.dep.depend(); if (Array.isArray(value)) { dependArray(value); } } } return value }, set: function reactiveSetter (newVal) { var value = getter ? getter.call(obj) : val; /* eslint-disable no-self-compare */ if (newVal === value || (newVal !== newVal && value !== value)) { return } /* eslint-enable no-self-compare */ if (customSetter) { customSetter(); } // #7981: for accessor properties without setter if (getter && !setter) { return } if (setter) { setter.call(obj, newVal); } else { val = newVal; } childOb = !shallow && observe(newVal); dep.notify(); } }); } /** * Set a property on an object. Adds the new property and * triggers change notification if the property doesn't * already exist. */ function set (target, key, val) { if (isUndef(target) || isPrimitive(target) ) { warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target)))); } if (Array.isArray(target) && isValidArrayIndex(key)) { target.length = Math.max(target.length, key); target.splice(key, 1, val); return val } if (key in target && !(key in Object.prototype)) { target[key] = val; return val } var ob = (target).__ob__; if (target._isVue || (ob && ob.vmCount)) { warn( 'Avoid adding reactive properties to a Vue instance or its root $data ' + 'at runtime - declare it upfront in the data option.' ); return val } if (!ob) { target[key] = val; return val } defineReactive$$1(ob.value, key, val); ob.dep.notify(); return val } /** * Delete a property and trigger change if necessary. */ function del (target, key) { if (isUndef(target) || isPrimitive(target) ) { warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target)))); } if (Array.isArray(target) && isValidArrayIndex(key)) { target.splice(key, 1); return } var ob = (target).__ob__; if (target._isVue || (ob && ob.vmCount)) { warn( 'Avoid deleting properties on a Vue instance or its root $data ' + '- just set it to null.' ); return } if (!hasOwn(target, key)) { return } delete target[key]; if (!ob) { return } ob.dep.notify(); } /** * Collect dependencies on array elements when the array is touched, since * we cannot intercept array element access like property getters. */ function dependArray (value) { for (var e = (void 0), i = 0, l = value.length; i < l; i++) { e = value[i]; e && e.__ob__ && e.__ob__.dep.depend(); if (Array.isArray(e)) { dependArray(e); } } } /* */ /** * Option overwriting strategies are functions that handle * how to merge a parent option value and a child option * value into the final value. */ var strats = config.optionMergeStrategies; /** * Options with restrictions */ { strats.el = strats.propsData = function (parent, child, vm, key) { if (!vm) { warn( "option \"" + key + "\" can only be used during instance " + 'creation with the `new` keyword.' ); } return defaultStrat(parent, child) }; } /** * Helper that recursively merges two data objects together. */ function mergeData (to, from) { if (!from) { return to } var key, toVal, fromVal; var keys = hasSymbol ? Reflect.ownKeys(from) : Object.keys(from); for (var i = 0; i < keys.length; i++) { key = keys[i]; // in case the object is already observed... if (key === '__ob__') { continue } toVal = to[key]; fromVal = from[key]; if (!hasOwn(to, key)) { set(to, key, fromVal); } else if ( toVal !== fromVal && isPlainObject(toVal) && isPlainObject(fromVal) ) { mergeData(toVal, fromVal); } } return to } /** * Data */ function mergeDataOrFn ( parentVal, childVal, vm ) { if (!vm) { // in a Vue.extend merge, both should be functions if (!childVal) { return parentVal } if (!parentVal) { return childVal } // when parentVal & childVal are both present, // we need to return a function that returns the // merged result of both functions... no need to // check if parentVal is a function here because // it has to be a function to pass previous merges. return function mergedDataFn () { return mergeData( typeof childVal === 'function' ? childVal.call(this, this) : childVal, typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal ) } } else { return function mergedInstanceDataFn () { // instance merge var instanceData = typeof childVal === 'function' ? childVal.call(vm, vm) : childVal; var defaultData = typeof parentVal === 'function' ? parentVal.call(vm, vm) : parentVal; if (instanceData) { return mergeData(instanceData, defaultData) } else { return defaultData } } } } strats.data = function ( parentVal, childVal, vm ) { if (!vm) { if (childVal && typeof childVal !== 'function') { warn( 'The "data" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm ); return parentVal } return mergeDataOrFn(parentVal, childVal) } return mergeDataOrFn(parentVal, childVal, vm) }; /** * Hooks and props are merged as arrays. */ function mergeHook ( parentVal, childVal ) { var res = childVal ? parentVal ? parentVal.concat(childVal) : Array.isArray(childVal) ? childVal : [childVal] : parentVal; return res ? dedupeHooks(res) : res } function dedupeHooks (hooks) { var res = []; for (var i = 0; i < hooks.length; i++) { if (res.indexOf(hooks[i]) === -1) { res.push(hooks[i]); } } return res } LIFECYCLE_HOOKS.forEach(function (hook) { strats[hook] = mergeHook; }); /** * Assets * * When a vm is present (instance creation), we need to do * a three-way merge between constructor options, instance * options and parent options. */ function mergeAssets ( parentVal, childVal, vm, key ) { var res = Object.create(parentVal || null); if (childVal) { assertObjectType(key, childVal, vm); return extend(res, childVal) } else { return res } } ASSET_TYPES.forEach(function (type) { strats[type + 's'] = mergeAssets; }); /** * Watchers. * * Watchers hashes should not overwrite one * another, so we merge them as arrays. */ strats.watch = function ( parentVal, childVal, vm, key ) { // work around Firefox's Object.prototype.watch... if (parentVal === nativeWatch) { parentVal = undefined; } if (childVal === nativeWatch) { childVal = undefined; } /* istanbul ignore if */ if (!childVal) { return Object.create(parentVal || null) } { assertObjectType(key, childVal, vm); } if (!parentVal) { return childVal } var ret = {}; extend(ret, parentVal); for (var key$1 in childVal) { var parent = ret[key$1]; var child = childVal[key$1]; if (parent && !Array.isArray(parent)) { parent = [parent]; } ret[key$1] = parent ? parent.concat(child) : Array.isArray(child) ? child : [child]; } return ret }; /** * Other object hashes. */ strats.props = strats.methods = strats.inject = strats.computed = function ( parentVal, childVal, vm, key ) { if (childVal && "development" !== 'production') { assertObjectType(key, childVal, vm); } if (!parentVal) { return childVal } var ret = Object.create(null); extend(ret, parentVal); if (childVal) { extend(ret, childVal); } return ret }; strats.provide = mergeDataOrFn; /** * Default strategy. */ var defaultStrat = function (parentVal, childVal) { return childVal === undefined ? parentVal : childVal }; /** * Validate component names */ function checkComponents (options) { for (var key in options.components) { validateComponentName(key); } } function validateComponentName (name) { if (!new RegExp(("^[a-zA-Z][\\-\\.0-9_" + (unicodeRegExp.source) + "]*$")).test(name)) { warn( 'Invalid component name: "' + name + '". Component names ' + 'should conform to valid custom element name in html5 specification.' ); } if (isBuiltInTag(name) || config.isReservedTag(name)) { warn( 'Do not use built-in or reserved HTML elements as component ' + 'id: ' + name ); } } /** * Ensure all props option syntax are normalized into the * Object-based format. */ function normalizeProps (options, vm) { var props = options.props; if (!props) { return } var res = {}; var i, val, name; if (Array.isArray(props)) { i = props.length; while (i--) { val = props[i]; if (typeof val === 'string') { name = camelize(val); res[name] = { type: null }; } else { warn('props must be strings when using array syntax.'); } } } else if (isPlainObject(props)) { for (var key in props) { val = props[key]; name = camelize(key); res[name] = isPlainObject(val) ? val : { type: val }; } } else { warn( "Invalid value for option \"props\": expected an Array or an Object, " + "but got " + (toRawType(props)) + ".", vm ); } options.props = res; } /** * Normalize all injections into Object-based format */ function normalizeInject (options, vm) { var inject = options.inject; if (!inject) { return } var normalized = options.inject = {}; if (Array.isArray(inject)) { for (var i = 0; i < inject.length; i++) { normalized[inject[i]] = { from: inject[i] }; } } else if (isPlainObject(inject)) { for (var key in inject) { var val = inject[key]; normalized[key] = isPlainObject(val) ? extend({ from: key }, val) : { from: val }; } } else { warn( "Invalid value for option \"inject\": expected an Array or an Object, " + "but got " + (toRawType(inject)) + ".", vm ); } } /** * Normalize raw function directives into object format. */ function normalizeDirectives (options) { var dirs = options.directives; if (dirs) { for (var key in dirs) { var def$$1 = dirs[key]; if (typeof def$$1 === 'function') { dirs[key] = { bind: def$$1, update: def$$1 }; } } } } function assertObjectType (name, value, vm) { if (!isPlainObject(value)) { warn( "Invalid value for option \"" + name + "\": expected an Object, " + "but got " + (toRawType(value)) + ".", vm ); } } /** * Merge two option objects into a new one. * Core utility used in both instantiation and inheritance. */ function mergeOptions ( parent, child, vm ) { { checkComponents(child); } if (typeof child === 'function') { child = child.options; } normalizeProps(child, vm); normalizeInject(child, vm); normalizeDirectives(child); // Apply extends and mixins on the child options, // but only if it is a raw options object that isn't // the result of another mergeOptions call. // Only merged options has the _base property. if (!child._base) { if (child.extends) { parent = mergeOptions(parent, child.extends, vm); } if (child.mixins) { for (var i = 0, l = child.mixins.length; i < l; i++) { parent = mergeOptions(parent, child.mixins[i], vm); } } } var options = {}; var key; for (key in parent) { mergeField(key); } for (key in child) { if (!hasOwn(parent, key)) { mergeField(key); } } function mergeField (key) { var strat = strats[key] || defaultStrat; options[key] = strat(parent[key], child[key], vm, key); } return options } /** * Resolve an asset. * This function is used because child instances need access * to assets defined in its ancestor chain. */ function resolveAsset ( options, type, id, warnMissing ) { /* istanbul ignore if */ if (typeof id !== 'string') { return } var assets = options[type]; // check local registration variations first if (hasOwn(assets, id)) { return assets[id] } var camelizedId = camelize(id); if (hasOwn(assets, camelizedId)) { return assets[camelizedId] } var PascalCaseId = capitalize(camelizedId); if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] } // fallback to prototype chain var res = assets[id] || assets[camelizedId] || assets[PascalCaseId]; if (warnMissing && !res) { warn( 'Failed to resolve ' + type.slice(0, -1) + ': ' + id, options ); } return res } /* */ function validateProp ( key, propOptions, propsData, vm ) { var prop = propOptions[key]; var absent = !hasOwn(propsData, key); var value = propsData[key]; // boolean casting var booleanIndex = getTypeIndex(Boolean, prop.type); if (booleanIndex > -1) { if (absent && !hasOwn(prop, 'default')) { value = false; } else if (value === '' || value === hyphenate(key)) { // only cast empty string / same name to boolean if // boolean has higher priority var stringIndex = getTypeIndex(String, prop.type); if (stringIndex < 0 || booleanIndex < stringIndex) { value = true; } } } // check default value if (value === undefined) { value = getPropDefaultValue(vm, prop, key); // since the default value is a fresh copy, // make sure to observe it. var prevShouldObserve = shouldObserve; toggleObserving(true); observe(value); toggleObserving(prevShouldObserve); } { assertProp(prop, key, value, vm, absent); } return value } /** * Get the default value of a prop. */ function getPropDefaultValue (vm, prop, key) { // no default, return undefined if (!hasOwn(prop, 'default')) { return undefined } var def = prop.default; // warn against non-factory defaults for Object & Array if (isObject(def)) { warn( 'Invalid default value for prop "' + key + '": ' + 'Props with type Object/Array must use a factory function ' + 'to return the default value.', vm ); } // the raw prop value was also undefined from previous render, // return previous default value to avoid unnecessary watcher trigger if (vm && vm.$options.propsData && vm.$options.propsData[key] === undefined && vm._props[key] !== undefined ) { return vm._props[key] } // call factory function for non-Function types // a value is Function if its prototype is function even across different execution context return typeof def === 'function' && getType(prop.type) !== 'Function' ? def.call(vm) : def } /** * Assert whether a prop is valid. */ function assertProp ( prop, name, value, vm, absent ) { if (prop.required && absent) { warn( 'Missing required prop: "' + name + '"', vm ); return } if (value == null && !prop.required) { return } var type = prop.type; var valid = !type || type === true; var expectedTypes = []; if (type) { if (!Array.isArray(type)) { type = [type]; } for (var i = 0; i < type.length && !valid; i++) { var assertedType = assertType(value, type[i]); expectedTypes.push(assertedType.expectedType || ''); valid = assertedType.valid; } } if (!valid) { warn( getInvalidTypeMessage(name, value, expectedTypes), vm ); return } var validator = prop.validator; if (validator) { if (!validator(value)) { warn( 'Invalid prop: custom validator check failed for prop "' + name + '".', vm ); } } } var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/; function assertType (value, type) { var valid; var expectedType = getType(type); if (simpleCheckRE.test(expectedType)) { var t = typeof value; valid = t === expectedType.toLowerCase(); // for primitive wrapper objects if (!valid && t === 'object') { valid = value instanceof type; } } else if (expectedType === 'Object') { valid = isPlainObject(value); } else if (expectedType === 'Array') { valid = Array.isArray(value); } else { valid = value instanceof type; } return { valid: valid, expectedType: expectedType } } /** * Use function string name to check built-in types, * because a simple equality check will fail when running * across different vms / iframes. */ function getType (fn) { var match = fn && fn.toString().match(/^\s*function (\w+)/); return match ? match[1] : '' } function isSameType (a, b) { return getType(a) === getType(b) } function getTypeIndex (type, expectedTypes) { if (!Array.isArray(expectedTypes)) { return isSameType(expectedTypes, type) ? 0 : -1 } for (var i = 0, len = expectedTypes.length; i < len; i++) { if (isSameType(expectedTypes[i], type)) { return i } } return -1 } function getInvalidTypeMessage (name, value, expectedTypes) { var message = "Invalid prop: type check failed for prop \"" + name + "\"." + " Expected " + (expectedTypes.map(capitalize).join(', ')); var expectedType = expectedTypes[0]; var receivedType = toRawType(value); var expectedValue = styleValue(value, expectedType); var receivedValue = styleValue(value, receivedType); // check if we need to specify expected value if (expectedTypes.length === 1 && isExplicable(expectedType) && !isBoolean(expectedType, receivedType)) { message += " with value " + expectedValue; } message += ", got " + receivedType + " "; // check if we need to specify received value if (isExplicable(receivedType)) { message += "with value " + receivedValue + "."; } return message } function styleValue (value, type) { if (type === 'String') { return ("\"" + value + "\"") } else if (type === 'Number') { return ("" + (Number(value))) } else { return ("" + value) } } function isExplicable (value) { var explicitTypes = ['string', 'number', 'boolean']; return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; }) } function isBoolean () { var args = [], len = arguments.length; while ( len-- ) args[ len ] = arguments[ len ]; return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; }) } /* */ function handleError (err, vm, info) { // Deactivate deps tracking while processing error handler to avoid possible infinite rendering. // See: https://github.com/vuejs/vuex/issues/1505 pushTarget(); try { if (vm) { var cur = vm; while ((cur = cur.$parent)) { var hooks = cur.$options.errorCaptured; if (hooks) { for (var i = 0; i < hooks.length; i++) { try { var capture = hooks[i].call(cur, err, vm, info) === false; if (capture) { return } } catch (e) { globalHandleError(e, cur, 'errorCaptured hook'); } } } } } globalHandleError(err, vm, info); } finally { popTarget(); } } function invokeWithErrorHandling ( handler, context, args, vm, info ) { var res; try { res = args ? handler.apply(context, args) : handler.call(context); if (res && !res._isVue && isPromise(res) && !res._handled) { res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); }); // issue #9511 // avoid catch triggering multiple times when nested calls res._handled = true; } } catch (e) { handleError(e, vm, info); } return res } function globalHandleError (err, vm, info) { if (config.errorHandler) { try { return config.errorHandler.call(null, err, vm, info) } catch (e) { // if the user intentionally throws the original error in the handler, // do not log it twice if (e !== err) { logError(e, null, 'config.errorHandler'); } } } logError(err, vm, info); } function logError (err, vm, info) { { warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm); } /* istanbul ignore else */ if ((inBrowser || inWeex) && typeof console !== 'undefined') { console.error(err); } else { throw err } } /* */ var isUsingMicroTask = false; var callbacks = []; var pending = false; function flushCallbacks () { pending = false; var copies = callbacks.slice(0); callbacks.length = 0; for (var i = 0; i < copies.length; i++) { copies[i](); } } // Here we have async deferring wrappers using microtasks. // In 2.5 we used (macro) tasks (in combination with microtasks). // However, it has subtle problems when state is changed right before repaint // (e.g. #6813, out-in transitions). // Also, using (macro) tasks in event handler would cause some weird behaviors // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109). // So we now use microtasks everywhere, again. // A major drawback of this tradeoff is that there are some scenarios // where microtasks have too high a priority and fire in between supposedly // sequential events (e.g. #4521, #6690, which have workarounds) // or even between bubbling of the same event (#6566). var timerFunc; // The nextTick behavior leverages the microtask queue, which can be accessed // via either native Promise.then or MutationObserver. // MutationObserver has wider support, however it is seriously bugged in // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It // completely stops working after triggering a few times... so, if native // Promise is available, we will use it: /* istanbul ignore next, $flow-disable-line */ if (typeof Promise !== 'undefined' && isNative(Promise)) { var p = Promise.resolve(); timerFunc = function () { p.then(flushCallbacks); // In problematic UIWebViews, Promise.then doesn't completely break, but // it can get stuck in a weird state where callbacks are pushed into the // microtask queue but the queue isn't being flushed, until the browser // needs to do some other work, e.g. handle a timer. Therefore we can // "force" the microtask queue to be flushed by adding an empty timer. if (isIOS) { setTimeout(noop); } }; isUsingMicroTask = true; } else if (!isIE && typeof MutationObserver !== 'undefined' && ( isNative(MutationObserver) || // PhantomJS and iOS 7.x MutationObserver.toString() === '[object MutationObserverConstructor]' )) { // Use MutationObserver where native Promise is not available, // e.g. PhantomJS, iOS7, Android 4.4 // (#6466 MutationObserver is unreliable in IE11) var counter = 1; var observer = new MutationObserver(flushCallbacks); var textNode = document.createTextNode(String(counter)); observer.observe(textNode, { characterData: true }); timerFunc = function () { counter = (counter + 1) % 2; textNode.data = String(counter); }; isUsingMicroTask = true; } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) { // Fallback to setImmediate. // Techinically it leverages the (macro) task queue, // but it is still a better choice than setTimeout. timerFunc = function () { setImmediate(flushCallbacks); }; } else { // Fallback to setTimeout. timerFunc = function () { setTimeout(flushCallbacks, 0); }; } function nextTick (cb, ctx) { var _resolve; callbacks.push(function () { if (cb) { try { cb.call(ctx); } catch (e) { handleError(e, ctx, 'nextTick'); } } else if (_resolve) { _resolve(ctx); } }); if (!pending) { pending = true; timerFunc(); } // $flow-disable-line if (!cb && typeof Promise !== 'undefined') { return new Promise(function (resolve) { _resolve = resolve; }) } } /* */ var mark; var measure; { var perf = inBrowser && window.performance; /* istanbul ignore if */ if ( perf && perf.mark && perf.measure && perf.clearMarks && perf.clearMeasures ) { mark = function (tag) { return perf.mark(tag); }; measure = function (name, startTag, endTag) { perf.measure(name, startTag, endTag); perf.clearMarks(startTag); perf.clearMarks(endTag); // perf.clearMeasures(name) }; } } /* not type checking this file because flow doesn't play well with Proxy */ var initProxy; { var allowedGlobals = makeMap( 'Infinity,undefined,NaN,isFinite,isNaN,' + 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' + 'require' // for Webpack/Browserify ); var warnNonPresent = function (target, key) { warn( "Property or method \"" + key + "\" is not defined on the instance but " + 'referenced during render. Make sure that this property is reactive, ' + 'either in the data option, or for class-based components, by ' + 'initializing the property. ' + 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target ); }; var warnReservedPrefix = function (target, key) { warn( "Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " + 'properties starting with "$" or "_" are not proxied in the Vue instance to ' + 'prevent conflicts with Vue internals' + 'See: https://vuejs.org/v2/api/#data', target ); }; var hasProxy = typeof Proxy !== 'undefined' && isNative(Proxy); if (hasProxy) { var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact'); config.keyCodes = new Proxy(config.keyCodes, { set: function set (target, key, value) { if (isBuiltInModifier(key)) { warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key)); return false } else { target[key] = value; return true } } }); } var hasHandler = { has: function has (target, key) { var has = key in target; var isAllowed = allowedGlobals(key) || (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data)); if (!has && !isAllowed) { if (key in target.$data) { warnReservedPrefix(target, key); } else { warnNonPresent(target, key); } } return has || !isAllowed } }; var getHandler = { get: function get (target, key) { if (typeof key === 'string' && !(key in target)) { if (key in target.$data) { warnReservedPrefix(target, key); } else { warnNonPresent(target, key); } } return target[key] } }; initProxy = function initProxy (vm) { if (hasProxy) { // determine which proxy handler to use var options = vm.$options; var handlers = options.render && options.render._withStripped ? getHandler : hasHandler; vm._renderProxy = new Proxy(vm, handlers); } else { vm._renderProxy = vm; } }; } /* */ var seenObjects = new _Set(); /** * Recursively traverse an object to evoke all converted * getters, so that every nested property inside the object * is collected as a "deep" dependency. */ function traverse (val) { _traverse(val, seenObjects); seenObjects.clear(); } function _traverse (val, seen) { var i, keys; var isA = Array.isArray(val); if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) { return } if (val.__ob__) { var depId = val.__ob__.dep.id; if (seen.has(depId)) { return } seen.add(depId); } if (isA) { i = val.length; while (i--) { _traverse(val[i], seen); } } else { keys = Object.keys(val); i = keys.length; while (i--) { _traverse(val[keys[i]], seen); } } } /* */ var normalizeEvent = cached(function (name) { var passive = name.charAt(0) === '&'; name = passive ? name.slice(1) : name; var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first name = once$$1 ? name.slice(1) : name; var capture = name.charAt(0) === '!'; name = capture ? name.slice(1) : name; return { name: name, once: once$$1, capture: capture, passive: passive } }); function createFnInvoker (fns, vm) { function invoker () { var arguments$1 = arguments; var fns = invoker.fns; if (Array.isArray(fns)) { var cloned = fns.slice(); for (var i = 0; i < cloned.length; i++) { invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler"); } } else { // return handler return value for single handlers return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler") } } invoker.fns = fns; return invoker } function updateListeners ( on, oldOn, add, remove$$1, createOnceHandler, vm ) { var name, def$$1, cur, old, event; for (name in on) { def$$1 = cur = on[name]; old = oldOn[name]; event = normalizeEvent(name); if (isUndef(cur)) { warn( "Invalid handler for event \"" + (event.name) + "\": got " + String(cur), vm ); } else if (isUndef(old)) { if (isUndef(cur.fns)) { cur = on[name] = createFnInvoker(cur, vm); } if (isTrue(event.once)) { cur = on[name] = createOnceHandler(event.name, cur, event.capture); } add(event.name, cur, event.capture, event.passive, event.params); } else if (cur !== old) { old.fns = cur; on[name] = old; } } for (name in oldOn) { if (isUndef(on[name])) { event = normalizeEvent(name); remove$$1(event.name, oldOn[name], event.capture); } } } /* */ function mergeVNodeHook (def, hookKey, hook) { if (def instanceof VNode) { def = def.data.hook || (def.data.hook = {}); } var invoker; var oldHook = def[hookKey]; function wrappedHook () { hook.apply(this, arguments); // important: remove merged hook to ensure it's called only once // and prevent memory leak remove(invoker.fns, wrappedHook); } if (isUndef(oldHook)) { // no existing hook invoker = createFnInvoker([wrappedHook]); } else { /* istanbul ignore if */ if (isDef(oldHook.fns) && isTrue(oldHook.merged)) { // already a merged invoker invoker = oldHook; invoker.fns.push(wrappedHook); } else { // existing plain hook invoker = createFnInvoker([oldHook, wrappedHook]); } } invoker.merged = true; def[hookKey] = invoker; } /* */ function extractPropsFromVNodeData ( data, Ctor, tag ) { // we are only extracting raw values here. // validation and default values are handled in the child // component itself. var propOptions = Ctor.options.props; if (isUndef(propOptions)) { return } var res = {}; var attrs = data.attrs; var props = data.props; if (isDef(attrs) || isDef(props)) { for (var key in propOptions) { var altKey = hyphenate(key); { var keyInLowerCase = key.toLowerCase(); if ( key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase) ) { tip( "Prop \"" + keyInLowerCase + "\" is passed to component " + (formatComponentName(tag || Ctor)) + ", but the declared prop name is" + " \"" + key + "\". " + "Note that HTML attributes are case-insensitive and camelCased " + "props need to use their kebab-case equivalents when using in-DOM " + "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"." ); } } checkProp(res, props, key, altKey, true) || checkProp(res, attrs, key, altKey, false); } } return res } function checkProp ( res, hash, key, altKey, preserve ) { if (isDef(hash)) { if (hasOwn(hash, key)) { res[key] = hash[key]; if (!preserve) { delete hash[key]; } return true } else if (hasOwn(hash, altKey)) { res[key] = hash[altKey]; if (!preserve) { delete hash[altKey]; } return true } } return false } /* */ // The template compiler attempts to minimize the need for normalization by // statically analyzing the template at compile time. // // For plain HTML markup, normalization can be completely skipped because the // generated render function is guaranteed to return Array. There are // two cases where extra normalization is needed: // 1. When the children contains components - because a functional component // may return an Array instead of a single root. In this case, just a simple // normalization is needed - if any child is an Array, we flatten the whole // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep // because functional components already normalize their own children. function simpleNormalizeChildren (children) { for (var i = 0; i < children.length; i++) { if (Array.isArray(children[i])) { return Array.prototype.concat.apply([], children) } } return children } // 2. When the children contains constructs that always generated nested Arrays, // e.g.