Basic wiki framework written in node.js
JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
example
lib
README.md
index.js
package.json

README.md

What is Handrit

Handrit is a basic wiki style node.js framework leveraging jade and markdown.

Usage

Currently it relies on Express and connect. Below is a complete example. Only render, or list and item are required though.

var handrit = require('handrit');

handrit.helpers(app)

handrit.type(app, {
  src: "notes",
  render: function(err, data){
    if (err) { next(err) }

    res.local("items", items || []);
    if (item === undefined) {
      res.render('notes/index', { title: "Notes list"});
    } else {
      res.local("item", item);
      res.render('notes/single', { title: res.local("item").title });
    }
  },
  list: function(err, data){
    res.local("items", data.list || []);
    res.render('notes/index', { title: "Notes list"});
  },
  item: function(err, data){
    res.local("item", data.item);
    res.render('notes/single', { title: res.local("item").title });
  }
})

Example of a multi column layout. Columns are case-insensitive

handrit.type(app, {
  src: "notes",
  columns: ["right"],
  render: function(err, data){
    if (err) { next(err) }

    res.local("items", data.list || []);
    if (data.item === undefined) {
      res.render('notes/index', { title: "Notes list"});
    } else {
      res.local("item", data.item);
      res.render('notes/single', { title: res.local("item").title });
    }
  }
})

Example of adding an html pass through engine

handrit.engine.add({
  name: "html",
  ext: "html",
  handler: function(content){
    return content;
  }
})

Default content engines

// Default engines
handrit.engine.add({
  name: "jade",
  ext: "jade",
  handler: function(content){
    return "<h1>Output</h1>";
  }
})

handrit.engine.add({
  name: "markdown",
  ext: "md",
  handler: function(content){
    return "<h1>Output</h1>";
  }
})

Dev Notes

Add extrapolation for the URI and the src folder
Allow authors to be configurable

What it's replacing

In addition to all of the data code, and serving static files under each item it replaces the specific routes.

app.get('/notes', data.listNotes, function(req, res){
  res.render('notes/index', { title: "Notes list"});
});

app.get('/notes/:id', data.listNotes, data.getNote, function(req, res, next){
  res.render('notes/single', { title: res.local("note").title });
});