Add true module dom creation events

This commit is contained in:
Connor Christie 2018-01-01 09:42:34 -06:00
parent a0a02701b0
commit 4a1bee769b
2 changed files with 52 additions and 27 deletions

View File

@ -96,17 +96,44 @@ 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 newContent = module.getDom(); var newContentPromise = module.getDom();
var newHeader = module.getHeader(); var newHeader = module.getHeader();
if (!module.hidden) { if (!(newContentPromise instanceof Promise)) {
// 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);
updatePromise.then(() => {
// dom has been updated
sendNotification("MODULE_DOM_CREATED", { module: module.name });
}).catch((err) => {
Log.error(err);
});
}).catch((err) => {
Log.error(err);
});
};
var updateDomWithContent = function(module, speed, newHeader, newContent) {
return new Promise((resolve) => {
if (module.hidden || !speed) {
updateModuleContent(module, newHeader, newContent);
resolve();
return;
}
if (!moduleNeedsUpdate(module, newHeader, newContent)) { if (!moduleNeedsUpdate(module, newHeader, newContent)) {
resolve();
return; return;
} }
if (!speed) { if (!speed) {
updateModuleContent(module, newHeader, newContent); updateModuleContent(module, newHeader, newContent);
resolve();
return; return;
} }
@ -115,10 +142,9 @@ var MM = (function() {
if (!module.hidden) { if (!module.hidden) {
showModule(module, speed / 2); showModule(module, speed / 2);
} }
resolve();
});
}); });
} else {
updateModuleContent(module, newHeader, newContent);
}
}; };
/* moduleNeedsUpdate(module, newContent) /* moduleNeedsUpdate(module, newContent)

View File

@ -81,6 +81,7 @@ var Module = Class.extend({
* return domobject - The dom to display. * return domobject - The dom to display.
*/ */
getDom: function () { getDom: function () {
return new Promise((resolve) => {
var div = document.createElement("div"); var div = document.createElement("div");
var template = this.getTemplate(); var template = this.getTemplate();
var templateData = this.getTemplateData(); var templateData = this.getTemplateData();
@ -93,19 +94,17 @@ var Module = Class.extend({
Log.error(err) Log.error(err)
} }
// The inner content of the div will be set after the template is received.
// This isn't the most optimal way, but since it's near instant
// it probably won't be an issue.
// If it gives problems, we can always add a way to pre fetch the templates.
// Let's not over optimise this ... KISS! :)
div.innerHTML = res; div.innerHTML = res;
resolve(div);
}); });
} else { } else {
// the template is a template string. // the template is a template string.
div.innerHTML = this.nunjucksEnvironment().renderString(template, templateData); div.innerHTML = this.nunjucksEnvironment().renderString(template, templateData);
}
return div; resolve(div);
}
});
}, },
/* getHeader() /* getHeader()