1
0
mirror of https://github.com/beestat/app.git synced 2025-05-24 02:14:03 -04:00
beestat/js/component/card/alerts.js
Jon Ziebell eaee95736d Fixed #157 - Re-evaluate converged columns
Removed "json_" prefixes from all columns and converted columns to actual JSON types. Also removed all converged columns and converted contents to regular columns.
2019-10-28 21:18:43 -04:00

205 lines
5.3 KiB
JavaScript

/**
* Alerts
*/
beestat.component.card.alerts = function() {
beestat.component.card.apply(this, arguments);
this.alert_components_ = [];
};
beestat.extend(beestat.component.card.alerts, beestat.component.card);
/**
* Decorate all of the individual alert components.
*
* @param {rocket.Elements} parent
*/
beestat.component.card.alerts.prototype.decorate_contents_ = function(parent) {
var self = this;
parent.style({
'transition': 'background 200ms ease',
'position': 'relative',
'min-height': '100px' // Gives the thumbs up a bit of space
});
this.parent_ = parent;
var thermostat = beestat.cache.thermostat[beestat.setting('thermostat_id')];
// No alerts
this.no_alerts_ = $.createElement('div')
.style({
'position': 'absolute',
'top': '50%',
'left': '50%',
'transform': 'translate(-50%, -50%) scale(0)',
'transition': 'transform 200ms ease'
});
parent.appendChild(this.no_alerts_);
(new beestat.component.icon('thumb_up')
.set_size(64)
.set_color(beestat.style.color.bluegray.light)
).render(this.no_alerts_);
thermostat.alerts.forEach(function(alert) {
var alert_component = new beestat.component.alert(alert);
alert_component.addEventListener('click', function() {
self.pin_(alert_component);
});
alert_component.addEventListener('dismiss', function() {
if (beestat.setting('show_dismissed_alerts') === false) {
this.hide();
}
self.back_();
});
alert_component.addEventListener('restore', function() {
self.back_();
});
alert_component.render(parent);
self.alert_components_.push(alert_component);
});
self.show_or_hide_();
// Back handler
this.addEventListener('back', function() {
self.unpin_();
});
};
/**
* Expand the passed alert component, then hide the rest.
*
* @param {beestat.component.alert} alert_component
*/
beestat.component.card.alerts.prototype.pin_ = function(alert_component) {
var self = this;
this.show_back_();
this.pinned_alert_component_ = alert_component;
this.pinned_alert_component_.expand();
this.alert_components_.forEach(function(this_alert_component) {
if (this_alert_component !== self.pinned_alert_component_) {
this_alert_component.hide();
}
});
};
/**
* Collapse the open alert component, then show the hidden ones.
*/
beestat.component.card.alerts.prototype.unpin_ = function() {
var self = this;
if (this.pinned_alert_component_ !== undefined) {
this.pinned_alert_component_.collapse();
}
this.alert_components_.forEach(function(this_alert_component) {
if (this_alert_component !== self.pinned_alert_component_) {
this_alert_component.show();
}
});
this.show_or_hide_();
delete this.pinned_alert_component_;
};
/**
* Get the title of the card.
*
* @return {string}
*/
beestat.component.card.alerts.prototype.get_title_ = function() {
return 'Alerts';
};
/**
* Decorate the menu.
*
* @param {rocket.Elements} parent
*/
beestat.component.card.alerts.prototype.decorate_top_right_ = function(parent) {
var self = this;
var menu = (new beestat.component.menu()).render(parent);
var menu_item_show = new beestat.component.menu_item()
.set_text('Show dismissed')
.set_icon('bell')
.set_callback(function() {
menu_item_hide.show();
menu_item_show.hide();
beestat.setting('show_dismissed_alerts', true);
self.show_or_hide_();
self.unpin_();
});
menu.add_menu_item(menu_item_show);
var menu_item_hide = new beestat.component.menu_item()
.set_text('Hide dismissed')
.set_icon('bell_off')
.set_callback(function() {
menu_item_hide.hide();
menu_item_show.show();
beestat.setting('show_dismissed_alerts', false);
self.show_or_hide_();
self.unpin_();
});
menu.add_menu_item(menu_item_hide);
if (beestat.setting('show_dismissed_alerts') === true) {
menu_item_hide.show();
menu_item_show.hide();
} else {
menu_item_hide.hide();
menu_item_show.show();
}
var menu_item_help = new beestat.component.menu_item()
.set_text('Help')
.set_icon('help_circle')
.set_callback(function() {
(new beestat.component.modal.help_alerts()).render();
});
menu.add_menu_item(menu_item_help);
};
/**
* Look at all of the existing alerts and determine if any UI changes need to
* be made (show/hide, background colors, etc).
*/
beestat.component.card.alerts.prototype.show_or_hide_ = function() {
var has_alerts = false;
this.alert_components_.forEach(function(alert_component) {
var should_show = alert_component.should_show();
has_alerts = has_alerts || should_show;
if (should_show === true) {
alert_component.show();
} else {
alert_component.hide();
}
});
if (has_alerts === true) {
this.parent_.style('background', beestat.style.color.red.base);
this.no_alerts_.style('transform', 'translate(-50%, -50%) scale(0)');
} else {
this.parent_.style('background', beestat.style.color.bluegray.base);
this.no_alerts_.style('transform', 'translate(-50%, -50%) scale(1)');
}
};