0.1.1 • Published 9 years ago

assemble-plugin-wrapper v0.1.1

Weekly downloads
3
License
MIT
Repository
github
Last release
9 years ago

assemble-plugin-wrapper NPM version Build Status

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.

0.1.1

9 years ago

0.1.0

9 years ago