jQuery(document).ready(function($){
wdk_select_init();
/* elementor popup */
jQuery( document ).on( 'elementor/popup/show', () => {
$('.select2-hidden-accessible', '.elementor-popup-modal').each(function () {
$(this).removeClass('select2-hidden-accessible').next('.select2').remove();
});
wdk_select_init('.elementor-popup-modal');
} );
});
const wdk_select_init = ($wrapper = 'body') => {
var $ = jQuery;
/* Start select2
* Site https://select2.org/
*/
if (typeof $.fn.select2 == 'function') {
//Set Dropdown with SearchBox via dropdownAdapter option (https://stackoverflow.com/questions/35799854/how-to-add-selectall-using-dropdownadapter-on-select2-v4)
var Utils = $.fn.select2.amd.require('select2/utils');
var Dropdown = $.fn.select2.amd.require('select2/dropdown');
var DropdownSearch = $.fn.select2.amd.require('select2/dropdown/search');
var CloseOnSelect = $.fn.select2.amd.require('select2/dropdown/closeOnSelect');
var AttachBody = $.fn.select2.amd.require('select2/dropdown/attachBody');
var dropdownAdapter = Utils.Decorate(Utils.Decorate(Utils.Decorate(Dropdown, DropdownSearch), CloseOnSelect), AttachBody);
$('.select_ajax', $wrapper).each(function () {
var self = $(this);
let ajax_url = $(this).attr('data-ajax');
var data = {
"action": 'wdk_public_action',
"page": 'wdk_frontendajax',
"function": 'select_2_ajax',
};
if(self.hasClass('select2-hidden-accessible')) return true;
var $select = $(this).select2({
language: {
errorLoading: function () {
return wdk_select2_script_parameters.text.errorLoading;
},
loadingMore: function () {
return wdk_select2_script_parameters.text.loadingMore;
},
noResults: function () {
return wdk_select2_script_parameters.text.noResults;
},
searching: function () {
return wdk_select2_script_parameters.text.searching;
},
removeAllItems: function () {
return wdk_select2_script_parameters.text.removeAllItems;
}
},
placeholder: $(this).attr('data-placeholder') || '',
maximumSelectionLength: parseInt($(this).attr('data-limit')) || 10,
dropdownAdapter: dropdownAdapter,
minimumResultsForSearch: 1,
ajax: {
url: ajax_url,
dataType: 'json',
data: data,
type: "POST",
quietMillis: 10,
data: function (term, page) { // page is the one-based page number tracked by Select2
return {
q: term, //search term
"page_result": term.page || 1,
"action": 'wdk_public_action',
"page": 'wdk_frontendajax',
"function": 'select_2_ajax',
"table": $(this).attr('data-table') || '',
};
},
results: function (data, page) {
var more = (page * 30) < data.total_count; // whether or not there are more results available
// notice we return the value of more so Select2 knows if more results can be loaded
return { results: data.items, more: more };
}
},
templateResult: wdk_select_ajax_formatRepo,
templateSelection: wdk_select_ajax_templateSelection
});
$select.data('select2').$dropdown.addClass('select_multi_dropdown_tree');
}).on('select2:open', function (e) {
// Do something
$('.select_ajax').find('option[value=""]').remove();
});
$('.select_ajax_user', $wrapper).each(function () {
var self = $(this);
let ajax_url = $(this).attr('data-ajax');
var data = {
"action": 'wdk_public_action',
"page": 'wdk_frontendajax',
"function": 'select_2_ajax_user',
};
if(self.hasClass('select2-hidden-accessible')) return true;
var $select = $(this).select2({
multiple: true,
placeholder: $(this).attr('data-placeholder') || '',
maximumSelectionLength: 10,
dropdownAdapter: dropdownAdapter,
minimumResultsForSearch: 1,
ajax: {
url: ajax_url,
dataType: 'json',
data: data,
type: "POST",
quietMillis: 10,
data: function (term, page) { // page is the one-based page number tracked by Select2
return {
q: term, //search term
"page_result": term.page || 1,
"action": 'wdk_public_action',
"page": 'wdk_frontendajax',
"function": 'select_2_ajax_user',
};
},
results: function (data, page) {
var more = (page * 30) < data.total_count; // whether or not there are more results available
// notice we return the value of more so Select2 knows if more results can be loaded
return { results: data.items, more: more };
}
},
templateResult: wdk_select_ajax_formatRepo,
templateSelection: wdk_select_ajax_templateSelection
}).on('select2:opening select2:closing', function (event) {
//Disable original search (https://select2.org/searching#multi-select)
var searchfield = $(this).parent().find('.select2-search__field');
searchfield.prop('disabled', true);
});
$select.data('select2').$dropdown.addClass('select_multi_dropdown_users');
});
$('.select_multi', $wrapper).each(function () {
var self = $(this);
if(self.hasClass('select2-hidden-accessible')) return true;
var $select = $(this).select2({
closeOnSelect:false,
placeholder: $(this).attr('data-placeholder') || '',
maximumSelectionLength: parseInt($(this).attr('data-limit')) || 10,
dropdownAdapter: dropdownAdapter,
minimumResultsForSearch: 1,
maximumSelectionLength: +($(this).attr('data-maxselectlimit')) || 10,
templateResult: wdk_select_ajax_formatRepo,
templateSelection: wdk_select_ajax_templateSelection
});
$select.data('select2').$dropdown.addClass('select_multi_dropdown');
});
}
function wdk_select_ajax_formatRepo (repo) {
if (repo.loading) {
return repo.text;
}
var $container = $(
""+repo.text+""
);
return $container;
}
function wdk_select_ajax_templateSelection (repo) {
if (repo.loading) {
return repo.text;
}
var $container = $(
""+repo.text+""
);
return $container;
}
}