File "reading-timer.php"

Full Path: /home/bytebmoc/tideswithin.com/reading-timer/widgets/reading-timer.php
File size: 9.91 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace ElementPack\Modules\ReadingTimer\Widgets;

use ElementPack\Base\Module_Base;
use Elementor\Controls_Manager;
use Elementor\Group_Control_Typography;
use Elementor\Group_Control_Background;
use Elementor\Group_Control_Border;
use Elementor\Group_Control_Box_Shadow;

if (!defined('ABSPATH')) exit; // Exit if accessed directly

class Reading_Timer extends Module_Base {

    public function get_name() {
        return 'bdt-reading-timer';
    }

    public function get_title() {
        return BDTEP . esc_html__('Reading Timer', 'bdthemes-element-pack');
    }

    public function get_icon() {
        return 'bdt-wi-reading-timer';
    }

    public function get_categories() {
        return ['element-pack'];
    }

    public function get_keywords() {
        return ['reading', 'timer', 'reading timer'];
    }

    public function get_style_depends() {
        return ['ep-font'];
    }

    public function get_script_depends() {
        if ($this->ep_is_edit_mode()) {
            return ['ep-scripts'];
        } else {
            return ['ep-reading-timer'];
        }
    }

    public function get_custom_help_url() {
        return 'https://youtu.be/7lRyOmR6yqo?si=KUcyEB7v3ZVrVVC8';
    }

	protected function is_dynamic_content(): bool {
		return true;
	}

    protected function register_controls() {
        $this->start_controls_section(
            'section_title',
            [
                'label' => __('Reading Timer', 'bdthemes-element-pack'),
            ]
        );

        $this->add_control(
            'ignore_element_notes',
            [
                'type'            => Controls_Manager::RAW_HTML,
                'raw'             => esc_html__('Note: This widget\'s functionality may not be available in editor mode (dummy text, 2 min read), but rest assured, it works seamlessly when you switch to the perview mode/frontend perspective.', 'bdthemes-element-pack'),
                'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
            ]
        );


        $this->add_control(
            'reading_timer_content_id',
            [
                'label'       => esc_html__('Selector ID', 'bdthemes-element-pack'),
                'type'        => Controls_Manager::TEXT,
                'description' => esc_html__("Just write the content selector ID here such 'my-id'. N.B: No need to add '#'.", 'bdthemes-element-pack'),
                'frontend_available' => true,
                'render_type' => 'none',
                'separator'       => 'before',

            ]
        );
        $this->add_control(
            'reading_timer_avg_words_per_minute',
            [
                'label'         => __('Average Words Per Minute', 'bdthemes-element-pack'),
                'type'          => Controls_Manager::SLIDER,
                'frontend_available' => true,
                'render_type'   => 'none',
                'size_units'    => ['px'],
                'range'         => [
                    'px'        => [
                        'min'   => 1,
                        'max'   => 500,
                        'step'  => 1,
                    ],
                ],
                'default'       => [
                    'unit'      => 'px',
                    'size'      => 200,
                ],
            ]
        );

        $this->add_control(
            'reading_timer_minute_text',
            [
                'label'       => __('Minute Text', 'bdthemes-element-pack'),
                'type'        => Controls_Manager::TEXT,
                'placeholder' => __('min read', 'bdthemes-element-pack'),
                'frontend_available' => true,
                'render_type' => 'none',
            ]
        );

        $this->add_control(
            'reading_timer_seconds_text',
            [
                'label'       => __('Seconds Text', 'bdthemes-element-pack'),
                'type'        => Controls_Manager::TEXT,
                'placeholder' => __('sec read', 'bdthemes-element-pack'),
                'frontend_available' => true,
                'render_type' => 'none',
            ]
        );

        $this->add_control(
            'show_icon',
            [
                'label' => __('Show Icon', 'bdthemes-element-pack') . BDTEP_NC,
                'type'  => Controls_Manager::SWITCHER,
            ]
        );
        $this->end_controls_section();
        $this->start_controls_section(
            'section_style',
            [
                'label' => __('Reading Time', 'bdthemes-element-pack'),
                'tab'   => Controls_Manager::TAB_STYLE,
            ]
        );
        $this->add_control(
            'reading_color',
            [
                'label'     => __('Color', 'bdthemes-element-pack'),
                'type'      => Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .bdt-reading-timer' => 'color: {{VALUE}}',
                ],
            ]
        );
        $this->add_group_control(
            Group_Control_Background::get_type(),
            [
                'name'      => 'reading_background',
                'label'     => __('Background', 'bdthemes-element-pack'),
                'types'     => ['classic', 'gradient'],
                'selector'  => '{{WRAPPER}} .bdt-reading-timer',
            ]
        );

