|
1 | 1 | @* Styles moved to site.css *@ |
2 | | -<div class="upload-modal-overlay" :class="{ modalshow: showModal, modalhide: !showModal }" v-if="showModal"> |
3 | | - <div class="upload-modal-container" v-on:click.stop> |
4 | | - <div class="upload-modal-header"> |
5 | | - <h5 class="upload-modal-title"> |
| 2 | +<div class="vue-upload-overlay" :class="{ modalshow: showModal, modalhide: !showModal }" v-if="showModal"> |
| 3 | + <div class="vue-upload-container" v-on:click.stop> |
| 4 | + <div class="vue-upload-header"> |
| 5 | + <h5 class="vue-upload-title"> |
6 | 6 | <i class="bi bi-cloud-arrow-up"></i> |
7 | 7 | Upload Files |
8 | 8 | </h5> |
9 | | - <button class="upload-modal-close" v-on:click="closeModal()"> |
| 9 | + <button class="vue-upload-close" v-on:click="closeModal()"> |
10 | 10 | <i class="bi bi-x-lg"></i> |
11 | 11 | </button> |
12 | 12 | </div> |
13 | 13 |
|
14 | | - <div class="upload-modal-body"> |
| 14 | + <div class="vue-upload-body"> |
15 | 15 | <!-- Drop Zone --> |
16 | | - <div class="upload-drop-zone" |
| 16 | + <div class="vue-upload-drop-zone" |
17 | 17 | v-on:click="$refs.files.click()" |
18 | 18 | v-on:dragover.prevent="onDragOver" |
19 | 19 | v-on:dragleave="onDragLeave" |
20 | 20 | v-on:drop.prevent="onDrop" |
21 | 21 | :class="{ dragover: isDragging }"> |
22 | | - <div class="upload-drop-icon"> |
| 22 | + <div class="vue-upload-drop-icon"> |
23 | 23 | <i class="bi bi-cloud-arrow-up"></i> |
24 | 24 | </div> |
25 | | - <div class="upload-drop-text">Drop files here or click to browse</div> |
26 | | - <div class="upload-drop-hint">Supports any file type</div> |
| 25 | + <div class="vue-upload-drop-text">Drop files here or click to browse</div> |
| 26 | + <div class="vue-upload-drop-hint">Supports any file type</div> |
27 | 27 | <input type="file" |
28 | | - class="upload-drop-input" |
| 28 | + class="vue-upload-drop-input" |
29 | 29 | id="filesInput" |
30 | 30 | ref="files" |
31 | 31 | v-on:change="onChangeFileUpload()" |
32 | 32 | multiple /> |
33 | 33 | </div> |
34 | 34 |
|
| 35 | + <!-- Concurrent uploads selector --> |
| 36 | + <div class="vue-upload-concurrent" v-if="files.length > 1"> |
| 37 | + <label class="vue-upload-concurrent-label"> |
| 38 | + <i class="bi bi-stack"></i> |
| 39 | + Simultaneous uploads |
| 40 | + </label> |
| 41 | + <div class="vue-upload-concurrent-selector"> |
| 42 | + <button v-for="n in 5" |
| 43 | + :key="n" |
| 44 | + class="vue-upload-concurrent-btn" |
| 45 | + :class="{ active: concurrentUploads === n }" |
| 46 | + v-on:click="concurrentUploads = n" |
| 47 | + :disabled="isUploading"> |
| 48 | + {{ n }} |
| 49 | + </button> |
| 50 | + </div> |
| 51 | + <span class="vue-upload-concurrent-hint"> |
| 52 | + {{ activeUploads > 0 ? `Uploading ${activeUploads} of ${concurrentUploads}...` : `Upload ${concurrentUploads} files at a time` }} |
| 53 | + </span> |
| 54 | + </div> |
| 55 | + |
35 | 56 | <!-- File List --> |
36 | | - <div class="upload-file-list" v-if="files.length > 0"> |
37 | | - <div class="upload-file-item" |
| 57 | + <div class="vue-upload-file-list" v-if="files.length > 0"> |
| 58 | + <div class="vue-upload-file-item" |
38 | 59 | v-for="fileItem in files" |
39 | 60 | :key="fileItem.file.name" |
40 | 61 | :class="{ completed: fileItem.completed }"> |
41 | | - <div class="upload-file-header"> |
42 | | - <div class="upload-file-icon"> |
| 62 | + <div class="vue-upload-file-header"> |
| 63 | + <div class="vue-upload-file-icon"> |
43 | 64 | <i class="bi" :class="getFileIcon(fileItem.file.name)"></i> |
44 | 65 | </div> |
45 | | - <div class="upload-file-info"> |
46 | | - <div class="upload-file-name" :title="fileItem.file.name">{{ fileItem.file.name }}</div> |
47 | | - <div class="upload-file-size">{{ bytes(fileItem.file.size) }}</div> |
| 66 | + <div class="vue-upload-file-info"> |
| 67 | + <div class="vue-upload-file-name" :title="fileItem.file.name">{{ fileItem.file.name }}</div> |
| 68 | + <div class="vue-upload-file-size">{{ bytes(fileItem.file.size) }}</div> |
48 | 69 | </div> |
49 | | - <button class="upload-file-remove" |
| 70 | + <button class="vue-upload-file-remove" |
50 | 71 | v-on:click="deleteFile(fileItem.file.name)" |
51 | 72 | v-if="!fileItem.completed" |
52 | 73 | title="Remove file"> |
53 | 74 | <i class="bi bi-x"></i> |
54 | 75 | </button> |
55 | 76 | </div> |
56 | | - <div class="upload-file-progress"> |
57 | | - <div class="upload-file-progress-bar" :style="{ width: fileItem.progress + '%' }"></div> |
| 77 | + <div class="vue-upload-file-progress"> |
| 78 | + <div class="vue-upload-file-progress-bar" :style="{ width: fileItem.progress + '%' }"></div> |
58 | 79 | </div> |
59 | | - <div class="upload-file-status"> |
60 | | - <span class="upload-file-percent" v-if="!fileItem.completed">{{ fileItem.progress }}%</span> |
61 | | - <span class="upload-completed-badge" v-else> |
| 80 | + <div class="vue-upload-file-status"> |
| 81 | + <span class="vue-upload-file-percent" v-if="!fileItem.completed">{{ fileItem.progress }}%</span> |
| 82 | + <span class="vue-upload-completed-badge" v-else> |
62 | 83 | <i class="bi bi-check-circle-fill"></i> |
63 | 84 | Completed |
64 | 85 | </span> |
65 | | - <span class="upload-file-bytes">{{ bytesProgress(fileItem.sended) }} / {{ bytes(fileItem.file.size) }}</span> |
| 86 | + <span class="vue-upload-file-bytes">{{ bytesProgress(fileItem.sended) }} / {{ bytes(fileItem.file.size) }}</span> |
66 | 87 | </div> |
67 | 88 | </div> |
68 | 89 | </div> |
69 | 90 |
|
70 | 91 | <!-- Empty State --> |
71 | | - <div class="upload-empty-state" v-else> |
| 92 | + <div class="vue-upload-empty-state" v-else> |
72 | 93 | <i class="bi bi-inbox" style="font-size: 2rem; display: block; margin-bottom: 0.5rem; opacity: 0.5;"></i> |
73 | 94 | No files selected |
74 | 95 | </div> |
75 | 96 | </div> |
76 | 97 |
|
77 | | - <div class="upload-modal-footer"> |
78 | | - <button class="upload-btn upload-btn-secondary" v-on:click="closeModal()"> |
| 98 | + <div class="vue-upload-footer"> |
| 99 | + <button class="vue-upload-btn vue-upload-btn-secondary" v-on:click="closeModal()"> |
79 | 100 | <i class="bi bi-x-lg"></i> |
80 | 101 | Close |
81 | 102 | </button> |
82 | | - <button class="upload-btn upload-btn-primary" |
| 103 | + <button class="vue-upload-btn vue-upload-btn-primary" |
83 | 104 | v-on:click="submitForm()" |
84 | 105 | :disabled="files.length === 0 || isUploading"> |
85 | 106 | <i class="bi bi-cloud-arrow-up"></i> |
|
88 | 109 | </div> |
89 | 110 | </div> |
90 | 111 | </div> |
91 | | - |
|
0 commit comments