start_controls_section( 'section_item_content', [ 'label' => esc_html__('Item', 'uicore-elements'), ] ); } $this->add_control( 'box_style', [ 'label' => __('Item Style', 'uicore-elements'), 'type' => Controls_Manager::SELECT, 'default' => 'classic', 'options' => [ 'classic' => __('Classic', 'uicore-elements'), 'split' => __('Split', 'uicore-elements'), 'overlay' => __('Overlay', 'uicore-elements'), ], 'render_type' => 'template', 'prefix_class' => 'ui-e-apg-', ] ); $this->add_control( 'split_mobile', [ 'label' => __('Use Classic Layout on Mobile' . UICORE_ELEMENTS_NEW_OPTION, 'uicore-elements'), // TODO: remove badge, at least 2, releases after 1.3.15 'type' => Controls_Manager::SWITCHER, 'default' => 'ui-e-apg-split-not-phone', 'return_value' => 'ui-e-apg-split-not-phone', 'prefix_class' => '', 'condition' => [ 'box_style' => 'split', ], ] ); $this->add_control( 'image', [ 'label' => __('Image', 'uicore-elements'), 'type' => Controls_Manager::SWITCHER, 'separator' => 'before', 'default' => 'yes' ] ); $this->add_control( 'image_size_select', [ 'label' => __('Image Size', 'uicore-elements'), 'type' => Controls_Manager::SELECT, 'default' => 'uicore-medium', 'options' => Helper::get_images_sizes(), 'separator' => 'after', 'condition' => [ 'image' => 'yes', ] ] ); $this->add_control( 'title', [ 'label' => __('Title', 'uicore-elements'), 'type' => Controls_Manager::SWITCHER, 'default' => 'yes' ] ); $this->add_control( 'title_tag', [ 'label' => __('HTML Tag', 'uicore-elements'), 'type' => Controls_Manager::SELECT, 'default' => 'h4', 'options' => Helper::get_title_tags(), 'separator' => 'after', 'condition' => [ 'title' => 'yes', ] ] ); $this->add_control( 'excerpt', [ 'label' => __('Excerpt', 'uicore-elements'), 'type' => Controls_Manager::SWITCHER, 'default' => 'yes' ] ); $this->add_control( 'excerpt_trim', [ 'label' => __('Excerpt Length (words)', 'uicore-elements'), 'type' => Controls_Manager::NUMBER, 'min' => 5, 'max' => 100, 'step' => 1, 'default' => 55, 'separator' => 'after', 'condition' => array( 'excerpt' => 'yes', ), ] ); $this->add_control( 'show_button', [ 'label' => __('Read More Button', 'uicore-elements'), 'type' => Controls_Manager::SWITCHER, 'default' => 'no' ] ); $this->add_control( 'global_link', [ 'label' => __('Global Wrapper Link', 'uicore-elements'), 'type' => Controls_Manager::SWITCHER, 'default' => 'no', 'condition' => [ 'box_style' => 'overlay' ] ] ); if ($section) { $this->end_controls_section(); } } function TRAIT_register_post_button_controls($section = true) { if ($section) { $this->start_controls_section( 'section_button_content', [ 'label' => esc_html__('Button', 'uicore-elements'), 'condition' => array( 'show_button' => 'yes', ), ] ); } $this->register_button_content_controls( [ 'section_condition' => [ 'show_button' => 'yes' ], 'button_default_text' => 'Read More' ] ); $this->remove_control('button_type'); $this->remove_control('link'); $this->remove_control('button_css_id'); $this->remove_control('size'); $this->remove_control('align'); if ($section) { $this->end_controls_section(); } } /** * Register Post Meta Controls. * * @param bool $section. Print section or not. * @param bool $product_metas. If true, will only print options that relates with products. */ function TRAIT_register_post_meta_controls($section = true, $product_metas = false) { if ($section) { $this->start_controls_section( 'section_extra_item_content', [ 'label' => esc_html__('Meta', 'uicore-elements'), ] ); } $this->add_control( 'top_meta', [ 'label' => esc_html__('Top Meta', 'uicore-elements'), 'type' => \Elementor\Controls_Manager::REPEATER, 'fields' => $this->get_meta_content_controls($product_metas), 'default' => [ [ 'type' => $product_metas ? 'product sale' : 'category' ], ], 'title_field' => '{{{ type }}}', 'prevent_empty' => false, 'separator' => 'before' ] ); $this->add_control( 'before_title_meta', [ 'label' => esc_html__('Before Title Meta', 'uicore-elements'), 'type' => \Elementor\Controls_Manager::REPEATER, 'fields' => $this->get_meta_content_controls($product_metas), 'default' => [ [ 'type' => $product_metas ? 'none' : 'author' ], ], 'title_field' => '{{{ type }}}', 'prevent_empty' => false, 'separator' => 'before', ] ); $this->add_control( 'after_title_meta', [ 'label' => esc_html__('After Title Meta', 'uicore-elements'), 'type' => \Elementor\Controls_Manager::REPEATER, 'fields' => $this->get_meta_content_controls($product_metas), 'default' => [ [ 'type' => $product_metas ? 'product price' : 'date' ], ], 'title_field' => '{{{ type }}}', 'prevent_empty' => false, 'separator' => 'before', ] ); $this->add_control( 'bottom_meta', [ 'label' => esc_html__('Bottom Meta', 'uicore-elements'), 'type' => \Elementor\Controls_Manager::REPEATER, 'fields' => $this->get_meta_content_controls($product_metas), 'default' => [ [ 'type' => $product_metas ? 'none' : 'none' ], ], 'title_field' => '{{{ type }}}', 'prevent_empty' => false, 'separator' => 'before', ] ); if ($section) { $this->end_controls_section(); } } function TRAIT_register_post_query_controls($section = true) { // In some contexts, such as theme-builder, our custom controls are not available if (! class_exists('UiCoreElements\Controls\Post_Filter')) { require_once UICORE_ELEMENTS_INCLUDES . '/controls/class-post-filter-control.php'; } if ($section) { $this->start_controls_section( 'section_post_grid_def', [ 'label' => esc_html__('Query', 'uicore-elements'), ] ); } $this->add_group_control( Post_Filter::get_type(), [ 'name' => 'posts-filter', 'label' => esc_html__('Posts', 'uicore-elements'), 'description' => esc_html__('Current Query Settings > Reading', 'uicore-elements'), ] ); $this->add_control( 'item_order', [ 'label' => esc_html__('Item Order', 'uicore-elements'), 'type' => Controls_Manager::SELECT, 'options' => [ 'ASC' => esc_html__('Ascending', 'uicore-elements'), 'DESC' => esc_html__('Descending', 'uicore-elements'), ], 'default' => 'DESC', ] ); $this->add_control( 'item_order_by', [ 'label' => esc_html__('Item Order By', 'uicore-elements'), 'type' => Controls_Manager::SELECT, 'options' => [ 'date' => esc_html__('Date', 'uicore-elements'), 'modified' => esc_html__('Modified Date', 'uicore-elements'), 'title' => esc_html__('Title', 'uicore-elements'), 'rand' => esc_html__('Random', 'uicore-elements'), 'comment_count' => esc_html__('Comments Count', 'uicore-elements'), 'menu_order' => esc_html__('Menu Order', 'uicore-elements'), ], 'default' => 'date', ] ); $this->add_control( 'item_limit', [ 'label' => esc_html__('Item Limit', 'uicore-elements'), 'type' => Controls_Manager::SLIDER, 'reder_type' => 'template', 'range' => [ 'px' => [ 'min' => -1, 'max' => 100, ], ], 'default' => [ 'size' => 3, ], 'condition' => array( 'posts-filter_post_type!' => 'current', ), ] ); $this->add_control( 'offset', [ 'label' => esc_html__('Query Offset', 'uicore-elements'), 'type' => Controls_Manager::SLIDER, 'render_type' => 'template', 'range' => [ 'px' => [ 'min' => -1, 'max' => 10, ], ], 'default' => [ 'size' => 0, ], 'condition' => [ 'pagination_type' => 'numbers', ] ] ); $this->add_control( 'offset_alert', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => esc_html__('Offset is disabled with Load More pagination.', 'uicore-elements'), 'condition' => [ 'pagination_type!' => 'numbers', ] ] ); $this->add_control( 'sticky', [ 'label' => esc_html__('Sticky Posts', 'uicore-elements'), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__('Show', 'uicore-elements'), 'label_off' => esc_html__('Hide', 'uicore-elements'), 'description' => esc_html__('Sticky posts works only on the front-end.', 'uicore-elements'), 'return_value' => 1, 'default' => 0, 'condition' => [ 'pagination!' => 'yes', ], ] ); if ($section) { $this->end_controls_section(); } } // Control Register Styles functions function TRAIT_register_post_item_style_controls($section = true, $active_tab = false) { if ($section) { $this->start_controls_section( 'section_style_item', [ 'label' => __('Item Style', 'uicore-elements'), 'tab' => Controls_Manager::TAB_STYLE, ] ); } $this->start_controls_tabs( 'item_border_shadow' ); $this->start_controls_tab( 'item_bs_normal_tab', [ 'label' => esc_html__('Normal', 'uicore-elements'), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'content_bg', 'types' => ['classic', 'gradient'], 'selector' => '{{WRAPPER}} .ui-e-item article', ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'item_border', 'selector' => '{{WRAPPER}} .ui-e-item article', ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'item_shadow', 'selector' => '{{WRAPPER}} .ui-e-item article', ] ); $this->end_controls_tab(); $this->start_controls_tab( 'item_bs_hover_tab', [ 'label' => esc_html__('Hover', 'uicore-elements'), ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'content_bg_hover', 'types' => ['classic', 'gradient'], 'selector' => '{{WRAPPER}} .ui-e-item:hover article', ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'item_border_hover', 'selector' => '{{WRAPPER}} .ui-e-item:hover article', ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'item_shadow_hover', 'selector' => '{{WRAPPER}} .ui-e-item:hover article', ] ); $this->end_controls_tab(); if ($active_tab) { $this->start_controls_tab( 'item_bs_active_tab', [ 'label' => esc_html__('Active', 'uicore-elements'), ] ); $this->add_group_control( Group_Control_Border::get_type(), [ 'name' => 'item_border_active', 'selector' => '{{WRAPPER}} .ui-e-item.ui-e-active article', ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'item_shadow_active', 'selector' => '{{WRAPPER}} .ui-e-item.ui-e-active article', ] ); $this->end_controls_tab(); } $this->end_controls_tabs(); $this->add_control( 'item_padding', [ 'label' => esc_html__('Padding', 'uicore-elements'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', 'rem', '%'], 'separator' => 'before', 'selectors' => [ '{{WRAPPER}} .ui-e-item article' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};' ], 'condition' => array( 'box_style!' => 'overlay', ), ] ); $this->add_control( 'item_radius', [ 'label' => esc_html__('Border Radius', 'uicore-elements'), 'type' => Controls_Manager::DIMENSIONS, 'selectors' => [ '{{WRAPPER}} ' => '--ui-e-border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;' ], ] ); if ($section) { $this->end_controls_section(); } } function TRAIT_register_post_content_style_controls($section = true) { if ($section) { $this->start_controls_section( 'section_style_content', [ 'label' => __('Content Style', 'uicore-elements'), 'tab' => Controls_Manager::TAB_STYLE, ] ); } $this->add_responsive_control( 'image_size', [ 'label' => __('Image Height (%)', 'uicore-elements'), 'type' => Controls_Manager::NUMBER, 'min' => 1, 'max' => 500, 'step' => 1, 'default' => 57, 'selectors' => [ '{{WRAPPER}} .ui-e-post-top' => '--ui-e-img-size: {{VALUE}}', ], 'condition' => [ 'masonry!' => 'ui-e-maso', ], ] ); $this->add_responsive_control( 'image_position', [ 'label' => __('Image Position', 'uicore-elements'), 'type' => Controls_Manager::SELECT, 'default' => 'center center', 'tablet_default' => '', 'mobile_default' => '', 'options' => [ '' => esc_html__('Default', 'uicore-elements'), 'left top' => esc_html__('Left Top', 'uicore-elements'), 'left center' => esc_html__('Left Center', 'uicore-elements'), 'left bottom' => esc_html__('Left Bottom', 'uicore-elements'), 'center top' => esc_html__('Center Top', 'uicore-elements'), 'center center' => esc_html__('Center Center', 'uicore-elements'), 'center bottom' => esc_html__('Center Bottom', 'uicore-elements'), 'right top' => esc_html__('Right Top', 'uicore-elements'), 'right center' => esc_html__('Right Center', 'uicore-elements'), 'right bottom' => esc_html__('Right Bottom', 'uicore-elements'), ], 'selectors' => [ '{{WRAPPER}} .ui-e-post-img' => 'background-position: {{VALUE}}', ], ] ); $this->add_responsive_control( 'image_fit', [ 'label' => __('Image Fit', 'uicore-elements'), 'type' => Controls_Manager::SELECT, 'default' => 'cover', 'tablet_default' => '', 'mobile_default' => '', 'options' => [ '' => esc_html__('Default', 'uicore-elements'), 'cover' => esc_html__('Cover', 'uicore-elements'), 'contain' => esc_html__('Contain', 'uicore-elements'), 'auto' => esc_html__('Auto', 'uicore-elements'), ], 'selectors' => [ '{{WRAPPER}} .ui-e-post-img' => 'background-size: {{VALUE}}', ], ] ); $this->add_control( 'image_radius', [ 'label' => esc_html__('Border Radius', 'uicore-elements'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .ui-e-post-top' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}px {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};' ], 'condition' => array( 'box_style!' => 'overlay', ), ] ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), [ 'name' => 'image_shadow', 'label' => esc_html__('Box Shadow', 'uicore-elements'), 'selector' => '{{WRAPPER}} .ui-e-post-top', 'condition' => array( 'box_style!' => 'overlay', ), ] ); $this->add_responsive_control( 'content_alignment', [ 'label' => esc_html__('Content Alignment', 'uicore-elements'), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__('Left', 'uicore-elements'), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__('Center', 'uicore-elements'), 'icon' => 'eicon-text-align-center', ], 'end' => [ 'title' => esc_html__('Right', 'uicore-elements'), 'icon' => 'eicon-text-align-right', ], 'stretch' => [ 'title' => esc_html__('Justified', 'uicore-elements'), 'icon' => 'eicon-text-align-justify', ], ], 'selectors_dictionary' => [ 'left' => 'start', ], 'default' => is_rtl() ? 'end' : 'start', 'selectors' => [ '{{WRAPPER}} .ui-e-post-content' => 'align-items: {{VALUE}}; text-align: {{VALUE}};', ], ] ); $this->add_control( 'title_color', [ 'label' => esc_html__('Title Color', 'uicore-elements'), 'type' => Controls_Manager::COLOR, 'default' => '', 'separator' => 'before', 'selectors' => [ '{{WRAPPER}} .ui-e-post-title' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'title_hcolor', [ 'label' => esc_html__('Title Hover Color', 'uicore-elements'), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .ui-e-post-title:hover' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'title_typography', 'label' => esc_html__('Title Typography', 'uicore-elements'), 'selector' => '{{WRAPPER}} .ui-e-post-title', ] ); $this->add_responsive_control( 'title_gap', [ 'label' => __('Title Top Space', 'uicore-elements'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['em'], 'separator' => 'after', 'range' => [ 'px' => [ 'min' => 0, 'max' => 3, 'step' => 0.1, ], ], 'default' => [ 'unit' => 'em', 'size' => 1.2, ], 'selectors' => [ '{{WRAPPER}} .ui-e-post-title' => 'margin-top: {{SIZE}}em;', ], ] ); $this->add_control( 'text_color', [ 'label' => esc_html__('Excerpt Color', 'uicore-elements'), 'type' => Controls_Manager::COLOR, 'default' => '', 'selectors' => [ '{{WRAPPER}} .ui-e-post-text' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'text_typography', 'label' => esc_html__('Excerpt Typography', 'uicore-elements'), 'selector' => '{{WRAPPER}} .ui-e-post-text', ] ); $this->add_responsive_control( 'text_gap', [ 'label' => __('Excerpt Top Space', 'uicore-elements'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['em'], 'separator' => 'after', 'range' => [ 'px' => [ 'min' => 0, 'max' => 3, 'step' => 0.1, ], ], 'default' => [ 'unit' => 'em', 'size' => 0.8, ], 'selectors' => [ '{{WRAPPER}} .ui-e-post-text' => 'margin-top: {{SIZE}}em;', ], ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'content_background', 'selector' => '{{WRAPPER}} .ui-e-post-content', ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'content_background_hover', 'selector' => '{{WRAPPER}} .ui-e-item:hover .ui-e-post-content', 'fields_options' => [ 'background' => [ 'label' => esc_html__('Hover Background', 'uicore-elements'), ], ], 'condition' => [ 'box_style' => 'overlay', ] ] ); $this->add_responsive_control( 'content_padding', [ 'label' => esc_html__('Content Padding', 'uicore-elements'), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => ['px', 'em', '%'], 'selectors' => [ '{{WRAPPER}} .ui-e-post-content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};' ] ] ); $this->add_control( 'content_radius', [ 'label' => esc_html__('Content Border Radius', 'uicore-elements'), 'type' => Controls_Manager::DIMENSIONS, 'selectors' => [ '{{WRAPPER}} .ui-e-post-content' => 'border-radius: {{TOP}}px {{RIGHT}}px {{BOTTOM}}px {{LEFT}}px;' ], 'condition' => array( 'box_style!' => 'overlay', ), ] ); $this->add_control( 'content_gap', [ 'label' => __('Content Space', 'uicore-elements'), 'type' => Controls_Manager::SLIDER, 'size_units' => ['em'], 'separator' => 'after', 'range' => [ 'px' => [ 'min' => 0, 'max' => 3, 'step' => 0.1, ], ], 'default' => [ 'unit' => 'em', 'size' => 0, ], 'selectors' => [ '{{WRAPPER}} ' => '--ui-e-content-space: {{SIZE}}em;', ], 'condition' => array( 'box_style!' => 'overlay', ), ] ); if ($section) { $this->end_controls_section(); } } function TRAIT_register_post_button_style_controls($section = true) { if ($section) { $this->start_controls_section( 'section_button_style', [ 'label' => esc_html__('Button Style', 'uicore-elements'), 'tab' => Controls_Manager::TAB_STYLE, 'condition' => array( 'show_button' => 'yes', ), ] ); } $this->add_responsive_control( 'button_align', [ 'label' => esc_html__('Alignment', 'uicore-elements'), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'start' => [ 'title' => esc_html__('Left', 'uicore-elements'), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => esc_html__('Center', 'uicore-elements'), 'icon' => 'eicon-text-align-center', ], 'end' => [ 'title' => esc_html__('Right', 'uicore-elements'), 'icon' => 'eicon-text-align-right', ], 'normal' => [ 'title' => esc_html__('Justified', 'uicore-elements'), 'icon' => 'eicon-text-align-justify', ], ], 'default' => 'start', 'selectors' => [ '{{WRAPPER}} .ui-e-readmore' => 'align-self: {{VALUE}};', ], ] ); $this->register_button_style_controls( [ 'section_condition' => [ 'show_button' => 'yes' ] ] ); // Remove button alignment from Elementor button traits because (seens to be a bug), updating Selector CSS with update_control(), don't work as expected with responsiveness $this->remove_responsive_control('align'); $this->TRAIT_register_post_specific_controls('button_gap'); if ($section) { $this->end_controls_section(); } } function TRAIT_register_post_meta_style_controls($section = true) { if ($section) { $this->start_controls_section( 'section_style_extra_content', [ 'label' => __('Meta Style', 'uicore-elements'), 'tab' => Controls_Manager::TAB_STYLE, ] ); } $this->start_controls_tabs('style_extra_tabs'); $this->start_controls_tab( 'style_top_tab', [ 'label' => esc_html__('Top', 'uicore-elements'), ] ); $this->get_meta_style_controls('top'); $this->end_controls_tab(); $this->start_controls_tab( 'style_before_title_tab', [ 'label' => esc_html__('Before Title', 'uicore-elements'), ] ); $this->get_meta_style_controls('before_title'); $this->end_controls_tab(); $this->start_controls_tab( 'style_after_title_tab', [ 'label' => esc_html__('After Title', 'uicore-elements'), ] ); $this->get_meta_style_controls('after_title'); $this->end_controls_tab(); $this->start_controls_tab( 'style_bottom_tab', [ 'label' => esc_html__('Bottom', 'uicore-elements'), ] ); $this->get_meta_style_controls('bottom'); $this->end_controls_tab(); $this->end_controls_tabs(); if ($section) { $this->end_controls_section(); } } function TRAIT_register_post_animation_controls() { $this->add_control( 'anim_image', [ 'label' => __('Image Hover Animation', 'uicore-elements'), 'type' => Controls_Manager::SELECT, 'label_block' => true, 'default' => 'ui-e-img-anim-zoom', 'options' => [ '' => __('None', 'uicore-elements'), 'ui-e-img-anim-zoom' => __('Zoom', 'uicore-elements'), ], 'prefix_class' => '', ] ); $this->add_control( 'anim_meta', [ 'label' => __('Meta Hover Animation', 'uicore-elements'), 'type' => Controls_Manager::SELECT, 'label_block' => true, 'default' => '', 'options' => [ '' => __('None', 'uicore-elements'), 'ui-e-meta-anim-show' => __('Show', 'uicore-elements'), ], 'prefix_class' => '', ] ); $this->add_control( 'important_note', [ 'label' => esc_html__('Important Note', 'uicore-elements'), 'type' => \Elementor\Controls_Manager::RAW_HTML, 'raw' => '