PluginProbe
Easy Elements for Elementor – Addons & Website Templates / 1.2.3
Easy Elements for Elementor – Addons & Website Templates v1.2.3
1.5.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.6 1.4.7 1.4.8 1.4.5 1.4.4 1.4.3 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 All 47 releases
easy-elements / admin / settings.php

settings.php in Easy Elements for Elementor – Addons & Website Templates 1.2.3, at admin/settings.php

1,370 lines 62.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 exit;
4 }
5
6 class Easyel_Elements {
7
8 // Singleton instance
9 private static $instance = null;
10
11 private function __construct() {
12 // Hooks
13
14 // Custom Font Load Free
15
16 add_action( 'admin_menu', array( $this, 'easyel_elements_settings_menu' ) );
17 add_action( 'admin_init', array( $this, 'easyel_elements_register_settings' ) );
18
19 add_action( 'easyel_smooth_scroller_popup', array( $this, 'easyel_smooth_scroller_popup_callback' ), 5 );
20
21 $this->easyel_settings_ajax();
22
23 }
24
25 public function easyel_settings_ajax( ) {
26
27 // AJAX handler for saving minify js option
28
29 add_action('wp_ajax_easy_elements_save_widget_setting', array( $this, "easy_elements_save_widget_setting" ) );
30 add_action('wp_ajax_easy_elements_bulk_action', array( $this, 'easy_elements_bulk_action') );
31
32 add_action('wp_ajax_easy_elements_save_global_extensions', array( $this, 'easy_elements_save_global_extensions') ) ;
33 add_action('wp_ajax_easy_elements_save_global_extensions_bulk', array( $this, 'easy_elements_save_global_extensions_bulk') ) ;
34
35 add_action('wp_ajax_easy_elements_bulk_group_action', [$this, 'easy_elements_bulk_group_action']);
36
37 add_action('admin_enqueue_scripts', array( $this, 'easyel_elements_enqueue_admin_assets') );
38 add_action( 'admin_head', array( $this, 'easyel_hide_admin_notices' ) );
39
40 add_action('wp_ajax_easyel_save_user_data', array( $this, 'easyel_save_user_data_callback') );
41
42 add_action('wp_ajax_save_smooth_scroll_settings', array( $this, 'save_smooth_scroll_settings'));
43 add_action('wp_ajax_nopriv_save_smooth_scroll_settings', array( $this, 'save_smooth_scroll_settings') );
44
45 }
46
47 // Singleton get_instance
48 public static function get_instance() {
49 if (self::$instance === null) {
50 self::$instance = new self();
51 }
52 return self::$instance;
53 }
54
55 public function easyel_save_user_data_callback() {
56
57 check_ajax_referer('easy_elements_nonce', 'security');
58
59 // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
60 $posted = $_POST['settings'] ?? [];
61 $settings = map_deep( wp_unslash( $posted ), 'sanitize_text_field' );
62
63 update_option( 'easy_element_user_data', $settings );
64
65 wp_send_json_success(['message' => 'Saved successfully!']);
66 }
67
68 public function easyel_elements_settings_menu() {
69
70 // Main Menu
71 add_menu_page(
72 __('Easy Elements', 'easy-elements'),
73 __('Easy Elements', 'easy-elements'),
74 'manage_options',
75 'easy-elements-dashboard',
76 array( $this, 'easyel_elements_settings_callback' ),
77 'dashicons-admin-generic',
78 59
79 );
80
81 global $submenu;
82
83 // Main slug
84 $slug = 'easy-elements-dashboard';
85
86 $submenu[$slug][] = [ __('Overview', 'easy-elements'), 'manage_options', 'admin.php?page='.$slug.'#overview' ];
87 $submenu[$slug][] = [ __('Widgets', 'easy-elements'), 'manage_options', 'admin.php?page='.$slug.'#widget' ];
88 $submenu[$slug][] = [ __('All Extensions', 'easy-elements'), 'manage_options', 'admin.php?page='.$slug.'#extensions' ];
89 $submenu[$slug][] = [ __('Activate License', 'easy-elements'), 'manage_options', 'admin.php?page='.$slug.'#activate_license' ];
90
91 // Header & Footer Submenu
92 add_submenu_page(
93 'easy-elements-dashboard',
94 __('Header & Footer', 'easy-elements'),
95 __('Header & Footer', 'easy-elements'),
96 'manage_options',
97 'edit.php?post_type=ee-elementor-hf'
98 );
99
100 // Upload Custom Fonts Submenu
101 add_submenu_page(
102 'easy-elements-dashboard',
103 __('Upload Custom Fonts', 'easy-elements'),
104 __('Upload Custom Fonts', 'easy-elements'),
105 'manage_options',
106 'easyel-custom-fonts',
107 array( $this, 'easyel_custom_fonts_page_html' )
108 );
109
110 // Off Canvas Submenu
111 add_submenu_page(
112 'easy-elements-dashboard',
113 __('Off Canvas', 'easy-elements'),
114 __('Off Canvas', 'easy-elements'),
115 'manage_options',
116 'edit.php?post_type=easy-offcanvas'
117 );
118 }
119
120 public function easyel_elements_register_settings() {
121 register_setting( 'easyel_elements_extensions_group', 'easyel_enable_js_animation', [
122 'sanitize_callback' => 'absint',
123 'default' => 0,
124 ] );
125
126 // Cursor setting register
127 register_setting( 'easyel_elements_extensions_group', 'easyel_enable_cursor', [
128 'sanitize_callback' => 'absint',
129 'default' => 0,
130 ] );
131 }
132
133 public function easy_elements_bulk_group_action() {
134
135 if (!current_user_can('manage_options')) {
136 wp_send_json_error(__('Unauthorized', 'easy-elements'));
137 }
138
139 check_ajax_referer('easy_elements_bulk_action_nonce', 'nonce');
140
141 $group = isset($_POST['group']) ? sanitize_text_field(wp_unslash($_POST['group'])) : '';
142 $tab = isset($_POST['tab']) ? sanitize_text_field(wp_unslash($_POST['tab'])) : 'widget';
143 $status = isset($_POST['status']) && $_POST['status'] == 1 ? '1' : '0';
144
145 $available_elements = $this->easyel_elements_get_available_widgets();
146 $updated_count = 0;
147
148 $is_pro_active = class_exists('Easy_Elements_Pro');
149
150 foreach ($available_elements as $key => $widget) {
151
152 if (!isset($widget['tab']) || $widget['tab'] !== $tab) {
153 continue;
154 }
155
156 $group_slug = strtolower(trim($group));
157
158 $widget_group = isset( $widget['group'] ) ? $widget['group'] : 'General Widgets';
159
160 $widget_group_slug = strtolower(trim(str_replace(' ', '-', $widget_group ) ) );
161
162 if ($widget_group_slug !== $group_slug) {
163 continue;
164 }
165
166 $option_name = 'easy_element_' . $tab . '_' . $key;
167
168 if (!$is_pro_active && isset($widget['is_pro']) && $widget['is_pro']) {
169 update_option($option_name, '0');
170 } else {
171 update_option($option_name, $status);
172 }
173
174 $updated_count++;
175 }
176
177 wp_send_json_success([
178 'message' => sprintf('%d widgets %s successfully', $updated_count, $status ? 'activated' : 'deactivated'),
179 'count' => $updated_count,
180 'is_pro_active' => $is_pro_active,
181 'status' => $status
182 ]);
183 }
184
185 public function easy_elements_save_global_extensions_bulk() {
186 if ( ! current_user_can( 'manage_options' ) ) {
187 wp_send_json_error( __( 'Unauthorized', 'easy-elements' ) );
188 }
189
190 check_ajax_referer( 'easy_elements_widget_settings_nonce', 'nonce' );
191
192 $tab = isset( $_POST['tab'] ) ? sanitize_text_field( wp_unslash( $_POST['tab'] ) ) : 'extensions';
193 $keys = isset( $_POST['keys'] ) ? array_map( 'sanitize_text_field', (array) wp_unslash( $_POST['keys'] ) ) : [];
194 $status = isset( $_POST['status'] ) ? intval( wp_unslash( $_POST['status'] ) ) : 0;
195 $group_slug = isset( $_POST['group'] ) ? sanitize_text_field( wp_unslash( $_POST['group'] ) ) : '';
196
197 if ( empty( $keys ) ) {
198 wp_send_json_error( [ 'message' => __( 'No keys provided', 'easy-elements' ) ] );
199 }
200
201 $settings = get_option( 'easy_element_' . $tab, [] );
202
203 foreach ( $keys as $key ) {
204 $key = sanitize_text_field( $key );
205 $settings[ $key ] = $status;
206 }
207
208 update_option( 'easy_element_' . $tab, $settings );
209
210 if ( $group_slug ) {
211 update_option( 'easy_element_group_' . $group_slug, $status );
212 }
213
214 wp_send_json_success( [ 'message' => __( 'Bulk settings updated', 'easy-elements' ) ] );
215 }
216
217 public function easy_elements_save_global_extensions() {
218 if (!current_user_can('manage_options')) {
219 wp_send_json_error(__('Unauthorized', 'easy-elements'));
220 }
221
222 check_ajax_referer('easy_elements_widget_settings_nonce', 'nonce');
223
224 $tab = isset( $_POST['tab'] ) ? sanitize_text_field( wp_unslash( $_POST['tab'] ) ) : 'extensions';
225 $key = isset($_POST['key']) ? sanitize_text_field( wp_unslash( $_POST['key'] )) : '';
226 $status = isset( $_POST['status'] ) ? intval( wp_unslash( $_POST['status'] ) ) : 0;
227
228 if (!$key) {
229 wp_send_json_error(['message' => __('Invalid key', 'easy-elements')]);
230 }
231
232 $settings = get_option('easy_element_' . $tab, []);
233 $settings[$key] = $status;
234
235 update_option('easy_element_' . $tab, $settings);
236
237 wp_send_json_success(['message' => __('Settings updated', 'easy-elements')]);
238 }
239
240
241 // AJAX handler for saving individual widget settings
242
243 public function easy_elements_save_widget_setting() {
244 if (!current_user_can('manage_options')) {
245 wp_send_json_error(__('Unauthorized', 'easy-elements'));
246 }
247 check_ajax_referer('easy_elements_widget_settings_nonce', 'nonce');
248
249 $widget_key = isset($_POST['widget_key']) ? sanitize_text_field( wp_unslash($_POST['widget_key'] ) ) : '';
250 $status = isset($_POST['status']) && $_POST['status'] === '1' ? '1' : '0';
251 $tab_slug = isset($_POST['tab']) ? sanitize_text_field( wp_unslash( $_POST['tab'] ) ) : 'widget';
252
253 if (!empty( $widget_key ) ) {
254 $option_name = 'easy_element_' . $tab_slug . '_' . $widget_key;
255
256 update_option($option_name, $status);
257
258 wp_send_json_success([
259 'message' => __('Widget setting updated successfully', 'easy-elements'),
260 'status' => $status,
261 ]);
262 } else {
263 wp_send_json_error(['message' => __('Invalid widget key', 'easy-elements')]);
264 }
265 }
266
267 // AJAX handler for bulk actions
268 public function easy_elements_bulk_action() {
269 if (!current_user_can('manage_options')) {
270 wp_send_json_error(__('Unauthorized', 'easy-elements'));
271 }
272 check_ajax_referer('easy_elements_bulk_action_nonce', 'nonce');
273
274 $bulk_action = isset($_POST['bulk_action']) ? sanitize_text_field(wp_unslash($_POST['bulk_action'])) : '';
275 $tab = isset($_POST['tab']) ? sanitize_text_field( wp_unslash( $_POST['tab'] ) ) : 'widget';
276 $status = $bulk_action === 'activate_all' ? '1' : '0';
277
278 $available_elements = $this->easyel_elements_get_available_widgets();
279 $updated_count = 0;
280
281 $is_pro_active = class_exists('Easy_Elements_Pro');
282
283 foreach ($available_elements as $key => $widget) {
284 if (isset($widget['tab']) && $widget['tab'] === $tab) {
285 $option_name = 'easy_element_' . $tab . '_' . $key;
286
287 if (!$is_pro_active && isset($widget['is_pro']) && $widget['is_pro']) {
288 update_option($option_name, '0');
289 } else {
290 $status = $bulk_action === 'activate_all' ? '1' : '0';
291 update_option($option_name, $status);
292 }
293 }
294 }
295
296 wp_send_json_success([
297 'message' => sprintf('%d widgets %s successfully', $updated_count, $status ? 'activated' : 'deactivated'),
298 'count' => $updated_count,
299 'is_pro_active' => $is_pro_active
300 ]);
301 }
302
303
304 function easyel_elements_settings_callback() {
305 $available_elements = $this->easyel_elements_get_available_widgets();
306
307 $easyel_tabs = [
308 'overview' => __('Overview', 'easy-elements'),
309 'widget' => __('All Widgets', 'easy-elements'),
310 'extensions' => __('All Extensions', 'easy-elements'),
311 'advsettings' => __('Advanced Settings', 'easy-elements'),
312 'userData' => __('API Settings', 'easy-elements'),
313
314 ];
315
316 if ( class_exists('Easyel_License_Manager') ) {
317 $easyel_tabs['activate_license'] = __('Activate License', 'easy-elements');
318 }
319
320
321 $easyel_tab_list = apply_filters("easyel_all_tab_list", $easyel_tabs );
322
323 ?>
324 <div class="easyel-overview-header">
325 <img src="<?php echo esc_url( EASYELEMENTS_DIR_URL . 'admin/img/easy-logo.png' ); ?>" alt="<?php echo esc_attr( 'logo' ); ?>">
326
327 </div>
328 <div class=" easyel-plugin-settings-wrapper">
329 <div class="easyel-nav-tab-item">
330 <div class="easyel-nav-tab-wrapper easyel-border-radius-20">
331 <a href="#overview" class="easyel-nav-tab easyel-nav-tab-active" data-tab="overview"><i class="easyelIcon-home"></i> <?php esc_html_e ('Overview','easy-elements'); ?></a>
332 <a href="#widget" class="easyel-nav-tab" data-tab="widget"><i class="easyelIcon-widgets"></i><?php esc_html_e('All Widgets','easy-elements'); ?></a>
333 <a href="#extensions" class="easyel-nav-tab" data-tab="extensions"><i class="easyelIcon-extension"></i><?php esc_html_e('All Extensions','easy-elements'); ?></a>
334 <a href="#userData" class="easyel-nav-tab" data-tab="userData"><i class="easyelIcon-setting"></i><?php esc_html_e('API Settings','easy-elements'); ?></a>
335 <a href="#activate_license" class="easyel-nav-tab" data-tab="activate_license"><i class="easyelIcon-license-pro"></i><?php esc_html_e('Activate License','easy-elements'); ?></a>
336 <div class="easyel-tab-pro-link">
337 <a href="https://wpeasyelements.com/pricing/" class="easyel-nav-tab-pro" target="_blank">
338 <i class="easyelIcon-crown"></i>
339 <?php esc_html_e('Go Premium','easy-elements'); ?>
340 </a>
341 </div>
342 </div>
343 </div>
344 <!-- Status Messages -->
345 <div id="bulk-action-message" class="notice" style="display: none;"></div>
346
347 <!-- Tab Content -->
348 <div id="easyel-tab-content">
349 <?php foreach ( $easyel_tabs as $tab_slug => $tab_label ) : ?>
350 <div id="tab-<?php echo esc_attr($tab_slug); ?>"
351 class="easyel-tab-panel easyel-border-radius-20 <?php echo esc_attr($tab_slug); ?>"
352 style="<?php echo $tab_slug === 'overview' ? '' : 'display:none;'; ?>">
353
354 <?php
355 if ( $tab_slug === 'widget' ) : ?>
356 <div class="easyel-addon-search easyel-dflex easyel-justify-between">
357 <div class="easyel-widget-filter">
358 <h1 class="easyel-dashboard-heading"><?php esc_html_e('Widgets','easy-elements');?></h1>
359 <div class="easyel-widget-filter-button">
360 <button type="button" id="easyel_all" class="easyel-action-btn active" data-filter="easyel_all"><?php esc_html_e('All', 'easy-elements'); ?></button>
361 <button type="button" id="easyel_free" class="easyel-action-btn" data-filter="easyel_free"><?php esc_html_e('Free', 'easy-elements'); ?></button>
362 <button type="button" id="easyel_pro" class="easyel-action-btn" data-filter="easyel_pro"><?php esc_html_e('Pro', 'easy-elements'); ?></button>
363 </div>
364 </div>
365 <div class="easyel-widget-search-enable">
366 <div class="easyel-widget-activeDeactivate-button">
367 <button type="button" id="activate-all-btn"><?php esc_html_e('Activate All', 'easy-elements'); ?></button>
368 <button type="button" id="deactivate-all-btn"><?php esc_html_e('Deactivate All', 'easy-elements'); ?></button>
369 </div>
370 <?php if ( $tab_slug === 'widget' ) { ?>
371 <input type="text" id="element-search" placeholder="<?php esc_attr_e('Search widgets...', 'easy-elements'); ?>">
372 <?php } ?>
373 </div>
374 </div>
375 <?php endif; ?>
376 <?php
377
378 $tab_file = EASYELEMENTS_DIR_PATH . '/admin/settingstab/tab-' . $tab_slug . '.php';
379
380 if ( file_exists( $tab_file ) ) {
381 include $tab_file;
382 }
383
384 if ( class_exists('Easyel_License_Manager') && $tab_slug === 'activate_license' ) {
385 $manager = new Easyel_License_Manager();
386 $manager->license_page_html();
387 }
388
389 ?>
390 </div>
391 <?php endforeach; ?>
392 </div>
393
394 </div>
395
396 <!-- JavaScript functionality is handled by admin.js -->
397 <?php
398 }
399
400 ////////****************** AJAX Toggle ********************************
401
402 public function Easyel_Elements_enqueue_admin_assets($hook) {
403 if (strpos($hook, 'easy-elements') === false) {
404 return;
405 }
406
407 // Enqueue admin JavaScript
408 wp_enqueue_script(
409 'easy-elements-admin',
410 plugin_dir_url(__DIR__) . 'assets/js/admin.js',
411 ['jquery'],
412 '1.0.0',
413 true
414 );
415
416
417 // Localize script with all necessary data
418 wp_localize_script('easy-elements-admin', 'easyElementsData', [
419 'ajaxurl' => admin_url('admin-ajax.php'),
420 'nonce' => wp_create_nonce('easy_elements_nonce'),
421 'widget_settings_nonce' => wp_create_nonce('easy_elements_widget_settings_nonce'),
422 'bulk_action_nonce' => wp_create_nonce('easy_elements_bulk_action_nonce'),
423 'advance_settings_nonce' => wp_create_nonce('easy_elements_save_advance_settings_nonce'),
424 'js_animation_nonce' => wp_create_nonce('easyel_js_animation_nonce'),
425 'strings' => [
426 'confirm_activate_all' => __('Are you sure you want to activate all widgets?', 'easy-elements'),
427 'confirm_deactivate_all' => __('Are you sure you want to deactivate all widgets?', 'easy-elements'),
428 'processing' => __('Processing...', 'easy-elements'),
429 'saving' => __('Saving...', 'easy-elements'),
430 'saved' => __('Saved!', 'easy-elements'),
431 'error' => __('Error!', 'easy-elements'),
432 'updated' => __('Updated!', 'easy-elements'),
433 ]
434 ]);
435 }
436
437 function easyel_elements_get_available_widgets() {
438 $widgets = [
439 'heading' => [
440 'icon' => 'easyelIcon-heading',
441 'title' => 'Heading',
442 'description' => 'Add customizable headings with style options.',
443 'demo_url' => 'https://wpeasyelements.com/heading/',
444 'docx_url' => 'https://wpeasyelements.com/docs/heading/',
445 'is_pro' => false,
446 'tab' => 'widget',
447 ],
448 'clients_logo' => [
449 'icon' => 'easyelIcon-clients-logo-grid',
450 'title' => 'Clients Logo Grid',
451 'description' => 'Showcase client logos in a neat grid layout.',
452 'demo_url' => 'https://wpeasyelements.com/clients-logo-grid/',
453 'docx_url' => 'https://wpeasyelements.com/docs/clients-logo-grid',
454 'is_pro' => false,
455 'tab' => 'widget',
456 ],
457 'clients_logo_slider' => [
458 'icon' => 'easyelIcon-clients-logo-slider',
459 'title' => 'Clients Logo Slider',
460 'description' => 'Display client logos in a slider format.',
461 'demo_url' => 'https://wpeasyelements.com/clients-logo-slider/',
462 'docx_url' => 'https://wpeasyelements.com/docs/clients-logo-slider/',
463 'is_pro' => true,
464 'group' => 'Creative Widgets',
465 'tab' => 'widget',
466 ],
467 'simple_tab' => [
468 'icon' => 'easyelIcon-tab',
469 'title' => 'Tab',
470 'description' => 'Add simple tab content.',
471 'demo_url' => 'https://wpeasyelements.com/tab',
472 'docx_url' => 'https://wpeasyelements.com/docs/tab',
473 'is_pro' => false,
474 'tab' => 'widget',
475 ],
476 'tab_advance' => [
477 'icon' => 'easyelIcon-tab',
478 'title' => 'Advanced Tab',
479 'description' => 'Create advanced tab content.',
480 'demo_url' => 'https://wpeasyelements.com/advanced-tab/',
481 'docx_url' => 'https://wpeasyelements.com/docs/advanced-tab/',
482 'is_pro' => true,
483 'tab' => 'widget',
484 ],
485 'testimonials' => [
486 'icon' => 'easyelIcon-testimonials-grid',
487 'title' => 'Testimonials Grid',
488 'description' => 'Show testimonials in a grid format.',
489 'demo_url' => 'https://wpeasyelements.com/testimonials-grid',
490 'docx_url' => 'https://wpeasyelements.com/docs/testimonials-grid',
491 'is_pro' => false,
492 'tab' => 'widget',
493 ],
494 'testimonials_slider' => [
495 'icon' => 'easyelIcon-testimonials-slider',
496 'title' => 'Testimonials Slider',
497 'description' => 'Display testimonials in a slider format.',
498 'demo_url' => 'https://wpeasyelements.com/testimonials-slider/',
499 'docx_url' => 'https://wpeasyelements.com/docs/testimonials-slider/',
500 'is_pro' => true,
501 'tab' => 'widget',
502 ],
503 'image_carousel' => [
504 'icon' => 'easyelIcon-image-carousel',
505 'title' => 'Image Carousel',
506 'description' => 'Create an image slider with multiple images.',
507 'demo_url' => 'https://wpeasyelements.com/image-carousel/',
508 'docx_url' => 'https://wpeasyelements.com/docs/image-carousel',
509 'is_pro' => true,
510 'tab' => 'widget',
511 ],
512 'image_reveal' => [
513 'icon' => 'easyelIcon-marquee-logo',
514 'title' => 'Reveal Image',
515 'description' => 'reveal Image Here',
516 'demo_url' => 'https://wpeasyelements.com/reveal-image/',
517 'docx_url' => 'https://wpeasyelements.com/docs/reveal-image/',
518 'is_pro' => true,
519 'tab' => 'widget',
520 ],
521 'rotate_text' => [
522 'icon' => 'easyelIcon-heading',
523 'title' => 'Rotate Text',
524 'description' => 'rotate text here',
525 'demo_url' => 'https://wpeasyelements.com/rotate-text/',
526 'docx_url' => 'https://wpeasyelements.com/docs/rotate-text/',
527 'is_pro' => true,
528 'tab' => 'widget',
529 ],
530 'icon_box' => [
531 'icon' => 'easyelIcon-iconbox',
532 'title' => 'Info Box',
533 'description' => 'Display content with an icon.',
534 'demo_url' => 'https://wpeasyelements.com/info-box',
535 'docx_url' => 'https://wpeasyelements.com/docs/info-box',
536 'is_pro' => false,
537 'tab' => 'widget',
538 ],
539 'process_grid' => [
540 'icon' => 'easyelIcon-process-grid',
541 'title' => 'Process Grid',
542 'description' => 'Show process steps in a grid format.',
543 'demo_url' => 'https://wpeasyelements.com/process-grid',
544 'docx_url' => 'https://wpeasyelements.com/docs/process-grid',
545 'is_pro' => false,
546 'tab' => 'widget',
547 ],
548 'process_slider' => [
549 'icon' => 'easyelIcon-process-slider',
550 'title' => 'Process Slider',
551 'description' => 'Show process steps in a slider.',
552 'demo_url' => 'https://wpeasyelements.com/process-slider/',
553 'docx_url' => 'https://wpeasyelements.com/docs/process-slider/',
554 'is_pro' => true,
555 'tab' => 'widget',
556 ],
557 'team_grid' => [
558 'icon' => 'easyelIcon-team-grid',
559 'title' => 'Team Grid',
560 'description' => 'Display team members in a grid format.',
561 'demo_url' => 'https://wpeasyelements.com/team-grid',
562 'docx_url' => 'https://wpeasyelements.com/docs/team-grid',
563 'is_pro' => false,
564 'tab' => 'widget',
565 ],
566 'team_slider' => [
567 'icon' => 'easyelIcon-team-slider',
568 'title' => 'Team Slider',
569 'description' => 'Showcase team members in a slider format.',
570 'demo_url' => 'https://wpeasyelements.com/team-slider',
571 'docx_url' => 'https://wpeasyelements.com/docs/team-slider',
572 'is_pro' => true,
573 'tab' => 'widget',
574 ],
575 'contact_box' => [
576 'icon' => 'easyelIcon-contact-box',
577 'title' => 'Contact Box',
578 'description' => 'Contact Box.',
579 'demo_url' => 'https://wpeasyelements.com/contact-box',
580 'docx_url' => 'https://wpeasyelements.com/docs/contact-box',
581 'is_pro' => false,
582 'tab' => 'widget',
583 ],
584 'icon_box_slider' => [
585 'icon' => 'easyelIcon-icon-box-slider',
586 'title' => 'Info Box Slider',
587 'description' => 'Info Box Slider.',
588 'demo_url' => 'https://wpeasyelements.com/info-box-slider/',
589 'docx_url' => 'https://wpeasyelements.com/docs/info-box-slider/',
590 'is_pro' => true,
591 'tab' => 'widget',
592 ],
593 'timeline_slider' => [
594 'icon' => 'easyelIcon-timeline-slider',
595 'title' => 'Timeline Slider',
596 'description' => 'Timeline Slider.',
597 'demo_url' => 'https://wpeasyelements.com/timeline-slider/',
598 'docx_url' => 'https://wpeasyelements.com/docs/timeline-slider',
599 'is_pro' => true,
600 'group' => 'Creative Widgets',
601 'tab' => 'widget',
602 ],
603 'faq' => [
604 'icon' => 'easyelIcon-faq-1',
605 'title' => 'FAQ',
606 'description' => 'FAQ.',
607 'demo_url' => 'https://wpeasyelements.com/faq',
608 'docx_url' => 'https://wpeasyelements.com/docs/faq',
609 'is_pro' => false,
610 'tab' => 'widget',
611 ],
612 'blog_grid' => [
613 'icon' => 'easyelIcon-post-grid',
614 'title' => 'Post Grid',
615 'description' => 'Post.',
616 'demo_url' => 'https://wpeasyelements.com/post-grid',
617 'docx_url' => 'https://wpeasyelements.com/docs/post-grid',
618 'is_pro' => false,
619 'tab' => 'widget',
620 ],
621 'post_slider' => [
622 'icon' => 'easyelIcon-post-slider',
623 'title' => 'Post Slider',
624 'description' => 'Post Slider.',
625 'demo_url' => 'https://wpeasyelements.com/post-slider/',
626 'docx_url' => 'https://wpeasyelements.com/docs/post-slider/',
627 'is_pro' => true,
628 'tab' => 'widget',
629 ],
630 'easy_cf7' => [
631 'icon' => 'easyelIcon-contact-form',
632 'title' => 'Contact Form 7',
633 'description' => 'Contact form 7.',
634 'demo_url' => 'https://wpeasyelements.com/contact-form-7',
635 'docx_url' => 'https://wpeasyelements.com/docs/contact-form-7',
636 'is_pro' => false,
637 'tab' => 'widget',
638 ],
639 'video' => [
640 'icon' => 'easyelIcon-video',
641 'title' => 'Video',
642 'description' => 'Video.',
643 'demo_url' => 'https://wpeasyelements.com/video',
644 'docx_url' => 'https://wpeasyelements.com/docs/video',
645 'is_pro' => false,
646 'tab' => 'widget',
647 ],
648 'pricing_table' => [
649 'icon' => 'easyelIcon-pricing-table',
650 'title' => 'Pricing Table',
651 'description' => 'Pricing Table.',
652 'demo_url' => 'https://wpeasyelements.com/pricing-table',
653 'docx_url' => 'https://wpeasyelements.com/docs/pricing-table',
654 'is_pro' => false,
655 'group' => 'Marketing Widgets',
656 'tab' => 'widget',
657 ],
658 'pricing_list' => [
659 'icon' => 'easyelIcon-pricing-list',
660 'title' => 'Pricing List',
661 'description' => 'Pricing List.',
662 'demo_url' => 'https://wpeasyelements.com/pricing-list/',
663 'docx_url' => 'https://wpeasyelements.com/docs/pricing-list/',
664 'is_pro' => true,
665 'group' => 'Marketing Widgets',
666 'tab' => 'widget',
667 ],
668 'pricing_tab' => [
669 'icon' => 'easyelIcon-pricing-table',
670 'title' => 'Pricing Tab',
671 'description' => 'Pricing Tab.',
672 'demo_url' => 'https://wpeasyelements.com/pricing-tab/',
673 'docx_url' => 'https://wpeasyelements.com/docs/pricing-tab/',
674 'is_pro' => true,
675 'group' => 'Marketing Widgets',
676 'tab' => 'widget',
677 ],
678 'service_list' => [
679 'icon' => 'easyelIcon-service-list',
680 'title' => 'Service List',
681 'description' => 'Service List.',
682 'demo_url' => 'https://wpeasyelements.com/service-list',
683 'docx_url' => 'https://wpeasyelements.com/docs/service-list/',
684 'is_pro' => false,
685 'tab' => 'widget',
686 ],
687 'advance_service' => [
688 'icon' => 'easyelIcon-service-list',
689 'title' => 'Advance Service',
690 'description' => 'Advance Service.',
691 'demo_url' => 'https://wpeasyelements.com/advance-service',
692 'docx_url' => 'https://wpeasyelements.com/docs/advance-service/',
693 'is_pro' => true,
694 'tab' => 'widget',
695 ],
696 'feature_list' => [
697 'icon' => 'easyelIcon-service-list',
698 'title' => 'Feature List',
699 'description' => 'Feature List.',
700 'demo_url' => 'https://wpeasyelements.com/features-list',
701 'docx_url' => 'https://wpeasyelements.com/docs/features-list/',
702 'is_pro' => false,
703 'tab' => 'widget',
704 ],
705 'process_list' => [
706 'icon' => 'easyelIcon-process-list',
707 'title' => 'Process List',
708 'description' => 'Process List.',
709 'demo_url' => 'https://wpeasyelements.com/process-list/',
710 'docx_url' => 'https://wpeasyelements.com/docs/process-list/',
711 'is_pro' => false,
712 'tab' => 'widget',
713 ],
714 'marquee_logo' => [
715 'icon' => 'easyelIcon-marquee-logo',
716 'title' => 'Marquee',
717 'description' => 'Marquee.',
718 'demo_url' => 'https://wpeasyelements.com/marquee/',
719 'docx_url' => 'https://wpeasyelements.com/docs/marquee/',
720 'is_pro' => true,
721 'tab' => 'widget',
722 ],
723 'button' => [
724 'icon' => 'easyelIcon-button',
725 'title' => 'Button',
726 'description' => 'Button.',
727 'demo_url' => 'https://wpeasyelements.com/button/',
728 'docx_url' => 'https://wpeasyelements.com/docs/button',
729 'is_pro' => false,
730 'tab' => 'widget',
731 ],
732 'social_share' => [
733 'icon' => 'easyelIcon-social-share',
734 'title' => 'Social Share',
735 'description' => 'Social Share.',
736 'demo_url' => 'https://wpeasyelements.com/',
737 'docx_url' => 'https://wpeasyelements.com/docs/',
738 'is_pro' => false,
739 'tab' => 'widget',
740 ],
741 'social_icon' => [
742 'icon' => 'easyelIcon-social-icons',
743 'title' => 'Social Icon',
744 'description' => 'Social Icon.',
745 'demo_url' => 'https://wpeasyelements.com/social-icon',
746 'docx_url' => 'https://wpeasyelements.com/docs/social-icon',
747 'is_pro' => false,
748 'tab' => 'widget',
749 ],
750 'breadcrumb' => [
751 'icon' => 'easyelIcon-breadcumb',
752 'title' => 'Breadcrumb',
753 'description' => 'Breadcrumb.',
754 'demo_url' => 'https://wpeasyelements.com/breadcrumb',
755 'docx_url' => 'https://wpeasyelements.com/docs/breadcrumb',
756 'is_pro' => false,
757 'tab' => 'widget',
758 ],
759 'easy_slider' => [
760 'icon' => 'easyelIcon-slider',
761 'title' => 'Slider',
762 'description' => 'Slider.',
763 'demo_url' => 'https://wpeasyelements.com/slider',
764 'docx_url' => 'https://wpeasyelements.com/docs/slider',
765 'is_pro' => true,
766 'tab' => 'widget',
767 ],
768 'image_accordion' => [
769 'icon' => 'easyelIcon-image-accordion',
770 'title' => 'Image Accordion',
771 'description' => 'Image Accordion',
772 'demo_url' => 'https://wpeasyelements.com/image-accordion/',
773 'docx_url' => 'https://wpeasyelements.com/docs/image-accordion/',
774 'is_pro' => true,
775 'tab' => 'widget',
776 ],
777 'domain_search' => [
778 'icon' => 'easyelIcon-domain-search',
779 'title' => 'Domain Search',
780 'description' => 'Domain Search.',
781 'demo_url' => 'https://wpeasyelements.com/',
782 'docx_url' => 'https://wpeasyelements.com/docs/',
783 'is_pro' => false,
784 'tab' => 'widget',
785 ],
786 'featured_project' => [
787 'icon' => 'easyelIcon-custom-projects',
788 'title' => 'Custom Projects',
789 'description' => 'Custom Projects.',
790 'demo_url' => 'https://wpeasyelements.com/',
791 'docx_url' => 'https://wpeasyelements.com/docs/',
792 'is_pro' => true,
793 'tab' => 'widget',
794 ],
795 'advance_button' => [
796 'icon' => 'easyelIcon-button',
797 'title' => 'Advance Button',
798 'description' => 'Advance Button.',
799 'demo_url' => 'https://wpeasyelements.com/advance-button/',
800 'docx_url' => 'https://wpeasyelements.com/docs/advance-button',
801 'is_pro' => true,
802 'tab' => 'widget',
803 ],
804 'hr_image_scroll' => [
805 'icon' => 'easyelIcon-image-horizontal-scroll',
806 'title' => 'Horizontal Scroll',
807 'description' => 'Horizontal Scroll.',
808 'demo_url' => 'https://wpeasyelements.com/horizontal-scroll/',
809 'docx_url' => 'https://wpeasyelements.com/docs/horizontal-scroll/',
810 'is_pro' => true,
811 'tab' => 'widget',
812 ],
813 'scrolltrigger_title' => [
814 'icon' => 'easyelIcon-title-scrolltrigger',
815 'title' => 'Content ScrollTrigger',
816 'description' => 'Content ScrollTrigger.',
817 'demo_url' => 'https://wpeasyelements.com/title-scrolltrigger/',
818 'docx_url' => 'https://wpeasyelements.com/docs/title-scrolltrigger/',
819 'is_pro' => true,
820 'tab' => 'widget',
821 ],
822 'Flip_Box' => [
823 'icon' => 'easyelIcon-flip-box',
824 'title' => 'Flip Box',
825 'description' => 'Flip Box.',
826 'demo_url' => 'https://wpeasyelements.com/flip-box',
827 'docx_url' => 'https://wpeasyelements.com/docs/flip-box',
828 'is_pro' => true,
829 'group' => 'Creative Widgets',
830 'tab' => 'widget',
831 ],
832 'easy_offcanvas' => [
833 'icon' => 'easyelIcon-canvas',
834 'title' => 'Offcanvas',
835 'description' => 'Offcanvas.',
836 'demo_url' => 'https://wpeasyelements.com/offcanvas',
837 'docx_url' => 'https://wpeasyelements.com/docs/offcanvas',
838 'is_pro' => false,
839 'group' => 'Header & Footer Widget',
840 'tab' => 'widget',
841 ],
842 'site_logo' => [
843 'icon' => 'easyelIcon-site-logo',
844 'title' => 'Site Logo',
845 'description' => 'Display your website logo easily with this widget.',
846 'demo_url' => 'https://wpeasyelements.com/site-logo/',
847 'docx_url' => 'https://wpeasyelements.com/docs/site-logo/',
848 'is_pro' => false,
849 'group' => 'Header & Footer Widget',
850 'tab' => 'widget',
851 ],
852 'search' => [
853 'icon' => 'easyelIcon-search',
854 'title' => 'Simple Search',
855 'description' => 'Search All Content.',
856 'demo_url' => 'https://wpeasyelements.com/search',
857 'docx_url' => 'https://wpeasyelements.com/docs/search',
858 'is_pro' => false,
859 'group' => 'Header & Footer Widget',
860 'tab' => 'widget',
861 ],
862 'navigation_menu' => [
863 'icon' => 'easyelIcon-navigation',
864 'title' => 'Navigation Menu',
865 'description' => 'Navigation Menu.',
866 'demo_url' => 'https://wpeasyelements.com/',
867 'docx_url' => 'https://wpeasyelements.com/docs/',
868 'is_pro' => false,
869 'group' => 'Header & Footer Widget',
870 'tab' => 'widget',
871 ],
872 'page_title' => [
873 'icon' => 'easyelIcon-page-title',
874 'title' => 'Page Title',
875 'description' => 'Page Title.',
876 'demo_url' => 'https://wpeasyelements.com/',
877 'docx_url' => 'https://wpeasyelements.com/docs/',
878 'is_pro' => false,
879 'group' => 'Header & Footer Widget',
880 'tab' => 'widget',
881 ],
882 'post_tags' => [
883 'icon' => 'easyelIcon-post-tag',
884 'title' => 'Current Post Tags',
885 'description' => 'Current Post Tags.',
886 'demo_url' => 'https://wpeasyelements.com/',
887 'docx_url' => 'https://wpeasyelements.com/docs/',
888 'is_pro' => false,
889 'group' => 'Theme Builder Widget',
890 'tab' => 'widget',
891 ],
892 'post_author' => [
893 'icon' => 'easyelIcon-author',
894 'title' => 'Post Author Info',
895 'description' => 'Post Author Info.',
896 'demo_url' => 'https://wpeasyelements.com/',
897 'docx_url' => 'https://wpeasyelements.com/docs/',
898 'is_pro' => false,
899 'group' => 'Theme Builder Widget',
900 'tab' => 'widget',
901 ],
902 'post_title' => [
903 'icon' => 'easyelIcon-post-title',
904 'title' => 'Post Title',
905 'description' => 'Post Title.',
906 'demo_url' => 'https://wpeasyelements.com/',
907 'docx_url' => 'https://wpeasyelements.com/docs/',
908 'is_pro' => false,
909 'group' => 'Theme Builder Widget',
910 'tab' => 'widget',
911 ],
912 'post_content' => [
913 'icon' => 'easyelIcon-post-content',
914 'title' => 'Post Content',
915 'description' => 'Post Content.',
916 'demo_url' => 'https://wpeasyelements.com/',
917 'docx_url' => 'https://wpeasyelements.com/docs/',
918 'is_pro' => false,
919 'group' => 'Theme Builder Widget',
920 'tab' => 'widget',
921 ],
922 'excerpt' => [
923 'icon' => 'easyelIcon-post-excerpt',
924 'title' => 'Post Excerpt',
925 'description' => 'Post Excerpt.',
926 'demo_url' => 'https://wpeasyelements.com/',
927 'docx_url' => 'https://wpeasyelements.com/docs/',
928 'is_pro' => false,
929 'group' => 'Theme Builder Widget',
930 'tab' => 'widget',
931 ],
932 'related_post' => [
933 'icon' => 'easyelIcon-related-post',
934 'title' => 'Related Post',
935 'description' => 'Related Post.',
936 'demo_url' => 'https://wpeasyelements.com/',
937 'docx_url' => 'https://wpeasyelements.com/docs/',
938 'is_pro' => true,
939 'group' => 'Theme Builder Widget',
940 'tab' => 'widget',
941 ],
942 'post_pagination' => [
943 'icon' => 'easyelIcon-pagination',
944 'title' => 'Post Pagination',
945 'description' => 'Post Pagination.',
946 'demo_url' => 'https://wpeasyelements.com/',
947 'docx_url' => 'https://wpeasyelements.com/docs/',
948 'is_pro' => false,
949 'group' => 'Theme Builder Widget',
950 'tab' => 'widget',
951 ],
952 'post_meta' => [
953 'icon' => 'easyelIcon-meta',
954 'title' => 'Post Meta',
955 'description' => 'Post Meta.',
956 'demo_url' => 'https://wpeasyelements.com/',
957 'docx_url' => 'https://wpeasyelements.com/docs/',
958 'is_pro' => false,
959 'group' => 'Theme Builder Widget',
960 'tab' => 'widget',
961 ],
962 'post_comments' => [
963 'icon' => 'easyelIcon-comments',
964 'title' => 'Post Comments',
965 'description' => 'Post Comments.',
966 'demo_url' => 'https://wpeasyelements.com/',
967 'docx_url' => 'https://wpeasyelements.com/docs/',
968 'is_pro' => false,
969 'group' => 'Theme Builder Widget',
970 'tab' => 'widget',
971 ],
972 'featured_image' => [
973 'icon' => 'easyelIcon-image-carousel',
974 'title' => 'Featured Image',
975 'description' => 'Featured Image.',
976 'demo_url' => 'https://wpeasyelements.com/',
977 'docx_url' => 'https://wpeasyelements.com/docs/',
978 'is_pro' => false,
979 'group' => 'Theme Builder Widget',
980 'tab' => 'widget',
981 ],
982 'easy_scroll_to_top' => [
983 'icon' => 'easyelIcon-scroll-top',
984 'title' => 'Scroll Top',
985 'description' => 'Scroll Top.',
986 'demo_url' => 'https://wpeasyelements.com/docs/scroll-to-top/',
987 'docx_url' => 'https://wpeasyelements.com/docs/scroll-to-top/',
988 'is_pro' => false,
989 'group' => 'Theme Builder Widget',
990 'tab' => 'widget',
991 ],
992 'easy_table' => [
993 'icon' => 'easyelIcon-clients-logo-grid',
994 'title' => 'Table',
995 'description' => 'Table.',
996 'demo_url' => 'https://wpeasyelements.com/table',
997 'docx_url' => 'https://wpeasyelements.com/docs/table',
998 'is_pro' => false,
999 'tab' => 'widget',
1000 ],
1001 'advance_image' => [
1002 'icon' => 'easyelIcon-image-carousel',
1003 'title' => 'Advance Image',
1004 'description' => 'Advance Image Here.',
1005 'demo_url' => 'https://wpeasyelements.com/advance-image/',
1006 'docx_url' => 'https://wpeasyelements.com/docs/advance-image/',
1007 'is_pro' => true,
1008 'group' => 'Animations',
1009 'tab' => 'widget',
1010 ],
1011 'bmi_calculator' => [
1012 'icon' => 'easyelIcon-calculator',
1013 'title' => 'BMI Calculator',
1014 'description' => 'BMI Calculator.',
1015 'demo_url' => 'https://wpeasyelements.com/bmi-calculator/',
1016 'docx_url' => 'https://wpeasyelements.com/docs/bmi-calculator/',
1017 'is_pro' => true,
1018 'group' => 'Creative Widgets',
1019 'tab' => 'widget',
1020 ],
1021 'typewriter' => [
1022 'icon' => 'easyelIcon-heading',
1023 'title' => 'Typewriter',
1024 'description' => 'Animated typewriter text effect.',
1025 'demo_url' => 'https://wpeasyelements.com/',
1026 'docx_url' => 'https://wpeasyelements.com/docs/',
1027 'is_pro' => true,
1028 'group' => 'Animations',
1029 'tab' => 'widget',
1030 ],
1031 'animated_title' => [
1032 'icon' => 'easyelIcon-animated-title',
1033 'title' => 'Animated Title',
1034 'description' => 'Animated title text effect.',
1035 'demo_url' => 'https://wpeasyelements.com/animated-title/',
1036 'docx_url' => 'https://wpeasyelements.com/docs/',
1037 'is_pro' => true,
1038 'group' => 'Animations',
1039 'tab' => 'widget',
1040 ],
1041 'easytext_animation' => [
1042 'icon' => 'easyelIcon-heading',
1043 'title' => 'Animated Text',
1044 'description' => 'Animated text animation effect.',
1045 'demo_url' => 'https://wpeasyelements.com/',
1046 'docx_url' => 'https://wpeasyelements.com/docs/',
1047 'is_pro' => true,
1048 'group' => 'Animations',
1049 'tab' => 'widget',
1050 ],
1051 'easy_feature' => [
1052 'icon' => 'easyelIcon-marquee-logo',
1053 'title' => 'Hover Image Box',
1054 'description' => 'Hover image box content.',
1055 'demo_url' => 'https://wpeasyelements.com/hover-image-box/',
1056 'docx_url' => 'https://wpeasyelements.com/docs/hover-image-box/',
1057 'is_pro' => true,
1058 'tab' => 'widget',
1059 ],
1060 'easy_gallery' => [
1061 'icon' => 'easyelIcon-marquee-logo',
1062 'title' => 'Simple Gallery',
1063 'description' => 'Gallery',
1064 'demo_url' => 'https://wpeasyelements.com/simple-gallery/',
1065 'docx_url' => 'https://wpeasyelements.com/docs/simple-gallery/',
1066 'is_pro' => false,
1067 'tab' => 'widget',
1068 ],
1069 'image_gallery_filter' => [
1070 'icon' => 'easyelIcon-filterable-gallery',
1071 'title' => 'Filterable Gallery',
1072 'description' => 'filterable Gallery',
1073 'demo_url' => 'https://wpeasyelements.com/gallery-filter/',
1074 'docx_url' => 'https://wpeasyelements.com/gallery-filter/',
1075 'is_pro' => true,
1076 'group' => 'Creative Widgets',
1077 'tab' => 'widget',
1078 ],
1079 'portfolio_pro' => [
1080 'icon' => 'easyelIcon-marquee-logo',
1081 'title' => 'Portfolio',
1082 'description' => 'Portfolio',
1083 'demo_url' => 'https://wpeasyelements.com/portfolio/',
1084 'docx_url' => 'https://wpeasyelements.com/docs/portfolio/',
1085 'is_pro' => true,
1086 'tab' => 'widget',
1087 ],
1088 'protected_content' => [
1089 'icon' => 'easyelIcon-protected-content',
1090 'title' => 'Protected Content',
1091 'description' => 'This Widget is protected content',
1092 'demo_url' => 'https://wpeasyelements.com/protected-contents/',
1093 'docx_url' => 'https://wpeasyelements.com/docs/protected-contents/',
1094 'is_pro' => true,
1095 'group' => 'Creative Widgets',
1096 'tab' => 'widget',
1097 ],
1098 'advanced_search' => [
1099 'icon' => 'easyelIcon-advance-search',
1100 'title' => 'Advanced Search',
1101 'description' => 'This Widget is advanced search',
1102 'demo_url' => 'https://wpeasyelements.com/advanced-search/',
1103 'docx_url' => 'https://wpeasyelements.com/docs/advanced-search/',
1104 'is_pro' => true,
1105 'tab' => 'widget',
1106 ],
1107 'enable_image_hover_effect' => [
1108 'icon' => 'easyelIcon-marquee-logo',
1109 'title' => 'Image Hover Effect',
1110 'description' => 'This Widget is image hover effect',
1111 'demo_url' => 'https://wpeasyelements.com/image-hover-effect/',
1112 'docx_url' => 'https://wpeasyelements.com/docs/image-hover-effect/',
1113 'is_pro' => true,
1114 'group' => 'Creative Widgets',
1115 'tab' => 'widget',
1116 ],
1117 'image_hotspot' => [
1118 'icon' => 'easyelIcon-marquee-logo',
1119 'title' => 'image Hotspot',
1120 'description' => 'This Widget is Image Hotspot',
1121 'demo_url' => 'https://wpeasyelements.com/image-hotspot/',
1122 'docx_url' => 'https://wpeasyelements.com/docs/image-hotspot/',
1123 'is_pro' => true,
1124 'group' => 'Creative Widgets',
1125 'tab' => 'widget',
1126 ],
1127 'hr_image_scroll' => [
1128 'icon' => 'easyelIcon-image-horizontal-scroll',
1129 'title' => 'ScrollTrigger',
1130 'description' => 'This Widget is image hover effect',
1131 'demo_url' => 'https://wpeasyelements.com/horizontal-scroll/',
1132 'docx_url' => 'https://wpeasyelements.com/docs/horizontal-scroll/',
1133 'is_pro' => true,
1134 'group' => 'Animations',
1135 'tab' => 'widget',
1136 ],
1137 'archive_post' => [
1138 'icon' => 'easyelIcon-post-grid',
1139 'title' => 'Archive Post',
1140 'description' => 'This Widget is archive post widget',
1141 'demo_url' => 'https://wpeasyelements.com/post-grid/',
1142 'docx_url' => 'https://wpeasyelements.com/docs/post-grid/',
1143 'is_pro' => false,
1144 'tab' => 'widget',
1145 ],
1146 'counter' => [
1147 'icon' => 'easyelIcon-counter',
1148 'title' => 'Counter',
1149 'description' => 'This is a widget that counts up.',
1150 'demo_url' => 'https://wpeasyelements.com/counter/',
1151 'docx_url' => 'https://wpeasyelements.com/docs/counter/',
1152 'is_pro' => false,
1153 'group' => 'Creative Widgets',
1154 'tab' => 'widget',
1155 ],
1156 'countdown' => [
1157 'icon' => 'easyelIcon-countdown',
1158 'title' => 'Countdown',
1159 'description' => 'This is a countdown widget.',
1160 'demo_url' => 'https://wpeasyelements.com/countdown/',
1161 'docx_url' => 'https://wpeasyelements.com/docs/countdown/',
1162 'is_pro' => false,
1163 'group' => 'Creative Widgets',
1164 'tab' => 'widget',
1165 ],
1166 'easy_progress' => [
1167 'icon' => 'easyelIcon-progress-bar',
1168 'title' => 'Progress Bar',
1169 'description' => 'This is a Progress bar widget.',
1170 'demo_url' => 'https://wpeasyelements.com/progressbar/',
1171 'docx_url' => 'https://wpeasyelements.com/docs/progressbar/',
1172 'is_pro' => false,
1173 'group' => 'Creative Widgets',
1174 'tab' => 'widget',
1175 ],
1176 'facebook_feed' => [
1177 'icon' => 'easyelIcon-facebook-feed',
1178 'title' => 'Facebook Feed',
1179 'description' => 'This Widget is facebook feeds',
1180 'demo_url' => 'https://wpeasyelements.com/facebook-feed/',
1181 'docx_url' => 'https://wpeasyelements.com/docs/facebook-feed/',
1182 'is_pro' => true,
1183 'group' => 'Social Media Feeds',
1184 'tab' => 'widget',
1185 ],
1186 'instagram_feed' => [
1187 'icon' => 'easyelIcon-instagram-feed',
1188 'title' => 'Instagram Feed',
1189 'description' => 'This Widget is instagram feeds',
1190 'demo_url' => 'https://wpeasyelements.com/instagram-feed/',
1191 'docx_url' => 'https://wpeasyelements.com/docs/instagram-feed/',
1192 'is_pro' => true,
1193 'group' => 'Social Media Feeds',
1194 'tab' => 'widget',
1195 ],
1196 'login_register' => [
1197 'icon' => 'easyelIcon-login',
1198 'title' => 'Login / Register',
1199 'description' => 'This Widget is login and register form',
1200 'demo_url' => 'https://wpeasyelements.com/register/',
1201 'docx_url' => 'https://wpeasyelements.com/docs/login-register/',
1202 'is_pro' => false,
1203 'group' => 'Form Widgets',
1204 'tab' => 'widget',
1205 ],
1206 ];
1207 return apply_filters( 'easyel_available_widgets', $widgets );
1208 }
1209
1210 /**
1211 * Admin page HTML
1212 */
1213 function easyel_custom_fonts_page_html() {
1214 if ( ! current_user_can( 'manage_options' ) ) return;
1215
1216 if ( ! defined( 'EASY_ELEMENTS_PRO_ACTIVE' ) || ! EASY_ELEMENTS_PRO_ACTIVE ) {
1217 echo '<div class="wrap"><h1>' . esc_html__( 'Upload Custom Fonts', 'easy-elements' ) . '</h1>';
1218 echo '<p>' . esc_html__( 'This feature is available in Easy Elements Pro. Please install and activate the Pro version to use it.', 'easy-elements' ) . '</p>';
1219 echo '</div>';
1220 return;
1221 }
1222
1223 easyel_pro_custom_fonts_page();
1224 }
1225
1226 /**
1227 * Hide admin notices on the Easy Elements dashboard page.
1228 */
1229 function easyel_hide_admin_notices() {
1230 $screen = get_current_screen();
1231
1232 if ( $screen && 'toplevel_page_easy-elements-dashboard' === $screen->id ) {
1233
1234 $custom_css = '
1235 /* Hide all common notices */
1236 .notice,
1237 .updated,
1238 .error,
1239 .update-nag,
1240 .notice-success,
1241 .notice-error,
1242 .notice-warning {
1243 display: none !important;
1244 }
1245
1246 /* But allow EasyEL notice */
1247 .easyel-promo-notice {
1248 display: block !important;
1249 }
1250 ';
1251
1252 $handle = 'easyel-admin-hide-notices';
1253 wp_register_style( $handle, false, [], EASYELEMENTS_VER );
1254 wp_enqueue_style( $handle );
1255 wp_add_inline_style( $handle, $custom_css );
1256 }
1257 }
1258
1259 public function easyel_smooth_scroller_popup_display() {
1260
1261 $options = get_option('easyel_scroll_smoother_settings', []);
1262
1263 ?>
1264 <div class="easyel-smooth-scroll-popup">
1265 <div class="ajax-search-close-icon">
1266 <a class="easyel-smooth-scroll-popup-close-icon rbt-round-btn" href="#">
1267 <svg width="14" height="14" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
1268 <path d="M9.08366 1.73916L8.26116 0.916656L5.00033 4.17749L1.73949 0.916656L0.916992 1.73916L4.17783 4.99999L0.916992 8.26082L1.73949 9.08332L5.00033 5.82249L8.26116 9.08332L9.08366 8.26082L5.82283 4.99999L9.08366 1.73916Z" fill="currentColor"></path>
1269 </svg>
1270 </a>
1271 </div>
1272
1273 <div class="wrapper">
1274 <h2 class="easyel-smooth-scroll-heading">Smooth Scroll Settings</h2>
1275 <form method="post" action="">
1276 <div class="easyel-smooth-scroll-settings-main-wrapper">
1277
1278 <!-- Smooth Speed -->
1279 <div class="easyel-smooth-scroll-item">
1280 <span class="easy-field-label">Speed (2.0–5):</span>
1281 <label class="easy-field-item">
1282 <input type="number"
1283 name="smooth_scroll_speed"
1284 min="0.1" max="5" step="0.1"
1285 value="<?php echo isset($options['smooth_scroll_speed']) ? esc_attr($options['smooth_scroll_speed']) : '2.0'; ?>">
1286 </label>
1287 </div>
1288
1289 <!-- Normalize Scroll -->
1290 <div class="easyel-smooth-scroll-item">
1291 <span class="easy-field-label">Normalize Scroll</span>
1292 <label class="easy-field-item easy-toggle-switch">
1293 <input type="checkbox"
1294 name="smooth_scroll_normalize"
1295 value="1"
1296 <?php checked( isset($options['smooth_scroll_normalize']) ? $options['smooth_scroll_normalize'] : 1, 1 ); ?>>
1297 <span class="slider round"></span>
1298 </label>
1299 </div>
1300
1301 <!-- Enable on Mobile -->
1302 <div class="easyel-smooth-scroll-item">
1303 <span class="easy-field-label">Enable on Mobile Devices</span>
1304 <label class="easy-field-item easy-toggle-switch">
1305 <input type="checkbox"
1306 name="smooth_scroll_enable_mobile"
1307 value="1"
1308 <?php checked( isset($options['smooth_scroll_enable_mobile']) ? $options['smooth_scroll_enable_mobile'] : 0, 1 ); ?>>
1309 <span class="slider round"></span>
1310 </label>
1311 </div>
1312
1313 <!-- Disable on Editor Mode -->
1314 <div class="easyel-smooth-scroll-item">
1315 <span class="easy-field-label">Disable on Editor Mode</span>
1316 <label class="easy-field-item easy-toggle-switch">
1317 <input type="checkbox"
1318 name="smooth_scroll_disable_editor_mode"
1319 value="1"
1320 <?php checked( isset($options['smooth_scroll_disable_editor_mode']) ? $options['smooth_scroll_disable_editor_mode'] : 0, 1 ); ?>>
1321 <span class="slider round"></span>
1322 </label>
1323 </div>
1324
1325 </div>
1326
1327 <div class="easyel-smooth-scroll-save">
1328 <input type="submit"
1329 class="smooth_scroll_popup_item_save"
1330 name="smooth_scroll_popup_item_save"
1331 value="<?php echo esc_attr__('Save Changes', 'easy-elements'); ?>">
1332 </div>
1333 </form>
1334 </div>
1335
1336 </div>
1337 <?php
1338 }
1339
1340 public function easyel_smooth_scroller_popup_callback() {
1341 $this->easyel_smooth_scroller_popup_display();
1342 }
1343
1344 function save_smooth_scroll_settings() {
1345
1346 // Permission check
1347 if ( ! current_user_can('manage_options') ) {
1348 wp_send_json_error(__('Unauthorized', 'easy-elements'));
1349 }
1350
1351 // Nonce check
1352 check_ajax_referer('easy_elements_nonce', 'nonce');
1353
1354 if ( ! isset($_POST['settings']) ) {
1355 wp_send_json_error(['message' => 'No settings received']);
1356 }
1357
1358 // Sanitize deeply
1359 $settings = map_deep( wp_unslash( $_POST['settings'] ), 'sanitize_text_field');
1360
1361 // Save all settings under one option name
1362 update_option('easyel_scroll_smoother_settings', $settings);
1363
1364 wp_send_json_success(['message' => 'Saved successfully']);
1365 }
1366
1367 }
1368
1369 // Initialize the plugin
1370 Easyel_Elements::get_instance();