From 1a7453607951a405dc0979090682bc0b274d0791 Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Thu, 8 Jan 2026 22:40:26 -0500 Subject: [PATCH] test fix for the ticket title --- assets/css/ticket.css | 20 ++++++++-------- assets/js/ticket.js | 54 +++++++++++++++++++++++++------------------ views/TicketView.php | 2 +- 3 files changed, 42 insertions(+), 34 deletions(-) diff --git a/assets/css/ticket.css b/assets/css/ticket.css index 5fed628..d78d681 100644 --- a/assets/css/ticket.css +++ b/assets/css/ticket.css @@ -287,7 +287,7 @@ } /* Blinking cursor effect for active inputs */ -.title-input:not(:disabled)::after, +.title-input[contenteditable="true"]::after, textarea[data-field="description"]:not(:disabled)::after { content: '█'; color: var(--terminal-green); @@ -367,31 +367,31 @@ textarea[data-field="description"]:not(:disabled)::after { margin: 0; word-break: break-word; overflow-wrap: break-word; - white-space: pre-wrap; + word-wrap: break-word; + white-space: normal; display: block; background: transparent; color: var(--terminal-green); line-height: 1.4; - min-height: fit-content; - height: auto; - resize: none; - overflow-y: hidden; - overflow-x: hidden; + min-height: 1.4em; + outline: none; } -.title-input:not(:disabled) { +.title-input[contenteditable="true"] { border-color: var(--border-color); background: var(--bg-primary); + cursor: text; } -.title-input:not(:disabled):hover { +.title-input[contenteditable="true"]:hover { border-color: #3b82f6; } -.title-input:disabled { +.title-input[contenteditable="false"] { color: var(--text-primary); border: none; background: transparent; + cursor: default; } /* Form Elements */ diff --git a/assets/js/ticket.js b/assets/js/ticket.js index 1239bfa..e2d241a 100644 --- a/assets/js/ticket.js +++ b/assets/js/ticket.js @@ -18,7 +18,12 @@ function saveTicket() { editables.forEach(field => { if (field.dataset.field) { - data[field.dataset.field] = field.value; + // For contenteditable divs, use textContent/innerText; for inputs/textareas, use value + if (field.hasAttribute('contenteditable')) { + data[field.dataset.field] = field.textContent.trim(); + } else { + data[field.dataset.field] = field.value; + } } }); @@ -63,19 +68,26 @@ function saveTicket() { function toggleEditMode() { const editButton = document.getElementById('editButton'); - const editables = document.querySelectorAll('.title-input, textarea[data-field="description"]'); + const titleField = document.querySelector('.title-input'); + const descriptionField = document.querySelector('textarea[data-field="description"]'); const metadataFields = document.querySelectorAll('.editable-metadata'); const isEditing = editButton.classList.contains('active'); if (!isEditing) { editButton.textContent = 'Save Changes'; editButton.classList.add('active'); - editables.forEach(field => { - field.disabled = false; - if (field.classList.contains('title-input')) { - field.focus(); - } - }); + + // Enable title (contenteditable div) + if (titleField) { + titleField.setAttribute('contenteditable', 'true'); + titleField.focus(); + } + + // Enable description (textarea) + if (descriptionField) { + descriptionField.disabled = false; + } + // Enable metadata fields (priority, category, type) metadataFields.forEach(field => { field.disabled = false; @@ -84,9 +96,17 @@ function toggleEditMode() { saveTicket(); editButton.textContent = 'Edit Ticket'; editButton.classList.remove('active'); - editables.forEach(field => { - field.disabled = true; - }); + + // Disable title + if (titleField) { + titleField.setAttribute('contenteditable', 'false'); + } + + // Disable description + if (descriptionField) { + descriptionField.disabled = true; + } + // Disable metadata fields metadataFields.forEach(field => { field.disabled = true; @@ -231,18 +251,6 @@ document.addEventListener('DOMContentLoaded', function() { textarea.style.height = textarea.scrollHeight + 'px'; } - // Auto-resize the title textarea to fit content - const titleTextarea = document.querySelector('.title-input'); - if (titleTextarea) { - // Initial resize - autoResizeTextarea(titleTextarea); - - // Resize on input when in edit mode - titleTextarea.addEventListener('input', function() { - autoResizeTextarea(this); - }); - } - // Auto-resize the description textarea to fit content const descriptionTextarea = document.querySelector('textarea[data-field="description"]'); if (descriptionTextarea) { diff --git a/views/TicketView.php b/views/TicketView.php index 830109c..a3f25fe 100644 --- a/views/TicketView.php +++ b/views/TicketView.php @@ -86,7 +86,7 @@ function formatDetails($details, $actionType) {
-

+