diff options
| author | alexwl <alexey.a.kiryushin@gmail.com> | 2019-02-08 00:34:54 +0300 | 
|---|---|---|
| committer | alexwl <alexey.a.kiryushin@gmail.com> | 2019-02-08 00:34:54 +0300 | 
| commit | 0b17136d965ddc602a5a0176b538bdb0a47f4d12 (patch) | |
| tree | f809effc371893588fb9476188034848cd0282ab /javascript/app/utils | |
| parent | d6a64db1ced3d3577886a7aec140a5174cbceb48 (diff) | |
Fix search for '.' and '..' identifiers
Diffstat (limited to 'javascript/app/utils')
| -rw-r--r-- | javascript/app/utils/api-urls.js | 21 | ||||
| -rw-r--r-- | javascript/app/utils/language-extensions.js | 2 | 
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  | 
