Merge branch '57813-merge-request-tabs-do-not-handle-ctrl-click-correctly' into 'master'

Resolve "Merge request tabs do not handle ctrl+click correctly"

Closes #57813

See merge request gitlab-org/gitlab-ce!29506
This commit is contained in:
Fatih Acet 2019-06-14 21:54:28 +00:00
commit d7e3fcf1c6
3 changed files with 38 additions and 23 deletions

View file

@ -147,14 +147,14 @@ export default class MergeRequestTabs {
e.stopImmediatePropagation(); e.stopImmediatePropagation();
e.preventDefault(); e.preventDefault();
const { action } = e.currentTarget.dataset; const { action } = e.currentTarget.dataset || {};
if (action) { if (isMetaClick(e)) {
const href = e.currentTarget.getAttribute('href');
this.tabShown(action, href);
} else if (isMetaClick(e)) {
const targetLink = e.currentTarget.getAttribute('href'); const targetLink = e.currentTarget.getAttribute('href');
window.open(targetLink, '_blank'); window.open(targetLink, '_blank');
} else if (action) {
const href = e.currentTarget.getAttribute('href');
this.tabShown(action, href);
} }
} }
} }

View file

@ -0,0 +1,5 @@
---
title: Allow command/control click to open link in new tab on Merge Request tabs
merge_request: 29506
author:
type: fixed

View file

@ -46,15 +46,30 @@ describe('MergeRequestTabs', function() {
describe('opensInNewTab', function() { describe('opensInNewTab', function() {
var tabUrl; var tabUrl;
var windowTarget = '_blank'; var windowTarget = '_blank';
let clickTabParams;
beforeEach(function() { beforeEach(function() {
loadFixtures('merge_requests/merge_request_with_task_list.html'); loadFixtures('merge_requests/merge_request_with_task_list.html');
tabUrl = $('.commits-tab a').attr('href'); tabUrl = $('.commits-tab a').attr('href');
clickTabParams = {
metaKey: false,
ctrlKey: false,
which: 1,
stopImmediatePropagation: function() {},
preventDefault: function() {},
currentTarget: {
getAttribute: function(attr) {
return attr === 'href' ? tabUrl : null;
},
},
};
}); });
describe('meta click', () => { describe('meta click', () => {
let metakeyEvent; let metakeyEvent;
beforeEach(function() { beforeEach(function() {
metakeyEvent = $.Event('click', { keyCode: 91, ctrlKey: true }); metakeyEvent = $.Event('click', { keyCode: 91, ctrlKey: true });
}); });
@ -67,6 +82,8 @@ describe('MergeRequestTabs', function() {
this.class.bindEvents(); this.class.bindEvents();
$('.merge-request-tabs .commits-tab a').trigger(metakeyEvent); $('.merge-request-tabs .commits-tab a').trigger(metakeyEvent);
expect(window.open).toHaveBeenCalled();
}); });
it('opens page when commits badge is clicked', function() { it('opens page when commits badge is clicked', function() {
@ -77,6 +94,8 @@ describe('MergeRequestTabs', function() {
this.class.bindEvents(); this.class.bindEvents();
$('.merge-request-tabs .commits-tab a .badge').trigger(metakeyEvent); $('.merge-request-tabs .commits-tab a .badge').trigger(metakeyEvent);
expect(window.open).toHaveBeenCalled();
}); });
}); });
@ -86,12 +105,9 @@ describe('MergeRequestTabs', function() {
expect(name).toEqual(windowTarget); expect(name).toEqual(windowTarget);
}); });
this.class.clickTab({ this.class.clickTab({ ...clickTabParams, metaKey: true });
metaKey: false,
ctrlKey: true, expect(window.open).toHaveBeenCalled();
which: 1,
stopImmediatePropagation: function() {},
});
}); });
it('opens page tab in a new browser tab with Cmd+Click - Mac', function() { it('opens page tab in a new browser tab with Cmd+Click - Mac', function() {
@ -100,12 +116,9 @@ describe('MergeRequestTabs', function() {
expect(name).toEqual(windowTarget); expect(name).toEqual(windowTarget);
}); });
this.class.clickTab({ this.class.clickTab({ ...clickTabParams, ctrlKey: true });
metaKey: true,
ctrlKey: false, expect(window.open).toHaveBeenCalled();
which: 1,
stopImmediatePropagation: function() {},
});
}); });
it('opens page tab in a new browser tab with Middle-click - Mac/PC', function() { it('opens page tab in a new browser tab with Middle-click - Mac/PC', function() {
@ -114,12 +127,9 @@ describe('MergeRequestTabs', function() {
expect(name).toEqual(windowTarget); expect(name).toEqual(windowTarget);
}); });
this.class.clickTab({ this.class.clickTab({ ...clickTabParams, which: 2 });
metaKey: false,
ctrlKey: false, expect(window.open).toHaveBeenCalled();
which: 2,
stopImmediatePropagation: function() {},
});
}); });
}); });