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:
commit
d7e3fcf1c6
3 changed files with 38 additions and 23 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
|
@ -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() {},
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue