diff --git a/apps/tesm-license/pyproject.toml b/apps/tesm-license/pyproject.toml index 75d9629..6b68629 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.7.6" +version = "2.7.7" 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 665a3c1..cf574e0 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.7.6" +version = "2.7.7" 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 dff22bd..e9431d2 100644 --- a/packages/tesm-core/src/tesm_core/app_factory.py +++ b/packages/tesm-core/src/tesm_core/app_factory.py @@ -148,7 +148,7 @@ def create_base_app( #: Wortmarke, ohne Zeile darunter; die Marke selbst zeigen beide #: Anwendungen. auth_tagline: str = "", - app_version: str = "2.7.6", + app_version: str = "2.7.7", 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/css/components.css b/packages/tesm-core/src/tesm_core/static/tesm_core/css/components.css index af2f541..a71cc2f 100644 --- a/packages/tesm-core/src/tesm_core/static/tesm_core/css/components.css +++ b/packages/tesm-core/src/tesm_core/static/tesm_core/css/components.css @@ -1461,7 +1461,6 @@ z-index: 3; cursor: grab; touch-action: none; - container-type: inline-size; border: 1px dashed transparent; } @@ -1487,7 +1486,10 @@ Mit der Hausschrift sah die Vorschau anders aus als das Ergebnis. Die Groesse setzt das Skript je Unterschrift -- hier steht nur ein Rueckfall. */ font-family: Helvetica, Arial, sans-serif; - font-size: 5.6cqw; + /* Die tatsaechliche Groesse setzt das Skript in Pixeln (Punkte mal + Pixel-je-Punkt der Seite). Dieser Wert gilt nur, solange sie noch nicht + gerechnet wurde -- geerbt wuerde sonst die Schriftgroesse der Seite. */ + font-size: 8px; line-height: 1.15; color: #111; border-top: 1px solid rgba(0, 0, 0, 0.85); 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 f9459f8..1af6587 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 @@ -346,8 +346,8 @@ async function nachbearbeiten( * * Ein Achtzehntel: bei den 150 Punkt der vollen Breite sind das gut acht * Punkt -- die uebliche Groesse einer Unterschriftszeile auf Papier. Dieselbe - * Rechnung benutzt die Vorschau (als ``cqw``), damit auf dem Schirm steht, - * was spaeter im PDF steht. + * Rechnung benutzt die Vorschau -- in Pixeln umgerechnet --, damit auf dem + * Schirm steht, was spaeter im PDF steht. */ function schriftgroesse(breite) { return Math.max(5, Math.min(10, breite / 18)); @@ -637,6 +637,8 @@ async function pdfBetrachter(behaelter, seiten, url, basis, { formulare = true } const MAX_BREITE = 150; const MAX_HOEHE = 50; const unterschriften = []; + //: Je gesetzte Unterschrift eine Funktion, die ihre Marke neu vermisst. + const neuzeichnen = new Set(); let wartendeUnterschrift = null; let zeugenzeile = () => ""; @@ -717,16 +719,24 @@ async function pdfBetrachter(behaelter, seiten, url, basis, { formulare = true } marke.style.left = `${(eintrag.x / blick.width) * 100}%`; marke.style.bottom = `${(eintrag.y / blick.height) * 100}%`; marke.style.width = `${(eintrag.breite / blick.width) * 100}%`; - // Dieselbe Rechnung wie beim Stempeln, samt ihrer Ober- und Untergrenze - // -- in "cqw" (Prozent der Blockbreite), damit sie beim Zoomen mitgeht. - text.style.fontSize = `${(schriftgroesse(eintrag.breite) / eintrag.breite) * 100}cqw`; + // Die Schriftgroesse wird gerechnet, nicht vom Stylesheet abgeleitet: + // Punkte mal Pixel-je-Punkt der gerade dargestellten Seite. Ueber + // Container-Einheiten ("cqw") ging das auch -- aber nur dort, wo der + // Browser sie kennt; wo nicht, erbte der Block die Schriftgroesse der + // Seite, und der Text war um die Haelfte zu breit. Genau das war der + // Unterschied zwischen Vorschau und Datei. + const proPunkt = seitenEl.getBoundingClientRect().width / blick.width; + text.style.fontSize = `${schriftgroesse(eintrag.breite) * proPunkt}px`; }; + // Beim Zoomen aendert sich Pixel-je-Punkt -- dann neu rechnen. + neuzeichnen.add(zeichnen); zeichnen(); weg.addEventListener("click", (event) => { event.stopPropagation(); const stelle = unterschriften.indexOf(eintrag); if (stelle >= 0) unterschriften.splice(stelle, 1); + neuzeichnen.delete(zeichnen); marke.remove(); }); @@ -778,6 +788,18 @@ async function pdfBetrachter(behaelter, seiten, url, basis, { formulare = true } platzieren(event).catch((fehler) => console.error("Unterschrift", fehler)); }); + // Nach dem Zoomen stehen die Marken anteilig richtig, aber die Schrift + // haengt an der Pixelgroesse der Seite -- die ist jetzt eine andere. + eventBus.on("scalechanging", () => { + for (const zeichnen of neuzeichnen) { + try { + zeichnen(); + } catch (fehler) { + console.error("Unterschrift neu vermessen", fehler); + } + } + }); + return { hinein: () => { viewer.currentScale = Math.min(MAX_ZOOM, viewer.currentScale * 1.2); diff --git a/packages/tesm-licensing-server/pyproject.toml b/packages/tesm-licensing-server/pyproject.toml index ec8b73d..faf34e0 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.7.6" +version = "2.7.7" description = "Serverhaelfte des TESM-Lizenzprotokolls: ausstellen, erneuern, antworten" requires-python = ">=3.11" -dependencies = ["tesm-licensing==2.7.6", "cryptography>=41"] +dependencies = ["tesm-licensing==2.7.7", "cryptography>=41"] [tool.setuptools.packages.find] where = ["src"] diff --git a/packages/tesm-licensing/pyproject.toml b/packages/tesm-licensing/pyproject.toml index 48d9244..7f97cdb 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.7.6" +version = "2.7.7" description = "Ed25519-basiertes Lizenz- und Aktivierungsprotokoll fuer TESM und TESM-Lizenzserver" requires-python = ">=3.11" dependencies = ["cryptography>=42"]