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'; } }