Add delete with confirmation for trips and dashcam
- Confirmation modal in server base.html (window.confirmDelete promise helper) - Trip delete: trash button in Replay column (server-only via data-deletable on trip-list div), DELETE /api/v1/portal/trip/<id>, removes computed trip only (raw tracking_points kept) - Dashcam delete: trash button next to download, DELETE /api/v1/portal/dashcam/<id>, removes from DB + disk (best-effort file removal) - history.js: delete button gated on data-deletable='1' attribute; click handler intercepts before replay logic - db.py: delete_trip(), delete_dashcam_file() helpers Co-authored-by: Copilot <[email protected]>
This commit is contained in:
@@ -106,6 +106,44 @@
|
||||
<script src="{{ url_for('static', filename='bootstrap/js/bootstrap.min.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/bs-init.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/theme.js') }}"></script>
|
||||
|
||||
{# ── Shared confirmation modal ─────────────────────────────────────────── #}
|
||||
<div class="modal fade" id="confirm-modal" tabindex="-1" aria-labelledby="confirm-modal-label" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="confirm-modal-label">Confirm delete</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body" id="confirm-modal-body">Are you sure?</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
|
||||
<button type="button" class="btn btn-danger" id="confirm-modal-ok">Delete</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
// Global helper: show confirmation modal, resolve true/false on user choice.
|
||||
window.confirmDelete = function(message) {
|
||||
return new Promise(function(resolve) {
|
||||
const modal = document.getElementById('confirm-modal');
|
||||
document.getElementById('confirm-modal-body').textContent = message;
|
||||
const bsModal = bootstrap.Modal.getOrCreate(modal);
|
||||
const okBtn = document.getElementById('confirm-modal-ok');
|
||||
function onOk() { cleanup(); resolve(true); }
|
||||
function onHide() { cleanup(); resolve(false); }
|
||||
function cleanup() {
|
||||
okBtn.removeEventListener('click', onOk);
|
||||
modal.removeEventListener('hidden.bs.modal', onHide);
|
||||
bsModal.hide();
|
||||
}
|
||||
okBtn.addEventListener('click', onOk);
|
||||
modal.addEventListener('hidden.bs.modal', onHide, { once: true });
|
||||
bsModal.show();
|
||||
});
|
||||
};
|
||||
</script>
|
||||
{% block scripts %}{% endblock %}
|
||||
</body>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user