diff --git a/gateway/assets/index.html b/gateway/assets/index.html index b27a13ff01967a84f7838a1fa46dbcbb5b667917..5fe56ba698adcfb2e900e944e09e6c8d476d4a89 100644 --- a/gateway/assets/index.html +++ b/gateway/assets/index.html @@ -133,10 +133,10 @@ <div layout-gt-sm="row"> <md-input-container class="md-block" flex-gt-sm> - <md-radio-group ng-model="invocation.contentType"> + <md-radio-group ng-model="invocation.contentType" layout="row" layout-align="start center"> <md-radio-button value="text" class="md-primary"> Text </md-radio-button> <md-radio-button value="json"> JSON </md-radio-button> - <md-radio-button value="binary"> Binary </md-radio-button> + <md-radio-button value="binary"> Download </md-radio-button> </md-radio-group> </md-input-container> </div> diff --git a/gateway/assets/script/bootstrap.js b/gateway/assets/script/bootstrap.js index 6b3875063fca1f39e33a09d3e04a4acbd17da71c..b7176c56c51c644d5fa38af3fcea6559a59af879 100644 --- a/gateway/assets/script/bootstrap.js +++ b/gateway/assets/script/bootstrap.js @@ -27,7 +27,8 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$timeout', '$md envProcess: "", network: "", service: "", - envVars: {} + envVars: {}, + labels: {} }; $scope.invocation.request = ""; @@ -56,7 +57,7 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$timeout', '$md data: $scope.invocation.request, method: "POST", headers: { "Content-Type": requestContentType }, - responseType: $scope.invocation.contentType + responseType: $scope.invocation.contentType == "binary" ? "arraybuffer" : $scope.invocation.contentType }; $scope.invocationInProgress = true; @@ -65,44 +66,64 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$timeout', '$md $scope.roundTripDuration = ""; $scope.invocationStart = new Date().getTime() + + var tryDownload = function(data, filename) { + var caught; + + var linkElement = document.createElement('a'); + try { + var blob = new Blob([data], { type: "binary/octet-stream" }); + var url = window.URL.createObjectURL(blob); + + linkElement.setAttribute('href', url); + linkElement.setAttribute("download", filename); + + var clickEvent = new MouseEvent("click", { + "view": window, + "bubbles": true, + "cancelable": false + }); + linkElement.dispatchEvent(clickEvent); + } catch (ex) { + caught = ex; + } + return caught; + } + $http(options) .success(function (data, status, headers) { - console.log(headers()); + + var headerMap = headers(); if($scope.invocation.contentType == "binary") { - $scope.invocationResponse = "Bytes received: "+ data.length; - - var linkElement = document.createElement('a'); - try { - var blob = new Blob([data], { type: "binary/octet-stream" }); - var url = window.URL.createObjectURL(blob); - var filename = uuidv4(); - - linkElement.setAttribute('href', url); - linkElement.setAttribute("download", filename); - - var clickEvent = new MouseEvent("click", { - "view": window, - "bubbles": true, - "cancelable": false - }); - linkElement.dispatchEvent(clickEvent); - } catch (ex) { - console.log(ex); - $scope.invocationResponse = ex; + var filename = uuidv4(); + + if($scope.selectedFunction.labels) { + var ext = $scope.selectedFunction.labels["com.openfaas.ui.ext"]; + if(ext && ext.length > 0 ) { + filename = filename + "" + ext; + } + } + + var caught = tryDownload(data, filename); + if(caught) { + console.log(caught); + $scope.invocationResponse = caught + } else { + $scope.invocationResponse = data.byteLength + " byte(s) received"; } } else { - var response = {"data": data}; - if (typeof response.data == 'object') { - $scope.invocationResponse = JSON.stringify(response.data, null, 2); + + if (typeof data == 'object') { + $scope.invocationResponse = JSON.stringify(data, null, 2); } else { - $scope.invocationResponse = response.data; + $scope.invocationResponse = data; } } $scope.invocationInProgress = false; - $scope.invocationStatus = response.status; + $scope.invocationStatus = status; var now = new Date().getTime(); $scope.roundTripDuration = (now - $scope.invocationStart) / 1000; showPostInvokedToast("Success"); @@ -187,6 +208,7 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$timeout', '$md $scope.item.envProcess = func.fprocess; $scope.item.network = func.network; $scope.item.envVars = func.environment; + $scope.item.labels = func.labels; $scope.selectedFunc = func; } @@ -219,6 +241,7 @@ app.controller("home", ['$scope', '$log', '$http', '$location', '$timeout', '$md item.envProcess = ""; item.network = ""; item.envVars = {}; + item.labels = {}; $scope.validationError = ""; $scope.closeDialog();