sangue/django/static/admin/js/autocomplete.js

70 lines
3.0 KiB
JavaScript

'use strict';
{
const $ = django.jQuery;
$.fn.djangoAdminSelect2 = function() {
$.each(this, function(i, element) {
$(element).select2({
ajax: {
data: (params)=>{
var out = {
term: params.term,
page: params.page,
app_label: element.dataset.appLabel,
model_name: element.dataset.modelName,
field_name: element.dataset.fieldName
};
if (element.dataset.hasOwnProperty('linkedfields')) {
var linkedfields = JSON.parse(element.dataset.linkedfields)
var linkedfields_obj = {};
var some_obj = false;
for (var i in linkedfields) {
if (linkedfields.hasOwnProperty(i)) {
var remote_field = linkedfields[i];
var remote_id = element.dataset.select2Id.split('-' + element.dataset.fieldName)[0] + '-' + remote_field;
var value = document.querySelectorAll('[data-select2-id=' + remote_id +'].admin-autocomplete')[0].value;
if (value !== '') {
//console.log(field + '=' + value);
linkedfields_obj[remote_field] = value;
some_obj = true;
}
}
}
if (some_obj) {
out['linkedfields'] = JSON.stringify(linkedfields_obj);
}
}
return out
}
},
templateResult: (item,container)=>{
var styleClass = '';
if (element.dataset.hasOwnProperty('linkedfields')) {
element.classList.add('drilldown');
if (item.ddok === 1) {
styleClass = 'drilldown_ok';
} else {
styleClass = 'drilldown_ko';
}
container.classList.add(styleClass);
}
return $('<span class="' + styleClass + '"></span>').text(item.text);
}
});
});
return this;
}
;
$(function() {
// Initialize all autocomplete widgets except the one in the template
// form used when a new formset is added.
$('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2();
});
document.addEventListener('formset:added', (event)=>{
$(event.target).find('.admin-autocomplete').djangoAdminSelect2();
}
);
}