diff --git a/src/context-menu-manager.coffee b/src/context-menu-manager.coffee index 869076beb..88cdc67b2 100644 --- a/src/context-menu-manager.coffee +++ b/src/context-menu-manager.coffee @@ -136,12 +136,9 @@ class ContextMenuManager for itemSet in matchingItemSets for item in itemSet.items - continue if item.devMode and not @devMode - item = Object.create(item) - if typeof item.shouldDisplay is 'function' - continue unless item.shouldDisplay(event) - item.created?(event) - MenuHelpers.merge(currentTargetItems, item, itemSet.specificity) + itemForEvent = @cloneItemForEvent(item, event) + if itemForEvent + MenuHelpers.merge(currentTargetItems, itemForEvent, itemSet.specificity) for item in currentTargetItems MenuHelpers.merge(template, item, false) @@ -150,6 +147,19 @@ class ContextMenuManager template + # Returns an object compatible with `::add()` or `null`. + cloneItemForEvent: (item, event) -> + return null if item.devMode and not @devMode + item = Object.create(item) + if typeof item.shouldDisplay is 'function' + return null unless item.shouldDisplay(event) + item.created?(event) + if Array.isArray(item.submenu) + item.submenu = item.submenu + .map((item) => @cloneItemForEvent(item, event)) + .filter((item) -> item isnt null) + return item + convertLegacyItemsBySelector: (legacyItemsBySelector, devMode) -> itemsBySelector = {}