Afficher le nom/icone ne fonctionne pas comme prévu

Bonjour,
Je viens de passer en V4 et j’ai l’impression que les options pour afficher ou non le nom et l’icone d’une commande ne fonctionnent pas du tout comme prévu.

J’ai une action de type « curseur » avec un widget « défaut » (pour faire un simple toggle on/off).

Voilà les comportements observés, qui semble montrer qu’il y a un bug dans la logique d’affichage et sur celle de certains widgets:

Sur la vue desktop (bug de logique)

  • L’option « afficher le nom » n’affiche le nom que s’il n’y a pas d’icone définie pour la commande. S’il y a une icone définie c’est elle qui s’affiche (et donc impossible de n’afficher que le nom)

  • L’option « afficher le nom et l’icone » ne fonctionne que si l’option « afficher le nom » est elle aussi cochée.

La solution: remplacer ces 2 options par « afficher le nom » et « afficher l’icone », cela sera beaucoup plus clair pour l’utilisateur et facile à implémenter sans erreur dans les widget.

Sur la vue mobile (bug de widget)

  • Avec le widget « défaut », quelles que soient les options cochées, ni le nom ni l’icone ne s’affichent. Cela rend le widget inutilisable
  • Avec le widget « button », le comportement est identique au mode desktop.

Conclusion

Impossible d’avoir un widget avec plusieurs « toggle » utilisables en mode mobile, ou un widget qui afficherait le nom en mode desktop et l’icone en mode mobile.

Si j’ai le temps j’essaierai d’aller jeter un oeil au code pour voir d’où viennent les erreurs.

Après vérification rapide du code du widget curseur/défaut (mobile/cmd.action.slider.default.html), il manque clairement le code permettant d’afficher le nom/icone de la commande, comme on le retrouve sur la version dashboard:

<div class="title #hide_name#"><div class="cmdName">#name_display#</div></div>

Moi qui espérait qu’avec la V4 je n’aurais plus à réécrire/corriger la plupart des widgets que j’utilise, je pense que c’est mal parti :joy:

Salut,

Si tu identifies des incohérences dans le code des widgets core, n’hésites surtout pas à proposer une pull request sur github.

Après examen de core/cmd.class.php, cela confirme que le code ne correspond effectivement pas au descriptif des checkbox:

Le name_display est d’abord défini comme étant le nom, ou l’icone si elle est définie (ce qui confirme l’impossibilité de choisir entre les 2):

'#name_display#' => ($this->getDisplay('icon') != '') ? $this->getDisplay('icon') : $this->getName()

Et un peu plus bas on retrouve le code des 2 checkbox:

La 1e checkbox, qui si elle n’est pas cochée masque tout (ce qui explique que la 2e ne fonctionne que si la 1e est cochée):

if ($this->getDisplay('showNameOn' . $_version, 1) == 0) { $replace['#hide_name#'] = 'hidden'; }

Et la 2e checkbox, qui remplace la définition initiale du name_display:

if ($this->getDisplay('showIconAndName' . $_version, 0) == 1) { $replace['#name_display#'] = $this->getDisplay('icon') . ' ' . $this->getName(); }

Une simple combo avec les 4 combinaisons possibles « Ne rien afficher / Icone seule / Nom seul / Nom et icone » serait beaucoup plus explicite.

C’est ce que je compte faire, il faut juste que je me réinstalle une instance de Jeedom pour développement