Skip to content

Commit 05cbaf7

Browse files
committed
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 select2#2898
1 parent 0638591 commit 05cbaf7

17 files changed

Lines changed: 164 additions & 133 deletions

dist/js/i18n/ru.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/js/select2.amd.full.js

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ define('select2/results',[
214214

215215
var $options = [];
216216

217-
if (data.length === 0) {
217+
if (data.results == null || data.results.length === 0) {
218218
if (this.$results.children().length === 0) {
219219
this.trigger('results:message', {
220220
message: 'noResults'
@@ -224,10 +224,10 @@ define('select2/results',[
224224
return;
225225
}
226226

227-
data = this.sort(data);
227+
data.results = this.sort(data.results);
228228

229-
for (var d = 0; d < data.length; d++) {
230-
var item = data[d];
229+
for (var d = 0; d < data.results.length; d++) {
230+
var item = data.results[d];
231231

232232
var $option = this.option(item);
233233

@@ -2295,7 +2295,9 @@ define('select2/data/select',[
22952295
}
22962296
});
22972297

2298-
callback(data);
2298+
callback({
2299+
results: data
2300+
});
22992301
};
23002302

23012303
SelectAdapter.prototype.option = function (data) {
@@ -2576,12 +2578,17 @@ define('select2/data/tags',[
25762578
return;
25772579
}
25782580

2579-
function wrapper (data, child) {
2581+
function wrapper (obj, child) {
2582+
var data = obj.results;
2583+
25802584
for (var i = 0; i < data.length; i++) {
25812585
var option = data[i];
25822586

25832587
var checkChildren = (
2584-
option.children != null && !wrapper(option.children, true)
2588+
option.children != null &&
2589+
!wrapper({
2590+
results: option.children
2591+
}, true)
25852592
);
25862593

25872594
var checkText = option.text === params.term;
@@ -2591,7 +2598,8 @@ define('select2/data/tags',[
25912598
return false;
25922599
}
25932600

2594-
callback(data);
2601+
obj.data = data;
2602+
callback(obj);
25952603

25962604
return;
25972605
}
@@ -2612,7 +2620,9 @@ define('select2/data/tags',[
26122620
self.insertTag(data, tag);
26132621
}
26142622

2615-
callback(data);
2623+
obj.results = data;
2624+
2625+
callback(obj);
26162626
}
26172627

26182628
decorated.call(this, params, wrapper);
@@ -2930,7 +2940,7 @@ define('select2/dropdown/hidePlaceholder',[
29302940
}
29312941

29322942
HidePlaceholder.prototype.append = function (decorated, data) {
2933-
data = this.removePlaceholder(data);
2943+
data.results = this.removePlaceholder(data.results);
29342944

29352945
decorated.call(this, data);
29362946
};
@@ -2979,12 +2989,7 @@ define('select2/dropdown/infiniteScroll',[
29792989
this.$loadingMore.remove();
29802990
this.loading = false;
29812991

2982-
if ($.isArray(data)) {
2983-
decorated.call(this, data);
2984-
return;
2985-
}
2986-
2987-
decorated.call(this, data.results);
2992+
decorated.call(this, data);
29882993

29892994
if (this.showLoadingMore(data)) {
29902995
this.$results.append(this.$loadingMore);
@@ -3226,7 +3231,7 @@ define('select2/dropdown/minimumResultsForSearch',[
32263231
}
32273232

32283233
MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {
3229-
if (countResults(params.data) < this.minimumResultsForSearch) {
3234+
if (countResults(params.data.results) < this.minimumResultsForSearch) {
32303235
return false;
32313236
}
32323237

dist/js/select2.amd.js

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ define('select2/results',[
214214

215215
var $options = [];
216216

217-
if (data.length === 0) {
217+
if (data.results == null || data.results.length === 0) {
218218
if (this.$results.children().length === 0) {
219219
this.trigger('results:message', {
220220
message: 'noResults'
@@ -224,10 +224,10 @@ define('select2/results',[
224224
return;
225225
}
226226

227-
data = this.sort(data);
227+
data.results = this.sort(data.results);
228228

229-
for (var d = 0; d < data.length; d++) {
230-
var item = data[d];
229+
for (var d = 0; d < data.results.length; d++) {
230+
var item = data.results[d];
231231

232232
var $option = this.option(item);
233233

@@ -2295,7 +2295,9 @@ define('select2/data/select',[
22952295
}
22962296
});
22972297

2298-
callback(data);
2298+
callback({
2299+
results: data
2300+
});
22992301
};
23002302

23012303
SelectAdapter.prototype.option = function (data) {
@@ -2576,12 +2578,17 @@ define('select2/data/tags',[
25762578
return;
25772579
}
25782580

2579-
function wrapper (data, child) {
2581+
function wrapper (obj, child) {
2582+
var data = obj.results;
2583+
25802584
for (var i = 0; i < data.length; i++) {
25812585
var option = data[i];
25822586

25832587
var checkChildren = (
2584-
option.children != null && !wrapper(option.children, true)
2588+
option.children != null &&
2589+
!wrapper({
2590+
results: option.children
2591+
}, true)
25852592
);
25862593

25872594
var checkText = option.text === params.term;
@@ -2591,7 +2598,8 @@ define('select2/data/tags',[
25912598
return false;
25922599
}
25932600

2594-
callback(data);
2601+
obj.data = data;
2602+
callback(obj);
25952603

25962604
return;
25972605
}
@@ -2612,7 +2620,9 @@ define('select2/data/tags',[
26122620
self.insertTag(data, tag);
26132621
}
26142622

2615-
callback(data);
2623+
obj.results = data;
2624+
2625+
callback(obj);
26162626
}
26172627

26182628
decorated.call(this, params, wrapper);
@@ -2930,7 +2940,7 @@ define('select2/dropdown/hidePlaceholder',[
29302940
}
29312941

29322942
HidePlaceholder.prototype.append = function (decorated, data) {
2933-
data = this.removePlaceholder(data);
2943+
data.results = this.removePlaceholder(data.results);
29342944

29352945
decorated.call(this, data);
29362946
};
@@ -2979,12 +2989,7 @@ define('select2/dropdown/infiniteScroll',[
29792989
this.$loadingMore.remove();
29802990
this.loading = false;
29812991

2982-
if ($.isArray(data)) {
2983-
decorated.call(this, data);
2984-
return;
2985-
}
2986-
2987-
decorated.call(this, data.results);
2992+
decorated.call(this, data);
29882993

29892994
if (this.showLoadingMore(data)) {
29902995
this.$results.append(this.$loadingMore);
@@ -3226,7 +3231,7 @@ define('select2/dropdown/minimumResultsForSearch',[
32263231
}
32273232

32283233
MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {
3229-
if (countResults(params.data) < this.minimumResultsForSearch) {
3234+
if (countResults(params.data.results) < this.minimumResultsForSearch) {
32303235
return false;
32313236
}
32323237

dist/js/select2.full.js

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9749,7 +9749,7 @@ define('select2/results',[
97499749

97509750
var $options = [];
97519751

9752-
if (data.length === 0) {
9752+
if (data.results == null || data.results.length === 0) {
97539753
if (this.$results.children().length === 0) {
97549754
this.trigger('results:message', {
97559755
message: 'noResults'
@@ -9759,10 +9759,10 @@ define('select2/results',[
97599759
return;
97609760
}
97619761

9762-
data = this.sort(data);
9762+
data.results = this.sort(data.results);
97639763

9764-
for (var d = 0; d < data.length; d++) {
9765-
var item = data[d];
9764+
for (var d = 0; d < data.results.length; d++) {
9765+
var item = data.results[d];
97669766

97679767
var $option = this.option(item);
97689768

@@ -11830,7 +11830,9 @@ define('select2/data/select',[
1183011830
}
1183111831
});
1183211832

11833-
callback(data);
11833+
callback({
11834+
results: data
11835+
});
1183411836
};
1183511837

1183611838
SelectAdapter.prototype.option = function (data) {
@@ -12111,12 +12113,17 @@ define('select2/data/tags',[
1211112113
return;
1211212114
}
1211312115

12114-
function wrapper (data, child) {
12116+
function wrapper (obj, child) {
12117+
var data = obj.results;
12118+
1211512119
for (var i = 0; i < data.length; i++) {
1211612120
var option = data[i];
1211712121

1211812122
var checkChildren = (
12119-
option.children != null && !wrapper(option.children, true)
12123+
option.children != null &&
12124+
!wrapper({
12125+
results: option.children
12126+
}, true)
1212012127
);
1212112128

1212212129
var checkText = option.text === params.term;
@@ -12126,7 +12133,8 @@ define('select2/data/tags',[
1212612133
return false;
1212712134
}
1212812135

12129-
callback(data);
12136+
obj.data = data;
12137+
callback(obj);
1213012138

1213112139
return;
1213212140
}
@@ -12147,7 +12155,9 @@ define('select2/data/tags',[
1214712155
self.insertTag(data, tag);
1214812156
}
1214912157

12150-
callback(data);
12158+
obj.results = data;
12159+
12160+
callback(obj);
1215112161
}
1215212162

1215312163
decorated.call(this, params, wrapper);
@@ -12465,7 +12475,7 @@ define('select2/dropdown/hidePlaceholder',[
1246512475
}
1246612476

1246712477
HidePlaceholder.prototype.append = function (decorated, data) {
12468-
data = this.removePlaceholder(data);
12478+
data.results = this.removePlaceholder(data.results);
1246912479

1247012480
decorated.call(this, data);
1247112481
};
@@ -12514,12 +12524,7 @@ define('select2/dropdown/infiniteScroll',[
1251412524
this.$loadingMore.remove();
1251512525
this.loading = false;
1251612526

12517-
if ($.isArray(data)) {
12518-
decorated.call(this, data);
12519-
return;
12520-
}
12521-
12522-
decorated.call(this, data.results);
12527+
decorated.call(this, data);
1252312528

1252412529
if (this.showLoadingMore(data)) {
1252512530
this.$results.append(this.$loadingMore);
@@ -12761,7 +12766,7 @@ define('select2/dropdown/minimumResultsForSearch',[
1276112766
}
1276212767

1276312768
MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {
12764-
if (countResults(params.data) < this.minimumResultsForSearch) {
12769+
if (countResults(params.data.results) < this.minimumResultsForSearch) {
1276512770
return false;
1276612771
}
1276712772

dist/js/select2.full.min.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)