Merge "Make autoblocks update with the parent block"
[lhc/web/wiklou.git] / resources / jquery / jquery.suggestions.js
index bf38769..3774d0c 100644 (file)
@@ -61,6 +61,16 @@ $.suggestions = {
                }
        },
 
+       /**
+        * 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
@@ -83,7 +93,7 @@ $.suggestions = {
                // 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 ||
@@ -147,7 +157,7 @@ $.suggestions = {
                                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();
@@ -379,7 +389,8 @@ $.suggestions = {
                        preventDefault = false;
 
                switch ( key ) {
-                       case 40: // Arrow down
+                       // Arrow down
+                       case 40:
                                if ( wasVisible ) {
                                        $.suggestions.highlight( context, 'next', true );
                                        context.data.selectedWithMouse = false;
@@ -388,24 +399,27 @@ $.suggestions = {
                                }
                                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
@@ -526,7 +540,7 @@ $.fn.suggestions = function () {
                                                        // 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 );
                                                                }
@@ -553,7 +567,7 @@ $.fn.suggestions = function () {
                                                        }
                                                        // 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 );
                                                                }
@@ -581,13 +595,15 @@ $.fn.suggestions = function () {
                                        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();
@@ -611,7 +627,7 @@ $.fn.suggestions = function () {
                                        if ( context.data.mouseDownOn.length > 0 ) {
                                                return;
                                        }
-                                       context.data.$container.hide();
+                                       $.suggestions.hide( context );
                                        $.suggestions.cancel( context );
                                } );
                }