includes/clientside/static/template-compiler.js
changeset 1 fe660c52c48f
child 212 30b857a6b811
equal deleted inserted replaced
0:902822492a68 1:fe660c52c48f
       
     1 // An implementation of Enano's template compiler in Javascript. Same exact API
       
     2 // as the PHP version - constructor accepts text, then the assign_vars, assign_bool, and run methods.
       
     3 
       
     4 function templateParser(text)
       
     5 {
       
     6   this.tpl_code    = text;
       
     7   this.tpl_strings = new Object();
       
     8   this.tpl_bool    = new Object();
       
     9   this.assign_vars = __tpAssignVars;
       
    10   this.assign_bool = __tpAssignBool;
       
    11   this.run         = __tpRun;
       
    12 }
       
    13 
       
    14 function __tpAssignVars(vars)
       
    15 {
       
    16   for(var i in vars)
       
    17   {
       
    18     this.tpl_strings[i] = vars[i];
       
    19   }
       
    20 }
       
    21 
       
    22 function __tpAssignBool(vars)
       
    23 {
       
    24   for(var i in vars)
       
    25   {
       
    26     this.tpl_bool[i] = ( vars[i] ) ? true : false; 
       
    27   }
       
    28 }
       
    29 
       
    30 function __tpRun()
       
    31 {
       
    32   if(typeof(this.tpl_code) == 'string')
       
    33   {
       
    34     tpl_code = __tpCompileTemplate(this.tpl_code);
       
    35     try {
       
    36       compiled = eval(tpl_code);
       
    37     }
       
    38     catch(e)
       
    39     {
       
    40       alert(e);
       
    41       aclDebug(tpl_code);
       
    42     }
       
    43     return compiled;
       
    44   }
       
    45   return false;
       
    46 }
       
    47 
       
    48 function __tpCompileTemplate(code)
       
    49 {
       
    50   // Compile plaintext/template code to javascript code
       
    51   code = code.replace(/\\/g, "\\\\");
       
    52   code = code.replace(/\'/g,  "\\'");
       
    53   code = code.replace(/\"/g,  '\\"');
       
    54   code = code.replace(new RegExp(unescape('%0A'), 'g'), '\\n');
       
    55   code = "'" + code + "'";
       
    56   code = code.replace(/\{([A-z0-9_-]+)\}/ig, "' + this.tpl_strings['$1'] + '");
       
    57   code = code.replace(/\<!-- BEGIN ([A-z0-9_-]+) --\>([\s\S]*?)\<!-- BEGINELSE \1 --\>([\s\S]*?)\<!-- END \1 --\>/ig, "' + ( ( this.tpl_bool['$1'] == true ) ? '$2' : '$3' ) + '");
       
    58   code = code.replace(/\<!-- BEGIN ([A-z0-9_-]+) --\>([\s\S]*?)\<!-- END \1 --\>/ig, "' + ( ( this.tpl_bool['$1'] == true ) ? '$2' : '' ) + '");
       
    59   return code;
       
    60 }
       
    61 
       
    62 function __tpExtractVars(code)
       
    63 {
       
    64   code = code.replace('\\', "\\\\");
       
    65   code = code.replace("'",  "\\'");
       
    66   code = code.replace('"',  '\\"');
       
    67   code = code.replace(new RegExp(unescape('%0A'), 'g'), "\\n");
       
    68   code = code.match(/\<!-- VAR ([A-z0-9_-]+) --\>([\s\S]*?)\<!-- ENDVAR \1 -->/g);
       
    69   code2 = '';
       
    70   for(var i in code)
       
    71     if(typeof(code[i]) == 'string')
       
    72       code2 = code2 + code[i];
       
    73   code = code2.replace(/\<!-- VAR ([A-z0-9_-]+) --\>([\s\S]*?)\<!-- ENDVAR \1 -->/g, "'$1' : \"$2\",");
       
    74   code = '( { ' + code + ' "________null________" : false } )';
       
    75   vars = eval(code);
       
    76   return vars;
       
    77 }
       
    78