make a small server that gathers and merges data and stuff like that
This commit is contained in:
parent
0e375aaee0
commit
3a1ac18187
9 changed files with 137 additions and 9565 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1 +1,3 @@
|
||||||
node_modules
|
node_modules
|
||||||
|
eventmapper_config.json
|
||||||
|
data
|
|
@ -0,0 +1,8 @@
|
||||||
|
import "https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"; // window.L
|
||||||
|
|
||||||
|
var map = L.map('leaflet-map').setView([0, 0], 2);
|
||||||
|
|
||||||
|
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||||
|
maxZoom: 19,
|
||||||
|
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
|
||||||
|
}).addTo(map);
|
|
@ -0,0 +1,14 @@
|
||||||
|
body, html {
|
||||||
|
margin: 0;
|
||||||
|
height: 100vh;
|
||||||
|
width: 100vw;
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leaflet-map {
|
||||||
|
display: inline-block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
9534
modules/extern/ical_moz.js
vendored
9534
modules/extern/ical_moz.js
vendored
File diff suppressed because it is too large
Load diff
|
@ -1,21 +0,0 @@
|
||||||
// Placeholder code from Anime Detour testing
|
|
||||||
|
|
||||||
import { ICAL } from '/assets/modules/ical_moz.js';
|
|
||||||
|
|
||||||
async function getWebDAV() {
|
|
||||||
const calrequest = await fetch("https://next.abtmtr.link/remote.php/dav/public-calendars/83tEFQ3myCro3WBL?export");
|
|
||||||
const calendar = await calrequest.text();
|
|
||||||
const jcal = ICAL.parse(calendar);
|
|
||||||
const comp = new ICAL.Component(jcal);
|
|
||||||
const events = comp.getAllSubcomponents("vevent").map(x => new ICAL.Event(x));
|
|
||||||
const elt = events.map(x => ({
|
|
||||||
summary: x.summary,
|
|
||||||
startDate: x.startDate.toJSDate(),
|
|
||||||
endDate: x.endDate.toJSDate(),
|
|
||||||
description: x.description,
|
|
||||||
location: x.location
|
|
||||||
}));
|
|
||||||
console.log(events, elt);
|
|
||||||
}
|
|
||||||
|
|
||||||
getWebDAV();
|
|
|
@ -1,3 +1,3 @@
|
||||||
{
|
{
|
||||||
"ignore": [".gitignore", ".git/**"]
|
"ignore": [".gitignore", ".git/**", "data/**"]
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
"dev": "nodemon ./scripts/server.js"
|
"dev": "nodemon ./scripts/server.js"
|
||||||
},
|
},
|
||||||
"author": "MeowcaTheoRange",
|
"author": "MeowcaTheoRange",
|
||||||
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "^4.19.2"
|
"express": "^4.19.2"
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
<title></title>
|
<title>EventMapper</title>
|
||||||
<meta name="description" content="" />
|
<meta name="description" content="" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<link
|
<link
|
||||||
|
@ -12,15 +12,13 @@
|
||||||
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
|
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
|
||||||
crossorigin=""
|
crossorigin=""
|
||||||
/>
|
/>
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="/assets/styles/styles.css"
|
||||||
|
/>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="leaflet-map"></div>
|
<div id="leaflet-map"></div>
|
||||||
|
<script src="/assets/scripts/script.js" type="module"></script>
|
||||||
<script
|
|
||||||
src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
|
|
||||||
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
|
|
||||||
crossorigin=""
|
|
||||||
></script>
|
|
||||||
<script src="" type="module"></script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -0,0 +1,104 @@
|
||||||
|
import express from 'express';
|
||||||
|
|
||||||
|
import config from "../eventmapper_config.json" with { type: "json" };
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
|
||||||
|
app.use("/assets", express.static('assets'));
|
||||||
|
|
||||||
|
app.use("/", express.static('pages'));
|
||||||
|
|
||||||
|
app.use("/dataServer", express.static('data')); // Example data file-server
|
||||||
|
|
||||||
|
app.get('/data/:lang/events', async (req, res) => {
|
||||||
|
// Get events
|
||||||
|
let eventsReq = await fetch(new URL("events/events.json", config.data_url));
|
||||||
|
let events;
|
||||||
|
if (eventsReq.ok)
|
||||||
|
events = await eventsReq.json();
|
||||||
|
else
|
||||||
|
return res.status(400).send("Bad Request");
|
||||||
|
|
||||||
|
// Get localization
|
||||||
|
let l10nReq = await fetch(new URL(`localization/${req.params.lang}.json`, config.data_url));
|
||||||
|
let l10n;
|
||||||
|
if (l10nReq.ok)
|
||||||
|
l10n = await l10nReq.json();
|
||||||
|
else
|
||||||
|
return res.status(404).send("Localization not found!");
|
||||||
|
|
||||||
|
// Merge events and localization
|
||||||
|
const merged = events.map(event => {
|
||||||
|
const localizationKey = l10n.__events[event.id];
|
||||||
|
return {
|
||||||
|
...event,
|
||||||
|
...localizationKey
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return res.send(merged);
|
||||||
|
})
|
||||||
|
|
||||||
|
app.get('/data/:lang/map', async (req, res) => {
|
||||||
|
// Get layers
|
||||||
|
let layersReq = await fetch(new URL("map/layers.json", config.data_url));
|
||||||
|
let layers;
|
||||||
|
if (layersReq.ok)
|
||||||
|
layers = await layersReq.json();
|
||||||
|
else
|
||||||
|
return res.status(400).send("Bad Request");
|
||||||
|
|
||||||
|
// Get localization
|
||||||
|
let l10nReq = await fetch(new URL(`localization/${req.params.lang}.json`, config.data_url));
|
||||||
|
let l10n;
|
||||||
|
if (l10nReq.ok)
|
||||||
|
l10n = await l10nReq.json();
|
||||||
|
else
|
||||||
|
return res.status(404).send("Localization not found!");
|
||||||
|
|
||||||
|
// Merge layers and localization
|
||||||
|
const merged = layers.map(layer => {
|
||||||
|
const localizationKey = l10n.__layers[layer.id];
|
||||||
|
return {
|
||||||
|
...layer,
|
||||||
|
...localizationKey
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return res.send(merged);
|
||||||
|
})
|
||||||
|
|
||||||
|
app.get('/data/:lang/map/:layer', async (req, res) => {
|
||||||
|
// Get rooms
|
||||||
|
let roomsReq = await fetch(new URL(`map/${req.params.layer}.json`, config.data_url));
|
||||||
|
let rooms;
|
||||||
|
if (roomsReq.ok)
|
||||||
|
rooms = await roomsReq.json();
|
||||||
|
else
|
||||||
|
return res.status(400).send("Bad Request");
|
||||||
|
|
||||||
|
// Get localization
|
||||||
|
let l10nReq = await fetch(new URL(`localization/${req.params.lang}.json`, config.data_url));
|
||||||
|
let l10n;
|
||||||
|
if (l10nReq.ok)
|
||||||
|
l10n = await l10nReq.json();
|
||||||
|
else
|
||||||
|
return res.status(404).send("Localization not found!");
|
||||||
|
|
||||||
|
// Merge rooms and localization
|
||||||
|
const merged = rooms.map(room => {
|
||||||
|
const localizationKey = l10n.__rooms[room.id];
|
||||||
|
return {
|
||||||
|
...room,
|
||||||
|
...localizationKey
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return res.send(merged);
|
||||||
|
})
|
||||||
|
|
||||||
|
app.listen(config.port, () => {
|
||||||
|
const listeningURL = new URL("http://localhost/");
|
||||||
|
listeningURL.port = config.port;
|
||||||
|
console.log(`Example app listening on ${listeningURL.toString()}`)
|
||||||
|
})
|
Loading…
Reference in a new issue