|
@@ -58,14 +58,95 @@ router.put('/edit/*', (req, res, next) => {
|
|
// CREATE MODE
|
|
// CREATE MODE
|
|
// ==========================================
|
|
// ==========================================
|
|
|
|
|
|
-router.get('/new/*', (req, res, next) => {
|
|
|
|
- res.send('CREATE MODE');
|
|
|
|
|
|
+router.get('/create/*', (req, res, next) => {
|
|
|
|
+
|
|
|
|
+ if(_.some(['create','edit','account','source','history','mk'], (e) => { return _.startsWith(req.path, '/create/' + e); })) {
|
|
|
|
+ return res.render('error', {
|
|
|
|
+ message: 'You cannot create a document with this name as it is reserved by the system.',
|
|
|
|
+ error: {}
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let safePath = entries.parsePath(_.replace(req.path, '/create', ''));
|
|
|
|
+
|
|
|
|
+ entries.exists(safePath).then((docExists) => {
|
|
|
|
+ if(!docExists) {
|
|
|
|
+ entries.getStarter(safePath).then((contents) => {
|
|
|
|
+
|
|
|
|
+ let pageData = {
|
|
|
|
+ markdown: contents,
|
|
|
|
+ meta: {
|
|
|
|
+ title: _.startCase(safePath),
|
|
|
|
+ path: safePath
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+ return res.render('pages/create', { pageData });
|
|
|
|
+
|
|
|
|
+ }).catch((err) => {
|
|
|
|
+ throw new Error('Could not load starter content!');
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ throw new Error('This entry already exists!');
|
|
|
|
+ }
|
|
|
|
+ }).catch((err) => {
|
|
|
|
+ res.render('error', {
|
|
|
|
+ message: err.message,
|
|
|
|
+ error: {}
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+router.put('/create/*', (req, res, next) => {
|
|
|
|
+
|
|
|
|
+ let safePath = entries.parsePath(_.replace(req.path, '/create', ''));
|
|
|
|
+
|
|
|
|
+ entries.create(safePath, req.body.markdown).then(() => {
|
|
|
|
+ res.json({
|
|
|
|
+ ok: true
|
|
|
|
+ });
|
|
|
|
+ }).catch((err) => {
|
|
|
|
+ res.json({
|
|
|
|
+ ok: false,
|
|
|
|
+ error: err.message
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+
|
|
});
|
|
});
|
|
|
|
|
|
// ==========================================
|
|
// ==========================================
|
|
// VIEW MODE
|
|
// VIEW MODE
|
|
// ==========================================
|
|
// ==========================================
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * View source of a document
|
|
|
|
+ */
|
|
|
|
+router.get('/source/*', (req, res, next) => {
|
|
|
|
+
|
|
|
|
+ let safePath = entries.parsePath(_.replace(req.path, '/source', ''));
|
|
|
|
+
|
|
|
|
+ entries.fetchOriginal(safePath, {
|
|
|
|
+ parseMarkdown: false,
|
|
|
|
+ parseMeta: true,
|
|
|
|
+ parseTree: false,
|
|
|
|
+ includeMarkdown: true,
|
|
|
|
+ includeParentInfo: false,
|
|
|
|
+ cache: false
|
|
|
|
+ }).then((pageData) => {
|
|
|
|
+ if(pageData) {
|
|
|
|
+ return res.render('pages/source', { pageData });
|
|
|
|
+ } else {
|
|
|
|
+ throw new Error('Invalid page path.');
|
|
|
|
+ }
|
|
|
|
+ }).catch((err) => {
|
|
|
|
+ res.render('error', {
|
|
|
|
+ message: err.message,
|
|
|
|
+ error: {}
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+});
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* View document
|
|
* View document
|
|
*/
|
|
*/
|
|
@@ -77,11 +158,16 @@ router.get('/*', (req, res, next) => {
|
|
if(pageData) {
|
|
if(pageData) {
|
|
return res.render('pages/view', { pageData });
|
|
return res.render('pages/view', { pageData });
|
|
} else {
|
|
} else {
|
|
- return next();
|
|
|
|
|
|
+ res.render('error', {
|
|
|
|
+ message: err.message,
|
|
|
|
+ error: {}
|
|
|
|
+ });
|
|
}
|
|
}
|
|
}).catch((err) => {
|
|
}).catch((err) => {
|
|
- winston.error(err);
|
|
|
|
- next();
|
|
|
|
|
|
+ res.render('error', {
|
|
|
|
+ message: err.message,
|
|
|
|
+ error: {}
|
|
|
|
+ });
|
|
});
|
|
});
|
|
|
|
|
|
});
|
|
});
|