/* 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 = module.exports = { staff: require('./staff'), editor_new: function (req, res) { if (! req.user) { res.redirect('/') } else { res.locals.opt.editing = true res.render('editor') } }, editor: function (req, res) { if (! req.project) { res.redirect('/') } else if (req.user && (req.isOwner || req.isCollaborator || req.isStaff)) { res.locals.opt.editing = true res.render('editor', { ogUrl: "http://vvalls.com/project/" + req.project.slug + "/", }) } else { res.redirect("/project/" + req.project.slug + "/") } }, 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 } var ogImage if (req.project.media.length && req.project.media[0].media.type == "image") { ogImage = req.project.media[0].media.url } 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, authorpic: user.photo, canEdit: req.isOwner || req.isCollaborator, editlink: "/project/" + req.project.slug + "/edit", noui: !! (req.query.noui === '1'), ogTitle: req.project.name, ogUrl: "http://vvalls.com/project/" + req.project.slug + "/", ogImage: ogImage, }) }) }, builder: function (req, res) { res.render('builder') }, modal: function (req, res) { res.render('modal'); }, home: function (req, res) { // while in development, blank homepage if not logged in /* if (! req.user) { res.send("") return } */ views_middleware.fetchProjects({ featured: true }, null, null, function(err, projects){ res.render('home', { projects: projects || [] }) }) }, demoHome: function (req, res) { views_middleware.fetchProjects({ featured: true }, null, null, function(err, projects){ res.render('home', { projects: projects || [] }) }) }, docs: function (req, res){ var name = req.params.name || "index" if (name == "howto") { res.render('about/' + name) return } 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: util.htmlize(doc.body), isNew: false }) }) }, profile: function (req, res) { var username = req.params.username || (req.user && req.user.username) var user, isOwnProfile = false if (username) { User.findOne({ username: username }, function (err, profileUser) { if (profileUser) { user = profileUser isOwnProfile = (String(user._id) == (req.user && String(req.user._id))) next() } else { done(err, []) } }) } else { done() } function next(){ var criteria = { user_id: user._id } if ( ! isOwnProfile ) { criteria.privacy = false } views_middleware.fetchProjects(criteria, null, null, done) } function done(err, projects){ if (! user) { return res.redirect('/') } res.render('profile', { isOwnProfile: isOwnProfile, profile: user, projects: projects || [], ogTitle: "VValls: Profile of " + user.displayName, ogUrl: "http://vvalls.com/profile/" + user.username + "/", ogImage: user.photo, }) } }, projectsPaginate: function(req, res) { var criteria = {} var offset = Number(req.query.offset || 0) var user_id, isOwnProfile if (req.query.home) { criteria.featured = true criteria.privacy = false } else if (req.query.user_id) { user_id = req.query.user_id isOwnProfile = (String(user_id) == (req.user && String(req.user._id))) criteria.user_id = user_id if ( ! isOwnProfile ) { criteria.privacy = false } } else { res.end("") return } views_middleware.fetchProjects(criteria, null, offset, function(err, projects){ res.render('projects/list-projects', { projects: projects || [] }) }) }, } var views_middleware = { fetchProjects: function (criteria, limit, offset, next) { limit = limit || 7 offset = offset || 0 Project.find(criteria) .sort('-created_at') .skip(offset) .limit(limit) .exec(function(err, projects){ projects = projects.map(function(project){ project = project.toObject() project.date = moment(project.updated_at).format("M/D/YYYY") if (! project.colors || 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 }) next(err, projects) }) } }