angular.module('app.yangman').controller('RequestDataCtrl', RequestDataCtrl);
- RequestDataCtrl.$inject = ['$scope', 'RequestsService'];
+ RequestDataCtrl.$inject = ['$mdToast', '$scope', 'RequestsService'];
- function RequestDataCtrl($scope, RequestsService) {
+ function RequestDataCtrl($mdToast, $scope, RequestsService) {
var requestData = this;
requestData.paramsArray = [];
lineNumbers: true,
lineWrapping: true,
matchBrackets: true,
- extraKeys: { 'Ctrl-Space': 'autocomplete' },
+ extraKeys: {
+ 'Ctrl-Space': 'autocomplete',
+ },
onLoad: function (cmInstance) {
+ cmInstance.data = {
+ parameterListObj: $scope.parametersList,
+ codeFontSize: 14,
+ };
+
+ angular.element(cmInstance.display.wrapper).css('fontSize', cmInstance.data.codeFontSize + 'px');
+
cmInstance.on('changes', function () {
if (angular.isFunction(cmInstance.showHint)) {
cmInstance.showHint();
}
});
- cmInstance.data = { parameterListObj: $scope.parametersList };
+ cmInstance.on('keydown', function (codemirror, event) {
+ if (event.altKey) {
+ switch (event.key){
+ case '+':
+ if (cmInstance.data.codeFontSize < 30) {
+ cmInstance.data.codeFontSize++;
+ }
+ angular.element(cmInstance.display.wrapper).css(
+ 'fontSize',
+ cmInstance.data.codeFontSize + 'px'
+ );
+ break;
+ case '-':
+ if (cmInstance.data.codeFontSize > 5) {
+ cmInstance.data.codeFontSize--;
+ }
+ angular.element(cmInstance.display.wrapper).css(
+ 'fontSize',
+ cmInstance.data.codeFontSize + 'px'
+ );
+ break;
+ }
+
+ }
+ });
+
},
};
// methods
requestData.init = init;
+ requestData.showCMHint = showCMHint;
/**
* Set code mirror theme and readonly property considering requestData.type
}
+ /**
+ * Show hints for first codemirror instancesk
+ */
+ function showCMHint(type) {
+
+ if (!$scope.shownCMHint){
+
+ $mdToast.show(
+ $mdToast.simple()
+ .textContent('Use "Ctrl +" key and "Ctrl -" key in editor to enlarge or reduce json font size')
+ .position('top right')
+ .parent(angular.element('.yangmanModule__right-panel__req-data__cm-' + type))
+ .hideDelay(50000)
+ );
+ }
+ }
/**
* Initialization
requestData.type = type;
initEditorOptions();
+ showCMHint(type);
+
$scope.$on('YANGMAN_SET_CODEMIRROR_DATA_' + type, function (event, args){
requestData.data = args.params.data;
});
angular.module('app.yangman').controller('RequestHeaderCtrl', RequestHeaderCtrl);
RequestHeaderCtrl.$inject = [
- '$mdDialog', '$scope', '$rootScope', 'ENV', 'YangmanService', 'ParametersService', 'PathUtilsService',
+ '$mdDialog', '$mdToast', '$scope', '$rootScope', 'ENV', 'YangmanService', 'ParametersService', 'PathUtilsService',
'RequestsService', '$filter', 'DataBackupService',
];
- function RequestHeaderCtrl($mdDialog, $scope, $rootScope, ENV, YangmanService, ParametersService, PathUtilsService,
+ function RequestHeaderCtrl($mdDialog, $mdToast, $scope, $rootScope, ENV, YangmanService, ParametersService, PathUtilsService,
RequestService, $filter, DataBackupService) {
var requestHeader = this;
requestHeader.selectedPluginsButtons = [];
requestHeader.selectedPlugin = null;
requestHeader.statusObj = null;
+ requestHeader.executingProgress = false;
// methods
requestHeader.executeOperation = executeOperation;
init();
setRequestUrl(args.params.path);
setRequestMethod(args.params.method);
+ setRequestStatus(args.params.statusObj);
setJsonView();
(args.cbk || angular.noop)();
});
requestHeader.selectedOperation = method;
}
+ function setRequestStatus(statusObj){
+ requestHeader.statusObj = statusObj;
+ }
+
/**
* Show popup for parameters administration
* @param event
$scope.rootBroadcast('YANGMAN_SET_CODEMIRROR_DATA_' + type, { data: JSON.stringify(data, null, 4) });
}
+ function sendErrorData(response) {
+ $scope.rootBroadcast('YANGMAN_SET_ERROR_DATA', response);
+ }
+
/**
* Create empty parameters list, load from local storage and set to $scope
*/
$scope.rootBroadcast('YANGMAN_SAVE_REQUEST_TO_COLLECTION', { event: event, reqObj: historyReq });
}
+ function showRequestProgress(){
+ requestHeader.executingProgress = true;
+ }
+
+
+ function finishRequestProgress(message){
+ requestHeader.executingProgress = false;
+
+ //$mdToast.show(
+ // $mdToast.simple()
+ // .textContent(message)
+ // .position('bottom right')
+ // .parent(angular.element('.yangmanModule__right-panel__header'))
+ // .hideDelay(1500)
+ //);
+ }
+
/**
* Execute request operation
*/
function executeOperation(requestData, executeCbk){
+
+ showRequestProgress();
+
setRequestUrl(requestHeader.selectedShownDataType === 'req-data' ? requestHeader.requestUrl : null);
var historyReq = RequestService.createHistoryRequest(null, null, requestHeader.requestUrl,
requestHeader.statusObj = reqInfo;
+ sendErrorData({});
+
// create and set history request
historyReq.setExecutionData(
reqInfo.requestSrcData,
preparedReceivedData,
- reqInfo.status
+ reqInfo.status,
+ reqInfo.status,
+ reqInfo.statusText,
+ reqInfo.time
);
if (requestHeader.selectedShownDataType === 'req-data'){
$scope.rootBroadcast('YANGMAN_SAVE_EXECUTED_REQUEST', historyReq);
(executeCbk || angular.noop)(historyReq);
+ finishRequestProgress('dfsaf dasf adsfx');
+
}
/**
function executeReqErrCbk(reqInfo, response) {
requestHeader.statusObj = reqInfo;
- historyReq.setExecutionData(reqInfo.requestSrcData, null, reqInfo.status);
+ historyReq.setExecutionData(
+ reqInfo.requestSrcData, null,
+ reqInfo.status,
+ reqInfo.status,
+ reqInfo.statusText,
+ reqInfo.time
+ );
$scope.rootBroadcast('YANGMAN_SAVE_EXECUTED_REQUEST', historyReq);
//setNodeDataFromRequestData(requestHeader.requestUrl);
if (response.data) {
// try to fill code mirror editor
sendRequestData(response.data, 'RECEIVED');
+ sendErrorData(response.data);
}
(executeCbk || angular.noop)(historyReq);
+
+ finishRequestProgress('sadfsadf adsf');
+
}
}
function showForm(reqObj) {
var data = reqObj.method === 'GET' ? reqObj.receivedData : reqObj.sentData;
+ $scope.rootBroadcast('YANGMAN_SET_ERROR_DATA', {});
+
$scope.rootBroadcast('YANGMAN_FILL_NODE_FROM_REQ', { requestUrl: reqObj.path, requestData: data },
function (){
$scope.setRightPanelSection('form');
- $scope.rootBroadcast('YANGMAN_HEADER_INIT', { path: reqObj.path, method: reqObj.method });
+ $scope.rootBroadcast('YANGMAN_HEADER_INIT', {
+ path: reqObj.path,
+ method: reqObj.method,
+ statusObj: {
+ status: reqObj.responseStatus,
+ statusText: reqObj.responseStatusText,
+ time: reqObj.responseTime,
+ },
+ });
if ( $scope.node ) {
// try to fill node
$scope.setRightPanelSection('req-data');
$scope.setJsonView(true, reqObj.method !== 'GET');
- $scope.rootBroadcast('YANGMAN_HEADER_INIT', { path: reqObj.path, method: reqObj.method });
+ $scope.rootBroadcast('YANGMAN_HEADER_INIT', {
+ path: reqObj.path,
+ method: reqObj.method,
+ statusObj: {
+ status: reqObj.responseStatus,
+ statusText: reqObj.responseStatusText,
+ time: reqObj.responseTime,
+ },
+ });
+
+ $scope.rootBroadcast('YANGMAN_SET_ERROR_DATA', {});
$scope.rootBroadcast(
'YANGMAN_SET_CODEMIRROR_DATA_SENT',
function selectRequest(event, requestObj){
vm.mainList.toggleReqSelection(!event.ctrlKey, requestObj);
$scope.setHistoryReqsSelected(vm.requestList.selectedRequests.length > 0);
+ if (!event.ctrlKey){
+ vm.showData(requestObj);
+ }
}
/**
angular.module('app.yangman').controller('YangFormCtrl', YangFormCtrl);
- YangFormCtrl.$inject = ['$scope', '$rootScope', '$filter', 'constants'];
+ YangFormCtrl.$inject = ['$scope', '$rootScope', '$filter', 'constants', 'YangUtilsService'];
- function YangFormCtrl($scope, $rootScope, $filter, constants) {
+ function YangFormCtrl($scope, $rootScope, $filter, constants, YangUtilsService) {
var yangForm = this;
yangForm.viewPath = $scope.globalViewPath + 'rightpanel/form';
+ yangForm.errorMsg = '';
$scope.constants = constants;
// methods
yangForm.getNodeName = getNodeName;
+ $scope.$on('YANGMAN_SET_ERROR_DATA', setRcvdErrorData);
+
+
+ /**
+ * Read and set error message received from header controller
+ * @param event
+ * @param data
+ */
+ function setRcvdErrorData(event, data) {
+ if (data.params.errors) {
+ yangForm.errorMsg = data.params.errors.error[0]['error-message'];
+ }
+ else {
+ yangForm.errorMsg = '';
+ }
+ }
+
/**
* Get node label name
* @param localeLabel
$scope.requestToShow = null;
$scope.requestDataToShow = '';
$scope.parametersList = ParametersService.createEmptyParametersList('yangman_parameters');
+ $scope.shownCMHint = false;
main.selectedMainTab = 0;
main.leftPanelTab = 0;
$scope.switchSection = switchSection;
$scope.setParametersList = setParametersList;
$scope.unsetPlugin = unsetPlugin;
+ $scope.setCMHintShown = setCMHintShown;
+
init();
+ function setCMHintShown(shown) {
+ $scope.shownCMHint = shown;
+ }
+
/**
* Set parametersList
* @param parametersList
self.sentData = null;
self.status = '';
self.timestamp = '';
+ self.responseStatus = '';
+ self.responseStatusText = '';
+ self.responseTime = '';
// functions
self.clone = clone;
* @param name
* @param collection
* @param timestamp
+ * @param responseStatus
+ * @param responseTime
+ * @param responseStatusText
*/
- function setData(sentData, receivedData, status, path, operation, name, collection, timestamp) {
+ function setData(sentData, receivedData, status, path, operation, name, collection, timestamp, responseStatus, responseStatusText, responseTime) {
self.sentData = sentData === null || sentData === undefined || $.isEmptyObject(sentData) ? null : sentData;
self.name = name;
null : receivedData;
self.collection = collection;
self.timestamp = timestamp;
+ self.responseStatus = responseStatus;
+ self.responseStatusText = responseStatusText;
+ self.responseTime = responseTime;
}
/**
* @param sentData
* @param receivedData
* @param status - http status from response header
+ * @param responseStatus
+ * @param responseTime
+ * @param responseStatusText
*/
- function setExecutionData(sentData, receivedData, status) {
+ function setExecutionData(sentData, receivedData, status, responseStatus, responseStatusText, responseTime) {
self.sentData = sentData;
self.receivedData = receivedData;
self.status = status ? (status > 199 && status < 205 ? 'success' : 'erorr') : '';
+ self.responseStatus = responseStatus;
+ self.responseStatusText = responseStatusText;
+ self.responseTime = responseTime;
}
/**
*
* @returns {{sentData: (null|*), receivedData: (null|*), path: (string|*), collection: (string|*),
- * method: (string|*), status: (string|*), name: (string|*), timestamp: (string|*)}}
+ * method: (string|*), status: (string|*), name: (string|*), timestamp: (string|*), responseStatus: (string|*),
+ * responseTime: (string|*)}}
*/
function toJSON() {
var obj = {
status: self.status,
name: self.name,
timestamp: self.timestamp,
+ responseStatus: self.responseStatus,
+ responseStatusText: self.responseStatusText,
+ responseTime: self.responseTime,
};
return obj;
/**
*
- * @param sent
* @param data
* @returns {string}
*/
* @returns {HistoryRequest}
*/
function clone() {
+ /**
+ *
+ * @type {HistoryRequestModel}
+ */
var result = new HistoryRequestModel(PathUtilsService, YangUtilsService, ParsingJsonService);
result.setData(self.sentData, self.receivedData, self.status, self.path, self.method, self.name,
- self.collection, self.timestamp);
+ self.collection, self.timestamp, self.responseStatus, self.responseStatusText, self.responseTime);
return result;
}
}
var returnedParamsList = paramsObj.list.filter( function (param){
- var paramIndex = usedParamLabelArray.indexOf(param.name);
+ var paramIndex = usedParamLabelArray.indexOf(param.name);
+
if ( paramIndex !== -1 ) {
return usedParamLabelArray.splice(paramIndex, 1);
}
});
usedParamLabelArray.forEach(function (param){
- returnedParamsList.push(ParametersService.createParameter({ name: param }));
+ returnedParamsList.push(ParametersService.createParameter({ name: param }));
});
return returnedParamsList;
function applyParams(paramsObj, data) {
var dataStr = JSON.stringify(data);
- if (paramsObj && paramsObj.hasOwnProperty('list')) {
- paramsObj.list.forEach(function (param){
- dataStr = service.replaceStringInText(dataStr, '<<' + param.name + '>>', param.value);
- });
- }
+ if (paramsObj && paramsObj.hasOwnProperty('list')) {
+ paramsObj.list.forEach(function (param){
+ dataStr = service.replaceStringInText(dataStr, '<<' + param.name + '>>', param.value);
+ });
+ }
return ParsingJsonService.parseJson(dataStr);
}
return replacedText;
}
-
-
-
/**
* Service for creating basic history object
* @param sentData
* @returns {*}
* @param timestamp
*/
- function createHistoryRequest(sentData, receivedData, path, operation, status, name, collection, timestamp) {
-
+ function createHistoryRequest(sentData, receivedData, path, operation, status, name, collection, timestamp,
+ responseStatus, responseStatusText, responseTime) {
var receivedDataProcessed = status === 'success' ? receivedData : null,
result = new HistoryRequestModel(PathUtilsService, YangUtilsService, ParsingJsonService);
- result.setData(sentData, receivedDataProcessed, status, path, operation, name, collection, timestamp);
+ result.setData(sentData, receivedDataProcessed, status, path, operation, name, collection, timestamp,
+ responseStatus, responseStatusText, responseTime);
return result;
}
* @returns {*}
*/
function createHistoryRequestFromElement(elem) {
- if (!elem.hasOwnProperty('timestamp')){
- elem.timestamp = Date.now();
- }
+ if (!elem.hasOwnProperty('timestamp')){
+ elem.timestamp = Date.now();
+ }
+
return service.createHistoryRequest(elem.sentData, elem.receivedData, elem.path, elem.method,
- elem.status, elem.name, elem.collection, elem.timestamp);
+ elem.status, elem.name, elem.collection, elem.timestamp, elem.responseStatus,
+ elem.responseStatusText, elem.responseTime
+ );
}
/**
}
- });
+});
ng-class="{selected: request.selected}"
layout="row"
flex="100"
- ng-click="reqList.selectRequest($event, request); reqList.showData(request);">
+ ng-click="reqList.selectRequest($event, request);">
<div flex="15" class="yangmanModule__requests-list__group__item__method" layout-align="center center">
<p class="{{request.status === 'success' || !request.status ? request.method : 'error'}}"> {{request.method === 'DELETE' ? 'DEL' : request.method }} </p>
<!-- Header -->
<section md-whiteframe="1"
class="yangmanModule__right-panel__header"
+style="margin-bottom: 0px!important;"
ng-include src="globalViewPath + 'rightpanel/request-header.tpl.html'"></section>
<!-- /Header -->
+<section class="requestMsgs" style="height: 25px;"></section>
+
<!-- Form section -->
<section class="yangmanModule__right-panel__form bottom-content"
ng-show="rightPanelSection === 'form'"
ng-if="node"
ng-controller="YangFormCtrl as yangForm">
+ <div ng-show="yangForm.errorMsg"><p class="error">{{ yangForm.errorMsg }}</p></div>
<div ng-include src="yangForm.viewPath + '/' + selectedDatastore.label + '/' + node.type+'.tpl.html'"></div>
</section>
<!-- /Form section -->
ng-show="main.jsonView.sent"
ng-init="requestData.init('SENT')"
ng-class="{'half-size': main.jsonView.received && main.jsonView.sent}"
- class="ym-resizable-s">
+ class="yangmanModule__right-panel__req-data__cm-SENT ym-resizable-s">
<h5>{{'YANGMAN_SENT_DATA' | translate}}</h5>
<div md-whiteframe="2" ng-include src="globalViewPath + 'rightpanel/request-data.tpl.html'"></div>
ng-show="main.jsonView.received"
ng-init="requestData.init('RECEIVED')"
ng-class="{'half-size': main.jsonView.received && main.jsonView.sent}"
- class="ym-resizable-s">
+ class="yangmanModule__right-panel__req-data__cm-RECEIVED ym-resizable-s">
<h5>{{'YANGMAN_RECEIVED_DATA' | translate}}</h5>
<div md-whiteframe="2" ng-include src="globalViewPath + 'rightpanel/request-data.tpl.html'"></div>
ng-if="rightPanelSection === 'form'"
class="input-span">
- <input type="text" placeholder="{{!selectedSubApi ? ('YANGMAN_REQ_URL' | translate) : ''}}" ng-disabled="true">
+ <input type="text"
+ placeholder="{{!selectedSubApi ? ('YANGMAN_REQ_URL' | translate) : ''}}"
+ ng-disabled="true">
</md-input-container>
</section>
<!-- Action buttons -->
<md-input-container flex="nogrow" layout="row" layout-align="start start" class="action-buttons">
<!-- Execute action button -->
- <md-button class="md-raised md-primary" ng-click="requestHeader.prepareDataAndExecute(main.modulesTreeDisplayed() ? main.leftPanelShowModule : null)">{{'YANGMAN_SEND' | translate}}</md-button>
+ <md-button class="md-raised md-primary has-progress"
+ ng-click="requestHeader.prepareDataAndExecute(
+ main.modulesTreeDisplayed() ? main.leftPanelShowModule : null
+ )">
+ <md-progress-circular ng-disabled="!vm.activated" class="md-raised" md-diameter="25px" ng-show="requestHeader.executingProgress"></md-progress-circular>
+ {{'YANGMAN_SEND' | translate}}
+ </md-button>
<!-- Save request -->
- <md-button class="md-raised md-warn" ng-click="requestHeader.saveRequestToCollection($event)">{{'YANGMAN_SAVE' | translate}}</md-button>
+ <md-button class="md-raised md-warn" ng-click="requestHeader.saveRequestToCollection($event)">
+ {{'YANGMAN_SAVE' | translate}}
+ </md-button>
<!-- Parameters button -->
- <md-button class="md-raised" ng-click="requestHeader.showParamsAdmin($event)">{{'YANGMAN_PARAMETERS' | translate}}</md-button>
+ <md-button class="md-raised" ng-click="requestHeader.showParamsAdmin($event)">
+ {{'YANGMAN_PARAMETERS' | translate}}
+ </md-button>
<!-- sub api custom functionality menu -->
<md-menu ng-show="selectedSubApi.custFunct.length || requestHeader.selectedPluginsButtons.length">
label{
font-weight: normal;
}
+
+ md-progress-circular{
+ position: absolute;
+ margin-top: 5px;
+ }
+ md-progress-circular .md-inner .md-gap{
+ border-top-color: #ffffff;
+ border-bottom-color: #ffffff;
+ }
+
+ md-progress-circular .md-inner .md-left .md-half-circle{
+ border-left-color: #ffffff;
+ border-top-color: #ffffff;
+ }
+
+ md-progress-circular .md-inner .md-right .md-half-circle{
+ border-top-color: #ffffff;
+ border-right-color: #ffffff;
+ }
+}
+
+button.has-progress{
+ span{
+ margin-left: 23px;
+ margin-right: 23px;
+ }
}
.ui-resizable-e{
}
.CodeMirror { height: 100%; }
+
+ md-toast{
+ margin-top: 24px;
+ }
}
&__form{