Advertisement
waylonflinn

jqueryFileTree Connector Script in Node.js

Apr 24th, 2012
513
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* This node script listens for POST requests on /, interprets the 'dir'
  2.  *  variable as a path to list and returns the unordered list format
  3.  * expected by jqueryFileTree
  4.  * http://www.abeautifulsite.net/blog/2008/03/jquery-file-tree/
  5.  *
  6.  * It also serves  pages out of the _static directory contained in
  7.  * the current directory. Place your example html in there.
  8.  */
  9. var connect = require('connect'),
  10.     util = require('util'),
  11.     fs = require('fs');
  12.  
  13.  
  14. var stringHeader = "<ul class='jqueryFileTree' style='display: none;'>";
  15. var stringFooter = "</ul>";
  16. // arguments: path, directory name
  17. var formatDirectory =
  18.     "<li class='directory collapsed'><a href='#' rel='%s/'>%s</a><li>";
  19. // arguments: extension, path, filename
  20. var formatFile = "<li class='file ext_%s'><a href='#' rel='%s'>%s</a></li>";
  21.  
  22. var createStatCallback = (function(res, path, fileName, isLast){
  23.     return function(err, stats){
  24.    
  25.         if(stats.isDirectory())
  26.         {
  27.             res.write(util.format(formatDirectory, path, fileName));
  28.         }
  29.         else
  30.         {
  31.             var fileExt = fileName.slice(fileName.lastIndexOf('.')+1);
  32.    
  33.             res.write(util.format(formatFile, fileExt, path, fileName));
  34.         }
  35.  
  36.         if(isLast){
  37.              res.end(stringFooter);
  38.         }
  39.     }
  40. });
  41.  
  42. var handlePost = function(req, res){
  43.  
  44.     // 'text/html'
  45.     res.writeHead(200, {'content-type': 'text/plain'});
  46.     res.write(stringHeader);
  47.  
  48.     // get a list of files
  49.     fs.readdir(req.body.dir, function(err, files){
  50.    
  51.         for(var i = 0; i < files.length; i++)
  52.         {
  53.             var fileName = files[i];
  54.             var path = util.format('%s%s', req.body.dir, fileName);
  55.             var isLast = (i === (files.length-1));
  56.  
  57.  
  58.             var statCallback = createStatCallback(res, path, fileName, isLast);
  59.  
  60.             fs.stat(path, statCallback);
  61.         }
  62.  
  63.     });
  64. };
  65.  
  66. var server = connect()
  67.         .use(connect.logger())
  68.         .use(connect.static(__dirname + '/_static'))
  69.         .use(connect.bodyParser())
  70.         .use(connect.router(function(app){
  71.             app.post('/', handlePost);
  72.             }));
  73.  
  74. server.listen(8080);
  75. console.log('Server running at http://127.0.0.1:8080');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement