Skip to content

Render Handlebars and Markdown templates with front-matter metadata

License

Notifications You must be signed in to change notification settings

myeti/pagefrost

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

11 Commits

Repository files navigation

PageFrost 1.1.1

Grunt task to render Handlebars and Markdown templates using front-matter metadata.

Install

npm install pagefrost

Config

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')

target.data

Global data injected in all templates, can be either a.jsonfile, a.ymlfile, a.jsfile or an object, default{}.

target.options.base_url

Base url used by theurlhelper.

target.options.rewrite_url

Iftrue,create.htaccessand remove.htmlextension inurlhelper.

target.src.pages

Folder where templates are located, defaultsrc/pages.

target.src.layouts

Folder where layouts are located, defaultsrc/layouts.

target.src.partials

Folder where partials are located, defaultsrc/partials.

target.src.helpers

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 */
}
}

target.dest

Folder where compiled pages will be written, defaultdist.

Usage

PageFrost will render all templates located insrc/pagestodist,these templates can be either HTML file, Handlebars file or Markdown file.

Front-matter

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

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>

Publish state

You can choose to exclude a file from rendering by setting thepublishvar tofalse:

---
publish: false
---

Collections

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>

Runtime vars

PageFrost will provide some runtime data:

  • idcurrent page's id
  • urlcurrent page's url
  • $metacurrent page's metadata (src,dest,ext,type...)
  • $pagesall published pages
  • $collectionsall collections

Built-in helpers

PageFrost comes with built-in helpers:

  • urlusebase_urlto generate valid url:{{url 'foo/bar.html'}} -> 'http:// base.url/foo/bar.html'
  • loopiterate over a collection sorted by property:
{{#loop $collections.blog 'date'}}
{{this.title}}
{{/loop}}

:)

About

Render Handlebars and Markdown templates with front-matter metadata

Resources

License

Stars

Watchers

Forks

Packages

No packages published