From 05cbaf7bf7951a04f967637521e2f2e1777d1b8c Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Wed, 7 Jan 2015 21:09:59 -0500 Subject: [PATCH] Universally use the object query return There was a plan to universally use an array as the return from query methods, but now that we've realized pagination and extra things are impossible without it, we're going back to the return object. Anyone looking to migrate their data should be returning an object with the key `results` containing what they previously returned. This should fix https://github.com/select2/select2/issues/2898 --- dist/js/i18n/ru.js | 2 +- dist/js/select2.amd.full.js | 39 +++++++++++-------- dist/js/select2.amd.js | 39 +++++++++++-------- dist/js/select2.full.js | 39 +++++++++++-------- dist/js/select2.full.min.js | 6 +-- dist/js/select2.js | 39 +++++++++++-------- dist/js/select2.min.js | 4 +- docs/examples.html | 4 +- src/js/select2/data/select.js | 4 +- src/js/select2/data/tags.js | 16 ++++++-- src/js/select2/dropdown/hidePlaceholder.js | 2 +- src/js/select2/dropdown/infiniteScroll.js | 7 +--- .../dropdown/minimumResultsForSearch.js | 2 +- src/js/select2/i18n/ru.js | 14 ++++--- src/js/select2/results.js | 8 ++-- tests/data/select-tests.js | 36 ++++++++--------- tests/data/tags-tests.js | 36 ++++++++--------- 17 files changed, 164 insertions(+), 133 deletions(-) diff --git a/dist/js/i18n/ru.js b/dist/js/i18n/ru.js index 870f25bc..9748dcc0 100644 --- a/dist/js/i18n/ru.js +++ b/dist/js/i18n/ru.js @@ -1 +1 @@ -window.$=window.$||{},function(){$&&$.fn&&$.fn.select2&&$.fn.select2.amd&&(define=$.fn.select2.amd.define,require=$.fn.select2.amd.require),define("select2/i18n/ru",[],function(){function e(e,t,r,i){return n%10<5&&n%10>0&&n%100<5||n%100>20?n%10>1?r:t:i}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(n,"","a","ов"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите на "+n+" символ";return r+=e(overChars,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(overChars,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"SПоиск…"}}}),require("jquery.select2"),$.fn.select2.amd={define:define,require:require}}(); \ No newline at end of file +window.$=window.$||{},function(){$&&$.fn&&$.fn.select2&&$.fn.select2.amd&&(define=$.fn.select2.amd.define,require=$.fn.select2.amd.require),define("select2/i18n/ru",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите на "+n+" символ";return r+=e(n,"","a","ов"),r+=" меньше",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(overChars,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(overChars,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"}}}),require("jquery.select2"),$.fn.select2.amd={define:define,require:require}}(); \ No newline at end of file diff --git a/dist/js/select2.amd.full.js b/dist/js/select2.amd.full.js index d305f468..2e160554 100644 --- a/dist/js/select2.amd.full.js +++ b/dist/js/select2.amd.full.js @@ -214,7 +214,7 @@ define('select2/results',[ var $options = []; - if (data.length === 0) { + if (data.results == null || data.results.length === 0) { if (this.$results.children().length === 0) { this.trigger('results:message', { message: 'noResults' @@ -224,10 +224,10 @@ define('select2/results',[ return; } - data = this.sort(data); + data.results = this.sort(data.results); - for (var d = 0; d < data.length; d++) { - var item = data[d]; + for (var d = 0; d < data.results.length; d++) { + var item = data.results[d]; var $option = this.option(item); @@ -2295,7 +2295,9 @@ define('select2/data/select',[ } }); - callback(data); + callback({ + results: data + }); }; SelectAdapter.prototype.option = function (data) { @@ -2576,12 +2578,17 @@ define('select2/data/tags',[ return; } - function wrapper (data, child) { + function wrapper (obj, child) { + var data = obj.results; + for (var i = 0; i < data.length; i++) { var option = data[i]; var checkChildren = ( - option.children != null && !wrapper(option.children, true) + option.children != null && + !wrapper({ + results: option.children + }, true) ); var checkText = option.text === params.term; @@ -2591,7 +2598,8 @@ define('select2/data/tags',[ return false; } - callback(data); + obj.data = data; + callback(obj); return; } @@ -2612,7 +2620,9 @@ define('select2/data/tags',[ self.insertTag(data, tag); } - callback(data); + obj.results = data; + + callback(obj); } decorated.call(this, params, wrapper); @@ -2930,7 +2940,7 @@ define('select2/dropdown/hidePlaceholder',[ } HidePlaceholder.prototype.append = function (decorated, data) { - data = this.removePlaceholder(data); + data.results = this.removePlaceholder(data.results); decorated.call(this, data); }; @@ -2979,12 +2989,7 @@ define('select2/dropdown/infiniteScroll',[ this.$loadingMore.remove(); this.loading = false; - if ($.isArray(data)) { - decorated.call(this, data); - return; - } - - decorated.call(this, data.results); + decorated.call(this, data); if (this.showLoadingMore(data)) { this.$results.append(this.$loadingMore); @@ -3226,7 +3231,7 @@ define('select2/dropdown/minimumResultsForSearch',[ } MinimumResultsForSearch.prototype.showSearch = function (decorated, params) { - if (countResults(params.data) < this.minimumResultsForSearch) { + if (countResults(params.data.results) < this.minimumResultsForSearch) { return false; } diff --git a/dist/js/select2.amd.js b/dist/js/select2.amd.js index 79c69796..1680a121 100644 --- a/dist/js/select2.amd.js +++ b/dist/js/select2.amd.js @@ -214,7 +214,7 @@ define('select2/results',[ var $options = []; - if (data.length === 0) { + if (data.results == null || data.results.length === 0) { if (this.$results.children().length === 0) { this.trigger('results:message', { message: 'noResults' @@ -224,10 +224,10 @@ define('select2/results',[ return; } - data = this.sort(data); + data.results = this.sort(data.results); - for (var d = 0; d < data.length; d++) { - var item = data[d]; + for (var d = 0; d < data.results.length; d++) { + var item = data.results[d]; var $option = this.option(item); @@ -2295,7 +2295,9 @@ define('select2/data/select',[ } }); - callback(data); + callback({ + results: data + }); }; SelectAdapter.prototype.option = function (data) { @@ -2576,12 +2578,17 @@ define('select2/data/tags',[ return; } - function wrapper (data, child) { + function wrapper (obj, child) { + var data = obj.results; + for (var i = 0; i < data.length; i++) { var option = data[i]; var checkChildren = ( - option.children != null && !wrapper(option.children, true) + option.children != null && + !wrapper({ + results: option.children + }, true) ); var checkText = option.text === params.term; @@ -2591,7 +2598,8 @@ define('select2/data/tags',[ return false; } - callback(data); + obj.data = data; + callback(obj); return; } @@ -2612,7 +2620,9 @@ define('select2/data/tags',[ self.insertTag(data, tag); } - callback(data); + obj.results = data; + + callback(obj); } decorated.call(this, params, wrapper); @@ -2930,7 +2940,7 @@ define('select2/dropdown/hidePlaceholder',[ } HidePlaceholder.prototype.append = function (decorated, data) { - data = this.removePlaceholder(data); + data.results = this.removePlaceholder(data.results); decorated.call(this, data); }; @@ -2979,12 +2989,7 @@ define('select2/dropdown/infiniteScroll',[ this.$loadingMore.remove(); this.loading = false; - if ($.isArray(data)) { - decorated.call(this, data); - return; - } - - decorated.call(this, data.results); + decorated.call(this, data); if (this.showLoadingMore(data)) { this.$results.append(this.$loadingMore); @@ -3226,7 +3231,7 @@ define('select2/dropdown/minimumResultsForSearch',[ } MinimumResultsForSearch.prototype.showSearch = function (decorated, params) { - if (countResults(params.data) < this.minimumResultsForSearch) { + if (countResults(params.data.results) < this.minimumResultsForSearch) { return false; } diff --git a/dist/js/select2.full.js b/dist/js/select2.full.js index f2953aa7..e6454ffc 100644 --- a/dist/js/select2.full.js +++ b/dist/js/select2.full.js @@ -9749,7 +9749,7 @@ define('select2/results',[ var $options = []; - if (data.length === 0) { + if (data.results == null || data.results.length === 0) { if (this.$results.children().length === 0) { this.trigger('results:message', { message: 'noResults' @@ -9759,10 +9759,10 @@ define('select2/results',[ return; } - data = this.sort(data); + data.results = this.sort(data.results); - for (var d = 0; d < data.length; d++) { - var item = data[d]; + for (var d = 0; d < data.results.length; d++) { + var item = data.results[d]; var $option = this.option(item); @@ -11830,7 +11830,9 @@ define('select2/data/select',[ } }); - callback(data); + callback({ + results: data + }); }; SelectAdapter.prototype.option = function (data) { @@ -12111,12 +12113,17 @@ define('select2/data/tags',[ return; } - function wrapper (data, child) { + function wrapper (obj, child) { + var data = obj.results; + for (var i = 0; i < data.length; i++) { var option = data[i]; var checkChildren = ( - option.children != null && !wrapper(option.children, true) + option.children != null && + !wrapper({ + results: option.children + }, true) ); var checkText = option.text === params.term; @@ -12126,7 +12133,8 @@ define('select2/data/tags',[ return false; } - callback(data); + obj.data = data; + callback(obj); return; } @@ -12147,7 +12155,9 @@ define('select2/data/tags',[ self.insertTag(data, tag); } - callback(data); + obj.results = data; + + callback(obj); } decorated.call(this, params, wrapper); @@ -12465,7 +12475,7 @@ define('select2/dropdown/hidePlaceholder',[ } HidePlaceholder.prototype.append = function (decorated, data) { - data = this.removePlaceholder(data); + data.results = this.removePlaceholder(data.results); decorated.call(this, data); }; @@ -12514,12 +12524,7 @@ define('select2/dropdown/infiniteScroll',[ this.$loadingMore.remove(); this.loading = false; - if ($.isArray(data)) { - decorated.call(this, data); - return; - } - - decorated.call(this, data.results); + decorated.call(this, data); if (this.showLoadingMore(data)) { this.$results.append(this.$loadingMore); @@ -12761,7 +12766,7 @@ define('select2/dropdown/minimumResultsForSearch',[ } MinimumResultsForSearch.prototype.showSearch = function (decorated, params) { - if (countResults(params.data) < this.minimumResultsForSearch) { + if (countResults(params.data.results) < this.minimumResultsForSearch) { return false; } diff --git a/dist/js/select2.full.min.js b/dist/js/select2.full.min.js index 9e1766cf..8fd96f57 100644 --- a/dist/js/select2.full.min.js +++ b/dist/js/select2.full.min.js @@ -1,5 +1,5 @@ window.$=window.$||{},function(){$&&$.fn&&$.fn.select2&&$.fn.select2.amd&&(c=$.fn.select2.amd.define,b=$.fn.select2.amd.require);var a,b,c;!function(d){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(n=n.slice(0,n.length-1),a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.concat(a),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,b){return function(){return n.apply(d,v.call(arguments,0).concat([a,b]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var b=r[a];delete r[a],t[a]=!0,m.apply(d,b)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,b,c,f){var h,k,l,m,n,s,u=[],v=typeof c;if(f=f||a,"undefined"===v||"function"===v){for(b=!b.length&&c.length?["require","exports","module"]:b,n=0;n0&&b-1 in a}function e(a,b,c){if(bb.isFunction(b))return bb.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return bb.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(ib.test(b))return bb.filter(b,a,c);b=bb.filter(b,a)}return bb.grep(a,function(a){return V.call(b,a)>=0!==c})}function f(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function g(a){var b=pb[a]={};return bb.each(a.match(ob)||[],function(a,c){b[c]=!0}),b}function h(){_.removeEventListener("DOMContentLoaded",h,!1),a.removeEventListener("load",h,!1),bb.ready()}function i(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=bb.expando+Math.random()}function j(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(vb,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:ub.test(c)?bb.parseJSON(c):c}catch(e){}tb.set(a,b,c)}else c=void 0;return c}function k(){return!0}function l(){return!1}function m(){try{return _.activeElement}catch(a){}}function n(a,b){return bb.nodeName(a,"table")&&bb.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function o(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function p(a){var b=Lb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function q(a,b){for(var c=0,d=a.length;d>c;c++)sb.set(a[c],"globalEval",!b||sb.get(b[c],"globalEval"))}function r(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(sb.hasData(a)&&(f=sb.access(a),g=sb.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)bb.event.add(b,e,j[e][c])}tb.hasData(a)&&(h=tb.access(a),i=bb.extend({},h),tb.set(b,i))}}function s(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&bb.nodeName(a,b)?bb.merge([a],c):c}function t(a,b){var c=b.nodeName.toLowerCase();"input"===c&&zb.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function u(b,c){var d=bb(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:bb.css(d[0],"display");return d.detach(),e}function v(a){var b=_,c=Pb[a];return c||(c=u(a,b),"none"!==c&&c||(Ob=(Ob||bb("