Bonjour,
Je vous propose une amélioration ergonomique pour la sélection d’un scénario lors de l’ajout de l’appel à un scénario depuis un scénario.
Comme beaucoup, ma liste de scénarios commence à être très longue et c’est un peu pénible de faire la recherche du scénario souhaité en parcourant l’énorme liste déroulante sans pouvoir filtrer.
ça implique de modifier un fichier du Core de Jeedom, je vous laisse donc assumer ![]()
Pour limiter le risque, la modification ne consistera à ajouter qu’une seule ligne (2 lignes en 4.3) : appel d’une fonction ajoutée dans la personnalisation avancée.
La modification sera donc à refaire à chaque mise à jour de Jeedom.
Idéalement, il faudrait l’introduire en évolution dans le core de Jeedom (avec une amélioration de l’ergonomie car je n’y ai pas touché…)
Modifications à effectuer :
Etape 1 : ajouter la fonction suivante dans la personnalisation avancée JS de Jeedom
Fonction 'addScenariosFilter' en 'Personnalisation avancée' de Jeedom
function addScenariosFilter(selectElm) {
const searchInput = document.createElement('input');
searchInput.classList.add('form-control', 'rounded-left');
searchInput.placeholder = `Filtre de scénarios`;
selectElm.parentElement.insertBefore(searchInput, selectElm.nextSibling);
searchInput.addEventListener("keyup", function (e) {
const text = e.target.value;
const options = Array.from(selectElm.options);
options.forEach (function(option) {
const optionText = option.text;
const lowerOptionText = optionText.toLowerCase();
const lowerText = text.toLowerCase();
const regex = new RegExp("^" + text, "i");
const match = optionText.match(regex);
const contains = lowerOptionText.indexOf(lowerText) != -1;
option.hidden = match || contains ? false: true ;
})
});
}
Etape 2 (Jeedom 4.4) : ajouter l’appel de la fonction addScenariosFilter dans le core de Jeedom
Ajouter la ligne addScenariosFilter(select); dans le fichier html/core/template/scenario/scenario.default.html du core de Jeedom depuis l’éditeur de fichiers Jeedom comme ici :
Appel de la fonction 'addScenariosFilter' dans le core de Jeedom
success: function (scenarios) {
const select = document.querySelector('.expressionAttr[data-uid="#uid#"][data-l1key="options"][data-l2key="scenario_id"]')
for (let i in scenarios) {
const newOption = document.createElement('option')
newOption.text = scenarios[i].humanName
newOption.value = scenarios[i].id
select.appendChild(newOption)
}
// Ligne à ajouter
addScenariosFilter(select);
// Fin d'ajout
if ('#scenario_id#' != '' && document.querySelector('.expressionAttr[data-uid="#uid#"][data-l1key="options"][data-l2key="scenario_id"]
Etape 2 (Jeedom 4.3) : ajouter l’appel de la fonction addScenariosFilter dans le core de Jeedom
Ajouter les lignes :
const select = document.querySelector('.expressionAttr[data-uid="#uid#"][data-l1key="options"][data-l2key="scenario_id"]'); addFilter(select); dans le fichier html/core/template/scenario/scenario.default.html du core de Jeedom depuis l’éditeur de fichiers Jeedom comme ici :
Appel de la fonction 'addScenariosFilter' dans le core de Jeedom
success: function (scenarios) {
let options = '';
options += '<option value="-1">{{Aucun}}</option>';
for (let i in scenarios) {
options += '<option value="' + scenarios[i].id + '">' + scenarios[i].humanName + '</option>';
}
$('.expressionAttr[data-uid=#uid#][data-l1key=options][data-l2key=scenario_id]').append(options);
// 2 lignes à ajouter
const select = document.querySelector('.expressionAttr[data-uid="#uid#"][data-l1key="options"][data-l2key="scenario_id"]');
addFilter(select);
// Fin d'ajout
if ('#scenario_id#' != '' && $('.expressionAttr[data-uid=#uid#][data-l1key=options][data-l2key=scenario_id] ```
On obtient alors le résultat suivant :


