feat: sidebar rendering
This commit is contained in:
parent
0b5a4e0c63
commit
763bf4b903
@ -1,19 +1,6 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
v-list(dense, :class='color', :dark='dark')
|
v-list.py-2(dense, :class='color', :dark='dark')
|
||||||
v-list-tile.pt-2(href='/')
|
slot
|
||||||
v-list-tile-avatar: v-icon home
|
|
||||||
v-list-tile-title Home
|
|
||||||
v-divider.my-2
|
|
||||||
v-subheader.pl-4 Navigation
|
|
||||||
v-list-tile
|
|
||||||
v-list-tile-avatar: v-icon stars
|
|
||||||
v-list-tile-title The Universe
|
|
||||||
v-list-tile
|
|
||||||
v-list-tile-avatar: v-icon directions_boat
|
|
||||||
v-list-tile-title Ships
|
|
||||||
v-list-tile
|
|
||||||
v-list-tile-avatar: v-icon local_airport
|
|
||||||
v-list-tile-title Airports
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
v-model='navShown'
|
v-model='navShown'
|
||||||
)
|
)
|
||||||
nav-sidebar
|
nav-sidebar
|
||||||
|
slot(name='sidebar')
|
||||||
|
|
||||||
v-content
|
v-content
|
||||||
v-toolbar(color='grey lighten-3', flat, dense)
|
v-toolbar(color='grey lighten-3', flat, dense)
|
||||||
|
@ -75,7 +75,8 @@ router.get('/*', async (req, res, next) => {
|
|||||||
isPrivate: false
|
isPrivate: false
|
||||||
})
|
})
|
||||||
if (page) {
|
if (page) {
|
||||||
res.render('page', { page })
|
const sidebar = await WIKI.models.navigation.getTree({ cache: true })
|
||||||
|
res.render('page', { page, sidebar })
|
||||||
} else if (pageArgs.path === 'home') {
|
} else if (pageArgs.path === 'home') {
|
||||||
res.render('welcome')
|
res.render('welcome')
|
||||||
} else {
|
} else {
|
||||||
|
@ -21,6 +21,7 @@ module.exports = {
|
|||||||
await WIKI.models.navigation.query().patch({
|
await WIKI.models.navigation.query().patch({
|
||||||
config: args.tree
|
config: args.tree
|
||||||
}).where('key', 'site')
|
}).where('key', 'site')
|
||||||
|
await WIKI.redis.set('nav:sidebar', JSON.stringify(args.tree), 'EX', 300)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
responseResult: graphHelper.generateSuccess('Navigation updated successfully')
|
responseResult: graphHelper.generateSuccess('Navigation updated successfully')
|
||||||
|
@ -21,9 +21,18 @@ module.exports = class Navigation extends Model {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static async getTree() {
|
static async getTree({ cache = false } = {}) {
|
||||||
|
if (cache) {
|
||||||
|
const navTreeCached = await WIKI.redis.get('nav:sidebar')
|
||||||
|
if (navTreeCached) {
|
||||||
|
return JSON.parse(navTreeCached)
|
||||||
|
}
|
||||||
|
}
|
||||||
const navTree = await WIKI.models.navigation.query().findOne('key', 'site')
|
const navTree = await WIKI.models.navigation.query().findOne('key', 'site')
|
||||||
if (navTree) {
|
if (navTree) {
|
||||||
|
if (cache) {
|
||||||
|
await WIKI.redis.set('nav:sidebar', JSON.stringify(navTree.config), 'EX', 300)
|
||||||
|
}
|
||||||
return navTree.config
|
return navTree.config
|
||||||
} else {
|
} else {
|
||||||
WIKI.logger.warn('Site Navigation is missing or corrupted.')
|
WIKI.logger.warn('Site Navigation is missing or corrupted.')
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
const uuid = require('uuid/v4')
|
||||||
|
|
||||||
/* global WIKI */
|
/* global WIKI */
|
||||||
|
|
||||||
@ -209,6 +210,7 @@ module.exports = () => {
|
|||||||
key: 'site',
|
key: 'site',
|
||||||
config: [
|
config: [
|
||||||
{
|
{
|
||||||
|
id: uuid(),
|
||||||
icon: 'home',
|
icon: 'home',
|
||||||
kind: 'link',
|
kind: 'link',
|
||||||
label: 'Home',
|
label: 'Home',
|
||||||
|
@ -16,4 +16,17 @@ block body
|
|||||||
:author-id=page.authorId
|
:author-id=page.authorId
|
||||||
:is-published=page.isPublished
|
:is-published=page.isPublished
|
||||||
)
|
)
|
||||||
|
template(slot='sidebar')
|
||||||
|
each navItem in sidebar
|
||||||
|
if navItem.kind === 'link'
|
||||||
|
v-list-tile(
|
||||||
|
href=navItem.target
|
||||||
|
)
|
||||||
|
v-list-tile-avatar
|
||||||
|
v-icon= navItem.icon
|
||||||
|
v-list-tile-title= navItem.label
|
||||||
|
else if navItem.kind === 'divider'
|
||||||
|
v-divider.my-2
|
||||||
|
else if navItem.kind === 'header'
|
||||||
|
v-subheader.pl-4= navItem.label
|
||||||
template(slot='contents')!= page.render
|
template(slot='contents')!= page.render
|
||||||
|
Loading…
x
Reference in New Issue
Block a user