includes/clientside/static/template-compiler.js
changeset 582 a38876c0793c
parent 212 30b857a6b811
child 832 7152ca0a0ce9
equal deleted inserted replaced
581:5e8fd89c02ea 582:a38876c0793c
     1 // An implementation of Enano's template compiler in Javascript. Same exact API
     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.
     2 // as the PHP version - constructor accepts text, then the assign_vars, assign_bool, and run methods.
     3 
     3 
     4 function templateParser(text)
     4 window.templateParser = function(text)
     5 {
     5 {
     6   this.tpl_code    = text;
     6   this.tpl_code    = text;
     7   this.tpl_strings = new Object();
     7   this.tpl_strings = new Object();
     8   this.tpl_bool    = new Object();
     8   this.tpl_bool    = new Object();
     9   this.assign_vars = __tpAssignVars;
     9   this.assign_vars = __tpAssignVars;
    10   this.assign_bool = __tpAssignBool;
    10   this.assign_bool = __tpAssignBool;
    11   this.run         = __tpRun;
    11   this.run         = __tpRun;
    12 }
    12 }
    13 
    13 
    14 function __tpAssignVars(vars)
    14 window.__tpAssignVars = function(vars)
    15 {
    15 {
    16   for(var i in vars)
    16   for(var i in vars)
    17   {
    17   {
    18     this.tpl_strings[i] = vars[i];
    18     this.tpl_strings[i] = vars[i];
    19   }
    19   }
    20 }
    20 }
    21 
    21 
    22 function __tpAssignBool(vars)
    22 window.__tpAssignBool = function(vars)
    23 {
    23 {
    24   for(var i in vars)
    24   for(var i in vars)
    25   {
    25   {
    26     this.tpl_bool[i] = ( vars[i] ) ? true : false; 
    26     this.tpl_bool[i] = ( vars[i] ) ? true : false; 
    27   }
    27   }
    28 }
    28 }
    29 
    29 
    30 function __tpRun()
    30 window.__tpRun = function()
    31 {
    31 {
    32   if(typeof(this.tpl_code) == 'string')
    32   if(typeof(this.tpl_code) == 'string')
    33   {
    33   {
    34     tpl_code = __tpCompileTemplate(this.tpl_code);
    34     tpl_code = __tpCompileTemplate(this.tpl_code);
    35     try {
    35     try {
    43     return compiled;
    43     return compiled;
    44   }
    44   }
    45   return false;
    45   return false;
    46 }
    46 }
    47 
    47 
    48 function __tpCompileTemplate(code)
    48 window.__tpCompileTemplate = function(code)
    49 {
    49 {
    50   // Compile plaintext/template code to javascript code
    50   // Compile plaintext/template code to javascript code
    51   code = code.replace(/\\/g, "\\\\");
    51   code = code.replace(/\\/g, "\\\\");
    52   code = code.replace(/\'/g,  "\\'");
    52   code = code.replace(/\'/g,  "\\'");
    53   code = code.replace(/\"/g,  '\\"');
    53   code = code.replace(/\"/g,  '\\"');
    58   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]*?)\<!-- BEGINELSE \1 --\>([\s\S]*?)\<!-- END \1 --\>/ig, "' + ( ( this.tpl_bool['$1'] == true ) ? '$2' : '$3' ) + '");
    59   code = code.replace(/\<!-- BEGIN ([A-z0-9_-]+) --\>([\s\S]*?)\<!-- END \1 --\>/ig, "' + ( ( this.tpl_bool['$1'] == true ) ? '$2' : '' ) + '");
    59   code = code.replace(/\<!-- BEGIN ([A-z0-9_-]+) --\>([\s\S]*?)\<!-- END \1 --\>/ig, "' + ( ( this.tpl_bool['$1'] == true ) ? '$2' : '' ) + '");
    60   return code;
    60   return code;
    61 }
    61 }
    62 
    62 
    63 function __tpExtractVars(code)
    63 window.__tpExtractVars = function(code)
    64 {
    64 {
    65   code = code.replace('\\', "\\\\");
    65   code = code.replace('\\', "\\\\");
    66   code = code.replace("'",  "\\'");
    66   code = code.replace("'",  "\\'");
    67   code = code.replace('"',  '\\"');
    67   code = code.replace('"',  '\\"');
    68   code = code.replace(new RegExp(unescape('%0A'), 'g'), "\\n");
    68   code = code.replace(new RegExp(unescape('%0A'), 'g'), "\\n");