diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-01-17 15:58:12 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-01-17 15:58:12 +0900 |
| commit | fe4fbafcf0846f100a1614a47a20fb1bbbcf58da (patch) | |
| tree | a7054d5ff440a251ce86f3d5c44a3a06e6fc98b4 | |
| parent | Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop (diff) | |
| download | sharkey-fe4fbafcf0846f100a1614a47a20fb1bbbcf58da.tar.gz sharkey-fe4fbafcf0846f100a1614a47a20fb1bbbcf58da.tar.bz2 sharkey-fe4fbafcf0846f100a1614a47a20fb1bbbcf58da.zip | |
存在しないカスタム絵文字をテキストで表示するように
Resolve #9516
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | packages/backend/src/server/ServerService.ts | 9 | ||||
| -rw-r--r-- | packages/frontend/src/components/global/MkEmoji.vue | 4 |
3 files changed, 11 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 56b25eae2d..c877be07b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ You should also include the user name that made the change. ## 13.x.x (unreleased) ### Improvements +- 存在しないカスタム絵文字をテキストで表示するように ### Bugfixes - playを削除する手段がなかったのを修正 diff --git a/packages/backend/src/server/ServerService.ts b/packages/backend/src/server/ServerService.ts index fac8497b5e..47d11ed0ae 100644 --- a/packages/backend/src/server/ServerService.ts +++ b/packages/backend/src/server/ServerService.ts @@ -14,6 +14,7 @@ import { genIdenticon } from '@/misc/gen-identicon.js'; import { createTemp } from '@/misc/create-temp.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js'; import { LoggerService } from '@/core/LoggerService.js'; +import { bindThis } from '@/decorators.js'; import { ActivityPubServerService } from './ActivityPubServerService.js'; import { NodeinfoServerService } from './NodeinfoServerService.js'; import { ApiServerService } from './api/ApiServerService.js'; @@ -22,7 +23,6 @@ import { WellKnownServerService } from './WellKnownServerService.js'; import { MediaProxyServerService } from './MediaProxyServerService.js'; import { FileServerService } from './FileServerService.js'; import { ClientServerService } from './web/ClientServerService.js'; -import { bindThis } from '@/decorators.js'; @Injectable() export class ServerService { @@ -101,7 +101,12 @@ export class ServerService { reply.header('Content-Security-Policy', 'default-src \'none\'; style-src \'unsafe-inline\''); if (emoji == null) { - return await reply.redirect('/static-assets/emoji-unknown.png'); + if ('fallback' in request.query) { + return await reply.redirect('/static-assets/emoji-unknown.png'); + } else { + reply.code(404); + return; + } } const url = new URL('/proxy/emoji.webp', this.config.url); diff --git a/packages/frontend/src/components/global/MkEmoji.vue b/packages/frontend/src/components/global/MkEmoji.vue index bc88cf3be4..b7dd0296cd 100644 --- a/packages/frontend/src/components/global/MkEmoji.vue +++ b/packages/frontend/src/components/global/MkEmoji.vue @@ -1,5 +1,6 @@ <template> -<img v-if="isCustom" :class="[$style.root, $style.custom, { [$style.normal]: normal, [$style.noStyle]: noStyle }]" :src="url" :alt="alt" :title="alt" decoding="async"/> +<span v-if="isCustom && errored">:{{ customEmojiName }}:</span> +<img v-else-if="isCustom" :class="[$style.root, $style.custom, { [$style.normal]: normal, [$style.noStyle]: noStyle }]" :src="url" :alt="alt" :title="alt" decoding="async" @error="errored = true"/> <img v-else-if="char && !useOsNativeEmojis" :class="$style.root" :src="url" :alt="alt" decoding="async" @pointerenter="computeTitle"/> <span v-else-if="char && useOsNativeEmojis" :alt="alt" @pointerenter="computeTitle">{{ char }}</span> <span v-else>{{ emoji }}</span> @@ -37,6 +38,7 @@ const url = computed(() => { } }); const alt = computed(() => isCustom.value ? `:${customEmojiName}:` : char.value); +let errored = $ref(false); // Searching from an array with 2000 items for every emoji felt like too energy-consuming, so I decided to do it lazily on pointerenter function computeTitle(event: PointerEvent): void { |