'use strict'; // // Require some modules // var fs = require('fs'); var path = require('path'); var jade = require('jade'); var connect = require('connect'); var Mincer = require('..'); // // Get Mincer environment // var environment = require('./environment'); // // Create connect application // var app = connect(); // // Attach assets server // app.use('/assets/', Mincer.createServer(environment)); // // Prepare HTML layout for our dummy application // See `views/layout.jade` for example of `javascript` and `stylesheet` usage. // var view; try { view = fs.readFileSync(__dirname + '/views/layout.jade', 'utf8'); view = jade.compile(view); } catch (err) { console.error("Failed compile view: " + (err.message || err.toString())); process.exit(128); } // // Define some view helpers // var viewHelpers = {}; // dummy helper that injects extension function rewrite_extension(source, ext) { var source_ext = path.extname(source); return (source_ext === ext) ? source : (source + ext); } // returns a list of asset paths function find_asset_paths(logicalPath, ext) { var asset = environment.findAsset(logicalPath), paths = []; if (!asset) { return null; } if ('production' !== process.env.NODE_ENV) { asset.toArray().forEach(function (dep) { paths.push('/assets/' + rewrite_extension(dep.logicalPath, ext) + '?body=1'); }); } else { paths.push('/assets/' + rewrite_extension(asset.digestPath, ext)); } return paths; } viewHelpers.javascript = function javascript(logicalPath) { var paths = find_asset_paths(logicalPath, '.js'); if (!paths) { // this will help us notify that given logicalPath is not found // without "breaking" view renderer return ''; } return paths.map(function (path) { return ''; }).join('\n'); }; viewHelpers.stylesheet = function stylesheet(logicalPath) { var paths = find_asset_paths(logicalPath, '.css'); if (!paths) { // this will help us notify that given logicalPath is not found // without "breaking" view renderer return ''; } return paths.map(function (path) { return ''; }).join('\n'); }; // // Attach some dummy handler, that simply renders layout // app.use(function (req, res, next) { var data; try { data = view(viewHelpers); } catch (err) { next(err); return; } res.end(data); }); // // Start listening // app.listen(3000, function (err) { if (err) { console.error("Failed start server: " + (err.message || err.toString())); process.exit(128); } console.info('Listening on localhost:3000'); });