VulpesOS/gaia/apps/sms/views/shared/js/app.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

72 lines
1.8 KiB
JavaScript
Executable file

/*global Promise */
(function(exports) {
'use strict';
/**
* Class that is applied to body whenever application is ready for user.
* @const {string}
*/
const APPLICATION_READY_CLASS_NAME = 'js-app-ready';
/**
* Unique identifier of the app instance.
* @type {number}
*/
const INSTANCE_ID = Date.now();
var app = {
isReady: function app_isReady() {
return document.body.classList.contains(APPLICATION_READY_CLASS_NAME);
},
/**
* Sets application readiness, can be called only once
*/
setReady: function app_setReady() {
if (this.isReady()) {
throw new Error('Application should be marked as ready only once!');
}
document.body.classList.add(APPLICATION_READY_CLASS_NAME);
// Tell audio channel manager that we want to adjust the notification
// channel if the user press the volumeup/volumedown buttons in Messages.
if (navigator.mozAudioChannelManager) {
navigator.mozAudioChannelManager.volumeControlChannel = 'notification';
}
},
/**
* Returns promise that will be resolved once application is ready for
* interaction.
* @returns {Promise}
*/
whenReady: function whenReady() {
if (this.isReady()) {
return Promise.resolve();
}
return new Promise(function(resolve, reject) {
var bodyClassObserver = new MutationObserver(function() {
try {
if (this.isReady()) {
bodyClassObserver.disconnect();
resolve();
}
} catch(e) {
reject(e);
}
}.bind(this));
bodyClassObserver.observe(document.body, {
attributes: true,
attributeFilter: ['class']
});
}.bind(this));
},
get instanceId() {
return INSTANCE_ID;
}
};
exports.App = app;
})(this);