select2-rails-latest 4.0.5 → 4.0.6.pre.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/lib/select2-rails/version.rb +1 -1
  3. data/vendor/assets/javascripts/select2-full.js +169 -67
  4. data/vendor/assets/javascripts/select2.js +165 -64
  5. data/vendor/assets/javascripts/select2_locale_af.js +1 -1
  6. data/vendor/assets/javascripts/select2_locale_ar.js +1 -1
  7. data/vendor/assets/javascripts/select2_locale_az.js +1 -1
  8. data/vendor/assets/javascripts/select2_locale_bg.js +1 -1
  9. data/vendor/assets/javascripts/select2_locale_bs.js +1 -1
  10. data/vendor/assets/javascripts/select2_locale_ca.js +1 -1
  11. data/vendor/assets/javascripts/select2_locale_cs.js +1 -1
  12. data/vendor/assets/javascripts/select2_locale_da.js +1 -1
  13. data/vendor/assets/javascripts/select2_locale_de.js +1 -1
  14. data/vendor/assets/javascripts/select2_locale_dsb.js +1 -1
  15. data/vendor/assets/javascripts/select2_locale_el.js +1 -1
  16. data/vendor/assets/javascripts/select2_locale_en.js +1 -1
  17. data/vendor/assets/javascripts/select2_locale_es.js +1 -1
  18. data/vendor/assets/javascripts/select2_locale_et.js +1 -1
  19. data/vendor/assets/javascripts/select2_locale_eu.js +1 -1
  20. data/vendor/assets/javascripts/select2_locale_fa.js +1 -1
  21. data/vendor/assets/javascripts/select2_locale_fi.js +1 -1
  22. data/vendor/assets/javascripts/select2_locale_fr.js +2 -2
  23. data/vendor/assets/javascripts/select2_locale_gl.js +1 -1
  24. data/vendor/assets/javascripts/select2_locale_he.js +1 -1
  25. data/vendor/assets/javascripts/select2_locale_hi.js +1 -1
  26. data/vendor/assets/javascripts/select2_locale_hr.js +1 -1
  27. data/vendor/assets/javascripts/select2_locale_hsb.js +1 -1
  28. data/vendor/assets/javascripts/select2_locale_hu.js +1 -1
  29. data/vendor/assets/javascripts/select2_locale_hy.js +1 -1
  30. data/vendor/assets/javascripts/select2_locale_id.js +1 -1
  31. data/vendor/assets/javascripts/select2_locale_is.js +1 -1
  32. data/vendor/assets/javascripts/select2_locale_it.js +1 -1
  33. data/vendor/assets/javascripts/select2_locale_ja.js +1 -1
  34. data/vendor/assets/javascripts/select2_locale_km.js +1 -1
  35. data/vendor/assets/javascripts/select2_locale_ko.js +1 -1
  36. data/vendor/assets/javascripts/select2_locale_lt.js +1 -1
  37. data/vendor/assets/javascripts/select2_locale_lv.js +1 -1
  38. data/vendor/assets/javascripts/select2_locale_mk.js +1 -1
  39. data/vendor/assets/javascripts/select2_locale_ms.js +1 -1
  40. data/vendor/assets/javascripts/select2_locale_nb.js +2 -2
  41. data/vendor/assets/javascripts/select2_locale_nl.js +1 -1
  42. data/vendor/assets/javascripts/select2_locale_pl.js +1 -1
  43. data/vendor/assets/javascripts/select2_locale_ps.js +1 -1
  44. data/vendor/assets/javascripts/select2_locale_pt-BR.js +1 -1
  45. data/vendor/assets/javascripts/select2_locale_pt.js +1 -1
  46. data/vendor/assets/javascripts/select2_locale_ro.js +1 -1
  47. data/vendor/assets/javascripts/select2_locale_ru.js +1 -1
  48. data/vendor/assets/javascripts/select2_locale_sk.js +1 -1
  49. data/vendor/assets/javascripts/select2_locale_sl.js +1 -1
  50. data/vendor/assets/javascripts/select2_locale_sr-Cyrl.js +1 -1
  51. data/vendor/assets/javascripts/select2_locale_sr.js +1 -1
  52. data/vendor/assets/javascripts/select2_locale_sv.js +1 -1
  53. data/vendor/assets/javascripts/select2_locale_th.js +1 -1
  54. data/vendor/assets/javascripts/select2_locale_tr.js +1 -1
  55. data/vendor/assets/javascripts/select2_locale_uk.js +1 -1
  56. data/vendor/assets/javascripts/select2_locale_vi.js +1 -1
  57. data/vendor/assets/javascripts/select2_locale_zh-CN.js +1 -1
  58. data/vendor/assets/javascripts/select2_locale_zh-TW.js +1 -1
  59. data/vendor/assets/stylesheets/select2.css +5 -5
  60. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d49cfd8af4ac8d81adb7d0330f4a77181bc28d6
