Changeset 41900 in spip-zone


Ignore:
Timestamp:
Oct 25, 2010, 12:58:04 AM (11 years ago)
Author:
patfr@…
Message:

Le header du Couteau Suisse est désormais totalement compilé et mis en cache (le CSS et le JS séparément)
L'espace public/prive est pris en compte et cela n'oblige plus les urls absolues pour les appels CSS et JS

Location:
_plugins_/couteau_suisse
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/couteau_suisse/cout_pipelines.php

    r40655 r41900  
    5757        $flux = '';
    5858        if(isset($cs_metas_pipelines['header_prive'])) eval($cs_metas_pipelines['header_prive']);
    59         cs_compile_header($flux,'css', false); cs_compile_header($flux,'js');
     59        cs_compile_header($flux,'css', '_prive', false); cs_compile_header($flux, 'js', '_prive');
    6060        return $flux_ . $flux;
    6161}
     
    8181        $flux = '';
    8282        if(isset($cs_metas_pipelines['insert_head'])) eval($cs_metas_pipelines['insert_head']);
    83         cs_compile_header($flux,'js');
     83        cs_compile_header($flux, 'js');
    8484        return $flux_
    8585                . couteau_suisse_insert_head_css() // en cas d'absence de balise #INSERT_HEAD_CSS
     
    222222// recherche et compilation par SPIP du contenu d'un fichier .html : <cs_html>contenu</cs_html>
    223223// $type = 'css' ou 'js'
    224 function cs_compile_header(&$flux, $type, $rem=true) {
     224function cs_compile_header(&$flux, $type_, $suffixe='', $rem=true) {
    225225//if(defined('_LOG_CS')) cs_log(" -- recherche de compilations necessaires du header.");
    226226        global $cs_metas_pipelines;
    227         $type = 'header_'.$type;
    228         if(isset($cs_metas_pipelines[$type])) {
     227        if(isset($cs_metas_pipelines[$type = 'header_'.$type_.$suffixe])) {
    229228                $header = &$cs_metas_pipelines[$type];
    230229                if(strpos($header, '<cs_html>')!==false) {
     
    233232                        ecrire_meta('tweaks_pipelines', serialize($cs_metas_pipelines));
    234233                        ecrire_metas();
    235                         ecrire_fichier(_DIR_CS_TMP.$type.'.html', "<!-- Configuration de controle pour le plugin 'Couteau Suisse' -->\n\n$header");
     234                        ecrire_fichier(_DIR_CS_TMP.$type.'.html', "<!-- Fichier de controle $type_ pour le plugin 'Couteau Suisse' -->\n\n$header");
    236235                }
    237236                $flux .= $header;
    238237        }
    239         if($rem) $flux = strlen(trim($flux))
    240                 ?"\n<!-- Debut CS -->\n$flux\n<!-- Fin CS -->\n\n":"\n<!-- CS vide -->\n\n";
    241 
     238        if($rem)
     239                $flux = strlen(trim($flux))?"\n<!-- Debut CS -->\n$flux\n<!-- Fin CS -->\n\n":"\n<!-- CS vide -->\n\n";
     240}
     241
     242// construction d'un hit
     243// (recherche et compilation par SPIP du contenu d'un fichier .html : <cs_html>contenu</cs_html>)
     244// $type = 'css' ou 'js'
     245function cs_header_hit(&$flux, $type, $suffixe='') {
     246        $f = "header$suffixe.$type";
     247        $nom = sous_repertoire(_DIR_VAR,'couteau-suisse') . $f;
     248        $tmp = _DIR_CS_TMP . $f;
     249        if(!file_exists($tmp) || !file_exists($nom) || $GLOBALS['var_mode']=='recalcul') {
     250                if (lire_fichier(_DIR_CS_TMP."header.$type.html", $t) && strlen($t)) {
     251                        if(strpos($t, '<cs_html>')!==false)
     252                                $t = preg_replace_callback(',<cs_html>(.*)</cs_html>,Ums', 'cs_compile_header_callback', $t);
     253                        ecrire_fichier($nom, $t, true);
     254                        ecrire_fichier($tmp, $t, true);
     255                } else {
     256                        if(defined('_LOG_CS')) cs_log(" -- fichier $fo illisible. hit non construit");
     257                        return;
     258                }
     259        }
     260        switch($type) {
     261                case 'js': $flux .= '<script src="'.$nom.'" type="text/javascript"></script>'; break;
     262                case 'css': $flux .= '<link rel="stylesheet" href="'.direction_css($nom).'" type="text/css" media="projection, screen" />'; break;
     263        }
    242264}
    243265
  • _plugins_/couteau_suisse/cout_utils.php

    r40927 r41900  
    271271}
    272272
    273 // met en forme le fichier $f en vue d'un insertion en head
    274 function cs_insert_header($f, $type) {
    275         if($type=='css') {
    276                 include_spip('inc/filtres');
    277                 return '<link rel="stylesheet" href="'.url_absolue(direction_css($f)).'" type="text/css" media="projection, screen" />';
    278         } elseif($type=='js')
    279                 return '<script type="text/javascript" src="'.url_absolue($f).'"></script>';
    280 }
    281273// sauve la configuration dans un fichier tmp/couteau-suisse/config.php
    282274function cs_sauve_configuration() {
     
    323315        // variables temporaires
    324316        $temp_js_html = $temp_css_html = $temp_css = $temp_js = $temp_jq = $temp_jq_init = $temp_filtre_imprimer = array();
     317        @define('_CS_HIT_EXTERNE', 1500);
    325318        // inclure d'office outils/cout_fonctions.php
    326319        if($temp=cs_lire_fichier_php("outils/cout_fonctions.php"))
     
    350343                                }
    351344                        }
    352                         // recherche d'un fichier .css, .css.html et/ou .js eventuellement present dans outils/
    353                         // TODO : librairies distantes placees dans lib/
     345                        // recherche des fichiers .css, .css.html, .js et .js.html eventuellement present dans outils/
    354346                        foreach(array('css', 'js') as $f) {
    355                                 if($file=find_in_path("outils/$inc.$f")) $cs_metas_pipelines['header_'.$f][] = cs_insert_header($file, $f);
    356 /*                              if(isset($outil['distant_'.$type]) && (file=find_in_path("lib/$inc/distant_{$f}_".basename($outil["distant_$f"]))))
    357                                         $cs_metas_pipelines['header_'.$f][] = cs_insert_header($file, $f);
    358 */                      }
    359                         // en fait on peut pas compiler ici car les balises vont devoir etre traitees et les traitements ne sont pas encore dispo !
    360                         // le code est mis de cote. il sera compile plus tard au moment du pipeline grace a cs_compile_header()
    361                         if($f=find_in_path("outils/$inc.css.html")) { lire_fichier($f, $ff); $temp_css_html[] = $ff; }
    362                         if($f=find_in_path("outils/$inc.js.html")) { lire_fichier($f, $ff); $temp_js_html[] = $ff; }
     347                                if($file=find_in_path("outils/$inc.$f")) { lire_fichier($file, $ff); ${'temp_'.$f}[] = $ff; }
     348                                // en fait on ne peut pas compiler ici car les balises vont devoir etre traitees et les traitements ne sont pas encore dispo !
     349                                // le code est mis de cote. il sera compile plus tard au moment du pipeline grace a cs_compile_header()
     350                                if($file=find_in_path("outils/$inc.$f.html")) { lire_fichier($file, $ff); ${'temp_'.$f.'_html'}[] = $ff; }
     351                                // TODO : librairies distantes placees dans lib/
     352/*                              if(isset($outil['distant_'.$type]) && ($file=find_in_path("lib/$inc/distant_{$f}_".basename($outil["distant_$f"])))) etc. */
     353                        }
    363354                        // recherche d'un code inline eventuellement propose
    364355                        if(isset($outil['code:spip_options'])) $infos_fichiers['code_spip_options'][] = $outil['code:spip_options'];
     
    403394        if(strlen(trim($temp_css = join("\n", $temp_css)))) {
    404395                if(function_exists('compacte_css')) $temp_css = compacte_css($temp_css);
    405                 $temp = array("<style type=\"text/css\">\n$temp_css\n</style>");
     396                if(strlen($temp_css)>_CS_HIT_EXTERNE) {
     397                        // hit externe
     398                        $cs_metas_pipelines['header_css_ext'] = $temp_css;
     399                } else {
     400                        // css inline
     401                        $temp = array("<style type=\"text/css\">\n$temp_css\n</style>");
     402                        if(is_array($cs_metas_pipelines['header_css'])) $temp = array_merge($temp, $cs_metas_pipelines['header_css']);
     403                        $cs_metas_pipelines['header_css'] = $cs_metas_pipelines['header_css_prive'] = join("\n", $temp);
     404                }
    406405                unset($temp_css);
    407                 $cs_metas_pipelines['header_css'] = is_array($cs_metas_pipelines['header_css'])?array_merge($temp, $cs_metas_pipelines['header_css']):$temp;
    408406        }
    409407        if(count($temp_jq_init)) {
     
    413411        }
    414412        $temp_jq = count($temp_jq)?"\njQuery(document).ready(function(){\n\t".join("\n\t", $temp_jq)."\n});":'';
    415         $temp_js[] = "if(window.jQuery) {\nvar cs_sel_jQuery=typeof jQuery(document).selector=='undefined'?'@':'';\nvar cs_CookiePlugin=\"".url_absolue(find_in_path('javascript/jquery.cookie.js'))."\";$temp_jq\n}";
     413        $temp_js[] = "if(window.jQuery) {\nvar cs_sel_jQuery=typeof jQuery(document).selector=='undefined'?'@':'';\nvar cs_CookiePlugin=\"<cs_html>#CHEMIN{javascript/jquery.cookie.js}</cs_html>\";$temp_jq\n}";
    416414        unset($temp_jq);
    417415        if(count($temp_js)) {
    418                 $temp_js = join("\n", $temp_js);
     416                $prive = function_exists('test_espace_prive')?test_espace_prive()
     417                        // compatibilite pour SPIP 1.92
     418                        :(defined('_DIR_RESTREINT') ? !_DIR_RESTREINT : false);
     419                $temp_js = 'var cs_prive='.($prive?'1':'0').";\njQuery.fn.cs_todo=function(){return this.not('.cs_done').addClass('cs_done');};\n" . join("\n", $temp_js);
    419420                if(function_exists('compacte_js')) $temp_js = compacte_js($temp_js);
    420                 $temp = array("<script type=\"text/javascript\"><!--
    421 var cs_prive=window.location.pathname.match(/\\/ecrire\\/\$/)!=null;
    422 jQuery.fn.cs_todo=function(){return this.not('.cs_done').addClass('cs_done');};
    423 $temp_js\n// --></script>\n");
     421                if(strlen($temp_js)>_CS_HIT_EXTERNE) {
     422                        // hit externe
     423                        $cs_metas_pipelines['header_js_ext'] = $temp_js;
     424                } else {
     425                        // js inline
     426                        $temp = array("<script type=\"text/javascript\"><!--\n$temp_js\n// --></script>\n");
     427                        if(is_array($cs_metas_pipelines['header_js'])) $temp = array_merge($temp, $cs_metas_pipelines['header_js']);
     428                        $cs_metas_pipelines['header_js'] = $cs_metas_pipelines['header_js_prive'] = join("\n", $temp);
     429                }
    424430                unset($temp_js);
    425                 $cs_metas_pipelines['header_js'] = is_array($cs_metas_pipelines['header_js'])?array_merge($temp, $cs_metas_pipelines['header_js']):$temp;
    426         }
     431        }
     432        // effacement du repertoire temporaire de controle
     433        if(@file_exists(_DIR_CS_TMP) && ($handle = @opendir(_DIR_CS_TMP))) {
     434                while (($fichier = @readdir($handle)) !== false)
     435                        if($fichier[0] != '.')  supprimer_fichier(_DIR_CS_TMP.$fichier);
     436                closedir($handle);
     437        } else spip_log('Erreur - cs_initialise_includes() : '._DIR_CS_TMP.' introuvable !');
    427438        // join final...
    428         foreach(array('header_css', 'header_js') as $f)
    429                 if(is_array($cs_metas_pipelines[$f])) $cs_metas_pipelines[$f] = join("\n", $cs_metas_pipelines[$f]);
     439        foreach(array('css', 'js') as $type) {
     440                $f = 'header_'.$type;
     441                if(isset($cs_metas_pipelines[$temp = $f.'_ext'])) {
     442                        $fichier_dest = _DIR_CS_TMP . "header.$type.html";
     443                        if(!ecrire_fichier($fichier_dest, $cs_metas_pipelines[$temp], true)) cs_log("ERREUR ECRITURE : $fichier_dest");
     444                        unset($cs_metas_pipelines[$temp]);
     445                        $infos_pipelines['header_prive']['inline'][] = "cs_header_hit(\$flux, '$type', '_prive');";
     446                        $infos_pipelines['insert_head'.($type=='css'?'_css':'')]['inline'][] = "cs_header_hit(\$flux, '$type');";
     447                }
     448        }
    430449        // SPIP 2.0 ajoute les parametres "TYPO" et $connect aux fonctions typo() et propre()
    431450        $liste_pivots = defined('_SPIP19300')
     
    479498                $infos_fichiers['code_options'][] = "\n// Table des traitements\n" . join("\n", $traitements_utilises);
    480499        $infos_fichiers['code_options'][] = "\$GLOBALS['cs_post_propre']=$traitements_post_propre;";
    481         // effacement du repertoire temporaire de controle
    482         if(@file_exists(_DIR_CS_TMP) && ($handle = @opendir(_DIR_CS_TMP))) {
    483                 while (($fichier = @readdir($handle)) !== false)
    484                         if($fichier[0] != '.')  supprimer_fichier(_DIR_CS_TMP.$fichier);
    485                 closedir($handle);
    486         } else spip_log('Erreur - cs_initialise_includes() : '._DIR_CS_TMP.' introuvable !');
    487500        // ecriture des fichiers mes_options et mes_fonctions
    488501        ecrire_fichier_en_tmp($infos_fichiers, 'spip_options');
  • _plugins_/couteau_suisse/outils/devdebug_options.php

    r41312 r41900  
    1717                $prive = function_exists('test_espace_prive')
    1818                        ?test_espace_prive()
    19                         // compatibilite pour avant 2.0
     19                        // compatibilite pour SPIP 1.92
    2020                        :(defined('_DIR_RESTREINT') ? !_DIR_RESTREINT : false);
    2121                // Les liens d'erreur generes par PHP renvoient ... en local ! dans le php.ini standard
  • _plugins_/couteau_suisse/outils/interface_config.xml

    r35790 r41900  
    149149                <fonction>icone_visiter_header_prive</fonction>
    150150        </pipeline>
    151         <pipeline>
    152                 <nom>header_prive2</nom>
    153                 <script_php>icone_visiter_header_prive2</script_php>
    154         </pipeline>
    155151</outil>
    156152
  • _plugins_/couteau_suisse/plugin.xml

    r41312 r41900  
    22        <nom><multi>Swiss Knife[fr]Le Couteau Suisse[ca]El Ganivet Su&#237;s[ar]&#1587;&#1603;&#1610;&#1606; &#1575;&#1604;&#1580;&#1610;&#1576;[nl]Het Zwitserland Mes[gl]A navalla su&#237;za[es]La Navaja Suiza[de]Schweizer Taschenmesser[tr]&#304;svi&#231;re &#199;ak&#305;s&#305;[br]Ar Gontell Suis[pt_br]Canivete Su&#237;&#231;o[ast]La Navaya Suiza[gl]A navalla su&#237;za[ro]Cu&#355;itul Elve&#355;ian[it]Coltellino Svizzero</multi></nom>
    33        <icon>img/couteau-50.gif</icon>
    4         <version>1.8.24.00</version>
     4        <version>1.8.25.00</version>
    55        <version_base>1.0</version_base>
    66        <auteur>Patrice Vanneufville
Note: See TracChangeset for help on using the changeset viewer.