Added customizable og-metadata to notes

Signed-off-by: Erik Michelson <erik@liltv.de>
This commit is contained in:
Erik Michelson 2019-10-04 19:49:45 +02:00
parent 116bd7230c
commit 2881f8211a
No known key found for this signature in database
GPG key ID: 6C1E7B9159DABCBA
4 changed files with 23 additions and 2 deletions

View file

@ -409,9 +409,18 @@ module.exports = function (sequelize, DataTypes) {
if (meta.GA && (typeof meta.GA === 'string' || typeof meta.GA === 'number')) { _meta.GA = meta.GA } if (meta.GA && (typeof meta.GA === 'string' || typeof meta.GA === 'number')) { _meta.GA = meta.GA }
if (meta.disqus && (typeof meta.disqus === 'string' || typeof meta.disqus === 'number')) { _meta.disqus = meta.disqus } if (meta.disqus && (typeof meta.disqus === 'string' || typeof meta.disqus === 'number')) { _meta.disqus = meta.disqus }
if (meta.slideOptions && (typeof meta.slideOptions === 'object')) { _meta.slideOptions = meta.slideOptions } if (meta.slideOptions && (typeof meta.slideOptions === 'object')) { _meta.slideOptions = meta.slideOptions }
if (meta.opengraph && (typeof meta.opengraph === 'object')) { _meta.opengraph = meta.opengraph }
} }
return _meta return _meta
} }
Note.parseOpengraph = function (meta, title) {
var _ogdata = {}
if (meta.opengraph) { _ogdata = meta.opengraph }
if (!(_ogdata.title && (typeof _ogdata.title === 'string' || typeof _ogdata.title === 'number'))) { _ogdata.title = title }
if (!(_ogdata.description && (typeof _ogdata.description === 'string' || typeof _ogdata.description === 'number'))) { _ogdata.description = meta.description || '' }
if (!(_ogdata.type && (typeof _ogdata.type === 'string'))) { _ogdata.type = 'website' }
return _ogdata
}
Note.updateAuthorshipByOperation = function (operation, userId, authorships) { Note.updateAuthorshipByOperation = function (operation, userId, authorships) {
var index = 0 var index = 0
var timestamp = Date.now() var timestamp = Date.now()

View file

@ -98,12 +98,14 @@ function responseCodiMD (res, note) {
var meta = models.Note.parseMeta(extracted.meta) var meta = models.Note.parseMeta(extracted.meta)
var title = models.Note.decodeTitle(note.title) var title = models.Note.decodeTitle(note.title)
title = models.Note.generateWebTitle(meta.title || title) title = models.Note.generateWebTitle(meta.title || title)
var opengraph = models.Note.parseOpengraph(meta, title)
res.set({ res.set({
'Cache-Control': 'private', // only cache by client 'Cache-Control': 'private', // only cache by client
'X-Robots-Tag': 'noindex, nofollow' // prevent crawling 'X-Robots-Tag': 'noindex, nofollow' // prevent crawling
}) })
res.render('codimd.ejs', { res.render('codimd.ejs', {
title: title title: title,
opengraph: opengraph
}) })
} }
@ -217,6 +219,7 @@ function showPublishNote (req, res, next) {
var updatetime = note.lastchangeAt var updatetime = note.lastchangeAt
var title = models.Note.decodeTitle(note.title) var title = models.Note.decodeTitle(note.title)
title = models.Note.generateWebTitle(meta.title || title) title = models.Note.generateWebTitle(meta.title || title)
var ogdata = models.Note.parseOpengraph(meta, title)
var data = { var data = {
title: title, title: title,
description: meta.description || (markdown ? models.Note.generateDescription(markdown) : null), description: meta.description || (markdown ? models.Note.generateDescription(markdown) : null),
@ -232,7 +235,8 @@ function showPublishNote (req, res, next) {
GA: meta.GA, GA: meta.GA,
disqus: meta.disqus, disqus: meta.disqus,
cspNonce: res.locals.nonce, cspNonce: res.locals.nonce,
dnt: req.headers.dnt dnt: req.headers.dnt,
opengraph: ogdata
} }
return renderPublish(data, res) return renderPublish(data, res)
}).catch(function (err) { }).catch(function (err) {

View file

@ -4,6 +4,10 @@
<meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
<% for (var og in opengraph) { %>
<% if (opengraph.hasOwnProperty(og) && opengraph[og].trim() !== '') { %>
<meta property="og:<%= og %>" content="<%= opengraph[og] %>">
<% }} %>
<title><%= title %></title> <title><%= title %></title>
<link rel="icon" type="image/png" href="<%- serverURL %>/favicon.png"> <link rel="icon" type="image/png" href="<%- serverURL %>/favicon.png">
<link rel="apple-touch-icon" href="<%- serverURL %>/apple-touch-icon.png"> <link rel="apple-touch-icon" href="<%- serverURL %>/apple-touch-icon.png">

View file

@ -14,6 +14,10 @@
<% if(typeof description !== 'undefined' && description) { %> <% if(typeof description !== 'undefined' && description) { %>
<meta name="description" content="<%= description %>"> <meta name="description" content="<%= description %>">
<% } %> <% } %>
<% for (var og in opengraph) { %>
<% if (opengraph.hasOwnProperty(og) && opengraph[og].trim() !== '') { %>
<meta property="og:<%= og %>" content="<%= opengraph[og] %>">
<% }} %>
<title><%= title %></title> <title><%= title %></title>
<link rel="icon" type="image/png" href="<%- serverURL %>/favicon.png"> <link rel="icon" type="image/png" href="<%- serverURL %>/favicon.png">
<link rel="apple-touch-icon" href="<%- serverURL %>/apple-touch-icon.png"> <link rel="apple-touch-icon" href="<%- serverURL %>/apple-touch-icon.png">