|
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 |