mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-01 21:42:44 +00:00
Update brew content merging functionality and add it to downloads/page source views
#1838
This commit is contained in:
9728
package-lock.json
generated
9728
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -55,6 +55,7 @@
|
|||||||
"express-static-gzip": "2.1.1",
|
"express-static-gzip": "2.1.1",
|
||||||
"fs-extra": "10.0.0",
|
"fs-extra": "10.0.0",
|
||||||
"googleapis": "91.0.0",
|
"googleapis": "91.0.0",
|
||||||
|
"js-yaml": "^4.1.0",
|
||||||
"jwt-simple": "^0.5.6",
|
"jwt-simple": "^0.5.6",
|
||||||
"less": "^3.13.1",
|
"less": "^3.13.1",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
const jwt = require('jwt-simple');
|
const jwt = require('jwt-simple');
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
|
const yaml = require('js-yaml');
|
||||||
|
const brewUtils = require('./server/utils/brew');
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
const homebrewApi = require('./server/homebrew.api.js');
|
const homebrewApi = require('./server/homebrew.api.js');
|
||||||
@@ -50,7 +52,7 @@ const splitTextStyleAndMetadata = (brew)=>{
|
|||||||
if(brew.text.startsWith('```metadata')) {
|
if(brew.text.startsWith('```metadata')) {
|
||||||
const index = brew.text.indexOf('```\n\n');
|
const index = brew.text.indexOf('```\n\n');
|
||||||
const metadata = brew.text.slice(12, index - 1);
|
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);
|
brew.text = brew.text.slice(index + 5);
|
||||||
}
|
}
|
||||||
if(brew.text.startsWith('```css')) {
|
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 brew = await getBrewFromId(req.params.id, 'raw');
|
||||||
|
|
||||||
const replaceStrings = { '&': '&', '<': '<', '>': '>' };
|
const replaceStrings = { '&': '&', '<': '<', '>': '>' };
|
||||||
let text = brew.text;
|
let text = brewUtils.mergeBrewText(brew, { metadata: true, fullMetadata: true });
|
||||||
for (const replaceStr in replaceStrings) {
|
for (const replaceStr in replaceStrings) {
|
||||||
text = text.replaceAll(replaceStr, replaceStrings[replaceStr]);
|
text = text.replaceAll(replaceStr, replaceStrings[replaceStr]);
|
||||||
}
|
}
|
||||||
@@ -188,7 +190,7 @@ app.get('/download/:id', asyncHandler(async (req, res)=>{
|
|||||||
'Content-Type' : 'text/plain',
|
'Content-Type' : 'text/plain',
|
||||||
'Content-Disposition' : `attachment; filename="${fileName}.txt"`
|
'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
|
//User Page
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ const router = require('express').Router();
|
|||||||
const zlib = require('zlib');
|
const zlib = require('zlib');
|
||||||
const GoogleActions = require('./googleActions.js');
|
const GoogleActions = require('./googleActions.js');
|
||||||
const Markdown = require('../shared/naturalcrit/markdown.js');
|
const Markdown = require('../shared/naturalcrit/markdown.js');
|
||||||
|
const brewUtils = require('./utils/brew');
|
||||||
|
|
||||||
// const getTopBrews = (cb) => {
|
// const getTopBrews = (cb) => {
|
||||||
// HomebrewModel.find().sort({ views: -1 }).limit(5).exec(function(err, brews) {
|
// HomebrewModel.find().sort({ views: -1 }).limit(5).exec(function(err, brews) {
|
||||||
@@ -28,31 +29,6 @@ const excludePropsFromUpdate = (brew)=>{
|
|||||||
return 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 newBrew = (req, res)=>{
|
||||||
const brew = req.body;
|
const brew = req.body;
|
||||||
|
|
||||||
@@ -61,7 +37,7 @@ const newBrew = (req, res)=>{
|
|||||||
}
|
}
|
||||||
|
|
||||||
brew.authors = (req.account) ? [req.account.username] : [];
|
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.editId;
|
||||||
delete brew.shareId;
|
delete brew.shareId;
|
||||||
@@ -90,7 +66,7 @@ const updateBrew = (req, res)=>{
|
|||||||
.then((brew)=>{
|
.then((brew)=>{
|
||||||
const updateBrew = excludePropsFromUpdate(req.body);
|
const updateBrew = excludePropsFromUpdate(req.body);
|
||||||
brew = _.merge(brew, updateBrew);
|
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
|
// Compress brew text to binary before saving
|
||||||
brew.textBin = zlib.deflateRawSync(brew.text);
|
brew.textBin = zlib.deflateRawSync(brew.text);
|
||||||
@@ -158,7 +134,7 @@ const newGoogleBrew = async (req, res, next)=>{
|
|||||||
}
|
}
|
||||||
|
|
||||||
brew.authors = (req.account) ? [req.account.username] : [];
|
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.editId;
|
||||||
delete brew.shareId;
|
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); }
|
try { oAuth2Client = GoogleActions.authCheck(req.account, res); } catch (err) { return res.status(err.status).send(err.message); }
|
||||||
|
|
||||||
const brew = excludePropsFromUpdate(req.body);
|
const brew = excludePropsFromUpdate(req.body);
|
||||||
brew.text = mergeBrewText(brew.text, brew.style, brew);
|
brew.text = brewUtils.mergeBrewText(brew, { style: true, metadata: true });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const updatedBrew = await GoogleActions.updateGoogleBrew(oAuth2Client, brew);
|
const updatedBrew = await GoogleActions.updateGoogleBrew(oAuth2Client, brew);
|
||||||
|
|||||||
41
server/utils/brew.js
Normal file
41
server/utils/brew.js
Normal 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;
|
||||||
|
}
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user