mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-01 19:46:01 +01:00
refactor: allow plugins to replace og:image, or specify additional og:image
/cc @antosik
This commit is contained in:
@@ -164,7 +164,7 @@ Tags.parse = async (req, data, meta, link) => {
|
||||
return tag;
|
||||
});
|
||||
|
||||
addSiteOGImage(meta);
|
||||
await addSiteOGImage(meta);
|
||||
|
||||
addIfNotExists(meta, 'property', 'og:title', Meta.config.title || 'NodeBB');
|
||||
const ogUrl = url + (req.originalUrl !== '/' ? stripRelativePath(req.originalUrl) : '');
|
||||
@@ -211,49 +211,59 @@ function stripRelativePath(url) {
|
||||
return url;
|
||||
}
|
||||
|
||||
function addSiteOGImage(meta) {
|
||||
async function addSiteOGImage(meta) {
|
||||
const key = Meta.config['og:image'] ? 'og:image' : 'brand:logo';
|
||||
let ogImage = stripRelativePath(Meta.config[key] || '');
|
||||
if (ogImage && !ogImage.startsWith('http')) {
|
||||
ogImage = url + ogImage;
|
||||
}
|
||||
|
||||
if (ogImage) {
|
||||
meta.push({
|
||||
property: 'og:image',
|
||||
content: ogImage,
|
||||
noEscape: true,
|
||||
}, {
|
||||
property: 'og:image:url',
|
||||
content: ogImage,
|
||||
noEscape: true,
|
||||
});
|
||||
const { images } = await plugins.hooks.fire('filter:meta.addSiteOGImage', {
|
||||
images: [{
|
||||
url: ogImage || `${url}/assets/images/logo@3x.png`,
|
||||
width: ogImage ? Meta.config[`${key}:width`] : 963,
|
||||
height: ogImage ? Meta.config[`${key}:height`] : 225,
|
||||
}],
|
||||
});
|
||||
|
||||
if (Meta.config[`${key}:width`] && Meta.config[`${key}:height`]) {
|
||||
meta.push({
|
||||
property: 'og:image:width',
|
||||
content: String(Meta.config[`${key}:width`]),
|
||||
}, {
|
||||
property: 'og:image:height',
|
||||
content: String(Meta.config[`${key}:height`]),
|
||||
});
|
||||
const properties = ['url', 'secure_url', 'type', 'width', 'height', 'alt'];
|
||||
images.forEach((image) => {
|
||||
for (const property of properties) {
|
||||
if (image.hasOwnProperty(property)) {
|
||||
switch (property) {
|
||||
case 'url': {
|
||||
meta.push({
|
||||
property: 'og:image',
|
||||
content: image.url,
|
||||
noEscape: true,
|
||||
}, {
|
||||
property: 'og:image:url',
|
||||
content: image.url,
|
||||
noEscape: true,
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case 'secure_url': {
|
||||
meta.push({
|
||||
property: `og:${property}`,
|
||||
content: image[property],
|
||||
noEscape: true,
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case 'type':
|
||||
case 'alt':
|
||||
case 'width':
|
||||
case 'height': {
|
||||
meta.push({
|
||||
property: `og:image:${property}`,
|
||||
content: String(image[property]),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Push fallback logo
|
||||
meta.push({
|
||||
property: 'og:image',
|
||||
content: `${url}/assets/images/logo@3x.png`,
|
||||
noEscape: true,
|
||||
}, {
|
||||
property: 'og:image:url',
|
||||
content: `${url}/assets/images/logo@3x.png`,
|
||||
noEscape: true,
|
||||
}, {
|
||||
property: 'og:image:width',
|
||||
content: '963',
|
||||
}, {
|
||||
property: 'og:image:height',
|
||||
content: '225',
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user