mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-20 01:03:23 +03:00
bd597db829
- This is part of the quest to separate the frontend and server & get rid of all the places where there are cross-requires - At the moment the settings cache is one big shared cache used by the frontend and server liberally - This change doesn't really solve the fundamental problems, as we still depend on events, and requires from inside frontend - However it allows us to control the misuse slightly better by getting rid of restricted requires and turning on that eslint ruleset
43 lines
1.6 KiB
JavaScript
43 lines
1.6 KiB
JavaScript
const settingsCache = require('../../shared/settings-cache');
|
|
const _ = require('lodash');
|
|
|
|
function getContextObject(data, context) {
|
|
/**
|
|
* If the data object does not contain the requested context, we return the fallback object.
|
|
*/
|
|
const blog = {
|
|
cover_image: settingsCache.get('cover_image'),
|
|
twitter: settingsCache.get('twitter'),
|
|
facebook: settingsCache.get('facebook')
|
|
};
|
|
|
|
let chosenContext;
|
|
|
|
// @TODO: meta layer is very broken, it's really hard to understand what it's doing
|
|
// The problem is that handlebars root object is structured differently. Sometimes the object is flat on data
|
|
// and sometimes the object is part of a key e.g. data.post. This needs to be prepared at the very first stage and not in each helper.
|
|
if ((_.includes(context, 'page') || _.includes(context, 'amp')) && data.post) {
|
|
chosenContext = data.post;
|
|
} else if (_.includes(context, 'post') && data.post) {
|
|
chosenContext = data.post;
|
|
} else if (_.includes(context, 'page') && data.page) {
|
|
chosenContext = data.page;
|
|
} else if (_.includes(context, 'tag') && data.tag) {
|
|
chosenContext = data.tag;
|
|
} else if (_.includes(context, 'author') && data.author) {
|
|
chosenContext = data.author;
|
|
} else if (data[context]) {
|
|
// @NOTE: This is confusing as hell. It tries to get data[['author']], which works, but coincidence?
|
|
chosenContext = data[context];
|
|
}
|
|
|
|
// Super fallback.
|
|
if (!chosenContext) {
|
|
chosenContext = blog;
|
|
}
|
|
|
|
return chosenContext;
|
|
}
|
|
|
|
module.exports = getContextObject;
|