Gdy użytkownik kliknie prawym przyciskiem myszy (lub przytrzyma) blok lub obszar roboczy, wyświetli się menu kontekstowe z dodatkowymi działaniami. Możesz skonfigurować to menu kontekstowe, aby wyświetlać dodatkowe opcje lub usuwać opcje domyślne. Ten przewodnik dotyczy dodawania opcji niestandardowej do wszystkich bloków lub wszystkich obszarów roboczych. Jeśli chcesz zmienić menu kontekstowe tylko dla jednego typu blokady, zapoznaj się z informacjami na stronie o blokadach niestandardowych.
Interfejs API menu kontekstowego
Klasa ContextMenuRegistry
zawiera metody rejestrowania, wyrejestrowywania i pobierania wszystkich opcji menu kontekstowego. Klasa jest singlem, dlatego metody powinny być wywoływane w obiekcie Blockly.ContextMenuRegistry.registry
, a nie samodzielnie tworzone nową instancję. Klasa ContextMenu
wywołuje metodę getContextMenuItems
za każdym razem, gdy powinno zostać wyświetlone menu kontekstowe. Jeśli blokada lub obszar roboczy zawiera funkcję customContextMenu
, jest ona wywoływana później w celu zmiany listy opcji.
Dodawanie opcji niestandardowych
Każda opcja menu w rejestrze ma kilka właściwości:
callback
: funkcja wywoływana po kliknięciu opcji menu.scopeType
: jedna z wartościBlockly.ContextMenuRegistry.ScopeType.BLOCK
lubBlockly.ContextMenuRegistry.ScopeType.WORKSPACE
oznaczająca miejsce, w którym ta opcja ma być widoczna. Jeśli opcja powinna być widoczna zarówno w przypadku obszarów roboczych, jak i bloków, należy zarejestrować ją raz dla każdego zakresu.displayText
: ciąg znaków, kod HTML lub funkcja, która zwraca jeden z poprzednich elementów. Określa tekst widoczny w menu.preconditionFn
: funkcja, która zwraca jedną z wartościenabled
,disabled
lubhidden
, aby określić, czy i w jaki sposób opcja menu powinna być renderowana.weight
: liczba, która określa kolejność sortowania opcji. Opcje z większą wagą pojawiają się później w menu kontekstowym.id
: unikalny identyfikator ciągu znaków dla opcji.
Każda z funkcji callback
, displayText
(w przypadku funkcji) i preconditionFn
zostanie wywołana z obiektem Scope
zawierającym informacje o konkretnym obszarze roboczym lub klikniętym bloku. Dzięki temu opcja menu kontekstowego może się odwoływać do właściwości obszaru roboczego lub bloku. Na przykład opcja menu kontekstowego, która pozwala użytkownikowi usunąć wszystkie bloki, zawiera tekst „Usuń 42 bloki”, jeśli obszar roboczy zawiera 42 bloki. W przypadku elementu preconditionFn
opcja menu może mieć wartość enabled
, jeśli jakaś właściwość bloku ma wartość prawda, lub disabled
– w przeciwnym razie.
Więcej przykładów znajdziesz w pliku contextmenu_items.js, w którym możesz zobaczyć rejestrację domyślnych opcji menu kontekstowego.
Zmienianie i usuwanie opcji domyślnych
W Blockly.ContextMenuRegistry.registry.unregister(id)
możesz wyrejestrować dowolną opcję. Identyfikatory opcji domyślnych znajdziesz w pliku contextmenu_items.js.
Aby zmienić opcję domyślną, wywołaj funkcję getItem
za pomocą identyfikatora i w razie potrzeby zmień go.