mirror of
https://github.com/beestat/app.git
synced 2026-02-25 20:50:25 -05:00
Better date range clamping
This commit is contained in:
parent
898e4e1c8d
commit
eebe2e07e9
64
js/beestat/date_range.js
Normal file
64
js/beestat/date_range.js
Normal file
@ -0,0 +1,64 @@
|
||||
/**
|
||||
* Date range helpers.
|
||||
*/
|
||||
beestat.date_range = {};
|
||||
|
||||
/**
|
||||
* Clamp a detail range object for dynamic/static detail charts.
|
||||
*
|
||||
* @param {object} range
|
||||
* @param {object} options
|
||||
*
|
||||
* @return {object}
|
||||
*/
|
||||
beestat.date_range.clamp = function(range, options) {
|
||||
var max_dynamic_days = options.max_dynamic_days;
|
||||
var max_static_days = options.max_static_days;
|
||||
var now_m = options.now ? moment(options.now) : moment();
|
||||
|
||||
var clamped = {
|
||||
'type': range.type === 'static' ? 'static' : 'dynamic',
|
||||
'dynamic': parseInt(range.dynamic, 10),
|
||||
'static_begin': range.static_begin,
|
||||
'static_end': range.static_end
|
||||
};
|
||||
|
||||
if (isNaN(clamped.dynamic) === true || clamped.dynamic < 1) {
|
||||
clamped.dynamic = 1;
|
||||
} else if (clamped.dynamic > max_dynamic_days) {
|
||||
clamped.dynamic = max_dynamic_days;
|
||||
}
|
||||
|
||||
var static_end_m = moment(clamped.static_end);
|
||||
if (static_end_m.isValid() === false) {
|
||||
static_end_m = now_m.clone();
|
||||
}
|
||||
|
||||
var static_begin_m = moment(clamped.static_begin);
|
||||
if (static_begin_m.isValid() === false) {
|
||||
static_begin_m = static_end_m.clone().subtract(max_static_days - 1, 'day');
|
||||
}
|
||||
|
||||
if (static_begin_m.isAfter(static_end_m) === true) {
|
||||
var temp = static_begin_m.clone();
|
||||
static_begin_m = static_end_m.clone();
|
||||
static_end_m = temp;
|
||||
}
|
||||
|
||||
var diff = Math.abs(static_end_m.diff(static_begin_m, 'day')) + 1;
|
||||
if (diff > max_static_days) {
|
||||
static_end_m = static_begin_m.clone().add(max_static_days - 1, 'day');
|
||||
}
|
||||
|
||||
clamped.static_begin = static_begin_m.format('M/D/YYYY');
|
||||
clamped.static_end = static_end_m.format('M/D/YYYY');
|
||||
|
||||
clamped.changed = (
|
||||
clamped.type !== range.type ||
|
||||
clamped.dynamic !== range.dynamic ||
|
||||
clamped.static_begin !== range.static_begin ||
|
||||
clamped.static_end !== range.static_end
|
||||
);
|
||||
|
||||
return clamped;
|
||||
};
|
||||
@ -322,16 +322,23 @@ beestat.component.modal.air_quality_detail_custom.prototype.get_buttons_ = funct
|
||||
.set_text_color('#fff')
|
||||
.set_text('Save')
|
||||
.addEventListener('click', function() {
|
||||
// Bit of a rig to fix the odd situation where somehow people are
|
||||
// getting these values set to more than 30 days.
|
||||
var air_quality_detail_range_static_begin_m = moment(self.state_.air_quality_detail_range_static_begin);
|
||||
var air_quality_detail_range_static_end_m = moment(self.state_.air_quality_detail_range_static_end);
|
||||
var range = beestat.date_range.clamp(
|
||||
{
|
||||
'type': self.state_.air_quality_detail_range_type,
|
||||
'dynamic': self.state_.air_quality_detail_range_dynamic,
|
||||
'static_begin': self.state_.air_quality_detail_range_static_begin,
|
||||
'static_end': self.state_.air_quality_detail_range_static_end
|
||||
},
|
||||
{
|
||||
'max_dynamic_days': 7,
|
||||
'max_static_days': 7
|
||||
}
|
||||
);
|
||||
|
||||
var diff = Math.abs(air_quality_detail_range_static_begin_m.diff(air_quality_detail_range_static_end_m, 'day')) + 1;
|
||||
if (diff > 30) {
|
||||
air_quality_detail_range_static_end_m = air_quality_detail_range_static_begin_m.clone().add(29, 'days');
|
||||
self.state_.air_quality_detail_range_static_end = air_quality_detail_range_static_end_m.format('M/D/YYYY');
|
||||
}
|
||||
self.state_.air_quality_detail_range_type = range.type;
|
||||
self.state_.air_quality_detail_range_dynamic = range.dynamic;
|
||||
self.state_.air_quality_detail_range_static_begin = range.static_begin;
|
||||
self.state_.air_quality_detail_range_static_end = range.static_end;
|
||||
|
||||
this
|
||||
.set_background_color(beestat.style.color.gray.base)
|
||||
|
||||
@ -322,16 +322,23 @@ beestat.component.modal.runtime_sensor_detail_custom.prototype.get_buttons_ = fu
|
||||
.set_text_color('#fff')
|
||||
.set_text('Save')
|
||||
.addEventListener('click', function() {
|
||||
// Bit of a rig to fix the odd situation where somehow people are
|
||||
// getting these values set to more than 30 days.
|
||||
var runtime_sensor_detail_range_static_begin_m = moment(self.state_.runtime_sensor_detail_range_static_begin);
|
||||
var runtime_sensor_detail_range_static_end_m = moment(self.state_.runtime_sensor_detail_range_static_end);
|
||||
var range = beestat.date_range.clamp(
|
||||
{
|
||||
'type': self.state_.runtime_sensor_detail_range_type,
|
||||
'dynamic': self.state_.runtime_sensor_detail_range_dynamic,
|
||||
'static_begin': self.state_.runtime_sensor_detail_range_static_begin,
|
||||
'static_end': self.state_.runtime_sensor_detail_range_static_end
|
||||
},
|
||||
{
|
||||
'max_dynamic_days': 7,
|
||||
'max_static_days': 7
|
||||
}
|
||||
);
|
||||
|
||||
var diff = Math.abs(runtime_sensor_detail_range_static_begin_m.diff(runtime_sensor_detail_range_static_end_m, 'day')) + 1;
|
||||
if (diff > 30) {
|
||||
runtime_sensor_detail_range_static_end_m = runtime_sensor_detail_range_static_begin_m.clone().add(29, 'days');
|
||||
self.state_.runtime_sensor_detail_range_static_end = runtime_sensor_detail_range_static_end_m.format('M/D/YYYY');
|
||||
}
|
||||
self.state_.runtime_sensor_detail_range_type = range.type;
|
||||
self.state_.runtime_sensor_detail_range_dynamic = range.dynamic;
|
||||
self.state_.runtime_sensor_detail_range_static_begin = range.static_begin;
|
||||
self.state_.runtime_sensor_detail_range_static_end = range.static_end;
|
||||
|
||||
this
|
||||
.set_background_color(beestat.style.color.gray.base)
|
||||
|
||||
@ -322,16 +322,23 @@ beestat.component.modal.runtime_thermostat_detail_custom.prototype.get_buttons_
|
||||
.set_text_color('#fff')
|
||||
.set_text('Save')
|
||||
.addEventListener('click', function() {
|
||||
// Bit of a rig to fix the odd situation where somehow people are
|
||||
// getting these values set to more than 30 days.
|
||||
var runtime_thermostat_detail_range_static_begin_m = moment(self.state_.runtime_thermostat_detail_range_static_begin);
|
||||
var runtime_thermostat_detail_range_static_end_m = moment(self.state_.runtime_thermostat_detail_range_static_end);
|
||||
var range = beestat.date_range.clamp(
|
||||
{
|
||||
'type': self.state_.runtime_thermostat_detail_range_type,
|
||||
'dynamic': self.state_.runtime_thermostat_detail_range_dynamic,
|
||||
'static_begin': self.state_.runtime_thermostat_detail_range_static_begin,
|
||||
'static_end': self.state_.runtime_thermostat_detail_range_static_end
|
||||
},
|
||||
{
|
||||
'max_dynamic_days': 30,
|
||||
'max_static_days': 30
|
||||
}
|
||||
);
|
||||
|
||||
var diff = Math.abs(runtime_thermostat_detail_range_static_begin_m.diff(runtime_thermostat_detail_range_static_end_m, 'day')) + 1;
|
||||
if (diff > 30) {
|
||||
runtime_thermostat_detail_range_static_end_m = runtime_thermostat_detail_range_static_begin_m.clone().add(29, 'days');
|
||||
self.state_.runtime_thermostat_detail_range_static_end = runtime_thermostat_detail_range_static_end_m.format('M/D/YYYY');
|
||||
}
|
||||
self.state_.runtime_thermostat_detail_range_type = range.type;
|
||||
self.state_.runtime_thermostat_detail_range_dynamic = range.dynamic;
|
||||
self.state_.runtime_thermostat_detail_range_static_begin = range.static_begin;
|
||||
self.state_.runtime_thermostat_detail_range_static_end = range.static_end;
|
||||
|
||||
this
|
||||
.set_background_color(beestat.style.color.gray.base)
|
||||
|
||||
@ -54,9 +54,10 @@ if($setting->get('environment') === 'dev' || $setting->get('environment') === 'd
|
||||
echo '<script src="/js/beestat/crypto.js"></script>' . PHP_EOL;
|
||||
echo '<script src="/js/beestat/floor_plan.js"></script>' . PHP_EOL;
|
||||
echo '<script src="/js/beestat/address.js"></script>' . PHP_EOL;
|
||||
echo '<script src="/js/beestat/affiliate.js"></script>' . PHP_EOL;
|
||||
echo '<script src="/js/beestat/date.js"></script>' . PHP_EOL;
|
||||
echo '<script src="/js/beestat/math.js"></script>' . PHP_EOL;
|
||||
echo '<script src="/js/beestat/affiliate.js"></script>' . PHP_EOL;
|
||||
echo '<script src="/js/beestat/date.js"></script>' . PHP_EOL;
|
||||
echo '<script src="/js/beestat/date_range.js"></script>' . PHP_EOL;
|
||||
echo '<script src="/js/beestat/math.js"></script>' . PHP_EOL;
|
||||
echo '<script src="/js/beestat/platform.js"></script>' . PHP_EOL;
|
||||
echo '<script src="/js/beestat/text_dimensions.js"></script>' . PHP_EOL;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user