-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathrender.js
112 lines (101 loc) · 3.64 KB
/
render.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
var _ = require('lodash');
var fs = require('fs');
var jade = require('jade');
/**
* Renders a Keystone View
*
* @api private
*/
var templateCache = {};
function render (req, res, view, ext) {
var keystone = this;
var templatePath = __dirname + '/../../admin/server/templates/' + view + '.jade';
var jadeOptions = {
filename: templatePath,
pretty: keystone.get('env') !== 'production',
};
var compileTemplate = function () {
return jade.compile(fs.readFileSync(templatePath, 'utf8'), jadeOptions);
};
var template = templateCache[view] || (templateCache[view] = compileTemplate());
if (!res.req.flash) {
console.error('\nKeystoneJS Runtime Error:\n\napp must have flash middleware installed. Try adding "connect-flash" to your express instance.\n');
process.exit(1);
}
var flashMessages = {
info: res.req.flash('info'),
success: res.req.flash('success'),
warning: res.req.flash('warning'),
error: res.req.flash('error'),
hilight: res.req.flash('hilight'),
};
var lists = {};
_.forEach(keystone.lists, function (list, key) {
lists[key] = list.getOptions();
});
var locals = {
_: _,
env: keystone.get('env'),
brand: keystone.get('brand'),
appversion: keystone.get('appversion'),
nav: keystone.nav,
messages: _.some(flashMessages, function (msgs) { return msgs.length; }) ? flashMessages : false,
lists: lists,
userModel: keystone.get('user model'),
user: req.user,
title: 'Keystone',
signout: keystone.get('signout url'),
adminPath: '/' + keystone.get('admin path'),
backUrl: keystone.get('back url') || '/',
section: {},
version: keystone.version,
csrf_header_key: keystone.security.csrf.CSRF_HEADER_KEY,
csrf_token_key: keystone.security.csrf.TOKEN_KEY,
csrf_token_value: keystone.security.csrf.getToken(req, res),
csrf_query: '&' + keystone.security.csrf.TOKEN_KEY + '=' + keystone.security.csrf.getToken(req, res),
ga: {
property: keystone.get('ga property'),
domain: keystone.get('ga domain'),
},
wysiwygOptions: {
enableImages: keystone.get('wysiwyg images') ? true : false,
enableCloudinaryUploads: keystone.get('wysiwyg cloudinary images') ? true : false,
enableS3Uploads: keystone.get('wysiwyg s3 images') ? true : false,
additionalButtons: keystone.get('wysiwyg additional buttons') || '',
additionalPlugins: keystone.get('wysiwyg additional plugins') || '',
additionalOptions: keystone.get('wysiwyg additional options') || {},
overrideToolbar: keystone.get('wysiwyg override toolbar'),
skin: keystone.get('wysiwyg skin') || 'keystone',
menubar: keystone.get('wysiwyg menubar'),
importcss: keystone.get('wysiwyg importcss') || '',
},
};
// view-specific extensions to the local scope
_.extend(locals, ext);
// add cloudinary locals if configured
if (keystone.get('cloudinary config')) {
try {
var cloudinary = require('cloudinary');
var cloudinaryUpload = cloudinary.uploader.direct_upload();
locals.cloudinary = {
cloud_name: keystone.get('cloudinary config').cloud_name,
api_key: keystone.get('cloudinary config').api_key,
timestamp: cloudinaryUpload.hidden_fields.timestamp,
signature: cloudinaryUpload.hidden_fields.signature,
prefix: keystone.get('cloudinary prefix') || '',
folders: keystone.get('cloudinary folders'),
uploader: cloudinary.uploader,
};
locals.cloudinary_js_config = cloudinary.cloudinary_js_config();
} catch (e) {
if (e === 'Must supply api_key') {
throw new Error('Invalid Cloudinary Config Provided\n\n'
+ 'See http://keystonejs.com/docs/configuration/#services-cloudinary for more information.');
} else {
throw e;
}
}
}
res.send(template(locals));
}
module.exports = render;