Changeset 112697 in spip-zone


Ignore:
Timestamp:
Dec 9, 2018, 8:36:18 PM (6 months ago)
Author:
eric@…
Message:

La suite

Location:
_plugins_/n-core/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/n-core/trunk/compiler_noisettes.html

    r110245 r112697  
    1515        @param array  noisettes
    1616               Liste des descriptions de noisette à compiler dans l'ordre de leur rang.
    17         @param string defaut_balise
    18                Valeur à utiliser si la noisette est paramétrée avec la valeur `defaut`.
    1917        @param string stockage
    2018           Identifiant du service de stockage à utiliser si précisé. Dans ce cas, ni celui du plugin
     
    3230                #SET{conteneur, #ARRAY{type_noisette, #VALEUR{type_noisette}, id_noisette, #VALEUR{id_noisette}}}
    3331                <BOUCLE_noisettes_petits_enfants(BOUCLE_noisettes_enfants)></BOUCLE_noisettes_petits_enfants>
    34                 #SET{avec_div, #VALEUR{balise}|=={defaut}|?{#ENV{defaut_balise, oui}, #VALEUR{balise}}}
    35                 [[(#GET{avec_div}|oui)<div class="noisette[ noisette_(#VALEUR{type_noisette})][ (#VALEUR{css})]">]
    36                         (#NOISETTE_COMPILER{#VALEUR{id_noisette}, #ENV{stockage, ''}})
    37                 [(#GET{avec_div}|oui)</div>]]
     32                        [(#NOISETTE_COMPILER{#VALEUR{id_noisette}, #ENV{stockage, ''}})]
    3833        </BOUCLE_noisettes_enfants>
    3934                [</(#GET{balise_conteneur})>]
    4035        </B_noisettes_enfants>
    41         #SET{avec_div, #VALEUR{balise}|=={defaut}|?{#ENV{defaut_balise, oui}, #VALEUR{balise}}}
    42         [[(#GET{avec_div}|oui)<div class="noisette[ noisette_(#VALEUR{type_noisette})][ (#VALEUR{css})]">]
    43                 (#NOISETTE_COMPILER{#VALEUR{id_noisette}, #ENV{stockage, ''}})
    44         [(#GET{avec_div}|oui)</div>]]
     36                [(#NOISETTE_COMPILER{#VALEUR{id_noisette}, #ENV{stockage, ''}})]
    4537</BOUCLE_noisettes>
  • _plugins_/n-core/trunk/ncore/ncore.php

    r110856 r112697  
    748748}
    749749
     750/**
     751 * Renvoie la configuration par défaut de l'encapsulation d'une noisette en mode non auto.
     752 * Cette information est utilisée si le mode d'encapsulation est manuel et si le champ `balise` de la noisette
     753 * vaut `defaut`.
     754 *
     755 * Le service N-Core positionne cette valeur à `div`.
     756 *
     757 * @package SPIP\NCORE\NOISETTE\SERVICE
     758 *
     759 * @uses ncore_chercher_service()
     760 *
     761 * @param string $plugin
     762 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
     763 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     764 *
     765 * @return string
     766 *              VCapsule par defaut qui peut valoir `div` ou `aucune`.
     767 */
     768function ncore_noisette_initialiser_capsule($plugin) {
     769
     770        // On cherche le service de stockage à utiliser selon la logique suivante :
     771        // - si le service de stockage est non vide on l'utilise en considérant que la fonction existe forcément;
     772        // - sinon, on utilise la fonction du plugin appelant si elle existe;
     773        // - et sinon, on utilise la fonction de N-Core.
     774        include_spip('inc/ncore_utils');
     775        if ($configurer = ncore_chercher_service($plugin, 'noisette_initialiser_capsule', '')) {
     776                // On passe le plugin appelant à la fonction car cela permet ainsi de mutualiser les services de stockage.
     777                // On autorise la fonction du plugin à retourner autre chose que true ou false si tant est que l'on puisse
     778                // en déduire un booléen (par exemple, 'on' et '' comme le retourne une case à cocher du plugin Saisies).
     779                $defaut_capsule = $configurer($plugin);
     780        } else {
     781                // Le service ne propose pas de fonction propre, on utilise celle de N-Core.
     782                $defaut_capsule = 'div';
     783        }
     784
     785        return $defaut_capsule;
     786}
     787
    750788
    751789// -----------------------------------------------------------------------
  • _plugins_/n-core/trunk/ncore_fonctions.php

    r112626 r112697  
    77        return;
    88}
     9
     10
     11if (!defined('_NCORE_ENCAPSULATION_AUTO')) {
     12        /**
     13         * Mode d'encapsulation des noisettes.
     14         * Le mode auto applique à chaque noisette une capsule propre au type de noisette ou à défaut la capsule de base.
     15         * Dans ce mode, il n'est plus possible de choisir manuellement l'encapsulation de chaque noisette.
     16         */
     17        define('_NCORE_ENCAPSULATION_AUTO', 'false');
     18}
     19
     20if (!defined('_NCORE_ENCAPSULATION_DEFAUT')) {
     21        /**
     22         * Dans le cas où le mode d'encapsulation auto est inactif, il est possible de choisir noisette par noisette
     23         * le type d'encapsulation. Les noisettes sont initialisés avec la valeur 'defaut' qui fait référence à cette
     24         * constante. N-Core initialise cette valeur à 'div' ce qui provoque l'encapsulation dans une balise div.
     25         */
     26        define('_NCORE_ENCAPSULATION_DEFAUT', 'div');
     27}
     28
    929
    1030// -----------------------------------------------------------------------
     
    278298
    279299
     300/**
     301 * Encapsule, si demandé, le contenu de la noisette issu de la compilation dans un HTML plus ou moins complexe.
     302 *
     303 * @package SPIP\NCORE\NOISETTE\API
     304 *
     305 * @api
     306 * @filtre
     307 *
     308 * @uses ncore_noisette_initialiser_capsule()
     309 *
     310 * @param string $plugin
     311 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
     312 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     313 * @param string $contenu
     314 *        Contenu compilé de la noisette en cours avant encapsulation.
     315 * @param string $balise
     316 *            Indicateur d'encapsulation du contenu par une balise div ou pas.
     317 * @param string $css
     318 *            Styles à intégrer au div d'encapsulation si appliqué.
     319 * @param string $type_noisette
     320 *            Identifiant du type de noisette.
     321 * @param string $stockage
     322 *        Identifiant du service de stockage à utiliser si précisé. Dans ce cas, ni celui du plugin
     323 *        ni celui de N-Core ne seront utilisés. En général, cet identifiant est le préfixe d'un plugin
     324 *        fournissant le service de stockage souhaité.
     325 *
     326 * @return array
     327 *              Le tableau éventuellement vide des éléments de contexte de la noisette.
     328 */
     329function noisette_encapsuler($plugin, $contenu, $balise, $css, $type_noisette, $stockage = '') {
     330
     331        // Initialisation du tableau du HTML des capsules indexé par plugin et nom de capsule.
     332        static $capsules = array();
     333        static $defaut_encapsulation = '';
     334
     335
     336        // Détermination du défaut d'encapsulation en mode non automatique uniquement (non utilisé en mode auto).
     337        if (!_NCORE_ENCAPSULATION_AUTO and !$defaut_encapsulation) {
     338                $defaut_encapsulation = ncore_noisette_initialiser_capsule($plugin);
     339        }
     340
     341        // Si le mode d'encapsulation est positionné à auto ou si le mode d'encapsulation est manuel et que la noisette
     342        // demande explicitement une encapsulation alors encapsule le contenu fourni.
     343        // Sinon on renvoie le contenu compilé de la noisette tel que.
     344        if (_NCORE_ENCAPSULATION_AUTO
     345        or (!_NCORE_ENCAPSULATION_AUTO
     346                and (($balise != 'aucune') or (($balise == 'defaut') and ($defaut_encapsulation != 'aucune'))))) {
     347                // Détermination de la capsule à appliquer
     348                // -- on cherche d'abord une capsule simple non liée au type de noisette.
     349                $fond_capsule = '';
     350                if (!_NCORE_ENCAPSULATION_AUTO
     351                and (($balise != 'auto') or (($balise == 'defaut') and ($defaut_encapsulation != 'auto')))) {
     352                        $fond_capsule = ($balise == 'defaut') ? $defaut_encapsulation : $balise;
     353                        $contexte_capsule = array('type_noisette' => $type_noisette, 'css' => $css);
     354                }
     355
     356                // -- Si la capsule simple n'a pas été trouvée c'est qu'on veut appliquer une capsule liée au type de noisette.
     357                if (!$fond_capsule) {
     358                        // On utilise soit la capsule propre à un type de noisette si elle existe, soit on utilise la capsule
     359                        // par défaut qui porte le nom 'dist'.
     360                        if (find_in_path("capsules/${type_noisette}.html")) {
     361                                $fond_capsule = "capsules/${type_noisette}";
     362                        } else {
     363                                $fond_capsule = 'capsules/dist';
     364                        }
     365                        $contexte_capsule = array('type_noisette' => $type_noisette);
     366                }
     367
     368                // On recherche si la capsule est déjà disponible sinon on la calcule et on la met en cache.
     369                if (!isset($capsules[$plugin][$fond_capsule])) {
     370                        $capsule = recuperer_fond($fond_capsule, $contexte_capsule);
     371                        $capsules[$plugin][$fond_capsule] = $capsule;
     372                }
     373
     374                // On insère le contenu de la noisette dans la capsule qui contient toujours une indication d'insertion explicite.
     375                if ($capsules[$plugin][$fond_capsule]) {
     376                        $contenu = str_replace('<!--noisettes-->', $contenu, $capsules[$plugin][$fond_capsule]);
     377                }
     378        }
     379
     380        return $contenu;
     381}
     382
     383
    280384// -----------------------------------------------------------------------
    281385// ------------------------- BALISES CONTENEURS --------------------------
  • _plugins_/n-core/trunk/paquet.xml

    r111464 r112697  
    22        prefix="ncore"
    33        categorie="outil"
    4         version="0.4.11"
     4        version="0.5.0"
    55        etat="dev"
    66        compatibilite="[3.2.0;3.2.*]"
  • _plugins_/n-core/trunk/public/noisette_compiler.php

    r110859 r112697  
    3939        $type_noisette = champ_sql('type_noisette', $p);
    4040        $parametres = champ_sql('parametres', $p);
     41        $balise = champ_sql('balise', $p);
     42        $css = champ_sql('css', $p);
    4143        $plugin = champ_sql('plugin', $p);
    4244
     
    5456                \".var_export(array('ajax'=>(type_noisette_ajaxifier($plugin, $type_noisette, $stockage))),true).\"
    5557        );?>\"";
    56         $inclusion_statique = "recuperer_fond(
    57                 type_noisette_localiser($plugin, $type_noisette),
    58                 array_merge(unserialize($parametres), noisette_contextualiser($plugin, $noisette, $type_noisette, $environnement, $stockage)),
    59                 array('ajax'=>(type_noisette_ajaxifier($plugin, $type_noisette, $stockage)))
     58        $inclusion_statique = "noisette_encapsuler(
     59                $plugin,
     60                recuperer_fond(
     61                        type_noisette_localiser($plugin, $type_noisette),
     62                        array_merge(unserialize($parametres), noisette_contextualiser($plugin, $noisette, $type_noisette, $environnement, $stockage)),
     63                        array('ajax'=>(type_noisette_ajaxifier($plugin, $type_noisette, $stockage)))
     64                ),
     65                $balise,
     66                $css,
     67                $type_noisette,
     68                $stockage
    6069        )";
    6170        $code = "((type_noisette_dynamiser($plugin, $type_noisette, $stockage)) ? $inclusion_dynamique : $inclusion_statique)";
Note: See TracChangeset for help on using the changeset viewer.