Skip to content
This repository was archived by the owner on Sep 5, 2024. It is now read-only.

Commit 1e4ba35

Browse files
crisbetokara
authored andcommitted
feat(menu): expose close method on element scope; deprecate $mdOpenMenu (#9193)
* Deprecates the `$mdOpenMenu` method in favor of `$mdMenu.open` in order to simplify the API. * Exposes the `$mdMenu.close` method on the menu's scope, allowing for custom closing behavior. Fixes #8446.
1 parent 9e0c30e commit 1e4ba35

File tree

15 files changed

+113
-58
lines changed

15 files changed

+113
-58
lines changed

src/components/list/list.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ function mdListItemDirective($mdAria, $mdConstant, $mdUtil, $timeout) {
295295
// When the proxy item is aligned at the end of the list, we have to set the origin to the end.
296296
xAxisPosition = 'right';
297297
}
298-
298+
299299
// Set the position mode / origin of the proxied menu.
300300
if (!menuEl.attr('md-position-mode')) {
301301
menuEl.attr('md-position-mode', xAxisPosition + ' target');
@@ -304,7 +304,7 @@ function mdListItemDirective($mdAria, $mdConstant, $mdUtil, $timeout) {
304304
// Apply menu open binding to menu button
305305
var menuOpenButton = menuEl.children().eq(0);
306306
if (!hasClickEvent(menuOpenButton[0])) {
307-
menuOpenButton.attr('ng-click', '$mdOpenMenu($event)');
307+
menuOpenButton.attr('ng-click', '$mdMenu.open($event)');
308308
}
309309

310310
if (!menuOpenButton.attr('aria-label')) {

src/components/list/list.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ describe('mdListItem directive', function() {
294294

295295
// The actual click button will be a child of the button.md-no-style wrapper.
296296
var buttonExecutor = buttonWrap.children()[0];
297-
297+
298298
expect(buttonExecutor.nodeName).toBe('MD-BUTTON');
299299
expect(buttonExecutor.getAttribute('aria-label')).toBe('Hello');
300300
});
@@ -497,7 +497,7 @@ describe('mdListItem directive', function() {
497497

498498
var mdMenuButton = listItem[0].querySelector('md-menu > md-button');
499499

500-
expect(mdMenuButton.getAttribute('ng-click')).toBe('$mdOpenMenu($event)');
500+
expect(mdMenuButton.getAttribute('ng-click')).toBe('$mdMenu.open($event)');
501501
});
502502
});
503503

src/components/menu/demoBasicUsage/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ <h2 class="md-title">Simple dropdown menu</h2>
55
<p>Applying the <code>md-menu-origin</code> and <code>md-menu-align-target</code> attributes ensure that the menu elements align.
66
Note: If you select the Redial menu option, then a modal dialog will zoom out of the phone icon button.</p>
77
<md-menu>
8-
<md-button aria-label="Open phone interactions menu" class="md-icon-button" ng-click="ctrl.openMenu($mdOpenMenu, $event)">
8+
<md-button aria-label="Open phone interactions menu" class="md-icon-button" ng-click="ctrl.openMenu($mdMenu, $event)">
99
<md-icon md-menu-origin md-svg-icon="call:phone"></md-icon>
1010
</md-button>
1111
<md-menu-content width="4">

src/components/menu/demoBasicUsage/script.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ angular
88
.controller('BasicDemoCtrl', function DemoCtrl($mdDialog) {
99
var originatorEv;
1010

11-
this.openMenu = function($mdOpenMenu, ev) {
11+
this.openMenu = function($mdMenu, ev) {
1212
originatorEv = ev;
13-
$mdOpenMenu(ev);
13+
$mdMenu.open(ev);
1414
};
1515

1616
this.notificationsEnabled = true;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<div class="md-menu-demo" ng-cloak>
2+
<div class="menu-demo-container" layout-align="center center" layout="column">
3+
<h2 class="md-title">Custom triggers</h2>
4+
<p>
5+
You can customize the events that open and close a menu by using the <code>$mdMenu.open</code> and
6+
<code>$mdMenu.close</code> methods. This is an example of triggering a menu on hover, instead of click.
7+
</p>
8+
9+
<md-menu>
10+
<md-button aria-label="Open menu with custom trigger" class="md-icon-button" ng-mouseenter="$mdMenu.open()">
11+
<md-icon md-menu-origin md-svg-icon="call:textsms"></md-icon>
12+
</md-button>
13+
<md-menu-content width="4" ng-mouseleave="$mdMenu.close()">
14+
<md-menu-item ng-repeat="item in [1, 2, 3]">
15+
<md-button>
16+
Option {{item}}
17+
</md-button>
18+
</md-menu-item>
19+
</md-menu>
20+
</div>
21+
</div>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
angular
2+
.module('menuDemoCustomTrigger', ['ngMaterial'])
3+
.config(function($mdIconProvider) {
4+
$mdIconProvider
5+
.iconSet('call', 'img/icons/sets/communication-icons.svg', 24);
6+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.md-menu-demo {
2+
padding: 24px;
3+
}
4+
5+
.menu-demo-container {
6+
min-height: 200px;
7+
}

src/components/menu/demoMenuPositionModes/index.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ <h2 class="md-title">Position Mode Demos</h2>
88
<div layout="column" flex-xs="100" flex-sm="100" flex="33" layout-align="center center">
99
<p>Target Mode Positioning (default)</p>
1010
<md-menu>
11-
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
11+
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdMenu.open($event)">
1212
<md-icon md-menu-origin md-svg-icon="call:business"></md-icon>
1313
</md-button>
1414
<md-menu-content width="6">
1515
<md-menu-item ng-repeat="item in [1, 2, 3]">
1616
<md-button ng-click="ctrl.announceClick($index)">
1717
<md-icon md-menu-align-target md-svg-icon="call:no-sim"></md-icon>
18-
Option {{item}}
18+
Option {{item}}
1919
</md-button>
2020
</md-menu-item>
2121
</md-menu-content>
@@ -24,7 +24,7 @@ <h2 class="md-title">Position Mode Demos</h2>
2424
<div layout="column" flex-xs="100" flex-sm="100" flex="33" layout-align="center center">
2525
<p>Target mode with <code>md-offset</code></p>
2626
<md-menu md-offset="0 -5">
27-
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="ctrl.openMenu($mdOpenMenu, $event)">
27+
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="ctrl.openMenu($mdMenu, $event)">
2828
<md-icon md-menu-origin md-svg-icon="call:ring-volume"></md-icon>
2929
</md-button>
3030
<md-menu-content width="4">
@@ -37,7 +37,7 @@ <h2 class="md-title">Position Mode Demos</h2>
3737
<div layout="column" flex-xs="100" flex-sm="100" flex="33" layout-align="center center">
3838
<p><code>md-position-mode="target-right target"</code></p>
3939
<md-menu md-position-mode="target-right target" >
40-
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
40+
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdMenu.open($event)">
4141
<md-icon md-menu-origin md-svg-icon="call:portable-wifi-off"></md-icon>
4242
</md-button>
4343
<md-menu-content width="4" >

src/components/menu/demoMenuPositionModes/script.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ angular
77
})
88
.controller('PositionDemoCtrl', function DemoCtrl($mdDialog) {
99
var originatorEv;
10-
10+
1111
this.menuHref = "http://www.google.com/design/spec/components/menus.html#menus-specs";
1212

13-
this.openMenu = function($mdOpenMenu, ev) {
13+
this.openMenu = function($mdMenu, ev) {
1414
originatorEv = ev;
15-
$mdOpenMenu(ev);
15+
$mdMenu.open(ev);
1616
};
1717

1818
this.announceClick = function(index) {

src/components/menu/demoMenuWidth/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ <h2 class="md-title">Different Widths</h2>
1111
<div layout="column" flex="33" flex-sm="100" flex-xs="100" layout-align="center center">
1212
<p>Wide menu (<code>width=6</code>)</p>
1313
<md-menu md-offset="0 -7">
14-
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
14+
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdMenu.open($event)">
1515
<md-icon md-menu-origin md-svg-icon="call:phone"></md-icon>
1616
</md-button>
1717
<md-menu-content width="6">
@@ -24,7 +24,7 @@ <h2 class="md-title">Different Widths</h2>
2424
<div layout="column" flex="33" flex-sm="100" flex-xs="100" layout-align="center center">
2525
<p>Medium menu (<code>width=4</code>)</p>
2626
<md-menu md-offset="0 -7">
27-
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
27+
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdMenu.open($event)">
2828
<md-icon md-menu-origin md-svg-icon="call:email"></md-icon>
2929
</md-button>
3030
<md-menu-content width="4">
@@ -37,7 +37,7 @@ <h2 class="md-title">Different Widths</h2>
3737
<div layout="column" flex="33" flex-sm="100" flex-xs="100" layout-align="center center">
3838
<p>Small menu (<code>width=2</code>)</p>
3939
<md-menu md-offset="0 -7">
40-
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
40+
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdMenu.open($event)">
4141
<md-icon md-menu-origin md-svg-icon="call:chat"></md-icon>
4242
</md-button>
4343
<md-menu-content width="2">

0 commit comments

Comments
 (0)