diff --git a/lxc-frontend/app/static/app.js b/lxc-frontend/app/static/app.js
index bf6ff3e..e5a2cd9 100644
--- a/lxc-frontend/app/static/app.js
+++ b/lxc-frontend/app/static/app.js
@@ -33,7 +33,6 @@ const usersBody = document.getElementById("users-body");
const profileLabel = document.getElementById("profile-label");
const profileSelect = document.getElementById("profile-select");
-const defaultProfileName = document.getElementById("default-profile-name");
const headerProfileWrap = document.getElementById("header-profile-wrap");
const headerProfile = document.getElementById("header-profile");
const headerModelWrap = document.getElementById("header-model-wrap");
@@ -77,7 +76,12 @@ function escapeHtml(s) {
function fmtDate(s) {
const d = new Date(s);
- return d.toLocaleString("de-DE", { dateStyle: "short", timeStyle: "medium" });
+ const now = new Date();
+ const sameDay = d.toDateString() === now.toDateString();
+ if (sameDay) {
+ return d.toLocaleTimeString("de-DE", { hour: "2-digit", minute: "2-digit" });
+ }
+ return d.toLocaleString("de-DE", { day: "2-digit", month: "2-digit", hour: "2-digit", minute: "2-digit" });
}
function fmtSecs(sec) {
@@ -228,7 +232,6 @@ function applyProfileUI() {
const def = currentUser.default_profile || "meeting";
profileSelect.value = def;
headerProfile.value = def;
- defaultProfileName.textContent = profileLabelOf(def);
}
async function loadModels() {
@@ -306,7 +309,6 @@ headerProfile.addEventListener("change", async () => {
currentUser = await r.json();
// Upload-Dropdown synchron mitziehen
profileSelect.value = currentUser.default_profile;
- defaultProfileName.textContent = profileLabelOf(currentUser.default_profile);
} catch (e) {
alert("Konnte Standard-Profil nicht speichern.");
headerProfile.value = currentUser.default_profile || "meeting";
@@ -376,6 +378,9 @@ async function checkMac() {
// ─── Jobs ──────────────────────────────────────────────────────────────────
function row(job) {
const tr = document.createElement("tr");
+ // Wenn kein Titel gesetzt ist, zeigen wir den Dateinamen nur EINMAL als Titel —
+ // sonst doppelt (großer Titel + kleine muted-Zeile) und unnötig hässlich.
+ const hasRealTitle = !!job.title;
const title = job.title || job.original_name;
const dlCell = document.createElement("td");
@@ -395,7 +400,7 @@ function row(job) {
});
const ownerLine = currentUser?.is_admin && job.owner_username
- ? ` von ${escapeHtml(job.owner_username)}`
+ ? `
von ${escapeHtml(job.owner_username)}
`
: "";
// Profile-Tag nur sichtbar wenn ≥2 Profile in der Auswahl ODER es ein anderes als "meeting" ist.
@@ -423,9 +428,19 @@ function row(job) {
${runsButtonHtml(job)}
`;
+ // Dateiname nur dann als zweite Zeile, wenn er sich vom angezeigten Titel unterscheidet.
+ const fileLine = hasRealTitle
+ ? `