summaryrefslogtreecommitdiff
path: root/packages/frontend
diff options
context:
space:
mode:
authorGrapeApple0 <84321396+GrapeApple0@users.noreply.github.com>2023-10-30 15:33:15 +0900
committerGitHub <noreply@github.com>2023-10-30 15:33:15 +0900
commit4f180ad45cc8c09a198a3de536681766dd2e5be8 (patch)
tree1d90363fd15e09e874f91fe3427dffb4cee1e01f /packages/frontend
parenttweak MkPullToRefresh (diff)
downloadmisskey-4f180ad45cc8c09a198a3de536681766dd2e5be8.tar.gz
misskey-4f180ad45cc8c09a198a3de536681766dd2e5be8.tar.bz2
misskey-4f180ad45cc8c09a198a3de536681766dd2e5be8.zip
feat: アイコンデコレーションの管理をロールで設定できるように (#12173)
* アイコンデコレーションの管理をロールで設定できるように * インポートミス * Update packages/frontend/src/ui/_common_/common.ts Co-authored-by: syuilo <Syuilotan@yahoo.co.jp> * Update packages/frontend/src/ui/_common_/common.ts Co-authored-by: syuilo <Syuilotan@yahoo.co.jp> --------- Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Diffstat (limited to 'packages/frontend')
-rw-r--r--packages/frontend/src/const.ts1
-rw-r--r--packages/frontend/src/pages/admin/index.vue2
-rw-r--r--packages/frontend/src/pages/admin/roles.editor.vue20
-rw-r--r--packages/frontend/src/pages/admin/roles.vue8
-rw-r--r--packages/frontend/src/pages/avatar-decorations.vue (renamed from packages/frontend/src/pages/admin/avatar-decorations.vue)3
-rw-r--r--packages/frontend/src/router.ts6
-rw-r--r--packages/frontend/src/ui/_common_/common.ts5
7 files changed, 41 insertions, 4 deletions
diff --git a/packages/frontend/src/const.ts b/packages/frontend/src/const.ts
index 3998df9efe..b3071fd924 100644
--- a/packages/frontend/src/const.ts
+++ b/packages/frontend/src/const.ts
@@ -66,6 +66,7 @@ export const ROLE_POLICIES = [
'inviteLimitCycle',
'inviteExpirationTime',
'canManageCustomEmojis',
+ 'canManageAvatarDecorations',
'canSearchNotes',
'canUseTranslator',
'canHideAds',
diff --git a/packages/frontend/src/pages/admin/index.vue b/packages/frontend/src/pages/admin/index.vue
index b304edbf57..2bb1e80c18 100644
--- a/packages/frontend/src/pages/admin/index.vue
+++ b/packages/frontend/src/pages/admin/index.vue
@@ -118,7 +118,7 @@ const menuDef = $computed(() => [{
}, {
icon: 'ti ti-sparkles',
text: i18n.ts.avatarDecorations,
- to: '/admin/avatar-decorations',
+ to: '/avatar-decorations',
active: currentPage?.route.name === 'avatarDecorations',
}, {
icon: 'ti ti-whirl',
diff --git a/packages/frontend/src/pages/admin/roles.editor.vue b/packages/frontend/src/pages/admin/roles.editor.vue
index 89dd7d4c7c..1db99e61f4 100644
--- a/packages/frontend/src/pages/admin/roles.editor.vue
+++ b/packages/frontend/src/pages/admin/roles.editor.vue
@@ -259,6 +259,26 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
</MkFolder>
+ <MkFolder v-if="matchQuery([i18n.ts._role._options.canManageAvatarDecorations, 'canManageAvatarDecorations'])">
+ <template #label>{{ i18n.ts._role._options.canManageAvatarDecorations }}</template>
+ <template #suffix>
+ <span v-if="role.policies.canManageAvatarDecorations.useDefault" :class="$style.useDefaultLabel">{{ i18n.ts._role.useBaseValue }}</span>
+ <span v-else>{{ role.policies.canManageAvatarDecorations.value ? i18n.ts.yes : i18n.ts.no }}</span>
+ <span :class="$style.priorityIndicator"><i :class="getPriorityIcon(role.policies.canManageAvatarDecorations)"></i></span>
+ </template>
+ <div class="_gaps">
+ <MkSwitch v-model="role.policies.canManageAvatarDecorations.useDefault" :readonly="readonly">
+ <template #label>{{ i18n.ts._role.useBaseValue }}</template>
+ </MkSwitch>
+ <MkSwitch v-model="role.policies.canManageAvatarDecorations.value" :disabled="role.policies.canManageAvatarDecorations.useDefault" :readonly="readonly">
+ <template #label>{{ i18n.ts.enable }}</template>
+ </MkSwitch>
+ <MkRange v-model="role.policies.canManageAvatarDecorations.priority" :min="0" :max="2" :step="1" easing :textConverter="(v) => v === 0 ? i18n.ts._role._priority.low : v === 1 ? i18n.ts._role._priority.middle : v === 2 ? i18n.ts._role._priority.high : ''">
+ <template #label>{{ i18n.ts._role.priority }}</template>
+ </MkRange>
+ </div>
+ </MkFolder>
+
<MkFolder v-if="matchQuery([i18n.ts._role._options.canSearchNotes, 'canSearchNotes'])">
<template #label>{{ i18n.ts._role._options.canSearchNotes }}</template>
<template #suffix>
diff --git a/packages/frontend/src/pages/admin/roles.vue b/packages/frontend/src/pages/admin/roles.vue
index 74de9f7396..d3f3773564 100644
--- a/packages/frontend/src/pages/admin/roles.vue
+++ b/packages/frontend/src/pages/admin/roles.vue
@@ -79,6 +79,14 @@ SPDX-License-Identifier: AGPL-3.0-only
</MkInput>
</MkFolder>
+ <MkFolder v-if="matchQuery([i18n.ts._role._options.canManageAvatarDecorations, 'canManageAvatarDecorations'])">
+ <template #label>{{ i18n.ts._role._options.canManageAvatarDecorations }}</template>
+ <template #suffix>{{ policies.canManageAvatarDecorations ? i18n.ts.yes : i18n.ts.no }}</template>
+ <MkSwitch v-model="policies.canManageAvatarDecorations">
+ <template #label>{{ i18n.ts.enable }}</template>
+ </MkSwitch>
+ </MkFolder>
+
<MkFolder v-if="matchQuery([i18n.ts._role._options.canManageCustomEmojis, 'canManageCustomEmojis'])">
<template #label>{{ i18n.ts._role._options.canManageCustomEmojis }}</template>
<template #suffix>{{ policies.canManageCustomEmojis ? i18n.ts.yes : i18n.ts.no }}</template>
diff --git a/packages/frontend/src/pages/admin/avatar-decorations.vue b/packages/frontend/src/pages/avatar-decorations.vue
index b4007e6d20..715f234493 100644
--- a/packages/frontend/src/pages/admin/avatar-decorations.vue
+++ b/packages/frontend/src/pages/avatar-decorations.vue
@@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<template>
<MkStickyContainer>
- <template #header><XHeader :actions="headerActions" :tabs="headerTabs"/></template>
+ <template #header><MkPageHeader v-model:tab="tab" :actions="headerActions" :tabs="headerTabs"/></template>
<MkSpacer :contentMax="900">
<div class="_gaps">
<MkFolder v-for="avatarDecoration in avatarDecorations" :key="avatarDecoration.id ?? avatarDecoration._id" :defaultOpen="avatarDecoration.id == null">
@@ -35,7 +35,6 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { } from 'vue';
-import XHeader from './_header_.vue';
import MkButton from '@/components/MkButton.vue';
import MkInput from '@/components/MkInput.vue';
import MkTextarea from '@/components/MkTextarea.vue';
diff --git a/packages/frontend/src/router.ts b/packages/frontend/src/router.ts
index e73532f6b2..ef0f5343bb 100644
--- a/packages/frontend/src/router.ts
+++ b/packages/frontend/src/router.ts
@@ -314,6 +314,10 @@ export const routes = [{
path: '/custom-emojis-manager',
component: page(() => import('./pages/custom-emojis-manager.vue')),
}, {
+ path: '/avatar-decorations',
+ name: 'avatarDecorations',
+ component: page(() => import('./pages/avatar-decorations.vue')),
+}, {
path: '/registry/keys/system/:path(*)?',
component: page(() => import('./pages/registry.keys.vue')),
}, {
@@ -350,7 +354,7 @@ export const routes = [{
}, {
path: '/avatar-decorations',
name: 'avatarDecorations',
- component: page(() => import('./pages/admin/avatar-decorations.vue')),
+ component: page(() => import('./pages/avatar-decorations.vue')),
}, {
path: '/queue',
name: 'queue',
diff --git a/packages/frontend/src/ui/_common_/common.ts b/packages/frontend/src/ui/_common_/common.ts
index e075e05db3..125d340fe7 100644
--- a/packages/frontend/src/ui/_common_/common.ts
+++ b/packages/frontend/src/ui/_common_/common.ts
@@ -67,6 +67,11 @@ export function openInstanceMenu(ev: MouseEvent) {
to: '/custom-emojis-manager',
text: i18n.ts.manageCustomEmojis,
icon: 'ti ti-icons',
+ } : undefined, ($i && ($i.isAdmin || $i.policies.canManageAvatarDecorations)) ? {
+ type: 'link',
+ to: '/avatar-decorations',
+ text: i18n.ts.manageAvatarDecorations,
+ icon: 'ti ti-sparkles',
} : undefined],
}, null, (instance.impressumUrl) ? {
text: i18n.ts.impressum,