From f40b4b2f3045ac0c1f4ceaa415b0bfdf21b991da Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Thu, 18 Nov 2021 23:23:05 -0600 Subject: [PATCH] Update brew text merge and split functions to include metadata #1838 --- server.js | 16 +++++++++++----- server/homebrew.api.js | 21 ++++++++++++++++++--- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/server.js b/server.js index a3a97cddf..addef4be9 100644 --- a/server.js +++ b/server.js @@ -32,7 +32,7 @@ const getBrewFromId = asyncHandler(async (id, accessType)=>{ if(accessType == 'raw') { return brew; } - splitTextAndStyle(brew); + splitTextStyleAndMetadata(brew); return brew; }); @@ -45,8 +45,14 @@ const sanitizeBrew = (brew, full=false)=>{ return brew; }; -const splitTextAndStyle = (brew)=>{ +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, JSON.parse(metadata)); + brew.text = brew.text.slice(index + 5); + } if(brew.text.startsWith('```css')) { const index = brew.text.indexOf('```\n\n'); brew.style = brew.text.slice(7, index - 1); @@ -128,7 +134,7 @@ app.get('/v3_preview', async (req, res, next)=>{ text : welcomeTextV3, renderer : 'V3' }; - splitTextAndStyle(brew); + splitTextStyleAndMetadata(brew); req.brew = brew; return next(); }); @@ -140,7 +146,7 @@ app.get('/changelog', async (req, res, next)=>{ text : changelogText, renderer : 'V3' }; - splitTextAndStyle(brew); + splitTextStyleAndMetadata(brew); req.brew = brew; return next(); }); @@ -152,7 +158,7 @@ app.get('/faq', async (req, res, next)=>{ text : faqText, renderer : 'V3' }; - splitTextAndStyle(brew); + splitTextStyleAndMetadata(brew); req.brew = brew; return next(); }); diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 59d4f6d68..1eb8dac73 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -28,13 +28,28 @@ const excludePropsFromUpdate = (brew)=>{ return brew; }; -const mergeBrewText = (text, style)=>{ +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; }; @@ -143,7 +158,7 @@ const newGoogleBrew = async (req, res, next)=>{ } brew.authors = (req.account) ? [req.account.username] : []; - brew.text = mergeBrewText(brew.text, brew.style); + brew.text = mergeBrewText(brew.text, brew.style, brew); delete brew.editId; delete brew.shareId; @@ -165,7 +180,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.text = mergeBrewText(brew.text, brew.style, brew); try { const updatedBrew = await GoogleActions.updateGoogleBrew(oAuth2Client, brew);