aboutsummaryrefslogtreecommitdiff
path: root/src/components/desktop_nav
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/desktop_nav')
-rw-r--r--src/components/desktop_nav/desktop_nav.js31
-rw-r--r--src/components/desktop_nav/desktop_nav.scss37
-rw-r--r--src/components/desktop_nav/desktop_nav.vue32
3 files changed, 70 insertions, 30 deletions
diff --git a/src/components/desktop_nav/desktop_nav.js b/src/components/desktop_nav/desktop_nav.js
index 08c0e44e..f6a2e294 100644
--- a/src/components/desktop_nav/desktop_nav.js
+++ b/src/components/desktop_nav/desktop_nav.js
@@ -1,4 +1,5 @@
import SearchBar from 'components/search_bar/search_bar.vue'
+import ConfirmModal from '../confirm_modal/confirm_modal.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faSignInAlt,
@@ -30,7 +31,8 @@ library.add(
export default {
components: {
- SearchBar
+ SearchBar,
+ ConfirmModal
},
data: () => ({
searchBarHidden: true,
@@ -40,7 +42,8 @@ export default {
window.CSS.supports('-moz-mask-size', 'contain') ||
window.CSS.supports('-ms-mask-size', 'contain') ||
window.CSS.supports('-o-mask-size', 'contain')
- )
+ ),
+ showingConfirmLogout: false
}),
computed: {
enableMask () { return this.supportsMask && this.$store.state.instance.logoMask },
@@ -73,21 +76,41 @@ export default {
hideSitename () { return this.$store.state.instance.hideSitename },
logoLeft () { return this.$store.state.instance.logoLeft },
currentUser () { return this.$store.state.users.currentUser },
- privateMode () { return this.$store.state.instance.private }
+ privateMode () { return this.$store.state.instance.private },
+ shouldConfirmLogout () {
+ return this.$store.getters.mergedConfig.modalOnLogout
+ }
},
methods: {
scrollToTop () {
window.scrollTo(0, 0)
},
+ showConfirmLogout () {
+ this.showingConfirmLogout = true
+ },
+ hideConfirmLogout () {
+ this.showingConfirmLogout = false
+ },
logout () {
+ if (!this.shouldConfirmLogout) {
+ this.doLogout()
+ } else {
+ this.showConfirmLogout()
+ }
+ },
+ doLogout () {
this.$router.replace('/main/public')
this.$store.dispatch('logout')
+ this.hideConfirmLogout()
},
onSearchBarToggled (hidden) {
this.searchBarHidden = hidden
},
openSettingsModal () {
- this.$store.dispatch('openSettingsModal')
+ this.$store.dispatch('openSettingsModal', 'user')
+ },
+ openAdminModal () {
+ this.$store.dispatch('openSettingsModal', 'admin')
}
}
}
diff --git a/src/components/desktop_nav/desktop_nav.scss b/src/components/desktop_nav/desktop_nav.scss
index 1ec25385..c7e02936 100644
--- a/src/components/desktop_nav/desktop_nav.scss
+++ b/src/components/desktop_nav/desktop_nav.scss
@@ -1,4 +1,4 @@
-@import '../../_variables.scss';
+@import "../../variables";
.DesktopNav {
width: 100%;
@@ -27,20 +27,13 @@
--miniColumn: 25rem;
--maxiColumn: 45rem;
--columnGap: 1em;
- max-width: calc(
- var(--sidebarColumnWidth, var(--miniColumn)) +
- var(--contentColumnWidth, var(--maxiColumn)) +
- var(--columnGap)
- );
- }
- &.-column-stretch.-wide .inner-nav {
- max-width: calc(
- var(--sidebarColumnWidth, var(--miniColumn)) +
- var(--contentColumnWidth, var(--maxiColumn)) +
- var(--notifsColumnWidth, var(--miniColumn)) +
- var(--columnGap)
- );
+ max-width:
+ calc(
+ var(--sidebarColumnWidth, var(--miniColumn)) +
+ var(--contentColumnWidth, var(--maxiColumn)) +
+ var(--columnGap)
+ );
}
&.-logoLeft .inner-nav {
@@ -48,8 +41,19 @@
grid-template-areas: "logo sitename actions";
}
+ &.-column-stretch.-wide .inner-nav {
+ max-width:
+ calc(
+ var(--sidebarColumnWidth, var(--miniColumn)) +
+ var(--contentColumnWidth, var(--maxiColumn)) +
+ var(--notifsColumnWidth, var(--miniColumn)) +
+ var(--columnGap)
+ );
+ }
+
.button-default {
- &, svg {
+ &,
+ svg {
color: $fallback--text;
color: var(--btnTopBarText, $fallback--text);
}
@@ -70,7 +74,7 @@
color: $fallback--text;
color: var(--btnToggledTopBarText, $fallback--text);
background-color: $fallback--fg;
- background-color: var(--btnToggledTopBar, $fallback--fg)
+ background-color: var(--btnToggledTopBar, $fallback--fg);
}
}
@@ -82,6 +86,7 @@
transition-duration: 100ms;
@media all and (min-width: 800px) {
+ /* stylelint-disable-next-line declaration-no-important */
opacity: 1 !important;
}
diff --git a/src/components/desktop_nav/desktop_nav.vue b/src/components/desktop_nav/desktop_nav.vue
index 5db7fc79..49382f8e 100644
--- a/src/components/desktop_nav/desktop_nav.vue
+++ b/src/components/desktop_nav/desktop_nav.vue
@@ -20,6 +20,7 @@
class="logo"
:to="{ name: 'root' }"
:style="logoBgStyle"
+ :title="sitename"
>
<div
class="mask"
@@ -38,44 +39,55 @@
/>
<button
class="button-unstyled nav-icon"
- @click="openSettingsModal"
+ :title="$t('nav.preferences')"
+ @click.stop="openSettingsModal"
>
<FAIcon
fixed-width
class="fa-scale-110 fa-old-padding"
icon="cog"
- :title="$t('nav.preferences')"
/>
</button>
- <a
+ <button
v-if="currentUser && currentUser.role === 'admin'"
- href="/pleroma/admin/#/login-pleroma"
- class="nav-icon"
+ class="button-unstyled nav-icon"
target="_blank"
- @click.stop
+ :title="$t('nav.administration')"
+ @click.stop="openAdminModal"
>
<FAIcon
fixed-width
class="fa-scale-110 fa-old-padding"
icon="tachometer-alt"
- :title="$t('nav.administration')"
/>
- </a>
+ </button>
<span class="spacer" />
<button
v-if="currentUser"
class="button-unstyled nav-icon"
- @click.prevent="logout"
+ :title="$t('login.logout')"
+ @click.stop.prevent="logout"
>
<FAIcon
fixed-width
class="fa-scale-110 fa-old-padding"
icon="sign-out-alt"
- :title="$t('login.logout')"
/>
</button>
</div>
</div>
+ <teleport to="#modal">
+ <confirm-modal
+ v-if="showingConfirmLogout"
+ :title="$t('login.logout_confirm_title')"
+ :confirm-text="$t('login.logout_confirm_accept_button')"
+ :cancel-text="$t('login.logout_confirm_cancel_button')"
+ @accepted="doLogout"
+ @cancelled="hideConfirmLogout"
+ >
+ {{ $t('login.logout_confirm') }}
+ </confirm-modal>
+ </teleport>
</nav>
</template>
<script src="./desktop_nav.js"></script>