class SetViewportController {
constructor () {
this.div = document.getElementById('setViewportDiv');
this.viewportEntryDiv = undefined;
this.standardRangePickerDiv = undefined;
this.initHtml();
this.expanded = false;
}
initHtml () {
this.div.style.display = 'grid';
this.div.style.gridTemplateColumns = 'auto';
this.div.style.gridTemplateRows = 'auto auto auto';
this.headerDiv = document.createElement('div');
this.headerDiv.innerHTML = 'Time Range ';
this.headerDiv.style.display = 'grid';
this.headerDiv.style.gridColumn = '1';
this.div.appendChild(this.headerDiv);
this.div.style.gap = '5px';
this.viewportEntryDiv = document.createElement('div');
this.viewportEntryDiv.style.display = 'none';
this.viewportEntryDiv.innerHTML = 'Earliest
Latest ';
this.div.appendChild(this.viewportEntryDiv);
this.standardRangePickerDiv = document.createElement('div');
this.standardRangePickerDiv.style.display = 'none';
let srpHtml = ' Apply '
srpHtml += ''
this.standardRangePickerDiv.innerHTML = srpHtml;
this.div.appendChild(this.standardRangePickerDiv);
document.getElementById('viewportEarliestInput').value = pdate(fullRangeStart);
document.getElementById('viewportLatestInput').value = pdate(fullRangeEnd);
}
processSrpInput() {
let pickedRange = document.getElementById('timerange-select').value;
let newEarliest = visibleRangeStart;
let now = parseInt(Date.now() / 1000) - 60; // stay 1 minute back so we don't
if (pickedRange === '') {return;}
else if (pickedRange === 'Last15min') { newEarliest = now - 900; }
else if (pickedRange === 'Last30min') { newEarliest = now - 1800; }
else if (pickedRange === 'Last1hr') { newEarliest = now - 3600; }
else if (pickedRange === 'Last2hr') { newEarliest = now - 7200; }
else if (pickedRange === 'Last4hr') { newEarliest = now - 14400; }
else if (pickedRange === 'Last8hr') { newEarliest = now - 28800; }
else if (pickedRange === 'Last12hr') { newEarliest = now - 43200; }
else if (pickedRange === 'Last24hr') { newEarliest = now - 86400; }
document.getElementById('viewportEarliestInput').value = pdate(newEarliest);
document.getElementById('viewportLatestInput').value = pdate(now);
}
updateHtml () {
document.getElementById('viewportEarliestInput').value = pdate(fullRangeStart);
document.getElementById('viewportLatestInput').value = pdate(fullRangeEnd);
}
updateFromInputs () {
// now uses millis throughout
let earliest = parseInt(new Date(document.getElementById('viewportEarliestInput').value).getTime());
let latest = parseInt(new Date(document.getElementById('viewportLatestInput').value).getTime());
console.log('Input requested viewport earliest ' + pdate(earliest) + ' latest ' + pdate(latest));
// new validation shit
// earliest and latest are millis
const systemEpoch = 1602892800;
const systemEpochMillis = systemEpoch * 1000;
const nowMillis = Date.now();
const now = parseInt(nowMillis / 1000);
if (earliest < systemEpochMillis) {
earliest = systemEpochMillis;
toast('Cannot query before system epoch. Query start trimmed.');
if (latest < earliest) {
latest = earliest + 900 * 1000;
toast('Query end now before earliest. End adjusted to earliest + 15min');
}
}
if (latest > nowMillis) {
latest = nowMillis;
toast('Cannot query later than current time. Query end trimmed.');
}
if (earliest > latest) {
earliest = latest - 900 * 1000;
toast('Start cannot be after end. Start adjusted to end -15min.');
}
if (latest - earliest > 86400 * 30 * 1000) {
latest = earliest + (86400 * 30 * 1000);
toast('Query span must be less than 30 days. Query end trimmed.');
}
if (fullRangeEnd - earliest > 86400 * 30 * 1000) {
toast('Requested a span that would be >30d with existing data, clearing state and disabling autoupdate');
clearData();
updateEnabled = false;
autoupdateToggle.checked = false;
}
//console.log('updateFromInputs calling changeRange');
changeRange(earliest, latest, earliest, latest);
}
toggleExpand () {
if (this.expanded) {
this.collapse();
this.expanded = false;
} else {
this.expand();
this.expanded = true;
}
}
collapse () {
this.updateHtml();
this.viewportEntryDiv.style.display = 'none';
this.standardRangePickerDiv.style.display = 'none';
}
expand () {
this.updateHtml();
this.viewportEntryDiv.style.display = 'block';
this.standardRangePickerDiv.style.display = 'block';
}
}