'use strict'; var async = require('async'); var nconf = require('nconf'); var categories = require('../categories'); var meta = require('../meta'); var helpers = require('./helpers'); var categoriesController = module.exports; categoriesController.list = function (req, res, next) { res.locals.metaTags = [{ name: 'title', content: String(meta.config.title || 'NodeBB'), }, { property: 'og:type', content: 'website', }]; var categoryData; let tree; async.waterfall([ function (next) { categories.getCategoriesByPrivilege('categories:cid', req.uid, 'find', next); }, function (_categoryData, next) { categoryData = _categoryData; tree = categories.getTree(categoryData, 0); categories.getRecentTopicReplies(categoryData, req.uid, next); }, function () { var data = { title: meta.config.homePageTitle || '[[pages:home]]', categories: tree, }; if (req.originalUrl.startsWith(nconf.get('relative_path') + '/api/categories') || req.originalUrl.startsWith(nconf.get('relative_path') + '/categories')) { data.title = '[[pages:categories]]'; data.breadcrumbs = helpers.buildBreadcrumbs([{ text: data.title }]); res.locals.metaTags.push({ property: 'og:title', content: '[[pages:categories]]', }); } data.categories.forEach(function (category) { if (category && Array.isArray(category.posts) && category.posts.length && category.posts[0]) { category.teaser = { url: nconf.get('relative_path') + '/post/' + category.posts[0].pid, timestampISO: category.posts[0].timestampISO, pid: category.posts[0].pid, topic: category.posts[0].topic, }; } }); res.render('categories', data); }, ], next); };