Passage Pure JS / page de configuration / chargement des données

Bonjour à tous,

Je commence à passer mes plugin en full JS, et déjà premier écueil.

Je suis dans le panneau de configuration du plugin, je charge le js dans l’html par :

<?php
$weenectJS=version_compare(jeedom::version(), '4.4.0', '<')?'weenect_conf_4.3':'weenect_conf_4.4';
include_file('desktop', $weenectJS, 'js', 'weenect');

?>

(ça ça fonctionne bien!)

puis je test une valeur de configuration pour afficher un indice visuel su:

/**-----  vérifie si le token est renseigné dans l'input de la configuration (masqué)
*/
function check_token_status(){
    var tok = document.querySelector("input[data-l1key='token']");
    console.log("check_token_status  :"+tok.value);
    if(tok.value!= ""){
        document.getElementById("token_status").html('<i class="fa fa-check" style="color:green;"></i>');
    }else{
        document.getElementById("token_status").html('<i class="fa fa-x" style="color:red;">X</i>');
    }
    
}

(ça aussi ok)

Si je lancer directement :

document.querySelector("input[data-l1key='token']").addEventListener('change',  check_token_status());

Ca ance le test (?), mais la configuration n’est à priori pas encore chargée, et ça ne déclenche pas le load sur la modification de l’input.

pour remplacer le lancement de la vérification initiale en jquery :

  $(document).ready(function () {
    check_token_status();
  });

je fait :

document.addEventListener('DOMContentLoaded', function(){
    check_token_status();
});

ou encore sur un window.onload
mais à priori l’event a déjà été lancé, donc ça ne se lance pas.

Si je met un setTimeout, je récupère bien le bon comportement.

setTimeout(function(){check_token_status()), 1000)

mais niveau fiabilité…

j’ai tenté avec

domUtils(function(){
  check_token_status();
});

mais même problème, le check_token_status semble lancé avant la valorisation des données de conf.

Est ce qu’il y a un évent ou un hook particulier de jeedom qui indique qu’il a chargé les données de configuration?
je n’ai pas trouvé dans dom.utils.js ni ou sont chargé les donnée (j’ai bien vu des appel ajax dans config.class.js et plugin.class.js mais je ne sais quoi en faire…)

Salut

Essaye avec l’event jeedom_page_load sur le body, il est trigger quand la page est chargé : core/desktop/common/js/utils.js at alpha · jeedom/core · GitHub

1 « J'aime »

Bonjour Loic,

Merci pour la suggestion.
j’ai tenté :

document.body.addEventListener('jeedom_page_load', function(){
    check_token_status()
})

un peu partout dans le code accessible par le plugin (ds le js chargé, au début du configuration.ph, à la fin, etc…)
je n’ai pas réussi à capturer l’évent.

du coup j’ai testé tout les évent possible sur les éléments. J’ai eu une touche sur l’évent ‹ change › du document ou document.body, du coup j’ai testé le listener sur le conteneur de l’Input :

document.getElementById("token_status_cont").addEventListener('change', function(){
    check_token_status()
})

et là, après quelques rapide test, ça (semble) fonctionne(r)…!
(et c’est moins général que sur document…)

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.