This repository has been archived by the owner on Mar 18, 2022. It is now read-only.
/
index.js
75 lines (48 loc) · 1.72 KB
/
index.js
1
2
3
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// express-jade
// Copyright (c) 2014- Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)
// MIT Licensed
// Express middleware to compile client-side Jade templates as
// vanilla JavaScript functions in the `window.jade` namespace
// * Author: [@niftylettuce](https://twitter.com/#!/niftylettuce)
// * Source: <https://github.com/niftylettuce/express-jade>
exports = module.exports = expressJade;
var path = require('path');
var fs = require('fs');
var debug = require('debug')('express-jade');
var jade = require('jade');
var util = require('util');
var viewsDir;
var namespace;
var options;
function expressJade(_viewsDir, _namespace, _options) {
viewsDir = _viewsDir;
debug('viewsDir', viewsDir);
namespace = _namespace || 'jade';
namespace = 'window.' + namespace;
debug('namespace', namespace);
options = _options || {};
debug('options', options);
return middleware;
}
function middleware(req, res, next) {
var routePath = req.route.path.replace('*', '');
var jadeFile = req.path.substring(0, req.path.length - 3);
jadeFile = jadeFile.replace(routePath, '');
debug('jadeFile', jadeFile);
var filePath = path.join(viewsDir, jadeFile + '.jade');
debug('filePath', filePath);
fs.exists(filePath, function(exists) {
if (!exists)
return next();
fs.readFile(filePath, 'utf8', function(err, str) {
if (err) return next(err);
options.filename = filePath;
var js = jade.compileClient(str, options);
js.replace(' template', '');
js = util.format("%s = %s || {}; %s['%s'] = %s;", namespace, namespace, namespace, jadeFile, js);
debug('js', js);
res.set('Content-Type', 'application/javascript');
res.send(js);
});
});
}