fix: use getElementById for relink FilePond pool lookup

FilePond 4.x wraps the original input element in its own DOM structure
which can break CSS attribute selectors. querySelector with
.tfe-file-picker[data-queue-type='...'] returned null even though the
element existed and was initialized.

Switched to getElementById with a queueType→inputId map:
  cover → couverture
  note_intention → note_intention
  tfe → tfe-files-input
  annexe → annexe-files-input

getElementById is both faster and immune to FilePond's DOM wrapping.
This commit is contained in:
Pontoporeia
2026-07-10 16:42:56 +02:00
parent 6da45435f5
commit d8f85b03ad
2 changed files with 18 additions and 28 deletions
+1 -15
View File
@@ -1,17 +1,3 @@
# TODO # TODO
- [x] Fix CSP: add `frame-src` to allow iframes from `videos.erg.be` and `depnum.happyngreen.fr` - [x] Fix relinked file not appearing in FilePond UI: switch to ID-based input lookup
- [x] Website iframe overlay: remove blur, move button to bottom-right, replace text with SVG icon + tooltip
- [x] Fix "Copier" button in logs section scrolling out of view on horizontal scroll
- [x] Remove TOC temporary debug error_log calls
- [x] Fix PeerTube upload failure: PHP /tmp tmpfs too small for large video files
- [x] Fix keyword word-breaking in repertoire.php: widen kw grid column, add white-space: nowrap
- [x] Fix licence.php TOC: restore `open` attribute on `<details class="toc">` (lost in vrxsstns, never restored by uuomvtvm fix)
- [x] Fix hasFilePondQueueData() missing peertube: prefix check → new PeerTube uploads silently lost on edit
- [x] Fix handleWebsiteUrl() in ThesisEditController unconditionally deleting website rows on every edit
- [x] Fix FilePond server.remove potentially triggering during HTMX fragment teardown
- [x] Add restore-from-corbeille functionality in cleanup page
- [x] Fix cleanup stats: use sidecar JSON for restorability classification (not DB row existence)
- [x] Remove destructive HTMX fragment refresh from relink flow (close modal only, pond.addFile in-place)
- [x] Merge corbeille lists into single table with status column + bulk restore button
- [x] Fix relinked file not appearing in FilePond UI: use addFiles([{type:'local'}]) instead of addFile(type:'limbo')
@@ -892,18 +892,21 @@
} }
console.log(`[relink] success | new_id=${data.id}`); console.log(`[relink] success | new_id=${data.id}`);
// Add the new file to the FilePond pool, then close the modal. // Look up the FilePond pool by the known input ID for this queue type.
// If the DOM was replaced (e.g. live-reload), refresh the // querySelector on data-queue-type is unreliable after FilePond
// form fragment via HTMX so the server re-renders the pools // wraps the original input element.
// with the newly-linked file included. var inputIdMap = {
var input = document.querySelector( cover: "couverture",
`.tfe-file-picker[data-queue-type="${queueType}"]`, note_intention: "note_intention",
); tfe: "tfe-files-input",
annexe: "annexe-files-input",
};
var inputId = inputIdMap[queueType] || null;
var input = inputId ? document.getElementById(inputId) : null;
console.log( console.log(
"[relink] looking for input | selector=" + "[relink] looking for input | queueType=" + queueType +
`.tfe-file-picker[data-queue-type="${queueType}"]` + " | inputId=" + inputId +
" | found=" + " | found=" + !!input,
!!input,
); );
var closeModal = () => { var closeModal = () => {
var modal = document.getElementById("relink-modal"); var modal = document.getElementById("relink-modal");
@@ -1013,8 +1016,9 @@
} }
console.log(`[pt-relink] success | new_id=${data.id}`); console.log(`[pt-relink] success | new_id=${data.id}`);
var input = document.querySelector( var input = document.getElementById("tfe-files-input");
'.tfe-file-picker[data-queue-type="tfe"]', console.log(
"[pt-relink] looking for input | inputId=tfe-files-input | found=" + !!input,
); );
var closeModal = () => { var closeModal = () => {
var modal = document.getElementById("peertube-relink-modal"); var modal = document.getElementById("peertube-relink-modal");