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

Commit dc01149

Browse files
committed
fix(menu): make menu close with ui-sref and ng-href
closes #3397
1 parent 0d6e5ac commit dc01149

File tree

2 files changed

+42
-51
lines changed

2 files changed

+42
-51
lines changed

src/components/menu/menu-interim-element.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ function MenuProvider($$interimElementProvider) {
150150
// there is an ng-click and that the ng-click is not disabled
151151
do {
152152
if (target == opts.menuContentEl[0]) return;
153-
if (hasAnyAttribute(target, ['ng-click', 'data-ng-click', 'x-ng-click'])) {
153+
if (hasAnyAttribute(target, ['ng-click', 'ng-href', 'ui-sref'])) {
154154
if (!target.hasAttribute('disabled')) {
155155
close();
156156
}
@@ -167,8 +167,11 @@ function MenuProvider($$interimElementProvider) {
167167
function hasAnyAttribute(target, attrs) {
168168
if (!target) return false;
169169
for (var i = 0, attr; attr = attrs[i]; ++i) {
170-
if (target.hasAttribute(attr)) {
171-
return true;
170+
var altForms = [attr, 'data-' + attr, 'x-' + attr];
171+
for (var j = 0, rawAttr; rawAttr = altForms[j]; ++j) {
172+
if (target.hasAttribute(rawAttr)) {
173+
return true;
174+
}
172175
}
173176
}
174177
return false;

src/components/menu/menu.spec.js

Lines changed: 36 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ describe('md-menu directive', function () {
7272
expect(getOpenMenuContainer().length).toBe(0);
7373
}));
7474

75-
describe('closes with ng-click', function() {
75+
ddescribe('closes with -', function() {
7676
it('closes on normal option click', function () {
7777
expect(getOpenMenuContainer().length).toBe(0);
7878

@@ -91,53 +91,41 @@ describe('md-menu directive', function () {
9191
expect(getOpenMenuContainer().length).toBe(0);
9292
});
9393

94-
it('closes with data-ng-click', inject(function($rootScope, $compile) {
95-
expect(getOpenMenuContainer().length).toBe(0);
96-
97-
var template = '' +
98-
'<md-menu>' +
99-
' <button ng-click="$mdOpenMenu($event)">Hello World</button>' +
100-
' <md-menu-content>' +
101-
' <md-menu-item>' +
102-
' <md-button data-ng-click="doSomething($event)"></md-button>' +
103-
' </md-menu-item>' +
104-
' </md-menu-content>' +
105-
'</md-menu>';
106-
107-
openMenu($compile(template)($rootScope));
108-
expect(getOpenMenuContainer().length).toBe(1);
109-
110-
var btn = getOpenMenuContainer()[0].querySelector('md-button');
111-
btn.click();
112-
113-
waitForMenuClose();
114-
115-
expect(getOpenMenuContainer().length).toBe(0);
116-
}));
117-
118-
it('closes with x-ng-click', inject(function($rootScope, $compile) {
119-
expect(getOpenMenuContainer().length).toBe(0);
120-
121-
var template = '' +
122-
'<md-menu>' +
123-
' <button ng-click="$mdOpenMenu($event)">Hello World</button>' +
124-
' <md-menu-content>' +
125-
' <md-menu-item>' +
126-
' <md-button x-ng-click="doSomething($event)"></md-button>' +
127-
' </md-menu-item>' +
128-
' </md-menu-content>' +
129-
'</md-menu>';
130-
131-
openMenu($compile(template)($rootScope));
132-
expect(getOpenMenuContainer().length).toBe(1);
133-
134-
var btn = getOpenMenuContainer()[0].querySelector('md-button');
135-
btn.click();
136-
137-
waitForMenuClose();
138-
139-
expect(getOpenMenuContainer().length).toBe(0);
140-
}));
94+
itClosesWithAttributes([
95+
'data-ng-click', 'x-ng-click',
96+
'ui-sref','data-ui-sref', 'x-ui-sref',
97+
'ng-href', 'data-ng-href', 'x-ng-href'
98+
]);
99+
100+
function itClosesWithAttributes(types) {
101+
for (var i = 0; i < types.length; ++i) {
102+
it('closes with ' + types[i], testAttribute(types[i]));
103+
}
104+
105+
function testAttribute(attr) {
106+
return inject(function($rootScope, $compile) {
107+
var template = '' +
108+
'<md-menu>' +
109+
' <button ng-click="$mdOpenMenu($event)">Hello World</button>' +
110+
' <md-menu-content>' +
111+
' <md-menu-item>' +
112+
' <md-button ' + attr + '=""></md-button>' +
113+
' </md-menu-item>' +
114+
' </md-menu-content>' +
115+
'</md-menu>';
116+
117+
openMenu($compile(template)($rootScope));
118+
expect(getOpenMenuContainer().length).toBe(1);
119+
120+
var btn = getOpenMenuContainer()[0].querySelector('md-button');
121+
btn.click();
122+
123+
waitForMenuClose();
124+
125+
expect(getOpenMenuContainer().length).toBe(0);
126+
});
127+
}
128+
}
141129
});
142130

143131
// ********************************************

0 commit comments

Comments
 (0)