Ejemplo n.º 1
0
 /**
  * Minify a CSS string
  * 
  * @param string $css
  * 
  * @param array $options available options:
  * 
  * 'preserveComments': (default true) multi-line comments that begin
  * with "/*!" will be preserved with newlines before and after to
  * enhance readability.
  * 
  * 'prependRelativePath': (default null) if given, this string will be
  * prepended to all relative URIs in import/url declarations
  * 
  * 'currentDir': (default null) if given, this is assumed to be the
  * directory of the current CSS file. Using this, minify will rewrite
  * all relative URIs in import/url declarations to correctly point to
  * the desired files. For this to work, the files *must* exist and be
  * visible by the PHP process.
  *
  * 'symlinks': (default = array()) If the CSS file is stored in 
  * a symlink-ed directory, provide an array of link paths to
  * target paths, where the link paths are within the document root. Because 
  * paths need to be normalized for this to work, use "//" to substitute 
  * the doc root in the link paths (the array keys). E.g.:
  * <code>
  * array('//symlink' => '/real/target/path') // unix
  * array('//static' => 'D:\\staticStorage')  // Windows
  * </code>
  * 
  * @return string
  */
 public static function minify($css, $options = array())
 {
     if (isset($options['preserveComments']) && !$options['preserveComments']) {
         $css = Paiva_Minify_CSS_Compressor::process($css, $options);
     } else {
         $css = Paiva_Minify_CSS_Comment::process($css, array('Paiva_Minify_CSS_Compressor', 'process'), array($options));
     }
     if (!isset($options['currentDir']) && !isset($options['prependRelativePath'])) {
         return $css;
     }
     if (isset($options['currentDir'])) {
         return Paiva_Minify_CSS_UriRewriter::rewrite($css, $options['currentDir'], isset($options['docRoot']) ? $options['docRoot'] : $_SERVER['DOCUMENT_ROOT'], isset($options['symlinks']) ? $options['symlinks'] : array());
     } else {
         return Paiva_Minify_CSS_UriRewriter::prepend($css, $options['prependRelativePath']);
     }
 }
Ejemplo n.º 2
0
 /**
  * In CSS content, prepend a path to relative URIs
  *
  * @param string $css
  *
  * @param string $path The path to prepend.
  *
  * @return string
  */
 public static function prepend($css, $path)
 {
     self::$_prependPath = $path;
     $css = self::_trimUrls($css);
     // append
     $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/', array(self::$className, '_processUriCB'), $css);
     $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/', array(self::$className, '_processUriCB'), $css);
     self::$_prependPath = null;
     return $css;
 }
Ejemplo n.º 3
0
 /**
  * Compile full list of files in $this->_cache array
  *
  * @return string
  */
 protected function _getCompiledItem()
 {
     $fileProcessor = $this->getProcessor();
     $path = $fileProcessor->getServerPath($this->getOption('dir') . $fileProcessor->fullFilename(md5(serialize($fileProcessor->getCache()))));
     if (!file_exists($path)) {
         // @todo: verificar a solução implementada no pacote minify
         $dir = dirname($path);
         if (!is_dir($dir) && !@mkdir($dir, 0777, true)) {
             throw new Exception('Impossible to create destination directory ' . $dir);
         }
         $cssContent = '';
         foreach ($fileProcessor->getCache() as $css) {
             $content = file_get_contents($css['filepath']);
             $cssContent .= $this->getOption('compress', true) ? Paiva_Minify_CSS::minify($content, array('prependRelativePath' => dirname($path), 'currentDir' => dirname($css['filepath']), 'symlinks' => $this->getOption('symlinks'))) : Paiva_Minify_CSS_UriRewriter::rewrite($content, dirname($css['filepath']), $this->_getCompiledItem(''), $this->getOption('symlinks'));
             $cssContent .= "\n\n";
         }
         file_put_contents($path, $cssContent);
         $fileProcessor->gzip($path, $cssContent);
     }
     return $this->createDataStylesheet(array('href' => $this->getProcessor()->getWebPath($path)));
 }