mirror of https://github.com/requarks/wiki
276 lines
6.5 KiB
276 lines
6.5 KiB
<template lang='pug'>
|
|
q-layout(view='hHh Lpr lff')
|
|
header-nav
|
|
q-drawer.bg-sidebar(
|
|
:modelValue='isSidebarShown'
|
|
:show-if-above='siteStore.theme.sidebarPosition !== `off`'
|
|
:width='isSidebarMini ? 56 : 255'
|
|
:side='siteStore.theme.sidebarPosition === `right` ? `right` : `left`'
|
|
)
|
|
.sidebar-mini.column.items-stretch(v-if='isSidebarMini')
|
|
q-btn.q-py-md(
|
|
flat
|
|
icon='las la-globe'
|
|
color='white'
|
|
aria-label='Switch Locale'
|
|
@click=''
|
|
)
|
|
locale-selector-menu(anchor='top right' self='top left')
|
|
q-tooltip(anchor='center right' self='center left') Switch Locale
|
|
q-btn.q-py-md(
|
|
flat
|
|
icon='las la-sitemap'
|
|
color='white'
|
|
aria-label='Browse'
|
|
@click='notImplemented'
|
|
)
|
|
q-tooltip(anchor='center right' self='center left') Browse
|
|
q-separator.q-my-sm(inset, dark)
|
|
q-btn.q-py-md(
|
|
flat
|
|
icon='las la-bookmark'
|
|
color='white'
|
|
aria-label='Bookmarks'
|
|
@click='notImplemented'
|
|
)
|
|
q-tooltip(anchor='center right' self='center left') Bookmarks
|
|
q-space
|
|
q-btn.q-py-xs(
|
|
flat
|
|
icon='las la-dharmachakra'
|
|
color='white'
|
|
aria-label='Edit Nav'
|
|
size='sm'
|
|
)
|
|
q-menu(
|
|
ref='navEditMenuMini'
|
|
anchor='top right'
|
|
self='bottom left'
|
|
)
|
|
nav-edit-menu(
|
|
:menu-hide-handler='navEditMenuMini.hide'
|
|
:update-position-handler='navEditMenuMini.updatePosition'
|
|
)
|
|
q-tooltip(anchor='center right' self='center left') Edit Nav
|
|
template(v-else)
|
|
.sidebar-actions.flex.items-stretch
|
|
q-btn.q-px-sm.col(
|
|
flat
|
|
dense
|
|
icon='las la-globe'
|
|
color='blue-7'
|
|
text-color='custom-color'
|
|
:label='commonStore.locale'
|
|
:aria-label='commonStore.locale'
|
|
size='sm'
|
|
)
|
|
locale-selector-menu(:offset="[-5, 5]")
|
|
q-separator(vertical)
|
|
q-btn.q-px-sm.col(
|
|
flat
|
|
dense
|
|
icon='las la-sitemap'
|
|
color='blue-7'
|
|
text-color='custom-color'
|
|
label='Browse'
|
|
aria-label='Browse'
|
|
size='sm'
|
|
@click='notImplemented'
|
|
)
|
|
nav-sidebar
|
|
q-bar.sidebar-footerbtns.text-white(
|
|
v-if='userStore.authenticated'
|
|
dense
|
|
)
|
|
q-btn.col(
|
|
icon='las la-dharmachakra'
|
|
label='Edit Nav'
|
|
flat
|
|
)
|
|
q-menu(
|
|
ref='navEditMenu'
|
|
anchor='top left'
|
|
self='bottom left'
|
|
:offset='[0, 10]'
|
|
)
|
|
nav-edit-menu(
|
|
:menu-hide-handler='navEditMenu.hide'
|
|
:update-position-handler='navEditMenu.updatePosition'
|
|
)
|
|
q-separator(vertical)
|
|
q-btn.col(
|
|
icon='las la-bookmark'
|
|
label='Bookmarks'
|
|
flat
|
|
@click='notImplemented'
|
|
)
|
|
q-page-container
|
|
router-view
|
|
q-page-scroller(
|
|
position='bottom-right'
|
|
:scroll-offset='150'
|
|
:offset='[15, 15]'
|
|
)
|
|
q-btn(
|
|
icon='las la-arrow-up'
|
|
color='primary'
|
|
round
|
|
size='md'
|
|
)
|
|
main-overlay-dialog
|
|
footer-nav(v-if='!editorStore.isActive')
|
|
</template>
|
|
|
|
<script setup>
|
|
import { useMeta, useQuasar } from 'quasar'
|
|
import { computed, onMounted, reactive, ref, watch } from 'vue'
|
|
import { useRouter, useRoute } from 'vue-router'
|
|
import { useI18n } from 'vue-i18n'
|
|
|
|
import { useCommonStore } from 'src/stores/common'
|
|
import { useEditorStore } from 'src/stores/editor'
|
|
import { useFlagsStore } from 'src/stores/flags'
|
|
import { usePageStore } from 'src/stores/page'
|
|
import { useSiteStore } from 'src/stores/site'
|
|
import { useUserStore } from 'src/stores/user'
|
|
|
|
// COMPONENTS
|
|
|
|
import FooterNav from 'src/components/FooterNav.vue'
|
|
import HeaderNav from 'src/components/HeaderNav.vue'
|
|
import LocaleSelectorMenu from 'src/components/LocaleSelectorMenu.vue'
|
|
import NavSidebar from 'src/components/NavSidebar.vue'
|
|
import NavEditMenu from 'src/components/NavEditMenu.vue'
|
|
import MainOverlayDialog from 'src/components/MainOverlayDialog.vue'
|
|
|
|
// QUASAR
|
|
|
|
const $q = useQuasar()
|
|
|
|
// STORES
|
|
|
|
const commonStore = useCommonStore()
|
|
const editorStore = useEditorStore()
|
|
const flagsStore = useFlagsStore()
|
|
const pageStore = usePageStore()
|
|
const siteStore = useSiteStore()
|
|
const userStore = useUserStore()
|
|
|
|
// ROUTER
|
|
|
|
const router = useRouter()
|
|
const route = useRoute()
|
|
|
|
// I18N
|
|
|
|
const { t } = useI18n()
|
|
|
|
// META
|
|
|
|
useMeta({
|
|
titleTemplate: title => `${title} - ${siteStore.title}`
|
|
})
|
|
|
|
// REFS
|
|
|
|
const navEditMenu = ref(null)
|
|
const navEditMenuMini = ref(null)
|
|
|
|
// COMPUTED
|
|
|
|
const isSidebarShown = computed(() => {
|
|
return siteStore.showSideNav && !siteStore.sideNavIsDisabled && !(editorStore.isActive && editorStore.hideSideNav)
|
|
})
|
|
|
|
const isSidebarMini = computed(() => {
|
|
return ['hide', 'hideExact'].includes(pageStore.navigationMode) || !pageStore.navigationId
|
|
})
|
|
|
|
// METHODS
|
|
|
|
function notImplemented () {
|
|
$q.notify({
|
|
type: 'negative',
|
|
message: 'Not implemented'
|
|
})
|
|
}
|
|
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.sidebar-actions {
|
|
background: linear-gradient(to bottom, rgba(255,255,255,.1) 0%, rgba(0,0,0, .05) 100%);
|
|
border-bottom: 1px solid rgba(0,0,0,.2);
|
|
height: 38px;
|
|
|
|
.q-btn {
|
|
color: rgba(255,255,255,.8);
|
|
}
|
|
}
|
|
|
|
.sidebar-mini {
|
|
height: 100%;
|
|
}
|
|
|
|
.sidebar-footerbtns {
|
|
background-color: rgba(255,255,255,.1);
|
|
}
|
|
|
|
body.body--dark {
|
|
background-color: $dark-6;
|
|
}
|
|
|
|
.main-overlay {
|
|
> .q-dialog__backdrop {
|
|
background-color: rgba(0,0,0,.6);
|
|
backdrop-filter: blur(5px) saturate(180%);
|
|
}
|
|
> .q-dialog__inner {
|
|
padding: 24px 64px;
|
|
|
|
@media (max-width: $breakpoint-sm-max) {
|
|
padding: 0;
|
|
}
|
|
|
|
> .q-layout-container {
|
|
@at-root .body--light & {
|
|
background-image: linear-gradient(to bottom, $dark-5 10px, $grey-3 11px, $grey-4);
|
|
}
|
|
@at-root .body--dark & {
|
|
background-image: linear-gradient(to bottom, $dark-4 10px, $dark-4 11px, $dark-3);
|
|
}
|
|
border-radius: 6px;
|
|
box-shadow: 0 0 30px 0 rgba(0,0,0,.3);
|
|
}
|
|
}
|
|
}
|
|
|
|
.q-footer {
|
|
.q-bar {
|
|
@at-root .body--light & {
|
|
background-color: $grey-3;
|
|
color: $grey-7;
|
|
}
|
|
@at-root .body--dark & {
|
|
background-color: $dark-4;
|
|
color: rgba(255,255,255,.3);
|
|
}
|
|
}
|
|
}
|
|
|
|
.syncing-enter-active {
|
|
animation: syncing-anim .1s;
|
|
}
|
|
.syncing-leave-active {
|
|
animation: syncing-anim 1s reverse;
|
|
}
|
|
@keyframes syncing-anim {
|
|
0% {
|
|
opacity: 0;
|
|
}
|
|
100% {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
</style>
|