function saveTicket() { const editables = document.querySelectorAll('.editable'); const data = {}; const ticketId = window.location.href.split('id=')[1]; editables.forEach(field => { if (field.dataset.field) { data[field.dataset.field] = field.value; } }); fetch('update_ticket.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ticket_id: ticketId, ...data }) }) .then(response => response.json()) .then(data => { if(data.success) { const statusDisplay = document.getElementById('statusDisplay'); statusDisplay.className = `status-${data.status}`; statusDisplay.textContent = data.status; } }); } function toggleEditMode() { const editButton = document.getElementById('editButton'); const editables = document.querySelectorAll('.editable'); const isEditing = editButton.classList.contains('active'); if (!isEditing) { // Enable editing editButton.textContent = 'Save Changes'; editButton.classList.add('active'); editables.forEach(field => { field.disabled = false; if (field.classList.contains('title-input')) { field.focus(); } }); } else { // Save changes and disable editing saveTicket(); editButton.textContent = 'Edit Ticket'; editButton.classList.remove('active'); editables.forEach(field => { field.disabled = true; }); } } function addComment() { const commentText = document.getElementById('newComment').value; const ticketId = window.location.href.split('id=')[1]; fetch('add_comment.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ticket_id: ticketId, comment_text: commentText }) }) .then(response => response.json()) .then(data => { if(data.success) { // Clear the comment box document.getElementById('newComment').value = ''; // Add new comment to the list const commentsList = document.querySelector('.comments-list'); const newComment = `
${data.user_name} ${data.created_at}
${commentText}
`; commentsList.insertAdjacentHTML('afterbegin', newComment); } }); } function togglePreview() { const preview = document.getElementById('markdownPreview'); const textarea = document.getElementById('newComment'); const isPreviewEnabled = document.getElementById('markdownToggle').checked; preview.style.display = isPreviewEnabled ? 'block' : 'none'; if (isPreviewEnabled) { preview.innerHTML = marked.parse(textarea.value); textarea.addEventListener('input', updatePreview); } else { textarea.removeEventListener('input', updatePreview); } } function updatePreview() { const preview = document.getElementById('markdownPreview'); const textarea = document.getElementById('newComment'); preview.innerHTML = marked.parse(textarea.value); } function toggleMarkdownMode() { const previewToggle = document.getElementById('markdownToggle'); const isMasterEnabled = document.getElementById('markdownMaster').checked; previewToggle.disabled = !isMasterEnabled; if (!isMasterEnabled) { previewToggle.checked = false; document.getElementById('markdownPreview').style.display = 'none'; } } function addComment() { const commentText = document.getElementById('newComment').value; const isMarkdownEnabled = document.getElementById('markdownMaster').checked; const ticketId = window.location.href.split('id=')[1]; fetch('add_comment.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ticket_id: ticketId, comment_text: commentText, markdown_enabled: isMarkdownEnabled }) }) .then(response => response.json()) .then(data => { if(data.success) { const commentsList = document.querySelector('.comments-list'); const newCommentHtml = `
${data.user_name} ${data.created_at}
${isMarkdownEnabled ? marked.parse(commentText) : commentText}
`; commentsList.insertAdjacentHTML('afterbegin', newCommentHtml); document.getElementById('newComment').value = ''; } }); } document.addEventListener('DOMContentLoaded', function() { // Show description tab by default showTab('description'); }); function showTab(tabName) { // Hide all tab contents const descriptionTab = document.getElementById('description-tab'); const commentsTab = document.getElementById('comments-tab'); // Hide both tabs descriptionTab.style.display = 'none'; commentsTab.style.display = 'none'; // Remove active class from all buttons document.querySelectorAll('.tab-btn').forEach(btn => { btn.classList.remove('active'); }); // Show selected tab and activate its button document.getElementById(`${tabName}-tab`).style.display = 'block'; document.querySelector(`[onclick="showTab('${tabName}')"]`).classList.add('active'); }