Skip to content

Commit fdf34d0

Browse files
author
AJ ONeal
committed
expose stat as w3-file-api like object
1 parent 6a26b8e commit fdf34d0

File tree

2 files changed

+25
-10
lines changed

2 files changed

+25
-10
lines changed

index.js

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,23 @@ function serveIndex(root, options) {
181181
// make similar to file object (with stat)
182182
var directory = {
183183
name: originalDir,
184-
stat: stat
184+
type: 'inode/directory',
185+
size: stat.size,
186+
lastModified: stat.mtime
185187
}
186188

187-
serveIndex[mediaType[type]](req, res, directory, fileList, next, showUp, icons, path, view, template, stylesheet);
189+
var nodes = fileList.map(function (file) {
190+
var ext = extname(file.name)
191+
var mimetype = mime.lookup(ext)
192+
return {
193+
name: file.name,
194+
type: file.stat.isDirectory() ? 'inode/directory' : mimetype,
195+
size: file.stat.size,
196+
lastModified: file.stat.mtime
197+
}
198+
})
199+
200+
serveIndex[mediaType[type]](req, res, directory, nodes, next, showUp, icons, path, view, template, stylesheet)
188201
});
189202
});
190203
});
@@ -256,7 +269,7 @@ function createHtmlFileList(files, dirname, useIcons, view) {
256269

257270
html += files.map(function (file) {
258271
var classes = [];
259-
var isDir = file.stat && file.stat.isDirectory();
272+
var isDir = 'inode/directory' === file.type
260273
var path = dirname.split('/').map(function (c) { return encodeURIComponent(c); });
261274

262275
if (useIcons) {
@@ -279,11 +292,11 @@ function createHtmlFileList(files, dirname, useIcons, view) {
279292

280293
path.push(encodeURIComponent(file.name));
281294

282-
var date = file.stat && file.name !== '..'
283-
? file.stat.mtime.toLocaleDateString() + ' ' + file.stat.mtime.toLocaleTimeString()
295+
var date = file.lastModified && file.name !== '..'
296+
? file.lastModified.toLocaleDateString() + ' ' + file.lastModified.toLocaleTimeString()
284297
: '';
285-
var size = file.stat && !isDir
286-
? file.stat.size
298+
var size = file.size && !isDir
299+
? file.size
287300
: '';
288301

289302
return '<li><a href="'
@@ -431,7 +444,7 @@ function iconStyle(files, useIcons) {
431444
for (i = 0; i < files.length; i++) {
432445
var file = files[i];
433446

434-
var isDir = file.stat && file.stat.isDirectory();
447+
var isDir = 'inode/directory' === file.type
435448
var icon = isDir
436449
? { className: 'icon-directory', fileName: icons.folder }
437450
: iconLookup(file.name);

test/test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,15 +436,17 @@ describe('serveIndex(root)', function () {
436436
it('should provide "fileList" local', function (done) {
437437
var server = createServer(fixtures, {'template': function (locals, callback) {
438438
callback(null, JSON.stringify(locals.fileList.map(function (file) {
439-
file.stat = file.stat instanceof fs.Stats;
439+
file.lastModified = file.lastModified instanceof Date
440+
file.size = file.size >= 0
441+
file.type = /\//.test(file.type)
440442
return file;
441443
})));
442444
}});
443445

444446
request(server)
445447
.get('/users/')
446448
.set('Accept', 'text/html')
447-
.expect('[{"name":"..","stat":true},{"name":"#dir","stat":true},{"name":"index.html","stat":true},{"name":"tobi.txt","stat":true}]')
449+
.expect('[{"name":"..","type":true,"size":true,"lastModified":true},{"name":"#dir","type":true,"size":true,"lastModified":true},{"name":"index.html","type":true,"size":true,"lastModified":true},{"name":"tobi.txt","type":true,"size":true,"lastModified":true}]')
448450
.expect(200, done);
449451
});
450452

0 commit comments

Comments
 (0)