diff --git a/resources/assets/javascripts/lib/url_helper.js b/resources/assets/javascripts/lib/url_helper.js index c6c5660507962cf28d884f08696a52bbc65e0aea..0aa08c3539c5dee41ec90b661ea6b1b268cdc2c3 100644 --- a/resources/assets/javascripts/lib/url_helper.js +++ b/resources/assets/javascripts/lib/url_helper.js @@ -21,22 +21,6 @@ class URLHelper { 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 * parameters. @@ -47,40 +31,31 @@ class URLHelper { * @return: url with all necessary and additional parameters, encoded */ getURL(url, param_object, ignore_params) { - var params = _.defaults(param_object || {}, ignore_params ? {} : this.parameters), - tmp, - fragment, - query; + let result; - tmp = url.split('#'); - url = tmp[0]; - fragment = tmp[1]; - - tmp = url.split('?'); - url = tmp[0]; - query = tmp[1] || ''; - - if (url !== '') { - url = this.resolveURL(url); + if (url === '' || url.match(/^[?#]/)) { + result = new URL(url, location.href.replace(/\?.*/, '')); + } else { + result = new URL(url, this.base_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 === '') { - url += '?' + jQuery.param(params); + if (!ignore_params) { + for (let key in this.parameters) { + if (!result.searchParams.has(key)) { + result.searchParams.set(key, this.parameters[key]); + } + } } - if (fragment) { - url += '#' + fragment; + for (let key in param_object) { + if (param_object[key] !== null) { + result.searchParams.set(key, param_object[key]); + } else { + result.searchParams.delete(key); + } } - return url; + return result.href; } } diff --git a/templates/start/_jstemplates.php b/templates/start/_jstemplates.php index 7bccfe3e3af698ca65131b76005a756dfc897676..740b05a3462d01d895cb59f4cb70884a376c5b86 100644 --- a/templates/start/_jstemplates.php +++ b/templates/start/_jstemplates.php @@ -56,7 +56,7 @@ </span> <div class="activity-heading"> <% 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"> </a> <% } %>