@@ -46,6 +46,21 @@ var cache = {};
46
46
*/
47
47
48
48
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
+ }
49
64
50
65
/*!
51
66
* Stylesheet.
@@ -259,15 +274,11 @@ serveIndex.plain = function _plain(req, res, directory, nodes) {
259
274
*/
260
275
261
276
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 ( / { v i e w } / g, view )
279
+ . replace ( / { h e a d e r } / g, view === 'details' ? templates . html . header : '' )
269
280
270
- html + = files . map ( function ( file ) {
281
+ var items = files . map ( function ( file ) {
271
282
var classes = [ ] ;
272
283
var isDir = 'inode/directory' === file . type
273
284
var path = dirname . split ( '/' ) . map ( function ( c ) { return encodeURIComponent ( c ) ; } ) ;
@@ -299,19 +310,15 @@ function createHtmlFileList(files, dirname, useIcons, view) {
299
310
? file . size
300
311
: '' ;
301
312
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 ( / { p a t h } / g, escapeHtml ( normalizeSlashes ( normalize ( path . join ( '/' ) ) ) ) )
315
+ . replace ( / { c l a s s e s } / g, escapeHtml ( classes . join ( ' ' ) ) )
316
+ . replace ( / { f i l e \. n a m e } / g, escapeHtml ( file . name ) )
317
+ . replace ( / { f i l e \. s i z e } / g, escapeHtml ( size ) )
318
+ . replace ( / { f i l e \. l a s t M o d i f i e d / g, escapeHtml ( date ) )
310
319
} ) . join ( '\n' ) ;
311
320
312
- html += '</ul>' ;
313
-
314
- return html ;
321
+ return html . replace ( / { i t e m s } / g, items )
315
322
}
316
323
317
324
/**
@@ -325,10 +332,10 @@ function createHtmlRender(template) {
325
332
if ( err ) return callback ( err ) ;
326
333
327
334
var body = str
328
- . replace ( / \ {s t y l e \ }/ g, locals . style . concat ( iconStyle ( locals . fileList , locals . displayIcons ) ) )
329
- . replace ( / \ {f i l e s \ }/ g, createHtmlFileList ( locals . fileList , locals . directory , locals . displayIcons , locals . viewName ) )
330
- . replace ( / \ {d i r e c t o r y \ }/ g, escapeHtml ( locals . directory ) )
331
- . replace ( / \ {l i n k e d - p a t h \ }/ g, htmlPath ( locals . directory ) ) ;
335
+ . replace ( / { s t y l e } / g, locals . style . concat ( iconStyle ( locals . fileList , locals . displayIcons ) ) )
336
+ . replace ( / { f i l e s } / g, createHtmlFileList ( locals . fileList , locals . directory , locals . displayIcons , locals . viewName ) )
337
+ . replace ( / { d i r e c t o r y } / g, escapeHtml ( locals . directory ) )
338
+ . replace ( / { l i n k e d - p a t h } / g, htmlPath ( locals . directory ) )
332
339
333
340
callback ( null , body ) ;
334
341
} ) ;
0 commit comments