Update templates/combined_summary.html
Browse files- templates/combined_summary.html +51 -22
templates/combined_summary.html
CHANGED
@@ -435,7 +435,7 @@
|
|
435 |
.order-confirmed::before {
|
436 |
content: '✔';
|
437 |
position: absolute;
|
438 |
-
top: 50
|
439 |
left: 50%;
|
440 |
transform: translate(-50%, -50%);
|
441 |
font-size: 120px;
|
@@ -457,9 +457,15 @@
|
|
457 |
animation: fadeIn 0.5s ease-in-out;
|
458 |
}
|
459 |
/* Timer styling */
|
460 |
-
|
461 |
-
|
462 |
font-weight: 600;
|
|
|
|
|
|
|
|
|
|
|
|
|
463 |
}
|
464 |
/* Tier details animation */
|
465 |
.tier-details {
|
@@ -606,7 +612,7 @@
|
|
606 |
<div class="section bg-white shadow-sm rounded-xl p-6 mb-6 order-confirmed" role="alert">
|
607 |
<h1 class="text-center text-2xl font-bold text-orange-500">Order Confirmed!</h1>
|
608 |
<p class="text-center text-gray-600 mt-2">
|
609 |
-
Estimated delivery time: <span id="deliveryTimer"
|
610 |
</p>
|
611 |
<p id="successMessage" class="success-message hidden">Successfully Delivered!</p>
|
612 |
</div>
|
@@ -1010,32 +1016,59 @@
|
|
1010 |
}
|
1011 |
|
1012 |
// Delivery timer function
|
1013 |
-
function startDeliveryTimer(
|
1014 |
try {
|
1015 |
const timerElement = document.getElementById('deliveryTimer');
|
1016 |
const successMessage = document.getElementById('successMessage');
|
1017 |
const deliveryText = document.querySelector('.order-confirmed p.text-center.text-gray-600');
|
|
|
|
|
|
|
|
|
|
|
|
|
1018 |
|
1019 |
-
|
|
|
|
|
1020 |
|
1021 |
-
|
1022 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1023 |
clearInterval(timerInterval);
|
1024 |
deliveryText.classList.add('hidden');
|
1025 |
successMessage.classList.remove('hidden');
|
|
|
|
|
|
|
1026 |
return;
|
1027 |
}
|
1028 |
|
1029 |
-
const
|
1030 |
-
const
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
const timerInterval = setInterval(updateTimer, 1000);
|
1037 |
} catch (e) {
|
1038 |
-
console.error('Error
|
|
|
1039 |
}
|
1040 |
}
|
1041 |
|
@@ -1056,11 +1089,7 @@
|
|
1056 |
}
|
1057 |
|
1058 |
// Start delivery timer
|
1059 |
-
|
1060 |
-
const deliveryTime = parseInt(deliveryTimeElement.textContent.split(':')[0], 10) || 0;
|
1061 |
-
if (deliveryTime > 0) {
|
1062 |
-
startDeliveryTimer(deliveryTime);
|
1063 |
-
}
|
1064 |
|
1065 |
// Lazy load images with IntersectionObserver
|
1066 |
const images = document.querySelectorAll('img.lazyload');
|
|
|
435 |
.order-confirmed::before {
|
436 |
content: '✔';
|
437 |
position: absolute;
|
438 |
+
top: 50%;
|
439 |
left: 50%;
|
440 |
transform: translate(-50%, -50%);
|
441 |
font-size: 120px;
|
|
|
457 |
animation: fadeIn 0.5s ease-in-out;
|
458 |
}
|
459 |
/* Timer styling */
|
460 |
+
#deliveryTimer {
|
461 |
+
display: inline-block;
|
462 |
font-weight: 600;
|
463 |
+
color: #10B981;
|
464 |
+
background: #ECFDF5;
|
465 |
+
padding: 4px 12px;
|
466 |
+
border-radius: 6px;
|
467 |
+
min-width: 80px;
|
468 |
+
text-align: center;
|
469 |
}
|
470 |
/* Tier details animation */
|
471 |
.tier-details {
|
|
|
612 |
<div class="section bg-white shadow-sm rounded-xl p-6 mb-6 order-confirmed" role="alert">
|
613 |
<h1 class="text-center text-2xl font-bold text-orange-500">Order Confirmed!</h1>
|
614 |
<p class="text-center text-gray-600 mt-2">
|
615 |
+
Estimated delivery time: <span id="deliveryTimer" aria-live="polite">{{ delivery_time }}:00</span>
|
616 |
</p>
|
617 |
<p id="successMessage" class="success-message hidden">Successfully Delivered!</p>
|
618 |
</div>
|
|
|
1016 |
}
|
1017 |
|
1018 |
// Delivery timer function
|
1019 |
+
function startDeliveryTimer() {
|
1020 |
try {
|
1021 |
const timerElement = document.getElementById('deliveryTimer');
|
1022 |
const successMessage = document.getElementById('successMessage');
|
1023 |
const deliveryText = document.querySelector('.order-confirmed p.text-center.text-gray-600');
|
1024 |
+
const storageKey = 'orderDeliveryTimer';
|
1025 |
+
const now = Date.now();
|
1026 |
+
|
1027 |
+
// Get delivery time from template (in minutes)
|
1028 |
+
const initialDeliveryTime = {{ delivery_time | default(15) }};
|
1029 |
+
const totalDuration = initialDeliveryTime * 60 * 1000; // Convert to milliseconds
|
1030 |
|
1031 |
+
// Check if timer data exists in localStorage
|
1032 |
+
let timerData = JSON.parse(localStorage.getItem(storageKey));
|
1033 |
+
let startTime;
|
1034 |
|
1035 |
+
if (timerData && timerData.startTime && timerData.totalDuration === totalDuration) {
|
1036 |
+
// Resume existing timer
|
1037 |
+
startTime = timerData.startTime;
|
1038 |
+
} else {
|
1039 |
+
// Start new timer
|
1040 |
+
startTime = now;
|
1041 |
+
localStorage.setItem(storageKey, JSON.stringify({
|
1042 |
+
startTime: startTime,
|
1043 |
+
totalDuration: totalDuration
|
1044 |
+
}));
|
1045 |
+
}
|
1046 |
+
|
1047 |
+
// Update timer every second
|
1048 |
+
const timerInterval = setInterval(() => {
|
1049 |
+
const elapsedTime = Date.now() - startTime;
|
1050 |
+
const remainingTime = totalDuration - elapsedTime;
|
1051 |
+
|
1052 |
+
if (remainingTime <= 0) {
|
1053 |
clearInterval(timerInterval);
|
1054 |
deliveryText.classList.add('hidden');
|
1055 |
successMessage.classList.remove('hidden');
|
1056 |
+
timerElement.textContent = 'Order is ready!';
|
1057 |
+
timerElement.setAttribute('aria-label', 'Order is ready for delivery');
|
1058 |
+
localStorage.removeItem(storageKey);
|
1059 |
return;
|
1060 |
}
|
1061 |
|
1062 |
+
const remainingSeconds = Math.floor(remainingTime / 1000);
|
1063 |
+
const minutes = Math.floor(remainingSeconds / 60);
|
1064 |
+
const seconds = remainingSeconds % 60;
|
1065 |
+
const formattedTime = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
|
1066 |
+
timerElement.textContent = formattedTime;
|
1067 |
+
timerElement.setAttribute('aria-label', `Estimated delivery time: ${minutes} minutes and ${seconds} seconds`);
|
1068 |
+
}, 1000);
|
|
|
1069 |
} catch (e) {
|
1070 |
+
console.error('Error running delivery timer:', e);
|
1071 |
+
document.getElementById('deliveryTimer').textContent = 'Time unavailable';
|
1072 |
}
|
1073 |
}
|
1074 |
|
|
|
1089 |
}
|
1090 |
|
1091 |
// Start delivery timer
|
1092 |
+
startDeliveryTimer();
|
|
|
|
|
|
|
|
|
1093 |
|
1094 |
// Lazy load images with IntersectionObserver
|
1095 |
const images = document.querySelectorAll('img.lazyload');
|