select2-rails 3.5.0 → 3.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  Copyright 2012 Igor Vaynberg
3
3
 
4
- Version: 3.4.3 Timestamp: Tue Sep 17 06:47:14 PDT 2013
4
+ Version: 3.4.4 Timestamp: Thu Oct 24 13:23:11 PDT 2013
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
@@ -349,7 +349,7 @@ the specific language governing permissions and limitations under the Apache Lic
349
349
  if (this.indexOf("select2-") !== 0) {
350
350
  adapted = adapter(this);
351
351
  if (adapted) {
352
- replacements.push(this);
352
+ replacements.push(adapted);
353
353
  }
354
354
  }
355
355
  });
@@ -654,7 +654,7 @@ the specific language governing permissions and limitations under the Apache Lic
654
654
 
655
655
  // abstract
656
656
  init: function (opts) {
657
- var results, search, resultsSelector = ".select2-results", disabled, readonly;
657
+ var results, search, resultsSelector = ".select2-results";
658
658
 
659
659
  // prepare options
660
660
  this.opts = opts = this.prepareOpts(opts);
@@ -726,7 +726,7 @@ the specific language governing permissions and limitations under the Apache Lic
726
726
  // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel
727
727
  if ($.fn.mousewheel) {
728
728
  results.mousewheel(function (e, delta, deltaX, deltaY) {
729
- var top = results.scrollTop(), height;
729
+ var top = results.scrollTop();
730
730
  if (deltaY > 0 && top - deltaY <= 0) {
731
731
  results.scrollTop(0);
732
732
  killEvent(e);
@@ -852,7 +852,7 @@ the specific language governing permissions and limitations under the Apache Lic
852
852
 
853
853
  opts = $.extend({}, {
854
854
  populateResults: function(container, results, query) {
855
- var populate, data, result, children, id=this.opts.id;
855
+ var populate, id=this.opts.id;
856
856
 
857
857
  populate=function(results, container, depth) {
858
858
 
@@ -999,7 +999,7 @@ the specific language governing permissions and limitations under the Apache Lic
999
999
  */
1000
1000
  // abstract
1001
1001
  monitorSource: function () {
1002
- var el = this.opts.element, sync;
1002
+ var el = this.opts.element, sync, observer;
1003
1003
 
1004
1004
  el.on("change.select2", this.bind(function (e) {
1005
1005
  if (this.opts.element.data("select2-change-triggered") !== true) {
@@ -1009,8 +1009,6 @@ the specific language governing permissions and limitations under the Apache Lic
1009
1009
 
1010
1010
  sync = this.bind(function () {
1011
1011
 
1012
- var enabled, readonly, self = this;
1013
-
1014
1012
  // sync enabled state
1015
1013
  var disabled = el.prop("disabled");
1016
1014
  if (disabled === undefined) disabled = false;
@@ -1028,9 +1026,8 @@ the specific language governing permissions and limitations under the Apache Lic
1028
1026
 
1029
1027
  });
1030
1028
 
1031
- // mozilla and IE
1032
- el.on("propertychange.select2 DOMAttrModified.select2", sync);
1033
-
1029
+ // IE8-10
1030
+ el.on("propertychange.select2", sync);
1034
1031
 
1035
1032
  // hold onto a reference of the callback to work around a chromium bug
1036
1033
  if (this.mutationCallback === undefined) {
@@ -1039,10 +1036,11 @@ the specific language governing permissions and limitations under the Apache Lic
1039
1036
  }
1040
1037
  }
1041
1038
 
1042
- // safari and chrome
1043
- if (typeof WebKitMutationObserver !== "undefined") {
1039
+ // safari, chrome, firefox, IE11
1040
+ observer = window.MutationObserver || window.WebKitMutationObserver|| window.MozMutationObserver;
1041
+ if (observer !== undefined) {
1044
1042
  if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }
1045
- this.propertyObserver = new WebKitMutationObserver(this.mutationCallback);
1043
+ this.propertyObserver = new observer(this.mutationCallback);
1046
1044
  this.propertyObserver.observe(el.get(0), { attributes:true, subtree:false });
1047
1045
  }
1048
1046
  },
@@ -1135,8 +1133,11 @@ the specific language governing permissions and limitations under the Apache Lic
1135
1133
  height = this.container.outerHeight(false),
1136
1134
  width = this.container.outerWidth(false),
1137
1135
  dropHeight = $dropdown.outerHeight(false),
1138
- viewPortRight = $(window).scrollLeft() + $(window).width(),
1139
- viewportBottom = $(window).scrollTop() + $(window).height(),
1136
+ $window = $(window),
1137
+ windowWidth = $window.width(),
1138
+ windowHeight = $window.height(),
1139
+ viewPortRight = $window.scrollLeft() + windowWidth,
1140
+ viewportBottom = $window.scrollTop() + windowHeight,
1140
1141
  dropTop = offset.top + height,
1141
1142
  dropLeft = offset.left,
1142
1143
  enoughRoomBelow = dropTop + dropHeight <= viewportBottom,
@@ -1146,9 +1147,41 @@ the specific language governing permissions and limitations under the Apache Lic
1146
1147
  aboveNow = $dropdown.hasClass("select2-drop-above"),
1147
1148
  bodyOffset,
1148
1149
  above,
1150
+ changeDirection,
1149
1151
  css,
1150
1152
  resultsListNode;
1151
1153
 
1154
+ // always prefer the current above/below alignment, unless there is not enough room
1155
+ if (aboveNow) {
1156
+ above = true;
1157
+ if (!enoughRoomAbove && enoughRoomBelow) {
1158
+ changeDirection = true;
1159
+ above = false;
1160
+ }
1161
+ } else {
1162
+ above = false;
1163
+ if (!enoughRoomBelow && enoughRoomAbove) {
1164
+ changeDirection = true;
1165
+ above = true;
1166
+ }
1167
+ }
1168
+
1169
+ //if we are changing direction we need to get positions when dropdown is hidden;
1170
+ if (changeDirection) {
1171
+ $dropdown.hide();
1172
+ offset = this.container.offset();
1173
+ height = this.container.outerHeight(false);
1174
+ width = this.container.outerWidth(false);
1175
+ dropHeight = $dropdown.outerHeight(false);
1176
+ viewPortRight = $window.scrollLeft() + windowWidth;
1177
+ viewportBottom = $window.scrollTop() + windowHeight;
1178
+ dropTop = offset.top + height;
1179
+ dropLeft = offset.left;
1180
+ dropWidth = $dropdown.outerWidth(false);
1181
+ enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;
1182
+ $dropdown.show();
1183
+ }
1184
+
1152
1185
  if (this.opts.dropdownAutoWidth) {
1153
1186
  resultsListNode = $('.select2-results', $dropdown)[0];
1154
1187
  $dropdown.addClass('select2-drop-auto-width');
@@ -1172,34 +1205,28 @@ the specific language governing permissions and limitations under the Apache Lic
1172
1205
  dropLeft -= bodyOffset.left;
1173
1206
  }
1174
1207
 
1175
- // always prefer the current above/below alignment, unless there is not enough room
1176
- if (aboveNow) {
1177
- above = true;
1178
- if (!enoughRoomAbove && enoughRoomBelow) above = false;
1179
- } else {
1180
- above = false;
1181
- if (!enoughRoomBelow && enoughRoomAbove) above = true;
1182
- }
1183
-
1184
1208
  if (!enoughRoomOnRight) {
1185
1209
  dropLeft = offset.left + width - dropWidth;
1186
1210
  }
1187
1211
 
1212
+ css = {
1213
+ left: dropLeft,
1214
+ width: width
1215
+ };
1216
+
1188
1217
  if (above) {
1189
- dropTop = offset.top - dropHeight;
1218
+ css.bottom = windowHeight - offset.top;
1219
+ css.top = 'auto';
1190
1220
  this.container.addClass("select2-drop-above");
1191
1221
  $dropdown.addClass("select2-drop-above");
1192
1222
  }
1193
1223
  else {
1224
+ css.top = dropTop;
1225
+ css.bottom = 'auto';
1194
1226
  this.container.removeClass("select2-drop-above");
1195
1227
  $dropdown.removeClass("select2-drop-above");
1196
1228
  }
1197
-
1198
- css = $.extend({
1199
- top: dropTop,
1200
- left: dropLeft,
1201
- width: width
1202
- }, evaluate(this.opts.dropdownCss));
1229
+ css = $.extend(css, evaluate(this.opts.dropdownCss));
1203
1230
 
1204
1231
  $dropdown.css(css);
1205
1232
  },
@@ -1249,7 +1276,7 @@ the specific language governing permissions and limitations under the Apache Lic
1249
1276
  scroll = "scroll." + cid,
1250
1277
  resize = "resize."+cid,
1251
1278
  orient = "orientationchange."+cid,
1252
- mask, maskCss;
1279
+ mask;
1253
1280
 
1254
1281
  this.container.addClass("select2-dropdown-open").addClass("select2-container-active");
1255
1282
 
@@ -1273,7 +1300,7 @@ the specific language governing permissions and limitations under the Apache Lic
1273
1300
  if (self.opts.selectOnBlur) {
1274
1301
  self.selectHighlighted({noFocus: true});
1275
1302
  }
1276
- self.close({focus:false});
1303
+ self.close({focus:true});
1277
1304
  e.preventDefault();
1278
1305
  e.stopPropagation();
1279
1306
  }
@@ -1402,7 +1429,7 @@ the specific language governing permissions and limitations under the Apache Lic
1402
1429
 
1403
1430
  // abstract
1404
1431
  findHighlightableChoices: function() {
1405
- return this.results.find(".select2-result-selectable:not(.select2-disabled)");
1432
+ return this.results.find(".select2-result-selectable:not(.select2-disabled, .select2-selected)");
1406
1433
  },
1407
1434
 
1408
1435
  // abstract
@@ -1472,7 +1499,6 @@ the specific language governing permissions and limitations under the Apache Lic
1472
1499
  var results = this.results,
1473
1500
  more = results.find("li.select2-more-results"),
1474
1501
  below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible
1475
- offset = -1, // index of first element without data
1476
1502
  page = this.resultsPage + 1,
1477
1503
  self=this,
1478
1504
  term=this.search.val(),
@@ -1708,7 +1734,7 @@ the specific language governing permissions and limitations under the Apache Lic
1708
1734
  // abstract
1709
1735
  getPlaceholderOption: function() {
1710
1736
  if (this.select) {
1711
- var firstOption = this.select.children().first();
1737
+ var firstOption = this.select.children('option').first();
1712
1738
  if (this.opts.placeholderOption !== undefined ) {
1713
1739
  //Determine the placeholder option based on the specified placeholderOption setting
1714
1740
  return (this.opts.placeholderOption === "first" && firstOption) ||
@@ -1729,7 +1755,7 @@ the specific language governing permissions and limitations under the Apache Lic
1729
1755
  // abstract
1730
1756
  initContainerWidth: function () {
1731
1757
  function resolveContainerWidth() {
1732
- var style, attrs, matches, i, l;
1758
+ var style, attrs, matches, i, l, attr;
1733
1759
 
1734
1760
  if (this.opts.width === "off") {
1735
1761
  return null;
@@ -1741,8 +1767,8 @@ the specific language governing permissions and limitations under the Apache Lic
1741
1767
  if (style !== undefined) {
1742
1768
  attrs = style.split(';');
1743
1769
  for (i = 0, l = attrs.length; i < l; i = i + 1) {
1744
- matches = attrs[i].replace(/\s/g, '')
1745
- .match(/[^-]width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i);
1770
+ attr = attrs[i].replace(/\s/g, '');
1771
+ matches = attr.match(/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i);
1746
1772
  if (matches !== null && matches.length >= 1)
1747
1773
  return matches[1];
1748
1774
  }
@@ -2093,7 +2119,7 @@ the specific language governing permissions and limitations under the Apache Lic
2093
2119
  isPlaceholderOptionSelected: function() {
2094
2120
  var placeholderOption;
2095
2121
  if (!this.getPlaceholder()) return false; // no placeholder specified so no option should be considered
2096
- return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.is(':selected'))
2122
+ return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.prop("selected"))
2097
2123
  || (this.opts.element.val() === "")
2098
2124
  || (this.opts.element.val() === undefined)
2099
2125
  || (this.opts.element.val() === null);
@@ -2107,7 +2133,7 @@ the specific language governing permissions and limitations under the Apache Lic
2107
2133
  if (opts.element.get(0).tagName.toLowerCase() === "select") {
2108
2134
  // install the selection initializer
2109
2135
  opts.initSelection = function (element, callback) {
2110
- var selected = element.find(":selected");
2136
+ var selected = element.find("option").filter(function() { return this.selected });
2111
2137
  // a single select box always has a value, no need to null check 'selected'
2112
2138
  callback(self.optionToData(selected));
2113
2139
  };
@@ -2277,7 +2303,7 @@ the specific language governing permissions and limitations under the Apache Lic
2277
2303
  if (this.select) {
2278
2304
  this.select
2279
2305
  .val(val)
2280
- .find(":selected").each2(function (i, elm) {
2306
+ .find("option").filter(function() { return this.selected }).each2(function (i, elm) {
2281
2307
  data = self.optionToData(elm);
2282
2308
  return false;
2283
2309
  });
@@ -2372,7 +2398,7 @@ the specific language governing permissions and limitations under the Apache Lic
2372
2398
 
2373
2399
  var data = [];
2374
2400
 
2375
- element.find(":selected").each2(function (i, elm) {
2401
+ element.find("option").filter(function() { return this.selected }).each2(function (i, elm) {
2376
2402
  data.push(self.optionToData(elm));
2377
2403
  });
2378
2404
  callback(data);
@@ -2853,9 +2879,17 @@ the specific language governing permissions and limitations under the Apache Lic
2853
2879
  this.setVal(val);
2854
2880
  if (this.select) this.postprocessResults();
2855
2881
  }
2856
- selected.remove();
2857
2882
 
2858
- this.opts.element.trigger({ type: "removed", val: this.id(data), choice: data });
2883
+ var evt = $.Event("select2-removing");
2884
+ evt.val = this.id(data);
2885
+ evt.choice = data;
2886
+ this.opts.element.trigger(evt);
2887
+
2888
+ if (evt.isDefaultPrevented()) {
2889
+ return;
2890
+ }
2891
+
2892
+ this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data });
2859
2893
  this.triggerChange({ removed: data });
2860
2894
  },
2861
2895
 
@@ -2982,7 +3016,7 @@ the specific language governing permissions and limitations under the Apache Lic
2982
3016
 
2983
3017
  // multi
2984
3018
  val: function (val, triggerChange) {
2985
- var oldData, self=this, changeDetails;
3019
+ var oldData, self=this;
2986
3020
 
2987
3021
  if (arguments.length === 0) {
2988
3022
  return this.getVal();
@@ -3021,7 +3055,7 @@ the specific language governing permissions and limitations under the Apache Lic
3021
3055
  self.updateSelection(data);
3022
3056
  self.clearSearch();
3023
3057
  if (triggerChange) {
3024
- self.triggerChange(self.buildChangeDetails(oldData, this.data()));
3058
+ self.triggerChange(self.buildChangeDetails(oldData, self.data()));
3025
3059
  }
3026
3060
  });
3027
3061
  }
@@ -8,9 +8,9 @@
8
8
 
9
9
  $.extend($.fn.select2.defaults, {
10
10
  formatNoMatches: function () { return "Δεν βρέθηκαν αποτελέσματα"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Παρακαλούμε εισάγετε " + n + " περισσότερους χαρακτήρες" + (n == 1 ? "" : "s"); },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Παρακαλούμε διαγράψτε " + n + " χαρακτήρες" + (n == 1 ? "" : "s"); },
13
- formatSelectionTooBig: function (limit) { return "Μπορείτε να επιλέξετε μόνο " + limit + " αντικείμενο" + (limit == 1 ? "" : "s"); },
11
+ formatInputTooShort: function (input, min) { var n = min - input.length; return "Παρακαλούμε εισάγετε " + n + " περισσότερο" + (n == 1 ? "" : "υς") + " χαρακτήρ" + (n == 1 ? "α" : "ες"); },
12
+ formatInputTooLong: function (input, max) { var n = input.length - max; return "Παρακαλούμε διαγράψτε " + n + " χαρακτήρ" + (n == 1 ? "α" : "ες"); },
13
+ formatSelectionTooBig: function (limit) { return "Μπορείτε να επιλέξετε μόνο " + limit + " αντικείμεν" + (limit == 1 ? "ο" : "α"); },
14
14
  formatLoadMore: function (pageNumber) { return "Φόρτωση περισσότερων..."; },
15
15
  formatSearching: function () { return "Αναζήτηση..."; }
16
16
  });
@@ -9,11 +9,11 @@
9
9
  },
10
10
  formatInputTooShort: function (input, min) {
11
11
  var n = min - input.length;
12
- return "Ole hyvä ja anna " + n + " merkkiä lisää.";
12
+ return "Ole hyvä ja anna " + n + " merkkiä lisää";
13
13
  },
14
14
  formatInputTooLong: function (input, max) {
15
15
  var n = input.length - max;
16
- return "Ole hyvä ja annar " + n + " merkkiä vähemmän.";
16
+ return "Ole hyvä ja anna " + n + " merkkiä vähemmän";
17
17
  },
18
18
  formatSelectionTooBig: function (limit) {
19
19
  return "Voit valita ainoastaan " + limit + " kpl";
@@ -1,5 +1,5 @@
1
1
  /*
2
- Version: 3.4.3 Timestamp: Tue Sep 17 06:47:14 PDT 2013
2
+ Version: 3.4.4 Timestamp: Thu Oct 24 13:23:11 PDT 2013
3
3
  */
4
4
  .select2-container {
5
5
  margin: 0;
@@ -1,5 +1,5 @@
1
1
  module Select2
2
2
  module Rails
3
- VERSION = "3.5.0"
3
+ VERSION = "3.5.1"
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.0
4
+ version: 3.5.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-09-22 00:00:00.000000000 Z
13
+ date: 2013-10-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: thor
@@ -154,12 +154,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
154
154
  - - ! '>='
155
155
  - !ruby/object:Gem::Version
156
156
  version: '0'
157
+ segments:
158
+ - 0
159
+ hash: -3706961845905186501
157
160
  required_rubygems_version: !ruby/object:Gem::Requirement
158
161
  none: false
159
162
  requirements:
160
163
  - - ! '>='
161
164
  - !ruby/object:Gem::Version
162
165
  version: '0'
166
+ segments:
167
+ - 0
168
+ hash: -3706961845905186501
163
169
  requirements: []
164
170
  rubyforge_project:
165
171
  rubygems_version: 1.8.25
@@ -167,4 +173,3 @@ signing_key:
167
173
  specification_version: 3
168
174
  summary: Integrate Select2 javascript library with Rails asset pipeline
169
175
  test_files: []
170
- has_rdoc: