diff options
| author | GrapeApple0 <84321396+GrapeApple0@users.noreply.github.com> | 2023-10-30 15:33:15 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-30 15:33:15 +0900 |
| commit | 4f180ad45cc8c09a198a3de536681766dd2e5be8 (patch) | |
| tree | 1d90363fd15e09e874f91fe3427dffb4cee1e01f /packages/frontend | |
| parent | tweak MkPullToRefresh (diff) | |
| download | misskey-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.ts | 1 | ||||
| -rw-r--r-- | packages/frontend/src/pages/admin/index.vue | 2 | ||||
| -rw-r--r-- | packages/frontend/src/pages/admin/roles.editor.vue | 20 | ||||
| -rw-r--r-- | packages/frontend/src/pages/admin/roles.vue | 8 | ||||
| -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.ts | 6 | ||||
| -rw-r--r-- | packages/frontend/src/ui/_common_/common.ts | 5 |
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, |