From 27c46d7df9d78767765ffb6085641d49285976fd Mon Sep 17 00:00:00 2001
From: Lhcfl <Lhcfl@outlook.com>
Date: Thu, 25 Apr 2024 15:53:29 +0800
Subject: [PATCH] feat: For notification posts, set a smaller folding threshold

---
 packages/client/src/components/MkNote.vue     |  2 ++
 .../src/components/MkNotificationFolded.vue   | 11 +++++++
 .../src/components/MkSubNoteContent.vue       | 32 ++++++++++++-------
 3 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/packages/client/src/components/MkNote.vue b/packages/client/src/components/MkNote.vue
index 33c70e777e..7b71d4903d 100644
--- a/packages/client/src/components/MkNote.vue
+++ b/packages/client/src/components/MkNote.vue
@@ -113,6 +113,7 @@
 						:detailed="true"
 						:detailed-view="detailedView"
 						:parent-id="appearNote.id"
+						:is-long-judger="isLongJudger"
 						@push="(e) => router.push(notePage(e))"
 						@focusfooter="footerEl!.focus()"
 						@expanded="(e) => setPostExpanded(e)"
@@ -325,6 +326,7 @@ const props = defineProps<{
 	collapsedReply?: boolean;
 	hideFooter?: boolean;
 	hideEmojiViewer?: boolean;
+	isLongJudger?: (note: entities.Note) => boolean;
 }>();
 
 const inChannel = inject("inChannel", null);
diff --git a/packages/client/src/components/MkNotificationFolded.vue b/packages/client/src/components/MkNotificationFolded.vue
index e77467e9a2..f3b9769e84 100644
--- a/packages/client/src/components/MkNotificationFolded.vue
+++ b/packages/client/src/components/MkNotificationFolded.vue
@@ -60,12 +60,14 @@
 			class="content"
 			:note="removeReplyTo(notification.note.renote)"
 			:hide-emoji-viewer="true"
+			:is-long-judger="isLongJudger"
 		/>
 		<XNote
 			v-else
 			class="content"
 			:note="removeReplyTo(notification.note)"
 			:hide-emoji-viewer="true"
+			:is-long-judger="isLongJudger"
 		/>
 	</div>
 </template>
@@ -120,6 +122,15 @@ const userleft = ref(props.notification.users.length - users.value.length);
 let readObserver: IntersectionObserver | undefined;
 let connection: Connection<Channels["main"]> | null = null;
 
+function isLongJudger(note: entities.Note) {
+	return (
+		note.text != null &&
+		(note.text.split("\n").length > 5 ||
+			note.text.length > 300 ||
+			note.files.length > 4)
+	);
+}
+
 function getText() {
 	let res = "";
 	switch (props.notification.type) {
diff --git a/packages/client/src/components/MkSubNoteContent.vue b/packages/client/src/components/MkSubNoteContent.vue
index a0664c28e9..3fb1c2db6b 100644
--- a/packages/client/src/components/MkSubNoteContent.vue
+++ b/packages/client/src/components/MkSubNoteContent.vue
@@ -196,13 +196,26 @@ import { i18n } from "@/i18n";
 import { defaultStore } from "@/store";
 import icon from "@/scripts/icon";
 
-const props = defineProps<{
-	note: entities.Note;
-	parentId?: string;
-	conversation?: entities.Note[];
-	detailed?: boolean;
-	detailedView?: boolean;
-}>();
+const props = withDefaults(
+	defineProps<{
+		note: entities.Note;
+		parentId?: string;
+		conversation?: entities.Note[];
+		detailed?: boolean;
+		detailedView?: boolean;
+		isLongJudger?: (note: entities.Note) => boolean;
+	}>(),
+	{
+		isLongJudger: (note: entities.Note) => {
+			return (
+				note.text != null &&
+				(note.text.split("\n").length > 10 ||
+					note.text.length > 800 ||
+					note.files.length > 4)
+			);
+		},
+	},
+);
 
 const emit = defineEmits<{
 	(ev: "push", v): void;
@@ -216,10 +229,7 @@ const showMoreButton = ref<HTMLElement>();
 const isLong =
 	!props.detailedView &&
 	props.note.cw == null &&
-	((props.note.text != null &&
-		(props.note.text.split("\n").length > 10 ||
-			props.note.text.length > 800)) ||
-		props.note.files.length > 4);
+	props.isLongJudger(props.note);
 const collapsed = ref(props.note.cw == null && isLong);
 const urls = props.note.text
 	? extractUrlFromMfm(mfm.parse(props.note.text)).slice(0, 5)