Menu kontekstowe

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ści Blockly.ContextMenuRegistry.ScopeType.BLOCK lub Blockly.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ści enabled, disabled lub hidden, 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.