namibia
df0489e1eeeeab5a9bd44e1d84fce49924fe1bac
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
<?php /** * Class Minify_ClosureCompiler * @package Minify */ /** * Compress Javascript using the Closure Compiler * * You must set $jarFile and $tempDir before calling the minify functions. * Also, depending on your shell's environment, you may need to specify * the full path to java in $javaExecutable or use putenv() to setup the * Java environment. * * <code> * Minify_ClosureCompiler::$jarFile = '/path/to/closure-compiler-20120123.jar'; * Minify_ClosureCompiler::$tempDir = '/tmp'; * $code = Minify_ClosureCompiler::minify( * $code, * array('compilation_level' => 'SIMPLE_OPTIMIZATIONS') * ); * * --compilation_level WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS, ADVANCED_OPTIMIZATIONS * * </code> * * @todo unit tests, $options docs * @todo more options support (or should just passthru them all?) * * @package Minify * @author Stephen Clay <steve@mrclay.org> * @author Elan Ruusamäe <glen@delfi.ee> */ class Minify_ClosureCompiler { /** * Filepath of the Closure Compiler jar file. This must be set before * calling minifyJs(). * * @var string */ public static $jarFile = null; /** * Writable temp directory. This must be set before calling minifyJs(). * * @var string */ public static $tempDir = null; /** * Filepath of "java" executable (may be needed if not in shell's PATH) * * @var string */ public static $javaExecutable = 'java'; /** * Minify a Javascript string * * @param string $js * * @param array $options (verbose is ignored) * * @see https://code.google.com/p/closure-compiler/source/browse/trunk/README * * @return string */ public static function minify($js, $options = array()) { self::_prepare(); if (! ($tmpFile = tempnam(self::$tempDir, 'cc_'))) { throw new Exception('Minify_ClosureCompiler : could not create temp file.'); } file_put_contents($tmpFile, $js); exec(self::_getCmd($options, $tmpFile), $output, $result_code); unlink($tmpFile); if ($result_code != 0) { throw new Exception('Minify_ClosureCompiler : Closure Compiler execution failed.'); } return implode("\n", $output); } private static function _getCmd($userOptions, $tmpFile) { $o = array_merge( array( 'charset' => 'utf-8', 'compilation_level' => 'SIMPLE_OPTIMIZATIONS', ), $userOptions ); $cmd = self::$javaExecutable . ' -jar ' . escapeshellarg(self::$jarFile) . (preg_match('/^[\\da-zA-Z0-9\\-]+$/', $o['charset']) ? " --charset {$o['charset']}" : ''); foreach (array('compilation_level') as $opt) { if ($o[$opt]) { $cmd .= " --{$opt} ". escapeshellarg($o[$opt]); } } return $cmd . ' ' . escapeshellarg($tmpFile); } private static function _prepare() { if (! is_file(self::$jarFile)) { throw new Exception('Minify_ClosureCompiler : $jarFile('.self::$jarFile.') is not a valid file.'); } if (! is_readable(self::$jarFile)) { throw new Exception('Minify_ClosureCompiler : $jarFile('.self::$jarFile.') is not readable.'); } if (! is_dir(self::$tempDir)) { throw new Exception('Minify_ClosureCompiler : $tempDir('.self::$tempDir.') is not a valid direcotry.'); } if (! is_writable(self::$tempDir)) { throw new Exception('Minify_ClosureCompiler : $tempDir('.self::$tempDir.') is not writable.'); } } } /* vim:ts=4:sw=4:et */ |
Commits for namibiapublic/min/lib/Minify/ClosureCompiler.php
Revision | Author | Commited | Message |
---|---|---|---|
df0489 ... | Mark | Fri 14 Oct, 2016 10:01:00 +0000 | initial commit |