mediawiki-extensions-Echo/modules/mobile/list.js
Jon Robson 75b6465876 Drop dead code
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
2023-08-17 13:05:12 -05:00

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;