| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 | 
							- <template lang="pug">
 
-   div
 
-     .pa-3.d-flex(v-if='navMode === `MIXED`', :class='$vuetify.theme.dark ? `grey darken-5` : `blue darken-3`')
 
-       v-btn(
 
-         depressed
 
-         :color='$vuetify.theme.dark ? `grey darken-4` : `blue darken-2`'
 
-         style='min-width:0;'
 
-         @click='goHome'
 
-         :aria-label='$t(`common:header.home`)'
 
-         )
 
-         v-icon(size='20') mdi-home
 
-       v-btn.ml-3(
 
-         v-if='currentMode === `custom`'
 
-         depressed
 
-         :color='$vuetify.theme.dark ? `grey darken-4` : `blue darken-2`'
 
-         style='flex: 1 1 100%;'
 
-         @click='switchMode(`browse`)'
 
-         )
 
-         v-icon(left) mdi-file-tree
 
-         .body-2.text-none {{$t('common:sidebar.browse')}}
 
-       v-btn.ml-3(
 
-         v-else-if='currentMode === `browse`'
 
-         depressed
 
-         :color='$vuetify.theme.dark ? `grey darken-4` : `blue darken-2`'
 
-         style='flex: 1 1 100%;'
 
-         @click='switchMode(`custom`)'
 
-         )
 
-         v-icon(left) mdi-navigation
 
-         .body-2.text-none {{$t('common:sidebar.mainMenu')}}
 
-     v-divider
 
-     //-> Custom Navigation
 
-     v-list.py-2(v-if='currentMode === `custom`', dense, :class='color', :dark='dark')
 
-       template(v-for='item of items')
 
-         v-list-item(
 
-           v-if='item.k === `link`'
 
-           :href='item.t'
 
-           :target='item.y === `externalblank` ? `_blank` : `_self`'
 
-           :rel='item.y === `externalblank` ? `noopener` : ``'
 
-           )
 
-           v-list-item-avatar(size='24', tile)
 
-             v-icon(v-if='item.c.match(/fa[a-z] fa-/)', size='19') {{ item.c }}
 
-             v-icon(v-else) {{ item.c }}
 
-           v-list-item-title {{ item.l }}
 
-         v-divider.my-2(v-else-if='item.k === `divider`')
 
-         v-subheader.pl-4(v-else-if='item.k === `header`') {{ item.l }}
 
-     //-> Browse
 
-     v-list.py-2(v-else-if='currentMode === `browse`', dense, :class='color', :dark='dark')
 
-       template(v-if='currentParent.id > 0')
 
-         v-list-item(v-for='(item, idx) of parents', :key='`parent-` + item.id', @click='fetchBrowseItems(item)', style='min-height: 30px;')
 
-           v-list-item-avatar(size='18', :style='`padding-left: ` + (idx * 8) + `px; width: auto; margin: 0 5px 0 0;`')
 
-             v-icon(small) mdi-folder-open
 
-           v-list-item-title {{ item.title }}
 
-         v-divider.mt-2
 
-         v-list-item.mt-2(v-if='currentParent.pageId > 0', :href='`/` + currentParent.locale + `/` + currentParent.path', :key='`directorypage-` + currentParent.id', :input-value='path === currentParent.path')
 
-           v-list-item-avatar(size='24')
 
-             v-icon mdi-text-box
 
-           v-list-item-title {{ currentParent.title }}
 
-         v-subheader.pl-4 {{$t('common:sidebar.currentDirectory')}}
 
-       template(v-for='item of currentItems')
 
-         v-list-item(v-if='item.isFolder', :key='`childfolder-` + item.id', @click='fetchBrowseItems(item)')
 
-           v-list-item-avatar(size='24')
 
-             v-icon mdi-folder
 
-           v-list-item-title {{ item.title }}
 
-         v-list-item(v-else, :href='`/` + item.locale + `/` + item.path', :key='`childpage-` + item.id', :input-value='path === item.path')
 
-           v-list-item-avatar(size='24')
 
-             v-icon mdi-text-box
 
-           v-list-item-title {{ item.title }}
 
- </template>
 
- <script>
 
- import _ from 'lodash'
 
- import gql from 'graphql-tag'
 
- import { get } from 'vuex-pathify'
 
- /* global siteLangs */
 
