<?php
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly.
}
use Motiox\Elementor\Motiox_Base_Widgets;
use Elementor\Controls_Manager;
use Elementor\Group_Control_Box_Shadow;
use Elementor\Icons_Manager;
use Elementor\Repeater;
use Elementor\Group_Control_Border;
/**
* Elementor tabs widget.
*
* Elementor widget that displays vertical or horizontal tabs with different
* pieces of content.
*
* @since 1.0.0
*/
class Motiox_Elementor_Brand extends Motiox_Base_Widgets {
public function get_categories() {
return array('motiox-addons');
}
/**
* Get widget name.
*
* Retrieve tabs widget name.
*
* @return string Widget name.
* @since 1.0.0
* @access public
*
*/
public function get_name() {
return 'motiox-brand';
}
/**
* Get widget title.
*
* Retrieve tabs widget title.
*
* @return string Widget title.
* @since 1.0.0
* @access public
*
*/
public function get_title() {
return esc_html__('Brands', 'motiox');
}
/**
* Get widget icon.
*
* Retrieve tabs widget icon.
*
* @return string Widget icon.
* @since 1.0.0
* @access public
*
*/
public function get_icon() {
return 'eicon-tabs';
}
/**
* Enqueue scripts.
*
* Registers all the scripts defined as element dependencies and enqueues
* them. Use `get_script_depends()` method to add custom script dependencies.
*
* @since 1.3.0
* @access public
*/
public function get_script_depends() {
return ['motiox-elementor-brand'];
}
public function get_style_depends() {
return [ 'e-swiper' ];
}
/**
* Register tabs widget controls.
*
* Adds different input fields to allow the user to change and customize the widget settings.
*
* @since 1.0.0
* @access protected
*/
protected function register_controls() {
$this->start_controls_section(
'section_brands',
[
'label' => esc_html__('Brands', 'motiox'),
]
);
$repeater = new Repeater();
$repeater->add_control(
'brand_title',
[
'label' => esc_html__('Brand name', 'motiox'),
'type' => Controls_Manager::TEXT,
'default' => esc_html__('Brand Name', 'motiox'),
'placeholder' => esc_html__('Brand Name', 'motiox'),
'label_block' => true,
]
);
$repeater->add_control(
'selected_icon',
[
'label' => esc_html__('Icon', 'motiox'),
'type' => Controls_Manager::ICONS,
]
);
$repeater->add_control(
'brand_image',
[
'label' => esc_html__('Choose Image', 'motiox'),
'type' => Controls_Manager::MEDIA,
'dynamic' => [
'active' => true,
],
'default' => [
'url' => Elementor\Utils::get_placeholder_image_src(),
],
]
);
$repeater->add_control(
'link',
[
'label' => esc_html__('Link to', 'motiox'),
'type' => Controls_Manager::URL,
'dynamic' => [
'active' => true,
],
'placeholder' => esc_html__('https://your-link.com', 'motiox'),
]
);
$this->add_control(
'brands',
[
'label' => esc_html__('Items', 'motiox'),
'type' => Controls_Manager::REPEATER,
'fields' => $repeater->get_controls(),
'title_field' => '{{{ brand_title }}}',
]
);
$this->add_control(
'heading_settings',
[
'label' => esc_html__('Settings', 'motiox'),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
]
);
$this->add_group_control(
Elementor\Group_Control_Image_Size::get_type(),
[
'name' => 'brand_image', // Usage: `{name}_size` and `{name}_custom_dimension`, in this case `brand_image_size` and `brand_image_custom_dimension`.
'default' => 'full',
'separator' => 'none',
]
);
$this->add_responsive_control(
'brand_align',
[
'label' => esc_html__('Alignment', 'motiox'),
'type' => Controls_Manager::CHOOSE,
'options' => [
'flex-start' => [
'title' => esc_html__('Left', 'motiox'),
'icon' => 'eicon-text-align-left',
],
'center' => [
'title' => esc_html__('Center', 'motiox'),
'icon' => 'eicon-text-align-center',
],
'flex-end' => [
'title' => esc_html__('Right', 'motiox'),
'icon' => 'eicon-text-align-right',
],
],
'default' => 'center',
'selectors' => [
'{{WRAPPER}} .elementor-brand-wrapper .elementor-brand-item .elementor-brand-image' => 'text-align: {{VALUE}};',
],
]
);
$this->add_responsive_control(
'brand_align_caption',
[
'label' => esc_html__('Alignment Info ', 'motiox'),
'type' => Controls_Manager::CHOOSE,
'options' => [
'flex-start' => [
'title' => esc_html__('Left', 'motiox'),
'icon' => 'eicon-h-align-left',
],
'center' => [
'title' => esc_html__('Center', 'motiox'),
'icon' => 'eicon-h-align-center',
],
'flex-end' => [
'title' => esc_html__('Right', 'motiox'),
'icon' => 'eicon-h-align-right',
],
],
'default' => 'flex-start',
'selectors' => [
'{{WRAPPER}} .elementor-brand-wrapper .elementor-brand-item' => 'justify-content: {{VALUE}};',
'{{WRAPPER}} .elementor-brand-wrapper .elementor-brand-item .elementor-brand-image' => 'justify-content: {{VALUE}};',
],
]
);
$this->end_controls_section();
$this->start_controls_section(
'style_brand_wrapper',
[
'label' => esc_html__('Wrapper', 'motiox'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'image_padding',
[
'label' => esc_html__('Padding', 'motiox'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', 'em', '%'],
'selectors' => [
'{{WRAPPER}} .elementor-brand-wrapper .elementor-brand-image ' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'image_margin',
[
'label' => esc_html__('Margin', 'motiox'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', 'em', '%'],
'selectors' => [
'{{WRAPPER}} .elementor-brand-item' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_control(
'image_backgrounr',
[
'label' => esc_html__('Background Color', 'motiox'),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .elementor-brand-image' => 'background-color: {{VALUE}}',
],
]
);
$this->add_control(
'svg_brand_color',
[
'label' => esc_html__('Color SVG', 'motiox'),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .elementor-brand-image svg' => 'color: {{VALUE}}',
],
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'image_border',
'placeholder' => '1px',
'default' => '1px',
'selector' => '{{WRAPPER}} .elementor-brand-item',
'separator' => 'before',
]
);
$this->add_control(
'image_border_radius',
[
'label' => esc_html__('Border Radius', 'motiox'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', '%'],
'selectors' => [
'{{WRAPPER}} .elementor-brand-item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->start_controls_tabs('tabs_brand_wrapper');
$this->start_controls_tab(
'tab_wrapper_normal',
[
'label' => esc_html__('Normal', 'motiox'),
]
);
$this->add_control(
'image_opacity',
[
'label' => esc_html__('Opacity', 'motiox'),
'type' => Controls_Manager::SLIDER,
'range' => [
'px' => [
'max' => 1,
'min' => 0.10,
'step' => 0.01,
],
],
'selectors' => [
'{{WRAPPER}} .elementor-brand-image img, {{WRAPPER}} .elementor-brand-image i, {{WRAPPER}} .elementor-brand-image svg' => 'opacity: {{SIZE}};',
],
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'brand_wrapper',
'selector' => '{{WRAPPER}} .elementor-brand-image',
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'tab_brand_wrapper_hover',
[
'label' => esc_html__('Hover', 'motiox'),
]
);
$this->add_control(
'image_opacity_hover',
[
'label' => esc_html__('Opacity', 'motiox'),
'type' => Controls_Manager::SLIDER,
'range' => [
'px' => [
'max' => 1,
'min' => 0.10,
'step' => 0.01,
],
],
'default' => [
'size' => 1,
],
'selectors' => [
'{{WRAPPER}} .elementor-brand-image a:hover img, {{WRAPPER}} .elementor-brand-image a:hover i, {{WRAPPER}} .elementor-brand-image:hover svg' => 'opacity: {{SIZE}};',
],
]
);
$this->add_control(
'image_color_hover',
[
'label' => esc_html__('Color', 'motiox'),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}}:hover .elementor-brand-image img ' => 'fill"": {{VALUE}};',
],
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'brand_wrapper_hover',
'selector' => '{{WRAPPER}} .elementor-brand-image:hover',
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->add_responsive_control(
'image_width',
[
'label' => esc_html__('Width', 'motiox'),
'type' => Controls_Manager::SLIDER,
'default' => [
'unit' => '%',
],
'tablet_default' => [
'unit' => '%',
],
'mobile_default' => [
'unit' => '%',
],
'size_units' => ['%', 'px', 'vw'],
'range' => [
'%' => [
'min' => 1,
'max' => 100,
],
'px' => [
'min' => 1,
'max' => 1000,
],
'vw' => [
'min' => 1,
'max' => 100,
],
],
'selectors' => [
'{{WRAPPER}} .elementor-brand-item .elementor-brand-image' => 'width: {{SIZE}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'image_height',
[
'label' => esc_html__('Height', 'motiox'),
'type' => Controls_Manager::SLIDER,
'default' => [
'unit' => 'px',
],
'tablet_default' => [
'unit' => 'px',
],
'mobile_default' => [
'unit' => 'px',
],
'size_units' => ['px', 'vh'],
'range' => [
'px' => [
'min' => 1,
'max' => 500,
],
'vh' => [
'min' => 1,
'max' => 100,
],
],
'selectors' => [
'{{WRAPPER}} .elementor-brand-item .elementor-brand-image' => 'height: {{SIZE}}{{UNIT}};',
],
]
);
$this->end_controls_section();
$this->get_controls_column();
// Carousel options
$this->get_control_carousel();
}
/**
* Render tabs widget output on the frontend.
*
* Written in PHP and used to generate the final HTML.
*
* @since 1.0.0
* @access protected
*/
protected function render() {
$settings = $this->get_settings_for_display();
if (!empty($settings['brands']) && is_array($settings['brands'])) {
$this->add_render_attribute('wrapper', 'class', 'elementor-brand-wrapper');
// Row
$this->add_render_attribute('item', 'class', 'elementor-brand-item');
$this->get_data_elementor_columns();
}
if (empty($settings['icon']) && !Icons_Manager::is_migration_allowed()) {
$settings['icon'] = 'fa fa-star';
}
$migration_allowed = Icons_Manager::is_migration_allowed();
if (!empty($settings['icon'])) {
$this->add_render_attribute('icon', 'class', $settings['icon']);
$this->add_render_attribute('icon', 'aria-hidden', 'true');
}
?>
<div <?php $this->print_render_attribute_string('wrapper'); ?>>
<div <?php $this->print_render_attribute_string('container'); ?>>
<div <?php $this->print_render_attribute_string('inner'); ?>>
<?php foreach ($settings['brands'] as $item) : ?>
<?php
$migrated = isset($item['__fa4_migrated']['selected_icon']);
$is_new = !isset($item['icon']) && $migration_allowed;
?>
<div <?php $this->print_render_attribute_string('item'); ?>>
<div class="elementor-brand-image">
<?php
if ($is_new || $migrated) {
Icons_Manager::render_icon($item['selected_icon'], ['aria-hidden' => 'true']);
}
?>
<?php
if (!empty($item['link'])) {
if (!empty($item['link']['is_external'])) {
$this->add_render_attribute('brand-image', 'target', '_blank');
}
if (!empty($item['link']['nofollow'])) {
$this->add_render_attribute('brand-image', 'rel', 'nofollow');
}
echo '<a href="' . esc_url($item['link']['url'] ? $item['link']['url'] : '#') . '" ' . $this->print_render_attribute_string('brand-image') . ' title="' . esc_attr($item['brand_title']) . '">';
}
$item['image_size'] = $settings['brand_image_size'];
$item['image_custom_dimension'] = $settings['brand_image_custom_dimension'];
if (!empty($item['brand_image']['url'])) {
echo Elementor\Group_Control_Image_Size::get_attachment_image_html($item, 'image', 'brand_image');
}
if (!empty($item['link'])) {
echo '</a>';
}
?>
</div>
</div>
<?php endforeach; ?>
</div>
<?php $this->get_swiper_navigation(count($settings['brands'])); ?>
</div>
</div>
<?php
}
}
$widgets_manager->register(new Motiox_Elementor_Brand());