mediawiki-extensions-Echo/modules/ooui/mw.echo.ui.NotificationsWrapper.js
Moriel Schottlender 06ae707d6e Rename MobileNotificationsWrapper to NotificationsWrapper
We need to use it in more than just the context of mobile, and
there is nothing actually mobile-specific in it. Renaming the
class so it isn't awkward to use elsewhere.

This makes the ext.echo.ui.mobile module unnecessary, but
we leave it in until next patchset so that MobileFrontend
doesn't crash while we wait for the adjustments in
Ie592ca738ac2d8 to be merged.

Change-Id: I7891eb3fb46b350f0b325bf0a2b56b2cd55ff1d7
2016-03-23 19:47:23 +00:00

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 );