aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVojta Jina2011-10-12 13:58:08 -0700
committerIgor Minar2011-10-13 11:10:19 -0700
commitafc81b554ede0818e64a6971d4f409bdc2c42272 (patch)
tree99bd5bf5bae6891970b4034145139517d6532090
parent26e8ab3693eb0ad388247ae5c35cd52eaa709b0c (diff)
downloadangular.js-afc81b554ede0818e64a6971d4f409bdc2c42272.tar.bz2
fix($location): do not rewrite link when meta key pressed
-rw-r--r--src/service/location.js3
-rw-r--r--test/service/locationSpec.js54
2 files changed, 42 insertions, 15 deletions
diff --git a/src/service/location.js b/src/service/location.js
index de359220..356dfc21 100644
--- a/src/service/location.js
+++ b/src/service/location.js
@@ -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');
diff --git a/test/service/locationSpec.js b/test/service/locationSpec.js
index 70319af7..6cf302fe 100644
--- a/test/service/locationSpec.js
+++ b/test/service/locationSpec.js
@@ -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();
+ });
+ }
});
});