mirror of
https://github.com/atom/atom.git
synced 2026-01-23 22:08:08 -05:00
Merge pull request #10486 from atom/bf-fix-submenu-items
Honor `created()` function for an item in a submenu.
This commit is contained in:
@@ -156,3 +156,28 @@ describe "ContextMenuManager", ->
|
||||
catch error
|
||||
addError = error
|
||||
expect(addError.message).toContain('<>')
|
||||
|
||||
it "calls `created` hooks for submenu items", ->
|
||||
item = {
|
||||
label: 'A',
|
||||
command: 'B',
|
||||
submenu: [
|
||||
{
|
||||
label: 'C',
|
||||
created: (event) -> @label = 'D',
|
||||
}
|
||||
]
|
||||
}
|
||||
contextMenu.add('.grandchild': [item])
|
||||
|
||||
dispatchedEvent = {target: grandchild}
|
||||
expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual(
|
||||
[
|
||||
label: 'A',
|
||||
command: 'B',
|
||||
submenu: [
|
||||
{
|
||||
label: 'D',
|
||||
}
|
||||
]
|
||||
])
|
||||
|
||||
@@ -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((submenuItem) => @cloneItemForEvent(submenuItem, event))
|
||||
.filter((submenuItem) -> submenuItem isnt null)
|
||||
return item
|
||||
|
||||
convertLegacyItemsBySelector: (legacyItemsBySelector, devMode) ->
|
||||
itemsBySelector = {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user