summaryrefslogtreecommitdiff
path: root/packages/frontend-embed/src/pages/note.vue
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frontend-embed/src/pages/note.vue')
-rw-r--r--packages/frontend-embed/src/pages/note.vue52
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>