Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if (document.hidden) {
appSelf.latest('self', function(app) {
app.launch();
});
}
this.emitWhenListener('notification', data);
}
});
if ('mozSetMessageHandler' in navigator) {
navigator.mozSetMessageHandler(
'activity', appMessages.onActivityRequest.bind(appMessages));
navigator.mozSetMessageHandler(
'notification', appMessages.onNotification.bind(appMessages));
evt.on(
'notification', appMessages.onNotification.bind(appMessages));
// Do not listen for navigator.mozSetMessageHandler('request-sync')
// type, that is only done in the back end's cronsync for now.
} else {
console.warn('Activity support disabled!');
}
return appMessages;
});
showFinalCardState(function() {
resetCards('message_list', args);
});
}
// Handles visibility changes: if the app becomes visible
// being hidden via a cronsync startup, trigger UI creation.
document.addEventListener('visibilitychange', function onVisibilityChange() {
if (startedInBackground && finalCardStateCallback && !document.hidden) {
finalCardStateCallback();
finalCardStateCallback = null;
}
}, false);
// The add account UI flow is requested.
evt.on('addAccount', function() {
cards.removeAllCards();
// Show the first setup card again.
pushStartCard('setup_account_info', {
allowBack: true
});
});
function resetApp() {
// Clear any existing local state and reset UI/model state.
waitForAppMessage = false;
waitingForCreateAccountPrompt = false;
activityCallback = null;
cards.removeAllCards();
model.init();
messageSuid: data.suid
});
sendNotification(
BACKGROUND_SEND_NOTIFICATION_ID,
mozL10n.get('background-send-error-title'),
data.localizedDescription,
iconUrl + '#' + dataString
);
});
}
};
// When inbox is viewed, be sure to clear out any possible notification
// for that account.
evt.on('inboxShown', function(accountId) {
fetchNotificationsData('sync').then(function(notificationsData) {
if (notificationsData.hasOwnProperty(accountId)) {
notificationsData[accountId].notification.close();
}
});
});
});
});
return true;
}
return false;
}
// An account was deleted. Burn it all to the ground and
// rise like a phoenix. Prefer a UI event vs. a slice
// listen to give flexibility about UI construction:
// an acctsSlice splice change may not warrant removing
// all the cards.
evt.on('accountDeleted', resetApp);
evt.on('resetApp', resetApp);
// A request to show the latest account in the UI.
// Usually triggered after an account has been added.
evt.on('showLatestAccount', function() {
cards.removeAllCards();
model.latestOnce('acctsSlice', function(acctsSlice) {
var account = acctsSlice.items[acctsSlice.items.length - 1];
model.changeAccount(account, function() {
pushStartCard('message_list', {
// If waiting to complete an activity, do so after pushing the
// message list card.
onPushed: activityContinued
});
});
});
});
model.on('acctsSlice', function() {
if (activityCallback) {
var activityCb = activityCallback;
activityCallback = null;
activityCb();
return true;
}
return false;
}
// An account was deleted. Burn it all to the ground and
// rise like a phoenix. Prefer a UI event vs. a slice
// listen to give flexibility about UI construction:
// an acctsSlice splice change may not warrant removing
// all the cards.
evt.on('accountDeleted', resetApp);
evt.on('resetApp', resetApp);
// A request to show the latest account in the UI.
// Usually triggered after an account has been added.
evt.on('showLatestAccount', function() {
cards.removeAllCards();
model.latestOnce('acctsSlice', function(acctsSlice) {
var account = acctsSlice.items[acctsSlice.items.length - 1];
model.changeAccount(account, function() {
pushStartCard('message_list', {
// If waiting to complete an activity, do so after pushing the
// message list card.
onPushed: activityContinued
});
});
function activityContinued() {
if (activityCallback) {
var activityCb = activityCallback;
activityCallback = null;
activityCb();
return true;
}
return false;
}
// An account was deleted. Burn it all to the ground and
// rise like a phoenix. Prefer a UI event vs. a slice
// listen to give flexibility about UI construction:
// an acctsSlice splice change may not warrant removing
// all the cards.
evt.on('accountDeleted', resetApp);
evt.on('resetApp', resetApp);
// A request to show the latest account in the UI.
// Usually triggered after an account has been added.
evt.on('showLatestAccount', function() {
cards.removeAllCards();
model.latestOnce('acctsSlice', function(acctsSlice) {
var account = acctsSlice.items[acctsSlice.items.length - 1];
model.changeAccount(account, function() {
pushStartCard('message_list', {
// If waiting to complete an activity, do so after pushing the
// message list card.
onPushed: activityContinued
});
this.msgVScroll.vScroll.on('inited', this._hideSearchBoxByScrolling);
this.msgVScroll.vScroll.on('dataChanged', this._hideSearchBoxByScrolling);
this.msgVScroll.vScroll.on('recalculated', function(calledFromTop) {
if (calledFromTop) {
this._hideSearchBoxByScrolling();
}
}.bind(this));
this._topBar = new MessageListTopBar(
this.querySelector('.message-list-topbar')
);
this._topBar.bindToElements(this.scrollContainer,
this.msgVScroll.vScroll);
this.onFolderPickerClosing = this.onFolderPickerClosing.bind(this);
evt.on('folderPickerClosing', this.onFolderPickerClosing);
},