assemble-plugin-wrapper
v0.1.1
Published
Makes it easy for plugin authors to generalize assemble plugins. Assemble has three types of plugins: app, collection and view. This makes it easy to specify one or more of those types to use for your plugin.
Downloads
2
Readme
assemble-plugin-wrapper
Makes it easy for plugin authors to generalize assemble plugins. Assemble has three types of plugins: app, collection and view. This makes it easy to specify one or more of those types to use for your plugin.
Install with npm
$ npm i assemble-plugin-wrapper --save
Usage
var wrap = require('assemble-plugin-wrapper');
Before
Let's say you want to create a permalinks plugin. To generate a permalink, you need to modify the destination path of a view
, which means you would need to actually modify each view before it's rendered.
Here is what a view
plugin looks like (without this library):
var app = assemble();
// create a plugin
function permalinks(options) {
return function (view) {
// do stuff to generate permalink...
};
}
// then use it on a view (this works well when you
// loop over views to render then)
app.page('a/b/c.hbs', {content: 'some contents'})
.use(permalink(':dest/:name.html'))
.render(function(err, view) {
// rendered view
});
After
Here is how a view
plugin can be registered after it's wrapped:
// create a `view` plugin
function permalinks(options) {
return plugin('view', function (view) {
// do stuff to generate permalink...
});
}
// pass it to `app` intead of each `view`.
// consider this the "default" config for the plugin
var app = assemble()
.use(permalink(':dest/:name.html'))
// if you want you can still use the plugin on each view
// if you need to override the settings passed to `app`
app.page('a/b/c.hbs', {content: 'some contents'})
.render(function(err, view) {
// rendered view
});
Types
If you don't specify a plugin type
, it defaults to all
, which means the plugin will be registered with app
, every collection
and every view
.
// this will be used on app, collection and view instances
var app = assemble();
.use(wrap(function() {
}));
To control where the plugin is registered, you can specify one of the following:
app
:collection
view
Examples
// this will be used on view instances
var app = assemble();
.use('view', wrap(function(view) {
// "this" is view
}));
// this will be used on collection instances
var app = assemble();
.use('collection', wrap(function(collection) {
// "this" is collection
}));
// this will be used on app instances
var app = assemble();
.use('app', wrap(function(app) {
// "this" is app
}));
Related projects
- assemble: Static site generator for Grunt.js, Yeoman and Node.js. Used by Zurb Foundation, Zurb Ink, H5BP/Effeckt,… more | homepage
- templates: System for creating and managing template collections, and rendering templates with any node.js template engine.… more | homepage
- verb: Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used… more | homepage
Running tests
Install dev dependencies:
$ npm i -d && npm test
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Author
Brian Woodward
License
Copyright © 2015 Brian Woodward Released under the MIT license.
This file was generated by verb-cli on September 13, 2015.