Changeset 95926 in spip-zone


Ignore:
Timestamp:
Mar 12, 2016, 1:54:17 AM (4 years ago)
Author:
rastapopoulos@…
Message:

For the first time in the SPIP world, let me introduce to you THE VERY FIRST AMAZING REAL GENERIC SELECTOR ! (blink blink)

Bon ok : ça ne marche qu'avec javascript. Donc pas encore accessible (mais j'y réfléchis).

Prend donc n'importe quel input text.
Ajoute lui les attributs suivants :
data-selecteur="generique"
data-select-php="oui"

Tape du texte. ET C'EST MAGIQUE.

Au passage un nouvel attribut est reconnu par le JS :
data-select-params="{objet JSON}"
et permet d'ajouter des choses dans le GET de l'action de sélection.

Pour le sélécteur "generique", deux paramètres supplémentaires sont alors reconnus :
"objets" => liste d'objets pour filtrer ceux qui seront sélectionnables
"objets_exclus" => l'inverse

Le plus lisible en squelette est de faire ça :
#SET{params, #ARRAY{objets_exclus, #LISTE{selections, selections_contenus}}|json_encode{1}|attribut_html}
et ensuite :
data-select-params="#GET{params}"

Real world example dans le plugin Sélections Éditoriales ensuite.

Location:
_plugins_/selecteur_generique/trunk
Files:
2 added
2 edited
1 moved

Legend:

Unmodified
Added
Removed
  • _plugins_/selecteur_generique/trunk/javascript/selecteur_generique_functions.js

    r93512 r95926  
    103103                        // On regarde si on demande un sélecteur PHP ou le classique squelette
    104104                        var php = me.data('select-php');
     105                        // On cherche s'il y a des paramètres supplémentaires sous format objet JSON {cle:'valeur'}
     106                        var params = me.data('select-params');
     107                        if (typeof(params) == 'string') {
     108                                try {
     109                                        params = JSON.parse(params);
     110                                }
     111                                catch (e) {
     112                                        console.error('Erreur dans l’analyse des paramètres supplémentaires', e);
     113                                }
     114                        }
     115                        if (typeof(params) != 'object') {
     116                                params = {};
     117                        }
    105118                       
    106119                        me
     
    108121                                .autocomplete({
    109122                                        source: function(request, response) {
     123                                                // On génère le terme à chercher
    110124                                                if (me.attr('multiple')){ var term = extractLast(request.term, separateur); }
    111125                                                else { var term = request.term; }
    112                                                 //console.log('"'+term+'"');
    113                                                 $.getJSON(api+quoi, {'q':term, 'php':php}, response);
     126                                               
     127                                                // On remplit le tableau à poster
     128                                                params.q = term;
     129                                                params.php = php;
     130                                               
     131                                                // On demande les suggestions
     132                                                $.getJSON(api+quoi, params, response);
    114133                                        },
    115134                                        delay: 300,
  • _plugins_/selecteur_generique/trunk/selecteurgenerique_pipelines.php

    r93510 r95926  
    1616                $plugins[] = 'jquery.ui.position';
    1717                $plugins[] = 'jquery.ui.autocomplete';
     18                $plugins[] = 'jquery.ui.autocomplete.html';
    1819        }
    1920       
Note: See TracChangeset for help on using the changeset viewer.