fleet/website/api/controllers/articles/view-basic-article.js
Eric 874ca7bc8a
Website: Update masthead (#9782)
Closes: https://github.com/fleetdm/fleet/issues/9762

Changes:
- `routes.js`: Changed the `currentPage` local variable to
`currentSection` and updated the value based each on the dropdown
navigation menus in the website header. This variable is used to make a
section "active" in the header.
- `view-basic-article` & `view-articles`: Updated these view actions to
set a `currentSection` variable based on the Markdown article category.
- `Layout.less`: Updated styles to match wireframes
- `layout.ejs`: Updated the styles and layout of the website header to
match wireframes.
- `layout-landing.ejs`, `layout-sandbox.ejs` & `layout-customer.ejs`:
Updated to match wireframes and stylesheet changes.
- `basic-documentation.less`: adjusted the position of the sticky right
sidebar.

---------

Co-authored-by: Mike McNeil <[email protected]>
2023-02-10 18:33:12 -06:00

94 lines
3.9 KiB
JavaScript
Vendored

module.exports = {
friendlyName: 'View blog article',
description: 'Display "Blog article" page.',
urlWildcardSuffix: 'pageUrlSuffix',
inputs: {
pageUrlSuffix : {
description: 'The relative path to the blog article page from within this route.',
example: 'guides/deploying-fleet-on-render',
type: 'string',
defaultsTo: ''
}
},
exits: {
success: { viewTemplatePath: 'pages/articles/basic-article' },
badConfig: { responseType: 'badConfig' },
notFound: { responseType: 'notFound' },
redirect: { responseType: 'redirect' },
},
fn: async function ({pageUrlSuffix}) {
if (!_.isObject(sails.config.builtStaticContent) || !_.isArray(sails.config.builtStaticContent.markdownPages) || !sails.config.builtStaticContent.compiledPagePartialsAppPath) {
throw {badConfig: 'builtStaticContent.markdownPages'};
}
// Serve appropriate page content.
let thisPage = _.find(sails.config.builtStaticContent.markdownPages, { url: '/' + pageUrlSuffix });
if (!thisPage) {// If there's no EXACTLY matching content page, try a revised version of the URL suffix that's lowercase, with all slashes deduped, and any leading or trailing slash removed (leading slashes are only possible if this is a regex, rather than "/*" route)
let revisedPageUrlSuffix = pageUrlSuffix.toLowerCase().replace(/\/+/g, '/').replace(/^\/+/,'').replace(/\/+$/,'');
thisPage = _.find(sails.config.builtStaticContent.markdownPages, { url: '/' + revisedPageUrlSuffix });
if (thisPage) {// If we matched a page with the revised suffix, then redirect to that rather than rendering it, so the URL gets cleaned up.
throw {redirect: thisPage.url};
} else {// If no page could be found even with the revised suffix, then throw a 404 error.
throw 'notFound';
}
}
let articleCategorySlug = pageUrlSuffix.split('/')[0];
// Setting the pages meta title and description from the articles meta tags, as well as an article image, if provided.
// Note: Every article page should have a 'articleTitle' and a 'authorFullName' meta tag.
// Note: Leaving title and description as `undefined` in our view means we'll default to the generic title and description set in layout.ejs.
let pageTitleForMeta;
if(thisPage.meta.articleTitle) {
pageTitleForMeta = thisPage.meta.articleTitle + ' | Fleet for osquery';
}//fi
let pageDescriptionForMeta;
if(thisPage.meta.description){
pageDescriptionForMeta = thisPage.meta.description;
} else if(thisPage.meta.articleTitle && thisPage.meta.authorFullName) {
pageDescriptionForMeta = _.trimRight(thisPage.meta.articleTitle, '.') + ' by ' + thisPage.meta.authorFullName;
}//fi
// Set a currentSection variable for the website header based on how the articles category page is linked to in the header navigation dropdown menus.
let currentSection;
if(articleCategorySlug === 'success-stories'){
// If the article is in the 'device-management' category, highlight the "Platform" dropdown.
currentSection = 'platform';
} else if(_.contains(['deploy','guides','releases'], articleCategorySlug)) {
// If the articleCategorySlug is deploy, guides, or release, highlight the "Documentation" dropdown.
currentSection = 'documentation';
} else {
// If the article is in any other category, highlight the "Community" dropdown.
currentSection = 'community';
}
// Respond with view.
return {
path: require('path'),
thisPage: thisPage,
markdownPages: sails.config.builtStaticContent.markdownPages,
compiledPagePartialsAppPath: sails.config.builtStaticContent.compiledPagePartialsAppPath,
pageTitleForMeta,
pageDescriptionForMeta,
pageImageForMeta: thisPage.meta.articleImageUrl || undefined,
articleCategorySlug,
currentSection,
};
}
};