aboutsummaryrefslogtreecommitdiff
path: root/src/main.js
diff options
context:
space:
mode:
authordavidpkj <davidpenkow1@gmail.com>2024-04-11 19:33:03 +0200
committerdavidpkj <davidpenkow1@gmail.com>2024-04-11 19:33:03 +0200
commit0d8b9c462ea24a4569fec30cde3366153ab4b378 (patch)
tree59c65855d3c61c417bf7e0b78ff29096f1ad19e0 /src/main.js
parente10addbe36bc248b297cc19a943356fa9fd0f955 (diff)
making things a little more friendly
Diffstat (limited to 'src/main.js')
-rw-r--r--src/main.js327
1 files changed, 156 insertions, 171 deletions
diff --git a/src/main.js b/src/main.js
index 53323f3..cedd21d 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,10 +1,15 @@
import * as fs from "fs"
import * as html_to_pdf from "html-pdf-node"
-import * as stu from './stunden.js'
-var student = "David Penkowoj";
-var semester = "Sommersemester 2024";
-var date = new Date();
+import * as v from './variables.js'
+
+let hinweise = "<ul>";
+for (let hinweis of v.hinweise) {
+ hinweise += `<li>${hinweis}</li>`;
+}
+hinweise += `</ul>`;
+
+let date = new Date();
date = date.toLocaleDateString("de-DE", {
weekday: 'long',
year: 'numeric',
@@ -23,184 +28,169 @@ let options = {
},
};
-var table = `
- <tr>
- <th rowspan="4"> 08:00 </th>
- <td></td>
- <td rowspan="2"></td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td rowspan="6"><div><span>TGI 1 / V</span><span>AM 1</span></div></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td rowspan="6"><div><span>GET 2 / V</span><span>H 1</span></div></td>
- <td rowspan="6"><div><span>GET 2 / V</span><span>Z 1/2</span></div></td>
- <td rowspan="6"><div><span>Pho / V</span><span>T 1</span></div></td>
- </tr>
- <tr>
- <td></td>
- </tr>
+// returns time difference in 15-minute intervalls
+function timediff(a, b) {
+ const time = "1970-01-01 ";
+ return (new Date(time + a) - new Date(time + b)) / 1000 / 60 / 15;
+}
+
+function gettimefromintervalls(x) {
+ let y = 15 * x / 60 + 8
+ let z = y.toString().padStart(2, '0');
+
+ if (Math.round(y) == y) return `<th rowspan="4">${z}:00</th>`;
+
+ return ""
+}
+
+function sortTage(tage) {
+ for (let tag in tage) {
+ tage[tag].sort((a, b) => {
+ return timediff(a.von, b.von)
+ });
+ }
+
+ return tage;
+}
+
+function runtimes(tage, tage_runtimes) {
+ for (let tag in tage) {
+ for (let eintrag in tage[tag]) {
+ // could be redundant
+ if (eintrag == tage[tag].length) break;
+
+ let a = tage[tag][eintrag];
+ let runtime = timediff(a.bis, a.von)
+
+ tage_runtimes[tag].push({
+ "name": a.name,
+ "raum": a.raum,
+ "runtime": runtime,
+ });
+ }
+ }
+
+ return tage_runtimes;
+}
+
+function bufferUp(tage) {
+ tage = sortTage(tage);
+
+ for (let tag in tage) {
+ if (tage[tag][0].von != "08:00") {
+ tage[tag].splice(0, 0, {
+ "name": "BUFFER",
+ "raum": "BUFFER",
+ "von": "08:00",
+ "bis": tage[tag][0].von,
+ })
+ }
- <tr>
- <th rowspan="4"> 09:00 </th>
- <td></td>
- </tr>
- <tr>
- <td></td>
- </tr>
- <tr>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td></td>
- </tr>
+ if (tage[tag][tage[tag].length - 1].bis != "19:00") {
+ tage[tag].push({
+ "name": "BUFFER",
+ "raum": "BUFFER",
+ "von": tage[tag][tage[tag].length - 1].bis,
+ "bis": "19:00",
+ })
+ }
+ }
- <tr>
- <th rowspan="4"> 10:00 </th>
- <td></td>
- <td></td>
- <td></td>
- <td rowspan="20" class="block"></td>
- <td rowspan="6"><div><span>FuQ / V</span><span>AM 4</span></div></td>
- </tr>
- <tr>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td></td>
- <td></td>
- </tr>
+ for (let tag in tage) {
+ for (let eintrag in tage[tag]) {
+ if (eintrag == tage[tag].length - 1) break;
- <tr>
- <th rowspan="4"> 11:00 </th>
- <td></td>
- <td rowspan="4"><div><span>FuQ / Ü</span><span>SI 4 (Minsky)</span></div></td>
- <td></td>
- </tr>
- <tr class="mensa1">
- <td></td>
- <td></td>
- </tr>
- <tr class="mensa1">
- <td></td>
- <td></td>
- <td rowspan="6"><div><span>GET / Ü</span><span>AM S4</span></div></td>
- </tr>
- <tr class="mensa1">
- <td></td>
- <td></td>
- </tr>
+ let a = tage[tag][eintrag];
+ let b = tage[tag][eintrag - -1];
- <tr class="mensa1">
- <th rowspan="4"> 12:00 </th>
- <td rowspan="4"><div><span>GET 2 / Ü</span><span>AM S4</span></div></td>
- <td></td>
- <td rowspan="4"><div><span>Pho / Ü</span><span>AM 1</span></div></td>
- </tr>
- <tr class="mensa1">
- <td></td>
- </tr>
- <tr class="mensa1">
- <td rowspan="6"><div><span>Ana 2 / V</span><span>AM 1</span></div></td>
- </tr>
- <tr class="mensa1">
- </tr>
+ let runtime = timediff(b.von, a.bis)
- <tr class="mensa1">
- <th rowspan="4"> 13:00 </th>
- <td rowspan="20" class="block"></td>
- <td></td>
- </tr>
- <tr class="mensa1">
- <td></td>
- </tr>
- <tr class="mensa1">
- <td></td>
- </tr>
- <tr class="mensa1">
- <td></td>
- </tr>
-`;
+ if (runtime > 0) {
+ tage[tag].push({
+ "name": "BUFFER",
+ "raum": "BUFFER",
+ "von": a.bis,
+ "bis": b.von,
+ });
+ }
+ }
+ }
+
+ return tage;
+}
+
+const ctage = {
+ "Mo": [],
+ "Di": [],
+ "Mi": [],
+ "Do": [],
+ "Fr": []
+}
+
+function main() {
+ let res = "";
+
+ let tage = structuredClone(ctage);
+ let tage_runtimes = structuredClone(ctage);
+
+ for (let eintrag of v.eintraege) {
+ for (let termin of eintrag.termine) {
+ tage[termin.wochentag].push({
+ "name": eintrag.name,
+ "raum": termin.raum,
+ "von": termin.von,
+ "bis": termin.bis,
+ })
+ }
+ }
-table = stu.main();
+ tage = bufferUp(tage, ctage);
+ tage = sortTage(tage);
+ tage_runtimes = runtimes(tage, tage_runtimes)
-var html = `
-<style>
- * {
- font-weight: 300;
- font-family: "Abel", sans-serif;
- -webkit-print-color-adjust: exact;
+ let timeout = {}
- --entries-b: #ccc;
- --entries-f: #111;
- --headers-b: #333;
- --headers-f: #fff;
+ // 1h has 4 15 minute intervalls: 08 to 19 means 44 intervalls
+ for (let i = 0; i < 44; i++) {
+ let mensa = "";
- --block: #ccc;
- }
+ if (11 < i && i < 25) mensa = "mensa1";
+ if (25 < i && i < 27) mensa = "mensa2";
- table {
- width: 100%;
- }
+ res += `<tr class="${mensa}">` + gettimefromintervalls(i)
- table td, table tr {
- background: var(--headers-f);
- height: 4px;
- }
+ for (let day in tage_runtimes) {
+ if (timeout[day] > 0) {
+ timeout[day]--;
+ continue;
+ }
- table th, table td:not(:empty) {
- background-color: var(--entries-b);
- color: var(--entries-f);
- padding: 0.5em 1em;
- position: relative
- }
+ let el = tage_runtimes[day][0];
- table th {
- background-color: var(--headers-b);
- color: var(--headers-f);
- }
+ if (el.name == "BLOCKED" && el.raum == "BLOCKED") {
+ res += `<td rowspan="${el.runtime}" class="block"></td>`;
+ } else {
+ let name = el.name == "BUFFER" ? "" : `<div><span>${el.name}</span>`;
+ let raum = el.raum == "BUFFER" ? "" : `<span>${el.raum}</span>`;
- table th.tag {
- width: 20%;
- }
+ res += `<td rowspan="${el.runtime}">${name}${raum}</td>`;
+ }
- table td {
- font-size: 12px;
+ timeout[day] = el.runtime - 1;
+ tage_runtimes[day].splice(0, 1);
}
- table td.block {
- background-image: repeating-linear-gradient(314deg, var(--block), var(--block) 10px, transparent 10px, transparent 20px);
- background-size: 99.9999999% 99.9999999%;
- border: 2px solid var(--block);
- }
+ res += "</tr>"
+ }
- div {
- position: absolute;
- display: flex;
+ // console.log(res)
- top: 0.4em;
- left: 0.4em;
- width: calc(100% - 0.8em);
- justify-content: space-between;
- }
-</style>
-<p>Persönlicher Stundenplan von ${student} für das ${semester}. Letzter Stand: ${date}.</p>
+ return res
+}
+
+let html = `
+${v.style}
+<p>Persönlicher Stundenplan von ${v.student} für das ${v.semester}. Stand: ${date}.</p>
<table>
<tr>
<th> Uhrzeit </th>
@@ -210,20 +200,15 @@ var html = `
<th class="tag"> Donnerstag </th>
<th class="tag"> Freitag </th>
</tr>
- ${table}
+ ${main()}
</table>
<br>
<u> Hinweise: </u>
-<ul>
- <li>Mensabetrieb: 11:15 - 14:15 Uhr + 00:15 min</li>
- <li>GET 2 / V am 23.05. & 04.07. im V1</li>
- <li>GET 2 / Ü am 24.05. im T S2</li>
- <li>FuQ / V am 24.05. im T S1</li>
-</ul>
+${hinweise}
`;
fs.writeFileSync("test.html", html)
html_to_pdf.generatePdf({content: html}, options).then(pdfBuffer => {
- fs.writeFileSync('test.pdf', pdfBuffer);
+ fs.writeFileSync(v.filename, pdfBuffer);
});