Grunt task to render Handlebars and Markdown templates using front-matter metadata.
npm install pagefrost
grunt.initConfig({
pagefrost: {
target: {
data: 'src/data.json',
options: {
base_url: '/',
rewrite_url: false
},
src: {
pages: 'src/pages',
layouts: 'src/layouts',
partials: 'src/partials',
helpers: 'src/helpers'
},
dest: 'dist'
}
}
})
grunt.loadNpmTasks('pagefrost')
Global data injected in all templates, can be either a .json
file, a .yml
file, a .js
file or an object, default {}
.
Base url used by the url
helper.
If true
, create .htaccess
and remove .html
extension in url
helper.
Folder where templates are located, default src/pages
.
Folder where layouts are located, default src/layouts
.
Folder where partials are located, default src/partials
.
Folder where js helpers are located, default src/helpers
.
The file loaded must be a factory generating the helper:
module.exports = (Handlebars, options) => {
return (input) => {
/* do something here */
}
}
Folder where compiled pages will be written, default dist
.
PageFrost will render all templates located in src/pages
to dist
, these templates can be either HTML file, Handlebars file or Markdown file.
All templates are enhanced with the front-matter parsing and can define custom vars :
src/pages/index.html
---
name: John
---
Ho, hello {{name}} !
dist/index.html
Ho, hello John !
Layout file can be defined in vars (ex. default
, located in src/layouts
):
src/pages/index.html
---
layout: default
name: John
---
Ho, hello {{name}} !
src/layouts/default.html
<h1>{{{$body}}}</h1>
dist/index.html
<h1>Ho, hello John !</h1>
You can choose to exclude a file from rendering by setting the publish
var to false
:
---
publish: false
---
You can categorize a template and find it in the $collections
, this act as a category:
src/blog/note-1.html
---
collection: blog
---
Hey I'm a blog post :)
src/blog.html
<h1>Blog:</h2>
<ul>
{{#each $collections.blog}}
<li>- {{this.url}}</li> <!-- blog/note-1.html -->
{{/each}}
</ul>
PageFrost will provide some runtime data:
-
id
current page's id -
url
current page's url -
$meta
current page's metadata (src
,dest
,ext
,type
...) -
$pages
all published pages -
$collections
all collections
PageFrost comes with built-in helpers:
-
url
usebase_url
to generate valid url:{{url 'foo/bar.html'}} -> 'http://www.base.url/foo/bar.html'
-
loop
iterate over a collection sorted by property:
{{#loop $collections.blog 'date'}}
{{this.title}}
{{/loop}}