/**
* 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 string Address to script (eg. '/w/api.php' )
*/
wikiScript: function ( str ) {
- return mw.config.get( 'wgScriptPath' ) + '/' + ( str || 'index' ) +
- mw.config.get( 'wgScriptExtension' );
+ str = str || 'index';
+ if ( str === 'index' ) {
+ return mw.config.get( 'wgScript' );
+ } else if ( str === 'load' ) {
+ return mw.config.get( 'wgLoadScript' );
+ } else {
+ return mw.config.get( 'wgScriptPath' ) + '/' + str +
+ mw.config.get( 'wgScriptExtension' );
+ }
},
/**
* @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 ) );