fix: Ne pas recharger un sélecteur générique déjà actif

pull/3/head
Matthieu Marcillaud 5 months ago
parent 9a3cc4673b
commit 3098682753

@ -2,7 +2,7 @@ class SelecteurGenerique {
/**
* Retourne lURL standard de lapi du sélecteur générique.
*
*
* @param {string} selecteur Permet dindiquer un nom de sélecteur spécifique.
* @returns {string}
*/
@ -11,7 +11,7 @@ class SelecteurGenerique {
return api + selecteur;
}
/**
/**
* Transforme des datas ancien format (jquery.ui.autocomplete) dans le format Select2
*/
static processData(_data) {
@ -23,7 +23,7 @@ class SelecteurGenerique {
}
const data = {}
data.results = _data.map(d => {
return {
return {
"id": d.id || d.value,
"text": d.label
};
@ -31,9 +31,9 @@ class SelecteurGenerique {
return data;
}
/**
/**
* Retourne un objet avec les champs 'objet', 'id_objet' et 'source' dun formulaire de lien.
* @param {Node} input
* @param {Node} input
* @return {Object}
*/
static formulaire_editer_liens_params(input) {
@ -70,9 +70,9 @@ class SelecteurGenerique {
return params;
}
/**
* Retourne un objet avec les champs 'objet' et 'id_*' des paramètres hidden dun formulaire Spip.
* @param {Node} input
/**
* Retourne un objet avec les champs 'objet' et 'id_*' des paramètres hidden dun formulaire Spip.
* @param {Node} input
* @return {Object}
*/
static formulaire_spip_hidden_ids(input) {
@ -89,9 +89,9 @@ class SelecteurGenerique {
/**
* Applique un autocomplete sur un input dans un formulaire de liens
* @param {Node} input
* @param {Node} input
* @param {string} api URL dAPI dautocomplete
* @param {object} params
* @param {object} params
*/
static formulaire_editer_liens_autocomplete(input, api, params = {}) {
const args = SelecteurGenerique.formulaire_editer_liens_params(input);
@ -128,12 +128,16 @@ class SelecteurGenerique {
/**
* Applique un autocomplete sur un input
*
* @param {Node} input
*
* @param {Node} input
* @param {string} api URL dAPI dautocomplete
* @param {object} params
* @param {object} params
*/
static on_input = function (input, api, params = {}) {
if (input.dataset.selecteurGeneriqueOn) {
return;
}
input.dataset.selecteurGeneriqueOn = 'on';
const callback = input.dataset.selectCallback;
const separator = input.dataset.selectSep || ',';
const multiple = input.hasAttribute('multiple');
@ -167,12 +171,11 @@ class SelecteurGenerique {
if (typeof fn === 'function') {
options.events = {
'select2:select': fn
}
}
} else {
console && console.error('Unknown data-select-callback function : ' + callback);
}
}
SpipSelect2.on_input(input, options);
};
}

@ -16,7 +16,7 @@ class SelecteurGeneriqueLoader {
};
static inputs_data_selecteur() {
document.querySelectorAll('input[data-selecteur]:not([autocomplete=off])')
document.querySelectorAll('input[data-selecteur]:not([autocomplete=off]):not([data-selecteur-generique-on])')
.forEach(input => {
const selecteur = input.dataset.selecteur || 'generique';
const php = input.dataset.selectPhp || ((selecteur === 'generique') ? 'oui' : '');
@ -42,4 +42,4 @@ class SelecteurGeneriqueLoader {
}
SelecteurGeneriqueLoader.onReady(SelecteurGeneriqueLoader.load);
onAjaxLoad(SelecteurGeneriqueLoader.load);
onAjaxLoad(SelecteurGeneriqueLoader.load);

Loading…
Cancel
Save