merging latest master
[lhc/web/wiklou.git] / resources / mediawiki / mediawiki.util.js
index 541c77a..d1bfd05 100644 (file)
@@ -1,11 +1,13 @@
 /**
  * Implements mediaWiki.util library
  */
-( function ( $, mw ) {
-       "use strict";
+( function ( mw, $ ) {
+       'use strict';
 
        // Local cache and alias
-       var util = {
+       var hideMessageTimeout,
+               messageBoxEvents = false,
+               util = {
 
                /**
                 * Initialisation
                 * @return {Boolean} True on success, false on failure.
                 */
                jsMessage: function ( message, className ) {
+                       var $messageDiv = $( '#mw-js-message' );
+
                        if ( !arguments.length || message === '' || message === null ) {
-                               $( '#mw-js-message' ).empty().hide();
+                               $messageDiv.empty().hide();
+                               stopHideMessageTimeout();
                                return true; // Emptying and hiding message is intended behaviour, return true
-
                        } else {
                                // We special-case skin structures provided by the software. Skins that
                                // choose to abandon or significantly modify our formatting can just define
                                // an mw-js-message div to start with.
-                               var $messageDiv = $( '#mw-js-message' );
                                if ( !$messageDiv.length ) {
                                        $messageDiv = $( '<div id="mw-js-message"></div>' );
                                        if ( util.$content.parent().length ) {
                                        }
                                }
 
+                               if ( !messageBoxEvents ) {
+                                       messageBoxEvents = true;
+                                       $messageDiv
+                                               .on( {
+                                                       'mouseenter': stopHideMessageTimeout,
+                                                       'mouseleave': startHideMessageTimeout,
+                                                       'click': hideMessage
+                                               } )
+                                               .on( 'click', 'a', function ( e ) {
+                                                       // Prevent links, even those that don't exist yet, from causing the
+                                                       // message box to close when clicked
+                                                       e.stopPropagation();
+                                               } );
+                               }
+
                                if ( className ) {
-                                       $messageDiv.prop( 'class', 'mw-js-message-' + className );
+                                       $messageDiv.prop( 'className', 'mw-js-message-' + className );
                                }
 
                                if ( typeof message === 'object' ) {
                                }
 
                                $messageDiv.slideDown();
+                               startHideMessageTimeout();
                                return true;
                        }
                },
                }
        };
 
+       // Message auto-hide helpers
+       function hideMessage() {
+               $( '#mw-js-message' ).fadeOut( 'slow' );
+       }
+       function stopHideMessageTimeout() {
+               clearTimeout( hideMessageTimeout );
+       }
+       function startHideMessageTimeout() {
+               clearTimeout( hideMessageTimeout );
+               hideMessageTimeout = setTimeout( hideMessage, 5000 );
+       }
+
        mw.util = util;
 
-} )( jQuery, mediaWiki );
+}( mediaWiki, jQuery ) );