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 header('Content-type: text/javascript');
48 $ff = HTML_FlexyFramework::get();
51 $ar = explode(PATH_SEPARATOR, $ff->HTML_Template_Flexy['templateDir']);
53 $prefix = $pr == 'Pman' ? 'Pman.' : '';
55 foreach($ar as $mod) {
56 $dir = dirname($mod) . '/jtemplates';
57 if (!file_exists($dir)) {
58 echo '// missing directory '. htmlspecialchars($dir) ."\n";
62 $mn = basename(dirname($mod));
63 $ar = glob("$dir/*.html") ;
65 echo '// no template is directory '. htmlspecialchars($dir) ."\n";
69 echo "{$prefix}{$mn} = {$prefix}{$mn} || {};\n";
70 echo "{$prefix}{$mn}.template = {$prefix}{$mn}.template || {};\n\n";
72 foreach(glob("$dir/*.html") as $fn) {
73 $name = "{$prefix}{$mn}.template." . preg_replace('/\.html$/i', '', basename($fn));
74 echo $this->compile($fn, $name) . "\n";
79 //new HTML_FlexyFramework_JsTemplate('/home/alan/gitlive/web.mtrack/MTrackWeb/jtemplates/TimelineTicket.html', 'Pman.template.TimelineTicket');
91 function compile($fn, $name)
93 // cached? - check file see if we have cached contents.
96 $contents = file_get_contents($fn);
97 $ar = preg_split('/(\{[^\}]+})/', $contents, -1, PREG_SPLIT_DELIM_CAPTURE);
102 //echo '<PRE>' . htmlspecialchars(print_r($ar,true));
106 $head = "$name = function(t) {\n var ret=[];\n";
109 // do not allow nested functions..?
114 foreach($ar as $item) {
115 $in = str_repeat(" ", $indent);
117 //var_Dump(substr($item,-3,2));
119 case (!strlen($item)):
122 if ($inscript && ($item != '{end:}')) {
126 case ($item[0] != '{'):
127 if (!strlen(trim($item))) {
130 $ret[] = $in . "ret += ". json_encode($item) . ";";
134 case (substr($item,1,6) == 'script:'):
140 case (substr($item,1,3) == 'if('):
141 $ret[] = $in . substr($item,1,-1) . ' {';
145 case (substr($item,1,4) == 'end:'):
147 $in = str_repeat(" ", $indent);
149 if ($fstart == $indent) {
155 case (substr($item,1,7) == 'return:'):
156 $ret[] = $in . "return;";
159 case (substr($item,1,9) == 'function:'):
163 $def = substr($item,10,-1) ;
164 list($name,$body) = explode('(', $def, 2);
167 $ret[] = $in . "var $name = function (" . $body . '{';
171 if (substr($item,-3,2) == ':h') {
172 $ret[] = $in . "ret += ". substr($item,1,-3) . ';';
175 $ret[] = $in . "ret += Roo.util.Format.htmlEncode(". substr($item,1,-1).');';
182 $in = str_repeat(" ", $indent);
183 $ret[] = $in . "return ret.join('');\n}\n";
184 return $head . implode("\n",$funcs) . "\n" .implode("\n",$out) ;
185 //echo '<PRE>' . htmlspecialchars(implode("\n",$ret));