handlebars_assets 0.4.3 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- handlebars_assets (0.4.3)
4
+ handlebars_assets (0.4.4)
5
5
  execjs (>= 1.2.9)
6
6
  sprockets (>= 2.0.3)
7
7
  tilt
data/README.md CHANGED
@@ -12,7 +12,7 @@ Using `sprockets` with Sinatra or another framework? **handlebars_assets** works
12
12
 
13
13
  ## handlebars.js
14
14
 
15
- `handlebars_assets` is packaged with `v1.0.beta.5` of `handlebars.js`.
15
+ `handlebars_assets` is packaged with `v1.0.beta.6` of `handlebars.js`.
16
16
 
17
17
  ## Installation with Rails 3.1+
18
18
 
@@ -138,3 +138,4 @@ Once you've made your great commits
138
138
  * Erwan Barrier (@erwanb) : Support for plain sprockets
139
139
  * Brendan Loudermilk (@bloudermilk) : HandlebarsAssets.path
140
140
  * Dan Evans (@danevans) : Rails 2 support
141
+ * Ben Woosley (@empact) : Update to handlebars.js 1.0.0.beta.6
@@ -1,3 +1,3 @@
1
1
  module HandlebarsAssets
2
- VERSION = "0.4.3"
2
+ VERSION = "0.4.4"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  // lib/handlebars/base.js
2
2
  var Handlebars = {};
3
3
 
4
- Handlebars.VERSION = "1.0.beta.5";
4
+ Handlebars.VERSION = "1.0.beta.6";
5
5
 
6
6
  Handlebars.helpers = {};
7
7
  Handlebars.partials = {};
@@ -194,188 +194,103 @@ parseError: function parseError(str, hash) {
194
194
  throw new Error(str);
195
195
  },
