jquery.suggestions, mediawiki.searchSuggest: Don't use jquery.autoEllipsis
[lhc/web/wiklou.git] / resources / jquery / jquery.suggestions.js
index 3774d0c..29be239 100644 (file)
@@ -138,11 +138,11 @@ $.suggestions = {
         */
        configure: function ( context, property, value ) {
                var newCSS,
-                       $autoEllipseMe, $result, $results, childrenWidth,
-                       i, expWidth, matchedText, maxWidth, text;
+                       $result, $results, childrenWidth,
+                       i, expWidth, maxWidth, text;
 
                // Validate creation using fallback values
-               switch( property ) {
+               switch ( property ) {
                        case 'fetch':
                        case 'cancel':
                        case 'special':
@@ -237,8 +237,6 @@ $.suggestions = {
                                                $results = context.data.$container.children( '.suggestions-results' );
                                                $results.empty();
                                                expWidth = -1;
-                                               $autoEllipseMe = $( [] );
-                                               matchedText = null;
                                                for ( i = 0; i < context.config.suggestions.length; i++ ) {
                                                        /*jshint loopfunc:true */
                                                        text = context.config.suggestions[i];
@@ -259,15 +257,11 @@ $.suggestions = {
                                                        if ( typeof context.config.result.render === 'function' ) {
                                                                context.config.result.render.call( $result, context.config.suggestions[i], context );
                                                        } else {
-                                                               // Add <span> with text
-                                                               $result.append( $( '<span>' )
-                                                                               .css( 'whiteSpace', 'nowrap' )
-                                                                               .text( text )
-                                                                       );
+                                                               $result.text( text );
                                                        }
 
                                                        if ( context.config.highlightInput ) {
-                                                               matchedText = context.data.prevText;
+                                                               $result.highlightText( context.data.prevText );
                                                        }
 
                                                        // Widen results box if needed
@@ -277,19 +271,13 @@ $.suggestions = {
                                                                // factor in any padding, margin, or border space on the parent
                                                                expWidth = childrenWidth + ( context.data.$container.width() - $result.width() );
                                                        }
-                                                       $autoEllipseMe = $autoEllipseMe.add( $result );
                                                }
+
                                                // Apply new width for results box, if any
                                                if ( expWidth > context.data.$container.width() ) {
-                                                       maxWidth = context.config.maxExpandFactor*context.data.$textbox.width();
+                                                       maxWidth = context.config.maxExpandFactor * context.data.$textbox.width();
                                                        context.data.$container.width( Math.min( expWidth, maxWidth ) );
                                                }
-                                               // autoEllipse the results. Has to be done after changing the width
-                                               $autoEllipseMe.autoEllipsis( {
-                                                       hasSpan: true,
-                                                       tooltip: true,
-                                                       matchText: matchedText
-                                               } );
                                        }
                                }
                                break;
@@ -421,20 +409,26 @@ $.suggestions = {
                                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
+                                       // If nothing is selected or if something was selected with the mouse
+                                       // cancel any current requests and allow the form to be submitted
+                                       // (simply don't prevent default behavior).
                                        $.suggestions.cancel( context );
-                                       context.config.$region.closest( 'form' ).submit();
+                                       preventDefault = false;
                                } else if ( selected.is( '.suggestions-special' ) ) {
                                        if ( typeof context.config.special.select === 'function' ) {
-                                               context.config.special.select.call( selected, context.data.$textbox );
+                                               // Allow the callback to decide whether to prevent default or not
+                                               if ( context.config.special.select.call( selected, context.data.$textbox ) === true ) {
+                                                       preventDefault = false;
+                                               }
                                        }
                                } else {
+                                       $.suggestions.highlight( context, selected, true );
+
                                        if ( typeof context.config.result.select === 'function' ) {
-                                               $.suggestions.highlight( context, selected, true );
-                                               context.config.result.select.call( selected, context.data.$textbox );
-                                       } else {
-                                               $.suggestions.highlight( context, selected, true );
+                                               // Allow the callback to decide whether to prevent default or not
+                                               if ( context.config.result.select.call( selected, context.data.$textbox ) === true ) {
+                                                       preventDefault = false;
+                                               }
                                        }
                                }
                                break;
@@ -444,7 +438,7 @@ $.suggestions = {
                }
                if ( preventDefault ) {
                        e.preventDefault();
-                       e.stopImmediatePropagation();
+                       e.stopPropagation();
                }
        }
 };
@@ -591,24 +585,6 @@ $.fn.suggestions = function () {
                                        // Store key pressed to handle later
                                        context.data.keypressed = e.which;
                                        context.data.keypressedCount = 0;
-
-                                       switch ( context.data.keypressed ) {
-                                               // This preventDefault logic is duplicated from
-                                               // $.suggestions.keypress(), which sucks
-                                               // Arrow down
-                                               case 40:
-                                                       e.preventDefault();
-                                                       e.stopImmediatePropagation();
-                                                       break;
-                                               // Arrow up, Escape and Enter
-                                               case 38:
-                                               case 27:
-                                               case 13:
-                                                       if ( context.data.$container.is( ':visible' ) ) {
-                                                               e.preventDefault();
-                                                               e.stopImmediatePropagation();
-                                                       }
-                                       }
                                } )
                                .keypress( function ( e ) {
                                        context.data.keypressedCount++;