Browserify middleware for browser-side jade templates.
For some expresso/connect/etc application app:
var browserify = require('browserify');
var bundle = browserify();
app.use(bundle);
var jadeify = require('jadeify');
bundle.use(jadeify(__dirname + '/views'));Then in your browser-side javascript you can use jadeify():
var $ = require('jquery');
var jadeify = require('jadeify');
var msg = jadeify('msg.jade', {
title : 'foo',
body : 'bar baz quux'
}).appendTo($('#messages'));See here for a more complete example.
Render templateFile with vars local variables.
The vars parameter undergoes a deep traversal to find HTMLElement and jquery
handles in order to stringify their outerHTMLs so you can just !{varname} to
insert elements into a template.
Returns an HTML DOM element wrapped with jquery.
A special vars parameter is added that you can update for $var() parameters.
For each variable foo you make available to the template, a special copy,
$foo is made available using the $var() function below. This special copy is
an inline div with the content of foo that you can update with a setter.
Suppose you've got a template bar.jade:
div.bar !{$foo}which you can render browser-side by doing:
var elem = jadeify('bar.jade', { foo : 'pow!' });
setTimeout(function () {
elem.vars.foo = 'zang!';
}, 1000);This first renders bar.jade as effectively:
<div>pow!</div>Then after a second, the template changes to be:
<div>zang!</div>In actuality there is a div with display : inline wrapped around the inner
value to provide a handle for the jadeify innards to attach an ID to.
You should use !{} in favor of #{} for interpolation on updatable elements
for this reason.
These methods are available to your template logic.
The jquery function is passed in as $.
You can assign updatable handles to be modified with elem.vars[name] = ...
setters by calling $var() directly in your template logic.
For instance you can create a handle x in a template:
num.jade
div.num
div.x !{$var('x', 10 * 2 + 1)}
div.y 19
div.z 17and then update it browser-side:
var num = jadeify('num.jade');
num.vars.x *= 100;which updates the div.x text from 21 to 2100.
Wrapped values should always use !{} instead of #{} because they need to
insert additional HTML to install element IDs.
With npm, do:
npm install jadeify
MIT/X11