        $this->add_group_control(
            Group_Control_Border::get_type(),
            [
                'name'      => 'reading_border',
                'label'     => __('Border', 'bdthemes-element-pack'),
                'selector'  => '{{WRAPPER}} .bdt-reading-timer',
                'separator' => 'before',
            ]
        );
        $this->add_responsive_control(
            'reading_border_radius',
            [
                'label'      => __('Border Radius', 'bdthemes-element-pack'),
                'type'       => Controls_Manager::DIMENSIONS,
                'size_units' => ['px', '%'],
                'selectors'  => [
                    '{{WRAPPER}} .bdt-reading-timer' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
                ],
            ]
        );
        $this->add_responsive_control(
            'reading_padding',
            [
                'label'      => __('Padding', 'bdthemes-element-pack'),
                'type'       => Controls_Manager::DIMENSIONS,
                'size_units' => ['px', '%'],
                'selectors'  => [
                    '{{WRAPPER}} .bdt-reading-timer' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
                ],
            ]
        );
        $this->add_responsive_control(
            'reading_margin',
            [
                'label'      => __('Margin', 'bdthemes-element-pack'),
                'type'       => Controls_Manager::DIMENSIONS,
                'size_units' => ['px', '%'],
                'selectors'  => [
                    '{{WRAPPER}} .bdt-reading-timer' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
                ],
            ]
        );
        //space between
        $this->add_responsive_control(
            'reading_space_between',
            [
                'label'      => __('Space Between', 'bdthemes-element-pack') . BDTEP_NC,
                'type'       => Controls_Manager::SLIDER,
                'size_units' => ['px'],
                'range'      => [
                    'px'     => [
                        'min' => 0,
                        'max' => 100,
                    ],
                ],
                'default'    => [
                    'unit' => 'px',
                    'size' => 5,
                ],
                'selectors'  => [
                    '{{WRAPPER}} .bdt-reading-timer i' => 'margin-right: {{SIZE}}{{UNIT}};',
                ],
                'condition'  => [
                    'show_icon' => 'yes',
                ],
            ]
        );
        //box-shadow
        $this->add_group_control(
            Group_Control_Box_Shadow::get_type(),
            [
                'name'      => 'reading_box_shadow',
                'label'     => __('Box Shadow', 'bdthemes-element-pack'),
                'selector'  => '{{WRAPPER}} .bdt-reading-timer',
            ]
        );

        $this->add_group_control(
            Group_Control_Typography::get_type(),
            [
                'name'      => 'reading_typography',
                'label'     => __('Typography', 'bdthemes-element-pack'),
                'selector'  => '{{WRAPPER}} .bdt-reading-timer',
            ]
        );

        $this->add_responsive_control(
            'reading_timer_alignment',
            [
                'label'         => __('Alignment', 'bdthemes-element-pack'),
                'type'          => Controls_Manager::CHOOSE,
                'options'       => [
                    'left'      => [
                        'title' => __('Left', 'bdthemes-element-pack'),
                        'icon'  => 'eicon-text-align-left',
                    ],
                    'center'    => [
                        'title' => __('Center', 'bdthemes-element-pack'),
                        'icon'  => 'eicon-text-align-center',
                    ],
                    'right'     => [
                        'title' => __('Right', 'bdthemes-element-pack'),
                        'icon'  => 'eicon-text-align-right',
                    ],
                ],
                'selectors'     => [
                    '{{WRAPPER}}.elementor-widget-bdt-reading-timer .elementor-widget-container' => 'text-align: {{VALUE}};',
                ],
                'separator'     => 'before',
            ]
        );

        $this->end_controls_section();
    }

    public function render() { ?>
        <div class="bdt-reading-timer bdt-inline">
            <?php if ($this->get_settings('show_icon')) : ?>
                <i class="ep-icon-clock-o" aria-hidden="true"></i>
            <?php endif; ?>
        </div>
<?php
    }
}