From d3d5f3a554727f30403ce4aaa6acbe13914105ff Mon Sep 17 00:00:00 2001 From: Matthias Jung Date: Wed, 5 Aug 2026 16:34:48 +0200 Subject: [PATCH] feature: add separate exam parts --- assets/exam-simulator.js | 11 ++++++++++- src/build.py | 2 +- templates/html/exam-simulator.html | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/assets/exam-simulator.js b/assets/exam-simulator.js index e207ccf..e9ee19c 100644 --- a/assets/exam-simulator.js +++ b/assets/exam-simulator.js @@ -20,7 +20,12 @@ { id: "A", group: "primary", label: "Klasse A", detail: "B + V + N + E + A", parts: ["B", "V", "N", "E", "A"], color: "#3BB583" }, { id: "N-E", group: "upgrade", label: "N → E", detail: "Technik E", parts: ["E"], color: "#FE756C" }, { id: "N-A", group: "upgrade", label: "N → A", detail: "Technik E + A", parts: ["E", "A"], color: "#3BB583" }, - { id: "E-A", group: "upgrade", label: "E → A", detail: "Technik A", parts: ["A"], color: "#3BB583" } + { id: "E-A", group: "upgrade", label: "E → A", detail: "Technik A", parts: ["A"], color: "#3BB583" }, + { id: "part-B", group: "single", label: "B", detail: "Betriebliche Kenntnisse", parts: ["B"], color: "#47ABE8" }, + { id: "part-V", group: "single", label: "V", detail: "Kenntnisse von Vorschriften", parts: ["V"], color: "#47ABE8" }, + { id: "part-N", group: "single", label: "N", detail: "Technik Klasse N", parts: ["N"], color: "#47ABE8" }, + { id: "part-E", group: "single", label: "E", detail: "Technik Klasse E", parts: ["E"], color: "#FE756C" }, + { id: "part-A", group: "single", label: "A", detail: "Technik Klasse A", parts: ["A"], color: "#3BB583" } ]; function normalizeCatalog(rawCatalog, metadata, questionIndex) { @@ -181,6 +186,9 @@ var upgradeChoices = computed(function () { return EXAM_CHOICES.filter(function (choice) { return choice.group === "upgrade"; }); }); + var singlePartChoices = computed(function () { + return EXAM_CHOICES.filter(function (choice) { return choice.group === "single"; }); + }); var currentChoice = computed(function () { if (!session.value) return null; return EXAM_CHOICES.find(function (choice) { return choice.id === session.value.choiceId; }); @@ -621,6 +629,7 @@ view: view, primaryChoices: primaryChoices, upgradeChoices: upgradeChoices, + singlePartChoices: singlePartChoices, currentChoice: currentChoice, currentPart: currentPart, currentPartDefinition: currentPartDefinition, diff --git a/src/build.py b/src/build.py index 7750fc5..62d2f11 100644 --- a/src/build.py +++ b/src/build.py @@ -160,7 +160,7 @@ class Build: page = self.__build_page( content, page_stylesheets=["assets/exam-simulator.css?ts=202608051415"], - page_scripts=["assets/vue.global.prod.js", "assets/exam-simulator.js?ts=20260805"], + page_scripts=["assets/vue.global.prod.js", "assets/exam-simulator.js?ts=202608051500"], ) with (self.config.p_build / "simulation.html").open("w", encoding="utf-8") as file: file.write(page) diff --git a/templates/html/exam-simulator.html b/templates/html/exam-simulator.html index 354d474..4b79fbb 100644 --- a/templates/html/exam-simulator.html +++ b/templates/html/exam-simulator.html @@ -14,6 +14,7 @@

Welche Prüfung möchtest du simulieren?

Erstprüfung

+

Du hast noch keine Amateurfunkprüfung abgelegt? Dann ist das die richtige Simulation für Dich.

+

Einzelne Prüfungsteile

+

Übe gezielt einen Prüfungsteil unter Prüfungsbedingungen.

+
+
+ +
+
+
Jeder Prüfungsteil enthält 25 Fragen. Für B, V, N und E stehen jeweils 45 Minuten zur Verfügung, für Technik A 60 Minuten. Ein Teil ist ab 19 Punkten bestanden.