diff options
| author | Vojta Jina | 2011-10-12 13:58:08 -0700 | 
|---|---|---|
| committer | Igor Minar | 2011-10-13 11:10:19 -0700 | 
| commit | afc81b554ede0818e64a6971d4f409bdc2c42272 (patch) | |
| tree | 99bd5bf5bae6891970b4034145139517d6532090 | |
| parent | 26e8ab3693eb0ad388247ae5c35cd52eaa709b0c (diff) | |
| download | angular.js-afc81b554ede0818e64a6971d4f409bdc2c42272.tar.bz2 | |
fix($location): do not rewrite link when meta key pressed
| -rw-r--r-- | src/service/location.js | 3 | ||||
| -rw-r--r-- | test/service/locationSpec.js | 54 | 
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(); +      }); +    }    });  }); | 
