Add config folder to be able to change config
[clamp.git] / src / main / resources / META-INF / resources / designer / lib / angularjs-dropdown-multiselect-old.js
1 'use strict';
2
3 var directiveModule = angular.module('angularjs-dropdown-multiselect-old', ['ngRoute', 
4                                                                         'ngResource',                                                                        
5                                                                         'hljs',
6                                                                         'ui.bootstrap',
7                                                                         'angular-loading-bar', 
8                                                                         'ngAnimate',
9                                                                         'dialogs.main',
10                                                                         'ui.grid', 
11                                                                         'ui.grid.resizeColumns',
12                                                                         'ui.grid.paging',
13                                                                         'ui.grid.selection',
14                                                                         'ui.grid.cellNav',
15                                                                         'ui.grid.pinning',
16                                                                         'ngSanitize','vs-repeat']);
17
18 directiveModule.directive('ngDropdownMultiselectOld', ['$filter', '$document', '$compile', '$parse','$rootScope', '$resource', '$http','$location',
19     function ($filter, $document, $compile, $parse, $rootScope, $resource, $http,$location) 
20     {
21         
22                 //console.log($http);
23
24         return {
25             restrict: 'AE',
26             scope: {
27                 selectedModel: '=',
28                 options: '=',
29                 extraSettings: '=',
30                 events: '=',
31                 searchFilter: '=?',
32                 translationTexts: '=',
33                 groupBy: '@'
34             },
35             template: function (element, attrs) 
36             {
37                 var checkboxes = attrs.checkboxes ? true : false;
38                 var groups = attrs.groupBy ? true : false;
39
40                 var template = '<div class="multiselect-parent btn-group dropdown-multiselect" style="width:100%;">';
41                 template += '<div style="width:98%;" class="dropdown-toggle" ng-class="settings.buttonClasses" ng-click="toggleDropdown()">{{getButtonText()}}&nbsp;<span class="caret"></span></div>';
42                 template += '<ul class="dropdown-menu dropdown-menu-form" ng-style="{display: open ? \'block\' : \'none\', height : settings.scrollable ? settings.scrollableHeight : \'auto\' }" style="overflow: scroll; width:280px;" >';
43                 template += '<li ng-show="settings.enableSearch"><div class="dropdown-header"><input type="text"  class="form-control" style="width: 100%;" ng-model="searchFilter"  ng-focus="this"  placeholder="{{texts.searchPlaceholder}}" /></li>';
44                 template += '<li ng-show="settings.enableSearch" class="divider"></li>';
45                         
46                 template += '<div>';
47                 
48                 if (groups) {
49                         
50                     template += '<li ng-repeat-start="option in orderedItems | filter: searchFilter" ng-show="getPropertyForObject(option, settings.groupBy) !== getPropertyForObject(orderedItems[$index - 1], settings.groupBy)" role="presentation" class="dropdown-header1">{{ getGroupTitle(getPropertyForObject(option, settings.groupBy)) }}</li>';
51                     template += '<li ng-repeat-end role="presentation">';
52                 } else {
53                     template += '<li role="presentation" ng-repeat="option in options| filter: searchFilter">';
54                 }
55
56                 template += '<a role="menuitem" tabindex="-1" ng-click="setSelectedItem(getPropertyForObject(option,settings.idProp))">';
57
58                 if (checkboxes) {
59                     template += '<div class="checkbox"><label><input class="checkboxInput" type="checkbox" ng-click="checkboxClick($event, getPropertyForObject(option,settings.idProp))" ng-checked="isChecked(getPropertyForObject(option,settings.idProp))" /> {{getPropertyForObject(option, settings.displayProp)}}</label></div></a>';
60                 } else {
61                     template += '<span data-ng-class="{\'glyphicon glyphicon-ok\': isChecked(getPropertyForObject(option,settings.idProp))}"></span> {{getPropertyForObject(option, settings.displayProp)}}</a>';
62                 }
63
64                 template += '</li>';
65                 template += '</div>';
66                 
67                 template += '<li ng-hide="(!settings.showCheckAll) && !settings.showUncheckAll" class="divider"></li>';
68                 template += '<li ng-hide="!settings.showCheckAll"><a data-ng-click="selectAll()"><span class="glyphicon glyphicon-ok"></span> {{texts.checkAll}}</a>';
69                 template += '<li ng-show="settings.showUncheckAll"><a data-ng-click="deselectAll();"><span class="glyphicon glyphicon-remove"></span> {{texts.uncheckAll}}</a></li>';
70
71                 template += '<li class="divider" ng-show="settings.selectionLimit > 1"></li>';
72                 template += '<li role="presentation" ng-show="settings.selectionLimit > 1"><a role="menuitem">{{selectedModel.length}} {{texts.selectionOf}} {{settings.selectionLimit}} {{texts.selectionCount}}</a></li>';
73
74                 template += '</ul>';
75                 template += '</div>';
76
77                 element.html(template);
78             },
79             link: function ($scope, $element, $attrs) 
80             {
81                 var $dropdownTrigger = $element.children()[0];
82             
83                
84                 $scope.toggleDropdown = function () {
85                     $scope.open = !$scope.open;
86                    
87                    
88                     
89                     
90                 };
91
92                 $scope.checkboxClick = function ($event, id) {
93                     $scope.setSelectedItem(id);
94                     $event.stopImmediatePropagation();
95                 };
96
97                 $scope.externalEvents = 
98                 {
99                     onItemSelect: angular.noop,
100                     onItemDeselect: angular.noop,
101                     onSelectAll: angular.noop,
102                     onDeselectAll: angular.noop,
103                     onInitDone: angular.noop,
104                     onMaxSelectionReached: angular.noop
105                 };
106
107                 $scope.settings = {
108                     dynamicTitle: true,
109                     scrollable: false,
110                     scrollableHeight: '300px',
111                     closeOnBlur: true,
112                     displayProp: 'id',
113                     idProp: 'id',
114                     externalIdProp: 'id',
115                     enableSearch: false,
116                     selectionLimit: 0,
117                     showCheckAll: true,
118                     showUncheckAll: true,
119                     closeOnSelect: false,
120                     buttonClasses: 'btn btn-default',
121                     closeOnDeselect: false,
122                     groupBy: $attrs.groupBy || undefined,
123                     groupByTextProvider: null,
124                     smartButtonMaxItems: 0,
125                     smartButtonTextConverter: angular.noop
126                 };
127
128                 $scope.texts = {
129                     checkAll: 'Check All',
130                     uncheckAll: 'Uncheck All',
131                     selectionCount: 'checked',
132                     selectionOf: '/',
133                     searchPlaceholder: 'Search...',
134                     buttonDefaultText: 'Select',
135                     dynamicButtonTextSuffix: 'checked'
136                 };
137
138                 $scope.searchFilter = $scope.searchFilter || '';
139
140                 if (angular.isDefined($scope.settings.groupBy)) 
141                 {
142                     $scope.$watch('options', function (newValue)
143                     {
144                         if (angular.isDefined(newValue)) 
145                         {
146                             $scope.orderedItems = $filter('orderBy')(newValue, $scope.settings.groupBy);
147                         }
148                     });
149                 }
150
151                 angular.extend($scope.settings, $scope.extraSettings || []);
152                 angular.extend($scope.externalEvents, $scope.events || []);
153                 angular.extend($scope.texts, $scope.translationTexts);
154
155                 $scope.singleSelection = $scope.settings.selectionLimit === 1;
156
157                 function getFindObj(id) 
158                 {
159                     var findObj = {};
160
161                     if ($scope.settings.externalIdProp === '') 
162                     {
163                         findObj[$scope.settings.idProp] = id;
164                     } 
165                     else 
166                     {
167                         findObj[$scope.settings.externalIdProp] = id;
168                     }
169
170                     return findObj;
171                 }
172
173                 function clearObject(object) 
174                 {
175                     for (var prop in object) 
176                     {
177                         delete object[prop];
178                     }
179                 }
180
181                 if ($scope.singleSelection) 
182                 {
183                     if (angular.isArray($scope.selectedModel) && $scope.selectedModel.length === 0) 
184                     {
185                         clearObject($scope.selectedModel);
186                     }
187                 }
188
189                 if ($scope.settings.closeOnBlur) 
190                 {
191                     $document.on('click', function (e) 
192                     {
193                         var target = e.target.parentElement;
194                         var parentFound = false;
195
196                         while (angular.isDefined(target) && target !== null && !parentFound) 
197                         {
198                                 try
199                                 {
200                                         if (_.contains(target.className.split(' '), 'multiselect-parent') && !parentFound)
201                                     {
202                                         if(target === $dropdownTrigger) 
203                                         {
204                                             parentFound = true;
205                                         }
206                                     }
207                                     
208                                     target = target.parentElement;                                
209                                         
210                                 }catch(e){break;}
211                                 
212                         }
213
214                         if (!parentFound) {
215                             $scope.$apply(function () {
216                                 $scope.open = false;
217                             });
218                         }
219                     });
220                 }
221
222                 $scope.getGroupTitle = function (groupValue) {
223                     if ($scope.settings.groupByTextProvider !== null) {
224                         return $scope.settings.groupByTextProvider(groupValue);
225                     }
226
227                     return groupValue;
228                 };
229
230                 $scope.getButtonText = function () {
231                     if ($scope.settings.dynamicTitle && ($scope.selectedModel.length > 0 || (angular.isObject($scope.selectedModel) && _.keys($scope.selectedModel).length > 0))) {
232                         if ($scope.settings.smartButtonMaxItems > 0) {
233                             var itemsText = [];
234
235                             angular.forEach($scope.options, function (optionItem) {
236                                 if ($scope.isChecked($scope.getPropertyForObject(optionItem, $scope.settings.idProp))) {
237                                     var displayText = $scope.getPropertyForObject(optionItem, $scope.settings.displayProp);
238                                     var converterResponse = $scope.settings.smartButtonTextConverter(displayText, optionItem);
239
240                                     itemsText.push(converterResponse ? converterResponse : displayText);
241                                 }
242                             });
243
244                             if ($scope.selectedModel.length > $scope.settings.smartButtonMaxItems) {
245                                 itemsText = itemsText.slice(0, $scope.settings.smartButtonMaxItems);
246                                 itemsText.push('...');
247                             }
248
249                             return itemsText.join(', ');
250                         } else {
251                             var totalSelected;
252
253                             if ($scope.singleSelection) {
254                                 totalSelected = ($scope.selectedModel !== null && angular.isDefined($scope.selectedModel[$scope.settings.idProp])) ? 1 : 0;
255                             } else {
256                                 totalSelected = angular.isDefined($scope.selectedModel) ? $scope.selectedModel.length : 0;
257                             }
258
259                             if (totalSelected === 0) {
260                                 return $scope.texts.buttonDefaultText;
261                             } else {
262                                 return totalSelected + ' ' + $scope.texts.dynamicButtonTextSuffix;
263                             }
264                         }
265                     } else {
266                         return $scope.texts.buttonDefaultText;
267                     }
268                 };
269
270                 $scope.getPropertyForObject = function (object, property)
271                 {
272                     if (angular.isDefined(object) && object.hasOwnProperty(property)) {
273                         return object[property];
274                     }
275
276                     return '';
277                 };
278
279                 $scope.selectAll = function () 
280                 {
281                         $scope.deselectAll(false,true);
282                     $scope.externalEvents.onSelectAll();
283                     
284                     var len = $scope.selectedModel.length;
285                     
286                     angular.forEach($scope.options, function (value) 
287                     {
288                         if(value[$scope.settings.idProp]=="All")
289                                 {
290                                 if(len > 1)
291                             {
292                                         $scope.setSelectedItem(value[$scope.settings.idProp], true, true);
293                             }
294                             else
295                                 {
296                                 $scope.setSelectedItem(value[$scope.settings.idProp], true, true);
297                             }
298                                 }
299                     });
300                 };
301
302                 $scope.deselectAll = function (sendEvent,ignore) 
303                 {
304                         var len = $scope.selectedModel.length;
305                         
306                         sendEvent = sendEvent || true;
307
308                     if (sendEvent) 
309                     {
310                         $scope.externalEvents.onDeselectAll();
311                     }
312
313                     if ($scope.singleSelection) 
314                     {
315                         clearObject($scope.selectedModel);
316                     } 
317                     else 
318                     {
319                         $scope.selectedModel.splice(0, $scope.selectedModel.length);
320                     }                    
321                     
322                     if(ignore!=true || ignore==undefined)
323                     {
324                             if(len > 1)
325                             {
326                                 $scope.setSelectedItem("All", true, true);
327                             }
328                             else
329                                 {
330                                 $scope.setSelectedItem("All", true, true);
331                             } 
332                     }
333                     
334                     
335                 };
336
337                 $scope.setSelectedItem = function (id, dontRemove, refresh) 
338                 {
339                         var findObj = getFindObj(id);
340                     var finalObj = null;
341
342                     if ($scope.settings.externalIdProp === '') 
343                     {
344                         finalObj = _.find($scope.options, findObj);
345                     } 
346                     else 
347                     {
348                         finalObj = findObj;
349                     }
350                     
351                     
352                     if ($scope.singleSelection) 
353                     {
354                         clearObject($scope.selectedModel);
355                         angular.extend($scope.selectedModel, finalObj);
356                         $scope.externalEvents.onItemSelect(finalObj);
357                         
358                         if ($scope.settings.closeOnSelect) $scope.open = false;
359                         
360                         return;
361                     }
362
363                     dontRemove = dontRemove || false;
364                     
365
366                     var exists = _.findIndex($scope.selectedModel, findObj) !== -1;
367
368                     if (!dontRemove && exists) {
369                         $scope.selectedModel.splice(_.findIndex($scope.selectedModel, findObj), 1);
370                         $scope.externalEvents.onItemDeselect(findObj);
371                     } else if (!exists && ($scope.settings.selectionLimit === 0 || $scope.selectedModel.length < $scope.settings.selectionLimit)) {
372                         $scope.selectedModel.push(finalObj);
373                         $scope.externalEvents.onItemSelect(finalObj);
374                     }
375                     
376                     if ($scope.settings.closeOnSelect) $scope.open = false;
377                     
378                     if(refresh || refresh==undefined)
379                         {
380                          if("/dashboard"==$location.path())
381                                  {
382                                 $rootScope.ReLoadDashboardComboBox($scope.translationTexts.buttonDefaultText,finalObj.id);       
383                                   }
384                                   else if("/api_portfolio"==$location.path())
385                                   {
386                                         $rootScope.ReLoadAPIPortfolioComboBox($scope.translationTexts.buttonDefaultText,finalObj.id);
387                                   }
388                                   else if("/project_portfolio"==$location.path())
389                                   {
390                                         $rootScope.ReLoadProjectPortFolioComboBox($scope.translationTexts.buttonDefaultText,finalObj.id);
391                                   }
392                                   else if("/installed_bundle_versions"==$location.path())
393                                   {
394                                         $rootScope.ReLoadInstalledBundleComboBox($scope.translationTexts.buttonDefaultText,finalObj.id);        
395                                   }else if("/adapter_inventory"==$location.path())
396                                   {
397                                                 $rootScope.ReLoadAdapterInventoryComboBox($scope.translationTexts.buttonDefaultText,finalObj.id);       
398                                   }
399                                   else if("/api_taxonomy"==$location.path())
400                                   {
401                                                 $rootScope.ReLoadAPITaxonomyComboBox($scope.translationTexts.buttonDefaultText,finalObj.id);    
402                                   }else if("/defects"==$location.path())
403                                   {
404                                                 $rootScope.ReLoadDefectReportComboBox($scope.translationTexts.buttonDefaultText,finalObj.id);   
405                                   } else if("/environment_configurations"==$location.path())
406                                   {
407                                                 $rootScope.ReLoadEnvConfigComboBox($scope.translationTexts.buttonDefaultText,finalObj.id);      
408                                   }
409                                         else if("/federated_qc_coverage"==$location.path())       {
410                                                 $rootScope.ReLoadQcCodeCoverageComboBox($scope.translationTexts.buttonDefaultText,finalObj.id); 
411                                   }
412                          
413                          
414                          
415                          
416                          
417                         
418                         }
419                     
420                 };
421
422                 $scope.isChecked = function (id) {
423                     if ($scope.singleSelection) {
424                         return $scope.selectedModel !== null && angular.isDefined($scope.selectedModel[$scope.settings.idProp]) && $scope.selectedModel[$scope.settings.idProp] === getFindObj(id)[$scope.settings.idProp];
425                     }
426
427                     return _.findIndex($scope.selectedModel, getFindObj(id)) !== -1;
428                 };
429
430                 $scope.externalEvents.onInitDone();
431             }
432         };
433 }]);