| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- ;(function ($) {
- if (window.__dal__initListenerIsSet)
- return;
- $(document).on('autocompleteLightInitialize', '[data-autocomplete-light-function=select2]', function() {
- var element = $(this);
- // Templating helper
- function template(text, is_html) {
- if (is_html) {
- var $result = $('<span>');
- $result.html(text);
- return $result;
- } else {
- return text;
- }
- }
- function result_template(item) {
- var text = template(item.text,
- element.attr('data-html') !== undefined || element.attr('data-result-html') !== undefined
- );
- if (item.create_id) {
- return $('<span></span>').text(text).addClass('dal-create')
- } else {
- return text
- }
- }
- function selected_template(item) {
- if (item.selected_text !== undefined) {
- return template(item.selected_text,
- element.attr('data-html') !== undefined || element.attr('data-selected-html') !== undefined
- );
- } else {
- return result_template(item);
- }
- return
- }
- var ajax = null;
- if ($(this).attr('data-autocomplete-light-url')) {
- ajax = {
- url: $(this).attr('data-autocomplete-light-url'),
- dataType: 'json',
- delay: 250,
- data: function (params) {
- var data = {
- q: params.term, // search term
- page: params.page,
- create: element.attr('data-autocomplete-light-create') && !element.attr('data-tags'),
- forward: yl.getForwards(element)
- };
- return data;
- },
- processResults: function (data, page) {
- if (element.attr('data-tags')) {
- $.each(data.results, function(index, value) {
- value.id = value.text;
- });
- }
- return data;
- },
- cache: true
- };
- }
- $(this).select2({
- tokenSeparators: element.attr('data-tags') ? [','] : null,
- debug: true,
- containerCssClass: ':all:',
- placeholder: element.attr('data-placeholder') || '',
- language: element.attr('data-autocomplete-light-language'),
- minimumInputLength: element.attr('data-minimum-input-length') || 0,
- allowClear: ! $(this).is('[required]'),
- templateResult: result_template,
- templateSelection: selected_template,
- ajax: ajax,
- tags: Boolean(element.attr('data-tags')),
- });
- $(this).on('select2:selecting', function (e) {
- var data = e.params.args.data;
- if (data.create_id !== true)
- return;
- e.preventDefault();
- var select = $(this);
- $.ajax({
- url: $(this).attr('data-autocomplete-light-url'),
- type: 'POST',
- dataType: 'json',
- data: {
- text: data.id,
- forward: yl.getForwards($(this))
- },
- beforeSend: function(xhr, settings) {
- xhr.setRequestHeader("X-CSRFToken", document.csrftoken);
- },
- success: function(data, textStatus, jqXHR ) {
- select.append(
- $('<option>', {value: data.id, text: data.text, selected: true})
- );
- select.trigger('change');
- select.select2('close');
- }
- });
- });
- });
- window.__dal__initListenerIsSet = true;
- $('[data-autocomplete-light-function=select2]:not([id*="__prefix__"])').each(function() {
- window.__dal__initialize(this);
- });
- })(yl.jQuery);
|