backbone_handlebars 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
data/README.md
CHANGED
@@ -28,6 +28,6 @@ Enables precompilation and will serve only the Handlebars runtime instead of the
|
|
28
28
|
config.handlebars.path
|
29
29
|
```
|
30
30
|
|
31
|
-
Changes the path of the Handlebars library that
|
31
|
+
Changes the path of the Handlebars library that precompiles your templates
|
32
32
|
|
33
|
-
If you want to use your own Handlebars or Handlebars runtime
|
33
|
+
If you want to use your own Handlebars or Handlebars runtime place them in `vendor/assets/handlebars/development` and `vendor/assets/handlebars/production` respectively.
|
@@ -5,7 +5,7 @@ this.Handlebars = {};
|
|
5
5
|
|
6
6
|
(function(Handlebars) {
|
7
7
|
|
8
|
-
Handlebars.VERSION = "1.0.rc.
|
8
|
+
Handlebars.VERSION = "1.0.rc.2";
|
9
9
|
|
10
10
|
Handlebars.helpers = {};
|
11
11
|
Handlebars.partials = {};
|
@@ -62,22 +62,53 @@ Handlebars.createFrame = Object.create || function(object) {
|
|
62
62
|
return obj;
|
63
63
|
};
|
64
64
|
|
65
|
+
Handlebars.logger = {
|
66
|
+
DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, level: 3,
|
67
|
+
|
68
|
+
methodMap: {0: 'debug', 1: 'info', 2: 'warn', 3: 'error'},
|
69
|
+
|
70
|
+
// can be overridden in the host environment
|
71
|
+
log: function(level, obj) {
|
72
|
+
if (Handlebars.logger.level <= level) {
|
73
|
+
var method = Handlebars.logger.methodMap[level];
|
74
|
+
if (typeof console !== 'undefined' && console[method]) {
|
75
|
+
console[method].call(console, obj);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
};
|
80
|
+
|
81
|
+
Handlebars.log = function(level, obj) { Handlebars.logger.log(level, obj); };
|
82
|
+
|
65
83
|
Handlebars.registerHelper('each', function(context, options) {
|
66
84
|
var fn = options.fn, inverse = options.inverse;
|
67
|
-
var ret = "", data;
|
85
|
+
var i = 0, ret = "", data;
|
68
86
|
|
69
87
|
if (options.data) {
|
70
88
|
data = Handlebars.createFrame(options.data);
|
71
89
|
}
|
72
90
|
|
73
|
-
if(context && context
|
74
|
-
|
75
|
-
|
76
|
-
|
91
|
+
if(context && typeof context === 'object') {
|
92
|
+
if(context instanceof Array){
|
93
|
+
for(var j = context.length; i<j; i++) {
|
94
|
+
if (data) { data.index = i; }
|
95
|
+
ret = ret + fn(context[i], { data: data });
|
96
|
+
}
|
97
|
+
} else {
|
98
|
+
for(var key in context) {
|
99
|
+
if(context.hasOwnProperty(key)) {
|
100
|
+
if(data) { data.key = key; }
|
101
|
+
ret = ret + fn(context[key], {data: data});
|
102
|
+
i++;
|
103
|
+
}
|
104
|
+
}
|
77
105
|
}
|
78
|
-
}
|
106
|
+
}
|
107
|
+
|
108
|
+
if(i === 0){
|
79
109
|
ret = inverse(this);
|
80
110
|
}
|
111
|
+
|
81
112
|
return ret;
|
82
113
|
});
|
83
114
|
|
@@ -104,8 +135,9 @@ Handlebars.registerHelper('with', function(context, options) {
|
|
104
135
|
return options.fn(context);
|
105
136
|
});
|
106
137
|
|
107
|
-
Handlebars.registerHelper('log', function(context) {
|
108
|
-
|
138
|
+
Handlebars.registerHelper('log', function(context, options) {
|
139
|
+
var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;
|
140
|
+
Handlebars.log(level, context);
|
109
141
|
});
|
110
142
|
|
111
143
|
}(this.Handlebars));
|
@@ -115,103 +147,111 @@ Handlebars.registerHelper('log', function(context) {
|
|
115
147
|
var handlebars = (function(){
|
116
148
|
var parser = {trace: function trace() { },
|
117
149
|
yy: {},
|
118
|
-
symbols_: {"error":2,"root":3,"program":4,"EOF":5,"
|
119
|
-
terminals_: {2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"OPEN_PARTIAL",
|
120
|
-
productions_: [0,[3,2],[4,3],[4,1],[4,0],[
|
150
|
+
symbols_: {"error":2,"root":3,"program":4,"EOF":5,"simpleInverse":6,"statements":7,"statement":8,"openInverse":9,"closeBlock":10,"openBlock":11,"mustache":12,"partial":13,"CONTENT":14,"COMMENT":15,"OPEN_BLOCK":16,"inMustache":17,"CLOSE":18,"OPEN_INVERSE":19,"OPEN_ENDBLOCK":20,"path":21,"OPEN":22,"OPEN_UNESCAPED":23,"OPEN_PARTIAL":24,"partialName":25,"params":26,"hash":27,"DATA":28,"param":29,"STRING":30,"INTEGER":31,"BOOLEAN":32,"hashSegments":33,"hashSegment":34,"ID":35,"EQUALS":36,"PARTIAL_NAME":37,"pathSegments":38,"SEP":39,"$accept":0,"$end":1},
|
151
|
+
terminals_: {2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"OPEN_PARTIAL",28:"DATA",30:"STRING",31:"INTEGER",32:"BOOLEAN",35:"ID",36:"EQUALS",37:"PARTIAL_NAME",39:"SEP"},
|
152
|
+
productions_: [0,[3,2],[4,2],[4,3],[4,2],[4,1],[4,1],[4,0],[7,1],[7,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,3],[13,4],[6,2],[17,3],[17,2],[17,2],[17,1],[17,1],[26,2],[26,1],[29,1],[29,1],[29,1],[29,1],[29,1],[27,1],[33,2],[33,1],[34,3],[34,3],[34,3],[34,3],[34,3],[25,1],[21,1],[38,3],[38,1]],
|
121
153
|
performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
|
122
154
|
|
123
155
|
var $0 = $$.length - 1;
|
124
156
|
switch (yystate) {
|
125
157
|
case 1: return $$[$0-1];
|
126
158
|
break;
|
127
|
-
case 2: this.$ = new yy.ProgramNode(
|
159
|
+
case 2: this.$ = new yy.ProgramNode([], $$[$0]);
|
128
160
|
break;
|
129
|
-
case 3: this.$ = new yy.ProgramNode($$[$0]);
|
161
|
+
case 3: this.$ = new yy.ProgramNode($$[$0-2], $$[$0]);
|
130
162
|
break;
|
131
|
-
case 4: this.$ = new yy.ProgramNode([]);
|
163
|
+
case 4: this.$ = new yy.ProgramNode($$[$0-1], []);
|
132
164
|
break;
|
133
|
-
case 5: this.$ =
|
165
|
+
case 5: this.$ = new yy.ProgramNode($$[$0]);
|
134
166
|
break;
|
135
|
-
case 6:
|
167
|
+
case 6: this.$ = new yy.ProgramNode([], []);
|
136
168
|
break;
|
137
|
-
case 7: this.$ = new yy.
|
169
|
+
case 7: this.$ = new yy.ProgramNode([]);
|
138
170
|
break;
|
139
|
-
case 8: this.$ =
|
171
|
+
case 8: this.$ = [$$[$0]];
|
140
172
|
break;
|
141
|
-
case 9: this.$ = $$[$0];
|
173
|
+
case 9: $$[$0-1].push($$[$0]); this.$ = $$[$0-1];
|
142
174
|
break;
|
143
|
-
case 10: this.$ = $$[$0];
|
175
|
+
case 10: this.$ = new yy.BlockNode($$[$0-2], $$[$0-1].inverse, $$[$0-1], $$[$0]);
|
144
176
|
break;
|
145
|
-
case 11: this.$ = new yy.
|
177
|
+
case 11: this.$ = new yy.BlockNode($$[$0-2], $$[$0-1], $$[$0-1].inverse, $$[$0]);
|
146
178
|
break;
|
147
|
-
case 12: this.$ =
|
179
|
+
case 12: this.$ = $$[$0];
|
148
180
|
break;
|
149
|
-
case 13: this.$ =
|
181
|
+
case 13: this.$ = $$[$0];
|
150
182
|
break;
|
151
|
-
case 14: this.$ = new yy.
|
183
|
+
case 14: this.$ = new yy.ContentNode($$[$0]);
|
152
184
|
break;
|
153
|
-
case 15: this.$ = $$[$0
|
185
|
+
case 15: this.$ = new yy.CommentNode($$[$0]);
|
154
186
|
break;
|
155
187
|
case 16: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]);
|
156
188
|
break;
|
157
|
-
case 17: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]
|
189
|
+
case 17: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]);
|
190
|
+
break;
|
191
|
+
case 18: this.$ = $$[$0-1];
|
192
|
+
break;
|
193
|
+
case 19: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1]);
|
158
194
|
break;
|
159
|
-
case
|
195
|
+
case 20: this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], true);
|
160
196
|
break;
|
161
|
-
case
|
197
|
+
case 21: this.$ = new yy.PartialNode($$[$0-1]);
|
162
198
|
break;
|
163
|
-
case
|
199
|
+
case 22: this.$ = new yy.PartialNode($$[$0-2], $$[$0-1]);
|
164
200
|
break;
|
165
|
-
case
|
201
|
+
case 23:
|
166
202
|
break;
|
167
|
-
case
|
203
|
+
case 24: this.$ = [[$$[$0-2]].concat($$[$0-1]), $$[$0]];
|
168
204
|
break;
|
169
|
-
case
|
205
|
+
case 25: this.$ = [[$$[$0-1]].concat($$[$0]), null];
|
170
206
|
break;
|
171
|
-
case
|
207
|
+
case 26: this.$ = [[$$[$0-1]], $$[$0]];
|
172
208
|
break;
|
173
|
-
case
|
209
|
+
case 27: this.$ = [[$$[$0]], null];
|
174
210
|
break;
|
175
|
-
case
|
211
|
+
case 28: this.$ = [[new yy.DataNode($$[$0])], null];
|
176
212
|
break;
|
177
|
-
case
|
213
|
+
case 29: $$[$0-1].push($$[$0]); this.$ = $$[$0-1];
|
178
214
|
break;
|
179
|
-
case
|
215
|
+
case 30: this.$ = [$$[$0]];
|
180
216
|
break;
|
181
|
-
case
|
217
|
+
case 31: this.$ = $$[$0];
|
182
218
|
break;
|
183
|
-
case
|
219
|
+
case 32: this.$ = new yy.StringNode($$[$0]);
|
184
220
|
break;
|
185
|
-
case
|
221
|
+
case 33: this.$ = new yy.IntegerNode($$[$0]);
|
186
222
|
break;
|
187
|
-
case
|
223
|
+
case 34: this.$ = new yy.BooleanNode($$[$0]);
|
188
224
|
break;
|
189
|
-
case
|
225
|
+
case 35: this.$ = new yy.DataNode($$[$0]);
|
190
226
|
break;
|
191
|
-
case
|
227
|
+
case 36: this.$ = new yy.HashNode($$[$0]);
|
192
228
|
break;
|
193
|
-
case
|
229
|
+
case 37: $$[$0-1].push($$[$0]); this.$ = $$[$0-1];
|
194
230
|
break;
|
195
|
-
case
|
231
|
+
case 38: this.$ = [$$[$0]];
|
196
232
|
break;
|
197
|
-
case
|
233
|
+
case 39: this.$ = [$$[$0-2], $$[$0]];
|
198
234
|
break;
|
199
|
-
case
|
235
|
+
case 40: this.$ = [$$[$0-2], new yy.StringNode($$[$0])];
|
200
236
|
break;
|
201
|
-
case
|
237
|
+
case 41: this.$ = [$$[$0-2], new yy.IntegerNode($$[$0])];
|
202
238
|
break;
|
203
|
-
case
|
239
|
+
case 42: this.$ = [$$[$0-2], new yy.BooleanNode($$[$0])];
|
204
240
|
break;
|
205
|
-
case
|
241
|
+
case 43: this.$ = [$$[$0-2], new yy.DataNode($$[$0])];
|
206
242
|
break;
|
207
|
-
case
|
243
|
+
case 44: this.$ = new yy.PartialNameNode($$[$0]);
|
208
244
|
break;
|
209
|
-
case
|
245
|
+
case 45: this.$ = new yy.IdNode($$[$0]);
|
246
|
+
break;
|
247
|
+
case 46: $$[$0-2].push($$[$0]); this.$ = $$[$0-2];
|
248
|
+
break;
|
249
|
+
case 47: this.$ = [$$[$0]];
|
210
250
|
break;
|
211
251
|
}
|
212
252
|
},
|
213
|
-
table: [{3:1,4:2,5:[2,
|
214
|
-
defaultActions: {
|
253
|
+
table: [{3:1,4:2,5:[2,7],6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],22:[1,14],23:[1,15],24:[1,16]},{1:[3]},{5:[1,17]},{5:[2,6],7:18,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,6],22:[1,14],23:[1,15],24:[1,16]},{5:[2,5],6:20,8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,5],22:[1,14],23:[1,15],24:[1,16]},{17:23,18:[1,22],21:24,28:[1,25],35:[1,27],38:26},{5:[2,8],14:[2,8],15:[2,8],16:[2,8],19:[2,8],20:[2,8],22:[2,8],23:[2,8],24:[2,8]},{4:28,6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,7],22:[1,14],23:[1,15],24:[1,16]},{4:29,6:3,7:4,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,5],20:[2,7],22:[1,14],23:[1,15],24:[1,16]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],24:[2,12]},{5:[2,13],14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],24:[2,13]},{5:[2,14],14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],24:[2,14]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],24:[2,15]},{17:30,21:24,28:[1,25],35:[1,27],38:26},{17:31,21:24,28:[1,25],35:[1,27],38:26},{17:32,21:24,28:[1,25],35:[1,27],38:26},{25:33,37:[1,34]},{1:[2,1]},{5:[2,2],8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,2],22:[1,14],23:[1,15],24:[1,16]},{17:23,21:24,28:[1,25],35:[1,27],38:26},{5:[2,4],7:35,8:6,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,4],22:[1,14],23:[1,15],24:[1,16]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],24:[2,9]},{5:[2,23],14:[2,23],15:[2,23],16:[2,23],19:[2,23],20:[2,23],22:[2,23],23:[2,23],24:[2,23]},{18:[1,36]},{18:[2,27],21:41,26:37,27:38,28:[1,45],29:39,30:[1,42],31:[1,43],32:[1,44],33:40,34:46,35:[1,47],38:26},{18:[2,28]},{18:[2,45],28:[2,45],30:[2,45],31:[2,45],32:[2,45],35:[2,45],39:[1,48]},{18:[2,47],28:[2,47],30:[2,47],31:[2,47],32:[2,47],35:[2,47],39:[2,47]},{10:49,20:[1,50]},{10:51,20:[1,50]},{18:[1,52]},{18:[1,53]},{18:[1,54]},{18:[1,55],21:56,35:[1,27],38:26},{18:[2,44],35:[2,44]},{5:[2,3],8:21,9:7,11:8,12:9,13:10,14:[1,11],15:[1,12],16:[1,13],19:[1,19],20:[2,3],22:[1,14],23:[1,15],24:[1,16]},{14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],24:[2,17]},{18:[2,25],21:41,27:57,28:[1,45],29:58,30:[1,42],31:[1,43],32:[1,44],33:40,34:46,35:[1,47],38:26},{18:[2,26]},{18:[2,30],28:[2,30],30:[2,30],31:[2,30],32:[2,30],35:[2,30]},{18:[2,36],34:59,35:[1,60]},{18:[2,31],28:[2,31],30:[2,31],31:[2,31],32:[2,31],35:[2,31]},{18:[2,32],28:[2,32],30:[2,32],31:[2,32],32:[2,32],35:[2,32]},{18:[2,33],28:[2,33],30:[2,33],31:[2,33],32:[2,33],35:[2,33]},{18:[2,34],28:[2,34],30:[2,34],31:[2,34],32:[2,34],35:[2,34]},{18:[2,35],28:[2,35],30:[2,35],31:[2,35],32:[2,35],35:[2,35]},{18:[2,38],35:[2,38]},{18:[2,47],28:[2,47],30:[2,47],31:[2,47],32:[2,47],35:[2,47],36:[1,61],39:[2,47]},{35:[1,62]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],24:[2,10]},{21:63,35:[1,27],38:26},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],24:[2,11]},{14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],24:[2,16]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],24:[2,19]},{5:[2,20],14:[2,20],15:[2,20],16:[2,20],19:[2,20],20:[2,20],22:[2,20],23:[2,20],24:[2,20]},{5:[2,21],14:[2,21],15:[2,21],16:[2,21],19:[2,21],20:[2,21],22:[2,21],23:[2,21],24:[2,21]},{18:[1,64]},{18:[2,24]},{18:[2,29],28:[2,29],30:[2,29],31:[2,29],32:[2,29],35:[2,29]},{18:[2,37],35:[2,37]},{36:[1,61]},{21:65,28:[1,69],30:[1,66],31:[1,67],32:[1,68],35:[1,27],38:26},{18:[2,46],28:[2,46],30:[2,46],31:[2,46],32:[2,46],35:[2,46],39:[2,46]},{18:[1,70]},{5:[2,22],14:[2,22],15:[2,22],16:[2,22],19:[2,22],20:[2,22],22:[2,22],23:[2,22],24:[2,22]},{18:[2,39],35:[2,39]},{18:[2,40],35:[2,40]},{18:[2,41],35:[2,41]},{18:[2,42],35:[2,42]},{18:[2,43],35:[2,43]},{5:[2,18],14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],24:[2,18]}],
|
254
|
+
defaultActions: {17:[2,1],25:[2,28],38:[2,26],57:[2,24]},
|
215
255
|
parseError: function parseError(str, hash) {
|
216
256
|
throw new Error(str);
|
217
257
|
},
|
@@ -506,87 +546,75 @@ case 2:
|
|
506
546
|
return 14;
|
507
547
|
|
508
548
|
break;
|
509
|
-
case 3: return
|
549
|
+
case 3: yy_.yytext = yy_.yytext.substr(0, yy_.yyleng-4); this.popState(); return 15;
|
510
550
|
break;
|
511
|
-
case 4: return
|
551
|
+
case 4: this.begin("par"); return 24;
|
512
552
|
break;
|
513
|
-
case 5: return
|
553
|
+
case 5: return 16;
|
514
554
|
break;
|
515
|
-
case 6: return
|
555
|
+
case 6: return 20;
|
516
556
|
break;
|
517
557
|
case 7: return 19;
|
518
558
|
break;
|
519
|
-
case 8: return
|
559
|
+
case 8: return 19;
|
520
560
|
break;
|
521
561
|
case 9: return 23;
|
522
562
|
break;
|
523
|
-
case 10:
|
563
|
+
case 10: return 23;
|
564
|
+
break;
|
565
|
+
case 11: this.popState(); this.begin('com');
|
566
|
+
break;
|
567
|
+
case 12: yy_.yytext = yy_.yytext.substr(3,yy_.yyleng-5); this.popState(); return 15;
|
568
|
+
break;
|
569
|
+
case 13: return 22;
|
524
570
|
break;
|
525
|
-
case
|
571
|
+
case 14: return 36;
|
526
572
|
break;
|
527
|
-
case
|
573
|
+
case 15: return 35;
|
528
574
|
break;
|
529
|
-
case
|
575
|
+
case 16: return 35;
|
530
576
|
break;
|
531
|
-
case
|
577
|
+
case 17: return 39;
|
532
578
|
break;
|
533
|
-
case
|
579
|
+
case 18: /*ignore whitespace*/
|
534
580
|
break;
|
535
|
-
case
|
581
|
+
case 19: this.popState(); return 18;
|
536
582
|
break;
|
537
|
-
case
|
583
|
+
case 20: this.popState(); return 18;
|
538
584
|
break;
|
539
|
-
case
|
585
|
+
case 21: yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2).replace(/\\"/g,'"'); return 30;
|
540
586
|
break;
|
541
|
-
case
|
587
|
+
case 22: yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2).replace(/\\'/g,"'"); return 30;
|
542
588
|
break;
|
543
|
-
case
|
589
|
+
case 23: yy_.yytext = yy_.yytext.substr(1); return 28;
|
544
590
|
break;
|
545
|
-
case
|
591
|
+
case 24: return 32;
|
546
592
|
break;
|
547
|
-
case
|
593
|
+
case 25: return 32;
|
548
594
|
break;
|
549
|
-
case
|
595
|
+
case 26: return 31;
|
550
596
|
break;
|
551
|
-
case
|
597
|
+
case 27: return 35;
|
552
598
|
break;
|
553
|
-
case
|
599
|
+
case 28: yy_.yytext = yy_.yytext.substr(1, yy_.yyleng-2); return 35;
|
554
600
|
break;
|
555
|
-
case
|
601
|
+
case 29: return 'INVALID';
|
556
602
|
break;
|
557
|
-
case
|
603
|
+
case 30: /*ignore whitespace*/
|
558
604
|
break;
|
559
|
-
case
|
605
|
+
case 31: this.popState(); return 37;
|
606
|
+
break;
|
607
|
+
case 32: return 5;
|
560
608
|
break;
|
561
609
|
}
|
562
610
|
};
|
563
|
-
lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|$)))/,/^(?:\{\{>)/,/^(?:\{\{#)/,/^(?:\{\{\/)/,/^(?:\{\{\^)/,/^(?:\{\{\s*else\b)/,/^(?:\{\{\{)/,/^(?:\{\{&)/,/^(?:\{\{![\s\S]*?\}\})/,/^(?:\{\{)/,/^(?:=)/,/^(?:\.(?=[} ]))/,/^(?:\.\.)/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}\}\})/,/^(?:\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@[a-zA-Z]+)/,/^(?:true(?=[}\s]))/,/^(?:false(?=[}\s]))/,/^(?:[0-9]+(?=[}\s]))/,/^(?:[a-zA-Z0-9_$-]+(?=[=}\s\/.]))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/];
|
564
|
-
lexer.conditions = {"mu":{"rules":[
|
611
|
+
lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|$)))/,/^(?:[\s\S]*?--\}\})/,/^(?:\{\{>)/,/^(?:\{\{#)/,/^(?:\{\{\/)/,/^(?:\{\{\^)/,/^(?:\{\{\s*else\b)/,/^(?:\{\{\{)/,/^(?:\{\{&)/,/^(?:\{\{!--)/,/^(?:\{\{![\s\S]*?\}\})/,/^(?:\{\{)/,/^(?:=)/,/^(?:\.(?=[} ]))/,/^(?:\.\.)/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}\}\})/,/^(?:\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@[a-zA-Z]+)/,/^(?:true(?=[}\s]))/,/^(?:false(?=[}\s]))/,/^(?:[0-9]+(?=[}\s]))/,/^(?:[a-zA-Z0-9_$-]+(?=[=}\s\/.]))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:\s+)/,/^(?:[a-zA-Z0-9_$-/]+)/,/^(?:$)/];
|
612
|
+
lexer.conditions = {"mu":{"rules":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32],"inclusive":false},"emu":{"rules":[2],"inclusive":false},"com":{"rules":[3],"inclusive":false},"par":{"rules":[30,31],"inclusive":false},"INITIAL":{"rules":[0,1,32],"inclusive":true}};
|
565
613
|
return lexer;})()
|
566
614
|
parser.lexer = lexer;
|
567
615
|
function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;
|
568
616
|
return new Parser;
|
569
|
-
})()
|
570
|
-
if (typeof require !== 'undefined' && typeof exports !== 'undefined') {
|
571
|
-
exports.parser = handlebars;
|
572
|
-
exports.Parser = handlebars.Parser;
|
573
|
-
exports.parse = function () { return handlebars.parse.apply(handlebars, arguments); }
|
574
|
-
exports.main = function commonjsMain(args) {
|
575
|
-
if (!args[1])
|
576
|
-
throw new Error('Usage: '+args[0]+' FILE');
|
577
|
-
var source, cwd;
|
578
|
-
if (typeof process !== 'undefined') {
|
579
|
-
source = require('fs').readFileSync(require('path').resolve(args[1]), "utf8");
|
580
|
-
} else {
|
581
|
-
source = require("file").path(require("file").cwd()).join(args[1]).read({charset: "utf-8"});
|
582
|
-
}
|
583
|
-
return exports.parser.parse(source);
|
584
|
-
}
|
585
|
-
if (typeof module !== 'undefined' && require.main === module) {
|
586
|
-
exports.main(typeof process !== 'undefined' ? process.argv.slice(1) : require("system").args);
|
587
|
-
}
|
588
|
-
};
|
589
|
-
;
|
617
|
+
})();;
|
590
618
|
// lib/handlebars/compiler/base.js
|
591
619
|
Handlebars.Parser = handlebars;
|
592
620
|
|
@@ -597,17 +625,7 @@ Handlebars.parse = function(string) {
|
|
597
625
|
|
598
626
|
Handlebars.print = function(ast) {
|
599
627
|
return new Handlebars.PrintVisitor().accept(ast);
|
600
|
-
}
|
601
|
-
|
602
|
-
Handlebars.logger = {
|
603
|
-
DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, level: 3,
|
604
|
-
|
605
|
-
// override in the host environment
|
606
|
-
log: function(level, str) {}
|
607
|
-
};
|
608
|
-
|
609
|
-
Handlebars.log = function(level, str) { Handlebars.logger.log(level, str); };
|
610
|
-
;
|
628
|
+
};;
|
611
629
|
// lib/handlebars/compiler/ast.js
|
612
630
|
(function() {
|
613
631
|
|
@@ -641,13 +659,10 @@ Handlebars.log = function(level, str) { Handlebars.logger.log(level, str); };
|
|
641
659
|
// pass or at runtime.
|
642
660
|
};
|
643
661
|
|
644
|
-
Handlebars.AST.PartialNode = function(
|
645
|
-
this.type
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
this.id = id;
|
650
|
-
this.context = context;
|
662
|
+
Handlebars.AST.PartialNode = function(partialName, context) {
|
663
|
+
this.type = "partial";
|
664
|
+
this.partialName = partialName;
|
665
|
+
this.context = context;
|
651
666
|
};
|
652
667
|
|
653
668
|
var verifyMatch = function(open, close) {
|
@@ -699,6 +714,13 @@ Handlebars.log = function(level, str) { Handlebars.logger.log(level, str); };
|
|
699
714
|
// an ID is simple if it only has one part, and that part is not
|
700
715
|
// `..` or `this`.
|
701
716
|
this.isSimple = parts.length === 1 && !this.isScoped && depth === 0;
|
717
|
+
|
718
|
+
this.stringModeValue = this.string;
|
719
|
+
};
|
720
|
+
|
721
|
+
Handlebars.AST.PartialNameNode = function(name) {
|
722
|
+
this.type = "PARTIAL_NAME";
|
723
|
+
this.name = name;
|
702
724
|
};
|
703
725
|
|
704
726
|
Handlebars.AST.DataNode = function(id) {
|
@@ -709,16 +731,19 @@ Handlebars.log = function(level, str) { Handlebars.logger.log(level, str); };
|
|
709
731
|
Handlebars.AST.StringNode = function(string) {
|
710
732
|
this.type = "STRING";
|
711
733
|
this.string = string;
|
734
|
+
this.stringModeValue = string;
|
712
735
|
};
|
713
736
|
|
714
737
|
Handlebars.AST.IntegerNode = function(integer) {
|
715
738
|
this.type = "INTEGER";
|
716
739
|
this.integer = integer;
|
740
|
+
this.stringModeValue = Number(integer);
|
717
741
|
};
|
718
742
|
|
719
743
|
Handlebars.AST.BooleanNode = function(bool) {
|
720
744
|
this.type = "BOOLEAN";
|
721
745
|
this.bool = bool;
|
746
|
+
this.stringModeValue = bool === "true";
|
722
747
|
};
|
723
748
|
|
724
749
|
Handlebars.AST.CommentNode = function(comment) {
|
@@ -728,14 +753,16 @@ Handlebars.log = function(level, str) { Handlebars.logger.log(level, str); };
|
|
728
753
|
|
729
754
|
})();;
|
730
755
|
// lib/handlebars/utils.js
|
756
|
+
|
757
|
+
var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
|
758
|
+
|
731
759
|
Handlebars.Exception = function(message) {
|
732
760
|
var tmp = Error.prototype.constructor.apply(this, arguments);
|
733
761
|
|
734
|
-
|
735
|
-
|
762
|
+
// Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
|
763
|
+
for (var idx = 0; idx < errorProps.length; idx++) {
|
764
|
+
this[errorProps[idx]] = tmp[errorProps[idx]];
|
736
765
|
}
|
737
|
-
|
738
|
-
this.message = tmp.message;
|
739
766
|
};
|
740
767
|
Handlebars.Exception.prototype = new Error();
|
741
768
|
|
@@ -778,11 +805,7 @@ Handlebars.SafeString.prototype.toString = function() {
|
|
778
805
|
},
|
779
806
|
|
780
807
|
isEmpty: function(value) {
|
781
|
-
if (
|
782
|
-
return true;
|
783
|
-
} else if (value === null) {
|
784
|
-
return true;
|
785
|
-
} else if (value === false) {
|
808
|
+
if (!value && value !== 0) {
|
786
809
|
return true;
|
787
810
|
} else if(Object.prototype.toString.call(value) === "[object Array]" && value.length === 0) {
|
788
811
|
return true;
|
@@ -921,7 +944,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
921
944
|
// evaluate it by executing `blockHelperMissing`
|
922
945
|
this.opcode('pushProgram', program);
|
923
946
|
this.opcode('pushProgram', inverse);
|
924
|
-
this.opcode('
|
947
|
+
this.opcode('pushHash');
|
925
948
|
this.opcode('blockValue');
|
926
949
|
} else {
|
927
950
|
this.ambiguousMustache(mustache, program, inverse);
|
@@ -930,7 +953,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
930
953
|
// evaluate it by executing `blockHelperMissing`
|
931
954
|
this.opcode('pushProgram', program);
|
932
955
|
this.opcode('pushProgram', inverse);
|
933
|
-
this.opcode('
|
956
|
+
this.opcode('pushHash');
|
934
957
|
this.opcode('ambiguousBlockValue');
|
935
958
|
}
|
936
959
|
|
@@ -940,19 +963,24 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
940
963
|
hash: function(hash) {
|
941
964
|
var pairs = hash.pairs, pair, val;
|
942
965
|
|
943
|
-
this.opcode('
|
966
|
+
this.opcode('pushHash');
|
944
967
|
|
945
968
|
for(var i=0, l=pairs.length; i<l; i++) {
|
946
969
|
pair = pairs[i];
|
947
970
|
val = pair[1];
|
948
971
|
|
949
|
-
this.
|
972
|
+
if (this.options.stringParams) {
|
973
|
+
this.opcode('pushStringParam', val.stringModeValue, val.type);
|
974
|
+
} else {
|
975
|
+
this.accept(val);
|
976
|
+
}
|
977
|
+
|
950
978
|
this.opcode('assignToHash', pair[0]);
|
951
979
|
}
|
952
980
|
},
|
953
981
|
|
954
982
|
partial: function(partial) {
|
955
|
-
var
|
983
|
+
var partialName = partial.partialName;
|
956
984
|
this.usePartial = true;
|
957
985
|
|
958
986
|
if(partial.context) {
|
@@ -961,7 +989,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
961
989
|
this.opcode('push', 'depth0');
|
962
990
|
}
|
963
991
|
|
964
|
-
this.opcode('invokePartial',
|
992
|
+
this.opcode('invokePartial', partialName.name);
|
965
993
|
this.opcode('append');
|
966
994
|
},
|
967
995
|
|
@@ -1116,7 +1144,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1116
1144
|
}
|
1117
1145
|
|
1118
1146
|
this.opcode('getContext', param.depth || 0);
|
1119
|
-
this.opcode('pushStringParam', param.
|
1147
|
+
this.opcode('pushStringParam', param.stringModeValue, param.type);
|
1120
1148
|
} else {
|
1121
1149
|
this[param.type](param);
|
1122
1150
|
}
|
@@ -1130,7 +1158,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1130
1158
|
if(mustache.hash) {
|
1131
1159
|
this.hash(mustache.hash);
|
1132
1160
|
} else {
|
1133
|
-
this.opcode('
|
1161
|
+
this.opcode('pushHash');
|
1134
1162
|
}
|
1135
1163
|
|
1136
1164
|
return params;
|
@@ -1147,7 +1175,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1147
1175
|
if(mustache.hash) {
|
1148
1176
|
this.hash(mustache.hash);
|
1149
1177
|
} else {
|
1150
|
-
this.opcode('
|
1178
|
+
this.opcode('pushHash');
|
1151
1179
|
}
|
1152
1180
|
|
1153
1181
|
return params;
|
@@ -1322,7 +1350,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1322
1350
|
|
1323
1351
|
this.replaceStack(function(current) {
|
1324
1352
|
params.splice(1, 0, current);
|
1325
|
-
return
|
1353
|
+
return "blockHelperMissing.call(" + params.join(", ") + ")";
|
1326
1354
|
});
|
1327
1355
|
},
|
1328
1356
|
|
@@ -1434,7 +1462,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1434
1462
|
this.context.aliases.functionType = '"function"';
|
1435
1463
|
|
1436
1464
|
this.replaceStack(function(current) {
|
1437
|
-
return "typeof " + current + " === functionType ? " + current + "() : " + current;
|
1465
|
+
return "typeof " + current + " === functionType ? " + current + ".apply(depth0) : " + current;
|
1438
1466
|
});
|
1439
1467
|
},
|
1440
1468
|
|
@@ -1469,9 +1497,24 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1469
1497
|
// This opcode is designed for use in string mode, which
|
1470
1498
|
// provides the string value of a parameter along with its
|
1471
1499
|
// depth rather than resolving it immediately.
|
1472
|
-
pushStringParam: function(string) {
|
1500
|
+
pushStringParam: function(string, type) {
|
1473
1501
|
this.pushStackLiteral('depth' + this.lastContext);
|
1474
|
-
|
1502
|
+
|
1503
|
+
this.pushString(type);
|
1504
|
+
|
1505
|
+
if (typeof string === 'string') {
|
1506
|
+
this.pushString(string);
|
1507
|
+
} else {
|
1508
|
+
this.pushStackLiteral(string);
|
1509
|
+
}
|
1510
|
+
},
|
1511
|
+
|
1512
|
+
pushHash: function() {
|
1513
|
+
this.push('{}');
|
1514
|
+
|
1515
|
+
if (this.options.stringParams) {
|
1516
|
+
this.register('hashTypes', '{}');
|
1517
|
+
}
|
1475
1518
|
},
|
1476
1519
|
|
1477
1520
|
// [pushString]
|
@@ -1579,7 +1622,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1579
1622
|
var nextStack = this.nextStack();
|
1580
1623
|
|
1581
1624
|
this.source.push('if (foundHelper) { ' + nextStack + ' = foundHelper.call(' + helper.callParams + '); }');
|
1582
|
-
this.source.push('else { ' + nextStack + ' = ' + nonHelper + '; ' + nextStack + ' = typeof ' + nextStack + ' === functionType ? ' + nextStack + '() : ' + nextStack + '; }');
|
1625
|
+
this.source.push('else { ' + nextStack + ' = ' + nonHelper + '; ' + nextStack + ' = typeof ' + nextStack + ' === functionType ? ' + nextStack + '.apply(depth0) : ' + nextStack + '; }');
|
1583
1626
|
},
|
1584
1627
|
|
1585
1628
|
// [invokePartial]
|
@@ -1597,7 +1640,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1597
1640
|
}
|
1598
1641
|
|
1599
1642
|
this.context.aliases.self = "this";
|
1600
|
-
this.pushStack("self.invokePartial(" + params.join(", ") + ")
|
1643
|
+
this.pushStack("self.invokePartial(" + params.join(", ") + ")");
|
1601
1644
|
},
|
1602
1645
|
|
1603
1646
|
// [assignToHash]
|
@@ -1609,6 +1652,13 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1609
1652
|
// and pushes the hash back onto the stack.
|
1610
1653
|
assignToHash: function(key) {
|
1611
1654
|
var value = this.popStack();
|
1655
|
+
|
1656
|
+
if (this.options.stringParams) {
|
1657
|
+
var type = this.popStack();
|
1658
|
+
this.popStack();
|
1659
|
+
this.source.push("hashTypes['" + key + "'] = " + type + ";");
|
1660
|
+
}
|
1661
|
+
|
1612
1662
|
var hash = this.topStack();
|
1613
1663
|
|
1614
1664
|
this.source.push(hash + "['" + key + "'] = " + value + ";");
|
@@ -1678,21 +1728,28 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1678
1728
|
},
|
1679
1729
|
|
1680
1730
|
pushStack: function(item) {
|
1681
|
-
this.
|
1682
|
-
this.
|
1683
|
-
|
1731
|
+
var stack = this.incrStack();
|
1732
|
+
this.source.push(stack + " = " + item + ";");
|
1733
|
+
this.compileStack.push(stack);
|
1734
|
+
return stack;
|
1684
1735
|
},
|
1685
1736
|
|
1686
1737
|
replaceStack: function(callback) {
|
1687
|
-
var
|
1738
|
+
var stack = this.topStack(),
|
1739
|
+
item = callback.call(this, stack);
|
1688
1740
|
|
1689
|
-
|
1690
|
-
|
1741
|
+
// Prevent modification of the context depth variable. Through replaceStack
|
1742
|
+
if (/^depth/.test(stack)) {
|
1743
|
+
stack = this.nextStack();
|
1744
|
+
}
|
1745
|
+
|
1746
|
+
this.source.push(stack + " = " + item + ";");
|
1747
|
+
return stack;
|
1691
1748
|
},
|
1692
1749
|
|
1693
1750
|
nextStack: function(skipCompileStack) {
|
1694
1751
|
var name = this.incrStack();
|
1695
|
-
this.compileStack.push(
|
1752
|
+
this.compileStack.push(name);
|
1696
1753
|
return name;
|
1697
1754
|
},
|
1698
1755
|
|
@@ -1747,7 +1804,7 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1747
1804
|
// the params and contexts arguments are passed in arrays
|
1748
1805
|
// to fill in
|
1749
1806
|
setupParams: function(paramSize, params) {
|
1750
|
-
var options = [], contexts = [], param, inverse, program;
|
1807
|
+
var options = [], contexts = [], types = [], param, inverse, program;
|
1751
1808
|
|
1752
1809
|
options.push("hash:" + this.popStack());
|
1753
1810
|
|
@@ -1776,12 +1833,15 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1776
1833
|
params.push(param);
|
1777
1834
|
|
1778
1835
|
if(this.options.stringParams) {
|
1836
|
+
types.push(this.popStack());
|
1779
1837
|
contexts.push(this.popStack());
|
1780
1838
|
}
|
1781
1839
|
}
|
1782
1840
|
|
1783
1841
|
if (this.options.stringParams) {
|
1784
1842
|
options.push("contexts:[" + contexts.join(",") + "]");
|
1843
|
+
options.push("types:[" + types.join(",") + "]");
|
1844
|
+
options.push("hashTypes:hashTypes");
|
1785
1845
|
}
|
1786
1846
|
|
1787
1847
|
if(this.options.data) {
|
@@ -1827,16 +1887,28 @@ Handlebars.JavaScriptCompiler = function() {};
|
|
1827
1887
|
})(Handlebars.Compiler, Handlebars.JavaScriptCompiler);
|
1828
1888
|
|
1829
1889
|
Handlebars.precompile = function(string, options) {
|
1830
|
-
|
1890
|
+
if (typeof string !== 'string') {
|
1891
|
+
throw new Handlebars.Exception("You must pass a string to Handlebars.compile. You passed " + string);
|
1892
|
+
}
|
1831
1893
|
|
1894
|
+
options = options || {};
|
1895
|
+
if (!('data' in options)) {
|
1896
|
+
options.data = true;
|
1897
|
+
}
|
1832
1898
|
var ast = Handlebars.parse(string);
|
1833
1899
|
var environment = new Handlebars.Compiler().compile(ast, options);
|
1834
1900
|
return new Handlebars.JavaScriptCompiler().compile(environment, options);
|
1835
1901
|
};
|
1836
1902
|
|
1837
1903
|
Handlebars.compile = function(string, options) {
|
1838
|
-
|
1904
|
+
if (typeof string !== 'string') {
|
1905
|
+
throw new Handlebars.Exception("You must pass a string to Handlebars.compile. You passed " + string);
|
1906
|
+
}
|
1839
1907
|
|
1908
|
+
options = options || {};
|
1909
|
+
if (!('data' in options)) {
|
1910
|
+
options.data = true;
|
1911
|
+
}
|
1840
1912
|
var compiled;
|
1841
1913
|
function compile() {
|
1842
1914
|
var ast = Handlebars.parse(string);
|
@@ -5,7 +5,7 @@ this.Handlebars = {};
|
|
5
5
|
|
6
6
|
(function(Handlebars) {
|
7
7
|
|
8
|
-
Handlebars.VERSION = "1.0.rc.
|
8
|
+
Handlebars.VERSION = "1.0.rc.2";
|
9
9
|
|
10
10
|
Handlebars.helpers = {};
|
11
11
|
Handlebars.partials = {};
|
@@ -62,22 +62,53 @@ Handlebars.createFrame = Object.create || function(object) {
|
|
62
62
|
return obj;
|
63
63
|
};
|
64
64
|
|
65
|
+
Handlebars.logger = {
|
66
|
+
DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, level: 3,
|
67
|
+
|
68
|
+
methodMap: {0: 'debug', 1: 'info', 2: 'warn', 3: 'error'},
|
69
|
+
|
70
|
+
// can be overridden in the host environment
|
71
|
+
log: function(level, obj) {
|
72
|
+
if (Handlebars.logger.level <= level) {
|
73
|
+
var method = Handlebars.logger.methodMap[level];
|
74
|
+
if (typeof console !== 'undefined' && console[method]) {
|
75
|
+
console[method].call(console, obj);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
};
|
80
|
+
|
81
|
+
Handlebars.log = function(level, obj) { Handlebars.logger.log(level, obj); };
|
82
|
+
|
65
83
|
Handlebars.registerHelper('each', function(context, options) {
|
66
84
|
var fn = options.fn, inverse = options.inverse;
|
67
|
-
var ret = "", data;
|
85
|
+
var i = 0, ret = "", data;
|
68
86
|
|
69
87
|
if (options.data) {
|
70
88
|
data = Handlebars.createFrame(options.data);
|
71
89
|
}
|
72
90
|
|
73
|
-
if(context && context
|
74
|
-
|
75
|
-
|
76
|
-
|
91
|
+
if(context && typeof context === 'object') {
|
92
|
+
if(context instanceof Array){
|
93
|
+
for(var j = context.length; i<j; i++) {
|
94
|
+
if (data) { data.index = i; }
|
95
|
+
ret = ret + fn(context[i], { data: data });
|
96
|
+
}
|
97
|
+
} else {
|
98
|
+
for(var key in context) {
|
99
|
+
if(context.hasOwnProperty(key)) {
|
100
|
+
if(data) { data.key = key; }
|
101
|
+
ret = ret + fn(context[key], {data: data});
|
102
|
+
i++;
|
103
|
+
}
|
104
|
+
}
|
77
105
|
}
|
78
|
-
}
|
106
|
+
}
|
107
|
+
|
108
|
+
if(i === 0){
|
79
109
|
ret = inverse(this);
|
80
110
|
}
|
111
|
+
|
81
112
|
return ret;
|
82
113
|
});
|
83
114
|
|
@@ -104,21 +135,24 @@ Handlebars.registerHelper('with', function(context, options) {
|
|
104
135
|
return options.fn(context);
|
105
136
|
});
|
106
137
|
|
107
|
-
Handlebars.registerHelper('log', function(context) {
|
108
|
-
|
138
|
+
Handlebars.registerHelper('log', function(context, options) {
|
139
|
+
var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;
|
140
|
+
Handlebars.log(level, context);
|
109
141
|
});
|
110
142
|
|
111
143
|
}(this.Handlebars));
|
112
144
|
;
|
113
145
|
// lib/handlebars/utils.js
|
146
|
+
|
147
|
+
var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
|
148
|
+
|
114
149
|
Handlebars.Exception = function(message) {
|
115
150
|
var tmp = Error.prototype.constructor.apply(this, arguments);
|
116
151
|
|
117
|
-
|
118
|
-
|
152
|
+
// Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
|
153
|
+
for (var idx = 0; idx < errorProps.length; idx++) {
|
154
|
+
this[errorProps[idx]] = tmp[errorProps[idx]];
|
119
155
|
}
|
120
|
-
|
121
|
-
this.message = tmp.message;
|
122
156
|
};
|
123
157
|
Handlebars.Exception.prototype = new Error();
|
124
158
|
|
@@ -161,11 +195,7 @@ Handlebars.SafeString.prototype.toString = function() {
|
|
161
195
|
},
|
162
196
|
|
163
197
|
isEmpty: function(value) {
|
164
|
-
if (
|
165
|
-
return true;
|
166
|
-
} else if (value === null) {
|
167
|
-
return true;
|
168
|
-
} else if (value === false) {
|
198
|
+
if (!value && value !== 0) {
|
169
199
|
return true;
|
170
200
|
} else if(Object.prototype.toString.call(value) === "[object Array]" && value.length === 0) {
|
171
201
|
return true;
|