'use strict'; { const $ = django.jQuery; $.fn.djangoAdminSelect2 = function() { $.each(this, function(i, element) { var select2_config = {}; select2_config.ajax = { data: (params)=>{ var field_name = element.dataset.fieldName var out = { term: params.term, page: params.page, app_label: element.dataset.appLabel, model_name: element.dataset.modelName, field_name: field_name }; if (element.dataset.hasOwnProperty('drilldown_enabled')) { out.drilldown = 1; 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 field_id = element.dataset.select2Id; var remote_id = field_id.slice(0, field_id.length - field_name.length) + remote_field; var value = document.querySelectorAll('[data-select2-id=' + remote_id + '].admin-autocomplete')[0].value; if (value !== '') { linkedfields_obj[remote_field] = value; some_obj = true; } } } if (some_obj) { out['linkedfields'] = JSON.stringify(linkedfields_obj); } } } return out } }; if (element.dataset.hasOwnProperty('drilldown_enabled')) { select2_config.templateResult = (item,container)=>{ var styleClass = ''; element.classList.add('drilldown'); if (item.ddok === 1) { styleClass = 'drilldown_ok'; } else { styleClass = 'drilldown_ko'; } container.classList.add(styleClass); if (item.hasOwnProperty('autoselect')) { if ((element.dataset.included_only ?? false) || $(element).select2('data').length == 0) { $(element).select2("trigger", "select", { data: item }) } } return $('').text(item.text); } } $(element).select2(select2_config); if (element.dataset.hasOwnProperty('reset_on_excluded')) { $(element).on('select2:select', ev=>{ var data = $(element).select2('data'); if (Array.isArray(data) && data.length > 0) { var ddok = data[0].ddok; if (!(ddok ?? true)) { var reset_on_excluded = JSON.parse(element.dataset.reset_on_excluded); for (var i in reset_on_excluded) { if (reset_on_excluded.hasOwnProperty(i)) { var field_name = element.dataset.fieldName var remote_field = reset_on_excluded[i]; var field_id = element.dataset.select2Id; var remote_id = field_id.slice(0, field_id.length - field_name.length) + remote_field; var remote_element = document.querySelectorAll('[data-select2-id=' + remote_id + '].admin-autocomplete')[0]; $(remote_element).val(null).trigger("change"); } } } } } ); } }); 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(); } ); }