/* jshint node: true */ var User = require('./schemas/User'), Project = require('./schemas/Project'), Documentation = require('./schemas/Documentation'), config = require('../../config'), marked = require('marked'), util = require('./util'), _ = require('lodash'), moment = require('moment'); marked.setOptions({ renderer: new marked.Renderer(), gfm: true, sanitize: true, smartLists: true, smartypants: true, }); var views = {} views.editor = function (req, res) { if (! req.user && ! req.project) { res.redirect('/') } else if (! req.user || (req.project && String(req.user._id) !== String(req.project.user_id))) { User.findOne({ _id: req.project.user_id }, function(err, user) { if (err || ! user) { console.error(err) res.redirect('/') return } res.render('reader', { name: util.sanitize(req.project.name), description: util.sanitize(req.project.description), date: moment(req.project.updated_at).format("M/DD/YYYY"), author: user.displayName, authorlink: "/profile/" + user.username, noui: !! (req.query.noui === '1'), }) }) } else { res.render('editor') } } views.reader = function (req, res) { if (! req.project) { res.redirect('/') } User.findOne({ _id: req.project.user_id }, function(err, user) { if (err || ! user) { console.error(err) res.redirect('/') return } res.render('reader', { name: util.sanitize(req.project.name), description: util.sanitize(req.project.description), date: moment(req.project.updated_at).format("M/DD/YYYY"), author: user.displayName, authorlink: "/profile/" + user.username, noui: !! (req.query.noui === '1'), }) }) } views.builder = function (req, res) { res.render('builder') } views.modal = function (req, res) { res.render('modal'); }; views.home = function (req, res) { if (req.user) { Project.find({ privacy: false }) .sort('-created_at') .limit(20) .exec(function(err, projects){ res.render('home', { projects: projects || [] }) }) } else { res.send("") } } views.docs = function (req, res){ var name = req.params.name || "index" if (name === "new") { res.render('docs', { doc: { name: "new" }, content: null, isNew: true }) return } Documentation.findOne({ name: name }, function(err, doc) { if (err || ! doc) { return res.render('docs', { doc: { name: util.sanitize(name) }, content: null, isNew: true }) } res.render('docs', { doc: doc, content: marked(doc.body), isNew: false }) }) } views.profile = function (req, res) { var username = req.params[0] || (req.user && req.user.username) if (username) { User.findOne({ username: username }, function (err, user) { user ? next(user) : done(err, {}, []) }) } else { done() } function next(user){ var criteria = { user_id: user._id } if ( ! (req.user && req.user._id && req.user._id == user._id) ) { criteria.privacy = false } Project.find(criteria, function(err, projects){ projects = projects.map(function(project){ project = project.toObject() project.date = moment(project.updated_at).format("M/DD/YYYY") return project }) done(err, user, projects) }) } function done(err, user, projects){ if (! user) { return res.redirect('/') } res.render('profile', { profile: user, projects: projects || [], }) } } views.staff = { index: function(req, res){ res.render('staff') }, bless: function(req, res){ req.user.isStaff = true req.user.save(function(){ res.redirect("/staff") }) }, } module.exports = views