Files
torebki-fabiola.pl/wp-content/plugins/email-subscribers/lite/admin/js/email-subscribers-admin.js
2026-03-05 13:07:40 +01:00

4307 lines
147 KiB
JavaScript

(function ($) {
$(document).ready(
function () {
// When we click outside, close the dropdown
$(document).on("click", function (event) {
var $trigger = $("#ig-es-add-tags-button");
if ($trigger !== event.target && !$trigger.has(event.target).length) {
$("#ig-es-tags-dropdown").hide();
}
});
// Toggle Dropdown
$('body')
.on('click', '#ig-es-add-tags-button', function (e) {
e.preventDefault();
$('#ig-es-tags-dropdown').toggle();
});
// When we click outside, close the dropdown
$(document).on("click", function (event) {
var $trigger = $("#ig-es-add-tag-icon");
if ($trigger !== event.target && !$trigger.has(event.target).length) {
$("#ig-es-tag-icon-dropdown").hide();
}
});
var clipboard = new ClipboardJS('.ig-es-merge-tag', {
text: function(trigger) {
let tag_text = $(trigger).data('tag-text');
if ( '' === tag_text ) {
tag_text = $(trigger).text();
}
return tag_text.trim();
}
});
clipboard.on('success', function(e) {
let sourceElem = e.trigger;
let clipBoardText = e.text;
let targetID = $(sourceElem).closest('.merge-tags-wrapper').data('target-elem-id');
var target = document.getElementById(targetID);
if (target.setRangeText) {
target.focus();
//if setRangeText function is supported by current browser
target.setRangeText(clipBoardText);
} else {
target.focus()
document.execCommand('insertText', false /*no UI*/, clipBoardText);
}
if ( 'undefined' !== typeof tinymce.activeEditor ) {
tinymce.activeEditor.execCommand('mceInsertContent', false, clipBoardText);
}
});
var $newDiv = $("<div/>").addClass("pt-2 pb-2").html(`<div class="ig_es_process_message">Page <span id="ig_es_page_number">1</span> is processing <svg class="es-btn-loader animate-spin h-4 w-4 text-indigo inline-block" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg> </div>`);
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
$('.es-audience-view table.contacts #cb-select-all-1').click(function (e) {
if($('.es-audience-view table.contacts #cb-select-all-1').prop('checked') == true){
flag = confirm( ig_es_js_data.i18n_data.confirm_select_all );
}
if( flag ) {
$('.es-audience-view .tablenav.top #doaction').click(function (e) {
e.preventDefault();
let actionData = $(this).closest('form').serializeArray();
let unchecked_subscriber_checkboxes = $('.es-audience-view form input[type="checkbox"][name="subscribers[]"]:not(:checked)');
let exclude_subscribers = [];
if ( unchecked_subscriber_checkboxes.length > 0 ) {
$(unchecked_subscriber_checkboxes).each((index,unchecked_subscriber_checkbox) => {
let unchecked_subscriber_id = $(unchecked_subscriber_checkbox).val();
exclude_subscribers.push(unchecked_subscriber_id);
});
}
actionData.push({ name: "exclude_subscribers", value: exclude_subscribers });
actionData.push({ name: "is_ajax", value: true });
let pageNumber = getUrlParameter('paged');
pageNumber = pageNumber ? pageNumber : 1;
ig_es_apply_contacts_bulk_action( actionData, pageNumber );
$(".es-audience-view table.contacts").addClass("ig_es_contacts_table");
});
}
});
function ig_es_apply_contacts_bulk_action( actionData, pageNumber ) {
jQuery.ajax({
method: 'POST',
url: location.href,
data: actionData,
dataType: 'json',
beforeSend: function () {
$($newDiv).find("#ig_es_page_number").text(pageNumber);
$('.es-audience-view .tablenav.top').append($newDiv);
},
success: function (response) {
if ( 'undefined' !== typeof response.success ) {
if (response.success) {
if ( ! response.data.completed ) {
actionData.push({name: 'paged', value: response.data.paged });
actionData.push({name: 'total_pages', value: response.data.total_pages });
actionData.push({name: 'start_page', value: response.data.start_page });
ig_es_apply_contacts_bulk_action( actionData, response.data.paged );
} else {
$('.ig_es_process_message').text('Process completed , reloading the page!');
let current_url = new URL(window.location.href);
let bulk_action = response.data.bulk_action;
setTimeout(()=>{
current_url.searchParams.append('bulk_action', bulk_action);
window.location.href = current_url;
},1000);
}
} else {
if( true !== response.data.errortype ) {
alert(response.data.message);
}
if( true == response.data.errortype ) {
if ( ! response.data.completed ) {
actionData.push({name: 'paged', value: response.data.paged });
actionData.push({name: 'total_pages', value: response.data.total_pages });
actionData.push({name: 'start_page', value: response.data.start_page });
ig_es_apply_contacts_bulk_action( actionData, response.data.paged );
} else
{
$('.ig_es_process_message').text('Process completed , reloading the page!');
let current_url = new URL(window.location.href);
let bulk_action = response.data.bulk_action;
setTimeout(()=>{
current_url.searchParams.append('bulk_action', bulk_action);
window.location.href = current_url;
},1000);
}
}
}
} else {
alert( response.i18n_data.ajax_error_message );
}
},
error: function (err) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
});
}
// Toggle Dropdown
$('#ig-es-add-tag-icon').click(function () {
$('#ig-es-tag-icon-dropdown').toggle();
});
$('.es-preview-report').click(function(){
let campaign_id = $(this).data('campaign-id');
let campaign_type = $(this).data('campaign-type');
let elem = $(this);
let preview_data = {
action : 'ig_es_preview_email_report',
security : ig_es_js_data.security,
campaign_id : campaign_id,
campaign_type: campaign_type,
};
jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: preview_data,
dataType: 'json',
beforeSend: function() {
$(elem).next('.es-preview-loader').show();
},
success: function (response) {
if (response.success) {
if ( 'undefined' !== typeof response.data ) {
let response_data = response.data;
let template_html = response_data.template_html;
$('.report_preview_container').html(template_html);
$('#report_preview_template').load().show();
}
} else {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
},
error: function (err) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
}).always(function(){
$(elem).next('.es-preview-loader').hide();
});
});
$('.es_template_preview').click(function(){
let template_id = $(this).data('post-id');
let elem = $(this);
let preview_data = {
action : 'ig_es_preview_template',
security : ig_es_js_data.security,
template_id : template_id,
};
jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: preview_data,
dataType: 'json',
beforeSend: function() {
$(elem).next('.es-template-preview-loader').show();
},
success: function (response) {
if (response.success) {
if ( 'undefined' !== typeof response.data ) {
let response_data = response.data;
let template_html = response_data.template_html;
$('.template_preview_container').html(template_html);
$('#es_preview_template').load().show();
}
} else {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
},
error: function (err) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
}).always(function(){
$(elem).next('.es-template-preview-loader').hide();
});
});
$(document).on('change', '.es_visible', function () {
if ($('.es_visible:checked').length >= 1) {
$('.es_required').prop('disabled', false);
$('.es_name_label').removeAttr('disabled');
} else {
$('.es_required').prop('disabled', true);
$('.es_name_label').attr('disabled', 'disabled');
}
});
$('.es_visible').change();
$('.setting-content').hide();
var settings_tab = window.location.hash;
var settings_tab_link = $('a[href="' + settings_tab +'"]');
if( settings_tab && settings_tab_link.length > 0 ){
settings_tab_link.addClass('active').parent('li').addClass('active');
$(settings_tab).show();
} else {
$('#menu-nav li:first-child').addClass('active').find('a').addClass('active');
$('.setting-content:first').show();
}
$('#menu-nav li').click(function(){
$('#menu-nav li,#menu-nav li a').removeClass('active');
$(this).addClass('active').find('a').addClass('active');
$('.setting-content').hide();
var activeTab = $(this).find('a').attr('href');
$(activeTab).show();
// Trigger resize event to fix scroll issue in the API tab.
$(document).trigger('resize');
return false;
});
if(jQuery('#es_allow_contact').is(":checked")){
jQuery('#es_list_label').show();
}
jQuery(document).on('change', '#es_allow_contact' , function(e) {
if(jQuery(this).is(":checked")){
jQuery('#es_list_label').show();
}else{
jQuery('#es_list_label').hide();
}
});
jQuery(document).on('change', '.es-email-status-container #es_email_status' , function(e) {
let send_optin_emails_toggle_container = jQuery('.step2-send-optin-emails');
if ('0' === jQuery(this).val() || 'unsubscribed' === jQuery(this).val()) {
send_optin_emails_toggle_container.hide();
jQuery("#send_optin_emails").prop("checked", false);
} else {
send_optin_emails_toggle_container.show();
}
});
if(jQuery('#show_in_popup').is(":checked")){
jQuery('#popup_input_block').show();
}
jQuery(document).on('change', '#show_in_popup' , function(e) {
if(jQuery(this).is(":checked")){
jQuery('#popup_input_block').show();
}else{
jQuery('#popup_input_block').hide();
}
});
let action_after_submit = $(".ig_es_action_after_submit:checked").val()
change_block_as_per_action(action_after_submit);
$("input:radio[name='form_data[settings][action_after_submit]']").click(function() {
let action_after_submit = $(this).val();
change_block_as_per_action(action_after_submit);
});
function change_block_as_per_action( action_after_submit = '' ) {
if ( 'show_success_message' === action_after_submit ) {
$('#show_message_block').removeClass('hidden');
$('#show_redirect_to_url_block').addClass('hidden');
} else {
$('#show_redirect_to_url_block').removeClass('hidden');
$('#show_message_block').addClass('hidden');
}
}
$("#broadcast_form .pre_btn, #broadcast_form #content_menu").click(function() {
var fieldset = $(this).closest('.es_fieldset');
fieldset.find('.es_broadcast_first').fadeIn('normal');
fieldset.next().find('.es_broadcast_second').hide();
fieldset.find('#broadcast_button').show();
fieldset.find('#broadcast_button1, #broadcast_button2').hide();
$('#summary_menu').removeClass("active");
$('#content_menu').addClass("active");
//$('.active').removeClass('active').prev().addClass('active');
});
$("#campaign_form #view_campaign_content_button,#campaign_form #campaign_content_menu,.es-first-step-tab, #view_form_content_button").click(function() {
var fieldset = $(this).closest('.es_fieldset');
fieldset.find('.es_campaign_first,.es-first-step').fadeIn('normal');
fieldset.next().find('.es_campaign_second,.es-second-step').hide();
fieldset.find('#view_campaign_summary_button, #view_campaign_preview_button,.es-first-step-buttons-wrapper').show();
fieldset.find('#view_campaign_content_button, #campaign_summary_actions_buttons_wrapper,.es-second-step-buttons-wrapper').hide();
$('#campaign_summary_menu,.es-second-step-tab').removeClass("active");
$('#campaign_content_menu,.es-first-step-tab').addClass("active");
});
let schedule_option = $('input:radio[name="data[scheduling_option]"]:checked').val()
broadcast_send_option_change_text(schedule_option);
$("input:radio[name='data[scheduling_option]']").click(function() {
let scheduling_option = $(this).val();
broadcast_send_option_change_text(scheduling_option);
});
function broadcast_send_option_change_text( scheduling_option = 'Schedule' ) {
if ( 'schedule_later' === scheduling_option ) {
$('.display_schedule').removeClass('hidden');
$('.ig_es_broadcast_send_option_text').text('Schedule');
} else {
$('.display_schedule').addClass('hidden');
$('.ig_es_broadcast_send_option_text').text('Send');
}
}
$('#preview_template').hide();
$('#spam_score_modal').hide();
$("#close_template").on('click', function (event) {
event.preventDefault();
$('#preview_template').hide();
});
$("#close-unsubscribe-feedback-popup").on('click', function (event) {
event.preventDefault();
$('#unsubscribe-feedback-popup').hide();
});
$("#close-campaign-preview-popup").on('click', function (event) {
event.preventDefault();
$('#campaign-preview-popup').hide();
});
if (jQuery('.statusesselect').length) {
var statusselect = jQuery('.statusesselect')[0].outerHTML;
}
if (jQuery('.groupsselect').length) {
var groupselect = jQuery('.groupsselect')[0].outerHTML;
}
// Audience filter switch for Advanced filter
jQuery('.ig-es-switch.js-toggle-collapse').click(function(event){
event.preventDefault();
let $switch, state, new_state;
$switch = jQuery(this);
state = $switch.attr( 'data-ig-es-switch' );
new_state = state === 'active' ? 'inactive' : 'active';
$switch.attr( 'data-ig-es-switch', new_state );
if(new_state === 'active'){
jQuery('.es-collapsible').show();
}
else{
jQuery('.es-collapsible').hide();
}
})
//Upsell Send confirmation email on Audience screen
$(".email-subscribers_page_es_subscribers #bulk-action-selector-top option[value=bulk_send_confirmation_email_upsell]").attr('disabled','disabled');
jQuery(".es-audience-view .bulkactions #bulk-action-selector-top").after(statusselect);
jQuery(".es-audience-view .bulkactions #bulk-action-selector-top").after(groupselect);
jQuery('.groupsselect').hide();
jQuery('.statusesselect').hide();
jQuery("#bulk-action-selector-top").change(function () {
if (jQuery('option:selected', this).attr('value') == 'bulk_list_update' || jQuery('option:selected', this).attr('value') == 'bulk_list_add') {
jQuery('.groupsselect').eq(1).show();
jQuery('.statusesselect').eq(1).hide();
} else if (jQuery('option:selected', this).attr('value') == 'bulk_status_update') {
jQuery('.statusesselect').eq(1).show();
jQuery('.groupsselect').eq(1).hide();
} else {
jQuery('.statusesselect').hide();
jQuery('.groupsselect').hide();
}
});
jQuery('.es-audience-view .tablenav.bottom #bulk-action-selector-bottom').hide();
jQuery('.es-audience-view .tablenav.bottom #doaction2').hide();
jQuery(document).on('change', "#base_template_id", function () {
var img = jQuery('option:selected', this).data('img-url');
jQuery('.es-templ-img').html('<img src="' + img + '"/>');
});
//send test emails
$(document).on('click', '#es-send-test', function (e) {
e.preventDefault();
var test_email = $('#es-test-email').val();
if (test_email) {
var params = {
es_test_email: test_email,
action: 'es_send_test_email',
security: ig_es_js_data.security
};
$('#es-send-test').next('#spinner-image').show();
jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: params,
dataType: 'json',
success: function (response) {
if (response && typeof response.status !== 'undefined' && response.status == "SUCCESS") {
let successMessageHTML = '<span style="color:green">' + response.message + '</span>';
$('#es-send-test').parent().find('.helper').html(successMessageHTML);
} else {
let errorMessageHTML = '<span style="color:#e66060"><strong>' + ig_es_js_data.i18n_data.sending_error_text + '</strong>: ' + ( Array.isArray( response.message ) ? response.message.join() : response.message ) + '</span>';
$('#es-send-test').parent().find('.helper').html(errorMessageHTML);
}
$('#es-send-test').next('#spinner-image').hide();
},
error: function (err) {
$('#es-send-test').next('#spinner-image').hide();
}
});
} else {
confirm('Add test email ');
}
});
//klawoo form submit
jQuery("form[name=klawoo_subscribe]").submit(function (e) {
e.preventDefault();
var form = e.target;
jQuery(form).find('#klawoo_response').html('');
jQuery(form).find('#klawoo_response').show();
params = jQuery(form).serializeArray();
params.push({
name: 'action',
value: 'es_klawoo_subscribe',
});
// Add ajax security nonce.
params.push({
name: 'security',
value: ig_es_js_data.security,
});
jQuery.ajax({
method: 'POST',
type: 'text',
url: ajaxurl,
async: false,
data: params,
success: function (response) {
if (response != '') {
jQuery('#klawoo_response').html(response);
if (jQuery(form).hasClass('es-onboarding')) {
setTimeout(function () {
location.reload();
}, 2000);
} else {
jQuery('.es-emm-optin #name').val('');
jQuery('.es-emm-optin #email').val('');
jQuery('.es-emm-optin #es-gdpr-agree').attr('checked', false);
setTimeout(function () {
jQuery(form).find('#klawoo_response').hide('slow');
}, 2000);
}
} else {
jQuery('#klawoo_response').html('error!');
}
}
});
});
// Select List ID for Export
var _href = $('#ig_es_export_link_select_list').attr("href");
$('#ig_es_export_list_dropdown').change(function () {
var selected_list_id = $(this).val();
$('#ig_es_export_link_select_list').attr("href", _href + '&list_id=' + selected_list_id);
// Update total count in lists
var params = {
action: 'count_contacts_by_list',
list_id: selected_list_id,
security: ig_es_js_data.security,
};
$.ajax({
method: 'POST',
url: ajaxurl,
async: false,
data: params,
success: function (response) {
if (response != '') {
response = JSON.parse(response);
$('#ig_es_export_select_list .ig_es_total_contacts').text(response.total);
}
}
});
});
// Filtering campaign status based of type
var campaign_type = $('#ig_es_filter_campaign_type').val();
campaign_status(campaign_type);
$('#ig_es_filter_campaign_type').change(function (e) {
var campaign_type = $(this).val();
$('#ig_es_filter_campaign_status_by_type').val('');
campaign_status(campaign_type);
});
$('#ig_es_filter_reports_by_campaign_type option[value="sequence"]').hide();
function campaign_status( campaign_type ) {
var $status_id = $('#ig_es_filter_campaign_status_by_type');
switch (campaign_type) {
case 'newsletter':
$status_id.children('option').show();
$('#ig_es_filter_campaign_status_by_type option[value="0"]').html('Draft').show();
$('#ig_es_filter_campaign_status_by_type option[value="1"]').hide();
break;
case 'post_notification':
case 'post_digest':
case 'sequence':
$status_id.children('option').hide();
$('#ig_es_filter_campaign_status_by_type option[value=""],option[value="1"]').show();
$('#ig_es_filter_campaign_status_by_type option[value="0"]').html('In Active').show();
break;
default:
$status_id.children('option').show();
break;
}
}
jQuery('#ig-es-log-files').ig_es_select2();
// Broadcast Setttings
$('#ig_es_campaign_submit_button').attr("disabled", true);
let update_contacts_counts_xhr = {};
let edited_campaign_data = {}; // Variable to hold campaign id and name of edited campaign which is used in showing updated options select campaign field and updated HTML for conditions.
jQuery(document).on('bind_campaign_rules_events', function( e, data ){
if ( 'undefined' !== typeof data && 'undefined' !== typeof data.conditions_elem ) {
conditions_elem = data.conditions_elem;
} else {
conditions_elem = jQuery('.ig-es-conditions');
}
jQuery.each(jQuery(conditions_elem), function () {
var _self = jQuery(this),
conditions = _self.find('.ig-es-conditions-wrap'),
groups = _self.find('.ig-es-condition-group'),
cond = _self.find('.ig-es-condition');
jQuery.each(edited_campaign_data,function(campaign_id, campaign_name){
let option = jQuery(conditions_elem).find('.ig-es-campaign-select-field option[value="' + campaign_id + '"]');
let option_exists = jQuery(option).length > 0;
let new_option = new Option(campaign_name, campaign_id, false, false);
// Add new option don't exists else update option's text
if( ! option_exists ){
jQuery(conditions_elem).find('.ig-es-campaign-select-field').append(new_option);
} else {
jQuery(option).text(campaign_name);
}
});
groups.eq(0).appendTo(_self.find('.ig-es-condition-container'));
_self
.on('click', '.add-condition', function () {
ig_es_add_and_condtion();
})
.on('click', '.add-or-condition', function () {
var cont = jQuery(this).parent(),
id = cont.find('.ig-es-condition').last().data('id'),
clone = cond.eq(0).clone();
clone.removeAttr('id').appendTo(cont).data('id', ++id);
jQuery.each(clone.find('input, select'), function () {
var _this = jQuery(this),
name = _this.attr('name');
// match and replace regex '][any digit][any digit]' with '][AND rule counter][OR rule counter]'
_this.attr('name', name.replace(/\]\[\d+\]\[\d+\]/, '][' + cont.data('id') + '][' + id + ']')).prop('disabled', false);
name = _this.attr('name');
if( jQuery(_this).hasClass('ig-es-campaign-rule-form-multiselect') ) {
jQuery(_this).ig_es_select2();
}
if( jQuery(_this).hasClass('condition-field')) {
ig_es_handle_list_condition();
}
});
clone.find('.condition-field').val('').trigger('focus');
cond = _self.find('.ig-es-condition');
})
jQuery(_self).closest('.ig-es-campaign-rules').find('.close-conditions').on('click', function(){
jQuery(document).trigger('ig_es_update_contacts_counts',[{condition_elem:_self}]);
});
jQuery(_self).closest('.ig-es-campaign-rules').find('.remove-conditions').on('click', function () {
if (confirm(ig_es_js_data.i18n_data.remove_conditions_message)) {
jQuery(conditions).empty();
jQuery(_self).closest('.ig-es-campaign-rules').find('.ig-es-conditions-render-wrapper').empty();
jQuery(document).trigger('ig_es_update_contacts_counts',[{condition_elem:_self}]);
}
return false;
});
conditions
.on('click', '.remove-condition', function () {
var c = jQuery(this).parent();
if (c.parent().find('.ig-es-condition').length == 1) {
c = c.parent();
}
c.slideUp(100, function () {
jQuery(this).remove();
ig_es_handle_list_condition();
jQuery(document).trigger('ig_es_update_contacts_counts',[{condition_elem:_self}]);
});
})
.on('change', '.condition-field', function (event) {
var condition = jQuery(this).closest('.ig-es-condition'),
field = jQuery(this);
ig_es_show_operator_and_value_field(field);
jQuery(document).trigger('ig_es_update_contacts_counts',[{condition_elem:_self}]);
})
.on('change', '.condition-operator', function () {
jQuery(document).trigger('ig_es_update_contacts_counts',[{condition_elem:_self}]);
})
.on('change', '.condition-value', function () {
jQuery(document).trigger('ig_es_update_contacts_counts',[{condition_elem:_self}]);
})
.on('click', '.ig-es-condition-add-multiselect', function () {
jQuery(this).parent().clone().insertAfter(jQuery(this).parent()).find('.condition-value').select().trigger('focus');
return false;
})
.on('click', '.ig-es-condition-remove-multiselect', function () {
jQuery(this).parent().remove();
jQuery(document).trigger('ig_es_update_contacts_counts',[{condition_elem:_self}]);
return false;
})
.on('change', '.ig-es-conditions-value-field-multiselect > .condition-value', function () {
if (0 == jQuery(this).val() && jQuery(this).parent().parent().find('.condition-value').size() > 1) jQuery(this).parent().remove();
})
.find('.condition-field').prop('disabled', false).trigger('change');
jQuery(document).trigger('ig_es_update_contacts_counts',[{condition_elem:_self}]);
// Add one list condition if there are no conditions.
if( 0 === jQuery(_self).find('.ig-es-conditions-wrap .ig-es-condition-group').length ) {
ig_es_add_default_list_condition();
} else {
jQuery(_self).find('.ig-es-conditions-wrap .ig-es-condition-group .condition-value').each(function(){
if( jQuery(this).hasClass('ig-es-campaign-rule-form-multiselect') ) {
jQuery(this).ig_es_select2();
}
});
}
function ig_es_add_and_condtion( condition_data ) {
let id = groups.length,
clone = groups.eq(0).clone();
clone.removeAttr('id').appendTo(conditions).data('id', id).show();
jQuery.each(clone.find('input, select'), function () {
let _this = jQuery(this);
name = _this.attr('name');
// match and replace regex '][any digit]' with '][id]' i.e. AND rule counter
_this.attr('name', name.replace(/\]\[\d+\]/, '][' + id + ']')).prop('disabled', false);
if( jQuery(_this).hasClass('ig-es-campaign-rule-form-multiselect') ) {
jQuery(_this).ig_es_select2();
}
});
if ( 'undefined' === typeof condition_data ) {
condition_data = {
condition: '',
}
}
let condition = condition_data.condition;
let condition_field = clone.find('.condition-field');
jQuery(condition_field).val(condition).trigger('focus');
if ( '' !== condition ) {
ig_es_show_operator_and_value_field(condition_field);
}
groups = _self.find('.ig-es-condition-group');
cond = _self.find('.ig-es-condition');
ig_es_handle_list_condition();
}
function ig_es_handle_list_condition( selected_elem ) {
if ( ig_es_js_data.is_pro ) {
return;
}
var condition_fields = jQuery('.ig-es-conditions-wrap .condition-field');
var list_rule_count = 0;
jQuery(condition_fields).each(function(){
var selected_rule = jQuery(this).val();
if ( '_lists__in' === selected_rule ) {
list_rule_count++;
}
});
var disable_list_rule = list_rule_count > 0;
var campaign_rules = jQuery('.ig-es-conditions-wrap .condition-field');
jQuery(campaign_rules).each(function(index,elem){
var list_rule_option = jQuery(this).find('option[value = "_lists__in"]');
var list_rule_text = jQuery(list_rule_option).text();
list_rule_text = list_rule_text.replace(' [MAX]','');
if ( 'undefined' !== typeof selected_elem ) {
if( disable_list_rule && ! ( jQuery(selected_elem)[0] === elem ) ) {
list_rule_text += ' [MAX]';
jQuery(list_rule_option).prop("selected", false).attr('disabled','disabled');
} else {
jQuery(list_rule_option).removeAttr('disabled');
}
} else {
if( index > 0 && disable_list_rule ) {
list_rule_text += ' [MAX]';
jQuery(list_rule_option).prop("selected", false).attr('disabled','disabled');
} else {
jQuery(list_rule_option).removeAttr('disabled');
}
}
jQuery(list_rule_option).text(list_rule_text);
});
}
function ig_es_add_default_list_condition() {
ig_es_add_and_condtion({ condition: '_lists__in' });
}
function ig_es_show_operator_and_value_field( field ) {
var condition = jQuery(field).closest('.ig-es-condition'),
operator_field, value_field;
condition.find('div.ig-es-conditions-value-field').removeClass('active').find('.condition-value').prop('disabled', true);
condition.find('div.ig-es-conditions-operator-field').removeClass('active').find('.condition-operator').prop('disabled', true);
var field_value = jQuery(field).val();
condition.find('.ig-es-conditions-operator-fields,.ig-es-conditions-value-fields').attr('data-condition', field_value );
value_field = condition.find('div.ig-es-conditions-value-field[data-fields*=",' + field_value + ',"]').addClass('active').find('.condition-value').prop('disabled', false);
operator_field = condition.find('div.ig-es-conditions-operator-field[data-fields*=",' + field_value + ',"]').addClass('active').find('.condition-operator').prop('disabled', false);
if (!value_field.length) {
value_field = condition.find('div.ig-es-conditions-value-field-default').addClass('active').find('.condition-value').prop('disabled', false);
}
if (!operator_field.length) {
operator_field = condition.find('div.ig-es-conditions-operator-field-default').addClass('active').find('.condition-operator').prop('disabled', false);
}
if ( jQuery(field).hasClass('condition-field') ) {
ig_es_handle_list_condition(field);
}
}
});
});
$(document).on('ig_es_update_contacts_counts', function(e, data){
let condition_elem = data.condition_elem;
let condition_container_elem = $(condition_elem).closest('.ig-es-campaign-rules');
let selected_list_id = $('#ig_es_broadcast_list_ids').val();
let campaign_id = $(condition_container_elem).data('campaign-id');
let campaign_type = $(condition_container_elem).data('campaign-type');
let conditions = [],
groups = $(condition_elem).find('.ig-es-conditions-wrap > .ig-es-condition-group'),
i = 0;
$.each(groups, function () {
let c = $(this).find('.ig-es-condition');
$.each(c, function () {
let _this = $(this),
value,
field = _this.find('.condition-field').val(),
operator = _this.find('.ig-es-conditions-operator-field.active').find('.condition-operator').val();
if (!operator || !field) return;
value = _this.find('.ig-es-conditions-value-field.active').find('.condition-value').map(function () {
return $(this).val();
}).toArray();
if (value.length == 1) {
value = value[0];
}
if (!conditions[i]) {
conditions[i] = [];
}
conditions[i].push({
field: field,
operator: operator,
value: value,
});
});
i++;
});
// Return if no list or conditions selected.
if ( ! selected_list_id && 0 === conditions.length ) {
$('.ig_es_list_contacts_count').text(0);
$(condition_container_elem).find('.ig-es-conditions-render-wrapper').html('');
return;
}
let get_count = 'newsletter' === campaign_type || 'post_notification' === campaign_type || 'post_digest' === campaign_type ? 'yes' : 'no'; // Get count only when on broadcast screen
// Update total count in lists
let params = {
action: 'count_contacts_by_list',
list_id: selected_list_id,
conditions: conditions,
status: 'subscribed',
get_count: get_count,
security: ig_es_js_data.security
};
if ( 'undefined' !== typeof update_contacts_counts_xhr && 'undefined' !== typeof update_contacts_counts_xhr[campaign_id] ) {
update_contacts_counts_xhr[campaign_id].abort();
}
update_contacts_counts_xhr[campaign_id] = $.ajax({
method: 'POST',
url: ajaxurl,
async: true,
data: params,
beforeSend: function() {
$('#spinner-image').show();
},
success: function (response) {
if (response !== '') {
response = JSON.parse(response);
if (get_count && response.hasOwnProperty('total')) {
let total = response.total;
let total_recipients_text = "<div class='mt-1.5 py-2'><span class='font-medium text-base text-gray-700'><span class='ig_es_list_contacts_count'>" + total + "</span> <span class='text-base font-medium text-gray-700'></span><span class='font-normal text-sm text-gray-500'> recipients </span></div>";
$('#ig_es_total_contacts .ig_es_list_contacts_count').html(total);
$('#ig_es_total_recipients').html(total_recipients_text);
$(condition_container_elem).find('.ig-es-total-contacts').text(total);
if (total == 0) {
$('#ig_es_campaign_submit_button').attr("disabled", true);
} else {
$('#ig_es_campaign_submit_button').attr("disabled", false);
}
}
$(condition_container_elem).find('.ig-es-conditions-render-wrapper').html('');
if ( response.hasOwnProperty('conditions_html') ) {
let conditions = $.parseHTML(response.conditions_html);
$(conditions).find('.campaign-name').each(function(){
let campaign_id = $(this).data('campaign-id');
if (edited_campaign_data.hasOwnProperty(campaign_id)) {
let campaign_name = edited_campaign_data[campaign_id];
$(this).text(campaign_name);
}
});
$(condition_container_elem).find('.ig-es-conditions-render-wrapper').append($(conditions));
}
if ( $(condition_container_elem).find('.ig-es-conditions-wrap .condition-field').length > 0 ) {
$(condition_container_elem).find('.remove-all-conditions-wrapper').removeClass('hidden');
} else {
$(condition_container_elem).find('.remove-all-conditions-wrapper').addClass('hidden');
}
}
}
}).always(function(){
$('#spinner-image').hide();
});;
});
// Add/update campaign option in select campaign rule
jQuery(document).on('ig_es_sequence_name_updated',function(e,seq_data){
let seq_id = seq_data.id;
let seq_name = seq_data.name;
let new_option = new Option(seq_name, seq_id, false, false);
edited_campaign_data[seq_id] = seq_name;
jQuery('.es_seq_right_wrapper:not([data-seq-id="' + seq_id + '"])').each(function(){
let current_seq_id = jQuery(this).data('seq-id');
// We are restricting admin to select sequence campaigns whose id is greater then current sequence id.
if ( current_seq_id > seq_id ) {
jQuery(this).find('.ig-es-campaign-select-field').each(function(){
let option = jQuery(this).find('option[value = ' + seq_id + ']');
let option_exists = jQuery(option).length > 0;
// Add new option don't exists else update option's text
if( ! option_exists ){
jQuery(this).append(new_option);
} else {
jQuery(option).text(seq_name);
}
jQuery(this).ig_es_select2().trigger('change');
});
}
});
});
jQuery(document).on('change', '#broadcast_form #base_template_id', function () {
var template_id = $(this).val();
// Update total count in lists
var params = {
action: 'get_template_content',
template_id: template_id,
};
$.ajax({
method: 'POST',
url: ajaxurl,
async: false,
data: params,
success: function (response) {
if (response !== '') {
response = JSON.parse(response);
if (response.hasOwnProperty('subject')) {
jQuery('.wp-editor-boradcast').val(response.body);
if ('undefined' !== typeof tinyMCE) {
var activeEditor = tinyMCE.get('edit-es-broadcast-body');
if (activeEditor !== null) { // Make sure we're not calling setContent on null
response.body = response.body.replace(/\n/g, "<br />");
activeEditor.setContent(response.body); // Update tinyMCE's content
}
}
if (response.inline_css && jQuery('#inline_css').length) {
jQuery('#inline_css').val(response.inline_css);
}
if (response.es_utm_campaign && jQuery('#es_utm_campaign').length) {
jQuery('#es_utm_campaign').val(response.es_utm_campaign);
}
if ( 1 === $('#edit-es-broadcast-body').length ) {
ig_es_sync_wp_editor_content();
$('#edit-es-broadcast-body').trigger('change');
}
}
}
}
});
});
jQuery(document).on('change', '#campaign_form #base_template_id, #campaign_form #post_digest_template_id', function () {
var template_id = $(this).val();
// Update total count in lists
var params = {
action: 'get_template_content',
template_id: template_id,
};
$.ajax({
method: 'POST',
url: ajaxurl,
async: false,
data: params,
success: function (response) {
if (response !== '') {
response = JSON.parse(response);
if (response.hasOwnProperty('subject')) {
jQuery('#ig_es_campaign_subject').val(response.subject);
jQuery('.wp-campaign-body-editor').val(response.body);
if ('undefined' !== typeof tinyMCE) {
var activeEditor = tinyMCE.get('edit-es-campaign-body');
if (activeEditor !== null) { // Make sure we're not calling setContent on null
response.body = response.body.replace(/\n/g, "<br />");
activeEditor.setContent(response.body); // Update tinyMCE's content
}
}
if (response.inline_css && jQuery('#inline_css').length) {
jQuery('#inline_css').val(response.inline_css);
}
if (response.es_utm_campaign && jQuery('#es_utm_campaign').length) {
jQuery('#es_utm_campaign').val(response.es_utm_campaign);
}
if ( 1 === $('#edit-es-campaign-body').length ) {
ig_es_sync_wp_editor_content();
$('#edit-es-campaign-body').trigger('change');
}
}
}
}
});
});
//post notification category select
jQuery(document).on('change', '.es-note-category-parent', function () {
var val = jQuery('.es-note-category-parent:checked').val();
if ( '{a}All{a}' === val || '{a}None{a}' === val ) {
jQuery('input[name="data[es_note_cat][]"]').not('.es_custom_post_type').closest('tr').hide();
} else {
jQuery('input[name="data[es_note_cat][]"]').not('.es_custom_post_type').closest('tr').show();
}
});
jQuery(document).trigger('bind_campaign_rules_events');
jQuery('.es-note-category-parent').trigger('change');
jQuery('#tabs-general input[name="ig_es_from_email"]').on('change', function () {
let from_email = jQuery(this).val();
let is_valid_email = ig_es_is_valid_email(from_email);
if ( is_valid_email ) {
let from_email_domain = from_email.split('@')[1].toLowerCase();
let is_popolar_domain = ig_es_js_data.popular_domains.indexOf(from_email_domain) > -1;
if ( is_popolar_domain ) {
jQuery('#ig-es-from-email-notice').removeClass('hidden');
} else {
jQuery('#ig-es-from-email-notice').addClass('hidden');
}
}
});
//es mailer settings
jQuery(document).on('change', '.es_mailer', function (e) {
var val = jQuery('.es_mailer:checked').val();
var wrapper_row = jQuery(this).closest('tr');
jQuery(wrapper_row).find('[name*="ig_es_mailer_settings"], .es_sub_headline, .field-desciption').not('.es_mailer').hide();
jQuery(wrapper_row).find('.' + val).show();
});
jQuery('.es_mailer').trigger('change');
jQuery('#ig_es_ess_opted_for_sending_service').on('change', function() {
if ( jQuery(this).is(':checked') ) {
jQuery('#sending_service_info').removeClass('hidden');
let fallback_mailer_html_text = `<span class="inline-block pt-5 text-xs italic font-normal leading-snug text-gray-500">${ig_es_js_data.i18n_data.ess_fallback_text}</span>`;
jQuery('#ig_es_mailer_settings-field-row td p:first').html(fallback_mailer_html_text);
} else {
jQuery('#sending_service_info').addClass('hidden');
jQuery('#ig_es_mailer_settings-field-row td p:first').html('');
}
});
jQuery('#ig_es_ess_opted_for_sending_service').trigger('change');
//preview broadcast
// ig_es_preview_broadcast
jQuery(document).on('click', '#ig_es_preview_broadcast', function (e) {
ig_es_sync_wp_editor_content();
if (jQuery('.wp-editor-boradcast').val() !== '') {
jQuery('.es-form').find('form').attr('target', '_blank');
jQuery('.es-form').find('form').find('#es_broadcast_preview').val('preview');
jQuery(this).unbind('submit').submit();
}
});
jQuery(document).on('click', '#ig_es_campaign_submit_button', function (e) {
if (jQuery('.wp-editor-boradcast').val() !== '') {
jQuery('.es-form').find('form').attr('target', '');
jQuery('.es-form').find('form').find('#es_broadcast_preview').val('');
}
});
$('.ig-es-campaign-status-toggle-label input[type="checkbox"]').change(function() {
let checkbox_elem = $(this);
let campaign_id = $(checkbox_elem).val();
let new_campaign_status = $(checkbox_elem).prop('checked') ? 1 : 0;
let data = {
action: 'ig_es_toggle_campaign_status',
campaign_id: campaign_id,
new_campaign_status: new_campaign_status,
security: ig_es_js_data.security
}
jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: data,
dataType: 'json',
success: function (response) {
if ( !response.success ) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
// Revert back toggle status.
$(checkbox_elem).prop( 'checked', ! new_campaign_status );
}
},
error: function (err) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
});
});
$('.ig_es_save_campaign, .ig_es_draft_campaign, #view_campaign_summary_button, #campaign_summary_menu').on('click', function(e) {
let trigger_elem = $(this);
ig_es_draft_campaign( trigger_elem );
});
$('#ig_es_campaign_subject,#edit-es-campaign-body,#campaign_form #inline_css').on('change',function(e){
let trigger_elem = $(this);
ig_es_draft_campaign( trigger_elem );
});
$('#save_campaign_btn').on('click', function(e) {
let trigger_elem = $(this);
ig_es_save_campaign( trigger_elem );
});
$('#save__and_schedule_campaign_btn').on('click', function(e) {
let trigger_elem = $(this);
ig_es_save_and_schedule_campaign( trigger_elem );
});
$('#activate_campaign_btn').on('click', function(e) {
let trigger_elem = $(this);
ig_es_activate_campaign( trigger_elem );
});
$("#campaign_form #view_campaign_summary_button, #campaign_form #campaign_summary_menu, .es-second-step-tab, #view_form_summary_button").click(function() {
let fieldset = $(this).closest('.es_fieldset');
fieldset.next().find('div.es_campaign_second,.es-second-step').fadeIn('normal');
fieldset.find('.es_campaign_first,.es-first-step').hide();
fieldset.find('#view_campaign_content_button,#campaign_summary_actions_buttons_wrapper,.es-second-step-buttons-wrapper').show();
fieldset.find('#view_campaign_summary_button,#view_campaign_preview_button,.es-first-step-buttons-wrapper').hide();
$('#campaign_content_menu,.es-first-step-tab').removeClass("active");
$('#campaign_summary_menu,.es-second-step-tab').addClass("active");
//$('.active').removeClass('active').next().addClass('active');
// Trigger template content changed event to update email preview.
$('textarea[name="data[body]"]').trigger('change');
});
$('#edit-campaign-form-container').on('change','.wp-campaign-body-editor, #edit-es-campaign-body,textarea[name="data[body]"],#ig_es_campaign_subject',function(event){
ig_es_sync_wp_editor_content();
let form_data = $(this).closest('form').serialize();
//var formData = JSON.stringify($(this).closest('form').serializeArray());
var formData = $(this).closest('form').serializeArray()
.reduce(function (json, { name, value }) {
json[name] = value;
return json;
}, {});
// Add action to form data
form_data += form_data + '&action=ig_es_get_campaign_preview&preview_type=inline&security=' + ig_es_js_data.security;
jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: form_data,
dataType: 'json',
beforeSend:function(){
if(jQuery('#campaign_summary_menu').hasClass('active')){
jQuery('.ig-es-ajax-loader').css("visibility","visible");
}
},
success: function (response) {
if (response.success) {
if ( 'undefined' !== typeof response.data ) {
let response_data = response.data;
let preview_html = response_data.preview_html;
let campaign_subject = response_data.campaign_subject;
let contact_name = response_data.contact_name;
let contact_email = response_data.contact_email;
$('.campaign_preview_subject').html(campaign_subject);
$('.campaign_preview_contact_name').html(contact_name);
if ( '' !== contact_email ) {
$('.campaign_preview_contact_email').html( '&lt;' + contact_email + '&gt;');
}
ig_es_load_iframe_preview('.campaign_preview_content', preview_html);
}
} else {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
},
error: function (err) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
},
complete:function(){
jQuery('.ig-es-ajax-loader').css("visibility","hidden");
}
});
});
$('#es_test_email_btn').on('click', function(){
let preview_option = $('[name="preview_option"]:checked').val();
let template_button = $('#es_test_email_btn');
$(template_button).parent().find('.es-send-success').hide();
$(template_button).parent().find('.es-send-error').hide();
if ( 'preview_in_popup' === preview_option ) {
ig_es_show_broadcast_preview_in_popup();
} else if ( 'preview_in_email' === preview_option ) {
ig_es_send_broadcast_preview_email();
}
});
$('#view_campaign_preview_button').on('click', function(){
let template_button = $('#view_campaign_preview_button');
$(template_button).parent().find('.es-send-success').hide();
$(template_button).parent().find('.es-send-error').hide();
jQuery(template_button).addClass('loading');
ig_es_process_campaign_action( 'save' ).then( response => {
if (response.success) {
let response_data = response.data;
let campaign_id = response_data.campaign_id;
$('#campaign_id').val( campaign_id );
ig_es_show_campaign_preview_in_popup();
} else {
alert( ig_es_js_data.i18n_data.campaign_preivew_error_message );
}
}, response => {
alert( ig_es_js_data.i18n_data.campaign_preivew_error_message );
});
});
$('#view_template_preview_button').on('click', function(){
let template_button = $('#view_template_preview_button');
$(template_button).parent().find('.es-send-success').hide();
$(template_button).parent().find('.es-send-error').hide();
ig_es_show_template_preview_in_popup();
});
$('#save_campaign_as_template_button').on('click', function(e){
e.preventDefault();
ig_es_save_campaign_as_template();
});
$('#campaign_form [name="preview_option"]').on('click',function(){
let preview_option = $('[name="preview_option"]:checked').val();
if ( 'preview_in_email' === preview_option ) {
$('#es_test_send_email').show();
} else {
$('#es_test_send_email').hide();
}
});
$('#toggle-sender-details').on('click',function(){
let toggle_control_element = $(this);
let sender_details_container_element = $('#sender-details-container');
let is_visible = $(sender_details_container_element).is(':visible');
if ( is_visible ) {
$(sender_details_container_element).hide();
$(toggle_control_element).removeClass('toggled');
} else {
$(sender_details_container_element).show();
$(toggle_control_element).addClass('toggled');
}
});
// Check email authentication headers
jQuery('#ig-es-verify-auth-headers').click(function(e){
e.preventDefault();
var params = {
type:'POST',
url:ajaxurl,
data:{
action:'es_send_auth_test_email',
security:ig_es_js_data.security,
},
dataType:'json',
beforeSend:function(){
jQuery('#ig-es-verify-auth-headers').next('#spinner-image').show();
},
success:function(res){
if( 'SUCCESS' === res['status'] ){
let time_delay = 5000;
setTimeout(function(){
getEmailAuthHeaders();
},time_delay);
}
else{
jQuery('#ig-es-verify-auth-headers').next('#spinner-image').hide();
jQuery('#ig-es-verify-auth-message').addClass('text-red-500').html(ig_es_js_data.i18n_data.error_send_test_email);
}
},
error:function(err){
jQuery('#ig-es-verify-auth-headers').next('#spinner-image').hide();
jQuery('#ig-es-verify-auth-message').addClass('text-red-500').html(ig_es_js_data.i18n_data.error_send_test_email);
},
}
jQuery.ajax(params);
});
function getEmailAuthHeaders(){
var params = {
type:'POST',
url:ajaxurl,
data:{
action:'es_get_auth_headers',
security:ig_es_js_data.security,
},
dataType:'json',
success:function(res){
let headerData = [];
let table_elem = jQuery('#ig-es-settings-authentication-table');
try {
headerData = JSON.parse(res.data);
if( 'undefined' !== table_elem && Array.isArray(headerData) && headerData.length > 0 ){
populateTableData( table_elem, headerData, false );
jQuery('#ig-es-verify-auth-message').addClass('text-green-500').html(ig_es_js_data.i18n_data.success_verify_email_headers);
}
else{
jQuery('#ig-es-verify-auth-message').addClass('text-red-500').html(ig_es_js_data.i18n_data.error_server_busy);
}
}
catch(err){
jQuery('#ig-es-verify-auth-message').addClass('text-red-500').html(ig_es_js_data.i18n_data.error_server_busy);
}
},
error:function(err){
jQuery('#ig-es-verify-auth-message').addClass('text-red-500').html(ig_es_js_data.i18n_data.error_server_busy);
},
complete:function(){
jQuery('#ig-es-verify-auth-headers').next('#spinner-image').hide();
}
}
jQuery.ajax(params);
}
function populateTableData(table_element, data_array,mapByIndex){
let table_row;
let row_id,cell_value='';
let row_data_keys={};
let table_body = table_element.find('tbody');
for (let index = 0; index < data_array.length; index++) {
row_id = (mapByIndex) ? data_array[index] : data_array[index]['key'];
table_row = table_body.find('tr[data-row-id="'+row_id+'"]');
row_data_keys = Object.keys(data_array[index]);
row_data_keys.forEach(key => {
cell_value = data_array[index][key];
if( cell_value.length > 30){
cell_value = cell_value.slice(0,30) + '...';
}
table_row.find('td[data-cell-id="'+row_id+"-"+key+'"]').html(cell_value );
});
}
}
jQuery(document).on( 'click', '#es_check_auth_header', function(e){
window.location.href = '?page=es_settings&btn=check_auth_header#tabs-email_sending';
jQuery('html, body').animate({
scrollTop: jQuery("#ig-es-settings-authentication-table").offset().top
}, 2000);
});
if(window.location.href.indexOf('page=es_settings&btn=check_auth_header#tabs-email_sending') !== -1){
jQuery('html, body').animate({
scrollTop: jQuery("#ig-es-settings-authentication-table").offset().top
}, 2000);
}
// Check spam score
jQuery(document).on('click', '.es_spam' , function(e) {
e.preventDefault();
var tmpl_id = jQuery('.es_spam').next().next('#es_template_id').val();
var subject = jQuery('#ig_es_broadcast_subject,#ig_es_campaign_subject').val();
var content = jQuery('.wp-editor-boradcast,.wp-campaign-body-editor').val();
jQuery('.es_spam').next('.es-loader-img').show();
let from_name = jQuery( '#from_name' ).val();
let from_email = jQuery( '#from_email' ).val();
var params = {
type: 'POST',
url: ajaxurl,
data: {
action: 'es_get_spam_score',
tmpl_id: tmpl_id,
subject: subject,
content: content,
from_name: from_name,
from_email: from_email,
security: ig_es_js_data.security
},
dataType: 'json',
success: function(res) {
if(res && typeof res.status !== 'undefined') {
jQuery('.es_spam').next('.es-loader-img').hide();
if( 'success' === res.status ) {
if(res.res.spamScoreData.score !== 'undefined') {
var score = res.res.spamScoreData.score;
score = (score < 0) ? 0 : score;
jQuery('.es-spam-score').text(score);
if(parseInt(score) < 4) {
jQuery('.es-spam-success').show();
jQuery('.es-spam-error').hide();
jQuery('.es-spam-error-log').hide();
jQuery('.es-spam-score').addClass('es-spam-score-success text-green-600').removeClass('es-spam-score-error');
} else {
jQuery('.es-spam-error').show();
jQuery('.es-spam-success').hide();
var rules = res.res.spamScoreData.rules;
jQuery('.es-spam-score').addClass('es-spam-score-error text-red-600').removeClass('es-spam-score-success');
jQuery('.es-spam-error-log').show();
jQuery('.es-spam-error-log').find('ul').empty();
let rule_classes = '';
if( 1 === jQuery('#spam_score_modal').length ) {
rule_classes = 'text-base pb-1 list-none text-center font-medium text-red-400';
}
for (var i = rules.length - 1; i >= 0; i--) {
if(rules[i].score > 1.2){
jQuery('.es-spam-error-log').find('ul').append('<li class="' + rule_classes + '">'+ rules[i].description + '</li>');
}
}
}
jQuery('#spam_score_modal').show();
}
} else {
alert( res.error_message );
}
}
},
error: function(res) {
jQuery('#es_test_email_btn').next('.es-loader-img').hide();
}
};
jQuery.ajax(params);
});
// Close spam score popup
jQuery("#close_score").on('click', function (event) {
event.preventDefault();
jQuery('#spam_score_modal').hide();
});
// Show/hide utm campaign name field.
jQuery('#enable_utm_tracking').on('change', function() {
let enable_utm_tracking = jQuery(this).prop('checked') ? 'yes' : 'no';
if( 'yes' === enable_utm_tracking ) {
jQuery('.ig_es_utm_campaign_name_wrapper').removeClass('hidden');
} else {
jQuery('.ig_es_utm_campaign_name_wrapper').addClass('hidden');
}
});
// Hide trial to premium offer notice when accepted. This function just hide it from frontend, actual notice gets hidden when reloading page in new tab.
jQuery('#ig-es-optin-trial-to-premium-offer').on('click', function(){
jQuery(this).closest('.notice').hide('slow');
});
jQuery('#es_close_preview').on('click', function (event) {
event.preventDefault();
$('#report_preview_template').hide();
});
jQuery('#es_close_template_preview').on('click', function (event) {
event.preventDefault();
$('#es_preview_template').hide();
});
// Prevent campaign form submission on enter key press
jQuery('#campaign_form').on('keyup keypress', function(e) {
let pressedKeyCode = e.keyCode || e.which;
let enterKeyCode = 13;
let enterKeyPressed = pressedKeyCode === enterKeyCode;
if ( enterKeyPressed ) {
let targetType = e.target.type;
if ( 'textarea' !== targetType ) {
e.preventDefault();
}
}
});
// Create rest API key for selected user
jQuery('#ig-es-generate-rest-api-key').click(function(e){
e.preventDefault();
let user_id = jQuery('#ig-es-rest-api-user-id').val();
let message_class = '';
if ( '' === user_id ) {
message_class = 'text-red-600';
jQuery('#response-messages').removeClass('hidden').find('div').attr('class', message_class).html(ig_es_js_data.i18n_data.select_user);
return;
}
let btn_elem = $(this);
jQuery.ajax({
type:'POST',
url:ajaxurl,
data:{
action:'ig_es_generate_rest_api_key',
user_id: user_id,
security:ig_es_js_data.security,
},
dataType:'json',
beforeSend:function(){
jQuery(btn_elem).addClass('loading');
},
success:function(response){
if( response.status ){
let status = response.status;
let message = response.message;
jQuery('.rest-api-response').removeClass('hidden').addClass(status).html(message);
message_class = '';
jQuery('#response-messages').removeClass('hidden').find('div').attr('class', message_class).html(message);
} else{
message_class = 'text-red-600';
jQuery('#response-messages').removeClass('hidden').find('div').attr('class', message_class).html(ig_es_js_data.i18n_data.ajax_error_message);
}
},
error:function(err){
alert(ig_es_js_data.i18n_data.ajax_error_message);
},
}).always(function(){
jQuery(btn_elem).removeClass('loading');
});
});
// Delete rest API key for selected user
jQuery('.ig-es-delete-rest-api-key').click(function(e){
e.preventDefault();
let delete_rest_api = confirm( ig_es_js_data.i18n_data.delete_rest_api_confirmation );
if ( ! delete_rest_api ) {
return;
}
let rest_api_row = jQuery(this).closest('.ig-es-rest-api-row');
let user_id = jQuery(rest_api_row).data('user-id');
let api_index = jQuery(rest_api_row).data('api-index');
let btn_elem = $(this);
jQuery.ajax({
type:'POST',
url:ajaxurl,
data:{
action:'ig_es_delete_rest_api_key',
user_id: user_id,
api_index: api_index,
security:ig_es_js_data.security,
},
dataType:'json',
beforeSend:function(){
jQuery(btn_elem).addClass('loading');
},
success:function(response){
if( response.status ){
let status = response.status;
if ( 'success' === status ) {
jQuery(rest_api_row).remove();
} else {
alert( response.message );
}
} else{
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
},
error:function(err){
alert( ig_es_js_data.i18n_data.ajax_error_message );
},
}).always(function(){
jQuery(btn_elem).removeClass('loading');
});
});
// Workflow JS
IG_ES_Workflows = {
$triggers_box: $('#ig_es_workflow_trigger'),
$actions_box : $('#ig_es_workflow_actions'),
$variables_box: $('#ig_es_workflow_variables'),
$trigger_select: $('.js-trigger-select').first(),
$actions_container: $('.ig-es-actions-container'),
init: function() {
IG_ES_Workflows.init_triggers_box();
IG_ES_Workflows.init_actions_box();
IG_ES_Workflows.init_rules_box();
IG_ES_Workflows.init_variables_box();
IG_ES_Workflows.init_show_hide();
IG_ES_Workflows.init_workflow_status_switch();
IG_ES_Workflows.init_workflow_gallery();
},
init_workflow_status_switch: function() {
$('.ig-es-switch.js-toggle-workflow-status').click(function(){
let $switch, state, new_state;
$switch = $(this);
if ( $switch.is('.ig-es-loading') ) {
return;
}
state = $switch.attr( 'data-ig-es-switch' );
new_state = state === 'active' ? 'inactive' : 'active';
$switch.addClass('ig-es-loading');
$.post( ajaxurl, {
action: 'ig_es_toggle_workflow_status',
workflow_id: $switch.attr( 'data-workflow-id' ),
new_state: new_state,
security: ig_es_js_data.security,
dataType: 'json'
}, function( response ) {
$switch.attr( 'data-ig-es-switch', new_state );
$switch.removeClass('ig-es-loading');
});
});
},
init_workflow_gallery: function() {
$('.ig-es-create-workflow-from-gallery-item').click(function(){
let $gallery_item = $(this);
if ( $gallery_item.is('.loading') ) {
return;
}
$gallery_item.addClass('loading');
$.post( ajaxurl, {
action: 'ig_es_create_workflow_from_gallery_item',
item_name: $gallery_item.attr( 'data-item-name' ),
security: ig_es_js_data.security,
dataType: 'json'
}, function( response ) {
if ( response.success ) {
window.location.href = response.data.redirect_url;
} else {
alert( response.data.error_message );
}
$gallery_item.removeClass('loading');
});
});
},
/**
* Show / hide logic with data attributes
*/
init_show_hide: function() {
let update = function( $el ) {
let id = $el.data( 'ig-es-bind' );
let value = $el.val();
let is_checkbox = $el.is('input[type="checkbox"]');
$('[data-ig-es-show]').each(function() {
if ( is_checkbox && $(this).data('ig-es-show') === id ) {
if ( $el.is(':checked') ) {
$(this).show();
} else {
$(this).hide();
}
} else {
let logic = $(this).data('ig-es-show').split('=');
if ( logic[0] !== id ) {
return;
}
let possible_values = logic[1].split('|');
if ( possible_values.indexOf( value ) !== -1 ) {
$(this).show();
} else {
$(this).hide();
}
}
});
$('[data-ig-es-hide]').each(function() {
if ( is_checkbox && $(this).data('ig-es-hide') === id ) {
if ( $el.is(':checked') ) {
$(this).hide();
} else {
$(this).show();
}
} else {
let logic = $(this).data('ig-es-hide').split('=');
if ( logic[0] !== id ) {
return;
}
let possible_values = logic[1].split('|');
if ( possible_values.indexOf( value ) !== -1 ) {
$(this).hide();
} else {
$(this).show();
}
}
});
};
$(document).on( 'change', '[data-ig-es-bind]', function() {
update( $(this) );
});
$('[data-ig-es-bind]').each(function() {
update( $(this) );
});
},
/**
*
*/
init_triggers_box: function() {
IG_ES_Workflows.$trigger_select.change(function(e){
IG_ES_Workflows.fill_trigger_fields( $(this).val() );
IG_ES_Workflows.maybe_show_run_option();
});
},
/**
* @param trigger_name
*/
fill_trigger_fields: function( trigger_name ) {
// Remove existing fields
IG_ES_Workflows.$triggers_box.find('tr.ig-es-trigger-option').remove();
if ( trigger_name ) {
IG_ES_Workflows.$triggers_box.addClass('ig-es-loading');
let workflow_id = $('#workflow_id').val();
$.ajax({
url: ajaxurl,
data: {
action: 'ig_es_fill_trigger_fields',
trigger_name: trigger_name,
security: ig_es_js_data.security,
workflow_id: workflow_id
}
})
.done(function(response){
if ( ! response.success ) {
return;
}
ig_es_workflows_data.trigger = response.data.trigger;
IG_ES_Workflows.refine_variables();
IG_ES_Workflows.$triggers_box.find('tbody').append( response.data.fields );
IG_ES_Workflows.$triggers_box.removeClass('ig-es-loading');
IG_ES_Workflows.$triggers_box.find('.js-trigger-description').html( '<p class="ig-es-field-description">' + response.data.trigger.description + '</p>' );
$(document).trigger('ig_es_workflow_trigger_updated', [response.data]);
});
} else {
$('.ig-es-variables-group').addClass('hidden');
IG_ES_Workflows.toggle_no_variable_message();
}
},
init_rules_box: function () {
try {
//All rules avalilable in ES workflow
let rule_details = igEsWorkflowRules;
let all_rules = rule_details?.all_rules;
let grouped_rules = [];
let valid_rules = {};
let $meta_box_footer = $('.rules-metabox-footer');
let $rule_template_container = $('#rule-template-container');
let $rules_container = $('#ig-es-rules-container');
let $main_rule_container= $('.ig-es-rule-container');
//Add new rule group.
$(document).on('click', '.ig-es-add-rule-group', function () {
let $new_rule_group = add_new_rule_group();
$rules_container.append($new_rule_group);
});
//Add one more rules in respective rule group
$(document).on('click', '.ig-es-rule__add', function () {
let $rule_group = $(this).closest('.ig-es-rule-group');
let rule_id = get_unique_number();
let rule_group_id = $rule_group.data('group-id');
$new_rule_container = $rule_template_container.find('.ig-es-rule-container').clone();
$new_rule_container.data('rule-id', rule_id);
add_rule_container_to_rule_group($new_rule_container, rule_group_id, rule_id);
$rule_group.append($new_rule_container);
});
//Remove rule from the respective rule group..If there is no rules in the group, then remove entire rule group
$(document).on('click', '.ig-es-rule__remove', function () {
let $rule_group = $(this).closest('.ig-es-rule-group');
let rules_count = $rule_group.find('.ig-es-rule-container').length;
if (rules_count > 1) {
$(this).closest('.ig-es-rule-container').remove();
} else {
$rule_group.remove();
}
validate_and_show_option_to_add_rules(false);
});
//On selecting rule, reset the compare field and value field
$(document).on('change', '.rule-select-field', function () {
let $rule_group = $(this).closest('.ig-es-rule-group');
let $rule_container = $(this).closest('.ig-es-rule-container');
let $compare_field = $rule_container.find('.rule-compare-field');
let rule_name = $(this).val();
let rule_group_id = $rule_group.data('group-id');
let rule_id = $rule_container.data('rule-id');
render_compare_field($rule_container, $compare_field, rule_group_id, rule_id, {name: rule_name})
});
// Reset everything while changing the trigger
$(document).on('ig_es_workflow_trigger_updated', function (e, data) {
filter_valid_rules(data?.trigger?.supplied_data_items,data?.trigger?.name);
validate_and_show_option_to_add_rules(true);
});
/**
* Get the timestamp for Rule group ID and Rule ID.
*
* @returns {number}
*/
const get_unique_number = function () {
return Date.now();
}
/**
* Render the compare field and value field of the respective rule container
* @param $rule_container
* @param $compare_field
* @param rule_group_id
* @param rule_id
* @param rule_details
*/
const render_compare_field = function ($rule_container, $compare_field, rule_group_id = 0, rule_id = 0, rule_details = {}) {
let rule_name = rule_details?.name;
if (rule_name && rule_name.length > 1) {
let rule = all_rules[rule_name];
let compare_types = rule?.compare_types;
if (compare_types && Object.keys(compare_types).length > 0) {
let compare_field_options = [];
$.each(compare_types, function( key, value ) {
compare_field_options.push('<option value="'+ key +'">'+ value +'</option>');
});
$compare_field.html(compare_field_options.join(''));
let rule_compare = rule_details?.compare;
if (rule_compare) {
$compare_field.val(rule_compare);
}
$compare_field.removeAttr('disabled')
}
add_rule_value_field($rule_container, rule, rule_group_id, rule_id, rule_details);
} else {
$compare_field.html('');
$compare_field.attr('disabled', true);
add_rule_value_field($rule_container, {type: ''}, rule_group_id, rule_id, rule_details)
}
}
/**
* Add new rule group to the wokflow
*
* @param group_id
* @param rule_id
* @param include_default_rule
* @returns {boolean|*}
*/
const add_new_rule_group = function (group_id, rule_id = 0, include_default_rule = true) {
$rules_container.find('.ig-es-rules-empty-message').remove();
$rules_container.find('.ig-es-no-rules-message').remove();
let total_rule_groups = $rules_container.find('.ig-es-rule-group').length;
if (!group_id) {
group_id = get_unique_number();
}
//For this release allow only one rule group. Remove IF/ELSE statement to allow multiple rule groups
if (total_rule_groups >= 1) {
return false;
} else {
$meta_box_footer.addClass('hidden');
}
let $new_rule_group = $rule_template_container.find('.ig-es-rule-group').clone();
$new_rule_group.data('group-id', group_id);
if (include_default_rule) {
let $new_rule_container = $rule_template_container.find('.ig-es-rule-container').clone();
$new_rule_container.data('rule-id', 0);
add_rule_container_to_rule_group($new_rule_container, group_id, rule_id);
$new_rule_group.append($new_rule_container)
}
return $new_rule_group;
}
/**
* Add rule to rule group
* @param $rule_container
* @param rule_group_id
* @param rule_id
* @param rule_details
*/
const add_rule_container_to_rule_group = function ($rule_container, rule_group_id, rule_id, rule_details = {}) {
let $rule_select_field = $rule_container.find('.rule-select-field')
if (Object.keys(grouped_rules).length > 0) {
for (const group_name in grouped_rules) {
if (grouped_rules.hasOwnProperty(group_name)) {
let $option_group = $(`<optgroup label='${group_name}'>`);
let rules = grouped_rules[group_name];
for (i = 0; i < rules.length; i++) {
var option = "<option value='" + rules[i].name + "'>" + rules[i].title + "</option>";
$option_group.append(option);
}
$rule_select_field.append($option_group);
}
$rule_select_field.removeAttr('disabled');
}
}
let rule_name = rule_details?.name
$rule_select_field.attr('name', 'ig_es_workflow_data[rules][' + rule_group_id + '][' + rule_id + '][name]');
$rule_select_field.val(rule_name);
$rule_compare_field = $rule_container.find('.rule-compare-field');
$rule_compare_field.attr('name', 'ig_es_workflow_data[rules][' + rule_group_id + '][' + rule_id + '][compare]');
render_compare_field($rule_container, $rule_compare_field, rule_group_id, rule_id, rule_details);
$rule_container.find('.rule-value-field').attr('name', 'ig_es_workflow_data[rules][' + rule_group_id + '][' + rule_id + '][value]');
}
/**
* Render the rule value field based on rule settings
* @param $rule_group_container
* @param rule
* @param rule_group_id
* @param rule_id
* @param rule_details
*/
const add_rule_value_field = function ($rule_group_container, rule, rule_group_id, rule_id, rule_details = {}) {
let rule_value = rule_details?.value;
switch (rule.type) {
case "select":
let $select_value_field = $rule_template_container.find('.rule-value-select-field').clone();
if (rule.placeholder) {
$select_value_field.data('placeholder', rule.placeholder)
}
if (rule.is_single_select) {
$select_value_field.attr('name', 'ig_es_workflow_data[rules][' + rule_group_id + '][' + rule_id + '][value]');
} else {
$select_value_field.attr('multiple', 'multiple');
$select_value_field.attr('name', 'ig_es_workflow_data[rules][' + rule_group_id + '][' + rule_id + '][value][]');
$select_value_field.addClass('ig-es-form-multiselect');
}
let select_choices = rule?.select_choices;
if (select_choices) {
for (const value in select_choices) {
if (select_choices.hasOwnProperty(value)) {
let selected = false;
if (rule_value) {
if (Array.isArray(rule_value)) {
if (rule_value.includes(value)) {
selected = true;
}
} else {
if (rule_value === value) {
selected = true;
}
}
}
let $option = `<option value='${value}' ${selected?'selected':''}>${select_choices[value]}</option>`;
$select_value_field.append($option);
}
}
}
$rule_group_container.find('.ig-es-rule-field-value').html($select_value_field);
// $('body').trigger('wc-enhanced-select-init');
$select_value_field.ig_es_select2();
break;
case "object":
let selected_values = rule_details?.selected;
let $object_value_field = $rule_template_container.find('.rule-value-object-field').clone();
if (rule.class) {
$object_value_field.addClass(rule.class)
}
if (rule.placeholder) {
$object_value_field.data('placeholder', rule.placeholder)
}
if (rule.ajax_action) {
$object_value_field.data('action', rule.ajax_action)
}
if (rule.is_multi) {
$object_value_field.attr('multiple', 'multiple')
$object_value_field.attr('name', 'ig_es_workflow_data[rules][' + rule_group_id + '][' + rule_id + '][value][]');
if(rule_value) {
for (let i = 0; i < rule_value.length; i++) {
var option = "<option value='" + rule_value[i] + "' selected>" + selected_values[i] + "</option>";
$object_value_field.append(option);
}
}
} else {
$object_value_field.attr('name', 'ig_es_workflow_data[rules][' + rule_group_id + '][' + rule_id + '][value]');
if(rule_value) {
var option = "<option value='" + rule_value + "' selected>" + selected_values + "</option>";
$object_value_field.append(option);
}
}
$rule_group_container.find('.ig-es-rule-field-value').html($object_value_field)
$('body').trigger('wc-enhanced-select-init');
break;
case "number":
let $number_value_field = $main_rule_container.find('.rule-value-number-field').clone();
$number_value_field.removeAttr('disabled');
$number_value_field.attr('name', 'ig_es_workflow_data[rules][' + rule_group_id + '][' + rule_id + '][value]');
if (rule_value) {
$number_value_field.val(rule_value);
}
if (rule.placeholder) {
$number_value_field.data('placeholder', rule.placeholder)
}
$rule_group_container.find('.ig-es-rule-field-value').html($number_value_field);
break;
default:
let $default_value_field = $rule_template_container.find('.rule-value-text-field').clone();
$default_value_field.attr('name', 'ig_es_workflow_data[rules][' + rule_group_id + '][' + rule_id + '][value]');
$rule_group_container.find('.ig-es-rule-field-value').html($default_value_field)
break;
}
}
/**
* Validate the rules for trigger and toggle action buttons for the rules
* @param force_reset
*/
const validate_and_show_option_to_add_rules = function (force_reset = false) {
let rule_groups_count = $rules_container.find('.ig-es-rule-group').length;
if (rule_groups_count > 0 && !force_reset) {
return;
}
let $rule_groups = $rules_container.find('.ig-es-rule-group');
let has_valid_rules = false;
if ($rule_groups.length > 0) {
$rule_groups.each(function (index) {
let $rule_group = $(this);
let $rules = $rule_group.find('.ig-es-rule-container');
let total_rules_count = $rules.length;
let valid_rules_count = 0;
if (total_rules_count > 0) {
$rules.each(function (index) {
let $rule = $(this);
let rule_name = $rule.find('.rule-select-field').val();
if (valid_rules.hasOwnProperty(rule_name)) {
has_valid_rules = true;
valid_rules_count += 1;
} else {
$rule.remove();
}
});
}
if (valid_rules_count <= 0) {
$rule_group.remove();
}
});
}
if (has_valid_rules) {
return;
} else {
$rules_container.html('')
}
if (Object.keys(grouped_rules).length > 0) {
$rule_template_container.find('.ig-es-rules-empty-message').clone().appendTo($rules_container)
$meta_box_footer.removeClass('hidden');
} else {
$meta_box_footer.addClass('hidden');
$rule_template_container.find('.ig-es-no-rules-message').clone().appendTo($rules_container);
}
}
/**
* Filter the valid rules for the trigger
* @param supplied_data_items
*/
const filter_valid_rules = function (supplied_data_items,trigger_name) {
grouped_rules = [];
valid_rules = {};
if (supplied_data_items) {
for (const rule_name in all_rules) {
if (all_rules.hasOwnProperty(rule_name)) {
let rule = all_rules[rule_name];
let excluded_triggers = rule.excluded_triggers;
if (supplied_data_items.includes(rule.data_item) && !excluded_triggers.includes(trigger_name)) {
if (!grouped_rules[rule.group]) {
grouped_rules[rule.group] = []
}
grouped_rules[rule.group].push(rule);
valid_rules[rule_name] = rule;
}
}
}
}
}
/**
* While editing the workflow, render the rules
*/
const render_existing_rules = function () {
let workflow_rules = rule_details?.workflow_rules;
filter_valid_rules(rule_details?.supplied_data_items,rule_details?.trigger_name);
validate_and_show_option_to_add_rules(true);
if (workflow_rules.length > 0) {
for (let group_id = 0; group_id < workflow_rules.length; group_id++) {
let rules = workflow_rules[group_id];
let rule_group_id = get_unique_number() + group_id;
let $new_rule_group = add_new_rule_group(rule_group_id, 0, false);
for (let rule_id = 0; rule_id < rules.length; rule_id++) {
let saved_rule = rules[rule_id];
let original_rule = all_rules[saved_rule.name];
let $new_rule_container = $rule_template_container.find('.ig-es-rule-container').clone();
$new_rule_container.data('rule-id', rule_id);
let unique_rule_id = get_unique_number() + group_id;
add_rule_container_to_rule_group($new_rule_container, rule_group_id, unique_rule_id, saved_rule);
$new_rule_group.append($new_rule_container)
}
$rules_container.append($new_rule_group)
}
}
}
render_existing_rules();
} catch (e) {
}
},
/**
*
*/
init_actions_box: function() {
// Action select change
$(document).on('change', '.js-action-select', function () {
let $action = $(this).parents('.ig-es-action').first();
IG_ES_Workflows.fill_action_fields( $action, $(this).val() );
IG_ES_Workflows.maybe_show_run_option();
});
// Add new action
$('.js-ig-es-add-action').click(function (e) {
e.preventDefault();
IG_ES_Workflows.add_new_action();
});
$(document).on('click', '.js-edit-action, .ig-es-action__header', function (e) {
e.preventDefault();
e.stopImmediatePropagation();
let $action = $(this).parents('.ig-es-action').first();
if ($action.is('.js-open')) {
IG_ES_Workflows.action_edit_close($action);
} else {
IG_ES_Workflows.action_edit_open($action);
}
});
$('input[name="ig_es_workflow_data[actions][{action_id}][attachments][]"]').each( function(){
let action_number = $(this).closest('.ig-es-action').data('action-number');
$(this).attr('name','ig_es_workflow_data[actions]['+action_number+'][attachments][]');
});
// Delete action
$(document).on('click', '.js-delete-action', function (e) {
e.preventDefault();
let $action = $(this).parents('.ig-es-action').first();
IG_ES_Workflows.action_delete($action);
IG_ES_Workflows.maybe_show_run_option();
});
// Preview action
$(document).on('click', '.js-preview-action', function (e) {
e.preventDefault();
e.stopImmediatePropagation();
let preview_action_button = $(this);
let $action = preview_action_button.parents('.ig-es-action').first();
let action_id = $action.data('action-number');
ig_es_sync_wp_editor_content();
let content_container = $('#workflow-email-preview-container');
let content_loader_container = $('#workflow-email-preview-loader');
let content = $('textarea[name="ig_es_workflow_data[actions][' + action_id + '][ig-es-email-content]"]').val();
let subject = $('input[name="ig_es_workflow_data[actions][' + action_id + '][ig-es-email-subject]"]').val();
let template = $('select[name="ig_es_workflow_data[actions][' + action_id + '][ig-es-email-template]"]').val();
let heading = $('input[name="ig_es_workflow_data[actions][' + action_id + '][ig-es-email-heading]"]').val();
if (!content) {
alert(ig_es_js_data.i18n_data.empty_template_message);
return;
}
preview_action_button.attr('disabled', true);
$('#browser-preview-tab').trigger('click');
let form_data = {
'action': 'ig_es_get_workflow_email_preview',
'security': ig_es_js_data.security,
'content': content,
'subject': subject,
'template': template,
'heading': heading,
'action_id': action_id,
'preview_type': 'inline',
'trigger': $('select[name="ig_es_workflow_data[trigger_name]"]').val()
};
content_container.addClass('hidden');
content_loader_container.removeClass('hidden');
$('#workflow-email-preview-popup').removeClass('hidden');
$('#workflow-email-preview-popup').css('visibility', 'visible');
$('#send-workflow-preview-email-btn').data('action', action_id);
$.ajax({
method: 'POST',
url: ajaxurl,
data: form_data,
dataType: 'json',
success: function (response) {
preview_action_button.attr('disabled', false);
if (response.success) {
if ('undefined' !== typeof response.data) {
let response_data = response.data;
let preview_html = response_data.preview_html;
let workflow_email_subject = response_data.subject;
ig_es_load_iframe_preview('#workflow-preview-iframe-container', preview_html);
$(".workflow-subject-preview").text(workflow_email_subject);
// We are setting popup visiblity hidden so that we can calculate iframe width/height before it is shown to user.
}
} else {
alert(ig_es_js_data.i18n_data.ajax_error_message);
}
},
error: function (err) {
preview_action_button.attr('disabled', false);
alert(ig_es_js_data.i18n_data.ajax_error_message);
}
}).done(function () {
preview_action_button.attr('disabled', false);
content_container.removeClass('hidden');
content_loader_container.addClass('hidden');
});
});
$('#close-workflow-email-preview-popup').on('click', function (event) {
event.preventDefault();
$('#workflow-email-preview-popup').addClass('hidden');
$('#workflow-email-preview-popup').css('visibility', 'hidden');
});
$('.ig-es-actions-container').on('change', 'select[data-name="ig-es-email-template"]', function (e) {
let selected_email_template = $(this).val();
let $action = $(this).closest('.ig-es-action').first();
let is_woocommerce_template = 'woocommerce' === selected_email_template;
if ( is_woocommerce_template ) {
$action.find('tr[data-name="ig-es-email-heading"]').show();
} else {
$action.find('tr[data-name="ig-es-email-heading"]').hide();
}
});
$('#ig_es_workflow_save #publish').on('click', function(e){
let trigger_name = $('.js-trigger-select').val();
if ( '' === trigger_name) {
e.preventDefault();
alert( ig_es_js_data.i18n_data.no_trigger_message );
return;
}
let actions = $('.ig-es-action:not([data-action-number=""]) .js-action-select');
if ( 0 === $( actions ).length ) {
e.preventDefault();
alert( ig_es_js_data.i18n_data.no_actions_message );
return;
} else {
$(actions).each(function() {
let action_name = $(this).val();
// Check if user have selected an action or not.
if( '' === action_name ) {
e.preventDefault();
// Open the action accordion if is not already open.
$(this).closest('.ig-es-action:not(.js-open)').find('.ig-es-action__header').trigger('click');
alert( ig_es_js_data.i18n_data.no_action_selected_message );
return false;
}
});
}
});
this.maybe_show_action_preview_on_init();
},
maybe_show_action_preview_on_init: function () {
let actions = $('.ig-es-action:not([data-action-number = ""]) .js-action-select');
$(actions).each(function (action) {
let selected_action = $(this).val();
let $action = $(this).parents('.ig-es-action').first();
IG_ES_Workflows.maybe_show_action_preview_option($action, selected_action);
});
},
add_new_action: function() {
let $new_action,
action_number = IG_ES_Workflows.get_number_of_actions() + 1;
$('.js-ig-es-no-actions-message').hide();
$new_action = $('.ig-es-action-template .ig-es-action').clone();
IG_ES_Workflows.$actions_container.append($new_action);
$new_action.attr( 'data-action-number', action_number );
IG_ES_Workflows.action_edit_open($new_action);
},
/**
* @param $action
*/
action_delete: function( $action ) {
$action.remove();
},
action_edit_close: function( $action ) {
$action.removeClass('js-open');
$action.find('.ig-es-action__fields').slideUp(150);
},
action_edit_open: function( $action ) {
$action.addClass('js-open');
$action.find('.ig-es-action__fields').slideDown(150);
},
/**
*
*/
fill_action_fields: function( $action, selected_action ) {
let action_number = $action.data('action-number');
action_number = ( typeof action_number !== 'undefined' && action_number !== '' ) ? action_number : IG_ES_Workflows.get_number_of_actions() + 1;
let $select = $action.find('.js-action-select');
let selected_trigger = $('.js-trigger-select').val();
IG_ES_Workflows.$actions_box.addClass('ig-es-loading');
// Remove existing fields
$action.find('tr.ig-es-table__row:not([data-name="action_name"])').remove();
$.ajax({
url: ajaxurl,
data: {
action: 'ig_es_fill_action_fields',
action_name: selected_action,
action_number: action_number,
trigger_name: selected_trigger,
security: ig_es_js_data.security
}
}).done(function(response){
$action.find('.ig-es-table tbody').append( response.data.fields );
IG_ES_Workflows.$actions_box.removeClass('ig-es-loading');
// Fill select box name
$select.attr('name', 'ig_es_workflow_data[actions][' + action_number + '][action_name]' );
// Pre fill title
$action.find('.action-title').text( response.data.title );
$action.find('.js-action-description').html( response.data.description );
IG_ES_Workflows.maybe_show_action_preview_option( $action, selected_action );
});
},
maybe_show_action_preview_option: function ($action, selected_action) {
var preview_option = $action.find('.ig-es-action__header .row-options .js-preview-action');
if ('ig_es_send_email' === selected_action) {
preview_option.removeClass('hidden');
} else {
preview_option.addClass('hidden');
}
},
get_number_of_actions: function () {
return $('.ig-es-action:not([data-action-number=""])').length;
},
remove_actions: function() {
let number_of_actions = IG_ES_Workflows.get_number_of_actions();
if ( number_of_actions > 0 ) {
$('.ig-es-action:not([data-action-number=""])').remove();
}
},
maybe_show_run_option: function() {
let trigger_name = IG_ES_Workflows.$trigger_select.val();
let runnable_triggers = [ 'ig_es_wc_order_created', 'ig_es_wc_order_completed', 'ig_es_wc_order_refunded' ];
let is_trigger_runnable = runnable_triggers.includes( trigger_name );
let actions = $('.ig-es-action:not([data-action-number = ""]) .js-action-select');
let has_runnable_action = false;
$(actions).each(function(action){
let action_name = $(this).val();
if ( 'ig_es_add_to_list' === action_name ) {
has_runnable_action = true;
return false;
}
});
if ( is_trigger_runnable && has_runnable_action ) {
$('#run-workflow-checkbox-wrapper').show();
} else {
$('#run-workflow-checkbox-wrapper').hide();
}
},
init_variables_box: function() {
this.init_clipboard();
$(document.body).on( 'change keyup', '.ig-es-workflow-variable-parameter', this.update_preview_field );
$(document.body).on( 'keypress', 'input.ig-es-workflow-variable-parameter', this.restrict_parameter_chars );
this.$variables_box.on( 'click', '.ig-es-workflow-variable', this.open_modal );
this.$variables_box.on( 'click', '.ig-es-close-variable-info-popup', this.close_modal );
$(document).keydown(function(e) {
if ( 27 === e.keyCode ) {
IG_ES_Workflows.close_modal();
}
});
if ( ! ig_es_workflows_data.is_new ) {
IG_ES_Workflows.refine_variables();
}
},
/**
* Show or hide text var groups based on the selected trigger
*/
refine_variables: function() {
let trigger = ig_es_workflows_data.trigger;
$('.ig-es-variables-group').each(function( i, el ){
let group = $(el).data('ig-es-variable-group');
$.each($(el).data(), function (key, value) {
if (key === 'igEsVariableGroup' && value === 'subscriber') {
if (trigger.name !== undefined && trigger.name !== null && trigger.name !== '') {
if (trigger.name !== 'ig_es_user_unsubscribed') {
$(el).find('span[data-ig-es-variable-slug="subscriber.unsubscriber_reason"]').parent().addClass('hidden');
}else{
$(el).find('span[data-ig-es-variable-slug="subscriber.unsubscriber_reason"]').parent().removeClass('hidden');
}
}
}
});
if ( -1 === $.inArray( group, trigger.supplied_data_items ) ) {
$(el).addClass('hidden');
} else {
$(el).removeClass('hidden');
}
});
IG_ES_Workflows.toggle_no_variable_message();
},
/**
* Show / hide "no variables found" message for trigger
*/
toggle_no_variable_message: function () {
let shown_group = $('.ig-es-variables-group:not(.hidden)');
if ( 0 === shown_group.length ) {
$('.js-ig-es-no-variables-message').show();
} else {
$('.js-ig-es-no-variables-message').hide();
}
},
/**
*
*/
init_clipboard: function() {
var clipboard = new ClipboardJS('.ig-es-clipboard-btn', {
text: function(trigger) {
if (IG_ES_Workflows.validate_keywords()) {
return $('#ig_es_workflow_variable_preview_field').text();
} else {
return '';
}
}
});
clipboard.on('success', function(e) {
$('.ig-es-clipboard-btn').html( ig_es_js_data.i18n_data.placeholder_copied_message );
setTimeout(function(){
IG_ES_Workflows.close_modal();
}, 500 );
});
},
validate_keywords: function () {
var variable_info_container = $('#ig-es-variable-info-popup #ig-es-workflow-variable-info-body [data-required="yes"]');
if (variable_info_container.length > 0) {
for (let index = 0; index < variable_info_container.length; index++) {
let element = $(variable_info_container[index]);
let value = element.val();
if (!value || value == '' || value.length === 0) {
let field_label = element.attr('name');
if (field_label) {
field_label = ig_es_uc_first(field_label);
let message = (ig_es_js_data.i18n_data.keyword_field_is_required).replaceAll('{{field_name}}', field_label);
alert(message);
} else {
alert(ig_es_js_data.i18n_data.required_field_is_empty);
}
return false;
}
}
}
return true;
},
open_modal: function () {
var ajax_data = {
action: 'ig_es_modal_variable_info',
variable: $(this).text(),
security: ig_es_js_data.security,
};
var variable_info_container = $('#ig-es-variable-info-popup #ig-es-workflow-variable-info-body');
var variable_info_close_button = $('#ig-es-variable-info-popup .ig-es-close-variable-info-popup');
$.ajax({
type: 'POST',
url: ajaxurl,
data: ajax_data,
beforeSend: function () {
variable_info_close_button.hide();
let loader = variable_info_container.data('loader')
variable_info_container.html('<div class="p-13"><img class="es-loader pl-2 h-5 w-7" src="' + loader + '" /></div>').show();
IG_ES_Workflows.show_modal();
},
success: function (response) {
variable_info_container.html(response).show();
IG_ES_Workflows.update_preview_field();
variable_info_close_button.show();
}
});
},
show_modal: function() {
jQuery('#ig-es-variable-info-popup').show();
},
close_modal: function() {
$('#ig-es-variable-info-popup').hide('fast');
},
/**
* Updates the variable preview text field
*/
update_preview_field: function() {
var $preview_field = $('#ig_es_workflow_variable_preview_field');
var variable = $preview_field.data('variable');
var parameters = [];
$('.ig-es-workflow-variable-parameter').each(function(){
var $param_row = $(this).parents('.ig-es-workflow-variables-parameter-row:first');
// Check 'show' logic
if ( $param_row.data('parameter-show') ) {
var show_logic = $param_row.data('parameter-show').split('=');
var $condition_field = $('.ig-es-workflow-variable-parameter[name="' + show_logic[0] + '"]');
if ( $condition_field.length && $condition_field.val() == show_logic[1] ) {
$param_row.show();
} else {
$param_row.hide();
return; // don't add parameter to preview
}
}
var param = {
name: $(this).attr('name'),
required: $param_row.data('is-required'),
value: $(this).val()
};
parameters.push( param );
});
var string = IG_ES_Workflows.generate_variable_string( variable, parameters );
$preview_field.text( string );
},
/**
*
* @param variable
* @param parameters
*/
generate_variable_string: function( variable, parameters ) {
var string = '{{ ' + variable;
if ( parameters.length ) {
var param_parts = [];
$.each( parameters, function( i, param ) {
if ( param.value ) {
param_parts.push( param.name + ": '" + param.value + "'" );
}
else if ( param.required ) {
param_parts.push( param.name + ": '...'" );
}
});
if ( param_parts.length > 0 ) {
string += ' | ';
string += param_parts.join( ', ' );
}
}
return string + ' }}';
},
/**
*
* @param e
*/
restrict_parameter_chars: function(e) {
var restricted = [ 39, 123, 124, 125 ];
if ( $.inArray( e.which, restricted ) !== -1 ) {
return false;
}
}
}
if ( 'undefined' !== typeof ig_es_workflows_data ) {
IG_ES_Workflows.init();
}
// Import Subscribers JS
let importstatus = $('.es-import-step1 .import-status'),
progress = $('#progress'),
progressbar = progress.find('.bar'),
importprogress,
importprogressbar,
import_percentage,
wpnonce = ig_es_js_data.security,
importerrors = 0,
importstarttime,
importidentifier,
import_option,
uploader_init = function () {
let uploader = new plupload.Uploader(wpUploaderInit);
uploader.bind('Init', function (up) {
let uploaddiv = $('#plupload-upload-ui');
if (up.features.dragdrop && !$(document.body).hasClass('mobile')) {
uploaddiv.addClass('drag-drop');
$('#drag-drop-area').bind('dragover.wp-uploader', function () { // dragenter doesn't fire right :(
uploaddiv.addClass('drag-over');
}).bind('dragleave.wp-uploader, drop.wp-uploader', function () {
uploaddiv.removeClass('drag-over');
});
} else {
uploaddiv.removeClass('drag-drop');
$('#drag-drop-area').unbind('.wp-uploader');
}
});
uploader.bind('FilesAdded', function (up, files) {
$('#media-upload-error').html('');
setTimeout(function () {
up.refresh();
up.start();
}, 1);
});
uploader.bind('BeforeUpload', function (up, file) {
progress.removeClass('finished error hidden');
importstatus.show().removeClass('text-red-600');
importstatus.html('Uploading');
});
uploader.bind('UploadFile', function (up, file) {});
uploader.bind('UploadProgress', function (up, file) {
importstatus.show().removeClass('text-red-600');
importstatus.html(sprintf(ig_es_js_data.i18n_data.uploading, file.percent + '%'));
progressbar.stop().animate({
'width': file.percent + '%'
}, 100);
});
uploader.bind('Error', function (up, err) {
importstatus.show().addClass('text-red-600 text-base font-medium');
importstatus.html(err.message);
progress.addClass('error');
up.refresh();
});
uploader.bind('FileUploaded', function (up, file, response) {
response = $.parseJSON(response.response);
importidentifier = response.identifier;
if (!response.success) {
importstatus.html(response.message);
progress.addClass('error');
up.refresh();
uploader.unbind('UploadComplete');
}
});
uploader.bind('UploadComplete', function (up, files) {
importstatus.removeClass('text-red-600').html(ig_es_js_data.i18n_data.prepare_data);
progress.addClass('finished');
jQuery(document).trigger('ig_es_get_import_data',[{identifier:importidentifier}]);
});
uploader.init();
}
let get_import_data = function (e, data) {
progress.removeClass('finished error');
import_option = jQuery('[name="es-import-subscribers"]:checked').val();
identifier = data.identifier;
$.post( ajaxurl, {
action: 'ig_es_get_import_data',
identifier: identifier,
security: wpnonce,
dataType: 'json'
}, function( response ) {
progress.addClass('hidden');
$(".es-import-step1").slideUp();
$('.es-import-option, .mailchimp_import_step_1').hide();
$('.step2-body').html(response.html).parent().show();
if( 'es-import-mailchimp-users' !== import_option ){
$('.step2-status, .step2-list, .step2-update-existing-subscribers').show();
}
$('.wrapper-start-contacts-import').show();
importstatus.html('');
});
}
let trigger_import = function(e, data) {
let _this = $('.start-import').prop('disabled', true),
loader = $('#import-ajax-loading').css({
'display': 'inline-block'
});
importprogress = $('#importing-progress'),
importprogressbar = importprogress.find('.bar'),
import_percentage = importprogress.find('.import_percentage')
progress.removeClass('hidden');
progressbar.stop().width(0);
$('.es-import-step1').slideUp();
$('.es-import-option').hide();
$('.step2-body').html('<br><br>').parent().show();
$('.step2-status,.step2-list, .step2-update-existing-subscribers, .step2-send-optin-emails, .es-import-processing, .wrapper-start-contacts-import').hide();
let import_data = {
id: 0,
options: {
identifier : data.identifier,
mapping_order : data.mapping_order,
list_id : data.list_id,
status : data.status,
send_optin_emails : data.send_optin_emails ? data.send_optin_emails : 'no',
update_subscribers_data: data.update_subscribers_data
}
}
importstarttime = new Date();
$(document).trigger('ig_es_do_import',[import_data]);
importstatus = $('.step2 .import-status');
importstatus.html(ig_es_js_data.i18n_data.prepare_import);
window.onbeforeunload = function () {
return ig_es_js_data.i18n_data.onbeforeunloadimport;
};
}
let do_import = function(e, import_data) {
let percentage = 0;
importprogress.removeClass('hidden');
$.ajax({
type: 'POST',
url: ajaxurl,
dataType: 'json',
data: {
action: 'ig_es_do_import',
id: import_data.id,
options: import_data.options,
security: wpnonce,
},
success: function( response ) {
percentage = (Math.min(1, (response.imported + response.errors + response.duplicate_emails_count) / response.total) * 100);
$('.step2-body').html('<p class="pt-3 pb-2 text-sm text-gray-600">' + get_stats(response.f_imported, response.f_errors, response.f_duplicate_emails, response.f_total, percentage, response.memoryusage) + '</p>');
importerrors = 0;
let finished = percentage >= 100;
if (response.success) {
if (!finished) {
import_data.id += 1;
$(document).trigger('ig_es_do_import', [import_data] );
}
importprogressbar.animate({
'width': (percentage) + '%'
}, {
duration: 1000,
easing: 'swing',
queue: false,
step: function (percentage) {
importstatus.show().addClass('text-lg').html( sprintf(ig_es_js_data.i18n_data.import_contacts, '' ) );
$('.import-instruction').html( ig_es_js_data.i18n_data.no_windowclose );
import_percentage.html( Math.ceil(percentage) + '%' );
},
complete: function () {
if (finished) {
window.onbeforeunload = null;
$('.import-instruction').hide();
importprogress.addClass('finished');
if ( jQuery('#form_import_subscribers').length ) {
$('.step2-body').html(response.html).slideDown();
importstatus.addClass('text-xl');
} else {
$('.step2-body').hide();
}
importstatus.html(sprintf(ig_es_js_data.i18n_data.import_complete,'<svg class=" w-6 h-6 inline-block text-indigo-600" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path></svg>'));
$(document).trigger('ig_es_import_finished').off('ig_es_import_finished');
}
}
});
} else {
import_error_handler(percentage, import_data);
}
},
error: function(jqXHR, textStatus, errorThrown) {
import_error_handler(percentage, import_data);
}
});
}
let get_stats = function(f_imported, f_errors, f_duplicate_emails,f_total, percentage, memoryusage) {
let timepast = new Date().getTime() - importstarttime.getTime(),
timeleft = Math.ceil(((100 - percentage) * (timepast / percentage)) / 60000);
let imported_html = '<span class="font-medium">' + f_imported + '</span>';
let total_html = '<span class="font-medium">' + f_total + '</span>';
let error_html = '<span class="font-medium">' + f_errors + '</span>';
let duplicate_html = '<span class="font-medium">' + sprintf( ig_es_js_data.i18n_data.duplicate_emails_found_message, f_duplicate_emails ) + '</span>';
let memoryusage_html = '<span class="font-medium">' + memoryusage + '</span>';
return sprintf(
ig_es_js_data.i18n_data.current_stats,
imported_html,
total_html,
error_html,
duplicate_html,
memoryusage_html)
+ '<br>' +
sprintf(
ig_es_js_data.i18n_data.estimate_time, timeleft
);
}
let import_error_handler = function(percentage, import_data) {
importerrors++;
if (importerrors >= 5) {
alert(ig_es_js_data.i18n_data.error_importing);
importstatus.html(sprintf(ig_es_js_data.i18n_data.import_failed, '<svg class=" w-6 h-6 inline-block text-red-600" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>'));
window.onbeforeunload = null;
return;
}
let i = importerrors * 5,
str = '',
errorint = setInterval(function () {
if (i <= 0) {
clearInterval(errorint);
progress.removeClass('paused');
jQuery(document).trigger('ig_es_do_import', [import_data] );
} else {
progress.addClass('paused');
str = '<span class="error">' + sprintf(ig_es_js_data.i18n_data.continues_in, (i--)) + '</span>';
}
importstatus.html(sprintf(ig_es_js_data.i18n_data.import_contacts, str));
}, 1000);
}
let sprintf = function() {
let a = Array.prototype.slice.call(arguments),
str = a.shift(),
total = a.length,
reg;
for (let i = 0; i < total; i++) {
reg = new RegExp('%(' + (i + 1) + '\\$)?(s|d|f)');
str = str.replace(reg, a[i]);
}
return str;
}
let _ajax = function(action, data, callback, errorCallback) {
if ($.isFunction(data)) {
if ($.isFunction(callback)) {
errorCallback = callback;
}
callback = data;
data = {};
}
$.ajax({
type: 'POST',
url: ajaxurl,
data: $.extend({
action: 'ig_es_' + action,
security: wpnonce
}, data),
success: function (data, textStatus, jqXHR) {
callback && callback.call(this, data, textStatus, jqXHR);
},
error: function (jqXHR, textStatus, errorThrown) {
if (textStatus == 'error' && !errorThrown) return;
if (console) console.error($.trim(jqXHR.responseText));
errorCallback && errorCallback.call(this, jqXHR, textStatus, errorThrown);
},
dataType: "JSON"
});
}
if ( 'object' === typeof (wpUploaderInit) ) {
uploader_init();
}
$(document).on('ig_es_get_import_data', get_import_data );
$(document).on('ig_es_trigger_import', trigger_import );
$(document).on('ig_es_do_import', do_import );
$('#form_import_subscribers').on('submit', function(e){
e.preventDefault();
let is_email_field_set, is_list_name_field_set, is_subscriber_status_field_set = false;
let mapping_order = [];
let identifier = $('#identifier').val();
$('select[name="mapping_order[]"').each(function(){
let mapped_field = $(this).val();
mapping_order.push(mapped_field);
if ( 'email' === mapped_field ) {
is_email_field_set = true;
} else if( 'list_name' === mapped_field ){
is_list_name_field_set = true;
} else if( 'status' === mapped_field ){
is_subscriber_status_field_set = true;
}
});
if ( ! is_email_field_set ) {
alert(ig_es_js_data.i18n_data.select_email_column);
return false;
}
let send_optin_emails_checkbox = $('#send_optin_emails');
let send_optin_emails = send_optin_emails_checkbox.is(':checked') ? 'yes' : 'no';
let update_subscribers_data = $('input[name="ig-es-update-subscriber-data"]:checked').val();
let status = $('#es_email_status').val();
if ( 'es-import-mailchimp-users' !== import_option && ('' === status || '0' === status) && ! is_subscriber_status_field_set ) {
alert(ig_es_js_data.i18n_data.select_status);
return false;
}
let list_id = $('#list_id').val();
if ( 'es-import-mailchimp-users' !== import_option && ( '0' === list_id || ( Array.isArray(list_id) && 0 === list_id.length ) ) && ! is_list_name_field_set ) {
alert(ig_es_js_data.i18n_data.select_list);
return false;
}
if ( ! confirm(ig_es_js_data.i18n_data.confirm_import) ) {
return false;
}
let import_data = {
identifier: identifier,
list_id: list_id,
status: status,
mapping_order: mapping_order,
send_optin_emails: send_optin_emails,
update_subscribers_data: update_subscribers_data
}
$(document).trigger('ig_es_trigger_import', [import_data]);
});
$('#ig-es-import-wordpress-users-btn')
.on('click', function () {
let elem = jQuery(this);
jQuery(elem).find('.es-btn-arrow').hide();
jQuery(elem).find('.es-btn-loader').show().addClass('animate-spin').attr('disabled', true);
let selected_roles = [];
$('#ig-es-wordpress-user-roles input[name="roles[]"]:checked').each(function(){
let selected_role = $(this).val();
selected_roles.push(selected_role);
});
_ajax('import_subscribers_upload_handler', {
selected_roles: selected_roles,
importing_from: 'wordpress_users'
}, function (response) {
if (response.success) {
importidentifier = response.identifier;
$('#wordpress-users').fadeOut();
jQuery(document).trigger('ig_es_get_import_data',[{identifier:importidentifier}]);
} else {
jQuery(elem).find('.es-btn-arrow').show();
jQuery(elem).find('.es-btn-loader').hide().removeClass('animate-spin').removeAttr('disabled');
progress.addClass('error');
alert(response.message);
}
}, function () {
importstatus.html('Error');
});
return false;
});
$("input:radio[name='es-import-subscribers']").click(function() {
let import_option = $(this).attr("value");
$('.es-import').hide();
$('.' + import_option).show();
});
$('#es_mailchimp_verify_api_key').click(function(e){
e.preventDefault();
let btn_elem = $(this);
let mailchimp_api_key = $('#api-key').val();
let api_import_status = $('.es-api-import-status');
let steps_loader = $('.es-import-loader');
let data = {
action : 'ig_es_mailchimp_verify_api_key',
security : ig_es_js_data.security,
mailchimp_api_key : mailchimp_api_key,
};
jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: data,
dataType: 'json',
beforeSend: function() {
steps_loader.show().addClass('animate-spin').attr('disabled', true);
jQuery(btn_elem).attr('disabled', true);
},
success: function (response) {
if (response.success) {
api_import_status.show().html(ig_es_js_data.i18n_data.api_verification_success).addClass('text-green-500').removeClass('text-red-600');
get_mailchimp_lists( mailchimp_api_key );
} else {
api_import_status.show().html(response.data.error).addClass('text-red-600');
}
},
error: function (err) {
api_import_status.show().html(err.responseJSON.data.error).addClass('text-red-600');
jQuery(btn_elem).attr('disabled', false);
}
}).always(function(){
steps_loader.hide().removeClass('animate-spin').attr('disabled', false);
});
});
$('#es_import_mailchimp_list_members').on('click', function (e) {
e.preventDefault();
Import_Mailchimp_Lists();
});
function get_mailchimp_lists( api_key = '' ){
let data = {
action : 'ig_es_mailchimp_lists',
security : ig_es_js_data.security,
mailchimp_api_key : api_key,
};
jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: data,
dataType: 'json',
success: function (response) {
if (response.success) {
var wrap = jQuery('.mailchimp-lists'),
tmpl = wrap.find('li');
jQuery.each(response.data.lists, function (i, list) {
var clone = tmpl.clone().removeClass('hidden').addClass('lead').data('id', list.id);
clone.attr('data-listname', list.name);
clone.find('.mailchimp_list_name').html(list.name);
clone.find('label').attr('for', 'list-' + list.id);
clone.find('input').attr('id', 'list-' + list.id).prop('checked', list.stats.member_count);
setTimeout(function () {
clone.hide().appendTo(wrap).slideDown();
}, 10 * i);
});
jQuery('.mailchimp_import_step_1').show();
jQuery(".es-import-step1").slideUp();
jQuery('.es-import-option').hide();
} else {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
},
error: function (err) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
});
}
function Import_Mailchimp_Lists(){
var items_completed = 0;
var current_offset = 0;
var current_limit = 1000;
var current_item = "";
var $current_node;
var current_status;
var mailchimp_api_key = jQuery('#api-key').val();
var total_list_subscribers_added = 0;
jQuery(".es_mailchimp_lists_and_status_input").addClass("installing");
jQuery(".es_mailchimp_lists_and_status_input").find("input").prop("disabled", true);
jQuery(".mailchimp_notice_nowindow_close").show().html(ig_es_js_data.i18n_data.mailchimp_notice_nowindow_close);
current_status = jQuery('input[name="options"]:checked').map(function () {
return jQuery(this).val()
}).get();
jQuery('.es-list-import-loader').show().addClass('animate-spin').attr('disabled', true);
find_next_list();
function ajax_callback(response) {
var currentSpan = $current_node.find("label");
if( response.success ) {
importidentifier = response.data.identifier;
if ( ! response.data.added ) { // If no subscribers left
currentSpan.addClass("success");
current_offset = 0;
total_list_subscribers_added = 0;
find_next_list();
} else {
current_offset += current_limit;
total_list_subscribers_added += response.data.added;
$current_node.find('.mailchimp_list_contact_fetch_count').html( '(' + total_list_subscribers_added + '/ ' + response.data.total + ')' );
process_current();
}
} else {
current_limit = 500;
var error_counter = jQuery($current_node).data('error-counter');
error_counter++;
jQuery($current_node).data('error-counter', error_counter);
if( error_counter < 3 ){
process_current();
} else {
jQuery(".mailchimp_notice_nowindow_close").hide();
jQuery('#es_import_mailchimp_list_members').text('Try again');
jQuery($current_node).addClass('text-red-600').removeClass('installing');
jQuery('.es-list-import-loader').hide().removeClass('animate-spin error').attr('disabled', false);
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
}
return;
}
function process_current() {
if (current_item) {
var $check = $current_node.find("input:checkbox");
var currentSpan = $current_node.find("label");
currentSpan.removeClass('installing success error');
if ($check.is(":checked")) {
var listname = $current_node.data('listname');
currentSpan.addClass('installing');
jQuery.post(ajaxurl, {
action : "ig_es_mailchimp_import_list",
security : ig_es_js_data.security,
id : current_item,
offset : current_offset,
limit : current_limit,
status : current_status,
mailchimp_api_key : mailchimp_api_key,
list_name : listname,
identifier : importidentifier
}, ajax_callback).fail(function(){
var error_counter = jQuery($current_node).data('error-counter');
error_counter++;
jQuery($current_node).data('error-counter', error_counter);
if( error_counter < 3 ){
process_current();
} else{
jQuery($current_node).addClass('text-red-600');
}
});
} else {
$current_node.addClass("skipping").removeClass("installing");
setTimeout(find_next_list, 300);
}
}
}
function mailchimp_list_import_complete(){
jQuery(document).trigger('ig_es_get_import_data',[{identifier:importidentifier}]);
jQuery(".mailchimp_notice_nowindow_close").hide();
jQuery('.es-list-import-loader').hide().removeClass('animate-spin').attr('disabled', false);
}
function find_next_list() {
if ($current_node) {
if (!$current_node.data("done_item")) {
items_completed++;
$current_node.data("done_item", 1);
}
$current_node.find(".spinner").css("visibility", "hidden");
}
var $li = jQuery(".es_mailchimp_lists_and_status_input.mailchimp-lists li:visible");
$li.each(function () {
var $item = jQuery(this);
if ($item.data("done_item")) {
return true;
}
current_item = $item.data("id");
if (!current_item) {
return true;
}
$current_node = $item;
process_current();
return false;
});
if (items_completed >= $li.length) {
//Finished importing all lists to temporary table
mailchimp_list_import_complete();
}
}
}
var link_activity_rows = $("#es_reports_link_activity tbody tr");
var link_activity_more = $("#es_link_activity_more");
var link_activity_less = $("#es_link_activity_less");
var link_activity_table_length = link_activity_rows.length;
var link_activity_currentIndex = 5;
link_activity_rows.hide();
link_activity_rows.slice(0, 5).show();
check_link_activity_rows();
link_activity_more.click(function (e) {
e.preventDefault();
$("#es_reports_link_activity tbody tr").slice(link_activity_currentIndex, link_activity_currentIndex + 10).show();
link_activity_currentIndex += 10;
check_link_activity_rows();
});
link_activity_less.click(function (e) {
e.preventDefault();
link_activity_rows.hide();
link_activity_rows.slice(0, 5).show();
link_activity_currentIndex = 5;
check_link_activity_rows();
});
function check_link_activity_rows() {
var currentLength = $("#es_reports_link_activity tbody tr:visible").length;
if (currentLength >= link_activity_table_length) {
link_activity_more.hide();
} else {
link_activity_more.show();
}
if (link_activity_table_length > 5 && currentLength > 5) {
link_activity_less.show();
} else {
link_activity_less.hide();
}
}
// Find al rating items
const ratings = document.querySelectorAll(".es-engagement-score");
// Iterate over all rating items
ratings.forEach((rating) => {
// Get content and get score as an int
const ratingContent = rating.innerHTML;
const ratingScore = ratingContent;
const ratingPercentage = ( ratingScore / 5 ) * 100;
// Define if the score is good, meh or bad according to its value
// const scoreClass =
// ratingScore < 40 ? "bad" : ratingScore < 60 ? "meh" : "good";
// // Add score class to the rating
// rating.classList.add(scoreClass);
// After adding the class, get its color
const ratingColor = window.getComputedStyle(rating).backgroundColor;
// Define the background gradient according to the score and color
const gradient = `background: conic-gradient(${ratingColor} ${ratingPercentage}%, transparent 0 100%)`;
// Set the gradient as the rating background
rating.setAttribute("style", gradient);
// Wrap the content in a tag to show it above the pseudo element that masks the bar
rating.innerHTML = `<span>${ratingScore} ${
ratingContent.indexOf("%") >= 0 ? "<small>%</small>" : ""
}</span>`;
});
/* DND form builder code start */
jQuery('#es-form-name,#es-toggle-form-name-edit').click(function(){
jQuery('#es-form-name').removeAttr('readonly','readonly').focus();
jQuery('#es-toggle-form-name-edit').hide();
});
jQuery('#es-form-name').blur(function(){
jQuery('#es-toggle-form-name-edit').show();
jQuery(this).attr('readonly','readonly');
});
$('#es-edit-form-container').on('click','#form_settings_menu,#view_form_summary_button',function(e){
let form_html = window.esVisualEditor.getHtml();
let form_css = window.esVisualEditor.getCss();
let form_components = window.esVisualEditor.getComponents();
$('#ig-es-export-html-data-textarea').val(form_html);
$('#ig-es-export-css-data-textarea').val(form_css);
$('#form-dnd-editor-data').val(JSON.stringify(form_components));
let captcha = window.esVisualEditor.Canvas.getDocument().getElementsByClassName('es_captcha').length > 0 ? 'yes' : 'no';
$('input[name="form_data[settings][captcha]"]').val(captcha);
let form_contains_lists_block = window.esVisualEditor.Canvas.getDocument().getElementsByClassName('es-list').length > 0;
if ( form_contains_lists_block ) {
// Hide lists settings section from Form's settings
$('.es-form-lists').addClass('hidden');
$('.es-form-lists input[name="form_data[settings][lists][]"]').prop('checked', false);
} else {
// Show lists settings section in Form's settings
$('.es-form-lists').removeClass('hidden');
}
let form_data = $(this).closest('form').serialize();
// Add action to form data
form_data += form_data + '&action=ig_es_get_form_preview&security=' + ig_es_js_data.security;
jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: form_data,
dataType: 'json',
success: function (response) {
if (response.success) {
if ( 'undefined' !== typeof response.data ) {
let response_data = response.data;
let preview_html = response_data.preview_html;
preview_html = ig_es_preprare_iframe_preview_html( preview_html );
ig_es_load_iframe_preview('.form_preview_content', preview_html);
}
} else {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
},
error: function (err) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
});
});
$('#es-edit-form-container form').on('submit',function(e){
let list_required = ! $('.es-form-lists').hasClass('hidden');
if ( list_required ) {
let selected_lists_count = $('.es-form-lists input[name="form_data[settings][lists][]"]:checked').length;
if ( selected_lists_count === 0 ) {
alert( ig_es_form_editor_data.i18n.no_list_selected_message );
e.preventDefault();
return false;
}
}
});
/* DND form builder code end */
jQuery('body')
.on('click', '#ig-es-delete-template-image', function (e) {
e.preventDefault();
jQuery('#ig-es-template-image-attachment-container').addClass('hidden');
jQuery('#ig-es-add-template-image').removeClass('hidden');
})
.on('click', '#ig-es-add-template-image', function (e) {
e.preventDefault();
jQuery(this).addClass('clicked');
if ( ! wp.media.frames.ig_es_attachments ) {
// Create the media frame.
wp.media.frames.ig_es_attachments = wp.media({
// Set the title of the modal.
title: ig_es_js_data.i18n_data.add_attachment_text,
button: {
text: ig_es_js_data.i18n_data.add_attachment_text,
},
multiple: false,
states: [
new wp.media.controller.Library({
filterable: 'png,jpg',
multiple: false
})
]
});
// When a user click on Add file button.
wp.media.frames.ig_es_attachments.on('select', function () {
let attachment = wp.media.frames.ig_es_attachments.state().get('selection').first().toJSON();
jQuery('#ig-es-template-image-attachment-container').removeClass('hidden');
jQuery('#ig_es_template_attachment_image').attr('src', attachment.url);
jQuery('#ig_es_template_attachment_id').val(attachment.id);
jQuery('#ig-es-template-image-attachment-container').removeClass('hidden');
jQuery('#ig-es-add-template-image').addClass('hidden');
});
}
wp.media.frames.ig_es_attachments.open();
});
$('#es_template_type').on('change',function(){
let template_type = $(this).val();
$('#edit-campaign-form-container').attr('data-campaign-type', template_type);
ig_es_add_dnd_rte_tags(template_type);
});
$('#es_template_type').trigger('change');
$('#es-dashboard-stats #filter_by_list').on('change',function() {
let list_id = $(this).val();
let days = 60;
let action_data = {
action : 'ig_es_get_subscribers_stats',
list_id : list_id,
days : days,
security: ig_es_js_data.security
}
$.ajax({
method : 'POST',
url : ajaxurl,
data : action_data,
dataType : 'json',
beforeSend: function() {
$('#subscribers-stats').addClass('loading es-pulse-animation').css({'filter': 'blur(1px)', '-webkit-filter' : 'blur(1px)'});
},
success: function (response) {
if (response.success) {
if ( 'undefined' !== typeof response.data ) {
let response_data = response.data;
let html = response_data.html;
$('#subscribers-stats').replaceWith(html);
} else {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
} else {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
},
error: function (err) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
}).always(function(){
$('#subscribers-stats').removeClass('loading es-pulse-animation').css({'filter': 'blur(0px)', '-webkit-filter' : 'blur(0px)'});
});
});
});
function ig_es_uc_first(string){
return string.charAt(0).toUpperCase() + string.slice(1);
}
let drafting_campaign = false;
function ig_es_draft_campaign( trigger_elem ) {
if( drafting_campaign ){
return;
}
drafting_campaign = true;
let is_draft_bttuon = $(trigger_elem).hasClass('ig_es_draft_campaign');
let is_save_bttuon = $(trigger_elem).hasClass('ig_es_save_campaign');
let campaign_subject = $('#ig_es_campaign_subject').val();
if ( '' === campaign_subject ) {
if ( is_draft_bttuon ) {
alert( ig_es_js_data.i18n_data.campaign_subject_empty_message );
}
drafting_campaign = false;
return;
}
// If draft button is clicked then change campaign status to draft..
if ( is_draft_bttuon ) {
$('#campaign_status').val(0);
}
ig_es_process_campaign_action( 'save' ).then( response => {
if (response.success) {
if ( 'undefined' !== typeof response.data ) {
let response_data = response.data;
let campaign_id = response_data.campaign_id;
$('#campaign_id').val( campaign_id );
if ( is_draft_bttuon || is_save_bttuon ) {
alert( ig_es_js_data.i18n_data.campaign_saved_message );
}
} else {
if ( is_draft_bttuon ) {
alert( ig_es_js_data.i18n_data.campaign_error_message );
}
}
} else {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
}, response => {
alert( ig_es_js_data.i18n_data.ajax_error_message );
});
}
let save_campaign = false;
function ig_es_save_campaign( trigger_elem ) {
if( save_campaign ){
return;
}
save_campaign = true;
$(trigger_elem).addClass('loading');
let campaign_subject = $('#ig_es_campaign_subject').val();
if ( '' === campaign_subject ) {
alert( ig_es_js_data.i18n_data.campaign_subject_empty_message );
save_campaign = false;
return;
}
//$('#campaign_status').val(ig_es_js_data.campaign_statuses.active);
ig_es_process_campaign_action( 'save' ).then( response => {
$(trigger_elem).removeClass('loading');
save_campaign = false;
if (response.success) {
alert( ig_es_js_data.i18n_data.campaign_saved_message );
window.location.href = ig_es_js_data.campaigns_page_url;
} else {
alert( response.message );
}
}, response => {
scheduling_campaign = false;
alert( ig_es_js_data.i18n_data.ajax_error_message );
});
}
// Flag to prevent multiple scheduling requests when user clicks mutliple time in short interval.
let scheduling_campaign = false;
function ig_es_save_and_schedule_campaign( trigger_elem ) {
if( scheduling_campaign ){
return;
}
scheduling_campaign = true;
$(trigger_elem).addClass('loading');
let campaign_subject = $('#ig_es_campaign_subject').val();
if ( '' === campaign_subject ) {
alert( ig_es_js_data.i18n_data.campaign_subject_empty_message );
scheduling_campaign = false;
return;
}
$('#campaign_status').val(ig_es_js_data.campaign_statuses.scheduled);
ig_es_process_campaign_action( 'save_and_schedule' ).then( response => {
$(trigger_elem).removeClass('loading');
scheduling_campaign = false;
if (response.success) {
alert( ig_es_js_data.i18n_data.campaign_scheduled_message );
window.location.href = ig_es_js_data.campaigns_page_url;
} else {
alert( response.message );
}
}, response => {
scheduling_campaign = false;
alert( ig_es_js_data.i18n_data.ajax_error_message );
});
}
let activate_campaign = false;
function ig_es_activate_campaign( trigger_elem ) {
if( activate_campaign ){
return;
}
activate_campaign = true;
$(trigger_elem).addClass('loading');
let campaign_subject = $('#ig_es_campaign_subject').val();
if ( '' === campaign_subject ) {
alert( ig_es_js_data.i18n_data.campaign_subject_empty_message );
activate_campaign = false;
return;
}
$('#campaign_status').val(ig_es_js_data.campaign_statuses.active);
ig_es_process_campaign_action( 'activate' ).then( response => {
$(trigger_elem).removeClass('loading');
activate_campaign = false;
if (response.success) {
alert( ig_es_js_data.i18n_data.campaign_activated_message );
window.location.href = ig_es_js_data.campaigns_page_url;
} else {
alert( response.message );
}
}, response => {
scheduling_campaign = false;
alert( ig_es_js_data.i18n_data.ajax_error_message );
});
}
function ig_es_process_campaign_action( action_method ) {
ig_es_sync_wp_editor_content();
let campaign_data = $('#campaign_form').serialize();
campaign_data += '&action=icegram-express&handler=campaign&method=' + action_method + '&security=' + ig_es_js_data.security;
return jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: campaign_data,
dataType: 'json',
beforeSend: function() {
// Prevent submit button untill saving is complete.
$('#ig_es_campaign_submitted').addClass('opacity-50 cursor-not-allowed').attr('disabled','disabled');
}
});
}
function ig_es_save_campaign_as_template() {
ig_es_sync_wp_editor_content();
let campaign_subject = $('#ig_es_campaign_subject').val();
let campaign_content = $('textarea[name="data[body]"]').val();
if ( '' === campaign_subject || '' === campaign_content ) {
return;
}
let save_template_button = $('#save_campaign_as_template_button');
let form_data = $('form#campaign_form').serialize();
// Add action to form data
form_data += '&action=ig_es_save_as_template&security=' + ig_es_js_data.security;
jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: form_data,
dataType: 'json',
beforeSend: function() {
$(save_template_button).next('.es-loader').show();
},
success: function (response) {
if ( response.success ) {
$(save_template_button).parent().find('.es-saved-success').show();
} else {
$(save_template_button).parent().find('.es-saved-error').show();
}
},
error: function (err) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
}).always(function(){
$(save_template_button).next('.es-loader').hide();
});
}
})(jQuery);
function checkDelete() {
return confirm( ig_es_js_data.i18n_data.delete_confirmation_message );
}
function ig_es_show_broadcast_preview_in_popup() {
ig_es_sync_wp_editor_content();
let content = jQuery('.wp-editor-boradcast').val();
if (jQuery("#wp-edit-es-broadcast-body-wrap").hasClass("tmce-active")) {
content = tinyMCE.activeEditor.getContent();
} else {
content = jQuery('.wp-editor-boradcast').val();
}
if ( !content ) {
alert( ig_es_js_data.i18n_data.empty_template_message );
return;
}
let template_button = jQuery('#es_test_email_btn');
jQuery(template_button).next('.es-loader').show();
let form_data = jQuery('#es_test_email_btn').closest('form').serialize();
// Add action to form data
form_data += form_data + '&action=ig_es_preview_broadcast&security=' + ig_es_js_data.security;
jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: form_data,
dataType: 'json',
success: function (response) {
if (response.success) {
if ( 'undefined' !== typeof response.data ) {
let response_data = response.data;
let template_html = response_data.template_html;
jQuery('#preview_template').load().show();
ig_es_load_iframe_preview( '.broadcast_preview_container', template_html );
}
} else {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
},
error: function (err) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
}).done(function(){
jQuery(template_button).next('.es-loader').hide();
});
}
function ig_es_show_campaign_preview_in_popup() {
ig_es_sync_wp_editor_content();
let content = jQuery('textarea[name="data[body]"],textarea[name="data[body]"]').val();
if (jQuery("#edit-es-campaign-body-wrap").hasClass("tmce-active")) {
content = tinyMCE.activeEditor.getContent();
}
if ( !content ) {
alert( ig_es_js_data.i18n_data.empty_template_message );
return;
}
let form_data = jQuery('#view_campaign_preview_button').closest('form').serialize();
// Add action to form data
form_data += form_data + '&action=ig_es_get_campaign_preview&security=' + ig_es_js_data.security;
jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: form_data,
dataType: 'json',
success: function (response) {
if (response.success) {
if ( 'undefined' !== typeof response.data ) {
let response_data = response.data;
let template_html = response_data.preview_html;
jQuery('#browser-preview-tab').trigger('click');
ig_es_load_iframe_preview( '#campaign-preview-iframe-container', template_html );
// We are setting popup visiblity hidden so that we can calculate iframe width/height before it is shown to user.
jQuery('#campaign-preview-popup').css('visibility','hidden').show();
setTimeout(()=>{
jQuery('#campaign-preview-popup').css('visibility','visible');
},100);
}
} else {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
},
error: function (err) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
}).done(function(){
jQuery('#view_campaign_preview_button').removeClass('loading');
});
}
function ig_es_show_template_preview_in_popup() {
ig_es_sync_wp_editor_content();
let content = jQuery('textarea[name="data[body]"]').val();
if (jQuery("#edit-es-campaign-body-wrap").hasClass("tmce-active")) {
content = tinyMCE.activeEditor.getContent();
}
if ( !content ) {
alert( ig_es_js_data.i18n_data.empty_template_message );
return;
}
let template_button = jQuery('#view_campaign_preview_button,#view_template_preview_button');
jQuery(template_button).addClass('loading');
let form_data = jQuery('#view_campaign_preview_button,#view_template_preview_button').closest('form').serialize();
// Add action to form data
form_data += form_data + '&action=ig_es_get_template_preview&security=' + ig_es_js_data.security;
jQuery.ajax({
method: 'POST',
url: ajaxurl,
data: form_data,
dataType: 'json',
success: function (response) {
if (response.success) {
if ( 'undefined' !== typeof response.data ) {
let response_data = response.data;
let template_html = response_data.preview_html;
jQuery('#browser-preview-tab').trigger('click');
ig_es_load_iframe_preview( '#campaign-preview-iframe-container', template_html );
// We are setting popup visiblity hidden so that we can calculate iframe width/height before it is shown to user.
jQuery('#campaign-preview-popup').css('visibility','hidden').show();
setTimeout(()=>{
jQuery('#campaign-preview-popup').css('visibility','visible');
},100);
}
} else {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
},
error: function (err) {
alert( ig_es_js_data.i18n_data.ajax_error_message );
}
}).done(function(){
jQuery(template_button).removeClass('loading');
});
}
function ig_es_sync_wp_editor_content() {
// When visual mode is disabled in wp user profile, tinyMCE library isn't enqueued.
// We aren't triggering the save event in that case
if ( 'undefined' !== typeof window.tinyMCE ) {
// Trigger save event for content of wp_editor instances to sync its content with actual textarea field
window.tinyMCE.triggerSave();
}
ig_es_sync_dnd_editor_content( '#campaign-dnd-editor-data' );
}
function ig_es_sync_dnd_editor_content( data_field_id ) {
// Save the editor content to textarea
if ( 'undefined' !== typeof window.esVisualEditor ) {
let dnd_editor_data = window.esVisualEditor.exportEditorContent();
jQuery(data_field_id).val(dnd_editor_data.data);
}
}
window.ig_es_sync_dnd_editor_content = ig_es_sync_dnd_editor_content;
function ig_es_load_iframe_preview( parent_selector, iframe_html ) {
jQuery( parent_selector + ' iframe').remove();
let iframe = document.createElement('iframe');
jQuery(parent_selector).html(iframe);
let should_set_max_height = jQuery(parent_selector).hasClass('popup-preview');
if ( should_set_max_height ) {
// Provide height and width to it
iframe.setAttribute("style","margin:auto;max-height:60vh;height:auto;width:100%;");
} else {
iframe.setAttribute("style","height:auto;width:100%;");
}
iframe.setAttribute("onload","ig_es_resize_iframe(this)");
jQuery(iframe).attr("srcdoc", iframe_html);
}
window.ig_es_load_iframe_preview = ig_es_load_iframe_preview
function ig_es_resize_iframe( ifram_elem ) {
let iframe_width = ifram_elem.contentWindow.document.documentElement.offsetWidth;
let iframe_height = ifram_elem.contentWindow.document.documentElement.offsetHeight;
ifram_elem.style.width = iframe_width + 'px';
ifram_elem.style.height = iframe_height + 'px';
}
function ig_es_is_valid_json( string ) {
try {
JSON.parse( string );
} catch (e) {
return false;
}
return true;
}
function ig_es_is_valid_email( email ) {
let regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);
}
window.ig_es_is_valid_json = ig_es_is_valid_json;
function renderESClassicEditor( containerId, content ) {
if ( jQuery.fn.wp_js_editor ) {
jQuery( '#' + containerId ).val(content).wp_js_editor();
} else {
setTimeout(() => {
jQuery( '#' + containerId ).val(content).wp_js_editor();
},300)
}
}
window.renderESClassicEditor = renderESClassicEditor
function removeESClassicEditor( containerId ) {
jQuery( '#' + containerId ).wp_js_editor('remove');
}
window.removeESClassicEditor = removeESClassicEditor
function ig_es_add_dnd_rte_tags(CampaignOrEditorType) {
let option_html = '';
const addOptgroup = (label, tags) => {
if (Array.isArray(tags)) {
option_html += `<optgroup label="${label}">`;
tags.forEach((tag) => {
option_html += `<option value="{{${tag.keyword}}}">${tag.label}</option>`;
});
option_html += '</optgroup>';
}
};
if (CampaignOrEditorType === 'post_notification') {
addOptgroup('Post', ig_es_campaign_editor_data.postTags);
addOptgroup('Subscriber', ig_es_campaign_editor_data.subscriberTags);
addOptgroup('Site', ig_es_campaign_editor_data.siteTags);
}
if (CampaignOrEditorType === 'newsletter') {
addOptgroup('Subscriber', ig_es_campaign_editor_data.subscriberTags);
addOptgroup('Site', ig_es_campaign_editor_data.siteTags);
}
if (CampaignOrEditorType === 'DND_editor_form') {
addOptgroup('Site', ig_es_form_editor_data.siteTags);
}
// Remove to avoid duplicates.
window.esVisualEditor.RichTextEditor.remove('es-rte-tags');
window.esVisualEditor.RichTextEditor.add('es-rte-tags', {
icon: `<select class="gjs-field">
<option value="">Select keyword</option>
${option_html}
</select>`,
title: 'Keyword',
// Bind the 'result' on 'change' listener
event: 'change',
result: (rte, action) => {
rte.insertHTML(action.btn.firstChild.value);
},
// Reset the select on change
update: (rte, action) => {
action.btn.firstChild.value = '';
},
});
}
window.ig_es_add_dnd_rte_tags = ig_es_add_dnd_rte_tags;
ig_es_preprare_iframe_preview_html = preview_html => {
let frontend_css = ig_es_get_frontend_css();
let iframe_html = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
${frontend_css}
</head>
<body style="background-color:#fff;padding:0">
<div class="ig-es-form-preview">
${preview_html}
</div>
</body>
</html>`;
return iframe_html;
}
ig_es_get_frontend_css = () => {
return ig_es_js_data.frontend_css;
}
jQuery.fn.extend({
ig_es_select2: function() {
return this.each(function() {
let multiselect_elem = jQuery(this);
let first_option_elem = jQuery(multiselect_elem).find('option:first');
let first_option_vallue = jQuery(first_option_elem).attr('value');
let placeholder_label = '';
if ( '' === first_option_vallue || '0' === first_option_vallue ) {
// Get placeholder label from the first option.
placeholder_label = jQuery(first_option_elem).text();
placeholder_label = placeholder_label.trim();
// Remove it from option to avoid being shown and allowing users to select it as an option in Select2's options panel.
jQuery(first_option_elem).remove();
}
jQuery(multiselect_elem).select2({
placeholder: placeholder_label, // Add placeholder label using first option's text.
});
});
}
});
//app.js code started
// jQuery(document).ready(function(){
// $('.ig-es-campaigns-recipient, .ig-es-campaigns-recipient2, .ig-es-campaigns-recipient3, .ig-es-post-types, .ig-es-select-post-category').select2({
// placeholder: "Select",
// closeOnSelect : false
// })
// });
// Get all buttons with class="btn" inside the container
// var nav_btns = document.getElementsByClassName("ig-es-campaign-sidebar-nav-menu");
// // Loop through the buttons and add the active class to the current/clicked button
// for (var i = 0; i < nav_btns.length; i++) {
// nav_btns[i].addEventListener("click", function( event ) {
// event.preventDefault();
// for (let element of nav_btns) {
// element.classList.remove('active');
// let section = element.getAttribute("href");
// document.getElementById(section.replace("#", "")).classList.add("hidden");
// }
// this.className += " active";
// let section_display = this.getAttribute("href");
// document.getElementById(section_display.replace("#", "")).classList.remove("hidden")
// document.getElementById(this).classList.add("active")
// });
// }
// function setupAccordion() {
// const accordionButtons = document.querySelectorAll(".accordion button, .accordion p");
// Array.prototype.forEach.call(accordionButtons, btn => {
// let target = btn.parentElement.nextElementSibling;
// btn.onclick = () => {
// let expanded = btn.getAttribute('aria-expanded') === 'true' || false;
// btn.setAttribute('aria-expanded', !expanded);
// target.hidden = expanded;
// let indicator = btn.querySelectorAll('svg')[0];
// indicator.classList.toggle("transform");
// indicator.classList.toggle("rotate-90");
// }
// target.hidden = true;
// })
// }
// // Do on load setup here
// function initializeSiteCode() {
// setupAccordion();
// }
// // If document is ready already, just initialize
// if (document.readyState !== 'loading') {
// initializeSiteCode();
// } else {
// // Else wait for ready state
// document.addEventListener('DOMContentLoaded', function () {
// initializeSiteCode();
// });
// }
function showDropDown(){
const dropdownButton = document.getElementById('menu-button');
const dropdownMenu = document.getElementById('dropdown-menu');
if( dropdownButton && dropdownMenu){
dropdownButton.addEventListener('click', () => {
const isExpanded = dropdownButton.getAttribute('aria-expanded') === 'true';
dropdownButton.setAttribute('aria-expanded', !isExpanded);
dropdownMenu.classList.toggle('hidden');
dropdownMenu.classList.toggle('scale-100');
dropdownMenu.classList.toggle('opacity-100');
dropdownMenu.classList.toggle('scale-95');
dropdownMenu.classList.toggle('opacity-0');
});
// Close the dropdown menu when clicking outside
document.addEventListener('click', (event) => {
if (!dropdownButton.contains(event.target) && !dropdownMenu.contains(event.target)) {
dropdownButton.setAttribute('aria-expanded', 'false');
dropdownMenu.classList.add('hidden');
dropdownMenu.classList.remove('scale-100', 'opacity-100');
dropdownMenu.classList.add('scale-95', 'opacity-0');
}
});
}
}
// document.addEventListener('DOMContentLoaded', () => {
// const dropdownButton = document.getElementById('menu-button');
// const dropdownMenu = document.getElementById('dropdown-menu');
// dropdownButton.addEventListener('click', () => {
// const isExpanded = dropdownButton.getAttribute('aria-expanded') === 'true';
// dropdownButton.setAttribute('aria-expanded', !isExpanded);
// dropdownMenu.classList.toggle('hidden');
// dropdownMenu.classList.toggle('scale-100');
// dropdownMenu.classList.toggle('opacity-100');
// dropdownMenu.classList.toggle('scale-95');
// dropdownMenu.classList.toggle('opacity-0');
// });
// // Close the dropdown menu when clicking outside
// document.addEventListener('click', (event) => {
// if (!dropdownButton.contains(event.target) && !dropdownMenu.contains(event.target)) {
// dropdownButton.setAttribute('aria-expanded', 'false');
// dropdownMenu.classList.add('hidden');
// dropdownMenu.classList.remove('scale-100', 'opacity-100');
// dropdownMenu.classList.add('scale-95', 'opacity-0');
// }
// });
// });
// const viewAllTags = document.getElementById('view-all-tags');
// const secondaryList = document.querySelector('.secondary-list');
// const dropdownIcon = document.querySelector('.transition-transform');
// viewAllTags.addEventListener('click', () => {
// secondaryList.classList.toggle('hidden');
// dropdownIcon.classList.toggle('rotate-180');
// });
//app.js code ended