| @@ -1,11 +1,12 @@ | ||
| 1 | 1 | <?php |
| 2 | + | |
| 2 | 3 | namespace UiCoreElements\Widgets\ThemeBuilder; |
| 3 | 4 | |
| 4 | -use Elementor\Widget_Base; | |
| 5 | +use UiCoreElements\UiCoreWidget; | |
| 5 | 6 | use Elementor\Controls_Manager; |
| 7 | +use UiCoreElements\Utils\Meta_Trait; | |
| 6 | 8 | use UiCoreElements\Helper; |
| 7 | -use UiCoreElements\Utils\Meta_Trait; | |
| 8 | 9 | |
| 9 | 10 | defined('ABSPATH') || exit(); |
| 10 | 11 | |
| 11 | 12 | /** |
| @@ -10,198 +11,172 @@ | ||
| 10 | 11 | |
| 11 | 12 | /** |
| 12 | 13 | * The Title widget. |
| 13 | 14 | * |
| 14 | - * @since 4.0.0 | |
| 15 | + * @since 1.0.0 | |
| 15 | 16 | */ |
| 16 | -class PostMeta extends Widget_Base { | |
| 17 | +class PostMeta extends UiCoreWidget | |
| 18 | +{ | |
| 17 | 19 | |
| 18 | - use Meta_Trait; | |
| 20 | + use Meta_Trait; | |
| 19 | 21 | |
| 20 | - /** | |
| 21 | - * Get widget name. | |
| 22 | - * | |
| 23 | - * Retrieve heading widget name. | |
| 24 | - * | |
| 25 | - * @since 1.0.0 | |
| 26 | - * @access public | |
| 27 | - * | |
| 28 | - * @return string Widget name. | |
| 29 | - */ | |
| 30 | - public function get_name() { | |
| 31 | - return 'uicore-post-meta'; | |
| 32 | - } | |
| 22 | + public function get_name() | |
| 23 | + { | |
| 24 | + return 'uicore-post-meta'; | |
| 25 | + } | |
| 26 | + public function get_title() | |
| 27 | + { | |
| 28 | + return esc_html__('Post Meta', 'uicore-elements'); | |
| 29 | + } | |
| 30 | + public function get_icon() | |
| 31 | + { | |
| 32 | + return 'eicon-post-info ui-e-widget'; | |
| 33 | + } | |
| 34 | + public function get_categories() | |
| 35 | + { | |
| 36 | + return ['uicore', 'uicore-theme-builder']; | |
| 37 | + } | |
| 38 | + public function get_styles() | |
| 39 | + { | |
| 40 | + return ['post-meta']; | |
| 41 | + } | |
| 42 | + public function get_scripts() | |
| 43 | + { | |
| 44 | + return []; | |
| 45 | + } | |
| 46 | + public function get_keywords() | |
| 47 | + { | |
| 48 | + return ['post', 'meta', 'info']; | |
| 49 | + } | |
| 50 | + public function has_widget_inner_wrapper(): bool | |
| 51 | + { | |
| 52 | + // TODO: remove after Optmized Markup experiment is merged to the core | |
| 53 | + return ! \Elementor\Plugin::$instance->experiments->is_feature_active('e_optimized_markup'); | |
| 54 | + } | |
| 33 | 55 | |
| 34 | - /** | |
| 35 | - * Get widget title. | |
| 36 | - * | |
| 37 | - * Retrieve heading widget title. | |
| 38 | - * | |
| 39 | - * @since 1.0.0 | |
| 40 | - * @access public | |
| 41 | - * | |
| 42 | - * @return string Widget title. | |
| 43 | - */ | |
| 44 | - public function get_title() { | |
| 45 | - return esc_html__( 'Post Meta', 'uicore-elements' ); | |
| 46 | - } | |
| 56 | + protected function register_controls() | |
| 57 | + { | |
| 58 | + $this->start_controls_section( | |
| 59 | + 'section_content', | |
| 60 | + [ | |
| 61 | + 'label' => esc_html__('Content', 'uicore-elements'), | |
| 62 | + ] | |
| 63 | + ); | |
| 47 | 64 | |
| 48 | - /** | |
| 49 | - * Get widget icon. | |
| 50 | - * | |
| 51 | - * Retrieve heading widget icon. | |
| 52 | - * | |
| 53 | - * @since 1.0.0 | |
| 54 | - * @access public | |
| 55 | - * | |
| 56 | - * @return string Widget icon. | |
| 57 | - */ | |
| 58 | - public function get_icon() { | |
| 59 | - return 'eicon-post-info ui-e-widget'; | |
| 60 | - } | |
| 65 | + $this->add_control( | |
| 66 | + 'meta_list', | |
| 67 | + [ | |
| 68 | + 'label' => esc_html__('Meta Data', 'uicore-elements'), | |
| 69 | + 'type' => \Elementor\Controls_Manager::REPEATER, | |
| 70 | + 'fields' => $this->get_meta_content_controls(), | |
| 71 | + 'default' => [ | |
| 72 | + [ | |
| 73 | + 'type' => 'author' | |
| 74 | + ], | |
| 75 | + ], | |
| 76 | + 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>', | |
| 77 | + 'prevent_empty' => false, | |
| 78 | + 'separator' => 'before' | |
| 79 | + ] | |
| 80 | + ); | |
| 81 | + $this->add_responsive_control( | |
| 82 | + 'content_align', | |
| 83 | + [ | |
| 84 | + 'label' => esc_html__('Content Alignment', 'uicore-elements'), | |
| 85 | + 'type' => Controls_Manager::CHOOSE, | |
| 86 | + 'options' => [ | |
| 87 | + 'left' => [ | |
| 88 | + 'title' => esc_html__('Left', 'uicore-elements'), | |
| 89 | + 'icon' => 'eicon-text-align-left', | |
| 90 | + ], | |
| 91 | + 'center' => [ | |
| 92 | + 'title' => esc_html__('Center', 'uicore-elements'), | |
| 93 | + 'icon' => 'eicon-text-align-center', | |
| 94 | + ], | |
| 95 | + ], | |
| 96 | + 'selectors' => [ | |
| 97 | + '{{WRAPPER}}' => 'text-align: {{VALUE}};', | |
| 98 | + ], | |
| 99 | + ] | |
| 100 | + ); | |
| 101 | + $this->end_controls_section(); | |
| 61 | 102 | |
| 62 | - /** | |
| 63 | - * Get widget categories. | |
| 64 | - * | |
| 65 | - * Retrieve the list of categories the heading widget belongs to. | |
| 66 | - * | |
| 67 | - * Used to determine where to display the widget in the editor. | |
| 68 | - * | |
| 69 | - * @since 2.0.0 | |
| 70 | - * @access public | |
| 71 | - * | |
| 72 | - * @return array Widget categories. | |
| 73 | - */ | |
| 74 | - public function get_categories() { | |
| 75 | - return ['uicore', 'uicore-theme-builder' ]; | |
| 76 | - } | |
| 103 | + $this->start_controls_section( | |
| 104 | + 'section_meta_style', | |
| 105 | + [ | |
| 106 | + 'label' => esc_html__('Style', 'uicore-elements'), | |
| 107 | + 'tab' => Controls_Manager::TAB_STYLE, | |
| 108 | + ] | |
| 109 | + ); | |
| 110 | + $this->get_meta_style_controls(); | |
| 111 | + $this->end_controls_section(); | |
| 112 | + } | |
| 77 | 113 | |
| 78 | - public function get_style_depends() { | |
| 79 | - Helper::register_widget_style('meta'); | |
| 80 | - return [ 'ui-e-meta' ]; | |
| 81 | - } | |
| 114 | + protected function display_dummy_text($meta_list) | |
| 115 | + { | |
| 116 | + echo '<div class="ui-e-post-meta ui-e-tb-meta">'; | |
| 117 | + foreach ($meta_list as $meta) { | |
| 118 | + if ($meta['type'] != 'none') { | |
| 82 | 119 | |
| 83 | - /** | |
| 84 | - * Get widget keywords. | |
| 85 | - * | |
| 86 | - * Retrieve the list of keywords the widget belongs to. | |
| 87 | - * | |
| 88 | - * @since 2.1.0 | |
| 89 | - * @access public | |
| 90 | - * | |
| 91 | - * @return array Widget keywords. | |
| 92 | - */ | |
| 93 | - public function get_keywords() { | |
| 94 | - return [ 'post', 'meta', 'info' ]; | |
| 95 | - } | |
| 120 | + $dummy_content = [ | |
| 121 | + 'excerpt' => esc_html__('This is a sample post excerpt. It provides a brief summary of the article, giving readers a quick preview of the content before they click through to read the full post.', 'uicore-elements'), | |
| 122 | + 'comment' => rand(1, 5), | |
| 123 | + 'reading time' => rand(1, 5) | |
| 124 | + ]; | |
| 96 | 125 | |
| 97 | - /** | |
| 98 | - * Register heading widget controls. | |
| 99 | - * | |
| 100 | - * Adds different input fields to allow the user to change and customize the widget settings. | |
| 101 | - * | |
| 102 | - * @since 3.1.0 | |
| 103 | - * @access protected | |
| 104 | - */ | |
| 105 | - protected function register_controls() { | |
| 106 | - $this->start_controls_section( | |
| 107 | - 'section_content', | |
| 108 | - [ | |
| 109 | - 'label' => esc_html__( 'Content', 'uicore-elements' ), | |
| 110 | - ] | |
| 111 | - ); | |
| 126 | + // Print dummy content, if available | |
| 127 | + if (array_key_exists($meta['type'], $dummy_content)) { | |
| 128 | + $content = $dummy_content[$meta['type']]; | |
| 112 | 129 | |
| 113 | - $this->add_control('meta_list',[ | |
| 114 | - 'label' => esc_html__( 'Meta Data', 'uicore-elements' ), | |
| 115 | - 'type' => \Elementor\Controls_Manager::REPEATER, | |
| 116 | - 'fields' => $this->get_meta_content_controls(), | |
| 117 | - 'default' => [ | |
| 118 | - [ | |
| 119 | - 'type' => 'author' | |
| 120 | - ], | |
| 121 | - ], | |
| 122 | - 'title_field' => '<span style="text-transform: capitalize">{{{ type }}}</span>', | |
| 123 | - 'prevent_empty' => false, | |
| 124 | - 'separator'=> 'before' | |
| 125 | - ] | |
| 126 | - ); | |
| 127 | - $this->add_responsive_control('content_align', | |
| 128 | - [ | |
| 129 | - 'label' => esc_html__( 'Content Alignment', 'uicore-elements' ), | |
| 130 | - 'type' => Controls_Manager::CHOOSE, | |
| 131 | - 'options' => [ | |
| 132 | - 'left' => [ | |
| 133 | - 'title' => esc_html__( 'Left', 'uicore-elements' ), | |
| 134 | - 'icon' => 'eicon-text-align-left', | |
| 135 | - ], | |
| 136 | - 'center' => [ | |
| 137 | - 'title' => esc_html__( 'Center', 'uicore-elements' ), | |
| 138 | - 'icon' => 'eicon-text-align-center', | |
| 139 | - ], | |
| 140 | - ], | |
| 141 | - 'selectors' => [ | |
| 142 | - '{{WRAPPER}}' => 'text-align: {{VALUE}};', | |
| 143 | - ], | |
| 144 | - ] | |
| 145 | - ); | |
| 146 | - $this->end_controls_section(); | |
| 130 | + // The content printing is the same from display_meta() and should follow up future changes | |
| 131 | + $wrapper = '<div class="ui-e-meta-item">'; | |
| 132 | + $prefix = $meta['before'] ? '<span>' . esc_html($meta['before']) . '</span>' : ''; | |
| 133 | + $suffix = $meta['after'] ? '<span class="ui-e-meta-after">' . esc_html($meta['after']) . '</span>' : ''; | |
| 147 | 134 | |
| 148 | - $this->start_controls_section( | |
| 149 | - 'section_meta_style', | |
| 150 | - [ | |
| 151 | - 'label' => esc_html__( 'Style', 'uicore-elements' ), | |
| 152 | - 'tab' => Controls_Manager::TAB_STYLE, | |
| 153 | - ] | |
| 154 | - ); | |
| 155 | - $this->get_meta_style_controls(); | |
| 156 | - $this->end_controls_section(); | |
| 135 | + ob_start(); | |
| 136 | + \Elementor\Icons_Manager::render_icon($meta['icon'], ['aria-hidden' => 'true', 'class' => 'ui-e-meta-icon'], 'span'); | |
| 137 | + $icon = ob_get_clean(); | |
| 157 | 138 | |
| 158 | - } | |
| 139 | + if (!empty($content)) { | |
| 140 | + echo $wrapper . Helper::esc_svg($icon) . $prefix . $content . $suffix . '</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped | |
| 141 | + } | |
| 142 | + } else { | |
| 143 | + $this->display_meta($meta); | |
| 144 | + } | |
| 159 | 145 | |
| 160 | - /** | |
| 161 | - * Render heading widget output on the frontend. | |
| 162 | - * | |
| 163 | - * Written in PHP and used to generate the final HTML. | |
| 164 | - * | |
| 165 | - * @since 1.0.0 | |
| 166 | - * @access protected | |
| 167 | - */ | |
| 168 | - protected function render() { | |
| 146 | + if (next($meta_list) && $this->get_settings_for_display('tb-meta_meta_separator')) { | |
| 147 | + echo '<span class="ui-e-separator">' . esc_html($this->get_settings_for_display('tb-meta_meta_separator')) . '</span>'; | |
| 148 | + } | |
| 149 | + } | |
| 150 | + } | |
| 151 | + echo '</div>'; | |
| 152 | + } | |
| 169 | 153 | |
| 170 | - if( !\Elementor\Plugin::$instance->editor->is_edit_mode() ) { | |
| 171 | - $title = wp_title(null,false); | |
| 172 | - $title = $title ? $title : get_bloginfo('name'); | |
| 173 | - }else{ | |
| 174 | - $title = __( 'This is a dummy title.', 'uicore-elements' ); | |
| 154 | + protected function render() | |
| 155 | + { | |
| 156 | + $meta_list = $this->get_settings_for_display('meta_list'); | |
| 157 | + | |
| 158 | + if (!isset($meta_list[0]) || $meta_list[0]['type'] == '') { | |
| 159 | + return; | |
| 175 | 160 | } |
| 176 | 161 | |
| 177 | - $meta_list = $this->get_settings_for_display( 'meta_list' ); | |
| 178 | - if(!isset($meta_list[0]) || $meta_list[0]['type'] == ''){ | |
| 162 | + if ($this->is_edit_mode()) { | |
| 163 | + $this->display_dummy_text($meta_list); | |
| 179 | 164 | return; |
| 180 | 165 | } |
| 181 | 166 | |
| 182 | - echo '<div class="ui-e-post-meta ui-e-tb-meta">'; | |
| 183 | - foreach ($meta_list as $meta) { | |
| 184 | - if($meta['type'] != 'none'){ | |
| 185 | - $this->display_meta($meta); | |
| 167 | + echo '<div class="ui-e-post-meta ui-e-tb-meta">'; | |
| 168 | + foreach ($meta_list as $meta) { | |
| 169 | + if ($meta['type'] != 'none') { | |
| 170 | + $this->display_meta($meta); | |
| 186 | 171 | |
| 187 | - if( next( $meta_list ) && $this->get_settings_for_display( 'tb-meta_meta_separator' ) ) { | |
| 188 | - echo '<span class="ui-e-separator">'.esc_html($this->get_settings_for_display('tb-meta_meta_separator' )).'</span>'; | |
| 189 | - } | |
| 172 | + if (next($meta_list) && $this->get_settings_for_display('tb-meta_meta_separator')) { | |
| 173 | + echo '<span class="ui-e-separator">' . esc_html($this->get_settings_for_display('tb-meta_meta_separator')) . '</span>'; | |
| 190 | 174 | } |
| 191 | 175 | } |
| 192 | - echo '</div>'; | |
| 176 | + } | |
| 177 | + echo '</div>'; | |
| 178 | + } | |
| 193 | 179 | |
| 194 | - } | |
| 195 | - | |
| 196 | - /** | |
| 197 | - * Render heading widget output in the editor. | |
| 198 | - * | |
| 199 | - * Written as a Backbone JavaScript template and used to generate the live preview. | |
| 200 | - * | |
| 201 | - * @since 2.9.0 | |
| 202 | - * @access protected | |
| 203 | - */ | |
| 204 | - protected function content_template() { | |
| 205 | - } | |
| 180 | + protected function content_template() {} | |
| 206 | 181 | } |
| 207 | 182 | \Elementor\Plugin::instance()->widgets_manager->register(new PostMeta()); |