diff --git a/assets/js/toast.js b/assets/js/toast.js
index 8b5775a..5736bb5 100644
--- a/assets/js/toast.js
+++ b/assets/js/toast.js
@@ -1,17 +1,26 @@
/**
- * Terminal-style toast notification system
+ * Terminal-style toast notification system with queuing
*/
+// Toast queue management
+let toastQueue = [];
+let currentToast = null;
+
function showToast(message, type = 'info', duration = 3000) {
- // Remove any existing toasts
- const existingToast = document.querySelector('.terminal-toast');
- if (existingToast) {
- existingToast.remove();
+ // Queue if a toast is already showing
+ if (currentToast) {
+ toastQueue.push({ message, type, duration });
+ return;
}
+ displayToast(message, type, duration);
+}
+
+function displayToast(message, type, duration) {
// Create toast element
const toast = document.createElement('div');
toast.className = `terminal-toast toast-${type}`;
+ currentToast = toast;
// Icon based on type
const icons = {
@@ -24,6 +33,7 @@ function showToast(message, type = 'info', duration = 3000) {
toast.innerHTML = `
[${icons[type] || 'ℹ'}]
${message}
+ [×]
`;
// Add to document
@@ -32,11 +42,36 @@ function showToast(message, type = 'info', duration = 3000) {
// Trigger animation
setTimeout(() => toast.classList.add('show'), 10);
+ // Manual dismiss handler
+ const closeBtn = toast.querySelector('.toast-close');
+ closeBtn.addEventListener('click', () => dismissToast(toast));
+
// Auto-remove after duration
- setTimeout(() => {
- toast.classList.remove('show');
- setTimeout(() => toast.remove(), 300);
+ const timeoutId = setTimeout(() => {
+ dismissToast(toast);
}, duration);
+
+ // Store timeout ID for manual dismiss
+ toast.timeoutId = timeoutId;
+}
+
+function dismissToast(toast) {
+ // Clear auto-dismiss timeout
+ if (toast.timeoutId) {
+ clearTimeout(toast.timeoutId);
+ }
+
+ toast.classList.remove('show');
+ setTimeout(() => {
+ toast.remove();
+ currentToast = null;
+
+ // Show next toast in queue
+ if (toastQueue.length > 0) {
+ const next = toastQueue.shift();
+ displayToast(next.message, next.type, next.duration);
+ }
+ }, 300);
}
// Convenience functions