Контекстные меню

Когда пользователь щелкает правой кнопкой мыши (или долго нажимает) на блоке или рабочей области, отображается контекстное меню с дополнительными действиями. Вы можете настроить это контекстное меню, чтобы отображать дополнительные параметры или удалять параметры по умолчанию. В этом руководстве рассказывается о добавлении пользовательской опции ко всем блокам или всем рабочим пространствам. Если вы хотите изменить контекстное меню только для одного типа блока, смотрите информацию на странице пользовательских блоков .

API контекстного меню

Класс ContextMenuRegistry содержит методы для регистрации, отмены регистрации и получения всех параметров контекстного меню. Класс является одноэлементным, поэтому методы следует вызывать для объекта Blockly.ContextMenuRegistry.registry , а не создавать экземпляр нового экземпляра самостоятельно. Класс ContextMenu вызывает метод getContextMenuItems всякий раз, когда необходимо отобразить контекстное меню. Если блок или рабочая область имеет функцию customContextMenu , она вызывается позже для изменения списка параметров.

Добавление пользовательских опций

Каждый пункт меню в реестре имеет несколько свойств:

  • callback : функция, вызываемая при выборе пункта меню.
  • scopeType : один из Blockly.ContextMenuRegistry.ScopeType.BLOCK или Blockly.ContextMenuRegistry.ScopeType.WORKSPACE , где должен отображаться этот параметр. Если опция должна отображаться как для рабочих областей, так и для блоков, ее следует зарегистрировать один раз для каждого типа области видимости.
  • displayText : либо строка, либо HTML, либо функция, возвращающая любой из первых. Определяет текст, отображаемый в меню.
  • preconditionFn : функция, которая возвращает одно из enabled , disabled или hidden , чтобы определить, должен ли и как отображаться пункт меню.
  • weight : число, определяющее порядок сортировки параметра. Опции с более высоким весом появятся позже в контекстном меню.
  • id : уникальный строковый идентификатор параметра.

Каждая из функций callback , displayText (если функция) и preconditionFn будет вызываться с объектом Scope , который содержит информацию о точной рабочей области или блоке, на который нажимают. Таким образом, ваш пункт контекстного меню может ссылаться на свойства рабочей области или блока. Например, опция контекстного меню, позволяющая пользователю удалить все блоки, гласит «Удалить 42 блока», если рабочая область содержит 42 блока. С помощью preconditionFn опция меню может быть enabled , если какое-либо свойство блока имеет значение true, или disabled в противном случае.

Дополнительные примеры вы можете увидеть в регистрации параметров контекстного меню по умолчанию в contextmenu_items.js .

Изменение или удаление параметров по умолчанию

Вы можете отменить регистрацию любого параметра с помощью Blockly.ContextMenuRegistry.registry.unregister(id) . Идентификаторы параметров по умолчанию находятся в contextmenu_items.js .

Чтобы изменить параметр по умолчанию, вызовите getItem с идентификатором и измените его по мере необходимости.