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 theurl
helper.
Iftrue
,create.htaccess
and remove.html
extension inurl
helper.
Folder where templates are located, defaultsrc/pages
.
Folder where layouts are located, defaultsrc/layouts
.
Folder where partials are located, defaultsrc/partials
.
Folder where js helpers are located, defaultsrc/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, defaultdist
.
PageFrost will render all templates located insrc/pages
todist
,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 insrc/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 thepublish
var tofalse
:
---
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 idurl
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:// base.url/foo/bar.html'
loop
iterate over a collection sorted by property:
{{#loop $collections.blog 'date'}}
{{this.title}}
{{/loop}}