X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=JsCompile.php;h=a5b915904666e1b8dd44d1a84b23a48deef5ac35;hb=c1af5e6bb6064e88469651271f4d9aaff34d69c0;hp=1f12579a82f9eb8fbce9ec0a231398de9d336492;hpb=5dbc7cb7abdd4f756758a9a8595dfbadfe9765b3;p=Pman.Core diff --git a/JsCompile.php b/JsCompile.php index 1f12579a..a5b91590 100644 --- a/JsCompile.php +++ b/JsCompile.php @@ -5,6 +5,8 @@ * * -- we will use this later to compile on the fly... * +* -- updated to use roojspacker https://github.com/roojs/roojspacker +* * * For general usage: * $x = new Pman_Core_JsCompile(); @@ -16,6 +18,12 @@ require_once 'Pman.php'; class Pman_Core_JsCompile extends Pman { + + static $cli_desc = "Wrapper around Javascript compression tools + Runs the javascript compiler - merging all the JS files so the load faster. + Note: cfg option Pman_Builder['jspacker'] must be set to location of jstoolkit code +"; + var $cli = false; function getAuth() { @@ -29,7 +37,7 @@ class Pman_Core_JsCompile extends Pman } - function get($proj, $args) + function get($proj, $args=array()) { if (empty($args)) { die("missing action : eg. build or install"); @@ -64,46 +72,83 @@ class Pman_Core_JsCompile extends Pman } exit; } + /** + * packScript: + * + * @param {String} basedir absolute path to files + * @param {Array} list of files (ontop of basedir) + * @param {String} output url (path to basedir basically), or false + * to not compile + * + * + */ + static function jsSort($a,$b) + { + $a = substr($a, 0, -3); + $b= substr($b, 0, -3); + if ($a == $b) { + return 0; + } + return ($a > $b) ? +1 : -1; + } - function packScript($basedir, $files, $output_path, $output_url) + function packScript($basedir, $files, $output_url, $compile=true) { // this outputs '; + echo ''; return; } - foreach($arfiles as $f=>$t) { - echo ''; + foreach($ofiles as $f) { + echo ''."\n"; } - - + } - function packCss($basedir, $files, $output_path, $output_url) + + // this is depricated... - we can use the pear CSS library for this.. + + function packCss($basedir, $files, $output_url) { // this outputs '; - + foreach($ofiles as $f ) { + echo ''."\n"; + } @@ -152,13 +203,16 @@ class Pman_Core_JsCompile extends Pman $o = HTML_FlexyFramework::get()->Pman_Core; if (empty($o['cssminify']) || !file_exists($o['cssminify'])) { - echo ''; + echo ''; return false; } require_once 'System.php'; + $seed= System::which('seed'); - if (!$seed) { - echo ''; + $gjs = System::which('gjs'); + + if (!$seed && !$gjs) { + echo ''; return false; } @@ -176,9 +230,10 @@ class Pman_Core_JsCompile extends Pman mkdir(dirname($output), 0755, true); } $eoutput = escapeshellarg($output); - $cmd = "$seed {$o['jspacker']}/pack.js -o $eoutput " . implode($ofiles, ' '); - //echo "
$cmd\n"; - //echo `$cmd`; + $cmd = $seed ? + ("$seed {$o['cssminify']} $eoutput " . implode($ofiles, ' ')) : + ("$gjs {$o['cssminify']} -- -- $eoutput " . implode($ofiles, ' ')); + //echo "$cmd\n"; echo `$cmd`; exit; `$cmd`; @@ -190,53 +245,184 @@ class Pman_Core_JsCompile extends Pman } /** - * wrapper arroudn packer... + * wrapper arround packer... + * uses the translation module & puts index in __tra + * * @param {Array} map of $files => filemtime the files to pack * @param {String} $output name fo file to output * */ - function pack($files, $output) + + function pack($files, $output, $translation_base=false) + { + + if (empty($files)) { + return false; + } + + $o = HTML_FlexyFramework::get()->Pman_Core; + if (isset($o['packseed'])) { + return $this->packSeed($files,$output,$translation_base); + } + + + require_once 'System.php'; + $packer = System::which('roojspacker'); + + + if (!$packer) { + echo ''; + return false; + + } + $targetm = file_exists($output) && filesize($output) ? filemtime($output) : 0; + $max = 0; + $ofiles = array(); + foreach($files as $f => $mt) { + $max = max($max,$mt); + $ofiles[] = escapeshellarg($f); + } + if ($max < $targetm) { + echo ''; + return true; + } + + if (file_exists($output)) { + unlink($output); + } + + + if (!file_exists(dirname($output))) { + mkdir(dirname($output), 0755, true); + } + + usort($ofiles, function($a,$b) { return strlen($a) > strlen($b) ? 1 : -1; }); + + //$eoutput = " -k -o " . escapeshellarg($output) ; // with whitespace.. + $eoutput = " -t " . escapeshellarg($output) ; + + // no support for translation any more? + //if ( $translation_base) { + // $toutput = " -t ". escapeshellarg(preg_replace('/\.js$/', '.__translation__.js', $output)) . + // " -p " . escapeshellarg($translation_base) ;//." -k "; // this kills the compression. + // + //} + + + $cmd = "$packer $eoutput -f " . implode(' -f ', $ofiles) . ' 2>&1'; + //echo "$cmd\n"; + //echo `$cmd`; + + echo ""; + + // return false; + + $res = `$cmd`; + //exit; + file_put_contents($output.'.log', $cmd."\n\n". $res); + // since this only appears when we change.. it's ok to dump it out.. + echo ""; + clearstatcache(); + // we should do more checking.. return val etc.. + if (file_exists($output) && filesize($output) && ($max < filemtime($output) ) ) { + echo "\n"; + return true; + } + echo ''; + + + echo ""; + return false; + + } + + // depricated verison using seed. + function packSeed($files, $output, $translation_base=false) { $o = HTML_FlexyFramework::get()->Pman_Core; - if (empty($o['jspacker']) || !file_exists($o['jspacker'].'/pack.js')) { - echo ''; + if (empty($o['packseed']) || !file_exists($o['jspacker'].'/pack.js')) { + echo ''; return false; } require_once 'System.php'; $seed= System::which('seed'); - if (!$seed) { - echo ''; + $gjs = System::which('gjs'); + + if (!$seed && !$gjs) { + echo ''; return false; } - $targetm = file_exists($output) ? filemtime($output) : 0; + $targetm = file_exists($output) && filesize($output) ? filemtime($output) : 0; $max = 0; $ofiles = array(); foreach($files as $f => $mt) { $max = max($max,$mt); $ofiles[] = escapeshellarg($f); } - if ($max < $targetm) { + if ($max < $targetm) { + echo ''; return true; } + //var_dump($output); if (!file_exists(dirname($output))) { mkdir(dirname($output), 0755, true); } - $eoutput = escapeshellarg($output); - $cmd = "$seed {$o['jspacker']}/pack.js -o $eoutput " . implode($ofiles, ' '); + $lsort = create_function('$a,$b','return strlen($a) > strlen($b) ? 1 : -1;'); + usort($ofiles, $lsort); + + //$eoutput = " -k -o " . escapeshellarg($output) ; // with whitespace.. + $eoutput = " -o " . escapeshellarg($output) ; + + if ( $translation_base) { + $toutput = " -t ". escapeshellarg(preg_replace('/\.js$/', '.__translation__.js', $output)) . + " -p " . escapeshellarg($translation_base) ;//." -k "; // this kills the compression. + + } + + + $cmd = ($seed ? + "$seed {$o['packseed']}/pack.js " : + "$gjs -I {$o['packseed']} -I {$o['packseed']}/JSDOC {$o['packseed']}/pack.js -- -- " + + ) . " $eoutput $toutput " . implode($ofiles, ' ') . ' 2>&1'; //echo "$cmd\n"; //echo `$cmd`; - `$cmd`; - + echo ""; + + // return false; + + $res = `$cmd`; + //exit; + file_put_contents($output.'.log', $cmd."\n\n". $res); + // since this only appears when we change.. it's ok to dump it out.. + echo ""; + // we should do more checking.. return val etc.. if (file_exists($output) && ($max < filemtime($output) ) ) { + return true; } + + + echo "\n\n"; return false; } @@ -278,8 +464,8 @@ class Pman_Core_JsCompile extends Pman $o = HTML_FlexyFramework::get()->Pman_Core; - if (empty($o['jspacker']) || !file_exists($o['jspacker'].'/pack.js')) { - $this->err ="no jstoolkit path set [Pman_Core][jspacker] to the + if (empty($o['packseed']) || !file_exists($o['packseed'].'/pack.js')) { + $this->err ="no jstoolkit path set [Pman_Core][packseed] to the introspection documentation directory where pack.js is located."; if ($this->cli) echo $this->err; return false; @@ -287,7 +473,7 @@ class Pman_Core_JsCompile extends Pman // should we be more specirfic!??!?!? - $cmd = "$seed {$o['jspacker']}/pack.js -m $proj -a $src/*.js"; + $cmd = "$seed {$o['packseed']}/pack.js -m $proj -a $src/*.js"; echo "$cmd\n"; passthru($cmd); // technically we should trash old compiled files..