admin-portal/tech/tabs/02-backlog/07_javascript.js

51 lines
1.8 KiB
JavaScript

/**
* Escape HTML special characters in a string.
*/
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, '&')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;');
}
function editBacklog(id) {
const item = backlogTickets[id];
if (!item) return;
document.getElementById('editBacklogId').value = item.id;
document.getElementById('editBacklogTitle').value = item.title;
document.getElementById('editBacklogDesc').value = item.desc;
document.getElementById('editBacklogStatus').value = item.status;
document.getElementById('editBacklogType').value = item.type;
new bootstrap.Modal(document.getElementById('editBacklogModal')).show();
}
function viewBacklog(id) {
const item = backlogTickets[id];
if (!item) return;
document.getElementById('viewBacklogTitle').textContent = item.title;
document.getElementById('viewBacklogDesc').innerHTML = escapeHtml(item.desc).replace(/\n/g, '<br>');
document.getElementById('viewBacklogCreated').textContent = item.created;
const statusMap = { 'in progress': 'warning', 'done': 'success', 'cancelled': 'secondary' };
const badge = document.getElementById('viewBacklogStatusBadge');
badge.className = 'badge bg-' + (statusMap[item.status] || 'light');
badge.textContent = item.status.charAt(0).toUpperCase() + item.status.slice(1);
const typeMap = {
'bug': 'bi-bug-fill text-danger',
'improvement': 'bi-tools text-success',
'nice-to-have': 'bi-star text-secondary'
};
const icon = typeMap[item.type] || '';
const typeEl = document.getElementById('viewBacklogType');
typeEl.innerHTML = icon ? `<i class="bi ${icon}"></i> ${item.type}` : '';
new bootstrap.Modal(document.getElementById('viewBacklogModal')).show();
}