aboutsummaryrefslogtreecommitdiff
path: root/javascript/app/utils/api-urls.js
diff options
context:
space:
mode:
Diffstat (limited to 'javascript/app/utils/api-urls.js')
-rw-r--r--javascript/app/utils/api-urls.js21
1 files changed, 18 insertions, 3 deletions
diff --git a/javascript/app/utils/api-urls.js b/javascript/app/utils/api-urls.js
index da8fdcb..d90c68a 100644
--- a/javascript/app/utils/api-urls.js
+++ b/javascript/app/utils/api-urls.js
@@ -1,5 +1,20 @@
import config from '../config/environment';
+// "." and ".." is a special case because of the Path Segment Normalization:
+// https://tools.ietf.org/html/rfc3986#section-6.2.2.3
+// The segments “..” and “.” can be removed from a URL by a browser.
+// https://stackoverflow.com/questions/3856693/a-url-resource-that-is-a-dot-2e
+function fixDots(string) {
+ if(string === ".") {
+ return "%20%2E";
+ }
+ else if(string === "..") {
+ return "%20%2E%2E";
+ } else {
+ return string.replace(/\./g, '%2E');
+ }
+}
+
export const urls = {
packageInfoUrl : function(packageId) {
return config.APP.staticUrlPrefix+"/"+packageId+"/"+config.APP.haskellCodeExplorerDirectory+"/packageInfo.json";
@@ -12,7 +27,7 @@ export const urls = {
},
packagesUrl : config.APP.apiUrlPrefix + "/packages",
identifierDefinitionSiteUrl : function(packageId,moduleName,componentId,entity,name) {
- return config.APP.apiUrlPrefix + "/definitionSite/" + packageId+"/"+componentId+"/"+moduleName+"/"+entity+"/"+encodeURIComponent(name).replace(/\./g, '%2E');
+ return config.APP.apiUrlPrefix + "/definitionSite/" + packageId+"/"+componentId+"/"+moduleName+"/"+entity+"/"+fixDots(encodeURIComponent(name));
},
modulePathUrl : function (packageId,moduleName,componentId) {
return config.APP.apiUrlPrefix + "/modulePath/"+packageId+"/"+componentId+"/"+moduleName;
@@ -24,12 +39,12 @@ export const urls = {
return config.APP.apiUrlPrefix + "/references/"+packageId+"/"+encodeURIComponent(externalId);
},
identifierSearchUrl : function (packageId,query) {
- return config.APP.apiUrlPrefix + "/identifiers/"+packageId+"/"+encodeURIComponent(query).replace(/\./g, '%2E');
+ return config.APP.apiUrlPrefix + "/identifiers/"+packageId+"/"+fixDots(encodeURIComponent(query));
},
globalReferencesUrl : function (externalId) {
return config.APP.apiUrlPrefix + "/globalReferences/"+encodeURIComponent(externalId);
},
globalIdentifiersUrl : function (query) {
- return config.APP.apiUrlPrefix + "/globalIdentifiers/"+encodeURIComponent(query).replace(/\./g, '%2E');
+ return config.APP.apiUrlPrefix + "/globalIdentifiers/"+fixDots(encodeURIComponent(query));
}
}