Paperpress is a static pages generator for Nodejs.
JavaScript HTML
Switch branches/tags
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
test
.eslintrc
.gitignore
.npmignore
.travis.yml
LICENSE
README.md
gulpfile.js
package.json
paperpress.js

README.md

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.