({{ i18n.ts.private }})
@@ -223,6 +223,17 @@ const currentClip = inject[ | null>('currentClip', nul
const note = ref(deepClone(props.note));
+// used later
+const collapsingNoteCondition = defaultStore.state.collapsingNoteCondition;
+if (collapsingNoteCondition === 'seeRenderedSize') {
+ onMounted(() => {
+ const current = collapsibleArea.value.clientHeight;
+ const limit = collapseSize * parseFloat(getComputedStyle(collapsibleArea.value).fontSize);
+ isLong.value = current > limit;
+ collapsed.value &&= isLong.value;
+ })
+}
+
// plugin
if (noteViewInterruptors.length > 0) {
onMounted(async () => {
@@ -262,22 +273,6 @@ const isMyRenote = $i && ($i.id === note.value.userId);
const showContent = ref(false);
const parsed = computed(() => appearNote.value.text ? mfm.parse(appearNote.value.text) : null);
const urls = computed(() => parsed.value ? extractUrlFromMfm(parsed.value).filter((url) => appearNote.value.renote?.url !== url && appearNote.value.renote?.uri !== url) : null);
-const collapsibleArea = ref(null);
-const collapseSize = computed(() => ({
- small: 9,
- medium: 13.5,
- large: 18,
-})[defaultStore.state.collapsingNoteSize]);
-const isLong = computed(() => {
- switch (defaultStore.state.collapsingNoteCondition) {
- case 'detailedCalculation': return shouldCollapsed(appearNote.value, collapseSize.value, parsed.value, urls.value ?? []);
- case 'seeRenderedSize': return collapsibleArea.value == null ? false : collapsibleInner.value.clientHeight > collapseSize.value * parseFloat(getComputedStyle(collapsibleInner.value).fontSize);
- // fail safe
- case 'legacyCalculation':
- default: return shouldCollapsedLegacy(appearNote.value, urls.value ?? []);
- }
-});
-const collapsed = ref(appearNote.value.cw == null && isLong.value);
const isDeleted = ref(false);
const muted = ref(checkMute(appearNote.value, $i?.mutedWords));
const hardMuted = ref(props.withHardMute && checkMute(appearNote.value, $i?.hardMutedWords, true));
@@ -292,6 +287,28 @@ const renoteCollapsed = ref(
),
);
+// oversized note collapsing
+const collapsibleArea = ref(null);
+const collapseSize = ({
+ small: 9,
+ medium: 13.5,
+ large: 18,
+})[defaultStore.state.collapsingNoteSize] ?? 13.5;
+const isLong = ref(true);
+switch (collapsingNoteCondition) {
+ case 'detailedCalculation':
+ isLong.value = shouldCollapsed(appearNote.value, collapseSize, parsed.value, urls.value ?? []);
+ break;
+ case 'seeRenderedSize':
+ break;
+ // fail safe
+ case 'legacyCalculation':
+ default:
+ isLong.value = shouldCollapsedLegacy(appearNote.value, urls.value ?? []);
+ break;
+}
+const collapsed = ref(appearNote.value.cw == null && isLong.value);
+
/* Overload FunctionにLintが対応していないのでコメントアウト
function checkMute(noteToCheck: Misskey.entities.Note, mutedWords: Array | undefined | null, checkOnly: true): boolean;
function checkMute(noteToCheck: Misskey.entities.Note, mutedWords: Array | undefined | null, checkOnly: false): boolean | 'sensitiveMute';
diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue
index 69104165cc..3f3093747a 100644
--- a/packages/frontend/src/pages/settings/general.vue
+++ b/packages/frontend/src/pages/settings/general.vue
@@ -102,7 +102,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.collapsingNoteSize }}
-
+
]