aboutsummaryrefslogtreecommitdiff
path: root/node_modules/jade/bin/jade
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/jade/bin/jade')
-rwxr-xr-xnode_modules/jade/bin/jade147
1 files changed, 147 insertions, 0 deletions
diff --git a/node_modules/jade/bin/jade b/node_modules/jade/bin/jade
new file mode 100755
index 000000000..7e6002f90
--- /dev/null
+++ b/node_modules/jade/bin/jade
@@ -0,0 +1,147 @@
+#!/usr/bin/env node
+
+/**
+ * Module dependencies.
+ */
+
+var fs = require('fs')
+ , program = require('commander')
+ , path = require('path')
+ , basename = path.basename
+ , dirname = path.dirname
+ , resolve = path.resolve
+ , join = path.join
+ , mkdirp = require('mkdirp')
+ , jade = require('../');
+
+// jade options
+
+var options = {};
+
+// options
+
+program
+ .version(jade.version)
+ .usage('[options] [dir|file ...]')
+ .option('-o, --obj <str>', 'javascript options object')
+ .option('-O, --out <dir>', 'output the compiled html to <dir>')
+ .option('-p, --path <path>', 'filename used to resolve includes')
+ .option('-P, --pretty', 'compile pretty html output')
+ .option('-c, --client', 'compile for client-side runtime.js')
+ .option('-D, --no-debug', 'compile without debugging (smaller functions)')
+
+program.on('--help', function(){
+ console.log(' Examples:');
+ console.log('');
+ console.log(' # translate jade the templates dir');
+ console.log(' $ jade templates');
+ console.log('');
+ console.log(' # create {foo,bar}.html');
+ console.log(' $ jade {foo,bar}.jade');
+ console.log('');
+ console.log(' # jade over stdio');
+ console.log(' $ jade < my.jade > my.html');
+ console.log('');
+ console.log(' # jade over stdio');
+ console.log(' $ echo "h1 Jade!" | jade');
+ console.log('');
+ console.log(' # foo, bar dirs rendering to /tmp');
+ console.log(' $ jade foo bar --out /tmp ');
+ console.log('');
+});
+
+program.parse(process.argv);
+
+// options given, parse them
+
+if (program.obj) options = eval('(' + program.obj + ')');
+
+// --filename
+
+if (program.path) options.filename = program.path;
+
+// --no-debug
+
+options.compileDebug = program.debug;
+
+// --client
+
+options.client = program.client;
+
+// --pretty
+
+options.pretty = program.pretty;
+
+// left-over args are file paths
+
+var files = program.args;
+
+// compile files
+
+if (files.length) {
+ console.log();
+ files.forEach(renderFile);
+ process.on('exit', console.log);
+// stdio
+} else {
+ stdin();
+}
+
+/**
+ * Compile from stdin.
+ */
+
+function stdin() {
+ var buf = '';
+ process.stdin.setEncoding('utf8');
+ process.stdin.on('data', function(chunk){ buf += chunk; });
+ process.stdin.on('end', function(){
+ var fn = jade.compile(buf, options);
+ var output = options.client
+ ? fn.toString()
+ : fn(options);
+ process.stdout.write(output);
+ }).resume();
+}
+
+/**
+ * Process the given path, compiling the jade files found.
+ * Always walk the subdirectories.
+ */
+
+function renderFile(path) {
+ var re = /\.jade$/;
+ fs.lstat(path, function(err, stat) {
+ if (err) throw err;
+ // Found jade file
+ if (stat.isFile() && re.test(path)) {
+ fs.readFile(path, 'utf8', function(err, str){
+ if (err) throw err;
+ options.filename = path;
+ var fn = jade.compile(str, options);
+ var extname = options.client ? '.js' : '.html';
+ path = path.replace(re, extname);
+ if (program.out) path = join(program.out, basename(path));
+ var dir = resolve(dirname(path));
+ mkdirp(dir, 0755, function(err){
+ if (err) throw err;
+ var output = options.client
+ ? fn.toString()
+ : fn(options);
+ fs.writeFile(path, output, function(err){
+ if (err) throw err;
+ console.log(' \033[90mrendered \033[36m%s\033[0m', path);
+ });
+ });
+ });
+ // Found directory
+ } else if (stat.isDirectory()) {
+ fs.readdir(path, function(err, files) {
+ if (err) throw err;
+ files.map(function(filename) {
+ return path + '/' + filename;
+ }).forEach(renderFile);
+ });
+ }
+ });
+}