const renderLayouts = require('{%= name %}');
renderLayouts(file, layoutCollection, options);
file
- a file object (or [vinyl] file) with afile.contents
property that must be a bufferlayoutCollection
- an object of file objects to use as layoutsoptions
- see available options
This library does not clone the file object. If you want to prevent file.contents
from being mutated (after rendering layouts), clone the file first before passing it to this library.
const renderLayouts = require('{%= name %}');
const file = {
contents: Buffer.from('<div>Wrap me with a layout!!!</div>'),
layout: 'one'
};
const layoutCollection = {
one: { contents: Buffer.from('one before\n{%% body %}\none after'), layout: 'two' },
two: { contents: Buffer.from('two before\n{%% body %}\ntwo after') }
};
const res = renderLayouts(file, layoutCollection);
console.log(res.contents.toString());
// two before
// one before
// <div>Wrap me with a layout!!!</div>
// one after
// two after
Type: boolean
Default: undefined
By default, layouts are prevented from being applied multiple times to the same string. Disable this by setting disableHistory
to true.
Example
layouts(file, layoutCollection, { disableHistory: true });
Custom delimiters to use for injecting contents into layouts.
Type: regex
Default: /{%% (body) %}/g
Preserve leading whitespace when injecting a string into a layout.
Type: boolean
Default: undefined
{%= apidocs("index.js") %}
Breaking changes
- renames
layoutHistory
tolayoutStack
- layouts in
layoutStack
are now the actual layout object, instead of the layout name
Added
- Adds support for a function as the last argument. If passed, the function is called on the file and each layout with this signature:
fn(file, layout)
.
Breaking changes
- The main
layouts()
function now expects afile
object as the first argument. This can be an object withpath
,layout
andcontents
properties, or a valid [vinyl][] file. See the API docs for more details.
Breaking changes
- change
options.tag
tooptions.contentTag
Housekeeping
- update tests to use
assert
instead ofshould
- All view objects must now have a
path
property, following [vinyl][] conventions.