hogan_assets 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hogan_assets (1.0.1)
4
+ hogan_assets (1.0.2)
5
5
  execjs (>= 1.2.9)
6
6
  sprockets (>= 2.0.3)
7
7
  tilt (>= 1.3.3)
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  **hogan.js** is a templating engine developed at [Twitter](http://twitter.com) that follows the **mustache** spec and compiles the templates to JavaScript. The first bit is *cool*, since **mustache** is *cool*. The second bit is **awesome and full of win** because we can now compile our **mustache** templates on the server using the asset pipeline/sprockets.
6
6
 
7
- This gem contains **hogan.js v1.0.4**
7
+ This gem contains **hogan.js v1.0.5**
8
8
 
9
9
  ## Installation
10
10
 
@@ -55,6 +55,10 @@ Templates are compiled to a global JavaScript object named `HoganTemplates`. To
55
55
 
56
56
  I made this because I <3 **mustache** and want to use it in Rails. Follow me on [Github](https://github.com/leshill) and [Twitter](https://twitter.com/leshill).
57
57
 
58
+ # Contributors
59
+
60
+ * Matthew Nelson (@mdavidn) : Remove unnecessary template source
61
+
58
62
  ## Contributing
59
63
 
60
64
  1. Fork it
@@ -6,15 +6,10 @@ module HoganAssets
6
6
 
7
7
  def evaluate(scope, locals, &block)
8
8
  compiled_template = Hogan.compile(data)
9
- code = data.inspect
10
9
  template_name = scope.logical_path.inspect
11
10
  <<-TEMPLATE
12
- (function() {
13
- this.HoganTemplates || (this.HoganTemplates = {});
14
- this.HoganTemplates[#{template_name}] = new Hogan.Template(#{code});
15
- this.HoganTemplates[#{template_name}].r = #{compiled_template};
16
- return HoganTemplates[#{template_name}];
17
- }).call(this);
11
+ this.HoganTemplates || (this.HoganTemplates = {});
12
+ this.HoganTemplates[#{template_name}] = new Hogan.Template(#{compiled_template});
18
13
  TEMPLATE
19
14
  end
20
15
 
@@ -1,3 +1,3 @@
1
1
  module HoganAssets
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -12,14 +12,10 @@ module HoganAssets
12
12
  end.new
13
13
 
14
14
  template = HoganAssets::Tilt.new('/myapp/app/assets/templates/path/to/template.mustache') { "This is {{mustache}}" }
15
- assert_equal <<END_EXPECTED, template.render(scope, {})
16
- (function() {
17
- this.HoganTemplates || (this.HoganTemplates = {});
18
- this.HoganTemplates["path/to/template"] = new Hogan.Template("This is {{mustache}}");
19
- this.HoganTemplates["path/to/template"].r = function(c,p,i){i = i || "";var b = i + "";var _ = this;b += "This is ";b += (_.v(_.f("mustache",c,p,0)));return b;;};
20
- return HoganTemplates["path/to/template"];
21
- }).call(this);
22
- END_EXPECTED
15
+ assert_equal <<-END_EXPECTED, template.render(scope, {})
16
+ this.HoganTemplates || (this.HoganTemplates = {});
17
+ this.HoganTemplates[\"path/to/template\"] = new Hogan.Template(function(c,p,i){var _=this;_.b(i=i||\"\");_.b(\"This is \");_.b(_.v(_.f(\"mustache\",c,p,0)));return _.fl();;});
18
+ END_EXPECTED
23
19
  end
24
20
  end
25
21
  end
@@ -17,13 +17,13 @@
17
17
 
18
18
  var Hogan = {};
19
19
 
20
- (function (Hogan) {
21
- Hogan.Template = function constructor(renderFunc, text, compiler) {
22
- if (renderFunc) {
23
- this.r = renderFunc;
24
- }
20
+ (function (Hogan, useArrayBuffer) {
21
+ Hogan.Template = function (renderFunc, text, compiler, options) {
22
+ this.r = renderFunc || this.r;
25
23
  this.c = compiler;
24
+ this.options = options;
26
25
  this.text = text || '';
26
+ this.buf = (useArrayBuffer) ? [] : '';
27
27
  }
28
28
 
29
29
  Hogan.Template.prototype = {
@@ -33,6 +33,9 @@ var Hogan = {};
33
33
  // variable escaping
34
34
  v: hoganEscape,
35
35
 
36
+ // triple stache
37
+ t: coerceToString,
38
+
36
39
  render: function render(context, partials, indent) {
37
40
  return this.ri([context], partials || {}, indent);
38
41
  },
@@ -51,7 +54,7 @@ var Hogan = {};
51
54
  }
52
55
 
53
56
  if (this.c && typeof partial == 'string') {
54
- partial = this.c.compile(partial);
57
+ partial = this.c.compile(partial, this.options);
55
58
  }
56
59
 
57
60
  return partial.ri(context, partials, indent);
@@ -59,20 +62,18 @@ var Hogan = {};
59
62
 
60
63
  // render a section
61
64
  rs: function(context, partials, section) {
62
- var buf = '',
63
- tail = context[context.length - 1];
65
+ var tail = context[context.length - 1];
64
66
 
65
67
  if (!isArray(tail)) {
66
- return buf = section(context, partials);
68
+ section(context, partials, this);
69
+ return;
67
70
  }
68
71
 
69
72
  for (var i = 0; i < tail.length; i++) {
70
73
  context.push(tail[i]);
71
- buf += section(context, partials);
74
+ section(context, partials, this);
72
75
  context.pop();
73
76
  }
74
-
75
- return buf;
76
77
  },
77
78
 
78
79
  // maybe start a section
@@ -157,16 +158,20 @@ var Hogan = {};
157
158
  // higher order templates
158
159
  ho: function(val, cx, partials, text, tags) {
159
160
  var compiler = this.c;
161
+ var options = this.options;
162
+ options.delimiters = tags;
160
163
  var t = val.call(cx, text, function(t) {
161
- return compiler.compile(t, {delimiters: tags}).render(cx, partials);
164
+ return compiler.compile(t, options).render(cx, partials);
162
165
  });
163
- var s = compiler.compile(t.toString(), {delimiters: tags}).render(cx, partials);
164
- this.b = s;
166
+ this.b(compiler.compile(t.toString(), options).render(cx, partials));
165
167
  return false;
166
168
  },
167
169
 
168
- // higher order template result buffer
169
- b: '',
170
+ // template result buffering
171
+ b: (useArrayBuffer) ? function(s) { this.buf.push(s); } :
172
+ function(s) { this.buf += s; },
173
+ fl: (useArrayBuffer) ? function() { var r = this.buf.join(''); this.buf = []; return r; } :
174
+ function() { var r = this.buf; this.buf = ''; return r; },
170
175
 
171
176
  // lambda replace section
172
177
  ls: function(val, ctx, partials, inverted, start, end, tags) {
@@ -197,10 +202,10 @@ var Hogan = {};
197
202
  if (typeof result == 'function') {
198
203
  result = result.call(cx);
199
204
  }
200
- result = result.toString();
205
+ result = coerceToString(result);
201
206
 
202
- if (this.c && ~result.indexOf("{{")) {
203
- return this.c.compile(result).render(cx, partials);
207
+ if (this.c && ~result.indexOf("{\u007B")) {
208
+ return this.c.compile(result, this.options).render(cx, partials);
204
209
  }
205
210
 
206
211
  return result;
@@ -215,8 +220,13 @@ var Hogan = {};
215
220
  rQuot = /\"/g,
216
221
  hChars =/[&<>\"\']/;
217
222
 
223
+
224
+ function coerceToString(val) {
225
+ return String((val === null || val === undefined) ? '' : val);
226
+ }
227
+
218
228
  function hoganEscape(str) {
219
- str = String((str === null || str === undefined) ? '' : str);
229
+ str = coerceToString(str);
220
230
  return hChars.test(str) ?
221
231
  str
222
232
  .replace(rAmp,'&amp;')
@@ -457,7 +467,7 @@ var Hogan = {};
457
467
  }
458
468
 
459
469
  function writeCode(tree) {
460
- return 'i = i || "";var b = i + "";var _ = this;' + walk(tree) + 'return b;';
470
+ return 'var _=this;_.b(i=i||"");' + walk(tree) + 'return _.fl();';
461
471
  }
462
472
 
463
473
  Hogan.generate = function (code, text, options) {
@@ -465,7 +475,7 @@ var Hogan = {};
465
475
  return 'function(c,p,i){' + code + ';}';
466
476
  }
467
477
 
468
- return new Hogan.Template(new Function('c', 'p', 'i', code), text, Hogan);
478
+ return new Hogan.Template(new Function('c', 'p', 'i', code), text, Hogan, options);
469
479
  }
470
480
 
471
481
  function esc(s) {
@@ -506,37 +516,36 @@ var Hogan = {};
506
516
 
507
517
  function section(nodes, id, method, start, end, tags) {
508
518
  return 'if(_.s(_.' + method + '("' + esc(id) + '",c,p,1),' +
509
- 'c,p,0,' + start + ',' + end + ', "' + tags + '")){' +
510
- 'b += _.rs(c,p,' +
511
- 'function(c,p){ var b = "";' +
519
+ 'c,p,0,' + start + ',' + end + ',"' + tags + '")){' +
520
+ '_.rs(c,p,' +
521
+ 'function(c,p,_){' +
512
522
  walk(nodes) +
513
- 'return b;});c.pop();}' +
514
- 'else{b += _.b; _.b = ""};';
523
+ '});c.pop();}';
515
524
  }
516
525
 
517
526
  function invertedSection(nodes, id, method) {
518
- return 'if (!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0,"")){' +
527
+ return 'if(!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0,"")){' +
519
528
  walk(nodes) +
520
529
  '};';
521
530
  }
522
531
 
523
532
  function partial(tok) {
524
- return 'b += _.rp("' + esc(tok.n) + '",c,p,"' + (tok.indent || '') + '");';
533
+ return '_.b(_.rp("' + esc(tok.n) + '",c,p,"' + (tok.indent || '') + '"));';
525
534
  }
526
535
 
527
536
  function tripleStache(id, method) {
528
- return 'b += (_.' + method + '("' + esc(id) + '",c,p,0));';
537
+ return '_.b(_.t(_.' + method + '("' + esc(id) + '",c,p,0)));';
529
538
  }
530
539
 
531
540
  function variable(id, method) {
532
- return 'b += (_.v(_.' + method + '("' + esc(id) + '",c,p,0)));';
541
+ return '_.b(_.v(_.' + method + '("' + esc(id) + '",c,p,0)));';
533
542
  }
534
543
 
535
544
  function text(id) {
536
- return 'b += ' + id + ';';
545
+ return '_.b(' + id + ');';
537
546
  }
538
547
 
539
- Hogan.parse = function(tokens, options) {
548
+ Hogan.parse = function(tokens, text, options) {
540
549
  options = options || {};
541
550
  return buildTree(tokens, '', [], options.sectionTags || []);
542
551
  },
@@ -565,12 +574,8 @@ var Hogan = {};
565
574
  return t;
566
575
  }
567
576
 
568
- t = this.generate(writeCode(this.parse(this.scan(text, options.delimiters), options)), text, options);
577
+ t = this.generate(writeCode(this.parse(this.scan(text, options.delimiters), text, options)), text, options);
569
578
  return this.cache[key] = t;
570
579
  };
571
580
  })(typeof exports !== 'undefined' ? exports : Hogan);
572
581
 
573
-
574
- if (typeof define === 'function' && define.amd) {
575
- define(Hogan);
576
- }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hogan_assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
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-01-08 00:00:00.000000000Z
12
+ date: 2012-02-15 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: execjs
16
- requirement: &70264420834000 !ruby/object:Gem::Requirement
16
+ requirement: &70197692099300 !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: *70264420834000
24
+ version_requirements: *70197692099300
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: tilt
27
- requirement: &70264420833500 !ruby/object:Gem::Requirement
27
+ requirement: &70197692098520 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.3.3
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70264420833500
35
+ version_requirements: *70197692098520
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sprockets
38
- requirement: &70264420833020 !ruby/object:Gem::Requirement
38
+ requirement: &70197692097800 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: 2.0.3
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70264420833020
46
+ version_requirements: *70197692097800
47
47
  description: Use compiled hogan.js (mustache) JavaScript templates with sprockets
48
48
  and the Rails asset pipeline.
49
49
  email: