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`.
This commit is contained in:
Régis Hanol 2013-04-30 15:48:58 +02:00
parent 560bf4dcef
commit ff309cf024
3 changed files with 15 additions and 10 deletions

View File

@ -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');

View File

@ -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,

View File

@ -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();
});
});