summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-12-16 17:37:50 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-12-16 17:37:50 +0900
commit776eea736a2607c62145c01b48a8271dd355f006 (patch)
treeb27cffea87c1a06c62bf5904fb5ea044044625cd /packages
parentfeature: チャンネル投稿はフォームに色がつくとうれしい (... (diff)
downloadsharkey-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.vue28
-rw-r--r--packages/frontend/src/router.ts4
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')),