updated app start
This commit is contained in:
@@ -91,12 +91,31 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if content %}
|
||||
<!-- Bulk Actions Controls -->
|
||||
<div class="mb-3 d-flex flex-wrap align-items-center gap-2">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="selectAllGroup">
|
||||
<label class="form-check-label" for="selectAllGroup">
|
||||
Select All
|
||||
</label>
|
||||
</div>
|
||||
<button id="deleteSelectedGroup" class="btn btn-danger" style="display: none;">
|
||||
<i class="bi bi-trash"></i> Delete Selected (<span id="selectedCountGroup">0</span>)
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<ul class="list-group sortable-list" id="groupMediaList">
|
||||
{% for media in content %}
|
||||
<li class="list-group-item d-flex align-items-center {{ 'dark-mode' if theme == 'dark' else '' }}"
|
||||
draggable="true"
|
||||
data-id="{{ media.id }}"
|
||||
data-position="{{ loop.index0 }}">
|
||||
<!-- Checkbox for bulk selection -->
|
||||
<div class="me-2">
|
||||
<input type="checkbox" class="form-check-input group-media-checkbox"
|
||||
value="{{ media.id }}">
|
||||
</div>
|
||||
|
||||
<!-- Drag handle -->
|
||||
<div class="drag-handle me-2" title="Drag to reorder">
|
||||
<i class="bi bi-grip-vertical"></i>
|
||||
@@ -219,6 +238,70 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
item.dataset.position = index;
|
||||
});
|
||||
}
|
||||
|
||||
// Bulk delete functionality
|
||||
const selectAllGroup = document.getElementById('selectAllGroup');
|
||||
const deleteSelectedGroup = document.getElementById('deleteSelectedGroup');
|
||||
const selectedCountGroup = document.getElementById('selectedCountGroup');
|
||||
const groupMediaCheckboxes = document.querySelectorAll('.group-media-checkbox');
|
||||
|
||||
// Update selected count and toggle delete button visibility
|
||||
function updateSelectedCount() {
|
||||
const selectedCount = document.querySelectorAll('.group-media-checkbox:checked').length;
|
||||
selectedCountGroup.textContent = selectedCount;
|
||||
deleteSelectedGroup.style.display = selectedCount > 0 ? 'inline-block' : 'none';
|
||||
}
|
||||
|
||||
// Select/Deselect all checkboxes
|
||||
selectAllGroup.addEventListener('change', function() {
|
||||
const isChecked = selectAllGroup.checked;
|
||||
groupMediaCheckboxes.forEach(checkbox => {
|
||||
checkbox.checked = isChecked;
|
||||
});
|
||||
updateSelectedCount();
|
||||
});
|
||||
|
||||
// Individual checkbox change
|
||||
groupMediaCheckboxes.forEach(checkbox => {
|
||||
checkbox.addEventListener('change', updateSelectedCount);
|
||||
});
|
||||
|
||||
// Delete selected button click
|
||||
deleteSelectedGroup.addEventListener('click', function() {
|
||||
const selectedIds = Array.from(groupMediaCheckboxes)
|
||||
.filter(checkbox => checkbox.checked)
|
||||
.map(checkbox => checkbox.value);
|
||||
|
||||
if (selectedIds.length === 0) {
|
||||
alert('No media selected for deletion.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (confirm(`Are you sure you want to delete ${selectedIds.length} selected media items?`)) {
|
||||
// Send bulk delete request
|
||||
fetch('{{ url_for("bulk_delete_group_content", group_id=group.id) }}', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRFToken': '{{ csrf_token() if csrf_token else "" }}'
|
||||
},
|
||||
body: JSON.stringify({content_ids: selectedIds})
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
alert(`Successfully deleted ${data.deleted_count} media items.`);
|
||||
location.reload(); // Reload the page to update the media list
|
||||
} else {
|
||||
alert('Error deleting media: ' + (data.error || 'Unknown error'));
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error:', error);
|
||||
alert('An error occurred while deleting the media.');
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user