*
* -- 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();
}
- function get($proj, $args)
+ function get($proj, $args=array())
{
if (empty($args)) {
die("missing action : eg. build or install");
*
*/
+ 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_url, $compile=true)
{
$ofiles [] = $f . '/'. basename($fx);
}
}
- $ofiles = usort($ofiles,function($a,$b) {
- $a = substr($a, -3);
- $b= substr($b, -3);
- if ($a == $b) {
- return 0;
- }
- return ($a > $b) ? +1 : -1;
- });
- print_R($ofiles);
+ $tf =
+ // sort exc. the .js
+ usort($ofiles,function($a,$b) { return Pman_Core_JsCompile::jsSort($a,$b); });
+
+ //print_R($ofiles);
$output = md5(serialize($arfiles)) .'.js';
}
+ // this is depricated... - we can use the pear CSS library for this..
+
function packCss($basedir, $files, $output_url)
{
// this outputs <script tags..>
* @param {String} $output name fo file to 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 '<!-- roojspacker is not installed -->';
+ 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 '<!-- use cached compile. -->';
+ 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($ofiles, ' -f ') . ' 2>&1';
+ //echo "<PRE>$cmd\n";
+ //echo `$cmd`;
+
+ 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) . "
+ -->";
+ clearstatcache();
+ // we should do more checking.. return val etc..
+ if (file_exists($output) && filesize($output) && ($max < filemtime($output) ) ) {
+ echo "<!-- file looks like its been generated -->\n";
+ return true;
+ }
+ echo '<script type="text/javascript"> alert('. json_encode("Error: Javascript Compile failed\n" . $res) .');</script>';
+
+
+ echo "<!-- JS COMPILE ERROR: packed file did not exist -->";
+ 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')) {
+ if (empty($o['packseed']) || !file_exists($o['jspacker'].'/pack.js')) {
echo '<!-- JS COMPILE ERROR: option: Pman_Core[jspacker] not set to directory -->';
return false;
$cmd = ($seed ?
- "$seed {$o['jspacker']}/pack.js " :
- "$gjs -I {$o['jspacker']} -I {$o['jspacker']}/JSDOC {$o['jspacker']}/pack.js -- -- "
+ "$seed {$o['packseed']}/pack.js " :
+ "$gjs -I {$o['packseed']} -I {$o['packseed']}/JSDOC {$o['packseed']}/pack.js -- -- "
) . " $eoutput $toutput " . implode($ofiles, ' ') . ' 2>&1';
//echo "<PRE>$cmd\n";
return true;
}
- echo "<!-- JS COMPILE ERROR: packed file did not exist -->";
+
+
+ echo "\n<!-- JS COMPILE ERROR: packed file did not exist -->\n";
return false;
}
$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;
// 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..