Skip to content
Snippets Groups Projects
Commit 0966c6d2 authored by Steffen Rauh's avatar Steffen Rauh
Browse files

Fix compatibility with Internet Explorer 11 for merge requests

parent 0819d093
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -97,6 +97,19 @@
return $('body').data('page').split(':')[0];
};
 
gl.utils.parseUrl = function (url) {
var parser = document.createElement('a');
parser.href = url;
return parser;
};
gl.utils.parseUrlPathname = function (url) {
var parsedUrl = gl.utils.parseUrl(url);
// parsedUrl.pathname will return an absolute path for Firefox and a relative path for IE11
// We have to make sure we always have an absolute path.
return parsedUrl.pathname.charAt(0) === '/' ? parsedUrl.pathname : '/' + parsedUrl.pathname;
};
gl.utils.isMetaKey = function(e) {
return e.metaKey || e.ctrlKey || e.altKey || e.shiftKey;
};
Loading
Loading
Loading
Loading
@@ -225,11 +225,10 @@
 
// We extract pathname for the current Changes tab anchor href
// some pages like MergeRequestsController#new has query parameters on that anchor
const url = document.createElement('a');
url.href = source;
var urlPathname = gl.utils.parseUrlPathname(source);
 
this.ajaxGet({
url: `${url.pathname}.json${location.search}`,
url: `${urlPathname}.json${location.search}`,
success: (data) => {
$('#diffs').html(data.html);
 
Loading
Loading
---
title: Fix compatibility with Internet Explorer 11 for merge requests
merge_request: 7525
author: Steffen Rauh
//= require lib/utils/common_utils
(() => {
describe('common_utils', () => {
describe('gl.utils.parseUrl', () => {
it('returns an anchor tag with url', () => {
expect(gl.utils.parseUrl('/some/absolute/url').pathname).toContain('some/absolute/url');
});
it('url is escaped', () => {
// IE11 will return a relative pathname while other browsers will return a full pathname.
// parseUrl uses an anchor element for parsing an url. With relative urls, the anchor
// element will create an absolute url relative to the current execution context.
// The JavaScript test suite is executed at '/teaspoon' which will lead to an absolute
// url starting with '/teaspoon'.
expect(gl.utils.parseUrl('" test="asf"').pathname).toEqual('/teaspoon/%22%20test=%22asf%22');
});
});
describe('gl.utils.parseUrlPathname', () => {
beforeEach(() => {
spyOn(gl.utils, 'parseUrl').and.callFake(url => ({
pathname: url,
}));
});
it('returns an absolute url when given an absolute url', () => {
expect(gl.utils.parseUrlPathname('/some/absolute/url')).toEqual('/some/absolute/url');
});
it('returns an absolute url when given a relative url', () => {
expect(gl.utils.parseUrlPathname('some/relative/url')).toEqual('/some/relative/url');
});
});
});
})();
Loading
Loading
@@ -2,6 +2,8 @@
 
/*= require merge_request_tabs */
//= require breakpoints
//= require lib/utils/common_utils
//= require jquery.scrollTo
 
(function () {
describe('MergeRequestTabs', function () {
Loading
Loading
@@ -21,13 +23,13 @@
setLocation();
 
this.spies = {
ajax: spyOn($, 'ajax').and.callFake(function () {}),
history: spyOn(window.history, 'replaceState').and.callFake(function () {})
};
});
 
describe('#activateTab', function () {
beforeEach(function () {
spyOn($, 'ajax').and.callFake(function() {});
fixture.load('merge_request_tabs.html');
this.subject = this.class.activateTab;
});
Loading
Loading
@@ -51,6 +53,7 @@
 
describe('#setCurrentAction', function () {
beforeEach(function () {
spyOn($, 'ajax').and.callFake(function() {});
this.subject = this.class.setCurrentAction;
});
it('changes from commits', function () {
Loading
Loading
@@ -107,5 +110,13 @@
expect(this.subject('show')).toBe('/foo/bar/merge_requests/1');
});
});
describe('#loadDiff', function() {
it('requires an absolute pathname', function() {
spyOn($, 'ajax').and.callFake(function(options) {
expect(options.url).toEqual('/foo/bar/merge_requests/1/diffs.json');
});
this.class.loadDiff('/foo/bar/merge_requests/1/diffs');
});
});
});
}).call(this);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment