PluginProbe
Easy Elements for Elementor – Addons & Website Templates / 1.4.3
Easy Elements for Elementor – Addons & Website Templates v1.4.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 / includes / Admin / Admin_Settings.php

Admin_Settings.php in Easy Elements for Elementor – Addons & Website Templates 1.4.3, at includes/Admin/Admin_Settings.php

2,420 lines 121.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Easyel\EasyElements\Admin;
3 if ( ! defined( 'ABSPATH' ) ) {
4 exit;
5 }
6
7 class Admin_Settings {
8
9 // Singleton instance
10 private static $instance = null;
11
12 private function __construct() {
13 // Hooks
14
15 // Custom Font Load Free
16
17 add_action( 'admin_menu', array( $this, 'easyel_elements_settings_menu' ) );
18 add_action( 'admin_menu', array( $this, 'easyel_elements_settings_menu2' ) ,999 );
19 add_action( 'admin_init', array( $this, 'easyel_elements_register_settings' ) );
20
21 add_action( 'easyel_smooth_scroller_popup', array( $this, 'easyel_smooth_scroller_popup_callback' ), 5 );
22 add_action( 'easyel_reading_progress_bar_popup', array( $this, 'easyel_reading_progressbar_popup_callback' ), 6 );
23 add_action( 'easyel_scroll_top_popup', array( $this, 'easyel_scroll_top_popup_callback' ), 7 );
24 add_action( 'easyel_preloader_popup', array( $this, 'easyel_preloader_popup_callback' ), 8 );
25
26 add_action( "admin_footer", array( $this,"easyel_settings_toggle_popup_modal" ) );
27
28 $this->easyel_settings_ajax();
29
30 }
31
32 public function easyel_settings_ajax( ) {
33
34 // AJAX handler for saving minify js option
35
36 add_action('wp_ajax_easy_elements_save_widget_setting', array( $this, "easy_elements_save_widget_setting" ) );
37 add_action('wp_ajax_easy_elements_bulk_action', array( $this, 'easy_elements_bulk_action') );
38
39 add_action('wp_ajax_easy_elements_save_global_extensions', array( $this, 'easy_elements_save_global_extensions') ) ;
40 add_action('wp_ajax_easy_elements_save_global_extensions_bulk', array( $this, 'easy_elements_save_global_extensions_bulk') ) ;
41
42 add_action('wp_ajax_easy_elements_bulk_group_action', [$this, 'easy_elements_bulk_group_action']);
43
44 add_action('admin_enqueue_scripts', array( $this, 'easyel_elements_enqueue_admin_assets') );
45 add_action( 'admin_head', array( $this, 'easyel_hide_admin_notices' ) );
46
47 add_action('wp_ajax_easyel_save_user_data', array( $this, 'easyel_save_user_data_callback') );
48
49 add_action('wp_ajax_save_smooth_scroll_settings', array( $this, 'save_smooth_scroll_settings'));
50 add_action('wp_ajax_nopriv_save_smooth_scroll_settings', array( $this, 'save_smooth_scroll_settings') );
51
52 add_action('wp_ajax_save_reading_progressbar_settings', array( $this, 'save_reading_progressbar_settings'));
53 add_action('wp_ajax_nopriv_save_reading_progressbar_settings', array( $this, 'save_reading_progressbar_settings') );
54
55 add_action('wp_ajax_save_scroll_top_settings', array( $this, 'save_scroll_top_settings'));
56 add_action('wp_ajax_nopriv_save_scroll_top_settings', array( $this, 'save_scroll_top_settings') );
57
58 add_action('wp_ajax_easyel_save_preloader_settings', array( $this, 'easyel_save_preloader_settings' ) );
59
60 }
61
62 // Singleton get_instance
63 public static function get_instance() {
64 if (self::$instance === null) {
65 self::$instance = new self();
66 }
67 return self::$instance;
68 }
69
70 public function easyel_save_user_data_callback() {
71
72 check_ajax_referer('easy_elements_nonce', 'security');
73
74 // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
75 $posted = $_POST['settings'] ?? [];
76 $settings = map_deep( wp_unslash( $posted ), 'sanitize_text_field' );
77
78 update_option( 'easy_element_user_data', $settings );
79
80 wp_send_json_success(['message' => 'Saved successfully!']);
81 }
82
83 public function easyel_elements_settings_menu() {
84
85 // Main Menu
86 add_menu_page(
87 __('Easy Elements', 'easy-elements'),
88 __('Easy Elements', 'easy-elements'),
89 'manage_options',
90 'easy-elements-dashboard',
91 array( $this, 'easyel_elements_settings_callback' ),
92 'dashicons-admin-generic',
93 59
94 );
95
96 global $submenu;
97
98 // Main slug
99 $slug = 'easy-elements-dashboard';
100
101 $submenu[$slug][] = [ __('Overview', 'easy-elements'), 'manage_options', 'admin.php?page='.$slug.'#overview' ];
102 $submenu[$slug][] = [ __('Widgets', 'easy-elements'), 'manage_options', 'admin.php?page='.$slug.'#widget' ];
103 $submenu[$slug][] = [ __('All Extensions', 'easy-elements'), 'manage_options', 'admin.php?page='.$slug.'#extensions' ];
104
105 // Header & Footer Submenu
106 add_submenu_page(
107 'easy-elements-dashboard',
108 __('Header & Footer', 'easy-elements'),
109 __('Header & Footer', 'easy-elements'),
110 'manage_options',
111 'edit.php?post_type=ee-elementor-hf'
112 );
113
114 // Upload Custom Fonts Submenu
115 add_submenu_page(
116 'easy-elements-dashboard',
117 __('Upload Custom Fonts', 'easy-elements'),
118 __('Upload Custom Fonts', 'easy-elements'),
119 'manage_options',
120 'easyel-custom-fonts',
121 array( $this, 'easyel_custom_fonts_page_html' )
122 );
123
124 // Off Canvas Submenu
125 add_submenu_page(
126 'easy-elements-dashboard',
127 __('Off Canvas', 'easy-elements'),
128 __('Off Canvas', 'easy-elements'),
129 'manage_options',
130 'edit.php?post_type=easy-offcanvas'
131 );
132
133 $flush_needed = get_option( 'easyel_flush_rewrite_rules', true );
134
135 if ( $flush_needed ) {
136 flush_rewrite_rules(); // Flush permalink
137 update_option( 'easyel_flush_rewrite_rules', false ); // Mark as flushed
138 }
139
140
141 }
142
143 public function easyel_settings_toggle_popup_modal( ) { ?>
144
145 <div id="easyel-admin-toggle-pro-upgrade-modal" class="easyel-admin-toggle-pro-modal" style="display:none;">
146 <div class="easyel-admin-toggle-pro-modal-overlay"></div>
147
148 <div class="easyel-admin-toggle-pro-modal-content">
149 <button class="easyel-admin-toggle-pro-modal-close">×</button>
150
151 <span class="easyel-admin-toggle-pro-badge">PRO</span>
152
153 <h2>Unlock the PRO Features 🚀</h2>
154
155 <p>
156 This widget is available in <strong>Easy Elements Pro</strong>.
157 Upgrade now to unlock advanced widgets, premium features, and priority support.
158 </p>
159
160 <ul class="easyel-admin-toggle-pro-feature-list">
161 <li> Advanced Elementor Widgets </li>
162 <li> Premium Effects & Controls </li>
163 <li> Faster Performance </li>
164 <li> Priority Support </li>
165 </ul>
166
167 <div class="easyel-admin-toggle-pro-actions">
168 <a href="https://wpeasyelements.com/pricing/"
169 target="_blank"
170 class="easyel-admin-toggle-pro-upgrade-btn">
171 Upgrade to Pro
172 </a>
173
174 <button class="easyel-admin-toggle-pro-modal-cancel">
175 Maybe Later
176 </button>
177 </div>
178 </div>
179 </div>
180
181
182 <?php }
183
184 public function easyel_elements_settings_menu2() {
185
186 global $submenu;
187
188 // Main slug
189 $slug = 'easy-elements-dashboard';
190 /**
191 * ----------------------------------------
192 * Activate License
193 * ----------------------------------------
194 */
195 if ( defined( 'EASY_ELEMENTS_PRO_ACTIVE' ) && EASY_ELEMENTS_PRO_ACTIVE ) {
196 $submenu[ $slug ][] = [
197 __( 'Activate License', 'easy-elements' ),
198 'manage_options',
199 'admin.php?page=' . $slug . '#activate_license',
200 ];
201 }
202
203 $license_status = 'invalid';
204
205 $pro_version = easyel_get_pro_clean_version();
206
207 if ( $pro_version && version_compare( $pro_version, '1.0.8', '>=' ) ) {
208
209 if ( did_action( 'plugins_loaded' ) && class_exists( '\EasyElements_Elementor\Pro\Licenses\EasyelLicense' ) ) {
210 $manager = \EasyElements_Elementor\Pro\Licenses\EasyelLicense::get_instance();
211 if ( method_exists( $manager, 'check_license_validity' ) ) {
212 $license_status = $manager->check_license_validity();
213 }
214 }
215
216 } else {
217
218 if ( did_action( 'plugins_loaded' ) && class_exists( '\Easyel_License_Manager' ) ) {
219 $license_manager = new \Easyel_License_Manager();
220 if ( $license_manager && method_exists( $license_manager, 'check_license_validity' ) ) {
221 $license_status = $license_manager->check_license_validity();
222 }
223 }
224
225 }
226
227 if ( 'valid' !== $license_status ) {
228
229 $submenu[ $slug ][] = [
230 __( 'Upgrade to Pro', 'easy-elements' ),
231 'manage_options',
232 'https://wpeasyelements.com/pricing/',
233 '',
234 '',
235 ];
236
237 // Hook CSS to highlight it
238 add_action('admin_head', function() use ($slug) {
239 ?>
240 <style>
241 #toplevel_page_<?php echo esc_attr($slug); ?> .wp-submenu li a[href="https://wpeasyelements.com/pricing/"] {
242 color: #fff !important;
243 background-color: #7455FF !important;
244 font-weight: bold;
245 border-radius: 4px;
246 }
247
248 #toplevel_page_<?php echo esc_attr($slug); ?> .wp-submenu li a[href="https://wpeasyelements.com/pricing/"]:hover {
249 background-color: #7455FF !important;
250 color: #fff !important;
251 }
252 </style>
253 <script>
254 jQuery(document).ready(function($){
255 $('#toplevel_page_<?php echo esc_js($slug); ?> .wp-submenu li a[href="https://wpeasyelements.com/pricing/"]').attr('target','_blank');
256 });
257 </script>
258 <?php
259 });
260 }
261 }
262
263 public function easyel_elements_register_settings() {
264 register_setting( 'easyel_elements_extensions_group', 'easyel_enable_js_animation', [
265 'sanitize_callback' => 'absint',
266 'default' => 0,
267 ] );
268
269 // Cursor setting register
270 register_setting( 'easyel_elements_extensions_group', 'easyel_enable_cursor', [
271 'sanitize_callback' => 'absint',
272 'default' => 0,
273 ] );
274 }
275
276 public function easy_elements_bulk_group_action() {
277
278 if (!current_user_can('manage_options')) {
279 wp_send_json_error(__('Unauthorized', 'easy-elements'));
280 }
281
282 check_ajax_referer('easy_elements_bulk_action_nonce', 'nonce');
283
284 $group = isset($_POST['group']) ? sanitize_text_field(wp_unslash($_POST['group'])) : '';
285 $tab = isset($_POST['tab']) ? sanitize_text_field(wp_unslash($_POST['tab'])) : 'widget';
286 $status = isset($_POST['status']) && $_POST['status'] == 1 ? '1' : '0';
287
288 $available_elements = $this->easyel_elements_get_available_widgets();
289 $updated_count = 0;
290
291 $is_pro_active = class_exists('Easy_Elements_Pro');
292
293 foreach ($available_elements as $key => $widget) {
294
295 if (!isset($widget['tab']) || $widget['tab'] !== $tab) {
296 continue;
297 }
298
299 $group_slug = strtolower(trim($group));
300
301 $widget_group = isset( $widget['group'] ) ? $widget['group'] : 'General Widgets';
302
303 $widget_group_slug = strtolower(trim(str_replace(' ', '-', $widget_group ) ) );
304
305 if ($widget_group_slug !== $group_slug) {
306 continue;
307 }
308
309 $option_name = 'easy_element_' . $tab . '_' . $key;
310
311 if (!$is_pro_active && isset($widget['is_pro']) && $widget['is_pro']) {
312 update_option($option_name, '0');
313 } else {
314 update_option($option_name, $status);
315 }
316
317 $updated_count++;
318 }
319
320 wp_send_json_success([
321 'message' => sprintf('%d widgets %s successfully', $updated_count, $status ? 'activated' : 'deactivated'),
322 'count' => $updated_count,
323 'is_pro_active' => $is_pro_active,
324 'status' => $status
325 ]);
326 }
327
328 public function easy_elements_save_global_extensions_bulk() {
329 if ( ! current_user_can( 'manage_options' ) ) {
330 wp_send_json_error( __( 'Unauthorized', 'easy-elements' ) );
331 }
332
333 check_ajax_referer( 'easy_elements_widget_settings_nonce', 'nonce' );
334
335 $tab = isset( $_POST['tab'] ) ? sanitize_text_field( wp_unslash( $_POST['tab'] ) ) : 'extensions';
336 $keys = isset( $_POST['keys'] ) ? array_map( 'sanitize_text_field', (array) wp_unslash( $_POST['keys'] ) ) : [];
337 $status = isset( $_POST['status'] ) ? intval( wp_unslash( $_POST['status'] ) ) : 0;
338 $group_slug = isset( $_POST['group'] ) ? sanitize_text_field( wp_unslash( $_POST['group'] ) ) : '';
339
340 if ( empty( $keys ) ) {
341 wp_send_json_error( [ 'message' => __( 'No keys provided', 'easy-elements' ) ] );
342 }
343
344 $settings = get_option( 'easy_element_' . $tab, [] );
345
346 foreach ( $keys as $key ) {
347 $key = sanitize_text_field( $key );
348 $settings[ $key ] = $status;
349 }
350
351 update_option( 'easy_element_' . $tab, $settings );
352
353 if ( $group_slug ) {
354 update_option( 'easy_element_group_' . $group_slug, $status );
355 }
356
357 wp_send_json_success( [ 'message' => __( 'Bulk settings updated', 'easy-elements' ) ] );
358 }
359
360 public function easy_elements_save_global_extensions() {
361 if (!current_user_can('manage_options')) {
362 wp_send_json_error(__('Unauthorized', 'easy-elements'));
363 }
364
365 check_ajax_referer('easy_elements_widget_settings_nonce', 'nonce');
366
367 $tab = isset( $_POST['tab'] ) ? sanitize_text_field( wp_unslash( $_POST['tab'] ) ) : 'extensions';
368 $key = isset($_POST['key']) ? sanitize_text_field( wp_unslash( $_POST['key'] )) : '';
369 $status = isset( $_POST['status'] ) ? intval( wp_unslash( $_POST['status'] ) ) : 0;
370
371 if (!$key) {
372 wp_send_json_error(['message' => __('Invalid key', 'easy-elements')]);
373 }
374
375 $settings = get_option('easy_element_' . $tab, []);
376 $settings[$key] = $status;
377
378 update_option('easy_element_' . $tab, $settings);
379
380 wp_send_json_success(['message' => __('Settings updated', 'easy-elements')]);
381 }
382
383
384 // AJAX handler for saving individual widget settings
385
386 public function easy_elements_save_widget_setting() {
387 if (!current_user_can('manage_options')) {
388 wp_send_json_error(__('Unauthorized', 'easy-elements'));
389 }
390 check_ajax_referer('easy_elements_widget_settings_nonce', 'nonce');
391
392 $widget_key = isset($_POST['widget_key']) ? sanitize_text_field( wp_unslash($_POST['widget_key'] ) ) : '';
393 $status = isset($_POST['status']) && $_POST['status'] === '1' ? '1' : '0';
394 $tab_slug = isset($_POST['tab']) ? sanitize_text_field( wp_unslash( $_POST['tab'] ) ) : 'widget';
395
396 if (!empty( $widget_key ) ) {
397 $option_name = 'easy_element_' . $tab_slug . '_' . $widget_key;
398
399 update_option($option_name, $status);
400
401 wp_send_json_success([
402 'message' => __('Widget setting updated successfully', 'easy-elements'),
403 'status' => $status,
404 ]);
405 } else {
406 wp_send_json_error(['message' => __('Invalid widget key', 'easy-elements')]);
407 }
408 }
409
410 // AJAX handler for bulk actions
411 public function easy_elements_bulk_action() {
412 if (!current_user_can('manage_options')) {
413 wp_send_json_error(__('Unauthorized', 'easy-elements'));
414 }
415 check_ajax_referer('easy_elements_bulk_action_nonce', 'nonce');
416
417 $bulk_action = isset($_POST['bulk_action']) ? sanitize_text_field(wp_unslash($_POST['bulk_action'])) : '';
418 $tab = isset($_POST['tab']) ? sanitize_text_field( wp_unslash( $_POST['tab'] ) ) : 'widget';
419 $status = $bulk_action === 'activate_all' ? '1' : '0';
420
421 $available_elements = $this->easyel_elements_get_available_widgets();
422 $updated_count = 0;
423
424 $is_pro_active = class_exists('Easy_Elements_Pro');
425
426 foreach ($available_elements as $key => $widget) {
427 if (isset($widget['tab']) && $widget['tab'] === $tab) {
428 $option_name = 'easy_element_' . $tab . '_' . $key;
429
430 if (!$is_pro_active && isset($widget['is_pro']) && $widget['is_pro']) {
431 update_option($option_name, '0');
432 } else {
433 $status = $bulk_action === 'activate_all' ? '1' : '0';
434 update_option($option_name, $status);
435 }
436 }
437 }
438
439 wp_send_json_success([
440 'message' => sprintf('%d widgets %s successfully', $updated_count, $status ? 'activated' : 'deactivated'),
441 'count' => $updated_count,
442 'is_pro_active' => $is_pro_active
443 ]);
444 }
445
446
447 public function easyel_elements_settings_callback() {
448 $available_elements = $this->easyel_elements_get_available_widgets();
449
450 $easyel_tabs = [
451 'overview' => __('Overview', 'easy-elements'),
452 'widget' => __('All Widgets', 'easy-elements'),
453 'extensions' => __('All Extensions', 'easy-elements'),
454 'advsettings' => __('Advanced Settings', 'easy-elements'),
455 'userData' => __('API Settings', 'easy-elements'),
456
457 ];
458
459 if ( defined( 'EASY_ELEMENTS_PRO_ACTIVE' ) && EASY_ELEMENTS_PRO_ACTIVE ) {
460 $easyel_tabs['activate_license'] = __('Activate License', 'easy-elements');
461 }
462
463 $easyel_tab_list = apply_filters("easyel_all_tab_list", $easyel_tabs );
464
465 ?>
466 <div class="easyel-plugin-main-settings-page">
467 <div class="easyel-saving-indicator">
468 Saving...
469 </div>
470 <div class="easyel-overview-header">
471 <img src="<?php echo esc_url( EASYELEMENTS_DIR_URL . 'includes/Admin/img/easy-logo.png' ); ?>" alt="<?php echo esc_attr( 'logo' ); ?>">
472
473 </div>
474 <div class=" easyel-plugin-settings-wrapper">
475 <div class="easyel-nav-tab-item">
476 <div class="easyel-nav-tab-wrapper easyel-border-radius-20">
477 <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>
478 <a href="#widget" class="easyel-nav-tab" data-tab="widget"><i class="easyelIcon-widgets"></i><?php esc_html_e('All Widgets','easy-elements'); ?></a>
479 <a href="#extensions" class="easyel-nav-tab" data-tab="extensions"><i class="easyelIcon-extension"></i><?php esc_html_e('All Extensions','easy-elements'); ?></a>
480 <a href="#userData" class="easyel-nav-tab" data-tab="userData"><i class="easyelIcon-setting"></i><?php esc_html_e('API Settings','easy-elements'); ?></a>
481 <?php if ( defined( 'EASY_ELEMENTS_PRO_ACTIVE' ) && EASY_ELEMENTS_PRO_ACTIVE ) : ?>
482 <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>
483 <?php endif; ?>
484 <div class="easyel-tab-pro-link">
485 <a href="https://wpeasyelements.com/pricing/" class="easyel-nav-tab-pro" target="_blank">
486 <i class="easyelIcon-crown"></i>
487 <?php esc_html_e('Go Premium','easy-elements'); ?>
488 </a>
489 </div>
490 </div>
491 </div>
492 <!-- Status Messages -->
493 <div id="bulk-action-message" class="notice" style="display: none;"></div>
494
495 <!-- Tab Content -->
496 <div id="easyel-tab-content">
497 <?php foreach ( $easyel_tabs as $tab_slug => $tab_label ) : ?>
498 <div id="tab-<?php echo esc_attr($tab_slug); ?>"
499 class="easyel-tab-panel easyel-border-radius-20 <?php echo esc_attr($tab_slug); ?>"
500 style="<?php echo $tab_slug === 'overview' ? '' : 'display:none;'; ?>">
501
502 <?php
503 if ( $tab_slug === 'widget' ) : ?>
504 <div class="easyel-addon-search easyel-dflex easyel-justify-between">
505 <div class="easyel-widget-filter">
506 <h1 class="easyel-dashboard-heading"><?php esc_html_e('Widgets','easy-elements');?></h1>
507 <div class="easyel-widget-filter-button">
508 <button type="button" id="easyel_all" class="easyel-action-btn active" data-filter="easyel_all"><?php esc_html_e('All', 'easy-elements'); ?></button>
509 <button type="button" id="easyel_free" class="easyel-action-btn" data-filter="easyel_free"><?php esc_html_e('Free', 'easy-elements'); ?></button>
510 <button type="button" id="easyel_pro" class="easyel-action-btn" data-filter="easyel_pro"><?php esc_html_e('Pro', 'easy-elements'); ?></button>
511 </div>
512 </div>
513 <div class="easyel-widget-search-enable">
514 <div class="easyel-widget-activeDeactivate-button">
515 <button type="button" id="activate-all-btn"><?php esc_html_e('Activate All', 'easy-elements'); ?></button>
516 <button type="button" id="deactivate-all-btn"><?php esc_html_e('Deactivate All', 'easy-elements'); ?></button>
517 </div>
518 <?php if ( $tab_slug === 'widget' ) { ?>
519 <input type="text" id="element-search" placeholder="<?php esc_attr_e('Search widgets...', 'easy-elements'); ?>">
520 <?php } ?>
521 </div>
522 </div>
523 <?php endif; ?>
524 <?php
525
526 $tab_file = EASYELEMENTS_DIR_PATH . 'includes/Admin/settingstab/tab-' . $tab_slug . '.php';
527
528 if ( file_exists( $tab_file ) ) {
529 include $tab_file;
530 }
531
532 $pro_version = easyel_get_pro_clean_version();
533
534 if (
535 $pro_version &&
536 version_compare( $pro_version, '1.0.8', '>=' )
537 ) {
538 if (
539 did_action( 'plugins_loaded' ) &&
540 class_exists( '\EasyElements_Elementor\Pro\Licenses\EasyelLicense' ) &&
541 $tab_slug === 'activate_license'
542 ) {
543 $manager = \EasyElements_Elementor\Pro\Licenses\EasyelLicense::get_instance();
544
545 if ( method_exists( $manager, 'license_page_html' ) ) {
546 $manager->license_page_html();
547 }
548 }
549
550 } else {
551 if (
552 did_action( 'plugins_loaded' ) &&
553 class_exists( '\Easyel_License_Manager' ) &&
554 $tab_slug === 'activate_license'
555 ) {
556 $manager = new \Easyel_License_Manager();
557 if ( method_exists( $manager, 'license_page_html' ) ) {
558 $manager->license_page_html();
559 }
560 }
561 }
562
563 ?>
564 </div>
565 <?php endforeach; ?>
566 </div>
567
568 </div>
569 </div>
570
571 <!-- JavaScript functionality is handled by admin.js -->
572 <?php
573 }
574
575 ////////****************** AJAX Toggle ********************************
576
577 public function easyel_elements_enqueue_admin_assets($hook) {
578
579 wp_enqueue_style( 'wp-color-picker' );
580 wp_enqueue_script( 'wp-color-picker' );
581
582 wp_enqueue_script(
583 'easy-elements-select2-js',
584 EASYELEMENTS_DIR_URL . 'assets/js/select2.min.js',
585 ['jquery'],
586 '1.0.0',
587 true
588 );
589 if (strpos($hook, 'easy-elements') === false) {
590 return;
591 }
592
593 wp_enqueue_media();
594
595 // Enqueue admin JavaScript
596 wp_enqueue_script(
597 'easy-elements-admin',
598 EASYELEMENTS_DIR_URL . 'assets/js/admin.js',
599 ['jquery'],
600 EASYELEMENTS_VER,
601 true
602 );
603
604
605
606
607
608 // Localize script with all necessary data
609 wp_localize_script('easy-elements-admin', 'easyElementsData', [
610 'ajaxurl' => admin_url('admin-ajax.php'),
611 'nonce' => wp_create_nonce('easy_elements_nonce'),
612 'widget_settings_nonce' => wp_create_nonce('easy_elements_widget_settings_nonce'),
613 'bulk_action_nonce' => wp_create_nonce('easy_elements_bulk_action_nonce'),
614 'advance_settings_nonce' => wp_create_nonce('easy_elements_save_advance_settings_nonce'),
615 'js_animation_nonce' => wp_create_nonce('easyel_js_animation_nonce'),
616 'strings' => [
617 'confirm_activate_all' => __('Are you sure you want to activate all widgets?', 'easy-elements'),
618 'confirm_deactivate_all' => __('Are you sure you want to deactivate all widgets?', 'easy-elements'),
619 'processing' => __('Processing...', 'easy-elements'),
620 'saving' => __('Saving...', 'easy-elements'),
621 'saved' => __('Saved!', 'easy-elements'),
622 'error' => __('Error!', 'easy-elements'),
623 'updated' => __('Updated!', 'easy-elements'),
624 ]
625 ]);
626 }
627
628 function easyel_elements_get_available_widgets() {
629 $widgets = [
630 'heading' => [
631 'icon' => 'easyelIcon-heading',
632 'title' => 'Heading',
633 'description' => 'Add customizable headings with style options.',
634 'demo_url' => 'https://wpeasyelements.com/heading/',
635 'docx_url' => 'https://wpeasyelements.com/docs/heading/',
636 'is_pro' => false,
637 'tab' => 'widget',
638 ],
639 'clients_logo' => [
640 'icon' => 'easyelIcon-clients-logo-grid',
641 'title' => 'Clients Logo Grid',
642 'description' => 'Showcase client logos in a neat grid layout.',
643 'demo_url' => 'https://wpeasyelements.com/clients-logo-grid/',
644 'docx_url' => 'https://wpeasyelements.com/docs/clients-logo-grid',
645 'is_pro' => false,
646 'tab' => 'widget',
647 ],
648 'clients_logo_slider' => [
649 'icon' => 'easyelIcon-clients-logo-slider',
650 'title' => 'Clients Logo Slider',
651 'description' => 'Display client logos in a slider format.',
652 'demo_url' => 'https://wpeasyelements.com/clients-logo-slider/',
653 'docx_url' => 'https://wpeasyelements.com/docs/clients-logo-slider/',
654 'is_pro' => true,
655 'group' => 'Creative Widgets',
656 'tab' => 'widget',
657 ],
658 'simple_tab' => [
659 'icon' => 'easyelIcon-tab',
660 'title' => 'Tab',
661 'description' => 'Add simple tab content.',
662 'demo_url' => 'https://wpeasyelements.com/tab',
663 'docx_url' => 'https://wpeasyelements.com/docs/tab',
664 'is_pro' => false,
665 'tab' => 'widget',
666 ],
667 'tab_advance' => [
668 'icon' => 'easyelIcon-tab',
669 'title' => 'Advanced Tab',
670 'description' => 'Create advanced tab content.',
671 'demo_url' => 'https://wpeasyelements.com/advanced-tab/',
672 'docx_url' => 'https://wpeasyelements.com/docs/advanced-tab/',
673 'is_pro' => true,
674 'tab' => 'widget',
675 ],
676 'testimonials' => [
677 'icon' => 'easyelIcon-testimonials-grid',
678 'title' => 'Testimonials Grid',
679 'description' => 'Show testimonials in a grid format.',
680 'demo_url' => 'https://wpeasyelements.com/testimonials-grid',
681 'docx_url' => 'https://wpeasyelements.com/docs/testimonials-grid',
682 'is_pro' => false,
683 'tab' => 'widget',
684 ],
685 'testimonials_slider' => [
686 'icon' => 'easyelIcon-testimonials-slider',
687 'title' => 'Testimonials Slider',
688 'description' => 'Display testimonials in a slider format.',
689 'demo_url' => 'https://wpeasyelements.com/testimonials-slider/',
690 'docx_url' => 'https://wpeasyelements.com/docs/testimonials-slider/',
691 'is_pro' => true,
692 'tab' => 'widget',
693 ],
694 'image_carousel' => [
695 'icon' => 'easyelIcon-image-carousel',
696 'title' => 'Image Carousel',
697 'description' => 'Create an image slider with multiple images.',
698 'demo_url' => 'https://wpeasyelements.com/image-carousel/',
699 'docx_url' => 'https://wpeasyelements.com/docs/image-carousel',
700 'is_pro' => true,
701 'tab' => 'widget',
702 ],
703 'image_reveal' => [
704 'icon' => 'easyelIcon-marquee-logo',
705 'title' => 'Reveal Image',
706 'description' => 'reveal Image Here',
707 'demo_url' => 'https://wpeasyelements.com/reveal-image/',
708 'docx_url' => 'https://wpeasyelements.com/docs/reveal-image/',
709 'is_pro' => true,
710 'tab' => 'widget',
711 ],
712 'rotate_text' => [
713 'icon' => 'easyelIcon-heading',
714 'title' => 'Rotate Text',
715 'description' => 'rotate text here',
716 'demo_url' => 'https://wpeasyelements.com/rotate-text/',
717 'docx_url' => 'https://wpeasyelements.com/docs/rotate-text/',
718 'is_pro' => true,
719 'tab' => 'widget',
720 ],
721 'icon_box' => [
722 'icon' => 'easyelIcon-iconbox',
723 'title' => 'Info Box',
724 'description' => 'Display content with an icon.',
725 'demo_url' => 'https://wpeasyelements.com/info-box',
726 'docx_url' => 'https://wpeasyelements.com/docs/info-box',
727 'is_pro' => false,
728 'tab' => 'widget',
729 ],
730 'process_grid' => [
731 'icon' => 'easyelIcon-process-grid',
732 'title' => 'Process Grid',
733 'description' => 'Show process steps in a grid format.',
734 'demo_url' => 'https://wpeasyelements.com/process-grid',
735 'docx_url' => 'https://wpeasyelements.com/docs/process-grid',
736 'is_pro' => false,
737 'tab' => 'widget',
738 ],
739 'process_slider' => [
740 'icon' => 'easyelIcon-process-slider',
741 'title' => 'Process Slider',
742 'description' => 'Show process steps in a slider.',
743 'demo_url' => 'https://wpeasyelements.com/process-slider/',
744 'docx_url' => 'https://wpeasyelements.com/docs/process-slider/',
745 'is_pro' => true,
746 'tab' => 'widget',
747 ],
748 'team_grid' => [
749 'icon' => 'easyelIcon-team-grid',
750 'title' => 'Team Grid',
751 'description' => 'Display team members in a grid format.',
752 'demo_url' => 'https://wpeasyelements.com/team-grid',
753 'docx_url' => 'https://wpeasyelements.com/docs/team-grid',
754 'is_pro' => false,
755 'tab' => 'widget',
756 ],
757 'team_slider' => [
758 'icon' => 'easyelIcon-team-slider',
759 'title' => 'Team Slider',
760 'description' => 'Showcase team members in a slider format.',
761 'demo_url' => 'https://wpeasyelements.com/team-slider',
762 'docx_url' => 'https://wpeasyelements.com/docs/team-slider',
763 'is_pro' => true,
764 'tab' => 'widget',
765 ],
766 'image_comparison' => [
767 'icon' => 'easyelIcon-image-carousel',
768 'title' => 'Image Comparison',
769 'description' => 'Create an Image Comparison.',
770 'demo_url' => 'https://wpeasyelements.com/image-comparison/',
771 'docx_url' => 'https://wpeasyelements.com/docs/image-comparison/',
772 'is_pro' => false,
773 'tab' => 'widget',
774 ],
775 'contact_box' => [
776 'icon' => 'easyelIcon-contact-box',
777 'title' => 'Contact Box',
778 'description' => 'Contact Box.',
779 'demo_url' => 'https://wpeasyelements.com/contact-box',
780 'docx_url' => 'https://wpeasyelements.com/docs/contact-box',
781 'is_pro' => false,
782 'tab' => 'widget',
783 ],
784 'icon_box_slider' => [
785 'icon' => 'easyelIcon-icon-box-slider',
786 'title' => 'Info Box Slider',
787 'description' => 'Info Box Slider.',
788 'demo_url' => 'https://wpeasyelements.com/info-box-slider/',
789 'docx_url' => 'https://wpeasyelements.com/docs/info-box-slider/',
790 'is_pro' => true,
791 'tab' => 'widget',
792 ],
793 'timeline_slider' => [
794 'icon' => 'easyelIcon-timeline-slider',
795 'title' => 'Timeline Slider',
796 'description' => 'Timeline Slider.',
797 'demo_url' => 'https://wpeasyelements.com/timeline-slider/',
798 'docx_url' => 'https://wpeasyelements.com/docs/timeline-slider',
799 'is_pro' => true,
800 'group' => 'Creative Widgets',
801 'tab' => 'widget',
802 ],
803 'faq' => [
804 'icon' => 'easyelIcon-faq-1',
805 'title' => 'FAQ',
806 'description' => 'FAQ.',
807 'demo_url' => 'https://wpeasyelements.com/faq',
808 'docx_url' => 'https://wpeasyelements.com/docs/faq',
809 'is_pro' => false,
810 'tab' => 'widget',
811 ],
812 'blog_grid' => [
813 'icon' => 'easyelIcon-post-grid',
814 'title' => 'Post Grid',
815 'description' => 'Post.',
816 'demo_url' => 'https://wpeasyelements.com/post-grid',
817 'docx_url' => 'https://wpeasyelements.com/docs/post-grid',
818 'is_pro' => false,
819 'tab' => 'widget',
820 ],
821 'post_slider' => [
822 'icon' => 'easyelIcon-post-slider',
823 'title' => 'Post Slider',
824 'description' => 'Post Slider.',
825 'demo_url' => 'https://wpeasyelements.com/post-slider/',
826 'docx_url' => 'https://wpeasyelements.com/docs/post-slider/',
827 'is_pro' => true,
828 'tab' => 'widget',
829 ],
830 'post_list' => [
831 'icon' => 'easyelIcon-post-grid',
832 'title' => 'Post List',
833 'description' => 'Post List.',
834 'demo_url' => 'https://wpeasyelements.com/post-list/',
835 'docx_url' => 'https://wpeasyelements.com/docs/post-list/',
836 'is_pro' => true,
837 'tab' => 'widget',
838 ],
839 'easy_cf7' => [
840 'icon' => 'easyelIcon-contact-form',
841 'title' => 'Contact Form 7',
842 'description' => 'Contact form 7.',
843 'demo_url' => 'https://wpeasyelements.com/contact-form-7',
844 'docx_url' => 'https://wpeasyelements.com/docs/contact-form-7',
845 'is_pro' => false,
846 'tab' => 'widget',
847 ],
848 'video' => [
849 'icon' => 'easyelIcon-video',
850 'title' => 'Video',
851 'description' => 'Video.',
852 'demo_url' => 'https://wpeasyelements.com/video',
853 'docx_url' => 'https://wpeasyelements.com/docs/video',
854 'is_pro' => false,
855 'tab' => 'widget',
856 ],
857 'pricing_table' => [
858 'icon' => 'easyelIcon-pricing-table',
859 'title' => 'Pricing Table',
860 'description' => 'Pricing Table.',
861 'demo_url' => 'https://wpeasyelements.com/pricing-table',
862 'docx_url' => 'https://wpeasyelements.com/docs/pricing-table',
863 'is_pro' => false,
864 'group' => 'Marketing Widgets',
865 'tab' => 'widget',
866 ],
867 'pricing_list' => [
868 'icon' => 'easyelIcon-pricing-list',
869 'title' => 'Pricing List',
870 'description' => 'Pricing List.',
871 'demo_url' => 'https://wpeasyelements.com/pricing-list/',
872 'docx_url' => 'https://wpeasyelements.com/docs/pricing-list/',
873 'is_pro' => true,
874 'group' => 'Marketing Widgets',
875 'tab' => 'widget',
876 ],
877 'pricing_tab' => [
878 'icon' => 'easyelIcon-pricing-table',
879 'title' => 'Pricing Tab',
880 'description' => 'Pricing Tab.',
881 'demo_url' => 'https://wpeasyelements.com/pricing-tab/',
882 'docx_url' => 'https://wpeasyelements.com/docs/pricing-tab/',
883 'is_pro' => true,
884 'group' => 'Marketing Widgets',
885 'tab' => 'widget',
886 ],
887 'service_list' => [
888 'icon' => 'easyelIcon-service-list',
889 'title' => 'Service List',
890 'description' => 'Service List.',
891 'demo_url' => 'https://wpeasyelements.com/service-list',
892 'docx_url' => 'https://wpeasyelements.com/docs/service-list/',
893 'is_pro' => false,
894 'tab' => 'widget',
895 ],
896 'advance_service' => [
897 'icon' => 'easyelIcon-service-list',
898 'title' => 'Advance Service',
899 'description' => 'Advance Service.',
900 'demo_url' => 'https://wpeasyelements.com/advance-service',
901 'docx_url' => 'https://wpeasyelements.com/docs/advance-service/',
902 'is_pro' => true,
903 'tab' => 'widget',
904 ],
905 'feature_list' => [
906 'icon' => 'easyelIcon-service-list',
907 'title' => 'Feature List',
908 'description' => 'Feature List.',
909 'demo_url' => 'https://wpeasyelements.com/features-list',
910 'docx_url' => 'https://wpeasyelements.com/docs/features-list/',
911 'is_pro' => false,
912 'tab' => 'widget',
913 ],
914 'process_list' => [
915 'icon' => 'easyelIcon-process-list',
916 'title' => 'Process List',
917 'description' => 'Process List.',
918 'demo_url' => 'https://wpeasyelements.com/process-list/',
919 'docx_url' => 'https://wpeasyelements.com/docs/process-list/',
920 'is_pro' => false,
921 'tab' => 'widget',
922 ],
923 'marquee_logo' => [
924 'icon' => 'easyelIcon-marquee-logo',
925 'title' => 'Marquee',
926 'description' => 'Marquee.',
927 'demo_url' => 'https://wpeasyelements.com/marquee/',
928 'docx_url' => 'https://wpeasyelements.com/docs/marquee/',
929 'is_pro' => true,
930 'tab' => 'widget',
931 ],
932 'button' => [
933 'icon' => 'easyelIcon-button',
934 'title' => 'Button',
935 'description' => 'Button.',
936 'demo_url' => 'https://wpeasyelements.com/button/',
937 'docx_url' => 'https://wpeasyelements.com/docs/button',
938 'is_pro' => false,
939 'tab' => 'widget',
940 ],
941 'social_share' => [
942 'icon' => 'easyelIcon-social-share',
943 'title' => 'Social Share',
944 'description' => 'Social Share.',
945 'demo_url' => 'https://wpeasyelements.com/docs/social-share/',
946 'docx_url' => 'https://wpeasyelements.com/docs/social-share/',
947 'is_pro' => false,
948 'tab' => 'widget',
949 ],
950 'social_icon' => [
951 'icon' => 'easyelIcon-social-icons',
952 'title' => 'Social Icon',
953 'description' => 'Social Icon.',
954 'demo_url' => 'https://wpeasyelements.com/social-icon',
955 'docx_url' => 'https://wpeasyelements.com/docs/social-icon',
956 'is_pro' => false,
957 'tab' => 'widget',
958 ],
959 'breadcrumb' => [
960 'icon' => 'easyelIcon-breadcumb',
961 'title' => 'Breadcrumb',
962 'description' => 'Breadcrumb.',
963 'demo_url' => 'https://wpeasyelements.com/breadcrumb',
964 'docx_url' => 'https://wpeasyelements.com/docs/breadcrumb',
965 'is_pro' => false,
966 'tab' => 'widget',
967 ],
968 'easy_slider' => [
969 'icon' => 'easyelIcon-slider',
970 'title' => 'Slider',
971 'description' => 'Slider.',
972 'demo_url' => 'https://wpeasyelements.com/slider',
973 'docx_url' => 'https://wpeasyelements.com/docs/slider',
974 'is_pro' => true,
975 'tab' => 'widget',
976 ],
977 'image_accordion' => [
978 'icon' => 'easyelIcon-image-accordion',
979 'title' => 'Image Accordion',
980 'description' => 'Image Accordion',
981 'demo_url' => 'https://wpeasyelements.com/image-accordion/',
982 'docx_url' => 'https://wpeasyelements.com/docs/image-accordion/',
983 'is_pro' => true,
984 'tab' => 'widget',
985 ],
986 'domain_search' => [
987 'icon' => 'easyelIcon-domain-search',
988 'title' => 'Domain Search',
989 'description' => 'Domain Search.',
990 'demo_url' => 'https://wpeasyelements.com/domain-search/',
991 'docx_url' => 'https://wpeasyelements.com/docs/domain-search/',
992 'is_pro' => false,
993 'tab' => 'widget',
994 ],
995 'featured_project' => [
996 'icon' => 'easyelIcon-custom-projects',
997 'title' => 'Custom Projects',
998 'description' => 'Custom Projects.',
999 'demo_url' => '#',
1000 'docx_url' => '#',
1001 'is_pro' => true,
1002 'tab' => 'widget',
1003 ],
1004 'advance_button' => [
1005 'icon' => 'easyelIcon-button',
1006 'title' => 'Advance Button',
1007 'description' => 'Advance Button.',
1008 'demo_url' => 'https://wpeasyelements.com/advance-button/',
1009 'docx_url' => 'https://wpeasyelements.com/docs/advance-button',
1010 'is_pro' => true,
1011 'tab' => 'widget',
1012 ],
1013 'hr_image_scroll' => [
1014 'icon' => 'easyelIcon-image-horizontal-scroll',
1015 'title' => 'Horizontal Scroll',
1016 'description' => 'Horizontal Scroll.',
1017 'demo_url' => 'https://wpeasyelements.com/horizontal-scroll/',
1018 'docx_url' => 'https://wpeasyelements.com/docs/horizontal-scroll/',
1019 'is_pro' => true,
1020 'tab' => 'widget',
1021 ],
1022 'scrolltrigger_title' => [
1023 'icon' => 'easyelIcon-title-scrolltrigger',
1024 'title' => 'Content ScrollTrigger',
1025 'description' => 'Content ScrollTrigger.',
1026 'demo_url' => 'https://wpeasyelements.com/title-scrolltrigger/',
1027 'docx_url' => 'https://wpeasyelements.com/docs/title-scrolltrigger/',
1028 'is_pro' => true,
1029 'tab' => 'widget',
1030 ],
1031 'Flip_Box' => [
1032 'icon' => 'easyelIcon-flip-box',
1033 'title' => 'Flip Box',
1034 'description' => 'Flip Box.',
1035 'demo_url' => 'https://wpeasyelements.com/flip-box',
1036 'docx_url' => 'https://wpeasyelements.com/docs/flip-box',
1037 'is_pro' => true,
1038 'group' => 'Creative Widgets',
1039 'tab' => 'widget',
1040 ],
1041 'easy_offcanvas' => [
1042 'icon' => 'easyelIcon-canvas',
1043 'title' => 'Offcanvas',
1044 'description' => 'Offcanvas.',
1045 'demo_url' => 'https://wpeasyelements.com/offcanvas',
1046 'docx_url' => 'https://wpeasyelements.com/docs/offcanvas',
1047 'is_pro' => false,
1048 'group' => 'Header & Footer Widget',
1049 'tab' => 'widget',
1050 ],
1051 'site_logo' => [
1052 'icon' => 'easyelIcon-site-logo',
1053 'title' => 'Site Logo',
1054 'description' => 'Display your website logo easily with this widget.',
1055 'demo_url' => 'https://wpeasyelements.com/site-logo/',
1056 'docx_url' => 'https://wpeasyelements.com/docs/site-logo/',
1057 'is_pro' => false,
1058 'group' => 'Header & Footer Widget',
1059 'tab' => 'widget',
1060 ],
1061 'search' => [
1062 'icon' => 'easyelIcon-search',
1063 'title' => 'Simple Search',
1064 'description' => 'Search All Content.',
1065 'demo_url' => 'https://wpeasyelements.com/search',
1066 'docx_url' => 'https://wpeasyelements.com/docs/search',
1067 'is_pro' => false,
1068 'group' => 'Header & Footer Widget',
1069 'tab' => 'widget',
1070 ],
1071 'navigation_menu' => [
1072 'icon' => 'easyelIcon-navigation',
1073 'title' => 'Navigation Menu',
1074 'description' => 'Navigation Menu.',
1075 'demo_url' => 'https://wpeasyelements.com/',
1076 'docx_url' => '#',
1077 'is_pro' => false,
1078 'group' => 'Header & Footer Widget',
1079 'tab' => 'widget',
1080 ],
1081 'single_navigation_menu' => [
1082 'icon' => 'easyelIcon-navigation',
1083 'title' => 'Single Navigation Menu',
1084 'description' => 'SingleNavigation Menu.',
1085 'demo_url' => 'https://wpeasyelements.com/single-navigation/',
1086 'docx_url' => 'https://www.youtube.com/watch?v=d-lz-EfK9eA',
1087 'is_pro' => false,
1088 'group' => 'Header & Footer Widget',
1089 'tab' => 'widget',
1090 ],
1091 'mega_menu_widget' => [
1092 'icon' => 'easyelIcon-navigation',
1093 'title' => 'Mega Menu',
1094 'description' => 'Mega Menu.',
1095 'demo_url' => 'https://wpeasyelements.com/mega-menu/',
1096 'docx_url' => 'https://wpeasyelements.com/docs/mega-menu/',
1097 'is_pro' => true,
1098 'group' => 'Header & Footer Widget',
1099 'tab' => 'widget',
1100 ],
1101 'vertical_navigation_menu' => [
1102 'icon' => 'easyelIcon-navigation',
1103 'title' => 'Vertical Menu',
1104 'description' => 'Vertical Menu.',
1105 'demo_url' => 'https://wpeasyelements.com/vertical-menu/',
1106 'docx_url' => 'https://wpeasyelements.com/docs/vertical-menu/',
1107 'is_pro' => false,
1108 'group' => 'Header & Footer Widget',
1109 'tab' => 'widget',
1110 ],
1111 'page_title' => [
1112 'icon' => 'easyelIcon-page-title',
1113 'title' => 'Page Title',
1114 'description' => 'Page Title.',
1115 'demo_url' => 'https://wpeasyelements.com/docs/page-title/',
1116 'docx_url' => 'https://wpeasyelements.com/docs/page-title/',
1117 'is_pro' => false,
1118 'group' => 'Header & Footer Widget',
1119 'tab' => 'widget',
1120 ],
1121 'post_tags' => [
1122 'icon' => 'easyelIcon-post-tag',
1123 'title' => 'Current Post Tags',
1124 'description' => 'Current Post Tags.',
1125 'demo_url' => 'https://wpeasyelements.com/maximize-value-from-your-marketing-subscription/#single__link',
1126 'docx_url' => '#',
1127 'is_pro' => false,
1128 'group' => 'Theme Builder Widget',
1129 'tab' => 'widget',
1130 ],
1131 'post_author' => [
1132 'icon' => 'easyelIcon-author',
1133 'title' => 'Post Author Info',
1134 'description' => 'Post Author Info.',
1135 'demo_url' => 'https://wpeasyelements.com/maximize-value-from-your-marketing-subscription/#single__link',
1136 'docx_url' => '#',
1137 'is_pro' => false,
1138 'group' => 'Theme Builder Widget',
1139 'tab' => 'widget',
1140 ],
1141 'post_title' => [
1142 'icon' => 'easyelIcon-post-title',
1143 'title' => 'Post Title',
1144 'description' => 'Post Title.',
1145 'demo_url' => 'https://wpeasyelements.com/docs/post-title/',
1146 'docx_url' => 'https://wpeasyelements.com/docs/post-title/',
1147 'is_pro' => false,
1148 'group' => 'Theme Builder Widget',
1149 'tab' => 'widget',
1150 ],
1151 'post_content' => [
1152 'icon' => 'easyelIcon-post-content',
1153 'title' => 'Post Content',
1154 'description' => 'Post Content.',
1155 'demo_url' => 'https://wpeasyelements.com/maximize-value-from-your-marketing-subscription/',
1156 'docx_url' => 'https://wpeasyelements.com/maximize-value-from-your-marketing-subscription/',
1157 'is_pro' => false,
1158 'group' => 'Theme Builder Widget',
1159 'tab' => 'widget',
1160 ],
1161 'excerpt' => [
1162 'icon' => 'easyelIcon-post-excerpt',
1163 'title' => 'Post Excerpt',
1164 'description' => 'Post Excerpt.',
1165 'demo_url' => 'https://wpeasyelements.com/docs/post-excerpt/',
1166 'docx_url' => 'https://wpeasyelements.com/docs/post-excerpt/',
1167 'is_pro' => false,
1168 'group' => 'Theme Builder Widget',
1169 'tab' => 'widget',
1170 ],
1171 'related_post' => [
1172 'icon' => 'easyelIcon-related-post',
1173 'title' => 'Related Post',
1174 'description' => 'Related Post.',
1175 'demo_url' => 'https://wpeasyelements.com/docs/related-post/',
1176 'docx_url' => 'https://wpeasyelements.com/docs/related-post/',
1177 'is_pro' => true,
1178 'group' => 'Theme Builder Widget',
1179 'tab' => 'widget',
1180 ],
1181 'post_pagination' => [
1182 'icon' => 'easyelIcon-pagination',
1183 'title' => 'Post Pagination',
1184 'description' => 'Post Pagination.',
1185 'demo_url' => 'https://wpeasyelements.com/docs/post-pagination/',
1186 'docx_url' => 'https://wpeasyelements.com/docs/post-pagination/',
1187 'is_pro' => false,
1188 'group' => 'Theme Builder Widget',
1189 'tab' => 'widget',
1190 ],
1191 'post_meta' => [
1192 'icon' => 'easyelIcon-meta',
1193 'title' => 'Post Meta',
1194 'description' => 'Post Meta.',
1195 'demo_url' => 'https://wpeasyelements.com/docs/post-meta/',
1196 'docx_url' => 'https://wpeasyelements.com/docs/post-meta/',
1197 'is_pro' => false,
1198 'group' => 'Theme Builder Widget',
1199 'tab' => 'widget',
1200 ],
1201 'post_comments' => [
1202 'icon' => 'easyelIcon-comments',
1203 'title' => 'Post Comments',
1204 'description' => 'Post Comments.',
1205 'demo_url' => 'https://wpeasyelements.com/maximize-value-from-your-marketing-subscription/#single__link',
1206 'docx_url' => 'https://wpeasyelements.com/maximize-value-from-your-marketing-subscription/#single__link',
1207 'is_pro' => false,
1208 'group' => 'Theme Builder Widget',
1209 'tab' => 'widget',
1210 ],
1211 'featured_image' => [
1212 'icon' => 'easyelIcon-image-carousel',
1213 'title' => 'Featured Image',
1214 'description' => 'Featured Image.',
1215 'demo_url' => 'https://wpeasyelements.com/docs/featured-image/',
1216 'docx_url' => 'https://wpeasyelements.com/docs/featured-image/',
1217 'is_pro' => false,
1218 'group' => 'Theme Builder Widget',
1219 'tab' => 'widget',
1220 ],
1221 'easy_scroll_to_top' => [
1222 'icon' => 'easyelIcon-scroll-top',
1223 'title' => 'Scroll Top',
1224 'description' => 'Scroll Top.',
1225 'demo_url' => 'https://wpeasyelements.com/docs/scroll-to-top/',
1226 'docx_url' => 'https://wpeasyelements.com/docs/scroll-to-top/',
1227 'is_pro' => false,
1228 'group' => 'Theme Builder Widget',
1229 'tab' => 'widget',
1230 ],
1231 'easy_table' => [
1232 'icon' => 'easyelIcon-clients-logo-grid',
1233 'title' => 'Table',
1234 'description' => 'Table.',
1235 'demo_url' => 'https://wpeasyelements.com/table',
1236 'docx_url' => 'https://wpeasyelements.com/docs/table',
1237 'is_pro' => false,
1238 'tab' => 'widget',
1239 ],
1240 'advance_image' => [
1241 'icon' => 'easyelIcon-image-carousel',
1242 'title' => 'Advance Image',
1243 'description' => 'Advance Image Here.',
1244 'demo_url' => 'https://wpeasyelements.com/advance-image/',
1245 'docx_url' => 'https://wpeasyelements.com/docs/advance-image/',
1246 'is_pro' => true,
1247 'group' => 'Animations',
1248 'tab' => 'widget',
1249 ],
1250 'bmi_calculator' => [
1251 'icon' => 'easyelIcon-calculator',
1252 'title' => 'BMI Calculator',
1253 'description' => 'BMI Calculator.',
1254 'demo_url' => 'https://wpeasyelements.com/bmi-calculator/',
1255 'docx_url' => 'https://wpeasyelements.com/docs/bmi-calculator/',
1256 'is_pro' => true,
1257 'group' => 'Creative Widgets',
1258 'tab' => 'widget',
1259 ],
1260 'typewriter' => [
1261 'icon' => 'easyelIcon-heading',
1262 'title' => 'Typewriter',
1263 'description' => 'Animated typewriter text effect.',
1264 'demo_url' => 'https://wpeasyelements.com/typewriter/',
1265 'docx_url' => 'https://wpeasyelements.com/docs/typewriter/',
1266 'is_pro' => true,
1267 'group' => 'Animations',
1268 'tab' => 'widget',
1269 ],
1270 'animated_title' => [
1271 'icon' => 'easyelIcon-animated-title',
1272 'title' => 'Animated Title',
1273 'description' => 'Animated title text effect.',
1274 'demo_url' => 'https://wpeasyelements.com/animated-title/',
1275 'docx_url' => 'https://wpeasyelements.com/docs/',
1276 'is_pro' => true,
1277 'group' => 'Animations',
1278 'tab' => 'widget',
1279 ],
1280 'easytext_animation' => [
1281 'icon' => 'easyelIcon-heading',
1282 'title' => 'Animated Text',
1283 'description' => 'Animated text animation effect.',
1284 'demo_url' => 'https://wpeasyelements.com/text-animation/',
1285 'docx_url' => 'https://wpeasyelements.com/docs/text-animation/',
1286 'is_pro' => true,
1287 'group' => 'Animations',
1288 'tab' => 'widget',
1289 ],
1290 'easy_feature' => [
1291 'icon' => 'easyelIcon-marquee-logo',
1292 'title' => 'Hover Image Box',
1293 'description' => 'Hover image box content.',
1294 'demo_url' => 'https://wpeasyelements.com/hover-image-box/',
1295 'docx_url' => 'https://wpeasyelements.com/docs/hover-image-box/',
1296 'is_pro' => true,
1297 'tab' => 'widget',
1298 ],
1299 'easy_gallery' => [
1300 'icon' => 'easyelIcon-marquee-logo',
1301 'title' => 'Simple Gallery',
1302 'description' => 'Gallery',
1303 'demo_url' => 'https://wpeasyelements.com/simple-gallery/',
1304 'docx_url' => 'https://wpeasyelements.com/docs/simple-gallery/',
1305 'is_pro' => false,
1306 'tab' => 'widget',
1307 ],
1308 'image_gallery_filter' => [
1309 'icon' => 'easyelIcon-filterable-gallery',
1310 'title' => 'Filterable Gallery',
1311 'description' => 'filterable Gallery',
1312 'demo_url' => 'https://wpeasyelements.com/gallery-filter/',
1313 'docx_url' => 'https://wpeasyelements.com/gallery-filter/',
1314 'is_pro' => true,
1315 'group' => 'Creative Widgets',
1316 'tab' => 'widget',
1317 ],
1318 'portfolio_pro' => [
1319 'icon' => 'easyelIcon-marquee-logo',
1320 'title' => 'Portfolio',
1321 'description' => 'Portfolio',
1322 'demo_url' => 'https://wpeasyelements.com/portfolio/',
1323 'docx_url' => 'https://wpeasyelements.com/docs/portfolio/',
1324 'is_pro' => true,
1325 'tab' => 'widget',
1326 ],
1327 'portfolio_filter' => [
1328 'icon' => 'easyelIcon-marquee-logo',
1329 'title' => 'Portfolio Filter',
1330 'description' => 'Portfolio filter',
1331 'demo_url' => 'https://wpeasyelements.com/portfolio-filter/',
1332 'docx_url' => 'https://wpeasyelements.com/docs/portfolio-filter/',
1333 'is_pro' => true,
1334 'tab' => 'widget',
1335 ],
1336 'protected_content' => [
1337 'icon' => 'easyelIcon-protected-content',
1338 'title' => 'Protected Content',
1339 'description' => 'This Widget is protected content',
1340 'demo_url' => 'https://wpeasyelements.com/protected-contents/',
1341 'docx_url' => 'https://wpeasyelements.com/docs/protected-contents/',
1342 'is_pro' => true,
1343 'group' => 'Creative Widgets',
1344 'tab' => 'widget',
1345 ],
1346 'advanced_search' => [
1347 'icon' => 'easyelIcon-advance-search',
1348 'title' => 'Advanced Search',
1349 'description' => 'This Widget is advanced search',
1350 'demo_url' => 'https://wpeasyelements.com/advanced-search/',
1351 'docx_url' => 'https://wpeasyelements.com/docs/advanced-search/',
1352 'is_pro' => true,
1353 'tab' => 'widget',
1354 ],
1355 'enable_image_hover_effect' => [
1356 'icon' => 'easyelIcon-marquee-logo',
1357 'title' => 'Image Hover Effect',
1358 'description' => 'This Widget is image hover effect',
1359 'demo_url' => 'https://wpeasyelements.com/image-hover-effect/',
1360 'docx_url' => 'https://wpeasyelements.com/docs/image-hover-effect/',
1361 'is_pro' => true,
1362 'group' => 'Creative Widgets',
1363 'tab' => 'widget',
1364 ],
1365 'image_hotspot' => [
1366 'icon' => 'easyelIcon-marquee-logo',
1367 'title' => 'image Hotspot',
1368 'description' => 'This Widget is Image Hotspot',
1369 'demo_url' => 'https://wpeasyelements.com/image-hotspot/',
1370 'docx_url' => 'https://wpeasyelements.com/docs/image-hotspot/',
1371 'is_pro' => true,
1372 'group' => 'Creative Widgets',
1373 'tab' => 'widget',
1374 ],
1375 'hr_image_scroll' => [
1376 'icon' => 'easyelIcon-image-horizontal-scroll',
1377 'title' => 'ScrollTrigger',
1378 'description' => 'This Widget is image hover effect',
1379 'demo_url' => 'https://wpeasyelements.com/horizontal-scroll/',
1380 'docx_url' => 'https://wpeasyelements.com/docs/horizontal-scroll/',
1381 'is_pro' => true,
1382 'group' => 'Animations',
1383 'tab' => 'widget',
1384 ],
1385 'archive_post' => [
1386 'icon' => 'easyelIcon-post-grid',
1387 'title' => 'Archive Post',
1388 'description' => 'This Widget is archive post widget',
1389 'demo_url' => 'https://wpeasyelements.com/post-grid/',
1390 'docx_url' => 'https://wpeasyelements.com/docs/post-grid/',
1391 'is_pro' => false,
1392 'tab' => 'widget',
1393 ],
1394 'counter' => [
1395 'icon' => 'easyelIcon-counter',
1396 'title' => 'Counter',
1397 'description' => 'This is a widget that counts up.',
1398 'demo_url' => 'https://wpeasyelements.com/counter/',
1399 'docx_url' => 'https://wpeasyelements.com/docs/counter/',
1400 'is_pro' => false,
1401 'group' => 'Creative Widgets',
1402 'tab' => 'widget',
1403 ],
1404 'countdown' => [
1405 'icon' => 'easyelIcon-countdown',
1406 'title' => 'Countdown',
1407 'description' => 'This is a countdown widget.',
1408 'demo_url' => 'https://wpeasyelements.com/countdown/',
1409 'docx_url' => 'https://wpeasyelements.com/docs/countdown/',
1410 'is_pro' => false,
1411 'group' => 'Creative Widgets',
1412 'tab' => 'widget',
1413 ],
1414 'easy_progress' => [
1415 'icon' => 'easyelIcon-progress-bar',
1416 'title' => 'Progress Bar',
1417 'description' => 'This is a Progress bar widget.',
1418 'demo_url' => 'https://wpeasyelements.com/progressbar/',
1419 'docx_url' => 'https://wpeasyelements.com/docs/progressbar/',
1420 'is_pro' => false,
1421 'group' => 'Creative Widgets',
1422 'tab' => 'widget',
1423 ],
1424 'facebook_feed' => [
1425 'icon' => 'easyelIcon-facebook-feed',
1426 'title' => 'Facebook Feed',
1427 'description' => 'This Widget is facebook feeds',
1428 'demo_url' => 'https://wpeasyelements.com/facebook-feed/',
1429 'docx_url' => 'https://wpeasyelements.com/docs/facebook-feed/',
1430 'is_pro' => true,
1431 'group' => 'Social Media Feeds',
1432 'tab' => 'widget',
1433 ],
1434 'instagram_feed' => [
1435 'icon' => 'easyelIcon-instagram-feed',
1436 'title' => 'Instagram Feed',
1437 'description' => 'This Widget is instagram feeds',
1438 'demo_url' => 'https://wpeasyelements.com/instagram-feed/',
1439 'docx_url' => 'https://wpeasyelements.com/docs/instagram-feed/',
1440 'is_pro' => true,
1441 'group' => 'Social Media Feeds',
1442 'tab' => 'widget',
1443 ],
1444 'login_register' => [
1445 'icon' => 'easyelIcon-login',
1446 'title' => 'Login / Register',
1447 'description' => 'This Widget is login and register form',
1448 'demo_url' => 'https://wpeasyelements.com/register/',
1449 'docx_url' => 'https://wpeasyelements.com/docs/login-register/',
1450 'is_pro' => false,
1451 'group' => 'Form Widgets',
1452 'tab' => 'widget',
1453 ],
1454 'table_of_content' => [
1455 'icon' => 'easyelIcon-pricing-list',
1456 'title' => 'Table Of Content',
1457 'description' => 'This is a widget that creates a table of content.',
1458 'demo_url' => 'https://wpeasyelements.com/table-of-content/',
1459 'docx_url' => 'https://wpeasyelements.com/docs/table-of-content/',
1460 'is_pro' => true,
1461 'group' => 'Creative Widgets',
1462 'tab' => 'widget',
1463 ],
1464 'product_grid_lite' => [
1465 'icon' => 'easyelIcon-process-grid',
1466 'title' => 'Product Grid Lite',
1467 'description' => 'Display WooCommerce products in a responsive grid (lite version).',
1468 'demo_url' => 'https://wpeasyelements.com/product-grid-lite/',
1469 'docx_url' => 'https://wpeasyelements.com/docs/product-grid-lite/',
1470 'is_pro' => false,
1471 'group' => 'WooCommerce Widgets',
1472 'tab' => 'widget',
1473 ],
1474 'product_grid' => [
1475 'icon' => 'easyelIcon-process-grid',
1476 'title' => 'Product Grid',
1477 'description' => 'Advanced WooCommerce product grid with filter tabs, quick view, compare and wishlist.',
1478 'demo_url' => 'https://wpeasyelements.com/product-grid/',
1479 'docx_url' => 'https://wpeasyelements.com/docs/product-grid/',
1480 'is_pro' => true,
1481 'group' => 'WooCommerce Widgets',
1482 'tab' => 'widget',
1483 ],
1484 'product_list' => [
1485 'icon' => 'easyelIcon-process-list',
1486 'title' => 'Product List',
1487 'description' => 'Display WooCommerce products in a list layout with details and actions.',
1488 'demo_url' => 'https://wpeasyelements.com/product-list/',
1489 'docx_url' => 'https://wpeasyelements.com/docs/product-list/',
1490 'is_pro' => true,
1491 'group' => 'WooCommerce Widgets',
1492 'tab' => 'widget',
1493 ],
1494 'product_slider' => [
1495 'icon' => 'easyelIcon-process-slider',
1496 'title' => 'Product Slider',
1497 'description' => 'Showcase WooCommerce products in a responsive slider/carousel.',
1498 'demo_url' => 'https://wpeasyelements.com/product-slider/',
1499 'docx_url' => 'https://wpeasyelements.com/docs/product-slider/',
1500 'is_pro' => true,
1501 'group' => 'WooCommerce Widgets',
1502 'tab' => 'widget',
1503 ],
1504 'product_categories' => [
1505 'icon' => 'easyelIcon-filterable-gallery',
1506 'title' => 'Product Categories',
1507 'description' => 'Display WooCommerce product categories in a clean grid.',
1508 'demo_url' => 'https://wpeasyelements.com/product-categories/',
1509 'docx_url' => 'https://wpeasyelements.com/docs/product-categories/',
1510 'is_pro' => true,
1511 'group' => 'WooCommerce Widgets',
1512 'tab' => 'widget',
1513 ],
1514 'product_categories_slider' => [
1515 'icon' => 'easyelIcon-filterable-gallery',
1516 'title' => 'Product Categories Slider',
1517 'description' => 'Showcase WooCommerce product categories in a slider.',
1518 'demo_url' => 'https://wpeasyelements.com/product-categories-slider/',
1519 'docx_url' => 'https://wpeasyelements.com/docs/product-categories-slider/',
1520 'is_pro' => true,
1521 'group' => 'WooCommerce Widgets',
1522 'tab' => 'widget',
1523 ],
1524 'product_collections' => [
1525 'icon' => 'easyelIcon-process-grid',
1526 'title' => 'Product Collection',
1527 'description' => 'Curate WooCommerce product collections as a grid.',
1528 'demo_url' => 'https://wpeasyelements.com/product-collections/',
1529 'docx_url' => 'https://wpeasyelements.com/docs/product-collections/',
1530 'is_pro' => true,
1531 'group' => 'WooCommerce Widgets',
1532 'tab' => 'widget',
1533 ],
1534 'product_collections_slider' => [
1535 'icon' => 'easyelIcon-process-slider',
1536 'title' => 'Product Collections Slider',
1537 'description' => 'Curate WooCommerce product collections as a slider.',
1538 'demo_url' => 'https://wpeasyelements.com/product-collections-slider/',
1539 'docx_url' => 'https://wpeasyelements.com/docs/product-collections-slider/',
1540 'is_pro' => true,
1541 'group' => 'WooCommerce Widgets',
1542 'tab' => 'widget',
1543 ],
1544 'mini_cart' => [
1545 'icon' => 'easyelIcon-canvas',
1546 'title' => 'Mini Cart',
1547 'description' => 'Compact WooCommerce mini cart with dropdown preview.',
1548 'demo_url' => 'https://wpeasyelements.com/mini-cart/',
1549 'docx_url' => 'https://wpeasyelements.com/docs/mini-cart/',
1550 'is_pro' => false,
1551 'group' => 'WooCommerce Widgets',
1552 'tab' => 'widget',
1553 ],
1554 ];
1555
1556 $feature_widget_map = [
1557 'enable_megamenu_builder' => 'mega_menu_widget',
1558 ];
1559
1560 // Condition apply
1561 if ( function_exists( 'easy_element_is_enabled' ) ) {
1562 foreach ( $feature_widget_map as $feature => $widget_key ) {
1563 if ( ! easy_element_is_enabled( $feature ) ) {
1564 unset( $widgets[ $widget_key ] );
1565 }
1566 }
1567 }
1568
1569 return apply_filters( 'easyel_available_widgets', $widgets );
1570
1571 }
1572
1573 /**
1574 * Admin page HTML
1575 */
1576 function easyel_custom_fonts_page_html() {
1577 if ( ! current_user_can( 'manage_options' ) ) return;
1578
1579 if ( ! defined( 'EASY_ELEMENTS_PRO_ACTIVE' ) || ! EASY_ELEMENTS_PRO_ACTIVE ) { ?>
1580 <div class="easyel-custom-font-page">
1581 <div class="easyel-custom-font-banner">
1582 <div class="easyel-custom-font-banner-content">
1583 <h1><?php esc_html_e( 'Custom Fonts', 'easy-elements' ); ?></h1>
1584
1585 <p>
1586 <?php esc_html_e(
1587 'Upload and manage custom fonts.',
1588 'easy-elements'
1589 ); ?>
1590 </p>
1591 <p>Upload TTF, OTF, WOFF</p>
1592 <a
1593 href="https://wpeasyelements.com/pricing/"
1594 target="_blank"
1595 class="easyel-upgrade-btn-custom-font"
1596 >
1597 <?php esc_html_e( 'Upgrade to Pro', 'easy-elements' ); ?>
1598 </a>
1599 </div>
1600 </div>
1601 </div>
1602 <?php
1603 return;
1604 }
1605
1606 $pro_version = easyel_get_pro_clean_version();
1607
1608 if (
1609 $pro_version &&
1610 version_compare( $pro_version, '1.0.8', '>=' )
1611 ) {
1612 if (
1613 did_action( 'plugins_loaded' ) &&
1614 class_exists( '\EasyElements_Elementor\Pro\CustomFont\FontUploader' ) ) {
1615 $manager = \EasyElements_Elementor\Pro\CustomFont\FontUploader::get_instance();
1616
1617 if ( method_exists( $manager, 'easyel_pro_custom_fonts_page' ) ) {
1618 $manager->easyel_pro_custom_fonts_page();
1619 }
1620 }
1621 } else {
1622 easyel_pro_custom_fonts_page();
1623 }
1624
1625 }
1626
1627 /**
1628 * Hide admin notices on the Easy Elements dashboard page.
1629 */
1630 function easyel_hide_admin_notices() {
1631 $screen = get_current_screen();
1632
1633 if ( $screen && 'toplevel_page_easy-elements-dashboard' === $screen->id ) {
1634
1635 $custom_css = '
1636 /* Hide all common notices */
1637 .notice,
1638 .updated,
1639 .error,
1640 .update-nag,
1641 .notice-success,
1642 .notice-error,
1643 .notice-warning {
1644 display: none !important;
1645 }
1646
1647 /* But allow EasyEL notice */
1648 .easyel-promo-notice {
1649 display: block !important;
1650 }
1651 ';
1652
1653 $handle = 'easyel-admin-hide-notices';
1654 wp_register_style( $handle, false, [], EASYELEMENTS_VER );
1655 wp_enqueue_style( $handle );
1656 wp_add_inline_style( $handle, $custom_css );
1657 }
1658 }
1659
1660 public function easyel_smooth_scroller_popup_display() {
1661
1662 $options = get_option('easyel_scroll_smoother_settings', []);
1663
1664
1665 ?>
1666 <div class="easyel-smooth-scroll-popup">
1667 <div class="ajax-search-close-icon">
1668 <a class="easyel-smooth-scroll-popup-close-icon rbt-round-btn" href="#">
1669 <svg width="14" height="14" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
1670 <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>
1671 </svg>
1672 </a>
1673 </div>
1674
1675 <div class="wrapper">
1676 <h2 class="easyel-smooth-scroll-heading"><?php echo esc_html__("Smooth Scroll Settings","easy-elements"); ?></h2>
1677 <form method="post" action="">
1678 <div class="easyel-smooth-scroll-settings-main-wrapper">
1679
1680 <!-- Smooth Speed -->
1681 <div class="easyel-smooth-scroll-item">
1682 <span class="easy-field-label"><?php echo esc_html__("Speed (2.0–5):","easy-elements"); ?></span>
1683 <label class="easy-field-item">
1684 <input type="number"
1685 name="smooth_scroll_speed"
1686 min="0.1" max="5" step="0.1"
1687 value="<?php echo isset($options['smooth_scroll_speed']) ? esc_attr($options['smooth_scroll_speed']) : '2.5'; ?>">
1688 </label>
1689 </div>
1690
1691 <!-- Normalize Scroll -->
1692 <div class="easyel-smooth-scroll-item">
1693 <span class="easy-field-label"><?php echo esc_html__("Normalize Scroll","easy-elements"); ?></span>
1694 <label class="easy-field-item easy-toggle-switch">
1695 <input type="checkbox"
1696 name="smooth_scroll_normalize"
1697 value="1"
1698 <?php checked( isset($options['smooth_scroll_normalize']) ? $options['smooth_scroll_normalize'] : 0, 1 ); ?>>
1699 <span class="slider round"></span>
1700 </label>
1701 </div>
1702
1703 <!-- Enable on Mobile -->
1704 <div class="easyel-smooth-scroll-item">
1705 <span class="easy-field-label"><?php echo esc_html__("Enable on Mobile Devices","easy-elements"); ?></span>
1706 <label class="easy-field-item easy-toggle-switch">
1707 <input type="checkbox"
1708 name="smooth_scroll_enable_mobile"
1709 value="1"
1710 <?php checked( isset($options['smooth_scroll_enable_mobile']) ? $options['smooth_scroll_enable_mobile'] : 0, 1 ); ?>>
1711 <span class="slider round"></span>
1712 </label>
1713 </div>
1714
1715 <!-- Disable on Editor Mode -->
1716 <div class="easyel-smooth-scroll-item">
1717 <span class="easy-field-label"><?php echo esc_html__("Disable on Editor Mode","easy-elements"); ?></span>
1718 <label class="easy-field-item easy-toggle-switch">
1719 <input type="checkbox"
1720 name="smooth_scroll_disable_editor_mode"
1721 value="1"
1722 <?php checked( isset($options['smooth_scroll_disable_editor_mode']) ? $options['smooth_scroll_disable_editor_mode'] : 0, 1 ); ?>>
1723 <span class="slider round"></span>
1724 </label>
1725 </div>
1726
1727 <div class="easyel-smooth-scroll-item">
1728 <span class="easy-field-label"><?php echo esc_html__("Width","easy-elements"); ?></span>
1729 <label class="easy-field-item">
1730 <input type="number"
1731 name="smooth_scroll_width"
1732 value="<?php echo isset($options['smooth_scroll_width']) ? esc_attr($options['smooth_scroll_width']) : ''; ?>">
1733 </label>
1734 </div>
1735
1736 <div class="easyel-smooth-scroll-item">
1737 <span class="easy-field-label">
1738 <?php echo esc_html__("Normal Color","easy-elements"); ?>
1739 </span>
1740 <label class="easy-field-item">
1741 <input type="text" class="easyel-smooth-scroll-color"
1742 name="smooth_scroll_normal_color"
1743 value="<?php echo isset($options['smooth_scroll_normal_color']) ? esc_attr($options['smooth_scroll_normal_color']) : ''; ?>">
1744 </label>
1745 </div>
1746
1747 <div class="easyel-smooth-scroll-item">
1748 <span class="easy-field-label">
1749 <?php echo esc_html__("Highlight Color","easy-elements"); ?>
1750 </span>
1751 <label class="easy-field-item">
1752 <input type="text" class="easyel-smooth-scroll-color"
1753 name="smooth_scroll_highlight_color"
1754 value="<?php echo isset($options['smooth_scroll_highlight_color']) ? esc_attr($options['smooth_scroll_highlight_color']) : ''; ?>">
1755 </label>
1756 </div>
1757 </div>
1758
1759 <div class="easyel-smooth-scroll-save">
1760 <input type="submit"
1761 class="smooth_scroll_popup_item_save"
1762 name="smooth_scroll_popup_item_save"
1763 value="<?php echo esc_attr__('Save Changes', 'easy-elements'); ?>">
1764 </div>
1765 </form>
1766 </div>
1767
1768 </div>
1769 <?php
1770 }
1771
1772 public function easyel_reading_progressbar_popup_display() {
1773
1774 $options = get_option('easyel_reading_progressbar_settings', []);
1775
1776 $display_options = [
1777 'global' => __( 'Entire Site', 'easy-elements' ),
1778 'all-posts' => __( 'Posts Only', 'easy-elements' ),
1779 'all-pages' => __( 'Pages Only', 'easy-elements' ),
1780 'all-pages-post' => __( 'All Pages & Posts', 'easy-elements' ),
1781 'blog-page' => __( 'Blog Page', 'easy-elements' ),
1782 ];
1783
1784 if ( ! apply_filters( 'easyel/pro_enabled', false ) ) {
1785 foreach ( $display_options as $key => $label ) {
1786 if ( $key !== 'global' ) {
1787 $display_options[ $key ] = $label . ' (Pro)';
1788 }
1789 }
1790 }
1791
1792 $pages = get_pages();
1793
1794 ?>
1795 <div class="easyel-reading-progressbar-popup">
1796 <div class="ajax-search-close-icon">
1797 <a class="easyel-reading-progressbar-popup-close-icon rbt-round-btn" href="#">
1798 <svg width="14" height="14" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
1799 <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>
1800 </svg>
1801 </a>
1802 </div>
1803
1804 <div class="wrapper">
1805 <h2 class="easyel-reading-progressbar-heading"><?php echo esc_html__("Reading Progress bar Settings","easy-elements"); ?></h2>
1806 <form method="post" action="">
1807 <div class="easyel-reading-progressbar-settings-main-wrapper">
1808
1809 <div class="easyel-reading-progressbar-item">
1810 <span class="easy-field-label">
1811 <?php echo esc_html__( "Progressbar Position", "easy-elements" ); ?>
1812 </span>
1813
1814 <label class="easy-field-item">
1815 <select class="easyel-reading-progressbar-select"
1816 name="reading_progressbar_position">
1817 <option value="top"
1818 <?php selected( $options['reading_progressbar_position'] ?? 'top', 'top' ); ?>>
1819 <?php esc_html_e( 'Top', 'easy-elements' ); ?>
1820 </option>
1821 <option value="bottom"
1822 <?php selected( $options['reading_progressbar_position'] ?? 'top', 'bottom' ); ?>>
1823 <?php esc_html_e( 'Bottom', 'easy-elements' ); ?>
1824 </option>
1825 </select>
1826 </label>
1827 </div>
1828
1829 <div class="easyel-reading-progressbar-item">
1830 <span class="easy-field-label">
1831 <?php esc_html_e( 'Display Progressbar On', 'easy-elements' ); ?>
1832 </span>
1833
1834 <div class="easyel-checkbox-group">
1835 <?php foreach ( $display_options as $key => $label ) : ?>
1836 <label class="easyel-checkbox-item">
1837 <input type="checkbox"
1838 name="reading_progressbar_display[]"
1839 value="<?php echo esc_attr( $key ); ?>"
1840 <?php
1841 if ( ! empty( $options['reading_progressbar_display'] ) &&
1842 in_array( $key, (array) $options['reading_progressbar_display'], true )
1843 ) {
1844 checked( true );
1845 }
1846 ?>
1847 <?php
1848 if ( ! apply_filters( 'easyel/pro_enabled', false ) && $key !== 'global' ) {
1849 echo ' disabled';
1850 }
1851 ?>
1852 >
1853 <?php echo esc_html( $label ); ?>
1854 </label>
1855 <?php endforeach; ?>
1856 </div>
1857 </div>
1858
1859 <!-- Specific Page Select -->
1860 <div class="easyel-reading-progressbar-item">
1861 <span class="easy-field-label"><?php esc_html_e( 'Specific Page', 'easy-elements' ); ?></span>
1862 <div class="easy-field-content">
1863 <select
1864 class="easyel-readingprogress-barselect2"
1865 name="reading_progressbar_specific_page[]"
1866 multiple
1867 <?php if ( ! apply_filters( 'easyel/pro_enabled', false ) ) echo 'disabled'; ?>
1868 >
1869 <option value=""><?php esc_html_e( 'Select a page', 'easy-elements' ); ?></option>
1870 <?php foreach( $pages as $page ): ?>
1871 <option value="<?php echo esc_attr( $page->ID ); ?>"
1872 <?php
1873 if ( ! empty( $options['reading_progressbar_specific_page'] ) &&
1874 in_array( $page->ID, (array) $options['reading_progressbar_specific_page'], true )
1875 ) {
1876 echo 'selected';
1877 }
1878 ?>
1879 >
1880 <?php echo esc_html( $page->post_title ); ?>
1881 </option>
1882 <?php endforeach; ?>
1883 </select>
1884
1885 <?php if ( ! apply_filters( 'easyel/pro_enabled', false ) ) : ?>
1886 <p class="easyel-pro-notice"><?php esc_html_e( 'Available in Pro.', 'easy-elements' ); ?></p>
1887 <?php endif; ?>
1888 </div>
1889 </div>
1890
1891
1892 <div class="easyel-reading-progressbar-item">
1893 <span class="easy-field-label">
1894 <?php esc_html_e( 'Bar Color', 'easy-elements' ); ?>
1895 </span>
1896 <input type="text" class="easyel-color-picker"
1897 name="reading_progressbar_color"
1898 value="<?php echo esc_attr( $options['reading_progressbar_color'] ?? '' ); ?>">
1899 </div>
1900 <div class="easyel-reading-progressbar-item">
1901 <span class="easy-field-label">
1902 <?php esc_html_e( 'Height (px)', 'easy-elements' ); ?>
1903 </span>
1904 <input type="number"
1905 name="reading_progressbar_height"
1906 min="1" max="100"
1907 value="<?php echo esc_attr( $options['reading_progressbar_height'] ?? '' ); ?>">
1908 </div>
1909 </div>
1910 <div class="easyel-reading-progressbar-save">
1911 <input type="submit"
1912 class="reading_progressbar_popup_item_save"
1913 name="reading_progressbar_popup_item_save"
1914 value="<?php echo esc_attr__('Save Changes', 'easy-elements'); ?>">
1915 </div>
1916 </form>
1917 </div>
1918
1919 </div>
1920 <?php
1921 }
1922
1923 public function easyel_smooth_scroller_popup_callback() {
1924 $this->easyel_smooth_scroller_popup_display();
1925 }
1926
1927 public function easyel_reading_progressbar_popup_callback() {
1928 $this->easyel_reading_progressbar_popup_display();
1929 }
1930
1931 public function save_smooth_scroll_settings() {
1932
1933 // Permission check
1934 if ( ! current_user_can('manage_options') ) {
1935 wp_send_json_error(__('Unauthorized', 'easy-elements'));
1936 }
1937
1938 check_ajax_referer('easy_elements_nonce', 'nonce');
1939
1940 if ( ! isset($_POST['settings']) ) {
1941 wp_send_json_error(['message' => 'No settings received']);
1942 }
1943
1944 $settings = map_deep( wp_unslash( $_POST['settings'] ), 'sanitize_text_field');
1945
1946 update_option('easyel_scroll_smoother_settings', $settings);
1947
1948 wp_send_json_success(['message' => 'Saved successfully']);
1949 }
1950
1951 public function save_reading_progressbar_settings() {
1952
1953 if ( ! current_user_can('manage_options') ) {
1954 wp_send_json_error(__('Unauthorized', 'easy-elements'));
1955 }
1956
1957 check_ajax_referer('easy_elements_nonce', 'nonce');
1958
1959 if ( ! isset($_POST['settings']) ) {
1960 wp_send_json_error(['message' => 'No settings received']);
1961 }
1962
1963 $settings = map_deep( wp_unslash( $_POST['settings'] ), 'sanitize_text_field');
1964
1965 if ( isset($settings['reading_progressbar_display']) && is_array($settings['reading_progressbar_display']) ) {
1966 $settings['reading_progressbar_display'] = array_map('sanitize_text_field', $settings['reading_progressbar_display']);
1967 }
1968
1969 if ( isset($settings['reading_progressbar_specific_page']) && is_array($settings['reading_progressbar_specific_page']) ) {
1970 $settings['reading_progressbar_specific_page'] = array_map('absint', $settings['reading_progressbar_specific_page']);
1971 } else {
1972 $settings['reading_progressbar_specific_page'] = [];
1973 }
1974
1975 update_option('easyel_reading_progressbar_settings', $settings);
1976
1977 wp_send_json_success(['message' => 'Saved successfully']);
1978 }
1979
1980 public function easyel_scroll_top_popup_callback() {
1981 $this->easyel_scroll_top_popup_display();
1982 }
1983
1984 public function easyel_scroll_top_popup_display() {
1985
1986 $options = get_option( 'easyel_scroll_top_settings', [] );
1987
1988 ?>
1989 <div class="easyel-scroll-top-popup">
1990 <div class="ajax-search-close-icon">
1991 <a class="easyel-scroll-top-popup-close-icon rbt-round-btn" href="#">
1992 <svg width="14" height="14" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
1993 <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>
1994 </svg>
1995 </a>
1996 </div>
1997
1998 <div class="wrapper">
1999 <h2 class="easyel-scroll-top-heading"><?php echo esc_html__( 'Scroll Top Settings', 'easy-elements' ); ?></h2>
2000 <form method="post" action="">
2001 <div class="easyel-reading-progressbar-settings-main-wrapper">
2002
2003 <div class="easyel-reading-progressbar-item">
2004 <span class="easy-field-label">
2005 <?php echo esc_html__( 'Icon Type', 'easy-elements' ); ?>
2006 </span>
2007 <label class="easy-field-item">
2008 <select class="easyel-scroll-top-select" name="scroll_top_icon" id="scroll_top_icon_select">
2009 <option value="arrow" <?php selected( $options['scroll_top_icon'] ?? 'arrow', 'arrow' ); ?>>
2010 <?php esc_html_e( 'Arrow', 'easy-elements' ); ?>
2011 </option>
2012 <option value="chevron" <?php selected( $options['scroll_top_icon'] ?? 'arrow', 'chevron' ); ?>>
2013 <?php esc_html_e( 'Chevron', 'easy-elements' ); ?>
2014 </option>
2015 <option value="double" <?php selected( $options['scroll_top_icon'] ?? 'arrow', 'double' ); ?>>
2016 <?php esc_html_e( 'Double Arrow', 'easy-elements' ); ?>
2017 </option>
2018 <option value="custom_icon" <?php selected( $options['scroll_top_icon'] ?? 'arrow', 'custom_icon' ); ?>>
2019 <?php esc_html_e( 'Custom Icon Class', 'easy-elements' ); ?>
2020 </option>
2021 <option value="custom_image" <?php selected( $options['scroll_top_icon'] ?? 'arrow', 'custom_image' ); ?>>
2022 <?php esc_html_e( 'Custom Image', 'easy-elements' ); ?>
2023 </option>
2024 </select>
2025 </label>
2026 </div>
2027
2028 <div class="easyel-reading-progressbar-item easyel-scroll-top-custom-icon-row" style="<?php echo ( ($options['scroll_top_icon'] ?? '') === 'custom_icon' ) ? '' : 'display:none;'; ?>">
2029 <span class="easy-field-label">
2030 <?php esc_html_e( 'Icon Class', 'easy-elements' ); ?>
2031 </span>
2032 <input type="text" name="scroll_top_custom_icon"
2033 placeholder="e.g. fas fa-arrow-up"
2034 value="<?php echo esc_attr( $options['scroll_top_custom_icon'] ?? '' ); ?>">
2035 </div>
2036
2037 <div class="easyel-reading-progressbar-item easyel-scroll-top-custom-image-row" style="<?php echo ( ($options['scroll_top_icon'] ?? '') === 'custom_image' ) ? '' : 'display:none;'; ?>">
2038 <span class="easy-field-label">
2039 <?php esc_html_e( 'Upload Image', 'easy-elements' ); ?>
2040 </span>
2041 <div style="display:flex; align-items:center; gap:10px;">
2042 <input type="hidden" name="scroll_top_custom_image" id="scroll_top_custom_image"
2043 value="<?php echo esc_attr( $options['scroll_top_custom_image'] ?? '' ); ?>">
2044 <button type="button" class="button easyel-scroll-top-upload-btn">
2045 <?php esc_html_e( 'Upload', 'easy-elements' ); ?>
2046 </button>
2047 <button type="button" class="button easyel-scroll-top-remove-btn" style="<?php echo empty( $options['scroll_top_custom_image'] ) ? 'display:none;' : ''; ?>">
2048 <?php esc_html_e( 'Remove', 'easy-elements' ); ?>
2049 </button>
2050 </div>
2051 <?php if ( ! empty( $options['scroll_top_custom_image'] ) ) : ?>
2052 <img src="<?php echo esc_url( $options['scroll_top_custom_image'] ); ?>" class="easyel-scroll-top-image-preview" style="max-width:50px; max-height:50px; margin-top:8px;">
2053 <?php else : ?>
2054 <img src="" class="easyel-scroll-top-image-preview" style="max-width:50px; max-height:50px; margin-top:8px; display:none;">
2055 <?php endif; ?>
2056 </div>
2057
2058 <div class="easyel-reading-progressbar-item">
2059 <span class="easy-field-label">
2060 <?php echo esc_html__( 'Position', 'easy-elements' ); ?>
2061 </span>
2062 <label class="easy-field-item">
2063 <select class="easyel-scroll-top-select" name="scroll_top_position">
2064 <option value="left" <?php selected( $options['scroll_top_position'] ?? 'right', 'left' ); ?>>
2065 <?php esc_html_e( 'Left', 'easy-elements' ); ?>
2066 </option>
2067 <option value="center" <?php selected( $options['scroll_top_position'] ?? 'right', 'center' ); ?>>
2068 <?php esc_html_e( 'Center', 'easy-elements' ); ?>
2069 </option>
2070 <option value="right" <?php selected( $options['scroll_top_position'] ?? 'right', 'right' ); ?>>
2071 <?php esc_html_e( 'Right', 'easy-elements' ); ?>
2072 </option>
2073 </select>
2074 </label>
2075 </div>
2076
2077 <div class="easyel-reading-progressbar-item">
2078 <span class="easy-field-label">
2079 <?php esc_html_e( 'Background Color', 'easy-elements' ); ?>
2080 </span>
2081 <input type="text" class="easyel-color-picker"
2082 name="scroll_top_bg_color"
2083 value="<?php echo esc_attr( $options['scroll_top_bg_color'] ?? '#333333' ); ?>">
2084 </div>
2085
2086 <div class="easyel-reading-progressbar-item">
2087 <span class="easy-field-label">
2088 <?php esc_html_e( 'Icon Color', 'easy-elements' ); ?>
2089 </span>
2090 <input type="text" class="easyel-color-picker"
2091 name="scroll_top_icon_color"
2092 value="<?php echo esc_attr( $options['scroll_top_icon_color'] ?? '#ffffff' ); ?>">
2093 </div>
2094
2095 <div class="easyel-reading-progressbar-item">
2096 <span class="easy-field-label">
2097 <?php esc_html_e( 'Size (px)', 'easy-elements' ); ?>
2098 </span>
2099 <input type="number" name="scroll_top_size"
2100 min="30" max="80"
2101 value="<?php echo esc_attr( $options['scroll_top_size'] ?? '45' ); ?>">
2102 </div>
2103
2104 <div class="easyel-reading-progressbar-item">
2105 <span class="easy-field-label">
2106 <?php esc_html_e( 'Border Radius (%)', 'easy-elements' ); ?>
2107 </span>
2108 <input type="number" name="scroll_top_radius"
2109 min="0" max="50"
2110 value="<?php echo esc_attr( $options['scroll_top_radius'] ?? '50' ); ?>">
2111 </div>
2112
2113 <div class="easyel-reading-progressbar-item">
2114 <span class="easy-field-label">
2115 <?php esc_html_e( 'Border Width (px)', 'easy-elements' ); ?>
2116 </span>
2117 <input type="number" name="scroll_top_border_width"
2118 min="0" max="10"
2119 value="<?php echo esc_attr( $options['scroll_top_border_width'] ?? '0' ); ?>">
2120 </div>
2121
2122 <div class="easyel-reading-progressbar-item">
2123 <span class="easy-field-label">
2124 <?php esc_html_e( 'Border Color', 'easy-elements' ); ?>
2125 </span>
2126 <input type="text" class="easyel-color-picker"
2127 name="scroll_top_border_color"
2128 value="<?php echo esc_attr( $options['scroll_top_border_color'] ?? '#cccccc' ); ?>">
2129 </div>
2130
2131 <div class="easyel-reading-progressbar-item">
2132 <span class="easy-field-label">
2133 <?php esc_html_e( 'Hover Background Color', 'easy-elements' ); ?>
2134 </span>
2135 <input type="text" class="easyel-color-picker"
2136 name="scroll_top_hover_bg_color"
2137 value="<?php echo esc_attr( $options['scroll_top_hover_bg_color'] ?? '#000000' ); ?>">
2138 </div>
2139
2140 <div class="easyel-reading-progressbar-item">
2141 <span class="easy-field-label">
2142 <?php esc_html_e( 'Hover Icon Color', 'easy-elements' ); ?>
2143 </span>
2144 <input type="text" class="easyel-color-picker"
2145 name="scroll_top_hover_icon_color"
2146 value="<?php echo esc_attr( $options['scroll_top_hover_icon_color'] ?? '#ffffff' ); ?>">
2147 </div>
2148
2149 <div class="easyel-reading-progressbar-item">
2150 <span class="easy-field-label">
2151 <?php esc_html_e( 'Hover Border Color', 'easy-elements' ); ?>
2152 </span>
2153 <input type="text" class="easyel-color-picker"
2154 name="scroll_top_hover_border_color"
2155 value="<?php echo esc_attr( $options['scroll_top_hover_border_color'] ?? '#cccccc' ); ?>">
2156 </div>
2157
2158 <div class="easyel-reading-progressbar-item">
2159 <span class="easy-field-label">
2160 <?php esc_html_e( 'Show After Scroll (px)', 'easy-elements' ); ?>
2161 </span>
2162 <input type="number" name="scroll_top_offset"
2163 min="0" max="2000"
2164 value="<?php echo esc_attr( $options['scroll_top_offset'] ?? '300' ); ?>">
2165 </div>
2166
2167 </div>
2168 <div class="easyel-reading-progressbar-save">
2169 <input type="submit"
2170 class="scroll_top_popup_item_save"
2171 name="scroll_top_popup_item_save"
2172 value="<?php echo esc_attr__( 'Save Changes', 'easy-elements' ); ?>">
2173 </div>
2174 </form>
2175 </div>
2176 </div>
2177 <?php
2178 }
2179
2180 public function save_scroll_top_settings() {
2181
2182 if ( ! current_user_can( 'manage_options' ) ) {
2183 wp_send_json_error( __( 'Unauthorized', 'easy-elements' ) );
2184 }
2185
2186 check_ajax_referer( 'easy_elements_nonce', 'nonce' );
2187
2188 if ( ! isset( $_POST['settings'] ) ) {
2189 wp_send_json_error( [ 'message' => 'No settings received' ] );
2190 }
2191
2192 $settings = map_deep( wp_unslash( $_POST['settings'] ), 'sanitize_text_field' );
2193
2194 update_option( 'easyel_scroll_top_settings', $settings );
2195
2196 wp_send_json_success( [ 'message' => 'Saved successfully' ] );
2197 }
2198
2199 /**
2200 * Render Preloader settings popup callback (free extension).
2201 */
2202 public function easyel_preloader_popup_callback() {
2203 $this->easyel_preloader_popup_display();
2204 }
2205
2206 /**
2207 * Render the Preloader settings modal markup.
2208 */
2209 public function easyel_preloader_popup_display() {
2210
2211 $defaults = array(
2212 'preloader_style' => 'circle',
2213 'preloader_bg_color' => '#ffffff',
2214 'preloader_color' => '#5933ff',
2215 'preloader_secondary_color' => '#e0e0e0',
2216 'preloader_size' => 60,
2217 'preloader_speed' => 1.0,
2218 'preloader_min_time' => 500,
2219 'preloader_fadeout_time' => 600,
2220 'preloader_logo' => '',
2221 'preloader_logo_width' => 36,
2222 'preloader_logo_height' => 36,
2223 'preloader_disable_mobile' => 0,
2224 );
2225
2226 $saved = get_option( 'easyel_preloader_settings', array() );
2227 $options = wp_parse_args( is_array( $saved ) ? $saved : array(), $defaults );
2228
2229 $styles = array(
2230 'circle' => __( 'Circle Spinner', 'easy-elements' ),
2231 'dotted_circle' => __( 'Dotted Circle Spinner', 'easy-elements' ),
2232 'dots' => __( 'Bouncing Dots', 'easy-elements' ),
2233 'bars' => __( 'Audio Bars', 'easy-elements' ),
2234 'pulse' => __( 'Pulse', 'easy-elements' ),
2235 'custom_logo' => __( 'Custom Logo', 'easy-elements' ),
2236 );
2237 ?>
2238 <div class="easyel-preloader-popup">
2239 <div class="ajax-search-close-icon">
2240 <a class="easyel-preloader-popup-close-icon rbt-round-btn" href="#">
2241 <svg width="14" height="14" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
2242 <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>
2243 </svg>
2244 </a>
2245 </div>
2246
2247 <div class="wrapper">
2248 <h2 class="easyel-preloader-heading"><?php esc_html_e( 'Preloader Settings', 'easy-elements' ); ?></h2>
2249 <form method="post" action="">
2250 <div class="easyel-reading-progressbar-settings-main-wrapper">
2251
2252 <div class="easyel-reading-progressbar-item">
2253 <span class="easy-field-label"><?php esc_html_e( 'Style', 'easy-elements' ); ?></span>
2254 <label class="easy-field-item">
2255 <select class="easyel-preloader-select" name="preloader_style">
2256 <?php foreach ( $styles as $value => $label ) : ?>
2257 <option value="<?php echo esc_attr( $value ); ?>" <?php selected( $options['preloader_style'], $value ); ?>>
2258 <?php echo esc_html( $label ); ?>
2259 </option>
2260 <?php endforeach; ?>
2261 </select>
2262 </label>
2263 </div>
2264
2265 <div class="easyel-reading-progressbar-item easyel-preloader-field-logo-only">
2266 <span class="easy-field-label"><?php esc_html_e( 'Logo Image URL', 'easy-elements' ); ?></span>
2267 <div style="display:flex; align-items:center; gap:10px;">
2268 <input type="text" class="easyel-preloader-logo-input"
2269 name="preloader_logo"
2270 placeholder="https://example.com/logo.png"
2271 value="<?php echo esc_attr( $options['preloader_logo'] ); ?>">
2272 <button type="button" class="button easyel-preloader-upload-btn">
2273 <?php esc_html_e( 'Upload', 'easy-elements' ); ?>
2274 </button>
2275 <button type="button" class="button easyel-preloader-remove-btn" style="<?php echo empty( $options['preloader_logo'] ) ? 'display:none;' : ''; ?>">
2276 <?php esc_html_e( 'Remove', 'easy-elements' ); ?>
2277 </button>
2278 </div>
2279 </div>
2280
2281 <div class="easyel-reading-progressbar-item easyel-preloader-field-logo-only">
2282 <span class="easy-field-label"><?php esc_html_e( 'Logo Width (px)', 'easy-elements' ); ?></span>
2283 <input type="number" name="preloader_logo_width"
2284 min="5" max="500" step="1"
2285 value="<?php echo esc_attr( $options['preloader_logo_width'] ); ?>">
2286 </div>
2287
2288 <div class="easyel-reading-progressbar-item easyel-preloader-field-logo-only">
2289 <span class="easy-field-label"><?php esc_html_e( 'Logo Height (px)', 'easy-elements' ); ?></span>
2290 <input type="number" name="preloader_logo_height"
2291 min="5" max="500" step="1"
2292 value="<?php echo esc_attr( $options['preloader_logo_height'] ); ?>">
2293 </div>
2294
2295 <div class="easyel-reading-progressbar-item">
2296 <span class="easy-field-label"><?php esc_html_e( 'Background Color', 'easy-elements' ); ?></span>
2297 <input type="text" class="easyel-color-picker"
2298 name="preloader_bg_color"
2299 value="<?php echo esc_attr( $options['preloader_bg_color'] ); ?>">
2300 </div>
2301
2302 <div class="easyel-reading-progressbar-item">
2303 <span class="easy-field-label"><?php esc_html_e( 'Spinner Color', 'easy-elements' ); ?></span>
2304 <input type="text" class="easyel-color-picker"
2305 name="preloader_color"
2306 value="<?php echo esc_attr( $options['preloader_color'] ); ?>">
2307 </div>
2308
2309 <div class="easyel-reading-progressbar-item easyel-preloader-field-secondary-only">
2310 <span class="easy-field-label"><?php esc_html_e( 'Spinner Secondary Color', 'easy-elements' ); ?></span>
2311 <input type="text" class="easyel-color-picker"
2312 name="preloader_secondary_color"
2313 value="<?php echo esc_attr( $options['preloader_secondary_color'] ); ?>">
2314 </div>
2315
2316 <div class="easyel-reading-progressbar-item">
2317 <span class="easy-field-label"><?php esc_html_e( 'Size (px)', 'easy-elements' ); ?></span>
2318 <input type="number" name="preloader_size"
2319 min="10" max="200" step="1"
2320 value="<?php echo esc_attr( $options['preloader_size'] ); ?>">
2321 </div>
2322
2323 <div class="easyel-reading-progressbar-item">
2324 <span class="easy-field-label"><?php esc_html_e( 'Animation Speed (s)', 'easy-elements' ); ?></span>
2325 <input type="number" name="preloader_speed"
2326 min="0.1" max="5" step="0.1"
2327 value="<?php echo esc_attr( $options['preloader_speed'] ); ?>">
2328 </div>
2329
2330 <div class="easyel-reading-progressbar-item">
2331 <span class="easy-field-label"><?php esc_html_e( 'Minimum Display Time (ms)', 'easy-elements' ); ?></span>
2332 <input type="number" name="preloader_min_time"
2333 min="0" max="10000" step="50"
2334 value="<?php echo esc_attr( $options['preloader_min_time'] ); ?>">
2335 </div>
2336
2337 <div class="easyel-reading-progressbar-item">
2338 <span class="easy-field-label"><?php esc_html_e( 'Fade Out Duration (ms)', 'easy-elements' ); ?></span>
2339 <input type="number" name="preloader_fadeout_time"
2340 min="0" max="3000" step="50"
2341 value="<?php echo esc_attr( $options['preloader_fadeout_time'] ); ?>">
2342 </div>
2343
2344 <div class="easyel-smooth-scroll-item">
2345 <span class="easy-field-label"><?php esc_html_e( 'Disable on Mobile', 'easy-elements' ); ?></span>
2346 <label class="easy-field-item easy-toggle-switch">
2347 <input type="checkbox" name="preloader_disable_mobile" value="1"
2348 <?php checked( ! empty( $options['preloader_disable_mobile'] ), true ); ?>>
2349 <span class="slider round"></span>
2350 </label>
2351 </div>
2352
2353 </div>
2354 <div class="easyel-reading-progressbar-save">
2355 <input type="submit"
2356 class="easyel_preloader_popup_item_save"
2357 name="easyel_preloader_popup_item_save"
2358 value="<?php echo esc_attr__( 'Save Changes', 'easy-elements' ); ?>">
2359 </div>
2360 </form>
2361 </div>
2362 </div>
2363 <?php
2364 }
2365
2366 /**
2367 * AJAX handler to save Preloader settings.
2368 */
2369 public function easyel_save_preloader_settings() {
2370
2371 if ( ! current_user_can( 'manage_options' ) ) {
2372 wp_send_json_error( __( 'Unauthorized', 'easy-elements' ) );
2373 }
2374
2375 check_ajax_referer( 'easy_elements_nonce', 'nonce' );
2376
2377 if ( ! isset( $_POST['settings'] ) ) {
2378 wp_send_json_error( array( 'message' => __( 'No settings received', 'easy-elements' ) ) );
2379 }
2380
2381 // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
2382 $raw = wp_unslash( $_POST['settings'] );
2383 if ( ! is_array( $raw ) ) {
2384 $raw = array();
2385 }
2386
2387 $allowed_styles = array( 'circle', 'dotted_circle', 'dots', 'bars', 'pulse', 'custom_logo' );
2388
2389 $clean = array(
2390 'preloader_style' => isset( $raw['preloader_style'] ) && in_array( $raw['preloader_style'], $allowed_styles, true )
2391 ? $raw['preloader_style']
2392 : 'circle',
2393 'preloader_bg_color' => isset( $raw['preloader_bg_color'] )
2394 ? ( sanitize_hex_color( $raw['preloader_bg_color'] ) ? sanitize_hex_color( $raw['preloader_bg_color'] ) : '#ffffff' )
2395 : '#ffffff',
2396 'preloader_color' => isset( $raw['preloader_color'] )
2397 ? ( sanitize_hex_color( $raw['preloader_color'] ) ? sanitize_hex_color( $raw['preloader_color'] ) : '#5933ff' )
2398 : '#5933ff',
2399 'preloader_secondary_color' => isset( $raw['preloader_secondary_color'] )
2400 ? ( sanitize_hex_color( $raw['preloader_secondary_color'] ) ? sanitize_hex_color( $raw['preloader_secondary_color'] ) : '#e0e0e0' )
2401 : '#e0e0e0',
2402 'preloader_size' => isset( $raw['preloader_size'] ) ? max( 10, min( 200, absint( $raw['preloader_size'] ) ) ) : 60,
2403 'preloader_speed' => isset( $raw['preloader_speed'] ) ? max( 0.1, min( 5, (float) $raw['preloader_speed'] ) ) : 1.0,
2404 'preloader_min_time' => isset( $raw['preloader_min_time'] ) ? max( 0, min( 10000, absint( $raw['preloader_min_time'] ) ) ) : 500,
2405 'preloader_fadeout_time' => isset( $raw['preloader_fadeout_time'] ) ? max( 0, min( 3000, absint( $raw['preloader_fadeout_time'] ) ) ) : 600,
2406 'preloader_logo' => isset( $raw['preloader_logo'] ) ? esc_url_raw( $raw['preloader_logo'] ) : '',
2407 'preloader_logo_width' => isset( $raw['preloader_logo_width'] ) ? max( 5, min( 500, absint( $raw['preloader_logo_width'] ) ) ) : 36,
2408 'preloader_logo_height' => isset( $raw['preloader_logo_height'] ) ? max( 5, min( 500, absint( $raw['preloader_logo_height'] ) ) ) : 36,
2409 'preloader_disable_mobile' => ! empty( $raw['preloader_disable_mobile'] ) ? 1 : 0,
2410 );
2411
2412 update_option( 'easyel_preloader_settings', $clean );
2413
2414 wp_send_json_success( array( 'message' => __( 'Saved successfully', 'easy-elements' ) ) );
2415 }
2416
2417 }
2418
2419 // Initialize the plugin
2420 Admin_Settings::get_instance();