Liamlarson's picture
Launch website
bc813bc verified
// Shared JavaScript
// Initialize analytics
if (window.netlifyIdentity) {
window.netlifyIdentity.on("init", user => {
if (!user) {
window.netlifyIdentity.on("login", () => {
document.location.href = "/admin/";
});
}
});
}
// Mock tracking data
const mockTrackingData = {
"1234567890": {
status: "Delivered",
estimatedDelivery: "Today by 8:00 PM",
history: [
{ status: "Delivered", time: "Today at 2:30 PM", details: "Delivered to front door" },
{ status: "Out for delivery", time: "Today at 8:15 AM" },
{ status: "In transit", time: "Yesterday at 5:45 PM", details: "Departed from local facility" }
]
},
"9876543210": {
status: "In Transit",
estimatedDelivery: "Tomorrow by 8:00 PM",
history: [
{ status: "In transit", time: "Today at 10:30 AM", details: "Arrived at local facility" },
{ status: "Shipped", time: "Yesterday at 3:15 PM", details: "Package picked up" }
]
}
};
// Handle tracking from URL parameter
function checkTrackingFromURL() {
const urlParams = new URLSearchParams(window.location.search);
const trackingNum = urlParams.get('track');
if (trackingNum && document.querySelector('form')) {
const input = document.querySelector('form input');
input.value = trackingNum;
document.querySelector('form').dispatchEvent(new Event('submit'));
}
}
// Register service worker for PWA
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js').then(registration => {
console.log('SW registered: ', registration);
}).catch(registrationError => {
console.log('SW registration failed: ', registrationError);
});
});
}
document.addEventListener('DOMContentLoaded', () => {
checkTrackingFromURL();
// Form submission handler
const trackingForm = document.querySelector('form');
if (trackingForm) {
trackingForm.addEventListener('submit', (e) => {
e.preventDefault();
const trackingNumber = e.target.querySelector('input').value;
const trackingData = mockTrackingData[trackingNumber];
if (trackingData) {
// Update UI with tracking data
const resultsSection = document.querySelector('.p-6');
if (resultsSection) {
resultsSection.innerHTML = `
<div class="flex items-center mb-6">
<div class="bg-purple-100 p-3 rounded-full mr-4">
<i data-feather="package" class="text-purple-600"></i>
</div>
<div>
<h2 class="text-xl font-bold">Shipment #${trackingNumber}</h2>
<p class="text-gray-600">Estimated delivery: ${trackingData.estimatedDelivery}</p>
</div>
</div>
<div class="border-l-2 border-purple-200 pl-6 ml-3 py-4 space-y-8">
${trackingData.history.map(item => `
<div class="relative">
<div class="absolute -left-7 top-0 w-4 h-4 ${item.status === "Delivered" ? 'bg-purple-600' : 'bg-purple-300'} rounded-full border-4 border-white"></div>
<div class="ml-2">
<p class="font-semibold">${item.status}</p>
<p class="text-gray-500 text-sm">${item.time}</p>
${item.details ? `<p class="text-gray-600 mt-1">${item.details}</p>` : ''}
</div>
</div>
`).join('')}
</div>
`;
feather.replace();
}
} else {
alert(`Tracking number ${trackingNumber} not found. Try 1234567890 or 9876543210 for demo.`);
}
});
}
// Initialize tooltips for icons
const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl);
});
});