Fix icon hover colors, text alignment, and UI improvements
This commit is contained in:
+82
-40
@@ -112,6 +112,12 @@
|
||||
<span>Bookings</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="/admin/availability.html" class="nav-link">
|
||||
<i class="fas fa-clock"></i>
|
||||
<span>Availability</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -154,7 +160,7 @@
|
||||
</div>
|
||||
|
||||
<div class="header-right">
|
||||
<button class="btn btn-primary" onclick="openUploadModal()">
|
||||
<button class="btn btn-primary" id="open-upload-btn">
|
||||
<i class="fas fa-upload"></i> Upload Files
|
||||
</button>
|
||||
|
||||
@@ -234,7 +240,7 @@
|
||||
</select>
|
||||
</div>
|
||||
<div class="toolbar-right">
|
||||
<button class="btn btn-outline btn-sm" onclick="createFolder()">
|
||||
<button class="btn btn-outline btn-sm" id="create-folder-btn">
|
||||
<i class="fas fa-folder-plus"></i> New Folder
|
||||
</button>
|
||||
<div class="view-toggle">
|
||||
@@ -279,13 +285,13 @@
|
||||
<!-- Bulk Actions -->
|
||||
<div class="bulk-actions" id="bulk-actions" style="display: none;">
|
||||
<span class="selected-count">0 selected</span>
|
||||
<button class="btn btn-outline btn-sm" onclick="moveSelected()">
|
||||
<button class="btn btn-outline btn-sm" id="move-selected-btn">
|
||||
<i class="fas fa-folder"></i> Move
|
||||
</button>
|
||||
<button class="btn btn-outline btn-sm" onclick="downloadSelected()">
|
||||
<button class="btn btn-outline btn-sm" id="download-selected-btn">
|
||||
<i class="fas fa-download"></i> Download
|
||||
</button>
|
||||
<button class="btn btn-danger btn-sm" onclick="deleteSelected()">
|
||||
<button class="btn btn-danger btn-sm" id="delete-selected-btn">
|
||||
<i class="fas fa-trash"></i> Delete
|
||||
</button>
|
||||
</div>
|
||||
@@ -299,7 +305,7 @@
|
||||
<div class="modal-container">
|
||||
<div class="modal-header">
|
||||
<h2>Upload Files</h2>
|
||||
<button class="modal-close" onclick="closeUploadModal()">×</button>
|
||||
<button class="modal-close" id="upload-modal-close">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="upload-dropzone" id="dropzone">
|
||||
@@ -327,7 +333,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-outline" onclick="closeUploadModal()">Cancel</button>
|
||||
<button class="btn btn-outline" id="upload-cancel-btn">Cancel</button>
|
||||
<button class="btn btn-primary" id="start-upload" disabled>
|
||||
<i class="fas fa-upload"></i> Start Upload
|
||||
</button>
|
||||
@@ -341,7 +347,7 @@
|
||||
<div class="modal-container modal-lg">
|
||||
<div class="modal-header">
|
||||
<h2 id="view-title">File Details</h2>
|
||||
<button class="modal-close" onclick="closeViewModal()">×</button>
|
||||
<button class="modal-close" id="view-modal-close">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="media-view-content">
|
||||
@@ -373,7 +379,7 @@
|
||||
<label>URL</label>
|
||||
<div class="url-copy">
|
||||
<input type="text" id="detail-url" readonly>
|
||||
<button class="btn btn-sm btn-outline" onclick="copyDetailUrl()">
|
||||
<button class="btn btn-sm btn-outline" id="copy-detail-url-btn">
|
||||
<i class="fas fa-copy"></i>
|
||||
</button>
|
||||
</div>
|
||||
@@ -386,13 +392,13 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-danger" onclick="deleteFromView()">
|
||||
<button class="btn btn-danger" id="delete-from-view-btn">
|
||||
<i class="fas fa-trash"></i> Delete
|
||||
</button>
|
||||
<button class="btn btn-outline" onclick="downloadFile()">
|
||||
<button class="btn btn-outline" id="download-view-file-btn">
|
||||
<i class="fas fa-download"></i> Download
|
||||
</button>
|
||||
<button class="btn btn-primary" onclick="saveDetails()">
|
||||
<button class="btn btn-primary" id="save-details-btn">
|
||||
<i class="fas fa-save"></i> Save
|
||||
</button>
|
||||
</div>
|
||||
@@ -404,17 +410,72 @@
|
||||
let allMedia = [];
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
setupEventListeners();
|
||||
loadMedia();
|
||||
|
||||
// Search & Filter
|
||||
});
|
||||
|
||||
function setupEventListeners() {
|
||||
document.getElementById('media-search').addEventListener('input', MSPE.debounce(filterMedia, 300));
|
||||
document.getElementById('type-filter').addEventListener('change', filterMedia);
|
||||
document.getElementById('folder-filter').addEventListener('change', filterMedia);
|
||||
|
||||
// File Input for Upload
|
||||
|
||||
document.getElementById('file-input').addEventListener('change', handleFileSelect);
|
||||
document.getElementById('start-upload').addEventListener('click', uploadFiles);
|
||||
});
|
||||
|
||||
document.getElementById('open-upload-btn')?.addEventListener('click', openUploadModal);
|
||||
document.getElementById('create-folder-btn')?.addEventListener('click', createFolder);
|
||||
document.getElementById('move-selected-btn')?.addEventListener('click', moveSelected);
|
||||
document.getElementById('download-selected-btn')?.addEventListener('click', downloadSelected);
|
||||
document.getElementById('delete-selected-btn')?.addEventListener('click', deleteSelected);
|
||||
|
||||
document.getElementById('upload-modal-close')?.addEventListener('click', closeUploadModal);
|
||||
document.getElementById('upload-cancel-btn')?.addEventListener('click', closeUploadModal);
|
||||
document.getElementById('view-modal-close')?.addEventListener('click', closeViewModal);
|
||||
|
||||
document.getElementById('copy-detail-url-btn')?.addEventListener('click', copyDetailUrl);
|
||||
document.getElementById('delete-from-view-btn')?.addEventListener('click', deleteFromView);
|
||||
document.getElementById('download-view-file-btn')?.addEventListener('click', () => downloadFile());
|
||||
document.getElementById('save-details-btn')?.addEventListener('click', saveDetails);
|
||||
|
||||
document.querySelector('#upload-modal .modal-backdrop')?.addEventListener('click', closeUploadModal);
|
||||
document.querySelector('#view-modal .modal-backdrop')?.addEventListener('click', closeViewModal);
|
||||
|
||||
const dropzone = document.getElementById('dropzone');
|
||||
const fileInput = document.getElementById('file-input');
|
||||
dropzone.addEventListener('click', () => fileInput.click());
|
||||
dropzone.addEventListener('dragover', (e) => {
|
||||
e.preventDefault();
|
||||
dropzone.classList.add('dragover');
|
||||
});
|
||||
dropzone.addEventListener('dragleave', () => {
|
||||
dropzone.classList.remove('dragover');
|
||||
});
|
||||
dropzone.addEventListener('drop', (e) => {
|
||||
e.preventDefault();
|
||||
dropzone.classList.remove('dragover');
|
||||
fileInput.files = e.dataTransfer.files;
|
||||
handleFileSelect({ target: fileInput });
|
||||
});
|
||||
|
||||
document.getElementById('media-grid').addEventListener('click', function(event) {
|
||||
const actionBtn = event.target.closest('[data-action]');
|
||||
if (!actionBtn) return;
|
||||
const { action, id, path } = actionBtn.dataset;
|
||||
if (action === 'view' && id) {
|
||||
viewMedia(id);
|
||||
} else if (action === 'copy' && path) {
|
||||
copyUrl(path);
|
||||
} else if (action === 'delete' && id) {
|
||||
deleteMedia(id);
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById('media-grid').addEventListener('change', function(event) {
|
||||
if (event.target.matches('.media-checkbox input')) {
|
||||
updateBulkActions();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function loadMedia() {
|
||||
try {
|
||||
@@ -454,9 +515,9 @@
|
||||
: `<i class="fas fa-file-${getFileIcon(item.type)}"></i>`
|
||||
}
|
||||
<div class="media-overlay">
|
||||
<button class="btn btn-sm" onclick="viewMedia('${item.id}')"><i class="fas fa-eye"></i></button>
|
||||
<button class="btn btn-sm" onclick="copyUrl('/${item.path}')"><i class="fas fa-link"></i></button>
|
||||
<button class="btn btn-sm" onclick="deleteMedia('${item.id}')"><i class="fas fa-trash"></i></button>
|
||||
<button class="btn btn-sm" data-action="view" data-id="${item.id}"><i class="fas fa-eye"></i></button>
|
||||
<button class="btn btn-sm" data-action="copy" data-path="/${item.path}"><i class="fas fa-link"></i></button>
|
||||
<button class="btn btn-sm" data-action="delete" data-id="${item.id}"><i class="fas fa-trash"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="media-info">
|
||||
@@ -464,7 +525,7 @@
|
||||
<span class="media-size">${formatBytes(item.size)}</span>
|
||||
</div>
|
||||
<label class="media-checkbox">
|
||||
<input type="checkbox" name="selected[]" value="${item.id}" onchange="updateBulkActions()">
|
||||
<input type="checkbox" name="selected[]" value="${item.id}">
|
||||
<span class="checkmark"></span>
|
||||
</label>
|
||||
</div>
|
||||
@@ -618,25 +679,6 @@
|
||||
document.getElementById('view-modal').classList.remove('active');
|
||||
}
|
||||
|
||||
// Drag & Drop
|
||||
const dropzone = document.getElementById('dropzone');
|
||||
const fileInput = document.getElementById('file-input');
|
||||
|
||||
dropzone.addEventListener('click', () => fileInput.click());
|
||||
dropzone.addEventListener('dragover', (e) => {
|
||||
e.preventDefault();
|
||||
dropzone.classList.add('dragover');
|
||||
});
|
||||
dropzone.addEventListener('dragleave', () => {
|
||||
dropzone.classList.remove('dragover');
|
||||
});
|
||||
dropzone.addEventListener('drop', (e) => {
|
||||
e.preventDefault();
|
||||
dropzone.classList.remove('dragover');
|
||||
fileInput.files = e.dataTransfer.files;
|
||||
handleFileSelect({ target: fileInput });
|
||||
});
|
||||
|
||||
function updateBulkActions() {
|
||||
const checked = document.querySelectorAll('.media-checkbox input:checked');
|
||||
const bulkActions = document.getElementById('bulk-actions');
|
||||
|
||||
Reference in New Issue
Block a user