196
196
  parse: function parse(input) {
197
- var self = this,
198
- stack = [0],
199
- vstack = [null], // semantic value stack
200
- lstack = [], // location stack
201
- table = this.table,
202
- yytext = '',
203
- yylineno = 0,
204
- yyleng = 0,
205
- recovering = 0,
206
- TERROR = 2,
207
- EOF = 1;
208
-
209
- //this.reductionCount = this.shiftCount = 0;
210
-
197
+ var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
211
198
  this.lexer.setInput(input);
212
199
  this.lexer.yy = this.yy;
213
200
  this.yy.lexer = this.lexer;
214
- if (typeof this.lexer.yylloc == 'undefined')
201
+ if (typeof this.lexer.yylloc == "undefined")
215
202
  this.lexer.yylloc = {};
216
203
  var yyloc = this.lexer.yylloc;
217
204
  lstack.push(yyloc);
218
-
219
- if (typeof this.yy.parseError === 'function')
205
+ if (typeof this.yy.parseError === "function")
220
206
  this.parseError = this.yy.parseError;
221
-
222
- function popStack (n) {
223
- stack.length = stack.length - 2*n;
207
+ function popStack(n) {
208
+ stack.length = stack.length - 2 * n;
224
209
  vstack.length = vstack.length - n;
225
210
  lstack.length = lstack.length - n;
226
211
  }
227
-
228
212
  function lex() {
229
213
  var token;
230
- token = self.lexer.lex() || 1; // $end = 1
231
- // if token isn't its numeric value, convert
232
- if (typeof token !== 'number') {
214
+ token = self.lexer.lex() || 1;
215
+ if (typeof token !== "number") {
233
216
  token = self.symbols_[token] || token;
234
217
  }
235
218
  return token;
236
- };
237
-
238
- var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;
219
+ }
220
+ var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
239
221
  while (true) {
240
- // retreive state number from top of stack
241
- state = stack[stack.length-1];
242
-
243
- // use default actions if available
222
+ state = stack[stack.length - 1];
244
223
  if (this.defaultActions[state]) {
245
224
  action = this.defaultActions[state];
246
225
  } else {
247
226
  if (symbol == null)
248
227
  symbol = lex();
249
- // read action for current state and first input
250
228
  action = table[state] && table[state][symbol];
251
229
  }
252
-
253
- // handle parse error
254
- if (typeof action === 'undefined' || !action.length || !action[0]) {
255
-
230
+ if (typeof action === "undefined" || !action.length || !action[0]) {
256
231
  if (!recovering) {
257
- // Report error
258
232
  expected = [];
259
- for (p in table[state]) if (this.terminals_[p] && p > 2) {
260
- expected.push("'"+this.terminals_[p]+"'");
261
- }
262
- var errStr = '';
233
+ for (p in table[state])
234
+ if (this.terminals_[p] && p > 2) {
235
+ expected.push("'" + this.terminals_[p] + "'");
236
+ }
237
+ var errStr = "";
263
238
  if (this.lexer.showPosition) {
264
- errStr = 'Parse error on line '+(yylineno+1)+":\n"+this.lexer.showPosition()+'\nExpecting '+expected.join(', ');
239
+ errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + this.terminals_[symbol] + "'";
265
240
  } else {
266
- errStr = 'Parse error on line '+(yylineno+1)+": Unexpected " +
267
- (symbol == 1 /*EOF*/ ? "end of input" :
268
- ("'"+(this.terminals_[symbol] || symbol)+"'"));
241
+ errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");
269
242
  }
270
- this.parseError(errStr,
271
- {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
243
+ this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
272
244
  }
273
-
274
- // just recovered from another error
275
- if (recovering == 3) {
276
- if (symbol == EOF) {
277
- throw new Error(errStr || 'Parsing halted.');
278
- }
279
-
280
- // discard current lookahead and grab another
245
+ }
246
+ if (action[0] instanceof Array && action.length > 1) {
247
+ throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
248
+ }
249
+ switch (action[0]) {
250
+ case 1:
251
+ stack.push(symbol);
252
+ vstack.push(this.lexer.yytext);
253
+ lstack.push(this.lexer.yylloc);
254
+ stack.push(action[1]);
255
+ symbol = null;
256
+ if (!preErrorSymbol) {
281
257
  yyleng = this.lexer.yyleng;
282
258
  yytext = this.lexer.yytext;
283
259
  yylineno = this.lexer.yylineno;
284
260
  yyloc = this.lexer.yylloc;
285
- symbol = lex();
261
+ if (recovering > 0)
262
+ recovering--;
263
+ } else {
264
+ symbol = preErrorSymbol;
265
+ preErrorSymbol = null;
286
266
  }
287
-
288
- // try to recover from error
289
- while (1) {
290
- // check for error recovery rule in this state
291
- if ((TERROR.toString()) in table[state]) {
292
- break;
293
- }
294
- if (state == 0) {
295
- throw new Error(errStr || 'Parsing halted.');
296
- }
297
- popStack(1);
298
- state = stack[stack.length-1];
267
+ break;
268
+ case 2:
269
+ len = this.productions_[action[1]][1];
270
+ yyval.$ = vstack[vstack.length - len];
271
+ yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};
272
+ r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
273
+ if (typeof r !== "undefined") {
274
+ return r;
299
275
  }
300
-
301
- preErrorSymbol = symbol; // save the lookahead token
302
- symbol = TERROR; // insert generic error symbol as new lookahead
303
- state = stack[stack.length-1];
304
- action = table[state] && table[state][TERROR];
305
- recovering = 3; // allow 3 real symbols to be shifted before reporting a new error
306
- }
307
-
308
- // this shouldn't happen, unless resolve defaults are off
309
- if (action[0] instanceof Array && action.length > 1) {
310
- throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);
311
- }
312
-
313
- switch (action[0]) {
314
-
315
- case 1: // shift
316
- //this.shiftCount++;
317
-
318
- stack.push(symbol);
319
- vstack.push(this.lexer.yytext);
320
- lstack.push(this.lexer.yylloc);
321
- stack.push(action[1]); // push state
322
- symbol = null;
323
- if (!preErrorSymbol) { // normal execution/no error
324
- yyleng = this.lexer.yyleng;
325
- yytext = this.lexer.yytext;
326
- yylineno = this.lexer.yylineno;
327
- yyloc = this.lexer.yylloc;
328
- if (recovering > 0)
329
- recovering--;
330
- } else { // error just occurred, resume old lookahead f/ before error
331
- symbol = preErrorSymbol;
332
- preErrorSymbol = null;
333
- }
334
- break;
335
-
336
- case 2: // reduce
337
- //this.reductionCount++;
338
-
339
- len = this.productions_[action[1]][1];
340
-
341
- // perform semantic action
342
- yyval.$ = vstack[vstack.length-len]; // default to $$ = $1
343
- // default location, uses first token for firsts, last for lasts
344
- yyval._$ = {
345
- first_line: lstack[lstack.length-(len||1)].first_line,
346
- last_line: lstack[lstack.length-1].last_line,
347
- first_column: lstack[lstack.length-(len||1)].first_column,
348
- last_column: lstack[lstack.length-1].last_column
349
- };
350
- r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
351
-
352
- if (typeof r !== 'undefined') {
353
- return r;
354
- }
355
-
356
- // pop off stack
357
- if (len) {
358
- stack = stack.slice(0,-1*len*2);
359
- vstack = vstack.slice(0, -1*len);
360
- lstack = lstack.slice(0, -1*len);
361
- }
362
-
363
- stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)
364
- vstack.push(yyval.$);
365
- lstack.push(yyval._$);
366
- // goto new state = table[STATE][NONTERMINAL]
367
- newState = table[stack[stack.length-2]][stack[stack.length-1]];
368
- stack.push(newState);
369
- break;
370
-
371
- case 3: // accept
372
- return true;
276
+ if (len) {
277
+ stack = stack.slice(0, -1 * len * 2);
278
+ vstack = vstack.slice(0, -1 * len);
279
+ lstack = lstack.slice(0, -1 * len);
280
+ }
281
+ stack.push(this.productions_[action[1]][0]);
282
+ vstack.push(yyval.$);
283
+ lstack.push(yyval._$);
284
+ newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
285
+ stack.push(newState);
286
+ break;
287
+ case 3:
288
+ return true;
373
289
  }
374
-
375
290
  }
376
-
377
291
  return true;
378
- }};/* Jison generated lexer */
292
+ }
293
+ };/* Jison generated lexer */
379
294
  var lexer = (function(){
380
295
 
381
296
  var lexer = ({EOF:1,
@@ -489,6 +404,12 @@ popState:function popState() {
489
404
  },
490
405
  _currentRules:function _currentRules() {
491
406
  return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;
407
+ },
408
+ topState:function () {
409
+ return this.conditionStack[this.conditionStack.length-2];
410
+ },
411
+ pushState:function begin(condition) {
412
+ this.begin(condition);
492
413
  }});
493
414
  lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
494
415
 
@@ -1078,13 +999,13 @@ Handlebars.JavaScriptCompiler = function() {};
1078
999
  // PUBLIC API: You can override these methods in a subclass to provide
1079
1000
  // alternative compiled forms for name lookup and buffering semantics
1080
1001
  nameLookup: function(parent, name, type) {
1081
- if (/^[0-9]+$/.test(name)) {
1002
+ if (/^[0-9]+$/.test(name)) {
1082
1003
  return parent + "[" + name + "]";
1083
1004
  } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
1084
- return parent + "." + name;
1085
- }
1086
- else {
1087
- return parent + "['" + name + "']";
1005
+ return parent + "." + name;
1006
+ }
1007
+ else {
1008
+ return parent + "['" + name + "']";
1088
1009
  }
1089
1010
  },
1090
1011
 
@@ -1170,6 +1091,12 @@ Handlebars.JavaScriptCompiler = function() {};
1170
1091
  preamble: function() {
1171
1092
  var out = [];
1172
1093
 
1094
+ // this register will disambiguate helper lookup from finding a function in
1095
+ // a context. This is necessary for mustache compatibility, which requires
1096
+ // that context functions in blocks are evaluated by blockHelperMissing, and
1097
+ // then proceed as if the resulting value was provided to blockHelperMissing.
1098
+ this.useRegister('foundHelper');
1099
+
1173
1100
  if (!this.isChild) {
1174
1101
  var namespace = this.namespace;
1175
1102
  var copies = "helpers = helpers || " + namespace + ".helpers;";
@@ -1282,10 +1209,8 @@ Handlebars.JavaScriptCompiler = function() {};
1282
1209
  } else if (isScoped || this.options.knownHelpersOnly) {
1283
1210
  toPush = topStack + " = " + this.nameLookup('depth' + this.lastContext, name, 'context');
1284
1211
  } else {
1285
- toPush = topStack + " = "
1286
- + this.nameLookup('helpers', name, 'helper')
1287
- + " || "
1288
- + this.nameLookup('depth' + this.lastContext, name, 'context');
1212
+ this.register('foundHelper', this.nameLookup('helpers', name, 'helper'));
1213
+ toPush = topStack + " = foundHelper || " + this.nameLookup('depth' + this.lastContext, name, 'context');
1289
1214
  }
1290
1215
 
1291
1216
  toPush += ';';
@@ -1298,7 +1223,7 @@ Handlebars.JavaScriptCompiler = function() {};
1298
1223
  lookup: function(name) {
1299
1224
  var topStack = this.topStack();
1300
1225
  this.source.push(topStack + " = (" + topStack + " === null || " + topStack + " === undefined || " + topStack + " === false ? " +
1301
- topStack + " : " + this.nameLookup(topStack, name, 'context') + ");");
1226
+ topStack + " : " + this.nameLookup(topStack, name, 'context') + ");");
1302
1227
  },
1303
1228
 
1304
1229
  pushStringParam: function(string) {
@@ -1380,10 +1305,10 @@ Handlebars.JavaScriptCompiler = function() {};
1380
1305
 
1381
1306
  params.push(stringOptions);
1382
1307
 
1383
- this.populateCall(params, id, helperId || id, fn);
1308
+ this.populateCall(params, id, helperId || id, fn, program !== '{}');
1384
1309
  },
1385
1310
 
1386
- populateCall: function(params, id, helperId, fn) {
1311
+ populateCall: function(params, id, helperId, fn, program) {
1387
1312
  var paramString = ["depth0"].concat(params).join(", ");
1388
1313
  var helperMissingString = ["depth0"].concat(helperId).concat(params).join(", ");
1389
1314
 
@@ -1393,7 +1318,8 @@ Handlebars.JavaScriptCompiler = function() {};
1393
1318
  this.source.push(nextStack + " = " + id + ".call(" + paramString + ");");
1394
1319
  } else {
1395
1320
  this.context.aliases.functionType = '"function"';
1396
- this.source.push("if(typeof " + id + " === functionType) { " + nextStack + " = " + id + ".call(" + paramString + "); }");
1321
+ var condition = program ? "foundHelper && " : ""
1322
+ this.source.push("if(" + condition + "typeof " + id + " === functionType) { " + nextStack + " = " + id + ".call(" + paramString + "); }");
1397
1323
  }
1398
1324
  fn.call(this, nextStack, helperMissingString, id);
1399
1325
  this.usingKnownHelper = false;
@@ -1497,9 +1423,23 @@ Handlebars.JavaScriptCompiler = function() {};
1497
1423
  }
1498
1424
  };
1499
1425
 
1500
- var reservedWords = ("break case catch continue default delete do else finally " +
1501
- "for function if in instanceof new return switch this throw " +
1502
- "try typeof var void while with null true false").split(" ");
1426
+ var reservedWords = (
1427
+ "break else new var" +
1428
+ " case finally return void" +
1429
+ " catch for switch while" +
1430
+ " continue function this with" +
1431
+ " default if throw" +
1432
+ " delete in try" +
1433
+ " do instanceof typeof" +
1434
+ " abstract enum int short" +
1435
+ " boolean export interface static" +
1436
+ " byte extends long super" +
1437
+ " char final native synchronized" +
1438
+ " class float package throws" +
1439
+ " const goto private transient" +
1440
+ " debugger implements protected volatile" +
1441
+ " double import public let yield"
1442
+ ).split(" ");
1503
1443
 
1504
1444
  var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};
