X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=JsCompile.php;h=a5b915904666e1b8dd44d1a84b23a48deef5ac35;hb=c1af5e6bb6064e88469651271f4d9aaff34d69c0;hp=57870357c3a194615d7141b7c8af421ca411e77d;hpb=7915df63f83661c0a046000b2446f84829f315ee;p=Pman.Core diff --git a/JsCompile.php b/JsCompile.php index 57870357..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"; + } @@ -151,14 +202,17 @@ class Pman_Core_JsCompile extends Pman $o = HTML_FlexyFramework::get()->Pman_Core; - if (empty($o['cssminify']) || !file_exists($o['jspacker'])) { - echo ''; + if (empty($o['cssminify']) || !file_exists($o['cssminify'])) { + 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..