| Current Path : /home/ereika83/public_html/wp-content/plugins/sfwd-lms/assets/js/ |
| Current File : /home/ereika83/public_html/wp-content/plugins/sfwd-lms/assets/js/learndash-admin-binary-selector.js |
jQuery(function () {
var selectors_array = [];
jQuery('.learndash-binary-selector').each(function () {
var selector_id = jQuery(this).prop('id');
if (typeof selector_id !== 'undefined') {
selectors_array[selector_id] = new learndash_binary_selector(this);
selectors_array[selector_id].init();
}
});
});
function learndash_binary_selector(selector_div) {
var self = this;
self.selector_div = selector_div;
self.selector_id = jQuery(self.selector_div).prop('id');
self.nonce = jQuery(self.selector_div).data('nonce');
self.selected_items = {};
self.selector_data_loaded = false;
self.selector_data = [];
this.init = function () {
self.get_selector_data(true);
self.get_selector_form_element();
self.update_legend();
self.init_actions();
self.init_pager();
self.init_search();
};
this.init_actions = function () {
jQuery(
'.learndash-binary-selector-section-middle',
self.selector_div
).on(
'click',
'a.learndash-binary-selector-button-add',
self.add_selected_items
);
jQuery(
'.learndash-binary-selector-section-middle',
self.selector_div
).on(
'click',
'a.learndash-binary-selector-button-remove',
self.remove_selected_items
);
};
this.init_pager = function () {
if (
jQuery('ul.learndash-binary-selector-pager', self.selector_div)
.length
) {
jQuery(
'ul.learndash-binary-selector-pager',
self.selector_div
).each(function (e) {
var section_pager_el = this;
if (
jQuery(section_pager_el).hasClass(
'learndash-binary-selector-pager-left'
)
) {
var position = 'left';
} else if (
jQuery(section_pager_el).hasClass(
'learndash-binary-selector-pager-right'
)
) {
var position = 'right';
}
if (typeof position !== 'undefined') {
if (
typeof self.selector_data[position] !== 'undefined' &&
typeof self.selector_data[position].pager !==
'undefined'
) {
self.update_pager(
section_pager_el,
self.selector_data[position].pager
);
}
}
});
jQuery(
'.learndash-binary-selector-section ul.learndash-binary-selector-pager a',
self.selector_div
).on('click', function (e) {
e.preventDefault();
self.handle_pager(this);
});
}
};
this.init_search = function () {
if (
jQuery('.learndash-binary-selector-search', self.selector_div)
.length
) {
// Hold reference to our interval loop for key press
var interval_ref;
// We setup a search values object which will hold the left and right side searches. This will allow
// dual search on left and right without loosing our settings.
var search_values = {};
// Set time for .20 seconds. 1/5 of a second.
var search_timeout = 200;
// Activate logic on fucus.
jQuery('.learndash-binary-selector-search', self.selector_div).on(
'focus',
function () {
var search_el = this;
var section_el = self.get_section_el(search_el);
if (typeof section_el === 'undefined') {
return;
}
var selector_html_id = jQuery(self.selector_div).attr('id');
if (typeof selector_html_id === 'undefined') {
return;
}
if (
jQuery(search_el).hasClass(
'learndash-binary-selector-search-left'
)
) {
var position = 'left';
} else if (
jQuery(search_el).hasClass(
'learndash-binary-selector-search-right'
)
) {
var position = 'right';
} else {
return;
}
search_values[position] = {};
search_values[position].query_data = {};
if (typeof self.selector_data[position] === 'undefined') {
return;
}
if (
typeof self.selector_data.selector_class === 'undefined'
) {
return;
}
if (
typeof self.selector_data.selector_nonce === 'undefined'
) {
return;
}
if (typeof self.selector_data.query_vars === 'undefined') {
return;
}
// Copy our query vars from the section data element. Will be used as a starting point for the search queries
search_values[position].query_data.query_vars =
self.selector_data.query_vars;
// Set and clear the search query var. Will be used to hold the search value passed via AJAX
search_values[position].query_data.position = position;
search_values[position].query_data.selector_class =
self.selector_data.selector_class;
search_values[position].query_data.selector_nonce =
self.selector_data.selector_nonce;
search_values[position].selector_html_id = selector_html_id;
search_values[position].query_data.selected_ids =
self.get_selector_form_element(true);
// Grab the current value of the search input and store it as part of our data.
search_values[position].current_value =
jQuery(search_el).val();
if (interval_ref != '') {
clearInterval(interval_ref);
}
interval_ref = setInterval(function () {
search_values[position].current_value =
jQuery(search_el).val();
// If search was cleared we need to reset the display to show the regular non-search items
if (search_values[position].current_value == '') {
if (
search_values[position].query_data.query_vars
.search !=
search_values[position].current_value
) {
search_values[
position
].query_data.query_vars.search =
search_values[position].current_value;
// Reset our query vars to the existing values.
search_values[position].query_data.query_vars =
self.selector_data.query_vars;
search_values[
position
].query_data.query_vars.search = '';
var post_data = {
action: 'learndash_binary_selector_pager',
nonce: self.nonce,
query_data:
search_values[position].query_data,
};
jQuery.ajax({
type: 'POST',
url: ajaxurl,
dataType: 'json',
cache: false,
data: post_data,
error: function (
jqXHR,
textStatus,
errorThrown
) {
//console.log('init: error HTTP Status['+jqXHR.status+'] '+errorThrown);
},
success: function (reply_data) {
if (
typeof reply_data.html_options !==
'undefined'
) {
jQuery(
'.learndash-binary-selector-items',
section_el
)
.empty()
.append(
reply_data.html_options
);
}
var section_pager_el = jQuery(
'ul.learndash-binary-selector-pager',
section_el
);
if (
typeof section_pager_el !==
'undefined'
) {
jQuery(section_pager_el).show();
if (
typeof reply_data.pager !==
'undefined'
) {
self.selector_data[
position
].pager = reply_data.pager;
self.update_pager(
section_pager_el,
self.selector_data[position]
.pager
);
self.update_legend();
}
}
},
});
}
} else {
if (
search_values[position].current_value.length >=
3 &&
search_values[position].query_data.query_vars
.search !=
search_values[position].current_value
) {
search_values[
position
].query_data.query_vars.search =
search_values[position].current_value;
search_values[
position
].query_data.query_vars.paged = 1;
var post_data = {
action: 'learndash_binary_selector_pager',
nonce: self.nonce,
query_data:
search_values[position].query_data,
};
jQuery.ajax({
type: 'POST',
url: ajaxurl,
dataType: 'json',
cache: false,
data: post_data,
error: function (
jqXHR,
textStatus,
errorThrown
) {
//console.log('init: error HTTP Status['+jqXHR.status+'] '+errorThrown);
},
success: function (reply_data) {
if (
typeof reply_data.html_options !==
'undefined'
) {
jQuery(
'.learndash-binary-selector-items',
section_el
)
.empty()
.append(
reply_data.html_options
);
} else {
jQuery(
'.learndash-binary-selector-items',
section_el
)
.empty()
.append('');
}
if (
typeof reply_data.pager !==
'undefined'
) {
var section_pager_el = jQuery(
'.learndash-binary-selector-pager',
section_el
);
if (
typeof section_pager_el !==
'undefined'
) {
jQuery(section_pager_el).show();
self.selector_data[
position
].pager = reply_data.pager;
self.update_pager(
section_pager_el,
reply_data.pager
);
self.update_legend();
}
} else {
var section_pager_el = jQuery(
'.learndash-binary-selector-pager',
section_el
);
jQuery(section_pager_el).hide();
}
},
});
}
if (
!jQuery(
'.learndash-binary-selector-search',
self.section_el
).is(':focus')
) {
clearInterval(interval_ref);
}
}
}, search_timeout);
}
);
}
};
this.update_legend = function () {
var options_size = jQuery(
'select.learndash-binary-selector-items-left option',
self.selector_div
).length;
jQuery(
'.learndash-binary-selector-legend-left span.items-total-count',
self.selector_div
).html(options_size);
var options_size = jQuery(
'select.learndash-binary-selector-items-right option',
self.selector_div
).length;
jQuery(
'.learndash-binary-selector-legend-right span.items-total-count',
self.selector_div
).html(options_size);
};
this.handle_pager = function (clicked_el) {
var section_el = self.get_section_el(clicked_el);
if (typeof section_el === 'undefined') {
return;
}
var selector_html_id = jQuery(self.selector_div).attr('id');
if (typeof selector_html_id === 'undefined') {
return;
}
var section_pager_el = jQuery(clicked_el).parents(
'ul.learndash-binary-selector-pager'
);
if (typeof section_pager_el === 'undefined') {
return;
}
var query_data = {};
if (typeof self.selector_data.query_vars === 'undefined') {
return;
}
query_data.query_vars = self.selector_data.query_vars;
if (typeof self.selector_data.selector_class === 'undefined') {
return;
}
query_data.selector_class = self.selector_data.selector_class;
query_data.selector_nonce = self.selector_data.selector_nonce;
query_data.selector_html_id = selector_html_id;
if (
jQuery(section_pager_el).hasClass(
'learndash-binary-selector-pager-left'
)
) {
var position = 'left';
} else if (
jQuery(section_pager_el).hasClass(
'learndash-binary-selector-pager-right'
)
) {
var position = 'right';
}
if (typeof position === 'undefined') {
return;
}
query_data.position = position;
if (typeof self.selector_data[position] === 'undefined') {
return;
}
if (typeof self.selector_data[position].pager === 'undefined') {
return;
}
var selector_pager = self.selector_data[position].pager;
if (
jQuery(clicked_el).hasClass('learndash-binary-selector-pager-prev')
) {
if (selector_pager.current_page == 1) {
return;
}
query_data.query_vars.paged =
parseInt(selector_pager.current_page) - 1;
} else if (
jQuery(clicked_el).hasClass('learndash-binary-selector-pager-next')
) {
if (
parseInt(selector_pager.current_page) ==
parseInt(selector_pager.total_pages)
) {
return;
}
query_data.query_vars.paged =
parseInt(selector_pager.current_page) + 1;
}
query_data.selected_ids = self.get_selector_form_element(true);
var post_data = {
action: 'learndash_binary_selector_pager',
nonce: self.nonce,
query_data: query_data,
};
jQuery.ajax({
type: 'POST',
url: ajaxurl,
dataType: 'json',
cache: false,
data: post_data,
error: function (jqXHR, textStatus, errorThrown) {
//console.log('init: error HTTP Status['+jqXHR.status+'] '+errorThrown);
},
success: function (reply_data) {
if (typeof reply_data.html_options !== 'undefined') {
jQuery('.learndash-binary-selector-items', section_el)
.empty()
.append(reply_data.html_options);
}
if (typeof reply_data['query-vars'] !== 'undefined') {
self.selector_data[position]['query-vars'] =
reply_data['query-vars'];
}
if (typeof reply_data.pager !== 'undefined') {
self.selector_data[position].pager = reply_data.pager;
self.update_pager(
section_pager_el,
self.selector_data[position].pager
);
self.update_legend();
}
},
});
};
this.update_pager = function (section_pager_el, section_pager_data) {
if (typeof section_pager_el !== 'undefined') {
if (typeof section_pager_data.current_page !== 'undefined') {
var current_page = parseInt(section_pager_data.current_page);
} else {
var current_page = 0;
}
if (typeof section_pager_data.total_pages !== 'undefined') {
var total_pages = parseInt(section_pager_data.total_pages);
} else {
var total_pages = 0;
}
if (typeof section_pager_data.total_items !== 'undefined') {
var total_items = parseInt(section_pager_data.total_items);
} else {
var total_items = 0;
}
if (current_page >= 1 && total_pages >= 1) {
jQuery(
'.learndash-binary-selector-pager-info span.current_page',
section_pager_el
).html(current_page);
jQuery(
'.learndash-binary-selector-pager-info span.current_page',
section_pager_el
).show();
jQuery(
'.learndash-binary-selector-pager-info span.total_pages',
section_pager_el
).html(total_pages);
jQuery(
'.learndash-binary-selector-pager-info span.total_pages',
section_pager_el
).show();
jQuery(
'.learndash-binary-selector-pager-info span.total_items span.total_items_count',
section_pager_el
).html(total_items);
jQuery(
'.learndash-binary-selector-pager-info span.total_items',
section_pager_el
).show();
jQuery(
'.learndash-binary-selector-pager-info',
section_pager_el
).show();
if (current_page == 1) {
jQuery(
'.learndash-binary-selector-pager-prev a',
section_pager_el
).hide();
} else {
jQuery(
'.learndash-binary-selector-pager-prev a',
section_pager_el
).show();
}
if (current_page == total_pages) {
jQuery(
'.learndash-binary-selector-pager-next a',
section_pager_el
).hide();
} else {
jQuery(
'.learndash-binary-selector-pager-next a',
section_pager_el
).show();
}
} else {
jQuery(
'.learndash-binary-selector-pager-info span.current_page',
section_pager_el
).hide();
jQuery(
'.learndash-binary-selector-pager-info span.total_pages',
section_pager_el
).hide();
jQuery(
'.learndash-binary-selector-pager-prev a',
section_pager_el
).hide();
jQuery(
'.learndash-binary-selector-pager-next a',
section_pager_el
).hide();
}
}
};
this.init_lazy_load = function () {
//if (jQuery(self.selector_div).hasClass('learndash_lazy_load') ) {
// self.lazy_load_items();
//}
};
this.get_left_items_changed = function () {
const itemsChanged = [];
if (
jQuery('.learndash-binary-selector-items-left', self.selector_div)
.length &&
jQuery('.learndash-binary-selector-items-right', self.selector_div)
.length
) {
jQuery(
'.learndash-binary-selector-items-left option:selected',
self.selector_div
).each(function () {
const optionLeftEl = jQuery(this);
if (
!optionLeftEl.hasClass(
'learndash-binary-selector-item-disabled'
)
) {
const dataId = jQuery(optionLeftEl).attr('data-value');
if (dataId !== '') {
itemsChanged.push(dataId);
}
}
});
}
return itemsChanged;
};
this.update_selected_items_ui = function () {
if (
jQuery('.learndash-binary-selector-items-left', self.selector_div)
.length &&
jQuery('.learndash-binary-selector-items-right', self.selector_div)
.length
) {
jQuery(
'.learndash-binary-selector-items-left option:selected',
self.selector_div
).each(function () {
const optionLeftEl = jQuery(this);
if (
!optionLeftEl.hasClass(
'learndash-binary-selector-item-disabled'
)
) {
jQuery(optionLeftEl, self.selector_div).removeClass(
'learndash-binary-selector-item-selected'
);
jQuery(optionLeftEl, self.selector_div)
.clone()
.appendTo(
jQuery(
'.learndash-binary-selector-items-right',
self.selector_div
)
);
jQuery(optionLeftEl, self.selector_div).addClass(
'learndash-binary-selector-item-disabled'
);
jQuery(optionLeftEl, self.selector_div).prop(
'selected',
false
);
jQuery(optionLeftEl, self.selector_div).prop(
'disabled',
true
);
}
});
}
};
this.add_selected_items = function (e) {
e.preventDefault();
const itemsChanged = self.get_left_items_changed();
if (
self.get_selector_data().server_side_validation_enabled &&
itemsChanged.length > 0
) {
// Make a validation call and if all good, add the items.
jQuery.ajax({
type: 'POST',
url: ajaxurl,
dataType: 'json',
cache: false,
data: {
action: 'learndash_binary_selector_validator',
nonce: self.nonce,
selector_data: self.get_selector_data(),
items_added: itemsChanged,
selected_ids: self.get_selector_form_element(true),
},
error(jqXHR, textStatus, errorThrown) {
// eslint-disable-next-line no-console
console.log(
'learndash-binary-selector-validation -> error HTTP Status[' +
jqXHR.status +
'] ' +
errorThrown
);
// eslint-disable-next-line no-console
console.log(
'learndash-binary-selector-validation -> error detail: %o',
textStatus
);
},
success(response) {
if (!response.success) {
// eslint-disable-next-line no-console
console.log(
'learndash-binary-selector-validation -> error detail: %o',
response
);
return;
}
if (response.data.is_valid) {
if (
wp.data &&
wp.data.dispatch &&
wp.data.dispatch('core/notices')
) {
wp.data
.dispatch('core/notices')
.removeNotice(
self.get_selector_data()
.server_side_validation_field_id
);
}
self.update_selected_items_ui();
self.update_selected_form_element('add', itemsChanged);
} else if (
wp.data &&
wp.data.dispatch &&
wp.data.dispatch('core/notices')
) {
wp.data
.dispatch('core/notices')
.createNotice(
'error',
response.data.error.message,
{
isDismissible: true,
id: self.get_selector_data()
.server_side_validation_field_id,
actions: response.data.error.actions,
}
);
} else {
// eslint-disable-next-line no-alert
alert(response.data.error.message);
}
},
});
} else {
// Just do it without any validation.
self.update_selected_items_ui();
self.update_selected_form_element('add', itemsChanged);
}
};
this.remove_selected_items = function (e) {
e.preventDefault();
var items_changed = [];
if (
jQuery('.learndash-binary-selector-items-left', self.selector_div)
.length &&
jQuery('.learndash-binary-selector-items-right', self.selector_div)
.length
) {
jQuery(
'.learndash-binary-selector-items-right option:selected',
self.selector_div
).each(function () {
var option_right_el = jQuery(this);
var data_id = jQuery(option_right_el).attr('data-value');
if (data_id != '') {
items_changed.push(data_id);
}
if (
jQuery(
'.learndash-binary-selector-items-left option[data-value="' +
data_id +
'"]',
self.selector_div
).length
) {
jQuery(
'.learndash-binary-selector-items-left option[data-value="' +
data_id +
'"]',
self.selector_div
).removeClass('learndash-binary-selector-item-disabled');
jQuery(
'.learndash-binary-selector-items-left option[data-value="' +
data_id +
'"]',
self.selector_div
).removeClass('learndash-binary-selector-item-selected');
jQuery(
'.learndash-binary-selector-items-left option[data-value="' +
data_id +
'"]',
self.selector_div
).prop('disabled', false);
}
jQuery(option_right_el).remove();
});
}
if (wp.data && wp.data.dispatch && wp.data.dispatch('core/notices')) {
wp.data
.dispatch('core/notices')
.removeNotice(
self.get_selector_data().server_side_validation_field_id
);
}
self.update_selected_form_element('remove', items_changed);
};
this.get_section_el = function (child_el) {
if (typeof child_el !== 'undefined') {
return jQuery(child_el).parents(
'.learndash-binary-selector-section'
);
}
};
// We update our internal selector form element.
// action is 'add' or 'remove'.
// changed_ids is array of items to add or remove.
this.update_selected_form_element = function (action, changed_ids) {
if (changed_ids.length) {
if (action == 'add') {
jQuery.each(changed_ids, function (index, item) {
var item_val = parseInt(item);
if (jQuery.inArray(item_val, self.selected_items) == -1) {
self.selected_items.push(item_val);
}
});
self.save_selector_form_element();
} else if (action == 'remove') {
jQuery.each(changed_ids, function (index, item) {
var item_val = parseInt(item);
var item_pos = jQuery.inArray(
item_val,
self.selected_items
);
if (item_pos !== -1) {
self.selected_items.splice(item_pos, 1);
}
});
self.save_selector_form_element();
}
}
};
this.get_selector_form_element = function (return_raw) {
if (typeof return_raw === 'undefined') {
return_raw = false;
}
var selected_items = jQuery(
'input.learndash-binary-selector-form-element',
self.selector_div
).val();
if (return_raw == false) {
self.selected_items = JSON.parse(selected_items);
// The returned 'type' from JSON.parse() is an object. We want to convert this to an array to better manage adding, removing items
self.selected_items = jQuery.map(
self.selected_items,
function (el) {
return parseInt(el);
}
);
return self.selected_items;
}
return selected_items;
};
this.save_selector_form_element = function () {
jQuery(
'input.learndash-binary-selector-form-element',
self.selector_div
).val(JSON.stringify(self.selected_items));
jQuery(
'input.learndash-binary-selector-form-changed',
self.selector_div
).val('1');
};
this.sort_right_options = function () {
// For now no sorting. Just append to the bottom.
/*
var options = jQuery('.learndash-binary-selector-items-right li', self.selector_div);
var arr = options.map(function(_, o) { return { t: jQuery(o).text(), v: o.value }; }).get();
arr.sort(function(o1, o2) { return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0; });
options.each(function(i, o) {
o.value = arr[i].v;
jQuery(o).text(arr[i].t);
});
*/
};
this.get_selector_data = function (force_reload) {
if (typeof force_reload === 'undefined') {
force_reload = false;
}
if (self.selector_data_loaded != true || force_reload === true) {
self.selector_data_loaded = true;
element_data = jQuery(self.selector_div).attr('data');
if (typeof element_data === 'undefined') {
return;
}
self.selector_data = JSON.parse(element_data);
}
return self.selector_data;
};
this.get_selector_data_element = function (element_key) {
var selector_data = self.get_selector_data();
if (
typeof selector_data !== 'undefined' &&
typeof element_key !== 'undefined' &&
typeof selector_data[element_key] !== 'undefined'
) {
return selector_data[element_key];
}
};
this.set_selector_data_element = function (element_key, element_value) {
self.get_selector_data();
this.selector_data[element_key] = element_value;
};
this.update_selector_data = function (query_data) {
jQuery(self.selector_div).attr('data', JSON.stringify(query_data));
this.selector_data = query_data;
};
this.lazy_load_items = function (query_data) {
if (typeof query_data === 'undefined') {
query_data = self.get_selector_data();
}
if (typeof query_data.query_vars.paged === 'undefined') {
query_data.query_vars.paged = 0;
}
query_data.query_vars.paged = parseInt(query_data.query_vars.paged) + 1;
var post_data = {
action: 'learndash_binary_selector_lazy_loader',
nonce: self.nonce,
'query-data': query_data,
};
jQuery.ajax({
type: 'POST',
url: ajaxurl,
dataType: 'json',
cache: false,
data: post_data,
error: function (jqXHR, textStatus, errorThrown) {
//console.log('init: error HTTP Status['+jqXHR.status+'] '+errorThrown);
//console.log('error [%o]', textStatus);
},
success: function (reply_data) {
if (typeof reply_data !== 'undefined') {
if (typeof reply_data.html_options !== 'undefined') {
if (reply_data.html_options != '') {
jQuery(
'select.learndash-binary-selector-items-left',
self.selector_div
).append(reply_data.html_options);
// Delete the received html_options...
delete reply_data.html_options;
//this.set_selector_data_element()//reply_data
self.update_selector_data(reply_data);
self.update_legend();
// ...as we are going to loop to ourself and regenerate
self.lazy_load_items(reply_data);
} else {
// We then update the load element data attribute
self.update_selector_data(reply_data);
self.set_selected_items();
}
}
}
},
});
};
this.set_selected_items = function () {
self.get_selector_form_element();
// We clear out all the options on the right side because we are about to re-add them after the lazy load
jQuery(
'select.learndash-binary-selector-items-right',
self.selector_div
).empty();
// We also reset all the items on the left side with default states as we are going to loop over the hidden input and re-add them.
jQuery(
'select.learndash-binary-selector-items-left > option.learndash-binary-selector-item ',
self.selector_div
).removeClass('learndash-binary-selector-item-disabled');
jQuery(
'select.learndash-binary-selector-items-left > option.learndash-binary-selector-item ',
self.selector_div
).prop('selected', false);
jQuery(
'select.learndash-binary-selector-items-left > option.learndash-binary-selector-item ',
self.selector_div
).prop('disabled', false);
jQuery.each(self.selected_items, function (index, item) {
jQuery(
'.learndash-binary-selector-items-left option.learndash-binary-selector-item[value="' +
item +
'"]',
self.selector_div
).each(function () {
var option_left_el = jQuery(this);
jQuery(option_left_el, self.selector_div)
.clone()
.appendTo(
jQuery(
'.learndash-binary-selector-items-right',
self.selector_div
)
);
jQuery(option_left_el, self.selector_div).addClass(
'learndash-binary-selector-item-disabled'
);
jQuery(option_left_el, self.selector_div).prop(
'selected',
false
);
jQuery(option_left_el, self.selector_div).prop(
'disabled',
true
);
});
});
self.update_legend();
};
}
jQuery.expr[':'].Contains = jQuery.expr.createPseudo(function (arg) {
return function (elem) {
return (
jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0
);
};
});