/* jshint node: true */ var User = require('../schemas/User'), Project = require('../schemas/Project'), Documentation = require('../schemas/Documentation'), Collaborator = require('../schemas/Collaborator'), 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.staff = require('./staff') views.editor_new = function (req, res) { if (! req.user) { res.redirect('/') } else { res.locals.opt.editing = true res.render('editor') } } views.editor = function (req, res) { if (! req.project) { res.redirect('/') } else if (req.isOwner || req.isCollaborator || req.isStaff) { res.locals.opt.editing = true res.render('editor') } else { views.reader(req, res) } } views.reader = function (req, res) { if (! req.project) { res.redirect('/') return } 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, canEdit: req.isOwner || req.isCollaborator, editlink: "/project/" + req.project.slug + "/edit", 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.username || (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") if (project.colors.wall && project.colors.wall[0] == project.colors.wall[1] && project.colors.wall[1] == project.colors.wall[2] && project.colors.wall[2] > 238) { project.color = [238,238,238] } else { project.color = project.colors.wall } return project }) done(err, user, projects) }) } function done(err, user, projects){ if (! user) { return res.redirect('/') } res.render('profile', { profile: user, projects: projects || [], }) } } module.exports = views