node package manager
Loosely couple your services. Use Orgs to version and reuse your code. Create a free org »

paperpress

Paperpress

Build Status Coverage Status Dependency Status NPM version

Paperpress is a static pages generator for Nodejs.

NPM

This library will allow you to have a blog or static pages in markdown/html on top of any application with express, koa or any other Node.js http server.

For feature request, contact @Siedrix on twitter or github.

TL;DR

Paperpress will convert a directory structure of markdown files into items that you can use in your application. This items will be sorted in collections.

Install

npm install paperpress

Basic usage

Create a Paperpress instance

var Paperpress = require('paperpress')
 
var paperpress = new Paperpress({
  baseDirectory: 'static'
})
 
paperpress.load()

Use baseDirectory to specify where are your Paperpress files. Default value is static

Then you can use the items in a express app like this:

app.get('/blog', function (req, res) {
  var articles = paperpress.getCollection('articles')
 
  res.render({articles:articles})
})

For more information check the examples.

Warning: Load function is a sync function.

Markdown parser

Paperpress use Remarkable to parse the markdown files. You can use remarkableOptions to specify your custom options.

var Paperpress = require('paperpress')
 
var paperpress = new Paperpress({
  remarkableOptions: {/* Your Remarkable options */}
})

The default value is:

{
  html: true,
  linkify: true,
  highlight: function (code) {
    return highlighter.highlightAuto(code).value
  }
}

Paperpress structure

Paperpress has 3 concepts: Collections, Items and Hooks.

Collections

This are folders located directly under the baseDirectory and help organice our items in diferent groups.

Suggested directories:

  • /articles this folder will contain all the blog posts of the application.
  • /pages this folder will contain all the pages of the application.
  • /snippers this folder will contain all the snippets of the application, usually single files.

Items

Inside each of your collection folders you can have 2 diferent types of items, the once based on a directory structure and the once based on a single markdown file.

Items as directory

  • info.json This file needs to have title and date.
  • content.md This is the main content of the article, it should be written in mark up.

Items as file

  • [ITEM_NAME].md This file will be converted into an item with title, slug, path and content.

The reason to have a the directory style is to allow more configuration, since you can add any atributes that you want to the info.json file and to modify a path or slug in a particular way.

Hooks

You can declare hooks to modify the items after they are loaded.

var paperpress = new Paperpress({})
 
paperpress.addHook(function (item) {
  item.loadDate = new Date()
})

Useful snippets for paperpress

Find all items in a collection
var articles = paperpress.getCollection('articles')
Find all items in multiple collections
var pagesAndSnippets = paperpress.getCollections(['pages', 'snippets'])
Find one item in paperpress
var items = paperpress.items.find(function(item){
  return item.path === '/home'
})

Collaborators

License

Released under the MIT license.