Yangman - precheck patharray, fix modal z-index and so on 19/41719/8
authorStanislav Jamrich <sjamrich@cisco.com>
Wed, 13 Jul 2016 11:19:53 +0000 (13:19 +0200)
committerDaniel Malachovsky <dmalacho@cisco.com>
Fri, 22 Jul 2016 10:38:20 +0000 (12:38 +0200)
- fix parameters reload after editing in popup administration
- fix collections delete
- fix hostiry select and run request

Change-Id: Id5349d2d2955deeb4166ecb7ec724f232e1396b5
Signed-off-by: Daniel Kuzma -X (dakuzma - PANTHEON TECHNOLOGIES at Cisco) <dakuzma@cisco.com>
Signed-off-by: Stanislav Jamrich <sjamrich@cisco.com>
14 files changed:
modules/common-yangutils-resources/src/main/resources/yangutils/services/path-utils.services.js
modules/yangman-resources/src/main/resources/yangman/assets/data/locale-en_US.json
modules/yangman-resources/src/main/resources/yangman/controllers/params-admin.controller.js
modules/yangman-resources/src/main/resources/yangman/controllers/request-header.controller.js
modules/yangman-resources/src/main/resources/yangman/controllers/requests-list.controller.js
modules/yangman-resources/src/main/resources/yangman/controllers/yang-form.controller.js
modules/yangman-resources/src/main/resources/yangman/controllers/yangman.controller.js
modules/yangman-resources/src/main/resources/yangman/models/historylist.model.js
modules/yangman-resources/src/main/resources/yangman/services/yangman.services.js
modules/yangman-resources/src/main/resources/yangman/views/leftpanel/collections-tab.tpl.html
modules/yangman-resources/src/main/resources/yangman/views/leftpanel/history-tab.tpl.html
modules/yangman-resources/src/main/resources/yangman/views/leftpanel/modules-tab.tpl.html
modules/yangman-resources/src/main/resources/yangman/views/rightpanel/request-header.tpl.html
modules/yangman-resources/src/main/resources/yangman/yangman.less

