diff options
Diffstat (limited to 'packages/frontend-embed/src/pages/note.vue')
| -rw-r--r-- | packages/frontend-embed/src/pages/note.vue | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/packages/frontend-embed/src/pages/note.vue b/packages/frontend-embed/src/pages/note.vue new file mode 100644 index 0000000000..6f6c8c0f63 --- /dev/null +++ b/packages/frontend-embed/src/pages/note.vue @@ -0,0 +1,52 @@ +<!-- +SPDX-FileCopyrightText: syuilo and misskey-project +SPDX-License-Identifier: AGPL-3.0-only +--> + +<template> +<div :class="$style.noteEmbedRoot"> + <EmNoteDetailed v-if="note && !prohibited" :note="note"/> + <XNotFound v-else/> +</div> +</template> + +<script setup lang="ts"> +import { inject, ref } from 'vue'; +import * as Misskey from 'misskey-js'; +import EmNoteDetailed from '@/components/EmNoteDetailed.vue'; +import XNotFound from '@/pages/not-found.vue'; +import { DI } from '@/di.js'; +import { misskeyApi } from '@/misskey-api.js'; +import { assertServerContext } from '@/server-context'; + +const props = defineProps<{ + noteId: string; +}>(); + +const serverContext = inject(DI.serverContext)!; + +const note = ref<Misskey.entities.Note | null>(null); + +const prohibited = ref(false); + +if (assertServerContext(serverContext, 'note')) { + note.value = serverContext.note; +} else { + note.value = await misskeyApi('notes/show', { + noteId: props.noteId, + }).catch(() => { + return null; + }); +} + +if (note.value?.url != null || note.value?.uri != null) { + // リモートサーバーのノートは弾く + prohibited.value = true; +} +</script> + +<style lang="scss" module> +.noteEmbedRoot { + background-color: var(--panel); +} +</style> |