select2-rails 3.5.5 → 3.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NTQ5NjljNGNiNmFjZjdiMmJhYmRjYzA5YzM1NGI2MDk1ZmJhMmVjNw==
4
+ ZjBiOTk1MWJlOTkyZmQ4MWE3OTQ3ZGFmMTYyMjA0NTY5MmIxNmU0NQ==
5
5
  data.tar.gz: !binary |-
6
- ODQ1M2Q1ZmFlZGY4ZDI2ZTI5NTlmNjM2Y2ZhOGI2NmYxNjJhNDBhOA==
6
+ MGU5OGUwYTUxMTY5YWU3OTkzMWYyNmFiZTdkM2JlMzA0ODZiMGQzYg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YzEwZDVkYzlkYmI1YThiMDMwMWI1NDBiOWM5MDY2ZGZlM2YzYzhhMGQ2Yjky
10
- NTk3ZTNhNzg1MWIyYzU1NDljMjVkN2EyNGZjMWRmMzczZGUyYTBjOGY0Y2Iz
11
- OTk3YmU0Y2YwMWMzNmYwZTdkYTJjYmUzZjMxYzA4MzE0Zjg1OTQ=
9
+ MjY0OWJlNmIzNTU0M2Q2MWE4MWE1YmIwMjYwODIzNWEyNjI5MGIwMzQ4ZGIy
10
+ NWUxMjM1MmUwMjYxODhjNWEyYzAyZWE5MzJmMDEyMzUzMDdhMzRhZjIwOThm
11
+ ZGMxYWJkNTI1NjgyMmI1ZDFlNDUyMzhhN2Y4MzM3M2E2YzM1OTI=
12
12
  data.tar.gz: !binary |-
13
- NGVlNDAwNzc1NTVlOTIxNzE2YzliMzZmMzUzNjY1MTQ2YWVjMmFkOGE5NjAx
14
- M2MzMTc2YTA3MGFjYzg5ODkzYWQ1Zjc2YWI1MzgzYzI2MWRjNDYzOWQ3YTBh
15
- MjZiMzgzM2Y0OWExMzI0ZWRlYzMyZjI0YTVkMzkzODgzYzYxZjI=
13
+ YjliNjcxYTI1MzdiYzI0MTgyMjJmNWVkMjg0NDRkYWY1YjE5MjE3NzI5ZjU1
14
+ ZTBlMTg5MjI3Y2RmYmIxNGM0MzE4MzIzM2YyYzgyYTQ0NTdlNDk0YTEwMjhm
15
+ YjNkMDZiN2VhZGY2ZWM1YWIxODAwM2RkMWI1OTA0MmI1OTA5MjA=
data/README.md CHANGED
@@ -40,7 +40,7 @@ Add the following to your `app/assets/javascripts/application.js`:
40
40
 
41
41
  Possible languages:
42
42
 
43
- ar, ca, cs, da, de, el, es, et, eu, fi, fr, gl, he, hr, hu, id, is, it, ja, ko, lt, lv, mk, ms, nl, no, pl, pt-BR, pt-PT, ro, rs, ru, sk, sv, tr, uk, vi, zh-CN, zh-TW
43
+ ar, ca, cs, da, de, el, es, et, eu, fi, fr, gl, he, hr, hu, id, is, it, ja, ka, ko, lt, lv, mk, ms, nl, no, pl, pt-BR, pt-PT, ro, rs, ru, sk, sv, tr, uk, vi, zh-CN, zh-TW
44
44
 
45
45
  ## Example
46
46
  Code [here](https://github.com/argerim/select_2_example)
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  Copyright 2012 Igor Vaynberg
3
3
 
4
- Version: 3.4.6 Timestamp: Sat Mar 22 22:30:15 EDT 2014
4
+ Version: 3.4.7 Timestamp: Wed Apr 30 19:28:03 EDT 2014
5
5
 
6
6
  This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
7
7
  General Public License version 2 (the "GPL License"). You may choose either license to govern your
@@ -114,16 +114,12 @@ the specific language governing permissions and limitations under the Apache Lic
114
114
  }
115
115
 
