aboutsummaryrefslogtreecommitdiff
path: root/javascript/app
diff options
context:
space:
mode:
authoralexwl <alexey.a.kiryushin@gmail.com>2019-02-08 00:34:54 +0300
committeralexwl <alexey.a.kiryushin@gmail.com>2019-02-08 00:34:54 +0300
commit0b17136d965ddc602a5a0176b538bdb0a47f4d12 (patch)
treef809effc371893588fb9476188034848cd0282ab /javascript/app
parentd6a64db1ced3d3577886a7aec140a5174cbceb48 (diff)
Fix search for '.' and '..' identifiers
Diffstat (limited to 'javascript/app')
-rw-r--r--javascript/app/utils/api-urls.js21
-rw-r--r--javascript/app/utils/language-extensions.js2
2 files changed, 19 insertions, 4 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));
}
}
diff --git a/javascript/app/utils/language-extensions.js b/javascript/app/utils/language-extensions.js
index f4f23bd..bee90b6 100644
--- a/javascript/app/utils/language-extensions.js
+++ b/javascript/app/utils/language-extensions.js
@@ -506,7 +506,7 @@ function addLinksToLanguageExtensionsDocs(string) {
return match;
}
});
-};
+}
export {
addLinksToLanguageExtensionsDocs