From bc7b48f1d8321dc01d448cdeda025acf19e58e71 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Sun, 7 Sep 2025 16:24:04 +0200 Subject: initial commit --- index.js | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 index.js (limited to 'index.js') diff --git a/index.js b/index.js new file mode 100644 index 0000000..e37d2af --- /dev/null +++ b/index.js @@ -0,0 +1,117 @@ +/** + * + * @licstart The following is the entire license notice for the + * JavaScript code in this page. + * + * Copyright (C) 2025 Florian Fischer + * + * + * The JavaScript code in this page is free software: you can + * redistribute it and/or modify it under the terms of the GNU + * General Public License (GNU GPL) as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) + * any later version. The code is distributed WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. + * + * As additional permission under GNU GPL version 3 section 7, you + * may distribute non-source (e.g., minimized or compacted) forms of + * that code without the copy of the GNU GPL normally required by + * section 4, provided you include this license notice and a URL + * through which recipients can access the Corresponding Source. + * + * @licend The above is the entire license notice + * for the JavaScript code in this page. + * + */ + +// Zeichne das Diagramm und erstelle eine Liste aller Events, +// wenn die Seite komplett geladen wurde +window.onload = function() { + zeichne(); + listeEvents(); +} + +var diagramm; +function zeichne() { + // Wir haben keine Daten zum Zeichnen + if (!daten || !daten.klassen) return; + + // Zeige den Indikator, dass das Diagramm gezeichnet wird + let zeichnenIndikator = document.getElementById("zeichnen"); + zeichnenIndikator.style.display = "block"; + let zeichenort = document.getElementById("zeichenort"); + zeichenort['aria-busy'] = true; + + const ctx = document.getElementById('zeichenflaeche'); + + // Verwerfe ein bereits gezeichnetes Diagramm + if (diagramm) diagramm.destroy(); + + // Erzeuge ein neues Balkendiagramm mit unseren Daten + chart = new Chart(ctx, { + type: 'bar', + options: { + animation: false, // Deaktiviere die Animation beim Zeichnen der Balken + plugins: { + legend: { + display: false // Wir benötigen keine Legende für den Punktestand + }, + tooltip: { + enabled: false // Deaktiviere die Tooltips, die nur den Punktestand zeigen + } + } + }, + data: { + // Die Klassenbezeichnungen sind unsere X-Achsen Bezeichner + labels: daten.klassen.map(klasse => klasse.bezeichner), + datasets: [ + { + label: 'Punkte', + data: daten.klassen.map(klasse => klasse.punkte), + backgroundColor: daten.klassen.map(klasse => klasse.farbe) + } + ] + }, + }); + + // Verstecke den Zeichenindikator + zeichnenIndikator.style.display = "none"; + zeichenort['aria-busy'] = false; +} + +// Erzeuge eine Liste aller Ereignisse. +// Die globale Variable ereignisse muss definiert sein und ein Iterable aller +// Ereignisse, die angezeigt werden sollen, enthalten. +function listeEvents() { + let liste = document.getElementById("ereignisse"); + for (let ereignis of daten.ereignisse) { + // Erzeuge ein Listenelement, das alle Infos des Ereignisses enthält + let ereignisNode = document.createElement("li"); + ereignisNode.classList.add("ereignis"); + + // Span, das die Meta-Informationen (Klasse, Datum) eines Ereignisses enthält + let ereignisUrsache = document.createElement("span"); + ereignisUrsache.innerHTML = `${ereignis.Jahrgang}${ereignis.Bezeichner}` + if (ereignis.Datum) { + ereignisUrsache.innerHTML += ` ${ereignis.Datum}` + } + ereignisUrsache.classList.add("ereignis-klasse"); + ereignisNode.appendChild(ereignisUrsache); + + // Die Veränderung des Punktestands durch das Ereignis + let ereignisDelta = document.createElement("span"); + ereignisDelta.innerHTML = `${ereignis.Delta}`; + ereignisDelta.classList.add("ereignis-delta"); + ereignisNode.appendChild(ereignisDelta); + + // Die Beschreibung des Ereignisses + let ereignisBeschreibung = document.createElement("span"); + ereignisBeschreibung.innerHTML = `${ereignis.Beschreibung}`; + ereignisBeschreibung.classList.add("ereignis-beschreibung"); + ereignisNode.appendChild(ereignisBeschreibung); + + // Füge das neue Ereignis-Listenelement der Ereignis-Liste hinzu + liste.appendChild(ereignisNode); + } +} -- cgit v1.2.3