Files
Forge-Engine/static/object_form.js
T
william 2bb0c253f9 Fix object-form breaking on repeat pjax visits, and stray autofill in game rename field
object_form.js declared top-level const bindings, which pjax replays verbatim on every visit — the second visit threw "already declared" and silently broke "Ajouter un champ"/"Créer l'objet". Wrapped it in an IIFE. Also renamed the generic name="name" rename-game field to name="game_name" with autocomplete off, since browsers were autofilling it with unrelated previously-typed values.
2026-08-24 09:21:19 +02:00

46 lines
1.9 KiB
JavaScript

// object_form.js — ajoute/retire des lignes de champ dans le formulaire de
// définition d'objet, bascule l'affichage du sélecteur "objet lié"
// uniquement quand le type choisi est "relation", et l'affichage des
// bornes mini/maxi (2.2 — bornage automatique) uniquement pour un champ
// numérique.
//
// Tout est enfermé dans une IIFE : cette page est chargée via pjax (voir
// pjax.js), qui rejoue ce script telle-quelle à chaque visite sans
// rechargement complet — une déclaration `const`/`let` au premier niveau
// ferait planter la deuxième exécution ("already declared") et bloquerait
// silencieusement "Ajouter un champ"/"Créer l'objet" dès la deuxième visite
// de cette page dans une même session.
(function () {
var fieldsList = document.getElementById('fieldsList');
var template = document.getElementById('fieldRowTemplate');
var btnAddField = document.getElementById('btnAddField');
var NUMERIC_FIELD_TYPES = ['nombre_entier', 'nombre_decimal'];
function wireRow(row) {
var typeSelect = row.querySelector('.fieldTypeSelect');
var relationWrap = row.querySelector('.relationTarget');
var boundsWrap = row.querySelector('.boundsTarget');
function syncFieldTypeVisibility() {
relationWrap.style.display = typeSelect.value === 'relation' ? 'block' : 'none';
if (boundsWrap) boundsWrap.style.display = NUMERIC_FIELD_TYPES.includes(typeSelect.value) ? 'flex' : 'none';
}
typeSelect.addEventListener('change', syncFieldTypeVisibility);
syncFieldTypeVisibility();
row.querySelector('.btnRemoveField').addEventListener('click', function () {
row.remove();
});
}
function addFieldRow() {
var clone = template.content.cloneNode(true);
fieldsList.appendChild(clone);
wireRow(fieldsList.lastElementChild);
}
btnAddField.addEventListener('click', addFieldRow);
// Toujours démarrer avec un premier champ prêt à remplir.
addFieldRow();
})();