116
116
  function stripDiacritics(str) {
117
- var ret, i, l, c;
118
-
119
- if (!str || str.length < 1) return str;
120
-
121
- ret = "";
122
- for (i = 0, l = str.length; i < l; i++) {
123
- c = str.charAt(i);
124
- ret += DIACRITICS[c] || c;
117
+ // Used 'uni range + named function' from http://jsperf.com/diacritics/18
118
+ function match(a) {
119
+ return DIACRITICS[a] || a;
125
120
  }
126
- return ret;
121
+
122
+ return str.replace(/[^\u0000-\u007E]/g, match);
127
123
  }
128
124
 
129
125
  function indexOf(value, array) {
@@ -238,20 +234,6 @@ the specific language governing permissions and limitations under the Apache Lic
238
234
  };
239
235
  }
240
236
 
241
- /**
242
- * A simple implementation of a thunk
243
- * @param formula function used to lazily initialize the thunk
244
- * @return {Function}
245
- */
246
- function thunk(formula) {
247
- var evaluated = false,
248
- value;
249
- return function() {
250
- if (evaluated === false) { value = formula(); evaluated = true; }
251
- return value;
252
- };
253
- };
254
-
255
237
  function installDebouncedScroll(threshold, element) {
256
238
  var notify = debounce(threshold, function (e) { element.trigger("scroll-debounced", e);});
257
239
  element.on("scroll", function (e) {
@@ -473,7 +455,7 @@ the specific language governing permissions and limitations under the Apache Lic
473
455
  *
474
456
  * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys.
475
457
  *
476
- * If the object form is used ti is assumed that it contains 'data' and 'text' keys. The 'data' key should contain
458
+ * If the object form is used it is assumed that it contains 'data' and 'text' keys. The 'data' key should contain
477
459
  * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text'
478
460
  * key can either be a String in which case it is expected that each element in the 'data' array has a key with the
479
461
  * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract
@@ -542,14 +524,17 @@ the specific language governing permissions and limitations under the Apache Lic
542
524
  var isFunc = $.isFunction(data);
543
525
  return function (query) {
544
526
  var t = query.term, filtered = {results: []};
545
- $(isFunc ? data() : data).each(function () {
546
- var isObject = this.text !== undefined,
547
- text = isObject ? this.text : this;
548
- if (t === "" || query.matcher(t, text)) {
549
- filtered.results.push(isObject ? this : {id: this, text: this});
550
- }
551
- });
552
- query.callback(filtered);
527
+ var result = $(isFunc ? data(query) : data);
528
+ if ($.isArray(result)) {
529
+ $(isFunc ? data() : data).each(function () {
530
+ var isObject = this.text !== undefined,
531
+ text = isObject ? this.text : this;
532
+ if (t === "" || query.matcher(t, text)) {
533
+ filtered.results.push(isObject ? this : {id: this, text: this});
534
+ }
535
+ });
536
+ query.callback(filtered);
537
+ }
553
538
  };
554
539
  }
555
540
 
@@ -641,6 +626,15 @@ the specific language governing permissions and limitations under the Apache Lic
641
626
  if (original!==input) return input;
642
627
  }
643
628
 
629
+ function cleanupJQueryElements() {
630
+ var self = this;
631
+
632
+ Array.prototype.forEach.call(arguments, function (element) {
633
+ self[element].remove();
634
+ self[element] = null;
635
+ });
636
+ }
637
+
644
638
  /**
645
639
  * Creates a new class
646
640
  *
@@ -690,12 +684,15 @@ the specific language governing permissions and limitations under the Apache Lic
690
684
  .addClass("select2-hidden-accessible")
691
685
  .appendTo(document.body);
692
686
 
693
- this.containerId="s2id_"+(opts.element.attr("id") || "autogen"+nextUid()).replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
694
- this.containerSelector="#"+this.containerId;
687
+ this.containerId="s2id_"+(opts.element.attr("id") || "autogen"+nextUid());
688
+ this.containerEventName= this.containerId
689
+ .replace(/([.])/g, '_')
690
+ .replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
695
691
  this.container.attr("id", this.containerId);
696
692
 
697
- // cache the body so future lookups are cheap
698
- this.body = thunk(function() { return opts.element.closest("body"); });
693
+ this.container.attr("title", opts.element.attr("title"));
694
+
695
+ this.body = $("body");
699
696
 
700
697
  syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);
701
698
 
@@ -735,11 +732,24 @@ the specific language governing permissions and limitations under the Apache Lic
735
732
  this.container.on("click", killEvent);
736
733
 
737
734
  installFilteredMouseMove(this.results);
738
- this.dropdown.on("mousemove-filtered touchstart touchmove touchend", resultsSelector, this.bind(this.highlightUnderEvent));
739
- this.dropdown.on("touchend", resultsSelector, this.bind(this.selectHighlighted));
735
+
736
+ this.dropdown.on("mousemove-filtered", resultsSelector, this.bind(this.highlightUnderEvent));
737
+ this.dropdown.on("touchstart touchmove touchend", resultsSelector, this.bind(function (event) {
738
+ this._touchEvent = true;
739
+ this.highlightUnderEvent(event);
740
+ }));
740
741
  this.dropdown.on("touchmove", resultsSelector, this.bind(this.touchMoved));
741
742
  this.dropdown.on("touchstart touchend", resultsSelector, this.bind(this.clearTouchMoved));
742
743
 
744
+ // Waiting for a click event on touch devices to select option and hide dropdown
745
+ // otherwise click will be triggered on an underlying element
746
+ this.dropdown.on('click', this.bind(function (event) {
747
+ if (this._touchEvent) {
748
+ this._touchEvent = false;
749
+ this.selectHighlighted();
750
+ }
751
+ }));
752
+
743
753
  installDebouncedScroll(80, this.results);
744
754
  this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded));
745
755
 
@@ -777,7 +787,7 @@ the specific language governing permissions and limitations under the Apache Lic
777
787
  // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's
778
788
  // dom it will trigger the popup close, which is not what we want
779
789
  // focusin can cause focus wars between modals and select2 since the dropdown is outside the modal.
780
- this.dropdown.on("click mouseup mousedown focusin", function (e) { e.stopPropagation(); });
790
+ this.dropdown.on("click mouseup mousedown touchstart touchend focusin", function (e) { e.stopPropagation(); });
781
791
 
782
792
  this.nextSearchTerm = undefined;
783
793
 
@@ -818,7 +828,10 @@ the specific language governing permissions and limitations under the Apache Lic
818
828
 
819
829
  this.close();
820
830
 
821
- if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }
831
+ if (this.propertyObserver) {
832
+ this.propertyObserver.disconnect();
833
+ this.propertyObserver = null;
834
+ }
822
835
 
823
836
  if (select2 !== undefined) {
824
837
  select2.container.remove();
@@ -836,6 +849,14 @@ the specific language governing permissions and limitations under the Apache Lic
836
849
  }
837
850
  element.show();
838
851
  }
852
+
853
+ cleanupJQueryElements.call(this,
854
+ "container",
855
+ "liveRegion",
856
+ "dropdown",
857
+ "results",
858
+ "search"
859
+ );
839
860
  },
840
861
 
841
862
  // abstract
@@ -1068,21 +1089,20 @@ the specific language governing permissions and limitations under the Apache Lic
1068
1089
 
1069
1090
  });
1070
1091
 
1071
- // IE8-10
1072
- el.on("propertychange.select2", sync);
1073
-
1074
- // hold onto a reference of the callback to work around a chromium bug
1075
- if (this.mutationCallback === undefined) {
1076
- this.mutationCallback = function (mutations) {
1077
- mutations.forEach(sync);
1078
- }
1092
+ // IE8-10 (IE9/10 won't fire propertyChange via attachEventListener)
1093
+ if (el.length && el[0].attachEvent) {
1094
+ el.each(function() {
1095
+ this.attachEvent("onpropertychange", sync);
1096
+ });
1079
1097
  }
1080
-
1098
+
1081
1099
  // safari, chrome, firefox, IE11
1082
1100
  observer = window.MutationObserver || window.WebKitMutationObserver|| window.MozMutationObserver;
1083
1101
  if (observer !== undefined) {
1084
1102
  if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }
1085
- this.propertyObserver = new observer(this.mutationCallback);
1103
+ this.propertyObserver = new observer(function (mutations) {
1104
+ mutations.forEach(sync);
1105
+ });
1086
1106
  this.propertyObserver.observe(el.get(0), { attributes:true, subtree:false });
1087
1107
  }
1088
1108
  },
@@ -1221,6 +1241,9 @@ the specific language governing permissions and limitations under the Apache Lic
1221
1241
  dropWidth = $dropdown.outerWidth(false);
1222
1242
  enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;
1223
1243
  $dropdown.show();
1244
+
1245
+ // fix so the cursor does not move to the left within the search-textbox in IE
1246
+ this.focusSearch();
1224
1247
  }
1225
1248
 
1226
1249
  if (this.opts.dropdownAutoWidth) {
@@ -1230,6 +1253,7 @@ the specific language governing permissions and limitations under the Apache Lic
1230
1253
  // Add scrollbar width to dropdown if vertical scrollbar is present
1231
1254
  dropWidth = $dropdown.outerWidth(false) + (resultsListNode.scrollHeight === resultsListNode.clientHeight ? 0 : scrollBarDimensions.width);
1232
1255
  dropWidth > width ? width = dropWidth : dropWidth = width;
1256
+ dropHeight = $dropdown.outerHeight(false);
1233
1257
  enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;
1234
1258
  }
1235
1259
  else {
@@ -1237,11 +1261,11 @@ the specific language governing permissions and limitations under the Apache Lic
1237
1261
  }
1238
1262
 
1239
1263
  //console.log("below/ droptop:", dropTop, "dropHeight", dropHeight, "sum", (dropTop+dropHeight)+" viewport bottom", viewportBottom, "enough?", enoughRoomBelow);
1240
- //console.log("above/ offset.top", offset.top, "dropHeight", dropHeight, "top", (offset.top-dropHeight), "scrollTop", this.body().scrollTop(), "enough?", enoughRoomAbove);
1264
+ //console.log("above/ offset.top", offset.top, "dropHeight", dropHeight, "top", (offset.top-dropHeight), "scrollTop", this.body.scrollTop(), "enough?", enoughRoomAbove);
1241
1265
 
1242
1266
  // fix positioning when body has an offset and is not position: static
1243
- if (this.body().css('position') !== 'static') {
1244
- bodyOffset = this.body().offset();
1267
+ if (this.body.css('position') !== 'static') {
1268
+ bodyOffset = this.body.offset();
1245
1269
  dropTop -= bodyOffset.top;
1246
1270
  dropLeft -= bodyOffset.left;
1247
1271
  }
@@ -1313,7 +1337,7 @@ the specific language governing permissions and limitations under the Apache Lic
1313
1337
  */
1314
1338
  // abstract
1315
1339
  opening: function() {
1316
- var cid = this.containerId,
1340
+ var cid = this.containerEventName,
1317
1341
  scroll = "scroll." + cid,
1318
1342
  resize = "resize."+cid,
1319
1343
  orient = "orientationchange."+cid,
@@ -1323,8 +1347,8 @@ the specific language governing permissions and limitations under the Apache Lic
1323
1347
 
1324
1348
  this.clearDropdownAlignmentPreference();
1325
1349
 
1326
- if(this.dropdown[0] !== this.body().children().last()[0]) {
1327
- this.dropdown.detach().appendTo(this.body());
1350
+ if(this.dropdown[0] !== this.body.children().last()[0]) {
1351
+ this.dropdown.detach().appendTo(this.body);
1328
1352
  }
1329
1353
 
1330
1354
  // create the dropdown mask if doesn't already exist
@@ -1333,7 +1357,7 @@ the specific language governing permissions and limitations under the Apache Lic
1333
1357
  mask = $(document.createElement("div"));
1334
1358
  mask.attr("id","select2-drop-mask").attr("class","select2-drop-mask");
1335
1359
  mask.hide();
1336
- mask.appendTo(this.body());
1360
+ mask.appendTo(this.body);
1337
1361
  mask.on("mousedown touchstart click", function (e) {
1338
1362
  // Prevent IE from generating a click event on the body
1339
1363
  reinsertElement(mask);
@@ -1374,7 +1398,7 @@ the specific language governing permissions and limitations under the Apache Lic
1374
1398
  var that = this;
1375
1399
  this.container.parents().add(window).each(function () {
1376
1400
  $(this).on(resize+" "+scroll+" "+orient, function (e) {
1377
- that.positionDropdown();
1401
+ if (that.opened()) that.positionDropdown();
1378
1402
  });
1379
1403
  });
1380
1404
 
@@ -1385,7 +1409,7 @@ the specific language governing permissions and limitations under the Apache Lic
1385
1409
  close: function () {
1386
1410
  if (!this.opened()) return;
1387
1411
 
1388
- var cid = this.containerId,
1412
+ var cid = this.containerEventName,
1389
1413
  scroll = "scroll." + cid,
1390
1414
  resize = "resize."+cid,
1391
1415
  orient = "orientationchange."+cid;
@@ -1806,7 +1830,7 @@ the specific language governing permissions and limitations under the Apache Lic
1806
1830
  //Determine the placeholder option based on the specified placeholderOption setting
1807
1831
  return (this.opts.placeholderOption === "first" && firstOption) ||
1808
1832
  (typeof this.opts.placeholderOption === "function" && this.opts.placeholderOption(this.select));
1809
- } else if (firstOption.text() === "" && firstOption.val() === "") {
1833
+ } else if ($.trim(firstOption.text()) === "" && firstOption.val() === "") {
1810
1834
  //No explicit placeholder option specified, use the first if it's blank
1811
1835
  return firstOption;
1812
1836
  }
@@ -1875,7 +1899,7 @@ the specific language governing permissions and limitations under the Apache Lic
1875
1899
  "class": "select2-container"
1876
1900
  }).html([
1877
1901
  "<a href='javascript:void(0)' class='select2-choice' tabindex='-1'>",
1878
- " <span class='select2-chosen'>&nbsp;</span><abbr class='select2-search-choice-close'></abbr>",
1902
+ " <span class='select2-chosen'>&#160;</span><abbr class='select2-search-choice-close'></abbr>",
1879
1903
  " <span class='select2-arrow' role='presentation'><b role='presentation'></b></span>",
1880
1904
  "</a>",
1881
1905
  "<label for='' class='select2-offscreen'></label>",
@@ -1915,17 +1939,19 @@ the specific language governing permissions and limitations under the Apache Lic
1915
1939
 
1916
1940
  this.search.val(this.focusser.val());
1917
1941
  }
1918
- this.search.focus();
1919
- // move the cursor to the end after focussing, otherwise it will be at the beginning and
1920
- // new text will appear *before* focusser.val()
1921
- el = this.search.get(0);
1922
- if (el.createTextRange) {
1923
- range = el.createTextRange();
1924
- range.collapse(false);
1925
- range.select();
1926
- } else if (el.setSelectionRange) {
1927
- len = this.search.val().length;
1928
- el.setSelectionRange(len, len);
1942
+ if (this.opts.shouldFocusInput(this)) {
1943
+ this.search.focus();
1944
+ // move the cursor to the end after focussing, otherwise it will be at the beginning and
1945
+ // new text will appear *before* focusser.val()
1946
+ el = this.search.get(0);
1947
+ if (el.createTextRange) {
1948
+ range = el.createTextRange();
1949
+ range.collapse(false);
1950
+ range.select();
1951
+ } else if (el.setSelectionRange) {
1952
+ len = this.search.val().length;
1953
+ el.setSelectionRange(len, len);
1954
+ }
1929
1955
  }
1930
1956
 
1931
1957
  // initializes search's value with nextSearchTerm (if defined by user)
@@ -1986,6 +2012,11 @@ the specific language governing permissions and limitations under the Apache Lic
1986
2012
  $("label[for='" + this.focusser.attr('id') + "']")
1987
2013
  .attr('for', this.opts.element.attr("id"));
1988
2014
  this.parent.destroy.apply(this, arguments);
2015
+
2016
+ cleanupJQueryElements.call(this,
2017
+ "selection",
2018
+ "focusser"
2019
+ );
1989
2020
  },
1990
2021
 
1991
2022
  // single
@@ -2067,7 +2098,7 @@ the specific language governing permissions and limitations under the Apache Lic
2067
2098
  this.search.on("blur", this.bind(function(e) {
2068
2099
  // a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown.
2069
2100
  // without this the search field loses focus which is annoying
2070
- if (document.activeElement === this.body().get(0)) {
2101
+ if (document.activeElement === this.body.get(0)) {
2071
2102
  window.setTimeout(this.bind(function() {
2072
2103
  if (this.opened()) {
2073
2104
  this.search.focus();
@@ -2142,7 +2173,11 @@ the specific language governing permissions and limitations under the Apache Lic
2142
2173
  killEvent(e);
2143
2174
  }));
2144
2175
 
2145
- dropdown.on("mousedown touchstart", this.bind(function() { this.search.focus(); }));
2176
+ dropdown.on("mousedown touchstart", this.bind(function() {
2177
+ if (this.opts.shouldFocusInput(this)) {
2178
+ this.search.focus();
2179
+ }
2180
+ }));
2146
2181
 
2147
2182
  selection.on("focus", this.bind(function(e) {
2148
2183
  killEvent(e);
@@ -2219,7 +2254,7 @@ the specific language governing permissions and limitations under the Apache Lic
2219
2254
 
2220
2255
  isPlaceholderOptionSelected: function() {
2221
2256
  var placeholderOption;
2222
- if (!this.getPlaceholder()) return false; // no placeholder specified so no option should be considered
2257
+ if (this.getPlaceholder() === undefined) return false; // no placeholder specified so no option should be considered
2223
2258
  return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.prop("selected"))
2224
2259
  || (this.opts.element.val() === "")
2225
2260
  || (this.opts.element.val() === undefined)
@@ -2572,6 +2607,11 @@ the specific language governing permissions and limitations under the Apache Lic
2572
2607
  $("label[for='" + this.search.attr('id') + "']")
2573
2608
  .attr('for', this.opts.element.attr("id"));
2574
2609
  this.parent.destroy.apply(this, arguments);
2610
+
2611
+ cleanupJQueryElements.call(this,
2612
+ "searchContainer",
2613
+ "selection"
2614
+ );
2575
2615
  },
2576
2616
 
2577
2617
  // multi
@@ -2821,7 +2861,9 @@ the specific language governing permissions and limitations under the Apache Lic
2821
2861
  }
2822
2862
 
2823
2863
  this.updateResults(true);
2824
- this.search.focus();
2864
+ if (this.opts.shouldFocusInput(this)) {
2865
+ this.search.focus();
2866
+ }
2825
2867
  this.opts.element.trigger($.Event("select2-open"));
2826
2868
  },
2827
2869
 
@@ -3298,7 +3340,7 @@ the specific language governing permissions and limitations under the Apache Lic
3298
3340
  value = select2[method].apply(select2, args.slice(1));
3299
3341
  }
3300
3342
  if (indexOf(args[0], valueMethods) >= 0
3301
- || (indexOf(args[0], propertyMethods) && args.length == 1)) {
3343
+ || (indexOf(args[0], propertyMethods) >= 0 && args.length == 1)) {
3302
3344
  return false; // abort the iteration, ready to return first matched value
3303
3345
  }
3304
3346
  } else {
@@ -3358,6 +3400,15 @@ the specific language governing permissions and limitations under the Apache Lic
3358
3400
  searchInputPlaceholder: '',
3359
3401
  createSearchChoicePosition: 'top',
3360
3402
  shouldFocusInput: function (instance) {
3403
+ // Attempt to detect touch devices
3404
+ var supportsTouchEvents = (('ontouchstart' in window) ||
3405
+ (navigator.msMaxTouchPoints > 0));
3406
+
3407
+ // Only devices which support touch events should be special cased
3408
+ if (!supportsTouchEvents) {
3409
+ return true;
3410
+ }
3411
+
3361
3412
  // Never focus the input if search is disabled
3362
3413
  if (instance.opts.minimumResultsForSearch < 0) {
3363
3414
  return false;
@@ -1,4 +1,4 @@
1
- /**
1
+ /**
2
2
  * Select2 Arabic translation.
3
3
  *
4
4
  * Author: Adel KEDJOUR <adel@kedjour.com>
@@ -8,8 +8,8 @@
8
8
 
9
9
  $.extend($.fn.select2.defaults, {
10
10
  formatNoMatches: function () { return "لم يتم العثور على مطابقات"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; if (n == 1){ return "الرجاء إدخال حرف واحد على الأكثر"; } return n == 2 ? "الرجاء إدخال حرفين على الأكثر" : "الجاء إدخال " + n + " على الأكثر"; },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; if (n == 1){ return "الرجاء إدخال حرف واحد على الأقل"; } return n == 2 ? "الرجاء إدخال حرفين على الأقل" : "الجاء إدخال " + n + " على الأقل "; },
11
+ formatInputTooShort: function (input, min) { var n = min - input.length; if (n == 1){ return "الرجاء إدخال حرف واحد على الأكثر"; } return n == 2 ? "الرجاء إدخال حرفين على الأكثر" : "الرجاء إدخال " + n + " على الأكثر"; },
12
+ formatInputTooLong: function (input, max) { var n = input.length - max; if (n == 1){ return "الرجاء إدخال حرف واحد على الأقل"; } return n == 2 ? "الرجاء إدخال حرفين على الأقل" : "الرجاء إدخال " + n + " على الأقل "; },
13
13
  formatSelectionTooBig: function (limit) { if (n == 1){ return "يمكنك أن تختار إختيار واحد فقط"; } return n == 2 ? "يمكنك أن تختار إختيارين فقط" : "يمكنك أن تختار " + n + " إختيارات فقط"; },
14
14
  formatLoadMore: function (pageNumber) { return "تحميل المزيد من النتائج…"; },
15
15
  formatSearching: function () { return "البحث…"; }
@@ -5,9 +5,10 @@
5
5
  "use strict";
6
6
 
7
7
  $.extend($.fn.select2.defaults, {
8
+ formatMatches: function (matches) { return matches + " résultats sont disponibles, utilisez les flèches haut et bas pour naviguer."; },
8
9
  formatNoMatches: function () { return "Aucun résultat trouvé"; },
9
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Merci de saisir " + n + " caractère" + (n == 1? "" : "s") + " de plus"; },
10
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Merci de supprimer " + n + " caractère" + (n == 1? "" : "s"); },
10
+ formatInputTooShort: function (input, min) { var n = min - input.length; return "Merci de saisir " + n + " caractère" + (n == 1 ? "" : "s") + " de plus"; },
11
+ formatInputTooLong: function (input, max) { var n = input.length - max; return "Merci de supprimer " + n + " caractère" + (n == 1 ? "" : "s"); },
11
12
  formatSelectionTooBig: function (limit) { return "Vous pouvez seulement sélectionner " + limit + " élément" + (limit == 1 ? "" : "s"); },
12
13
  formatLoadMore: function (pageNumber) { return "Chargement de résultats supplémentaires…"; },
13
14
  formatSearching: function () { return "Recherche en cours…"; }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Select2 Georgian (Kartuli) translation.
3
+ *
4
+ * Author: Dimitri Kurashvili dimakura@gmail.com
5
+ */
6
+ (function ($) {
7
+ "use strict";
8
+
9
+ $.extend($.fn.select2.defaults, {
10
+ formatNoMatches: function () { return "ვერ მოიძებნა"; },
11
+ formatInputTooShort: function (input, min) { var n = min - input.length; return "გთხოვთ შეიყვანოთ კიდევ " + n + " სიმბოლო"; },
12
+ formatInputTooLong: function (input, max) { var n = input.length - max; return "გთხოვთ წაშალოთ " + n + " სიმბოლო"; },
13
+ formatSelectionTooBig: function (limit) { return "თქვენ შეგიძლიათ მხოლოდ " + limit + " ჩანაწერის მონიშვნა"; },
14
+ formatLoadMore: function (pageNumber) { return "შედეგის ჩატვირთვა…"; },
15
+ formatSearching: function () { return "ძებნა…"; }
16
+ });
17
+ })(jQuery);
@@ -6,8 +6,8 @@
6
6
 
7
7
  $.extend($.fn.select2.defaults, {
8
8
  formatNoMatches: function () { return "Nenhum resultado encontrado"; },
9
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Informe " + n + " caractere" + (n == 1? "" : "s"); },
10
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " caractere" + (n == 1? "" : "s"); },
9
+ formatInputTooShort: function (input, min) { var n = min - input.length; return "Digite mais " + n + " caracter" + (n == 1? "" : "es"); },
10
+ formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " caracter" + (n == 1? "" : "es"); },
11
11
  formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
12
12
  formatLoadMore: function (pageNumber) { return "Carregando mais resultados…"; },
13
13
  formatSearching: function () { return "Buscando…"; }
@@ -8,15 +8,16 @@
8
8
  "use strict";
9
9
 
10
10
  $.extend($.fn.select2.defaults, {
11
+ formatMatches: function (matches) { return character(matches, "результат") + " знайдено, використовуйте клавіші зі стрілками вверх та вниз для навігації."; },
11
12
  formatNoMatches: function () { return "Нічого не знайдено"; },
12
- formatInputTooShort: function (input, min) { return "Введіть буль ласка ще" + character(min - input.length, "символ"); },
13
- formatInputTooLong: function (input, max) { return "Введіть буль ласка на" + character(input.length - max, "символ") + " менше"; },
14
- formatSelectionTooBig: function (limit) { return "Ви можете вибрати лише" + character(limit, "елемент"); },
13
+ formatInputTooShort: function (input, min) { return "Введіть буль ласка ще " + character(min - input.length, "символ"); },
14
+ formatInputTooLong: function (input, max) { return "Введіть буль ласка на " + character(input.length - max, "символ") + " менше"; },
15
+ formatSelectionTooBig: function (limit) { return "Ви можете вибрати лише " + character(limit, "елемент"); },
15
16
  formatLoadMore: function (pageNumber) { return "Завантаження даних…"; },
16
17
  formatSearching: function () { return "Пошук…"; }
17
18
  });
18
19
 
19
20
  function character (n, word) {
20
- return " " + n + " " + word + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "и" : "" : "ів");
21
+ return n + " " + word + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "и" : "" : "ів");
21
22
  }
22
23
  })(jQuery);
@@ -2,7 +2,7 @@
2
2
  //= depend_on_asset "select2-spinner.gif"
3
3
  //= depend_on_asset "select2x2.png"
4
4
  /*
5
- Version: 3.4.6 Timestamp: Sat Mar 22 22:30:15 EDT 2014
5
+ Version: 3.4.7 Timestamp: Wed Apr 30 19:28:03 EDT 2014
6
6
  */
7
7
  .select2-container {
8
8
  margin: 0;
@@ -329,14 +329,6 @@ Version: 3.4.6 Timestamp: Sat Mar 22 22:30:15 EDT 2014
329
329
  padding-left: 0;
330
330
  }
331
331
 
332
- .select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px }
333
- .select2-results ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 40px }
334
- .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 60px }
335
- .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 80px }
336
- .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 100px }
337
- .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 110px }
338
- .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px }
339
-
340
332
  .select2-results li {
341
333
  list-style: none;
342
334
  display: list-item;
@@ -361,6 +353,14 @@ Version: 3.4.6 Timestamp: Sat Mar 22 22:30:15 EDT 2014
361
353
  user-select: none;
362
354
  }
