express-hbs 2.4.2 → 3.0.0

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.
package/test/i18nSpecs.js CHANGED
@@ -2,31 +2,33 @@ var request = require('supertest');
2
2
  var assert = require('assert');
3
3
  var hbs = require('..');
4
4
 
5
- describe('i18n', function() {
5
+ describe('i18n', function () {
6
6
  var app;
7
7
 
8
- beforeEach(function() {
8
+ beforeEach(function () {
9
9
  var apper = require('./apps/i18n');
10
10
  app = apper.create(hbs.create());
11
11
  });
12
12
 
13
- it('should render en', function(done) {
13
+ it('should render en', function (done) {
14
14
  request(app)
15
15
  .get('/')
16
16
  .set('Cookie', 'locale=en')
17
- .end(function(req, res) {
18
- var expected = '<span id="text">text to test</span>\n<br>\n<span class="each">1 cat</span><span class="each">2 cats</span>';
17
+ .end(function (req, res) {
18
+ var expected =
19
+ '<span id="text">text to test</span>\n<br>\n<span class="each">1 cat</span><span class="each">2 cats</span>';
19
20
  assert.equal(res.text, expected);
20
21
  done();
21
22
  });
22
23
  });
23
24
 
24
- it('should render fr', function(done) {
25
+ it('should render fr', function (done) {
25
26
  request(app)
26
27
  .get('/')
27
28
  .set('Cookie', 'locale=fr')
28
- .end(function(req, res) {
29
- var expected = '<span id="text">Texte à tester</span>\n<br>\n<span class="chaque">1 chat</span><span class="chaque">2 chats</span>';
29
+ .end(function (req, res) {
30
+ var expected =
31
+ '<span id="text">Texte à tester</span>\n<br>\n<span class="chaque">1 chat</span><span class="chaque">2 chats</span>';
30
32
  assert.equal(res.text, expected);
31
33
  done();
32
34
  });
package/test/issues.js CHANGED
@@ -4,19 +4,20 @@ var hbs = require('..');
4
4
  var path = require('path');
5
5
  var H = require('./helpers');
6
6
 
7
-
8
- describe('issue-22 template', function() {
7
+ describe('issue-22 template', function () {
9
8
  var dirname = path.join(__dirname, 'issues/22');
10
9
 
11
- it('should use multiple layouts with caching', function(done) {
12
- var render = hbs.create().express3({});
10
+ it('should use multiple layouts with caching', function (done) {
11
+ var render = hbs.create().express3({
12
+ restrictLayoutsTo: dirname,
13
+ });
13
14
  var locals1 = H.createLocals('express3', dirname, { layout: 'layout1', cache: true });
14
15
  var locals2 = H.createLocals('express3', dirname, { layout: 'layout2', cache: true });
15
16
 
16
- render(dirname + '/template.hbs', locals1, function(err, html) {
17
+ render(dirname + '/template.hbs', locals1, function (err, html) {
17
18
  assert.ifError(err);
18
19
  assert.equal('<layout1>template</layout1>', H.stripWs(html));
19
- render(dirname + '/template.hbs', locals2, function(err, html) {
20
+ render(dirname + '/template.hbs', locals2, function (err, html) {
20
21
  assert.ifError(err);
21
22
  assert.equal('<layout2>template</layout2>', H.stripWs(html));
22
23
  done();
@@ -25,12 +26,13 @@ describe('issue-22 template', function() {
25
26
  });
26
27
  });
27
28
 
28
- describe('issue-23', function() {
29
- var dirname = path.join(__dirname, 'issues/23');
29
+ describe('issue-23', function () {
30
+ var dirname = path.join(__dirname, 'issues/23');
30
31
 
31
- it('should not pass an empty or missing partial to handlebars', function(done) {
32
+ it('should not pass an empty or missing partial to handlebars', function (done) {
32
33
  var render = hbs.create().express3({
33
- partialsDir: [dirname + '/partials']
34
+ partialsDir: [dirname + '/partials'],
35
+ restrictLayoutsTo: dirname,
34
36
  });
35
37
 
36
38
  function check(err, html) {
@@ -38,12 +40,17 @@ describe('issue-23', function() {
38
40
  assert.equal('<html>Hello</html>', H.stripWs(html));
39
41
  done();
40
42
  }
41
- var result = render(dirname + '/index.hbs', {cache: true, settings: {views: dirname + '/views'}}, check);
43
+ var result = render(
44
+ dirname + '/index.hbs',
45
+ { cache: true, settings: { views: dirname + '/views' } },
46
+ check,
47
+ );
42
48
  });
43
49
 
44
- it('should handle empty string', function(done) {
50
+ it('should handle empty string', function (done) {
45
51
  var render = hbs.create().express3({
46
- partialsDir: [dirname + '/partials']
52
+ partialsDir: [dirname + '/partials'],
53
+ restrictLayoutsTo: dirname,
47
54
  });
48
55
 
49
56
  function check(err, html) {
@@ -51,14 +58,18 @@ describe('issue-23', function() {
51
58
  assert.equal('', H.stripWs(html));
52
59
  done();
53
60
  }
54
- var result = render(dirname + '/empty.hbs', {cache: true, settings: {views: dirname + '/views'}}, check);
61
+ var result = render(
62
+ dirname + '/empty.hbs',
63
+ { cache: true, settings: { views: dirname + '/views' } },
64
+ check,
65
+ );
55
66
  });
56
67
 
57
-
58
- it('should register empty partial', function(done) {
68
+ it('should register empty partial', function (done) {
59
69
  var hb = hbs.create();
60
70
  var render = hb.express3({
61
- partialsDir: [dirname + '/partials']
71
+ partialsDir: [dirname + '/partials'],
72
+ restrictLayoutsTo: dirname,
62
73
  });
63
74
  hb.handlebars.registerPartial('emptyPartial', '');
64
75
 
@@ -74,15 +85,20 @@ describe('issue-23', function() {
74
85
  }
75
86
  }
76
87
  function doIt() {
77
- render(dirname + '/emptyPartial.hbs', {cache: true, settings: {views: dirname + '/views'}}, check);
88
+ render(
89
+ dirname + '/emptyPartial.hbs',
90
+ { cache: true, settings: { views: dirname + '/views' } },
91
+ check,
92
+ );
78
93
  }
79
94
  doIt();
80
95
  });
81
96
 
82
- it('should register partial that results in empty string (comment)', function(done) {
97
+ it('should register partial that results in empty string (comment)', function (done) {
83
98
  var hb = hbs.create();
84
99
  var render = hb.express3({
85
- partialsDir: [dirname + '/partials']
100
+ partialsDir: [dirname + '/partials'],
101
+ restrictLayoutsTo: dirname,
86
102
  });
87
103
  // this fails
88
104
  //hb.handlebars.registerPartial('emptyComment', '{{! just a comment}}');
@@ -100,65 +116,76 @@ describe('issue-23', function() {
100
116
  }
101
117
  }
102
118
  function doIt() {
103
- render(dirname + '/emptyComment.hbs', {cache: true, settings: {views: dirname + '/views'}}, check);
119
+ render(
120
+ dirname + '/emptyComment.hbs',
121
+ { cache: true, settings: { views: dirname + '/views' } },
122
+ check,
123
+ );
104
124
  }
105
125
  doIt();
106
126
  });
107
127
  });
108
128
 
109
-
110
- describe('issue-21', function() {
111
- var dirname = path.join(__dirname, 'issues/21');
129
+ describe('issue-21', function () {
130
+ var dirname = path.join(__dirname, 'issues/21');
112
131
  var render = hbs.create().express3({
113
- layoutsDir: dirname + '/views/layouts'
132
+ layoutsDir: dirname + '/views/layouts',
133
+ restrictLayoutsTo: dirname,
114
134
  });
115
135
 
116
- it('should allow specifying layouts without the parent dir', function(done) {
136
+ it('should allow specifying layouts without the parent dir', function (done) {
117
137
  function check(err, html) {
118
138
  assert.ifError(err);
119
139
  assert.equal('<html>index</html>', H.stripWs(html));
120
140
  done();
121
141
  }
122
142
 
123
- var options = {cache: true, layout: 'default', settings: {views: dirname + '/views'}};
143
+ var options = { cache: true, layout: 'default', settings: { views: dirname + '/views' } };
124
144
  var result = render(dirname + '/views/index.hbs', options, check);
125
145
  });
126
146
 
147
+ it('should allow specifying layouts without the parent dir in a sub view', function (done) {
148
+ function check(err, html) {
149
+ assert.ifError(err);
150
+ assert.equal('<html>sub</html>', H.stripWs(html));
151
+ done();
152
+ }
127
153
 
128
- it('should allow specifying layouts without the parent dir in a sub view', function(done) { function check(err, html) {
129
- assert.ifError(err);
130
- assert.equal('<html>sub</html>', H.stripWs(html));
131
- done();
132
- }
133
-
134
- var options = {cache: true, layout: 'default', settings: {views: dirname + '/views'}};
135
- var result = render(dirname + '/views/sub/sub.hbs', options, check);
154
+ var options = { cache: true, layout: 'default', settings: { views: dirname + '/views' } };
155
+ var result = render(dirname + '/views/sub/sub.hbs', options, check);
136
156
  });
137
157
 
138
- it('should treat layouts that start with "." relative to template', function(done) { function check(err, html) {
139
- assert.ifError(err);
140
- assert.equal('<relative>sub</relative>', H.stripWs(html));
141
- done();
142
- }
158
+ it('should treat layouts that start with "." relative to template', function (done) {
159
+ function check(err, html) {
160
+ assert.ifError(err);
161
+ assert.equal('<relative>sub</relative>', H.stripWs(html));
162
+ done();
163
+ }
143
164
 
144
- var options = {cache: true, layout: './relativeLayout', settings: {views: dirname + '/views'}};
145
- var result = render(dirname + '/views/sub/sub.hbs', options, check);
165
+ var options = {
166
+ cache: true,
167
+ layout: './relativeLayout',
168
+ settings: { views: dirname + '/views' },
169
+ };
170
+ var result = render(dirname + '/views/sub/sub.hbs', options, check);
146
171
  });
147
172
 
148
- it('should allow layouts in subfolders', function(done) {
173
+ it('should allow layouts in subfolders', function (done) {
149
174
  function check(err, html) {
150
175
  assert.ifError(err);
151
176
  assert.equal('<sub>useLayoutInDir</sub>', H.stripWs(html));
152
177
  done();
153
178
  }
154
179
 
155
- var options = {cache: true, layout: 'sub/child', settings: {views: dirname + '/views'}};
180
+ var options = { cache: true, layout: 'sub/child', settings: { views: dirname + '/views' } };
156
181
  var result = render(dirname + '/views/useLayoutInDir.hbs', options, check);
157
182
  });
158
183
 
159
- it('should treat layouts relative to views directory if layoutsDir is not passed', function(done) {
160
- var dirname = path.join(__dirname, 'issues/21');
161
- var render = hbs.create().express3();
184
+ it('should treat layouts relative to views directory if layoutsDir is not passed', function (done) {
185
+ var dirname = path.join(__dirname, 'issues/21');
186
+ var render = hbs.create().express3({
187
+ restrictLayoutsTo: dirname,
188
+ });
162
189
 
163
190
  function check(err, html) {
164
191
  assert.ifError(err);
@@ -166,74 +193,85 @@ describe('issue-21', function() {
166
193
  done();
167
194
  }
168
195
 
169
- var options = {cache: true, layout: 'layouts/sub/child', settings: {views: dirname + '/views'}};
196
+ var options = {
197
+ cache: true,
198
+ layout: 'layouts/sub/child',
199
+ settings: { views: dirname + '/views' },
200
+ };
170
201
  var result = render(dirname + '/views/sub/sub.hbs', options, check);
171
202
  });
172
203
  });
173
204
 
205
+ describe('issue-49', function () {
206
+ var dirname = path.join(__dirname, 'issues/49');
174
207
 
175
- describe('issue-49', function() {
176
- var dirname = path.join(__dirname, 'issues/49');
177
-
178
- it('should report filename with error', function(done) {
179
- var hb = hbs.create()
180
- var render = hb.express3({});
208
+ it('should report filename with error', function (done) {
209
+ var hb = hbs.create();
210
+ var render = hb.express3({
211
+ restrictLayoutsTo: dirname,
212
+ });
181
213
  var locals = H.createLocals('express3', dirname, {});
182
- render(dirname + '/error.hbs', locals, function(err, html) {
214
+ render(dirname + '/error.hbs', locals, function (err, html) {
183
215
  assert(err.stack.indexOf('[error.hbs]') > 0);
184
216
  done();
185
217
  });
186
218
  });
187
219
 
188
- it('should report relative filename with error', function(done) {
189
- var hb = hbs.create()
190
- var render = hb.express3({});
220
+ it('should report relative filename with error', function (done) {
221
+ var hb = hbs.create();
222
+ var render = hb.express3({
223
+ restrictLayoutsTo: dirname,
224
+ });
191
225
  var locals = H.createLocals('express3', dirname, {});
192
- render(dirname + '/front/error.hbs', locals, function(err, html) {
226
+ render(dirname + '/front/error.hbs', locals, function (err, html) {
193
227
  assert(err.stack.indexOf('[front/error.hbs]') > 0);
194
228
  done();
195
229
  });
196
230
  });
197
231
 
198
- it('should report filename with partial error', function(done) {
199
- var hb = hbs.create()
232
+ it('should report filename with partial error', function (done) {
233
+ var hb = hbs.create();
200
234
  var render = hb.express3({
201
- partialsDir: dirname + '/partials'
235
+ partialsDir: dirname + '/partials',
236
+ restrictLayoutsTo: dirname,
202
237
  });
203
238
  var locals = H.createLocals('express3', dirname, {});
204
- render(dirname + '/partial.hbs', locals, function(err, html) {
239
+ render(dirname + '/partial.hbs', locals, function (err, html) {
205
240
  assert(err.stack.indexOf('[partial.hbs]') > 0);
206
241
  done();
207
242
  });
208
243
  });
209
244
 
210
- it('should report filename with layout error', function(done) {
211
- var hb = hbs.create()
245
+ it('should report filename with layout error', function (done) {
246
+ var hb = hbs.create();
212
247
  var render = hb.express3({
213
- partialsDir: dirname + '/partials'
248
+ partialsDir: dirname + '/partials',
249
+ restrictLayoutsTo: dirname,
214
250
  });
215
251
  var locals = H.createLocals('express3', dirname, {});
216
- render(dirname + '/index.hbs', locals, function(err, html) {
252
+ render(dirname + '/index.hbs', locals, function (err, html) {
217
253
  assert(err.stack.indexOf('[layouts/default.hbs]') > 0);
218
254
  done();
219
255
  });
220
256
  });
221
257
  });
222
258
 
223
- describe('issue-53', function() {
224
- var dirname = path.join(__dirname, 'issues/53');
259
+ describe('issue-53', function () {
260
+ var dirname = path.join(__dirname, 'issues/53');
225
261
 
226
- it('should use block with async helpers', function(done) {
227
- var hb = hbs.create()
262
+ it('should use block with async helpers', function (done) {
263
+ var hb = hbs.create();
228
264
  var res = 0;
229
- hb.registerAsyncHelper('weird', function(_, resultcb) {
230
- setTimeout(function() {
265
+ hb.registerAsyncHelper('weird', function (_, resultcb) {
266
+ setTimeout(function () {
231
267
  resultcb(++res);
232
- }, 1)
268
+ }, 1);
269
+ });
270
+ var render = hb.express3({
271
+ restrictLayoutsTo: dirname,
233
272
  });
234
- var render = hb.express3({});
235
273
  var locals = H.createLocals('express3', dirname, {});
236
- render(dirname + '/index.hbs', locals, function(err, html) {
274
+ render(dirname + '/index.hbs', locals, function (err, html) {
237
275
  assert.ifError(err);
238
276
  assert.ok(html.indexOf('__aSyNcId_') < 0);
239
277
  done();
@@ -241,7 +279,7 @@ describe('issue-53', function() {
241
279
  });
242
280
  });
243
281
 
244
- describe('issue-59', function() {
282
+ describe('issue-59', function () {
245
283
  var dirname = __dirname + '/issues/59';
246
284
  it('should escape or not', function (done) {
247
285
  var hb = hbs.create();
@@ -250,10 +288,11 @@ describe('issue-59', function() {
250
288
  cb('<strong>' + s + '</strong>');
251
289
  }
252
290
 
253
- hb.registerAsyncHelper("async", async);
291
+ hb.registerAsyncHelper('async', async);
254
292
 
255
293
  var render = hb.express3({
256
- viewsDir: dirname
294
+ viewsDir: dirname,
295
+ restrictLayoutsTo: dirname,
257
296
  });
258
297
  var locals = H.createLocals('express3', dirname);
259
298
 
@@ -272,7 +311,8 @@ describe('issue-59', function() {
272
311
  hb.registerAsyncHelper('async', async);
273
312
 
274
313
  var render = hb.express3({
275
- viewsDir: dirname
314
+ viewsDir: dirname,
315
+ restrictLayoutsTo: dirname,
276
316
  });
277
317
  var locals = H.createLocals('express3', dirname);
278
318
 
@@ -283,20 +323,21 @@ describe('issue-59', function() {
283
323
  });
284
324
  });
285
325
 
286
- describe('issue-73', function() {
326
+ describe('issue-73', function () {
287
327
  var dirname = path.join(__dirname, 'issues/73');
288
- it('should allow compile options', function(done){
328
+ it('should allow compile options', function (done) {
289
329
  var hb = hbs.create();
290
330
  var render = hb.express3({
291
331
  viewsDir: dirname,
292
332
  partialsDir: dirname + '/partials',
293
- onCompile: function(eh, source, filename) {
333
+ restrictLayoutsTo: dirname,
334
+ onCompile: function (eh, source, filename) {
294
335
  var options;
295
336
  if (filename && filename.indexOf('partials')) {
296
- options = {preventIndent: true};
337
+ options = { preventIndent: true };
297
338
  }
298
339
  return eh.handlebars.compile(source, options);
299
- }
340
+ },
300
341
  });
301
342
 
302
343
  var locals = H.createLocals('express3', dirname);
@@ -311,8 +352,7 @@ describe('issue-73', function() {
311
352
  });
312
353
  });
313
354
 
314
-
315
- describe('issue-62', function() {
355
+ describe('issue-62', function () {
316
356
  var dirname = path.join(__dirname, 'issues/62');
317
357
 
318
358
  it('should provide options for async helpers', function (done) {
@@ -326,18 +366,16 @@ describe('issue-62', function() {
326
366
  }
327
367
  }
328
368
 
329
- hb.registerAsyncHelper("async", async);
369
+ hb.registerAsyncHelper('async', async);
330
370
 
331
371
  var render = hb.express3({
332
- viewsDir: dirname
372
+ viewsDir: dirname,
373
+ restrictLayoutsTo: dirname,
333
374
  });
334
375
  var locals = H.createLocals('express3', dirname);
335
376
 
336
377
  render(dirname + '/basic.hbs', locals, function (err, html) {
337
- assert.equal(
338
- H.stripWs(html),
339
- '&lt;strong&gt;foo&lt;/strong&gt;&lt;em&gt;foo&lt;/em&gt;'
340
- );
378
+ assert.equal(H.stripWs(html), '&lt;strong&gt;foo&lt;/strong&gt;&lt;em&gt;foo&lt;/em&gt;');
341
379
  done();
342
380
  });
343
381
  });
@@ -356,31 +394,30 @@ describe('issue-62', function() {
356
394
  }
357
395
  }
358
396
 
359
- hb.registerAsyncHelper("async", async);
397
+ hb.registerAsyncHelper('async', async);
360
398
 
361
399
  var render = hb.express3({
362
- viewsDir: dirname
400
+ viewsDir: dirname,
401
+ restrictLayoutsTo: dirname,
363
402
  });
364
403
  var locals = H.createLocals('express3', dirname);
365
404
 
366
405
  render(dirname + '/block.hbs', locals, function (err, html) {
367
- assert.equal(
368
- H.stripWs(html),
369
- '<p>GoodbyeWorld</p><p>HelloHandlebars</p>'
370
- );
406
+ assert.equal(H.stripWs(html), '<p>GoodbyeWorld</p><p>HelloHandlebars</p>');
371
407
  done();
372
408
  });
373
409
  });
374
410
  });
375
411
 
376
- describe('issue-76', function() {
377
- var dirname = path.join(__dirname, 'issues/76');
412
+ describe('issue-76', function () {
413
+ var dirname = path.join(__dirname, 'issues/76');
378
414
 
379
415
  it('should allow cachePartials to be called independently of render', function (done) {
380
416
  var hb = hbs.create();
381
417
 
382
418
  var render = hb.express3({
383
- partialsDir: dirname
419
+ partialsDir: dirname,
420
+ restrictLayoutsTo: dirname,
384
421
  });
385
422
 
386
423
  hb.cachePartials(function (err) {
@@ -392,11 +429,12 @@ describe('issue-76', function() {
392
429
  });
393
430
 
394
431
  describe('issue-84', function () {
395
- var dirname = path.join(__dirname, 'issues/84');
432
+ var dirname = path.join(__dirname, 'issues/84');
396
433
 
397
434
  it('should render deeply nested partials', function (done) {
398
435
  var render = hbs.create().express3({
399
- partialsDir: [dirname + '/partials']
436
+ partialsDir: [dirname + '/partials'],
437
+ restrictLayoutsTo: dirname,
400
438
  });
401
439
 
402
440
  function check(err, html) {
@@ -407,42 +445,46 @@ describe('issue-84', function () {
407
445
  done();
408
446
  }
409
447
 
410
- render(dirname + '/index.hbs', {cache: true, settings: {views: dirname + '/views'}}, check);
448
+ render(dirname + '/index.hbs', { cache: true, settings: { views: dirname + '/views' } }, check);
411
449
  });
412
450
  });
413
451
 
414
- describe('issue-144', function() {
415
- var dirname = path.join(__dirname, 'issues/144');
452
+ describe('issue-144', function () {
453
+ var dirname = path.join(__dirname, 'issues/144');
416
454
 
417
- it('should repalce with async helpers even special string like $\'', function(done) {
418
- var hb = hbs.create()
419
- hb.registerAsyncHelper('special_string', function(_, resultcb) {
420
- setTimeout(function() {
421
- resultcb(new hbs.SafeString('<p><code>\'$example$\'</code> abcd</p>'));
422
- }, 1)
455
+ it("should repalce with async helpers even special string like $'", function (done) {
456
+ var hb = hbs.create();
457
+ hb.registerAsyncHelper('special_string', function (_, resultcb) {
458
+ setTimeout(function () {
459
+ resultcb(new hbs.SafeString("<p><code>'$example$'</code> abcd</p>"));
460
+ }, 1);
461
+ });
462
+ var render = hb.express3({
463
+ restrictLayoutsTo: dirname,
423
464
  });
424
- var render = hb.express3({});
425
465
  var locals = H.createLocals('express3', dirname, {});
426
- render(dirname + '/index.hbs', locals, function(err, html) {
427
- assert.equal('<div><p><code>\'$example$\'</code> abcd</p></div>\n', html);
466
+ render(dirname + '/index.hbs', locals, function (err, html) {
467
+ assert.equal("<div><p><code>'$example$'</code> abcd</p></div>\n", html);
428
468
  done();
429
469
  });
430
470
  });
431
471
  });
432
472
 
433
- describe('issue-153', function() {
473
+ describe('issue-153', function () {
434
474
  var dirname = path.join(__dirname, 'issues/153');
435
- it('should concat contentFor blocks with newline', function(done) {
475
+ it('should concat contentFor blocks with newline', function (done) {
436
476
  var check = function (err, html) {
437
477
  if (err) {
438
478
  done(err);
439
479
  }
440
480
  assert.equal('1\n2', html.trim());
441
481
  done();
442
- }
443
- var hb = hbs.create()
444
- var render = hb.express3({});
445
- var locals = H.createLocals('express3', dirname, { });
482
+ };
483
+ var hb = hbs.create();
484
+ var render = hb.express3({
485
+ restrictLayoutsTo: dirname,
486
+ });
487
+ var locals = H.createLocals('express3', dirname, {});
446
488
  render(dirname + '/index.hbs', locals, check);
447
489
  });
448
490
  });