editor->is_edit_mode() || \Elementor\Plugin::$instance->preview->is_preview_mode() ) { wp_enqueue_script( 'easyel-editor-script', EASYELEMENTS_DIR_URL . 'includes/Extensions/ProgressBar/assets/js/progress-bar.js', [ 'jquery' ], EASYELEMENTS_VER, true ); } }); } /** * Get instance */ public static function get_instance() : self { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } public function easy_progressbar_css() { wp_enqueue_style( 'easy-progress-bar', EASYELEMENTS_DIR_URL . 'includes/Extensions/ProgressBar/assets/css/progress-bar.css', [], EASYELEMENTS_VER ); } public function easyel_progressbar_controls( $element ) { $element->start_controls_section( 'easyel_progress_section', [ 'label' => EASY_EXTENSION_BADGE . __('Reading Progress Bar', 'easy-elements'), 'tab' => Controls_Manager::TAB_SETTINGS, ] ); $element->add_control( 'easyel_enable_progress', [ 'label' => __('Enable Reading Progress Bar', 'easy-elements'), 'type' => Controls_Manager::SWITCHER, 'default' => 'no', 'label_on' => __('Yes', 'easy-elements'), 'label_off' => __('No', 'easy-elements'), 'return_value' => 'yes', ] ); $options = [ 'global' => esc_html__( 'Enter Site', 'easy-elements' ), 'current-page' => esc_html__( 'Current Page', 'easy-elements' ), 'all-posts' => esc_html__( 'All Posts', 'easy-elements' ), 'all-pages' => esc_html__( 'All Pages', 'easy-elements' ), 'all-pages-post' => esc_html__( 'All Pages & Post', 'easy-elements' ), 'front-page' => esc_html__( 'Front Pages', 'easy-elements' ), 'blog-page' => esc_html__( 'Blog Pages', 'easy-elements' ), ]; if ( ! apply_filters('easyel/pro_enabled', false) ) { $options['all-posts'] = esc_html__( 'All Posts (pro)', 'easy-elements' ); $options['all-pages'] = esc_html__( 'All Pages (pro)', 'easy-elements' ); $options['all-pages-post'] = esc_html__( 'All Pages & Post (pro)', 'easy-elements' ); $options['front-page'] = esc_html__( 'Front Pages (pro)', 'easy-elements' ); $options['blog-page'] = esc_html__( 'Blog Pages (pro)', 'easy-elements' ); } $element->add_control( 'easyel_indivisual_global', [ 'label' => __('Apply Settings', 'easy-elements'), 'type' => Controls_Manager::SELECT, 'default' => 'global', 'options' => $options, 'condition' => [ 'easyel_enable_progress' => 'yes' ], ] ); $element->add_control( 'easyel_progress_position', [ 'label' => __('Position', 'easy-elements'), 'type' => Controls_Manager::SELECT, 'default' => 'top', 'options' => [ 'top' => __('Top', 'easy-elements'), 'bottom' => __('Bottom', 'easy-elements'), ], 'selectors' => [ '.easyel-progress-wrapper' => '{{VALUE}}: 0; {{VALUE === "top" ? "bottom: auto;" : "top: auto;"}}', ], 'condition' => [ 'easyel_enable_progress' => 'yes' ], ] ); $element->add_control( 'easyel_progress_color', [ 'label' => __('Bar Color', 'easy-elements'), 'type' => Controls_Manager::COLOR, 'default' => '#0073aa', 'selectors' => [ '.easyel-reading-progress-bar::-webkit-progress-value' => 'background-color: {{VALUE}};', '.easyel-reading-progress-bar::-moz-progress-bar' => 'background-color: {{VALUE}};', ], 'condition' => [ 'easyel_enable_progress' => 'yes' ], ] ); $element->add_control( 'easyel_progress_bg_color', [ 'label' => __('Progress Background Color', 'easy-elements'), 'type' => Controls_Manager::COLOR, 'default' => '#e0e0e0', 'selectors' => [ '.easyel-progress-wrapper' => '--easyel-progress-bg-color: {{VALUE}} !important;', ], 'condition' => [ 'easyel_enable_progress' => 'yes' ], ] ); $element->add_control( 'easyel_progress_height', [ 'label' => __('Height (px)', 'easy-elements'), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px' ], 'range' => [ 'px' => [ 'min' => 1, 'max' => 100 ] ], 'default' => [ 'size' => 8 ], 'selectors' => [ '.easyel-progress-wrapper' => 'height: {{SIZE}}{{UNIT}};', ], 'condition' => [ 'easyel_enable_progress' => 'yes' ], ] ); $element->end_controls_section(); } public function easyel_render_progressbar_html() { $global = get_option( 'easyel_global_settings', [] ); if ( empty( $global['reading_progress']['rules'] ) ) { return; } $rules = $global['reading_progress']['rules']; /** * Specific rules (non-global) */ foreach ( $rules as $rule ) { if ( empty( $rule['enabled'] ) || $rule['apply_to'] === 'global' ) { continue; } if ( $this->should_render_rule( $rule ) ) { $this->render_progressbar_html( $rule ); return; } } /** * Global rules (fallback) */ foreach ( $rules as $rule ) { if ( empty( $rule['enabled'] ) || $rule['apply_to'] !== 'global' ) { continue; } if ( $this->should_render_rule( $rule ) ) { $this->render_progressbar_html( $rule ); return; } } } private function should_render_rule( $rule ) { $apply_to = apply_filters( 'easyel/reading_progress/apply_to', $rule['apply_to'], $rule ); $show = apply_filters( 'easyel/reading_progress/should_render', null, $apply_to, $rule ); if ( $show !== null ) { return (bool) $show; } switch ( $apply_to ) { case 'current-page': return get_queried_object_id() === (int) $rule['source_post']; case 'global': return true; } return false; } private function render_progressbar_html( $settings ) { $pos_css = ($settings['position'] === 'bottom') ? 'bottom:0; top:auto;' : 'top:0; bottom:auto;'; $height = isset( $settings['height'] ) ? $settings['height'] : ''; $color = isset( $settings['color'] ) ? $settings['color'] : ''; $bg_color = isset( $settings['wrapper_bg_color'] ) ? $settings['wrapper_bg_color'] : ''; echo '