diff --git a/dist/css/select2.css b/dist/css/select2.css index 20060640..447b2b86 100644 --- a/dist/css/select2.css +++ b/dist/css/select2.css @@ -184,6 +184,8 @@ margin: 0; padding: 0 5px; width: 100%; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered li { + list-style: none; } .select2-container--default .select2-selection--multiple .select2-selection__placeholder { color: #999; margin-top: 5px; diff --git a/dist/js/i18n/km.js b/dist/js/i18n/km.js new file mode 100644 index 00000000..10518be2 --- /dev/null +++ b/dist/js/i18n/km.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="សូមលុបចេញ "+t+" អក្សរ";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="សូមបញ្ចូល"+t+" អក្សរ រឺ ច្រើនជាងនេះ";return n},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(e){var t="អ្នកអាចជ្រើសរើសបានតែ "+e.maximum+" ជម្រើសប៉ុណ្ណោះ";return t},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/dist/js/i18n/lt.js b/dist/js/i18n/lt.js index b1d46422..c871d79c 100644 --- a/dist/js/i18n/lt.js +++ b/dist/js/i18n/lt.js @@ -1,3 +1,3 @@ /*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */ -(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%100>9&&e%100<21||e%10===0?e%10>1?n:r:t}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"ių","ius","į"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"ių","ius","į"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ų","us","ą"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%10===1&&(e%100<11||e%100>19)?t:e%10>=2&&e%10<=9&&(e%100<11||e%100>19)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"į","ius","ių"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"į","ius","ių"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ą","us","ų"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/dist/js/i18n/nb.js b/dist/js/i18n/nb.js index b1910340..79054d9e 100644 --- a/dist/js/i18n/nb.js +++ b/dist/js/i18n/nb.js @@ -1,3 +1,3 @@ /*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */ -(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/dist/js/select2.full.js b/dist/js/select2.full.js index 43510eb7..c1d479d9 100644 --- a/dist/js/select2.full.js +++ b/dist/js/select2.full.js @@ -1497,6 +1497,12 @@ S2.define('select2/selection/single',[ // User exits the container }); + container.on('focus', function (evt) { + if (!container.isOpen()) { + self.$selection.focus(); + } + }); + container.on('selection:update', function (params) { self.update(params.data); }); @@ -3436,6 +3442,12 @@ S2.define('select2/data/ajax',[ callback(results); }, function () { + // Attempt to detect if a request was aborted + // Only works if the transport exposes a status property + if ($request.status && $request.status === '0') { + return; + } + self.trigger('results:message', { message: 'errorLoading' }); @@ -3607,6 +3619,29 @@ S2.define('select2/data/tokenizer',[ Tokenizer.prototype.query = function (decorated, params, callback) { var self = this; + function createAndSelect (data) { + // Normalize the data object so we can use it for checks + var item = self._normalizeItem(data); + + // Check if the data object already exists as a tag + // Select it if it doesn't + var $existingOptions = self.$element.find('option').filter(function () { + return $(this).val() === item.id; + }); + + // If an existing option wasn't found for it, create the option + if (!$existingOptions.length) { + var $option = self.option(item); + $option.attr('data-select2-tag', true); + + self._removeOldTags(); + self.addOptions([$option]); + } + + // Select the item, now that we know there is an option for it + select(item); + } + function select (data) { self.trigger('select', { data: data @@ -3615,7 +3650,7 @@ S2.define('select2/data/tokenizer',[ params.term = params.term || ''; - var tokenData = this.tokenizer(params, this.options, select); + var tokenData = this.tokenizer(params, this.options, createAndSelect); if (tokenData.term !== params.term) { // Replace the search term if we have the search box @@ -3880,6 +3915,12 @@ S2.define('select2/dropdown/search',[ self.$search.val(''); }); + container.on('focus', function () { + if (container.isOpen()) { + self.$search.focus(); + } + }); + container.on('results:all', function (params) { if (params.query.term == null || params.query.term === '') { var showSearch = self.showSearch(params); @@ -4229,7 +4270,7 @@ S2.define('select2/dropdown/attachBody',[ if (newDirection == 'above' || (isCurrentlyAbove && newDirection !== 'below')) { - css.top = container.top - dropdown.height; + css.top = container.top - parentOffset.top - dropdown.height; } if (newDirection != null) { @@ -4251,6 +4292,7 @@ S2.define('select2/dropdown/attachBody',[ if (this.options.get('dropdownAutoWidth')) { css.minWidth = css.width; + css.position = 'relative'; css.width = 'auto'; } @@ -5129,6 +5171,10 @@ S2.define('select2/core',[ }); }); + this.$element.on('focus.select2', function (evt) { + self.trigger('focus', evt); + }); + this._sync = Utils.bind(this._syncAttributes, this); if (this.$element[0].attachEvent) { @@ -6235,6 +6281,7 @@ S2.define('jquery.select2',[ return this; } else if (typeof options === 'string') { var ret; + var args = Array.prototype.slice.call(arguments, 1); this.each(function () { var instance = $(this).data('select2'); @@ -6246,8 +6293,6 @@ S2.define('jquery.select2',[ ); } - var args = Array.prototype.slice.call(arguments, 1); - ret = instance[options].apply(instance, args); }); diff --git a/dist/js/select2.js b/dist/js/select2.js index 9b0e0440..b240c128 100644 --- a/dist/js/select2.js +++ b/dist/js/select2.js @@ -1497,6 +1497,12 @@ S2.define('select2/selection/single',[ // User exits the container }); + container.on('focus', function (evt) { + if (!container.isOpen()) { + self.$selection.focus(); + } + }); + container.on('selection:update', function (params) { self.update(params.data); }); @@ -3436,6 +3442,12 @@ S2.define('select2/data/ajax',[ callback(results); }, function () { + // Attempt to detect if a request was aborted + // Only works if the transport exposes a status property + if ($request.status && $request.status === '0') { + return; + } + self.trigger('results:message', { message: 'errorLoading' }); @@ -3607,6 +3619,29 @@ S2.define('select2/data/tokenizer',[ Tokenizer.prototype.query = function (decorated, params, callback) { var self = this; + function createAndSelect (data) { + // Normalize the data object so we can use it for checks + var item = self._normalizeItem(data); + + // Check if the data object already exists as a tag + // Select it if it doesn't + var $existingOptions = self.$element.find('option').filter(function () { + return $(this).val() === item.id; + }); + + // If an existing option wasn't found for it, create the option + if (!$existingOptions.length) { + var $option = self.option(item); + $option.attr('data-select2-tag', true); + + self._removeOldTags(); + self.addOptions([$option]); + } + + // Select the item, now that we know there is an option for it + select(item); + } + function select (data) { self.trigger('select', { data: data @@ -3615,7 +3650,7 @@ S2.define('select2/data/tokenizer',[ params.term = params.term || ''; - var tokenData = this.tokenizer(params, this.options, select); + var tokenData = this.tokenizer(params, this.options, createAndSelect); if (tokenData.term !== params.term) { // Replace the search term if we have the search box @@ -3880,6 +3915,12 @@ S2.define('select2/dropdown/search',[ self.$search.val(''); }); + container.on('focus', function () { + if (container.isOpen()) { + self.$search.focus(); + } + }); + container.on('results:all', function (params) { if (params.query.term == null || params.query.term === '') { var showSearch = self.showSearch(params); @@ -4229,7 +4270,7 @@ S2.define('select2/dropdown/attachBody',[ if (newDirection == 'above' || (isCurrentlyAbove && newDirection !== 'below')) { - css.top = container.top - dropdown.height; + css.top = container.top - parentOffset.top - dropdown.height; } if (newDirection != null) { @@ -4251,6 +4292,7 @@ S2.define('select2/dropdown/attachBody',[ if (this.options.get('dropdownAutoWidth')) { css.minWidth = css.width; + css.position = 'relative'; css.width = 'auto'; } @@ -5129,6 +5171,10 @@ S2.define('select2/core',[ }); }); + this.$element.on('focus.select2', function (evt) { + self.trigger('focus', evt); + }); + this._sync = Utils.bind(this._syncAttributes, this); if (this.$element[0].attachEvent) { @@ -5524,6 +5570,7 @@ S2.define('jquery.select2',[ return this; } else if (typeof options === 'string') { var ret; + var args = Array.prototype.slice.call(arguments, 1); this.each(function () { var instance = $(this).data('select2'); @@ -5535,8 +5582,6 @@ S2.define('jquery.select2',[ ); } - var args = Array.prototype.slice.call(arguments, 1); - ret = instance[options].apply(instance, args); });