selectize-rails 0.9.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5e7aa8c5a1c167b3467f16744bd3b26da58c6432
4
- data.tar.gz: 773fbbbe7af8267cecc48926f1b9232196604f73
3
+ metadata.gz: 6ddd296151375e4a6ec7c3bd1a15ff5139adc4b2
4
+ data.tar.gz: 6578eedb181b964165c7e82950efe047fd156696
5
5
  SHA512:
6
- metadata.gz: 2de553cfa35683eff97409b20835b1baf592ab75771942f4dd27d9cae3b5840a930c4562d23ff62af4824cd494d5e010adf08ccebd7217acfb522d44bd3bdc30
7
- data.tar.gz: 6e1001c11401ade160dd62fcb19b81603110b6c41ad305996261f2e56ded79dcfa4156698c1e0fe1674224863fdf202feee9f3fd5398429f960413be7c7b5bf9
6
+ metadata.gz: ccd238e0ffafe86c93f61860422edc40b2c29a177bca90737367f36d01f46a0737ed77dffc712ca98895c1039090f1a8b479ce7ba7f0d89f3860b53cd6357fd5
7
+ data.tar.gz: ad7b5c389063444e32f97f0304f9580625c6cdc191bb2f065bc2313048cad2106bbd79c0dfe76516f75f2a66bf9dafd5580c2c312a6e20370f37ec12ac52564b
data/CHANGELOG.md CHANGED
@@ -1,22 +1,23 @@
1
1
  # Changelog
2
2
 