4
- data.tar.gz: ba9e617602ebd09b1eaf640a12d05a9d9a1497bb
3
+ metadata.gz: d9d7d288e351bc56acc391b869a468438760b36b
4
+ data.tar.gz: cb921f4945173fdbab803ed06004e9de648e5cd6
5
5
  SHA512:
6
- metadata.gz: 9fedd6be16cf183b2a4f5833bcbc99d52fa54648b75e17471028f0d77ba370d4a81db39b857f8d51cf02275b3e76bc61dbb117bdcc5c190646de2e1c657a3e55
7
- data.tar.gz: 610d4499f7ff1fd3bc144ad0a5854c6b1b153cb51ff2ec7476f0ed0dbfc34b9991a4382b5b7408d21f3bea292561b8f5368f86d298caee5632a7e182dfb56552
6
+ metadata.gz: 5fdcd0c811774d9dc511a1af500918d205d97ef0752040d4a2b00b3437df4284ae79302b826388e860f191f17c3981c42732cf28d5750110ffeb9aa15206445b
7
+ data.tar.gz: 7e7253c664787c09fbff694060d7391e1f859bfa6add42c6580276ca5bc97626af6e4fb6d7715059fa1297f60dacf307e5ca00c8e97fc0a4339a636748c92037
@@ -1,5 +1,5 @@
1
1
  module Select2
2
2
  module Rails
3
- VERSION = '4.0.5'.freeze
3
+ VERSION = '4.0.6-rc.1'.freeze
4
4
  end
5
5
  end
@@ -1,11 +1,11 @@
1
1
  /*!
2
- * Select2 4.0.5
2
+ * Select2 4.0.6-rc.1
3
3
  * https://select2.github.io
4
4
  *
5
5
  * Released under the MIT license
6
6
  * https://github.com/select2/select2/blob/master/LICENSE.md
7
7
  */
