An open API service indexing awesome lists of open source software.

https://github.com/assemble/assemble-layouts

Layouts for your templates
https://github.com/assemble/assemble-layouts

Last synced: about 1 year ago
JSON representation

Layouts for your templates

Awesome Lists containing this project

README

          

# assemble-layouts [![NPM version](https://badge.fury.io/js/assemble-layouts.png)](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._