// AffLink Main JavaScript
// Format date timestamps
function formatDateTime(dateString) {
if (!dateString) return 'Never';
const date = new Date(dateString);
return date.toLocaleString();
}
// Format relative time (e.g., "2 hours ago")
function formatRelativeTime(dateString) {
if (!dateString) return 'Never';
const date = new Date(dateString);
const now = new Date();
const diffMs = now - date;
const diffSec = Math.floor(diffMs / 1000);
const diffMin = Math.floor(diffSec / 60);
const diffHour = Math.floor(diffMin / 60);
const diffDay = Math.floor(diffHour / 24);
if (diffDay > 30) {
return formatDateTime(dateString);
} else if (diffDay > 0) {
return diffDay + (diffDay === 1 ? ' day ago' : ' days ago');
} else if (diffHour > 0) {
return diffHour + (diffHour === 1 ? ' hour ago' : ' hours ago');
} else if (diffMin > 0) {
return diffMin + (diffMin === 1 ? ' minute ago' : ' minutes ago');
} else {
return 'Just now';
}
}
// Get a status badge HTML based on link status
function getStatusBadge(status) {
const badges = {
'active': 'Active',
'broken': 'Broken',
'redirected': 'Redirected',
'out_of_stock': 'Out of Stock',
'unknown': 'Unknown'
};
return badges[status] || badges['unknown'];
}
// Initialize tooltips and popovers
document.addEventListener('DOMContentLoaded', function() {
// Initialize Bootstrap tooltips
const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl);
});
// Initialize Bootstrap popovers
const popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl);
});
// Format all datetime elements
const datetimeElements = document.querySelectorAll('.datetime');
datetimeElements.forEach(element => {
const timestamp = element.getAttribute('data-timestamp');
if (timestamp) {
element.textContent = formatDateTime(timestamp);
}
});
// Format all relative time elements
const relativeTimeElements = document.querySelectorAll('.relative-time');
relativeTimeElements.forEach(element => {
const timestamp = element.getAttribute('data-timestamp');
if (timestamp) {
element.textContent = formatRelativeTime(timestamp);
}
});
});