feat(files): folders managed in place, a grid per folder, drop to upload, open on one file

- Own folders are made, renamed and deleted from the rail (right click, long press,
  Shift+F10) or the "…" beside an open folder's name; any folder's retention is a
  submenu (7/30/90 days, until deleted). Deleting confirms where its files go.
- List or grid per folder, sharing one sort; the grid is the one media card.
- A file dropped anywhere on the page opens Upload with it, bound for the folder
  on screen.
- A link (?item=) or the upload notice opens Files on the file: its page turned
  to, the keyboard on it, a ring round it.
- An in-place name field left by Enter or Escape hands the focus back to what
  replaced it (the row, the entry, the "…") instead of dropping it on <body>.
- The table's saved page size is per account.
This commit is contained in:
2026-10-11 15:59:12 +02:00
parent 85aa917b38
commit d22c64f4dd
23 changed files with 1569 additions and 175 deletions
+6
View File
@@ -103,6 +103,12 @@
"move": "Couldn't move the file",
"keep": "Couldn't change whether the file is kept",
"delete": "Couldn't delete the file"
},
"folder": {
"create": "Couldn't create the folder",
"rename": "Couldn't rename the folder",
"retention": "Couldn't change how long the folder keeps its files",
"delete": "Couldn't delete the folder"
}
},
"ok": "OK",
+31 -1
View File
@@ -56,5 +56,35 @@
"unkeep": "Stop keeping",
"details": "Details…",
"upload": "Upload"
}
},
"folder": {
"menu": "Folder actions",
"new": "New folder",
"newName": "Folder name",
"rename": "Rename",
"retention": "Keeps files",
"forever": "Until I delete them",
"delete": "Delete folder…",
"deleteTitle": "Delete “{{name}}”?",
"deleteBodyEmpty": "The folder is empty. Nothing else changes.",
"deleteBody_one": "Its file goes back to the folder it came from, and its retention starts again from today.",
"deleteBody_other": "Its {{count}} files go back to the folders they came from, and their retention starts again from today.",
"deleteAction": "Delete folder"
},
"layout": {
"label": "View",
"list": "List",
"grid": "Grid"
},
"sort": {
"label": "Sort",
"default": "Newest first",
"asc": "Ascending",
"desc": "Descending"
},
"drop": {
"here": "Drop to upload into {{folder}}",
"oneAtATime": "Upload one file at a time — the first one is ready to go."
},
"perPage": "Files per page"
}
+6
View File
@@ -103,6 +103,12 @@
"move": "Nem sikerült áthelyezni a fájlt",
"keep": "Nem sikerült módosítani a fájl megtartását",
"delete": "Nem sikerült törölni a fájlt"
},
"folder": {
"create": "Nem sikerült létrehozni a mappát",
"rename": "Nem sikerült átnevezni a mappát",
"retention": "Nem sikerült módosítani a mappa megőrzési idejét",
"delete": "Nem sikerült törölni a mappát"
}
},
"ok": "OK",
+31 -1
View File
@@ -56,5 +56,35 @@
"unkeep": "Megtartás visszavonása",
"details": "Részletek…",
"upload": "Feltöltés"
}
},
"folder": {
"menu": "Mappa műveletei",
"new": "Új mappa",
"newName": "Mappa neve",
"rename": "Átnevezés",
"retention": "Fájlok megőrzése",
"forever": "Amíg ki nem törlöm",
"delete": "Mappa törlése…",
"deleteTitle": "Törlöd: „{{name}}”?",
"deleteBodyEmpty": "A mappa üres. Más nem változik.",
"deleteBody_one": "A benne lévő fájl visszakerül abba a mappába, ahonnan jött, és a megőrzési ideje mától újraindul.",
"deleteBody_other": "A benne lévő {{count}} fájl visszakerül abba a mappába, ahonnan jött, és a megőrzési idejük mától újraindul.",
"deleteAction": "Mappa törlése"
},
"layout": {
"label": "Nézet",
"list": "Lista",
"grid": "Rács"
},
"sort": {
"label": "Rendezés",
"default": "Legújabb elöl",
"asc": "Növekvő",
"desc": "Csökkenő"
},
"drop": {
"here": "Engedd el, és feltöltöm ide: {{folder}}",
"oneAtATime": "Egyszerre egy fájlt tölthetsz fel — az első készen áll."
},
"perPage": "Fájl oldalanként"
}