363
355
 
356
+ .select2-results-dept-1 .select2-result-label { padding-left: 20px }
357
+ .select2-results-dept-2 .select2-result-label { padding-left: 40px }
358
+ .select2-results-dept-3 .select2-result-label { padding-left: 60px }
359
+ .select2-results-dept-4 .select2-result-label { padding-left: 80px }
360
+ .select2-results-dept-5 .select2-result-label { padding-left: 100px }
361
+ .select2-results-dept-6 .select2-result-label { padding-left: 110px }
362
+ .select2-results-dept-7 .select2-result-label { padding-left: 120px }
363
+
364
364
  .select2-results .select2-highlighted {
365
365
  background: #3875d7;
366
366
  color: #fff;
@@ -47,7 +47,7 @@ class SourceFile < Thor
47
47
  end
48
48
  def languages
49
49
  [ "ar", "bg", "ca", "cs", "da", "de", "el", "es", "et", "eu", "fa", "fi", "fr", "gl", "he", "hr",
50
- "hu", "id", "is", "it", "ja", "ko", "lt", "lv", "mk", "ms", "nl", "no", "pl", "pt-BR",
50
+ "hu", "id", "is", "it", "ja", "ka", "ko", "lt", "lv", "mk", "ms", "nl", "no", "pl", "pt-BR",
51
51
  "pt-PT", "ro", "rs", "ru", "sk", "sv", "th", "tr", "uk", "vi", "zh-CN", "zh-TW"
52
52
  ].sort
53
53
  end
@@ -1,5 +1,5 @@
1
1
  module Select2
2
2
  module Rails
3
- VERSION = "3.5.5"
3
+ VERSION = "3.5.6"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: select2-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.5
4
+ version: 3.5.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rogerio Medeiros
@@ -106,6 +106,7 @@ files:
106
106
  - app/assets/javascripts/select2_locale_is.js
107
107
  - app/assets/javascripts/select2_locale_it.js
108
108
  - app/assets/javascripts/select2_locale_ja.js
109
+ - app/assets/javascripts/select2_locale_ka.js
109
110
  - app/assets/javascripts/select2_locale_ko.js
110
111
  - app/assets/javascripts/select2_locale_lt.js
111
112
  - app/assets/javascripts/select2_locale_lv.js