index 90a11e40b52805a75c9267728f6a31c34b4131d6..4902ca9585f31305253120fc603b58d70137fbc9 100644 (file)
@@ -5,6 +5,7 @@ define([], function () {
 
         var service = {
                 clearPath: clearPath,
+                checkEmptyIdentifiers: checkEmptyIdentifiers,
                 createPathElement: createPathElement,
                 getModuleNameFromPath: getModuleNameFromPath,
                 getStorageAndNormalizedPath: getStorageAndNormalizedPath,
@@ -53,7 +54,15 @@ define([], function () {
             }
         }
 
-        // TODO: add service's description
+        /**
+         * Translate path url into path elements array
+         * @param path
+         * @param prefixConverter
+         * @param importNodes
+         * @param getDefaultModuleCallback
+         * @param notIdentifiers
+         * @returns {Array}
+         */
         function translate(path, prefixConverter, importNodes, getDefaultModuleCallback, notIdentifiers) {
             var pathStrElements = path.split('/').filter(function (e) {
                     return e !== '';
@@ -125,6 +134,17 @@ define([], function () {
             });
         }
 
+        /**
+         * Check if in path elements array is empty identifier
+         * @param pathArray
+         * @returns {*}
+         */
+        function checkEmptyIdentifiers(pathArray){
+            return pathArray.some(function (item) {
+                return item.hasEmptyIdentifier();
+            });
+        }
+
         /**
          * Service for filling API url object from url string data
          * @param pathArrayIn
@@ -209,7 +229,12 @@ define([], function () {
             return retObj;
         }
 
-        // TODO: add service's description
+        /**
+         * Fill path element's identifiers
+         * @param identifiers
+         * @param label
+         * @param value
+         */
         function fillIdentifiers(identifiers, label, value) {
             identifiers.some(function (i) {
                 var identifierMatch = i.label === label;
@@ -327,6 +352,12 @@ define([], function () {
                 });
             };
 
+            this.hasEmptyIdentifier = function () {
+                return this.identifiers.some(function (item) {
+                    return item.value.length === 0;
+                });
+            };
+
             this.toString = function () {
                 return (this.module ? this.module + ':' : '') + this.name + '/' + (this.hasIdentifier() ?
                                                                     this.getIdentifierValues().join('/') + '/' : '');
index 6ac2f53152b96565d3f8f29005e0eb5d3b35f097..79fe8107d9f30f2d6e6fe5a588b1891b901c3e0e 100644 (file)
@@ -87,5 +87,7 @@
   "YANGMAN_LOADING_MODULES": "Loading application modules...",
   "YANGMAN_EXECUTING_REQUEST": "Request is beeing executed...",
   "YANGMAN_CM_ENLARGE_FONT_SIZE": "Enlarge json font size (Alt +)",
-  "YANGMAN_CM_REDUCE_FONT_SIZE": "Reduce json font size (Alt -)"
+  "YANGMAN_CM_REDUCE_FONT_SIZE": "Reduce json font size (Alt -)",
+  "YANGMAN_INPUT_REQUIRED": "Required",
+  "YANGMAN_ERROR_EMPTY_IDENTIFIERS": "Identifiers in path are required. Please fill empty identifiers for successful request execution."
 }
index fea67ecc11b17f59fb2f4a6df555f297ca9910c4..108e2a4188e3355b7d21153611e70980a1f09940 100644 (file)
@@ -147,9 +147,7 @@ define([
          */
         function close() {
             vm.parametersList.removeEmptyParams();
-            console.debug('closing');
-
-            $mdDialog.hide(vm.parametersList);
+            $mdDialog.hide();
         }
 
         /**
index b2ae3ac951d493c9cfeda442dc3b1667322b73ee..c51db8372d6f4f82e9040df7e4ee08795cd9f7a4 100644 (file)
@@ -64,19 +64,24 @@ define([
             (args.cbk || angular.noop)();
         });
 
-        $scope.$on('YANGMAN_EXECUTE_WITH_DATA', executeWithData);
+        $scope.$on('YANGMAN_EXECUTE_WITH_DATA', function (event, args) {
+            executeOperation(args.params.data ? angular.fromJson(args.params.data) : {}, args.cbk);
+        });
 
         init();
 
-
-        function executeWithData(event, args) {
-            executeOperation(args.params.data ? angular.fromJson(args.params.data) : {}, args.cbk);
-        }
-
+        /**
+         * Setter for selected operation
+         * @param method
+         */
         function setRequestMethod(method){
             requestHeader.selectedOperation = method;
         }
 
+        /**
+         * Setter for request status
+         * @param statusObj
+         */
         function setRequestStatus(statusObj){
             requestHeader.statusObj = statusObj;
         }
@@ -96,8 +101,8 @@ define([
                 locals: {
                     parametersList: $scope.parametersList,
                 },
-            }).then(function (parametersList){
-                $scope.setParametersList(parametersList);
+            }).then(function (){
+                $scope.parametersList.loadListFromStorage();
 
             });
         }
@@ -180,7 +185,7 @@ define([
                     },
                 };
 
-            return (dataTypeFunc[$scope.node.type] || dataTypeFunc.default)();
+            return $scope.node ? (dataTypeFunc[$scope.node.type] || dataTypeFunc.default)() : {};
         }
 
         /**
@@ -328,26 +333,37 @@ define([
          * Execute request operation
          */
         function executeOperation(requestData, executeCbk){
+            var allowExecuteOperation =
+                requestHeader.selectedShownDataType === 'form' && $scope.selectedSubApi ?
+                    !PathUtilsService.checkEmptyIdentifiers($scope.selectedSubApi.pathArray) : true;
 
-            showRequestProgress();
+            if ( allowExecuteOperation ) {
+                showRequestProgress();
+                $scope.rootBroadcast('YANGMAN_SET_ERROR_MESSAGE', '');
 
-            setRequestUrl(requestHeader.selectedShownDataType === 'req-data' ? requestHeader.requestUrl : null);
+                setRequestUrl(requestHeader.selectedShownDataType === 'req-data' ? requestHeader.requestUrl : null);
 
-            var historyReq = RequestService.createHistoryRequest(null, null, requestHeader.requestUrl,
-                requestHeader.selectedOperation, '', '', '');
-
-            YangmanService.executeRequestOperation(
-                $scope.selectedApi,
-                $scope.selectedSubApi,
-                requestHeader.selectedOperation,
-                $scope.node,
-                requestHeader.selectedShownDataType,
-                requestHeader.requestUrl,
-                requestData,
-                $scope.parametersList,
-                executeReqSuccCbk,
-                executeReqErrCbk
-            );
+                var historyReq = RequestService.createHistoryRequest(null, null, requestHeader.requestUrl,
+                    requestHeader.selectedOperation, '', '', '');
+
+                YangmanService.executeRequestOperation(
+                    $scope.selectedApi,
+                    $scope.selectedSubApi,
+                    requestHeader.selectedOperation,
+                    $scope.node,
+                    requestHeader.selectedShownDataType,
+                    requestHeader.requestUrl,
+                    requestData,
+                    $scope.parametersList,
+                    executeReqSuccCbk,
+                    executeReqErrCbk
+                );
+            } else {
+                $scope.rootBroadcast(
+                    'YANGMAN_SET_ERROR_MESSAGE',
+                    $filter('translate')('YANGMAN_ERROR_EMPTY_IDENTIFIERS')
+                );
+            }
 
             /**
              * Success callback after executin operation
index 1b7f3edbb907dd1cd7d9b93fe7364e1d9275ce6b..3974ec30aa1ef81c0eb824844856b326e2cd2de7 100644 (file)
@@ -12,20 +12,42 @@ define([
         'YangmanDesignService',
     ];
 
+    /**
+     * Controller for requests lists, means History requests and Collections requests
+     * @param $filter
+     * @param $mdDialog
+     * @param $scope
+     * @param HandleFileService
+     * @param PathUtilsService
+     * @param RequestsService
+     * @param YangmanService
+     * @param YangmanDesignService
+     * @constructor
+     */
     function RequestsListCtrl($filter, $mdDialog, $scope, HandleFileService, PathUtilsService, RequestsService,
                               YangmanService, YangmanDesignService) {
         var vm = this;
 
-        vm.collectionList = RequestsService.createEmptyCollectionList('yangman_collectionsList');
-        vm.collectionsSortAsc = true;
+        /**
+         * List of all collections containing requests, loads even for history controller to use collection names
+         * in saving requests dialog
+         * @type {*|CollectionList}
+         */
+        vm.collectionList = null;
+
+        /**
+         *
+         * @type {*|HistoryList}
+         */
+        vm.requestList = null;
         vm.mainList = null;
-        vm.requestList = RequestsService.createEmptyHistoryList('yangman_requestsList');
+        vm.collectionsSortAsc = true;
         vm.search = '';
 
         // methods
+        vm.clearCollectionList = clearCollectionList;
         vm.clearFilter = clearFilter;
         vm.clearHistoryList = clearHistoryList;
-        vm.clearCollectionList = clearCollectionList;
         vm.colMatchingReqsCount = colMatchingReqsCount;
         vm.deselectAllRequests = deselectAllRequests;
         vm.downloadCollection = downloadCollection;
@@ -35,9 +57,7 @@ define([
         vm.filterColName = filterColName;
         vm.filterReq = filterReq;
         vm.init = init;
-        vm.loadRequests = loadRequests;
         vm.readCollectionFromFile = readCollectionFromFile;
-        vm.refreshCollections = refreshCollections;
         vm.selectAllRequests = selectAllRequests;
         vm.selectRequest = selectRequest;
         vm.showData = showData;
@@ -45,13 +65,11 @@ define([
         vm.showDgDeleteRequests = showDgDeleteRequests;
         vm.showDgEditCollection = showDgEditCollection;
         vm.showDgSaveReq = showDgSaveReq;
-        vm.toggleCollectionsSort = toggleCollectionsSort;
         vm.showForm = showForm;
+        vm.toggleCollectionsSort = toggleCollectionsSort;
+
 
-        $scope.$on('YANGMAN_REFRESH_COLLECTIONS', loadCollectionRequest);
-        $scope.$on('YANGMAN_REFRESH_HISTORY', loadHistoryRequests);
 
-        loadRequests();
 
         /**
          * Save request obje to collection from other controller
@@ -65,49 +83,49 @@ define([
         /**
          * Clear history requests list and save to storage
          */
-        function clearHistoryList(ev) {
+        function clearHistoryList(event) {
 
-            YangmanDesignService.disableMdMenuItem(ev);
+            YangmanDesignService.disableMdMenuItem(event);
 
             var confirm = $mdDialog.confirm()
                 .title($filter('translate')('YANGMAN_DELETE_HISTORY_CONFIRM_TITLE'))
                 .textContent($filter('translate')('YANGMAN_DELETE_HISTORY_CONFIRM_TEXT'))
                 .ariaLabel($filter('translate')('YANGMAN_DELETE_HISTORY_CONFIRM_TITLE'))
-                .targetEvent(ev)
+                .targetEvent(event)
                 .ok($filter('translate')('YANGMAN_OK'))
                 .cancel($filter('translate')('YANGMAN_CANCEL'));
 
             $mdDialog.show(confirm).then(function (){
                 vm.requestList.clear();
                 vm.requestList.saveToStorage();
-                $scope.rootBroadcast('YANGMAN_REFRESH_HISTORY');
-                YangmanDesignService.enableMdMenuItem(ev);
+                loadHistoryList();
+                YangmanDesignService.enableMdMenuItem(event);
             }, function (){
-                YangmanDesignService.enableMdMenuItem(ev);
+                YangmanDesignService.enableMdMenuItem(event);
             });
         }
 
         /**
          * Clear collections requests list and save to storage
          */
-        function clearCollectionList(ev) {
+        function clearCollectionList(event) {
             var confirm = $mdDialog.confirm()
                 .title($filter('translate')('YANGMAN_DELETE_COLLECTION_CONFIRM_TITLE'))
                 .textContent($filter('translate')('YANGMAN_DELETE_COLLECTION_CONFIRM_TEXT'))
                 .ariaLabel($filter('translate')('YANGMAN_DELETE_COLLECTION_CONFIRM_TITLE'))
-                .targetEvent(ev)
+                .targetEvent(event)
                 .ok($filter('translate')('YANGMAN_OK'))
                 .cancel($filter('translate')('YANGMAN_CANCEL'));
 
-            YangmanDesignService.disableMdMenuItem(ev);
+            YangmanDesignService.disableMdMenuItem(event);
 
             $mdDialog.show(confirm).then(function (){
                 vm.collectionList.clear();
                 vm.collectionList.saveToStorage();
                 $scope.rootBroadcast('YANGMAN_REFRESH_COLLECTIONS');
-                YangmanDesignService.enableMdMenuItem(ev);
+                YangmanDesignService.enableMdMenuItem(event);
             }, function () {
-                YangmanDesignService.enableMdMenuItem(ev);
+                YangmanDesignService.enableMdMenuItem(event);
             });
         }
 
@@ -118,15 +136,14 @@ define([
          */
         function saveBcstedHistoryRequest(broadcastEvent, params) {
             vm.requestList.addRequestToList(params.params);
-            vm.requestList.groupListByDate();
             vm.requestList.saveToStorage();
-            loadHistoryRequests();
-
+            loadHistoryList();
             (params.cbk || angular.noop)();
         }
 
         /**
          * Clear value of input file used to import collection
+         * todo: move to design utils
          */
         function clearFileInputValue(){
             angular.element(document).find('#importCollection').val('');
@@ -139,20 +156,13 @@ define([
          */
         function readCollectionFromFile($fileContent) {
             var data = $fileContent,
-                checkArray = [
-                    'sentData',
-                    'receivedData',
-                    'path',
-                    'collection',
-                    'method',
-                    'status',
-                    'name',
-                ];
+                checkArray = ['sentData', 'receivedData', 'path', 'collection', 'method', 'status', 'name'];
 
             if (data && YangmanService.validateFile(data, checkArray)){
                 try {
                     vm.collectionList.loadListFromFile(data);
                     vm.collectionList.saveToStorage();
+                    $scope.rootBroadcast('YANGMAN_REFRESH_COLLECTIONS');
                     clearFileInputValue();
                 }
                 catch (e) {
@@ -224,70 +234,53 @@ define([
          * @param reqObj
          */
         function executeRequest(reqObj) {
-            $scope.setRightPanelSection('req-data');
-            $scope.rootBroadcast(
-                'YANGMAN_HEADER_INIT',
-                { path: reqObj.path, method: reqObj.method },
-                function (){
-                    $scope.rootBroadcast(
-                        'YANGMAN_EXECUTE_WITH_DATA',
-                        { data: reqObj.sentData },
-                        function (historyReq){
-                            showData(historyReq);
-                        }
-                    );
-                }
-            );
-
+            showData(reqObj);
+            $scope.rootBroadcast('YANGMAN_EXECUTE_WITH_DATA',{ data: reqObj.sentData });
         }
 
-
         /**
-         * Show current reqObj json data in right panel section
+         * Method for setup data into CM, Header, find api, subapi, node
          * @param reqObj
-         * @param dataType
+         * @param status
          */
-        function showData(reqObj) {
-
-            $scope.setRightPanelSection('req-data');
-            $scope.setJsonView(true, reqObj.method !== 'GET');
+        function showData(reqObj, select){
+            var headerObj = {
+                    path: reqObj.path,
+                    method: reqObj.method
+                },
+                receivedData = {};
 
-            $scope.rootBroadcast('YANGMAN_HEADER_INIT', {
-                path: reqObj.path,
-                method: reqObj.method,
-                statusObj: {
+            // action select request
+            if ( select ) {
+                headerObj.statusObj = {
                     status: reqObj.responseStatus,
                     statusText: reqObj.responseStatusText,
                     time: reqObj.responseTime,
-                },
-            });
+                };
+
+                receivedData = reqObj.receivedData;
+
+                $scope.rootBroadcast(
+                    'YANGMAN_SET_ERROR_DATA',
+                    reqObj.receivedData && reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {}
+                );
+            }
+
+            $scope.setRightPanelSection('req-data');
+            $scope.setJsonView(true, reqObj.method !== 'GET');
+
+            $scope.rootBroadcast('YANGMAN_HEADER_INIT', headerObj);
+            $scope.rootBroadcast('YANGMAN_FILL_NODE_FROM_REQ', { requestUrl: reqObj.path });
 
             $scope.rootBroadcast(
-                'YANGMAN_SET_ERROR_DATA',
-                reqObj.receivedData && reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {}
+                'YANGMAN_SET_CODEMIRROR_DATA_RECEIVED',
+                { data: reqObj.setDataForView(receivedData) }
             );
 
             $scope.rootBroadcast(
                 'YANGMAN_SET_CODEMIRROR_DATA_SENT',
                 { data: reqObj.setDataForView(reqObj.sentData) }
             );
-            $scope.rootBroadcast(
-                'YANGMAN_SET_CODEMIRROR_DATA_RECEIVED',
-                { data: reqObj.setDataForView(reqObj.receivedData) }
-            );
-
-            var data = reqObj.method === 'GET' ? reqObj.receivedData : reqObj.sentData;
-
-            $scope.rootBroadcast('YANGMAN_FILL_NODE_FROM_REQ', { requestUrl: reqObj.path, leftpanel: 0},
-                function (){
-                    if ( $scope.node ) {
-                        // try to fill node
-                        YangmanService.fillNodeFromResponse($scope.node, data);
-                        $scope.node.expanded = true;
-                    }
-
-                }
-            );
         }
 
         /**
@@ -300,20 +293,20 @@ define([
         /**
          * Dialog for deleting either selected requests or reqObj
          *
-         * @param ev
+         * @param event
          * @param reqObj
          */
-        function showDgDeleteRequests(ev, reqObj){
+        function showDgDeleteRequests(event, reqObj){
 
             var confirm = $mdDialog.confirm()
                 .title($filter('translate')('YANGMAN_DELETE_REQ_CONFIRM_TITLE'))
                 .textContent($filter('translate')('YANGMAN_DELETE_REQ_CONFIRM_TEXT'))
                 .ariaLabel($filter('translate')('YANGMAN_DELETE_REQ_CONFIRM_TITLE'))
-                .targetEvent(ev)
+                .targetEvent(event)
                 .ok($filter('translate')('YANGMAN_OK'))
                 .cancel($filter('translate')('YANGMAN_CANCEL'));
 
-            YangmanDesignService.disableMdMenuItem(ev);
+            YangmanDesignService.disableMdMenuItem(event);
 
             $mdDialog.show(confirm).then(function (){
                 if (reqObj){
@@ -325,9 +318,15 @@ define([
                     });
                 }
                 vm.mainList.saveToStorage();
-                $scope.rootBroadcast('YANGMAN_REFRESH_HISTORY');
+
+                if (vm.mainList === vm.requestList) {
+                    loadHistoryList();
+                }
+                else {
+                    refreshCollectionsWithExpansion();
+                }
             }, function (){
-                YangmanDesignService.enableMdMenuItem(ev);
+                YangmanDesignService.enableMdMenuItem(event);
             });
         }
 
@@ -351,7 +350,7 @@ define([
             $mdDialog.show(confirm).then(function (){
                 vm.collectionList.deleteCollection(collObj);
                 vm.collectionList.saveToStorage();
-                refreshCollections();
+                refreshCollectionsWithExpansion();
             }, function (){
                 YangmanDesignService.enableMdMenuItem(ev);
             });
@@ -431,7 +430,7 @@ define([
             requests.forEach(function (reqObj){
                 vm.collectionList.addRequestToList(reqObj);
                 vm.collectionList.saveToStorage();
-                refreshCollections();
+                refreshCollectionsWithExpansion();
             });
         }
 
@@ -465,7 +464,7 @@ define([
         function changeCollectionName(names){
             vm.collectionList.renameCollection(names[0], names[1]);
             vm.collectionList.saveToStorage();
-            refreshCollections();
+            refreshCollectionsWithExpansion();
         }
 
         /**
@@ -475,7 +474,7 @@ define([
         function duplicateCollection(names){
             vm.collectionList.duplicateCollection(names[0], names[1]);
             vm.collectionList.saveToStorage();
-            refreshCollections();
+            refreshCollectionsWithExpansion();
         }
 
 
@@ -483,22 +482,45 @@ define([
             vm.mainList.toggleReqSelection(true, vm.mainList.getNewestRequest());
         }
 
+        function loadCollectionsList() {
+            vm.collectionList.loadListFromStorage();
+        }
+
+        function loadHistoryList() {
+            vm.requestList.loadListFromStorage();
+        }
+
         /**
          *
-         * @param list collectionList or requestList object
+         * @param mainList collectionList or requestList object
          */
-        function init(list){
-            vm.mainList = list;
+        function init(mainList){
+
+            vm.collectionList = RequestsService.createEmptyCollectionList('yangman_collectionsList');
+            // collections are loaded for both history and collections tab
+            loadCollectionsList();
 
-            if (list === vm.requestList){
+            vm.requestList = RequestsService.createEmptyHistoryList('yangman_requestsList');
+
+            $scope.$on('YANGMAN_REFRESH_COLLECTIONS', loadCollectionsList);
+
+            // list type dependend operations
+            if (mainList === 'history') {
+
+                vm.mainList = vm.requestList;
+                loadHistoryList();
+
+                $scope.$on('YANGMAN_REFRESH_HISTORY', loadHistoryList);
                 // saving from request header after execution
                 $scope.$on('YANGMAN_SAVE_EXECUTED_REQUEST', saveBcstedHistoryRequest);
                 // saving from request header
                 $scope.$on('YANGMAN_SAVE_REQUEST_TO_COLLECTION', saveRequestFromExt);
                 // select newest request
                 $scope.$on('YANGMAN_SELECT_THE_NEWEST_REQUEST', selectNewestRequest);
+            }
+            else {
+                vm.mainList = vm.collectionList;
 
-            } else {
                 // saving collections expanded status on refresh
                 $scope.$on('YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS', function(event, params){
                     $scope.rootBroadcast('YANGMAN_REFRESH_COLLECTIONS');
@@ -506,30 +528,10 @@ define([
                 });
             }
 
-        }
 
-        /**
-         * Loading history request and grouping by date
-         */
-        function loadHistoryRequests(){
-            vm.requestList.loadListFromStorage();
-            vm.requestList.groupListByDate();
-        }
 
-        /**
-         * Loading collections
-         */
-        function loadCollectionRequest(){
-            vm.collectionList.loadListFromStorage();
         }
 
-        /**
-         * Loading both history and collections reqs
-         */
-        function loadRequests(){
-            loadHistoryRequests();
-            loadCollectionRequest();
-        }
 
         /**
          * Request in list selection
@@ -541,7 +543,7 @@ define([
             vm.mainList.toggleReqSelection(!event.ctrlKey, requestObj);
             $scope.setHistoryReqsSelected(vm.requestList.selectedRequests.length > 0);
             if (!event.ctrlKey){
-                vm.showData(requestObj);
+                vm.showData(requestObj, true);
             }
         }
 
@@ -557,7 +559,7 @@ define([
          */
         function selectAllRequests(){
             deselectAllRequests();
-            vm.mainList.dateGroups.forEach(function(group){
+            vm.mainList.dateGroups.forEach(function (group){
                 vm.mainList.selectReqs(group.requests);
             });
         }
@@ -565,10 +567,10 @@ define([
         /**
          * Refresh and expand collections
          */
-        function refreshCollections(){
-            var collectionNames = vm.collectionList.getExpandedCollectionNames();
-            $scope.rootBroadcast('YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS', null, function(){
-                vm.collectionList.expandCollectionByNames(collectionNames);
+        function refreshCollectionsWithExpansion(){
+            var expandedCollNames = vm.collectionList.getExpandedCollectionNames();
+            $scope.rootBroadcast('YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS', null, function (){
+                vm.collectionList.expandCollectionByNames(expandedCollNames);
             });
         }
 
index 8d90f9be4308c33ea3a7dd84aa25a4293d6940e4..1101976b6e783806904e0aa41518324311a76707 100644 (file)
@@ -33,8 +33,19 @@ define([
         // methods
         yangForm.getNodeName = getNodeName;
 
+        // watchers
         $scope.$on('YANGMAN_SET_ERROR_DATA', setRcvdErrorData);
 
+        $scope.$on('YANGMAN_SET_ERROR_MESSAGE', setErrorMessage);
+
+        /**
+         * Method for set error message in form
+         * @param event
+         * @param message
+         */
+        function setErrorMessage(event, data){
+            yangForm.errorMsg = data.params;
+        }
 
         /**
          * Read and set error message received from header controller
index 30fc24e18d0a72066edb8ede457a262b6ff4973b..3dcdcee9ae0c7143bba2d621ee3ce35e36790c96 100644 (file)
@@ -65,6 +65,7 @@ define([
         $scope.buildRootRequest = buildRootRequest;
         $scope.broadcastFromRoot = broadcastFromRoot;
         $scope.checkAddingListElement = checkAddingListElement;
+        $scope.clearCM = clearCM;
         $scope.rootBroadcast = rootBroadcast;
         $scope.setApi = setApi;
         $scope.setDataStore = setDataStore;
@@ -195,12 +196,35 @@ define([
             main.leftPanelTab = (main.leftPanelTab + 1) % 2;
         }
 
+        /**
+         * Method for opening model detail tab
+         */
         function leftPanelShowModule() {
             if ($scope.node) {
                 main.leftPanelTab = 1;
             }
         }
 
+        /**
+         * General method for switching different section in application
+         * @param param
+         * @param section
+         */
+        function switchSection(param, section){
+            $scope[param] = section;
+        }
+
+        /**
+         * Genereal method for clearing code mirror - sent and received data too
+         */
+        function clearCM(){
+            $scope.rootBroadcast('YANGMAN_SET_CODEMIRROR_DATA_RECEIVED', { data: JSON.stringify({}) });
+            $scope.rootBroadcast('YANGMAN_SET_CODEMIRROR_DATA_SENT', { data: JSON.stringify({}) });
+        }
+
+
+        // SETTERS
+
         /**
          * Switcher for module detail and module list
          * @param value
@@ -211,14 +235,6 @@ define([
             }
         }
 
-        // TODO :: description
-        function switchSection(param, section){
-            $scope[param] = section;
-        }
-
-
-        // SETTERS
-
         /**
          * Set global necessary params
          * @param apis
@@ -294,6 +310,7 @@ define([
 
             if ( subApi ) {
                 PathUtilsService.clearPath($scope.selectedSubApi.pathArray);
+                clearCM();
             }
 
             $scope.$broadcast('SET_SEL_OPERATIONS', subApi ? $scope.selectedSubApi.operations : [], setUrl);
index 3043455545d1f82275d4ba15e13ba65a129d7698..56f205a10fca1b3534f7b032f3b3aae7d9dabd89 100644 (file)
@@ -22,7 +22,6 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
         self.createEntry = createEntry;
         self.deleteRequestItem = deleteRequestItem;
         self.deselectReqs = deselectReqs;
-        self.groupListByDate = groupListByDate;
         self.selectReqs = selectReqs;
         self.toggleReqSelection = toggleReqSelection;
         self.getNewestRequest = getNewestRequest;
@@ -70,35 +69,33 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
         }
 
         /**
-         * Grouping by date to show date groups in yangman
+         * Add element to date group
+         * @param elem
          */
-        function groupListByDate(){
-            self.list.forEach(addToListDateGroup);
-
-            function addToListDateGroup(elem){
-                if (elem.timestamp){
-                    var groupName = roundTimestampToDate(elem.timestamp),
-                        dateGroupArr = self.dateGroups.filter(function(group){
-                            return group.name === groupName;
-                        }),
-                        dateGroup = null;
-
-                    if (dateGroupArr.length){
-                        dateGroup = dateGroupArr[0];
-                    }
-                    else {
-                        dateGroup = {
-                            name: groupName,
-                            longName: new Date(groupName).toDateString(),
-                            requests: [],
-                        };
-                        self.dateGroups.push(dateGroup);
-                    }
-                    dateGroup.requests.push(elem);
+        function addElemToListDateGroup(elem){
+            if (elem.timestamp){
+                var groupName = roundTimestampToDate(elem.timestamp),
+                    dateGroupArr = self.dateGroups.filter(function (group){
+                        return group.name === groupName;
+                    }),
+                    dateGroup = null;
+
+                if (dateGroupArr.length){
+                    dateGroup = dateGroupArr[0];
+                }
+                else {
+                    dateGroup = {
+                        name: groupName,
+                        longName: new Date(groupName).toDateString(),
+                        requests: [],
+                    };
+                    self.dateGroups.push(dateGroup);
                 }
+                dateGroup.requests.push(elem);
             }
         }
 
+
         /**
          *
          * @param elem
@@ -114,6 +111,7 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
          */
         function addRequestToList(reqObj){
             self.list.push(reqObj);
+            addElemToListDateGroup(reqObj);
         }
 
         /**
index ce286a188f21b1d58e79e4dec0ea593ea037c3f9..740734ee32bc08519f56a06555465dda51c5513e 100644 (file)
@@ -73,7 +73,7 @@ define([], function () {
          */
         function prepareReceivedData(node, method, rData, sData, outputType){
             var prepareType = {
-                rpc: function(){
+                rpc: function (){
 
                     if ( outputType === 'form' ){
                         var dObj = {};
@@ -100,7 +100,7 @@ define([], function () {
                         },
                         DEFAULT: function () {
                             return rData;
-                        }
+                        },
                     };
 
                     return (methodType[method] || methodType.DEFAULT)();
@@ -167,8 +167,7 @@ define([], function () {
                 operation: '',
                 reqString:
                     selectedSubApi ?
-                        RequestsService.applyParamsToStr(params, selectedSubApi.buildApiRequestString()) :
-                        '',
+                        RequestsService.applyParamsToStr(params, selectedSubApi.buildApiRequestString()) : '',
                 reqHeaders: {},
                 reqData: '',
                 srcData: '',
@@ -190,12 +189,15 @@ define([], function () {
                 allPreparedData.srcData = null;
                 allPreparedData.reqData = null;
             }
-            else if (operation === 'POST'){
-                allPreparedData.reqData = YangUtilsService.postRequestData(
-                    allPreparedData.reqData,
-                    allPreparedData.reqString,
-                    selectedSubApi
-                );
+            else if ( operation === 'POST' ){
+
+                if ( selectedSubApi ) {
+                    allPreparedData.reqData = YangUtilsService.postRequestData(
+                        allPreparedData.reqData,
+                        allPreparedData.reqString,
+                        selectedSubApi
+                    );
+                }
             }
 
             // set correct host into restangular based on shown data type and prepare data
index 5b8f137e65e11d491db7d3a2cf781c8289efcc9c..1d14f1d7d0cde4d8ce3154fed4624a92dcde74d8 100644 (file)
@@ -1,7 +1,7 @@
 <md-list class="yangmanModule__requests-list__collections-list"
          ng-cloak
          ng-controller="RequestsListCtrl as reqList"
-         ng-init="reqList.init(reqList.collectionList)">
+         ng-init="reqList.init('collections')">
 
     <md-content class="searchBox yangmanModule__left-panel__search" layout="row">
 
index 136de2559146fce77623d41c16be35441cf39ec3..cb9cab263f50242a0c2f828be02229df09beaea0 100644 (file)
@@ -1,6 +1,6 @@
 <md-list class="yangmanModule__requests-list h100"
          ng-cloak
-         ng-init="reqList.init(reqList.requestList)"
+         ng-init="reqList.init('history')"
          ng-controller="RequestsListCtrl as reqList">
 
     <md-content class="searchBox yangmanModule__left-panel__search" layout="row">
index bd309c8960da1bcdae35d83ef5258d6167557e8c..399f233a75555ba959a90cb61e336ff451a579ec 100644 (file)
@@ -29,7 +29,7 @@
     <!-- modules list -->
     <md-list ng-cloak class="yangmanModule__modules-list scrollableY">
 
-        <!-- Loading box -->
+        <!-- Loading bar -->
         <md-progress-linear md-mode="indeterminate" ng-show="modulesList.showLoadingBox"></md-progress-linear>
 
         <!-- Mount point title -->
index a779241b0cc5ba15d83bd582ff12ff048b121f07..e62f7b6fadd36af2244d0e0c8c3fe2aaa9b1e873 100644 (file)
                            class="input-identifier"
                            ng-change="requestHeader.fillNodeData(pathElem, identifier)"
                            ng-model="identifier.value"
-                           aria-label="{{identifier.value}}">
+                           aria-label="{{identifier.value}}"
+                           ng-class="{'md-has-error': !identifier.value.length}">
+                    <!-- input error message -->
+                    <div ng-show="!identifier.value.length" class="md-custom-error">
+                        {{'YANGMAN_INPUT_REQUIRED' | translate}}
+                    </div>
                 </md-input-container>
             </div>
 
index a7453514c7939ec5ce41bd803f9f733d6292b454..0fe941f053015d8979ff3455b0654743470ff067 100644 (file)
@@ -204,6 +204,27 @@ md-dialog{
     }
 }
 
+md-input-container{
+    position: relative;
+
+    input.md-has-error{
+        border-color: @reqError!important;
+    }
+
+    .md-custom-error{
+        color: @reqError;
+        position: absolute;
+        bottom: 4px;
+        left: 3px;
+        font-size: 11px;
+        line-height: 14px;
+    }
+}
+
+.md-dialog-container{
+    z-index: 99;
+}
+
 // yangman
 .yangmanModule{
     background-color: @appBackColor;