74 lines
2.6 KiB
JavaScript
74 lines
2.6 KiB
JavaScript
var DjangoSelect2 = window.DjangoSelect2 || {};
|
|
|
|
(function() {
|
|
var $ = DjangoSelect2.jQuery;
|
|
if (!$) {
|
|
$ = DjangoSelect2.jQuery = (window.django || {}).jQuery || window.jQuery;
|
|
}
|
|
|
|
DjangoSelect2.init = function(input) {
|
|
var $input = $(input);
|
|
var ajaxOptions = {
|
|
ajax: {
|
|
data: function(term, page) {
|
|
return {
|
|
q: term,
|
|
page: page,
|
|
page_limit: 10
|
|
};
|
|
},
|
|
results: function(data, page) {
|
|
return data;
|
|
}
|
|
},
|
|
initSelection: function (element, callback) {
|
|
var inputVal = $input.val();
|
|
if (!inputVal) {
|
|
return;
|
|
}
|
|
var data = {
|
|
q: inputVal
|
|
};
|
|
var select2 = $input.data('select2') || {};
|
|
if (typeof select2.opts == 'object' && select2.opts !== null) {
|
|
data.multiple = (select2.opts.multiple) ? 1 : 0;
|
|
}
|
|
$.ajax({
|
|
url: $input.data('initSelectionUrl'),
|
|
dataType: 'json',
|
|
data: data,
|
|
success: function(data) {
|
|
if (typeof(data) == 'object' && typeof(data.results) == 'object' && data.results) {
|
|
callback(data.results);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
var options = $input.data('select2Options') || {};
|
|
if (typeof options.ajax == 'object') {
|
|
options = $.extend(true, ajaxOptions, options);
|
|
}
|
|
$input.select2(options);
|
|
if ($input.data('sortable') && typeof $.fn.djs2sortable == 'function') {
|
|
$input.select2("container").find("ul.select2-choices").djs2sortable({
|
|
containment: 'parent',
|
|
start: function() { $input.select2("onSortStart"); },
|
|
update: function() { $input.select2("onSortEnd"); }
|
|
});
|
|
}
|
|
$input.data('select2').selection.addClass('vTextField');
|
|
};
|
|
|
|
$(document).ready(function() {
|
|
$('.django-select2:not([name*="__prefix__"])').each(function() {
|
|
DjangoSelect2.init(this);
|
|
});
|
|
$(document).on('formset:added', function(event, $form) {
|
|
$form.find('.django-select2:not([name*="__prefix__"])').each(function() {
|
|
DjangoSelect2.init(this);
|
|
});
|
|
});
|
|
});
|
|
})();
|