assemble-layouts
Version:
Assemble plugin for rendering nested template layouts.
118 lines (72 loc) • 2.81 kB
Markdown
# assemble-layouts [](http://badge.fury.io/js/assemble-layouts)
> Assemble plugin for rendering nested template layouts.
## Install
Install with [npm](npmjs.org):
```bash
npm i assemble-layouts --save-dev
```
## API
### Layouts
Create a new instance of `Layouts` to generate flattened layout stacks.
**Example:**
```js
var layouts = new Layouts(options);
```
Default settings for body regex/delimiters:
```js
var options = {
delims: ['{{', '}}'], // start and end delimiters for body tag
expression: '{{ body }}', // default body tag for empty layouts
matter: '\\s*body\\s*', // inner contents of body tag regex
};
```
Assuming `parsedLayouts` have been read from the file system and parsed, we can now add them to the `layouts` cache:
```js
var parsedLayouts = glob.sync('layouts/*.hbs');
parsedLayouts.forEach(function (layout) {
// `layout` must have at `data` and `content` properties
layouts.set(layout.name, layout);
});
```
### Render the stack
Render the entire layout stack for a specific page object:
```js
var page = {data: {a: 'b', layout: 'default'}, content: 'Howdy {{name}}!'};
var template = layouts.render(page);
```
#### page object
The `page` object must have `data` and `content` properties!
* `options` {Object}: global options for how to determine layouts.
### .flatten
Flatten the entire layout stack based on the `file` and `options`
and how the layout stack is defined.
* `file` {Object}: object containing `data` and `contents` properties.
* `options` {Object}: additional options to override `global` and/or `file` options
### .set
Store a layout.
* `name` {String}: name of the layout to store.
* `layout` {Object}: object containing `data` and `content` properties.
### .get
Return a stored layout.
* `name` {String}: name of the layout
### .createStack
Create a layout stack based on options and layout data. Returned stack is
an array with the layouts to use going from the top level parent to the
lowest level child.
* `options` {Object}: used to determine the layout to use.
### .useLayout
Return a valid layout name if one should be used, otherwise, returns `null`
to indicate a layout should not be used.
* `layout` {String}: layout to use, or a negative value to not use a layout
## Authors
**Brian Woodward**
+ [github/doowb](https://github.com/doowb)
+ [twitter/doowb](http://twitter.com/doowb)
**Jon Schlinkert**
+ [github/jonschlinkert](https://github.com/jonschlinkert)
+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
## License
Copyright (c) 2014 Brian Woodward, contributors.
Released under the MIT license
***
_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on July 24, 2014._