jQuery(document).ready(function ($) { "use strict"; let globalS = '.global-condition-select', archiveS = '.archives-condition-select', singleS = '.singles-condition-select', inputIDs = '.king-addons-pb-condition-input-ids'; let conditionsID = $('#king_addons_pb_popup_conditions'); let conditionPopup = $('.king-addons-pb-condition-popup-wrap'); let template_title = $('.king-addons-pb-user-template-title'); let currentTab = 'popup'; function getActiveFilter() { let type = currentTab.replace(/\W+/g, '-').toLowerCase(); if ($('.template-filters').length > 0) { type = $('.template-filters .active-filter').last().attr('data-class'); type = type.substring(0, type.length - 1); } return type; } function renderUserTemplate(type, title, slug, id) { let html = ''; html += '
  • '; html += '

    ' + title + '

    '; html += '
    '; html += 'Manage Conditions'; html += 'Edit Popup'; html += ''; html += '
    '; html += '
  • '; $('.king-addons-pb-my-templates-list.king-addons-pb-' + getActiveFilter() + '-templates-list').prepend(html); let empty_msg = $('.king-addons-pb-empty-templates-message'); if (empty_msg.length) { empty_msg.remove(); } changeTemplateConditions(); deleteTemplate(); } function createUserTemplate() { let library = 'my_templates' === getActiveFilter() ? 'elementor_library' : 'king_addons_ext_pb'; let title = template_title.val(); let slug = 'user-' + getActiveFilter() + '-' + title.replace(/\W+/g, '-').toLowerCase(); if ('elementor_library' === library) { slug = getActiveFilter() + '-' + title.replace(/\W+/g, '-').toLowerCase(); } // noinspection JSUnresolvedReference let data = { action: 'king_addons_pb_create_template', nonce: KingAddonsPopupBuilderOptions.nonce, user_template_library: library, user_template_title: title, user_template_slug: slug, user_template_type: getActiveFilter(), }; $.post(ajaxurl, data, function (response) { $('.king-addons-pb-user-template-popup-wrap').fadeOut(); setTimeout(function () { let id = response.substring(0, response.length - 1); if ('my_templates' === currentTab.replace(/\W+/g, '-').toLowerCase()) { window.location.href = 'post.php?post=' + id + '&action=elementor'; return; } $('.king-addons-pb-save-conditions').attr('data-slug', slug).attr('data-id', id); renderUserTemplate(getActiveFilter(), template_title.val(), slug, id); let no_templates = $('.king-addons-pb-no-templates'); if (no_templates.length) { no_templates.hide(); } openConditionsPopup(slug); conditionPopup.addClass('editor-redirect'); }, 500); }); } $('.king-addons-pb-user-template').on('click', function () { if ($(this).find('div').length) { alert('Please Install/Activate WooCommerce plugin'); return; } template_title.val(''); $('.king-addons-pb-user-template-popup-wrap').fadeIn(); }); $('.king-addons-pb-user-template-popup').find('.close-popup').on('click', function () { $('.king-addons-pb-user-template-popup-wrap').fadeOut(); }); $('.king-addons-pb-create-template').on('click', function () { if ('' === template_title.val()) { template_title.css('border-color', '#FF4040'); let fill_out_the_title = $('.king-addons-pb-fill-out-the-title'); if (fill_out_the_title.length < 1) { $('.king-addons-pb-create-template').before('

    Please fill Popup Title field

    '); fill_out_the_title.css('margin-top', '10px'); fill_out_the_title.css({'color': '#FF4040', 'font-size': '14px', 'font-weight': '500'}); } } else { template_title.removeAttr('style'); $('.king-addons-pb-create-template + p').remove(); createUserTemplate(); } }); template_title.keypress(function (e) { if (e.which === 13) { e.preventDefault(); createUserTemplate(); } }); function deleteTemplate() { $('.king-addons-pb-delete-template').on('click', function () { let deleteButton = $(this); if (!confirm(deleteButton.data('warning'))) { return; } let library = 'my_templates' === getActiveFilter() ? 'elementor_library' : 'king_addons_ext_pb'; let slug = deleteButton.attr('data-slug'); let oneTimeNonce = deleteButton.attr('data-nonce'); let data = { nonce: oneTimeNonce, action: 'king_addons_pb_delete_template', template_slug: slug, template_library: library, }; $.post(ajaxurl, data, function () { deleteButton.closest('li').remove(); }); $.post(ajaxurl, data, function () { setTimeout(function () { if ($('.king-addons-pb-my-templates-list li').length === 0) { $('.king-addons-pb-my-templates-list').append('
  • You don\'t have any popups yet
  • '); } }, 500); }); if ('my_templates' !== getActiveFilter()) { let conditions = JSON.parse(conditionsID.val()); delete conditions[slug]; conditionsID.val(JSON.stringify(conditions)); // noinspection JSUnresolvedReference let data = { action: 'king_addons_pb_save_template_conditions', nonce: KingAddonsPopupBuilderOptions.nonce, }; data['king_addons_pb_' + currentTab + '_conditions'] = JSON.stringify(conditions); } }); } deleteTemplate(); function changeTemplateConditions() { $('.king-addons-pb-template-conditions').on('click', function () { let template = $(this).attr('data-slug'); $('.king-addons-pb-save-conditions').attr('data-slug', template); openConditionsPopup(template); }); } changeTemplateConditions(); conditionPopup.find('.close-popup').on('click', function () { // noinspection JSValidateTypes conditionPopup.fadeOut(); }); function popupCloneConditions() { $('.king-addons-pb-conditions-wrap').append('
    ' + $('.king-addons-pb-conditions-sample').html() + '
    '); let cloneCond = $('.king-addons-pb-conditions'); cloneCond.removeClass('king-addons-pb-tab-' + currentTab).addClass('king-addons-pb-tab-' + currentTab); let clone = cloneCond.last(); clone.find('select').not(':first-child').hide(); clone.hide().fadeIn(); let currentFilter = $('.template-filters .active-filter').attr('data-class'); if (clone.hasClass('king-addons-pb-tab-product_single')) { setTimeout(function () { clone.find('.king-addons-pb-condition-input-ids').each(function () { if (!($(this).val())) { $(this).val('all').show(); } }); }, 600); } if ('blog-posts' === currentFilter || 'custom-posts' === currentFilter) { clone.find('.singles-condition-select').children(':nth-child(1),:nth-child(2),:nth-child(3)').remove(); clone.find('.king-addons-pb-condition-input-ids').val('all').show(); } else if ('woocommerce-products' === currentFilter) { // noinspection JSUnresolvedReference clone.find('.singles-condition-select').children().filter(function () { return 'product' !== $(this).val() }).remove(); clone.find('.king-addons-pb-condition-input-ids').val('all').show(); } else if ('404-pages' === currentFilter) { // noinspection JSUnresolvedReference clone.find('.singles-condition-select').children().filter(function () { return 'page_404' !== $(this).val() }).remove(); } else if ('blog-archives' === currentFilter || 'custom-archives' === currentFilter) { // noinspection JSUnresolvedReference clone.find('.archives-condition-select').children().filter(function () { return 'products' === $(this).val() || 'product_cat' === $(this).val() || 'product_tag' === $(this).val(); }).remove(); } else if ('woocommerce-archives' === currentFilter) { // noinspection JSUnresolvedReference clone.find('.archives-condition-select').children().filter(function () { return 'products' !== $(this).val() && 'product_cat' !== $(this).val() && 'product_tag' !== $(this).val(); }).remove(); } } function popupAddConditions() { $('.king-addons-pb-add-conditions').on('click', function () { popupCloneConditions(); $('.king-addons-pb-conditions').last().find('input').hide(); popupDeleteConditions(); popupMainConditionSelect(); popupSubConditionSelect(); }); } popupAddConditions(); function popupSetConditions(template) { let conditions = conditionsID.val(); conditions = '' !== conditions ? JSON.parse(conditions) : {}; let setCond = $('.king-addons-pb-conditions'); setCond.remove(); if (conditions[template] !== undefined && conditions[template].length > 0) { for (let i = 0; i < conditions[template].length; i++) { popupCloneConditions(); setCond.find('select').hide(); } if (setCond.length) { setCond.each(function (index) { let path = conditions[template][index].split('/'); for (let s = 0; s < path.length; s++) { // noinspection DuplicatedCode if (s === 0) { $(this).find(globalS).val(path[s]).trigger('change'); $(this).find('.' + path[s] + 's-condition-select').show(); } else if (s === 1) { path[s - 1] = 'product_archive' === path[s - 1] ? 'archive' : path[s - 1]; $(this).find('.' + path[s - 1] + 's-condition-select').val(path[s]).trigger('change'); } else if (s === 2) { $(this).find(inputIDs).val(path[s]).trigger('keyup').show(); } } }); } } let conditionsBtn = $('.king-addons-pb-template-conditions[data-slug=' + template + ']'); if ('true' === conditionsBtn.attr('data-show-on-canvas')) { $('.king-addons-pb-canvas-condition').find('input[type=checkbox]').attr('checked', 'checked'); } else { $('.king-addons-pb-canvas-condition').find('input[type=checkbox]').removeAttr('checked'); } } function openConditionsPopup(template) { popupSetConditions(template); popupMainConditionSelect(); popupSubConditionSelect(); showOnCanvasSwitcher(); popupDeleteConditions(); let conditionsWrap = $('.king-addons-pb-conditions'); let conditionCanvas = $('.king-addons-pb-canvas-condition') conditionCanvas.hide(); if ('single' === currentTab || 'product_single' === currentTab) { conditionsWrap.find(singleS).show(); } else if ('archive' === currentTab || 'product_archive' === currentTab) { conditionsWrap.find(archiveS).show(); } else { conditionsWrap.find(globalS).show(); if (conditionsWrap.length) { conditionCanvas.show(); } } $('.king-addons-pb-conditions-wrap').addClass($('.template-filters .active-filter').attr('data-class')); // noinspection JSValidateTypes conditionPopup.fadeIn(); } function popupDeleteConditions() { $('.king-addons-pb-delete-template-conditions').on('click', function () { let current = $(this).parent(), conditions = conditionsID.val(); conditions = '' !== conditions ? JSON.parse(conditions) : {}; conditionsID.val(JSON.stringify(removeConditions(conditions, getConditionsPath(current)))); // noinspection JSValidateTypes current.fadeOut(500, function () { $(this).remove(); if (0 === $('.king-addons-pb-conditions').length) { $('.king-addons-pb-canvas-condition').hide(); } }); }); } function popupMainConditionSelect() { $(globalS).on('change', function () { let current = $(this).parent(); current.find(archiveS).hide(); current.find(singleS).hide(); current.find(inputIDs).hide(); current.find('.' + $(this).val() + 's-condition-select').show(); }); } function popupSubConditionSelect() { $('.archives-condition-select, .singles-condition-select').on('change', function () { let current = $(this).parent(), selected = $('option:selected', this); if (selected.hasClass('custom-ids') || selected.hasClass('custom-type-ids')) { current.find(inputIDs).val('all').trigger('keyup').show(); } else { current.find(inputIDs).hide(); } }); } function showOnCanvasSwitcher() { $('.king-addons-pb-canvas-condition input[type=checkbox]').on('change', function () { $('.king-addons-pb-template-conditions[data-slug=' + $('.king-addons-pb-save-conditions').attr('data-slug') + ']').attr('data-show-on-canvas', $(this).prop('checked')); }); } function removeConditions(conditions, path) { let data = []; $('.king-addons-pb-template-conditions').each(function () { data.push($(this).attr('data-slug')) }); for (let key in conditions) { if (conditions.hasOwnProperty(key)) { for (let i = 0; i < conditions[key].length; i++) { if (path === conditions[key][i]) { if ('popup' !== getActiveFilter()) { conditions[key].splice(i, 1); } } } if (data.indexOf(key) === -1) { delete conditions[key]; } } } return conditions; } function getConditionsPath(current) { let path; let global = 'none' !== current.find(globalS).css('display') ? current.find(globalS).val() : currentTab, archive = current.find(archiveS).val(), single = current.find(singleS).val(), customIds = current.find(inputIDs); // noinspection DuplicatedCode if ('archive' === global || 'product_archive' === global) { if ('none' !== customIds.css('display')) { path = global + '/' + archive + '/' + customIds.val(); } else { path = global + '/' + archive; } } else if ('single' === global || 'product_single' === global) { if ('none' !== customIds.css('display')) { path = global + '/' + single + '/' + customIds.val(); } else { path = global + '/' + single; } } else { path = 'global'; } return path; } function getConditions(template, conditions) { conditions = ('' === conditions || '[]' === conditions) ? {} : JSON.parse(conditions); conditions[template] = []; $('.king-addons-pb-conditions').each(function () { let path = getConditionsPath($(this)); conditions = removeConditions(conditions, path); conditions[template].push(path); }); return conditions; } function saveConditions() { $('.king-addons-pb-save-conditions').on('click', function () { let template = $(this).attr('data-slug'), TemplateID = $(this).attr('data-id'); let conditions = getConditions(template, conditionsID.val()); conditionsID.val(JSON.stringify(conditions)); // noinspection JSUnresolvedReference let data = { action: 'king_addons_pb_save_template_conditions', nonce: KingAddonsPopupBuilderOptions.nonce, template: template }; // Secondary nonce printed by wp_nonce_field() in the form. // Required by PHP handler before it persists options. const popupSettingsNonce = $('#king_addons_popup_nonce').val() || $('input[name="king_addons_popup_nonce"]').val(); if (popupSettingsNonce) { data.king_addons_popup_nonce = popupSettingsNonce; } data['king_addons_pb_' + currentTab + '_conditions'] = JSON.stringify(conditions); let showOnCanvas = $('#king-addons-pb-show-on-canvas'); if (showOnCanvas.length) { data['king_addons_pb_' + currentTab + '_show_on_canvas'] = showOnCanvas.prop('checked'); } $.post(ajaxurl, data, function () { // noinspection JSValidateTypes conditionPopup.fadeOut(); for (let key in conditions) { if (conditions[key] && 0 !== conditions[key].length) { $('.king-addons-pb-delete-template[data-slug="' + key + '"]').closest('li').addClass('king-addons-pb-active-conditions-template'); } else { $('.king-addons-pb-delete-template[data-slug="' + key + '"]').closest('li').removeClass('king-addons-pb-active-conditions-template'); } } if (conditionPopup.hasClass('editor-redirect')) { window.location.href = 'post.php?post=' + TemplateID + '&action=elementor'; } }); }); } saveConditions(); if ($('body').hasClass('toplevel_page_king-addons-popup-builder')) { let conditions = JSON.parse(conditionsID.val() || '{}'); for (let key in conditions) { $('.king-addons-pb-delete-template[data-slug="' + key + '"]').closest('li').addClass('king-addons-pb-active-conditions-template'); } } });