mirror of
				https://github.com/beestat/app.git
				synced 2025-10-31 01:57:01 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			195 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Custom date range for the Runtime Summary chart.
 | |
|  */
 | |
| beestat.component.modal.runtime_thermostat_summary_custom = function() {
 | |
|   beestat.component.modal.apply(this, arguments);
 | |
| };
 | |
| beestat.extend(beestat.component.modal.runtime_thermostat_summary_custom, beestat.component.modal);
 | |
| 
 | |
| beestat.component.modal.runtime_thermostat_summary_custom.prototype.decorate_contents_ = function(parent) {
 | |
|   var self = this;
 | |
| 
 | |
|   parent.appendChild($.createElement('p').innerHTML('Choose a custom range to display on the Runtime Summary chart.'));
 | |
| 
 | |
|   // Time count
 | |
|   var time_count = new beestat.component.input.text()
 | |
|     .set_width(75)
 | |
|     .set_maxlength(10)
 | |
|     .set_icon('pound')
 | |
|     .set_value(beestat.setting('runtime_thermostat_summary_time_count'));
 | |
| 
 | |
|   self.state_.runtime_thermostat_summary_time_count =
 | |
|     beestat.setting('runtime_thermostat_summary_time_count');
 | |
| 
 | |
|   time_count.addEventListener('blur', function() {
 | |
|     self.state_.runtime_thermostat_summary_time_count =
 | |
|       parseInt(this.get_value(), 10) || 1;
 | |
|   });
 | |
| 
 | |
|   // Button groups
 | |
|   var options = {
 | |
|     'runtime_thermostat_summary_time_period': [
 | |
|       'day',
 | |
|       'week',
 | |
|       'month',
 | |
|       'year',
 | |
|       'all'
 | |
|     ],
 | |
|     'runtime_thermostat_summary_group_by': [
 | |
|       'day',
 | |
|       'week',
 | |
|       'month',
 | |
|       'year'
 | |
|     ]
 | |
|   };
 | |
| 
 | |
|   var tile_groups = {};
 | |
| 
 | |
|   this.selected_buttons_ = {};
 | |
|   for (let key in options) {
 | |
|     let current_type = beestat.setting(key);
 | |
| 
 | |
|     let tile_group = new beestat.component.tile_group();
 | |
|     options[key].forEach(function(value) {
 | |
|       let text = value.replace('runtime_thermostat_summary_', '')
 | |
|         .charAt(0)
 | |
|         .toUpperCase() +
 | |
|         value.slice(1) +
 | |
|         (
 | |
|           (
 | |
|             key === 'runtime_thermostat_summary_time_period' &&
 | |
|             value !== 'all'
 | |
|           ) ? 's' : ''
 | |
|         );
 | |
| 
 | |
|       let button = new beestat.component.tile()
 | |
|         .set_background_hover_color(beestat.style.color.lightblue.base)
 | |
|         .set_text_color('#fff')
 | |
|         .set_text(text)
 | |
|         .addEventListener('click', function() {
 | |
|           if (key === 'runtime_thermostat_summary_time_period') {
 | |
|             if (value === 'all') {
 | |
|               time_count.set_value('∞').set_enabled(false);
 | |
|             } else if (time_count.get_value() === '∞') {
 | |
|               time_count
 | |
|                 .set_value(self.state_.runtime_thermostat_summary_time_count || '1')
 | |
|                 .set_enabled(true);
 | |
|               time_count.dispatchEvent('blur');
 | |
|             }
 | |
|           }
 | |
| 
 | |
|           if (current_type !== value) {
 | |
|             this.set_background_color(beestat.style.color.lightblue.base);
 | |
|             if (self.selected_buttons_[key] !== undefined) {
 | |
|               self.selected_buttons_[key]
 | |
|                 .set_background_color(beestat.style.color.bluegray.base);
 | |
|             }
 | |
|             self.selected_buttons_[key] = this;
 | |
|             self.state_[key] = value;
 | |
|             current_type = value;
 | |
|           }
 | |
|         });
 | |
| 
 | |
|       if (current_type === value) {
 | |
|         if (
 | |
|           key === 'runtime_thermostat_summary_time_period' &&
 | |
|           value === 'all'
 | |
|         ) {
 | |
|           time_count.set_value('∞').set_enabled(false);
 | |
|         }
 | |
| 
 | |
|         button.set_background_color(beestat.style.color.lightblue.base);
 | |
|         self.state_[key] = value;
 | |
|         self.selected_buttons_[key] = button;
 | |
|       } else {
 | |
|         button.set_background_color(beestat.style.color.bluegray.base);
 | |
|       }
 | |
| 
 | |
|       tile_group.add_tile(button);
 | |
|     });
 | |
|     tile_groups[key] = tile_group;
 | |
|   }
 | |
| 
 | |
|   // Display it all
 | |
|   var row;
 | |
|   var column;
 | |
| 
 | |
|   (new beestat.component.title('Time Period')).render(parent);
 | |
|   row = $.createElement('div').addClass('row');
 | |
|   parent.appendChild(row);
 | |
|   column = $.createElement('div').addClass(['column column_2']);
 | |
|   row.appendChild(column);
 | |
|   time_count.render(column);
 | |
|   column = $.createElement('div').addClass(['column column_10']);
 | |
|   row.appendChild(column);
 | |
|   tile_groups.runtime_thermostat_summary_time_period.render(column);
 | |
|   (new beestat.component.title('Group By')).render(parent);
 | |
|   row = $.createElement('div').addClass('row');
 | |
|   parent.appendChild(row);
 | |
|   column = $.createElement('div').addClass(['column column_12']);
 | |
|   row.appendChild(column);
 | |
|   tile_groups.runtime_thermostat_summary_group_by.render(column);
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Get title.
 | |
|  *
 | |
|  * @return {string} Title
 | |
|  */
 | |
| beestat.component.modal.runtime_thermostat_summary_custom.prototype.get_title_ = function() {
 | |
|   return 'Thermostat Summary - Custom Range';
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Get the buttons that go on the bottom of this modal.
 | |
|  *
 | |
|  * @return {[beestat.component.button]} The buttons.
 | |
|  */
 | |
| beestat.component.modal.runtime_thermostat_summary_custom.prototype.get_buttons_ = function() {
 | |
|   var self = this;
 | |
| 
 | |
|   var cancel = new beestat.component.tile()
 | |
|     .set_background_color('#fff')
 | |
|     .set_text_color(beestat.style.color.gray.base)
 | |
|     .set_text_hover_color(beestat.style.color.red.base)
 | |
|     .set_shadow(false)
 | |
|     .set_text('Cancel')
 | |
|     .addEventListener('click', function() {
 | |
|       self.dispose();
 | |
|     });
 | |
| 
 | |
|   var save = new beestat.component.tile()
 | |
|     .set_background_color(beestat.style.color.green.base)
 | |
|     .set_background_hover_color(beestat.style.color.green.light)
 | |
|     .set_text_color('#fff')
 | |
|     .set_text('Save')
 | |
|     .addEventListener('click', function() {
 | |
|       this
 | |
|         .set_background_color(beestat.style.color.gray.base)
 | |
|         .set_background_hover_color()
 | |
|         .removeEventListener('click');
 | |
| 
 | |
|       beestat.setting(
 | |
|         {
 | |
|           'runtime_thermostat_summary_time_count':
 | |
|             self.state_.runtime_thermostat_summary_time_period === 'all'
 | |
|               ? 0
 | |
|               : self.state_.runtime_thermostat_summary_time_count,
 | |
|           'runtime_thermostat_summary_time_period':
 | |
|             self.state_.runtime_thermostat_summary_time_period,
 | |
|           'runtime_thermostat_summary_group_by':
 | |
|             self.state_.runtime_thermostat_summary_group_by
 | |
|         },
 | |
|         undefined,
 | |
|         function() {
 | |
|           self.dispose();
 | |
|         }
 | |
|       );
 | |
|     });
 | |
| 
 | |
|   return [
 | |
|     cancel,
 | |
|     save
 | |
|   ];
 | |
| };
 |