Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -170,14 +170,29 @@ HTML_CONTENT = """
|
|
170 |
font-size: 0.8rem;
|
171 |
color: #aaa;
|
172 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
173 |
</style>
|
174 |
</head>
|
175 |
<body>
|
176 |
<div class="container">
|
177 |
<h1>Radd PRO Uploader</h1>
|
178 |
<form id="uploadForm">
|
179 |
-
<
|
180 |
-
|
|
|
|
|
|
|
181 |
<div class="file-name" id="fileName"></div>
|
182 |
<button type="button" id="uploadBtn" class="btn" style="display: none; margin-top: 1rem;">Upload Files</button>
|
183 |
<div class="progress-container" id="progressContainer"></div>
|
@@ -185,7 +200,7 @@ HTML_CONTENT = """
|
|
185 |
</form>
|
186 |
<div class="result-container" id="resultContainer"></div>
|
187 |
<div class="file-types">
|
188 |
-
Allowed file types: .zip, .mp4, .txt
|
189 |
</div>
|
190 |
</div>
|
191 |
|
@@ -196,14 +211,9 @@ HTML_CONTENT = """
|
|
196 |
const progressContainer = document.getElementById('progressContainer');
|
197 |
const loadingSpinner = document.getElementById('loadingSpinner');
|
198 |
const resultContainer = document.getElementById('resultContainer');
|
|
|
199 |
|
200 |
-
fileInput.addEventListener('change',
|
201 |
-
if (e.target.files.length > 0) {
|
202 |
-
const fileNames = Array.from(e.target.files).map(file => file.name).join(', ');
|
203 |
-
fileName.textContent = fileNames;
|
204 |
-
uploadBtn.style.display = 'inline-block';
|
205 |
-
}
|
206 |
-
});
|
207 |
|
208 |
uploadBtn.addEventListener('click', () => {
|
209 |
if (fileInput.files.length > 0) {
|
@@ -211,6 +221,45 @@ HTML_CONTENT = """
|
|
211 |
}
|
212 |
});
|
213 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
214 |
function uploadFiles(files) {
|
215 |
progressContainer.innerHTML = '';
|
216 |
progressContainer.style.display = 'block';
|
|
|
170 |
font-size: 0.8rem;
|
171 |
color: #aaa;
|
172 |
}
|
173 |
+
.drop-zone {
|
174 |
+
border: 2px dashed #aaa;
|
175 |
+
border-radius: 10px;
|
176 |
+
padding: 20px;
|
177 |
+
text-align: center;
|
178 |
+
cursor: pointer;
|
179 |
+
transition: all 0.3s ease;
|
180 |
+
}
|
181 |
+
.drop-zone:hover, .drop-zone.drag-over {
|
182 |
+
border-color: #ffffff;
|
183 |
+
background-color: rgba(255, 255, 255, 0.1);
|
184 |
+
}
|
185 |
</style>
|
186 |
</head>
|
187 |
<body>
|
188 |
<div class="container">
|
189 |
<h1>Radd PRO Uploader</h1>
|
190 |
<form id="uploadForm">
|
191 |
+
<div id="dropZone" class="drop-zone">
|
192 |
+
<input type="file" name="files" id="files" class="file-input" accept=".zip,.mp4,.txt,.mp3,image/*,.pdf" required multiple>
|
193 |
+
<label for="files" class="btn">Choose Files</label>
|
194 |
+
<p>or drag and drop files here</p>
|
195 |
+
</div>
|
196 |
<div class="file-name" id="fileName"></div>
|
197 |
<button type="button" id="uploadBtn" class="btn" style="display: none; margin-top: 1rem;">Upload Files</button>
|
198 |
<div class="progress-container" id="progressContainer"></div>
|
|
|
200 |
</form>
|
201 |
<div class="result-container" id="resultContainer"></div>
|
202 |
<div class="file-types">
|
203 |
+
Allowed file types: .zip, .mp4, .txt, .mp3, all image types, .pdf
|
204 |
</div>
|
205 |
</div>
|
206 |
|
|
|
211 |
const progressContainer = document.getElementById('progressContainer');
|
212 |
const loadingSpinner = document.getElementById('loadingSpinner');
|
213 |
const resultContainer = document.getElementById('resultContainer');
|
214 |
+
const dropZone = document.getElementById('dropZone');
|
215 |
|
216 |
+
fileInput.addEventListener('change', handleFiles);
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
|
218 |
uploadBtn.addEventListener('click', () => {
|
219 |
if (fileInput.files.length > 0) {
|
|
|
221 |
}
|
222 |
});
|
223 |
|
224 |
+
// Drag and drop functionality
|
225 |
+
dropZone.addEventListener('dragover', (e) => {
|
226 |
+
e.preventDefault();
|
227 |
+
dropZone.classList.add('drag-over');
|
228 |
+
});
|
229 |
+
|
230 |
+
dropZone.addEventListener('dragleave', () => {
|
231 |
+
dropZone.classList.remove('drag-over');
|
232 |
+
});
|
233 |
+
|
234 |
+
dropZone.addEventListener('drop', (e) => {
|
235 |
+
e.preventDefault();
|
236 |
+
dropZone.classList.remove('drag-over');
|
237 |
+
handleFiles({ target: { files: e.dataTransfer.files } });
|
238 |
+
});
|
239 |
+
|
240 |
+
// Paste functionality
|
241 |
+
document.addEventListener('paste', (e) => {
|
242 |
+
const items = e.clipboardData.items;
|
243 |
+
const files = [];
|
244 |
+
for (let i = 0; i < items.length; i++) {
|
245 |
+
if (items[i].kind === 'file') {
|
246 |
+
const file = items[i].getAsFile();
|
247 |
+
files.push(file);
|
248 |
+
}
|
249 |
+
}
|
250 |
+
if (files.length > 0) {
|
251 |
+
handleFiles({ target: { files: files } });
|
252 |
+
}
|
253 |
+
});
|
254 |
+
|
255 |
+
function handleFiles(e) {
|
256 |
+
if (e.target.files.length > 0) {
|
257 |
+
const fileNames = Array.from(e.target.files).map(file => file.name).join(', ');
|
258 |
+
fileName.textContent = fileNames;
|
259 |
+
uploadBtn.style.display = 'inline-block';
|
260 |
+
}
|
261 |
+
}
|
262 |
+
|
263 |
function uploadFiles(files) {
|
264 |
progressContainer.innerHTML = '';
|
265 |
progressContainer.style.display = 'block';
|