diff --git a/package-lock.json b/package-lock.json index 7e3949c..5e9a590 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "laerm-web-sensorapi", - "version": "3.0.0", + "version": "3.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "laerm-web-sensorapi", - "version": "3.0.0", + "version": "3.0.3", "dependencies": { "axios": "^1.3.4", "cookie-parser": "~1.4.4", @@ -17,7 +17,8 @@ "i18next": "^22.4.14", "i18next-express-middleware": "^2.0.0", "i18next-http-middleware": "^3.3.0", - "i18next-node-fs-backend": "^1.2.1", + "i18next-node-fs-backend": "^2.1.3", + "luxon": "^3.3.0", "morgan": "~1.9.1", "pug": "^3.0.2", "sass": "^1.58.3" @@ -320,18 +321,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/coffeescript": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz", - "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==", - "bin": { - "cake": "bin/cake", - "coffee": "bin/coffee" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -439,14 +428,6 @@ "node": ">= 0.10" } }, - "node_modules/cson-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-3.0.0.tgz", - "integrity": "sha512-khmLtNmwe6SSlWz5vrhay9yWd/Fwwyiel+vt+1vIcCT9AsdqNuLXuK9tYhhAw1FdSSHjLc56PW8xa565/x73XQ==", - "dependencies": { - "coffeescript": "^1.10.0" - } - }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -504,15 +485,15 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/etag": { @@ -867,14 +848,13 @@ "integrity": "sha512-WX6uqxNwXccdNm/md5VJ+Q47DF2gjqLvygvgNzb2tCJWPM86FCi2LIvKco70EttlpV9IkfkCVNVF07/56EsSEw==" }, "node_modules/i18next-node-fs-backend": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/i18next-node-fs-backend/-/i18next-node-fs-backend-1.2.1.tgz", - "integrity": "sha512-lMd/tWsdgDFb158FwXHff63WZpTXggO3j8YOFEko+EvzRPzoIWkvfqdU5Oogn/p4nYfOMnCeEns29ksPF6rZBQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/i18next-node-fs-backend/-/i18next-node-fs-backend-2.1.3.tgz", + "integrity": "sha512-CreMFiVl3ChlMc5ys/e0QfuLFOZyFcL40Jj6jaKD6DxZ/GCUMxPI9BpU43QMWUgC7r+PClpxg2cGXAl0CjG04g==", "deprecated": "replaced by i18next-fs-backend", "dependencies": { - "cson-parser": "3.0.0", - "js-yaml": "3.5.4", - "json5": "0.5.0" + "js-yaml": "3.13.1", + "json5": "2.0.0" } }, "node_modules/iconv-lite": { @@ -990,23 +970,29 @@ "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==" }, "node_modules/js-yaml": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.4.tgz", - "integrity": "sha512-XBGnYi4i/XkEeSclkcRmBKOR9t7SLViumIhaIqwHSkO7FU0F3xW/sqAQ1/y+AcYX2EcnwdKFY1nXWzjJHqBRoA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dependencies": { - "argparse": "^1.0.2", - "esprima": "^2.6.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/json5": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.0.tgz", - "integrity": "sha512-WDgahySBucTVnQuzQHoVh6BKKg3TFBUExSwYOPwA4it9xtspn3erHYkdEx1AXXkHN38L7O6v6lmqLiXh/GnxhA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.0.0.tgz", + "integrity": "sha512-0EdQvHuLm7yJ7lyG5dp7Q3X2ku++BG5ZHaJ5FTnaXpKqDrw4pMxel5Bt3oAYMthnrthFBdnZ1FcsXTPyrQlV0w==", + "dependencies": { + "minimist": "^1.2.0" + }, "bin": { "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/jstransformer": { @@ -1026,6 +1012,14 @@ "node": ">= 0.6" } }, + "node_modules/luxon": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz", + "integrity": "sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==", + "engines": { + "node": ">=12" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1077,6 +1071,14 @@ "node": ">= 0.6" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", diff --git a/package.json b/package.json index c263706..f03112e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "laerm-web-sensorapi", - "version": "3.0.3", - "date": "2023-04-21 14:00 UTC", + "version": "3.0.4", + "date": "2023-04-24 18:00 UTC", "private": true, "scripts": { "start": "node bin/www.js >>log/laerm_web.log 2>&1" @@ -20,7 +20,8 @@ "i18next": "^22.4.14", "i18next-express-middleware": "^2.0.0", "i18next-http-middleware": "^3.3.0", - "i18next-node-fs-backend": "^1.2.1", + "i18next-node-fs-backend": "^2.1.3", + "luxon": "^3.3.0", "morgan": "~1.9.1", "pug": "^3.0.2", "sass": "^1.58.3" diff --git a/public/javascripts/datetime.js b/public/javascripts/datetime.js index 7f9ec3a..9dae8dc 100644 --- a/public/javascripts/datetime.js +++ b/public/javascripts/datetime.js @@ -10,6 +10,31 @@ export const showDate = (sofort) => { } +/* ToDo: + // Alle Minute die ktuelle Urzeit anzeigen und + // den Plot für Tages - und Wochendaten updaten. + // Alle 'refreshRate' plus 15sec die Grafiken neu zeichnen + // Die Funktion wird alle Sekunde aufgerufen ! + // +function showUhrzeit(sofort) { + var d = moment() // akt. Zeit holen + if (sofort || (d.second() == 0)) { // Wenn Minute grade um + $('#h1uhr').html(d.format('HH:mm')); + $('#subtitle').html(d.format('YYYY-MM-DD')); // dann zeit anzeigen + } + if (((d.minute() % refreshRate) == 0) && (d.second() == 15)) { // alle ganzen refreshRate Minuten, 15sec danach + console.log(refreshRate, 'Minuten um, Grafik wird erneuert'); + if ((aktsensorid != 'map') && (doUpdate == true)) { // Wenn nicht die Karte, dann + doPlot('oneday',startDay); // Tages- und + doPlot('oneweek',startDay); // Wochenplot erneuern + } + else { + fetchAktualData(); + } + } +} + +*/ export const formatJSDate = (d) => { return DateTime.fromJSDate(d).toFormat('yyyy-LL-dd HH:mm:ss') } diff --git a/public/javascripts/global.js b/public/javascripts/global.js index f599041..9c522eb 100644 --- a/public/javascripts/global.js +++ b/public/javascripts/global.js @@ -3,7 +3,7 @@ import * as map from './map.js' import * as dt from './datetime.js' -import {loadAll, showChart} from './showcharts.js' +import {loadAll, showChart, setNoUTC} from './showcharts.js' import { DateTime } from './luxon.min.js' import {setCurrentTab, getCurrentTab, showError, fetchfromserver} from "./chart_utilities.js"; @@ -14,7 +14,7 @@ import {setCurrentTab, getCurrentTab, showError, fetchfromserver} from "./chart_ // END global constants // global variables - let params = { // set defaults + const params = { // set defaults center: Stuttgart, zoom: 10, span: 1, @@ -125,6 +125,8 @@ import {setCurrentTab, getCurrentTab, showError, fetchfromserver} from "./chart_ // 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 + console.log(Intl.DateTimeFormat().resolvedOptions().timeZone) // set correct language const currentLang = localStorage.getItem('curlang') if(currentLang === 'en') { diff --git a/public/javascripts/showcharts.js b/public/javascripts/showcharts.js index f552750..f6bb78a 100644 --- a/public/javascripts/showcharts.js +++ b/public/javascripts/showcharts.js @@ -19,7 +19,7 @@ export async function showChart(params, typ, container) { function form() { for (let item of tabtable) { if (item.type === typ) { - const d = DateTime.fromMillis(this.x, {zone: 'utc'}) + const d = DateTime.fromMillis(this.x) const d1 = d.plus({days: 1}) let fmt = d.toFormat(item.dformat) if (((typ === 'daynight') && (this.series.name.startsWith('N'))) || (typ === 'lden')) { @@ -112,3 +112,11 @@ export const loadAll = async (params, start = 2) => { } } } + +export const setNoUTC = () => { + Highcharts.setOptions({ + global: { + useUTC: false // Don't use UTC on the charts + } + }); +} \ No newline at end of file diff --git a/routes/api.js b/routes/api.js index b494da9..d36c5e3 100644 --- a/routes/api.js +++ b/routes/api.js @@ -23,7 +23,6 @@ router.get('/:cmd', async function(req, res, next) { // req.i18n.changeLanguage(req.query.lng) const cmd = req.params.cmd const lng = getLanguage() - // console.log('api.js: cmd = ' + cmd + ', language = ' + lng) let url = APIHOST url += (req.originalUrl + `&lng=${lng}`) try {