Skip to content

Commit

Permalink
Fix bug selectize#182 (use fix from bbc@ea3f067)
Browse files Browse the repository at this point in the history
  • Loading branch information
bigfox committed Mar 27, 2014
1 parent 0438a79 commit f82d069
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 21 deletions.
45 changes: 37 additions & 8 deletions dist/js/selectize.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,10 @@
var KEY_ESC = 27;
var KEY_LEFT = 37;
var KEY_UP = 38;
var KEY_P = 80;
var KEY_RIGHT = 39;
var KEY_DOWN = 40;
var KEY_N = 78;
var KEY_BACKSPACE = 8;
var KEY_DELETE = 46;
var KEY_SHIFT = 16;
Expand All @@ -117,6 +119,7 @@
var TAG_SELECT = 1;
var TAG_INPUT = 2;


var isset = function(object) {
return typeof object !== 'undefined';
};
Expand Down Expand Up @@ -363,6 +366,10 @@
* @returns {int}
*/
var measureString = function(str, $parent) {
if (!str) {
return 0;
}

var $test = $('<test>').css({
position: 'absolute',
top: -99999,
Expand Down Expand Up @@ -396,6 +403,8 @@
* @param {object} $input
*/
var autoGrow = function($input) {
var currentWidth = null;

var update = function(e) {
var value, keyCode, printable, placeholder, width;
var shift, character, selection;
Expand Down Expand Up @@ -438,7 +447,8 @@
}

width = measureString(value, $input) + 4;
if (width !== $input.width()) {
if (width !== currentWidth) {
currentWidth = width;
$input.width(width);
$input.triggerHandler('resize');
}
Expand Down Expand Up @@ -560,7 +570,7 @@

$wrapper = $('<div>').addClass(settings.wrapperClass).addClass(classes).addClass(inputMode);
$control = $('<div>').addClass(settings.inputClass).addClass('items').appendTo($wrapper);
$control_input = $('<input type="text" autocomplete="off">').appendTo($control).attr('tabindex', tab_index);
$control_input = $('<input type="text" autocomplete="off" />').appendTo($control).attr('tabindex', tab_index);
$dropdown_parent = $(settings.dropdownParent || $wrapper);
$dropdown = $('<div>').addClass(settings.dropdownClass).addClass(classes).addClass(inputMode).hide().appendTo($dropdown_parent);
$dropdown_content = $('<div>').addClass(settings.dropdownContentClass).appendTo($dropdown);
Expand Down Expand Up @@ -606,7 +616,7 @@
keypress : function() { return self.onKeyPress.apply(self, arguments); },
resize : function() { self.positionDropdown.apply(self, []); },
blur : function() { return self.onBlur.apply(self, arguments); },
focus : function() { return self.onFocus.apply(self, arguments); }
focus : function() { self.ignoreBlur = false; return self.onFocus.apply(self, arguments); }
});

$document.on('keydown' + eventNS, function(e) {
Expand Down Expand Up @@ -680,7 +690,7 @@
self.trigger('initialize');

// preload options
if (settings.preload) {
if (settings.preload === true) {
self.onSearchChange('');
}
},
Expand Down Expand Up @@ -846,6 +856,8 @@
case KEY_ESC:
self.close();
return;
case KEY_N:
if (!e.ctrlKey) break;
case KEY_DOWN:
if (!self.isOpen && self.hasOptions) {
self.open();
Expand All @@ -856,6 +868,8 @@
}
e.preventDefault();
return;
case KEY_P:
if (!e.ctrlKey) break;
case KEY_UP:
if (self.$activeOption) {
self.ignoreHover = true;
Expand All @@ -877,6 +891,9 @@
self.advanceSelection(1, e);
return;
case KEY_TAB:
if (self.isOpen && self.$activeOption) {
self.onOptionSelect({currentTarget: self.$activeOption});
}
if (self.settings.create && self.createItem()) {
e.preventDefault();
}
Expand Down Expand Up @@ -969,8 +986,16 @@
self.isFocused = false;
if (self.ignoreFocus) return;

// necessary to prevent IE closing the dropdown when the scrollbar is clicked
if (!self.ignoreBlur && document.activeElement === self.$dropdown_content[0]) {
self.ignoreBlur = true;
self.onFocus(e);

return;
}

if (self.settings.create && self.settings.createOnBlur) {
self.createItem();
self.createItem(false);
}

self.close();
Expand Down Expand Up @@ -1771,13 +1796,17 @@
*
* @return {boolean}
*/
createItem: function() {
createItem: function(triggerDropdown) {
var self = this;
var input = $.trim(self.$control_input.val() || '');
var caret = self.caretPos;
if (!input.length) return false;
self.lock();

if (typeof triggerDropdown === 'undefined') {
triggerDropdown = true;
}

var setup = (typeof self.settings.create === 'function') ? this.settings.create : function(input) {
var data = {};
data[self.settings.labelField] = input;
Expand All @@ -1796,7 +1825,7 @@
self.addOption(data);
self.setCaret(caret);
self.addItem(value);
self.refreshOptions(self.settings.mode !== 'single');
self.refreshOptions(triggerDropdown && self.settings.mode !== 'single');
});

var output = setup.apply(this, [input, create]);
Expand Down Expand Up @@ -2704,7 +2733,7 @@
e.preventDefault();
if (self.isLocked) return;

var $item = $(e.target).parent();
var $item = $(e.currentTarget).parent();
self.setActiveItem($item);
if (self.deleteSelection()) {
self.setCaret(self.items.length);
Expand Down
4 changes: 2 additions & 2 deletions dist/js/selectize.min.js

Large diffs are not rendered by default.

45 changes: 37 additions & 8 deletions dist/js/standalone/selectize.js
Original file line number Diff line number Diff line change
Expand Up @@ -689,8 +689,10 @@
var KEY_ESC = 27;
var KEY_LEFT = 37;
var KEY_UP = 38;
var KEY_P = 80;
var KEY_RIGHT = 39;
var KEY_DOWN = 40;
var KEY_N = 78;
var KEY_BACKSPACE = 8;
var KEY_DELETE = 46;
var KEY_SHIFT = 16;
Expand All @@ -701,6 +703,7 @@
var TAG_SELECT = 1;
var TAG_INPUT = 2;


var isset = function(object) {
return typeof object !== 'undefined';
};
Expand Down Expand Up @@ -947,6 +950,10 @@
* @returns {int}
*/
var measureString = function(str, $parent) {
if (!str) {
return 0;
}

var $test = $('<test>').css({
position: 'absolute',
top: -99999,
Expand Down Expand Up @@ -980,6 +987,8 @@
* @param {object} $input
*/
var autoGrow = function($input) {
var currentWidth = null;

var update = function(e) {
var value, keyCode, printable, placeholder, width;
var shift, character, selection;
Expand Down Expand Up @@ -1022,7 +1031,8 @@
}

width = measureString(value, $input) + 4;
if (width !== $input.width()) {
if (width !== currentWidth) {
currentWidth = width;
$input.width(width);
$input.triggerHandler('resize');
}
Expand Down Expand Up @@ -1144,7 +1154,7 @@

$wrapper = $('<div>').addClass(settings.wrapperClass).addClass(classes).addClass(inputMode);
$control = $('<div>').addClass(settings.inputClass).addClass('items').appendTo($wrapper);
$control_input = $('<input type="text" autocomplete="off">').appendTo($control).attr('tabindex', tab_index);
$control_input = $('<input type="text" autocomplete="off" />').appendTo($control).attr('tabindex', tab_index);
$dropdown_parent = $(settings.dropdownParent || $wrapper);
$dropdown = $('<div>').addClass(settings.dropdownClass).addClass(classes).addClass(inputMode).hide().appendTo($dropdown_parent);
$dropdown_content = $('<div>').addClass(settings.dropdownContentClass).appendTo($dropdown);
Expand Down Expand Up @@ -1190,7 +1200,7 @@
keypress : function() { return self.onKeyPress.apply(self, arguments); },
resize : function() { self.positionDropdown.apply(self, []); },
blur : function() { return self.onBlur.apply(self, arguments); },
focus : function() { return self.onFocus.apply(self, arguments); }
focus : function() { self.ignoreBlur = false; return self.onFocus.apply(self, arguments); }
});

$document.on('keydown' + eventNS, function(e) {
Expand Down Expand Up @@ -1264,7 +1274,7 @@
self.trigger('initialize');

// preload options
if (settings.preload) {
if (settings.preload === true) {
self.onSearchChange('');
}
},
Expand Down Expand Up @@ -1430,6 +1440,8 @@
case KEY_ESC:
self.close();
return;
case KEY_N:
if (!e.ctrlKey) break;
case KEY_DOWN:
if (!self.isOpen && self.hasOptions) {
self.open();
Expand All @@ -1440,6 +1452,8 @@
}
e.preventDefault();
return;
case KEY_P:
if (!e.ctrlKey) break;
case KEY_UP:
if (self.$activeOption) {
self.ignoreHover = true;
Expand All @@ -1461,6 +1475,9 @@
self.advanceSelection(1, e);
return;
case KEY_TAB:
if (self.isOpen && self.$activeOption) {
self.onOptionSelect({currentTarget: self.$activeOption});
}
if (self.settings.create && self.createItem()) {
e.preventDefault();
}
Expand Down Expand Up @@ -1553,8 +1570,16 @@
self.isFocused = false;
if (self.ignoreFocus) return;

// necessary to prevent IE closing the dropdown when the scrollbar is clicked
if (!self.ignoreBlur && document.activeElement === self.$dropdown_content[0]) {
self.ignoreBlur = true;
self.onFocus(e);

return;
}

if (self.settings.create && self.settings.createOnBlur) {
self.createItem();
self.createItem(false);
}

self.close();
Expand Down Expand Up @@ -2355,13 +2380,17 @@
*
* @return {boolean}
*/
createItem: function() {
createItem: function(triggerDropdown) {
var self = this;
var input = $.trim(self.$control_input.val() || '');
var caret = self.caretPos;
if (!input.length) return false;
self.lock();

if (typeof triggerDropdown === 'undefined') {
triggerDropdown = true;
}

var setup = (typeof self.settings.create === 'function') ? this.settings.create : function(input) {
var data = {};
data[self.settings.labelField] = input;
Expand All @@ -2380,7 +2409,7 @@
self.addOption(data);
self.setCaret(caret);
self.addItem(value);
self.refreshOptions(self.settings.mode !== 'single');
self.refreshOptions(triggerDropdown && self.settings.mode !== 'single');
});

var output = setup.apply(this, [input, create]);
Expand Down Expand Up @@ -3288,7 +3317,7 @@
e.preventDefault();
if (self.isLocked) return;

var $item = $(e.target).parent();
var $item = $(e.currentTarget).parent();
self.setActiveItem($item);
if (self.deleteSelection()) {
self.setCaret(self.items.length);
Expand Down
4 changes: 2 additions & 2 deletions dist/js/standalone/selectize.min.js

Large diffs are not rendered by default.

10 changes: 9 additions & 1 deletion src/selectize.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ $.extend(Selectize.prototype, {
keypress : function() { return self.onKeyPress.apply(self, arguments); },
resize : function() { self.positionDropdown.apply(self, []); },
blur : function() { return self.onBlur.apply(self, arguments); },
focus : function() { return self.onFocus.apply(self, arguments); }
focus : function() { self.ignoreBlur = false; return self.onFocus.apply(self, arguments); }
});

$document.on('keydown' + eventNS, function(e) {
Expand Down Expand Up @@ -526,6 +526,14 @@ $.extend(Selectize.prototype, {
self.isFocused = false;
if (self.ignoreFocus) return;

// necessary to prevent IE closing the dropdown when the scrollbar is clicked
if (!self.ignoreBlur && document.activeElement === self.$dropdown_content[0]) {
self.ignoreBlur = true;
self.onFocus(e);

return;
}

if (self.settings.create && self.settings.createOnBlur) {
self.createItem(false);
}
Expand Down

0 comments on commit f82d069

Please sign in to comment.