mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-12-04 20:28:49 +00:00
75b6465876
This code has been moved to Minerva and is no longer serving any purpose. The handlers are replaced with an already standardized mw.hook for Minerva to subscribe and respond to. Bug: T342907 Depends-On: I55c18cf723a32f80b93a01dd0687e005162c4e93 Change-Id: I2f923e509d24524a2375ffbe6b3ef336487574bb
86 lines
2.6 KiB
JavaScript
86 lines
2.6 KiB
JavaScript
var mobile = mw.mobileFrontend.require( 'mobile.startup' ),
|
|
util = mobile.util,
|
|
View = mobile.View,
|
|
promisedView = mobile.promisedView;
|
|
|
|
/**
|
|
* This callback is displayed as a global member.
|
|
*
|
|
* @callback FunctionCountChangeCallback
|
|
* @param {number} count a capped (0-99 or 99+) count
|
|
*/
|
|
|
|
/**
|
|
* List of notifications
|
|
*
|
|
* @param {mw.echo} echo class
|
|
* @param {OO.ui.ButtonWidget} markAllReadButton - a button that will be associated with the
|
|
* read status of the notifications list.
|
|
* @param {FunctionCountChangeCallback} onCountChange callback.
|
|
* @return {View}
|
|
*/
|
|
function notificationsList( echo, markAllReadButton, onCountChange ) {
|
|
var wrapperWidget,
|
|
maxNotificationCount = require( './config.json' ).EchoMaxNotificationCount,
|
|
echoApi = new echo.api.EchoApi(),
|
|
unreadCounter = new echo.dm.UnreadNotificationCounter( echoApi, 'all', maxNotificationCount ),
|
|
modelManager = new echo.dm.ModelManager( unreadCounter, { type: [ 'message', 'alert' ] } ),
|
|
controller = new echo.Controller(
|
|
echoApi,
|
|
modelManager,
|
|
{
|
|
type: [ 'message', 'alert' ]
|
|
}
|
|
),
|
|
markAsReadHandler = function () {
|
|
markAllReadButton.toggle(
|
|
controller.manager.hasLocalUnread()
|
|
);
|
|
markAllReadButton.setTitle(
|
|
mw.msg( 'echo-mark-all-as-read', unreadCounter.getCount() )
|
|
);
|
|
},
|
|
// Create a container which will be revealed when "more options" (...)
|
|
// is clicked on a notification. Hidden by default.
|
|
$moreOptions = util.parseHTML( '<div>' )
|
|
.addClass( 'notifications-overlay-overlay position-fixed' );
|
|
|
|
echo.config.maxPrioritizedActions = 1;
|
|
|
|
wrapperWidget = new echo.ui.NotificationsWrapper( controller, modelManager, {
|
|
$overlay: $moreOptions
|
|
} );
|
|
|
|
// Events
|
|
unreadCounter.on( 'countChange', function ( count ) {
|
|
onCountChange(
|
|
controller.manager.getUnreadCounter().getCappedNotificationCount( count )
|
|
);
|
|
markAsReadHandler();
|
|
} );
|
|
markAllReadButton.on( 'click', function () {
|
|
var numNotifications = controller.manager.getLocalUnread().length;
|
|
|
|
controller.markLocalNotificationsRead()
|
|
.then( function () {
|
|
mw.notify( mw.msg( 'echo-mark-all-as-read-confirmation', numNotifications ) );
|
|
markAllReadButton.toggle( false );
|
|
}, function () {
|
|
markAllReadButton.toggle( false );
|
|
} );
|
|
} );
|
|
|
|
return promisedView(
|
|
// Populate notifications
|
|
wrapperWidget.populate().then( function () {
|
|
controller.updateSeenTime();
|
|
markAsReadHandler();
|
|
// Connect event here as we know that everything loaded correctly
|
|
modelManager.on( 'update', markAsReadHandler );
|
|
return View.make( {}, [ wrapperWidget.$element, $moreOptions ] );
|
|
} )
|
|
);
|
|
}
|
|
|
|
module.exports = notificationsList;
|