aboutsummaryrefslogtreecommitdiff
path: root/javascript/app
diff options
context:
space:
mode:
authoralexwl <alexey.a.kiryushin@gmail.com>2019-02-20 18:58:57 +0300
committeralexwl <alexey.a.kiryushin@gmail.com>2019-02-20 18:58:57 +0300
commiteddf2c825dee199de0e958857f0daf3d08a07532 (patch)
treea2901b6273012308fb0b40a34c4610536a1da9e5 /javascript/app
parentc831f86d259b6d949b0f71b894c7f2b07b4eed15 (diff)
Adds an option to use public Hoogle JSON API (https://github.com/ndmitchell/hoogle/blob/3dbf68bfd701f942d3af2e6debb74a0a78cd392e/docs/API.md#json-api) to get documentation for not indexed packages. Closes #21.
Diffstat (limited to 'javascript/app')
-rw-r--r--javascript/app/components/identifier-info.js15
-rw-r--r--javascript/app/services/store.js16
-rw-r--r--javascript/app/utils/api-urls.js3
3 files changed, 31 insertions, 3 deletions
diff --git a/javascript/app/components/identifier-info.js b/javascript/app/components/identifier-info.js
index 537697a..bb859be 100644
--- a/javascript/app/components/identifier-info.js
+++ b/javascript/app/components/identifier-info.js
@@ -54,8 +54,19 @@ export default Ember.Component.extend({
Ember.run.next(this,() => {
if(currentIdentifier === this.get('identifierInfo')) {
this.set('downloadedDocumentation',definitionSite.documentation);
- }});
- });
+ }})
+ }).catch(() => {
+ this.get('store').loadHoogleDocs(packageId,
+ locationInfo.moduleName,
+ locationInfo.entity,
+ locationInfo.name)
+ .then((hoogleDocs) => {
+ Ember.run.next(this,() => {
+ if(currentIdentifier === this.get('identifierInfo')) {
+ this.set('downloadedDocumentation',hoogleDocs);
+ }});
+ });
+ });;
}
}
})
diff --git a/javascript/app/services/store.js b/javascript/app/services/store.js
index 8001061..650ddcf 100644
--- a/javascript/app/services/store.js
+++ b/javascript/app/services/store.js
@@ -53,6 +53,7 @@ export default Ember.Service.extend({
this.expressions = {};
this.references = {};
this.globalReferences = {};
+ this.hoogleDocs = {};
},
loadPackage(packageId) {
const packageInfo = this.packages[packageId];
@@ -144,11 +145,24 @@ export default Ember.Service.extend({
if(globalReferences) {
return new RSVP.Promise((resolve) => {resolve(globalReferences);});
} else {
- const url = urls.globalReferencesUrl(externalId);
+ const url = urls.globalReferencesUrl(externalId);
return Ember.$.getJSON(url).then((refs) => {
this.globalReferences[externalId] = refs;
return refs;
});
}
},
+ loadHoogleDocs(packageId,moduleName,entity,name) {
+ const id = packageId + "/" + moduleName + "/" + entity + "/" + name;
+ const hoogleDoc = this.hoogleDocs[id];
+ if(hoogleDoc) {
+ return new RSVP.Promise((resolve)=>{resolve(hoogleDoc);});
+ } else {
+ const url = urls.hoogleDocsUrl(packageId,moduleName,entity,name);
+ return Ember.$.getJSON(url).then((hoogleDoc) => {
+ this.hoogleDocs[id] = hoogleDoc;
+ return hoogleDoc;
+ });
+ }
+ }
});
diff --git a/javascript/app/utils/api-urls.js b/javascript/app/utils/api-urls.js
index d90c68a..7dce1c3 100644
--- a/javascript/app/utils/api-urls.js
+++ b/javascript/app/utils/api-urls.js
@@ -46,5 +46,8 @@ export const urls = {
},
globalIdentifiersUrl : function (query) {
return config.APP.apiUrlPrefix + "/globalIdentifiers/"+fixDots(encodeURIComponent(query));
+ },
+ hoogleDocsUrl : function (packageId,moduleName,entity,name) {
+ return config.APP.apiUrlPrefix + "/hoogleDocs/"+packageId+"/"+encodeURIComponent(moduleName)+"/"+entity+"/"+fixDots(encodeURIComponent(name));
}
}