nfp_sites/app/menu/menu.js

80 lines
2.2 KiB
JavaScript
Raw Normal View History

2019-02-20 16:10:37 +00:00
const m = require('mithril')
const Authentication = require('../authentication')
2019-09-13 13:33:10 +00:00
const { getAllPages, Tree, getTree } = require('../api/page')
2019-02-20 16:10:37 +00:00
const Menu = {
currentActive: 'home',
2019-09-13 13:33:10 +00:00
error: '',
loading: false,
2019-02-20 16:10:37 +00:00
onbeforeupdate: function() {
let currentPath = m.route.get()
if (currentPath === '/') Menu.currentActive = 'home'
else if (currentPath === '/login') Menu.currentActive = 'login'
2019-09-13 13:33:10 +00:00
else Menu.currentActive = currentPath
2019-02-20 16:10:37 +00:00
},
2019-09-13 13:33:10 +00:00
oninit: function(vnode) {
2019-02-20 16:10:37 +00:00
Menu.onbeforeupdate()
2019-09-13 13:33:10 +00:00
Menu.loading = true
getTree()
.then(function(results) {
Tree.splice(0, Tree.Length)
Tree.push.apply(Tree, results)
})
.catch(function(err) {
Menu.error = err.message
})
.then(function() {
Menu.loading = false
m.redraw()
})
2019-02-20 16:10:37 +00:00
},
view: function() {
return [
m('div.top', [
m('h2', 'NFP Moe'),
m('aside', Authentication.currentUser ? [
m('p', 'Welcome ' + Authentication.currentUser.email),
2019-09-13 13:33:10 +00:00
(Authentication.currentUser.level >= 100
? [
m(m.route.Link, { href: '/admin/pages' }, 'Pages'),
m(m.route.Link, { href: '/admin/articles' }, 'Articles'),
]
2019-02-20 16:10:37 +00:00
: null
),
2019-09-13 13:33:10 +00:00
m(m.route.Link, { href: '/logout' }, 'Logout')
2019-02-20 16:10:37 +00:00
] : [
2019-09-13 13:33:10 +00:00
m(m.route.Link, { href: '/login' }, 'Login')
2019-02-20 16:10:37 +00:00
])
]),
m('nav', [
2019-09-13 13:33:10 +00:00
m(m.route.Link, {
href: '/',
class: Menu.currentActive === 'home' ? 'active' : '',
2019-02-20 16:10:37 +00:00
}, 'Home'),
2019-09-13 13:33:10 +00:00
Menu.loading ? m('div.loading-spinner') : Tree.map(function(page) {
if (page.children.length) {
return m('div.hassubmenu', [
m(m.route.Link, {
href: '/page/' + page.path,
class: Menu.currentActive === ('/page/' + page.path) ? 'active' : '',
}, page.name)
])
}
return m(m.route.Link, {
href: '/page/' + page.path,
class: Menu.currentActive === ('/page/' + page.path) ? 'active' : '',
}, page.name)
}),
2019-02-20 16:10:37 +00:00
]),
2019-09-13 13:33:10 +00:00
Menu.error ? m('div.menuerror', Menu.error) : null,
2019-02-20 16:10:37 +00:00
]
}
}
module.exports = Menu