diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-04-23 15:55:21 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-06-12 08:43:58 +0200 |
commit | 0dc228019b280412e6676b08c2c17897ab4749d1 (patch) | |
tree | 7a32a62454058ebe7fefdda727a2e0759119188e | |
parent | f06e226cc66c99cdc4c42b8241bb2b367be7d4cd (diff) | |
download | Ishtar-0dc228019b280412e6676b08c2c17897ab4749d1.tar.bz2 Ishtar-0dc228019b280412e6676b08c2c17897ab4749d1.zip |
Rollback: ajax select overload
-rw-r--r-- | ishtar_common/static/ajax_select/js/ajax_select.js | 250 |
1 files changed, 0 insertions, 250 deletions
diff --git a/ishtar_common/static/ajax_select/js/ajax_select.js b/ishtar_common/static/ajax_select/js/ajax_select.js deleted file mode 100644 index dc8fdc6e4..000000000 --- a/ishtar_common/static/ajax_select/js/ajax_select.js +++ /dev/null @@ -1,250 +0,0 @@ -// overload ajax select JS with a new version to fix deployment issue - -(function() { - - var $ = window.jQuery; - - $.fn.autocompleteselect = function(options) { - return this.each(function() { - var id = this.id, - $this = $(this), - $text = $('#' + id + '_text'), - $deck = $('#' + id + '_on_deck'); - - function receiveResult(event, ui) { - if ($this.val()) { - kill(); - } - $this.val(ui.item.pk); - $text.val(''); - addKiller(ui.item.repr, ui.item.pk); - $deck.trigger('added', [ui.item.pk, ui.item]); - $this.trigger('change'); - - return false; - } - - function addKiller(repr, pk) { - var killId = 'kill_' + pk + id, - killButton = '<span class="ui-icon ui-icon-trash" id="' + killId + '">X</span> '; - if (repr) { - $deck.empty(); - $deck.append('<div>' + killButton + repr + '</div>'); - } else { - $('#' + id + '_on_deck > div').prepend(killButton); - } - $('#' + killId).click(function() { - kill(); - $deck.trigger('killed', [pk]); - }); - } - - function kill() { - $this.val(''); - $deck.children().fadeOut(1.0).remove(); - } - - options.select = receiveResult; - $text.autocomplete(options); - - function reset() { - if (options.initial) { - addKiller(options.initial[0], options.initial[1]); - $this.val(options.initial[1]); - } else { - kill(); - } - } - - if (!$this.attr('data-changed')) { - reset(); - $this.attr('data-changed', true); - } - - $this.closest('form').on('reset', reset); - - $this.bind('didAddPopup', function(event, pk, repr) { - receiveResult(null, {item: {pk: pk, repr: repr}}); - }); - }); - }; - - $.fn.autocompleteselectmultiple = function(options) { - return this.each(function() { - var id = this.id, - $this = $(this), - $text = $('#' + id + '_text'), - $deck = $('#' + id + '_on_deck'); - - function receiveResult(event, ui) { - var pk = ui.item.pk, - prev = $this.val(); - - if (prev.indexOf('|' + pk + '|') === -1) { - $this.val((prev ? prev : '|') + pk + '|'); - addKiller(ui.item.repr, pk); - $text.val(''); - $deck.trigger('added', [ui.item.pk, ui.item]); - $this.trigger('change'); - } - return false; - } - - function addKiller(repr, pk) { - var killId = 'kill_' + pk + id, - killButton = '<span class="ui-icon ui-icon-trash" id="' + killId + '">X</span> '; - $deck.append('<div id="' + id + '_on_deck_' + pk + '">' + killButton + repr + ' </div>'); - - $('#' + killId).click(function() { - kill(pk); - $deck.trigger('killed', [pk]); - }); - } - - function kill(pk) { - $this.val($this.val().replace('|' + pk + '|', '|')); - $('#' + id + '_on_deck_' + pk).fadeOut().remove(); - } - - options.select = receiveResult; - $text.autocomplete(options); - - function reset() { - $deck.empty(); - var query = '|'; - if (options.initial) { - $.each(options.initial, function(i, its) { - addKiller(its[0], its[1]); - query += its[1] + '|'; - }); - } - $this.val(query); - } - - if (!$this.attr('data-changed')) { - reset(); - $this.attr('data-changed', true); - } - - $this.closest('form').on('reset', reset); - - $this.bind('didAddPopup', function(event, pk, repr) { - receiveResult(null, {item: {pk: pk, repr: repr}}); - }); - }); - }; - - function addAutoComplete (inp, callback) { - var $inp = $(inp), - opts = JSON.parse($inp.attr('data-plugin-options')); - // Do not activate empty-form inline rows. - // These are cloned into the form when adding another row and will be activated at that time. - if ($inp.attr('id').indexOf('__prefix__') !== -1) { - // console.log('skipping __prefix__ row', $inp); - return; - } - if ($inp.data('_ajax_select_inited_')) { - // console.log('skipping already activated row', $inp); - return; - } - // console.log('activating', $inp); - callback($inp, opts); - $inp.data('_ajax_select_inited_', true); - } - - // allow html in the results menu - // https://github.com/scottgonzalez/jquery-ui-extensions - var proto = $.ui.autocomplete.prototype, - initSource = proto._initSource; - - function filter(array, term) { - var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), 'i'); - return $.grep(array, function(value) { - return matcher.test($('<div>').html(value.label || value.value || value).text()); - }); - } - - $.extend(proto, { - _initSource: function() { - if (this.options.html && $.isArray(this.options.source)) { - this.source = function(request, response) { - response(filter(this.options.source, request.term)); - }; - } else { - initSource.call(this); - } - }, - _renderItem: function(ul, item) { - var body = this.options.html ? item.match: item.label; - return $('<li></li>') - .data('item.autocomplete', item) - .append($('<a></a>')[this.options.html ? 'html' : 'text' ](body)) - .appendTo(ul); - } - }); - - /* Called by the popup create object when it closes. - * For the popup this is opener.dismissAddRelatedObjectPopup - * Django implements this in RelatedObjectLookups.js - * In django >= 1.10 we can rely on input.trigger('change') - * and avoid this hijacking. - */ - var djangoDismissAddRelatedObjectPopup = window.dismissAddRelatedObjectPopup || window.dismissAddAnotherPopup; - window.dismissAddRelatedObjectPopup = function(win, newId, newRepr) { - // Iff this is an ajax-select input then close the window and - // trigger didAddPopup - var name = window.windowname_to_id(win.name); - var input = $('#' + name); - if (input.data('ajax-select')) { - win.close(); - // newRepr is django's repr of object - // not the Lookup's formatting of it. - input.trigger('didAddPopup', [newId, newRepr]); - } else { - // Call the normal django set and close function. - djangoDismissAddRelatedObjectPopup(win, newId, newRepr); - } - } - // Django renamed this function in 1.8 - window.dismissAddAnotherPopup = window.dismissAddRelatedObjectPopup; - - // activate any on page - $(window).bind('init-autocomplete', function() { - - $('input[data-ajax-select=autocomplete]').each(function(i, inp) { - addAutoComplete(inp, function($inp, opts) { - opts.select = - function(event, ui) { - $inp.val(ui.item.value).trigger('added', [ui.item.pk, ui.item]); - return false; - }; - $inp.autocomplete(opts); - }); - }); - - $('input[data-ajax-select=autocompleteselect]').each(function(i, inp) { - addAutoComplete(inp, function($inp, opts) { - $inp.autocompleteselect(opts); - }); - }); - - $('input[data-ajax-select=autocompleteselectmultiple]').each(function(i, inp) { - addAutoComplete(inp, function($inp, opts) { - $inp.autocompleteselectmultiple(opts); - }); - }); - - }); - - $(document).ready(function() { - // if dynamically injecting forms onto a page - // you can trigger them to be ajax-selects-ified: - $(window).trigger('init-autocomplete'); - // When adding new rows in inline forms, reinitialize and activate newly added rows. - $(document) - .on('click', '.inline-group ul.tools a.add, .inline-group div.add-row a, .inline-group .tabular tr.add-row td a', function() { - $(window).trigger('init-autocomplete'); - }); - }); - -})(); |