Skip to content

Commit ab7f87b

Browse files
committed
Updated selectize.js to latest version.
1 parent 9024eac commit ab7f87b

File tree

1 file changed

+64
-14
lines changed

1 file changed

+64
-14
lines changed

js/selectize.js

Lines changed: 64 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/*! selectize.js - v0.6.9 | https://github.com/brianreavis/selectize.js | Apache License (v2) */
1+
/*! selectize.js - v0.6.10 | https://github.com/brianreavis/selectize.js | Apache License (v2) */
22

33
(function(factory) {
44
if (typeof exports === 'object') {
@@ -249,6 +249,28 @@
249249
return typeof object !== 'undefined';
250250
};
251251

252+
/**
253+
* Converts a scalar to its best string representation
254+
* for hash keys and HTML attribute values.
255+
*
256+
* Transformations:
257+
* 'str' -> 'str'
258+
* null -> ''
259+
* undefined -> ''
260+
* true -> '1'
261+
* false -> '0'
262+
* 0 -> '0'
263+
* 1 -> '1'
264+
*
265+
* @param {string} value
266+
* @returns {string}
267+
*/
268+
var hash_key = function(value) {
269+
if (typeof value === 'undefined' || value === null) return '';
270+
if (typeof value === 'boolean') return value ? '1' : '0';
271+
return value + '';
272+
};
273+
252274
/**
253275
* Escapes a string for use within HTML.
254276
*
@@ -872,7 +894,6 @@
872894
case KEY_A:
873895
if (self.isCmdDown) {
874896
self.selectAll();
875-
e.preventDefault();
876897
return;
877898
}
878899
break;
@@ -1654,7 +1675,7 @@
16541675
return;
16551676
}
16561677

1657-
value = value || '';
1678+
value = hash_key(value);
16581679
if (self.options.hasOwnProperty(value)) return;
16591680

16601681
self.userOptions[value] = true;
@@ -1686,19 +1707,47 @@
16861707
updateOption: function(value, data) {
16871708
var self = this;
16881709
var $item, $item_new;
1710+
var value, value_new, index_item, cache_items, cache_options;
16891711

1690-
value = String(value);
1691-
self.options[value] = data;
1692-
if (isset(self.renderCache['item'])) delete self.renderCache['item'][value];
1693-
if (isset(self.renderCache['option'])) delete self.renderCache['option'][value];
1712+
value = hash_key(value);
1713+
value_new = hash_key(data[self.settings.valueField]);
1714+
1715+
// sanity checks
1716+
if (!self.options.hasOwnProperty(value)) return;
1717+
if (!value_new) throw new Error('Value must be set in option data');
1718+
1719+
// update references
1720+
if (value_new !== value) {
1721+
delete self.options[value];
1722+
index_item = self.items.indexOf(value);
1723+
if (index_item !== -1) {
1724+
self.items.splice(index_item, 1, value_new);
1725+
}
1726+
}
1727+
self.options[value_new] = data;
1728+
1729+
// invalidate render cache
1730+
cache_items = self.renderCache['item'];
1731+
cache_options = self.renderCache['option'];
1732+
1733+
if (isset(cache_items)) {
1734+
delete cache_items[value];
1735+
delete cache_items[value_new];
1736+
}
1737+
if (isset(cache_options)) {
1738+
delete cache_options[value];
1739+
delete cache_options[value_new];
1740+
}
16941741

1695-
if (self.items.indexOf(value) !== -1) {
1742+
// update the item if it's selected
1743+
if (self.items.indexOf(value_new) !== -1) {
16961744
$item = self.getItem(value);
16971745
$item_new = $(self.render('item', data));
16981746
if ($item.hasClass('active')) $item_new.addClass('active');
16991747
$item.replaceWith($item_new);
17001748
}
17011749

1750+
// update dropdown contents
17021751
if (self.isOpen) {
17031752
self.refreshOptions(false);
17041753
}
@@ -1712,7 +1761,7 @@
17121761
removeOption: function(value) {
17131762
var self = this;
17141763

1715-
value = String(value);
1764+
value = hash_key(value);
17161765
delete self.userOptions[value];
17171766
delete self.options[value];
17181767
self.lastQuery = null;
@@ -1742,6 +1791,7 @@
17421791
* @returns {object}
17431792
*/
17441793
getOption: function(value) {
1794+
value = hash_key(value);
17451795
return value ? this.$dropdown_content.find('[data-selectable]').filter('[data-value="' + value.replace(/(['"])/g, '\\$1') + '"]:first') : $();
17461796
},
17471797

@@ -1791,7 +1841,7 @@
17911841
var self = this;
17921842
var inputMode = self.settings.mode;
17931843
var i, active, options, value_next;
1794-
value = String(value);
1844+
value = hash_key(value);
17951845

17961846
if (inputMode === 'single') self.clear();
17971847
if (inputMode === 'multi' && self.isFull()) return;
@@ -1852,7 +1902,7 @@
18521902
var $item, i, idx;
18531903

18541904
$item = (typeof value === 'object') ? value : self.getItem(value);
1855-
value = String($item.attr('data-value'));
1905+
value = hash_key($item.attr('data-value'));
18561906
i = self.items.indexOf(value);
18571907

18581908
if (i !== -1) {
@@ -1906,7 +1956,7 @@
19061956
self.unlock();
19071957
self.focus(false);
19081958

1909-
var value = data && data[self.settings.valueField];
1959+
var value = hash_key(data && data[self.settings.valueField]);
19101960
if (!value) return;
19111961

19121962
self.setTextboxValue('');
@@ -2300,8 +2350,8 @@
23002350
var regex_tag = /^[\ ]*<([a-z][a-z0-9\-_]*(?:\:[a-z][a-z0-9\-_]*)?)/i;
23012351

23022352
if (templateName === 'option' || templateName === 'item') {
2303-
value = data[self.settings.valueField];
2304-
cache = isset(value);
2353+
value = hash_key(data[self.settings.valueField]);
2354+
cache = !!value;
23052355
}
23062356

23072357
// pull markup from cache if it exists

0 commit comments

Comments
 (0)