source: spip-zone/_plugins_/skeleditor/trunk/skeleditor_pipelines.php @ 51702

Last change on this file since 51702 was 51702, checked in by cedric@…, 8 years ago

Rangement et nettoyage.
il ne faut pas inserer le js/css de codemiror dans le head de l'espace prive car cela oblige le compresseur a tout recompresse
a chaque type de fichier, et qui plus est cela interdit toute possibilite d'ajax.
(qui plus est la compression semble casser codemiror)

On reintroduit une insertion en fin de page, que l'on va reoptimiser ensuite.

File size: 4.2 KB
Line 
1<?php
2/**
3 * Plugin SkelEditor
4 * Editeur de squelette en ligne
5 * (c) 2007-2010 erational
6 * Licence GPL-v3
7 *
8 */
9 
10
11
12/**
13 * Tester avec _request si on est dans l'edition de skeleditor et si oui, retourne l'extension du nom du fichier
14 *
15 * @return string
16 */ 
17function test_skeleditor_edition() {
18$exec = _request('exec');
19$filename = _request('f');
20        if ($exec == 'skeleditor'
21        AND $filename
22        AND $infos = pathinfo($filename)
23        AND $extension = $infos['extension']) 
24        return $extension;
25        else
26        return false;
27       
28} 
29
30/**
31 * Produit les css dans le header_prive si nécessaire
32 *
33 * @param string $flux
34 * @return string
35 */ 
36function skeleditor_insert_head_css($flux){
37        $extension = test_skeleditor_edition();
38                if($extension) {
39                static $done = false;
40                if (!$done) {
41                        $done = true;
42                        $type = "css";
43                        $css = skeleditor_dir($extension, $type);
44                        $flux .= $css; 
45                }
46        }
47return $flux;
48}
49 
50/**
51 * Produit les js dans le header_prive si nécessaire
52 *
53 * @param string $flux
54 * @return string
55 */ 
56function skeleditor_insert_head($flux){
57/*
58        $extension = test_skeleditor_edition();
59                if($extension) {
60                $type = "js";
61                $script = skeleditor_dir($extension, $type);
62                $flux = skeleditor_insert_head_css($flux); // au cas ou il n'est pas implemente
63                $flux .= $script;
64                }*/
65        return $flux;
66}
67
68// pas de compresseur si var_inclure
69if (_request('var_mode')=='inclure')
70        define('_INTERDIRE_COMPACTE_HEAD',true);
71
72function skeleditor_extraire_css($texte){
73        $url_base = url_de_base();
74        $url_page = substr(generer_url_public('A'), 0, -1);
75        $dir = preg_quote($url_page,',').'|'.preg_quote(preg_replace(",^$url_base,",_DIR_RACINE,$url_page),',');
76
77        $css = array();
78        // trouver toutes les css pour les afficher dans le bouton
79        // repris du compresseur
80        foreach (extraire_balises($texte, 'link') as $s) {
81                if (extraire_attribut($s, 'rel') === 'stylesheet'
82                AND (!($type = extraire_attribut($s, 'type'))
83                        OR $type == 'text/css')
84                AND !strlen(strip_tags($s))
85                AND $src = preg_replace(",^$url_base,",_DIR_RACINE,extraire_attribut($s, 'href'))
86                AND (
87                        // regarder si c'est du format spip.php?page=xxx
88                        preg_match(',^('.$dir.')(.*)$,', $src, $r)
89                        OR (
90                                // ou si c'est un fichier
91                                // enlever un timestamp eventuel derriere un nom de fichier statique
92                                $src2 = preg_replace(",[.]css[?].+$,",'.css',$src)
93                                // verifier qu'il n'y a pas de ../ ni / au debut (securite)
94                                AND !preg_match(',(^/|\.\.),', substr($src2,strlen(_DIR_RACINE)))
95                                // et si il est lisible
96                                AND @is_readable($src2)
97                        )
98                )) {
99                        if ($r)
100                                $css[$s] = explode('&',
101                                        str_replace('&amp;', '&', $r[2]), 2);
102                        else
103                                $css[$s] = $src;
104                }
105        }
106        return $css;
107}
108
109function skeleditor_affichage_final($texte){
110        if (isset($_COOKIE['spip_admin']) AND $GLOBALS['html']){
111                if ((defined('_VAR_INCLURE') AND _VAR_INCLURE) OR $GLOBALS['var_inclure']){
112                        $retour = self();
113                        $url = generer_url_ecrire('skeleditor','retour='.$retour.'&f=');                       
114                        $inserer = "<script type='text/javascript'>jQuery(function(){jQuery('.inclure_blocs h6:first-child').each(function(){
115                                jQuery(this).html(\"<a href='$url\"+jQuery(this).html()+\"'>\"+jQuery(this).html()+'<'+'/a>');
116                        })});</script></body>";
117                        $texte = preg_replace(",</body>,",$inserer,$texte);
118                       
119                        $css = skeleditor_extraire_css($texte);
120                        $lienplus = array();
121                        foreach($css as $src){
122                                // si c'est un skel, le trouver
123                                if (is_array($src))
124                                        $src = find_in_path($src."."._EXTENSION_SQUELETTES);
125                                if ($src)
126                                        $lienplus[] = "<a href='$url".urlencode($src)."'"
127                        .">".basename($src)."<\/a>";
128                        }
129                        if (count($lienplus)){
130                                $lienplus = implode('<br />',$lienplus);
131                                $lienplus = "<span class='spip-admin-boutons' id='inclure'>$lienplus<\/span>";
132                        };
133
134                } else {
135                        $lienplus = "<a href='".parametre_url(self(),'var_mode','inclure')."' class='spip-admin-boutons' "
136                        ."id='inclure'>"._T('skeleditor:squelettes')."<\/a>";
137                }
138                if ($lienplus)
139                        $inserer = "<script type='text/javascript'>/*<![CDATA[*/jQuery(function(){jQuery('#spip-admin').append(\"$lienplus\");});/*]]>*/</script></body>";
140                        $texte = preg_replace(",</body>,",$inserer,$texte);
141        }
142        return $texte;
143}
144
145
146?>
Note: See TracBrowser for help on using the repository browser.