@@ -37,6 +37,8 @@ import {transformMenu, fadeInItems} from './menu-animations';
3737} )
3838export class MdMenu implements AfterContentInit , MdMenuPanel , OnDestroy {
3939 private _keyManager : FocusKeyManager ;
40+ private _xPosition : MenuPositionX = 'after' ;
41+ private _yPosition : MenuPositionY = 'below' ;
4042
4143 /** Subscription to tab events on the menu panel */
4244 private _tabSubscription : Subscription ;
@@ -45,34 +47,38 @@ export class MdMenu implements AfterContentInit, MdMenuPanel, OnDestroy {
4547 _classList : any = { } ;
4648
4749 /** Position of the menu in the X axis. */
48- positionX : MenuPositionX = 'after' ;
50+ @Input ( )
51+ get xPosition ( ) { return this . _xPosition ; }
52+ set xPosition ( value : MenuPositionX ) {
53+ if ( value !== 'before' && value !== 'after' ) {
54+ throw new MdMenuInvalidPositionX ( ) ;
55+ }
56+ this . _xPosition = value ;
57+ this . setPositionClasses ( ) ;
58+ }
4959
5060 /** Position of the menu in the Y axis. */
51- positionY : MenuPositionY = 'below' ;
61+ @Input ( )
62+ get yPosition ( ) { return this . _yPosition ; }
63+ set yPosition ( value : MenuPositionY ) {
64+ if ( value !== 'above' && value !== 'below' ) {
65+ throw new MdMenuInvalidPositionY ( ) ;
66+ }
67+ this . _yPosition = value ;
68+ this . setPositionClasses ( ) ;
69+ }
5270
5371 @ViewChild ( TemplateRef ) templateRef : TemplateRef < any > ;
54- @ContentChildren ( MdMenuItem ) items : QueryList < MdMenuItem > ;
55- @Input ( ) overlapTrigger = true ;
5672
57- constructor ( @Attribute ( 'xPosition' ) posX : MenuPositionX ,
58- @Attribute ( 'yPosition' ) posY : MenuPositionY ,
59- @Attribute ( 'x-position' ) deprecatedPosX : MenuPositionX ,
60- @Attribute ( 'y-position' ) deprecatedPosY : MenuPositionY ) {
61-
62- // TODO(kara): Remove kebab-case attributes after next release
63- if ( deprecatedPosX ) { this . _setPositionX ( deprecatedPosX ) ; }
64- if ( deprecatedPosY ) { this . _setPositionY ( deprecatedPosY ) ; }
73+ /** List of the items inside of a menu. */
74+ @ContentChildren ( MdMenuItem ) items : QueryList < MdMenuItem > ;
6575
66- if ( posX ) { this . _setPositionX ( posX ) ; }
67- if ( posY ) { this . _setPositionY ( posY ) ; }
68- this . setPositionClasses ( this . positionX , this . positionY ) ;
69- }
76+ /** Whether the menu should overlap its trigger. */
77+ @Input ( ) overlapTrigger = true ;
7078
7179 ngAfterContentInit ( ) {
7280 this . _keyManager = new FocusKeyManager ( this . items ) . withWrap ( ) ;
73- this . _tabSubscription = this . _keyManager . tabOut . subscribe ( ( ) => {
74- this . _emitCloseEvent ( ) ;
75- } ) ;
81+ this . _tabSubscription = this . _keyManager . tabOut . subscribe ( ( ) => this . _emitCloseEvent ( ) ) ;
7682 }
7783
7884 ngOnDestroy ( ) {
@@ -93,7 +99,7 @@ export class MdMenu implements AfterContentInit, MdMenuPanel, OnDestroy {
9399 obj [ className ] = true ;
94100 return obj ;
95101 } , { } ) ;
96- this . setPositionClasses ( this . positionX , this . positionY ) ;
102+ this . setPositionClasses ( ) ;
97103 }
98104
99105 /** Event emitted when the menu is closed. */
@@ -115,29 +121,15 @@ export class MdMenu implements AfterContentInit, MdMenuPanel, OnDestroy {
115121 this . close . emit ( ) ;
116122 }
117123
118- private _setPositionX ( pos : MenuPositionX ) : void {
119- if ( pos !== 'before' && pos !== 'after' ) {
120- throw new MdMenuInvalidPositionX ( ) ;
121- }
122- this . positionX = pos ;
123- }
124-
125- private _setPositionY ( pos : MenuPositionY ) : void {
126- if ( pos !== 'above' && pos !== 'below' ) {
127- throw new MdMenuInvalidPositionY ( ) ;
128- }
129- this . positionY = pos ;
130- }
131-
132124 /**
133125 * It's necessary to set position-based classes to ensure the menu panel animation
134126 * folds out from the correct direction.
135127 */
136- setPositionClasses ( posX : MenuPositionX , posY : MenuPositionY ) : void {
137- this . _classList [ 'mat-menu-before' ] = posX == 'before' ;
138- this . _classList [ 'mat-menu-after' ] = posX == 'after' ;
139- this . _classList [ 'mat-menu-above' ] = posY == 'above' ;
140- this . _classList [ 'mat-menu-below' ] = posY == 'below' ;
128+ setPositionClasses ( posX = this . xPosition , posY = this . yPosition ) : void {
129+ this . _classList [ 'mat-menu-before' ] = posX === 'before' ;
130+ this . _classList [ 'mat-menu-after' ] = posX === 'after' ;
131+ this . _classList [ 'mat-menu-above' ] = posY === 'above' ;
132+ this . _classList [ 'mat-menu-below' ] = posY === 'below' ;
141133 }
142134
143135}
0 commit comments