/** * Globaler Formatter für Maße in cm — JS-Pendant zu classes/format.php. * * Verwendung in inline-JS-Templates (shop.php, task.php, scan/scripts/script.php): * fmtCm(mm) // "30,5 cm" / "30 cm" / "" je nach Locale + Wert * fmtCm(mm, {unit:false}) // "30,5" — wenn der Wert in ein Form-Feld geht * fmtSize(x, y) // "60 × 30,5 cm" * fmtSize(x, y, z) // "60 × 30,5 × 2 cm" * * Locale-Quelle: window.APP_LANG (in assets/head.php aus $_SESSION["lang"] gesetzt). * Override per opts.lang für Sonderfälle. * * Alle drei Achsen werden gleich behandelt — eine Regel. * * @see plan: C:\Users\jonas\.claude\plans\abstract-baking-thimble.md */ (function () { var COMMA_LANGS = { de: 1, it: 1, fr: 1, es: 1, pt: 1, nl: 1 }; function fmtCm(mm, opts) { opts = opts || {}; if (mm === null || mm === undefined || mm === '' || isNaN(mm)) return ''; var decimals = opts.decimals != null ? opts.decimals : 1; var lang = opts.lang || window.APP_LANG || 'en'; var sep = COMMA_LANGS[lang] ? ',' : '.'; var withUnit = opts.unit !== false; var factor = Math.pow(10, decimals); var cm = Math.round((Number(mm) / 10) * factor) / factor; var s = cm.toFixed(decimals); if (decimals > 0) s = s.replace(/\.?0+$/, ''); if (s === '-0') s = '0'; s = s.replace('.', sep); return withUnit ? s + ' cm' : s; } function fmtSize(x, y, z, opts) { var withUnit = !opts || opts.unit !== false; var inner = Object.assign({}, opts || {}, { unit: false }); var parts = [fmtCm(x, inner), fmtCm(y, inner)]; if (z !== null && z !== undefined && z !== '' && !isNaN(z)) { parts.push(fmtCm(z, inner)); } return parts.join(' × ') + (withUnit ? ' cm' : ''); } window.fmtCm = fmtCm; window.fmtSize = fmtSize; })();