[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 à
jQueryetjquery.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()etanimateAppend(), reposent sur des déclarations CSS. Pour l'heure, seuleanimateLoading()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 fonctions
jQuery.spip.intercepted.xxx, sont considérées totalement dépréciées, et supprimées. - Les fonctions
jQuery.uaMatch, etjQuery.browsersont considérées dépréciées, mais demeurent dans le fichier résidueljquery.browser.jsle temps d'opérer la transition avec les fonctions d el'espace privée qui les nécessitent. -
jquery.form.jsn'est plus appelé par le pipelinejquery_plugins - les sous-dossiers
node_modules/sont exclus de l'indexation git.