Koha/koha-tmpl/intranet-tmpl/prog/js/select2.js
Martin Renvoize c5a4c193f4 Bug 29397: Add .kohaSelect select2 wrapper function
This patch adds a kohaSelect wrapper function to simplify
paging/infinite scrolling with select2 using the Koha RESTful api's.

Invoke select2 select boxes as you normally would from JS, but instead
of calling .select2(config) use .kohaSelect(config).

If an 'ajax' property is defined in your config object, we wrap the
transport such that responses include a pagination key as expected by
select2.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
2022-01-21 21:34:51 -10:00

89 lines
3 KiB
JavaScript

/* global __ */
$.fn.select2.defaults.set("allowClear", true);
$.fn.select2.defaults.set("placeholder", "");
$.fn.select2.defaults.set("width", "element" );
// Internationalization
$.fn.select2.defaults.set("language", {
errorLoading:function(){ return __("The results could not be loaded"); },
inputTooLong:function(args){
var n = args.input.length - args.maximum;
return __("Please delete %s character(s)").format(n);
},
inputTooShort:function(args){
var n = args.minimum - args.input.length;
return __("Please enter %s or more characters").format(n);
},
formatResult: function(item) {
return $('<div>', {title: item.element[0].title}).text(item.text);
},
loadingMore:function(){ return __("Loading more results…"); },
maximumSelected:function(args){
return __("You can only select %s item(s)").format(args.maximum);
},
noResults:function(){return __("No results found"); },
searching:function(){return __("Searching…"); },
removeAllItems:function(){return __("Remove all items"); },
removeItem:function(){return __("Remove item"); }
});
$(document).ready(function(){
$(".select2").select2();
$(".select2").on("select2:clear", function () {
$(this).on("select2:opening.cancelOpen", function (evt) {
evt.preventDefault();
$(this).off("select2:opening.cancelOpen");
});
});
});
function kohaSelect2Transport(params, success, failure) {
var read_headers = function (data, textStatus, jqXHR) {
var more = false;
var link = jqXHR.getResponseHeader('Link') || '';
if (link.search(/<([^>]+)>;\s*rel\s*=\s*['"]?next['"]?\s*(,|$)/i) > -1) {
more = true;
}
return {
results: data,
pagination: {
more: more
}
};
};
var $request = $.ajax(params);
$request.then(read_headers).then(success);
$request.fail(failure);
}
/* wrapper that nests paging information into the results object for use with koha REST apis */
(function($) {
$.fn.kohaSelect = function(config) {
if (config.hasOwnProperty('ajax')) {
config.ajax.transport = function(params, success, failure) {
var read_headers = function(data, textStatus, jqXHR) {
var more = false;
var link = jqXHR.getResponseHeader('Link') || '';
if (link.search(/<([^>]+)>;\s*rel\s*=\s*['"]?next['"]?\s*(,|$)/i) > -1) {
more = true;
}
return {
results: data,
pagination: {
more: more
}
};
};
var $request = $.ajax(params);
$request.then(read_headers).then(success);
$request.fail(failure);
};
}
$(this).select2(config);
};
})(jQuery);