Two related fixes to the overlay file manager, found in the same session.
1. Nested-file save was silently moving the file (fix).
The Filename input is pre-filled with the full relative path
(intentional: phone-friendly move-via-edit when drag-and-drop
isn't an option). The save handler compared it against the
basename only, so every save of a file in a subfolder built
newPath = parent + "/" + editedFilename and re-routed the
file into a doubly-nested path (e.g. cfg/tick60.cfg ->
cfg/cfg/tick60.cfg). All three sites in editor.js now compare
against relPath. Two e2e tests pin both directions: save-without-
edit leaves the file untouched, edit-the-path performs the
intended move.
2. Recursive directory delete + visible 409 errors (feature).
GET /files/delete_preview enumerates what a recursive delete
would remove (files + dirs + symlinks, capped at 500 entries,
followlinks=False). POST /files/delete accepts an optional
recursive=1 form param that uses shutil.rmtree (default still
refuses non-empty dirs, preserving the historical safety
guard). The delete confirm modal now opens an inline preview
for non-empty folders, with a scrollable list and a count
summary. The error handler falls back to r.rawText so the
server's text bodies (like "directory is not empty") finally
surface to the user instead of "HTTP 409".
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>