moved open graph data preparation down to model layer
This commit is contained in:
parent
e9647d053d
commit
0bf162d832
4 changed files with 30 additions and 27 deletions
|
@ -12,7 +12,7 @@ module.exports = {
|
||||||
ga('send', 'pageview');</script>`;
|
ga('send', 'pageview');</script>`;
|
||||||
return new Handlebars.SafeString(gaCode);
|
return new Handlebars.SafeString(gaCode);
|
||||||
},
|
},
|
||||||
addOpenGraph (title, mimeType, showUrl, source, description, thumbnail) {
|
addOpenGraph ({ title, contentType, description, thumbnail, showUrl, source }) {
|
||||||
if (!title || title.trim() === '') {
|
if (!title || title.trim() === '') {
|
||||||
title = 'Spee.ch';
|
title = 'Spee.ch';
|
||||||
}
|
}
|
||||||
|
@ -27,26 +27,26 @@ module.exports = {
|
||||||
const ogImageHeight = '<meta property="og:image:height" content="315" >';
|
const ogImageHeight = '<meta property="og:image:height" content="315" >';
|
||||||
const basicTags = `${ogTitle} ${ogUrl} ${ogSiteName} ${ogDescription} ${ogImageWidth} ${ogImageHeight}`;
|
const basicTags = `${ogTitle} ${ogUrl} ${ogSiteName} ${ogDescription} ${ogImageWidth} ${ogImageHeight}`;
|
||||||
let ogImage = `<meta property="og:image" content="${source}" >`;
|
let ogImage = `<meta property="og:image" content="${source}" >`;
|
||||||
let ogImageType = `<meta property="og:image:type" content="${mimeType}" >`;
|
let ogImageType = `<meta property="og:image:type" content="${contentType}" >`;
|
||||||
let ogType = `<meta property="og:type" content="article" >`;
|
let ogType = `<meta property="og:type" content="article" >`;
|
||||||
if (mimeType === 'video/mp4') {
|
if (contentType === 'video/mp4') {
|
||||||
const ogVideo = `<meta property="og:video" content="${source}" >`;
|
const ogVideo = `<meta property="og:video" content="${source}" >`;
|
||||||
const ogVideoSecureUrl = `<meta property="og:video:secure_url" content="${source}" >`;
|
const ogVideoSecureUrl = `<meta property="og:video:secure_url" content="${source}" >`;
|
||||||
const ogVideoType = `<meta property="og:video:type" content="${mimeType}" >`;
|
const ogVideoType = `<meta property="og:video:type" content="${contentType}" >`;
|
||||||
ogImage = `<meta property="og:image" content="${thumbnail}" >`;
|
ogImage = `<meta property="og:image" content="${thumbnail}" >`;
|
||||||
ogImageType = `<meta property="og:image:type" content="image/png" >`;
|
ogImageType = `<meta property="og:image:type" content="image/png" >`;
|
||||||
ogType = `<meta property="og:type" content="video" >`;
|
ogType = `<meta property="og:type" content="video" >`;
|
||||||
return new Handlebars.SafeString(`${basicTags} ${ogImage} ${ogImageType} ${ogType} ${ogVideo} ${ogVideoSecureUrl} ${ogVideoType}`);
|
return new Handlebars.SafeString(`${basicTags} ${ogImage} ${ogImageType} ${ogType} ${ogVideo} ${ogVideoSecureUrl} ${ogVideoType}`);
|
||||||
} else {
|
} else {
|
||||||
if (mimeType === 'image/gif') {
|
if (contentType === 'image/gif') {
|
||||||
ogType = `<meta property="og:type" content="video.other" >`;
|
ogType = `<meta property="og:type" content="video.other" >`;
|
||||||
};
|
};
|
||||||
return new Handlebars.SafeString(`${basicTags} ${ogImage} ${ogImageType} ${ogType}`);
|
return new Handlebars.SafeString(`${basicTags} ${ogImage} ${ogImageType} ${ogType}`);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
addTwitterCard (mimeType, source, embedUrl, directFileUrl) {
|
addTwitterCard ({ contentType, source, embedUrl, directFileUrl }) {
|
||||||
const basicTwitterTags = `<meta name="twitter:site" content="@spee_ch" >`;
|
const basicTwitterTags = `<meta name="twitter:site" content="@spee_ch" >`;
|
||||||
if (mimeType === 'video/mp4') {
|
if (contentType === 'video/mp4') {
|
||||||
const twitterName = '<meta name="twitter:card" content="player" >';
|
const twitterName = '<meta name="twitter:card" content="player" >';
|
||||||
const twitterPlayer = `<meta name="twitter:player" content="${embedUrl}" >`;
|
const twitterPlayer = `<meta name="twitter:player" content="${embedUrl}" >`;
|
||||||
const twitterPlayerWidth = '<meta name="twitter:player:width" content="600" >';
|
const twitterPlayerWidth = '<meta name="twitter:player:width" content="600" >';
|
||||||
|
|
|
@ -23,12 +23,4 @@ module.exports = {
|
||||||
const openGraphInfo = module.exports.createOpenGraphInfo(claimInfo);
|
const openGraphInfo = module.exports.createOpenGraphInfo(claimInfo);
|
||||||
res.status(200).render('showLite', { layout: 'showlite', claimInfo, shortId, openGraphInfo });
|
res.status(200).render('showLite', { layout: 'showlite', claimInfo, shortId, openGraphInfo });
|
||||||
},
|
},
|
||||||
createOpenGraphInfo ({ claimId, name, fileExt }) {
|
|
||||||
return {
|
|
||||||
embedUrl : `https://spee.ch/embed/${claimId}/${name}`,
|
|
||||||
showUrl : `https://spee.ch/${claimId}/${name}`,
|
|
||||||
source : `https://spee.ch/${claimId}/${name}.${fileExt}`,
|
|
||||||
directFileUrl: `https://spee.ch/${claimId}/${name}.${fileExt}`,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,6 +26,20 @@ function determineThumbnail (storedThumbnail, defaultThumbnail) {
|
||||||
return storedThumbnail;
|
return storedThumbnail;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function addOpengraphDataToClaim (claim) {
|
||||||
|
claim['embedUrl'] = `https://spee.ch/embed/${claim.claimId}/${claim.name}`;
|
||||||
|
claim['showUrl'] = `https://spee.ch/${claim.claimId}/${claim.name}`;
|
||||||
|
claim['source'] = `https://spee.ch/${claim.claimId}/${claim.name}.${claim.fileExt}`;
|
||||||
|
claim['directFileUrl'] = `https://spee.ch/${claim.claimId}/${claim.name}.${claim.fileExt}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
function prepareClaimData (claimData) {
|
||||||
|
claimData['thumbnail'] = determineThumbnail(claimData.thumbnail, DEFAULT_THUMBNAIL);
|
||||||
|
claimData['fileExt'] = determineFileExtensionFromContentType(claimData.contentType);
|
||||||
|
claimData = addOpengraphDataToClaim(claimData);
|
||||||
|
return claimData;
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => {
|
module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => {
|
||||||
const Claim = sequelize.define(
|
const Claim = sequelize.define(
|
||||||
'Claim',
|
'Claim',
|
||||||
|
@ -337,18 +351,15 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => {
|
||||||
.findAll({
|
.findAll({
|
||||||
where: { name, claimId },
|
where: { name, claimId },
|
||||||
})
|
})
|
||||||
.then(result => {
|
.then(claimArray => {
|
||||||
if (!result) {
|
switch (claimArray.length) {
|
||||||
|
case 0:
|
||||||
return resolve(null);
|
return resolve(null);
|
||||||
};
|
|
||||||
switch (result.length) {
|
|
||||||
case 1:
|
case 1:
|
||||||
result[0].dataValues.thumbnail = determineThumbnail(result[0].dataValues.thumbnail, DEFAULT_THUMBNAIL);
|
return resolve(prepareClaimData(claimArray[0].dataValues));
|
||||||
result[0].dataValues.fileExt = determineFileExtensionFromContentType(result[0].dataValues.contentType);
|
|
||||||
return resolve(result[0]);
|
|
||||||
default:
|
default:
|
||||||
logger.warn(`more than one entry matches that name (${name}) and claimID (${claimId})`);
|
logger.error(`more than one entry matches that name (${name}) and claimID (${claimId})`);
|
||||||
return resolve(result[0]);
|
return resolve(prepareClaimData(claimArray[0].dataValues));
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
<link rel="stylesheet" href="/assets/css/mediaQueries.css" type="text/css">
|
<link rel="stylesheet" href="/assets/css/mediaQueries.css" type="text/css">
|
||||||
<meta property="fb:app_id" content="1371961932852223">
|
<meta property="fb:app_id" content="1371961932852223">
|
||||||
{{#unless claimInfo.nsfw}}
|
{{#unless claimInfo.nsfw}}
|
||||||
{{{addTwitterCard claimInfo.contentType openGraphInfo.source openGraphInfo.embedUrl openGraphInfo.directFileUrl}}}
|
{{{addTwitterCard claimInfo }}}
|
||||||
{{{addOpenGraph claimInfo.title claimInfo.contentType openGraphInfo.showUrl openGraphInfo.source claimInfo.description claimInfo.thumbnail}}}
|
{{{addOpenGraph claimInfo }}}
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
<!--google font-->
|
<!--google font-->
|
||||||
<link href="https://fonts.googleapis.com/css?family=Roboto:300" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css?family=Roboto:300" rel="stylesheet">
|
||||||
|
|
Loading…
Reference in a new issue