mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 07:24:13 +00:00 
			
		
		
		
	merge: Customize Sidebar/Visitor/About separately from app icon. (!632)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/632 Approved-by: dakkar <dakkar@thenautilus.net> Approved-by: Marie <github@yuugi.dev>
This commit is contained in:
		
						commit
						0bd6d48c7e
					
				
					 15 changed files with 98 additions and 8 deletions
				
			
		| 
						 | 
					@ -1455,6 +1455,9 @@ _serverSettings:
 | 
				
			||||||
  appIconUsageExample: "E.g. As PWA, or when displayed as a home screen bookmark on a phone"
 | 
					  appIconUsageExample: "E.g. As PWA, or when displayed as a home screen bookmark on a phone"
 | 
				
			||||||
  appIconStyleRecommendation: "As the icon may be cropped to a square or circle, an icon with colored margin around the content is recommended."
 | 
					  appIconStyleRecommendation: "As the icon may be cropped to a square or circle, an icon with colored margin around the content is recommended."
 | 
				
			||||||
  appIconResolutionMustBe: "The minimum resolution is {resolution}."
 | 
					  appIconResolutionMustBe: "The minimum resolution is {resolution}."
 | 
				
			||||||
 | 
					  sidebarLogoUrl: "Logo URL"
 | 
				
			||||||
 | 
					  sidebarLogoDescription: "Specifies the logo to use instead of the regular icon in high definition, dynamic-width scenarios."
 | 
				
			||||||
 | 
					  sidebarLogoUsageExample: "E.g. In the sidebar, to visitors and in the \"About\" page."
 | 
				
			||||||
  manifestJsonOverride: "manifest.json Override"
 | 
					  manifestJsonOverride: "manifest.json Override"
 | 
				
			||||||
  shortName: "Short name"
 | 
					  shortName: "Short name"
 | 
				
			||||||
  shortNameDescription: "A shorthand for the instance's name that can be displayed if the full official name is long."
 | 
					  shortNameDescription: "A shorthand for the instance's name that can be displayed if the full official name is long."
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										12
									
								
								locales/index.d.ts
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								locales/index.d.ts
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -5792,6 +5792,18 @@ export interface Locale extends ILocale {
 | 
				
			||||||
         * 解像度は必ず{resolution}である必要があります。
 | 
					         * 解像度は必ず{resolution}である必要があります。
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
        "appIconResolutionMustBe": ParameterizedString<"resolution">;
 | 
					        "appIconResolutionMustBe": ParameterizedString<"resolution">;
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * ロゴURL
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        "sidebarLogoUrl": string;
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * 高精細、ダイナミック幅のシナリオで通常のアイコンの代わりに使用するロゴを指定します。
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        "sidebarLogoDescription": string;
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * 例:サイドバー、訪問者用、「情報」ページ
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        "sidebarLogoUsageExample": string;
 | 
				
			||||||
        /**
 | 
					        /**
 | 
				
			||||||
         * manifest.jsonのオーバーライド
 | 
					         * manifest.jsonのオーバーライド
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1463,6 +1463,9 @@ _serverSettings:
 | 
				
			||||||
  appIconUsageExample: "例: PWAや、スマートフォンのホーム画面にブックマークとして追加された時など"
 | 
					  appIconUsageExample: "例: PWAや、スマートフォンのホーム画面にブックマークとして追加された時など"
 | 
				
			||||||
  appIconStyleRecommendation: "円形もしくは角丸にクロップされる場合があるため、塗り潰された余白のある背景を持つことが推奨されます。"
 | 
					  appIconStyleRecommendation: "円形もしくは角丸にクロップされる場合があるため、塗り潰された余白のある背景を持つことが推奨されます。"
 | 
				
			||||||
  appIconResolutionMustBe: "解像度は必ず{resolution}である必要があります。"
 | 
					  appIconResolutionMustBe: "解像度は必ず{resolution}である必要があります。"
 | 
				
			||||||
 | 
					  sidebarLogoUrl: "ロゴURL"
 | 
				
			||||||
 | 
					  sidebarLogoDescription: "高精細、ダイナミック幅のシナリオで通常のアイコンの代わりに使用するロゴを指定します。"
 | 
				
			||||||
 | 
					  sidebarLogoUsageExample:  "例:サイドバー、訪問者用、「情報」ページ"
 | 
				
			||||||
  manifestJsonOverride: "manifest.jsonのオーバーライド"
 | 
					  manifestJsonOverride: "manifest.jsonのオーバーライド"
 | 
				
			||||||
  shortName: "略称"
 | 
					  shortName: "略称"
 | 
				
			||||||
  shortNameDescription: "サーバーの正式名称が長い場合に、代わりに表示することのできる略称や通称。"
 | 
					  shortNameDescription: "サーバーの正式名称が長い場合に、代わりに表示することのできる略称や通称。"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										16
									
								
								packages/backend/migration/1727027985575-SidebarLogo.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								packages/backend/migration/1727027985575-SidebarLogo.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * SPDX-FileCopyrightText: piuvas and other Sharkey contributors
 | 
				
			||||||
 | 
					 * SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class SidebarLogo1727027985575 {
 | 
				
			||||||
 | 
					    name = 'SidebarLogo1727027985575';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async up(queryRunner) {
 | 
				
			||||||
 | 
					        await queryRunner.query(`ALTER TABLE "meta" ADD "sidebarLogoUrl" character varying(1024)`);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async down(queryRunner) {
 | 
				
			||||||
 | 
					        await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "sidebarLogoUrl"`);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -105,6 +105,7 @@ export class MetaEntityService {
 | 
				
			||||||
			serverErrorImageUrl: instance.serverErrorImageUrl,
 | 
								serverErrorImageUrl: instance.serverErrorImageUrl,
 | 
				
			||||||
			notFoundImageUrl: instance.notFoundImageUrl,
 | 
								notFoundImageUrl: instance.notFoundImageUrl,
 | 
				
			||||||
			iconUrl: instance.iconUrl,
 | 
								iconUrl: instance.iconUrl,
 | 
				
			||||||
 | 
								sidebarLogoUrl: instance.sidebarLogoUrl,
 | 
				
			||||||
			backgroundImageUrl: instance.backgroundImageUrl,
 | 
								backgroundImageUrl: instance.backgroundImageUrl,
 | 
				
			||||||
			logoImageUrl: instance.logoImageUrl,
 | 
								logoImageUrl: instance.logoImageUrl,
 | 
				
			||||||
			maxNoteTextLength: this.config.maxNoteLength,
 | 
								maxNoteTextLength: this.config.maxNoteLength,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -139,6 +139,12 @@ export class MiMeta {
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	public app512IconUrl: string | null;
 | 
						public app512IconUrl: string | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Column('varchar', {
 | 
				
			||||||
 | 
							length: 1024,
 | 
				
			||||||
 | 
							nullable: true,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						public sidebarLogoUrl: string | null;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	@Column('varchar', {
 | 
						@Column('varchar', {
 | 
				
			||||||
		length: 1024,
 | 
							length: 1024,
 | 
				
			||||||
		nullable: true,
 | 
							nullable: true,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -110,6 +110,10 @@ export const meta = {
 | 
				
			||||||
				type: 'string',
 | 
									type: 'string',
 | 
				
			||||||
				optional: false, nullable: true,
 | 
									optional: false, nullable: true,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
 | 
								sidebarLogoUrl: {
 | 
				
			||||||
 | 
									type: 'string',
 | 
				
			||||||
 | 
									optional: false, nullable: true,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
			enableEmail: {
 | 
								enableEmail: {
 | 
				
			||||||
				type: 'boolean',
 | 
									type: 'boolean',
 | 
				
			||||||
				optional: false, nullable: false,
 | 
									optional: false, nullable: false,
 | 
				
			||||||
| 
						 | 
					@ -582,6 +586,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 | 
				
			||||||
				iconUrl: instance.iconUrl,
 | 
									iconUrl: instance.iconUrl,
 | 
				
			||||||
				app192IconUrl: instance.app192IconUrl,
 | 
									app192IconUrl: instance.app192IconUrl,
 | 
				
			||||||
				app512IconUrl: instance.app512IconUrl,
 | 
									app512IconUrl: instance.app512IconUrl,
 | 
				
			||||||
 | 
									sidebarLogoUrl: instance.sidebarLogoUrl,
 | 
				
			||||||
				backgroundImageUrl: instance.backgroundImageUrl,
 | 
									backgroundImageUrl: instance.backgroundImageUrl,
 | 
				
			||||||
				logoImageUrl: instance.logoImageUrl,
 | 
									logoImageUrl: instance.logoImageUrl,
 | 
				
			||||||
				defaultLightTheme: instance.defaultLightTheme,
 | 
									defaultLightTheme: instance.defaultLightTheme,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,6 +55,7 @@ export const paramDef = {
 | 
				
			||||||
		iconUrl: { type: 'string', nullable: true },
 | 
							iconUrl: { type: 'string', nullable: true },
 | 
				
			||||||
		app192IconUrl: { type: 'string', nullable: true },
 | 
							app192IconUrl: { type: 'string', nullable: true },
 | 
				
			||||||
		app512IconUrl: { type: 'string', nullable: true },
 | 
							app512IconUrl: { type: 'string', nullable: true },
 | 
				
			||||||
 | 
							sidebarLogoUrl: { type: 'string', nullable: true },
 | 
				
			||||||
		backgroundImageUrl: { type: 'string', nullable: true },
 | 
							backgroundImageUrl: { type: 'string', nullable: true },
 | 
				
			||||||
		logoImageUrl: { type: 'string', nullable: true },
 | 
							logoImageUrl: { type: 'string', nullable: true },
 | 
				
			||||||
		name: { type: 'string', nullable: true },
 | 
							name: { type: 'string', nullable: true },
 | 
				
			||||||
| 
						 | 
					@ -250,6 +251,10 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 | 
				
			||||||
				set.app512IconUrl = ps.app512IconUrl;
 | 
									set.app512IconUrl = ps.app512IconUrl;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (ps.sidebarLogoUrl !== undefined) {
 | 
				
			||||||
 | 
									set.sidebarLogoUrl = ps.sidebarLogoUrl;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (ps.serverErrorImageUrl !== undefined) {
 | 
								if (ps.serverErrorImageUrl !== undefined) {
 | 
				
			||||||
				set.serverErrorImageUrl = ps.serverErrorImageUrl;
 | 
									set.serverErrorImageUrl = ps.serverErrorImageUrl;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
<div v-if="instance" :class="$style.root">
 | 
					<div v-if="instance" :class="$style.root">
 | 
				
			||||||
	<div :class="[$style.main, $style.panel]">
 | 
						<div :class="[$style.main, $style.panel]">
 | 
				
			||||||
		<img :src="instance.iconUrl || '/apple-touch-icon.png'" alt="" :class="$style.mainIcon"/>
 | 
							<img :src="instance.sidebarLogoUrl || instance.iconUrl || '/apple-touch-icon.png'" alt="" :class="instance.sidebarLogoUrl ? $style.wideIcon : $style.mainIcon"/>
 | 
				
			||||||
		<button class="_button _acrylic" :class="$style.mainMenu" @click="showMenu"><i class="ti ti-dots"></i></button>
 | 
							<button class="_button _acrylic" :class="$style.mainMenu" @click="showMenu"><i class="ti ti-dots"></i></button>
 | 
				
			||||||
		<div :class="$style.mainFg">
 | 
							<div :class="$style.mainFg">
 | 
				
			||||||
			<h1 :class="$style.mainTitle">
 | 
								<h1 :class="$style.mainTitle">
 | 
				
			||||||
| 
						 | 
					@ -126,6 +126,14 @@ function showMenu(ev: MouseEvent) {
 | 
				
			||||||
	filter: drop-shadow(0 2px 5px rgba(0, 0, 0, 0.5));
 | 
						filter: drop-shadow(0 2px 5px rgba(0, 0, 0, 0.5));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.wideIcon {
 | 
				
			||||||
 | 
						min-width: 85px;
 | 
				
			||||||
 | 
						max-width: 60%;
 | 
				
			||||||
 | 
						margin-top: -47px;
 | 
				
			||||||
 | 
						vertical-align: bottom;
 | 
				
			||||||
 | 
						filter: drop-shadow(0 2px 5px rgba(0, 0, 0, 0.5));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.mainMenu {
 | 
					.mainMenu {
 | 
				
			||||||
	position: absolute;
 | 
						position: absolute;
 | 
				
			||||||
	top: 16px;
 | 
						top: 16px;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			||||||
<div class="_gaps_m">
 | 
					<div class="_gaps_m">
 | 
				
			||||||
	<div :class="$style.banner" :style="{ backgroundImage: `url(${ instance.bannerUrl })` }">
 | 
						<div :class="$style.banner" :style="{ backgroundImage: `url(${ instance.bannerUrl })` }">
 | 
				
			||||||
		<div style="overflow: clip;">
 | 
							<div style="overflow: clip;">
 | 
				
			||||||
			<img :src="instance.iconUrl ?? instance.faviconUrl ?? '/favicon.ico'" alt="" :class="$style.bannerIcon"/>
 | 
								<img :src="instance.sidebarLogoUrl ?? instance.iconUrl ?? instance.faviconUrl ?? '/favicon.ico'" alt="" :class="$style.bannerIcon"/>
 | 
				
			||||||
			<div :class="$style.bannerName">
 | 
								<div :class="$style.bannerName">
 | 
				
			||||||
				<b>{{ instance.name ?? host }}</b>
 | 
									<b>{{ instance.name ?? host }}</b>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
| 
						 | 
					@ -160,7 +160,7 @@ const initStats = () => misskeyApi('stats', {});
 | 
				
			||||||
.bannerIcon {
 | 
					.bannerIcon {
 | 
				
			||||||
	display: block;
 | 
						display: block;
 | 
				
			||||||
	margin: 16px auto 0 auto;
 | 
						margin: 16px auto 0 auto;
 | 
				
			||||||
	height: 64px;
 | 
						max-height: 96px;
 | 
				
			||||||
	border-radius: var(--radius-sm);;
 | 
						border-radius: var(--radius-sm);;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,6 +37,15 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			||||||
						</template>
 | 
											</template>
 | 
				
			||||||
					</MkInput>
 | 
										</MkInput>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										<MkInput v-model="sidebarLogoUrl" type="url">
 | 
				
			||||||
 | 
											<template #prefix><i class="ti ti-link"></i></template>
 | 
				
			||||||
 | 
											<template #label>{{ i18n.ts._serverSettings.sidebarLogoUrl }}</template>
 | 
				
			||||||
 | 
											<template #caption>
 | 
				
			||||||
 | 
												<div>{{ i18n.ts._serverSettings.sidebarLogoDescription }}</div>
 | 
				
			||||||
 | 
												<div>({{ i18n.ts._serverSettings.sidebarLogoUsageExample }})</div>
 | 
				
			||||||
 | 
											</template>
 | 
				
			||||||
 | 
										</MkInput>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					<MkInput v-model="bannerUrl" type="url">
 | 
										<MkInput v-model="bannerUrl" type="url">
 | 
				
			||||||
						<template #prefix><i class="ti ti-link"></i></template>
 | 
											<template #prefix><i class="ti ti-link"></i></template>
 | 
				
			||||||
						<template #label>{{ i18n.ts.bannerUrl }}</template>
 | 
											<template #label>{{ i18n.ts.bannerUrl }}</template>
 | 
				
			||||||
| 
						 | 
					@ -128,6 +137,7 @@ import MkColorInput from '@/components/MkColorInput.vue';
 | 
				
			||||||
import { host } from '@/config.js';
 | 
					import { host } from '@/config.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const iconUrl = ref<string | null>(null);
 | 
					const iconUrl = ref<string | null>(null);
 | 
				
			||||||
 | 
					const sidebarLogoUrl = ref<string | null>(null);
 | 
				
			||||||
const app192IconUrl = ref<string | null>(null);
 | 
					const app192IconUrl = ref<string | null>(null);
 | 
				
			||||||
const app512IconUrl = ref<string | null>(null);
 | 
					const app512IconUrl = ref<string | null>(null);
 | 
				
			||||||
const bannerUrl = ref<string | null>(null);
 | 
					const bannerUrl = ref<string | null>(null);
 | 
				
			||||||
| 
						 | 
					@ -146,6 +156,7 @@ const manifestJsonOverride = ref<string>('{}');
 | 
				
			||||||
async function init() {
 | 
					async function init() {
 | 
				
			||||||
	const meta = await misskeyApi('admin/meta');
 | 
						const meta = await misskeyApi('admin/meta');
 | 
				
			||||||
	iconUrl.value = meta.iconUrl;
 | 
						iconUrl.value = meta.iconUrl;
 | 
				
			||||||
 | 
						sidebarLogoUrl.value = meta.sidebarLogoUrl;
 | 
				
			||||||
	app192IconUrl.value = meta.app192IconUrl;
 | 
						app192IconUrl.value = meta.app192IconUrl;
 | 
				
			||||||
	app512IconUrl.value = meta.app512IconUrl;
 | 
						app512IconUrl.value = meta.app512IconUrl;
 | 
				
			||||||
	bannerUrl.value = meta.bannerUrl;
 | 
						bannerUrl.value = meta.bannerUrl;
 | 
				
			||||||
| 
						 | 
					@ -165,6 +176,7 @@ async function init() {
 | 
				
			||||||
function save() {
 | 
					function save() {
 | 
				
			||||||
	os.apiWithDialog('admin/update-meta', {
 | 
						os.apiWithDialog('admin/update-meta', {
 | 
				
			||||||
		iconUrl: iconUrl.value,
 | 
							iconUrl: iconUrl.value,
 | 
				
			||||||
 | 
							sidebarLogoUrl: sidebarLogoUrl.value,
 | 
				
			||||||
		app192IconUrl: app192IconUrl.value,
 | 
							app192IconUrl: app192IconUrl.value,
 | 
				
			||||||
		app512IconUrl: app512IconUrl.value,
 | 
							app512IconUrl: app512IconUrl.value,
 | 
				
			||||||
		bannerUrl: bannerUrl.value,
 | 
							bannerUrl: bannerUrl.value,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			||||||
	<div :class="$style.top">
 | 
						<div :class="$style.top">
 | 
				
			||||||
		<div :class="$style.banner" :style="{ backgroundImage: `url(${ instance.bannerUrl })` }"></div>
 | 
							<div :class="$style.banner" :style="{ backgroundImage: `url(${ instance.bannerUrl })` }"></div>
 | 
				
			||||||
		<button class="_button" :class="$style.instance" @click="openInstanceMenu">
 | 
							<button class="_button" :class="$style.instance" @click="openInstanceMenu">
 | 
				
			||||||
			<img :src="instance.iconUrl || instance.faviconUrl || '/favicon.ico'" alt="" :class="$style.instanceIcon"/>
 | 
								<img :src="instance.sidebarLogoUrl || instance.iconUrl || '/apple-touch-icon.png'" alt="" :class="instance.sidebarLogoUrl ? $style.wideInstanceIcon : $style.instanceIcon"/>
 | 
				
			||||||
		</button>
 | 
							</button>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
	<div :class="$style.middle">
 | 
						<div :class="$style.middle">
 | 
				
			||||||
| 
						 | 
					@ -121,6 +121,13 @@ function more() {
 | 
				
			||||||
	aspect-ratio: 1;
 | 
						aspect-ratio: 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.wideInstanceIcon {
 | 
				
			||||||
 | 
						display: inline-block;
 | 
				
			||||||
 | 
						min-width: 38px;
 | 
				
			||||||
 | 
						max-width: 100%;
 | 
				
			||||||
 | 
						max-height: 80px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.bottom {
 | 
					.bottom {
 | 
				
			||||||
	position: sticky;
 | 
						position: sticky;
 | 
				
			||||||
	bottom: 0;
 | 
						bottom: 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			||||||
		<div :class="$style.top">
 | 
							<div :class="$style.top">
 | 
				
			||||||
			<div :class="$style.banner" :style="{ backgroundImage: `url(${ instance.bannerUrl })` }"></div>
 | 
								<div :class="$style.banner" :style="{ backgroundImage: `url(${ instance.bannerUrl })` }"></div>
 | 
				
			||||||
			<button v-tooltip.noDelay.right="instance.name ?? i18n.ts.instance" class="_button" :class="$style.instance" @click="openInstanceMenu">
 | 
								<button v-tooltip.noDelay.right="instance.name ?? i18n.ts.instance" class="_button" :class="$style.instance" @click="openInstanceMenu">
 | 
				
			||||||
				<img :src="instance.iconUrl || instance.faviconUrl || '/favicon.ico'" alt="" :class="$style.instanceIcon"/>
 | 
									<img :src="instance.sidebarLogoUrl && !iconOnly ? instance.sidebarLogoUrl : instance.iconUrl || '/apple-touch-icon.png'" alt="" :class="instance.sidebarLogoUrl && !iconOnly ? $style.wideInstanceIcon : $style.instanceIcon"/>
 | 
				
			||||||
			</button>
 | 
								</button>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
		<div :class="$style.middle">
 | 
							<div :class="$style.middle">
 | 
				
			||||||
| 
						 | 
					@ -183,6 +183,13 @@ function more(ev: MouseEvent) {
 | 
				
			||||||
		aspect-ratio: 1;
 | 
							aspect-ratio: 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.wideInstanceIcon {
 | 
				
			||||||
 | 
							display: inline-block;
 | 
				
			||||||
 | 
							min-width: 38px;
 | 
				
			||||||
 | 
							max-width: 100%;
 | 
				
			||||||
 | 
							max-height: 80px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.bottom {
 | 
						.bottom {
 | 
				
			||||||
		position: sticky;
 | 
							position: sticky;
 | 
				
			||||||
		bottom: 0;
 | 
							bottom: 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,7 +41,7 @@ SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			||||||
	<div class="divider"></div>
 | 
						<div class="divider"></div>
 | 
				
			||||||
	<div class="about">
 | 
						<div class="about">
 | 
				
			||||||
		<button v-click-anime class="item _button" @click="openInstanceMenu">
 | 
							<button v-click-anime class="item _button" @click="openInstanceMenu">
 | 
				
			||||||
			<img :src="instance.iconUrl ?? instance.faviconUrl ?? '/favicon.ico'" class="_ghost"/>
 | 
								<img :src="instance.sidebarLogoUrl && !iconOnly ? instance.sidebarLogoUrl : instance.iconUrl ?? instance.faviconUrl ?? '/favicon.ico'" :class="{ wideIcon: instance.sidebarLogoUrl && !iconOnly }" class="_ghost" />
 | 
				
			||||||
		</button>
 | 
							</button>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
	<!--<MisskeyLogo class="misskey"/>-->
 | 
						<!--<MisskeyLogo class="misskey"/>-->
 | 
				
			||||||
| 
						 | 
					@ -180,12 +180,15 @@ watch(defaultStore.reactiveState.menuDisplay, () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		> .item {
 | 
							> .item {
 | 
				
			||||||
			display: block;
 | 
								display: block;
 | 
				
			||||||
			width: 32px;
 | 
					 | 
				
			||||||
			margin: 0 auto;
 | 
								margin: 0 auto;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			img {
 | 
								img {
 | 
				
			||||||
				display: block;
 | 
									display: block;
 | 
				
			||||||
				width: 100%;
 | 
									width: 32px;
 | 
				
			||||||
 | 
									&.wideIcon {
 | 
				
			||||||
 | 
									    width: 80%;
 | 
				
			||||||
 | 
										margin: 0 auto;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5191,6 +5191,7 @@ export type operations = {
 | 
				
			||||||
            infoImageUrl: string | null;
 | 
					            infoImageUrl: string | null;
 | 
				
			||||||
            notFoundImageUrl: string | null;
 | 
					            notFoundImageUrl: string | null;
 | 
				
			||||||
            iconUrl: string | null;
 | 
					            iconUrl: string | null;
 | 
				
			||||||
 | 
					            sidebarLogoUrl: string | null;
 | 
				
			||||||
            app192IconUrl: string | null;
 | 
					            app192IconUrl: string | null;
 | 
				
			||||||
            app512IconUrl: string | null;
 | 
					            app512IconUrl: string | null;
 | 
				
			||||||
            enableEmail: boolean;
 | 
					            enableEmail: boolean;
 | 
				
			||||||
| 
						 | 
					@ -9704,6 +9705,7 @@ export type operations = {
 | 
				
			||||||
          infoImageUrl?: string | null;
 | 
					          infoImageUrl?: string | null;
 | 
				
			||||||
          notFoundImageUrl?: string | null;
 | 
					          notFoundImageUrl?: string | null;
 | 
				
			||||||
          iconUrl?: string | null;
 | 
					          iconUrl?: string | null;
 | 
				
			||||||
 | 
					          sidebarLogoUrl?: string | null;
 | 
				
			||||||
          app192IconUrl?: string | null;
 | 
					          app192IconUrl?: string | null;
 | 
				
			||||||
          app512IconUrl?: string | null;
 | 
					          app512IconUrl?: string | null;
 | 
				
			||||||
          backgroundImageUrl?: string | null;
 | 
					          backgroundImageUrl?: string | null;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue