File "tabs-nested.php"
Full path: /home/dora/public_html/wp-content/themes/bricks/includes/elements/tabs-nested.php
File size: 7.57 KB
MIME-type: --
Charset: utf-8
<?php
namespace Bricks;
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
class Element_Tabs_Nested extends Element {
public $category = 'general';
public $name = 'tabs-nested';
public $icon = 'ti-layout-tab';
public $scripts = [ 'bricksTabs' ];
public $nestable = true;
public function get_label() {
return esc_html__( 'Tabs', 'bricks' ) . ' (' . esc_html__( 'Nestable', 'bricks' ) . ')';
}
public function get_keywords() {
return [ 'nestable' ];
}
public function set_control_groups() {
$this->control_groups['title'] = [
'title' => esc_html__( 'Title', 'bricks' ),
];
$this->control_groups['content'] = [
'title' => esc_html__( 'Content', 'bricks' ),
];
}
public function set_controls() {
$this->controls['direction'] = [
'label' => esc_html__( 'Direction', 'bricks' ),
'tooltip' => [
'content' => 'flex-direction',
'position' => 'top-left',
],
'type' => 'direction',
'css' => [
[
'property' => 'flex-direction',
],
],
'inline' => true,
'rerender' => true,
];
// TITLE
$this->controls['titleWidth'] = [
'group' => 'title',
'label' => esc_html__( 'Width', 'bricks' ),
'type' => 'number',
'units' => true,
'css' => [
[
'selector' => '.tab-title',
'property' => 'width',
],
],
'placeholder' => 'auto',
];
$this->controls['titleMargin'] = [
'group' => 'title',
'label' => esc_html__( 'Margin', 'bricks' ),
'type' => 'spacing',
'css' => [
[
'property' => 'margin',
'selector' => '.tab-title',
],
],
];
$this->controls['titlePadding'] = [
'group' => 'title',
'label' => esc_html__( 'Padding', 'bricks' ),
'type' => 'spacing',
'css' => [
[
'property' => 'padding',
'selector' => '.tab-title',
],
],
'default' => [
'top' => 20,
'right' => 20,
'bottom' => 20,
'left' => 20,
],
];
$this->controls['titleBackgroundColor'] = [
'group' => 'title',
'label' => esc_html__( 'Background', 'bricks' ),
'type' => 'color',
'css' => [
[
'property' => 'background-color',
'selector' => '.tab-title',
],
],
];
$this->controls['titleBorder'] = [
'group' => 'title',
'label' => esc_html__( 'Border', 'bricks' ),
'type' => 'border',
'css' => [
[
'property' => 'border',
'selector' => '.tab-title',
],
],
];
$this->controls['titleTypography'] = [
'group' => 'title',
'label' => esc_html__( 'Typography', 'bricks' ),
'type' => 'typography',
'css' => [
[
'property' => 'font',
'selector' => '.tab-title',
],
],
];
// ACTIVE TITLE
$this->controls['titleActiveSeparator'] = [
'group' => 'title',
'label' => esc_html__( 'Active', 'bricks' ),
'type' => 'separator',
'fullAccess' => true,
];
$this->controls['titleActiveBackgroundColor'] = [
'group' => 'title',
'label' => esc_html__( 'Background color', 'bricks' ),
'type' => 'color',
'css' => [
[
'property' => 'background-color',
'selector' => '.tab-title.brx-open',
],
],
'default' => [
'hex' => '#dddedf',
],
];
$this->controls['titleActiveBorder'] = [
'group' => 'title',
'label' => esc_html__( 'Border', 'bricks' ),
'type' => 'border',
'css' => [
[
'property' => 'border',
'selector' => '.tab-title.brx-open',
],
],
];
$this->controls['titleActiveTypography'] = [
'group' => 'title',
'label' => esc_html__( 'Typography', 'bricks' ),
'type' => 'typography',
'css' => [
[
'property' => 'font',
'selector' => '.tab-title.brx-open',
],
],
];
// CONTENT
$this->controls['contentMargin'] = [
'group' => 'content',
'label' => esc_html__( 'Margin', 'bricks' ),
'type' => 'spacing',
'css' => [
[
'property' => 'margin',
'selector' => '.tab-content',
],
],
];
$this->controls['contentPadding'] = [
'group' => 'content',
'label' => esc_html__( 'Padding', 'bricks' ),
'type' => 'spacing',
'css' => [
[
'property' => 'padding',
'selector' => '.tab-content',
],
],
'default' => [
'top' => 20,
'right' => 20,
'bottom' => 20,
'left' => 20,
],
];
$this->controls['contentColor'] = [
'group' => 'content',
'label' => esc_html__( 'Text color', 'bricks' ),
'type' => 'color',
'css' => [
[
'property' => 'color',
'selector' => '.tab-content',
],
],
];
$this->controls['contentBackgroundColor'] = [
'group' => 'content',
'label' => esc_html__( 'Background color', 'bricks' ),
'type' => 'color',
'css' => [
[
'property' => 'background-color',
'selector' => '.tab-content',
],
],
];
$this->controls['contentBorder'] = [
'group' => 'content',
'label' => esc_html__( 'Border', 'bricks' ),
'type' => 'border',
'css' => [
[
'property' => 'border',
'selector' => '.tab-content',
],
],
'default' => [
'width' => [
'top' => 1,
'right' => 1,
'bottom' => 1,
'left' => 1,
],
'style' => 'solid',
],
];
}
/**
* Get child elements
*
* @return array Array of child elements.
*
* @since 1.5
*/
public function get_nestable_children() {
/**
* NOTE: Required classes for element styling & script:
*
* .tab-menu
* .tab-title
* .tab-content
* .tab-pane
*/
return [
// Title
[
'name' => 'block',
'label' => esc_html__( 'Tab menu', 'bricks' ),
'settings' => [
'_direction' => 'row',
'_hidden' => [
'_cssClasses' => 'tab-menu',
],
],
'children' => [
[
'name' => 'div',
'settings' => [
'_hidden' => [
'_cssClasses' => 'tab-title',
],
],
'children' => [
[
'name' => 'text-basic',
'settings' => [
'text' => esc_html__( 'Title', 'bricks' ) . ' 1',
],
],
],
],
[
'name' => 'div',
'settings' => [
'_hidden' => [
'_cssClasses' => 'tab-title',
],
],
'children' => [
[
'name' => 'text-basic',
'settings' => [
'text' => esc_html__( 'Title', 'bricks' ) . ' 2',
],
],
],
],
],
],
// Content
[
'name' => 'block',
'label' => esc_html__( 'Content', 'bricks' ),
'settings' => [
'_hidden' => [
'_cssClasses' => 'tab-content',
],
],
'children' => [
[
'name' => 'block',
'label' => esc_html__( 'Pane', 'bricks' ),
'settings' => [
'_hidden' => [
'_cssClasses' => 'tab-pane',
],
],
'children' => [
[
'name' => 'text',
'settings' => [
'text' => esc_html__( 'Content goes here ..', 'bricks' ) . ' (1)',
],
],
],
],
[
'name' => 'block',
'label' => esc_html__( 'Pane', 'bricks' ),
'settings' => [
'_hidden' => [
'_cssClasses' => 'tab-pane',
],
],
'children' => [
[
'name' => 'text',
'settings' => [
'text' => esc_html__( 'Content goes here ..', 'bricks' ) . ' (2)',
],
],
],
],
],
],
];
}
public function render() {
$output = "<div {$this->render_attributes( '_root' )}>";
// Render children elements (= individual items)
$output .= Frontend::render_children( $this );
$output .= '</div>';
echo $output;
}
}