3
- | Version | Notes |
4
- | -------:| ----------------------------------------------------------- |
5
- | 0.9.1 | Update to v0.9.1 of selectize.js |
6
- | 0.9.0 | Update to v0.9.0 of selectize.js |
7
- | 0.8.5 | Update to v0.8.5 of selectize.js |
8
- | 0.8.4 | Update to v0.8.4 of selectize.js |
9
- | 0.8.3 | Update to v0.8.3 of selectize.js |
10
- | 0.8.1 | Update to v0.8.1 of selectize.js |
11
- | 0.8.0 | Update to v0.8.0 of selectize.js |
12
- | 0.7.7 | Update to v0.7.7 of selectize.js |
13
- | 0.7.6 | Update to v0.7.6 of selectize.js |
14
- | 0.7.5 | Update to v0.7.5 of selectize.js |
15
- | 0.7.4 | Update to v0.7.4 of selectize.js |
16
- | 0.7.3 | Update to v0.7.3 of selectize.js |
17
- | 0.7.2 | Update to v0.7.2 of selectize.js |
18
- | 0.7.0 | Update to v0.7.0 of selectize.js |
19
- | 0.6.14 | Update to v0.6.14 of selectize.js |
20
- | 0.6.4 | Update to v0.6.4 of selectize.js |
21
- | 0.6.1 | Update and set gem version equal to selectize.js version |
22
- | 0.1.0 | Initial release |
3
+ | Version | Notes |
4
+ | --------:| ----------------------------------------------------------- |
5
+ | 0.11.0 | Update to v0.11.0 of selectize.js |
6
+ | 0.9.1 | Update to v0.9.1 of selectize.js |
7
+ | 0.9.0 | Update to v0.9.0 of selectize.js |
8
+ | 0.8.5 | Update to v0.8.5 of selectize.js |
9
+ | 0.8.4 | Update to v0.8.4 of selectize.js |
10
+ | 0.8.3 | Update to v0.8.3 of selectize.js |
11
+ | 0.8.1 | Update to v0.8.1 of selectize.js |
12
+ | 0.8.0 | Update to v0.8.0 of selectize.js |
13
+ | 0.7.7 | Update to v0.7.7 of selectize.js |
14
+ | 0.7.6 | Update to v0.7.6 of selectize.js |
15
+ | 0.7.5 | Update to v0.7.5 of selectize.js |
16
+ | 0.7.4 | Update to v0.7.4 of selectize.js |
17
+ | 0.7.3 | Update to v0.7.3 of selectize.js |
18
+ | 0.7.2 | Update to v0.7.2 of selectize.js |
19
+ | 0.7.0 | Update to v0.7.0 of selectize.js |
20
+ | 0.6.14 | Update to v0.6.14 of selectize.js |
21
+ | 0.6.4 | Update to v0.6.4 of selectize.js |
22
+ | 0.6.1 | Update and set gem version equal to selectize.js version |
23
+ | 0.1.0 | Initial release |
data/README.md CHANGED
@@ -39,13 +39,14 @@ See the [demo page of Brian Reavis](http://brianreavis.github.io/selectize.js/)
39
39
 
40
40
  ## Changes
41
41
 
42
- | Version | Notes |
43
- | -------:| ----------------------------------------------------------- |
44
- | 0.9.1 | Update to v0.9.1 of selectize.js |
45
- | 0.9.0 | Update to v0.9.0 of selectize.js |
46
- | 0.8.5 | Update to v0.8.5 of selectize.js |
47
- | 0.8.4 | Update to v0.8.4 of selectize.js |
48
- | 0.8.3 | Update to v0.8.3 of selectize.js |
42
+ | Version | Notes |
43
+ | --------:| ----------------------------------------------------------- |
44
+ | 0.11.0 | Update to v0.11.0 of selectize.js |
45
+ | 0.9.1 | Update to v0.9.1 of selectize.js |
46
+ | 0.9.0 | Update to v0.9.0 of selectize.js |
47
+ | 0.8.5 | Update to v0.8.5 of selectize.js |
48
+ | 0.8.4 | Update to v0.8.4 of selectize.js |
49
+ | 0.8.3 | Update to v0.8.3 of selectize.js |
49
50
 
50
51
  [older](CHANGELOG.md)
51
52
 
@@ -1,5 +1,5 @@
1
1
  module Selectize
2
2
  module Rails
3
- VERSION = "0.9.1"
3
+ VERSION = "0.11.0"
4
4
  end
5
5
  end
@@ -12,6 +12,6 @@ cp tmp_vendor/dist/css/*.css vendor/assets/stylesheets/
12
12
 
13
13
  # Delete vendor repo
14
14
  echo "Removing cloned vendor repo"
15
- rm -rf tmp_vendor
15
+ # rm -rf tmp_vendor
16
16
 
17
17
  echo "Finished... You'll need to commit the changes. You should consider updating the changelog and gem version number"
@@ -425,17 +425,17 @@
425
425
  };
426
426
 
427
427
  var DIACRITICS = {
428
- 'a': '[aÀÁÂÃÄÅàáâãäå]',
428
+ 'a': '[aÀÁÂÃÄÅàáâãäåĀā]',
429
429
  'c': '[cÇçćĆčČ]',
430
430
  'd': '[dđĐďĎ]',
431
- 'e': '[eÈÉÊËèéêëěĚ]',
432
- 'i': '[iÌÍÎÏìíîï]',
431
+ 'e': '[eÈÉÊËèéêëěĚĒē]',
432
+ 'i': '[iÌÍÎÏìíîïĪī]',
433
433
  'n': '[nÑñňŇ]',
434
- 'o': '[oÒÓÔÕÕÖØòóôõöø]',
434
+ 'o': '[oÒÓÔÕÕÖØòóôõöøŌō]',
435
435
  'r': '[rřŘ]',
436
436
  's': '[sŠš]',
437
437
  't': '[tťŤ]',
438
- 'u': '[uÙÚÛÜùúûüůŮ]',
438
+ 'u': '[uÙÚÛÜùúûüůŮŪū]',
439
439
  'y': '[yŸÿýÝ]',
440
440
  'z': '[zŽž]'
441
441
  };
@@ -585,7 +585,7 @@
585
585
  }));
586
586
 
587
587
  /**
588
- * selectize.js (v0.9.1)
588
+ * selectize.js (v0.11.0)
589
589
  * Copyright (c) 2013 Brian Reavis & contributors
590
590
  *
591
591
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
@@ -726,10 +726,10 @@
726
726
  * 1 -> '1'
727
727
  *
728
728
  * @param {string} value
729
- * @returns {string}
729
+ * @returns {string|null}
730
730
  */
731
731
  var hash_key = function(value) {
732
- if (typeof value === 'undefined' || value === null) return '';
732
+ if (typeof value === 'undefined' || value === null) return null;
733
733
  if (typeof value === 'boolean') return value ? '1' : '0';
734
734
  return value + '';
735
735
  };
@@ -1077,6 +1077,7 @@
1077
1077
  isCmdDown : false,
1078
1078
  isCtrlDown : false,
1079
1079
  ignoreFocus : false,
1080
+ ignoreBlur : false,
1080
1081
  ignoreHover : false,
1081
1082
  hasOptions : false,
1082
1083
  currentResults : null,
@@ -1113,6 +1114,16 @@
1113
1114
  self.settings.hideSelected = self.settings.mode === 'multi';
1114
1115
  }
