aboutsummaryrefslogtreecommitdiff
path: root/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'index.js')
-rw-r--r--index.js41
1 files changed, 40 insertions, 1 deletions
diff --git a/index.js b/index.js
index e37d2af..b67bf04 100644
--- a/index.js
+++ b/index.js
@@ -29,6 +29,7 @@
// wenn die Seite komplett geladen wurde
window.onload = function() {
zeichne();
+ zeichneBilder();
listeEvents();
}
@@ -49,7 +50,7 @@ function zeichne() {
if (diagramm) diagramm.destroy();
// Erzeuge ein neues Balkendiagramm mit unseren Daten
- chart = new Chart(ctx, {
+ diagramm = new Chart(ctx, {
type: 'bar',
options: {
animation: false, // Deaktiviere die Animation beim Zeichnen der Balken
@@ -80,6 +81,44 @@ function zeichne() {
zeichenort['aria-busy'] = false;
}
+// Lade und zeichne die Bilder der Klassen an die Spitze ihrer jeweiligen Balken
+async function zeichneBilder() {
+ // Das Objekt, das alle unsere Bilder Annotationen enthält
+ let annotation = {annotations: {}};
+ for (const i in daten.klassen) {
+ let klasse = daten.klassen[i];
+ // Die Url des Klassenbildes ist der Klassenbezeichner unter dem Bilderpfad
+ let bildUrl = `${bilder_pfad}/${klasse.bezeichner}.png`;
+
+ // Teste ob das Bild existiert
+ let ok = (await fetch(bildUrl, {method: 'HEAD'})).ok;
+ // Das Bild existiert nicht
+ if (!ok) { continue; }
+
+ // Erzeuge ein neues Bild und verwende die Bild URL unter der ein Bild gefunden wurde
+ let bild = new Image();
+ bild.src = bildUrl;
+
+ // Zeichne das Bild knapp unter dem oberen Rand des Balkens
+ let klassenAnnotation = {
+ drawTime: 'afterDatasetsDraw',
+ type: 'label',
+ content: bild,
+ width: 75,
+ height: 75,
+ xValue: klasse.bezeichner,
+ yValue: klasse.punkte - 1
+ };
+
+ annotation.annotations[klasse.bezeichner] = klassenAnnotation;
+ }
+
+ // Ergänze die Diagramm-Optionen um unsere Annotationen
+ diagramm.options.plugins.annotation = annotation;
+ // Zeichne das Diagramm neu mit unseren Annotationen
+ diagramm.update();
+}
+
// Erzeuge eine Liste aller Ereignisse.
// Die globale Variable ereignisse muss definiert sein und ein Iterable aller
// Ereignisse, die angezeigt werden sollen, enthalten.