src/mobile.startup/showOnPageReload.js
const
storageKey = 'mobileFrontend/toast';
/**
* Show the previously saved toast data and delete it from storage
*
* @memberof Toast
* @instance
* @private
*/
function showPending() {
let data = mw.storage.get( storageKey );
if ( data ) {
data = JSON.parse( data );
mw.notify( data.content, data.options );
mw.storage.remove( storageKey );
}
}
mw.requestIdleCallback( showPending );
/**
* Save the toast data in storage so that we can show it on page reload.
* Also check whether there is a pending message that's not shown yet.
* If yes, output a warning message and discard this message.
* This is to ensure that the page needs to be reloaded before adding
* a new message for showing later.
*
* @memberof Toast
* @instance
* @param {string} content Content to be placed in element
* @param {Object|string} [options]
* If a string (deprecated) CSS class to add to the element
* If an object, more options for the notification see mw.notification.show.
* For backwards compatibility reasons if a string is given it will be
* treated as options.type
*/
function showOnPageReload( content, options ) {
if ( mw.storage.get( storageKey ) ) {
mw.log.warn(
'A pending toast message already exits. ' +
'The page should have been reloaded by now.'
);
return;
}
mw.storage.set( storageKey, JSON.stringify( {
content,
options
} ) );
}
module.exports = { showOnPageReload };