diff options
| author | Jules Laplace <jules@okfoc.us> | 2014-09-03 17:13:54 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2014-09-03 17:13:54 -0400 |
| commit | 24029c27aca6b39af70d6db88e7505ecc90646d5 (patch) | |
| tree | cdd9bf6721276e8aae3697e4da1318ad6af9dbe3 /server/lib/views/index.js | |
| parent | e2d41bd7bd73f843d0ed0aafa60ed8178f999e50 (diff) | |
endpoints for staff api
Diffstat (limited to 'server/lib/views/index.js')
| -rw-r--r-- | server/lib/views/index.js | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/server/lib/views/index.js b/server/lib/views/index.js new file mode 100644 index 0000000..99be956 --- /dev/null +++ b/server/lib/views/index.js @@ -0,0 +1,154 @@ +/* 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.render('editor') + } +} + +views.editor = function (req, res) { + if (! req.project) { + res.redirect('/') + } + else if (req.isOwner || req.isCollaborator) { + res.render('editor') + } + else { + views.reader(req, res) + } +} + +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, + 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("<html></html>") + } +} + +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") + 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 |
