Server: restore checkbox + batch-delete. Conditional ID (server only) and checkbox via data-show-id/data-batch-delete-url.
This commit is contained in:
+22
-1
@@ -199,6 +199,23 @@
|
||||
var tl = document.getElementById("trip-list");
|
||||
var del = tl && tl.dataset.deletable === "1";
|
||||
var dUrl = (tl && tl.dataset.deleteUrl) || "/api/trip/";
|
||||
var showId = tl && tl.dataset.showId === "1";
|
||||
var bUrl = tl && tl.dataset.batchDeleteUrl;
|
||||
var btD = document.getElementById("delete-selected-btn");
|
||||
|
||||
function cIds() { return Array.from(body.querySelectorAll("input.trip-checkbox:checked")).map(function (c) { return parseInt(c.value); }); }
|
||||
function upBt() { if (!btD) return; var n = cIds().length; btD.hidden = !n; btD.textContent = "Delete selected (" + n + ")"; }
|
||||
async function delSel() {
|
||||
var ids = cIds(); if (!ids.length || !bUrl) return;
|
||||
if (!(await window.confirmDelete("Delete " + ids.length + " trip(s)? Raw GPS data is kept."))) return;
|
||||
try {
|
||||
var r = await fetch(bUrl, {method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({ids: ids})});
|
||||
if (!r.ok) throw new Error("Delete failed");
|
||||
ids.forEach(function (id) { var row = body.querySelector('tr[data-trip-id="' + id + '"]'); if (row) row.remove(); });
|
||||
upBt();
|
||||
} catch (e) { showErr(e.message); }
|
||||
}
|
||||
if (btD) btD.addEventListener("click", delSel);
|
||||
|
||||
function render(tt) {
|
||||
body.replaceChildren();
|
||||
@@ -208,9 +225,13 @@
|
||||
row.dataset.duration = t.duration_seconds; row.dataset.maxSpeed = t.max_speed_kmh;
|
||||
row.dataset.tripId = t.id; row.style.cursor = "pointer";
|
||||
var db = del ? '<button class="btn btn-sm btn-outline-danger ms-1" type="button" data-delete-trip-id="' + t.id + '" title="Delete"><i class="fas fa-trash fa-fw"></i></button>' : "";
|
||||
row.innerHTML = "<td class=\"text-muted small text-end pe-1\" style=\"width:1%\">#" + t.id + "</td><td>" + fT(t.start_datetime) + "</td><td>" + fK(t.distance_km) + "</td><td>" + fD(t.duration_seconds) + "</td><td>" + fS(t.max_speed_kmh) + "</td><td class=\"text-muted small\">" + (t.odo_start_km != null ? t.odo_start_km.toFixed(0) + " \u2192 " + t.odo_end_km.toFixed(0) + " km" : "\u2014") + "</td><td class=\"text-end text-nowrap d-none d-sm-table-cell\">" + db + "</td>";
|
||||
var cb = bUrl ? '<td class="text-center" onclick="event.stopPropagation()"><input type="checkbox" class="trip-checkbox form-check-input" value="' + t.id + '"></td>' : "";
|
||||
var idCell = showId ? "<td class=\"text-muted small text-end pe-1\" style=\"width:1%\">#" + t.id + "</td>" : "";
|
||||
row.innerHTML = cb + idCell + "<td>" + fT(t.start_datetime) + "</td><td>" + fK(t.distance_km) + "</td><td>" + fD(t.duration_seconds) + "</td><td>" + fS(t.max_speed_kmh) + "</td><td class=\"text-muted small\">" + (t.odo_start_km != null ? t.odo_start_km.toFixed(0) + " \u2192 " + t.odo_end_km.toFixed(0) + " km" : "\u2014") + "</td><td class=\"text-end text-nowrap d-none d-sm-table-cell\">" + db + "</td>";
|
||||
body.appendChild(row);
|
||||
});
|
||||
body.querySelectorAll("input.trip-checkbox").forEach(function (c) { c.addEventListener("change", upBt); });
|
||||
upBt();
|
||||
}
|
||||
body.addEventListener("click", function (e) {
|
||||
if (del) {
|
||||
|
||||
Reference in New Issue
Block a user