blob: 61a5a6294cfa36fd9360b3465bde144f275f6aa6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
/**
* This class helps to handle URLs of hyperlinks and change their parameters.
* For example a javascript-page may open an item and the user expects other links
* on the same page to "know" that this item is now open. But because we don't use
* PHP session-variables here, this is difficult to use. This class can help. You
* can overwrite the href-attribute of the link by:
*
* [code]
* link.href = STUDIP.URLHelper.getURL("adresse.php?hello=world#anchor");
* [/code]
* Returns something like:
* "http://uni-adresse.de/studip/adresse.php?hello=world&mandatory=parameter#anchor"
*/
class URLHelper {
constructor(base_url = null, parameters = {}) {
//the base url for all links
this.base_url = base_url;
// bound link 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
* parameters.
*
* @param url string: any url-string
* @param param_object map: associative object for extra values
* @param ignore_params boolean: ignore previously bound parameters
* @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;
tmp = url.split('#');
url = tmp[0];
fragment = tmp[1];
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 === '') {
url += '?' + jQuery.param(params);
}
if (fragment) {
url += '#' + fragment;
}
return url;
}
}
export default function createURLHelper(config) {
return new URLHelper(config && config.base_url, config && config.parameters);
}
|