1115
1116
 
1117
+ if (self.settings.create) {
1118
+ self.canCreate = function(input) {
1119
+ var filter = self.settings.createFilter;
1120
+ return input.length
1121
+ && (typeof filter !== 'function' || filter.apply(self, [input]))
1122
+ && (typeof filter !== 'string' || new RegExp(filter).test(input))
1123
+ && (!(filter instanceof RegExp) || filter.test(input));
1124
+ };
1125
+ }
1126
+
1116
1127
  self.initializePlugins(self.settings.plugins);
1117
1128
  self.setupCallbacks();
1118
1129
  self.setupTemplates();
@@ -1139,6 +1150,7 @@
1139
1150
  var eventNS = self.eventNS;
1140
1151
  var $window = $(window);
1141
1152
  var $document = $(document);
1153
+ var $input = self.$input;
1142
1154
 
1143
1155
  var $wrapper;
1144
1156
  var $control;
@@ -1154,8 +1166,8 @@
1154
1166
  var classes_plugins;
1155
1167
 
1156
1168
  inputMode = self.settings.mode;
1157
- tab_index = self.$input.attr('tabindex') || '';
1158
- classes = self.$input.attr('class') || '';
1169
+ tab_index = $input.attr('tabindex') || '';
1170
+ classes = $input.attr('class') || '';
1159
1171
 
1160
1172
  $wrapper = $('<div>').addClass(settings.wrapperClass).addClass(classes).addClass(inputMode);
1161
1173
  $control = $('<div>').addClass(settings.inputClass).addClass('items').appendTo($wrapper);
@@ -1165,7 +1177,7 @@
1165
1177
  $dropdown_content = $('<div>').addClass(settings.dropdownContentClass).appendTo($dropdown);
1166
1178
 
1167
1179
  $wrapper.css({
1168
- width: self.$input[0].style.width
1180
+ width: $input[0].style.width
1169
1181
  });
1170
1182
 
1171
1183
  if (self.plugins.names.length) {
@@ -1175,19 +1187,19 @@
1175
1187
  }
1176
1188
 
1177
1189
  if ((settings.maxItems === null || settings.maxItems > 1) && self.tagType === TAG_SELECT) {
1178
- self.$input.attr('multiple', 'multiple');
1190
+ $input.attr('multiple', 'multiple');
1179
1191
  }
1180
1192
 
1181
1193
  if (self.settings.placeholder) {
1182
1194
  $control_input.attr('placeholder', settings.placeholder);
1183
1195
  }
1184
1196
 
