You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
Matthieu Marcillaud 1484a77cec docs: Ajout d’un test de l’option allow-clear 7 months ago
action fix: Notice PHP si query vide 8 months ago
css adaptation de la css pour que les options s'affichent dans la nouvelle modalbox 3 years ago
data - Une balise `#URL_API{select2_autocomplete/demo/dogs}` ou `#URL_API{select2_autocomplete.api/demo/dogs}` 4 years ago
formulaires docs: Ajout d’un test de l’option allow-clear 7 months ago
javascript fix: Ne pas recharger un 'select' qui a déjà un select2 actif 7 months ago
lang - Utiliser la configuration dans les pipelines et le JS ; 4 years ago
lib/select2 build: Up Select2 lib to 4.0.13 9 months ago
prive fix: Ne pas motrer select2activated dans la démo 8 months ago
CHANGELOG.md build: version 2.0.0 7 months ago
README.md docs(readme): Up Readme, remove Chosen 7 months ago
paquet.xml build: version 2.0.0 7 months ago
select2_fonctions.php fix: Fonction `generer_url_api` existante en SPIP 4.1 8 months ago
select2_pipelines.php fix: Si spipConfig n’est pas présent (dans le public par exemple), il faut déclarer un var en JS ou utiliser window. Simplement le ??=, JS est pas content. 7 months ago

README.md

Select2 Plugin pour SPIP

Ce plugin pour SPIP intègre la bibliothèque javascript Select2 qui améliore lusage des sélecteurs (balises <select>) natifs des navigateurs en facilitant entre autres la recherche dun terme dans la liste.

Fonctionnement

Select2 est actif dans lespace privé

  • pour tous les select ayant la classe CSS select2
  • pour tous les input ayant la classe CSS select2

La configuration (Menu : Squelettes > Select2) permet de compléter les sélecteurs utilisés pour les select.

Il est possible dactiver Select2 sur lespace public depuis cette configuration.

Important: Lidentifiant (lattribut id) de la balise select ou input doit être unique sur la page ; Select2 ne peut sactiver quune fois par identifiant (le dernier appelé).

Compléter la configuration par défaut

Select2 dispose de 2 manières dadapter sa configuration :

En appelant directement une méthode javascript

  • soit la fonction jQuery .select2() de la librairie dorigine, et en lui transmettant des options
  • soit la fonction jQuery .spip_select2() qui enrichit la précédente
  • soit SpipSelect2.on_select(select, options), dont la fonction jQuery .spip_select2 est un alias
  • soit SpipSelect2.on_input(input, options)

Par exemple

jQuery("select").select2({"placeholder": "La forme ?"});
jQuery("select").spip_select2({"placeholder": "La forme ?"});
SpipSelect2.on_select(document.querySelector("select"), {"placeholder": "Que dire ?"});
SpipSelect2.on_input(document.querySelector("input.text"));

Via des attributs data sur la balise select ou input

Ces attributs prennent alors le pas sur les options transmises à linitialisation.

Par exemple

<select class="select2" id="select1" name="demo" data-placeholder="Ça va ?">
    <option></option>
    <option value="oui">Yep!</option>
    <option value="non">Bof.</option>
</select>

La documentation de Select2 sera donc à étudier :)

Addition du plugin SPIP

Des options supplémentaires non présentes dans le javascript par défaut sont ajoutées au plugin SPIP. Ces options sont disponibles :

  • si vous utilisez les classes CSS prévues (.select2 ou tout autre configurée en plus par vos soins)
  • si vous appelez directement une des fonctions
    • SpipSelect2.on_select()
    • SpipSelect2.on_input()
    • jQuery .spip_select2()

Mais pas si vous appelez directement la méthode .select2() native.

sortAlpha

  • {sortAlpha: true}
  • ou data-sort-alpha="true".

Si cet attribut est présent, les options de sélection seront triées par ordre alphabétique. Cela est effectué en interne, en utilisant une fonction sorter ; En simplifiant cela pourrait ressembler à :

    jQuery('#select3a').spip_select2({sortAlpha: true});
    // est à peu près équivalent à :
    jQuery('#select3b').select2({
        /*'sorter': data => data.sort((a, b) => a.text.localeCompare(b.text))*/
        sorter: function(data) {
            return data.sort(function(a, b) {
                return a.text.localeCompare(b.text);
            })
        }
    });

highlightSearchTerm

  • {highlightSearchTerm: true}
  • ou data-highlight-search-term="true".

Cette option met en évidence le terme de recherche dans la liste des résultats, en appliquant un span .select2-rendered__match sur le terme recherché, qui est par défaut décoré avec un souligné.

Action sur les input.select2

Le plugin permet de traiter des input (text) en les gérant via Select2, moyennant un mécanisme javascript qui recrée un select à côté de linput, masque linput, et mappe le résultat de la saisie dans select2 dans la valeur de linput qui sera posté. Ça gère aussi des saisies multiples dès lors quun data-separateur tel que data-separateur="," est indiqué.

Cela sapplique

  • automatiquement sur les input.select2
  • ou manuellement via la méthode SpipSelect2.on_input(input, options = {})

Addition à la librairie javascript Select2

Le plugin propose une version altérée de Select2 javascript/select2.fork.full.js permettant des options supplémentaires impossibles à réaliser autrement.

onEnterSubmit

  • {onEnterSubmit: true}
  • ou data-on-enter-submit="true".

Appuyer la touche Entrée en ayant le focus sur le sélecteur fermé soumet le formulaire (comportement généralement présent sur les navigateurs). Par défaut, Select2 quand à lui ouvre le sélecteur.

Autocomplete Ajax

On peut indiquer une URL de recherche à Select2 afin quil obtienne la liste des choix en fonction de la recherche tapée par lutilisateur. Un exemple est proposé dans le plugin, visible sur la page de test.

Par exemple :

<select class="select2" id="chiens" name="chiens[]" 
    data-placeholder="Quelle race de chien ?"
    data-ajax--url="[(#URL_API{select2_autocomplete, demo/dogs}|attribut_html)]"
    data-minimum-input-length="1"
>
</select>

LAPI doit retourner un format spécifique (cf action/select2_autocomplete.php) pour fonctionner par défaut, mais du javascript supplémentaire peut servir pour adapter des apis déjà existantes. Cf. documentation Ajax de Select2.

onAjaxLoad ...

Attention avec lautocomplete ; Si vous appelez directement .select2() (ce nest pas le cas .spip_select2() utilisé par le plugin cependant), chaque requête ajax pour obtenir la liste des éléments recherchés va déclencher la fonction SPIP onAjaxLoad. Votre code ne doit pas redémarrer linitialisation des select déjà gérés par Select2 dans ce cas (sinon vous verrez le sélecteur se refermer aussitôt !).