8
- (function (factory) {
8
+ ;(function (factory) {
9
9
  if (typeof define === 'function' && define.amd) {
10
10
  // AMD. Register as an anonymous module.
11
11
  define(['jquery'], factory);
@@ -574,10 +574,10 @@ S2.define('select2/utils',[
574
574
  DecoratedClass.prototype = new ctr();
575
575
 
576
576
  for (var m = 0; m < superMethods.length; m++) {
577
- var superMethod = superMethods[m];
577
+ var superMethod = superMethods[m];
578
578
 
579
- DecoratedClass.prototype[superMethod] =
580
- SuperClass.prototype[superMethod];
579
+ DecoratedClass.prototype[superMethod] =
580
+ SuperClass.prototype[superMethod];
581
581
  }
582
582
 
583
583
  var calledMethod = function (methodName) {
@@ -772,6 +772,67 @@ S2.define('select2/utils',[
772
772
  $element.append($nodes);
773
773
  };
774
774
 
775
+ // Cache objects in Utils.__cache instead of $.data (see #4346)
776
+ Utils.__cache = {};
777
+
778
+ var id = 0;
779
+ Utils.GetUniqueElementId = function (element) {
780
+ // Get a unique element Id. If element has no id,
781
+ // creates a new unique number, stores it in the id
782
+ // attribute and returns the new id.
783
+ // If an id already exists, it simply returns it.
784
+
785
+ var select2Id = element.getAttribute('data-select2-id');
786
+ if (select2Id == null) {
787
+ // If element has id, use it.
788
+ if (element.id) {
789
+ select2Id = element.id;
790
+ element.setAttribute('data-select2-id', select2Id);
791
+ } else {
792
+ element.setAttribute('data-select2-id', ++id);
793
+ select2Id = id.toString();
794
+ }
795
+ }
796
+ return select2Id;
797
+ };
798
+
799
+ Utils.StoreData = function (element, name, value) {
800
+ // Stores an item in the cache for a specified element.
801
+ // name is the cache key.
802
+ var id = Utils.GetUniqueElementId(element);
803
+ if (!Utils.__cache[id]) {
804
+ Utils.__cache[id] = {};
805
+ }
806
+
807
+ Utils.__cache[id][name] = value;
808
+ };
809
+
810
+ Utils.GetData = function (element, name) {
811
+ // Retrieves a value from the cache by its key (name)
812
+ // name is optional. If no name specified, return
813
+ // all cache items for the specified element.
814
+ // and for a specified element.
815
+ var id = Utils.GetUniqueElementId(element);
816
+ if (name) {
817
+ if (Utils.__cache[id]) {
818
+ return Utils.__cache[id][name] != null ?
819
+ Utils.__cache[id][name]:
820
+ $(element).data(name); // Fallback to HTML5 data attribs.
821
+ }
822
+ return $(element).data(name); // Fallback to HTML5 data attribs.
823
+ } else {
824
+ return Utils.__cache[id];
825
+ }
826
+ };
827
+
828
+ Utils.RemoveData = function (element) {
829
+ // Removes all cached items for a specified element.
830
+ var id = Utils.GetUniqueElementId(element);
831
+ if (Utils.__cache[id] != null) {
832
+ delete Utils.__cache[id];
833
+ }
834
+ };
835
+
775
836
  return Utils;
776
837
  });
777
838
 
@@ -907,7 +968,7 @@ S2.define('select2/results',[
907
968
  $options.each(function () {
908
969
  var $option = $(this);
909
970
 
910
- var item = $.data(this, 'data');
971
+ var item = Utils.GetData(this, 'data');
911
972
 
912
973
  // id needs to be converted to a string when comparing
913
974
  var id = '' + item.id;
@@ -1012,7 +1073,7 @@ S2.define('select2/results',[
1012
1073
  this.template(data, option);
1013
1074
  }
1014
1075
 
1015
- $.data(option, 'data', data);
1076
+ Utils.StoreData(option, 'data', data);
1016
1077
 
1017
1078
  return option;
1018
1079
  };
@@ -1098,7 +1159,7 @@ S2.define('select2/results',[
1098
1159
  return;
1099
1160
  }
1100
1161
 
1101
- var data = $highlighted.data('data');
1162
+ var data = Utils.GetData($highlighted[0], 'data');
1102
1163
 
1103
1164
  if ($highlighted.attr('aria-selected') == 'true') {
1104
1165
  self.trigger('close', {});
@@ -1117,7 +1178,8 @@ S2.define('select2/results',[
1117
1178
  var currentIndex = $options.index($highlighted);
1118
1179
 
1119
1180
  // If we are already at te top, don't move further
1120
- if (currentIndex === 0) {
1181
+ // If no options, currentIndex will be -1
1182
+ if (currentIndex <= 0) {
1121
1183
  return;
1122
1184
  }
1123
1185
 
@@ -1210,7 +1272,7 @@ S2.define('select2/results',[
1210
1272
  function (evt) {
1211
1273
  var $this = $(this);
1212
1274
 
1213
- var data = $this.data('data');
1275
+ var data = Utils.GetData(this, 'data');
1214
1276
 
1215
1277
  if ($this.attr('aria-selected') === 'true') {
1216
1278
  if (self.options.get('multiple')) {
@@ -1233,7 +1295,7 @@ S2.define('select2/results',[
1233
1295
 
1234
1296
  this.$results.on('mouseenter', '.select2-results__option[aria-selected]',
1235
1297
  function (evt) {
1236
- var data = $(this).data('data');
1298
+ var data = Utils.GetData(this, 'data');
1237
1299
 
1238
1300
  self.getHighlightedResults()
1239
1301
  .removeClass('select2-results__option--highlighted');
@@ -1348,8 +1410,8 @@ S2.define('select2/selection/base',[
1348
1410
 
1349
1411
  this._tabindex = 0;
1350
1412
 
1351
- if (this.$element.data('old-tabindex') != null) {
1352
- this._tabindex = this.$element.data('old-tabindex');
1413
+ if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {
1414
+ this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');
1353
1415
  } else if (this.$element.attr('tabindex') != null) {
1354
1416
  this._tabindex = this.$element.attr('tabindex');
1355
1417
  }
@@ -1409,6 +1471,9 @@ S2.define('select2/selection/base',[
1409
1471
  self.$selection.removeAttr('aria-owns');
1410
1472
 
1411
1473
  self.$selection.focus();
1474
+ window.setTimeout(function () {
1475
+ self.$selection.focus();
1476
+ }, 0);
1412
1477
 
1413
1478
  self._detachCloseHandler(container);
1414
1479
  });
@@ -1457,7 +1522,7 @@ S2.define('select2/selection/base',[
1457
1522
  return;
1458
1523
  }
1459
1524
 
1460
- var $element = $this.data('element');
1525
+ var $element = Utils.GetData(this, 'element');
1461
1526
 
1462
1527
  $element.select2('close');
1463
1528
  });
@@ -1518,7 +1583,10 @@ S2.define('select2/selection/single',[
1518
1583
 
1519
1584
  var id = container.id + '-container';
1520
1585
 
1521
- this.$selection.find('.select2-selection__rendered').attr('id', id);
1586
+ this.$selection.find('.select2-selection__rendered')
1587
+ .attr('id', id)
1588
+ .attr('role', 'textbox')
1589
+ .attr('aria-readonly', 'true');
1522
1590
  this.$selection.attr('aria-labelledby', id);
1523
1591
 
1524
1592
  this.$selection.on('mousedown', function (evt) {
@@ -1545,14 +1613,12 @@ S2.define('select2/selection/single',[
1545
1613
  self.$selection.focus();
1546
1614
  }
1547
1615
  });
1548
-
1549
- container.on('selection:update', function (params) {
1550
- self.update(params.data);
1551
- });
1552
1616
  };
1553
1617
 
1554
1618
  SingleSelection.prototype.clear = function () {
1555
- this.$selection.find('.select2-selection__rendered').empty();
1619
+ var $rendered = this.$selection.find('.select2-selection__rendered');
1620
+ $rendered.empty();
1621
+ $rendered.removeAttr('title'); // clear tooltip on empty
1556
1622
  };
1557
1623
 
1558
1624
  SingleSelection.prototype.display = function (data, container) {
@@ -1578,7 +1644,7 @@ S2.define('select2/selection/single',[
1578
1644
  var formatted = this.display(selection, $rendered);
1579
1645
 
1580
1646
  $rendered.empty().append(formatted);
1581
- $rendered.prop('title', selection.title || selection.text);
1647
+ $rendered.attr('title', selection.title || selection.text);
1582
1648
  };
1583
1649
 
1584
1650
  return SingleSelection;
@@ -1630,7 +1696,7 @@ S2.define('select2/selection/multiple',[
1630
1696
  var $remove = $(this);
1631
1697
  var $selection = $remove.parent();
1632
1698
 
1633
- var data = $selection.data('data');
1699
+ var data = Utils.GetData($selection[0], 'data');
1634
1700
 
1635
1701
  self.trigger('unselect', {
1636
1702
  originalEvent: evt,
@@ -1641,7 +1707,9 @@ S2.define('select2/selection/multiple',[
1641
1707
  };
1642
1708
 
1643
1709
  MultipleSelection.prototype.clear = function () {
1644
- this.$selection.find('.select2-selection__rendered').empty();
1710
+ var $rendered = this.$selection.find('.select2-selection__rendered');
1711
+ $rendered.empty();
1712
+ $rendered.removeAttr('title');
1645
1713
  };
1646
1714
 
1647
1715
  MultipleSelection.prototype.display = function (data, container) {
@@ -1679,9 +1747,9 @@ S2.define('select2/selection/multiple',[
1679
1747
  var formatted = this.display(selection, $selection);
1680
1748
 
1681
1749
  $selection.append(formatted);
1682
- $selection.prop('title', selection.title || selection.text);
1750
+ $selection.attr('title', selection.title || selection.text);
1683
1751
 
1684
- $selection.data('data', selection);
1752
+ Utils.StoreData($selection[0], 'data', selection);
1685
1753
 
1686
1754
  $selections.push($selection);
1687
1755
  }
@@ -1746,8 +1814,9 @@ S2.define('select2/selection/placeholder',[
1746
1814
 
1747
1815
  S2.define('select2/selection/allowClear',[
1748
1816
  'jquery',
1749
- '../keys'
1750
- ], function ($, KEYS) {
1817
+ '../keys',
1818
+ '../utils'
1819
+ ], function ($, KEYS, Utils) {
1751
1820
  function AllowClear () { }
1752
1821
 
1753
1822
  AllowClear.prototype.bind = function (decorated, container, $container) {
@@ -1789,10 +1858,22 @@ S2.define('select2/selection/allowClear',[
1789
1858
 
1790
1859
  evt.stopPropagation();
1791
1860
 
1792
- var data = $clear.data('data');
1861
+ var data = Utils.GetData($clear[0], 'data');
1862
+
1863
+ var previousVal = this.$element.val();
1864
+ this.$element.val(this.placeholder.id);
1865
+
1866
+ var unselectData = {
1867
+ data: data
1868
+ };
1869
+ this.trigger('clear', unselectData);
1870
+ if (unselectData.prevented) {
1871
+ this.$element.val(previousVal);
1872
+ return;
1873
+ }
1793
1874
 
1794
1875
  for (var d = 0; d < data.length; d++) {
1795
- var unselectData = {
1876
+ unselectData = {
1796
1877
  data: data[d]
1797
1878
  };
1798
1879
 
@@ -1802,11 +1883,12 @@ S2.define('select2/selection/allowClear',[
1802
1883
 
1803
1884
  // If the event was prevented, don't clear it out.
1804
1885
  if (unselectData.prevented) {
1886
+ this.$element.val(previousVal);
1805
1887
  return;
1806
1888
  }
1807
1889
  }
1808
1890
 
1809
- this.$element.val(this.placeholder.id).trigger('change');
1891
+ this.$element.trigger('change');
1810
1892
 
1811
1893
  this.trigger('toggle', {});
1812
1894
  };
@@ -1834,7 +1916,7 @@ S2.define('select2/selection/allowClear',[
1834
1916
  '&times;' +
1835
1917
  '</span>'
1836
1918
  );
1837
- $remove.data('data', data);
1919
+ Utils.StoreData($remove[0], 'data', data);
1838
1920
 
1839
1921
  this.$selection.find('.select2-selection__rendered').prepend($remove);
1840
1922
  };
@@ -1925,7 +2007,7 @@ S2.define('select2/selection/search',[
1925
2007
  .prev('.select2-selection__choice');
1926
2008
 
1927
2009
  if ($previousChoice.length > 0) {
1928
- var item = $previousChoice.data('data');
2010
+ var item = Utils.GetData($previousChoice[0], 'data');
1929
2011
 
1930
2012
  self.searchRemoveChoice(item);
1931
2013
 
@@ -2019,7 +2101,13 @@ S2.define('select2/selection/search',[
2019
2101
 
2020
2102
  this.resizeSearch();
2021
2103
  if (searchHadFocus) {
2022
- this.$search.focus();
2104
+ var isTagInput = this.$element.find('[data-select2-tag]').length;
2105
+ if (isTagInput) {
2106
+ // fix IE11 bug where tag input lost focus
2107
+ this.$element.focus();
2108
+ } else {
2109
+ this.$search.focus();
2110
+ }
2023
2111
  }
2024
2112
  };
2025
2113
 
@@ -2076,10 +2164,13 @@ S2.define('select2/selection/eventRelay',[
2076
2164
  'open', 'opening',
2077
2165
  'close', 'closing',
2078
2166
  'select', 'selecting',
2079
- 'unselect', 'unselecting'
2167
+ 'unselect', 'unselecting',
2168
+ 'clear', 'clearing'
2080
2169
  ];
2081
2170
 
2082
- var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting'];
2171
+ var preventableEvents = [
2172
+ 'opening', 'closing', 'selecting', 'unselecting', 'clearing'
2173
+ ];
2083
2174
 
2084
2175
  decorated.call(this, container, $container);
2085
2176
 
@@ -3158,7 +3249,7 @@ S2.define('select2/data/select',[
3158
3249
  // Remove anything added to child elements
3159
3250
  this.$element.find('*').each(function () {
3160
3251
  // Remove any custom data set by Select2
3161
- $.removeData(this, 'data');
3252
+ Utils.RemoveData(this);
3162
3253
  });
3163
3254
  };
3164
3255
 
@@ -3231,7 +3322,7 @@ S2.define('select2/data/select',[
3231
3322
  normalizedData.element = option;
3232
3323
 
3233
3324
  // Override the option's data with the combined data
3234
- $.data(option, 'data', normalizedData);
3325
+ Utils.StoreData(option, 'data', normalizedData);
3235
3326
 
3236
3327
  return $option;
3237
3328
  };
@@ -3239,7 +3330,7 @@ S2.define('select2/data/select',[
3239
3330
  SelectAdapter.prototype.item = function ($option) {
3240
3331
  var data = {};
3241
3332
 
3242
- data = $.data($option[0], 'data');
3333
+ data = Utils.GetData($option[0], 'data');
3243
3334
 
3244
3335
  if (data != null) {
3245
3336
  return data;
@@ -3277,13 +3368,13 @@ S2.define('select2/data/select',[
3277
3368
  data = this._normalizeItem(data);
3278
3369
  data.element = $option[0];
3279
3370
 
3280
- $.data($option[0], 'data', data);
3371
+ Utils.StoreData($option[0], 'data', data);
3281
3372
 
3282
3373
  return data;
3283
3374
  };
3284
3375
 
3285
3376
  SelectAdapter.prototype._normalizeItem = function (item) {
3286
- if (!$.isPlainObject(item)) {
3377
+ if (item !== Object(item)) {
3287
3378
  item = {
3288
3379
  id: item,
3289
3380
  text: item
@@ -3487,7 +3578,8 @@ S2.define('select2/data/ajax',[
3487
3578
  }, function () {
3488
3579
  // Attempt to detect if a request was aborted
3489
3580
  // Only works if the transport exposes a status property
3490
- if ($request.status && $request.status === '0') {
3581
+ if ('status' in $request &&
3582
+ ($request.status === 0 || $request.status === '0')) {
3491
3583
  return;
3492
3584
  }
3493
3585
 
@@ -3959,6 +4051,7 @@ S2.define('select2/dropdown/search',[
3959
4051
  self.$search.attr('tabindex', -1);
3960
4052
 
3961
4053
  self.$search.val('');
4054
+ self.$search.blur();
3962
4055
  });
3963
4056
 
3964
4057
  container.on('focus', function () {
@@ -4224,14 +4317,14 @@ S2.define('select2/dropdown/attachBody',[
4224
4317
 
4225
4318
  var $watchers = this.$container.parents().filter(Utils.hasScroll);
4226
4319
  $watchers.each(function () {
4227
- $(this).data('select2-scroll-position', {
4320
+ Utils.StoreData(this, 'select2-scroll-position', {
4228
4321
  x: $(this).scrollLeft(),
4229
4322
  y: $(this).scrollTop()
4230
4323
  });
4231
4324
  });
4232
4325
 
4233
4326
  $watchers.on(scrollEvent, function (ev) {
4234
- var position = $(this).data('select2-scroll-position');
4327
+ var position = Utils.GetData(this, 'select2-scroll-position');
4235
4328
  $(this).scrollTop(position.y);
4236
4329
  });
4237
4330
 
@@ -4396,8 +4489,8 @@ S2.define('select2/dropdown/minimumResultsForSearch',[
4396
4489
  });
4397
4490
 
4398
4491
  S2.define('select2/dropdown/selectOnClose',[
4399
-
4400
- ], function () {
4492
+ '../utils'
4493
+ ], function (Utils) {
4401
4494
  function SelectOnClose () { }
4402
4495
 
4403
4496
  SelectOnClose.prototype.bind = function (decorated, container, $container) {
@@ -4428,7 +4521,7 @@ S2.define('select2/dropdown/selectOnClose',[
4428
4521
  return;
4429
4522
  }
4430
4523
 
4431
- var data = $highlightedResults.data('data');
4524
+ var data = Utils.GetData($highlightedResults[0], 'data');
4432
4525
 
4433
4526
  // Don't re-select already selected resulte
4434
4527
  if (
@@ -4916,7 +5009,7 @@ S2.define('select2/defaults',[
4916
5009
 
4917
5010
  var convertedData = Utils._convertData(data);
4918
5011
 
4919
- $.extend(this.defaults, convertedData);
5012
+ $.extend(true, this.defaults, convertedData);
4920
5013
  };
4921
5014
 
4922
5015
  var defaults = new Defaults();
@@ -4981,7 +5074,7 @@ S2.define('select2/options',[
4981
5074
  $e.prop('disabled', this.options.disabled);
4982
5075
  $e.prop('multiple', this.options.multiple);
4983
5076
 
4984
- if ($e.data('select2Tags')) {
5077
+ if (Utils.GetData($e[0], 'select2Tags')) {
4985
5078
  if (this.options.debug && window.console && console.warn) {
4986
5079
  console.warn(
4987
5080
  'Select2: The `data-select2-tags` attribute has been changed to ' +
@@ -4990,11 +5083,11 @@ S2.define('select2/options',[
4990
5083
  );
4991
5084
  }
4992
5085
 
4993
- $e.data('data', $e.data('select2Tags'));
4994
- $e.data('tags', true);
5086
+ Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));
5087
+ Utils.StoreData($e[0], 'tags', true);
4995
5088
  }
4996
5089
 
4997
- if ($e.data('ajaxUrl')) {
5090
+ if (Utils.GetData($e[0], 'ajaxUrl')) {
4998
5091
  if (this.options.debug && window.console && console.warn) {
4999
5092
  console.warn(
5000
5093
  'Select2: The `data-ajax-url` attribute has been changed to ' +
@@ -5003,8 +5096,9 @@ S2.define('select2/options',[
5003
5096
  );
5004
5097
  }
5005
5098
 
5006
- $e.attr('ajax--url', $e.data('ajaxUrl'));
5007
- $e.data('ajax--url', $e.data('ajaxUrl'));
5099
+ $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));
5100
+ Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));
5101
+
5008
5102
  }
5009
5103
 
5010
5104
  var dataset = {};
@@ -5012,9 +5106,9 @@ S2.define('select2/options',[
5012
5106
  // Prefer the element's `dataset` attribute if it exists
5013
5107
  // jQuery 1.x does not correctly handle data attributes with multiple dashes
5014
5108
  if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {
5015
- dataset = $.extend(true, {}, $e[0].dataset, $e.data());
5109
+ dataset = $.extend(true, {}, $e[0].dataset, Utils.GetData($e[0]));
5016
5110
  } else {
5017
- dataset = $e.data();
5111
+ dataset = Utils.GetData($e[0]);
5018
5112
  }
5019
5113
 
5020
5114
  var data = $.extend(true, {}, dataset);
@@ -5054,8 +5148,8 @@ S2.define('select2/core',[
5054
5148
  './keys'
5055
5149
  ], function ($, Options, Utils, KEYS) {
5056
5150
  var Select2 = function ($element, options) {
5057
- if ($element.data('select2') != null) {
5058
- $element.data('select2').destroy();
5151
+ if (Utils.GetData($element[0], 'select2') != null) {
5152
+ Utils.GetData($element[0], 'select2').destroy();
5059
5153
  }
5060
5154
 
5061
5155
  this.$element = $element;
@@ -5071,7 +5165,7 @@ S2.define('select2/core',[
5071
5165
  // Set up the tabindex
5072
5166
 
5073
5167
  var tabindex = $element.attr('tabindex') || 0;
5074
- $element.data('old-tabindex', tabindex);
5168
+ Utils.StoreData($element[0], 'old-tabindex', tabindex);
5075
5169
  $element.attr('tabindex', '-1');
5076
5170
 
5077
5171
  // Set up containers and adapters
@@ -5132,6 +5226,9 @@ S2.define('select2/core',[
5132
5226
  // Synchronize any monitored attributes
5133
5227
  this._syncAttributes();
5134
5228
 
5229
+ Utils.StoreData($element[0], 'select2', this);
5230
+
5231
+ // Ensure backwards compatibility with $element.data('select2').
5135
5232
  $element.data('select2', this);
5136
5233
  };
5137
5234
 
@@ -5466,7 +5563,8 @@ S2.define('select2/core',[
5466
5563
  'open': 'opening',
5467
5564
  'close': 'closing',
5468
5565
  'select': 'selecting',
5469
- 'unselect': 'unselecting'
5566
+ 'unselect': 'unselecting',
5567
+ 'clear': 'clearing'
5470
5568
  };
5471
5569
 
5472
5570
  if (args === undefined) {
@@ -5621,10 +5719,12 @@ S2.define('select2/core',[
5621
5719
  this._syncS = null;
5622
5720
 
5623
5721
  this.$element.off('.select2');
5624
- this.$element.attr('tabindex', this.$element.data('old-tabindex'));
5722
+ this.$element.attr('tabindex',
5723
+ Utils.GetData(this.$element[0], 'old-tabindex'));
5625
5724
 
5626
5725
  this.$element.removeClass('select2-hidden-accessible');
5627
5726
  this.$element.attr('aria-hidden', 'false');
5727
+ Utils.RemoveData(this.$element[0]);
5628
5728
  this.$element.removeData('select2');
5629
5729
 
5630
5730
  this.dataAdapter.destroy();
@@ -5652,7 +5752,7 @@ S2.define('select2/core',[
5652
5752
 
5653
5753
  this.$container.addClass('select2-container--' + this.options.get('theme'));
5654
5754
 
5655
- $container.data('element', this.$element);
5755
+ Utils.StoreData($container[0], 'element', this.$element);
5656
5756
 
5657
5757
  return $container;
5658
5758
  };
@@ -5862,8 +5962,9 @@ S2.define('select2/compat/initSelection',[
5862
5962
  });
5863
5963
 
5864
5964
  S2.define('select2/compat/inputData',[
5865
- 'jquery'
5866
- ], function ($) {
5965
+ 'jquery',
5966
+ '../utils'
5967
+ ], function ($, Utils) {
5867
5968
  function InputData (decorated, $element, options) {
5868
5969
  this._currentData = [];
5869
5970
  this._valueSeparator = options.get('valueSeparator') || ',';
@@ -5980,7 +6081,7 @@ S2.define('select2/compat/inputData',[
5980
6081
 
5981
6082
  InputData.prototype.addOptions = function (_, $options) {
5982
6083
  var options = $.map($options, function ($option) {
5983
- return $.data($option[0], 'data');
6084
+ return Utils.GetData($option[0], 'data');
5984
6085
  });
5985
6086
 
5986
6087
  this._currentData.push.apply(this._currentData, options);
@@ -6383,8 +6484,9 @@ S2.define('jquery.select2',[
6383
6484
  'jquery-mousewheel',
6384
6485
 
6385
6486
  './select2/core',
6386
- './select2/defaults'
6387
- ], function ($, _, Select2, Defaults) {
6487
+ './select2/defaults',
6488
+ './select2/utils'
6489
+ ], function ($, _, Select2, Defaults, Utils) {
6388
6490
  if ($.fn.select2 == null) {
6389
6491
  // All methods that should return the element
6390
6492
  var thisMethods = ['open', 'close', 'destroy'];
@@ -6405,7 +6507,7 @@ S2.define('jquery.select2',[
6405
6507
  var args = Array.prototype.slice.call(arguments, 1);
6406
6508
 
6407
6509
  this.each(function () {
6408
- var instance = $(this).data('select2');
6510
+ var instance = Utils.GetData(this, 'select2');
6409
6511
 
6410
6512
  if (instance == null && window.console && console.error) {
6411
6513
  console.error(