183 lines
6.4 KiB
JavaScript
183 lines
6.4 KiB
JavaScript
// Client side javascript
|
|
"use strict"
|
|
|
|
import * as map from './map.js'
|
|
import * as dt from './datetime.js'
|
|
import {loadAll, showChart, setNoUTC} from './showcharts.js'
|
|
import { DateTime } from './luxon.min.js'
|
|
import {setCurrentTab, getCurrentTab, showError, fetchfromserver} from "./chart_utilities.js";
|
|
|
|
(async () => {
|
|
|
|
// global constants
|
|
const Stuttgart = [48.779, 9.16]
|
|
// END global constants
|
|
|
|
// global variables
|
|
const params = { // set defaults
|
|
center: Stuttgart,
|
|
zoom: 10,
|
|
span: 1,
|
|
peak: 70,
|
|
weeks: 4,
|
|
datetime: '',
|
|
seldate: '',
|
|
refreshRate: 5,
|
|
sid: -1
|
|
}
|
|
|
|
// END global variables
|
|
|
|
|
|
|
|
|
|
// Register events
|
|
// Every input with value check
|
|
const checkPlausibility = (id, min, max) => {
|
|
document.getElementById(id).addEventListener('change', function() {
|
|
let v = parseInt(this.value)
|
|
if(v < min) this.value = min
|
|
if (v > max) this.value = max
|
|
})
|
|
}
|
|
|
|
checkPlausibility('nbrofdays', 1, 10)
|
|
checkPlausibility('peaklim', 10, 130)
|
|
checkPlausibility('olderthan', 0, 52)
|
|
|
|
// Button 'Save' pressed
|
|
document.querySelector('#btnSave').addEventListener('click', async () => {
|
|
const selDate = document.getElementById('startday').value
|
|
let starttime
|
|
if ((selDate === 'today') || (selDate === 'heute') || (DateTime.now().toFormat('yyyy-MM-dd') === selDate)) {
|
|
starttime = ''
|
|
} else {
|
|
starttime = DateTime.fromFormat(selDate, 'yyyy-MM-dd').toUTC().toISO()
|
|
}
|
|
params.datetime = starttime
|
|
params.seldate = selDate
|
|
params.span = parseInt(document.getElementById('nbrofdays').value)
|
|
params.peak = parseInt(document.getElementById('peaklim').value)
|
|
params.weeks = parseInt(document.getElementById('olderthan').value)
|
|
let newlng = document.querySelector('#sellan input:checked').id
|
|
let oldlng = localStorage.getItem('curlang')
|
|
localStorage.setItem('curlang', newlng)
|
|
if(newlng !== oldlng) {
|
|
location.reload()
|
|
}
|
|
await loadAll(params,0)
|
|
// ToDo:
|
|
// Load ALL incl. MAP und LIVE hier, d.h. an loadAll einen zusätzlichen Parameter übergeben
|
|
// if(params.sid !== undefined) {
|
|
// await loadAll(params)
|
|
// }
|
|
})
|
|
|
|
// Btn 'Settings' pressed
|
|
document.querySelector('#btnSet').addEventListener('click', () => {
|
|
const curtab = getCurrentTab()
|
|
let myModal = new bootstrap.Modal(document.getElementById('dialogSettings'), {backdrop: 'static'})
|
|
const lang = localStorage.getItem('curlang')
|
|
const elem = document.querySelector('#startday')
|
|
const datepicker = new Datepicker(elem, {
|
|
buttonClass: 'btn',
|
|
autohide: true,
|
|
format: 'yyyy-mm-dd',
|
|
language: lang,
|
|
maxDate: new Date(),
|
|
minDate: new Date(new Date().setDate(new Date().getDate() - 365)),
|
|
defaultViewDate: new Date(),
|
|
todayButton: true,
|
|
todayButtonMode: 1
|
|
|
|
})
|
|
document.getElementById('startday').value = params.seldate
|
|
document.getElementById('nbrofdays').value = params.span
|
|
document.getElementById('peaklim').value = params.peak
|
|
document.getElementById('olderthan').value = params.weeks
|
|
// select different infos depoending on the selcted tab
|
|
// first clear all
|
|
document.querySelector('#stday').style.display = 'inline'
|
|
document.querySelector('#nbday').style.display = 'none'
|
|
document.querySelector('#pklim').style.display = 'none'
|
|
document.querySelector('#odth').style.display = 'none'
|
|
if(curtab === 'maptab') {
|
|
document.querySelector('#stday').style.display = 'none'
|
|
document.querySelector('#odth').style.display = 'inline'
|
|
}
|
|
if(curtab === 'livetab') {
|
|
document.querySelector('#nbday').style.display = 'inline'
|
|
}
|
|
if(
|
|
(curtab === 'houravgtab') || (curtab === 'dayavgtab')) {
|
|
document.querySelector('#pklim').style.display = 'inline'
|
|
}
|
|
myModal.show()
|
|
})
|
|
|
|
const getSensorType = async (sid) => {
|
|
let url = `/srv/getoneproperty?sensorid=${sid}`
|
|
const data = await fetchfromserver(url)
|
|
return data.props.type
|
|
}
|
|
|
|
// main function:
|
|
// show the map if called w/o any parameter
|
|
// if called with a sensor-ID, show the live chart for this sensor
|
|
async function main() {
|
|
setNoUTC() // no UTC for HighCharts
|
|
// set correct language
|
|
const currentLang = localStorage.getItem('curlang')
|
|
if(currentLang === 'en') {
|
|
document.querySelector('#en').checked = true
|
|
params.seldate = 'today'
|
|
} else {
|
|
document.querySelector('#de').checked = true
|
|
params.seldate = 'heute'
|
|
}
|
|
console.log(currentLang)
|
|
history.pushState({}, '', '/')
|
|
|
|
// initialise tabs
|
|
let triggerTabList = [].slice.call(document.querySelectorAll('.nav-link'))
|
|
triggerTabList.forEach(function (triggerEl) {
|
|
let tabTrigger = new bootstrap.Tab(triggerEl)
|
|
|
|
triggerEl.addEventListener('click', function (event) {
|
|
event.preventDefault()
|
|
tabTrigger.show()
|
|
setCurrentTab(event.currentTarget.id)
|
|
if (getCurrentTab() === 'maptab') {
|
|
map.showMap(params)
|
|
}
|
|
})
|
|
})
|
|
|
|
dt.showDate(true, params)
|
|
// and show date/time every minute
|
|
setInterval(() => dt.showDate(false, params), 1000)
|
|
|
|
const csid = parseInt(sysparams.csid)
|
|
if(csid !== -1) {
|
|
// check, if sid is of right type (noise)
|
|
const typ = await getSensorType(csid)
|
|
if (typ !== 'noise') {
|
|
// wrong sensor type
|
|
showError('Sensor ID ' + csid + ' is not of type noise')
|
|
return
|
|
}
|
|
params.sid = csid
|
|
let ok = await showChart(params, 'live', 'dlive')
|
|
setCurrentTab('livetab')
|
|
if (ok) {
|
|
await loadAll(params)
|
|
}
|
|
} else {
|
|
// show the map
|
|
map.showMap(params)
|
|
}
|
|
}
|
|
|
|
main().catch(console.error)
|
|
|
|
})() |