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/.github/workflows/publish.yml +73 -0
- package/.github/workflows/test.yml +32 -8
- package/.nvmrc +1 -0
- package/.nycrc.json +16 -0
- package/.oxfmtrc.json +19 -0
- package/.oxlintrc.json +32 -0
- package/AGENTS.md +40 -0
- package/LICENSE +1 -1
- package/README.md +51 -22
- package/example/app-layoutsDir.js +32 -38
- package/example/app.js +27 -33
- package/lib/hbs.js +90 -89
- package/lib/resolver.js +10 -9
- package/package.json +29 -22
- package/renovate.json +9 -2
- package/test/apps/async/index.js +54 -41
- package/test/apps/i18n/index.js +9 -6
- package/test/asyncSpecs.js +12 -12
- package/test/cacheSpecs.js +18 -21
- package/test/customExtension.js +15 -15
- package/test/handlebarsSpecs.js +16 -19
- package/test/helperSpecs.js +24 -20
- package/test/helpers.js +3 -3
- package/test/i18nSpecs.js +10 -8
- package/test/issues.js +164 -122
- package/test/layoutSpecs.js +35 -19
- package/test/localTemplateOptions.js +48 -42
- package/test/multiple.js +30 -32
- package/test/nonExpress.js +11 -10
- package/test/optionsSpecs.js +5 -7
- package/test/resolverSpecs.js +54 -0
- package/.eslintrc +0 -42
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
129
|
-
|
|
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) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|
-
|
|
145
|
-
|
|
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 =
|
|
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 = {
|
|
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
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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 =
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
-
'<strong>foo</strong><em>foo</em>'
|
|
340
|
-
);
|
|
378
|
+
assert.equal(H.stripWs(html), '<strong>foo</strong><em>foo</em>');
|
|
341
379
|
done();
|
|
342
380
|
});
|
|
343
381
|
});
|
|
@@ -356,31 +394,30 @@ describe('issue-62', function() {
|
|
|
356
394
|
}
|
|
357
395
|
}
|
|
358
396
|
|
|
359
|
-
hb.registerAsyncHelper(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
452
|
+
describe('issue-144', function () {
|
|
453
|
+
var dirname = path.join(__dirname, 'issues/144');
|
|
416
454
|
|
|
417
|
-
it(
|
|
418
|
-
var hb = hbs.create()
|
|
419
|
-
hb.registerAsyncHelper('special_string', function(_, resultcb) {
|
|
420
|
-
setTimeout(function() {
|
|
421
|
-
resultcb(new hbs.SafeString(
|
|
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(
|
|
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
|
-
|
|
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
|
});
|