1185
- if (self.$input.attr('autocorrect')) {
1186
- $control_input.attr('autocorrect', self.$input.attr('autocorrect'));
1197
+ if ($input.attr('autocorrect')) {
1198
+ $control_input.attr('autocorrect', $input.attr('autocorrect'));
1187
1199
  }
1188
1200
 
1189
- if (self.$input.attr('autocapitalize')) {
1190
- $control_input.attr('autocapitalize', self.$input.attr('autocapitalize'));
1201
+ if ($input.attr('autocapitalize')) {
1202
+ $control_input.attr('autocapitalize', $input.attr('autocapitalize'));
1191
1203
  }
1192
1204
 
1193
1205
  self.$wrapper = $wrapper;
@@ -1213,7 +1225,7 @@
1213
1225
  keypress : function() { return self.onKeyPress.apply(self, arguments); },
1214
1226
  resize : function() { self.positionDropdown.apply(self, []); },
1215
1227
  blur : function() { return self.onBlur.apply(self, arguments); },
1216
- focus : function() { return self.onFocus.apply(self, arguments); },
1228
+ focus : function() { self.ignoreBlur = false; return self.onFocus.apply(self, arguments); },
1217
1229
  paste : function() { return self.onPaste.apply(self, arguments); }
1218
1230
  });
1219
1231
 
@@ -1254,11 +1266,11 @@
1254
1266
  // store original children and tab index so that they can be
1255
1267
  // restored when the destroy() method is called.
1256
1268
  this.revertSettings = {
1257
- $children : self.$input.children().detach(),
1258
- tabindex : self.$input.attr('tabindex')
1269
+ $children : $input.children().detach(),
1270
+ tabindex : $input.attr('tabindex')
1259
1271
  };
1260
1272
 
1261
- self.$input.attr('tabindex', -1).hide().after(self.$wrapper);
1273
+ $input.attr('tabindex', -1).hide().after(self.$wrapper);
1262
1274
 
1263
1275
  if ($.isArray(settings.items)) {
1264
1276
  self.setValue(settings.items);
@@ -1266,8 +1278,8 @@
1266
1278
  }
1267
1279
 
1268
1280
  // feature detect for the validation API
