@@ -46,6 +46,21 @@ var cache = {};
4646 */
4747
4848var 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
261276function 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 : '' )
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 ( / { 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 ) )
310319 } ) . join ( '\n' ) ;
311320
312- html += '</ul>' ;
313-
314- return html ;
321+ return html . replace ( / { i t e m s } / 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 ( / \ {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 ) )
332339
333340 callback ( null , body ) ;
334341 } ) ;
0 commit comments