PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.78
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.78
51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 51.1.46 51.1.47 51.1.49 All 37 releases
king-addons / includes / admin / layouts / settings-page.php

settings-page.php in King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder 51.1.78, at includes/admin/layouts/settings-page.php

462 lines 25.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Settings admin page - V3 Premium style inspired design.
4 *
5 * @package King_Addons
6 */
7
8 if (!defined('ABSPATH')) {
9 exit;
10 }
11
12 // Theme mode is per-user
13 $theme_mode = get_user_meta(get_current_user_id(), 'king_addons_theme_mode', true);
14 $allowed_theme_modes = ['dark', 'light', 'auto'];
15 if (!in_array($theme_mode, $allowed_theme_modes, true)) {
16 $theme_mode = 'dark';
17 }
18
19 // Handle form submission
20 if (isset($_POST['king_addons_settings_submit_settings'])) {
21 if (
22 !isset($_POST['king_addons_settings_nonce_field']) ||
23 !wp_verify_nonce($_POST['king_addons_settings_nonce_field'], 'king_addons_settings_save_settings')
24 ) {
25 wp_die('Security check failed.');
26 }
27
28 update_option('king_addons_google_map_api_key', sanitize_text_field($_POST['king_addons_google_map_api_key']));
29 update_option('king_addons_mailchimp_api_key', sanitize_text_field($_POST['king_addons_mailchimp_api_key']));
30 update_option('king_addons_recaptcha_v3_site_key', sanitize_text_field($_POST['king_addons_recaptcha_v3_site_key']));
31 update_option('king_addons_recaptcha_v3_secret_key', sanitize_text_field($_POST['king_addons_recaptcha_v3_secret_key']));
32 update_option('king_addons_recaptcha_v3_score_threshold', floatval($_POST['king_addons_recaptcha_v3_score_threshold']));
33
34 // Lightbox colors
35 update_option('king_addons_lightbox_bg_color', sanitize_text_field($_POST['king_addons_lightbox_bg_color']));
36 update_option('king_addons_lightbox_toolbar_color', sanitize_text_field($_POST['king_addons_lightbox_toolbar_color']));
37 update_option('king_addons_lightbox_caption_color', sanitize_text_field($_POST['king_addons_lightbox_caption_color']));
38 update_option('king_addons_lightbox_gallery_color', sanitize_text_field($_POST['king_addons_lightbox_gallery_color']));
39 update_option('king_addons_lightbox_pb_color', sanitize_text_field($_POST['king_addons_lightbox_pb_color']));
40 update_option('king_addons_lightbox_ui_color', sanitize_text_field($_POST['king_addons_lightbox_ui_color']));
41 update_option('king_addons_lightbox_ui_hover_color', sanitize_text_field($_POST['king_addons_lightbox_ui_hover_color']));
42 update_option('king_addons_lightbox_text_color', sanitize_text_field($_POST['king_addons_lightbox_text_color']));
43
44 // Lightbox numbers
45 update_option('king_addons_lightbox_icon_size', intval($_POST['king_addons_lightbox_icon_size']));
46 update_option('king_addons_lightbox_text_size', intval($_POST['king_addons_lightbox_text_size']));
47 update_option('king_addons_lightbox_arrow_size', intval($_POST['king_addons_lightbox_arrow_size']));
48
49 // Import Performance
50 $improve_import = isset($_POST['king_addons_improve_import_performance']) ? '1' : '0';
51 update_option('king_addons_improve_import_performance', $improve_import);
52
53 // Template Catalog Button
54 if (function_exists('king_addons_freemius') && king_addons_freemius()->can_use_premium_code()) {
55 $disable_template_catalog = isset($_POST['king_addons_disable_template_catalog_button']) ? '1' : '0';
56 update_option('king_addons_disable_template_catalog_button', $disable_template_catalog);
57 }
58
59 add_settings_error('king_addons_messages', 'king_addons_message', esc_html__('Settings Saved', 'king-addons'), 'updated');
60 }
61
62 // Get existing values
63 $google_map_key = get_option('king_addons_google_map_api_key', '');
64 $mailchimp_key = get_option('king_addons_mailchimp_api_key', '');
65 $recaptcha_site_key = get_option('king_addons_recaptcha_v3_site_key', '');
66 $recaptcha_secret_key = get_option('king_addons_recaptcha_v3_secret_key', '');
67 $recaptcha_score_threshold = get_option('king_addons_recaptcha_v3_score_threshold', 0.5);
68 $improve_import_performance = get_option('king_addons_improve_import_performance', '1');
69 $disable_template_catalog_button = get_option('king_addons_disable_template_catalog_button', '0');
70
71 // Enqueue the shared CSS
72 $css_url = KING_ADDONS_URL . 'includes/admin/layouts/shared/admin-v3-styles.css';
73 $css_path = KING_ADDONS_PATH . 'includes/admin/layouts/shared/admin-v3-styles.css';
74 $css_version = file_exists($css_path) ? filemtime($css_path) : KING_ADDONS_VERSION;
75 ?>
76
77 <link rel="stylesheet" href="<?php echo esc_url($css_url); ?>?v=<?php echo esc_attr($css_version); ?>">
78
79 <script>
80 document.body.classList.add('ka-admin-v3');
81 (function() {
82 const mode = '<?php echo esc_js($theme_mode); ?>';
83 const mql = window.matchMedia ? window.matchMedia('(prefers-color-scheme: dark)') : null;
84 const isDark = mode === 'auto' ? !!(mql && mql.matches) : mode === 'dark';
85 document.body.classList.toggle('ka-v3-dark', isDark);
86 document.documentElement.classList.toggle('ka-v3-dark', isDark);
87 })();
88 </script>
89
90 <div class="ka-admin-wrap">
91 <?php settings_errors('king_addons_messages'); ?>
92 <!-- Header -->
93 <div class="ka-admin-header">
94 <div class="ka-admin-header-left">
95 <div class="ka-admin-header-icon purple">
96 <span class="dashicons dashicons-admin-generic"></span>
97 </div>
98 <div>
99 <h1 class="ka-admin-title"><?php esc_html_e('Settings', 'king-addons'); ?></h1>
100 <p class="ka-admin-subtitle"><?php esc_html_e('Configure API keys and global options for King Addons.', 'king-addons'); ?></p>
101 </div>
102 </div>
103 <div class="ka-admin-header-actions">
104 <div class="ka-v3-segmented" id="ka-v3-theme-segment" role="radiogroup" aria-label="<?php echo esc_attr(esc_html__('Theme', 'king-addons')); ?>" data-active="<?php echo esc_attr($theme_mode); ?>">
105 <span class="ka-v3-segmented-indicator" aria-hidden="true"></span>
106 <button type="button" class="ka-v3-segmented-btn" data-theme="light" aria-pressed="<?php echo $theme_mode === 'light' ? 'true' : 'false'; ?>">
107 <span class="ka-v3-segmented-icon" aria-hidden="true">☀︎</span>
108 <?php esc_html_e('Light', 'king-addons'); ?>
109 </button>
110 <button type="button" class="ka-v3-segmented-btn" data-theme="dark" aria-pressed="<?php echo $theme_mode === 'dark' ? 'true' : 'false'; ?>">
111 <span class="ka-v3-segmented-icon" aria-hidden="true"></span>
112 <?php esc_html_e('Dark', 'king-addons'); ?>
113 </button>
114 <button type="button" class="ka-v3-segmented-btn" data-theme="auto" aria-pressed="<?php echo $theme_mode === 'auto' ? 'true' : 'false'; ?>">
115 <span class="ka-v3-segmented-icon" aria-hidden="true"></span>
116 <?php esc_html_e('Auto', 'king-addons'); ?>
117 </button>
118 </div>
119 <a href="https://www.youtube.com/@kingaddons/videos" target="_blank" class="ka-btn ka-btn-secondary">
120 <span class="dashicons dashicons-book"></span>
121 <?php esc_html_e('Guides', 'king-addons'); ?>
122 </a>
123 </div>
124 </div>
125
126 <!-- Tabs Navigation -->
127 <div class="ka-tabs">
128 <button type="button" class="ka-tab active" data-tab="integrations"><?php esc_html_e('Integrations', 'king-addons'); ?></button>
129 <button type="button" class="ka-tab" data-tab="lightbox"><?php esc_html_e('Lightbox', 'king-addons'); ?></button>
130 <button type="button" class="ka-tab" data-tab="performance"><?php esc_html_e('Performance', 'king-addons'); ?></button>
131 </div>
132
133 <form method="post" action="">
134 <?php wp_nonce_field('king_addons_settings_save_settings', 'king_addons_settings_nonce_field'); ?>
135
136 <!-- Integrations Tab -->
137 <div class="ka-tab-content active" data-tab="integrations">
138 <div class="ka-card">
139 <div class="ka-card-header">
140 <span class="dashicons dashicons-admin-plugins"></span>
141 <h2><?php esc_html_e('API Keys', 'king-addons'); ?></h2>
142 </div>
143 <div class="ka-card-body">
144 <div class="ka-row">
145 <div class="ka-row-label"><?php esc_html_e('Google Map API Key', 'king-addons'); ?></div>
146 <div class="ka-row-field">
147 <input type="text" name="king_addons_google_map_api_key" value="<?php echo esc_attr($google_map_key); ?>" placeholder="Abc_42..." />
148 <p class="ka-row-desc">
149 <?php esc_html_e('Enter your Google Map API key from Google Cloud Platform.', 'king-addons'); ?>
150 <a href="https://www.youtube.com/watch?v=O5cUoVpVUjU" target="_blank"><?php esc_html_e('Learn how →', 'king-addons'); ?></a>
151 </p>
152 </div>
153 </div>
154 <div class="ka-row">
155 <div class="ka-row-label"><?php esc_html_e('MailChimp API Key', 'king-addons'); ?></div>
156 <div class="ka-row-field">
157 <input type="text" name="king_addons_mailchimp_api_key" value="<?php echo esc_attr($mailchimp_key); ?>" />
158 <p class="ka-row-desc">
159 <?php esc_html_e('Insert your MailChimp API key for mailing features.', 'king-addons'); ?>
160 <a href="https://mailchimp.com/help/about-api-keys/" target="_blank"><?php esc_html_e('Learn how →', 'king-addons'); ?></a>
161 </p>
162 </div>
163 </div>
164 </div>
165 </div>
166
167 <div class="ka-card">
168 <div class="ka-card-header">
169 <span class="dashicons dashicons-shield"></span>
170 <h2><?php esc_html_e('reCAPTCHA v3', 'king-addons'); ?></h2>
171 </div>
172 <div class="ka-card-body">
173 <div class="ka-row">
174 <div class="ka-row-label"><?php esc_html_e('Site Key', 'king-addons'); ?></div>
175 <div class="ka-row-field">
176 <input type="text" name="king_addons_recaptcha_v3_site_key" value="<?php echo esc_attr($recaptcha_site_key); ?>" />
177 <p class="ka-row-desc">
178 <?php esc_html_e('Enter your reCAPTCHA Site Key for Form Builder.', 'king-addons'); ?>
179 <a href="https://www.google.com/recaptcha/about/" target="_blank"><?php esc_html_e('Get keys →', 'king-addons'); ?></a>
180 </p>
181 </div>
182 </div>
183 <div class="ka-row">
184 <div class="ka-row-label"><?php esc_html_e('Secret Key', 'king-addons'); ?></div>
185 <div class="ka-row-field">
186 <input type="password" name="king_addons_recaptcha_v3_secret_key" value="<?php echo esc_attr($recaptcha_secret_key); ?>" />
187 </div>
188 </div>
189 <div class="ka-row">
190 <div class="ka-row-label"><?php esc_html_e('Score Threshold', 'king-addons'); ?></div>
191 <div class="ka-row-field">
192 <input type="number" step="0.1" min="0" max="1" name="king_addons_recaptcha_v3_score_threshold" value="<?php echo esc_attr($recaptcha_score_threshold); ?>" style="max-width:100px" />
193 <p class="ka-row-desc"><?php esc_html_e('Score threshold 0.0 to 1.0 (default 0.5). Higher values are more strict.', 'king-addons'); ?></p>
194 </div>
195 </div>
196 </div>
197 </div>
198 </div>
199
200 <!-- Lightbox Tab -->
201 <div class="ka-tab-content" data-tab="lightbox">
202 <div class="ka-card">
203 <div class="ka-card-header">
204 <span class="dashicons dashicons-format-gallery"></span>
205 <h2><?php esc_html_e('Lightbox Colors', 'king-addons'); ?></h2>
206 </div>
207 <div class="ka-card-body">
208 <div class="ka-grid-2">
209 <div class="ka-row">
210 <div class="ka-row-label"><?php esc_html_e('Text Color', 'king-addons'); ?></div>
211 <div class="ka-row-field">
212 <div class="ka-color-wrap">
213 <input type="text" name="king_addons_lightbox_text_color" data-alpha-enabled="true" data-default-color="#efefef" value="<?php echo esc_attr(get_option('king_addons_lightbox_text_color', '#efefef')); ?>" class="color-picker" />
214 </div>
215 </div>
216 </div>
217 <div class="ka-row">
218 <div class="ka-row-label"><?php esc_html_e('Background', 'king-addons'); ?></div>
219 <div class="ka-row-field">
220 <div class="ka-color-wrap">
221 <input type="text" name="king_addons_lightbox_bg_color" data-alpha-enabled="true" data-default-color="rgba(0,0,0,0.6)" value="<?php echo esc_attr(get_option('king_addons_lightbox_bg_color', 'rgba(0,0,0,0.6)')); ?>" class="color-picker" />
222 </div>
223 </div>
224 </div>
225 <div class="ka-row">
226 <div class="ka-row-label"><?php esc_html_e('Toolbar BG', 'king-addons'); ?></div>
227 <div class="ka-row-field">
228 <div class="ka-color-wrap">
229 <input type="text" name="king_addons_lightbox_toolbar_color" data-alpha-enabled="true" data-default-color="rgba(0,0,0,0.8)" value="<?php echo esc_attr(get_option('king_addons_lightbox_toolbar_color', 'rgba(0,0,0,0.8)')); ?>" class="color-picker" />
230 </div>
231 </div>
232 </div>
233 <div class="ka-row">
234 <div class="ka-row-label"><?php esc_html_e('Caption BG', 'king-addons'); ?></div>
235 <div class="ka-row-field">
236 <div class="ka-color-wrap">
237 <input type="text" name="king_addons_lightbox_caption_color" data-alpha-enabled="true" data-default-color="rgba(0,0,0,0.8)" value="<?php echo esc_attr(get_option('king_addons_lightbox_caption_color', 'rgba(0,0,0,0.8)')); ?>" class="color-picker" />
238 </div>
239 </div>
240 </div>
241 <div class="ka-row">
242 <div class="ka-row-label"><?php esc_html_e('Gallery BG', 'king-addons'); ?></div>
243 <div class="ka-row-field">
244 <div class="ka-color-wrap">
245 <input type="text" name="king_addons_lightbox_gallery_color" data-alpha-enabled="true" data-default-color="#444444" value="<?php echo esc_attr(get_option('king_addons_lightbox_gallery_color', '#444444')); ?>" class="color-picker" />
246 </div>
247 </div>
248 </div>
249 <div class="ka-row">
250 <div class="ka-row-label"><?php esc_html_e('Progress Bar', 'king-addons'); ?></div>
251 <div class="ka-row-field">
252 <div class="ka-color-wrap">
253 <input type="text" name="king_addons_lightbox_pb_color" data-alpha-enabled="true" data-default-color="#8a8a8a" value="<?php echo esc_attr(get_option('king_addons_lightbox_pb_color', '#8a8a8a')); ?>" class="color-picker" />
254 </div>
255 </div>
256 </div>
257 <div class="ka-row">
258 <div class="ka-row-label"><?php esc_html_e('UI Color', 'king-addons'); ?></div>
259 <div class="ka-row-field">
260 <div class="ka-color-wrap">
261 <input type="text" name="king_addons_lightbox_ui_color" data-alpha-enabled="true" data-default-color="#efefef" value="<?php echo esc_attr(get_option('king_addons_lightbox_ui_color', '#efefef')); ?>" class="color-picker" />
262 </div>
263 </div>
264 </div>
265 <div class="ka-row">
266 <div class="ka-row-label"><?php esc_html_e('UI Hover', 'king-addons'); ?></div>
267 <div class="ka-row-field">
268 <div class="ka-color-wrap">
269 <input type="text" name="king_addons_lightbox_ui_hover_color" data-alpha-enabled="true" data-default-color="#ffffff" value="<?php echo esc_attr(get_option('king_addons_lightbox_ui_hover_color', '#ffffff')); ?>" class="color-picker" />
270 </div>
271 </div>
272 </div>
273 </div>
274 </div>
275 </div>
276
277 <div class="ka-card">
278 <div class="ka-card-header">
279 <span class="dashicons dashicons-editor-expand"></span>
280 <h2><?php esc_html_e('Lightbox Sizes', 'king-addons'); ?></h2>
281 </div>
282 <div class="ka-card-body">
283 <div class="ka-row">
284 <div class="ka-row-label"><?php esc_html_e('Icon Size', 'king-addons'); ?></div>
285 <div class="ka-row-field">
286 <input type="number" name="king_addons_lightbox_icon_size" value="<?php echo esc_attr(get_option('king_addons_lightbox_icon_size', '20')); ?>" style="max-width:100px" />
287 <span style="color:#86868b;margin-left:8px">px</span>
288 </div>
289 </div>
290 <div class="ka-row">
291 <div class="ka-row-label"><?php esc_html_e('Arrow Size', 'king-addons'); ?></div>
292 <div class="ka-row-field">
293 <input type="number" name="king_addons_lightbox_arrow_size" value="<?php echo esc_attr(get_option('king_addons_lightbox_arrow_size', '35')); ?>" style="max-width:100px" />
294 <span style="color:#86868b;margin-left:8px">px</span>
295 </div>
296 </div>
297 <div class="ka-row">
298 <div class="ka-row-label"><?php esc_html_e('Text Size', 'king-addons'); ?></div>
299 <div class="ka-row-field">
300 <input type="number" name="king_addons_lightbox_text_size" value="<?php echo esc_attr(get_option('king_addons_lightbox_text_size', '14')); ?>" style="max-width:100px" />
301 <span style="color:#86868b;margin-left:8px">px</span>
302 </div>
303 </div>
304 </div>
305 </div>
306 </div>
307
308 <!-- Performance Tab -->
309 <div class="ka-tab-content" data-tab="performance">
310 <div class="ka-card">
311 <div class="ka-card-header">
312 <span class="dashicons dashicons-download"></span>
313 <h2><?php esc_html_e('Import Templates', 'king-addons'); ?></h2>
314 </div>
315 <div class="ka-card-body">
316 <div class="ka-row">
317 <div class="ka-row-label"><?php esc_html_e('Performance Mode', 'king-addons'); ?></div>
318 <div class="ka-row-field">
319 <label class="ka-toggle">
320 <input type="checkbox" name="king_addons_improve_import_performance" value="1" <?php checked($improve_import_performance, '1'); ?> />
321 <span class="ka-toggle-slider"></span>
322 <span class="ka-toggle-label"><?php esc_html_e('Improve import on low-performance servers', 'king-addons'); ?></span>
323 </label>
324 <p class="ka-row-desc"><?php esc_html_e('Applies optimizations like increased PHP limits during import. Enabled by default.', 'king-addons'); ?></p>
325 </div>
326 </div>
327 <?php if (function_exists('king_addons_freemius') && king_addons_freemius()->can_use_premium_code()) : ?>
328 <div class="ka-row">
329 <div class="ka-row-label"><?php esc_html_e('Template Button', 'king-addons'); ?><span class="ka-pro-badge">PRO</span></div>
330 <div class="ka-row-field">
331 <label class="ka-toggle">
332 <input type="checkbox" name="king_addons_disable_template_catalog_button" value="1" <?php checked($disable_template_catalog_button, '1'); ?> />
333 <span class="ka-toggle-slider"></span>
334 <span class="ka-toggle-label"><?php esc_html_e('Hide "Start with a Template" button in editor', 'king-addons'); ?></span>
335 </label>
336 </div>
337 </div>
338 <?php endif; ?>
339 </div>
340 </div>
341 </div>
342
343 <div class="ka-card">
344 <div class="ka-submit">
345 <button type="submit" name="king_addons_settings_submit_settings" class="ka-btn ka-btn-primary">
346 <?php esc_html_e('Save Settings', 'king-addons'); ?>
347 </button>
348 </div>
349 </div>
350 </form>
351 </div>
352
353 <?php
354 // Enqueue color picker
355 wp_enqueue_style('wp-color-picker');
356 wp_enqueue_script('wp-color-picker');
357 ?>
358 <script>
359 (function($) {
360 'use strict';
361
362 $(document).ready(function() {
363 const ajaxUrl = '<?php echo esc_url(admin_url('admin-ajax.php')); ?>';
364 const nonce = '<?php echo esc_js(wp_create_nonce('king_addons_dashboard_ui')); ?>';
365
366 // Theme segmented control (dashboard-style)
367 const $themeSegment = $('#ka-v3-theme-segment');
368 const $themeSegmentButtons = $themeSegment.find('.ka-v3-segmented-btn');
369 const themeMql = window.matchMedia ? window.matchMedia('(prefers-color-scheme: dark)') : null;
370 let themeMode = ($themeSegment.attr('data-active') || 'dark').toString();
371 let themeMqlHandler = null;
372
373 function saveUISetting(key, value) {
374 $.post(ajaxUrl, {
375 action: 'king_addons_save_dashboard_ui',
376 nonce: nonce,
377 key: key,
378 value: value
379 });
380 }
381
382 function updateSegment(mode) {
383 $themeSegment.attr('data-active', mode);
384 $themeSegmentButtons.each(function() {
385 const theme = $(this).data('theme');
386 $(this).attr('aria-pressed', theme === mode ? 'true' : 'false');
387 });
388 }
389
390 function applyThemeClass(isDark) {
391 $('body').toggleClass('ka-v3-dark', isDark);
392 document.documentElement.classList.toggle('ka-v3-dark', isDark);
393 }
394
395 function setThemeMode(mode, save) {
396 themeMode = mode;
397 updateSegment(mode);
398
399 if (themeMqlHandler && themeMql) {
400 if (themeMql.removeEventListener) {
401 themeMql.removeEventListener('change', themeMqlHandler);
402 } else if (themeMql.removeListener) {
403 themeMql.removeListener(themeMqlHandler);
404 }
405 themeMqlHandler = null;
406 }
407
408 if (mode === 'auto') {
409 applyThemeClass(!!(themeMql && themeMql.matches));
410 themeMqlHandler = function(e) {
411 if (themeMode !== 'auto') {
412 return;
413 }
414 applyThemeClass(!!e.matches);
415 };
416 if (themeMql) {
417 if (themeMql.addEventListener) {
418 themeMql.addEventListener('change', themeMqlHandler);
419 } else if (themeMql.addListener) {
420 themeMql.addListener(themeMqlHandler);
421 }
422 }
423 } else {
424 applyThemeClass(mode === 'dark');
425 }
426
427 if (save) {
428 saveUISetting('theme_mode', mode);
429 }
430 }
431
432 $themeSegment.on('click', '.ka-v3-segmented-btn', function(e) {
433 e.preventDefault();
434 const mode = ($(this).data('theme') || 'dark').toString();
435 setThemeMode(mode, true);
436 });
437
438 // Ensure mode applies for Auto (listener + system state)
439 setThemeMode(themeMode, false);
440
441 // Tab navigation
442 $('.ka-tab').on('click', function() {
443 const target = $(this).data('tab');
444 $('.ka-tab').removeClass('active');
445 $(this).addClass('active');
446 $('.ka-tab-content').removeClass('active');
447 $(`.ka-tab-content[data-tab="${target}"]`).addClass('active');
448 });
449
450 // Initialize color pickers
451 if ($.fn.wpColorPicker) {
452 $('.color-picker').each(function() {
453 var $input = $(this);
454 $input.wpColorPicker({
455 defaultColor: $input.data('default-color') || ''
456 });
457 });
458 }
459 });
460 })(jQuery);
461 </script>
462