Download script.js from Liamlarson/fedex-delivery-tracker-clone: direct link, hf CLI and curl.
- Browser
- Download file 4.49 kB
-
https://huggingface.co/spaces/Liamlarson/fedex-delivery-tracker-clone/resolve/main/script.js
- Command line
-
hf download hf://spaces/Liamlarson/fedex-delivery-tracker-clone/script.js
-
curl -L -o script.js https://huggingface.co/spaces/Liamlarson/fedex-delivery-tracker-clone/resolve/main/script.js
4.49 kB
| // 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); | |
| }); | |
| }); |