Merge "Add optional message to define default description for Upload"
[lhc/web/wiklou.git] / resources / jquery / jquery.suggestions.js
index 303b18f..bf38769 100644 (file)
@@ -79,13 +79,16 @@ $.suggestions = {
         * @param {Boolean} delayed Whether or not to delay this by the currently configured amount of time
         */
        update: function ( context, delayed ) {
-               // Only fetch if the value in the textbox changed and is not empty
+               // Only fetch if the value in the textbox changed and is not empty, or if the results were hidden
                // 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();
                                context.data.prevText = '';
-                       } else if ( context.data.$textbox.val() !== context.data.prevText ) {
+                       } else if (
+                               context.data.$textbox.val() !== context.data.prevText ||
+                               !context.data.$container.is( ':visible' )
+                       ) {
                                if ( typeof context.config.fetch === 'function' ) {
                                        context.data.prevText = context.data.$textbox.val();
                                        context.config.fetch.call( context.data.$textbox, context.data.$textbox.val() );
@@ -217,7 +220,7 @@ $.suggestions = {
                                                } else {
                                                        // Expand from right
                                                        newCSS.left = 'auto';
-                                                       newCSS.right = $( 'body' ).width() - ( context.config.$region.offset().left + context.config.$region.outerWidth() );
+                                                       newCSS.right = $( document ).width() - ( context.config.$region.offset().left + context.config.$region.outerWidth() );
                                                }
 
                                                context.data.$container.css( newCSS );
@@ -306,11 +309,11 @@ $.suggestions = {
                var selected = context.data.$container.find( '.suggestions-result-current' );
                if ( !result.get || selected.get( 0 ) !== result.get( 0 ) ) {
                        if ( result === 'prev' ) {
-                               if( selected.is( '.suggestions-special' ) ) {
+                               if( selected.hasClass( 'suggestions-special' ) ) {
                                        result = context.data.$container.find( '.suggestions-result:last' );
                                } else {
                                        result = selected.prev();
-                                       if ( !( result.length && result.hasClass( '.suggestions-result' ) ) ) {
+                                       if ( !( result.length && result.hasClass( 'suggestions-result' ) ) ) {
                                                // there is something in the DOM between selected element and the wrapper, bypass it
                                                result = selected.parents( '.suggestions-results > *' ).prev().find( '.suggestions-result' ).eq(0);
                                        }
@@ -334,12 +337,12 @@ $.suggestions = {
                                        }
                                } else {
                                        result = selected.next();
-                                       if ( !( result.length && result.hasClass( '.suggestions-result' ) ) ) {
+                                       if ( !( result.length && result.hasClass( 'suggestions-result' ) ) ) {
                                                // there is something in the DOM between selected element and the wrapper, bypass it
                                                result = selected.parents( '.suggestions-results > *' ).next().find( '.suggestions-result' ).eq(0);
                                        }
 
-                                       if ( selected.is( '.suggestions-special' ) ) {
+                                       if ( selected.hasClass( 'suggestions-special' ) ) {
                                                result = $( [] );
                                        } else if (
                                                result.length === 0 &&
@@ -376,8 +379,7 @@ $.suggestions = {
                        preventDefault = false;
 
                switch ( key ) {
-                       // Arrow down
-                       case 40:
+                       case 40: // Arrow down
                                if ( wasVisible ) {
                                        $.suggestions.highlight( context, 'next', true );
                                        context.data.selectedWithMouse = false;
@@ -386,24 +388,21 @@ $.suggestions = {
                                }
                                preventDefault = true;
                                break;
-                       // Arrow up
-                       case 38:
+                       case 38: // Arrow up
                                if ( wasVisible ) {
                                        $.suggestions.highlight( context, 'prev', true );
                                        context.data.selectedWithMouse = false;
                                }
                                preventDefault = wasVisible;
                                break;
-                       // Escape
-                       case 27:
+                       case 27: // Escape
                                context.data.$container.hide();
                                $.suggestions.restore( context );
                                $.suggestions.cancel( context );
                                context.data.$textbox.trigger( 'change' );
                                preventDefault = wasVisible;
                                break;
-                       // Enter
-                       case 13:
+                       case 13: // Enter
                                context.data.$container.hide();
                                preventDefault = wasVisible;
                                selected = context.data.$container.find( '.suggestions-result-current' );
@@ -582,13 +581,13 @@ $.fn.suggestions = function () {
                                        switch ( context.data.keypressed ) {
                                                // This preventDefault logic is duplicated from
                                                // $.suggestions.keypress(), which sucks
-                                               case 40:
+                                               case 40: // Arrow down
                                                        e.preventDefault();
                                                        e.stopImmediatePropagation();
                                                        break;
-                                               case 38:
-                                               case 27:
-                                               case 13:
+                                               case 38: // Arrow up
+                                               case 27: // Escape
+                                               case 13: // Enter
                                                        if ( context.data.$container.is( ':visible' ) ) {
                                                                e.preventDefault();
                                                                e.stopImmediatePropagation();