Yangman - requests settings
[dlux.git] / modules / yangman-resources / src / main / resources / yangman / controllers / params-admin.controller.js
1 define([
2     'app/yangman/services/handle-file.services',
3 ], function () {
4     'use strict';
5
6     angular.module('app.yangman').controller('ParamsAdminCtrl', ParamsAdminCtrl);
7
8     ParamsAdminCtrl.$inject = ['$mdMenu', '$mdDialog', '$scope', '$timeout', 'YangmanService', 'YMHandleFileService', 'parametersList'];
9
10     function ParamsAdminCtrl($mdMenu, $mdDialog, $scope, $timeout, YangmanService, YMHandleFileService, parametersList) {
11         var openMenuListener,
12             vm = this;
13
14         vm.parametersList = parametersList.clone();
15         vm.search = '';
16         vm.sortField1 = '_name';
17         vm.sortField2 = '_value';
18         vm.sortAsc = true;
19
20         vm.close = close;
21         vm.save = save;
22         vm.createEmptyParam = createEmptyParam;
23         vm.removeParam = removeParam;
24         vm.clearFilter = clearFilter;
25         vm.filterParam = filterParam;
26         vm.sortBy = sortBy;
27         vm.sortFunc = sortFunc;
28         vm.exportParameters = exportParameters;
29         vm.importParameters = importParameters;
30         vm.validateNamesUnique = validateNamesUnique;
31         vm.filterChange = filterChange;
32
33         init();
34
35
36         /**
37          * Force validation after some filter is applied
38          */
39         function filterChange() {
40             $timeout(vm.validateNamesUnique);
41         }
42
43         /**
44          * Loop over all name inputs in form and validate duplicities
45          */
46         function validateNamesUnique() {
47             var i = 0;
48             while (vm.paramsForm.hasOwnProperty('name_' + i)){
49                 var modelValue = vm.paramsForm['name_' + i].$modelValue;
50                 vm.paramsForm['name_' + i].$setValidity(
51                     'unique',
52                     vm.parametersList.isNameUnique(modelValue)
53                 );
54                 i++;
55             }
56         }
57
58         /**
59          * Importing all parameters from json
60          * @param fileContent
61          */
62         function importParameters(fileContent) {
63             if (fileContent && YangmanService.validateFile(fileContent, ['name', 'value'])){
64                 try {
65                     vm.parametersList.createParamsFromJson(fileContent);
66                     vm.parametersList.saveToStorage();
67                     angular.element(document).find('#importParameters').val('');
68                     createEmptyParam();
69                 }
70                 catch (e) {
71                     angular.element(document).find('#importParameters').val('');
72                     console.error('DataStorage error:', e);
73                 }
74             }
75             else {
76                 angular.element(document).find('#importParameters').val('');
77             }
78
79         }
80
81         /**
82          * Export all parameters to json file
83          */
84         function exportParameters() {
85
86             YMHandleFileService.downloadFile(
87                 'yangman_parameters.json',
88                 vm.parametersList.toJSON(),
89                 'json',
90                 'charset=utf-8',
91                 function (){},
92                 function (e){
93                     console.error('Export parameters error:', e);
94                 }
95             );
96         }
97
98         /**
99          * Set attribute to use when sorting
100          * @param sortField1 , sortField2
101          */
102         function sortBy(sortField1, sortField2) {
103             vm.sortField1 = sortField1;
104             vm.sortField2 = sortField2;
105             vm.sortAsc = !vm.sortAsc;
106             vm.parametersList.applyValsForFilters();
107             $timeout(vm.validateNamesUnique);
108         }
109
110         /**
111          * Sort parameters with empty params at the end of list
112          * @param item
113          * @returns {*}
114          */
115         function sortFunc(item) {
116             return [item[vm.sortField1] ? item[vm.sortField1] : (vm.sortAsc ? String.fromCharCode(255) : ''),
117                     item[vm.sortField2] ? item[vm.sortField2] : (vm.sortAsc ? String.fromCharCode(255) : '')];
118         }
119
120         /**
121          * Empty or matching params will be in list
122          * @param paramObj
123          * @returns {boolean}
124          */
125         function filterParam(paramObj) {
126             return !(paramObj._name || paramObj._value) ||
127                 (paramObj._name && paramObj._name.indexOf(vm.search) !== -1) ||
128                 (paramObj._value && paramObj._value.indexOf(vm.search) !== -1);
129         }
130
131
132         function clearFilter() {
133             vm.search = '';
134         }
135
136         /**
137          * Load params list and add one empty to the end of list
138          */
139         function init(){
140             vm.parametersList.loadListFromStorage();
141             createEmptyParam();
142             openMenuListener = $scope.$on('$mdMenuOpen', function () {
143                 closeOpenedMenu();
144                 $timeout(registerClickOutside);
145             });
146         }
147
148         /**
149          * Remove param from list
150          * @param paramObj
151          */
152         function removeParam(paramObj) {
153             vm.parametersList.deleteParameterItem(paramObj);
154             $timeout(vm.validateNamesUnique);
155         }
156
157         /**
158          * Create new empty param
159          */
160         function createEmptyParam() {
161             vm.parametersList.addEmptyItem();
162         }
163
164         /**
165          * Cancel dialog
166          */
167         function close() {
168             vm.parametersList.removeEmptyParams();
169             $mdDialog.hide();
170         }
171
172         /**
173          * Save list to storage and re-init dialog
174          */
175         function save() {
176             vm.parametersList.saveToStorage();
177             init();
178         }
179
180         function registerClickOutside() {
181             $(document).click(function () {
182                 closeOpenedMenu();
183             });
184         }
185
186         function unregisterClickOutside() {
187             $(document).off('click');
188         }
189
190         function openMenuDestroyListener() {
191             $scope.$on('$destroy', function () {
192                 openMenuListener();
193             });
194         }
195
196         function closeOpenedMenu() {
197             unregisterClickOutside();
198             openMenuDestroyListener();
199             $mdMenu.hide();
200         }
201
202
203
204     }
205
206     return ParamsAdminCtrl;
207
208 });