mirror of
https://github.com/IT4Change/Ocelot-Social.git
synced 2026-04-03 16:15:36 +00:00
185 lines
4.4 KiB
Vue
185 lines
4.4 KiB
Vue
<template>
|
|
<div class="settings-page">
|
|
<div class="settings-header">
|
|
<h1 class="ds-heading ds-heading-h1">{{ $t('settings.name') }}</h1>
|
|
</div>
|
|
<div class="settings-layout">
|
|
<div class="settings-menu-desktop">
|
|
<os-menu :routes="routes" :is-exact="() => true" link-tag="router-link" />
|
|
</div>
|
|
<div class="settings-menu-mobile">
|
|
<select
|
|
class="settings-select"
|
|
:value="$route.path"
|
|
:aria-label="$t('settings.name')"
|
|
@change="$router.push($event.target.value)"
|
|
>
|
|
<option v-for="route in routes" :key="route.path" :value="route.path">
|
|
{{ route.name }}
|
|
</option>
|
|
</select>
|
|
</div>
|
|
<div class="settings-content" id="settings-content">
|
|
<transition name="slide-up" appear>
|
|
<nuxt-child />
|
|
</transition>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { OsMenu } from '@ocelot-social/ui'
|
|
|
|
export default {
|
|
components: {
|
|
OsMenu,
|
|
},
|
|
computed: {
|
|
routes() {
|
|
const routes = [
|
|
{
|
|
name: this.$t('settings.data.name'),
|
|
path: `/settings`,
|
|
},
|
|
{
|
|
name: this.$t('settings.email.name'),
|
|
path: `/settings/my-email-address`,
|
|
},
|
|
{
|
|
name: this.$t('settings.security.name'),
|
|
path: `/settings/security`,
|
|
},
|
|
{
|
|
name: this.$t('settings.privacy.name'),
|
|
path: '/settings/privacy',
|
|
},
|
|
{
|
|
name: this.$t('settings.social-media.name'),
|
|
path: `/settings/my-social-media`,
|
|
},
|
|
...(this.$env.INVITE_REGISTRATION === true
|
|
? [{ name: this.$t('settings.invites.name'), path: `/settings/invites` }]
|
|
: []),
|
|
{
|
|
name: this.$t('settings.muted-users.name'),
|
|
path: `/settings/muted-users`,
|
|
},
|
|
{
|
|
name: this.$t('settings.blocked-users.name'),
|
|
path: `/settings/blocked-users`,
|
|
},
|
|
{
|
|
name: this.$t('settings.embeds.name'),
|
|
path: `/settings/embeds`,
|
|
},
|
|
{
|
|
name: this.$t('settings.notifications.name'),
|
|
path: '/settings/notifications',
|
|
},
|
|
{
|
|
name: this.$t('settings.download.name'),
|
|
path: `/settings/data-download`,
|
|
},
|
|
{
|
|
name: this.$t('settings.deleteUserAccount.name'),
|
|
path: `/settings/delete-account`,
|
|
},
|
|
// TODO implement
|
|
/* {
|
|
name: this.$t('settings.organizations.name'),
|
|
path: `/settings/my-organizations`
|
|
}, */
|
|
// TODO implement
|
|
/* {
|
|
name: this.$t('settings.languages.name'),
|
|
path: `/settings/languages`
|
|
},
|
|
} */
|
|
]
|
|
|
|
if (this.$env.BADGES_ENABLED) {
|
|
routes.splice(2, 0, {
|
|
name: this.$t('settings.badges.name'),
|
|
path: `/settings/badges`,
|
|
})
|
|
}
|
|
|
|
return routes
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.settings-header {
|
|
margin-top: $space-base;
|
|
margin-bottom: $space-x-small;
|
|
}
|
|
|
|
.settings-layout {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: $space-xx-small;
|
|
}
|
|
|
|
.settings-menu-desktop {
|
|
display: none;
|
|
width: 200px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.settings-menu-mobile {
|
|
display: block;
|
|
margin-bottom: $space-small;
|
|
}
|
|
|
|
.settings-select {
|
|
width: 100%;
|
|
padding: $space-x-small $space-large $space-x-small $space-small;
|
|
font-size: $font-size-base;
|
|
border: 1px solid $color-neutral-80;
|
|
border-radius: $border-radius-base;
|
|
background-color: white;
|
|
color: $text-color-base;
|
|
appearance: none;
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%234b4554' d='M1.41 0L6 4.58 10.59 0 12 1.41l-6 6-6-6z'/%3E%3C/svg%3E");
|
|
background-repeat: no-repeat;
|
|
background-position: right $space-small center;
|
|
cursor: pointer;
|
|
|
|
&:focus {
|
|
outline: 1px dashed $color-primary;
|
|
outline-offset: -1px;
|
|
}
|
|
}
|
|
|
|
.settings-content {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
@media screen and (min-width: 600px) {
|
|
.settings-header {
|
|
margin-bottom: $space-small;
|
|
}
|
|
|
|
.settings-layout {
|
|
flex-direction: row;
|
|
gap: $space-small;
|
|
}
|
|
|
|
.settings-menu-desktop {
|
|
display: block;
|
|
}
|
|
|
|
.settings-menu-mobile {
|
|
display: none;
|
|
}
|
|
|
|
.settings-content {
|
|
padding: 0 $space-base;
|
|
}
|
|
}
|
|
</style>
|