Yangman - history and collections 90/41890/13
authorStanislav Jamrich <sjamrich@cisco.com>
Fri, 15 Jul 2016 16:40:20 +0000 (18:40 +0200)
committerDaniel Malachovsky <dmalacho@cisco.com>
Fri, 22 Jul 2016 12:23:02 +0000 (14:23 +0200)
- refactor
- multiselect collections
- apply search before multiple action (delete selected, save selected)
- multiselect actions on collections requests (delete selected, save
  selected)
- export collection in a readable format
- fix post in history request
- fix get in history - show json

Change-Id: I54bbd52d2a3a945620a8b156c4c3c3c564b3f425
Signed-off-by: Daniel Kuzma -X (dakuzma - PANTHEON TECHNOLOGIES at Cisco) <dakuzma@cisco.com>
Signed-off-by: Stanislav Jamrich <sjamrich@cisco.com>
17 files changed:
modules/yangman-resources/src/main/resources/yangman/assets/data/locale-en_US.json
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/yangman.controller.js
modules/yangman-resources/src/main/resources/yangman/models/baselist.model.js
modules/yangman-resources/src/main/resources/yangman/models/collectionlist.model.js
modules/yangman-resources/src/main/resources/yangman/models/historylist.model.js
modules/yangman-resources/src/main/resources/yangman/models/parameterslist.model.js
modules/yangman-resources/src/main/resources/yangman/services/handle-file.services.js
modules/yangman-resources/src/main/resources/yangman/services/parameters.services.js
modules/yangman-resources/src/main/resources/yangman/services/requests.services.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/request-item.tpl.html
modules/yangman-resources/src/main/resources/yangman/views/popup/parameters-admin.tpl.html
modules/yangman-resources/src/main/resources/yangman/yangman.less

index 79fe8107d9f30f2d6e6fe5a588b1891b901c3e0e..46dcd9e1a2c6a72634ea00096dcc055beba04730 100644 (file)
@@ -89,5 +89,7 @@
   "YANGMAN_CM_ENLARGE_FONT_SIZE": "Enlarge 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."
+  "YANGMAN_ERROR_EMPTY_IDENTIFIERS": "Identifiers in path are required. Please fill empty identifiers for successful request execution.",
+  "YANGMAN_SORT_COLLECTIONS_DESC": "Sort collections descending",
+  "YANGMAN_SORT_COLLECTIONS_ASC": "Sort collections ascending"
 }
