diff --git a/django_select2/__init__.py b/django_select2/__init__.py index 6e129e1..5564c55 100644 --- a/django_select2/__init__.py +++ b/django_select2/__init__.py @@ -1,4 +1,4 @@ -__version__ = "2.0" +__version__ = "2.0.1" from django.conf import settings if settings.configured: diff --git a/django_select2/fields.py b/django_select2/fields.py index 05cda4c..db1131d 100644 --- a/django_select2/fields.py +++ b/django_select2/fields.py @@ -9,8 +9,8 @@ class AutoViewFieldMixin(object): if logger.isEnabledFor(logging.INFO): logger.info("Registering auto field: %s", name) - from .util import register_field - id_ = register_field(name, self) + from . import util + id_ = util.register_field(name, self) self.widget.field_id = id_ super(AutoViewFieldMixin, self).__init__(*args, **kwargs) diff --git a/django_select2/static/js/heavy_data.js b/django_select2/static/js/heavy_data.js index 1ae10e4..d49b98a 100644 --- a/django_select2/static/js/heavy_data.js +++ b/django_select2/static/js/heavy_data.js @@ -1,243 +1,246 @@ +if (!window['django_select2']) { + // This JS file can be included multiple times. So, as not to ovverwrite previous states, we run this only once. -var django_select2 = { - MULTISEPARATOR: String.fromCharCode(0), // We use this unprintable char as separator, since this can't be entered by user. - get_url_params: function (term, page, context) { - var field_id = $(this).data('field_id'), - res = { - 'term': term, - 'page': page, - 'context': context - }; - if (field_id) { - res['field_id'] = field_id; - } - return res; - }, - process_results: function (data, page, context) { - var results; - if (data.err && data.err.toLowerCase() === 'nil') { - results = { - 'results': data.results - }; - if (context) { - results['context'] = context; + var django_select2 = { + MULTISEPARATOR: String.fromCharCode(0), // We use this unprintable char as separator, since this can't be entered by user. + get_url_params: function (term, page, context) { + var field_id = $(this).data('field_id'), + res = { + 'term': term, + 'page': page, + 'context': context + }; + if (field_id) { + res['field_id'] = field_id; } - if (data.more === true || data.more === false) { - results['more'] = data.more; + return res; + }, + process_results: function (data, page, context) { + var results; + if (data.err && data.err.toLowerCase() === 'nil') { + results = { + 'results': data.results + }; + if (context) { + results['context'] = context; + } + if (data.more === true || data.more === false) { + results['more'] = data.more; + } + } else { + results = {'results':[]}; } - } else { - results = {'results':[]}; - } - if (results.results) { - $(this).data('results', results.results); - } else { - $(this).removeData('results'); - } - return results; - }, - setCookie: function (c_name, value) { - document.cookie = c_name + "=" + escape(value); - }, - getCookie: function (c_name) { - var i, x, y, ARRcookies = document.cookie.split(";"); - - for (i = 0; i < ARRcookies.length; i++) { - x = ARRcookies[i].substr(0,ARRcookies[i].indexOf("=")); - y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1); - x = x.replace(/^\s+|\s+$/g,""); - if (x == c_name) { - return unescape(y); + if (results.results) { + $(this).data('results', results.results); + } else { + $(this).removeData('results'); } - } - }, - delCookie: function (c_name, isStartsWithPattern) { - var i, x, ARRcookies; - - if (!isStartsWithPattern) { - document.cookie = c_name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'; - } else { - ARRcookies = document.cookie.split(";"); + return results; + }, + setCookie: function (c_name, value) { + document.cookie = c_name + "=" + escape(value); + }, + getCookie: function (c_name) { + var i, x, y, ARRcookies = document.cookie.split(";"); for (i = 0; i < ARRcookies.length; i++) { x = ARRcookies[i].substr(0,ARRcookies[i].indexOf("=")); + y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1); x = x.replace(/^\s+|\s+$/g,""); - if (x.indexOf(c_name) == 0) { - document.cookie = c_name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'; + if (x == c_name) { + return unescape(y); } } - } - }, - onValChange: function () { - var e = $(this), res, id = e.attr('id'); + }, + delCookie: function (c_name, isStartsWithPattern) { + var i, x, ARRcookies; - res = django_select2.getValText(e, false); - - if (res && res[1]) { - // Cookies are used to persist selection's text. This is needed - // when the form springs back if there is any validation failure. - $(res[0]).each(function (idx) { - django_select2.setCookie(id + '_heavy_val:' + idx, this); - django_select2.setCookie(id + '_heavy_txt:' + idx, res[1][idx]); - }); - } else { - django_select2.delCookie(id + '_heavy_val:', true); - django_select2.delCookie(id + '_heavy_txt:', true); - } - }, - prepareValText: function (vals, txts, isMultiple) { - var data = [] - $(vals).each(function (index) { - data.push({id: this, text: txts[index]}); - }); - if (isMultiple) { - return data; - } else { - if (data.length > 0) { - return data[0]; + if (!isStartsWithPattern) { + document.cookie = c_name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'; } else { - return null; - } - } - }, - getValText: function ($e, isGetFromCookieAllowed) { - var val = $e.select2('val'), res = $e.data('results'), txt = $e.txt(), isMultiple = !!$e.attr('multiple'), - f, id = $e.attr('id'); - if (val || val === 0) { // Means value is set. A numerical 0 is also a valid value. + ARRcookies = document.cookie.split(";"); - if (!isMultiple) { - val = [val]; - if (txt || txt === 0) { - txt = [txt]; + for (i = 0; i < ARRcookies.length; i++) { + x = ARRcookies[i].substr(0,ARRcookies[i].indexOf("=")); + x = x.replace(/^\s+|\s+$/g,""); + if (x.indexOf(c_name) == 0) { + document.cookie = c_name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'; + } } } + }, + onValChange: function () { + var e = $(this), res, id = e.attr('id'); - if (txt || txt === 0) { - return [val, txt]; - } - - f = $e.data('userGetValText'); - if (f) { - txt = f($e, val, isMultiple); - if (txt || txt === 0) { - return [val, txt]; - } - } + res = django_select2.getValText(e, false); - if (res) { - txt = []; - $(val).each(function (idx) { - var i, value = this; - - for (i in res) { - if (res[i].id == value) { - val[idx] = res[i].id; // To set it to correct data type. - txt.push(res[i].text); - } - } + if (res && res[1]) { + // Cookies are used to persist selection's text. This is needed + // when the form springs back if there is any validation failure. + $(res[0]).each(function (idx) { + django_select2.setCookie(id + '_heavy_val:' + idx, this); + django_select2.setCookie(id + '_heavy_txt:' + idx, res[1][idx]); }); - if (txt || txt === 0) { - return [val, txt]; - } + } else { + django_select2.delCookie(id + '_heavy_val:', true); + django_select2.delCookie(id + '_heavy_txt:', true); } - - if (isGetFromCookieAllowed) { - txt = []; - $(val).each(function (idx) { - var value = this, cookieVal; - - cookieVal = django_select2.getCookie(id + '_heavy_val:' + idx); - - if (cookieVal == value) { - txt.push(django_select2.getCookie(id + '_heavy_txt:' + idx)); - } - }); - if (txt || txt === 0) { - return [val, txt]; - } - } - - } - return null; - }, - onInit: function (e, callback) { - e = $(e); - var id = e.attr('id'), data = null, val = e.select2('val'); - - if (!val && val !== 0) { - val = e.data('initVal'); - } - - if (val || val === 0) { - // Value is set so need to get the text. - data = django_select2.getValText(e); - if (data && data[0]) { - data = django_select2.prepareValText(data[0], data[1], !!e.attr('multiple')); - } - } - if (!data) { - e.val(null); // Nulling out set value so as not to confuse users. - } - callback(data); // Change for 2.3.x - }, - onMultipleHiddenChange: function () { - var $e = $(this), valContainer = $e.data('valContainer'), name = $e.data('name'), vals = $e.val(); - valContainer.empty(); - if (vals) { - vals = vals.split(django_select2.MULTISEPARATOR); - $(vals).each(function () { - var inp = $('').appendTo(valContainer); - inp.attr('name', name); - inp.val(this); + }, + prepareValText: function (vals, txts, isMultiple) { + var data = [] + $(vals).each(function (index) { + data.push({id: this, text: txts[index]}); }); - } - }, - initMultipleHidden: function ($e) { - var valContainer; + if (isMultiple) { + return data; + } else { + if (data.length > 0) { + return data[0]; + } else { + return null; + } + } + }, + getValText: function ($e, isGetFromCookieAllowed) { + var val = $e.select2('val'), res = $e.data('results'), txt = $e.txt(), isMultiple = !!$e.attr('multiple'), + f, id = $e.attr('id'); + if (val || val === 0) { // Means value is set. A numerical 0 is also a valid value. - $e.data('name', $e.attr('name')); - $e.attr('name', ''); - - valContainer = $('