Remove all redundant separators

This commit is contained in:
Damien Guard
2016-08-25 12:49:29 -07:00
parent d44dbb373d
commit 0f88949832
2 changed files with 53 additions and 4 deletions

View File

@@ -149,7 +149,7 @@ describe "ContextMenuManager", ->
shouldDisplay = false
expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual []
it "prunes a trailing separator", ->
fit "prunes a trailing separator", ->
contextMenu.add
'.grandchild': [
{label: 'A', command: 'a'},
@@ -160,6 +160,44 @@ describe "ContextMenuManager", ->
expect(contextMenu.templateForEvent({target: grandchild}).length).toBe(3)
fit "prunes a leading separator", ->
contextMenu.add
'.grandchild': [
{type: 'separator'},
{label: 'A', command: 'a'},
{type: 'separator'},
{label: 'B', command: 'b'}
]
expect(contextMenu.templateForEvent({target: grandchild}).length).toBe(3)
fit "prunes duplicate separators", ->
contextMenu.add
'.grandchild': [
{label: 'A', command: 'a'},
{type: 'separator'},
{type: 'separator'},
{label: 'B', command: 'b'}
]
expect(contextMenu.templateForEvent({target: grandchild}).length).toBe(3)
fit "prunes all redundant separators", ->
contextMenu.add
'.grandchild': [
{type: 'separator'},
{type: 'separator'},
{label: 'A', command: 'a'},
{type: 'separator'},
{type: 'separator'},
{label: 'B', command: 'b'}
{label: 'C', command: 'c'}
{type: 'separator'},
{type: 'separator'},
]
expect(contextMenu.templateForEvent({target: grandchild}).length).toBe(4)
it "throws an error when the selector is invalid", ->
addError = null
try

View File

@@ -145,12 +145,23 @@ class ContextMenuManager
currentTarget = currentTarget.parentElement
# Remove trailing separator
if template.length > 0 and template[template.length - 1].type is 'separator'
template.splice(template.length-1, 1)
@pruneRedundantSeparators(template)
template
pruneRedundantSeparators: (menu) ->
keepNextItemIfSeparator = false
index = 0
while index < menu.length
if menu[index].type is 'separator'
if not keepNextItemIfSeparator or index is menu.length - 1
menu.splice(index, 1)
else
index++
else
keepNextItemIfSeparator = true
index++
# Returns an object compatible with `::add()` or `null`.
cloneItemForEvent: (item, event) ->
return null if item.devMode and not @devMode