diff --git a/lib/browser/api/menu-utils.js b/lib/browser/api/menu-utils.js index 74682d748334..42636bf7da50 100644 --- a/lib/browser/api/menu-utils.js +++ b/lib/browser/api/menu-utils.js @@ -17,10 +17,15 @@ function splitArray (arr, predicate) { return result } -function joinArrays (arrays, joiner) { +function joinArrays (arrays, joinIDs) { return arrays.reduce((joined, arr, i) => { if (i > 0 && arr.length) { - joined.push(joiner) + if (joinIDs.length > 0) { + joined.push(joinIDs[0]) + joinIDs.splice(0, 1) + } else { + joined.push({ type: 'separator' }) + } } return joined.concat(arr) }, []) @@ -156,6 +161,7 @@ function sortGroups (groups) { function sortMenuItems (menuItems) { const isSeparator = (item) => item.type === 'separator' + const separators = menuItems.filter(i => i.type === 'separator') // Split the items into their implicit groups based upon separators. const groups = splitArray(menuItems, isSeparator) @@ -163,7 +169,7 @@ function sortMenuItems (menuItems) { const mergedGroupsWithSortedItems = mergedGroups.map(sortItemsInGroup) const sortedGroups = sortGroups(mergedGroupsWithSortedItems) - const joined = joinArrays(sortedGroups, { type: 'separator' }) + const joined = joinArrays(sortedGroups, separators) return joined } diff --git a/spec/api-menu-spec.js b/spec/api-menu-spec.js index d5f092c3509b..8693290523a2 100644 --- a/spec/api-menu-spec.js +++ b/spec/api-menu-spec.js @@ -591,6 +591,26 @@ describe('Menu module', () => { const fsc = menu.getMenuItemById('fullScreen') expect(menu.items[0].submenu.items[0]).to.equal(fsc) }) + + it('should return the separator with the given id', () => { + const menu = Menu.buildFromTemplate([ + { + label: 'Item 1', + id: 'item_1' + }, + { + id: 'separator', + type: 'separator' + }, + { + label: 'Item 2', + id: 'item_2' + } + ]) + const separator = menu.getMenuItemById('separator') + expect(separator).to.be.an('object') + expect(separator).to.equal(menu.items[1]) + }) }) describe('Menu.insert', () => {