mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-12-11 07:26:29 +00:00
06ae707d6e
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
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 );
|