diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-12-16 17:37:50 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-12-16 17:37:50 +0900 |
| commit | 776eea736a2607c62145c01b48a8271dd355f006 (patch) | |
| tree | b27cffea87c1a06c62bf5904fb5ea044044625cd /packages | |
| parent | feature: チャンネル投稿はフォームに色がつくとうれしい (... (diff) | |
| download | sharkey-776eea736a2607c62145c01b48a8271dd355f006.tar.gz sharkey-776eea736a2607c62145c01b48a8271dd355f006.tar.bz2 sharkey-776eea736a2607c62145c01b48a8271dd355f006.zip | |
enhance(frontend): tweak avatar decoration setting ui
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/frontend/src/pages/settings/avatar-decoration.decoration.vue (renamed from packages/frontend/src/pages/settings/profile.avatar-decoration.decoration.vue) | 0 | ||||
| -rw-r--r-- | packages/frontend/src/pages/settings/avatar-decoration.dialog.vue (renamed from packages/frontend/src/pages/settings/profile.avatar-decoration.dialog.vue) | 0 | ||||
| -rw-r--r-- | packages/frontend/src/pages/settings/avatar-decoration.vue (renamed from packages/frontend/src/pages/settings/profile.avatar-decoration.vue) | 77 | ||||
| -rw-r--r-- | packages/frontend/src/pages/settings/profile.vue | 28 | ||||
| -rw-r--r-- | packages/frontend/src/router.ts | 4 |
5 files changed, 66 insertions, 43 deletions
diff --git a/packages/frontend/src/pages/settings/profile.avatar-decoration.decoration.vue b/packages/frontend/src/pages/settings/avatar-decoration.decoration.vue index 9c95b5547e..9c95b5547e 100644 --- a/packages/frontend/src/pages/settings/profile.avatar-decoration.decoration.vue +++ b/packages/frontend/src/pages/settings/avatar-decoration.decoration.vue diff --git a/packages/frontend/src/pages/settings/profile.avatar-decoration.dialog.vue b/packages/frontend/src/pages/settings/avatar-decoration.dialog.vue index 77e6b28fad..77e6b28fad 100644 --- a/packages/frontend/src/pages/settings/profile.avatar-decoration.dialog.vue +++ b/packages/frontend/src/pages/settings/avatar-decoration.dialog.vue diff --git a/packages/frontend/src/pages/settings/profile.avatar-decoration.vue b/packages/frontend/src/pages/settings/avatar-decoration.vue index 8579acfed8..6551fc917e 100644 --- a/packages/frontend/src/pages/settings/profile.avatar-decoration.vue +++ b/packages/frontend/src/pages/settings/avatar-decoration.vue @@ -4,51 +4,56 @@ SPDX-License-Identifier: AGPL-3.0-only --> <template> -<div v-if="!loading" class="_gaps"> - <MkInfo>{{ i18n.t('_profile.avatarDecorationMax', { max: $i.policies.avatarDecorationLimit }) }} ({{ i18n.t('remainingN', { n: $i.policies.avatarDecorationLimit - $i.avatarDecorations.length }) }})</MkInfo> +<div> + <div v-if="!loading" class="_gaps"> + <MkInfo>{{ i18n.t('_profile.avatarDecorationMax', { max: $i.policies.avatarDecorationLimit }) }} ({{ i18n.t('remainingN', { n: $i.policies.avatarDecorationLimit - $i.avatarDecorations.length }) }})</MkInfo> - <div v-if="$i.avatarDecorations.length > 0" v-panel :class="$style.current" class="_gaps_s"> - <div>{{ i18n.ts.inUse }}</div> + <MkAvatar :class="$style.avatar" :user="$i" forceShowDecoration/> + + <div v-if="$i.avatarDecorations.length > 0" v-panel :class="$style.current" class="_gaps_s"> + <div>{{ i18n.ts.inUse }}</div> + + <div :class="$style.decorations"> + <XDecoration + v-for="(avatarDecoration, i) in $i.avatarDecorations" + :decoration="avatarDecorations.find(d => d.id === avatarDecoration.id)" + :angle="avatarDecoration.angle" + :flipH="avatarDecoration.flipH" + :offsetX="avatarDecoration.offsetX" + :offsetY="avatarDecoration.offsetY" + :active="true" + @click="openDecoration(avatarDecoration, i)" + /> + </div> + + <MkButton danger @click="detachAllDecorations">{{ i18n.ts.detachAll }}</MkButton> + </div> <div :class="$style.decorations"> <XDecoration - v-for="(avatarDecoration, i) in $i.avatarDecorations" - :decoration="avatarDecorations.find(d => d.id === avatarDecoration.id)" - :angle="avatarDecoration.angle" - :flipH="avatarDecoration.flipH" - :offsetX="avatarDecoration.offsetX" - :offsetY="avatarDecoration.offsetY" - :active="true" - @click="openDecoration(avatarDecoration, i)" + v-for="avatarDecoration in avatarDecorations" + :key="avatarDecoration.id" + :decoration="avatarDecoration" + @click="openDecoration(avatarDecoration)" /> </div> - - <MkButton danger @click="detachAllDecorations">{{ i18n.ts.detachAll }}</MkButton> </div> - - <div :class="$style.decorations"> - <XDecoration - v-for="avatarDecoration in avatarDecorations" - :key="avatarDecoration.id" - :decoration="avatarDecoration" - @click="openDecoration(avatarDecoration)" - /> + <div v-else> + <MkLoading/> </div> </div> -<div v-else> - <MkLoading/> -</div> </template> <script lang="ts" setup> -import { ref, defineAsyncComponent } from 'vue'; +import { ref, defineAsyncComponent, computed } from 'vue'; import * as Misskey from 'misskey-js'; -import XDecoration from './profile.avatar-decoration.decoration.vue'; +import XDecoration from './avatar-decoration.decoration.vue'; import MkButton from '@/components/MkButton.vue'; import * as os from '@/os.js'; import { i18n } from '@/i18n.js'; import { $i } from '@/account.js'; import MkInfo from '@/components/MkInfo.vue'; +import { definePageMetadata } from '@/scripts/page-metadata.js'; const loading = ref(true); const avatarDecorations = ref<Misskey.entities.GetAvatarDecorationsResponse>([]); @@ -59,7 +64,7 @@ os.api('get-avatar-decorations').then(_avatarDecorations => { }); function openDecoration(avatarDecoration, index?: number) { - os.popup(defineAsyncComponent(() => import('./profile.avatar-decoration.dialog.vue')), { + os.popup(defineAsyncComponent(() => import('./avatar-decoration.dialog.vue')), { decoration: avatarDecoration, usingIndex: index, }, { @@ -115,9 +120,25 @@ function detachAllDecorations() { $i.avatarDecorations = []; }); } + +const headerActions = computed(() => []); + +const headerTabs = computed(() => []); + +definePageMetadata({ + title: i18n.ts.avatarDecorations, + icon: 'ti ti-sparkles', +}); </script> <style lang="scss" module> +.avatar { + display: inline-block; + width: 72px; + height: 72px; + margin: 16px auto; +} + .current { padding: 16px; border-radius: var(--radius); diff --git a/packages/frontend/src/pages/settings/profile.vue b/packages/frontend/src/pages/settings/profile.vue index 83cd698e66..2ee19b9671 100644 --- a/packages/frontend/src/pages/settings/profile.vue +++ b/packages/frontend/src/pages/settings/profile.vue @@ -5,12 +5,17 @@ SPDX-License-Identifier: AGPL-3.0-only <template> <div class="_gaps_m"> - <div :class="$style.avatarAndBanner" :style="{ backgroundImage: $i.bannerUrl ? `url(${ $i.bannerUrl })` : null }"> + <div class="_panel"> + <div :class="$style.banner" :style="{ backgroundImage: $i.bannerUrl ? `url(${ $i.bannerUrl })` : null }"> + <MkButton primary rounded :class="$style.bannerEdit" @click="changeBanner">{{ i18n.ts._profile.changeBanner }}</MkButton> + </div> <div :class="$style.avatarContainer"> <MkAvatar :class="$style.avatar" :user="$i" forceShowDecoration @click="changeAvatar"/> - <MkButton primary rounded @click="changeAvatar">{{ i18n.ts._profile.changeAvatar }}</MkButton> + <div class="_buttonsCenter"> + <MkButton primary rounded @click="changeAvatar">{{ i18n.ts._profile.changeAvatar }}</MkButton> + <MkButton primary rounded link to="/settings/avatar-decoration">{{ i18n.ts.decorate }} <i class="ti ti-sparkles"></i></MkButton> + </div> </div> - <MkButton primary rounded :class="$style.bannerEdit" @click="changeBanner">{{ i18n.ts._profile.changeBanner }}</MkButton> </div> <MkInput v-model="profile.name" :max="30" manualSave :mfmAutocomplete="['emoji']"> @@ -84,13 +89,6 @@ SPDX-License-Identifier: AGPL-3.0-only </FormSlot> <MkFolder> - <template #icon><i class="ti ti-sparkles"></i></template> - <template #label>{{ i18n.ts.avatarDecorations }}</template> - - <XAvatarDecoration/> - </MkFolder> - - <MkFolder> <template #label>{{ i18n.ts.advancedSettings }}</template> <div class="_gaps_m"> @@ -264,19 +262,19 @@ definePageMetadata({ </script> <style lang="scss" module> -.avatarAndBanner { +.banner { position: relative; + height: 130px; background-size: cover; background-position: center; - border: solid 1px var(--divider); - border-radius: 10px; + border-bottom: solid 1px var(--divider); overflow: clip; } .avatarContainer { - display: inline-block; + margin-top: -50px; + padding-bottom: 16px; text-align: center; - padding: 16px; } .avatar { diff --git a/packages/frontend/src/router.ts b/packages/frontend/src/router.ts index a7a53e97e6..baee85866c 100644 --- a/packages/frontend/src/router.ts +++ b/packages/frontend/src/router.ts @@ -55,6 +55,10 @@ export const routes = [{ name: 'profile', component: page(() => import('./pages/settings/profile.vue')), }, { + path: '/avatar-decoration', + name: 'avatarDecoration', + component: page(() => import('./pages/settings/avatar-decoration.vue')), + }, { path: '/roles', name: 'roles', component: page(() => import('./pages/settings/roles.vue')), |