server_side_dijit
Version:
Middleware plugin for Connect that renders dijit widget templates, which are normally rendered client-side, on the server. Returned pages are modified to include the generated server-side templates inline, with a client-side JavaScript plugin to hook up the templates to the widget.
45 lines (35 loc) • 1.17 kB
JavaScript
var render = require('./render.js');
module.exports = function (config) {
// Create AMD packages from module configuration.
var page = render({
dojo: config.dojo + "/dojo",
dijit: config.dojo + "/dijit",
server_side: __dirname + "/../public/js/server_side"
});
return function (req, res, next) {
var ignore = function (accept) {
return accept.indexOf("text/html") === -1;
};
if (ignore(req.headers.accept)) {
return next();
}
var write = res.write,
end = res.end,
buffer = "";
// Only hook into text/html requests....
res.write = function (chunk, encoding) {
buffer = buffer.concat(chunk);
return true;
};
res.end = function (chunk, encoding) {
if (chunk) {
res.write(chunk);
}
// Fix content-length, we now have more data to send.
var rendered = page(buffer);
res.setHeader("Content-Length", rendered.length);
return end.call(res, rendered, encoding);
};
next();
};
};