mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2025-12-24 14:12:40 +00:00
Update code based on feedback
This commit is contained in:
21
server.js
21
server.js
@@ -3,7 +3,6 @@ const _ = require('lodash');
|
||||
const jwt = require('jwt-simple');
|
||||
const express = require('express');
|
||||
const yaml = require('js-yaml');
|
||||
const brewUtils = require('./server/utils/brew');
|
||||
const app = express();
|
||||
|
||||
const homebrewApi = require('./server/homebrew.api.js');
|
||||
@@ -12,7 +11,7 @@ const serveCompressedStaticAssets = require('./server/static-assets.mv.js');
|
||||
const sanitizeFilename = require('sanitize-filename');
|
||||
const asyncHandler = require('express-async-handler');
|
||||
|
||||
const brewAccessTypes = ['edit', 'share', 'raw', 'view'];
|
||||
const brewAccessTypes = ['edit', 'share', 'raw'];
|
||||
|
||||
//Get the brew object from the HB database or Google Drive
|
||||
const getBrewFromId = asyncHandler(async (id, accessType)=>{
|
||||
@@ -51,8 +50,13 @@ const splitTextStyleAndMetadata = (brew)=>{
|
||||
brew.text = brew.text.replaceAll('\r\n', '\n');
|
||||
if(brew.text.startsWith('```metadata')) {
|
||||
const index = brew.text.indexOf('```\n\n');
|
||||
const metadata = brew.text.slice(12, index - 1);
|
||||
Object.assign(brew, yaml.load(metadata));
|
||||
const metadataSection = brew.text.slice(12, index - 1);
|
||||
const metadata = yaml.load(metadataSection);
|
||||
brew.title = metadata.title;
|
||||
brew.description = metadata.description;
|
||||
brew.tags = metadata.tags;
|
||||
brew.systems = metadata.systems;
|
||||
brew.renderer = metadata.renderer;
|
||||
brew.text = brew.text.slice(index + 5);
|
||||
}
|
||||
if(brew.text.startsWith('```css')) {
|
||||
@@ -167,10 +171,10 @@ app.get('/faq', async (req, res, next)=>{
|
||||
|
||||
//Source page
|
||||
app.get('/source/:id', asyncHandler(async (req, res)=>{
|
||||
const brew = await getBrewFromId(req.params.id, 'view');
|
||||
const brew = await getBrewFromId(req.params.id, 'raw');
|
||||
|
||||
const replaceStrings = { '&': '&', '<': '<', '>': '>' };
|
||||
let text = brewUtils.mergeBrewText(brew, { style: true, metadata: true, fullMetadata: true });
|
||||
let text = brew.text;
|
||||
for (const replaceStr in replaceStrings) {
|
||||
text = text.replaceAll(replaceStr, replaceStrings[replaceStr]);
|
||||
}
|
||||
@@ -180,7 +184,7 @@ app.get('/source/:id', asyncHandler(async (req, res)=>{
|
||||
|
||||
//Download brew source page
|
||||
app.get('/download/:id', asyncHandler(async (req, res)=>{
|
||||
const brew = await getBrewFromId(req.params.id, 'view');
|
||||
const brew = await getBrewFromId(req.params.id, 'raw');
|
||||
const prefix = 'HB - ';
|
||||
|
||||
let fileName = sanitizeFilename(`${prefix}${brew.title}`).replaceAll(' ', '');
|
||||
@@ -190,8 +194,7 @@ app.get('/download/:id', asyncHandler(async (req, res)=>{
|
||||
'Content-Type' : 'text/plain',
|
||||
'Content-Disposition' : `attachment; filename="${fileName}.txt"`
|
||||
});
|
||||
const text = brewUtils.mergeBrewText(brew, { style: true, metadata: true, fullMetadata: true });
|
||||
res.status(200).send(text);
|
||||
res.status(200).send(brew.text);
|
||||
}));
|
||||
|
||||
//User Page
|
||||
|
||||
@@ -4,7 +4,7 @@ const router = require('express').Router();
|
||||
const zlib = require('zlib');
|
||||
const GoogleActions = require('./googleActions.js');
|
||||
const Markdown = require('../shared/naturalcrit/markdown.js');
|
||||
const brewUtils = require('./utils/brew');
|
||||
const yaml = require("js-yaml");
|
||||
|
||||
// const getTopBrews = (cb) => {
|
||||
// HomebrewModel.find().sort({ views: -1 }).limit(5).exec(function(err, brews) {
|
||||
@@ -12,6 +12,28 @@ const brewUtils = require('./utils/brew');
|
||||
// });
|
||||
// };
|
||||
|
||||
const mergeBrewText = (brew)=>{
|
||||
let text = brew.text;
|
||||
if(brew.style !== undefined) {
|
||||
text = `\`\`\`css\n` +
|
||||
`${brew.style || ''}\n` +
|
||||
`\`\`\`\n\n` +
|
||||
`${text}`;
|
||||
}
|
||||
const metadata = {
|
||||
title : brew.title,
|
||||
description : brew.description,
|
||||
tags : brew.tags,
|
||||
systems : brew.systems,
|
||||
renderer : brew.renderer
|
||||
};
|
||||
text = `\`\`\`metadata\n` +
|
||||
`${yaml.dump(metadata)}\n` +
|
||||
`\`\`\`\n\n` +
|
||||
`${text}`;
|
||||
return text;
|
||||
};
|
||||
|
||||
const MAX_TITLE_LENGTH = 100;
|
||||
|
||||
const getGoodBrewTitle = (text)=>{
|
||||
@@ -37,7 +59,7 @@ const newBrew = (req, res)=>{
|
||||
}
|
||||
|
||||
brew.authors = (req.account) ? [req.account.username] : [];
|
||||
brew.text = brewUtils.mergeBrewText(brew, { style: true });
|
||||
brew.text = mergeBrewText(brew);
|
||||
|
||||
delete brew.editId;
|
||||
delete brew.shareId;
|
||||
@@ -66,7 +88,7 @@ const updateBrew = (req, res)=>{
|
||||
.then((brew)=>{
|
||||
const updateBrew = excludePropsFromUpdate(req.body);
|
||||
brew = _.merge(brew, updateBrew);
|
||||
brew.text = brewUtils.mergeBrewText(brew, { style: true });
|
||||
brew.text = mergeBrewText(brew);
|
||||
|
||||
// Compress brew text to binary before saving
|
||||
brew.textBin = zlib.deflateRawSync(brew.text);
|
||||
@@ -134,7 +156,7 @@ const newGoogleBrew = async (req, res, next)=>{
|
||||
}
|
||||
|
||||
brew.authors = (req.account) ? [req.account.username] : [];
|
||||
brew.text = brewUtils.mergeBrewText(brew, { style: true, metadata: true });
|
||||
brew.text = mergeBrewText(brew);
|
||||
|
||||
delete brew.editId;
|
||||
delete brew.shareId;
|
||||
@@ -156,7 +178,7 @@ const updateGoogleBrew = async (req, res, next)=>{
|
||||
try { oAuth2Client = GoogleActions.authCheck(req.account, res); } catch (err) { return res.status(err.status).send(err.message); }
|
||||
|
||||
const brew = excludePropsFromUpdate(req.body);
|
||||
brew.text = brewUtils.mergeBrewText(brew, { style: true, metadata: true });
|
||||
brew.text = mergeBrewText(brew);
|
||||
|
||||
try {
|
||||
const updatedBrew = await GoogleActions.updateGoogleBrew(oAuth2Client, brew);
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
const yaml = require('js-yaml');
|
||||
|
||||
module.exports = {
|
||||
mergeBrewText : (brew, { style, metadata, fullMetadata })=>{
|
||||
let text = brew.text;
|
||||
if(style) {
|
||||
text = `\`\`\`css\n` +
|
||||
`${brew.style || ''}\n` +
|
||||
`\`\`\`\n\n` +
|
||||
`${text}`;
|
||||
}
|
||||
if(metadata) {
|
||||
let metadata = {
|
||||
title : brew.title,
|
||||
description : brew.description,
|
||||
tags : brew.tags,
|
||||
systems : brew.systems,
|
||||
renderer : brew.renderer,
|
||||
authors : brew.authors,
|
||||
published : brew.published
|
||||
};
|
||||
if(fullMetadata) {
|
||||
metadata = {
|
||||
...metadata,
|
||||
shareId : brew.shareId,
|
||||
pageCount : brew.pageCount,
|
||||
createdAt : brew.createdAt,
|
||||
updatedAt : brew.updatedAt,
|
||||
lastViewed : brew.lastViewed,
|
||||
views : brew.views,
|
||||
version : brew.version
|
||||
};
|
||||
}
|
||||
text = `\`\`\`metadata\n` +
|
||||
`${yaml.dump(metadata)}\n` +
|
||||
`\`\`\`\n\n` +
|
||||
`${text}`;
|
||||
}
|
||||
return text;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user