JsTemplate.php
[Pman.Core] / JsTemplate.php
index 14eb098..cb36c79 100644 (file)
@@ -30,6 +30,9 @@ require_once 'Pman.php';
 
 class Pman_Core_JsTemplate extends Pman {
     
+    
+    var $modDir = false;
+    
     function getAuth()
     {
         parent::getAuth();
@@ -42,15 +45,33 @@ class Pman_Core_JsTemplate extends Pman {
         // get the modules.
         header('Content-type: text/javascript');
         
-        $mods = $this->modulesList();
-        foreach($mods as $mod) {
-            $dir =   $this->rootDir.'/Pman/'. $mod . '/jtemplates';
+        $ff = HTML_FlexyFramework::get();
+        
+        $pr = $ff->project;
+        $ar = explode(PATH_SEPARATOR, $ff->HTML_Template_Flexy['templateDir']);
+        
+        $prefix = $pr == 'Pman' ? 'Pman.' : '';
+        
+        foreach($ar as $mod) {
+            $dir =   dirname($mod) . '/jtemplates';
             if (!file_exists($dir)) {
                 echo '// missing directory '. htmlspecialchars($dir) ."\n";
+                continue;
             }
             // got a directory..
+            $mn = basename(dirname($mod));
+            $ar = glob("$dir/*.html") ;
+            if (empty($ar)) {
+                echo '// no template is directory '. htmlspecialchars($dir) ."\n";
+                continue;
+            }
+            
+            echo "{$prefix}{$mn} = {$prefix}{$mn} || {};\n";
+            echo "{$prefix}{$mn}.template = {$prefix}{$mn}.template   || {};\n\n";
+            
             foreach(glob("$dir/*.html") as $fn) {
-                var_Dump($fn);
+                $name = "{$prefix}{$mn}.template." . preg_replace('/\.html$/i', '', basename($fn));
+                echo $this->compile($fn, $name) . "\n";
                 
 
             }
@@ -60,7 +81,7 @@ class Pman_Core_JsTemplate extends Pman {
             
             
         }
-            
+        exit;
         
         
         
@@ -74,12 +95,22 @@ class Pman_Core_JsTemplate extends Pman {
         
         $contents = file_get_contents($fn);
         $ar = preg_split('/(\{[^\}]+})/', $contents, -1, PREG_SPLIT_DELIM_CAPTURE);
+        
+        
+        
+        
         //echo '<PRE>' . htmlspecialchars(print_r($ar,true));
         
-        $ret = array();
+        $out= array();
         
-        $ret[] = "var $name = function(t) {\n    var ret=[];\n";
+        $head = "$name = function(t)\n{\n    var ret = [];\n";
+        
+        $funcs = array();
+        // do not allow nested functions..?
+        $fstart = -1;
         $indent = 1;
+        $inscript = false;
+        $ret = &$out;
         foreach($ar as $item) {
             $in = str_repeat("    ", $indent);
             
@@ -88,13 +119,28 @@ class Pman_Core_JsTemplate extends Pman {
                 case (!strlen($item)):
                     continue;
                 
+                case ($inscript && ($item != '{end:}')):
+                    $ret[] = $item;
+                    continue;
+                
+                case ($inscript && ($item == '{end:}')):
+                    $inscript = false;
+                    continue;
+                
                 case ($item[0] != '{'):
                     if (!strlen(trim($item))) {
                         continue;
                     }
-                    $ret[] = $in . "ret+= ". json_encode($item) . ";";
+                    $ret[] = $in . "ret += ". json_encode($item) . ";";
+                    continue;
+                
+                
+                case ($item == '{script:}'): 
+                    $inscript = true;
                     continue;
                 
+                
+                
                 case (substr($item,1,3) == 'if('):
                     $ret[] = $in . substr($item,1,-1) . ' {';
                     $indent++;
@@ -104,6 +150,10 @@ class Pman_Core_JsTemplate extends Pman {
                     $indent--;
                     $in = str_repeat("    ", $indent);
                     $ret[] = $in . "}";
+                    if ($fstart == $indent) {
+                        $fstart = -1;
+                        $ret = &$out;
+                    }
                     continue;
                 
                 case (substr($item,1,7) == 'return:'):
@@ -111,7 +161,9 @@ class Pman_Core_JsTemplate extends Pman {
                     continue;
                 
                 case (substr($item,1,9) == 'function:'):
+                    $fstart = $indent;
                     $indent++;
+                    $ret = &$funcs;
                     $def  = substr($item,10,-1) ;
                     list($name,$body) = explode('(', $def, 2);
                     
@@ -133,8 +185,8 @@ class Pman_Core_JsTemplate extends Pman {
         }
         $in = str_repeat("    ", $indent);
         $ret[] = $in .  "return ret.join('');\n}\n";
-        
-        echo '<PRE>' . htmlspecialchars(implode("\n",$ret));
+        return $head . implode("\n",$funcs) . "\n" .implode("\n",$out) ;
+        //echo '<PRE>' . htmlspecialchars(implode("\n",$ret));