# vinyl-view [![NPM version](https://img.shields.io/npm/v/vinyl-view.svg?style=flat)](https://www.npmjs.com/package/vinyl-view) [![NPM monthly downloads](https://img.shields.io/npm/dm/vinyl-view.svg?style=flat)](https://npmjs.org/package/vinyl-view)  [![NPM total downloads](https://img.shields.io/npm/dt/vinyl-view.svg?style=flat)](https://npmjs.org/package/vinyl-view) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/vinyl-view.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/vinyl-view)

> Extends vinyl with render and compile methods, and properties used for rendering templates.

## Install

Install with [npm](https://www.npmjs.com/):

```sh
$ npm install --save vinyl-view
```

## Usage

Use the same way you would use a [vinyl](https://github.com/gulpjs/vinyl) file:

```js
var View = require('vinyl-view');
var view = new View({path: 'foo'});
```

## API

### [View](index.js#L26)

Create an instance of `View`. Optionally pass a default object to use.

**Params**

* `view` **{Object}**

**Example**

```js
var view = new View({
  path: 'foo.html',
  contents: new Buffer('...')
});
```

### [.compile](index.js#L57)

Synchronously compile a view.

**Params**

* `locals` **{Object}**: Optionally pass locals to the engine.
* `returns` **{Object}** `View`: instance, for chaining.

**Example**

```js
var view = page.compile();
view.fn({title: 'A'});
view.fn({title: 'B'});
view.fn({title: 'C'});
```

### [.renderSync](index.js#L75)

Synchronously render templates in `view.content`.

**Params**

* `locals` **{Object}**: Optionally pass locals to the engine.
* `returns` **{Object}** `View`: instance, for chaining.

**Example**

```js
var view = new View({content: 'This is <%= title %>'});
view.renderSync({title: 'Home'});
console.log(view.content);
```

### [.render](index.js#L101)

Asynchronously render templates in `view.content`.

**Params**

* `locals` **{Object}**: Context to use for rendering templates.

**Example**

```js
view.render({title: 'Home'}, function(err, res) {
  //=> view object with rendered `content`
});
```

### [.context](index.js#L132)

Create a context object from `locals` and the `view.data` and `view.locals` objects. The `view.data` property is typically created from front-matter, and `view.locals` is used when a `new View()` is created.

This method be overridden either by defining a custom `view.options.context` function
to customize context for a view instance, or static [View.context](#view-context) function to customize
context for all view instances.

**Params**

* `locals` **{Object}**: Optionally pass a locals object to merge onto the context.
* `returns` **{Object}**: Returns the context object.

**Example**

```js
var page = new View({path: 'a/b/c.txt', locals: {a: 'b', c: 'd'}});
var ctx = page.context({a: 'z'});
console.log(ctx);
//=> {a: 'z', c: 'd'}
```

### [.isType](index.js#L148)

Returns true if the view is the given `viewType`. Returns `false` if no type is assigned. When used with vinyl-collections, types are assigned by their respective collections.

**Params**

* `type` **{String}**: (`renderable`, `partial`, `layout`)

**Example**

```js
var view = new View({path: 'a/b/c.txt', viewType: 'partial'})
view.isType('partial');
```

### [.View.context](index.js#L248)

Define a custom static `View.context` function to override default `.context` behavior. See the [context](#context) docs for more info.

**Params**

* `locals` **{Object}**
* `returns` **{Object}**

**Example**

```js
// custom context function
View.context = function(locals) {
  // `this` is the view being rendered
  return locals;
};
```

## About

### Contributing

Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).

### Building docs

_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_

To generate the readme, run the following command:

```sh
$ npm install -g verbose/verb#dev verb-generate-readme && verb
```

### Running tests

Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:

```sh
$ npm install && npm test
```

### Author

**Jon Schlinkert**

* [github/jonschlinkert](https://github.com/jonschlinkert)
* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)

### License

Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
MIT

***

_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 08, 2017._