Add notification for module dom creation with async support

This commit is contained in:
Connor Christie
2018-01-01 10:23:15 -06:00
parent 4a1bee769b
commit 80b84212cc

View File

@@ -19,38 +19,39 @@ var MM = (function() {
* are configured for a specific position. * are configured for a specific position.
*/ */
var createDomObjects = function() { var createDomObjects = function() {
for (var m in modules) { modules.forEach(module => {
var module = modules[m]; if (typeof module.data.position !== "string") {
return;
if (typeof module.data.position === "string") {
var wrapper = selectWrapper(module.data.position);
var dom = document.createElement("div");
dom.id = module.identifier;
dom.className = module.name;
if (typeof module.data.classes === "string") {
dom.className = "module " + dom.className + " " + module.data.classes;
}
dom.opacity = 0;
wrapper.appendChild(dom);
if (typeof module.data.header !== "undefined" && module.data.header !== "") {
var moduleHeader = document.createElement("header");
moduleHeader.innerHTML = module.data.header;
moduleHeader.className = "module-header";
dom.appendChild(moduleHeader);
}
var moduleContent = document.createElement("div");
moduleContent.className = "module-content";
dom.appendChild(moduleContent);
updateDom(module, 0);
} }
}
var wrapper = selectWrapper(module.data.position);
var dom = document.createElement("div");
dom.id = module.identifier;
dom.className = module.name;
if (typeof module.data.classes === "string") {
dom.className = "module " + dom.className + " " + module.data.classes;
}
dom.opacity = 0;
wrapper.appendChild(dom);
if (typeof module.data.header !== "undefined" && module.data.header !== "") {
var moduleHeader = document.createElement("header");
moduleHeader.innerHTML = module.data.header;
moduleHeader.className = "module-header";
dom.appendChild(moduleHeader);
}
var moduleContent = document.createElement("div");
moduleContent.className = "module-content";
dom.appendChild(moduleContent);
updateDom(module, 0).then(() => {
sendNotification("MODULE_DOM_CREATED", null, null, module);
}).catch(Log.error);
});
updateWrapperStates(); updateWrapperStates();
@@ -80,10 +81,9 @@ var MM = (function() {
* argument payload mixed - The payload of the notification. * argument payload mixed - The payload of the notification.
* argument sender Module - The module that sent the notification. * argument sender Module - The module that sent the notification.
*/ */
var sendNotification = function(notification, payload, sender) { var sendNotification = function(notification, payload, sender, sendTo) {
for (var m in modules) { for (var module of modules) {
var module = modules[m]; if (module !== sender && (!sendTo || module === sendTo)) {
if (module !== sender) {
module.notificationReceived(notification, payload, sender); module.notificationReceived(notification, payload, sender);
} }
} }
@@ -96,25 +96,20 @@ var MM = (function() {
* argument speed Number - The number of microseconds for the animation. (optional) * argument speed Number - The number of microseconds for the animation. (optional)
*/ */
var updateDom = function(module, speed) { var updateDom = function(module, speed) {
var newContentPromise = module.getDom(); return new Promise((resolve) => {
var newHeader = module.getHeader(); var newContentPromise = module.getDom();
var newHeader = module.getHeader();
if (!(newContentPromise instanceof Promise)) {
// convert to a promise if not already one to avoid if/else's everywhere if (!(newContentPromise instanceof Promise)) {
newContentPromise = Promise.resolve(newContentPromise); // convert to a promise if not already one to avoid if/else's everywhere
} newContentPromise = Promise.resolve(newContentPromise);
}
newContentPromise.then((newContent) => {
var updatePromise = updateDomWithContent(module, speed, newHeader, newContent); newContentPromise.then((newContent) => {
var updatePromise = updateDomWithContent(module, speed, newHeader, newContent);
updatePromise.then(() => {
// dom has been updated updatePromise.then(resolve).catch(Log.error);
sendNotification("MODULE_DOM_CREATED", { module: module.name }); }).catch(Log.error);
}).catch((err) => {
Log.error(err);
});
}).catch((err) => {
Log.error(err);
}); });
}; };