faas/gateway/assets/script/funcstore.js
Rishabh Gupta 7b09992565 Using functions.json instead of store-arch.json
Signed-off-by: Rishabh Gupta <r.g.gupta@outlook.com>
2019-04-14 16:51:22 +01:00

83 lines
2.7 KiB
JavaScript

var funcStoreModule = angular.module('faasGateway.funcStore', ['ngMaterial']);
funcStoreModule.service('FuncStoreService', ['$http', function ($http) {
var self = this;
this.fetchStore = function (url) {
return $http.get(url)
.then(function (resp) {
return resp.data;
});
};
}]);
funcStoreModule.component('funcStore', {
templateUrl: 'templates/funcstore.html',
bindings: {
selectedFunc: '<',
onSelected: '&',
},
controller: ['FuncStoreService', '$mdDialog', '$window', function FuncStoreController(FuncStoreService, $mdDialog, $window) {
var self = this;
this.arch = "x86_64";
this.storeUrl = 'https://raw.githubusercontent.com/openfaas/store/master/functions.json';
this.selectedFunc = null;
this.functions = [];
this.message = '';
this.searchText = '';
this.search = function (func) {
// filter with title and description
if (!self.searchText || (func.title.toLowerCase().indexOf(self.searchText.toLowerCase()) != -1) ||
(func.description.toLowerCase().indexOf(self.searchText.toLowerCase()) != -1)) {
return true;
}
return false;
}
this.select = function (func, event) {
self.selectedFunc = func;
self.onSelected()(func, event);
};
this.loadStore = function () {
self.loading = true;
self.functions = [];
self.message = '';
FuncStoreService.fetchStore(self.storeUrl)
.then(function (data) {
self.loading = false;
self.functions = data.functions
.filter(f => f.images.hasOwnProperty(self.arch))
.map(f => Object.assign(f, { "image": f["images"][self.arch] }));
})
.catch(function (err) {
console.error(err);
self.loading = false;
self.message = 'Unable to reach GitHub.com';
});
}
this.showInfo = function (func, event) {
$mdDialog.show(
$mdDialog.alert()
.multiple(true)
.parent(angular.element(document.querySelector('#newfunction-dialog')))
.clickOutsideToClose(true)
.title(func.title)
.textContent(func.description)
.ariaLabel(func.title)
.ok('OK')
.targetEvent(event)
);
}
this.openRepo = function (url) {
$window.open(url, '_blank');
}
this.loadStore();
}]
});