fix($location): do not rewrite link when meta key pressed

This commit is contained in:
Vojta Jina 2011-10-12 13:58:08 -07:00 committed by Igor Minar
parent 26e8ab3693
commit afc81b554e
2 changed files with 42 additions and 15 deletions

View file

@ -442,7 +442,8 @@ angularServiceInject('$location', function($browser, $sniffer, $config, $documen
// TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)
// currently we open nice url link and redirect then
if (uppercase(event.target.nodeName) != 'A' || event.ctrlKey || event.which == 2) return;
if (uppercase(event.target.nodeName) != 'A' || event.ctrlKey || event.metaKey ||
event.which == 2) return;
var elm = jqLite(event.target),
href = elm.attr('href');

View file

@ -584,14 +584,12 @@ describe('$location', function() {
});
}
function triggerAndExpectRewriteTo(url) {
browserTrigger(link, 'click');
function expectRewriteTo(url) {
expect(lastEventPreventDefault).toBe(true);
expect($browser.url()).toBe(url);
}
function triggerAndExpectNoRewrite() {
browserTrigger(link, 'click');
function expectNoRewrite() {
expect(lastEventPreventDefault).toBe(false);
expect($browser.url()).toBe(originalBrowser);
}
@ -604,61 +602,89 @@ describe('$location', function() {
it('should rewrite rel link to new url when history enabled on new browser', function() {
init('link?a#b', true, true);
triggerAndExpectRewriteTo('http://host.com/base/link?a#b');
browserTrigger(link, 'click');
expectRewriteTo('http://host.com/base/link?a#b');
});
it('should rewrite abs link to new url when history enabled on new browser', function() {
init('/base/link?a#b', true, true);
triggerAndExpectRewriteTo('http://host.com/base/link?a#b');
browserTrigger(link, 'click');
expectRewriteTo('http://host.com/base/link?a#b');
});
it('should rewrite rel link to hashbang url when history enabled on old browser', function() {
init('link?a#b', true, false);
triggerAndExpectRewriteTo('http://host.com/base/index.html#!/link?a#b');
browserTrigger(link, 'click');
expectRewriteTo('http://host.com/base/index.html#!/link?a#b');
});
it('should rewrite abs link to hashbang url when history enabled on old browser', function() {
init('/base/link?a#b', true, false);
triggerAndExpectRewriteTo('http://host.com/base/index.html#!/link?a#b');
browserTrigger(link, 'click');
expectRewriteTo('http://host.com/base/index.html#!/link?a#b');
});
it('should not rewrite when history disabled', function() {
init('#new', false);
triggerAndExpectNoRewrite();
browserTrigger(link, 'click');
expectNoRewrite();
});
it('should not rewrite ng:ext-link', function() {
init('#new', true, true, 'ng:ext-link');
triggerAndExpectNoRewrite();
browserTrigger(link, 'click');
expectNoRewrite();
});
it('should not rewrite full url links do different domain', function() {
init('http://www.dot.abc/a?b=c', true);
triggerAndExpectNoRewrite();
browserTrigger(link, 'click');
expectNoRewrite();
});
it('should not rewrite links with target="_blank"', function() {
init('/a?b=c', true, true, 'target="_blank"');
triggerAndExpectNoRewrite();
browserTrigger(link, 'click');
expectNoRewrite();
});
it('should not rewrite links with target specified', function() {
init('/a?b=c', true, true, 'target="some-frame"');
triggerAndExpectNoRewrite();
browserTrigger(link, 'click');
expectNoRewrite();
});
it('should rewrite full url links to same domain and base path', function() {
init('http://host.com/base/new', true);
triggerAndExpectRewriteTo('http://host.com/base/index.html#!/new');
browserTrigger(link, 'click');
expectRewriteTo('http://host.com/base/index.html#!/new');
});
// don't run next tests on IE<9, as browserTrigger does not simulate pressed keys
if (!(msie < 9)) {
it('should not rewrite when clicked with ctrl pressed', function() {
init('/a?b=c', true, true);
browserTrigger(link, 'click', ['ctrl']);
expectNoRewrite();
});
it('should not rewrite when clicked with meta pressed', function() {
init('/a?b=c', true, true);
browserTrigger(link, 'click', ['meta']);
expectNoRewrite();
});
}
});
});