mirror of
https://github.com/beestat/app.git
synced 2025-05-24 02:14:03 -04:00
Loading now doesn't break if the sync fails, and as a bonus that made it trivial to display whether or not ecobee is down.
60 lines
1.8 KiB
JavaScript
60 lines
1.8 KiB
JavaScript
beestat.layer = function() {
|
|
this.loaders_ = [];
|
|
};
|
|
|
|
/**
|
|
* Render this layer onto the body. First put everything in a container, then
|
|
* clear the body, then append the new container. This prevents the child
|
|
* layers from having to worry about multiple redraws since they aren't doing
|
|
* anything directly on the body.
|
|
*/
|
|
beestat.layer.prototype.render = function() {
|
|
rocket.EventTarget.removeAllEventListeners();
|
|
|
|
beestat.current_layer = this;
|
|
|
|
var body = $(document.body);
|
|
|
|
var container = $.createElement('div');
|
|
this.decorate_(container);
|
|
|
|
this.run_loaders_();
|
|
|
|
body.innerHTML('');
|
|
body.appendChild(container);
|
|
|
|
beestat.ecobee.notify_if_down();
|
|
};
|
|
|
|
beestat.layer.prototype.decorate_ = function(parent) {
|
|
// Left for the sublcass to implement.
|
|
};
|
|
|
|
/**
|
|
* Register a loader. Components do this. If the same function reference is
|
|
* passed by multiple components, the duplicates will be removed. The loader
|
|
* was added so that I could have multiple cards on the same layer that need
|
|
* the same data. Each card adds a loader and when the layer loads it runs
|
|
* these functions. This way a layer can get the data one time instead of each
|
|
* component firing off a duplicate API call.
|
|
*
|
|
* @param {Function} loader A function to call when all of the components have
|
|
* been added to the layer.
|
|
*/
|
|
beestat.layer.prototype.register_loader = function(loader) {
|
|
if (this.loaders_.indexOf(loader) === -1) {
|
|
this.loaders_.push(loader);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Execute all of the loaders. This is run once the decorate function has
|
|
* completed and thus all of the components in the layer have had a chance to
|
|
* add their loaders.
|
|
*/
|
|
beestat.layer.prototype.run_loaders_ = function() {
|
|
this.loaders_.forEach(function(loader) {
|
|
loader();
|
|
});
|
|
};
|