/** * Minifier un fichier JS ou CSS * * Si la source est un chemin, on retourne un chemin avec le contenu minifié * dans _DIR_VAR/cache_$format/ * Si c'est un flux on le renvoit compacté * Si on ne sait pas compacter, on renvoie ce qu'on a recu * * @param string $source * Contenu à minifier ou chemin vers un fichier dont on veut minifier le contenu * @param string $format * Format de la source (js|css). * @return string * - Contenu minifié (si la source est un contenu) * - Chemin vers un fichier ayant le contenu minifié (si source est un fichier) */ function minifier($source, $format = null) { if (!$format and preg_match(',\\.(js|css)$,', $source, $r)) { $format = $r[1]; } include_spip('inc/compresseur_minifier'); if (!function_exists($minifier = 'minifier_' . $format)) { return $source; } // Si on n'importe pas, est-ce un fichier ? if (!preg_match(',[\\s{}],', $source) and preg_match(',\\.' . $format . '$,i', $source, $r) and file_exists($source)) { // si c'est une css, il faut reecrire les url en absolu if ($format == 'css') { $source = url_absolue_css($source); } $f = basename($source, '.' . $format); $f = sous_repertoire(_DIR_VAR, 'cache-' . $format) . preg_replace(",(.*?)(_rtl|_ltr)?\$,", "\\1-minify-" . substr(md5("{$source}-minify"), 0, 4) . "\\2", $f, 1) . '.' . $format; if (@filemtime($f) > @filemtime($source) and (!defined('_VAR_MODE') or _VAR_MODE != 'recalcul')) { return $f; } if (!lire_fichier($source, $contenu)) { return $source; } // traiter le contenu $contenu = $minifier($contenu); // ecrire le fichier destination, en cas d'echec renvoyer la source if (ecrire_fichier($f, $contenu, true)) { return $f; } else { return $source; } } // Sinon simple minification de contenu return $minifier($source); }
function compacte($source, $format = null) { if (!$format AND preg_match(',\.(js|css)$,', $source, $r)) $format = $r[1]; include_spip('inc/compresseur'); if (!function_exists($compacte = 'compacte_'.$format)) return $source; // Si on n'importe pas, est-ce un fichier ? if (!preg_match(',[\s{}],', $source) AND preg_match(',\.'.$format.'$,i', $source, $r) AND file_exists($source)) { // si c'est une css, il faut reecrire les url en absolu if ($format=='css') $source = url_absolue_css($source); $f = basename($source,'.'.$format); $f = sous_repertoire (_DIR_VAR, 'cache-'.$format) . preg_replace(",(.*?)(_rtl|_ltr)?$,","\\1-compacte-" . substr(md5("$source-compacte"), 0,4) . "\\2", $f, 1) . '.' . $format; if ((@filemtime($f) > @filemtime($source)) AND ($GLOBALS['var_mode'] != 'recalcul')) return $f; if (!lire_fichier($source, $contenu)) return $source; // traiter le contenu $contenu = $compacte($contenu); // ecrire le fichier destination, en cas d'echec renvoyer la source if (ecrire_fichier($f, $contenu, true)) return $f; else return $source; } // Sinon simple compactage de contenu return $compacte($source); }
/** * http://doc.spip.org/@install_debut_html * * @param string $titre * @param string $onLoad * @param bool $all_inline * inliner les css et js dans la page (limiter le nombre de hits) * @return string */ function install_debut_html($titre = 'AUTO', $onLoad = '', $all_inline = false) { global $spip_lang_right, $spip_lang_left; utiliser_langue_visiteur(); http_no_cache(); if ($titre == 'AUTO') { $titre = _T('info_installation_systeme_publication'); } # le charset est en utf-8, pour recuperer le nom comme il faut # lors de l'installation if (!headers_sent()) { header('Content-Type: text/html; charset=utf-8'); } $css = ""; $files = array('reset.css', 'clear.css', 'minipres.css'); if ($all_inline) { // inliner les CSS (optimisation de la page minipres qui passe en un seul hit a la demande) foreach ($files as $name) { $file = direction_css(find_in_theme($name)); if (function_exists("compacte")) { $file = compacte($file); } else { $file = url_absolue_css($file); } // precaution lire_fichier($file, $c); $css .= $c; } $css = "<style type='text/css'>" . $css . "</style>"; } else { foreach ($files as $name) { $file = direction_css(find_in_theme($name)); $css .= "<link rel='stylesheet' href='{$file}' type='text/css' />\n"; } } // au cas ou minipres() est appele avant spip_initialisation_suite() if (!defined('_DOCTYPE_ECRIRE')) { define('_DOCTYPE_ECRIRE', ''); } return _DOCTYPE_ECRIRE . html_lang_attributes() . "<head>\n" . "<title>" . textebrut($titre) . "</title>\n" . "<meta name='viewport' content='width=device-width' />\n" . $css . "</head>\n<body" . $onLoad . " class='minipres'>\n\t<div id='minipres'>\n\t<h1>" . $titre . "</h1>\n\t<div>\n"; }