From ff309cf024e7cb89124d2aeeaaf730ecfd1cde0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Tue, 30 Apr 2013 15:48:58 +0200 Subject: [PATCH] FIX: shift+click on links Default browser's behavior when shift+clicking was messed up. This adds the shift key modifier to the list of click modifiers in both `click_track` and `discourse`. Also updated & refactored a bit the `click_track_spec`. --- app/assets/javascripts/discourse.js | 2 +- .../discourse/components/click_track.js | 2 +- .../components/click_track_spec.js | 21 ++++++++++++------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/discourse.js b/app/assets/javascripts/discourse.js index 5fa3a5834f5..55d4dce31aa 100644 --- a/app/assets/javascripts/discourse.js +++ b/app/assets/javascripts/discourse.js @@ -129,7 +129,7 @@ Discourse = Ember.Application.createWithMixins({ }); $('#main').on('click.discourse', 'a', function(e) { - if (e.isDefaultPrevented() || e.metaKey || e.ctrlKey) return; + if (e.isDefaultPrevented() || e.shiftKey || e.metaKey || e.ctrlKey) return; var $currentTarget = $(e.currentTarget); var href = $currentTarget.attr('href'); diff --git a/app/assets/javascripts/discourse/components/click_track.js b/app/assets/javascripts/discourse/components/click_track.js index 41cad2cb0ed..fb116163814 100644 --- a/app/assets/javascripts/discourse/components/click_track.js +++ b/app/assets/javascripts/discourse/components/click_track.js @@ -68,7 +68,7 @@ Discourse.ClickTrack = { } // if they want to open in a new tab, do an AJAX request - if (e.metaKey || e.ctrlKey || e.which === 2) { + if (e.shiftKey || e.metaKey || e.ctrlKey || e.which === 2) { Discourse.ajax(Discourse.getURL("/clicks/track"), { data: { url: href, diff --git a/spec/javascripts/components/click_track_spec.js b/spec/javascripts/components/click_track_spec.js index 0a37080dab7..86dfdf5ebe2 100644 --- a/spec/javascripts/components/click_track_spec.js +++ b/spec/javascripts/components/click_track_spec.js @@ -152,25 +152,30 @@ describe("Discourse.ClickTrack", function() { spyOn(window, 'open'); }); - it("opens in a new tab when pressing alt", function() { - clickEvent.metaKey = true; + var expectItOpensInANewTab = function() { expect(track(clickEvent)).toBe(false); expect(Discourse.ajax).toHaveBeenCalled(); expect(window.open).toHaveBeenCalledWith('http://www.google.com', '_blank'); + }; + + it("opens in a new tab when pressing shift", function() { + clickEvent.shiftKey = true; + expectItOpensInANewTab(); + }); + + it("opens in a new tab when pressing meta", function() { + clickEvent.metaKey = true; + expectItOpensInANewTab(); }); it("opens in a new tab when pressing ctrl", function() { clickEvent.ctrlKey = true; - expect(track(clickEvent)).toBe(false); - expect(Discourse.ajax).toHaveBeenCalled(); - expect(window.open).toHaveBeenCalledWith('http://www.google.com', '_blank'); + expectItOpensInANewTab(); }); it("opens in a new tab when middle clicking", function() { clickEvent.which = 2; - expect(track(clickEvent)).toBe(false); - expect(Discourse.ajax).toHaveBeenCalled(); - expect(window.open).toHaveBeenCalledWith('http://www.google.com', '_blank'); + expectItOpensInANewTab(); }); });