341 lines
11 KiB
JavaScript
341 lines
11 KiB
JavaScript
jQuery(document).ready(function ($) {
|
|
'use strict';
|
|
|
|
/**
|
|
* Add an event
|
|
* @param event
|
|
* @param selector
|
|
* @param callback
|
|
* @param context
|
|
*/
|
|
function rsssl_add_event(event, selector, callback ) {
|
|
document.addEventListener(event, e => {
|
|
if ( e.target.closest(selector) ) {
|
|
callback(e);
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
//select2 dropdown
|
|
var select2Dropdown = $('.rsssl-select2');
|
|
if (select2Dropdown.length) {
|
|
select2Dropdown.select2({
|
|
//tags: true,
|
|
width:'400px',
|
|
placeholder: 'Select or Add',
|
|
language: {
|
|
noResults: function() {
|
|
return '<span id="rsssl-no-results-container">'+rsssl_wizard.no_results+'</span>';
|
|
},
|
|
},
|
|
escapeMarkup: function(markup) {
|
|
return markup;
|
|
},
|
|
});
|
|
}
|
|
|
|
$(document).on('click','#rsssl-no-results-container',function(){
|
|
console.log("clicked");
|
|
select2Dropdown.val('none');
|
|
select2Dropdown.trigger('change');
|
|
select2Dropdown.select2('close');
|
|
});
|
|
|
|
var copied_element = $('.rsssl-copied-feedback').html();
|
|
$(document).on('click', '.rsssl-copy-content', function () {
|
|
var type = $(this).data('item');
|
|
var success;
|
|
var data = $('.rsssl-'+type).text();
|
|
var temp_element = $("<textarea>");
|
|
$("body").append(temp_element);
|
|
temp_element.val(data).select();
|
|
try {
|
|
success = document.execCommand("copy");
|
|
} catch (e) {
|
|
success = false;
|
|
}
|
|
temp_element.remove();
|
|
if (success) {
|
|
$('<span class="rsssl-copied-feedback-container">'+copied_element+'</span>').insertAfter($(this));
|
|
setTimeout(function(){ $('.rsssl-copied-feedback-container').fadeOut('slow') }, 5000);
|
|
}
|
|
});
|
|
|
|
function maybe_show_password_delete_questions(){
|
|
var deletePasswordField = $('.field-group.store_credentials');
|
|
if (deletePasswordField.length) {
|
|
deletePasswordField.addClass('rsssl-hidden');
|
|
}
|
|
var passwordFields = $('.rsssl-password');
|
|
if (deletePasswordField.length) {
|
|
passwordFields.each(function(){
|
|
if ( !$(this).hasClass('rsssl-hidden') ) {
|
|
console.log('is hidden field');
|
|
deletePasswordField.removeClass('rsssl-hidden');
|
|
}
|
|
});
|
|
|
|
}
|
|
}
|
|
|
|
|
|
//remove alerts
|
|
window.setTimeout(function () {
|
|
$(".rsssl-hide").fadeTo(500, 0).slideUp(500, function () {
|
|
$(this).remove();
|
|
});
|
|
}, 2000);
|
|
|
|
function remove_after_change() {
|
|
$(".rsssl-panel.rsssl-remove-after-change").fadeTo(500, 0).slideUp(500, function () {
|
|
$(this).remove();
|
|
});
|
|
}
|
|
|
|
/**
|
|
*
|
|
* On multiple fields, we check if all input type=text and textareas are filled
|
|
*
|
|
* */
|
|
|
|
function rsssl_validate_multiple() {
|
|
$('.multiple-field').each(function(){
|
|
|
|
var completed=true;
|
|
$(this).find('input[type=text]').each(function () {
|
|
if ($(this).val()===''){
|
|
completed = false;
|
|
}
|
|
});
|
|
|
|
$(this).find('textarea').each(function () {
|
|
if ($(this).val()===''){
|
|
completed = false;
|
|
}
|
|
});
|
|
|
|
var icon = $(this).closest('.rsssl-panel').find('.rsssl-multiple-field-validation i');
|
|
if (completed){
|
|
icon.removeClass('fa-times');
|
|
icon.addClass('fa-check');
|
|
} else {
|
|
icon.addClass('fa-times');
|
|
icon.removeClass('fa-check');
|
|
}
|
|
});
|
|
}
|
|
rsssl_validate_multiple()
|
|
$(document).on('keyup', '.multiple-field input[type=text]', function () {
|
|
rsssl_validate_multiple();
|
|
});
|
|
$(document).on('keyup', '.multiple-field textarea', function () {
|
|
rsssl_validate_multiple();
|
|
});
|
|
|
|
|
|
//validation of checkboxes
|
|
rsssl_validate_checkboxes();
|
|
$(':checkbox').change(rsssl_validate_checkboxes);
|
|
|
|
function rsssl_validate_checkboxes() {
|
|
$('.rsssl-validate-multicheckbox').each(function (i) {
|
|
var set_required = [];
|
|
var all_unchecked = true;
|
|
$(this).find(':checkbox').each(function (i) {
|
|
|
|
set_required.push($(this));
|
|
|
|
if ($(this).is(':checked')) {
|
|
all_unchecked = false;
|
|
}
|
|
});
|
|
var container = $(this).closest('.field-group').find('.rsssl-label');
|
|
if (all_unchecked) {
|
|
container.removeClass('valid-multicheckbox');
|
|
container.addClass('invalid-multicheckbox');
|
|
$.each(set_required, function (index, item) {
|
|
item.prop('required', true);
|
|
item.addClass('is-required');
|
|
});
|
|
|
|
} else {
|
|
container.removeClass('invalid-multicheckbox');
|
|
container.addClass('valid-multicheckbox');
|
|
$.each(set_required, function (index, item) {
|
|
item.prop('required', false);
|
|
item.removeClass('is-required');
|
|
});
|
|
}
|
|
|
|
});
|
|
|
|
//now apply the required.
|
|
|
|
check_conditions();
|
|
}
|
|
|
|
$(document).on('change', 'input', function (e) {
|
|
check_conditions();
|
|
remove_after_change();
|
|
});
|
|
|
|
$(document).on('keyup', 'input', function (e) {
|
|
check_conditions();
|
|
remove_after_change();
|
|
});
|
|
|
|
$(document).on('change', 'select', function (e) {
|
|
check_conditions();
|
|
remove_after_change();
|
|
});
|
|
|
|
$(document).on('change', 'textarea', function (e) {
|
|
check_conditions();
|
|
remove_after_change();
|
|
});
|
|
|
|
$(document).on('keyup', 'textarea', function (e) {
|
|
remove_after_change();
|
|
});
|
|
|
|
$(document).on('click', 'button', function (e) {
|
|
remove_after_change();
|
|
});
|
|
|
|
if ($("input[name=step]").val() == 2) {
|
|
setTimeout(function () {
|
|
if (typeof tinymce !== 'undefined') {
|
|
for (var i = 0; i < tinymce.editors.length; i++) {
|
|
tinymce.editors[i].on('NodeChange keyup', function (ed, e) {
|
|
remove_after_change();
|
|
});
|
|
}
|
|
}
|
|
}, 5000);
|
|
}
|
|
|
|
|
|
$(document).on("rssslRenderConditions", check_conditions);
|
|
|
|
/*conditional fields*/
|
|
function check_conditions() {
|
|
var value;
|
|
var showIfConditionMet = true;
|
|
|
|
$(".condition-check-1").each(function (e) {
|
|
|
|
var i;
|
|
for (i = 1; i < 4; i++) {
|
|
var question = 'rsssl_' + $(this).data("condition-question-" + i);
|
|
var condition_type = 'AND';
|
|
|
|
if (question == 'rsssl_undefined') return;
|
|
|
|
var condition_answer = $(this).data("condition-answer-" + i);
|
|
|
|
//remove required attribute of child, and set a class.
|
|
var input = $(this).find('input[type=checkbox]');
|
|
if (!input.length) {
|
|
input = $(this).find('input');
|
|
}
|
|
if (!input.length) {
|
|
input = $(this).find('textarea');
|
|
}
|
|
if (!input.length) {
|
|
input = $(this).find('select');
|
|
}
|
|
|
|
if (input.length && input[0].hasAttribute('required')) {
|
|
input.addClass('is-required');
|
|
}
|
|
|
|
//cast into string
|
|
condition_answer += "";
|
|
|
|
if (condition_answer.indexOf('NOT ') !== -1) {
|
|
condition_answer = condition_answer.replace('NOT ', '');
|
|
showIfConditionMet = false;
|
|
} else {
|
|
showIfConditionMet = true;
|
|
}
|
|
var condition_answers = [];
|
|
if (condition_answer.indexOf(' OR ') !== -1) {
|
|
condition_answers = condition_answer.split(' OR ');
|
|
condition_type = 'OR';
|
|
} else {
|
|
condition_answers = [condition_answer];
|
|
}
|
|
|
|
var container = $(this);
|
|
var conditionMet = false;
|
|
condition_answers.forEach(function (condition_answer) {
|
|
value = get_input_value(question);
|
|
|
|
if ($('select[name=' + question + ']').length) {
|
|
value = Array($('select[name=' + question + ']').val());
|
|
}
|
|
|
|
if ($("input[name='" + question + "[" + condition_answer + "]" + "']").length) {
|
|
if ($("input[name='" + question + "[" + condition_answer + "]" + "']").is(':checked')) {
|
|
conditionMet = true;
|
|
value = [];
|
|
} else {
|
|
conditionMet = false;
|
|
value = [];
|
|
}
|
|
}
|
|
if (showIfConditionMet) {
|
|
|
|
//check if the index of the value is the condition, or, if the value is the condition
|
|
if (conditionMet || value.indexOf(condition_answer) != -1 || (value == condition_answer) || (condition_answer==='EMPTY' && value=='') ) {
|
|
|
|
container.removeClass("rsssl-hidden");
|
|
//remove required attribute of child, and set a class.
|
|
if (input.hasClass('is-required')) input.prop('required', true);
|
|
//prevent further checks if it's an or/and statement
|
|
conditionMet = true;
|
|
} else {
|
|
container.addClass("rsssl-hidden");
|
|
if (input.hasClass('is-required')) input.prop('required', false);
|
|
}
|
|
} else {
|
|
|
|
if (conditionMet || value.indexOf(condition_answer) != -1 || (value == condition_answer) || (condition_answer==='EMPTY' && value=='') ) {
|
|
container.addClass("rsssl-hidden");
|
|
if (input.hasClass('is-required')) input.prop('required', false);
|
|
} else {
|
|
container.removeClass("rsssl-hidden");
|
|
if (input.hasClass('is-required')) input.prop('required', true);
|
|
conditionMet = true;
|
|
}
|
|
}
|
|
});
|
|
if (!conditionMet) {
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
maybe_show_password_delete_questions();
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
get checkbox values, array proof.
|
|
*/
|
|
|
|
function get_input_value(fieldName) {
|
|
var input = $('input[name=' + fieldName + ']');
|
|
if (input.attr('type') === 'text' || input.attr('type') === 'password') {
|
|
return input.val();
|
|
} else {
|
|
var checked_boxes = [];
|
|
$('input[name=' + fieldName + ']:checked').each(function () {
|
|
checked_boxes[checked_boxes.length] = $(this).val();
|
|
});
|
|
return checked_boxes;
|
|
}
|
|
}
|
|
|
|
}); |