PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.83
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.83
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 / extensions / Maintenance_Mode / assets / admin.js

admin.js in King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder 51.1.83, at includes/extensions/Maintenance_Mode/assets/admin.js

227 lines 7.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function($) {
2 'use strict';
3
4 function toggleSections(source) {
5 $('.kng-maintenance-section').removeClass('is-active');
6 $('.kng-maintenance-section[data-section="' + source + '"]').addClass('is-active');
7 }
8
9 function toggleTemplateContent(templateId) {
10 $('.kng-maintenance-content-block').removeClass('is-active');
11 $('.kng-maintenance-content-block[data-template="' + templateId + '"]').addClass('is-active');
12 }
13
14 $(document).ready(function() {
15 var $sourceInputs = $('input[name="kng_maintenance_settings[template_source]"]');
16 var activeSource = $sourceInputs.filter(':checked').val() || 'built_in';
17 toggleSections(activeSource);
18
19 var $templateInputs = $('input[name="kng_maintenance_settings[template_id]"]');
20 var activeTemplate = $templateInputs.filter(':checked').val() || 'minimal';
21 toggleTemplateContent(activeTemplate);
22
23 $sourceInputs.on('change', function() {
24 toggleSections($(this).val());
25 });
26
27 $templateInputs.on('change', function() {
28 toggleTemplateContent($(this).val());
29 });
30
31 var $segment = $('#ka-v3-theme-segment');
32 var $buttons = $segment.find('.ka-v3-segmented-btn');
33 var mql = window.matchMedia ? window.matchMedia('(prefers-color-scheme: dark)') : null;
34 var mode = ($segment.attr('data-active') || 'dark').toString();
35 var mqlHandler = null;
36
37 function saveUISetting(value) {
38 if (!window.KNGMaintenance) {
39 return;
40 }
41 $.post(KNGMaintenance.ajaxUrl, {
42 action: 'king_addons_save_dashboard_ui',
43 nonce: KNGMaintenance.themeNonce,
44 key: 'theme_mode',
45 value: value
46 });
47 }
48
49 function updateSegment(activeMode) {
50 $segment.attr('data-active', activeMode);
51 $buttons.each(function() {
52 var theme = ($(this).data('theme') || 'dark').toString();
53 $(this).attr('aria-pressed', theme === activeMode ? 'true' : 'false');
54 });
55 }
56
57 function applyTheme(isDark) {
58 $('body').toggleClass('ka-v3-dark', isDark);
59 document.documentElement.classList.toggle('ka-v3-dark', isDark);
60 }
61
62 function setThemeMode(nextMode, save) {
63 mode = (nextMode || 'dark').toString();
64 updateSegment(mode);
65
66 if (mqlHandler && mql) {
67 if (mql.removeEventListener) {
68 mql.removeEventListener('change', mqlHandler);
69 } else if (mql.removeListener) {
70 mql.removeListener(mqlHandler);
71 }
72 mqlHandler = null;
73 }
74
75 if (mode === 'auto') {
76 applyTheme(!!(mql && mql.matches));
77 mqlHandler = function(e) {
78 if (mode !== 'auto') {
79 return;
80 }
81 applyTheme(!!e.matches);
82 };
83 if (mql) {
84 if (mql.addEventListener) {
85 mql.addEventListener('change', mqlHandler);
86 } else if (mql.addListener) {
87 mql.addListener(mqlHandler);
88 }
89 }
90 } else {
91 applyTheme(mode === 'dark');
92 }
93
94 if (save) {
95 saveUISetting(mode);
96 }
97 }
98
99 $segment.on('click', '.ka-v3-segmented-btn', function(e) {
100 e.preventDefault();
101 setThemeMode(($(this).data('theme') || 'dark').toString(), true);
102 });
103
104 window.kaV3ToggleDark = function() {
105 var isDark = $('body').hasClass('ka-v3-dark');
106 setThemeMode(isDark ? 'light' : 'dark', true);
107 };
108
109 setThemeMode(mode, false);
110
111 function nextIndex($container) {
112 var max = -1;
113 $container.find('.kng-repeat-row').each(function() {
114 var idx = parseInt($(this).attr('data-index'), 10);
115 if (!isNaN(idx)) {
116 max = Math.max(max, idx);
117 }
118 });
119 return max + 1;
120 }
121
122 function addRowFromTemplate(templateId, $target) {
123 var tmpl = document.getElementById(templateId);
124 if (!tmpl || !tmpl.content) {
125 return;
126 }
127 var idx = nextIndex($target);
128 var html = tmpl.innerHTML.replace(/__INDEX__/g, String(idx));
129 $target.append($(html));
130 }
131
132 $(document).on('click', '#kng-add-window', function(e) {
133 e.preventDefault();
134 addRowFromTemplate('kng-maintenance-window-template', $('#kng-maintenance-windows'));
135 });
136
137 $(document).on('click', '#kng-add-recurring', function(e) {
138 e.preventDefault();
139 addRowFromTemplate('kng-maintenance-recurring-template', $('#kng-maintenance-recurring'));
140 });
141
142 $(document).on('click', '.kng-remove-row', function(e) {
143 e.preventDefault();
144 var $row = $(this).closest('.kng-repeat-row');
145 $row.remove();
146 });
147
148 function updateRecurringRow($row) {
149 var freq = ($row.find('.kng-recurring-frequency').val() || 'daily').toString();
150 $row.find('.kng-recurring-weekly').toggle(freq === 'weekly');
151 $row.find('.kng-recurring-monthly').toggle(freq === 'monthly');
152 }
153
154 $(document).on('change', '.kng-recurring-frequency', function() {
155 updateRecurringRow($(this).closest('.kng-repeat-row'));
156 });
157
158 $('.kng-repeat-row').each(function() {
159 updateRecurringRow($(this));
160 });
161
162 var copyTimer = null;
163
164 function showCopyStatus($status, text) {
165 if (!$status || !$status.length) {
166 return;
167 }
168
169 $status.text(text || 'Copied');
170 $status.addClass('is-visible');
171
172 if (copyTimer) {
173 window.clearTimeout(copyTimer);
174 }
175
176 copyTimer = window.setTimeout(function() {
177 $status.removeClass('is-visible');
178 }, 1400);
179 }
180
181 async function copyToClipboard(text) {
182 if (!text) {
183 return false;
184 }
185
186 try {
187 if (navigator.clipboard && navigator.clipboard.writeText) {
188 await navigator.clipboard.writeText(text);
189 return true;
190 }
191 } catch (e) {
192 // fall back below
193 }
194
195 try {
196 var $tmp = $('<textarea readonly></textarea>')
197 .css({ position: 'absolute', left: '-9999px', top: '0', opacity: '0' })
198 .val(text)
199 .appendTo('body');
200 $tmp[0].select();
201 $tmp[0].setSelectionRange(0, text.length);
202 var ok = document.execCommand('copy');
203 $tmp.remove();
204 return !!ok;
205 } catch (err) {
206 return false;
207 }
208 }
209
210 $(document).on('click', '.kng-maintenance-copy-token', function(e) {
211 e.preventDefault();
212 var $row = $(this).closest('.kng-maintenance-token-row');
213 var $input = $row.find('.kng-maintenance-token-input').first();
214 var $status = $row.find('.kng-maintenance-copy-status').first();
215 var val = ($input.val() || '').toString();
216
217 copyToClipboard(val).then(function(ok) {
218 if (ok) {
219 showCopyStatus($status, 'Copied');
220 } else {
221 showCopyStatus($status, 'Copy failed');
222 }
223 });
224 });
225 });
226 })(jQuery);
227