mirror of
https://github.com/codex-team/codex.docs.git
synced 2025-07-21 14:19:42 +02:00
Show created pages in menu (#11)
* Show created pages in menu * reverse children sorting
This commit is contained in:
parent
730eff7995
commit
f845a0d09f
4 changed files with 65 additions and 18 deletions
|
@ -5,8 +5,10 @@ const home = require('./home');
|
||||||
const pages = require('./pages');
|
const pages = require('./pages');
|
||||||
const api = require('./api');
|
const api = require('./api');
|
||||||
|
|
||||||
router.use('/', home);
|
const pagesMiddleware = require('./middlewares/pages');
|
||||||
router.use('/', pages);
|
|
||||||
|
router.use('/', pagesMiddleware, home);
|
||||||
|
router.use('/', pagesMiddleware, pages);
|
||||||
router.use('/api', api);
|
router.use('/api', api);
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|
33
src/routes/middlewares/pages.js
Normal file
33
src/routes/middlewares/pages.js
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
const Pages = require('../../controllers/pages');
|
||||||
|
const asyncMiddleware = require('../../utils/asyncMiddleware');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process one-level pages list to parent-childrens list
|
||||||
|
* @param {Page[]} pages - list of all available pages
|
||||||
|
* @return {Page[]}
|
||||||
|
*/
|
||||||
|
function createMenuTree(pages) {
|
||||||
|
return pages.filter(page => page._parent === '0').map(page => {
|
||||||
|
return Object.assign({
|
||||||
|
children: pages.filter(child => child._parent === page._id).reverse()
|
||||||
|
}, page.data);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Middleware for all /page/... routes
|
||||||
|
* @param req
|
||||||
|
* @param res
|
||||||
|
* @param next
|
||||||
|
*/
|
||||||
|
module.exports = asyncMiddleware(async function (req, res, next) {
|
||||||
|
try {
|
||||||
|
const menu = await Pages.getAll();
|
||||||
|
|
||||||
|
res.locals.menu = createMenuTree(menu);
|
||||||
|
} catch (error) {
|
||||||
|
console.log('Can not load menu:', error);
|
||||||
|
}
|
||||||
|
|
||||||
|
next();
|
||||||
|
});
|
11
src/utils/asyncMiddleware.js
Normal file
11
src/utils/asyncMiddleware.js
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
/**
|
||||||
|
* Helper for making async middlewares for express router
|
||||||
|
* @param fn
|
||||||
|
* @return {function(*=, *=, *=)}
|
||||||
|
*/
|
||||||
|
module.exports = function asyncMiddlware(fn) {
|
||||||
|
return (req, res, next) => {
|
||||||
|
Promise.resolve(fn(req, res, next))
|
||||||
|
.catch(next);
|
||||||
|
};
|
||||||
|
};
|
|
@ -1,19 +1,20 @@
|
||||||
<div class="docs-aside">
|
<div class="docs-aside">
|
||||||
|
{% for firstLevelPage in menu %}
|
||||||
<section class="docs-aside__section">
|
<section class="docs-aside__section">
|
||||||
<a class="docs-aside__section-title" href="">
|
<a class="docs-aside__section-title" href="/page/{{ firstLevelPage._id }}">
|
||||||
Base concepts
|
{{ firstLevelPage.title }}
|
||||||
</a>
|
</a>
|
||||||
|
{% if firstLevelPage.children is not empty %}
|
||||||
<ul class="docs-aside__section-list">
|
<ul class="docs-aside__section-list">
|
||||||
|
{% for child in firstLevelPage.children %}
|
||||||
<li>
|
<li>
|
||||||
<a href="">
|
<a href="/page/{{ child._id }}">
|
||||||
Insallation
|
{{ child.title }}
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="">
|
|
||||||
Usage
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
{% endif %}
|
||||||
</section>
|
</section>
|
||||||
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue