[Abandon] importmap + ajaxCallback.js réécrit en javascript natif

Ref #5566

Importmap

Permet de créer des alias pour les ressources JS locales, ce qui facilite, côté navigateur, la syntaxe d'import des scripts de type module.

voir : https://developer.mozilla.org/fr/docs/Web/HTML/Element/script/type/importmap

Cela résoud le problème des scripts dont l'url est changeante (via #PRODUIRE notamment).

NB : La balise <script [type=importmap]> est déclarée dans <head> avant l'appel du premier script de type module.

Nouveautés :

  • une balise #IMPORT_JS : pour la résolution d'url de la ressource
  • un pipeline importmap : permet d'ajouter / supprimer les éléments à faire figurer dans l'annuaire, côté privé et/ou public, au choix.

2 cas d'usage pour l'exemple :

faire référence à une ressource dynamique depuis un fichier statique :

   import { default as spip } from "config.js"; // <- config.js.html étant un fichier dynamique référencé via le pipeline importmap
   console.log(spip); 

faire référence à une ressource statique (surchargeable dans le path) depuis un squelette

<script type="module">
   import { init } from "#IMPORT_JS{module_x.js}";
   init();
</script>

ajaxCallBack.js en module esm

  • Le fichier gère notamment le rechargement des inclures ajaxés, des formulaires et des boutons d'action
  • Exit les dépendances à jQuery et jquery.form.js
  • Le fichier est ventilé en sous-modules pour faciliter lisibilité et maintenabilité
  • Il devient lui-même un module (esm) dont les fonctions utilitaires peuvent (doivent) être importées (ex. : onAjaxLoad, parametre_url, ...)

Changements notables :

L'objet de configuration globale n'est plus attaché à jQuery ($.spip.xxx)

Il n'est plus une propriété directe de window.spipConfig.core ; mais se trouve localisé dans un module JS (config.js.html). Étant déclaré dans le pipeline importmap, on peut y accéder et modifier les valeurs simplement, comme ceci :

<script type="module">
   import { default as spip } from "config.js";
   console.log(spip);
   spip.ajax_image_searching = "⌛";
</script>

Le fichier ajaxCallBack.js est généré via un empaqueteur (builder) afin de réduire le nombre de hits au chargement. Exécuter bun watch (compilation continue) ou bun run build (compilation et minification) depuis le dossier prive/javascript/ajaxCallback/ pour propager tout nouvelle modification.

Le fichier obsolete.js assure une compatibilité relative avec les anciens appels dont on peut voir la trace via le mode verbeux.

Introduction de 2 nouveaux fichiers dédiés à l'initialisation des modules : _ecrire_spip.js (espace privé) & _spip_init.js (site public)

Autres changements :

  • On peut activer le mode verbeux (log) simplement grâce au paramètre d'url?var_mode=debug_js. Des modules tiers peuvent s’appuyer sur ce dernier :
import {log} from "ajaxCallBack.js"; 
log('quelque_chose');
  • Les fonctions d'animations animateLoading(), endLoading(), animateRemove() et animateAppend(), reposent sur des déclarations CSS. Pour l'heure, seule animateLoading() est personnalisable via l'objet de config (spip.css.animateLoading)
  • La fonction positionner() implémente désormais scrollIntoView, et l'ajustement de la marge verticale est à personnalisée manuellement via la règle CSS : scroll-margin
  • Les fonctionsjQuery.spip.intercepted.xxx, sont considérées totalement dépréciées, et supprimées.
  • Les fonctions jQuery.uaMatch, et jQuery.browser sont considérées dépréciées, mais demeurent dans le fichier résiduel jquery.browser.js le temps d'opérer la transition avec les fonctions d el'espace privée qui les nécessitent.
  • jquery.form.js n'est plus appelé par le pipeline jquery_plugins
  • les sous-dossiers node_modules/ sont exclus de l'indexation git.
Modification effectuée par placido

Rapports de requête de fusion

Chargement en cours