/*
* pjax.js — navigation sans rechargement de page complet.
*
* Principe : le serveur ne change pas (mêmes routes Flask, mêmes pages
* générées en Jinja) — on intercepte simplement chaque clic sur un lien
* interne et chaque soumission de formulaire interne, on va chercher la
* page suivante nous-mêmes en arrière-plan (fetch), et on ne remplace que
*
, la classe du , #pageChrome (topbar + barre de navigation
* du jeu, voir base.html) et le contenu principal () — au lieu de
* laisser le navigateur tout recharger.
* L'URL affichée et l'historique (bouton "précédent") restent corrects
* grâce à history.pushState/popstate.
*
* Les scripts propres à chaque page (dans le bloc "content", donc réinjectés
* à chaque changement de page) ne s'exécutent pas automatiquement quand on
* les insère via innerHTML — on les rejoue explicitement à chaque
* navigation (voir runScriptsIn ci-dessous). C'est pour ça que ces scripts
* ne doivent déclarer aucune variable globale avec `let`/`const` au premier
* niveau (une seconde exécution lèverait "already declared") — seuls `var`
* et les déclarations de fonction sont sûrs à rejouer, ce qui est déjà le
* cas de tous les scripts actuels du moteur.
*
* Pour désactiver ce comportement sur un lien ou un formulaire précis (cas
* rare), ajouter l'attribut data-no-pjax.
*/
(function () {
"use strict";
function isInternalUrl(url) {
return url.origin === location.origin;
}
function runScriptsIn(container) {
// Bug corrigé : un