From 342abb02062b33d3ff94d9213b9b0018250efe19 Mon Sep 17 00:00:00 2001 From: Tim Eertmoed Date: Thu, 10 Sep 2026 00:08:23 +0200 Subject: [PATCH] Version 2.4.0: eigene Rechtezeile fuer PDF-Formulare, Download ist Export --- apps/tesm-license/pyproject.toml | 2 +- packages/tesm-core/pyproject.toml | 2 +- .../tesm-core/src/tesm_core/app_factory.py | 2 +- .../tesm_core/static/tesm_core/js/viewer.js | 21 ++++++++++++++----- packages/tesm-licensing-server/pyproject.toml | 4 ++-- packages/tesm-licensing/pyproject.toml | 2 +- 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/apps/tesm-license/pyproject.toml b/apps/tesm-license/pyproject.toml index ad69ce9..983e916 100644 --- a/apps/tesm-license/pyproject.toml +++ b/apps/tesm-license/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm-license" -version = "2.3.3" +version = "2.4.0" description = "TESM-Lizenzserver -- Kunden, Tickets, Lizenzen, Aktivierung" requires-python = ">=3.11" dependencies = [ diff --git a/packages/tesm-core/pyproject.toml b/packages/tesm-core/pyproject.toml index 406e906..7f69ea6 100644 --- a/packages/tesm-core/pyproject.toml +++ b/packages/tesm-core/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm-core" -version = "2.3.3" +version = "2.4.0" description = "Gemeinsames Anwendungsgeruest (Auth, RBAC, Navigation, Design-System, Migrationen) fuer TESM und TESM-Lizenzserver" requires-python = ">=3.11" dependencies = [ diff --git a/packages/tesm-core/src/tesm_core/app_factory.py b/packages/tesm-core/src/tesm_core/app_factory.py index ab0656f..de5b579 100644 --- a/packages/tesm-core/src/tesm_core/app_factory.py +++ b/packages/tesm-core/src/tesm_core/app_factory.py @@ -135,7 +135,7 @@ def create_base_app( #: Wortmarke, ohne Zeile darunter; die Marke selbst zeigen beide #: Anwendungen. auth_tagline: str = "", - app_version: str = "2.3.3", + app_version: str = "2.4.0", built_in_trusted_keys: tuple[str, ...] = (), enable_license: bool = True, template_folder: str | None = None, diff --git a/packages/tesm-core/src/tesm_core/static/tesm_core/js/viewer.js b/packages/tesm-core/src/tesm_core/static/tesm_core/js/viewer.js index 3642212..22a6931 100644 --- a/packages/tesm-core/src/tesm_core/static/tesm_core/js/viewer.js +++ b/packages/tesm-core/src/tesm_core/static/tesm_core/js/viewer.js @@ -319,8 +319,13 @@ async function pdfjsLaden(basis) { return pdfjsGeladen; } -/** Zeigt ein PDF mit ausfuellbaren Formularfeldern. */ -async function pdfBetrachter(behaelter, seiten, url, basis) { +/** Zeigt ein PDF -- mit ausfuellbaren Feldern, sofern das erlaubt ist. + * + * Ohne ``formulare`` bleibt es bei der Darstellung aus dem Dokument: pdf.js + * malt dann die Marken, die im PDF stehen (etwa rotes Kreuz und gruener + * Haken), statt Bedienelemente des Browsers einzusetzen. + */ +async function pdfBetrachter(behaelter, seiten, url, basis, { formulare = true } = {}) { const { lib, komponenten } = await pdfjsLaden(basis); const adressen = pdfjsAdressen(basis); const eventBus = new komponenten.EventBus(); @@ -330,8 +335,11 @@ async function pdfBetrachter(behaelter, seiten, url, basis) { viewer: seiten, eventBus, linkService, - // Der Kern der Sache: Formularfelder werden zu echten Eingabefeldern. - annotationMode: lib.AnnotationMode.ENABLE_FORMS, + // Der Kern der Sache: Formularfelder werden zu echten Eingabefeldern -- + // wer nicht ausfuellen darf, bekommt die Darstellung aus dem Dokument. + annotationMode: formulare + ? lib.AnnotationMode.ENABLE_FORMS + : lib.AnnotationMode.ENABLE, textLayerMode: 1, }); linkService.setViewer(viewer); @@ -379,6 +387,7 @@ async function pdfBetrachter(behaelter, seiten, url, basis) { const bilder = new Map(); const bildknoepfeAufsetzen = async (nurSeite) => { + if (!formulare) return; for (let nummer = 1; nummer <= dokument.numPages; nummer++) { if (nurSeite && nummer !== nurSeite) continue; const seite = await dokument.getPage(nummer); @@ -562,7 +571,9 @@ export function initFilePreview(wurzel = document) { } if (hinweis) hinweis.textContent = "PDF wird geladen ..."; try { - pdf = await pdfBetrachter(pdfScroll, pdfSeiten, quelle, basis); + pdf = await pdfBetrachter(pdfScroll, pdfSeiten, quelle, basis, { + formulare: rumpf.dataset.viewerFormulare === "1", + }); if (hinweis) hinweis.textContent = ""; } catch (fehler) { // Kein weisses Feld: sagen, was los ist, und auf die einfache Anzeige diff --git a/packages/tesm-licensing-server/pyproject.toml b/packages/tesm-licensing-server/pyproject.toml index 834e2d5..26bd820 100644 --- a/packages/tesm-licensing-server/pyproject.toml +++ b/packages/tesm-licensing-server/pyproject.toml @@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta" [project] name = "tesm-licensing-server" -version = "2.3.3" +version = "2.4.0" description = "Serverhaelfte des TESM-Lizenzprotokolls: ausstellen, erneuern, antworten" requires-python = ">=3.11" -dependencies = ["tesm-licensing==2.3.3", "cryptography>=41"] +dependencies = ["tesm-licensing==2.4.0", "cryptography>=41"] [tool.setuptools.packages.find] where = ["src"] diff --git a/packages/tesm-licensing/pyproject.toml b/packages/tesm-licensing/pyproject.toml index 76b0735..8492d35 100644 --- a/packages/tesm-licensing/pyproject.toml +++ b/packages/tesm-licensing/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm-licensing" -version = "2.3.3" +version = "2.4.0" description = "Ed25519-basiertes Lizenz- und Aktivierungsprotokoll fuer TESM und TESM-Lizenzserver" requires-python = ">=3.11" dependencies = ["cryptography>=42"]