Menus contextuels

Lorsqu'un utilisateur effectue un clic droit (ou appuie sur) sur un bloc ou un espace de travail, un menu contextuel contenant des actions supplémentaires s'affiche. Vous pouvez configurer ce menu contextuel pour afficher des options supplémentaires ou supprimer les options par défaut. Ce guide explique comment ajouter une option personnalisée à tous les blocs ou à tous les espaces de travail. Si vous souhaitez modifier le menu contextuel pour un seul type de bloc, consultez les informations sur la page des blocs personnalisés.

API de menu contextuel

La classe ContextMenuRegistry contient des méthodes permettant d'enregistrer, d'annuler l'enregistrement et d'obtenir toutes les options du menu contextuel. La classe est un singleton. Les méthodes doivent donc être appelées sur l'objet Blockly.ContextMenuRegistry.registry plutôt que d'instancier vous-même une nouvelle instance. La classe ContextMenu appelle la méthode getContextMenuItems chaque fois qu'un menu contextuel doit être affiché. Si le bloc ou l'espace de travail possède une fonction customContextMenu, il est appelé ultérieurement pour modifier la liste des options.

Ajouter des options personnalisées

Chaque option de menu du registre possède plusieurs propriétés:

  • callback: fonction appelée lorsque l'utilisateur clique sur l'option de menu.
  • scopeType: Blockly.ContextMenuRegistry.ScopeType.BLOCK ou Blockly.ContextMenuRegistry.ScopeType.WORKSPACE pour l'affichage de cette option. Si une option doit s'afficher à la fois pour les espaces de travail et les blocs, elle doit être enregistrée une fois pour chaque type de champ d'application.
  • displayText: chaîne, ou HTML, ou fonction qui renvoie l'un des deux. Détermine le texte affiché dans le menu.
  • preconditionFn: fonction qui renvoie enabled, disabled ou hidden pour déterminer si l'option de menu doit être affichée et comment.
  • weight: nombre déterminant l'ordre de tri de l'option. Les options associées à des pondérations plus élevées apparaîtront plus tard dans le menu contextuel.
  • id: ID de chaîne unique pour l'option.

Chacune des fonctions callback, displayText (s'il s'agit d'une fonction) et preconditionFn sera appelée avec un objet Scope contenant des informations sur l'espace de travail ou le bloc exact sur lequel l'utilisateur clique. Ainsi, l'option de votre menu contextuel peut faire référence aux propriétés de l'espace de travail ou du bloc. Par exemple, l'option de menu contextuel qui permet à un utilisateur de supprimer tous les blocs indique "Supprimer 42 blocs" si l'espace de travail contient 42 blocs. Avec preconditionFn, une option de menu peut être enabled si une propriété du bloc est "true", ou disabled dans le cas contraire.

Pour plus d'exemples, vous pouvez consulter l'enregistrement des options de menu contextuel par défaut dans le fichier contextmenu_items.js.

Modification ou suppression des options par défaut

Vous pouvez annuler l'enregistrement de n'importe quelle option auprès de Blockly.ContextMenuRegistry.registry.unregister(id). Les ID des options par défaut se trouvent dans contextmenu_items.js.

Pour modifier une option par défaut, appelez getItem avec l'ID et modifiez-le si nécessaire.