function(head, req) { var ddoc = this; var Mustache = require("lib/mustache"); var List = require("vendor/couchapp/lib/list"); var path = require("vendor/couchapp/lib/path").init(req); var Atom = require("vendor/couchapp/lib/atom"); var within = 0; if ( 'within' in req.query ) { within = Number(req.query['within']); log("within: " + within); } else { within = 60 * 60 * 24; // within the last day. } var ts = (new Date()).getTime()/1000 - within; // convert milliseconds to seconds var indexPath = path.list('rpms','rpm-to-host',{descending:true, limit:10}); var feedPath = path.list('rpms','rpm-to-host',{descending:true, limit:10, format:"atom"}); var commentsFeed = path.list('comments','comments',{descending:true, limit:10, format:"atom"}); function check_field(query, field, def) { var ret = def; if ( field in query ) { ret = query[field]; log(field + ": " + ret); } return ret; } var path_parts = req.path; // The first matching format is sent, so reordering functions changes // thier priority. In this case HTML is the preferred format, so it comes first. provides("text", function() { var row, first_row = true; var more_props = true; var header; var hostname = check_field(req.query, 'hostname', false); var rpm = check_field(req.query, 'rpm', false); var show_hosts = check_field(req.query, 'show_hosts', false); var show_rpms = check_field(req.query, 'show_rpms', false); while (row = getRow()) { if ( row.key[0] < ts ) { continue; } } return '\n'; }); provides("html", function() { var key = ""; // render the html head using a template // var stash = { header : { title : 'blah blah blah', index : indexPath, blogName : ddoc.blog.title, feedPath : feedPath, commentsFeed : commentsFeed }, scripts : {}, db : req.path[0], design : req.path[2], feedPath : feedPath, newPostPath : path.show("edit"), assets : path.asset(), rpmversion : check_field(req.query, 'rpmversion', 'List all'), nodes : List.withRows(function(row) { var node = row.value; key = row.key; return { name : key[1], val : row.value, link : path.list('rpmlist',{rpmversion : key[1], group : true, startkey : [key[1]], endkey : [key[1],{}]}), }; }), }; return Mustache.to_html(ddoc.templates.rpms, stash, ddoc.templates.partials, List.send); }); // link : path.list('rpms','rpm-to-host', {rpmversion : key[1], group : true, startkey : [key[1]], endkey : [key[1],{}]}), // if the client requests an atom feed and not html, // we run this function to generate the feed. provides("atom", function() { var path = require("vendor/couchapp/lib/path").init(req); var markdown = require("vendor/couchapp/lib/markdown"); var textile = require("vendor/textile/textile"); // we load the first row to find the most recent change date var row = getRow(); // generate the feed header var feedHeader = Atom.header({ updated : (row ? new Date(row.value.created_at) : new Date()), title : ddoc.blog.title, feed_id : path.absolute(indexPath), feed_link : path.absolute(feedPath), }); // send the header to the client send(feedHeader); // loop over all rows if (row) { do { if (row.value.format == "markdown") { var html = markdown.encode(row.value.body); } else if (row.value.format == "textile") { var html = textile.encode(row.value.body); } else { var html = Mustache.escape(row.value.html); } // generate the entry for this row var feedEntry = Atom.entry({ entry_id : path.absolute('/'+encodeURIComponent(req.info.db_name)+'/'+encodeURIComponent(row.id)), title : row.value.title, content : html, updated : new Date(row.value.created_at), author : row.value.author, alternate : path.absolute(path.show('post', row.id)) }); // send the entry to client send(feedEntry); } while (row = getRow()); } // close the loop after all rows are rendered return ""; }); };