51 lines
1.8 KiB
JavaScript
51 lines
1.8 KiB
JavaScript
|
|
/**
|
|
* Escape HTML special characters in a string.
|
|
*/
|
|
function escapeHtml(unsafe) {
|
|
return unsafe
|
|
.replace(/&/g, '&')
|
|
.replace(/</g, '<')
|
|
.replace(/>/g, '>')
|
|
.replace(/"/g, '"')
|
|
.replace(/'/g, ''');
|
|
}
|
|
|
|
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();
|
|
}
|