Files
medicalalert-web-reloaded/wp/wp-content/plugins/wp-schema-pro/classes/lib/target-rule/target-rule.js
2024-09-25 09:25:31 -04:00

280 lines
7.0 KiB
JavaScript

/* eslint-env jquery */
(function ($) {
const initTargetRuleSelect2 = function (selector) {
$(selector).select2({
placeholder: 'Search pages / post / archives',
ajax: {
url: ajaxurl,
dataType: 'json',
method: 'post',
delay: 250,
data(params) {
return {
q: params.term, // search term
page: params.page,
action: 'bsf_get_posts_by_query',
nonce: Targetrule.security,
};
},
processResults(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,
});
};
const updateTargetRuleInput = function (wrapper) {
const ruleInput = wrapper.find('.bsf-target_rule-input');
const newValue = [];
wrapper.find('.bsf-target-rule-condition').each(function () {
const $this = $(this);
let tempObj = {};
const ruleCondition = $this.find('select.target_rule-condition');
const specificPage = $this.find('select.target_rule-specific-page');
const ruleConditionVal = ruleCondition.val();
const specificPageVal = specificPage.val();
if ('' !== ruleConditionVal) {
tempObj = {
type: ruleConditionVal,
specific: specificPageVal,
};
newValue.push(tempObj);
}
});
const rulesString = JSON.stringify(newValue);
ruleInput.val(rulesString);
};
const updateCloseButton = function (wrapper) {
const type = wrapper
.closest('.bsf-target-rule-wrapper')
.attr('data-type');
const rules = wrapper.find('.bsf-target-rule-condition');
let showClose = false;
if ('display' === type) {
if (rules.length > 1) {
showClose = true;
}
} else {
showClose = true;
}
rules.each(function () {
if (showClose) {
jQuery(this)
.find('.target_rule-condition-delete')
.removeClass('bsf-hidden');
} else {
jQuery(this)
.find('.target_rule-condition-delete')
.addClass('bsf-hidden');
}
});
};
const updateExclusionButton = function (forceShow, forceHide) {
const displayOn = $('.bsf-target-rule-display-on-wrap');
const excludeOn = $('.bsf-target-rule-exclude-on-wrap');
const excludeFieldWrap = excludeOn.closest('tr');
const addExcludeBlock = displayOn.find(
'.target_rule-add-exclusion-rule'
);
const excludeConditions = excludeOn.find('.bsf-target-rule-condition');
if (true === forceHide) {
excludeFieldWrap.addClass('bsf-hidden');
addExcludeBlock.removeClass('bsf-hidden');
} else if (true === forceShow) {
excludeFieldWrap.removeClass('bsf-hidden');
addExcludeBlock.addClass('bsf-hidden');
} else if (
1 === excludeConditions.length &&
'' ===
$(excludeConditions[0])
.find('select.target_rule-condition')
.val()
) {
excludeFieldWrap.addClass('bsf-hidden');
addExcludeBlock.removeClass('bsf-hidden');
} else {
excludeFieldWrap.removeClass('bsf-hidden');
addExcludeBlock.addClass('bsf-hidden');
}
};
$(document).ready(function () {
jQuery('.bsf-target-rule-condition').each(function () {
const $this = $(this),
condition = $this.find('select.target_rule-condition'),
conditionVal = condition.val(),
specificPage = $this.next('.target_rule-specific-page-wrap');
if ('specifics' === conditionVal) {
specificPage.slideDown(300);
}
});
jQuery(
'.bsf-target-rule-selector-wrapper select.target-rule-select2'
).each(function (index, el) {
initTargetRuleSelect2(el);
});
jQuery('.bsf-target-rule-selector-wrapper').each(function () {
updateCloseButton(jQuery(this));
});
jQuery(document).on(
'change',
'.bsf-target-rule-condition select.target_rule-condition',
function () {
const $this = jQuery(this),
thisVal = $this.val(),
fieldWrap = $this.closest('.bsf-target-rule-wrapper');
if ('specifics' === thisVal) {
$this
.closest('.bsf-target-rule-condition')
.next('.target_rule-specific-page-wrap')
.slideDown(300);
} else {
$this
.closest('.bsf-target-rule-condition')
.next('.target_rule-specific-page-wrap')
.slideUp(300);
}
updateTargetRuleInput(fieldWrap);
}
);
jQuery('.bsf-target-rule-selector-wrapper').on(
'change',
'.target-rule-select2',
function () {
const $this = jQuery(this),
fieldWrap = $this.closest('.bsf-target-rule-wrapper');
updateTargetRuleInput(fieldWrap);
}
);
jQuery('.bsf-target-rule-selector-wrapper').on(
'click',
'.target_rule-add-rule-wrap a',
function (e) {
e.preventDefault();
e.stopPropagation();
const $this = jQuery(this),
id = $this.attr('data-rule-id'),
newId = parseInt(id) + 1,
type = $this.attr('data-rule-type'),
ruleWrap = $this
.closest('.bsf-target-rule-selector-wrapper')
.find('.target_rule-builder-wrap'),
template = wp.template(
'bsf-target-rule-' + type + '-condition'
),
fieldWrap = $this.closest('.bsf-target-rule-wrapper');
ruleWrap.append(template({ id: newId, type }));
initTargetRuleSelect2(
'.bsf-target-rule-' + type + '-on .target-rule-select2'
);
$this.attr('data-rule-id', newId);
updateCloseButton(fieldWrap);
}
);
jQuery('.bsf-target-rule-selector-wrapper').on(
'click',
'.target_rule-condition-delete',
function () {
const $this = jQuery(this),
ruleCondition = $this.closest('.bsf-target-rule-condition'),
fieldWrap = $this.closest('.bsf-target-rule-wrapper');
let cnt = 0;
const dataType = fieldWrap.attr('data-type');
if (
'exclude' === dataType &&
fieldWrap.find('.bsf-target-rule-condition').length === 1
) {
fieldWrap.find('.target_rule-condition').val('');
fieldWrap.find('.target_rule-specific-page').val('');
fieldWrap.find('.target_rule-condition').trigger('change');
updateExclusionButton(false, true);
} else {
$this
.parent('.bsf-target-rule-condition')
.next('.target_rule-specific-page-wrap')
.remove();
ruleCondition.remove();
}
fieldWrap.find('.bsf-target-rule-condition').each(function (i) {
const condition = jQuery(this),
oldRuleId = condition.attr('data-rule'),
selectLocation = condition.find(
'.target_rule-condition'
),
locationName = selectLocation.attr('name');
condition.attr('data-rule', i);
selectLocation.attr(
'name',
locationName.replace(
'[' + oldRuleId + ']',
'[' + i + ']'
)
);
condition
.removeClass('bsf-target-rule-' + oldRuleId)
.addClass('bsf-target-rule-' + i);
cnt = i;
});
fieldWrap
.find('.target_rule-add-rule-wrap a')
.attr('data-rule-id', cnt);
updateCloseButton(fieldWrap);
updateTargetRuleInput(fieldWrap);
}
);
jQuery('.bsf-target-rule-selector-wrapper').on(
'click',
'.target_rule-add-exclusion-rule a',
function (e) {
e.preventDefault();
e.stopPropagation();
updateExclusionButton(true);
}
);
});
})(jQuery);