start_controls_section(
'kng_image_grid_content_section_gallery_settings',
[
'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Grid Settings', 'king-addons'),
'tab' => Controls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'kng_image_grid_grid_layout',
array(
'label' => esc_html__('Grid Layout', 'king-addons'),
'type' => Controls_Manager::SELECT,
'options' => [
'fitRows' => esc_html__('Fit Rows', 'king-addons'),
'masonry' => esc_html__('Masonry', 'king-addons'),
],
'default' => 'masonry',
)
);
$this->add_responsive_control(
'kng_image_grid_fitrows_image_height',
[
'label' => esc_html__('Image Height (px)', 'king-addons'),
'type' => Controls_Manager::NUMBER,
'step' => 1,
'min' => 0,
'default' => 200,
'render_type' => 'template',
'selectors' => [
'{{WRAPPER}} .king-addons-image-grid-item' => 'height: {{SIZE}}px;',
],
'condition' => [
'kng_image_grid_grid_layout' => 'fitRows'
]
]
);
$this->add_responsive_control(
'kng_image_grid_fitrows_image_fit',
[
'label' => esc_html__('Image Fit', 'king-addons'),
'type' => Controls_Manager::SELECT,
'options' => [
'cover' => esc_html__('Cover', 'king-addons'),
'contain' => esc_html__('Contain', 'king-addons'),
],
'default' => 'cover',
'selectors' => [
'{{WRAPPER}} .king-addons-image-grid-item img' => 'object-fit: {{VALUE}};',
],
'condition' => [
'kng_image_grid_grid_layout' => 'fitRows'
]
]
);
$this->add_responsive_control(
'kng_image_grid_fitrows_image_fit_position',
[
'label' => esc_html__('Image Fit Position', 'king-addons'),
'type' => Controls_Manager::SELECT,
'options' => [
'top' => esc_html__('Top', 'king-addons'),
'bottom' => esc_html__('Bottom', 'king-addons'),
'left' => esc_html__('Left', 'king-addons'),
'right' => esc_html__('Right', 'king-addons'),
'center' => esc_html__('Center', 'king-addons'),
],
'default' => 'center',
'selectors' => [
'{{WRAPPER}} .king-addons-image-grid-item img' => 'object-position: {{VALUE}};',
],
'condition' => [
'kng_image_grid_grid_layout' => 'fitRows'
]
]
);
$this->add_responsive_control(
'kng_image_grid_number_of_columns',
[
'label' => esc_html__('Number of columns', 'king-addons'),
'type' => Controls_Manager::NUMBER,
'step' => 1,
'min' => 1,
'render_type' => 'template',
'desktop_default' => 4,
'tablet_default' => 3,
'mobile_default' => 2,
'selectors' => [
'{{WRAPPER}} .king-addons-image-grid-item' => 'width: calc(100% / {{SIZE}});',
],
]
);
$this->add_responsive_control(
'kng_image_grid_space_between',
[
'label' => esc_html__('Space between (px)', 'king-addons'),
'type' => Controls_Manager::NUMBER,
'step' => 1,
'min' => 0,
'desktop_default' => 5,
'tablet_default' => 5,
'mobile_default' => 5,
'selectors' => [
'{{WRAPPER}} .king-addons-image-grid-item' => 'padding: {{SIZE}}px;',
],
]
);
$this->end_controls_section();
/** SECTION: Images ===================== */
$this->start_controls_section(
'kng_image_grid_content_section_items',
[
'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Items', 'king-addons'),
'tab' => Controls_Manager::TAB_CONTENT,
]
);
$repeater = new Repeater();
$repeater->add_control(
'kng_image_grid_image',
[
'label' => '' . esc_html__('Image', 'king-addons') . '',
'type' => Controls_Manager::MEDIA,
'default' => [
'url' => Utils::get_placeholder_image_src(),
]
]
);
$repeater->add_group_control(
Group_Control_Image_Size::get_type(),
[
'name' => 'kng_image_grid_image_size',
'default' => 'full',
]
);
$default_cards = [
'kng_image_grid_image' => Utils::get_placeholder_image_src(),
];
/** @noinspection HtmlUnknownTarget */
$this->add_control(
'kng_image_grid_content_items',
[
'type' => Controls_Manager::REPEATER,
'fields' => $repeater->get_controls(),
'default' => array_fill(0, 8, $default_cards),
'title_field' => ' ',
]
);
$this->end_controls_section();
/** END SECTION: Images ===================== */
/** STYLE SECTION: Images ===================== */
$this->start_controls_section(
'kng_image_grid_style_section_image',
[
'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Image', 'king-addons'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'kng_image_grid_image_scale_switcher',
[
'label' => esc_html__('Scale image on hover', 'king-addons'),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
]
);
$this->add_responsive_control(
'kng_image_grid_image_scale_hover',
[
'label' => esc_html__('Scale size', 'king-addons'),
'type' => Controls_Manager::NUMBER,
'min' => 0,
'step' => 0.01,
'default' => 1.1,
'selectors' => [
'{{WRAPPER}} .king-addons-image-grid-item img:hover' => 'transform: scale({{SIZE}});'
],
'condition' => [
'kng_image_grid_image_scale_switcher' => 'yes',
]
]
);
$this->add_responsive_control(
'kng_image_grid_image_transition',
[
'label' => esc_html__('Transition duration on hover (ms)', 'king-addons'),
'type' => Controls_Manager::NUMBER,
'min' => 0,
'step' => 10,
'default' => 300,
'selectors' => [
'{{WRAPPER}} .king-addons-image-grid-item img' => 'transition: all {{SIZE}}ms cubic-bezier(.25,.46,.45,.94);'
],
]
);
$this->add_group_control(
Group_Control_Css_Filter::get_type(),
[
'label' => esc_html__('CSS Filter', 'king-addons'),
'name' => 'kng_image_grid_image_css_filters',
'selector' => '{{WRAPPER}} .king-addons-image-grid-item img',
]
);
$this->add_group_control(
Group_Control_Css_Filter::get_type(),
[
'label' => esc_html__('CSS Filter for image on hover', 'king-addons'),
'name' => 'kng_image_grid_image_css_filters_hover',
'selector' => '{{WRAPPER}} .king-addons-image-grid-item img:hover',
]
);
$this->add_group_control(
Group_Control_Box_Shadow::get_type(),
[
'name' => 'kng_image_grid_image_box_shadow',
'selector' => '{{WRAPPER}} .king-addons-image-grid-item .king-addons-image-grid-item-inner',
]
);
$this->add_group_control(
Group_Control_Border::get_type(),
[
'name' => 'kng_image_grid_image_border',
'selector' => '{{WRAPPER}} .king-addons-image-grid-item .king-addons-image-grid-item-inner',
'fields_options' => [
'border' => [
'default' => 'none',
],
],
]
);
$this->add_responsive_control(
'kng_image_grid_image_border_radius',
[
'label' => esc_html__('Border Radius', 'king-addons'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', '%'],
'default' => [
'top' => 0,
'right' => 0,
'bottom' => 0,
'left' => 0,
'unit' => 'px',
],
'selectors' => [
'{{WRAPPER}} .king-addons-image-grid-item .king-addons-image-grid-item-inner' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
]
]
);
$this->end_controls_section();
/** END SECTION: Images ===================== */
}
protected function render(): void
{
$settings = $this->get_settings();
$this_ID = $this->get_id();
// Define allowed tags and attributes
$allowed_tags = wp_kses_allowed_html('post');
$allowed_tags['img']['srcset'] = true;
$allowed_tags['img']['sizes'] = true;
$allowed_tags['img']['decoding'] = true;
$allowed_tags['img']['loading'] = true;
echo '