nagasurendra commited on
Commit
c660adf
·
verified ·
1 Parent(s): b7b7d35

Create static/js/camera.js

Browse files
Files changed (1) hide show
  1. static/js/camera.js +107 -0
static/js/camera.js ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ document.addEventListener('DOMContentLoaded', () => {
2
+ const video = document.getElementById('video');
3
+ const canvas = document.getElementById('canvas');
4
+ const capturedImage = document.getElementById('capturedImage');
5
+ const cameraBtn = document.getElementById('cameraBtn');
6
+ const frontCam = document.getElementById('frontCam');
7
+ const backCam = document.getElementById('backCam');
8
+ const captureBtn = document.getElementById('captureBtn');
9
+ const retakeBtn = document.getElementById('retakeBtn');
10
+ const uploadBtn = document.getElementById('uploadBtn');
11
+ const cameraControls = document.getElementById('cameraControls');
12
+ const postCapture = document.getElementById('postCapture');
13
+
14
+ let stream = null;
15
+
16
+ cameraBtn.addEventListener('click', async () => {
17
+ try {
18
+ stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'user' } });
19
+ video.srcObject = stream;
20
+ video.classList.remove('hidden');
21
+ cameraBtn.classList.add('hidden');
22
+ cameraControls.classList.remove('hidden');
23
+ } catch (err) {
24
+ alert('Error accessing camera: ' + err.message);
25
+ }
26
+ });
27
+
28
+ frontCam.addEventListener('click', async () => {
29
+ if (stream) {
30
+ stream.getTracks().forEach(track => track.stop());
31
+ }
32
+ try {
33
+ stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'user' } });
34
+ video.srcObject = stream;
35
+ fetch('/switch_camera', {
36
+ method: 'POST',
37
+ headers: { 'Content-Type': 'application/json' },
38
+ body: JSON.stringify({ camera_type: 'user' })
39
+ });
40
+ } catch (err) {
41
+ alert('Error switching to front camera: ' + err.message);
42
+ }
43
+ });
44
+
45
+ backCam.addEventListener('click', async () => {
46
+ if (stream) {
47
+ stream.getTracks().forEach(track => track.stop());
48
+ }
49
+ try {
50
+ stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } });
51
+ video.srcObject = stream;
52
+ fetch('/switch_camera', {
53
+ method: 'POST',
54
+ headers: { 'Content-Type': 'application/json' },
55
+ body: JSON.stringify({ camera_type: 'environment' })
56
+ });
57
+ } catch (err) {
58
+ alert('Error switching to back camera: ' + err.message);
59
+ }
60
+ });
61
+
62
+ captureBtn.addEventListener('click', () => {
63
+ fetch('/capture', { method: 'POST' })
64
+ .then(response => response.json())
65
+ .then(data => {
66
+ if (data.status === 'captured') {
67
+ video.classList.add('hidden');
68
+ capturedImage.src = '/uploads/captured.jpg?' + new Date().getTime();
69
+ capturedImage.classList.remove('hidden');
70
+ cameraControls.classList.add('hidden');
71
+ postCapture.classList.remove('hidden');
72
+ if (stream) {
73
+ stream.getTracks().forEach(track => track.stop());
74
+ }
75
+ }
76
+ });
77
+ });
78
+
79
+ retakeBtn.addEventListener('click', () => {
80
+ fetch('/retake', { method: 'POST' })
81
+ .then(response => response.json())
82
+ .then(data => {
83
+ if (data.status === 'retake') {
84
+ capturedImage.classList.add('hidden');
85
+ video.classList.remove('hidden');
86
+ cameraControls.classList.remove('hidden');
87
+ postCapture.classList.add('hidden');
88
+ cameraBtn.click();
89
+ }
90
+ });
91
+ });
92
+
93
+ uploadBtn.addEventListener('click', () => {
94
+ fetch('/upload', { method: 'POST' })
95
+ .then(response => response.json())
96
+ .then(data => {
97
+ if (data.status === 'uploaded') {
98
+ alert('Image uploaded to Instagram!');
99
+ capturedImage.classList.add('hidden');
100
+ cameraBtn.classList.remove('hidden');
101
+ postCapture.classList.add('hidden');
102
+ } else {
103
+ alert('Error uploading: ' + data.message);
104
+ }
105
+ });
106
+ });
107
+ });