1269
- if (self.$input[0].validity) {
1270
- self.$input.on('invalid' + eventNS, function(e) {
1281
+ if ($input[0].validity) {
1282
+ $input.on('invalid' + eventNS, function(e) {
1271
1283
  e.preventDefault();
1272
1284
  self.isInvalid = true;
1273
1285
  self.refreshState();
@@ -1280,17 +1292,21 @@
1280
1292
  self.updatePlaceholder();
1281
1293
  self.isSetup = true;
1282
1294
 
1283
- if (self.$input.is(':disabled')) {
1295
+ if ($input.is(':disabled')) {
1284
1296
  self.disable();
1285
1297
  }
1286
1298
 
1287
1299
  self.on('change', this.onChange);
1300
+
1301
+ $input.data('selectize', self);
1302
+ $input.addClass('selectized');
1288
1303
  self.trigger('initialize');
1289
1304
 
1290
1305
  // preload options
1291
1306
  if (settings.preload === true) {
1292
1307
  self.onSearchChange('');
1293
1308
  }
1309
+
1294
1310
  },
1295
1311
 
1296
1312
  /**
@@ -1505,6 +1521,7 @@
1505
1521
  case KEY_TAB:
1506
1522
  if (self.settings.selectOnTab && self.isOpen && self.$activeOption) {
1507
1523
  self.onOptionSelect({currentTarget: self.$activeOption});
1524
+ e.preventDefault();
1508
1525
  }
1509
1526
  if (self.settings.create && self.createItem()) {
1510
1527
  e.preventDefault();
@@ -1599,6 +1616,14 @@
1599
1616
  self.isFocused = false;
1600
1617
  if (self.ignoreFocus) return;
1601
1618
 
1619
+ // necessary to prevent IE closing the dropdown when the scrollbar is clicked
1620
+ if (!self.ignoreBlur && document.activeElement === self.$dropdown_content[0]) {
1621
+ self.ignoreBlur = true;
1622
+ self.onFocus(e);
1623
+
1624
+ return;
1625
+ }
1626
+
1602
1627
  if (self.settings.create && self.settings.createOnBlur) {
1603
1628
  self.createItem(false);
1604
1629
  }
@@ -1643,7 +1668,7 @@
1643
1668
  self.createItem();
1644
1669
  } else {
1645
1670
  value = $target.attr('data-value');
1646
- if (value) {
1671
+ if (typeof value !== 'undefined') {
1647
1672
  self.lastQuery = null;
1648
1673
  self.setTextboxValue('');
1649
1674
  self.addItem(value);
@@ -2077,7 +2102,7 @@
2077
2102
  }
2078
2103
 
2079
2104
  // add create option
2080
- has_create_option = self.settings.create && results.query.length;
2105
+ has_create_option = self.settings.create && self.canCreate(results.query);
2081
2106
  if (has_create_option) {
2082
2107
  $dropdown_content.prepend(self.render('option_create', {input: query}));
2083
2108
  $create = $($dropdown_content[0].childNodes[0]);
@@ -2134,7 +2159,7 @@
2134
2159
  }
2135
2160
 
2136
2161
  value = hash_key(data[self.settings.valueField]);
2137
- if (!value || self.options.hasOwnProperty(value)) return;
2162
+ if (typeof value !== 'string' || self.options.hasOwnProperty(value)) return;
2138
2163
 
2139
2164
  self.userOptions[value] = true;
2140
2165
  self.options[value] = data;
@@ -2171,8 +2196,9 @@
2171
2196
  value_new = hash_key(data[self.settings.valueField]);
2172
2197
 
2173
2198
  // sanity checks
2199
+ if (value === null) return;
2174
2200
  if (!self.options.hasOwnProperty(value)) return;
2175
- if (!value_new) throw new Error('Value must be set in option data');
2201
+ if (typeof value_new !== 'string') throw new Error('Value must be set in option data');
2176
2202
 
2177
2203
  // update references
2178
2204
  if (value_new !== value) {
@@ -2284,7 +2310,7 @@
2284
2310
  getElementWithValue: function(value, $els) {
2285
2311
  value = hash_key(value);
2286
2312
 
2287
- if (value) {
2313
+ if (typeof value !== 'undefined' && value !== null) {
2288
2314
  for (var i = 0, n = $els.length; i < n; i++) {
2289
2315
  if ($els[i].getAttribute('data-value') === value) {
2290
2316
  return $($els[i]);
@@ -2331,7 +2357,7 @@
2331
2357
  var $item, $option, $options;
2332
2358
  var self = this;
2333
2359
  var inputMode = self.settings.mode;
2334
- var i, active, value_next;
2360
+ var i, active, value_next, wasFull;
2335
2361
  value = hash_key(value);
2336
2362
 
2337
2363
  if (self.items.indexOf(value) !== -1) {
@@ -2344,15 +2370,18 @@
2344
2370
  if (inputMode === 'multi' && self.isFull()) return;
2345
2371
 
2346
2372
  $item = $(self.render('item', self.options[value]));
2373
+ wasFull = self.isFull();
2347
2374
  self.items.splice(self.caretPos, 0, value);
2348
2375
  self.insertAtCaret($item);
2349
- self.refreshState();
2376
+ if (!self.isPending || (!wasFull && self.isFull())) {
2377
+ self.refreshState();
2378
+ }
2350
2379
 
2351
2380
  if (self.isSetup) {
2352
2381
  $options = self.$dropdown_content.find('[data-selectable]');
2353
2382
 
2354
2383
  // update menu / remove the option (if this is not one item being added as part of series)
2355
- if (!this.isPending) {
2384
+ if (!self.isPending) {
2356
2385
  $option = self.getOption(value);
2357
2386
  value_next = self.getAdjacentOption($option, 1).attr('data-value');
2358
2387
  self.refreshOptions(self.isFocused && inputMode !== 'single');
@@ -2362,7 +2391,7 @@
2362
2391
  }
2363
2392
 
2364
2393
  // hide the menu if the maximum number of items have been selected or no options are left
2365
- if (!$options.length || (self.settings.maxItems !== null && self.items.length >= self.settings.maxItems)) {
2394
+ if (!$options.length || self.isFull()) {
2366
2395
  self.close();
2367
2396
  } else {
2368
2397
  self.positionDropdown();
@@ -2428,7 +2457,7 @@
2428
2457
  var self = this;
2429
2458
  var input = $.trim(self.$control_input.val() || '');
2430
2459
  var caret = self.caretPos;
2431
- if (!input.length) return false;
2460
+ if (!self.canCreate(input)) return false;
2432
2461
  self.lock();
2433
2462
 
2434
2463
  if (typeof triggerDropdown === 'undefined') {
@@ -2447,7 +2476,7 @@
2447
2476
 
2448
2477
  if (!data || typeof data !== 'object') return;
2449
2478
  var value = hash_key(data[self.settings.valueField]);
2450
- if (!value) return;
2479
+ if (typeof value !== 'string') return;
2451
2480
 
2452
2481
  self.setTextboxValue('');
2453
2482
  self.addOption(data);
@@ -2485,10 +2514,11 @@
2485
2514
  * and CSS classes.
2486
2515
  */
2487
2516
  refreshState: function() {
2488
- var self = this;
2489
- var invalid = self.isRequired && !self.items.length;
2490
- if (!invalid) self.isInvalid = false;
2491
- self.$control_input.prop('required', invalid);
2517
+ var invalid, self = this;
2518
+ if (self.isRequired) {
2519
+ if (self.items.length) self.isInvalid = false;
2520
+ self.$control_input.prop('required', invalid);
2521
+ }
2492
2522
  self.refreshClasses();
2493
2523
  },
2494
2524
 
@@ -2535,7 +2565,7 @@
2535
2565
  updateOriginalInput: function() {
2536
2566
  var i, n, options, self = this;
2537
2567
 
2538
- if (self.$input[0].tagName.toLowerCase() === 'select') {
2568
+ if (self.tagType === TAG_SELECT) {
2539
2569
  options = [];
2540
2570
  for (i = 0, n = self.items.length; i < n; i++) {
2541
2571
  options.push('<option value="' + escape_html(self.items[i]) + '" selected="selected"></option>');
@@ -2546,6 +2576,7 @@
2546
2576
  self.$input.html(options.join(''));
2547
2577
  } else {
2548
2578
  self.$input.val(self.getValue());
2579
+ self.$input.attr('value',self.$input.val());
2549
2580
  }
2550
2581
 
2551
2582
  if (self.isSetup) {
@@ -2631,7 +2662,9 @@
2631
2662
  if (!self.items.length) return;
2632
2663
  self.$control.children(':not(input)').remove();
2633
2664
  self.items = [];
2665
+ self.lastQuery = null;
2634
2666
  self.setCaret(0);
2667
+ self.setActiveItem(null);
2635
2668
  self.updatePlaceholder();
2636
2669
  self.updateOriginalInput();
2637
2670
  self.refreshState();
@@ -2800,17 +2833,19 @@
2800
2833
  i = Math.max(0, Math.min(self.items.length, i));
2801
2834
  }
2802
2835
 
2803
- // the input must be moved by leaving it in place and moving the
2804
- // siblings, due to the fact that focus cannot be restored once lost
2805
- // on mobile webkit devices
2806
- var j, n, fn, $children, $child;
2807
- $children = self.$control.children(':not(input)');
2808
- for (j = 0, n = $children.length; j < n; j++) {
2809
- $child = $($children[j]).detach();
2810
- if (j < i) {
2811
- self.$control_input.before($child);
2812
- } else {
2813
- self.$control.append($child);
2836
+ if(!self.isPending) {
2837
+ // the input must be moved by leaving it in place and moving the
2838
+ // siblings, due to the fact that focus cannot be restored once lost
2839
+ // on mobile webkit devices
2840
+ var j, n, fn, $children, $child;
2841
+ $children = self.$control.children(':not(input)');
2842
+ for (j = 0, n = $children.length; j < n; j++) {
2843
+ $child = $($children[j]).detach();
2844
+ if (j < i) {
2845
+ self.$control_input.before($child);
2846
+ } else {
2847
+ self.$control.append($child);
2848
+ }
2814
2849
  }
2815
2850
  }
2816
2851
 
@@ -2876,9 +2911,13 @@
2876
2911
  .html('')
2877
2912
  .append(revertSettings.$children)
2878
2913
  .removeAttr('tabindex')
2914
+ .removeClass('selectized')
2879
2915
  .attr({tabindex: revertSettings.tabindex})
2880
2916
  .show();
2881
2917
 
2918
+ self.$control_input.removeData('grow');
2919
+ self.$input.removeData('selectize');
2920
+
2882
2921
  $(window).off(eventNS);
2883
2922
  $(document).off(eventNS);
2884
2923
  $(document.body).off(eventNS);
@@ -2937,8 +2976,25 @@
2937
2976
  }
2938
2977
 
2939
2978
  return html;
2979
+ },
2980
+
2981
+ /**
2982
+ * Clears the render cache for a template. If
2983
+ * no template is given, clears all render
2984
+ * caches.
2985
+ *
2986
+ * @param {string} templateName
2987
+ */
2988
+ clearCache: function(templateName) {
2989
+ var self = this;
2990
+ if (typeof templateName === 'undefined') {
2991
+ self.renderCache = {};
2992
+ } else {
2993
+ delete self.renderCache[templateName];
2994
+ }
2940
2995
  }
2941
2996
 
2997
+
2942
2998
  });
2943
2999
 
2944
3000
 
@@ -2950,6 +3006,7 @@
2950
3006
  diacritics: true,
2951
3007
  create: false,
2952
3008
  createOnBlur: false,
3009
+ createFilter: null,
2953
3010
  highlight: true,
2954
3011
  openOnFocus: true,
2955
3012
  maxOptions: 1000,
@@ -2958,6 +3015,7 @@
2958
3015
  addPrecedence: false,
2959
3016
  selectOnTab: false,
2960
3017
  preload: false,
3018
+ allowEmptyOption: false,
2961
3019
 
2962
3020
  scrollDuration: 60,
2963
3021
  loadThrottle: 300,
@@ -3028,7 +3086,7 @@
3028
3086
  */
3029
3087
  var init_textbox = function($input, settings_element) {
3030
3088
  var i, n, values, option, value = $.trim($input.val() || '');
3031
- if (!value.length) return;
3089
+ if (!settings.allowEmptyOption && !value.length) return;
3032
3090
 
3033
3091
  values = value.split(settings.delimiter);
3034
3092
  for (i = 0, n = values.length; i < n; i++) {
@@ -3066,7 +3124,7 @@
3066
3124
  $option = $($option);
3067
3125
 
3068
3126
  value = $option.attr('value') || '';
3069
- if (!value.length) return;
3127
+ if (!value.length && !settings.allowEmptyOption) return;
3070
3128
 
3071
3129
  // if the option already exists, it's probably been
3072
3130
  // duplicated in another optgroup. in this case, push
@@ -3136,8 +3194,13 @@
3136
3194
  var instance;
3137
3195
  var $input = $(this);
3138
3196
  var tag_name = this.tagName.toLowerCase();
3197
+ var placeholder = $input.attr('placeholder') || $input.attr('data-placeholder');
3198
+ if (!placeholder && !settings.allowEmptyOption) {
3199
+ placeholder = $input.children('option[value=""]').text();
3200
+ }
3201
+
3139
3202
  var settings_element = {
3140
- 'placeholder' : $input.children('option[value=""]').text() || $input.attr('placeholder'),
3203
+ 'placeholder' : placeholder,
3141
3204
  'options' : {},
3142
3205
  'optgroups' : {},
3143
3206
  'items' : []
@@ -3150,13 +3213,12 @@
3150
3213
  }
3151
3214
 
3152
3215
  instance = new Selectize($input, $.extend(true, {}, defaults, settings_element, settings_user));
3153
- $input.data('selectize', instance);
3154
- $input.addClass('selectized');
3155
3216
  });
3156
3217
  };
3157
3218
 
3158
3219
  $.fn.selectize.defaults = Selectize.defaults;
3159
3220
 
3221
+
3160
3222
  Selectize.define('drag_drop', function(options) {
3161
3223
  if (!$.fn.sortable) throw new Error('The "drag_drop" plugin requires jQuery UI "sortable".');
3162
3224
  if (this.settings.mode !== 'multi') return;
@@ -3285,6 +3347,22 @@
3285
3347
  };
3286
3348
  })();
3287
3349
 
3350
+ var getScrollbarWidth = function() {
3351
+ var div;
3352
+ var width = getScrollbarWidth.width;
3353
+ var doc = document;
3354
+
3355
+ if (typeof width === 'undefined') {
3356
+ div = doc.createElement('div');
3357
+ div.innerHTML = '<div style="width:50px;height:50px;position:absolute;left:-50px;top:-50px;overflow:auto;"><div style="width:1px;height:100px;"></div></div>';
3358
+ div = div.firstChild;
3359
+ doc.body.appendChild(div);
3360
+ width = getScrollbarWidth.width = div.offsetWidth - div.clientWidth;
3361
+ doc.body.removeChild(div);
3362
+ }
3363
+ return width;
3364
+ };
3365
+
3288
3366
  var equalizeSizes = function() {
3289
3367
  var i, n, height_max, width, width_last, width_parent, $optgroups;
3290
3368
 
@@ -3301,7 +3379,7 @@
3301
3379
  }
3302
3380
 
3303
3381
  if (options.equalizeWidth) {
3304
- width_parent = self.$dropdown_content.innerWidth();
3382
+ width_parent = self.$dropdown_content.innerWidth() - getScrollbarWidth();
3305
3383
  width = Math.round(width_parent / n);
3306
3384
  $optgroups.css({width: width});
3307
3385
  if (n > 1) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * selectize.bootstrap2.css (v0.9.1) - Bootstrap 2 Theme
2
+ * selectize.bootstrap2.css (v0.11.0) - Bootstrap 2 Theme
3
3
  * Copyright (c) 2013 Brian Reavis & contributors
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
@@ -1,5 +1,5 @@
1
1
  /**
2
- * selectize.bootstrap3.css (v0.9.1) - Bootstrap 3 Theme
2
+ * selectize.bootstrap3.css (v0.11.0) - Bootstrap 3 Theme
3
3
  * Copyright (c) 2013 Brian Reavis & contributors
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
@@ -257,7 +257,7 @@
257
257
  border-top: 0 none;
258
258
  }
259
259
  .selectize-dropdown .optgroup-header {
260
- color: #999999;
260
+ color: #777777;
261
261
  background: #ffffff;
262
262
  cursor: default;
263
263
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * selectize.css (v0.9.1)
2
+ * selectize.css (v0.11.0)
3
3
  * Copyright (c) 2013 Brian Reavis & contributors
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
@@ -1,5 +1,5 @@
1
1
  /**
2
- * selectize.default.css (v0.9.1) - Default Theme
2
+ * selectize.default.css (v0.11.0) - Default Theme
3
3
  * Copyright (c) 2013 Brian Reavis & contributors
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
@@ -1,5 +1,5 @@
1
1
  /**
2
- * selectize.legacy.css (v0.9.1) - Default Theme
2
+ * selectize.legacy.css (v0.11.0) - Default Theme
3
3
  * Copyright (c) 2013 Brian Reavis & contributors
4
4
  *
5
5
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selectize-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manuel van Rijn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-07 00:00:00.000000000 Z
11
+ date: 2014-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -46,8 +46,6 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - ".gitignore"
49
- - ".ruby-gemset"
50
- - ".ruby-version"
51
49
  - CHANGELOG.md
52
50
  - Gemfile
53
51
  - LICENSE.txt
data/.ruby-gemset DELETED
@@ -1 +0,0 @@
1
- selectize-rails
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.1.1