Guest User

Less.js with master less file

a guest
Sep 8th, 2011
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Author: Joseph McCullough et al
  2. //http://www.vertstudios.com/blog/less-app-windows-sorta/
  3. //Let's the poor Windows users have some LESS fun ;)
  4.  
  5. var path = require('path'),
  6.     fs = require('fs'),
  7.     sys = require('sys');
  8.  
  9. //http://bit.ly/dKlPqQ (stack overflow) for package.json use
  10. require.paths.unshift('./node_modules')
  11.  
  12. //snag the less module
  13. var less = require('./lessjs');
  14.  
  15. //Let the user know less is listening for file changes.
  16. sys.puts("\n" + stylize("LESS - compiling & listening...", 'underline') + "\n");
  17.  
  18. // Make sure this is a sibling to the less.js file.
  19. var masterFile = "master.less";
  20. var masterPath = __dirname + "/" + masterFile;
  21. // The two variables above are used globally throughout the file
  22.  
  23. //Convert less to CSS. Write to file if successful.
  24. toCSS(masterPath, function (err, less) {
  25.         writeCSS(masterFile,err,less);
  26. });
  27.  
  28.  
  29. //For each file in the current directory...
  30. fs.readdirSync(__dirname).forEach(function (file) {
  31.     var filepath = __dirname + "/" + file;
  32.     //Add a file watch
  33.     fs.watchFile(filepath, { persistent: true, interval: 200}, function(curr,prev)
  34.     {
  35.         //Convert Master less file to css
  36.         toCSS(masterPath, function (err, less) {
  37.                 writeCSS(masterFile, err,less);
  38.             });
  39.     });
  40. });
  41.  
  42. function toCSS(path, callback) {
  43.     var tree, css;
  44.     fs.readFile(path, 'utf-8', function (e, str) {
  45.         if (e) { return callback(e) }
  46.  
  47.         new(less.Parser)({
  48.             paths: [require('path').dirname(path)],
  49.             optimization: 0
  50.         }).parse(str, function (err, tree) {
  51.             if (err) {
  52.                 callback(err);
  53.             } else {
  54.                 try {
  55.                     css = tree.toCSS({compress: true});
  56.                     callback(null, css);
  57.                 } catch (e) {
  58.                     callback(e);
  59.                 }
  60.             }
  61.         });
  62.     });
  63. }
  64.  
  65. function writeCSS(file,err,less){
  66.     if (err) {sys.puts(stylize("ERROR: " + (err && err.message), 'red'));}
  67.     else
  68.     {
  69.         var newFile = file.replace(/less/,"css");
  70.         var newDir = __dirname.substr(0, __dirname.lastIndexOf("/")+1) + "css/";
  71.         fs.writeFile(newDir + newFile, less, function(err)
  72.         {
  73.                 if (err){
  74.                     sys.puts(err);
  75.                 } else {
  76.                     sys.puts(newFile + " successfully updated.");
  77.                 }
  78.         });
  79.     }
  80. }
  81.  
  82.  
  83. // Stylize a string
  84. function stylize(str, style) {
  85.     var styles = {
  86.         'bold'      : [1,  22],
  87.         'inverse'   : [7,  27],
  88.         'underline' : [4,  24],
  89.         'yellow'    : [33, 39],
  90.         'green'     : [32, 39],
  91.         'red'       : [31, 39]
  92.     };
  93.     return '\033[' + styles[style][0] + 'm' + str +
  94.            '\033[' + styles[style][1] + 'm';
  95. }
Advertisement
Add Comment
Please, Sign In to add comment