index 01bceb7f5b7e3703d32cd8cf8dac602ae4476019..6b8e7dec014fa2bb7e8bbe3f564dea3399d4dc1d 100644 (file)
@@ -306,18 +306,10 @@ define([
                 reqData = params.reqData ? angular.fromJson(params.reqData) : {};
             }
             else {
-                var historyReqData = YangmanService.prepareAllRequestData(
-                    $scope.selectedApi,
-                    $scope.selectedSubApi,
-                    requestHeader.selectedOperation,
-                    $scope.node,
-                    requestHeader.selectedShownDataType,
-                    requestHeader.requestUrl,
-                    reqData,
-                    null
-                );
+                var data = { srcData: {} };
 
-                reqData = historyReqData.reqData;
+                YangmanService.setSrcDataByDataType(data, $scope.node, {}, 'form');
+                reqData = data.srcData;
             }
 
             historyReq.setExecutionData(reqData, {}, '');
index e6329e1d868bdecb84e6cab02782414935bc99bc..2b73d3def0ff6c1e6607ff9572cadba4dba85a68 100644 (file)
@@ -8,7 +8,7 @@ define([
     angular.module('app.yangman').controller('RequestsListCtrl', RequestsListCtrl);
 
     RequestsListCtrl.$inject = [
-        '$filter', '$mdDialog', '$scope', 'HandleFileService', 'PathUtilsService', 'RequestsService', 'YangmanService',
+        '$filter', '$mdDialog', '$scope', 'YMHandleFileService', 'PathUtilsService', 'RequestsService', 'YangmanService',
         'YangmanDesignService',
     ];
 
@@ -17,14 +17,14 @@ define([
      * @param $filter
      * @param $mdDialog
      * @param $scope
-     * @param HandleFileService
+     * @param YMHandleFileService
      * @param PathUtilsService
      * @param RequestsService
      * @param YangmanService
      * @param YangmanDesignService
      * @constructor
      */
-    function RequestsListCtrl($filter, $mdDialog, $scope, HandleFileService, PathUtilsService, RequestsService,
+    function RequestsListCtrl($filter, $mdDialog, $scope, YMHandleFileService, PathUtilsService, RequestsService,
                               YangmanService, YangmanDesignService) {
         var vm = this;
 
@@ -49,7 +49,7 @@ define([
         vm.clearFilter = clearFilter;
         vm.clearHistoryList = clearHistoryList;
         vm.colMatchingReqsCount = colMatchingReqsCount;
-        vm.deselectAllRequests = deselectAllRequests;
+        vm.deselectAllFilteredRequests = deselectAllFilteredReqs;
         vm.downloadCollection = downloadCollection;
         vm.executeRequest = executeRequest;
         vm.fakeFilter = fakeFilter;
@@ -58,7 +58,7 @@ define([
         vm.filterReq = filterReq;
         vm.init = init;
         vm.readCollectionFromFile = readCollectionFromFile;
-        vm.selectAllRequests = selectAllRequests;
+        vm.selectAllFilteredRequests = selectAllFilteredReqs;
         vm.selectRequest = selectRequest;
         vm.showData = showData;
         vm.showDgDeleteCollection = showDgDeleteCollection;
@@ -67,6 +67,9 @@ define([
         vm.showDgSaveReq = showDgSaveReq;
         vm.showForm = showForm;
         vm.toggleCollectionsSort = toggleCollectionsSort;
+        vm.selectOnlyThisRequest = selectOnlyThisRequest;
+        vm.deselectAllRequests = deselectAllRequests;
+        vm.filterCollReq = filterCollReq;
 
 
 
@@ -135,7 +138,7 @@ define([
          * @param params
          */
         function saveBcstedHistoryRequest(broadcastEvent, params) {
-            vm.requestList.addRequestToList(params.params);
+            vm.requestList.addItemToList(params.params);
             vm.requestList.saveToStorage();
             loadHistoryList();
             (params.cbk || angular.noop)();
@@ -185,9 +188,9 @@ define([
          */
         function downloadCollection(collection) {
 
-            var cListJSON = vm.collectionList.getCollectionInJSON(collection.name);
+            var cListJSON = vm.collectionList.getCollectionInRawJSON(collection.name);
 
-            HandleFileService.downloadFile(collection.name + '.json', cListJSON, 'json', 'charset=utf-8',
+            YMHandleFileService.downloadFile(collection.name + '.json', cListJSON, 'json', 'charset=utf-8',
                 function (){},
                 function (e){
                     console.error('ExportCollection error:', e);
@@ -200,7 +203,13 @@ define([
          * @param reqObj
          */
         function showForm(reqObj) {
-            var data = reqObj.method === 'GET' ? reqObj.receivedData : reqObj.sentData;
+            var data = reqObj.sentData;
+
+            // exception for get method
+            if ( reqObj.method === 'GET' ) {
+                data = reqObj.receivedData;
+                $scope.rootBroadcast('YANGMAN_SET_CODEMIRROR_DATA_RECEIVED', { data: reqObj.setDataForView(data) });
+            }
 
             $scope.rootBroadcast('YANGMAN_SET_ERROR_DATA',
                 reqObj.receivedData && reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {});
@@ -320,7 +329,9 @@ define([
                     vm.mainList.deleteRequestItem(reqObj);
                 }
                 else {
-                    vm.mainList.selectedRequests.forEach(function (elem){
+                    vm.mainList.getSelectedItems(
+                        vm.mainList === vm.collectionList ? filterCollReq : filterReq
+                    ).forEach(function (elem){
                         vm.mainList.deleteRequestItem(elem);
                     });
                 }
@@ -369,7 +380,10 @@ define([
          * @returns {boolean}
          */
         function filterReq(reqObj){
-            return reqObj.path.toLowerCase().indexOf(vm.search.toLowerCase()) > -1;
+            var searchPhrase = vm.search.toLocaleLowerCase();
+            return reqObj.path.toLowerCase().indexOf(searchPhrase) > -1 ||
+                reqObj.collection.toLowerCase().indexOf(searchPhrase) > -1 ||
+                reqObj.method.toLowerCase() === searchPhrase;
         }
 
         /**
@@ -406,6 +420,7 @@ define([
             return true;
         }
 
+
         /**
          * Show dialog for saving reqObj to collection (used for duplicate req too)
          * @param ev
@@ -422,7 +437,9 @@ define([
                 targetEvent: ev,
                 clickOutsideToClose: true,
                 locals: {
-                    requests: reqObj ? [reqObj] : vm.requestList.selectedRequests,
+                    requests: reqObj ? [reqObj] : vm.mainList.getSelectedItems(
+                        vm.mainList === vm.collectionList ? filterCollReq : filterReq
+                    ),
                     collectionNames: vm.collectionList.getCollectionNames(),
                     duplicate: duplicate || false,
                 },
@@ -435,7 +452,7 @@ define([
          */
         function saveRequests(requests){
             requests.forEach(function (reqObj){
-                vm.collectionList.addRequestToList(reqObj);
+                vm.collectionList.addItemToList(reqObj);
                 vm.collectionList.saveToStorage();
                 refreshCollectionsWithExpansion();
             });
@@ -509,6 +526,14 @@ define([
 
             vm.requestList = RequestsService.createEmptyHistoryList('yangman_requestsList');
 
+
+            // if request was selected, deselect requests in all other instances of RequestsListCtrl
+            $scope.$on('YANGMAN_DESELECT_REQUESTS', function (event, params) {
+                if (params.params.broadcastingCtrl !== vm) {
+                    deselectAllRequests();
+                }
+            });
+
             $scope.$on('YANGMAN_REFRESH_COLLECTIONS', loadCollectionsList);
 
             // list type dependend operations
@@ -520,14 +545,13 @@ define([
                 $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;
-
+                // saving from request header
+                $scope.$on('YANGMAN_SAVE_REQUEST_TO_COLLECTION', saveRequestFromExt);
                 // saving collections expanded status on refresh
                 $scope.$on('YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS', function(event, params){
                     $scope.rootBroadcast('YANGMAN_REFRESH_COLLECTIONS');
@@ -547,28 +571,48 @@ define([
          * @param requestObj
          */
         function selectRequest(event, requestObj){
+            $scope.rootBroadcast('YANGMAN_DESELECT_REQUESTS', { broadcastingCtrl: vm });
             vm.mainList.toggleReqSelection(!event.ctrlKey, requestObj);
-            $scope.setHistoryReqsSelected(vm.requestList.selectedRequests.length > 0);
             if (!event.ctrlKey){
                 vm.showData(requestObj, true);
             }
         }
 
+        /**
+         * Mark only requestObj in current list as selected
+         * Used for example when user clicks on request submenu
+         * @param requestObj
+         */
+        function selectOnlyThisRequest(requestObj){
+            vm.mainList.toggleReqSelection(true, requestObj);
+        }
+
         /**
          * Deselect history requests
          */
-        function deselectAllRequests(){
-            vm.mainList.deselectReqs();
+        function deselectAllFilteredReqs(){
+            vm.mainList.deselectAllFilteredItems(vm.mainList === vm.collectionList ? filterCollReq : vm.filterReq);
+        }
+
+        function deselectAllRequests() {
+            vm.mainList.deselectAllItems();
         }
 
         /**
          * Select history requests
          */
-        function selectAllRequests(){
-            deselectAllRequests();
-            vm.mainList.dateGroups.forEach(function (group){
-                vm.mainList.selectReqs(group.requests);
-            });
+        function selectAllFilteredReqs(){
+            vm.mainList.selectAllFilteredItems(vm.mainList === vm.collectionList ? filterCollReq : vm.filterReq);
+        }
+
+        /**
+         * Use when selecting filtered requests if they are saved to some collection
+         * Additional filter is if the collection of the request is expanded
+         * @param request
+         * @returns {*|boolean}
+         */
+        function filterCollReq(request) {
+            return vm.collectionList.getCollection(request.collection).expanded && vm.filterReq(request);
         }
 
         /**
index eb9ab6dffd50777c6440eebdbdc1b526ebe17212..9452c04910f3c7885a8291664d5d332fce878fb9 100644 (file)
@@ -7,6 +7,7 @@ define([
     'app/yangman/controllers/request-header.controller',
     'app/yangman/controllers/request-data.controller',
     'app/yangman/services/yangman.services',
+    'app/yangman/services/handle-file.services',
     'app/yangman/services/yangman-design.services',
     'app/yangman/services/requests.services',
     'app/yangman/services/parameters.services',
@@ -70,7 +71,6 @@ define([
         $scope.setApi = setApi;
         $scope.setDataStore = setDataStore;
         $scope.setGlobalParams = setGlobalParams;
-        $scope.setHistoryReqsSelected = setHistoryReqsSelected;
         $scope.setJsonView = setJsonView;
         $scope.setLeftPanel = setLeftPanel;
         $scope.setModule = setModule;
@@ -101,18 +101,9 @@ define([
          * @param parametersList
          */
         function setParametersList(parametersList) {
-            console.debug('setting params to $scope', parametersList);
             $scope.parametersList = parametersList;
-            //$scope.rootBroadcast('YANGMAN_REFRESH_PARAMS_IN_CM');
         }
 
-        /**
-         * Set if any history requests are selected in history tab
-         * @param {boolean} selected
-         */
-        function setHistoryReqsSelected(selected) {
-            $scope.historyReqsSelected = selected;
-        }
 
         /**
          * Broadcast from this main controller to all children ctrls
index a430e910a7fde758071fa0b3e4bb5a7303b23a3a..8337e9703a42a09ac7a4dcb6f64fb6f2878673de 100644 (file)
@@ -7,35 +7,86 @@ define([], function (){
      * @constructor
      * @param ParsingJsonService
      */
-    function BaseListModel(ParsingJsonService) {
+    function BaseListModel($filter, ParsingJsonService) {
 
         var self = this;
 
+        /**
+         * General list of all objects to simply treat them
+         * @type {Array}
+         */
+        self.list = [];
+        /**
+         * Simple list of selected items from self.list
+         * @type {Array}
+         */
+        self.selectedItems = [];
+
         self.addFromJSON = addFromJSON;
-        self.addRequestToList = addRequestToList;
-        self.createEntry = createEntry;
-        self.errorEditCbk = errorEditCbk;
+        self.addItemToList = addItemToList;
+        self.createItem = createItem;
         self.loadListFromStorage = loadListFromStorage;
-        self.refresh = refresh;
         self.saveToStorage = saveToStorage;
-        self.successfullEditCbk = successfullEditCbk;
         self.setName = setName;
+        self.selectAllFilteredItems = selectAllFilteredItems;
+        self.deselectAllFilteredItems = deselectAllFilteredItems;
+        self.getSelectedItems = getSelectedItems;
+        self.deselectAllItems = deselectAllItems;
 
-        function setName(name) {
-            self.name = name;
+        function deselectAllItems() {
+            self.list.forEach(function (item) {
+                item.selected = false;
+            });
+            self.selectedItems = [];
         }
 
-        function createEntry(elem) {
-            return elem;
+        /**
+         * @returns {Array}
+         */
+        function getSelectedItems(filterFunc) {
+            if (filterFunc) {
+                return $filter('filter')(self.selectedItems, filterFunc);
+            }
+            else {
+                return self.selectedItems;
+            }
         }
 
-        function addRequestToList(){}
+        /**
+         * Mark all items matching filter as selected
+         * Toggle only items matching filter, other items let be as they are
+         * @param filterFunc function returning boolean
+         */
+        function selectAllFilteredItems(filterFunc) {
+            $filter('filter')(self.list, filterFunc).forEach(function (item) {
+                item.selected = true;
+                if (self.selectedItems.indexOf(item) === -1){
+                    self.selectedItems.push(item);
+                }
+            });
+        }
 
-        function refresh(){}
+        /**
+         * Mark all requests matching filter as deselected
+         * Toggle only requests matching filter, other requests let be as they are
+         * @param filterFunc
+         */
+        function deselectAllFilteredItems(filterFunc) {
+            $filter('filter')(self.list, filterFunc).forEach(function (item) {
+                item.selected = false;
+                self.selectedItems.splice(self.selectedItems.indexOf(item), 1);
+            });
+        }
 
-        function successfullEditCbk(){}
+        function setName(name) {
+            self.name = name;
+        }
+
+        function createItem(elem) {
+            return elem;
+        }
 
-        function errorEditCbk(){}
+        function addItemToList(){}
 
         /**
          * Loading from localStorage
@@ -46,9 +97,9 @@ define([], function (){
             if (storageList){
                 self.clear();
                 ParsingJsonService.parseJson(storageList).map(function (elem) {
-                    return self.createEntry(elem);
+                    return self.createItem(elem);
                 }).forEach(function (elem) {
-                    self.addRequestToList(elem);
+                    self.addItemToList(elem);
                 });
             }
         }
@@ -70,8 +121,8 @@ define([], function (){
          */
         function addFromJSON(json) {
             json.forEach(function (elem) {
-                var req = self.createEntry(elem);
-                self.addRequestToList(req);
+                var item = self.createItem(elem);
+                self.addItemToList(item);
             });
         }
     }
index 3860c08c35d85f16c2497f557be89f69ac2f2510..fdbf035f0aadaa6a28e73696c6d1c38c51b7e28a 100644 (file)
@@ -10,20 +10,23 @@ define(
          * @param ParsingJsonService
          * @param RequestsService
          */
-        function CollectionListModel(ParsingJsonService, RequestsService){
+        function CollectionListModel($filter, ParsingJsonService, RequestsService){
 
-            BaseListModel.call(this, ParsingJsonService);
+            BaseListModel.call(this, $filter, ParsingJsonService);
 
             /* jshint validthis: true */
             var self = this;
 
+            /**
+             * Array of collections in which are requests from self.list groupped
+             * @type {Array}
+             */
             self.collections = [];
-            self.selectedRequests = [];
 
-            self.addRequestToList = addRequestToList;
+            self.addItemToList = addItemToList;
             self.clear = clear;
             self.collectionExists = collectionExists;
-            self.createEntry = createEntry;
+            self.createItem = createItem;
             self.deleteCollection = deleteCollection;
             self.deleteRequestItem = deleteRequestItem;
             self.duplicateCollection = duplicateCollection;
@@ -36,6 +39,7 @@ define(
             self.getCollectionInJSON = getCollectionInJSON;
             self.getExpandedCollectionNames = getExpandedCollectionNames;
             self.expandCollectionByNames = expandCollectionByNames;
+            self.getCollectionInRawJSON = getCollectionInRawJSON;
 
             /**
              *
@@ -45,6 +49,11 @@ define(
                 return JSON.stringify(self.toJSON(collectionName));
             }
 
+            function getCollectionInRawJSON(collectionName){
+                return self.toJSON(collectionName);
+            }
+
+
             /**
              * @param collObj
              */
@@ -87,11 +96,27 @@ define(
              */
             function toggleReqSelection(onlyOneSelected, reqObj){
 
-                self.collections.forEach(function (collection){
-                    collection.data.forEach(function (req){
-                        req.selected = reqObj === req;
+                //self.collections.forEach(function (collection){
+                //    collection.data.forEach(function (req){
+                //        req.selected = reqObj === req;
+                //    });
+                //});
+
+                if (onlyOneSelected){
+                    self.selectedItems.forEach(function (req){
+                        req.selected = false;
                     });
-                });
+                    self.selectedItems = [];
+                }
+
+                if (reqObj.selected && !onlyOneSelected){
+                    self.selectedItems.splice(self.selectedItems.indexOf(reqObj), 1);
+                }
+
+                reqObj.selected = (reqObj.selected && onlyOneSelected) || !reqObj.selected;
+                if (reqObj.selected){
+                    self.selectedItems.push(reqObj);
+                }
             }
 
             /**
@@ -109,7 +134,7 @@ define(
              * @param elem
              * @returns {HistoryRequest|*}
              */
-            function createEntry(elem) {
+            function createItem(elem) {
                 return RequestsService.createHistoryRequestFromElement(elem);
             }
 
@@ -150,7 +175,8 @@ define(
              *
              * @param reqObj
              */
-            function addRequestToList(reqObj){
+            function addItemToList(reqObj){
+                self.list.push(reqObj);
                 if (reqObj.collection) {
                     var col = null;
                     if (self.collectionExists(reqObj.collection)) {
@@ -180,6 +206,8 @@ define(
 
             function clear() {
                 self.collections = [];
+                self.selectedItems = [];
+                self.list = [];
             }
 
             /**
@@ -214,7 +242,7 @@ define(
                         return RequestsService.createHistoryRequest(elem.sentData, elem.receivedData, elem.path,
                             elem.method, elem.status, elem.name, elem.collection);
                     }).forEach(function (elem) {
-                        self.addRequestToList(elem);
+                        self.addItemToList(elem);
                     });
                 }
             }
index 56f205a10fca1b3534f7b032f3b3aae7d9dabd89..62cd60cee573f4c26e5ff62a9567e7a438b733d4 100644 (file)
@@ -3,29 +3,35 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
 
     /**
      * Base history list object
+
      * @constructor
      * @param ParsingJsonService
      * @param RequestsService
      */
     function HistoryListModel($filter, ParsingJsonService, RequestsService){
 
-        BaseListModel.call(this, ParsingJsonService);
+        BaseListModel.call(this, $filter, ParsingJsonService);
 
         /* jshint validthis: true */
         var self = this;
-        self.list = [];
+
+
+        /**
+         * Array of groups in which are requests from self.list groupped
+         * @type {Array}
+         */
         self.dateGroups = [];
-        self.selectedRequests = [];
 
-        self.addRequestToList = addRequestToList;
+        self.addItemToList = addItemToList;
         self.clear = clear;
-        self.createEntry = createEntry;
+        self.createItem = createItem;
         self.deleteRequestItem = deleteRequestItem;
         self.deselectReqs = deselectReqs;
         self.selectReqs = selectReqs;
         self.toggleReqSelection = toggleReqSelection;
         self.getNewestRequest = getNewestRequest;
 
+
         /**
          * Get request with max timestamp (was executed as the last)
          */
@@ -40,19 +46,19 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
          */
         function toggleReqSelection(onlyOneSelected, reqObj){
             if (onlyOneSelected){
-                self.selectedRequests.forEach(function (req){
+                self.selectedItems.forEach(function (req){
                     req.selected = false;
                 });
-                self.selectedRequests = [];
+                self.selectedItems = [];
             }
 
             if (reqObj.selected && !onlyOneSelected){
-                self.selectedRequests.splice(self.selectedRequests.indexOf(reqObj), 1);
+                self.selectedItems.splice(self.selectedItems.indexOf(reqObj), 1);
             }
 
             reqObj.selected = (reqObj.selected && onlyOneSelected) || !reqObj.selected;
             if (reqObj.selected){
-                self.selectedRequests.push(reqObj);
+                self.selectedItems.push(reqObj);
             }
 
         }
@@ -101,7 +107,7 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
          * @param elem
          * @returns {HistoryRequest|*}
          */
-        function createEntry(elem) {
+        function createItem(elem) {
             return RequestsService.createHistoryRequestFromElement(elem);
         }
 
@@ -109,7 +115,7 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
          *
          * @param reqObj
          */
-        function addRequestToList(reqObj){
+        function addItemToList(reqObj){
             self.list.push(reqObj);
             addElemToListDateGroup(reqObj);
         }
@@ -125,7 +131,7 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
         function clear() {
             self.list = [];
             self.dateGroups = [];
-            self.selectedRequests = [];
+            self.selectedItems = [];
         }
 
         /**
@@ -142,10 +148,10 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
          * Mark all history requests as deselected
          */
         function deselectReqs(){
-            self.selectedRequests.forEach(function (request){
+            self.selectedItems.forEach(function (request){
                 request.selected = false;
             });
-            self.selectedRequests = [];
+            self.selectedItems = [];
         }
 
         /**
@@ -154,7 +160,7 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
         function selectReqs(requestsList){
             requestsList.forEach(function (reqObj){
                 reqObj.selected = true;
-                self.selectedRequests.push(reqObj);
+                self.selectedItems.push(reqObj);
             });
         }
     }
index 2448422d391ec2373a01a25b02c412ae52dec26c..d3a1b1611ad4a17ee462b9ce5bdafd59f2953589 100644 (file)
@@ -7,17 +7,17 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
      * @param ParsingJsonService
      * @param ParametersService
      */
-    function ParametersListModel(ParsingJsonService, ParametersService){
+    function ParametersListModel($filter, ParsingJsonService, ParametersService){
 
-        BaseListModel.call(this, ParsingJsonService);
+        BaseListModel.call(this, $filter, ParsingJsonService);
 
         /* jshint validthis: true */
         var self = this;
         self.list = [];
 
-        self.addRequestToList = addRequestToList;
+        self.addItemToList = addItemToList;
         self.clear = clear;
-        self.createEntry = createEntry;
+        self.createItem = createItem;
         self.deleteParameterItem = deleteParameterItem;
         self.setName = setName;
         self.addEmptyItem = addEmptyItem;
@@ -57,7 +57,7 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
                 ParsingJsonService.parseJson(data).map(function (elem) {
                     return ParametersService.createParameter(elem);
                 }).forEach(function (elem) {
-                    self.addRequestToList(elem);
+                    self.addItemToList(elem);
                 });
             }
         }
@@ -84,7 +84,7 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
          * Add empty param to list
          */
         function addEmptyItem() {
-            self.addRequestToList(self.createEntry());
+            self.addItemToList(self.createItem());
         }
 
         function removeEmptyParams() {
@@ -98,7 +98,7 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
          * @param elem
          * @returns {Parameter|*}
          */
-        function createEntry(element) {
+        function createItem(element) {
             if (!element){
                 element = {
                     name: '',
@@ -112,7 +112,7 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
          *
          * @param paramObj
          */
-        function addRequestToList(paramObj){
+        function addItemToList(paramObj){
             self.list.push(paramObj);
         }
 
index 22b53b3e91c29720bafe7d3ef152588816314fe4..2963363753fe3c7184c17f42c9f2a95c4056a105 100644 (file)
@@ -1,9 +1,9 @@
-define(['angular'], function (angular) {
+define([], function () {
     'use strict';
 
-    angular.module('app.yangman').service('HandleFileService', HandleFileService);
+    angular.module('app.yangman').service('YMHandleFileService', YMHandleFileService);
 
-    function HandleFileService(){
+    function YMHandleFileService(){
         var service = {
             downloadFile: downloadFile,
         };
@@ -21,7 +21,7 @@ define(['angular'], function (angular) {
          */
         function downloadFile(filename, data, format, charset, successCbk, errorCbk){
             try {
-                var blob = new Blob([data], { type: 'application/' + format + '; ' + charset + ';' }),
+                var blob = new Blob([JSON.stringify(data, null, 4)], { type: 'application/' + format + '; ' + charset + ';' }),
                     downloadLink = angular.element('<a></a>');
 
                 downloadLink.attr('href', window.URL.createObjectURL(blob));
index 8f5249e5e5a6241ab2ca59d0977287a076c4390a..a5ce415bea7deea8a62d5fc2e099433195ad1bd5 100644 (file)
@@ -7,9 +7,9 @@ define([
 
         angular.module('app.yangman').service('ParametersService', ParametersService);
 
-        ParametersService.$inject = ['ParsingJsonService'];
+        ParametersService.$inject = ['$filter', 'ParsingJsonService'];
 
-        function ParametersService(ParsingJsonService){
+        function ParametersService($filter, ParsingJsonService){
 
             var service = {};
 
@@ -56,7 +56,7 @@ define([
              * @returns {*}
              */
             function createEmptyParametersList(name){
-                var result = new ParametersListModel(ParsingJsonService, service);
+                var result = new ParametersListModel($filter, ParsingJsonService, service);
                 result.setName(name);
                 return result;
             }
index 88eed08b09798e8ec0fc8739a68e241226bab16f..76b2a5a0f0b032f8ba3eb4b2535c0cd0bf97f8ab 100644 (file)
@@ -175,7 +175,7 @@ define([
          * @returns {CollectionList}
          */
         function createEmptyCollectionList(name){
-            var result = new CollectionListModel(ParsingJsonService, service);
+                var result = new CollectionListModel($filter, ParsingJsonService, service);
             result.setName(name);
             return result;
         }
index 65f106a01ab03b1a01422b74d4a0d4dc43ffa7a3..89c1393f18bab263efa55709a81891fd0a779d50 100644 (file)
@@ -10,6 +10,7 @@ define([], function () {
         'ENV',
         'ParsingJsonService',
         'RequestsService',
+        'PathUtilsService',
 
     ];
 
@@ -19,7 +20,8 @@ define([], function () {
         YangUtilsRestangularService,
         ENV,
         ParsingJsonService,
-        RequestsService
+        RequestsService,
+        PathUtilsService
     ){
         var service = {
             cutUrl: cutUrl,
@@ -30,6 +32,7 @@ define([], function () {
             prepareAllRequestData: prepareAllRequestData,
             prepareReceivedData: prepareReceivedData,
             putIntoObj: putIntoObj,
+            setSrcDataByDataType: setSrcDataByDataType,
             validateFile: validateFile,
         };
 
@@ -57,10 +60,12 @@ define([], function () {
          * @param destinationObj
          */
         function putIntoObj(sourceObj, destinationObj, containter){
-            Object.keys(sourceObj).forEach(function(prop){
-                destinationObj[containter] = destinationObj[containter] ? destinationObj[containter] : {};
-                destinationObj[containter][prop] = sourceObj[prop];
-            });
+            if ( sourceObj ) {
+                Object.keys(sourceObj).forEach(function(prop){
+                    destinationObj[containter] = destinationObj[containter] ? destinationObj[containter] : {};
+                    destinationObj[containter][prop] = sourceObj[prop];
+                });
+            }
         }
 
         /**
@@ -78,6 +83,12 @@ define([], function () {
 
                     if ( outputType === 'form' ){
                         var dObj = {};
+
+                        if ( !sData ) {
+                            sData = {};
+                            sData[node.label] = {};
+                        }
+
                         putIntoObj(rData, dObj, node.label);
                         putIntoObj(sData[node.label] ? sData[node.label] : sData, dObj, node.label);
                         return dObj;
@@ -147,6 +158,45 @@ define([], function () {
             return result ? rIndex : null;
         }
 
+        /**
+         * Apply all parametrized values into request (data, url, pathArray)
+         * @param allPreparedData
+         * @param params
+         * @param selSubApiCopy
+         * @param requestUrl
+         */
+        function setParametrizedData(allPreparedData, params, selSubApiCopy, requestUrl){
+            allPreparedData.reqFullUrl = RequestsService.applyParamsToStr(params, requestUrl);
+
+            // apply parametrized value into request data in string form
+            allPreparedData.reqString =
+                selSubApiCopy ? RequestsService.applyParamsToStr(params, selSubApiCopy.buildApiRequestString()) : '';
+
+            if ( !angular.equals(allPreparedData.reqFullUrl, requestUrl) && selSubApiCopy ){
+                // fill parametrized data into path array
+                PathUtilsService.fillPath(selSubApiCopy.pathArray, allPreparedData.reqFullUrl);
+            }
+
+            allPreparedData.reqData = RequestsService.applyParamsToObj(params, allPreparedData.srcData);
+        }
+
+        /**
+         * Set source data into request object based on shown data type
+         * @param allPreparedData
+         * @param node
+         * @param requestData
+         * @param dataType
+         */
+        function setSrcDataByDataType(allPreparedData, node, requestData, dataType){
+            if ( dataType === 'form' && node){
+                node.buildRequest(RequestBuilderService, requestData, node.module);
+                allPreparedData.srcData = angular.copy(requestData);
+            }
+            else {
+                allPreparedData.srcData = requestData;
+            }
+        }
+
         /**
          * Prepare all necessary data for executing or saving request
          * @param selectedApi
@@ -163,27 +213,19 @@ define([], function () {
         function prepareAllRequestData(selectedApi, selectedSubApi, operation, node, dataType, requestUrl, requestData,
                                        params) {
             var allPreparedData = {
-                customRestangular: null,
-                headers: {},
-                operation: '',
-                reqString:
-                    selectedSubApi ?
-                        RequestsService.applyParamsToStr(params, selectedSubApi.buildApiRequestString()) : '',
-                reqHeaders: {},
-                reqData: '',
-                srcData: '',
-            };
-
-            if ( dataType === 'form' && node){
-                node.buildRequest(RequestBuilderService, requestData, node.module);
-                allPreparedData.srcData = angular.copy(requestData);
-            }
-            else {
-                allPreparedData.srcData = requestData;
-            }
-
-            allPreparedData.reqData = RequestsService.applyParamsToObj(params, allPreparedData.srcData);
+                    customRestangular: null,
+                    headers: {},
+                    operation: '',
+                    reqString: '',
+                    reqHeaders: {},
+                    reqData: '',
+                    srcData: '',
+                    reqFullUrl: '',
+                },
+                selSubApiCopy = angular.copy(selectedSubApi);
 
+            setSrcDataByDataType(allPreparedData, node, requestData, dataType);
+            setParametrizedData(allPreparedData, params, selSubApiCopy, requestUrl);
 
             // prepare req data
             if (operation === 'GET' || operation === 'DELETE'){
@@ -192,19 +234,18 @@ define([], function () {
             }
             else if ( operation === 'POST' ){
 
-                if ( selectedSubApi ) {
+                if ( selSubApiCopy ) {
                     allPreparedData.reqData = YangUtilsService.postRequestData(
                         allPreparedData.reqData,
                         allPreparedData.reqString,
-                        selectedSubApi
+                        selSubApiCopy
                     );
                 }
             }
 
             // set correct host into restangular based on shown data type and prepare data
             if ( dataType === 'req-data' ){
-                requestUrl = RequestsService.applyParamsToStr(params, requestUrl);
-                var parser = locationHelper(requestUrl, ['pathname', 'origin']),
+                var parser = locationHelper(allPreparedData.reqFullUrl, ['pathname', 'origin']),
                     raParam = '';
 
                 YangUtilsRestangularService.setBaseUrl(parser.origin);
index 1d14f1d7d0cde4d8ce3154fed4624a92dcde74d8..ab1780fe12018591d8516b5a3007810db16a1fbe 100644 (file)
         <!-- sorting -->
         <md-button  ng-click="reqList.toggleCollectionsSort()"
                     ng-disabled="reqList.collectionList.collections.length <= 1">
-            <md-icon class="material-icons clickable" >
-                sort
-            </md-icon>
-            <md-tooltip md-direction="bottom">{{ ( reqList.collectionsSortAsc ? 'YANGMAN_SORT_DESC' : 'YANGMAN_SORT_ASC' )| translate}}</md-tooltip>
+            <md-icon class="material-icons clickable" > sort</md-icon>
+            <md-tooltip md-direction="bottom">
+                {{ ( reqList.collectionsSortAsc ? 'YANGMAN_SORT_COLLECTIONS_DESC' : 'YANGMAN_SORT_COLLECTIONS_ASC' )| translate}}
+            </md-tooltip>
         </md-button>
         <!-- /sorting -->
 
+        <!-- save -->
+        <md-button  ng-click="reqList.showDgSaveReq($event)"
+                    ng-disabled="reqList.mainList.getSelectedItems(reqList.filterCollReq).length === 0">
+            <md-icon class="material-icons clickable">
+                save
+            </md-icon>
+            <md-tooltip md-direction="bottom">{{'YANGMAN_REQS_SAVE_TO_COL'| translate}}</md-tooltip>
+        </md-button>
+        <!-- /save -->
+
         <!-- importing -->
         <input type="file" accept=".json" id="importCollection" on-read-file="reqList.readCollectionFromFile($fileContent)">
         <md-button>
         </md-button>
         <!-- /importing -->
 
-        <!-- delete collections -->
-        <md-button  ng-click="reqList.clearCollectionList($event)"
-                    ng-disabled="!reqList.mainList.collections.length">
-            <md-icon class="material-icons clickable" >
-                delete_forever
-            </md-icon>
-            <md-tooltip md-direction="bottom">{{'YANGMAN_DELETE_COLLECTIONS' | translate}}</md-tooltip>
-        </md-button>
-        <!-- / delete collections -->
+        <md-menu layout-align="center start">
+            <md-button ng-disabled="!reqList.mainList.list.length" aria-label="menu"  ng-click="$mdOpenMenu()">
+                <md-icon class="material-icons clickable"> delete</md-icon>
+                <md-tooltip md-direction="bottom">{{'YANGMAN_DELETE_OPTIONS' | translate}}</md-tooltip>
+            </md-button>
+            <md-menu-content>
+                <!-- delete selected -->
+                <md-menu-item>
+                    <md-button aria-label="{{'YANGMAN_REQS_DELETE'| translate}}"
+                               ng-click="reqList.showDgDeleteRequests($event)"
+                               ng-disabled="reqList.mainList.getSelectedItems(reqList.filterCollReq).length === 0">
+                        <md-icon class="material-icons clickable">
+                            delete
+                        </md-icon>
+                        {{'YANGMAN_REQS_DELETE'| translate}}
+                    </md-button>
+                </md-menu-item>
+                <!-- / delete selected -->
+                <!-- clear collections -->
+                <md-menu-item>
+                    <md-button aria-label="{{'YANGMAN_DELETE_COLLECTIONS' | translate}}"
+                               ng-click="reqList.clearCollectionList($event)">
+                        <md-icon class="material-icons clickable">
+                            delete_forever
+                        </md-icon>
+                        {{'YANGMAN_DELETE_COLLECTIONS' | translate}}
+                    </md-button>
+                </md-menu-item>
+                <!-- / clear history -->
+            </md-menu-content>
+        </md-menu>
+        <!-- / menu for deleting and clearing -->
+
+        <!-- menu for selecting and deselecting-->
+        <md-menu layout-align="center start">
+            <md-button ng-disabled="( !reqList.mainList.list.length)" aria-label="menu"  ng-click="$mdOpenMenu()">
+                <md-icon class="material-icons clickable">
+                    playlist_add_check
+                </md-icon>
+                <md-tooltip md-direction="bottom">{{'YANGMAN_SELECT_OPTIONS' | translate}}</md-tooltip>
+            </md-button>
+            <md-menu-content>
+                <!-- select all -->
+                <md-menu-item>
+                    <md-button aria-label="{{'YANGMAN_SELECT_ALL' | translate}}"
+                               ng-click="reqList.selectAllFilteredRequests()">
+                        <md-icon class="material-icons clickable">
+                            done
+                        </md-icon>
+                        {{'YANGMAN_SELECT_ALL' | translate}}
+                    </md-button>
+                </md-menu-item>
+                <!-- /select all -->
+                <!-- deselect all -->
+                <md-menu-item>
+                    <md-button aria-label="{{'YANGMAN_DESELECT_ALL' | translate}}"
+                               ng-click="reqList.deselectAllFilteredRequests()"
+                               ng-disabled="reqList.mainList.getSelectedItems(reqList.filterCollReq).length === 0">
+                        <md-icon class="material-icons clickable">
+                            close
+                        </md-icon>
+                        {{'YANGMAN_DESELECT_ALL' | translate}}
+                    </md-button>
+                </md-menu-item>
+                <!-- / deselect all -->
+            </md-menu-content>
+        </md-menu>
+        <!-- / menu for selecting and deselecting -->
     </md-content>
 
     <md-divider></md-divider>
 
 
             <md-list ng-show="collection.expanded" class="yangmanModule__requests-list__collection__requests">
-                <div ng-repeat="request in collection.data"
+                <div ng-repeat="request in collection.data | filter: reqList.filterReq"
                      layout="row"
                      class="yangmanModule__requests-list__item-container"
                      ng-include src="globalViewPath + 'leftpanel/request-item.tpl.html'">
index cb9cab263f50242a0c2f828be02229df09beaea0..f6560d01f9cd262de6e2728874cec130625b14fe 100644 (file)
@@ -27,8 +27,8 @@
         </md-input-container>
 
         <!-- save -->
-        <md-button  ng-click="reqList.showDgSaveReq($event, main.currentPath)"
-                    ng-disabled="!reqList.mainList.selectedRequests.length">
+        <md-button  ng-click="reqList.showDgSaveReq($event)"
+                    ng-disabled="!reqList.mainList.getSelectedItems(reqList.filterReq).length">
             <md-icon class="material-icons clickable">
                 save
             </md-icon>
@@ -39,9 +39,7 @@
         <!-- menu for deleting and clearing-->
         <md-menu layout-align="center start">
             <md-button ng-disabled="!reqList.mainList.list.length" aria-label="menu"  ng-click="$mdOpenMenu()">
-                <md-icon class="material-icons clickable">
-                    delete
-                </md-icon>
+                <md-icon class="material-icons clickable"> delete</md-icon>
                 <md-tooltip md-direction="bottom">{{'YANGMAN_DELETE_OPTIONS' | translate}}</md-tooltip>
             </md-button>
             <md-menu-content>
                 <md-menu-item>
                     <md-button aria-label="{{'YANGMAN_REQS_DELETE'| translate}}"
                                ng-click="reqList.showDgDeleteRequests($event)"
-                               ng-disabled="!(reqList.mainList.selectedRequests.length || reqList.mainList.selectedRequests.length)">
-                        <md-icon class="material-icons clickable">
-                            delete
-                        </md-icon>
+                               ng-disabled="!reqList.mainList.getSelectedItems(reqList.filterReq).length">
+                        <md-icon class="material-icons clickable"> delete</md-icon>
                         {{'YANGMAN_REQS_DELETE'| translate}}
                     </md-button>
                 </md-menu-item>
                 <!-- clear history -->
                 <md-menu-item>
                     <md-button aria-label="{{'YANGMAN_DELETE_HISTORY' | translate}}"
-                               ng-click="reqList.clearHistoryList($event)">
-                        <md-icon class="material-icons clickable">
-                            delete_forever
-                        </md-icon>
+                               ng-click="reqList.clearHistoryList($event)"
+                               ng-disabled="!reqList.mainList.list.length">
+                        <md-icon class="material-icons clickable"> delete_forever</md-icon>
                         {{'YANGMAN_DELETE_HISTORY' | translate}}
                     </md-button>
                 </md-menu-item>
@@ -74,7 +69,7 @@
 
         <!-- menu for selecting and deselecting-->
         <md-menu layout-align="center start">
-            <md-button ng-disabled="( !reqList.mainList.list.length)" aria-label="menu"  ng-click="$mdOpenMenu()">
+            <md-button ng-disabled="!reqList.mainList.list.length" aria-label="menu"  ng-click="$mdOpenMenu()">
                 <md-icon class="material-icons clickable">
                     playlist_add_check
                 </md-icon>
@@ -84,8 +79,7 @@
                 <!-- select all -->
                 <md-menu-item>
                     <md-button aria-label="{{'YANGMAN_SELECT_ALL' | translate}}"
-                               ng-click="reqList.selectAllRequests()"
-                               ng-disabled="(reqList.mainList.selectedRequests.length === reqList.mainList.list.length)">
+                               ng-click="reqList.selectAllFilteredRequests()">
                         <md-icon class="material-icons clickable">
                             done
                         </md-icon>
@@ -96,8 +90,7 @@
                 <!-- deselect all -->
                 <md-menu-item>
                     <md-button aria-label="{{'YANGMAN_DESELECT_ALL' | translate}}"
-                               ng-click="reqList.deselectAllRequests()"
-                               ng-disabled="!(reqList.mainList.selectedRequests.length && reqList.mainList.list.length)">
+                               ng-click="reqList.deselectAllFilteredRequests()" ng-disabled="reqList.mainList.getSelectedItems(reqList.filterReq).length === 0">
                         <md-icon class="material-icons clickable">
                             close
                         </md-icon>
index 2c47b3b78cb96b62dc16b7b3685259c69b545b18..713058cef3aaf00482cfbc00d93dcc69f155d6e5 100644 (file)
@@ -25,7 +25,7 @@
          layout-align="center start"
          ng-class="{selected: request.selected}">
 
-    <md-button aria-label="menu" class="md-primary" ng-click="$mdOpenMenu()">
+    <md-button aria-label="menu" class="md-primary" ng-click="reqList.selectOnlyThisRequest(request); $mdOpenMenu()">
         <i class="material-icons">menu</i>
     </md-button>
 
index c265c0f2978f86e8b0a272220f0189f8bd711958..63e3d3bed8cc521a46093ed9a6150fdaf7eb0f53 100644 (file)
                                         filter: paramsAdmin.filterParam |
                                         orderBy: paramsAdmin.sortFunc : !paramsAdmin.sortAsc
                                         track by $index">
-
                         <!-- name input -->
                         <md-input-container>
                             <label>{{'YANGMAN_PARAM_KEY' | translate}}</label>
index 0fe941f053015d8979ff3455b0654743470ff067..c8bc4b6f88ef47cbdacb26eaf2622b452a78c694 100644 (file)
@@ -338,6 +338,15 @@ md-input-container{
                 color: @dashedBorderColor;
             }
 
+            button, md-menu button{
+                margin: 6px 0 0 0;
+                min-width: 35px;
+            }
+
+
+
+
+
             .md-has-icon.modules-list-search{
                 padding: 2px 25px;
                 margin: 0;
@@ -430,20 +439,20 @@ md-input-container{
             }
 
             > button{
-                margin: 6px 10px 0 0;
+                margin: 6px 0 0 0;
                 height: 30px;
-                min-width: 30px;
+                min-width: 35px;
                 padding: 0;
             }
 
             md-menu{
                 margin: 0;
                 height: 30px;
-                min-width: 30px;
+                min-width: 35px;
                 padding: 0;
 
                 > button{
-                    min-width: 30px;
+                    min-width: 35px;
                 }
             }
 
@@ -1067,7 +1076,7 @@ md-input-container{
 
             .selected{
                 button{
-                    background-color: rgba(158,158,158,0.2);
+                    //background-color: rgba(158,158,158,0.2);
                 }
             }
 
@@ -1080,7 +1089,7 @@ md-input-container{
 
             .selected{
                 button{
-                    background-color: rgba(158,158,158,0.2);
+                    //background-color: rgba(158,158,158,0.2);
                 }
             }
         }