Skip to content

Commit

Permalink
Released 0.6.10.
Browse files Browse the repository at this point in the history
  • Loading branch information
brianreavis committed Aug 3, 2013
1 parent 03c10f9 commit 54aba49
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 81 deletions.
2 changes: 1 addition & 1 deletion bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "selectize",
"keywords": ["select", "ui", "form", "input", "control", "autocomplete", "tagging", "tag"],
"description": "Selectize is a jQuery-based custom <select> UI control. Useful for tagging, contact lists, country selectors, etc.",
"version": "0.6.9",
"version": "0.6.10",
"license": "Apache License, Version 2.0",
"readmeFilename": "README.md",
"repository": {
Expand Down
2 changes: 1 addition & 1 deletion selectize.css
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*! selectize.css - v0.6.9 | https://github.com/brianreavis/selectize.js | Apache License (v2) */
/*! selectize.css - v0.6.10 | https://github.com/brianreavis/selectize.js | Apache License (v2) */

/* --- file: "src/selectize.css" --- */

Expand Down
2 changes: 1 addition & 1 deletion selectize.jquery.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "selectize",
"version": "0.6.9",
"version": "0.6.10",
"title": "Selectize.js",
"author": {
"name": "Brian Reavis",
Expand Down
78 changes: 64 additions & 14 deletions selectize.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*! selectize.js - v0.6.9 | https://github.com/brianreavis/selectize.js | Apache License (v2) */
/*! selectize.js - v0.6.10 | https://github.com/brianreavis/selectize.js | Apache License (v2) */

(function(factory) {
if (typeof exports === 'object') {
Expand Down Expand Up @@ -249,6 +249,28 @@
return typeof object !== 'undefined';
};

/**
* Converts a scalar to its best string representation
* for hash keys and HTML attribute values.
*
* Transformations:
* 'str' -> 'str'
* null -> ''
* undefined -> ''
* true -> '1'
* false -> '0'
* 0 -> '0'
* 1 -> '1'
*
* @param {string} value
* @returns {string}
*/
var hash_key = function(value) {
if (typeof value === 'undefined' || value === null) return '';
if (typeof value === 'boolean') return value ? '1' : '0';
return value + '';
};

/**
* Escapes a string for use within HTML.
*
Expand Down Expand Up @@ -872,7 +894,6 @@
case KEY_A:
if (self.isCmdDown) {
self.selectAll();
e.preventDefault();
return;
}
break;
Expand Down Expand Up @@ -1654,7 +1675,7 @@
return;
}

value = value || '';
value = hash_key(value);
if (self.options.hasOwnProperty(value)) return;

self.userOptions[value] = true;
Expand Down Expand Up @@ -1686,19 +1707,47 @@
updateOption: function(value, data) {
var self = this;
var $item, $item_new;
var value, value_new, index_item, cache_items, cache_options;

value = String(value);
self.options[value] = data;
if (isset(self.renderCache['item'])) delete self.renderCache['item'][value];
if (isset(self.renderCache['option'])) delete self.renderCache['option'][value];
value = hash_key(value);
value_new = hash_key(data[self.settings.valueField]);

// sanity checks
if (!self.options.hasOwnProperty(value)) return;
if (!value_new) throw new Error('Value must be set in option data');

// update references
if (value_new !== value) {
delete self.options[value];
index_item = self.items.indexOf(value);
if (index_item !== -1) {
self.items.splice(index_item, 1, value_new);
}
}
self.options[value_new] = data;

// invalidate render cache
cache_items = self.renderCache['item'];
cache_options = self.renderCache['option'];

if (isset(cache_items)) {
delete cache_items[value];
delete cache_items[value_new];
}
if (isset(cache_options)) {
delete cache_options[value];
delete cache_options[value_new];
}

if (self.items.indexOf(value) !== -1) {
// update the item if it's selected
if (self.items.indexOf(value_new) !== -1) {
$item = self.getItem(value);
$item_new = $(self.render('item', data));
if ($item.hasClass('active')) $item_new.addClass('active');
$item.replaceWith($item_new);
}

// update dropdown contents
if (self.isOpen) {
self.refreshOptions(false);
}
Expand All @@ -1712,7 +1761,7 @@
removeOption: function(value) {
var self = this;

value = String(value);
value = hash_key(value);
delete self.userOptions[value];
delete self.options[value];
self.lastQuery = null;
Expand Down Expand Up @@ -1742,6 +1791,7 @@
* @returns {object}
*/
getOption: function(value) {
value = hash_key(value);
return value ? this.$dropdown_content.find('[data-selectable]').filter('[data-value="' + value.replace(/(['"])/g, '\\$1') + '"]:first') : $();
},

Expand Down Expand Up @@ -1791,7 +1841,7 @@
var self = this;
var inputMode = self.settings.mode;
var i, active, options, value_next;
value = String(value);
value = hash_key(value);

if (inputMode === 'single') self.clear();
if (inputMode === 'multi' && self.isFull()) return;
Expand Down Expand Up @@ -1852,7 +1902,7 @@
var $item, i, idx;

$item = (typeof value === 'object') ? value : self.getItem(value);
value = String($item.attr('data-value'));
value = hash_key($item.attr('data-value'));
i = self.items.indexOf(value);

if (i !== -1) {
Expand Down Expand Up @@ -1906,7 +1956,7 @@
self.unlock();
self.focus(false);

var value = data && data[self.settings.valueField];
var value = hash_key(data && data[self.settings.valueField]);
if (!value) return;

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

if (templateName === 'option' || templateName === 'item') {
value = data[self.settings.valueField];
cache = isset(value);
value = hash_key(data[self.settings.valueField]);
cache = !!value;
}

// pull markup from cache if it exists
Expand Down
Loading

0 comments on commit 54aba49

Please sign in to comment.