1505
1445
 
@@ -1507,12 +1447,12 @@ Handlebars.JavaScriptCompiler = function() {};
1507
1447
  compilerWords[reservedWords[i]] = true;
1508
1448
  }
1509
1449
 
1510
- JavaScriptCompiler.isValidJavaScriptVariableName = function(name) {
1511
- if(!JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]+$/.test(name)) {
1512
- return true;
1513
- }
1514
- return false;
1515
- }
1450
+ JavaScriptCompiler.isValidJavaScriptVariableName = function(name) {
1451
+ if(!JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]+$/.test(name)) {
1452
+ return true;
1453
+ }
1454
+ return false;
1455
+ }
1516
1456
 
1517
1457
  })(Handlebars.Compiler, Handlebars.JavaScriptCompiler);
1518
1458
 
@@ -1,7 +1,7 @@
1
1
  // lib/handlebars/base.js
2
2
  var Handlebars = {};
3
3
 
4
- Handlebars.VERSION = "1.0.beta.5";
4
+ Handlebars.VERSION = "1.0.beta.6";
5
5
 
6
6
  Handlebars.helpers = {};
7
7
  Handlebars.partials = {};
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: handlebars_assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-30 00:00:00.000000000 Z
12
+ date: 2012-04-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: execjs
16
- requirement: &70330048405980 !ruby/object:Gem::Requirement
16
+ requirement: &70241519231440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.2.9
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70330048405980
24
+ version_requirements: *70241519231440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: tilt
27
- requirement: &70330048405480 !ruby/object:Gem::Requirement
27
+ requirement: &70241519230900 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70330048405480
35
+ version_requirements: *70241519230900
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sprockets
38
- requirement: &70330048404860 !ruby/object:Gem::Requirement
38
+ requirement: &70241519230320 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.0.3
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70330048404860
46
+ version_requirements: *70241519230320
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
- requirement: &70330048404340 !ruby/object:Gem::Requirement
49
+ requirement: &70241519229840 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70330048404340
57
+ version_requirements: *70241519229840
58
58
  description: Compile Handlebars templates in the Rails asset pipeline.
59
59
  email:
60
60
  - leshill@gmail.com