Couleur d'un bouton en fonction de la valeur d'une commande (virtuelle)

Bonjour,
Je cherche de l’aide (j’ai lu pas mal de posts mais …) pour coder une balise en javascript avec la fonction jeedom.cmd.update(_options).
Voilà j’ai une série de boutons sur mon design et je voudrais pour chaque bouton faire varier la couleur en fonction d’une commande virtuelle de type info (0=normal,1=warning,2=erreur). J’ai ceci en exemple (pour un bouton):

<ul class="vertical-button-content">
  	<li class="vertical-button">
      	<a href="index.php?v=d&p=plan&plan_id=50">
        	<i class="fa font-awesome-cogs" style="font-size: 30px;"></i>
     	 </a>
  	</li>
</ul>

Je dois ajouter une fonction jeedom.cmd.update (_options)` entre 2 balises :

  • où ça ?
  • comment changer la couleur de l’icone ?
  • en changeant de classe ? ou d’atttribut color ?
    Merci pour votre aide.
    cdt

Bonjour,
Bon j’ai un peu avancé (merci les tutos) mais je ne parviens toujours pas à changer la couleur du bouton. Par contre bonne nouvelle j’ai la valeur de la commande info d’après son ID:

<ul class="vertical-button-content">
  	<li class="vertical-button">
        <span class="button-parametre">
        	<a href="index.php?v=d&p=plan&plan_id=50">
            	<i class="fa font-awesome-cogs" style="font-size: 30px;"></i>
            </a>
        </span>
        <script>
          	var FamilyStatusParametreID = 3778; //ID de la commande
			jeedom.cmd.update[FamilyStatusParametreID] = function(_options) {
				jeedom.cmd.execute({ // Récupération de la valeur  
					id: FamilyStatusParametreID,
					success:  function(StatusValue) {
                       	console.log("get value : " + StatusValue);
              			if (StatusValue == 0) {
                			$('.button-parametre').attr('style', 'color: Grey;');
              			} else if (StatusValue == -1) {
                           	$('.button-parametre').attr('style', 'color: DarkOrange;');
                        } else if (StatusValue == 1) {
                           	$('.button-parametre').attr('style', 'color: Red;');
                        }
					}
        		})
    		}
   			jeedom.cmd.update[FamilyStatusParametreID]();
        </script>
  	</li>
</ul>

Sans doute la façon d’adresser le span ou la classe ?
cdt

bonjour

dans ton conteneur <i> tu as style
cherche à changer la couleur dans le style (sans joué avec le script) à la suite de font

une fois trouvé tu ajoutes une class à ton <i> que tu reprends dans ton script

Bonjour,
effectivement il faut jouer sur le <i> et non sur le <span>
tu peut déplacer la taille de l’icone dans une class css :

 <style> 
  .button-parametre i {
    font-size: 30px;
    }  
  </style>

et ensuite jouer avec ton jQuery :

if (StatusValue == 0) {
  $('.button-parametre i').attr('style', 'color: grey');
} else if ...

Autre détail qui a son importance,
lorsque tu utilise jeedom.cmd.update[ID AUTRE] = fonction....;
avec un id diffèrent de l’id d’origine du widget lui même, il ne faut pas que les 2 commandes soit visibles sur la même page jeedom, car 1 seul des 2 pourra être mise a jour en cas de nouvelle valeur de « ID AUTRE ». autrement dit, il ne faut pas que l’info portant l’id « 3778 » soit visible en même temps que ce widget.

Pour ceci, il va aussi falloir modifier ton code, car pour le moment tu fait tes essais sur 1 seul widget, quand tu multipliera ceux-ci ton code ne marchera plus ou mal car il ne contient aucun identifiant unique, exemple :
si un widget exécute le jQuery suivant : $('.button-parametre i').attr('style', 'color: grey'); il le fera pour tout les éléments <i> qui porte la class .button-parametre et donc les autres boutons qui utiliseront ce widget seront impactés.

Pour résoudre se soucis, il faut que tu utilise le tag #id# ou #uid# :

  • html : <span class="button-parametre#id#">
  • js : $('.button-parametre#id# i').attr('style', 'color: grey');

voila, bonne soirée.

Bonjour,
Merci à tous les deux @ajja17orange et @Phpvarious, j’y suis presque. J’ai déplacé la taille du bouton dans la feuille de style css séparée (qui n’avait rien à faire ici puisque tous les boutons ont la même taille). Puis en ciblant la balise icon cela fonctionne bien avec un seul bouton. Seulement avec l’ajout de #id# cela ne fonctionne plus. J’ai affiché la valeur de #id# dans console.log mais aucune valeur n’apparait ?
Extrait de la feuille de style :

.vertical-btn-icon#id# i {
	font-size: 30px;
  	color: LightSlateGray;
}

et mon script :

<ul class="vertical-button-content">
  	<li class="vertical-button">
        <div class="vertical-button">
        	<a href="index.php?v=d&p=plan&plan_id=50">
              <span class="vertical-btn-icon#id#"><i class="fa font-awesome-cogs"></i></span>
            </a>
        </div>
        <script>
          	var FamilyStatusParametreID = 3778; //ID de la commande
			jeedom.cmd.update[FamilyStatusParametreID] = function(_options) {
				jeedom.cmd.execute({ // Récupération de la valeur  
					id: FamilyStatusParametreID,
					success:  function(StatusValue) {
                       	console.log("get value : " + StatusValue + " " + "#id#");
              			if (StatusValue == 0) {
                			$('.vertical-btn-icon#id# i').attr('style', 'color: Grey;');
              			} else if (StatusValue == -1) {
                           	$('.vertical-btn-icon#id# i').attr('style', 'color: DarkOrange;');
                        } else if (StatusValue == 1) {
                           	$('.vertical-btn-icon#id# i').attr('style', 'color: Red;');
                        }
					}
        		})
    		}
   			jeedom.cmd.update[FamilyStatusParametreID]();
        </script>
  	</li>
</ul>

J’ai l’impression que la valeur #id# ne passe pas (?). Ce qui ne m’étonne pas car mon script n’est pas lié à une commande (?) … où je m’égare en ce dimanche matin ?
cdt

Bonjour,

J’ai pourtant reproduit ton code et je n’est aucun soucis.
Pense a repasser le widget a Défaut → Sauvegarder, puis resélectionne ton widget → sauvegarder, a chaque fois que tu fais une modification dans le code de celui-ci , dans la config de la commande.

attention je sais pas si c’est voulu mais :

alors que dans ton code tu fait une condition que sur ces valeurs ( 0, -1, 1 )

if (StatusValue == 0) { ... }
else if (StatusValue == -1) { ... }
else if (StatusValue == 1) { ... }

oui j’ai changé les valeurs -1=warning 0=normal et 1=erreur. L’histoire de l’id ne fait penser que mon script n’est pas placé au bon endroit. Je récapitule le problème:
Problème: J’ai aujourd’hui un menu design avec une barre de 10 boutons qui charge 10 autres pages. Chaque page correspond à un thème (chauffage, réseau, etc.). Chaque matin je vérifie en cliquant sur chacun des 10 boutons pour voir s’il y a un problème quelque part. C’est long et inutile. J’ai créé 10 commandes virtuelles/info/numérique qui prennent les valeur -1, 0 ou 1 et qui m’indique s’il y a un problème (exemple: un radiateur est suspendu à cause d’une ouverture => commande « chauffage »=-1). Je voudrais que ces 10 boutons changent de couleur en fonction de la valeur des 10 commandes associées.
Approche 1: j’inclus dans mon html de page de design un script qui permet de connaitre la valeur d’une commande et je change la couleur de l’icone/bouton. Je ne sais pas comment tout cela se rafraichis mais bon…
Approche 2: la commande se représente sous la forme d’un bouton avec une couleur différente en fonction de sa valeur d’où le script avec un #id# . Mais je ne sais pas comment l’afficher ? avec une icone différente à chaque bouton et un lien différent vers une page design différent.

J’ai préféré l’approche 1 qui me semblait plus intuitive mais il y a le problème des classe css à discriminer et le rafraichissement lorsque la valeur de la commande change. Je ne suis que débutant en JS et CSS.
Des avis ?

Peut tu faire voir a quoi ressemble ton menu actuellement ? avec quel moyen tu l’a mis en place ? simple texte/html ajouter sur le design ?

L’idée pourrai de te servir de ton virtuel qui regroupe les 10 info/numérique et ainsi l’afficher en tant que menu dans ton design, tu applique un widget perso (info/numeric) sur chacune de ces commandes.

Avantage :
Plus besoin de faire un jeedom.cmd.execute() car le widget se situe déja dans la commande qui prend la valeur -1, 1, 0.
soit :

<div class="cmd #history# tooltips cmd-widget" data-type="info" data-subtype="numeric" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
  <ul class="vertical-button-content">
  	<li class="vertical-button">
        <div class="vertical-button">
        	<a href="index.php?v=d&p=plan&plan_id=14">
              <span class="vertical-btn-icon#id#"><i class="fas fa-cogs"></i></span>
            </a>
        </div>
    </li>
  </ul>
  <script>
    jeedom.cmd.update['#id#'] = function(_options) {
      if (_options.display_value == 0) {
        $('.vertical-btn-icon#id# i').attr('style', 'color: Grey;');
      } else if (_options.display_value == -1) {
        $('.vertical-btn-icon#id# i').attr('style', 'color: DarkOrange;');
      } else if (_options.display_value == 1) {
        $('.vertical-btn-icon#id# i').attr('style', 'color: Red;');
      }
    }
    jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});
  </script>
  <style> 
    .vertical-btn-icon#id# i {
	  font-size: 30px;
  	  color: LightSlateGray;
    }
  </style>
</div>

Inconvénient
tu es peut-être un peu moins libre sur la mise en forme du menu en lui même, car il faudra jouer avec la disposition de l’équipement (Tableau…), tout dépend de se que tu as actuellement.

il te manque le set attribut
c’est identique à Etat lumières d'un menu HTML Display

un autre exemple construction de tableau personnalisé sans widget, virtuel
du html pur

ça reprend les sondes et ça calcul pour le positionnement

tu as plein d’exemple utilisant cette methode : changer le fond d’ecran d’un design, …

Bonne nouvelle, après moult essais j’y suis arrivé. J’ai utilisé l’approche 2 avec un code html simplifié (plus ul et li) et j’ai ajouté des tags tels que #iconClass# et #planID# ce qui donne ceci :

<div class="cmd #history# tooltips cmd-widget" data-type="info" data-subtype="numeric" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
  <div class="vertical-button">
     <a href="index.php?v=d&p=plan&plan_id=#planID#">
        <span class="vertical-btn-icon#id#"><i class="#iconClass#"></i></span>
     </a>
  </div>
  <script>
    jeedom.cmd.update['#id#'] = function(_options) {
      if (_options.display_value == 0) {
        $('.vertical-btn-icon#id# i').attr('style', 'color: LightSlateGray;');
      } else if (_options.display_value == -1) {
        $('.vertical-btn-icon#id# i').attr('style', 'color: DarkOrange;');
      } else if (_options.display_value == 1) {
        $('.vertical-btn-icon#id# i').attr('style', 'color: Red;');
      }
    }
    jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});
  </script>
  <style> 
    .vertical-btn-icon#id# i {
  	  color: LightSlateGray;
    }
  </style>
</div>

Ce qui me permet d’individualiser chaque bouton avec la classe de l’icone et l’ID du plan design:

J’utilise un tableau pour placer chaque bouton au bon endroit. La taille des boutons doit être spécifiée ici car elle hérite de la taille du tableau qui est de 12px :
image

Ce qui donne au final (la barre à gauche est l’originale statique, la barre à droite est la nouvelle barre dynamique) :

Un grand merci à tous les deux @Phpvarious et @ajja17orange et bonne journée.
cdt

2 « J'aime »

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