( function( $,mw ) {
mw.echo.overlay = {
'updateCount' : function( newCount ) {
$( '#pt-notifications a' )
.text( mw.msg( 'echo-link' ) )
.badge( newCount, { 'type' : 'inline' } );
mw.echo.overlay.notification_count = newCount;
},
'configuration' : mw.config.get( 'wgEchoOverlayConfiguration' ),
'buildOverlay' : function( callback ) {
var $overlay = $( '
' )
.addClass( 'mw-echo-overlay' );
var $link = $( '#pt-notifications a' );
$overlay.append(
$( '' )
.addClass( 'mw-echo-overlay-title' )
.text( mw.msg( 'echo-overlay-title' ) )
);
var Api = new mw.Api();
Api.get( {
'action' : 'query',
'meta' : 'notifications',
'notformat' : 'html',
'notprop' : 'index|list'
}, {
'ok' : function( result ) {
var notifications = result.query.notifications;
var $ul = $( '' ).appendTo( $overlay );
$.each( notifications.index, function( index, id ) {
var data = notifications[id];
var $li = $( '' )
.data( 'details', data )
.data( 'id', id )
.addClass( 'mw-echo-notification' )
.append( data['*'] )
.appendTo( $ul );
if ( ! data.read ) {
$li.addClass( 'mw-echo-unread' );
}
} );
if ( ! $ul.find( 'li' ).length ) {
$ul.remove();
$overlay.append(
$( '' )
.addClass( 'mw-echo-overlay-none' )
.text( mw.msg( 'echo-none' ) )
);
}
$overlay.append(
$( '' )
.addClass( 'mw-echo-overlay-link' )
.append( $link
.clone()
.text( mw.msg( 'echo-overlay-link' ) )
)
);
callback( $overlay );
Api.get( {
'action' : 'query',
'meta' : 'notifications',
'notmarkread' : notifications.index.join( '|' ),
'notprop' : 'count'
}, {
'ok' : function( result ) {
var count = result.query.notifications.count;
mw.echo.overlay.updateCount( count );
}
} );
},
'err' : function() {
window.location.href = $link.attr( 'href' );
}
} );
}
};
mw.echo.overlay.notification_count = mw.echo.overlay.configuration['notification-count'];
$( function() {
mw.echo.overlay.updateCount( mw.echo.overlay.notification_count );
var $link = $( '#pt-notifications a' );
if ( ! $link.length ) {
return;
}
$link.click( function( e ) {
e.preventDefault();
var $target = $( e.target );
// If the user clicked on the overlay or any child,
// ignore the click
if ( $target.hasClass( 'mw-echo-overlay' ) ||
$target.is( 'mw-echo-overlay *' )
) {
return;
}
var $overlay = $( '.mw-echo-overlay' );
if ( $overlay.length ) {
$overlay.fadeOut( 'fast',
function() { $overlay.remove(); }
);
return;
}
$overlay = mw.echo.overlay.buildOverlay(
function( $overlay ) {
$overlay
.hide()
.appendTo( $( 'body' ) )
.slideDown( 'fast' );
} );
} );
$( 'body' ).click( function( e ) {
if ( ! $( e.target ).is( '.mw-echo-overlay,.mw-echo-overlay *' ) ) {
$( '.mw-echo-overlay' ).fadeOut( 'fast',
function() { $( this ).remove(); }
);
}
} );
} );
} )( jQuery, mediaWiki );