123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <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>
|