Spaces:
Sleeping
Sleeping
| document.addEventListener('DOMContentLoaded', () => { | |
| const video = document.getElementById('video'); | |
| const canvas = document.getElementById('canvas'); | |
| const capturedImage = document.getElementById('capturedImage'); | |
| const cameraBtn = document.getElementById('cameraBtn'); | |
| const frontCam = document.getElementById('frontCam'); | |
| const backCam = document.getElementById('backCam'); | |
| const captureBtn = document.getElementById('captureBtn'); | |
| const retakeBtn = document.getElementById('retakeBtn'); | |
| const uploadBtn = document.getElementById('uploadBtn'); | |
| const cameraControls = document.getElementById('cameraControls'); | |
| const postCapture = document.getElementById('postCapture'); | |
| let stream = null; | |
| cameraBtn.addEventListener('click', async () => { | |
| try { | |
| stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'user' } }); | |
| video.srcObject = stream; | |
| video.classList.remove('hidden'); | |
| cameraBtn.classList.add('hidden'); | |
| cameraControls.classList.remove('hidden'); | |
| } catch (err) { | |
| alert('Error accessing camera: ' + err.message); | |
| } | |
| }); | |
| frontCam.addEventListener('click', async () => { | |
| if (stream) { | |
| stream.getTracks().forEach(track => track.stop()); | |
| } | |
| try { | |
| stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'user' } }); | |
| video.srcObject = stream; | |
| fetch('/switch_camera', { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify({ camera_type: 'user' }) | |
| }); | |
| } catch (err) { | |
| alert('Error switching to front camera: ' + err.message); | |
| } | |
| }); | |
| backCam.addEventListener('click', async () => { | |
| if (stream) { | |
| stream.getTracks().forEach(track => track.stop()); | |
| } | |
| try { | |
| stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } }); | |
| video.srcObject = stream; | |
| fetch('/switch_camera', { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/json' }, | |
| body: JSON.stringify({ camera_type: 'environment' }) | |
| }); | |
| } catch (err) { | |
| alert('Error switching to back camera: ' + err.message); | |
| } | |
| }); | |
| captureBtn.addEventListener('click', () => { | |
| const context = canvas.getContext('2d'); | |
| canvas.width = video.videoWidth; | |
| canvas.height = video.videoHeight; | |
| context.drawImage(video, 0, 0, canvas.width, canvas.height); | |
| canvas.toBlob(blob => { | |
| const formData = new FormData(); | |
| formData.append('image', blob, 'captured.jpg'); | |
| fetch('/capture', { | |
| method: 'POST', | |
| body: formData | |
| }) | |
| .then(response => response.json()) | |
| .then(data => { | |
| if (data.status === 'captured') { | |
| video.classList.add('hidden'); | |
| capturedImage.src = '/uploads/captured.jpg?' + new Date().getTime(); | |
| capturedImage.classList.remove('hidden'); | |
| cameraControls.classList.add('hidden'); | |
| postCapture.classList.remove('hidden'); | |
| if (stream) { | |
| stream.getTracks().forEach(track => track.stop()); | |
| } | |
| } else { | |
| alert(data.message); | |
| } | |
| }); | |
| }, 'image/jpeg'); | |
| }); | |
| retakeBtn.addEventListener('click', () => { | |
| fetch('/retake', { method: 'POST' }) | |
| .then(response => response.json()) | |
| .then(data => { | |
| if (data.status === 'retake') { | |
| capturedImage.classList.add('hidden'); | |
| video.classList.remove('hidden'); | |
| cameraControls.classList.remove('hidden'); | |
| postCapture.classList.add('hidden'); | |
| cameraBtn.click(); | |
| } | |
| }); | |
| }); | |
| uploadBtn.addEventListener('click', () => { | |
| fetch('/upload', { method: 'POST' }) | |
| .then(response => response.json()) | |
| .then(data => { | |
| if (data.status === 'uploaded') { | |
| alert('Image uploaded to Instagram!'); | |
| capturedImage.classList.add('hidden'); | |
| cameraBtn.classList.remove('hidden'); | |
| postCapture.classList.add('hidden'); | |
| } else { | |
| alert('Error uploading: ' + data.message); | |
| } | |
| }); | |
| }); | |
| }); |