Skip to content

Commit 6ab2ba0

Browse files
author
AJ ONeal
committed
change inline templates to strings and regex replace
1 parent fdf34d0 commit 6ab2ba0

File tree

1 file changed

+30
-23
lines changed

1 file changed

+30
-23
lines changed

index.js

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,21 @@ var cache = {};
4646
*/
4747

4848
var defaultTemplate = join(__dirname, 'public', 'directory.html');
49+
var templates = {
50+
html: {
51+
list: '<ul id="files" class="view-{view}">{header}{items}</ul>',
52+
header: '<li class="header">'
53+
+ '<span class="name">Name</span>'
54+
+ '<span class="size">Size</span>'
55+
+ '<span class="date">Modified</span>'
56+
+ '</li>',
57+
item: '<li><a href="{path}" class="{classes}" title="{file.name}">'
58+
+ '<span class="name">{file.name}</span>'
59+
+ '<span class="size">{file.size}</span>'
60+
+ '<span class="date">{file.lastModified}</span>'
61+
+ '</a></li>'
62+
}
63+
}
4964

5065
/*!
5166
* Stylesheet.
@@ -259,15 +274,11 @@ serveIndex.plain = function _plain(req, res, directory, nodes) {
259274
*/
260275

261276
function createHtmlFileList(files, dirname, useIcons, view) {
262-
var html = '<ul id="files" class="view-' + escapeHtml(view) + '">'
263-
+ (view === 'details' ? (
264-
'<li class="header">'
265-
+ '<span class="name">Name</span>'
266-
+ '<span class="size">Size</span>'
267-
+ '<span class="date">Modified</span>'
268-
+ '</li>') : '');
277+
var html = templates.html.list
278+
.replace(/{view}/g, view)
279+
.replace(/{header}/g, view === 'details' ? templates.html.header : '')
269280

270-
html += files.map(function (file) {
281+
var items = files.map(function (file) {
271282
var classes = [];
272283
var isDir = 'inode/directory' === file.type
273284
var path = dirname.split('/').map(function (c) { return encodeURIComponent(c); });
@@ -299,19 +310,15 @@ function createHtmlFileList(files, dirname, useIcons, view) {
299310
? file.size
300311
: '';
301312

302-
return '<li><a href="'
303-
+ escapeHtml(normalizeSlashes(normalize(path.join('/'))))
304-
+ '" class="' + escapeHtml(classes.join(' ')) + '"'
305-
+ ' title="' + escapeHtml(file.name) + '">'
306-
+ '<span class="name">' + escapeHtml(file.name) + '</span>'
307-
+ '<span class="size">' + escapeHtml(size) + '</span>'
308-
+ '<span class="date">' + escapeHtml(date) + '</span>'
309-
+ '</a></li>';
313+
return templates.html.item
314+
.replace(/{path}/g, escapeHtml(normalizeSlashes(normalize(path.join('/')))))
315+
.replace(/{classes}/g, escapeHtml(classes.join(' ')))
316+
.replace(/{file\.name}/g, escapeHtml(file.name))
317+
.replace(/{file\.size}/g, escapeHtml(size))
318+
.replace(/{file\.lastModified/g, escapeHtml(date))
310319
}).join('\n');
311320

312-
html += '</ul>';
313-
314-
return html;
321+
return html.replace(/{items}/g, items)
315322
}
316323

317324
/**
@@ -325,10 +332,10 @@ function createHtmlRender(template) {
325332
if (err) return callback(err);
326333

327334
var body = str
328-
.replace(/\{style\}/g, locals.style.concat(iconStyle(locals.fileList, locals.displayIcons)))
329-
.replace(/\{files\}/g, createHtmlFileList(locals.fileList, locals.directory, locals.displayIcons, locals.viewName))
330-
.replace(/\{directory\}/g, escapeHtml(locals.directory))
331-
.replace(/\{linked-path\}/g, htmlPath(locals.directory));
335+
.replace(/{style}/g, locals.style.concat(iconStyle(locals.fileList, locals.displayIcons)))
336+
.replace(/{files}/g, createHtmlFileList(locals.fileList, locals.directory, locals.displayIcons, locals.viewName))
337+
.replace(/{directory}/g, escapeHtml(locals.directory))
338+
.replace(/{linked-path}/g, htmlPath(locals.directory))
332339

333340
callback(null, body);
334341
});

0 commit comments

Comments
 (0)