diff options
| author | kabo2468 <28654659+kabo2468@users.noreply.github.com> | 2023-07-21 18:58:57 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-21 09:58:57 +0000 |
| commit | a8cd8ed99ecd8b276ac2a08c03fc053419ca55ea (patch) | |
| tree | 153a0738fa21f451aa7b889cc89ef9887d980e8c | |
| parent | enhance: Add OGP data for notes with multiple images/videos (#11142) (diff) | |
| download | sharkey-a8cd8ed99ecd8b276ac2a08c03fc053419ca55ea.tar.gz sharkey-a8cd8ed99ecd8b276ac2a08c03fc053419ca55ea.tar.bz2 sharkey-a8cd8ed99ecd8b276ac2a08c03fc053419ca55ea.zip | |
enhance: 自動でたたまれる機能が返信先や引用RNにも適用されるように (#10989)
* 返信、引用RNでMFMがあったら自動で隠すように
* Update CHANGELOG.md
* Update MkSubNoteContent.vue
* refactor: avoid `Boolean`
* docs: update CHANGELOG.md
---------
Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
| -rw-r--r-- | CHANGELOG.md | 2 | ||||
| -rw-r--r-- | packages/frontend/src/components/MkNote.vue | 13 | ||||
| -rw-r--r-- | packages/frontend/src/components/MkSubNoteContent.vue | 7 | ||||
| -rw-r--r-- | packages/frontend/src/scripts/collapsed.ts | 19 |
4 files changed, 25 insertions, 16 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 46dd2dd202..438436f01a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,8 @@ - ロール設定画面でロールIDを確認できるように - コンテキストメニュー表示時のパフォーマンスを改善 - フォロー/フォロワー非公開時の表示を改善 +- 本文にMFMが含まれている場合に自動でたたまれる機能が、返信先や引用RNにも適用されるように + - position は対象外になりました - AiScriptを0.15.0に更新 - Fix: サーバーメトリクスが90度傾いている - Fix: 非ログイン時にクレデンシャルが必要なページに行くとエラーが出る問題を修正 diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index 7a7406931b..deeae6e940 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -165,6 +165,7 @@ import { getNoteSummary } from '@/scripts/get-note-summary'; import { MenuItem } from '@/types/menu'; import MkRippleEffect from '@/components/MkRippleEffect.vue'; import { showMovedDialog } from '@/scripts/show-moved-dialog'; +import { shouldCollapsed } from '@/scripts/collapsed'; const props = defineProps<{ note: misskey.entities.Note; @@ -204,17 +205,7 @@ let appearNote = $computed(() => isRenote ? note.renote as misskey.entities.Note const isMyRenote = $i && ($i.id === note.userId); const showContent = ref(false); const urls = appearNote.text ? extractUrlFromMfm(mfm.parse(appearNote.text)) : null; -const isLong = (appearNote.cw == null && appearNote.text != null && ( - (appearNote.text.includes('$[x2')) || - (appearNote.text.includes('$[x3')) || - (appearNote.text.includes('$[x4')) || - (appearNote.text.includes('$[scale')) || - (appearNote.text.includes('$[position')) || - (appearNote.text.split('\n').length > 9) || - (appearNote.text.length > 500) || - (appearNote.files.length >= 5) || - (urls && urls.length >= 4) -)); +const isLong = shouldCollapsed(appearNote); const collapsed = ref(appearNote.cw == null && isLong); const isDeleted = ref(false); const muted = ref(checkWordMute(appearNote, $i, defaultStore.state.mutedWords)); diff --git a/packages/frontend/src/components/MkSubNoteContent.vue b/packages/frontend/src/components/MkSubNoteContent.vue index c76ce7315d..3a032a1167 100644 --- a/packages/frontend/src/components/MkSubNoteContent.vue +++ b/packages/frontend/src/components/MkSubNoteContent.vue @@ -31,16 +31,13 @@ import MkMediaList from '@/components/MkMediaList.vue'; import MkPoll from '@/components/MkPoll.vue'; import { i18n } from '@/i18n'; import { $i } from '@/account'; +import { shouldCollapsed } from '@/scripts/collapsed'; const props = defineProps<{ note: misskey.entities.Note; }>(); -const isLong = - props.note.cw == null && props.note.text != null && ( - (props.note.text.split('\n').length > 9) || - (props.note.text.length > 500) - ); +const isLong = shouldCollapsed(props.note); const collapsed = $ref(isLong); </script> diff --git a/packages/frontend/src/scripts/collapsed.ts b/packages/frontend/src/scripts/collapsed.ts new file mode 100644 index 0000000000..1bf56f233b --- /dev/null +++ b/packages/frontend/src/scripts/collapsed.ts @@ -0,0 +1,19 @@ +import * as mfm from 'mfm-js'; +import * as misskey from 'misskey-js'; +import { extractUrlFromMfm } from './extract-url-from-mfm'; + +export function shouldCollapsed(note: misskey.entities.Note): boolean { + const urls = note.text ? extractUrlFromMfm(mfm.parse(note.text)) : null; + const collapsed = note.cw == null && note.text != null && ( + (note.text.includes('$[x2')) || + (note.text.includes('$[x3')) || + (note.text.includes('$[x4')) || + (note.text.includes('$[scale')) || + (note.text.split('\n').length > 9) || + (note.text.length > 500) || + (note.files.length >= 5) || + (!!urls && urls.length >= 4) + ); + + return collapsed; +} |