Probleme de commande off cachee quand un widget est utilisée : solution générique

Je voudrais revenir sur ce problème de commande appelée off, ou dont le normalizeName() retourne off, qui reste toujours cachée quand un widget est utilisé, même si la commande off n’est pas liée a une même commande info (statut) qu’une autre commande similaire appelée on.
Ce probleme avait déjà été reporté dans :
https://community.jeedom.com/t/probleme-widget-v4-sur-action-on-et-action-off/24219/1
le sujet avait été cloturé en proposant comme solution de ne pas utiliser le nom off ou de ne pas utiliser de widget, mais simplement d’assigner une icone ou un image.

Aucune des 2 solutions ne me plait, l’utilisation de widgets est utile pour rajouter des classes et appliquer globalement le même paramètre partout, et si mon bouton a pour but d’éteindre un device, je veux pouvoir l’appeler off ou éteindre

dans le fichier html/core/template/dashboard/cmd.action.other.tmplicon.html qui sert de template pour tous les widgets action other, ne suffit il pas de rajouter ces lignes de commande pour régler le probleme ? En effet si aucune commande info n’est liée à la commande action, alors _options.display_value est vide, donc un simple test comme celui-ci fonctionne, en tout cas chez moi ca marche

idee de fix pour le core de Jeedom ?

if (_options.display_value == '') {
         cmd.show();
         cmd.find('.iconCmd').empty().append("#_icon_on_#");
} else if (_options.display_value == '1' || _options.display_value >= 1 || _options.display_value == '99' || _options.display_value == 'on') {
        if (jeedom.cmd.normalizeName('#name#') == 'on') {
          cmd.hide();
        }else{
          cmd.show();
          cmd.find('.iconCmd').empty().append("#_icon_on_#");
        }
} else if (_options.display_value == '0' || _options.display_value == 0 ||  _options.display_value == 'off') {
        if (jeedom.cmd.normalizeName('#name#') == 'off') {
          cmd.hide();
        }else{
          cmd.show();
          cmd.find('.iconCmd').empty().append("#_icon_off_#");
        }
      }

Salut,

Tu veux régler un problème qui n’existe pas ?

C’est totalement le comportement attendu, si tu ne veux pas de toggle d’icone il suffit de nommer les commandes différemment…

https://doc.jeedom.com/fr_FR/core/4.1/widgets#Toggle%20d’icône%20ON%2FOFF

salut Salviaf

merci de ta réaction rapide.
je crois que le problème existe, pour les raisons que j’ai évoquées ci-dessus :
il est préférable d’avoir un nom de commande/bouton qui représente l’action effectuée (sans faute d’orthographe forcée ;-)) et les widgets sont beaucoup plus flexibles que d’assigner statiquement et individuellement une icone ou une image a une commande.

Donc si ma solution fonctionne et nécessite un léger changement de code , pourquoi pas
si je me souviens bien, ce check additionnel sur _options.display_value existait dans les versions précédentes de Jeedom ?

Je ne vois tjs pas de problème ni de difficulté là-dessus vu que c’est le comportement attendu dans le cas où le nom des commandes correspondrait au non normalisé uniquement ! Dans le cas contraire l’icône est bien affichée sans avoir besoin de toucher au code du widget (qui soit dit en passant n’afficherai pas la commande off avec la « correction » que tu proposes dans ton 1er message).

J’ai jeté un oeil dans le code d’un vieux Jeedom et c’était traité sensiblement de la même manière qu’aujourd’hui…

A priori la fonction est rodée et convient déjà à tous les cas de figure

Quand on voit la liste des noms réservés/interdits, il ne reste plus grand chose de disponible.

Pourquoi ne pas implémenter ce fix ? je parle bien d’un bug fix parce que la commande off ne devrait jamais etre cachee si elle n’est pas attachée a une commande info…

Il y a encore mieux comme bug fix, comme ci-dessous
Le meme widget personnalise peut etre applique sur :

  • des commandes action non-liees a une commande info, sans alternance d’affichage donc, et le meme widget peut etre utilise pour les commandes on et off, il suffit de remplir les champs icon_on et icon_off correctement, et d’utiliser des noms normalisés. Si noms pas normalises, 2 widgets sont toujours necessaires , comme actuellement, en ne remplissant que le champs icon_on de chaque

  • des commandes actions liees à une commande info, avec alternance d’affichage du on off en fonction de l’etat de la commande info liee, et en utilisant des noms normalises

if (_options.display_value == ‹  ›) {
cmd.find(’.iconCmd’).empty().append((jeedom.cmd.normalizeName(’#name#’) == ‹ off ›) ? « #icon_off# » : « #icon_on# »);
cmd.show();
} else if (_options.display_value == ‹ 1 › || _options.display_value >= 1 || _options.display_value == ‹ 99 › || _options.display_value == ‹ on ›) {