Menu contestuali

Quando un utente fa clic con il tasto destro del mouse (o preme a lungo) su un blocco o un'area di lavoro, viene mostrato un menu contestuale con azioni aggiuntive. Puoi configurare questo menu contestuale per mostrare opzioni aggiuntive o rimuovere quelle predefinite. Questa guida illustra come aggiungere un'opzione personalizzata a tutti i blocchi o a tutte le aree di lavoro. Se vuoi modificare il menu contestuale per un solo tipo di blocco, consulta le informazioni nella pagina relativa ai blocchi personalizzati.

API del menu contestuale

La classe ContextMenuRegistry contiene metodi per la registrazione, l'annullamento della registrazione e il recupero di tutte le opzioni del menu contestuale. La classe è un singleton, quindi i metodi devono essere chiamati sull'oggetto Blockly.ContextMenuRegistry.registry anziché creare personalmente un'istanza di una nuova istanza. La classe ContextMenu chiama il metodo getContextMenuItems ogni volta che deve essere mostrato un menu contestuale. Se il blocco o l'area di lavoro ha una funzione customContextMenu, viene richiamata per modificare l'elenco di opzioni.

Aggiunta di opzioni personalizzate

Ogni opzione di menu nel registro ha diverse proprietà:

  • callback: una funzione chiamata quando viene fatto clic sull'opzione di menu.
  • scopeType: uno tra Blockly.ContextMenuRegistry.ScopeType.BLOCK o Blockly.ContextMenuRegistry.ScopeType.WORKSPACE per indicare la posizione in cui deve essere mostrata l'opzione. Se un'opzione deve essere mostrata sia per le aree di lavoro che per i blocchi, deve essere registrata una volta per ogni scopeType.
  • displayText: una stringa, HTML oppure una funzione che restituisce uno dei due precedenti. Determina il testo visualizzato nel menu.
  • preconditionFn: funzione che restituisce uno dei valori enabled, disabled o hidden per determinare se e come visualizzare l'opzione di menu.
  • weight: un numero che determina l'ordinamento dell'opzione. Le opzioni con ponderazioni maggiori vengono visualizzate in un secondo momento nel menu contestuale.
  • id: un ID stringa univoco per l'opzione.

Ogni funzione callback, displayText (se è una funzione) e preconditionFn verrà chiamata con un oggetto Scope contenente informazioni sull'area di lavoro o sul blocco esatto su cui viene fatto clic. In questo modo l'opzione del menu contestuale può fare riferimento a proprietà relative all'area di lavoro o al blocco. Ad esempio, l'opzione del menu contestuale che consente a un utente di eliminare tutti i blocchi indica "Elimina 42 blocchi" se l'area di lavoro contiene 42 blocchi. Con preconditionFn, un'opzione di menu può essere enabled se una proprietà del blocco è true o disabled in caso contrario.

Per altri esempi, puoi vedere la registrazione delle opzioni del menu contestuale predefinite in contextmenu_items.js.

Modificare o rimuovere le opzioni predefinite

Puoi annullare la registrazione di qualsiasi opzione con Blockly.ContextMenuRegistry.registry.unregister(id). Gli ID delle opzioni predefinite sono in contextmenu_items.js.

Per modificare un'opzione predefinita, chiama getItem con l'ID e modificalo in base alle esigenze.