Devashishraghav commited on
Commit
c995923
·
verified ·
1 Parent(s): ddf3552

Upload static/script.js with huggingface_hub

Browse files
Files changed (1) hide show
  1. static/script.js +125 -0
static/script.js ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ document.addEventListener('DOMContentLoaded', () => {
2
+ const dropZone = document.getElementById('drop-zone');
3
+ const fileInput = document.getElementById('file-input');
4
+ const fileListSection = document.getElementById('file-list');
5
+ const filesPreview = document.getElementById('files-preview');
6
+ const fileCount = document.getElementById('file-count');
7
+ const processBtn = document.getElementById('process-btn');
8
+ const loadingState = document.getElementById('loading-state');
9
+ const resultState = document.getElementById('result-state');
10
+ const downloadBtn = document.getElementById('download-btn');
11
+ const resetBtn = document.getElementById('reset-btn');
12
+
13
+ let selectedFiles = [];
14
+
15
+ // Trigger file input dialog on click
16
+ dropZone.addEventListener('click', () => fileInput.click());
17
+
18
+ // Handle File Input Change
19
+ fileInput.addEventListener('change', (e) => {
20
+ handleFiles(e.target.files);
21
+ });
22
+
23
+ // Drag & Drop Handlers
24
+ ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
25
+ dropZone.addEventListener(eventName, preventDefaults, false);
26
+ });
27
+
28
+ function preventDefaults(e) {
29
+ e.preventDefault();
30
+ e.stopPropagation();
31
+ }
32
+
33
+ ['dragenter', 'dragover'].forEach(eventName => {
34
+ dropZone.addEventListener(eventName, () => {
35
+ dropZone.classList.add('dragover');
36
+ }, false);
37
+ });
38
+
39
+ ['dragleave', 'drop'].forEach(eventName => {
40
+ dropZone.addEventListener(eventName, () => {
41
+ dropZone.classList.remove('dragover');
42
+ }, false);
43
+ });
44
+
45
+ dropZone.addEventListener('drop', (e) => {
46
+ const dt = e.dataTransfer;
47
+ handleFiles(dt.files);
48
+ }, false);
49
+
50
+ function handleFiles(files) {
51
+ selectedFiles = Array.from(files).filter(file => file.type.startsWith('image/'));
52
+ if (selectedFiles.length > 0) {
53
+ updateUI(true);
54
+ renderFilePreview();
55
+ }
56
+ }
57
+
58
+ function updateUI(hasFiles) {
59
+ if (hasFiles) {
60
+ dropZone.classList.add('hidden');
61
+ fileListSection.classList.remove('hidden');
62
+ } else {
63
+ dropZone.classList.remove('hidden');
64
+ fileListSection.classList.add('hidden');
65
+ resultState.classList.add('hidden');
66
+ loadingState.classList.add('hidden');
67
+ selectedFiles = [];
68
+ }
69
+ }
70
+
71
+ function renderFilePreview() {
72
+ fileCount.textContent = selectedFiles.length;
73
+ filesPreview.innerHTML = '';
74
+ selectedFiles.forEach(file => {
75
+ const li = document.createElement('li');
76
+ li.textContent = file.name;
77
+ li.title = file.name;
78
+ filesPreview.appendChild(li);
79
+ });
80
+ }
81
+
82
+ // Processing Logic
83
+ processBtn.addEventListener('click', async () => {
84
+ if (selectedFiles.length === 0) return;
85
+
86
+ fileListSection.classList.add('hidden');
87
+ loadingState.classList.remove('hidden');
88
+
89
+ const formData = new FormData();
90
+ selectedFiles.forEach(file => {
91
+ formData.append('files', file);
92
+ });
93
+
94
+ try {
95
+ const response = await fetch('/api/process', {
96
+ method: 'POST',
97
+ body: formData
98
+ });
99
+
100
+ if (response.ok) {
101
+ const blob = await response.blob();
102
+ const url = window.URL.createObjectURL(blob);
103
+
104
+ loadingState.classList.add('hidden');
105
+ resultState.classList.remove('hidden');
106
+
107
+ downloadBtn.href = url;
108
+ downloadBtn.download = `processed_cards_${new Date().getTime()}.zip`;
109
+ } else {
110
+ const err = await response.json();
111
+ alert(`Error: ${err.error || 'Server error'}`);
112
+ updateUI(true);
113
+ }
114
+ } catch (error) {
115
+ console.error(error);
116
+ alert('Failed to connect to the server.');
117
+ updateUI(true);
118
+ }
119
+ });
120
+
121
+ resetBtn.addEventListener('click', () => {
122
+ fileInput.value = '';
123
+ updateUI(false);
124
+ });
125
+ });