mirror of
				https://github.com/beestat/app.git
				synced 2025-11-04 02:47:01 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			208 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			208 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} The title.
 | 
						|
 */
 | 
						|
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;
 | 
						|
  var menu_item_hide;
 | 
						|
 | 
						|
  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);
 | 
						|
 | 
						|
  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() {
 | 
						|
      window.open('https://doc.beestat.io/dd453829dc7c47019a775130c93bde0c');
 | 
						|
    });
 | 
						|
  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)');
 | 
						|
  }
 | 
						|
};
 |