Skip to content
Snippets Groups Projects
Commit a97f45d0 authored by Elmar Ludwig's avatar Elmar Ludwig
Browse files

completely replace JS URLHelper implementation, fixes #1395

Closes #1395

Merge request studip/studip!852
parent d547a2c2
No related branches found
No related tags found
No related merge requests found
...@@ -21,22 +21,6 @@ class URLHelper { ...@@ -21,22 +21,6 @@ class URLHelper {
this.parameters = parameters; this.parameters = parameters;
} }
/**
* method to extend short URLs like "dispatch.php/profile" to "http://.../dispatch.php/profile"
*/
resolveURL(url) {
if (!_.isString(this.base_url) || url.match(/^[a-zA-Z][a-zA-Z0-9+-.]*:/) !== null || url.charAt(0) === '?') {
//this method cannot do any more:
return url;
}
var base_url = this.base_url;
if (url.charAt(0) === '/') {
var host = this.base_url.match(/^[a-zA-Z][a-zA-Z0-9+-.]*:\/\/[\w:.-]+/);
base_url = host ? host[0] : '';
}
return base_url + url;
}
/** /**
* returns a readily encoded URL with the mandatory parameters and additionally passed * returns a readily encoded URL with the mandatory parameters and additionally passed
* parameters. * parameters.
...@@ -47,40 +31,31 @@ class URLHelper { ...@@ -47,40 +31,31 @@ class URLHelper {
* @return: url with all necessary and additional parameters, encoded * @return: url with all necessary and additional parameters, encoded
*/ */
getURL(url, param_object, ignore_params) { getURL(url, param_object, ignore_params) {
var params = _.defaults(param_object || {}, ignore_params ? {} : this.parameters), let result;
tmp,
fragment,
query;
tmp = url.split('#'); if (url === '' || url.match(/^[?#]/)) {
url = tmp[0]; result = new URL(url, location.href.replace(/\?.*/, ''));
fragment = tmp[1]; } else {
result = new URL(url, this.base_url);
tmp = url.split('?');
url = tmp[0];
query = tmp[1] || '';
if (url !== '') {
url = this.resolveURL(url);
} }
query = decodeURIComponent(query);
// split query string and merge with param_object
_.each((query && query.split('&')) || [], function(e) {
var pair = e.split('=');
if (!(pair[0] in params)) {
params[pair[0]] = pair[1];
}
});
if (_.keys(params).length || url === '') { if (!ignore_params) {
url += '?' + jQuery.param(params); for (let key in this.parameters) {
if (!result.searchParams.has(key)) {
result.searchParams.set(key, this.parameters[key]);
}
}
} }
if (fragment) { for (let key in param_object) {
url += '#' + fragment; if (param_object[key] !== null) {
result.searchParams.set(key, param_object[key]);
} else {
result.searchParams.delete(key);
}
} }
return url; return result.href;
} }
} }
......
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
</span> </span>
<div class="activity-heading"> <div class="activity-heading">
<% if (activity.actor.type !== 'anonymous') { %> <% if (activity.actor.type !== 'anonymous') { %>
<a href="<%- STUDIP.URLHelper.resolveURL('dispatch.php/profile?username=' + activity.actor.details.name.username) %>"> <a href="<%- STUDIP.URLHelper.getURL('dispatch.php/profile?username=' + activity.actor.details.name.username) %>">
<img src="<%- activity.actor.details.avatar_medium %>" class="activity-avatar"> <img src="<%- activity.actor.details.avatar_medium %>" class="activity-avatar">
</a> </a>
<% } %> <% } %>
......
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