Spaces:
Sleeping
Sleeping
| document.addEventListener('DOMContentLoaded', () => { | |
| const videoElement = document.getElementById('cameraFeed'); | |
| const canvasElement = document.getElementById('captureCanvas'); | |
| const captureBtn = document.getElementById('captureBtn'); | |
| // Only execute if camera elements exist on the page | |
| if (!videoElement) return; | |
| // 1. Configure and Request Camera Access (WebRTC / MediaDevices API) | |
| const constraints = { | |
| video: { | |
| facingMode: "environment", | |
| width: { ideal: 1280 }, | |
| height: { ideal: 720 } | |
| } | |
| }; | |
| function startCamera() { | |
| const camContainer = document.getElementById('cameraContainer'); | |
| if (camContainer) camContainer.style.display = 'block'; | |
| captureBtn.style.display = 'inline-block'; | |
| navigator.mediaDevices.getUserMedia(constraints) | |
| .then(stream => { | |
| videoElement.srcObject = stream; | |
| videoElement.play(); | |
| }) | |
| .catch(err => { | |
| console.error("Camera error: ", err); | |
| alert("Unable to access the camera. Please check your browser permissions."); | |
| }); | |
| } | |
| const btnCameraUpload = document.getElementById('btn-camera-upload'); | |
| if (btnCameraUpload) { | |
| btnCameraUpload.addEventListener('click', () => { | |
| document.dispatchEvent(new Event('start-ar-camera')); | |
| }); | |
| } | |
| document.addEventListener('start-ar-camera', () => { | |
| startCamera(); | |
| }); | |
| // 2. Theme Selection Logic | |
| let selectedTheme = "Modern"; // Default theme | |
| const themeCards = document.querySelectorAll('.theme-card'); | |
| // Set default selected state visually | |
| const defaultCard = document.querySelector('[data-theme="Modern"]'); | |
| if (defaultCard) defaultCard.classList.add('selected'); | |
| themeCards.forEach(card => { | |
| card.addEventListener('click', () => { | |
| themeCards.forEach(c => c.classList.remove('selected')); | |
| card.classList.add('selected'); | |
| selectedTheme = card.getAttribute('data-theme'); | |
| }); | |
| }); | |
| // 3. Capture & Upload Logic | |
| if (captureBtn && canvasElement) { | |
| captureBtn.addEventListener('click', () => { | |
| const context = canvasElement.getContext('2d'); | |
| canvasElement.width = videoElement.videoWidth; | |
| canvasElement.height = videoElement.videoHeight; | |
| // Draw the current video frame to the hidden canvas | |
| context.drawImage(videoElement, 0, 0, canvasElement.width, canvasElement.height); | |
| // Convert to blob and send to backend | |
| canvasElement.toBlob(blob => { | |
| const formData = new FormData(); | |
| const selectedLanguage = document.getElementById('languageSelect').value; | |
| formData.append('image', blob, 'captured_room.jpg'); | |
| formData.append('theme', selectedTheme); | |
| formData.append('language', selectedLanguage); // Send the selected language | |
| fetch('/upload', { | |
| method: 'POST', | |
| body: formData | |
| }) | |
| .then(response => response.json()) | |
| .then(data => { | |
| if (data.error) { | |
| alert("Error: " + data.error); | |
| } else if (data.redirect) { | |
| // This tells the browser to go to the results page | |
| window.location.href = data.redirect; | |
| } | |
| }) | |
| .catch(error => { | |
| console.error('Upload error:', error); | |
| alert("Failed to upload image."); | |
| }) | |
| .finally(() => { | |
| captureBtn.textContent = "Capture & Apply Theme"; | |
| captureBtn.disabled = false; | |
| }); | |
| }, 'image/jpeg', 0.9); | |
| }); | |
| } | |
| // 4. Gallery Upload Logic | |
| const imageUpload = document.getElementById('image-upload'); | |
| if (imageUpload) { | |
| imageUpload.addEventListener('change', (e) => { | |
| if (!e.target.files.length) return; | |
| const file = e.target.files[0]; | |
| const formData = new FormData(); | |
| const selectedLanguage = document.getElementById('languageSelect').value; | |
| formData.append('image', file); | |
| formData.append('theme', selectedTheme); | |
| formData.append('language', selectedLanguage); | |
| fetch('/upload', { | |
| method: 'POST', | |
| body: formData | |
| }) | |
| .then(response => response.json()) | |
| .then(data => { | |
| if (data.error) { | |
| alert("Error: " + data.error); | |
| } else if (data.redirect) { | |
| window.location.href = data.redirect; | |
| } | |
| }) | |
| .catch(error => { | |
| console.error('Upload error:', error); | |
| alert("Failed to upload image."); | |
| }); | |
| }); | |
| } | |
| }); |