File "progress-bar.php"
Full path: /home/dora/public_html/wp-content/themes/bricks/includes/elements/progress-bar.php
File size: 4.45 KB
MIME-type: --
Charset: utf-8
<?php
namespace Bricks;
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
class Element_Progress_Bar extends Element {
public $category = 'general';
public $name = 'progress-bar';
public $icon = 'ti-line-double';
public $css_selector = '.bar';
public $scripts = [ 'bricksProgressBar' ];
public function get_label() {
return esc_html__( 'Progress Bar', 'bricks' );
}
public function set_controls() {
$this->controls['_padding']['css'][0]['selector'] = '';
// Group: 'bars'
$this->controls['bars'] = [
'tab' => 'content',
'type' => 'repeater',
'placeholder' => esc_html__( 'Bar', 'bricks' ),
'selector' => '.bar-wrapper',
'fields' => [
'title' => [
'label' => esc_html__( 'Label', 'bricks' ),
'type' => 'text',
],
'percentage' => [
'label' => esc_html__( 'Percentage', 'bricks' ),
'type' => 'number',
'min' => 0,
'max' => 100,
'step' => 1,
'hasDynamicData' => 'text',
],
'color' => [
'label' => esc_html__( 'Bar color', 'bricks' ),
'type' => 'color',
'css' => [
[
'property' => 'background-color',
'selector' => '.bar span',
],
],
],
],
'default' => [
[
'title' => esc_html__( 'Web design', 'bricks' ),
'percentage' => 80,
],
[
'title' => esc_html__( 'SEO', 'bricks' ),
'percentage' => 90,
],
],
'rerender' => true,
];
// SETTINGS
$this->controls['height'] = [
'tab' => 'content',
'label' => esc_html__( 'Height', 'bricks' ),
'type' => 'number',
'units' => true,
'css' => [
[
'property' => 'height',
]
],
'placeholder' => 8,
];
$this->controls['barSpacing'] = [
'tab' => 'content',
'label' => esc_html__( 'Spacing', 'bricks' ),
'type' => 'number',
'units' => true,
'css' => [
[
'property' => 'gap',
'selector' => '',
]
],
'placeholder' => 20,
];
$this->controls['showPercentage'] = [
'tab' => 'content',
'label' => esc_html__( 'Show percentage', 'bricks' ),
'type' => 'checkbox',
'default' => true,
];
$this->controls['barColor'] = [
'tab' => 'content',
'label' => esc_html__( 'Bar color', 'bricks' ),
'type' => 'color',
'css' => [
[
'property' => 'background-color',
'selector' => '.bar span',
],
],
];
$this->controls['barBackgroundColor'] = [
'tab' => 'content',
'label' => esc_html__( 'Bar background color', 'bricks' ),
'type' => 'color',
'css' => [
[
'property' => 'background-color',
'selector' => '.bar',
],
],
];
$this->controls['barBorder'] = [
'tab' => 'content',
'label' => esc_html__( 'Bar border', 'bricks' ),
'type' => 'border',
'css' => [
[
'property' => 'border',
'selector' => '.bar',
],
],
];
$this->controls['labelTypography'] = [
'tab' => 'content',
'label' => esc_html__( 'Label typography', 'bricks' ),
'type' => 'typography',
'css' => [
[
'property' => 'font',
'selector' => '.label',
],
],
];
$this->controls['percentageTypography'] = [
'tab' => 'content',
'label' => esc_html__( 'Percentage typography', 'bricks' ),
'type' => 'typography',
'css' => [
[
'property' => 'font',
'selector' => '.percentage',
],
],
];
}
public function render() {
if ( empty( $this->settings['bars'] ) ) {
return $this->render_element_placeholder(
[
'title' => esc_html__( 'No progress bar created.', 'bricks' ),
]
);
}
echo "<div {$this->render_attributes( '_root' )}>";
foreach ( $this->settings['bars'] as $index => $bar ) {
if ( isset( $bar['percentage'] ) ) {
$this->set_attribute( "bar-inner-{$index}", 'data-width', "{$bar['percentage']}%" );
}
echo '<div class="bar-wrapper">';
echo '<label>';
if ( isset( $bar['title'] ) && ! empty( $bar['title'] ) ) {
echo '<span class="label">' . $bar['title'] . '</span>';
}
if ( isset( $this->settings['showPercentage'] ) && isset( $bar['percentage'] ) ) {
echo '<span class="percentage">' . $bar['percentage'] . '%</span>';
}
echo '</label>';
echo '<div class="bar"><span ' . $this->render_attributes( "bar-inner-{$index}" ) . '></span></div>';
echo '</div>';
}
echo '</div>';
}
}