From 988ba75df3bdeab93af6f67c813b2e6985e41569 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Tue, 7 Apr 2026 14:28:10 -0400 Subject: [PATCH] feat(badges): cfg_json hide toggles for title/affiliations/location; wire renderer --- .../[badge_id]/ae_comp__badge_obj_view.svelte | 102 ++++++++++++++--- .../ae_comp__badge_template_form.svelte | 108 ++++++++++++++++++ 2 files changed, 191 insertions(+), 19 deletions(-) diff --git a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_obj_view.svelte b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_obj_view.svelte index 8e615ac8..fe216806 100644 --- a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_obj_view.svelte +++ b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_obj_view.svelte @@ -206,30 +206,94 @@ let template_cfg = $derived.by(() => { // Visibility / QR flags: cfg_json overrides top-level fields when present. let hide_badge_header = $derived.by(() => { - const cfg = $template_cfg || {}; + const cfg = template_cfg || {}; if (Object.prototype.hasOwnProperty.call(cfg, 'hide_badge_header')) return !!cfg.hide_badge_header; // Default: if a background image is present, hide header; otherwise show. - return !!$bg_image_path; + return !!bg_image_path; }); let hide_badge_footer = $derived.by(() => { - const cfg = $template_cfg || {}; + const cfg = template_cfg || {}; if (Object.prototype.hasOwnProperty.call(cfg, 'hide_badge_footer')) return !!cfg.hide_badge_footer; return false; }); let use_show_qr_front = $derived.by(() => { - const cfg = $template_cfg || {}; + const cfg = template_cfg || {}; if (Object.prototype.hasOwnProperty.call(cfg, 'show_qr_front')) return !!cfg.show_qr_front; return $lq__event_badge_template_obj?.show_qr_front ?? false; }); let use_show_qr_back = $derived.by(() => { - const cfg = $template_cfg || {}; + const cfg = template_cfg || {}; if (Object.prototype.hasOwnProperty.call(cfg, 'show_qr_back')) return !!cfg.show_qr_back; return $lq__event_badge_template_obj?.show_qr_back ?? true; }); +// Per-field hide toggles (title, affiliations, location) +let hide_title = $derived.by(() => { + const cfg = template_cfg || {}; + if (Object.prototype.hasOwnProperty.call(cfg, 'hide_title')) return !!cfg.hide_title; + return false; +}); + +let hide_affiliations = $derived.by(() => { + const cfg = template_cfg || {}; + if (Object.prototype.hasOwnProperty.call(cfg, 'hide_affiliations')) return !!cfg.hide_affiliations; + return false; +}); + +let hide_location = $derived.by(() => { + const cfg = template_cfg || {}; + if (Object.prototype.hasOwnProperty.call(cfg, 'hide_location')) return !!cfg.hide_location; + return false; +}); + +// Alignment derived values (defaults to center). Stored under cfg_json.align and cfg_json.qr_alignment. +let align_name = $derived.by(() => { + const cfg = template_cfg || {}; + return cfg?.align?.name ?? cfg.align_name ?? 'center'; +}); + +let align_title = $derived.by(() => { + const cfg = template_cfg || {}; + return cfg?.align?.title ?? cfg.align_title ?? 'center'; +}); + +let align_affiliations = $derived.by(() => { + const cfg = template_cfg || {}; + return cfg?.align?.affiliations ?? cfg.align_affiliations ?? 'center'; +}); + +let align_location = $derived.by(() => { + const cfg = template_cfg || {}; + return cfg?.align?.location ?? cfg.align_location ?? 'center'; +}); + +let qr_front_align_css = $derived.by(() => { + const cfg = template_cfg || {}; + const val = cfg?.qr_alignment?.front ?? cfg.qr_alignment_front ?? 'center'; + const map: Record = { + left: 'flex-start', + center: 'center', + right: 'flex-end', + justify: 'stretch' + }; + return map[val] ?? 'center'; +}); + +let qr_back_justify = $derived.by(() => { + const cfg = template_cfg || {}; + const val = cfg?.qr_alignment?.back ?? cfg.qr_alignment_back ?? 'center'; + const map: Record = { + left: 'flex-start', + center: 'center', + right: 'flex-end', + justify: 'space-between' + }; + return map[val] ?? 'center'; +}); + /** * Layout-aware section heights for Element_fit_text. * @@ -515,7 +579,7 @@ const code_to_icon: { w-[4in] max-w-fit flex-col - items-stretch justify-between gap-0 + items-end justify-end gap-0 overflow-visible p-0 text-center hover:outline-2 hover:outline-red-500/75 @@ -578,8 +642,8 @@ const code_to_icon: { m-0 flex grow flex-col - items-stretch - justify-between overflow-clip + items-center + justify-end overflow-clip p-0 px-1 "> {#if eff_badge?.ticket_1_code || eff_badge?.ticket_2_code || eff_badge?.ticket_3_code || use_show_qr_front} -
+
{#if eff_badge?.ticket_1_code} + class="qr_badge_id_part_1 flex flex-row items-center justify-between" style="justify-content: {qr_back_justify};"> Show QR on Back (cfg_json) +
+ + + + + + + + + +

These values are saved into cfg_json. Existing cfg_json keys are preserved.