summaryrefslogtreecommitdiff
path: root/packages/frontend/src/components/page
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frontend/src/components/page')
-rw-r--r--packages/frontend/src/components/page/page.note.vue20
-rw-r--r--packages/frontend/src/components/page/page.text.vue15
-rw-r--r--packages/frontend/src/components/page/page.vue2
3 files changed, 19 insertions, 18 deletions
diff --git a/packages/frontend/src/components/page/page.note.vue b/packages/frontend/src/components/page/page.note.vue
index df26874c17..543e9afdaf 100644
--- a/packages/frontend/src/components/page/page.note.vue
+++ b/packages/frontend/src/components/page/page.note.vue
@@ -11,8 +11,9 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
-import { onMounted, ref } from 'vue';
+import { onMounted, onUnmounted, ref } from 'vue';
import * as Misskey from 'misskey-js';
+import { retryOnThrottled } from '@@/js/retry-on-throttled.js';
import MkNote from '@/components/MkNote.vue';
import MkNoteDetailed from '@/components/MkNoteDetailed.vue';
import { misskeyApi } from '@/utility/misskey-api.js';
@@ -20,16 +21,25 @@ import { misskeyApi } from '@/utility/misskey-api.js';
const props = defineProps<{
block: Misskey.entities.PageBlock,
page: Misskey.entities.Page,
+ index: number;
}>();
const note = ref<Misskey.entities.Note | null>(null);
+// eslint-disable-next-line id-denylist
+let timeoutId: ReturnType<typeof window.setTimeout> | null = null;
+
onMounted(() => {
if (props.block.note == null) return;
- misskeyApi('notes/show', { noteId: props.block.note })
- .then(result => {
- note.value = result;
- });
+ timeoutId = window.setTimeout(async () => {
+ note.value = await retryOnThrottled(() => misskeyApi('notes/show', { noteId: props.block.note }));
+ }, 500 * props.index); // rate limit is 2 reqs per sec
+});
+
+onUnmounted(() => {
+ if (timeoutId !== null) {
+ window.clearTimeout(timeoutId);
+ }
});
</script>
diff --git a/packages/frontend/src/components/page/page.text.vue b/packages/frontend/src/components/page/page.text.vue
index ef3524fe7a..3891380dd0 100644
--- a/packages/frontend/src/components/page/page.text.vue
+++ b/packages/frontend/src/components/page/page.text.vue
@@ -7,29 +7,20 @@ SPDX-License-Identifier: AGPL-3.0-only
<div class="_gaps" :class="$style.textRoot">
<Mfm :text="block.text ?? ''" :isBlock="true" :isNote="false"/>
<div v-if="isEnabledUrlPreview" class="_gaps_s">
- <MkUrlPreview v-for="url in urls" :key="url" :url="url" :showAsQuote="!page.user.rejectQuotes"/>
+ <SkUrlPreviewGroup :sourceText="block.text" :showAsQuote="!page.user.rejectQuotes" @click.stop/>
</div>
</div>
</template>
<script lang="ts" setup>
-import { defineAsyncComponent, computed } from 'vue';
-import * as mfm from '@transfem-org/sfm-js';
import * as Misskey from 'misskey-js';
-import { extractUrlFromMfm } from '@/utility/extract-url-from-mfm.js';
import { isEnabledUrlPreview } from '@/instance.js';
+import SkUrlPreviewGroup from '@/components/SkUrlPreviewGroup.vue';
-const MkUrlPreview = defineAsyncComponent(() => import('@/components/MkUrlPreview.vue'));
-
-const props = defineProps<{
+defineProps<{
block: Misskey.entities.PageBlock,
page: Misskey.entities.Page,
}>();
-
-const urls = computed(() => {
- if (!props.block.text) return [];
- return extractUrlFromMfm(mfm.parse(props.block.text));
-});
</script>
<style lang="scss" module>
diff --git a/packages/frontend/src/components/page/page.vue b/packages/frontend/src/components/page/page.vue
index a31c5eff28..9f9feeed49 100644
--- a/packages/frontend/src/components/page/page.vue
+++ b/packages/frontend/src/components/page/page.vue
@@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<template>
<div :class="{ [$style.center]: page.alignCenter, [$style.serif]: page.font === 'serif' }" class="_gaps">
- <XBlock v-for="child in page.content" :key="child.id" :page="page" :block="child" :h="2"/>
+ <XBlock v-for="(child, index) in page.content" :key="child.id" :index="index" :page="page" :block="child" :h="2"/>
</div>
</template>