Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ノート表示を畳む条件をユーザー側で設定出来るようにして欲しい #15192

Open
1 task
Sayamame-beans opened this issue Dec 29, 2024 · 10 comments
Labels
✨Feature This adds/improves/enhances a feature packages/frontend Client side specific issue/PR

Comments

@Sayamame-beans
Copy link
Member

Sayamame-beans commented Dec 29, 2024

Summary

サーバーの特徴やユーザーの表示環境等によって、適切なノートを畳む条件が異なる場合が考えられます。
そのため、ユーザー側で設定して変えられるように出来ればよいと考えました。
https://github.com/misskey-dev/misskey/blob/3c81926f71f04b43455dd6a5e6302eb2c35f58ba/packages/frontend-shared/js/collapsed.ts

なお、手元で実装を試みようとしたのですが、frontend-sharedになっているcollapsed.tsに、frontend側にあるユーザー設定を持ってくる適切な方法が分からなかったため実装を断念しています。

設定例

  • Scale変更系MFMがある場合: 現在 畳む → 任意設定 or 畳まない (より理想的には、(将来的に)MFMがパースされるなどして、個別に設定出来ても良さそうですが、それはoptionalです)
  • 表示する最大行数(畳まない行数): 現在 9 → 任意設定 or 無制限 (デフォルトは10に。Twitterが10行まで畳まれない仕様です)
  • 表示する最大文字数: 現在 500 → 任意設定 or 無制限
  • 表示する最大URL数: 現在 3 → 任意設定 or 無制限
    (ちなみに、>= 4> 4のミスではなく意図的ですか?)
  • 表示する最大ファイル数: 現在 4 → 任意設定 or 無制限(misskeyの仕様上、現在は16がMAX)\

Purpose

利便性の向上

Do you want to implement this feature yourself?

  • Yes, I will implement this by myself and send a pull request
@samunohito
Copy link
Member

「ユーザー設定」というのは、frontend側にあるdefaultStoreのことでしょうか…?

もしそうである場合、defaultStoreをsharedに持ち込むのではなく、判定に必要な閾値などをshouldCollapsedのオプションに引き込めるようにするのはどうでしょうか…?そうすれば、defaultStoreという大きな関心事を持ち込まずとも判定できるようになるのではと考えます。

あくまで一例ですが、こんなイメージです

export function shouldCollapsed(note: Misskey.entities.Note, urls: string[], opts?: {
	collapseScaleMfm?: boolean;
	collapseThresholdLineCount?: number;
	collapseThresholdCharCount?: number;
	collapseThresholdUrlCount?: number;
	collapseThresholdFileCount?: number;
}): boolean {
	const collapseScaleMfm = opts?.collapseScaleMfm ?? true;
	const collapseThresholdLineCount = opts?.collapseThresholdLineCount ?? 9;
	const collapseThresholdCharCount = opts?.collapseThresholdCharCount ?? 500;
	const collapseThresholdUrlCount = opts?.collapseThresholdUrlCount ?? 3;
	const collapseThresholdFileCount = opts?.collapseThresholdFileCount ?? 4;

....条件判定が続く....

@anatawa12
Copy link
Member

anatawa12 commented Jan 7, 2025

なんか値の橋渡しは provide / inject あたりが適切そうな気がしました

shouldCollapsed内でオブジェクトで受け取るはそうだけど。

@Sayamame-beans
Copy link
Member Author

引数にすると(embed系以外の)全箇所で引数渡さないといけなくてあまり良くないのかな?と思ったりしましたね…(言われて思い出しました)

@samunohito
Copy link
Member

引数にすると(embed系以外の)全箇所で引数渡さないといけなくて

いろいろ実装パターンはあると思いますが、自分がパッと思いつくのは…
frontend側でshouldCollapsedを呼び出すラッパーを用意してあげるとかでしょうか。
defaultStoreから値を取り出し、shouldCollapsedの引数に詰めるような感じの…

@Sayamame-beans
Copy link
Member Author

あ〜〜
なるほど

@syuilo
Copy link
Member

syuilo commented Jan 7, 2025

現在の設定で「畳まれないといけないのに畳まれない」ケースはあまり観測していないのと、
仮に畳まなくても問題ない場合に畳まれたとしても、1クリックすれば済むだけだから実装コストに対して得られる利益が少ない気がする

改修が必要だとしても「ユーザーの表示環境」が原因なのであればユーザーに設定させるのではなく、こっちでそれを判定して適切な条件にするようにするのが良さそう

@samunohito
Copy link
Member

1クリックすれば済むだけだから

これは自分自身の感想なのですが、ちりつもで煩わしいと感じるケースがありますね…
1クリックだとしても…マウスを持ち、ボタンまでカーソルを動かし…という動作が入ることもあり

こっちでそれを判定して

この閾値がユーザごとに違うので設定項目を設けようという趣旨であると理解しています。

@Sayamame-beans
Copy link
Member Author

こっちでそれを判定して

この閾値がユーザごとに違うので設定項目を設けようという趣旨であると理解しています。

そうですね。

1クリックすれば済むだけだから

これは自分自身の感想なのですが、ちりつもで煩わしいと感じるケースがありますね… 1クリックだとしても…マウスを持ち、ボタンまでカーソルを動かし…という動作が入ることもあり

それもありますが、現状畳まれている場合のデメリットの最たるものとして、画像等の存在に一切気付かないなどがあります。気付かないので開こうともなりません。
related(自分でも存在忘れてましたがかなり書いてました): #13482 #13483 #14230 #14300

@syuilo
Copy link
Member

syuilo commented Jan 7, 2025

画像等の存在に一切気付かない

これについては条件をユーザーが設定可能にするよりもベターな解決策が存在すると思うわね

@samunohito
Copy link
Member

画像については別で考えましょうか。画像の有無に関係なく何とかしたい課題ではあるので…

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨Feature This adds/improves/enhances a feature packages/frontend Client side specific issue/PR
Projects
Development

No branches or pull requests

4 participants