Skip to content

Commit

Permalink
Autocomplete: works with jQuery 2.1+. Fixes #291
Browse files Browse the repository at this point in the history
  • Loading branch information
Mottie committed Nov 20, 2014
1 parent 25ec3ba commit de75bc1
Showing 1 changed file with 20 additions and 56 deletions.
76 changes: 20 additions & 56 deletions js/jquery.keyboard.extension-autocomplete.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* jQuery UI Virtual Keyboard Autocomplete v1.5 for Keyboard v1.18+ only (3/1/2014)
* jQuery UI Virtual Keyboard Autocomplete v1.6 for Keyboard v1.18+ only (11/19/2014)
*
* By Rob Garrison (aka Mottie & Fudgey)
* Licensed under the MIT License
Expand All @@ -23,7 +23,7 @@
* .keyboard(options) // keyboard plugin
* .autocomplete(options) // jQuery UI autocomplete
* .addAutoComplete(); // this keyboard extension
*
*
*/
/*jshint browser:true, jquery:true, unused:false */
(function($){
Expand All @@ -41,7 +41,7 @@ $.fn.addAutocomplete = function(){
})($.ui.version.split("."));

// Setup
base.autocomplete_init = function(txt, delay, accept){
base.autocomplete_init = function(){

// visible event is fired before this extension is initialized, so check!
if (base.options.alwaysOpen && base.isVisible()) {
Expand All @@ -59,10 +59,10 @@ $.fn.addAutocomplete = function(){
.trigger('keydown.autocomplete');
}
})
.bind('hidden.keyboard', function(e){
.bind('hidden.keyboard', function(){
base.$el.autocomplete('close');
})
.bind('autocompleteopen', function(e, ui) {
.bind('autocompleteopen', function() {
if (base.hasAutocomplete){
// reposition autocomplete window next to the keyboard
base.$autocomplete.menu.element.position({
Expand All @@ -73,8 +73,8 @@ $.fn.addAutocomplete = function(){
});
}
})
.bind('autocompleteselect', function(e,ui){
var v = ui.item.value;
.bind('autocompleteselect', function(e, ui){
var v = ui.item && ui.item.value || '';
if (base.hasAutocomplete && v !== ''){
base.$preview
.val( v )
Expand All @@ -88,61 +88,25 @@ $.fn.addAutocomplete = function(){
// set up after keyboard is visible
base.autocomplete_setup = function(){
// look for autocomplete
base.$autocomplete = base.$el.data('autocomplete') || base.$el.data('uiAutocomplete');
base.$autocomplete = base.$el.data('autocomplete') || base.$el.data('uiAutocomplete') || base.$el.data('ui-autocomplete');
base.hasAutocomplete = (typeof(base.$autocomplete) === 'undefined') ? false : (base.$autocomplete.options.disabled) ? false : true;
// only bind to keydown once
if (base.hasAutocomplete) {
base.$preview.bind('keydown',function(e){
base.$preview.bind('keydown', function(e){
// send keys to the autocomplete widget (arrow, pageup/down, etc)
return base.autocomplete_input(e);
});
base.$allKeys.bind('mouseup mousedown mouseleave touchstart touchend touchcancel',function(e){
base.autocomplete_input(e);
base.$el.val( base.$preview.val() ).triggerHandler(e);
});
}
};
base.$allKeys.bind('mouseup mousedown mouseleave touchstart touchend touchcancel',function(){
clearTimeout( base.$autocomplete.searching );
base.$autocomplete.searching = setTimeout(function() {
// only search if the value has changed
if ( base.$autocomplete.term !== base.$autocomplete.element.val() ) {
base.$autocomplete.selectedItem = null;
base.$autocomplete.search( null, event );
}
}, base.$autocomplete.options.delay );

// Navigate and select inside autocomplete popup
base.autocomplete_input = function(event){
// copied from jquery ui autocomplete code to include autocomplete navigation
// there might be a better workaround
var t, keyCode = $.ui.keyCode;
switch( event.keyCode ) {
case keyCode.PAGE_UP:
base.$autocomplete._move( "previousPage", event );
event.preventDefault(); // stop page from moving up
break;
case keyCode.PAGE_DOWN:
base.$autocomplete._move( "nextPage", event );
event.preventDefault(); // stop page from moving down
break;
case keyCode.UP:
base.$autocomplete._move( "previous", event );
// prevent moving cursor to beginning of text field in some browsers
event.preventDefault();
break;
case keyCode.DOWN:
base.$autocomplete._move( "next", event );
// prevent moving cursor to end of text field in some browsers
event.preventDefault();
break;
case keyCode.ENTER:
case keyCode.NUMPAD_ENTER:
t = base.$autocomplete.menu.element.find('#ui-active-menuitem,.ui-state-focus').text() || '';
if (t !== '') { base.$preview.val(t); }
if (base.autocomplete_new_version) { base.$autocomplete.menu.select( event ); }
break;
default:
// keypress is triggered before the input value is changed
clearTimeout( base.$autocomplete.searching );
base.$autocomplete.searching = setTimeout(function() {
// only search if the value has changed
if ( base.$autocomplete.term !== base.$autocomplete.element.val() ) {
base.$autocomplete.selectedItem = null;
base.$autocomplete.search( null, event );
}
}, base.$autocomplete.options.delay );
break;
});
}
};

Expand Down

0 comments on commit de75bc1

Please sign in to comment.