Skip to content

Commit 941ef87

Browse files
committed
Rename menu-interface to menu-panel.
Added a test for triggering a custom menu.
1 parent 68e8c55 commit 941ef87

File tree

5 files changed

+66
-11
lines changed

5 files changed

+66
-11
lines changed

src/lib/menu/menu-directive.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {MenuPositionX, MenuPositionY} from './menu-positions';
1616
import {MdMenuInvalidPositionX, MdMenuInvalidPositionY} from './menu-errors';
1717
import {MdMenuItem} from './menu-item';
1818
import {UP_ARROW, DOWN_ARROW, TAB} from '../core';
19-
import {MdMenuInterface} from './menu-interface';
19+
import {MdMenuPanel} from './menu-panel';
2020

2121
@Component({
2222
moduleId: module.id,
@@ -27,7 +27,7 @@ import {MdMenuInterface} from './menu-interface';
2727
encapsulation: ViewEncapsulation.None,
2828
exportAs: 'mdMenu'
2929
})
30-
export class MdMenu implements MdMenuInterface {
30+
export class MdMenu implements MdMenuPanel {
3131
private _focusedItemIndex: number = 0;
3232

3333
// config object to be passed into the menu's ngClass

src/lib/menu/menu-interface.ts renamed to src/lib/menu/menu-panel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {EventEmitter, TemplateRef} from '@angular/core';
22
import {MenuPositionX, MenuPositionY} from './menu-positions';
33

4-
export interface MdMenuInterface {
4+
export interface MdMenuPanel {
55
positionX: MenuPositionX;
66
positionY: MenuPositionY;
77
templateRef: TemplateRef<any>;

src/lib/menu/menu-trigger.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
OnDestroy,
1111
Renderer
1212
} from '@angular/core';
13-
import {MdMenuInterface} from './menu-interface';
13+
import {MdMenuPanel} from './menu-panel';
1414
import {MdMenuMissingError} from './menu-errors';
1515
import {
1616
ENTER,
@@ -47,7 +47,7 @@ export class MdMenuTrigger implements AfterViewInit, OnDestroy {
4747
// the first item of the list when the menu is opened via the keyboard
4848
private _openedFromKeyboard: boolean = false;
4949

50-
@Input('md-menu-trigger-for') menu: MdMenuInterface;
50+
@Input('md-menu-trigger-for') menu: MdMenuPanel;
5151
@Output() onMenuOpen = new EventEmitter();
5252
@Output() onMenuClose = new EventEmitter();
5353

src/lib/menu/menu.spec.ts

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
import {TestBed, async} from '@angular/core/testing';
2-
import {Component, ViewChild} from '@angular/core';
3-
import {MdMenuModule, MdMenuTrigger} from './menu';
2+
import {
3+
Component,
4+
EventEmitter,
5+
Output,
6+
TemplateRef,
7+
ViewChild
8+
} from '@angular/core';
9+
import {
10+
MdMenuModule,
11+
MdMenuTrigger,
12+
MdMenuPanel,
13+
MenuPositionX,
14+
MenuPositionY
15+
} from './menu';
416
import {OverlayContainer} from '../core/overlay/overlay-container';
517

618

@@ -10,7 +22,7 @@ describe('MdMenu', () => {
1022
beforeEach(async(() => {
1123
TestBed.configureTestingModule({
1224
imports: [MdMenuModule.forRoot()],
13-
declarations: [SimpleMenu],
25+
declarations: [CustomMenuPanel, CustomMenu, SimpleMenu],
1426
providers: [
1527
{provide: OverlayContainer, useFactory: () => {
1628
overlayContainerElement = document.createElement('div');
@@ -30,7 +42,7 @@ describe('MdMenu', () => {
3042
fixture.componentInstance.trigger.openMenu();
3143
fixture.componentInstance.trigger.openMenu();
3244

33-
expect(overlayContainerElement.textContent.trim()).toBe('Content');
45+
expect(overlayContainerElement.textContent.trim()).toBe('Simple Content');
3446
}).not.toThrowError();
3547
});
3648

@@ -46,16 +58,59 @@ describe('MdMenu', () => {
4658
expect(overlayContainerElement.textContent).toBe('');
4759
});
4860

61+
it('should open a custom menu', () => {
62+
const fixture = TestBed.createComponent(CustomMenu);
63+
fixture.detectChanges();
64+
expect(overlayContainerElement.textContent).toBe('');
65+
expect(() => {
66+
fixture.componentInstance.trigger.openMenu();
67+
fixture.componentInstance.trigger.openMenu();
68+
69+
expect(overlayContainerElement.textContent).toContain('Custom Menu header');
70+
expect(overlayContainerElement.textContent).toContain('Custom Content');
71+
}).not.toThrowError();
72+
});
73+
4974
});
5075

5176
@Component({
5277
template: `
5378
<button [md-menu-trigger-for]="menu">Toggle menu</button>
5479
<md-menu #menu="mdMenu">
55-
<button md-menu-item> Content </button>
80+
<button md-menu-item> Simple Content </button>
5681
</md-menu>
5782
`
5883
})
5984
class SimpleMenu {
6085
@ViewChild(MdMenuTrigger) trigger: MdMenuTrigger;
6186
}
87+
88+
@Component({
89+
selector: 'custom-menu',
90+
template: `
91+
<template>
92+
Custom Menu header
93+
<ng-content></ng-content>
94+
</template>
95+
`,
96+
exportAs: 'mdCustomMenu'
97+
})
98+
class CustomMenuPanel implements MdMenuPanel {
99+
positionX: MenuPositionX = 'after';
100+
positionY: MenuPositionY = 'below';
101+
@ViewChild(TemplateRef) templateRef: TemplateRef<any>;
102+
@Output() close = new EventEmitter<void>();
103+
_focusFirstItem: () => void;
104+
}
105+
106+
@Component({
107+
template: `
108+
<button [md-menu-trigger-for]="menu">Toggle menu</button>
109+
<custom-menu #menu="mdCustomMenu">
110+
<button md-menu-item> Custom Content </button>
111+
</custom-menu>
112+
`
113+
})
114+
class CustomMenu {
115+
@ViewChild(MdMenuTrigger) trigger: MdMenuTrigger;
116+
}

src/lib/menu/menu.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {MdMenuTrigger} from './menu-trigger';
77
export {MdMenu} from './menu-directive';
88
export {MdMenuItem} from './menu-item';
99
export {MdMenuTrigger} from './menu-trigger';
10-
export {MdMenuInterface} from './menu-interface';
10+
export {MdMenuPanel} from './menu-panel';
1111
export {MenuPositionX, MenuPositionY} from './menu-positions';
1212

1313

0 commit comments

Comments
 (0)