Changeset 112725 in spip-zone


Ignore:
Timestamp:
Dec 11, 2018, 4:24:37 PM (2 months ago)
Author:
eric@…
Message:

On simplifie la gestion des capsules.
Attention cette version va casser le noiZetier tant que celui-ci ne sera pas mis à jour complètement. Attendre donc avant de l'utiliser !!!!

Location:
_plugins_/n-core/trunk
Files:
1 deleted
8 edited

Legend:

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

    r112696 r112725  
    1 <div class="noisette[ noisette_(#ENV{type_noisette})]">
     1<div class="noisette[ noisette_(#ENV{type_noisette})][ (#ENV{css})]">
    22        <!--noisettes-->
    33</div>
  • _plugins_/n-core/trunk/compiler_conteneur.html

    r110245 r112725  
    1 [(#REM) <!--  #COMPILER_CONTENEUR
     1[(#REM) <!--  COMPILER_CONTENEUR
    22
    33        Compile les noisettes d'un conteneur fourni en paramètre de l'inclusion.
  • _plugins_/n-core/trunk/compiler_noisettes.html

    r112697 r112725  
    1 [(#REM) <!--  #COMPILER_NOISETTES
     1[(#REM) <!--  COMPILER_NOISETTES
    22
    33        Compile une liste de noisettes fournies en paramètres de l'inclusion et gère de fait l'utilisation
  • _plugins_/n-core/trunk/inc/ncore_noisette.php

    r111464 r112725  
    7777                        'est_conteneur' => type_noisette_lire($plugin, $type_noisette, 'conteneur', false, $stockage),
    7878                        'parametres'    => serialize($parametres),
    79                         'balise'        => 'defaut',
     79                        'encapsulation' => 'defaut',
    8080                        'css'           => ''
    8181                );
     
    8484                // -- pas de div englobante.
    8585                if ($description['est_conteneur'] == 'oui') {
    86                         $description['balise'] = 'non';
     86                        $description['encapsulation'] = 'non';
    8787                }
    8888
     
    172172
    173173                // On contrôle les champs éditables et on met à jour la description de la noisette.
    174                 $parametres = array_merge(array('parametres', 'balise', 'css'), $editables_specifiques);
     174                $parametres = array_merge(array('parametres', 'encapsulation', 'css'), $editables_specifiques);
    175175                $modifications = array_intersect_key($modifications, array_flip($parametres));
    176176                $description = array_merge($description, $modifications);
  • _plugins_/n-core/trunk/ncore/ncore.php

    r112697 r112725  
    749749
    750750/**
    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`.
     751 * Renvoie la configuration par défaut de l'encapsulation d'une noisette.
     752 * Cette information est utilisée si le champ `balise` de la noisette vaut `defaut`.
     753 *
     754 * Le service N-Core positionne cette valeur à `true`.
    756755 *
    757756 * @package SPIP\NCORE\NOISETTE\SERVICE
     
    763762 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    764763 *
    765  * @return string
    766  *              VCapsule par defaut qui peut valoir `div` ou `aucune`.
    767  */
    768 function 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', '')) {
     764 * @return bool
     765 *              `true` si par défaut une noisette est encapsulée, `false` sinon.
     766 */
     767function ncore_noisette_initialiser_encapsulation($plugin) {
     768
     769        // On cherche le service de stockage à utiliser selon la logique suivante :
     770        // - si le service de stockage est non vide on l'utilise en considérant que la fonction existe forcément;
     771        // - sinon, on utilise la fonction du plugin appelant si elle existe;
     772        // - et sinon, on utilise la fonction de N-Core.
     773        include_spip('inc/ncore_utils');
     774        if ($configurer = ncore_chercher_service($plugin, 'noisette_initialiser_encapsulation', '')) {
    776775                // On passe le plugin appelant à la fonction car cela permet ainsi de mutualiser les services de stockage.
    777776                // On autorise la fonction du plugin à retourner autre chose que true ou false si tant est que l'on puisse
    778777                // en déduire un booléen (par exemple, 'on' et '' comme le retourne une case à cocher du plugin Saisies).
    779                 $defaut_capsule = $configurer($plugin);
     778                $defaut_capsule = $configurer($plugin) ? true : false;
    780779        } else {
    781780                // Le service ne propose pas de fonction propre, on utilise celle de N-Core.
    782                 $defaut_capsule = 'div';
     781                $defaut_capsule = true;
    783782        }
    784783
  • _plugins_/n-core/trunk/ncore_fonctions.php

    r112697 r112725  
    66if (!defined('_ECRIRE_INC_VERSION')) {
    77        return;
    8 }
    9 
    10 
    11 if (!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 
    20 if (!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');
    278}
    289
     
    306287 * @filtre
    307288 *
    308  * @uses ncore_noisette_initialiser_capsule()
     289 * @uses ncore_noisette_initialiser_encapsulation()
    309290 *
    310291 * @param string $plugin
     
    313294 * @param string $contenu
    314295 *        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.
     296 * @param string $encapsulation
     297 *            Indicateur d'encapsulation du contenu par un capsule ou pas.
    317298 * @param string $css
    318  *            Styles à intégrer au div d'encapsulation si appliqué.
     299 *            Styles à intégrer à la capsule.
     300 * @param mixed  $id_noisette
     301 *            Identifiant de la noisette.
    319302 * @param string $type_noisette
    320303 *            Identifiant du type de noisette.
     
    324307 *        fournissant le service de stockage souhaité.
    325308 *
    326  * @return array
    327  *              Le tableau éventuellement vide des éléments de contexte de la noisette.
    328  */
    329 function noisette_encapsuler($plugin, $contenu, $balise, $css, $type_noisette, $stockage = '') {
     309 * @return string
     310 *              Le contenu de la noisette encapsulé dans du HTML ou tel que fourni en entrée si pas d'encapsulation.
     311 */
     312function noisette_encapsuler($plugin, $contenu, $encapsulation, $css, $id_noisette, $type_noisette, $stockage = '') {
    330313
    331314        // 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'))))) {
     315        static $defaut_encapsulation = array();
     316        static $capsule_dist = array();
     317
     318        // Détermination du défaut d'encapsulation.
     319        if (!isset($defaut_encapsulation[$plugin])) {
     320                $defaut_encapsulation[$plugin] = ncore_noisette_initialiser_encapsulation($plugin);
     321        }
     322
     323        if (($encapsulation != 'non') or (($encapsulation == 'defaut') and ($defaut_encapsulation[$plugin]))) {
    347324                // 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                         }
     325                // On utilise soit la capsule propre à un type de noisette si elle existe, soit on utilise la capsule
     326                // par défaut qui porte le nom 'dist'.
     327                if (find_in_path("capsules/${type_noisette}.html")) {
     328                        $nom_capsule = $type_noisette;
     329                        $contexte_capsule = array('id_noisette' => $id_noisette, 'type_noisette' => $type_noisette, 'css' => $css);
     330                } else {
     331                        $nom_capsule = 'dist';
    365332                        $contexte_capsule = array('type_noisette' => $type_noisette);
    366333                }
    367334
    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;
     335                // Si on veut insérer la capsule dist (cas le plus fréquent), on accélère le processus en évitant de
     336                // faire systématiquement un appel à recuperer_fond mais seulement une fois dans un même hit.
     337                // On met donc en variable statique la capsule dist compilée avec uniquement le type de noisette évalué, mais pas les styles
     338                // et on applique les styles avec un str_replace étant donné que l'on connait la structure de la capsule dist qui n'est jamais
     339                // modifiée ni surchargée.
     340                if ($capsule == 'dist') {
     341                        if (!isset($capsule_dist[$plugin])) {
     342                                $capsule = recuperer_fond("capsules/${nom_capsule}", $contexte_capsule);
     343                                $capsule_dist[$plugin] = $capsule;
     344                        }
     345                        $style_dist = $css ? " $css" : '';
     346                        $capsule = str_replace('[ (#ENV{css})]', $style_dist, $capsule_dist[$plugin]);
     347                } else {
     348                        $capsule = recuperer_fond("capsules/${nom_capsule}", $contexte_capsule);
    372349                }
    373350
    374351                // 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                 }
     352                $contenu = str_replace('<!--noisettes-->', $contenu, capsule);
    378353        }
    379354
     
    381356}
    382357
    383 
     358 
    384359// -----------------------------------------------------------------------
    385360// ------------------------- BALISES CONTENEURS --------------------------
  • _plugins_/n-core/trunk/paquet.xml

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

    r112697 r112725  
    3838        // On extrait les autres informations de la noisette
    3939        $type_noisette = champ_sql('type_noisette', $p);
     40        $est_conteneur = champ_sql('est_conteneur', $p);
    4041        $parametres = champ_sql('parametres', $p);
    41         $balise = champ_sql('balise', $p);
     42        $encapsulation = champ_sql('encapsulation', $p);
    4243        $css = champ_sql('css', $p);
    4344        $plugin = champ_sql('plugin', $p);
     
    6364                        array('ajax'=>(type_noisette_ajaxifier($plugin, $type_noisette, $stockage)))
    6465                ),
    65                 $balise,
     66                $encapsulation,
    6667                $css,
     68                $id_noisette,
    6769                $type_noisette,
    6870                $stockage
Note: See TracChangeset for help on using the changeset viewer.