session-desktop/js/views/app_view.js

90 lines
2.3 KiB
JavaScript

/* global Backbone, Whisper, storage, _, $ */
/* eslint-disable more/no-then */
// eslint-disable-next-line func-names
(function() {
'use strict';
window.Whisper = window.Whisper || {};
Whisper.AppView = Backbone.View.extend({
initialize() {
this.inboxView = null;
this.applyRtl();
this.applyHideMenu();
},
events: {
openInbox: 'openInbox',
},
applyRtl() {
const rtlLocales = ['fa', 'ar', 'he'];
const loc = window.i18n.getLocale();
if (rtlLocales.includes(loc)) {
this.$el.addClass('rtl');
}
},
applyHideMenu() {
const hideMenuBar = storage.get('hide-menu-bar', true);
window.setAutoHideMenuBar(hideMenuBar);
window.setMenuBarVisibility(!hideMenuBar);
},
openView(view) {
this.el.innerHTML = '';
this.el.append(view.el);
this.delegateEvents();
},
openDebugLog() {
this.closeDebugLog();
this.debugLogView = new Whisper.DebugLogView();
this.debugLogView.$el.appendTo(this.el);
},
closeDebugLog() {
if (this.debugLogView) {
this.debugLogView.remove();
this.debugLogView = null;
}
},
openStandalone() {
this.resetViews();
this.standaloneView = new Whisper.SessionRegistrationView();
this.openView(this.standaloneView);
},
closeStandalone() {
if (this.standaloneView) {
this.standaloneView.remove();
this.standaloneView = null;
}
},
resetViews() {
this.closeStandalone();
},
openInbox(options = {}) {
_.defaults(options, { initialLoadComplete: this.initialLoadComplete });
if (!this.inboxView) {
// We create the inbox immediately so we don't miss an update to
// this.initialLoadComplete between the start of this method and the
// creation of inboxView.
this.inboxView = new Whisper.InboxView({
window,
initialLoadComplete: options.initialLoadComplete,
});
return window
.getConversationController()
.loadPromise()
.then(() => {
this.openView(this.inboxView);
});
}
if (!$.contains(this.el, this.inboxView.el)) {
this.openView(this.inboxView);
}
window.focus(); // FIXME
return Promise.resolve();
},
});
})();