2023-07-27 08:31:52 +03:00
|
|
|
<!--
|
|
|
|
SPDX-FileCopyrightText: syuilo and other misskey contributors
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
-->
|
|
|
|
|
2020-12-30 17:22:20 +02:00
|
|
|
<template>
|
2023-02-17 05:38:30 +02:00
|
|
|
<div :class="$style.root">
|
|
|
|
<div ref="scrollEl" :class="[$style.scrollbox, { [$style.scroll]: isScrolling }]">
|
|
|
|
<div v-for="note in notes" :key="note.id" :class="$style.note">
|
|
|
|
<div class="_panel" :class="$style.content">
|
2023-06-01 11:19:46 +03:00
|
|
|
<div>
|
2023-11-04 00:20:53 +02:00
|
|
|
<MkA v-if="note.replyId" class="reply" :to="`/notes/${note.replyId}`"><i class="ph-arrow-u-up-left ph-bold ph-lg"></i></MkA>
|
2023-11-04 11:27:22 +02:00
|
|
|
<Mfm v-if="note.text" :text="note.text" :author="note.user"/>
|
2021-11-19 12:36:12 +02:00
|
|
|
<MkA v-if="note.renoteId" class="rp" :to="`/notes/${note.renoteId}`">RN: ...</MkA>
|
2021-07-09 20:55:12 +03:00
|
|
|
</div>
|
2023-02-17 05:38:30 +02:00
|
|
|
<div v-if="note.files.length > 0" :class="$style.richcontent">
|
2023-05-19 10:20:53 +03:00
|
|
|
<MkMediaList :mediaList="note.files"/>
|
2021-07-09 20:55:12 +03:00
|
|
|
</div>
|
|
|
|
<div v-if="note.poll">
|
2023-05-19 10:20:53 +03:00
|
|
|
<MkPoll :note="note" :readOnly="true"/>
|
2021-07-09 20:55:12 +03:00
|
|
|
</div>
|
|
|
|
</div>
|
2023-04-01 07:52:07 +03:00
|
|
|
<MkReactionsViewer ref="reactionsViewer" :note="note"/>
|
2020-12-30 17:22:20 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
2023-02-17 05:38:30 +02:00
|
|
|
<script lang="ts" setup>
|
2023-09-04 07:33:38 +03:00
|
|
|
import * as Misskey from 'misskey-js';
|
2023-12-07 07:42:09 +02:00
|
|
|
import { onUpdated, ref, shallowRef } from 'vue';
|
2022-12-30 06:56:22 +02:00
|
|
|
import MkReactionsViewer from '@/components/MkReactionsViewer.vue';
|
|
|
|
import MkMediaList from '@/components/MkMediaList.vue';
|
|
|
|
import MkPoll from '@/components/MkPoll.vue';
|
2024-01-04 11:32:46 +02:00
|
|
|
import { misskeyApiGet } from '@/scripts/misskey-api.js';
|
2023-09-19 10:37:43 +03:00
|
|
|
import { getScrollContainer } from '@/scripts/scroll.js';
|
2020-12-30 17:22:20 +02:00
|
|
|
|
2023-12-07 07:42:09 +02:00
|
|
|
const notes = ref<Misskey.entities.Note[]>([]);
|
|
|
|
const isScrolling = ref(false);
|
|
|
|
const scrollEl = shallowRef<HTMLElement>();
|
2020-12-30 17:22:20 +02:00
|
|
|
|
2024-01-04 11:32:46 +02:00
|
|
|
misskeyApiGet('notes/featured').then(_notes => {
|
2023-12-07 07:42:09 +02:00
|
|
|
notes.value = _notes;
|
2023-02-17 05:38:30 +02:00
|
|
|
});
|
2021-07-09 20:55:12 +03:00
|
|
|
|
2023-02-17 05:38:30 +02:00
|
|
|
onUpdated(() => {
|
2023-12-07 07:42:09 +02:00
|
|
|
if (!scrollEl.value) return;
|
|
|
|
const container = getScrollContainer(scrollEl.value);
|
2023-02-17 05:38:30 +02:00
|
|
|
const containerHeight = container ? container.clientHeight : window.innerHeight;
|
2023-12-07 07:42:09 +02:00
|
|
|
if (scrollEl.value.offsetHeight > containerHeight) {
|
|
|
|
isScrolling.value = true;
|
2023-02-17 05:38:30 +02:00
|
|
|
}
|
2020-12-30 17:22:20 +02:00
|
|
|
});
|
|
|
|
</script>
|
|
|
|
|
2023-02-17 05:38:30 +02:00
|
|
|
<style lang="scss" module>
|
2021-07-09 20:55:12 +03:00
|
|
|
@keyframes scroll {
|
|
|
|
0% {
|
|
|
|
transform: translate3d(0, 0, 0);
|
|
|
|
}
|
|
|
|
5% {
|
|
|
|
transform: translate3d(0, 0, 0);
|
|
|
|
}
|
|
|
|
75% {
|
|
|
|
transform: translate3d(0, calc(-100% + 90vh), 0);
|
|
|
|
}
|
|
|
|
90% {
|
|
|
|
transform: translate3d(0, calc(-100% + 90vh), 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-02-17 05:38:30 +02:00
|
|
|
.root {
|
2020-12-30 17:22:20 +02:00
|
|
|
text-align: right;
|
2023-02-17 05:38:30 +02:00
|
|
|
}
|
2020-12-30 17:22:20 +02:00
|
|
|
|
2023-02-17 05:38:30 +02:00
|
|
|
.scrollbox {
|
|
|
|
&.scroll {
|
|
|
|
animation: scroll 45s linear infinite;
|
|
|
|
}
|
|
|
|
}
|
2021-07-09 20:55:12 +03:00
|
|
|
|
2023-02-17 05:38:30 +02:00
|
|
|
.note {
|
|
|
|
margin: 16px 0 16px auto;
|
|
|
|
}
|
2021-07-09 20:55:12 +03:00
|
|
|
|
2023-02-17 05:38:30 +02:00
|
|
|
.content {
|
|
|
|
padding: 16px;
|
|
|
|
margin: 0 0 0 auto;
|
|
|
|
max-width: max-content;
|
2023-10-31 20:44:34 +02:00
|
|
|
border-radius: var(--radius-md);
|
2023-02-17 05:38:30 +02:00
|
|
|
}
|
2020-12-30 17:22:20 +02:00
|
|
|
|
2023-02-17 05:38:30 +02:00
|
|
|
.richcontent {
|
|
|
|
min-width: 250px;
|
2020-12-30 17:22:20 +02:00
|
|
|
}
|
|
|
|
</style>
|