mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-12-11 07:26:29 +00:00
83 lines
2 KiB
JavaScript
83 lines
2 KiB
JavaScript
|
( function ( mw ) {
|
||
|
/**
|
||
|
* Wapper for the notifications widget, for view outside the popup.
|
||
|
*
|
||
|
* @class
|
||
|
* @extends OO.ui.Widget
|
||
|
* @mixins OO.ui.mixin.PendingElement
|
||
|
*
|
||
|
* @constructor
|
||
|
* @param {mw.echo.dm.NotificationsModel} model Notifications view model
|
||
|
* @param {Object} [config] Configuration object
|
||
|
*/
|
||
|
mw.echo.ui.NotificationsWrapper = function MwEchoUiNotificationsWrapper( model, config ) {
|
||
|
config = config || {};
|
||
|
|
||
|
// Parent constructor
|
||
|
mw.echo.ui.NotificationsWrapper.parent.call( this, config );
|
||
|
|
||
|
// Mixin constructor
|
||
|
OO.ui.mixin.PendingElement.call( this, config );
|
||
|
|
||
|
this.model = model;
|
||
|
|
||
|
this.notificationsWidget = new mw.echo.ui.NotificationsWidget(
|
||
|
this.model,
|
||
|
{
|
||
|
markReadWhenSeen: false,
|
||
|
$overlay: config.$overlay,
|
||
|
label: mw.msg( 'notifications' ),
|
||
|
icon: 'bell'
|
||
|
}
|
||
|
);
|
||
|
|
||
|
// Events
|
||
|
this.model.connect( this, {
|
||
|
unreadChange: [ 'emit', 'unreadChange' ],
|
||
|
allRead: [ 'emit', 'unreadChange', 0 ]
|
||
|
} );
|
||
|
|
||
|
// Initialize
|
||
|
this.$element
|
||
|
.append( this.notificationsWidget.$element );
|
||
|
};
|
||
|
|
||
|
/* Initialization */
|
||
|
|
||
|
OO.inheritClass( mw.echo.ui.NotificationsWrapper, OO.ui.Widget );
|
||
|
OO.mixinClass( mw.echo.ui.NotificationsWrapper, OO.ui.mixin.PendingElement );
|
||
|
|
||
|
/* Events */
|
||
|
|
||
|
/**
|
||
|
* @event finishLoading
|
||
|
* Notifications have successfully finished being processed and are fully loaded
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @event unreadChange
|
||
|
* @param {number} Number of unread messages
|
||
|
* There was a change in the number of unread notifications
|
||
|
*/
|
||
|
|
||
|
/* Methods */
|
||
|
|
||
|
/**
|
||
|
* Populate the notifications panel
|
||
|
*
|
||
|
* @return {jQuery.Promise} A promise that is resolved when all notifications
|
||
|
* were fetched from the API and added to the model and UI.
|
||
|
*/
|
||
|
mw.echo.ui.NotificationsWrapper.prototype.populate = function () {
|
||
|
var widget = this;
|
||
|
|
||
|
this.pushPending();
|
||
|
return this.model.fetchNotifications( true )
|
||
|
.always( function () {
|
||
|
widget.popPending();
|
||
|
widget.emit( 'finishLoading' );
|
||
|
widget.promiseRunning = false;
|
||
|
} );
|
||
|
};
|
||
|
} )( mediaWiki );
|