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"); |