- export default {
 
-   props: {
 
-     color: {
 
-       type: String,
 
-       default: 'primary'
 
-     },
 
-     dark: {
 
-       type: Boolean,
 
-       default: true
 
-     },
 
-     items: {
 
-       type: Array,
 
-       default: () => []
 
-     },
 
-     navMode: {
 
-       type: String,
 
-       default: 'MIXED'
 
-     }
 
-   },
 
-   data() {
 
-     return {
 
-       currentMode: 'custom',
 
-       currentItems: [],
 
-       currentParent: {
 
-         id: 0,
 
-         title: '/ (root)'
 
-       },
 
-       parents: [],
 
-       loadedCache: []
 
-     }
 
-   },
 
-   computed: {
 
-     path: get('page/path'),
 
-     locale: get('page/locale')
 
-   },
 
-   methods: {
 
-     switchMode (mode) {
 
-       this.currentMode = mode
 
-       window.localStorage.setItem('navPref', mode)
 
-       if (mode === `browse` && this.loadedCache.length < 1) {
 
-         this.loadFromCurrentPath()
 
-       }
 
-     },
 
-     async fetchBrowseItems (item) {
 
-       this.$store.commit(`loadingStart`, 'browse-load')
 
-       if (!item) {
 
-         item = this.currentParent
 
-       }
 
-       if (this.loadedCache.indexOf(item.id) < 0) {
 
-         this.currentItems = []
 
-       }
 
-       if (item.id === 0) {
 
-         this.parents = []
 
-       } else {
 
-         const flushRightIndex = _.findIndex(this.parents, ['id', item.id])
 
-         if (flushRightIndex >= 0) {
 
-           this.parents = _.take(this.parents, flushRightIndex)
 
-         }
 
-         if (this.parents.length < 1) {
 
-           this.parents.push(this.currentParent)
 
-         }
 
-         this.parents.push(item)
 
-       }
 
-       this.currentParent = item
 
-       const resp = await this.$apollo.query({
 
-         query: gql`
 
-           query ($parent: Int, $locale: String!) {
 
-             pages {
 
-               tree(parent: $parent, mode: ALL, locale: $locale) {
 
-                 id
 
-                 path
 
-                 title
 
-                 isFolder
 
-                 pageId
 
-                 parent
 
-                 locale
 
-               }
 
-             }
 
-           }
 
-         `,
 
-         fetchPolicy: 'cache-first',
 
-         variables: {
 
-           parent: item.id,
 
-           locale: this.locale
 
-         }
 
-       })
 
-       this.loadedCache = _.union(this.loadedCache, [item.id])
 
-       this.currentItems = _.get(resp, 'data.pages.tree', [])
 
-       this.$store.commit(`loadingStop`, 'browse-load')
 
-     },
 
-     async loadFromCurrentPath() {
 
-       this.$store.commit(`loadingStart`, 'browse-load')
 
-       const resp = await this.$apollo.query({
 
-         query: gql`
 
-           query ($path: String, $locale: String!) {
 
-             pages {
 
-               tree(path: $path, mode: ALL, locale: $locale, includeAncestors: true) {
 
-                 id
 
-                 path
 
-                 title
 
-                 isFolder
 
-                 pageId
 
-                 parent
 
-                 locale
 
-               }
 
-             }
 
-           }
 
-         `,
 
-         fetchPolicy: 'cache-first',
 
-         variables: {
 
-           path: this.path,
 
-           locale: this.locale
 
-         }
 
-       })
 
-       const items = _.get(resp, 'data.pages.tree', [])
 
-       const curPage = _.find(items, ['pageId', this.$store.get('page/id')])
 
-       if (!curPage) {
 
-         console.warn('Could not find current page in page tree listing!')
 
-         return
 
-       }
 
-       let curParentId = curPage.parent
 
-       let invertedAncestors = []
 
-       while (curParentId) {
 
-         const curParent = _.find(items, ['id', curParentId])
 
-         if (!curParent) {
 
-           break
 
-         }
 
-         invertedAncestors.push(curParent)
 
-         curParentId = curParent.parent
 
-       }
 
-       this.parents = [this.currentParent, ...invertedAncestors.reverse()]
 
-       this.currentParent = _.last(this.parents)
 
-       this.loadedCache = [curPage.parent]
 
-       this.currentItems = _.filter(items, ['parent', curPage.parent])
 
-       this.$store.commit(`loadingStop`, 'browse-load')
 
-     },
 
-     goHome () {
 
-       window.location.assign(siteLangs.length > 0 ? `/${this.locale}/home` : '/')
 
-     }
 
-   },
 
-   mounted () {
 
-     this.currentParent.title = `/ ${this.$t('common:sidebar.root')}`
 
-     if (this.navMode === 'TREE') {
 
-       this.currentMode = 'browse'
 
-     } else if (this.navMode === 'STATIC') {
 
-       this.currentMode = 'custom'
 
-     } else {
 
-       this.currentMode = window.localStorage.getItem('navPref') || 'custom'
 
-     }
 
-     if (this.currentMode === 'browse') {
 
-       this.loadFromCurrentPath()
 
-     }
 
-   }
 
- }
 
- </script>
 
 
  |