2020-12-30 16:22:20 +01:00
|
|
|
<template>
|
2023-02-17 04:38:30 +01: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">
|
|
|
|
<div :class="$style.body">
|
2022-12-19 11:01:30 +01:00
|
|
|
<MkA v-if="note.replyId" class="reply" :to="`/notes/${note.replyId}`"><i class="ti ti-arrow-back-up"></i></MkA>
|
2023-04-01 06:52:07 +02:00
|
|
|
<Mfm v-if="note.text" :text="note.text" :author="note.user" :i="$i"/>
|
2021-11-19 11:36:12 +01:00
|
|
|
<MkA v-if="note.renoteId" class="rp" :to="`/notes/${note.renoteId}`">RN: ...</MkA>
|
2021-07-09 19:55:12 +02:00
|
|
|
</div>
|
2023-02-17 04:38:30 +01:00
|
|
|
<div v-if="note.files.length > 0" :class="$style.richcontent">
|
2023-04-01 06:52:07 +02:00
|
|
|
<MkMediaList :media-list="note.files"/>
|
2021-07-09 19:55:12 +02:00
|
|
|
</div>
|
|
|
|
<div v-if="note.poll">
|
2023-04-01 06:52:07 +02:00
|
|
|
<MkPoll :note="note" :read-only="true"/>
|
2021-07-09 19:55:12 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
2023-04-01 06:52:07 +02:00
|
|
|
<MkReactionsViewer ref="reactionsViewer" :note="note"/>
|
2020-12-30 16:22:20 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
2023-02-17 04:38:30 +01:00
|
|
|
<script lang="ts" setup>
|
2023-04-01 06:52:07 +02:00
|
|
|
import { Note } from 'misskey-js/built/entities';
|
|
|
|
import { onUpdated } from 'vue';
|
2022-12-30 05:56:22 +01:00
|
|
|
import MkReactionsViewer from '@/components/MkReactionsViewer.vue';
|
|
|
|
import MkMediaList from '@/components/MkMediaList.vue';
|
|
|
|
import MkPoll from '@/components/MkPoll.vue';
|
2021-11-11 18:02:25 +01:00
|
|
|
import * as os from '@/os';
|
2023-02-17 04:38:30 +01:00
|
|
|
import { getScrollContainer } from '@/scripts/scroll';
|
2023-04-01 06:52:07 +02:00
|
|
|
import { $i } from '@/account';
|
2020-12-30 16:22:20 +01:00
|
|
|
|
2023-02-17 04:38:30 +01:00
|
|
|
let notes = $ref<Note[]>([]);
|
|
|
|
let isScrolling = $ref(false);
|
2023-04-23 01:13:12 +02:00
|
|
|
let scrollEl = $shallowRef<HTMLElement>();
|
2020-12-30 16:22:20 +01:00
|
|
|
|
2023-02-17 04:38:30 +01:00
|
|
|
os.apiGet('notes/featured').then(_notes => {
|
|
|
|
notes = _notes;
|
|
|
|
});
|
2021-07-09 19:55:12 +02:00
|
|
|
|
2023-02-17 04:38:30 +01:00
|
|
|
onUpdated(() => {
|
|
|
|
if (!scrollEl) return;
|
|
|
|
const container = getScrollContainer(scrollEl);
|
|
|
|
const containerHeight = container ? container.clientHeight : window.innerHeight;
|
|
|
|
if (scrollEl.offsetHeight > containerHeight) {
|
|
|
|
isScrolling = true;
|
|
|
|
}
|
2020-12-30 16:22:20 +01:00
|
|
|
});
|
|
|
|
</script>
|
|
|
|
|
2023-02-17 04:38:30 +01:00
|
|
|
<style lang="scss" module>
|
2021-07-09 19:55:12 +02: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 04:38:30 +01:00
|
|
|
.root {
|
2020-12-30 16:22:20 +01:00
|
|
|
text-align: right;
|
2023-02-17 04:38:30 +01:00
|
|
|
}
|
2020-12-30 16:22:20 +01:00
|
|
|
|
2023-02-17 04:38:30 +01:00
|
|
|
.scrollbox {
|
|
|
|
&.scroll {
|
|
|
|
animation: scroll 45s linear infinite;
|
|
|
|
}
|
|
|
|
}
|
2021-07-09 19:55:12 +02:00
|
|
|
|
2023-02-17 04:38:30 +01:00
|
|
|
.note {
|
|
|
|
margin: 16px 0 16px auto;
|
|
|
|
}
|
2021-07-09 19:55:12 +02:00
|
|
|
|
2023-02-17 04:38:30 +01:00
|
|
|
.content {
|
|
|
|
padding: 16px;
|
|
|
|
margin: 0 0 0 auto;
|
|
|
|
max-width: max-content;
|
|
|
|
border-radius: 16px;
|
|
|
|
}
|
2020-12-30 16:22:20 +01:00
|
|
|
|
2023-02-17 04:38:30 +01:00
|
|
|
.richcontent {
|
|
|
|
min-width: 250px;
|
2020-12-30 16:22:20 +01:00
|
|
|
}
|
|
|
|
</style>
|