diff --git a/index.js b/index.js index 0693fde..e3c1966 100644 --- a/index.js +++ b/index.js @@ -194,33 +194,35 @@ function lookup(root, view, ext){ var name = resolveObjectName(view); var original = view; - // Try root ex: /user.jade - view = resolve(root, basename(original,ext)+ext); - if( exists(view) ) return view; - - // Try subdir ex: /subdir/user.jade - view = resolve(root, dirname(original), basename(original,ext)+ext); - if( exists(view) ) return view; - - // Try _ prefix ex: ./views/_.jade - // taking precedence over the direct path - view = resolve(root,'_'+name+ext) - if( exists(view) ) return view; - - // Try index ex: ./views/user/index.jade - view = resolve(root,name,'index'+ext); - if( exists(view) ) return view; - - // Try ..//index ex: ../user/index.jade - // when calling partial('user') within the same dir - view = resolve(root,'..',name,'index'+ext); - if( exists(view) ) return view; - - // Try root ex: /user.jade - view = resolve(root,name+ext); - if( exists(view) ) return view; - - return null; + (typeof root == 'string' ? [root] : root).some(function(root) { + // Try root ex: /user.jade + view = resolve(root, basename(original,ext)+ext); + if( exists(view) ) return true; + + // Try subdir ex: /subdir/user.jade + view = resolve(root, dirname(original), basename(original,ext)+ext); + if( exists(view) ) return true; + + // Try _ prefix ex: ./views/_.jade + // taking precedence over the direct path + view = resolve(root,'_'+name+ext) + if( exists(view) ) return true; + + // Try index ex: ./views/user/index.jade + view = resolve(root,name,'index'+ext); + if( exists(view) ) return true; + + // Try ..//index ex: ../user/index.jade + // when calling partial('user') within the same dir + view = resolve(root,'..',name,'index'+ext); + if( exists(view) ) return true; + + // Try root ex: /user.jade + view = resolve(root,name+ext); + if( exists(view) ) return true; + }); + + return exists(view) ? view : null; }; module.exports.lookup = lookup; diff --git a/package.json b/package.json index 4d36f37..e2a7d23 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,14 @@ "dependencies": { }, "devDependencies": { - "express": "3.0.0", + "express": "latest", "methods": "*", "mocha": "*", "supertest": "0.4.0", "ejs": "*", "hamljs": "*", "jade": "*", - "eco": "*", + "eco": "latest", "coffeecup": "*", "consolidate": "*" }, diff --git a/test/fixtures/chained-views/app.js b/test/fixtures/chained-views/app.js index bb654b7..4d1cabf 100644 --- a/test/fixtures/chained-views/app.js +++ b/test/fixtures/chained-views/app.js @@ -2,23 +2,21 @@ var express = require('express') , partials = require('../../../') , app = module.exports = express(); -app.configure(function() { - app.set('views', __dirname); - app.set('view engine', 'ejs'); +app.set('views', __dirname); +app.set('view engine', 'ejs'); - app.use(function(req, res, next){ - res.locals.logged_user = 'bob'; - res.locals.config = {title:'partially'}; - next(); - }) - - app.use(partials()) +app.use(function(req, res, next){ + res.locals.logged_user = 'bob'; + res.locals.config = {title:'partially'}; + next(); }) +app.use(partials()) + app.get('/', function(req, res){ res.render('view1') }) app.get('/locals', function(req, res){ res.render('locals1') -}) \ No newline at end of file +}) diff --git a/test/fixtures/default-layout/app.js b/test/fixtures/default-layout/app.js index bc0bacd..c1f649f 100644 --- a/test/fixtures/default-layout/app.js +++ b/test/fixtures/default-layout/app.js @@ -2,12 +2,12 @@ var express = require('express') , partials = require('../../../') , app = module.exports = express(); -app.configure(function() { - app.set('views', __dirname); - app.set('view engine', 'ejs'); - app.set('view options', {defaultLayout: 'layout-1'}); - app.use(partials()); -}) + +app.set('views', __dirname); +app.set('view engine', 'ejs'); +app.set('view options', {defaultLayout: 'layout-1'}); +app.use(partials()); + app.get('/1', function(req, res){ res.render('view'); @@ -15,4 +15,4 @@ app.get('/1', function(req, res){ app.get('/2', function(req, res){ res.render('view', {layout: 'layout-2'}); -}) \ No newline at end of file +}) diff --git a/test/fixtures/multiple-search-paths/app.js b/test/fixtures/multiple-search-paths/app.js new file mode 100644 index 0000000..c4293ef --- /dev/null +++ b/test/fixtures/multiple-search-paths/app.js @@ -0,0 +1,24 @@ +var express = require('express') + , partials = require('../../../') + , path = require('path') + , app = module.exports = express() + , cc = require('coffeecup') + , regDir = path.join(path.dirname(__dirname),'register'); + + +/* CoffeeCup is supported, at least in Express 4.x. + * It is not handled by consolidate, so we need to register it. + * express-partials uses CoffeeCup's render() automatically. + */ + +app.use(partials()); +app.set('view engine', 'coffeecup'); +app.set('views', [__dirname, regDir]); +app.engine('coffeecup', cc.__express); +app.set('view options', { defaultLayout: path.join(regDir,'layout.coffeecup') }); +partials.register('coffeecup', cc); + + +app.get('/coffeecup',function(req,res,next){ + res.render('index', {hello:'world'}) +}) diff --git a/test/fixtures/register/app.js b/test/fixtures/register/app.js index cbd5f10..bc0a479 100644 --- a/test/fixtures/register/app.js +++ b/test/fixtures/register/app.js @@ -4,11 +4,9 @@ var express = require('express') , jade = require('jade') , app = module.exports = express(); -app.configure(function() { - app.set('views', __dirname); - app.set('view engine', 'ejs'); - app.use(partials()); -}) +app.set('views', __dirname); +app.set('view engine', 'ejs'); +app.use(partials()); /* Use `register` to substitute the file extension. */ app.engine('.j',jade.__express); diff --git a/test/fixtures/subdir/app.js b/test/fixtures/subdir/app.js index 69458f3..543988b 100644 --- a/test/fixtures/subdir/app.js +++ b/test/fixtures/subdir/app.js @@ -2,11 +2,10 @@ var express = require('express') , partials = require('../../../') , app = module.exports = express(); -app.configure(function() { - app.set('views', __dirname); - app.set('view engine', 'ejs'); - app.use(partials()); -}) + +app.set('views', __dirname); +app.set('view engine', 'ejs'); +app.use(partials()); app.get('/subdir',function(req,res,next){ res.render('subdir/index.ejs') @@ -32,4 +31,4 @@ app.get('/subdir-a-layout',function(req,res,next){ app.get('/subdir-aView',function(req,res,next){ res.render('subdir/aView.ejs') -}) \ No newline at end of file +}) diff --git a/test/test.partials.multipath.js b/test/test.partials.multipath.js new file mode 100644 index 0000000..2a84bdc --- /dev/null +++ b/test/test.partials.multipath.js @@ -0,0 +1,15 @@ +var app = require('./fixtures/multiple-search-paths/app') + , request = require('supertest') + , partials = require('../'); + +describe('app',function(){ + describe('GET /coffeecup',function(){ + it('should find resolve and render index.coffeecup as a CoffeeCup template with layout.coffeecup as CoffeeCup layout',function(done){ + request(app) + .get('/coffeecup') + .expect(200) + .expect('CoffeeCup layout

CoffeeCup says hello world

') + .end(done) + }) + }) +})