mirror of
https://github.com/beestat/app.git
synced 2025-05-24 02:14:03 -04:00
370 lines
9.3 KiB
JavaScript
370 lines
9.3 KiB
JavaScript
/**
|
|
* Setting
|
|
*/
|
|
beestat.component.card.settings = function() {
|
|
beestat.component.card.apply(this, arguments);
|
|
};
|
|
beestat.extend(beestat.component.card.settings, beestat.component.card);
|
|
|
|
/**
|
|
* Decorate contents.
|
|
*
|
|
* @param {rocket.Elements} parent Parent
|
|
*/
|
|
beestat.component.card.settings.prototype.decorate_contents_ = function(parent) {
|
|
const thermostat = beestat.cache.thermostat[
|
|
beestat.setting('thermostat_id')
|
|
];
|
|
|
|
/**
|
|
* User Interface
|
|
*/
|
|
parent.appendChild(
|
|
$.createElement('p')
|
|
.style('font-weight', '400')
|
|
.innerText('User Interface')
|
|
);
|
|
|
|
// Always dock tooltips
|
|
const always_dock_tooltips = new beestat.component.input.checkbox();
|
|
always_dock_tooltips
|
|
.set_label('Always Dock Tooltips')
|
|
.set_checked(beestat.setting('ui.always_dock_tooltips'))
|
|
.render(parent);
|
|
|
|
always_dock_tooltips.addEventListener('change', function() {
|
|
always_dock_tooltips.set_enabled(false);
|
|
beestat.setting(
|
|
'ui.always_dock_tooltips',
|
|
always_dock_tooltips.get_checked(),
|
|
function() {
|
|
always_dock_tooltips.set_enabled(true);
|
|
}
|
|
);
|
|
});
|
|
|
|
/**
|
|
* Units
|
|
*/
|
|
parent.appendChild(
|
|
$.createElement('p')
|
|
.style('font-weight', '400')
|
|
.innerText('Units')
|
|
);
|
|
|
|
// Temperature
|
|
parent.appendChild(
|
|
$.createElement('p')
|
|
.innerText('Temperature')
|
|
);
|
|
|
|
const temperature_radio_group = new beestat.component.radio_group()
|
|
.set_arrangement('horizontal');
|
|
[
|
|
'°F',
|
|
'°C'
|
|
].forEach(function(temperature_unit) {
|
|
temperature_radio_group.add_radio(
|
|
new beestat.component.input.radio()
|
|
.set_label(temperature_unit)
|
|
.set_value(temperature_unit)
|
|
.set_checked(beestat.setting('units.temperature') === temperature_unit)
|
|
);
|
|
});
|
|
|
|
temperature_radio_group.addEventListener('change', function() {
|
|
beestat.setting('units.temperature', temperature_radio_group.get_value());
|
|
});
|
|
|
|
temperature_radio_group.render(parent);
|
|
|
|
// Distance
|
|
parent.appendChild(
|
|
$.createElement('p')
|
|
.innerText('Distance / Area')
|
|
);
|
|
|
|
const distance_radio_group = new beestat.component.radio_group()
|
|
.set_arrangement('horizontal');
|
|
[
|
|
'ft',
|
|
'm'
|
|
].forEach(function(distance_unit) {
|
|
distance_radio_group.add_radio(
|
|
new beestat.component.input.radio()
|
|
.set_label(distance_unit + ' / ' + distance_unit + '²')
|
|
.set_value(distance_unit)
|
|
.set_checked(beestat.setting('units.distance') === distance_unit)
|
|
);
|
|
});
|
|
|
|
distance_radio_group.addEventListener('change', function() {
|
|
beestat.setting({
|
|
'units.distance': distance_radio_group.get_value(),
|
|
'units.area': distance_radio_group.get_value() + '²'
|
|
});
|
|
});
|
|
|
|
distance_radio_group.render(parent);
|
|
|
|
// Currency
|
|
parent.appendChild(
|
|
$.createElement('p')
|
|
.innerText('Currency')
|
|
);
|
|
const currency_select = new beestat.component.input.select()
|
|
.add_option({
|
|
'label': 'USD',
|
|
'value': 'usd'
|
|
})
|
|
.add_option({
|
|
'label': 'CAD',
|
|
'value': 'cad'
|
|
})
|
|
.add_option({
|
|
'label': 'AUD',
|
|
'value': 'aud'
|
|
})
|
|
.add_option({
|
|
'label': 'GBP',
|
|
'value': 'gbp'
|
|
});
|
|
|
|
currency_select.render(parent);
|
|
|
|
currency_select.set_value(beestat.setting('units.currency'));
|
|
|
|
currency_select.addEventListener('change', function() {
|
|
beestat.setting({
|
|
'units.currency': currency_select.get_value()
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Thermosat Summary
|
|
*/
|
|
parent.appendChild(
|
|
$.createElement('p')
|
|
.style('font-weight', '400')
|
|
.innerText('Thermostat Summary')
|
|
);
|
|
|
|
// Gap Fill
|
|
const enable_gap_fill = new beestat.component.input.checkbox();
|
|
enable_gap_fill
|
|
.set_label('Enable Gap Fill')
|
|
.set_checked(beestat.setting('runtime_thermostat_summary_gap_fill'))
|
|
.render(parent);
|
|
|
|
enable_gap_fill.addEventListener('change', function() {
|
|
enable_gap_fill.set_enabled(false);
|
|
beestat.setting(
|
|
'runtime_thermostat_summary_gap_fill',
|
|
enable_gap_fill.get_checked(),
|
|
function() {
|
|
enable_gap_fill.set_enabled(true);
|
|
}
|
|
);
|
|
});
|
|
|
|
// Smart Scale
|
|
const enable_smart_scale = new beestat.component.input.checkbox();
|
|
enable_smart_scale
|
|
.set_label('Enable Smart Scale')
|
|
.set_checked(beestat.setting('runtime_thermostat_summary_smart_scale'))
|
|
.render(parent);
|
|
|
|
enable_smart_scale.addEventListener('change', function() {
|
|
enable_smart_scale.set_enabled(false);
|
|
beestat.setting(
|
|
'runtime_thermostat_summary_smart_scale',
|
|
enable_smart_scale.get_checked(),
|
|
function() {
|
|
enable_smart_scale.set_enabled(true);
|
|
}
|
|
);
|
|
});
|
|
|
|
/**
|
|
* Temperature Profiles
|
|
*/
|
|
parent.appendChild(
|
|
$.createElement('p')
|
|
.style({
|
|
'font-weight': '400',
|
|
'margin-top': (beestat.style.size.gutter * 2) + 'px'
|
|
})
|
|
.innerText('Temperature Profiles')
|
|
);
|
|
const ignore_solar_gain = new beestat.component.input.checkbox();
|
|
const ignore_solar_gain_key = 'thermostat.' + thermostat.thermostat_id + '.profile.ignore_solar_gain';
|
|
ignore_solar_gain
|
|
.set_label('Ignore Solar Gain')
|
|
.set_checked(beestat.setting(ignore_solar_gain_key))
|
|
.render(parent);
|
|
|
|
ignore_solar_gain.addEventListener('change', function() {
|
|
ignore_solar_gain.set_enabled(false);
|
|
beestat.setting(
|
|
ignore_solar_gain_key,
|
|
ignore_solar_gain.get_checked(),
|
|
function() {
|
|
/**
|
|
* Clear the API call cache and delete the profile so it regenerates
|
|
* next time you go to the page.
|
|
*/
|
|
new beestat.api()
|
|
.add_call(
|
|
'thermostat',
|
|
'generate_profile',
|
|
{
|
|
'thermostat_id': thermostat.thermostat_id
|
|
},
|
|
undefined,
|
|
undefined,
|
|
undefined,
|
|
// Clear cache
|
|
true
|
|
)
|
|
.add_call(
|
|
'thermostat',
|
|
'update',
|
|
{
|
|
'attributes': {
|
|
'thermostat_id': thermostat.thermostat_id,
|
|
'profile': null
|
|
}
|
|
}
|
|
)
|
|
.add_call(
|
|
'thermostat',
|
|
'read_id',
|
|
{
|
|
'attributes': {
|
|
'inactive': 0
|
|
}
|
|
},
|
|
'thermostat'
|
|
)
|
|
.set_callback(function(response) {
|
|
ignore_solar_gain.set_enabled(true);
|
|
beestat.cache.set('thermostat', response.thermostat);
|
|
})
|
|
.send();
|
|
}
|
|
);
|
|
});
|
|
|
|
// Temperature profile begin/end
|
|
const temperature_profiles_range_begin_key = 'thermostat.' + thermostat.thermostat_id + '.profile.range_begin';
|
|
|
|
parent.appendChild(
|
|
$.createElement('p')
|
|
.innerText('Custom Start Date')
|
|
);
|
|
|
|
var temperature_profiles_range_begin = new beestat.component.input.text()
|
|
.set_maxlength(10)
|
|
.set_requirements({
|
|
'type': 'date'
|
|
})
|
|
.set_icon('calendar');
|
|
|
|
if (
|
|
beestat.setting(temperature_profiles_range_begin_key) !== undefined &&
|
|
beestat.setting(temperature_profiles_range_begin_key) !== null
|
|
) {
|
|
temperature_profiles_range_begin.set_value(
|
|
beestat.setting(temperature_profiles_range_begin_key)
|
|
);
|
|
}
|
|
|
|
temperature_profiles_range_begin.addEventListener('change', function() {
|
|
var temperature_profiles_range_begin_value;
|
|
if (
|
|
temperature_profiles_range_begin.meets_requirements() === true &&
|
|
this.get_value() !== undefined
|
|
) {
|
|
temperature_profiles_range_begin_value = this.get_value();
|
|
} else {
|
|
this.set_value('', false);
|
|
temperature_profiles_range_begin_value = null;
|
|
}
|
|
|
|
beestat.setting(
|
|
temperature_profiles_range_begin_key,
|
|
temperature_profiles_range_begin_value,
|
|
function() {
|
|
/**
|
|
* Clear the API call cache and delete the profile so it regenerates
|
|
* next time you go to the page.
|
|
*/
|
|
new beestat.api()
|
|
.add_call(
|
|
'thermostat',
|
|
'generate_profile',
|
|
{
|
|
'thermostat_id': thermostat.thermostat_id
|
|
},
|
|
undefined,
|
|
undefined,
|
|
undefined,
|
|
// Clear cache
|
|
true
|
|
)
|
|
.add_call(
|
|
'thermostat',
|
|
'update',
|
|
{
|
|
'attributes': {
|
|
'thermostat_id': thermostat.thermostat_id,
|
|
'profile': null
|
|
}
|
|
}
|
|
)
|
|
.add_call(
|
|
'thermostat',
|
|
'read_id',
|
|
{
|
|
'attributes': {
|
|
'inactive': 0
|
|
}
|
|
},
|
|
'thermostat'
|
|
)
|
|
.set_callback(function(response) {
|
|
beestat.cache.set('thermostat', response.thermostat);
|
|
})
|
|
.send();
|
|
}
|
|
);
|
|
});
|
|
|
|
temperature_profiles_range_begin.render(parent);
|
|
};
|
|
|
|
/**
|
|
* Get the title of the card.
|
|
*
|
|
* @return {string} The title.
|
|
*/
|
|
beestat.component.card.settings.prototype.get_title_ = function() {
|
|
return 'Settings';
|
|
};
|
|
|
|
/**
|
|
* Decorate the menu
|
|
*
|
|
* @param {rocket.Elements} parent
|
|
*/
|
|
beestat.component.card.settings.prototype.decorate_top_right_ = function(parent) {
|
|
var menu = (new beestat.component.menu()).render(parent);
|
|
|
|
menu.add_menu_item(new beestat.component.menu_item()
|
|
.set_text('Help')
|
|
.set_icon('help_circle')
|
|
.set_callback(function() {
|
|
window.open('https://doc.beestat.io/9d01e7256390473ca8121d4098d91c9d');
|
|
}));
|
|
};
|