mirror of https://github.com/Requarks/wiki.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.3 KiB
84 lines
2.3 KiB
<template lang="pug">
|
|
.has-collapsable-nav
|
|
ul.collapsable-nav(v-for='treeItem in tree', :class='{ "has-children": treeItem.hasChildren }', v-cloak)
|
|
li(v-for='page in treeItem.pages', :class='{ "is-active": page.isActive }')
|
|
a(v-on:click='mainAction(page)')
|
|
template(v-if='page._id !== "home"')
|
|
i(:class='{ "icon-folder2": page.isDirectory, "icon-file-text-o": !page.isDirectory }')
|
|
span {{ page.title }}
|
|
template(v-else)
|
|
i.icon-home
|
|
span {{ $t('nav.home') }}
|
|
a.is-pagelink(v-if='page.isDirectory && page.isEntry', v-on:click='goto(page._id)')
|
|
i.icon-file-text-o
|
|
i.icon-arrow-right2
|
|
</template>
|
|
|
|
<script>
|
|
/* global socket, siteRoot */
|
|
|
|
export default {
|
|
name: 'tree',
|
|
data () {
|
|
return {
|
|
tree: []
|
|
}
|
|
},
|
|
methods: {
|
|
fetch (basePath) {
|
|
let self = this
|
|
self.$store.dispatch('startLoading')
|
|
self.$nextTick(() => {
|
|
socket.emit('treeFetch', { basePath }, (data) => {
|
|
if (self.tree.length > 0) {
|
|
let branch = self._.last(self.tree)
|
|
branch.hasChildren = true
|
|
self._.find(branch.pages, { _id: basePath }).isActive = true
|
|
}
|
|
self.tree.push({
|
|
hasChildren: false,
|
|
pages: data
|
|
})
|
|
self.$store.dispatch('stopLoading')
|
|
})
|
|
})
|
|
},
|
|
goto (entryPath) {
|
|
window.location.assign(siteRoot + '/' + entryPath)
|
|
},
|
|
unfold (entryPath) {
|
|
let self = this
|
|
let lastIndex = 0
|
|
self._.forEach(self.tree, branch => {
|
|
lastIndex++
|
|
if (self._.find(branch.pages, { _id: entryPath }) !== undefined) {
|
|
return false
|
|
}
|
|
})
|
|
self.tree = self._.slice(self.tree, 0, lastIndex)
|
|
let branch = self._.last(self.tree)
|
|
branch.hasChildren = false
|
|
branch.pages.forEach(page => {
|
|
page.isActive = false
|
|
})
|
|
},
|
|
mainAction (page) {
|
|
let self = this
|
|
if (page.isActive) {
|
|
self.unfold(page._id)
|
|
} else if (page.isDirectory) {
|
|
self.fetch(page._id)
|
|
} else {
|
|
self.goto(page._id)
|
|
}
|
|
}
|
|
},
|
|
mounted () {
|
|
let basePath = window.location.pathname.slice(0, -4)
|
|
if (basePath.length > 1) {
|
|
basePath = basePath.slice(1)
|
|
}
|
|
this.fetch(basePath)
|
|
}
|
|
}
|
|
</script>
|