mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 16:19:19 +02:00
Drops the session-backed HTMX incremental upload system in favour of a single JS module that manages `File` objects client-side and injects them into `FormData` on submit. Key changes: * `file-upload-queue.js`: client-side queues with validation, reorder (SortableJS), removal, dirty-state tracking, and fetch-based submit with manual redirect handling * `fichiers-fragment.php`: empty queue containers for JS-managed queues; HTMX format switching still works with queue rehydration after swap; annexe uploads now support multiple files * Form UI cleanup: moved existing files and cover preview into the `Fichiers` fieldset (edit mode); removed redundant queue labels while keeping labels for single-file inputs (`couverture`, `note d'intention`); added delete buttons for existing files * `ThesisFileHandler.php`: added `handleTfeQueueFiles()`/`handleAnnexeQueueFiles()` reading from `$_FILES['queue_file']`; introduced `extractFilesSubArray()` for nested upload arrays; removed session-based queue handling * `ThesisCreateController.php` & `ThesisEditController.php`: switched to extracted `['queue_file']` uploads * `beforeunload-guard.js`: now also watches `window.__xamxamDirty` * Deleted obsolete PHP upload/remove/reorder queue endpoints for `partage` and `admin` * Cleaned up route dispatch in `partage/index.php` * Misc form and styling updates in templates/CSS * Added `docs/cms-migration-plan.html`
26 lines
862 B
JavaScript
26 lines
862 B
JavaScript
/**
|
|
* Beforeunload guard — prompts the user before navigating away from unsaved changes.
|
|
*
|
|
* Attach to any form with a data-beforeunload-guard attribute.
|
|
* Also watches window.__xamxamDirty (set by file-upload-queue.js).
|
|
* No effect when JavaScript is unavailable (form posts normally).
|
|
*/
|
|
(() => {
|
|
const forms = document.querySelectorAll('form[data-beforeunload-guard]');
|
|
if (!forms.length) return;
|
|
|
|
let dirty = false;
|
|
|
|
for (const form of forms) {
|
|
form.addEventListener('input', () => { dirty = true; });
|
|
form.addEventListener('change', () => { dirty = true; });
|
|
form.addEventListener('submit', () => { dirty = false; window.__xamxamDirty = false; });
|
|
}
|
|
|
|
window.addEventListener('beforeunload', (e) => {
|
|
if (dirty || window.__xamxamDirty) {
|
|
e.preventDefault();
|
|
}
|
|
});
|
|
})();
|