}
},
+ /**
+ * Hide the element with suggestions and clean up some state.
+ */
+ hide: function ( context ) {
+ // Remove any highlights, including on "special" items
+ context.data.$container.find( '.suggestions-result-current' ).removeClass( 'suggestions-result-current' );
+ // Hide the container
+ context.data.$container.hide();
+ },
+
/**
* Restore the text the user originally typed in the textbox, before it
* was overwritten by highlight(). This restores the value the currently
// if the textbox is empty then clear the result div, but leave other settings intouched
function maybeFetch() {
if ( context.data.$textbox.val().length === 0 ) {
- context.data.$container.hide();
+ $.suggestions.hide( context );
context.data.prevText = '';
} else if (
context.data.$textbox.val() !== context.data.prevText ||
if ( context.data !== undefined ) {
if ( context.data.$textbox.val().length === 0 ) {
// Hide the div when no suggestion exist
- context.data.$container.hide();
+ $.suggestions.hide( context );
} else {
// Rebuild the suggestions list
context.data.$container.show();
preventDefault = false;
switch ( key ) {
- case 40: // Arrow down
+ // Arrow down
+ case 40:
if ( wasVisible ) {
$.suggestions.highlight( context, 'next', true );
context.data.selectedWithMouse = false;
}
preventDefault = true;
break;
- case 38: // Arrow up
+ // Arrow up
+ case 38:
if ( wasVisible ) {
$.suggestions.highlight( context, 'prev', true );
context.data.selectedWithMouse = false;
}
preventDefault = wasVisible;
break;
- case 27: // Escape
- context.data.$container.hide();
+ // Escape
+ case 27:
+ $.suggestions.hide( context );
$.suggestions.restore( context );
$.suggestions.cancel( context );
context.data.$textbox.trigger( 'change' );
preventDefault = wasVisible;
break;
- case 13: // Enter
- context.data.$container.hide();
+ // Enter
+ case 13:
preventDefault = wasVisible;
selected = context.data.$container.find( '.suggestions-result-current' );
+ $.suggestions.hide( context );
if ( selected.length === 0 || context.data.selectedWithMouse ) {
// if nothing is selected OR if something was selected with the mouse,
// cancel any current requests and submit the form
// do not interfere with non-left clicks or if modifier keys are pressed (e.g. ctrl-click)
if ( !( e.which !== 1 || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey ) ) {
$.suggestions.highlight( context, $result, true );
- context.data.$container.hide();
+ $.suggestions.hide( context );
if ( typeof context.config.result.select === 'function' ) {
context.config.result.select.call( $result, context.data.$textbox );
}
}
// do not interfere with non-left clicks or if modifier keys are pressed (e.g. ctrl-click)
if ( !( e.which !== 1 || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey ) ) {
- context.data.$container.hide();
+ $.suggestions.hide( context );
if ( typeof context.config.special.select === 'function' ) {
context.config.special.select.call( $special, context.data.$textbox );
}
switch ( context.data.keypressed ) {
// This preventDefault logic is duplicated from
// $.suggestions.keypress(), which sucks
- case 40: // Arrow down
+ // Arrow down
+ case 40:
e.preventDefault();
e.stopImmediatePropagation();
break;
- case 38: // Arrow up
- case 27: // Escape
- case 13: // Enter
+ // Arrow up, Escape and Enter
+ case 38:
+ case 27:
+ case 13:
if ( context.data.$container.is( ':visible' ) ) {
e.preventDefault();
e.stopImmediatePropagation();
if ( context.data.mouseDownOn.length > 0 ) {
return;
}
- context.data.$container.hide();
+ $.suggestions.hide( context );
$.suggestions.cancel( context );
} );
}