document.addEventListener('DOMContentLoaded', function() { const trackForm = document.getElementById('trackForm'); const trackingLinksContainer = document.getElementById('trackingLinks'); const mediaContainer = document.getElementById('mediaContainer'); const screenshotPreview = document.getElementById('screenshotPreview'); const videoPreview = document.getElementById('videoPreview'); const trackingDetails = document.getElementById('trackingDetails'); // Load tracking links from localStorage loadTrackingLinks(); trackForm.addEventListener('submit', function(e) { e.preventDefault(); const targetUrl = document.getElementById('targetUrl').value; const trackingMode = document.getElementById('trackingMode').value; // Show loading state const submitButton = trackForm.querySelector('button[type="submit"]'); const originalButtonText = submitButton.innerHTML; submitButton.innerHTML = ` Generating...`; feather.replace(); // Generate tracking token const trackingToken = generateToken(); // Create trackable URL const trackableUrl = `${window.location.origin}/track.html?token=${trackingToken}`; // Save tracking link saveTrackingLink({ token: trackingToken, originalUrl: targetUrl, trackableUrl: trackableUrl, mode: trackingMode, createdAt: new Date().toISOString() }); // Show success message with copy button setTimeout(() => { submitButton.innerHTML = originalButtonText; feather.replace(); alert(`Your trackable link has been created:\n\n${trackableUrl}\n\nIt has been copied to your clipboard.`); navigator.clipboard.writeText(trackableUrl); // Reset form trackForm.reset(); loadTrackingLinks(); }, 1500); }); function generateToken() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { const r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); } // Database simulation functions function saveToDB(data, collection) { // In a real app, this would be a server API call let db = JSON.parse(localStorage.getItem('db') || '{}'); if (!db[collection]) db[collection] = []; db[collection].push(data); localStorage.setItem('db', JSON.stringify(db)); return data; } function queryDB(collection, queryFn) { let db = JSON.parse(localStorage.getItem('db') || '{}'); if (!db[collection]) return []; return db[collection].filter(queryFn); } function saveTrackingLink(trackingData) { return saveToDB(trackingData, 'trackingLinks'); } function loadTrackingLinks() { return queryDB('trackingLinks', () => true); } function saveTrackingResult(resultData) { return saveToDB(resultData, 'trackingResults'); } function getTrackingResult(token) { return queryDB('trackingResults', r => r.token === token)[0]; } function loadUserTrackingLinks() { const trackingLinks = JSON.parse(localStorage.getItem('trackingLinks') || '[]'); trackingLinksContainer.innerHTML = ''; if (trackingLinks.length === 0) { trackingLinksContainer.innerHTML = '
No tracking links yet
'; return; } trackingLinks.forEach(link => { const linkElement = document.createElement('div'); linkElement.className = 'tracking-link-item p-3 bg-white rounded-md flex justify-between items-center'; linkElement.innerHTML = `