Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

A handlebars adapter for the Bogart view engine

branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

README.md

Bogart Handlebars

Bogart Middleware to load a directory hierarchy of views.

npm install bogart-handlebars --save

In your app:

var bogartHandlebars = require('bogart-handlebars');

var app = bogart.app();
app.use(bogartHandlebars(Path.join(__dirname, 'views')));

Middleware executed after bogartHandlebars will have views and respond services available. The views service is an object whose property hierarchy matches the directory hierarchy of the views.

Directory contents starting with underscore e.g. _layout.html are registered as partials with their full path name.

Example:

Figure A, Directory Hierarchy

views
  |-layouts
    |-_main.hbt
  |-public
    |-index.hbt

_main.hbt will be registered as the partial 'layouts/main'.

index.hbt will be available from views.public.index.

respond service

Middleware executed after bogart-handlebars will have respond available as a service.

/**
 * Create a Bogart response with a body of a handlebars view.
 * @param {Function} view  The handlebars view from the `view` service.
 * @param {Object} locals  Template variables for the handlebars template.
 * @param {Object} options Overrides for the response. Common values: status, headers.
 * @returns {Object} A Bogart response.
 */
respond(view, locals, options)

Example:

var bogartHandlebars = require('bogart-handlebars');

var router = bogart.router();
router.get('/', function (views, respond) {
  return respond(views.public.index, { title: 'Hello World' });
});

var app = bogart.app();
app.use(bogartHandlebars(path.join(__dirname, 'views')));
app.use(router);

Cross-cutting locals

It is possible to add to the locals passed to the view by respond in a cross-cutting manner with the onCreateLocals event. Register a callback to this event:

bogartHandlebars(path.join(__dirname, 'views'))
  .onCreateLocals(function (session) {
    return { user: session('user') }
  });

This example adds a user parameter from session to the locals of every view that respond renders.

onCreateLocals is chainable.

Something went wrong with that request. Please try again.