0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2025-12-24 14:12:40 +00:00

Update brew content merging functionality and add it to downloads/page source views

#1838
This commit is contained in:
Charlie Humphreys
2021-11-23 23:53:02 -06:00
parent f40b4b2f30
commit ef433bbbe2
5 changed files with 85 additions and 9727 deletions

9728
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -55,6 +55,7 @@
"express-static-gzip": "2.1.1",
"fs-extra": "10.0.0",
"googleapis": "91.0.0",
"js-yaml": "^4.1.0",
"jwt-simple": "^0.5.6",
"less": "^3.13.1",
"lodash": "^4.17.21",

View File

@@ -2,6 +2,8 @@
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');
@@ -50,7 +52,7 @@ const splitTextStyleAndMetadata = (brew)=>{
if(brew.text.startsWith('```metadata')) {
const index = brew.text.indexOf('```\n\n');
const metadata = brew.text.slice(12, index - 1);
Object.assign(brew, JSON.parse(metadata));
Object.assign(brew, yaml.load(metadata));
brew.text = brew.text.slice(index + 5);
}
if(brew.text.startsWith('```css')) {
@@ -168,7 +170,7 @@ app.get('/source/:id', asyncHandler(async (req, res)=>{
const brew = await getBrewFromId(req.params.id, 'raw');
const replaceStrings = { '&': '&amp;', '<': '&lt;', '>': '&gt;' };
let text = brew.text;
let text = brewUtils.mergeBrewText(brew, { metadata: true, fullMetadata: true });
for (const replaceStr in replaceStrings) {
text = text.replaceAll(replaceStr, replaceStrings[replaceStr]);
}
@@ -188,7 +190,7 @@ app.get('/download/:id', asyncHandler(async (req, res)=>{
'Content-Type' : 'text/plain',
'Content-Disposition' : `attachment; filename="${fileName}.txt"`
});
res.status(200).send(brew.text);
res.status(200).send(brewUtils.mergeBrewText(brew, { metadata: true, fullMetadata: true }));
}));
//User Page

View File

@@ -4,6 +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 getTopBrews = (cb) => {
// HomebrewModel.find().sort({ views: -1 }).limit(5).exec(function(err, brews) {
@@ -28,31 +29,6 @@ const excludePropsFromUpdate = (brew)=>{
return brew;
};
const mergeBrewText = (text, style, brew)=>{
if(typeof style !== 'undefined') {
text = `\`\`\`css\n` +
`${style}\n` +
`\`\`\`\n\n` +
`${text}`;
}
if(typeof brew !== 'undefined') {
const metadata = {
title : brew.title,
description : brew.description,
tags : brew.tags,
systems : brew.systems,
renderer : brew.renderer,
authors : brew.authors,
published : brew.published
};
text = `\`\`\`metadata\n` +
`${JSON.stringify(metadata)}\n` +
`\`\`\`\n\n` +
`${text}`;
}
return text;
};
const newBrew = (req, res)=>{
const brew = req.body;
@@ -61,7 +37,7 @@ const newBrew = (req, res)=>{
}
brew.authors = (req.account) ? [req.account.username] : [];
brew.text = mergeBrewText(brew.text, brew.style);
brew.text = brewUtils.mergeBrewText(brew, { style: true });
delete brew.editId;
delete brew.shareId;
@@ -90,7 +66,7 @@ const updateBrew = (req, res)=>{
.then((brew)=>{
const updateBrew = excludePropsFromUpdate(req.body);
brew = _.merge(brew, updateBrew);
brew.text = mergeBrewText(brew.text, brew.style);
brew.text = brewUtils.mergeBrewText(brew, { style: true });
// Compress brew text to binary before saving
brew.textBin = zlib.deflateRawSync(brew.text);
@@ -158,7 +134,7 @@ const newGoogleBrew = async (req, res, next)=>{
}
brew.authors = (req.account) ? [req.account.username] : [];
brew.text = mergeBrewText(brew.text, brew.style, brew);
brew.text = brewUtils.mergeBrewText(brew, { style: true, metadata: true });
delete brew.editId;
delete brew.shareId;
@@ -180,7 +156,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 = mergeBrewText(brew.text, brew.style, brew);
brew.text = brewUtils.mergeBrewText(brew, { style: true, metadata: true });
try {
const updatedBrew = await GoogleActions.updateGoogleBrew(oAuth2Client, brew);

41
server/utils/brew.js Normal file
View File

@@ -0,0 +1,41 @@
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;
}
};