moved open graph data preparation down to model layer

This commit is contained in:
bill bittner 2017-12-06 14:23:28 -08:00
parent e9647d053d
commit 0bf162d832
4 changed files with 30 additions and 27 deletions

View file

@ -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" >';

View file

@ -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}`,
};
},
}; };

View file

@ -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) {
return resolve(null); case 0:
}; 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 => {

View file

@ -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">