oont-contents/plugins/astra-addon/classes/modules/target-rule/target-rule.js
2025-02-08 15:10:23 +01:00

246 lines
7.5 KiB
JavaScript

;(function ( $, window, undefined ) {
var init_target_rule_select2 = function( selector ) {
$(selector).astselect2({
placeholder: astRules.search,
ajax: {
url: ajaxurl,
dataType: 'json',
method: 'post',
delay: 250,
data: function (params) {
return {
q: params.term, // search term
page: params.page,
action: 'astra_get_posts_by_query',
'nonce': astRules.ajax_nonce,
};
},
processResults: function (data) {
// console.log(data);
// console.log("inside");
// parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to
// alter the remote JSON data
return {
results: data
};
},
cache: true
},
minimumInputLength: 2,
language: astRules.ast_lang
});
};
var update_target_rule_input = function(wrapper) {
var rule_input = wrapper.find('.ast-target_rule-input');
var old_value = rule_input.val();
var new_value = [];
wrapper.find('.astra-target-rule-condition').each(function(i) {
var $this = $(this);
var temp_obj = {};
var rule_condition = $this.find('select.target_rule-condition');
var specific_page = $this.find('select.target_rule-specific-page');
var rule_condition_val = rule_condition.val();
var specific_page_val = specific_page.val();
if ( '' != rule_condition_val ) {
temp_obj = {
type : rule_condition_val,
specific: specific_page_val
}
new_value.push( temp_obj );
};
})
var rules_string = JSON.stringify( new_value );
rule_input.val( rules_string );
};
var update_close_button = function(wrapper) {
type = wrapper.closest('.ast-target-rule-wrapper').attr('data-type');
rules = wrapper.find('.astra-target-rule-condition');
show_close = false;
if ( 'display' == type ) {
if ( rules.length > 1 ) {
show_close = true;
}
}else{
show_close = true;
}
rules.each(function() {
if ( show_close ) {
jQuery(this).find('.target_rule-condition-delete').removeClass('ast-hidden');
}else{
jQuery(this).find('.target_rule-condition-delete').addClass('ast-hidden');
}
});
};
var update_exclusion_button = function( force_show, force_hide ) {
var display_on = $('.ast-target-rule-display-on-wrap');
var exclude_on = $('.ast-target-rule-exclude-on-wrap');
var exclude_field_wrap = exclude_on.closest('tr');
var add_exclude_block = display_on.find('.target_rule-add-exclusion-rule');
var exclude_conditions = exclude_on.find('.astra-target-rule-condition');
if ( true == force_hide ) {
exclude_field_wrap.addClass( 'ast-hidden' );
add_exclude_block.removeClass( 'ast-hidden' );
}else if( true == force_show ){
exclude_field_wrap.removeClass( 'ast-hidden' );
add_exclude_block.addClass( 'ast-hidden' );
}else{
if ( 1 == exclude_conditions.length && '' == $(exclude_conditions[0]).find('select.target_rule-condition').val() ) {
exclude_field_wrap.addClass( 'ast-hidden' );
add_exclude_block.removeClass( 'ast-hidden' );
}else{
exclude_field_wrap.removeClass( 'ast-hidden' );
add_exclude_block.addClass( 'ast-hidden' );
}
}
};
$(document).ready(function($) {
jQuery( '.astra-target-rule-condition' ).each( function() {
var $this = $( this ),
condition = $this.find('select.target_rule-condition'),
condition_val = condition.val(),
specific_page = $this.next( '.target_rule-specific-page-wrap' );
if( 'specifics' == condition_val ) {
specific_page.slideDown( 300 );
}
} );
jQuery('select.target-rule-select2').each(function(index, el) {
init_target_rule_select2( el );
});
jQuery('.ast-target-rule-selector-wrapper').each(function() {
update_close_button( jQuery(this) );
})
/* Show hide exclusion button */
update_exclusion_button();
jQuery( document ).on( 'change', '.astra-target-rule-condition select.target_rule-condition' , function( e ) {
var $this = jQuery(this),
this_val = $this.val(),
field_wrap = $this.closest('.ast-target-rule-wrapper');
if( 'specifics' == this_val ) {
$this.closest( '.astra-target-rule-condition' ).next( '.target_rule-specific-page-wrap' ).slideDown( 300 );
} else {
$this.closest( '.astra-target-rule-condition' ).next( '.target_rule-specific-page-wrap' ).slideUp( 300 );
}
update_target_rule_input( field_wrap );
} );
jQuery( '.ast-target-rule-selector-wrapper' ).on( 'change', '.target-rule-select2', function(e) {
var $this = jQuery( this ),
field_wrap = $this.closest('.ast-target-rule-wrapper');
update_target_rule_input( field_wrap );
});
jQuery( '.ast-target-rule-selector-wrapper' ).on( 'click', '.target_rule-add-rule-wrap a', function(e) {
e.preventDefault();
e.stopPropagation();
var $this = jQuery( this ),
id = $this.attr( 'data-rule-id' ),
new_id = parseInt(id) + 1,
type = $this.attr( 'data-rule-type' ),
rule_wrap = $this.closest('.ast-target-rule-selector-wrapper').find('.target_rule-builder-wrap'),
template = wp.template( 'astra-target-rule-' + type + '-condition' ),
field_wrap = $this.closest('.ast-target-rule-wrapper');
rule_wrap.append( template( { id : new_id, type : type } ) );
init_target_rule_select2( '.ast-target-rule-'+type+'-on .target-rule-select2' );
$this.attr( 'data-rule-id', new_id );
update_close_button( field_wrap );
});
jQuery( '.ast-target-rule-selector-wrapper' ).on( 'click', '.target_rule-condition-delete', function(e) {
var $this = jQuery( this ),
rule_condition = $this.closest('.astra-target-rule-condition'),
field_wrap = $this.closest('.ast-target-rule-wrapper');
cnt = 0,
data_type = field_wrap.attr( 'data-type' ),
optionVal = $this.siblings('.target_rule-condition-wrap').children('.target_rule-condition').val();
if ( 'exclude' == data_type ) {
if ( 1 === field_wrap.find('.target_rule-condition').length ) {
field_wrap.find('.target_rule-condition').val('');
field_wrap.find('.target_rule-specific-page').val('');
field_wrap.find('.target_rule-condition').trigger('change');
update_exclusion_button( false, true );
}else{
$this.parent('.astra-target-rule-condition').next('.target_rule-specific-page-wrap').remove();
rule_condition.remove();
}
} else {
$this.parent('.astra-target-rule-condition').next('.target_rule-specific-page-wrap').remove();
rule_condition.remove();
}
field_wrap.find('.astra-target-rule-condition').each(function(i) {
var condition = jQuery( this ),
old_rule_id = condition.attr('data-rule'),
select_location = condition.find('.target_rule-condition'),
select_specific = condition.find('.target_rule-specific-page'),
location_name = select_location.attr( 'name' );
condition.attr( 'data-rule', i );
select_location.attr( 'name', location_name.replace('['+old_rule_id+']', '['+i+']') );
condition.removeClass('ast-target-rule-'+old_rule_id).addClass('ast-target-rule-'+i);
cnt = i;
});
field_wrap.find('.target_rule-add-rule-wrap a').attr( 'data-rule-id', cnt )
update_close_button( field_wrap );
update_target_rule_input( field_wrap );
});
jQuery( '.ast-target-rule-selector-wrapper' ).on( 'click', '.target_rule-add-exclusion-rule a', function(e) {
e.preventDefault();
e.stopPropagation();
update_exclusion_button( true );
});
});
}(jQuery, window));