diff --git a/assets/css/ticket.css b/assets/css/ticket.css index b069d52..da43597 100644 --- a/assets/css/ticket.css +++ b/assets/css/ticket.css @@ -269,3 +269,18 @@ kbd { .thread-depth-2 { margin-left: 1.5rem; } .thread-depth-3 { margin-left: 2.25rem; } } + +/* ── Description read view ───────────────────────────────────── */ +/* Shown in read mode instead of a disabled (faded) textarea. */ +/* Uses lt-markdown typography for full contrast on dark/OLED. */ +.ticket-description-view { + min-height: 8rem; + padding: 0.5rem 0.25rem; + line-height: 1.75; + color: var(--text-primary); +} +.ticket-description-view p { + color: var(--text-secondary); + margin-bottom: 0.6rem; +} +.ticket-description-view p:last-child { margin-bottom: 0; } diff --git a/assets/js/ticket.js b/assets/js/ticket.js index 2ae1b8b..1130aa4 100644 --- a/assets/js/ticket.js +++ b/assets/js/ticket.js @@ -77,6 +77,38 @@ function saveTicket() { }); } +// ── Description read/edit helpers ──────────────────────────────────────────── +// Read mode: styled lt-markdown div (full contrast, even on OLED). +// Edit mode: raw textarea (enabled for editing). + +function renderDescriptionView() { + var viewDiv = document.getElementById('ticketDescriptionView'); + var textarea = document.querySelector('textarea[data-field="description"]'); + if (!viewDiv || !textarea) return; + var raw = textarea.value || ''; + if (!raw.trim()) { + viewDiv.innerHTML = '
No description provided.
'; + } else if (typeof parseMarkdown === 'function') { + viewDiv.innerHTML = parseMarkdown(raw); + } else { + viewDiv.innerHTML = lt.escHtml(raw).replace(/\n/g, '