ユーザーがブロックまたはワークスペースを右クリック(または長押し)すると、追加のアクションを含むコンテキスト メニューが表示されます。このコンテキスト メニューは、追加のオプションを表示したり、デフォルトのオプションを削除したりするように構成できます。このガイドでは、すべてのブロックまたはすべてのワークスペースにカスタム オプションを追加する方法について説明します。1 種類のブロックについてのみコンテキスト メニューを変更する場合は、カスタム ブロックのページの情報をご覧ください。
コンテキスト メニュー API
ContextMenuRegistry
クラスには、すべてのコンテキスト メニュー オプションの登録、登録解除、取得を行うためのメソッドが含まれています。このクラスはシングルトンであるため、新しいインスタンスを自分でインスタンス化するのではなく、Blockly.ContextMenuRegistry.registry
オブジェクトでメソッドを呼び出す必要があります。ContextMenu
クラスは、コンテキスト メニューを表示する必要があるときは常に getContextMenuItems
メソッドを呼び出します。ブロックまたはワークスペースに customContextMenu
関数がある場合は、オプションのリストを変更するために後で呼び出されます。
カスタム オプションの追加
レジストリの各メニュー オプションには、いくつかのプロパティがあります。
callback
: メニュー オプションがクリックされたときに呼び出される関数。scopeType
: このオプションを表示するBlockly.ContextMenuRegistry.ScopeType.BLOCK
またはBlockly.ContextMenuRegistry.ScopeType.WORKSPACE
のいずれか。ワークスペースとブロックの両方にオプションを表示する必要がある場合は、scopeType ごとに 1 回登録する必要があります。displayText
: 文字列、HTML、または前者のいずれかを返す関数。メニューに表示されるテキストを指定します。preconditionFn
:enabled
、disabled
、hidden
のいずれかを返して、メニュー オプションをレンダリングするかどうかとその方法を決定する関数。weight
: オプションの並べ替え順序を決定する数値。重みが大きいオプションは、コンテキスト メニューに後ほど表示されます。id
: オプションの一意の文字列 ID。
callback
、displayText
(関数の場合)、preconditionFn
の各関数は、クリックされた正確なワークスペースまたはブロックに関する情報を含む Scope
オブジェクトで呼び出されます。これにより、コンテキスト メニュー オプションでワークスペースやブロックのプロパティを参照できます。たとえば、ユーザーがすべてのブロックを削除できるコンテキスト メニュー オプションには、ワークスペースに 42 個のブロックがある場合、[42 個のブロックを削除] と表示されます。preconditionFn
では、ブロックのプロパティが true の場合は enabled
を、そうでない場合は disabled
をメニュー オプションに設定できます。
その他の例については、contextmenu_items.js でデフォルトのコンテキスト メニュー オプションの登録をご覧ください。
デフォルト オプションの変更または削除
Blockly.ContextMenuRegistry.registry.unregister(id)
を使用すると、任意のオプションの登録を解除できます。デフォルト オプションの ID は contextmenu_items.js にあります。
デフォルトのオプションを変更するには、ID を指定して getItem
を呼び出し、必要に応じて変更します。