Widget - Bug avec des paramètres optionnels contenant des "

Bonjour,

Je suis en train de réadapter mes widgets pour qu’ils fonctionnent en v4.4 (et ceux qui fonctionnait, je supprime le jQuery).
Je viens de me rendre compte que si l’on saisit un paramètre avec des guillemets ", l’info est bien sauvegardé mais n’est pas correctement restitué dans l’interface mais si on ré-enregistre la commande, on perd l’info.
Je ne sais pas si c’est lié à la mise à jour 4.4 ou si c’était une précédente version.

Avec des captures c’est plus parlant :

Lorsque l’on ferme et réouvre l’écran de configuration :


Après dans mon widget j’affichais bien la balise donc en base ça doit-être bon

Je m’en suis rendu compte avec une balise
image
image

Bonne journée

Salut,

Pour info., je reproduis le problème en 4.3.23 donc ce n’est pas lié à la version 4.4.

1 « J'aime »

Merci pour ton retour.

Bonjour,

Et avec une simple 'quotte' ?

Au niveau de l’affichage dans la popup, il y a moyen de le corriger ici :

Avec la modification suivante de la ligne 842, on récupère le bon affichage :
$tr .= '<input class="form-control value" value="' . htmlspecialchars($value, ENT_QUOTES) . '" />';

Par contre, en testant rapidement sur un libellé de widget modifiable par un paramètre optionnel, j’obtiens une erreur. A voir si c’est dû à mon widget ou si il faut faire une modification supplémentaire au niveau de la récupération des paramètres optionnels à l’affichage d’un widget.

EDIT : sans cette correction, un texte avec simple quote provoque le même problème d’affichage du widget. Donc cette correction permet au moins d’améliorer le réaffichage des paraètres optionnels avec ". A voir si exploitable ensuite (dans ton cas de code HTML par exemple, je n’ai pas testé)

EDIT2 : le souci au niveau du traitement du paramètre récupéré pour l’affichage du widget est le suivant :
var nameTextOn#id# = ('#nameTextOn#' != '#' + 'nameTextOn#') ? "#nameTextOn#" : '';

#nameTextOn# pourra avoir par exemple pour valeur ceci est un "test" ou ceci est un 'test' et provoquera donc une erreur dans le traitement au niveau du widget. Le problème existe d’ailleurs déjà actuellement (en plus du problème que tu remontes)

image

En base, on sauve au format suivant dans la colonne cmd.display :

"parameters":{
   "nameTextOn":"texte 'on'",
   "nameTextOff":"texte \"off\""
}

Merci pour cette analyse.

Si je met en paramètre optionnel :

<i class="icon animal-animal"></i>

J’obtiens toujours ça au ré-affichage après avoir modifié la ligne 842 :

Pourtant l’icône s’affiche bien dans mon widget :
image

Mon code pour récupérer l'info est le suivant :
var iconOff = ('#iconOff#' != '#' + 'iconOff#') ? '#iconOff#' : "<i class='far fa-circle'></i>";

console.log('iconOff: ' + iconOff);

Dans la console j’ai bien → iconOff: <i class="icon animal-animal"></i>

Si re-sauvegarde les paramètre du widget la je perd l’info:

Dans la console j’ai maintenant → iconOff: <i class=

Si je met de simple quote, j’ai bien la valeur, mais je ne récupère plus l’info avec dans mon widget

Après, je ne souhaite pas trop bidouillé, il y aura peut-être une correction plus globale par la Team Jeedom.

Ma solution est soit de supprimer le paramètre du widget ou si je souhaite maintenir le mode custom renseigner uniquement la valeur className et pour moi c’est bon.
L’objectif de mon post était de remonter ce dysfonctionnement.

Encore merci pour le temps passé sur ce post.

En base de donnée, les paramètres sont bien sauvegardés. C’est juste la restitution dans les champs qui pose problème. Du coup si on réenregistre ça enregistre ce qui a été restitué dans les inputs.

EDIT : ERRATUM
J’avais pas modifié le bon fichier, avec ta modification ça fonctionne cela fonctionne très bien =

Merci

Bizarre, je viens de faire le test avec ton exemple, le réaffichage est ok avec ma modification du code de Jeedom.

Par contre, je ne vois pas trop comment régler le problème de la récupération au niveau du widget car dans ton exemple, ça passera pas si tu mets :

<i class='icon animal-animal'></i>

pour

var iconOff = ('#iconOff#' != '#' + 'iconOff#') ? '#iconOff#' : "<i class='far fa-circle'></i>";

Je me suis trompé de fichier, j’ai pris dans le répertoire core-4-stable/desktop... au lieu de html/desktop... (je suis trop c**)

Encore merci pour ton aide.

PS : Savez-vous s’il faut remonter l’info côté Team Jeedom en ouvrant un ticket ?

Je continue à regarder du côté récupération du paramètre côté widget.
Et je ferai un PR pour une modification au niveau du code de Jeedom.

A voir avant si d’autres retours/avis à venir sur la question.

1 « J'aime »

Avec mes derniers tests, je confirme que la correction permet de bien gérer les ' et " au niveau des paramètres optionnels.

:arrow_right: Modification de la ligne 842 de cmd.configure.php du core de Jeedom avec la ligne suivante :

$tr .= '<input class="form-control value" value="' . htmlspecialchars($value, ENT_QUOTES) . '" />';

:arrow_right: Saisie possible de ' et " dans un paramètre optionnel (la consultation de la valeur depuis la popup des paramètres optionnels est ok)

:arrow_right: Au niveau de la récupération des paramètres dans le code du widget, il faut utiliser ce format (:warning: en respectant les ` ) :

var nameTextOn#id# = (`#nameTextOn#` != `#` + `nameTextOn#`) ? `#nameTextOn#` : ``;

Au final, avec le paramètre suivant :

On obtient l’affichage suivant :
image

PR fait au niveau du core Jeedom :

2 « J'aime »

Merci beaucoup.

Hello @noodom,

Pour info, les paramètres sont aussi affichés dans la modal eqLogic.dashboard.edit.php.
Il faudrait donc aussi faire un PR sur cette page :wink:

hello, bien vu. Je regarde pour l’ajouter en PR. Merci.

2 « J'aime »

question bête : c’est utilisé où, que je teste avant de valider le PR ? :slight_smile:

EDIT : Trouvé ! :slight_smile: dans « configuration avancée »

En fait il y a 3 fichiers dont un à 2 endroits :sweat_smile:
Je comprenais pas pourquoi ça corrigeait pas pour la configuration avancée.

cmd.configure.php : widget
eqLogic.configure.php : configuration avancée
eqLogic.dashboard.edit.php : édition dashboard

Je commite dans la journée, le plus long sera le formulaire de PR :upside_down_face:

EDIT : PR effectué : read a widget optional parameter with " fix by noodom · Pull Request #2605 · jeedom/core · GitHub (lien corrigé dans post précédent)

3 « J'aime »

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