Merge branch 'develop' into enh-14389
This commit is contained in:
		
						commit
						11cc4a84e5
					
				|  | @ -40,8 +40,6 @@ jobs: | |||
|     needs: [pnpm_install] | ||||
|     runs-on: ubuntu-latest | ||||
|     continue-on-error: true | ||||
|     env: | ||||
|       eslint-cache-version: v1 | ||||
|     strategy: | ||||
|       matrix: | ||||
|         workspace: | ||||
|  | @ -49,6 +47,9 @@ jobs: | |||
|         - frontend | ||||
|         - sw | ||||
|         - misskey-js | ||||
|     env: | ||||
|       eslint-cache-version: v1 | ||||
|       eslint-cache-path: ${{ github.workspace }}/node_modules/.cache/eslint-${{ matrix.workspace }} | ||||
|     steps: | ||||
|     - uses: actions/checkout@v4.1.1 | ||||
|       with: | ||||
|  | @ -64,11 +65,10 @@ jobs: | |||
|     - name: Restore eslint cache | ||||
|       uses: actions/cache@v4.0.2 | ||||
|       with: | ||||
|         path: node_modules/.cache/eslint | ||||
|         key: eslint-${{ env.eslint-cache-version }}-${{ hashFiles('/pnpm-lock.yaml') }}-${{ github.ref_name }}-${{ github.sha }} | ||||
|         restore-keys: | | ||||
|           eslint-${{ env.eslint-cache-version }}-${{ hashFiles('/pnpm-lock.yaml') }}- | ||||
|     - run: pnpm --filter ${{ matrix.workspace }} run eslint --cache --cache-location node_modules/.cache/eslint --cache-strategy content | ||||
|         path: ${{ env.eslint-cache-path }} | ||||
|         key: eslint-${{ env.eslint-cache-version }}-${{ matrix.workspace }}-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ github.ref_name }}-${{ github.sha }} | ||||
|         restore-keys: eslint-${{ env.eslint-cache-version }}-${{ matrix.workspace }}-${{ hashFiles('**/pnpm-lock.yaml') }}- | ||||
|     - run: pnpm --filter ${{ matrix.workspace }} run eslint --cache --cache-location ${{ env.eslint-cache-path }} --cache-strategy content | ||||
| 
 | ||||
|   typecheck: | ||||
|     needs: [pnpm_install] | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ | |||
| 
 | ||||
| ### Client | ||||
| - サイズ制限を超過するファイルをアップロードしようとした際にエラーを出すように | ||||
| - Enhance: アイコンデコレーション管理画面にプレビューを追加 | ||||
| - Enhance: コントロールパネル内のファイル一覧でセンシティブなファイルを区別しやすく | ||||
| - Fix: サーバーメトリクスが2つ以上あるとリロード直後の表示がおかしくなる問題を修正 | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,19 +12,31 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| 				<template #label>{{ avatarDecoration.name }}</template> | ||||
| 				<template #caption>{{ avatarDecoration.description }}</template> | ||||
| 
 | ||||
