Add position attribute for menu items

This commit adds a position attribute for menu items defined in menu
templates. When the final menu is built the position attribute is used
to determine menu item positions in a similar design to how Eclipse
positions menu items.
This commit is contained in:
Jesse Grosjean 2015-04-07 11:14:28 -04:00
parent 3ae604ca4e
commit c8a3c14a8c
3 changed files with 160 additions and 2 deletions

View file

@ -10,6 +10,80 @@ describe 'menu module', ->
menu = Menu.buildFromTemplate [label: 'text', extra: 'field']
assert.equal menu.items[0].extra, 'field'
describe 'Menu.buildFromTemplate should reorder based on item position specifiers', ->
it 'should position before existing item', ->
menu = Menu.buildFromTemplate [
{label: '2', id: '2'}
{label: '3', id: '3'}
{label: '1', id: '1', position: 'before=2'}
]
assert.equal menu.items[0].label, '1'
assert.equal menu.items[1].label, '2'
assert.equal menu.items[2].label, '3'
it 'should position after existing item', ->
menu = Menu.buildFromTemplate [
{label: '1', id: '1'}
{label: '3', id: '3'}
{label: '2', id: '2', position: 'after=1'}
]
assert.equal menu.items[0].label, '1'
assert.equal menu.items[1].label, '2'
assert.equal menu.items[2].label, '3'
it 'should position at endof existing separator groups', ->
menu = Menu.buildFromTemplate [
{type: 'separator', id: 'numbers'}
{type: 'separator', id: 'letters'}
{label: 'a', id: 'a', position: 'endof=letters'}
{label: '1', id: '1', position: 'endof=numbers'}
{label: 'b', id: 'b', position: 'endof=letters'}
{label: '2', id: '2', position: 'endof=numbers'}
{label: 'c', id: 'c', position: 'endof=letters'}
{label: '3', id: '3', position: 'endof=numbers'}
]
assert.equal menu.items[0].id, 'numbers'
assert.equal menu.items[1].label, '1'
assert.equal menu.items[2].label, '2'
assert.equal menu.items[3].label, '3'
assert.equal menu.items[4].id, 'letters'
assert.equal menu.items[5].label, 'a'
assert.equal menu.items[6].label, 'b'
assert.equal menu.items[7].label, 'c'
it 'should create separator group if endof does not reference existing separator group', ->
menu = Menu.buildFromTemplate [
{label: 'a', id: 'a', position: 'endof=letters'}
{label: '1', id: '1', position: 'endof=numbers'}
{label: 'b', id: 'b', position: 'endof=letters'}
{label: '2', id: '2', position: 'endof=numbers'}
{label: 'c', id: 'c', position: 'endof=letters'}
{label: '3', id: '3', position: 'endof=numbers'}
]
assert.equal menu.items[0].id, 'letters'
assert.equal menu.items[1].label, 'a'
assert.equal menu.items[2].label, 'b'
assert.equal menu.items[3].label, 'c'
assert.equal menu.items[4].id, 'numbers'
assert.equal menu.items[5].label, '1'
assert.equal menu.items[6].label, '2'
assert.equal menu.items[7].label, '3'
it 'should continue inserting items at next index when no specifier is present', ->
menu = Menu.buildFromTemplate [
{label: '4', id: '4'}
{label: '5', id: '5'}
{label: '1', id: '1', position: 'before=4'}
{label: '2', id: '2'}
{label: '3', id: '3'}
]
assert.equal menu.items[0].label, '1'
assert.equal menu.items[1].label, '2'
assert.equal menu.items[2].label, '3'
assert.equal menu.items[3].label, '4'
assert.equal menu.items[4].label, '5'
describe 'Menu.insert', ->
it 'should store item in @items by its index', ->
menu = Menu.buildFromTemplate [