MTBlockEditor : カスタムブロックの作成画面で、プロパティの項目に対してキーボード操作によるコピーアンドペーストができない

Description

テキストブロックのラベルをコピーしてクラス名にペーストするつもりで Cmd+C, Cmd+V をすると、ブロック全体がコピペされ、文字列のペーストができない。コンテキストメニューではコピペできる。

MacOS 13.4.1
Firefox 121.0 (64 ビット)

Checklists

None

Attachments

1
  • 24 Jan 2024, 01:02 AM

Activity

Show:

Taku AmanoJanuary 24, 2024 at 7:07 AM
Edited

ありがとうございます。

説明していなくてすみません。

全体としては以下のような挙動にしたいです。

  • とにかく、現在何かが選択されていれば、コピーの対象はそれだと思うのでそれがコピーされるべき

    • 起票してもらった内容の通り「何故か全体がコピーされてしまう」というのはそれなりに大きいストレスだと思うので、その意味でもとにかく何かが選択されていれば全体はコピーされないでほしい

なので、Firefox以外でも、window.getSelection().toString() === "" && document.activeElementselectionStart !== document.activeElement.selectionEndが成立する環境があれば、その場合にはブラウザのコピーの挙動を優先したいです。(ただ多分、「selectionがfalseになることがあるのか分かりませんが。」と書いてもらっている通り、そういう環境はないような気はします。)なのでそのあたりを踏まえて「最大公約数的に、何か選択されていたらブラウザの挙動を優先」というようにするのがこのコードの意図です。

ブロックをコピーしたいときには「対象のブロックにフォーカスがあるときに⌘C」というのが現状の仕様ですが、「input要素にフォーカスをあてずに、対象のブロックにフォーカスがある」という状態を判断するのが難しいと思うので、(ブロックにフォーカスをあてる == ブロック内の何らかのinput要素にフォーカスをあてるになることがおおいので)そのようになっています。(あと、細かい経緯は忘れてしまいましたが、先行のブロックエディタであるwordpressのgutenbergもそうなので、それに引っ張られている可能性もあります。)

 

ただまあ、その仕様はそれはそれとして「カスタムブロックの作成モードでは、ブロックのコピー機能は無効」でもいいかもという気もしますね。カスタムブロックの作成時にはコピーできなくていいと思うので。あるいは、もしもっといい感じの挙動があれば提案してもらえるとうれしいです。

 

このチケットについてはこれで進めさせてもらいます。ありがとうございました!

Keita SugamaJanuary 24, 2024 at 5:31 AM

「Firefox以外でも」というのは語弊がありました。単純に少し条件変わった、程度の意味です。

Keita SugamaJanuary 24, 2024 at 5:27 AM

ありがとうございます。

Firefox と Chrome で正常動作でした。

https://github.com/movabletype/mt-block-editor-internal/pull/231/commits/b051334264dc38f2b6a93d9751c5c7ecaea23d1f#diff-4a336fde99bed6c9540b5a3ddd151b9fa1103ceec57a800057162039367db13bL11return false がなくなったことで Firefox以外でもFirefox用の処理に流れるようになったと思いますが、気にしなくていいですかね。selectionがfalseになることがあるのか分かりませんが。

<input type=”text”> 内で選択範囲が長さ0のときにブロックがコピーされるのが若干違和感ありますが、PR前のchromeでも同じでした。上記の件とは関係ないですね。

上記、問題ないようでしたら全体的によいと思います。

Taku AmanoJanuary 24, 2024 at 5:07 AM

ありがとうございます。

isTextSelected() なので意味的には window.getSelection() からなんとか取得できるといい感じがするのですが、取れないものはしょうがないし、document.activeElement でうまく動くなら問題ないのでそれでいこうと思います。ここは(ほんとは正しく取れた方がいいですが)最悪判定ミスがあっても「なんかうまくコピーできないことがある」というだけでデータが壊れるようなものではないので、ある程度曖昧な着地点でもOKだと思いますし。

ということで、追加したこのコミットの内容で進めたいと思います。
https://github.com/movabletype/mt-block-editor-internal/pull/231/commits/b051334264dc38f2b6a93d9751c5c7ecaea23d1f

なんどもすみませんが、これでレビューお願いします。

Keita SugamaJanuary 24, 2024 at 4:48 AM

動きました!

Implemented

Details

Assignee

Reporter

Components

Priority

Smart Checklist

Created January 11, 2024 at 8:26 AM
Updated March 4, 2024 at 4:16 AM
Resolved February 27, 2024 at 7:29 AM