6 * just need to add this to HTML
8 * <script src="{baseURL}/Core/JsTemplate.js">
14 * first part should return a list of files to include.
15 * $x = new Pman_Core_JsTemplate($cfg)
19 * second part should compile and deliver.
23 * // should return {baseurl}/Pman/JsTemplate/mod/file
29 require_once 'Pman.php';
31 class Pman_Core_JsTemplate extends Pman {
46 $this->sessionState(0);
48 header('Content-type: text/javascript');
50 $ff = HTML_FlexyFramework::get();
54 $mods = $this->modulesList();
57 //$ar = explode(PATH_SEPARATOR, $ff->HTML_Template_Flexy['templateDir']);
58 array_push($mods, $pr);
60 foreach($mods as $mod )
62 $prefix = $mod == $pr ? "" : "{$pr}.";
64 $pdir = $mod == $pr ? '' : ($pr .'/') ;
66 $dir = $this->rootDir .'/'.$pdir . $mod . '/jtemplates';
67 if (!file_exists($dir)) {
68 echo '// missing directory '. htmlspecialchars($dir) ."\n";
73 $ar = glob("$dir/*.html") ;
75 echo '// no template is directory '. htmlspecialchars($dir) ."\n";
79 echo "{$prefix}{$mod} = {$prefix}{$mod} || {};\n";
80 echo "{$prefix}{$mod}.template = {$prefix}{$mod}.template || {};\n\n";
82 foreach(glob("$dir/*.html") as $fn) {
83 $name = "{$prefix}{$mod}.template." . preg_replace('/\.html$/i', '', basename($fn));
84 echo $this->compile($fn, $name) . "\n";
89 //new HTML_FlexyFramework_JsTemplate('/home/alan/gitlive/web.mtrack/MTrackWeb/jtemplates/TimelineTicket.html', 'Pman.template.TimelineTicket');
101 function compile($fn, $name)
103 // cached? - check file see if we have cached contents.
106 $contents = file_get_contents($fn);
107 $ar = preg_split('/(\{[^\\n}]+})/', $contents, -1, PREG_SPLIT_DELIM_CAPTURE);
112 //echo '<PRE>' . htmlspecialchars(print_r($ar,true));
116 $head = "$name = function(t)\n{\n var ret = '';\n\n";
119 // do not allow nested functions..?
124 foreach($ar as $item) {
125 $in = str_repeat(" ", $indent);
126 $indent = max($indent , 1);
127 //var_Dump(substr($item,-3,2));
129 case (!strlen($item)):
132 case ($inscript && ($item != '{end:}')):
133 $ret[count($ret)-1] .= $item;
136 case ($inscript && ($item == '{end:}')):
141 case ($item[0] != '{'):
142 if (!strlen(trim($item))) {
145 $ret[] = $in . "ret += ". json_encode($item) . ";";
149 case ($item == '{script:}'):
154 case ($item[1] == '!'):
155 $ret[] = $in . substr($item,2,-1) .';';
159 case (substr($item,1,3) == 'if('):
160 $ret[] = $in . substr($item,1,-1) . ' {';
164 case (substr($item,1,5) == 'else:'):
166 $in = str_repeat(" ", $indent);
167 $ret[] = $in . "} else { ";
171 case (substr($item,1,4) == 'end:'):
173 $in = str_repeat(" ", $indent);
175 if ($fstart == $indent) {
181 case (substr($item,1,7) == 'return:'):
182 $ret[] = $in . "return;";
185 case (substr($item,1,9) == 'function:'):
189 $def = substr($item,10,-1) ;
190 list($name,$body) = explode('(', $def, 2);
193 $ret[] = $in . "var $name = function (" . $body . '{';
197 if (substr($item,-3,2) == ':h') {
198 $ret[] = $in . "ret += ". substr($item,1,-3) . ';';
201 if (substr($item,-3,2) == ':b') {
202 $ret[] = $in . "ret += Roo.util.Format.htmlEncode(". substr($item,1,-3).').split("\n").join("<br/>\n");';
205 $ret[] = $in . "ret += Roo.util.Format.htmlEncode(". substr($item,1,-1).');';
212 $in = str_repeat(" ", $indent);
213 $ret[] = $in . "return ret;\n}\n";
214 return $head . implode("\n",$funcs) . "\n\n" .implode("\n",$out) ;
215 //echo '<PRE>' . htmlspecialchars(implode("\n",$ret));