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 / Popup_Builder / 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/Popup_Builder/admin.js

509 lines 19.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 jQuery(document).ready(function ($) {
2 "use strict";
3
4 let globalS = '.global-condition-select',
5 archiveS = '.archives-condition-select',
6 singleS = '.singles-condition-select',
7 inputIDs = '.king-addons-pb-condition-input-ids';
8
9 let conditionsID = $('#king_addons_pb_popup_conditions');
10 let conditionPopup = $('.king-addons-pb-condition-popup-wrap');
11 let template_title = $('.king-addons-pb-user-template-title');
12 let currentTab = 'popup';
13
14 function getActiveFilter() {
15 let type = currentTab.replace(/\W+/g, '-').toLowerCase();
16 if ($('.template-filters').length > 0) {
17 type = $('.template-filters .active-filter').last().attr('data-class');
18 type = type.substring(0, type.length - 1);
19 }
20 return type;
21 }
22
23 function renderUserTemplate(type, title, slug, id) {
24 let html = '';
25
26 html += '<li>';
27 html += '<h3 class="king-addons-pb-title">' + title + '</h3>';
28 html += '<div class="king-addons-pb-action-buttons">';
29 html += '<span class="king-addons-pb-template-conditions button-primary" data-slug="' + slug + '">Manage Conditions</span>';
30 html += '<a href="post.php?post=' + id + '&action=elementor" class="king-addons-pb-edit-template button-primary">Edit Popup</a>';
31 html += '<span class="king-addons-pb-delete-template button-primary" data-slug="' + slug + '" data-warning="Are you sure you want to delete this popup?"><span class="dashicons dashicons-no-alt"></span></span>';
32 html += '</div>';
33 html += '</li>';
34
35 $('.king-addons-pb-my-templates-list.king-addons-pb-' + getActiveFilter() + '-templates-list').prepend(html);
36
37 let empty_msg = $('.king-addons-pb-empty-templates-message');
38 if (empty_msg.length) {
39 empty_msg.remove();
40 }
41
42 changeTemplateConditions();
43 deleteTemplate();
44 }
45
46 function createUserTemplate() {
47 let library = 'my_templates' === getActiveFilter() ? 'elementor_library' : 'king_addons_ext_pb';
48 let title = template_title.val();
49 let slug = 'user-' + getActiveFilter() + '-' + title.replace(/\W+/g, '-').toLowerCase();
50
51 if ('elementor_library' === library) {
52 slug = getActiveFilter() + '-' + title.replace(/\W+/g, '-').toLowerCase();
53 }
54
55 // noinspection JSUnresolvedReference
56 let data = {
57 action: 'king_addons_pb_create_template',
58 nonce: KingAddonsPopupBuilderOptions.nonce,
59 user_template_library: library,
60 user_template_title: title,
61 user_template_slug: slug,
62 user_template_type: getActiveFilter(),
63 };
64
65 $.post(ajaxurl, data, function (response) {
66
67 $('.king-addons-pb-user-template-popup-wrap').fadeOut();
68
69 setTimeout(function () {
70 let id = response.substring(0, response.length - 1);
71
72 if ('my_templates' === currentTab.replace(/\W+/g, '-').toLowerCase()) {
73 window.location.href = 'post.php?post=' + id + '&action=elementor';
74 return;
75 }
76
77 $('.king-addons-pb-save-conditions').attr('data-slug', slug).attr('data-id', id);
78
79 renderUserTemplate(getActiveFilter(), template_title.val(), slug, id);
80
81 let no_templates = $('.king-addons-pb-no-templates');
82
83 if (no_templates.length) {
84 no_templates.hide();
85 }
86
87 openConditionsPopup(slug);
88 conditionPopup.addClass('editor-redirect');
89 }, 500);
90 });
91 }
92
93
94 $('.king-addons-pb-user-template').on('click', function () {
95 if ($(this).find('div').length) {
96 alert('Please Install/Activate WooCommerce plugin');
97 return;
98 }
99 template_title.val('');
100 $('.king-addons-pb-user-template-popup-wrap').fadeIn();
101 });
102
103 $('.king-addons-pb-user-template-popup').find('.close-popup').on('click', function () {
104 $('.king-addons-pb-user-template-popup-wrap').fadeOut();
105 });
106
107 $('.king-addons-pb-create-template').on('click', function () {
108 if ('' === template_title.val()) {
109 template_title.css('border-color', '#FF4040');
110 let fill_out_the_title = $('.king-addons-pb-fill-out-the-title');
111
112 if (fill_out_the_title.length < 1) {
113 $('.king-addons-pb-create-template').before('<p class="king-addons-pb-fill-out-the-title">Please fill Popup Title field</p>');
114 fill_out_the_title.css('margin-top', '10px');
115 fill_out_the_title.css({'color': '#FF4040', 'font-size': '14px', 'font-weight': '500'});
116 }
117 } else {
118 template_title.removeAttr('style');
119 $('.king-addons-pb-create-template + p').remove();
120
121 createUserTemplate();
122 }
123 });
124
125 template_title.keypress(function (e) {
126 if (e.which === 13) {
127 e.preventDefault();
128 createUserTemplate();
129 }
130 });
131
132 function deleteTemplate() {
133 $('.king-addons-pb-delete-template').on('click', function () {
134
135 let deleteButton = $(this);
136
137 if (!confirm(deleteButton.data('warning'))) {
138 return;
139 }
140
141 let library = 'my_templates' === getActiveFilter() ? 'elementor_library' : 'king_addons_ext_pb';
142 let slug = deleteButton.attr('data-slug');
143 let oneTimeNonce = deleteButton.attr('data-nonce');
144
145 let data = {
146 nonce: oneTimeNonce,
147 action: 'king_addons_pb_delete_template',
148 template_slug: slug,
149 template_library: library,
150 };
151
152 $.post(ajaxurl, data, function () {
153 deleteButton.closest('li').remove();
154 });
155
156 $.post(ajaxurl, data, function () {
157 setTimeout(function () {
158 if ($('.king-addons-pb-my-templates-list li').length === 0) {
159 $('.king-addons-pb-my-templates-list').append('<li class="king-addons-pb-no-templates">You don\'t have any popups yet</li>');
160 }
161 }, 500);
162 });
163
164 if ('my_templates' !== getActiveFilter()) {
165 let conditions = JSON.parse(conditionsID.val());
166 delete conditions[slug];
167
168 conditionsID.val(JSON.stringify(conditions));
169
170 // noinspection JSUnresolvedReference
171 let data = {
172 action: 'king_addons_pb_save_template_conditions',
173 nonce: KingAddonsPopupBuilderOptions.nonce,
174 };
175 data['king_addons_pb_' + currentTab + '_conditions'] = JSON.stringify(conditions);
176 }
177 });
178 }
179
180 deleteTemplate();
181
182 function changeTemplateConditions() {
183 $('.king-addons-pb-template-conditions').on('click', function () {
184 let template = $(this).attr('data-slug');
185
186 $('.king-addons-pb-save-conditions').attr('data-slug', template);
187
188 openConditionsPopup(template);
189 });
190 }
191
192 changeTemplateConditions();
193
194 conditionPopup.find('.close-popup').on('click', function () {
195 // noinspection JSValidateTypes
196 conditionPopup.fadeOut();
197 });
198
199 function popupCloneConditions() {
200 $('.king-addons-pb-conditions-wrap').append('<div class="king-addons-pb-conditions">' + $('.king-addons-pb-conditions-sample').html() + '</div>');
201
202 let cloneCond = $('.king-addons-pb-conditions');
203
204 cloneCond.removeClass('king-addons-pb-tab-' + currentTab).addClass('king-addons-pb-tab-' + currentTab);
205 let clone = cloneCond.last();
206
207 clone.find('select').not(':first-child').hide();
208 clone.hide().fadeIn();
209
210 let currentFilter = $('.template-filters .active-filter').attr('data-class');
211
212 if (clone.hasClass('king-addons-pb-tab-product_single')) {
213 setTimeout(function () {
214 clone.find('.king-addons-pb-condition-input-ids').each(function () {
215 if (!($(this).val())) {
216 $(this).val('all').show();
217 }
218 });
219 }, 600);
220 }
221
222 if ('blog-posts' === currentFilter || 'custom-posts' === currentFilter) {
223 clone.find('.singles-condition-select').children(':nth-child(1),:nth-child(2),:nth-child(3)').remove();
224 clone.find('.king-addons-pb-condition-input-ids').val('all').show();
225 } else if ('woocommerce-products' === currentFilter) {
226 // noinspection JSUnresolvedReference
227 clone.find('.singles-condition-select').children().filter(function () {
228 return 'product' !== $(this).val()
229 }).remove();
230 clone.find('.king-addons-pb-condition-input-ids').val('all').show();
231 } else if ('404-pages' === currentFilter) {
232 // noinspection JSUnresolvedReference
233 clone.find('.singles-condition-select').children().filter(function () {
234 return 'page_404' !== $(this).val()
235 }).remove();
236 } else if ('blog-archives' === currentFilter || 'custom-archives' === currentFilter) {
237 // noinspection JSUnresolvedReference
238 clone.find('.archives-condition-select').children().filter(function () {
239 return 'products' === $(this).val() || 'product_cat' === $(this).val() || 'product_tag' === $(this).val();
240 }).remove();
241 } else if ('woocommerce-archives' === currentFilter) {
242 // noinspection JSUnresolvedReference
243 clone.find('.archives-condition-select').children().filter(function () {
244 return 'products' !== $(this).val() && 'product_cat' !== $(this).val() && 'product_tag' !== $(this).val();
245 }).remove();
246 }
247 }
248
249 function popupAddConditions() {
250 $('.king-addons-pb-add-conditions').on('click', function () {
251 popupCloneConditions();
252
253 $('.king-addons-pb-conditions').last().find('input').hide();
254
255 popupDeleteConditions();
256 popupMainConditionSelect();
257 popupSubConditionSelect();
258 });
259 }
260
261 popupAddConditions();
262
263 function popupSetConditions(template) {
264 let conditions = conditionsID.val();
265 conditions = '' !== conditions ? JSON.parse(conditions) : {};
266
267 let setCond = $('.king-addons-pb-conditions');
268
269 setCond.remove();
270
271 if (conditions[template] !== undefined && conditions[template].length > 0) {
272 for (let i = 0; i < conditions[template].length; i++) {
273 popupCloneConditions();
274 setCond.find('select').hide();
275 }
276
277 if (setCond.length) {
278 setCond.each(function (index) {
279 let path = conditions[template][index].split('/');
280
281 for (let s = 0; s < path.length; s++) {
282 // noinspection DuplicatedCode
283 if (s === 0) {
284 $(this).find(globalS).val(path[s]).trigger('change');
285 $(this).find('.' + path[s] + 's-condition-select').show();
286 } else if (s === 1) {
287 path[s - 1] = 'product_archive' === path[s - 1] ? 'archive' : path[s - 1];
288 $(this).find('.' + path[s - 1] + 's-condition-select').val(path[s]).trigger('change');
289 } else if (s === 2) {
290 $(this).find(inputIDs).val(path[s]).trigger('keyup').show();
291 }
292 }
293 });
294 }
295 }
296
297 let conditionsBtn = $('.king-addons-pb-template-conditions[data-slug=' + template + ']');
298
299 if ('true' === conditionsBtn.attr('data-show-on-canvas')) {
300 $('.king-addons-pb-canvas-condition').find('input[type=checkbox]').attr('checked', 'checked');
301 } else {
302 $('.king-addons-pb-canvas-condition').find('input[type=checkbox]').removeAttr('checked');
303 }
304 }
305
306 function openConditionsPopup(template) {
307 popupSetConditions(template);
308 popupMainConditionSelect();
309 popupSubConditionSelect();
310 showOnCanvasSwitcher();
311 popupDeleteConditions();
312
313 let conditionsWrap = $('.king-addons-pb-conditions');
314 let conditionCanvas = $('.king-addons-pb-canvas-condition')
315
316 conditionCanvas.hide();
317
318 if ('single' === currentTab || 'product_single' === currentTab) {
319 conditionsWrap.find(singleS).show();
320 } else if ('archive' === currentTab || 'product_archive' === currentTab) {
321 conditionsWrap.find(archiveS).show();
322 } else {
323 conditionsWrap.find(globalS).show();
324
325 if (conditionsWrap.length) {
326 conditionCanvas.show();
327 }
328 }
329
330 $('.king-addons-pb-conditions-wrap').addClass($('.template-filters .active-filter').attr('data-class'));
331
332 // noinspection JSValidateTypes
333 conditionPopup.fadeIn();
334 }
335
336 function popupDeleteConditions() {
337 $('.king-addons-pb-delete-template-conditions').on('click', function () {
338 let current = $(this).parent(),
339 conditions = conditionsID.val();
340 conditions = '' !== conditions ? JSON.parse(conditions) : {};
341
342 conditionsID.val(JSON.stringify(removeConditions(conditions, getConditionsPath(current))));
343
344 // noinspection JSValidateTypes
345 current.fadeOut(500, function () {
346 $(this).remove();
347
348 if (0 === $('.king-addons-pb-conditions').length) {
349 $('.king-addons-pb-canvas-condition').hide();
350 }
351 });
352
353 });
354 }
355
356 function popupMainConditionSelect() {
357 $(globalS).on('change', function () {
358 let current = $(this).parent();
359 current.find(archiveS).hide();
360 current.find(singleS).hide();
361 current.find(inputIDs).hide();
362 current.find('.' + $(this).val() + 's-condition-select').show();
363 });
364 }
365
366 function popupSubConditionSelect() {
367 $('.archives-condition-select, .singles-condition-select').on('change', function () {
368 let current = $(this).parent(),
369 selected = $('option:selected', this);
370
371 if (selected.hasClass('custom-ids') || selected.hasClass('custom-type-ids')) {
372 current.find(inputIDs).val('all').trigger('keyup').show();
373 } else {
374 current.find(inputIDs).hide();
375 }
376
377 });
378 }
379
380 function showOnCanvasSwitcher() {
381 $('.king-addons-pb-canvas-condition input[type=checkbox]').on('change', function () {
382 $('.king-addons-pb-template-conditions[data-slug=' + $('.king-addons-pb-save-conditions').attr('data-slug') + ']').attr('data-show-on-canvas', $(this).prop('checked'));
383 });
384 }
385
386 function removeConditions(conditions, path) {
387 let data = [];
388
389 $('.king-addons-pb-template-conditions').each(function () {
390 data.push($(this).attr('data-slug'))
391 });
392
393 for (let key in conditions) {
394 if (conditions.hasOwnProperty(key)) {
395 for (let i = 0; i < conditions[key].length; i++) {
396 if (path === conditions[key][i]) {
397 if ('popup' !== getActiveFilter()) {
398 conditions[key].splice(i, 1);
399 }
400 }
401 }
402
403 if (data.indexOf(key) === -1) {
404 delete conditions[key];
405 }
406 }
407 }
408
409 return conditions;
410 }
411
412 function getConditionsPath(current) {
413 let path;
414 let global = 'none' !== current.find(globalS).css('display') ? current.find(globalS).val() : currentTab,
415 archive = current.find(archiveS).val(),
416 single = current.find(singleS).val(),
417 customIds = current.find(inputIDs);
418
419 // noinspection DuplicatedCode
420 if ('archive' === global || 'product_archive' === global) {
421 if ('none' !== customIds.css('display')) {
422 path = global + '/' + archive + '/' + customIds.val();
423 } else {
424 path = global + '/' + archive;
425 }
426 } else if ('single' === global || 'product_single' === global) {
427 if ('none' !== customIds.css('display')) {
428 path = global + '/' + single + '/' + customIds.val();
429 } else {
430 path = global + '/' + single;
431 }
432 } else {
433 path = 'global';
434 }
435
436 return path;
437 }
438
439 function getConditions(template, conditions) {
440 conditions = ('' === conditions || '[]' === conditions) ? {} : JSON.parse(conditions);
441 conditions[template] = [];
442 $('.king-addons-pb-conditions').each(function () {
443 let path = getConditionsPath($(this));
444 conditions = removeConditions(conditions, path);
445 conditions[template].push(path);
446 });
447 return conditions;
448 }
449
450 function saveConditions() {
451 $('.king-addons-pb-save-conditions').on('click', function () {
452
453 let template = $(this).attr('data-slug'),
454 TemplateID = $(this).attr('data-id');
455
456 let conditions = getConditions(template, conditionsID.val());
457
458 conditionsID.val(JSON.stringify(conditions));
459
460 // noinspection JSUnresolvedReference
461 let data = {
462 action: 'king_addons_pb_save_template_conditions',
463 nonce: KingAddonsPopupBuilderOptions.nonce,
464 template: template
465 };
466
467 // Secondary nonce printed by wp_nonce_field() in the form.
468 // Required by PHP handler before it persists options.
469 const popupSettingsNonce = $('#king_addons_popup_nonce').val() || $('input[name="king_addons_popup_nonce"]').val();
470 if (popupSettingsNonce) {
471 data.king_addons_popup_nonce = popupSettingsNonce;
472 }
473 data['king_addons_pb_' + currentTab + '_conditions'] = JSON.stringify(conditions);
474
475 let showOnCanvas = $('#king-addons-pb-show-on-canvas');
476
477 if (showOnCanvas.length) {
478 data['king_addons_pb_' + currentTab + '_show_on_canvas'] = showOnCanvas.prop('checked');
479 }
480
481 $.post(ajaxurl, data, function () {
482 // noinspection JSValidateTypes
483 conditionPopup.fadeOut();
484
485 for (let key in conditions) {
486 if (conditions[key] && 0 !== conditions[key].length) {
487 $('.king-addons-pb-delete-template[data-slug="' + key + '"]').closest('li').addClass('king-addons-pb-active-conditions-template');
488 } else {
489 $('.king-addons-pb-delete-template[data-slug="' + key + '"]').closest('li').removeClass('king-addons-pb-active-conditions-template');
490 }
491 }
492
493 if (conditionPopup.hasClass('editor-redirect')) {
494 window.location.href = 'post.php?post=' + TemplateID + '&action=elementor';
495 }
496 });
497 });
498 }
499
500 saveConditions();
501
502 if ($('body').hasClass('toplevel_page_king-addons-popup-builder')) {
503 let conditions = JSON.parse(conditionsID.val() || '{}');
504 for (let key in conditions) {
505 $('.king-addons-pb-delete-template[data-slug="' + key + '"]').closest('li').addClass('king-addons-pb-active-conditions-template');
506 }
507 }
508
509 });