diff --git a/client/template.js b/client/template.js index be1b6b8b3..13e09711c 100644 --- a/client/template.js +++ b/client/template.js @@ -1,28 +1,30 @@ -module.exports = async(name, title = '', props = {})=>{ - const HOMEBREWERY_PUBLIC_URL=props.config.publicUrl; +const template = async function(name, title='', props = {}){ + const ogTags = []; + Object.entries(props.ogMeta).forEach(([key, value])=>{ + if(!value) return; + const tag = ``; + ogTags.push(tag); + }); + const ogMetaTags = ogTags.join('\n'); - return ` - - - - - - - - - - - - - - - ${title.length ? `${title} - The Homebrewery`: 'The Homebrewery - NaturalCrit'} - - -
${require(`../build/${name}/ssr.js`)(props)}
- - - - -`; + return ` + + + + + + + ${ogMetaTags} + + ${title.length ? `${title} - The Homebrewery`: 'The Homebrewery - NaturalCrit'} + + +
${require(`../build/${name}/ssr.js`)(props)}
+ + + + + `; }; + +module.exports = template; \ No newline at end of file diff --git a/server/app.js b/server/app.js index 380844264..7d462cf1e 100644 --- a/server/app.js +++ b/server/app.js @@ -87,16 +87,32 @@ app.get('/', (req, res, next)=>{ req.brew = { text : welcomeText, renderer : 'V3' + }, + + req.ogMeta = { + siteName : 'The Homebrewery - Make your Homebrew content look legit!', + title : 'Homepage', + description : 'Homepage', + thumbnail : `${config.get('publicUrl')}/thumbnail.png`, + type : 'website' }; splitTextStyleAndMetadata(req.brew); return next(); }); -//Home page legacy +//Home page Legacy app.get('/legacy', (req, res, next)=>{ req.brew = { text : welcomeTextLegacy, renderer : 'legacy' + }, + + req.ogMeta = { + siteName : 'The Homebrewery - Make your Homebrew content look legit!', + title : 'Homepage (Legacy)', + description : 'Homepage', + thumbnail : `${config.get('publicUrl')}/thumbnail.png`, + type : 'website' }; splitTextStyleAndMetadata(req.brew); return next(); @@ -107,6 +123,14 @@ app.get('/migrate', (req, res, next)=>{ req.brew = { text : migrateText, renderer : 'V3' + }, + + req.ogMeta = { + siteName : 'The Homebrewery - Make your Homebrew content look legit!', + title : 'v3 Migration Guide', + description : 'A brief guide to converting Legacy documents to the v3 renderer.', + thumbnail : `${config.get('publicUrl')}/thumbnail.png`, + type : 'website' }; splitTextStyleAndMetadata(req.brew); return next(); @@ -118,6 +142,14 @@ app.get('/changelog', async (req, res, next)=>{ title : 'Changelog', text : changelogText, renderer : 'V3' + }, + + req.ogMeta = { + siteName : 'The Homebrewery - Make your Homebrew content look legit!', + title : 'Changelog', + description : 'Development changelog.', + thumbnail : null, + type : 'website' }; splitTextStyleAndMetadata(req.brew); return next(); @@ -129,7 +161,16 @@ app.get('/faq', async (req, res, next)=>{ title : 'FAQ', text : faqText, renderer : 'V3' + }, + + req.ogMeta = { + siteName : 'The Homebrewery - Make your Homebrew content look legit!', + title : 'FAQ', + description : 'Frequently Asked Questions', + thumbnail : `${config.get('publicUrl')}/thumbnail.png`, + type : 'website' }; + splitTextStyleAndMetadata(req.brew); return next(); }); @@ -167,6 +208,14 @@ app.get('/download/:id', asyncHandler(getBrew('share')), (req, res)=>{ app.get('/user/:username', async (req, res, next)=>{ const ownAccount = req.account && (req.account.username == req.params.username); + req.ogMeta = { + siteName : 'The Homebrewery - Make your Homebrew content look legit!', + title : `${req.params.username}'s Collection`, + description : 'View my collection of homebrew on the Homebrewery.', + image : null, + type : 'website' // or 'profile'? + }; + const fields = [ 'googleId', 'title', @@ -224,6 +273,14 @@ app.get('/user/:username', async (req, res, next)=>{ //Edit Page app.get('/edit/:id', asyncHandler(getBrew('edit')), (req, res, next)=>{ req.brew = req.brew.toObject ? req.brew.toObject() : req.brew; + + req.ogMeta = { + siteName : 'The Homebrewery - Make your Homebrew content look legit!', + title : req.brew.title || 'Untitled Brew', + description : req.brew.description || 'No description.', + image : req.brew.thumbnail || null, + type : 'article' + }; sanitizeBrew(req.brew, 'edit'); splitTextStyleAndMetadata(req.brew); res.header('Cache-Control', 'no-cache, no-store'); //reload the latest saved brew when pressing back button, not the cached version before save. @@ -235,6 +292,13 @@ app.get('/new/:id', asyncHandler(getBrew('share')), (req, res, next)=>{ sanitizeBrew(req.brew, 'share'); splitTextStyleAndMetadata(req.brew); req.brew.title = `CLONE - ${req.brew.title}`; + req.ogMeta = { + siteName : 'The Homebrewery - Make your Homebrew content look legit!', + title : 'New', + description : 'Start crafting your homebrew on the Homebrewery!', + image : null, + type : 'website' + }; return next(); }); @@ -242,6 +306,14 @@ app.get('/new/:id', asyncHandler(getBrew('share')), (req, res, next)=>{ app.get('/share/:id', asyncHandler(getBrew('share')), asyncHandler(async (req, res, next)=>{ const { brew } = req; + req.ogMeta = { + siteName : 'The Homebrewery - Make your Homebrew content look legit!', + title : req.brew.title || 'Untitled Brew', + description : req.brew.description || 'No description.', + image : req.brew.thumbnail || null, + type : 'article' + }; + if(req.params.id.length > 12 && !brew._id) { const googleId = req.params.id.slice(0, -12); const shareId = req.params.id.slice(-12); @@ -342,7 +414,8 @@ app.use(asyncHandler(async (req, res, next)=>{ account : req.account, enable_v3 : config.get('enable_v3'), enable_themes : config.get('enable_themes'), - config : configuration + config : configuration, + ogMeta : req.ogMeta }; const title = req.brew ? req.brew.title : ''; const page = await templateFn('homebrew', title, props)