Rewrite slide controller to TypeScript

Before this patch the non-TypeScript version of the slide mode causes
problems with the TypeScript code. Therefore, in order to get things
working, this patch does minimalistic changes to the slide mode
controller to bring it into TypeScript convention. And unbreak slide
mode. Further changes are required, but this gets slide mode back to a
usable state.

Signed-off-by: Sheogorath <sheogorath@shivering-isles.com>
This commit is contained in:
Sheogorath 2020-02-26 14:21:00 +01:00
parent a3f5dcb4c7
commit 37923d11f8
No known key found for this signature in database
GPG key ID: C9B1C80737B9CE18
3 changed files with 54 additions and 48 deletions

View file

@ -1,6 +1,6 @@
import {markdownParser} from "../utils";
import slide from "./slide";
import {SlideController} from "./slide";
import {NoteController} from "./controller";
import {Router} from "express";
@ -16,9 +16,9 @@ router.get('/s/:shortid', NoteController.showPublishNote);
// publish note actions
router.get('/s/:shortid/:action', NoteController.publishNoteActions);
// get publish slide
router.get('/p/:shortid', slide.showPublishSlide);
router.get('/p/:shortid', SlideController.showPublishSlide);
// publish slide actions
router.get('/p/:shortid/:action', slide.publishSlideActions);
router.get('/p/:shortid/:action', SlideController.publishSlideActions);
// get note by id
router.get('/:noteId', NoteController.showNote);
// note actions

View file

@ -1,45 +0,0 @@
const noteUtil = require('./util')
const models = require('../../models')
const errors = require('../../errors')
const logger = require('../../logger')
const config = require('../../config')
exports.publishSlideActions = function (req, res, next) {
noteUtil.findNote(req, res, function (note) {
const action = req.params.action
if (action === 'edit') {
res.redirect(config.serverURL + '/' + (note.alias ? note.alias : models.Note.encodeNoteId(note.id)) + '?both')
} else { res.redirect(config.serverURL + '/p/' + note.shortid) }
})
}
exports.showPublishSlide = function (req, res, next) {
const include = [{
model: models.User,
as: 'owner'
}, {
model: models.User,
as: 'lastchangeuser'
}]
noteUtil.findNote(req, res, function (note) {
// force to use short id
const shortid = req.params.shortid
if ((note.alias && shortid !== note.alias) || (!note.alias && shortid !== note.shortid)) {
return res.redirect(config.serverURL + '/p/' + (note.alias || note.shortid))
}
note.increment('viewcount').then(function (note) {
if (!note) {
return errors.errorNotFound(res)
}
noteUtil.getPublishData(req, res, note, (data) => {
res.set({
'Cache-Control': 'private' // only cache by client
})
return res.render('slide.ejs', data)
})
}).catch(function (err) {
logger.error(err)
return errors.errorInternalError(res)
})
}, include)
}

51
lib/web/note/slide.ts Normal file
View file

@ -0,0 +1,51 @@
import {NextFunction, Response} from "express";
import {NoteUtils} from "./util";
import models from '../../models';
import errors from '../../errors';
import logger from '../../logger';
import config from '../../config';
export module SlideController{
export function publishSlideActions (req: any, res: Response, next: NextFunction) {
NoteUtils.findNote(req, res, function (note) {
const action = req.params.action
if (action === 'edit') {
res.redirect(config.serverURL + '/' + (note.alias ? note.alias : models.Note.encodeNoteId(note.id)) + '?both')
} else { res.redirect(config.serverURL + '/p/' + note.shortid) }
})
}
export function showPublishSlide(req: any, res: Response, next: NextFunction) {
const include = [{
model: models.User,
as: 'owner'
}, {
model: models.User,
as: 'lastchangeuser'
}]
NoteUtils.findNote(req, res, function (note) {
// force to use short id
const shortid = req.params.shortid
if ((note.alias && shortid !== note.alias) || (!note.alias && shortid !== note.shortid)) {
return res.redirect(config.serverURL + '/p/' + (note.alias || note.shortid))
}
note.increment('viewcount').then(function (note) {
if (!note) {
return errors.errorNotFound(res)
}
NoteUtils.getPublishData(req, res, note, (data) => {
res.set({
'Cache-Control': 'private' // only cache by client
})
return res.render('slide.ejs', data)
})
}).catch(function (err) {
logger.error(err)
return errors.errorInternalError(res)
})
}, include)
}
}