0
0
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:
Charlie Humphreys
2021-11-30 23:05:08 -06:00
parent 46b64b8001
commit 25c36425be
3 changed files with 39 additions and 55 deletions

View File

@@ -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 = { '&': '&amp;', '<': '&lt;', '>': '&gt;' };
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

View File

@@ -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);

View File

@@ -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;
}
};