Alles erst mal soweit fertig

This commit is contained in:
rxf
2023-05-03 20:24:05 +02:00
parent 7f6cfee1ff
commit f947b32c71
8 changed files with 94 additions and 46 deletions

4
build_and_copy.sh Normal file → Executable file
View File

@@ -14,8 +14,8 @@
set -x set -x
port="" port=""
orgName=sensorapi orgName=spritzschema
name=sensorapi name=spritzschema
usage() usage()
{ {

View File

@@ -9,10 +9,13 @@ const MONGOUSRP = process.env.MONGOUSRP || ""
const MONGOBASE = process.env.MONGOBASE || 'medizin' const MONGOBASE = process.env.MONGOBASE || 'medizin'
const MONGO_URL = MONGOAUTH ? 'mongodb://'+MONGOUSRP+'@' + MONGOHOST + ':' + MONGOPORT + '/?authSource=admin' : 'mongodb://'+MONGOHOST+':'+MONGOPORT // URL to mongo database const MONGO_URL = MONGOAUTH ? 'mongodb://'+MONGOUSRP+'@' + MONGOHOST + ':' + MONGOPORT + '/?authSource=admin' : 'mongodb://'+MONGOHOST+':'+MONGOPORT // URL to mongo database
const COLLECTION = 'spritzschema' let COLLECTION = 'spritzschema'
const doMongo = async function(cmd, options) { const doMongo = async function(cmd, options) {
let erg = {err: null} let erg = {err: null}
if (options.testing) {
COLLECTION = 'spritzschema_test'
}
const client = new MongoClient(MONGO_URL, { useUnifiedTopology: true }) const client = new MongoClient(MONGO_URL, { useUnifiedTopology: true })
try { try {
await client.connect() await client.connect()

View File

@@ -1,6 +1,7 @@
{ {
"name": "untitled", "name": "Spritzschema",
"version": "0.0.0", "version": "0.0.1",
"date": "2023-05-03",
"private": true, "private": true,
"scripts": { "scripts": {
"start": "node ./bin/www" "start": "node ./bin/www"

View File

@@ -1,50 +1,57 @@
document.addEventListener('DOMContentLoaded', async function () { document.addEventListener('DOMContentLoaded', async function () {
const DateTime = luxon.DateTime;
let curdate = ''
const dt = DateTime.now() const DateTime = luxon.DateTime
const dt1 = dt.plus({month:1})
curdate = `${dt.toFormat('LLLL')}/${dt1.toFormat('LLLL_y')}`
document.querySelector('#curmon').innerHTML = curdate.replace('_',' ')
if (sysParams.doinit) {
initSchema('2023-05-01') await initSchema('2023-05-01')
}
let ret = await getData() let ret = await getData()
fillSchema(ret.data) let schema = ret.data
fillSchema(schema)
document.querySelector('#sptab').addEventListener('click', markField); document.querySelector('#sptab').addEventListener('click', markField);
function markField (e) { async function markField (e) {
let field = e.target; let field = e.target;
field.setAttribute('aria-label','x'); let d = schema.data[34].day
field.setAttribute('aria-label','x');
field.setAttribute('disabled','disabled'); field.setAttribute('disabled','disabled');
let data = {curdate: curdate} schema.data[parseInt(field.id.slice(2))-1].status = true
let setArray = [] await storeData(schema)
let fields = document.querySelectorAll('#sptab button')
for (i = 0; i < fields.length; i++) {
let status = { day: fields[i].innerHTML, status: false }
if (fields[i].hasAttribute('disabled')) {
status.status = true
}
setArray.push(status)
}
data.data = setArray
storeData(data)
if (e.srcElement.id === 'bt35') { if (e.srcElement.id === 'bt35') {
showNextMonth(e.srcElement.innerHTML) let ldt = DateTime.fromISO(d)
ldt = ldt.plus({day: 1})
await initSchema(ldt.toFormat('y-LL-dd'))
} }
} }
function fillSchema(data) { function fillSchema(schema) {
const setArray = data.data const setArray = schema.data
let months = ''
for (let x of schema.months) {
months += x + ' - '
}
months = months.slice(0, -3)
months += ' '
for (let x of schema.years) {
months += x + '/'
}
months = months.slice(0, -1)
document.querySelector('#curmon').innerHTML = months
for(let i = 0; i < 35; i++) { for(let i = 0; i < 35; i++) {
let sel = '#bt'+(i+1) let sel = '#bt'+(i+1)
let day = DateTime.fromISO(setArray[i].day)
if (setArray[i].day !== '') { if (setArray[i].day !== '') {
document.querySelector(sel).innerHTML = DateTime.fromISO(setArray[i].day).toFormat('d') let x = `${day.toFormat('d')}
<br /><span class="small">${day.setLocale('de').toFormat('ccc')}</span>`
document.querySelector(sel).innerHTML = x
if (setArray[i].status) { if (setArray[i].status) {
document.querySelector(sel).setAttribute('aria-label', 'x') document.querySelector(sel).setAttribute('aria-label', 'x')
document.querySelector(sel).setAttribute('disabled', 'disabled') document.querySelector(sel).setAttribute('disabled', 'disabled')
} else {
document.querySelector(sel).setAttribute('aria-label', '')
document.querySelector(sel).removeAttribute('disabled')
} }
} else { } else {
document.querySelector(sel).setAttribute('disabled', 'disabled') document.querySelector(sel).setAttribute('disabled', 'disabled')
@@ -52,12 +59,12 @@ document.addEventListener('DOMContentLoaded', async function () {
} }
} }
async function getData() { async function getData(testing) {
let erg = await fetch('data') let erg = await fetch('data')
return erg.json() return erg.json()
} }
async function storeData(data) { async function storeData(data, testing) {
const response = await fetch('/data', { const response = await fetch('/data', {
method: "POST", method: "POST",
body: JSON.stringify(data), body: JSON.stringify(data),
@@ -68,17 +75,11 @@ document.addEventListener('DOMContentLoaded', async function () {
return response.json() return response.json()
} }
function showNextMonth() {
const dt = DateTime.now()
const dt1 = dt.plus({month:1})
curdate = `${dt.toFormat('LLLL')}/${dt1.toFormat('LLLL_y')}`
document.querySelector('#curmon').innerHTML = curdate.replace('_',' ')
fillSchema(ret.data) async function initSchema(startdate) {
}
function initSchema(startdate) {
let setArray = [] let setArray = []
let monthArray = []
let yearsArray = []
let ld0 = DateTime.fromISO(startdate) let ld0 = DateTime.fromISO(startdate)
let k = 0 let k = 0
for(let i = 0; i < 35; i++) { for(let i = 0; i < 35; i++) {
@@ -88,12 +89,20 @@ document.addEventListener('DOMContentLoaded', async function () {
} else { } else {
let ld = ld0.plus({day: k}) let ld = ld0.plus({day: k})
elem.day = ld.toFormat('y-LL-dd') elem.day = ld.toFormat('y-LL-dd')
let month = ld.setLocale('de').toFormat('LLLL')
let year = ld.toFormat('y')
if (monthArray.indexOf(month) === -1) {
monthArray.push(month)
}
if (yearsArray.indexOf(year) === -1) {
yearsArray.push(year)
}
k++ k++
} }
setArray.push(elem) setArray.push(elem)
} }
let data = {curdate: startdate, data: setArray} let schema = {curdate: startdate, months: monthArray, years: yearsArray, data: setArray}
storeData(data) await storeData(schema)
} }
}); });

View File

@@ -41,3 +41,17 @@ a {
.spritztab [aria-label="x"] { .spritztab [aria-label="x"] {
background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201%201%22%3E%3Cline%20x1%3D%220.1%22%20y1%3D%220.1%22%20x2%3D%220.9%22%20y2%3D%220.9%22%20stroke-width%3D%220.1%22%20stroke%3D%22red%22%2F%3E%3Cline%20x1%3D%220.1%22%20y1%3D%220.9%22%20x2%3D%220.9%22%20y2%3D%220.1%22%20stroke-width%3D%220.1%22%20stroke%3D%22red%22%2F%3E%3C%2Fsvg%3E'); background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201%201%22%3E%3Cline%20x1%3D%220.1%22%20y1%3D%220.1%22%20x2%3D%220.9%22%20y2%3D%220.9%22%20stroke-width%3D%220.1%22%20stroke%3D%22red%22%2F%3E%3Cline%20x1%3D%220.1%22%20y1%3D%220.9%22%20x2%3D%220.9%22%20y2%3D%220.1%22%20stroke-width%3D%220.1%22%20stroke%3D%22red%22%2F%3E%3C%2Fsvg%3E');
} }
.small {
font-size: 60%;
color: gray;
}
footer {
width: 70vmin;
margin: auto;
}
#v {
text-align: right;
margin-top: 30px;
}

View File

@@ -1,15 +1,23 @@
const express = require('express'); const express = require('express');
const router = express.Router(); const router = express.Router();
const domongo = require('../modules/mongointerface') const domongo = require('../modules/mongointerface')
const pkg = require('../package.json')
/* GET home page. */ /* GET home page. */
router.get('/', function(req, res, next) { router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' }); res.render('index', {
test: req.query.test === 'true',
doinit: req.query.doinit === 'true',
version: pkg.version,
title: pkg.name,
date: pkg.date
});
}) })
router.get('/data', async function(req, res, next) { router.get('/data', async function(req, res, next) {
const options = {} const options = {}
options.curdate = req.query.curdate options.curdate = req.query.curdate
options.testing = req.query.test
let erg = await domongo.doMongo('getlastdata', options) let erg = await domongo.doMongo('getlastdata', options)
res.json(erg) res.json(erg)
}) })
@@ -17,6 +25,7 @@ router.get('/data', async function(req, res, next) {
router.post('/data', async function (req, res, next) { router.post('/data', async function (req, res, next) {
const options = {} const options = {}
options.data = req.body options.data = req.body
options.testing = req.query.test
let erg = await domongo.doMongo('putdata', options) let erg = await domongo.doMongo('putdata', options)
res.json(erg) res.json(erg)
}) })

View File

@@ -6,5 +6,17 @@ html
script(src="https://cdn.jsdelivr.net/npm/luxon@3.3.0/build/global/luxon.min.js") script(src="https://cdn.jsdelivr.net/npm/luxon@3.3.0/build/global/luxon.min.js")
script(src="/javascripts/script.js") script(src="/javascripts/script.js")
script.
let sysParams = {
testing: '#{test}',
version: '#{version}',
date: '#{date}',
doinit: '#{doinit}'
}
body body
block content block content
footer
#v
| Version #{version} vom #{date}