| 				<div class="_gaps_m"> | ||||
| 					<MkInput v-model="avatarDecoration.name"> | ||||
| 						<template #label>{{ i18n.ts.name }}</template> | ||||
| 					</MkInput> | ||||
| 					<MkTextarea v-model="avatarDecoration.description"> | ||||
| 						<template #label>{{ i18n.ts.description }}</template> | ||||
| 					</MkTextarea> | ||||
| 					<MkInput v-model="avatarDecoration.url"> | ||||
| 						<template #label>{{ i18n.ts.imageUrl }}</template> | ||||
| 					</MkInput> | ||||
| 					<div class="buttons _buttons"> | ||||
| 						<MkButton class="button" inline primary @click="save(avatarDecoration)"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||
| 						<MkButton v-if="avatarDecoration.id != null" class="button" inline danger @click="del(avatarDecoration)"><i class="ti ti-trash"></i> {{ i18n.ts.delete }}</MkButton> | ||||
| 				<div :class="$style.editorRoot"> | ||||
| 					<div :class="$style.editorWrapper"> | ||||
| 						<div :class="$style.preview"> | ||||
| 							<div :class="[$style.previewItem, $style.light]"> | ||||
| 								<MkAvatar style="width: 60px; height: 60px;" :user="$i" :decorations="[avatarDecoration]" forceShowDecoration/> | ||||
| 							</div> | ||||
| 							<div :class="[$style.previewItem, $style.dark]"> | ||||
| 								<MkAvatar style="width: 60px; height: 60px;" :user="$i" :decorations="[avatarDecoration]" forceShowDecoration/> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 						<div class="_gaps_m"> | ||||
| 							<MkInput v-model="avatarDecoration.name"> | ||||
| 								<template #label>{{ i18n.ts.name }}</template> | ||||
| 							</MkInput> | ||||
| 							<MkTextarea v-model="avatarDecoration.description"> | ||||
| 								<template #label>{{ i18n.ts.description }}</template> | ||||
| 							</MkTextarea> | ||||
| 							<MkInput v-model="avatarDecoration.url"> | ||||
| 								<template #label>{{ i18n.ts.imageUrl }}</template> | ||||
| 							</MkInput> | ||||
| 							<div class="_buttons"> | ||||
| 								<MkButton inline primary @click="save(avatarDecoration)"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||
| 								<MkButton v-if="avatarDecoration.id != null" inline danger @click="del(avatarDecoration)"><i class="ti ti-trash"></i> {{ i18n.ts.delete }}</MkButton> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 			</MkFolder> | ||||
|  | @ -39,6 +51,7 @@ import * as Misskey from 'misskey-js'; | |||
| import MkButton from '@/components/MkButton.vue'; | ||||
| import MkInput from '@/components/MkInput.vue'; | ||||
| import MkTextarea from '@/components/MkTextarea.vue'; | ||||
| import { signinRequired } from '@/account.js'; | ||||
| import * as os from '@/os.js'; | ||||
| import { misskeyApi } from '@/scripts/misskey-api.js'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
|  | @ -47,6 +60,8 @@ import MkFolder from '@/components/MkFolder.vue'; | |||
| 
 | ||||
| const avatarDecorations = ref<Misskey.entities.AdminAvatarDecorationsListResponse>([]); | ||||
| 
 | ||||
| const $i = signinRequired(); | ||||
| 
 | ||||
| function add() { | ||||
| 	avatarDecorations.value.unshift({ | ||||
| 		_id: Math.random().toString(36), | ||||
|  | @ -99,3 +114,55 @@ definePageMetadata(() => ({ | |||
| 	icon: 'ti ti-sparkles', | ||||
| })); | ||||
| </script> | ||||
| 
 | ||||
| <style lang="scss" module> | ||||
| .editorRoot { | ||||
| 	container: editor / inline-size; | ||||
| } | ||||
| 
 | ||||
| .editorWrapper { | ||||
| 	display: grid; | ||||
| 	grid-template-columns: 1fr; | ||||
| 	grid-template-rows: auto auto; | ||||
| 	gap: var(--margin); | ||||
| } | ||||
| 
 | ||||
| .preview { | ||||
| 	display: grid; | ||||
| 	place-items: center; | ||||
| 	grid-template-columns: 1fr 1fr; | ||||
| 	grid-template-rows: 1fr; | ||||
| 	gap: var(--margin); | ||||
| } | ||||
| 
 | ||||
| .previewItem { | ||||
| 	width: 100%; | ||||
| 	height: 100%; | ||||
| 	min-height: 160px; | ||||
| 	display: flex; | ||||
| 	align-items: center; | ||||
| 	justify-content: center; | ||||
| 	border-radius: var(--radius); | ||||
| 
 | ||||
| 	&.light { | ||||
| 		background: #eee; | ||||
| 	} | ||||
| 
 | ||||
| 	&.dark { | ||||
| 		background: #222; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| @container editor (min-width: 600px) { | ||||
| 	.editorWrapper { | ||||
| 		grid-template-columns: 200px 1fr; | ||||
| 		grid-template-rows: 1fr; | ||||
| 		gap: calc(var(--margin) * 2); | ||||
| 	} | ||||
| 
 | ||||
| 	.preview { | ||||
| 		grid-template-columns: 1fr; | ||||
| 		grid-template-rows: 1fr 1fr; | ||||
| 	} | ||||
| } | ||||
| </style> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue