Postkarten-Layout: Text links, Absender+Empfänger rechts, Briefmarkenfeld frei
All checks were successful
Build & Deploy / deploy (push) Successful in 13s

Neues render_format-kind 'postkarte'. generatePostcardSVG setzt den Text auf die
linke Kartenhälfte, Absender (klein, oben) und Empfänger (Anschriftzone unten) auf
die rechte Hälfte; oben rechts bleibt das Briefmarkenfeld frei. Ein SVG je Karte
(ein Plotter-Durchlauf), geschrieben als letter_NNN.svg.

- page-layout: kind je Format mitführen + getFormatKind().
- svg-generator: generatePostcardSVG (Body/Absender/Empfänger über Marker
  [[pk_abs]]/[[pk_adr]] getrennt, damit alle Teile scriptalisiert werden).
- order-/preview-/directus-controller: type 'postcard' dispatchen, Marker in der
  Scriptalisierung erhalten, Postkarten-Dokument aus render_format-kind bauen.
- directus-service: kind aus render_formats mitladen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
s4luorth
2026-09-11 13:58:06 +02:00
parent bf3352d82c
commit 8030d3d0ec
6 changed files with 164 additions and 4 deletions

View File

@@ -21,11 +21,14 @@ const DEFAULT_PAGE_FORMATS = {
din_lang: { widthMm: 220, heightMm: 110 },
c6: { widthMm: 162, heightMm: 114 },
};
// Art des Formats (brief/umschlag/postkarte) – steuert, WAS generiert wird.
const DEFAULT_KINDS = { a4: 'brief', a6p: 'brief', a6l: 'brief', din_lang: 'umschlag', c6: 'umschlag' };
// Live-Cache (wird von applyRenderFormats ersetzt). Start = Defaults.
let LINE_LIMITS = { ...DEFAULT_LINE_LIMITS };
let FORMAT_LAYOUTS = { ...DEFAULT_FORMAT_LAYOUTS };
let PAGE_FORMATS = { ...DEFAULT_PAGE_FORMATS };
let KINDS = { ...DEFAULT_KINDS };
/**
* Übernimmt Format-Definitionen aus Directus (render_formats) in den Cache.
@@ -37,9 +40,11 @@ function applyRenderFormats(rows) {
const pf = { ...DEFAULT_PAGE_FORMATS };
const fl = { ...DEFAULT_FORMAT_LAYOUTS };
const ll = { ...DEFAULT_LINE_LIMITS };
const kn = { ...DEFAULT_KINDS };
for (const r of Array.isArray(rows) ? rows : []) {
const k = String(r.key || '').toLowerCase();
if (!k) continue;
if (r.kind) kn[k] = String(r.kind).toLowerCase();
if (r.page_width_mm && r.page_height_mm) {
pf[k] = { widthMm: Number(r.page_width_mm), heightMm: Number(r.page_height_mm) };
}
@@ -57,6 +62,12 @@ function applyRenderFormats(rows) {
PAGE_FORMATS = pf;
FORMAT_LAYOUTS = fl;
LINE_LIMITS = ll;
KINDS = kn;
}
// Art eines Formats (brief/umschlag/postkarte). Unbekannt → 'brief'.
function getFormatKind(format) {
return KINDS[String(format).toLowerCase()] || 'brief';
}
// mm in Pixel umrechnen
@@ -139,6 +150,7 @@ module.exports = {
getLayoutForFormat,
getPageDimensions,
getLineLimit,
getFormatKind,
escapeXml,
applyRenderFormats,
setFormatMissHandler,