DataObjects/Core_watch.php
[Pman.Core] / JsCompile.php
index a645daa..ab815c2 100644 (file)
@@ -16,6 +16,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()
     {
@@ -64,16 +70,27 @@ 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
+     * 
+     *
+     */
     
     
-    
-    function packScript($basedir, $files,  $output_path, $output_url)
+    function packScript($basedir, $files,  $output_url, $compile=true)
     {
         // this outputs <script tags..>
         // either for just the original files,
         // or the compressed version.
         // first expand files..
         
+        echo "<!-- compiling   $basedir  -->\n";
+        
         $arfiles = array();
         $ofiles = array();
         foreach($files as $f) {
@@ -94,23 +111,23 @@ class Pman_Core_JsCompile  extends Pman
         
         $output = md5(serialize($arfiles)) .'.js';
         
-        if (!file_exists($output_path.'/_cache_/'.$output)) {
-            $this->pack($arfiles,$output_path.'/_cache_/'.$output);
+        if ( $compile && !file_exists($basedir.'/_cache_/'.$output)) {
+            $this->pack($arfiles,$basedir.'/_cache_/'.$output);
         }
         
-        if (file_exists($output_path.'/_cache_/'.$output)) {
+        if ($compile && file_exists($basedir.'/_cache_/'.$output)) {
             
             echo '<script type="text/javascript" src="'.$output_url.'/_cache_/'. $output.'"></script>';
             return;
         }
         foreach($ofiles as $f) {
-            echo '<script type="text/javascript" src="'.$output_url.'/'.$f.'"></script>';
+            echo '<script type="text/javascript" src="'.$output_url.'/'.$f.'"></script>'."\n";
             
         }
-         
-        
+          
     }
-    function packCss($basedir, $files,  $output_path, $output_url)
+    
+    function packCss($basedir, $files,   $output_url)
     {
         // this outputs <script tags..>
         // either for just the original files,
@@ -137,11 +154,11 @@ class Pman_Core_JsCompile  extends Pman
         
         $output = md5(serialize($arfiles)) .'.css';
         
-        if (!file_exists($output_path.'/_cache_/'.$output)) {
-            $this->packCssCore($arfiles,$output_path.'/_cache_/'.$output);
+        if (!file_exists($basedir.'/_cache_/'.$output)) {
+            $this->packCssCore($arfiles,$basedir.'/_cache_/'.$output);
         }
-        
-        if (file_exists($output_path.'/'.$output)) {
+        //var_dump()$basedir. '/_cache_/'.$output);
+        if (file_exists($basedir. '/_cache_/'.$output)) {
             echo '<link type="text/css" rel="stylesheet" media="screen" href="'.$output_url. '/_cache_/'. $output.'" />';
             return;
         }
@@ -165,7 +182,7 @@ class Pman_Core_JsCompile  extends Pman
         $o = HTML_FlexyFramework::get()->Pman_Core;
         
         if (empty($o['cssminify']) || !file_exists($o['cssminify'])) {
-            echo '<!-- jspacker not set -->';
+            echo '<!-- cssminify not set -->';
             return false;
         }
         require_once 'System.php';
@@ -190,8 +207,7 @@ class Pman_Core_JsCompile  extends Pman
         }
         $eoutput = escapeshellarg($output);
         $cmd = "$seed {$o['cssminify']}  $eoutput " . implode($ofiles, ' ');
-        //echo "<PRE>$cmd\n";
-        //echo `$cmd`;
+        //echo "<PRE>$cmd\n"; echo `$cmd`; exit;
         `$cmd`;
         
         
@@ -203,54 +219,85 @@ 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)
     {
         
          
         $o = HTML_FlexyFramework::get()->Pman_Core;
         
         if (empty($o['jspacker']) || !file_exists($o['jspacker'].'/pack.js')) {
-            echo '<!-- jspacker not set -->';
+            echo '<!-- JS COMPILE ERROR: option: Pman_Core[jspacker] not set to directory -->';
             return false;
             
         }
         require_once 'System.php';
         $seed= System::which('seed');
         if (!$seed) {
-            echo '<!-- seed not installed -->';
+            echo '<!-- JS COMPILE ERROR: seed not installed -->';
             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 '<!--  use cached compile. -->';
             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 = " -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 {$o['jspacker']}/pack.js   $eoutput  $toutput " . implode($ofiles, ' ') . ' 2>&1';
         //echo "<PRE>$cmd\n";
         //echo `$cmd`;
-        `$cmd`;
-        //exit;
         
+         echo "<!-- Compile javascript
+          
+            " . htmlspecialchars($cmd) . "
+            
+            -->";
+            
+       // 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 "<!-- Compiled javascript
+            " . htmlspecialchars($res) . "
+            -->";
+            
         // we should do more checking.. return val etc..
         if (file_exists($output) && ($max < filemtime($output) ) ) {
+            
             return true;
         }
+        echo "<!-- JS COMPILE ERROR: packed file did not exist  -->";
         return false;
         
     }