[PORTAL-7] Rebase
[portal.git] / ecomp-portal-FE-common / client / app / views / dashboard / dashboard-widget.controller.js
1 /*-\r
2  * ================================================================================\r
3  * ECOMP Portal\r
4  * ================================================================================\r
5  * Copyright (C) 2017 AT&T Intellectual Property\r
6  * ================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ================================================================================\r
19  */\r
20 'use strict';\r
21 \r
22 (function () {\r
23     class CommonWidgetController {\r
24         constructor(dashboardService, $scope, message, $q, $http, conf, $filter,confirmBoxService,$log) {\r
25                 $scope.widgetType = message.type;\r
26                 $scope.widgetTypeDisplay = message.type;\r
27                 $scope.modflag = false;\r
28                 \r
29                 switch (message.type) {\r
30             case 'EVENTS':\r
31                 $scope.widgetTypeDisplay = 'Events'\r
32                 break;\r
33             case 'NEWS':\r
34                 $scope.widgetTypeDisplay = 'News'\r
35                 break;\r
36             case 'IMPORTANTRESOURCES':\r
37                 $scope.widgetTypeDisplay = 'Resources'\r
38                 break;\r
39                 }\r
40  \r
41                 $scope.widgetData = [];\r
42                 dashboardService.getCommonWidgetData(message.type)\r
43                 .then(function (res) {\r
44                          // console.log('CommonWidgetController: result is ' + res);\r
45                          $scope.widgetData = res.response.items;\r
46                  });\r
47                  \r
48                  \r
49                  \r
50                 $scope.setEdit = function(index) {\r
51                         \r
52                         //for(var i=0; i<$scope.widgetData )\r
53                         \r
54                         if($scope.modflag === false){\r
55                                 $scope.widgetData[index].showEdit = true;\r
56                                 $scope.modflag = true;\r
57                         }\r
58                  }               \r
59                 \r
60                  $scope.modify = function(index) {\r
61                         \r
62                         $scope.widgetObject = {};\r
63                         $scope.widgetObject.id = $scope.widgetData[parseInt(index)].id;\r
64                         $scope.widgetObject.category = $scope.widgetData[parseInt(index)].category;\r
65                         $scope.widgetObject.title = $scope.widgetData[parseInt(index)].title;\r
66                         $scope.widgetObject.href = $scope.widgetData[parseInt(index)].href;\r
67                         $scope.widgetObject.eventDate = $scope.widgetData[parseInt(index)].eventDate;\r
68                         $scope.widgetObject.content = $scope.widgetData[parseInt(index)].content;\r
69                         $scope.widgetObject.sortOrder = $scope.widgetData[parseInt(index)].sortOrder;\r
70                         \r
71                         var validateMsg = $scope.validateWidgetObject($scope.widgetObject);\r
72                         if (validateMsg) {\r
73                                 confirmBoxService.showInformation(validateMsg).then(isConfirmed => {return;});\r
74                                 return;\r
75                         }\r
76                         \r
77                         dashboardService.saveCommonWidgetData($scope.widgetObject)\r
78                         .then(function(res){\r
79                                 if (res.status == 'OK') {\r
80                                 dashboardService.getCommonWidgetData(message.type)\r
81                                 .then(function(res){\r
82                                         $scope.widgetData = res.response.items;\r
83                                 $scope.modflag = false;\r
84                                         $scope.cancelEdit(index);\r
85                                         });\r
86                                 }\r
87                                 else {\r
88                                         // Save failed\r
89                                         confirmBoxService.showInformation("Save failed").then(isConfirmed => {return;});\r
90                                         return;\r
91                                 }\r
92                         });   \r
93 \r
94                 };      \r
95                 \r
96                 $scope.newWidgetObject = {};\r
97                 \r
98                 // Answers string error if validation fails; \r
99                 // answers null if all is well.\r
100                 $scope.validateWidgetObject = function(wo) {\r
101                         if (wo.title == null || wo.title == '')\r
102                                 return "Please enter a title.";\r
103                         if (wo.href == null || wo.href == '' || !validateUrl(wo.href))\r
104                                 return "Please enter a valid URL that starts with http.";\r
105                         if (wo.sortOrder == null || wo.sortOrder == '' || isNaN(parseInt(wo.sortOrder)))\r
106                                 return "Please enter a number for the sort order.";\r
107                         if (wo.category=='EVENTS') {\r
108                                 if (wo.eventDate == null || wo.eventDate == '')\r
109                                         return "Please enter a date for the event.";\r
110                                 // Parses and normalizes the date with rollover.\r
111                                 var filteredDate = $filter('date')(wo.eventDate, "yyyy-MM-dd");\r
112                                 // $log.debug('dashboard-widget-controller: date filter yields ' + filteredDate);\r
113                                 // The date picker shows mm/dd/yy.\r
114                                 if (filteredDate == null || filteredDate.length != 10)\r
115                                         return "Please enter a valid date as YYYY-MM-DD";\r
116                                 if (wo.content==null || wo.content=='')\r
117                                         return "Please enter content for the event.";\r
118                         }\r
119                         return null;\r
120                 };\r
121                 \r
122                 $scope.saveNew = function() {\r
123                         $scope.newWidgetObject.category = message.type;\r
124                         // $log.info($scope.newWidgetObject);\r
125                         var validateMsg = $scope.validateWidgetObject($scope.newWidgetObject);\r
126                         if (validateMsg) {\r
127                                 confirmBoxService.showInformation(validateMsg).then(isConfirmed => {return;});\r
128                                 return;\r
129                         }\r
130                         // Transform date into expected storage format\r
131                         $scope.newWidgetObject.eventDate = $filter('date')($scope.newWidgetObject.eventDate, "yyyy-MM-dd");\r
132 \r
133                         dashboardService.saveCommonWidgetData($scope.newWidgetObject)\r
134                         .then(function(res){\r
135                                 if (res.status == 'OK') {\r
136                                         $scope.widgetForm.$setPristine();  \r
137                                         confirmBoxService.showInformation('You have added a new item').then(isConfirmed => {\r
138                                         });\r
139                                         dashboardService.getCommonWidgetData(message.type)\r
140                                         .then(function(res){\r
141                                                 $scope.widgetData = res.response.items;\r
142                                                 $scope.newWidgetObject = {};\r
143                                 });  \r
144                                 }\r
145                                 else {\r
146                                         confirmBoxService.showInformation("Save failed").then(isConfirmed => {return;});\r
147                                         return;\r
148                                 }                               \r
149                         });                     \r
150                 };\r
151                 \r
152                 $scope.remove = function(index) {\r
153                         var confirmMsg = 'Are you sure you want to delete this item from the list?' + ' Press OK to delete.';\r
154                         confirmBoxService.confirm(confirmMsg).then(function (confirmed) {\r
155                     if (confirmed == true) { \r
156                         $scope.widgetObject = {};\r
157                                 $scope.widgetObject.id = $scope.widgetData[parseInt(index)].id;\r
158                                 $scope.widgetObject.category = $scope.widgetData[parseInt(index)].category;\r
159                                 $scope.widgetObject.title = $scope.widgetData[parseInt(index)].title;\r
160                                 $scope.widgetObject.href = $scope.widgetData[parseInt(index)].href;\r
161                                 $scope.widgetObject.sortOrder = $scope.widgetData[parseInt(index)].sortOrder;\r
162                                 \r
163                                 \r
164                                 dashboardService.removeCommonWidgetData($scope.widgetObject)\r
165                                 .then(function(res){\r
166                                         dashboardService.getCommonWidgetData(message.type)\r
167                                         .then(function(res){\r
168                                                 $scope.widgetData = res.response.items;\r
169                                                 $scope.cancelEdit(index);\r
170                                         });                             \r
171                                 });                             \r
172                     }\r
173                 });\r
174                                         \r
175                 };      \r
176                 $scope.closeDialog = function(){\r
177                         $scope.closeThisDialog( $scope.widgetData);\r
178                 }\r
179                 $scope.deleteSpeedDial = function(widget){\r
180                         \r
181                  }\r
182                  \r
183                  $scope.manage = function(index) {\r
184                                 $scope.modflag = true;\r
185                                 \r
186                                 var thisdata = $scope.widgetData[index];\r
187                         $scope.editMode=true;\r
188                         var category = "#category"+index;\r
189                         var categoryEdit = "#categoryEdit"+index;\r
190                         \r
191                         var title = "#title"+index;\r
192                         var titleEdit = "#titleEdit"+index;\r
193 \r
194                         var url = "#href"+index;\r
195                         var urlEdit = "#hrefEdit"+index;\r
196                         \r
197                         var order = "#order"+index;\r
198                         var orderEdit = "#orderEdit"+index;\r
199                   \r
200                         var eventDate = "#eventDate"+index;\r
201                         var eventDateEdit = "#eventDateEdit"+index;\r
202                   \r
203                         \r
204                         var dsavebutton  ="#savebutton"+index;\r
205                         var dremovebutton="#removebutton"+index;\r
206                         var dmanagebutton="#managebutton"+index;\r
207                         var deditRbutton="#editRbutton"+index;\r
208                         \r
209                         $(title).css('display', 'none');\r
210                         $(titleEdit).css('display', 'inherit'); \r
211                         $(url).css('display', 'none');\r
212                         $(urlEdit).css('display', 'inherit'); \r
213                         $(order).css('display', 'none');\r
214                         $(orderEdit).css('display', 'inherit');\r
215                         $(eventDate).css('display', 'none');\r
216                         $(eventDateEdit).css('display', 'inherit');\r
217                         \r
218                         $(dsavebutton).css('display', 'inherit');\r
219                         $(dremovebutton).css('display', 'inherit');\r
220                         $(dmanagebutton).css('display', 'none');\r
221                         $(deditRbutton).css('display', 'inherit');\r
222                         \r
223                       };\r
224                       \r
225                    $scope.cancelEdit = function(index) {\r
226                         \r
227                         $scope.editMode=false;\r
228                         var category = "#category"+index;\r
229                         var categoryEdit = "#categoryEdit"+index;\r
230                         \r
231                         var title = "#title"+index;\r
232                         var titleEdit = "#titleEdit"+index;\r
233         \r
234                         var url = "#href"+index;\r
235                         var urlEdit = "#hrefEdit"+index;\r
236                         \r
237                         var order = "#order"+index;\r
238                         var orderEdit = "#orderEdit"+index;\r
239 \r
240                         var eventDate = "#eventDate"+index;\r
241                         var eventDateEdit = "#eventDateEdit"+index;\r
242 \r
243                         var dsavebutton  ="#savebutton"+index;\r
244                         var dremovebutton  ="#removebutton"+index;\r
245                         var dmanagebutton="#managebutton"+index;\r
246                         var deditRbutton="#editRbutton"+index;\r
247                 \r
248                         $(title).css('display', 'inherit');\r
249                         $(titleEdit).css('display', 'none'); \r
250                         \r
251                         $(url).css('display', 'inherit');\r
252                         $(urlEdit).css('display', 'none'); \r
253                         \r
254                         $(order).css('display', 'inherit');\r
255                         $(orderEdit).css('display', 'none');\r
256 \r
257                         $(eventDate).css('display', 'inherit');\r
258                         $(eventDateEdit).css('display', 'none');\r
259 \r
260                         $(dsavebutton).css('display', 'none');\r
261                         $(dremovebutton).css('display', 'none');\r
262                         $(dmanagebutton).css('display', 'inherit');\r
263                         $(deditRbutton).css('display', 'none');\r
264                         \r
265                      };\r
266                 \r
267                 $scope.popupConfirmWin = function(title, msgBody, callback){\r
268                 modalService.popupConfirmWin.apply(null, arguments);\r
269             };\r
270         }           \r
271     }\r
272     CommonWidgetController.$inject = ['dashboardService', '$scope', 'message', '$q', '$http', 'conf', '$filter','confirmBoxService','$log'];\r
273     angular.module('ecompApp').controller('CommonWidgetController', CommonWidgetController); \r
274 })();\r
275 \r
276 angular.module('ecompApp').filter('cut', function () {\r
277     return function (value, wordwise, max, tail) {\r
278         if (!value) return '';\r
279 \r
280         max = parseInt(max, 10);\r
281         if (!max) return value;\r
282         if (value.length <= max) return value;\r
283 \r
284         value = value.substr(0, max);\r
285         if (wordwise) {\r
286             var lastspace = value.lastIndexOf(' ');\r
287             if (lastspace != -1) {\r
288               //Also remove . and , so its gives a cleaner result.\r
289               if (value.charAt(lastspace-1) == '.' || value.charAt(lastspace-1) == ',') {\r
290                 lastspace = lastspace - 1;\r
291               }\r
292               value = value.substr(0, lastspace);\r
293             }\r
294         }\r
295 \r
296         return value + (tail || ' …');\r
297     };\r
298 });\r
299 \r
300 angular.module('ecompApp').controller('DatePickerController', function ($scope, uibDateParser) {\r
301                   $scope.today = function() {\r
302                     $scope.dt = new Date();\r
303                   };\r
304                   $scope.today();\r
305 \r
306                   $scope.clear = function() {\r
307                     $scope.dt = null;\r
308                   };\r
309 \r
310                   $scope.inlineOptions = {\r
311                     customClass: getDayClass,\r
312                     minDate: new Date(),\r
313                     showWeeks: true\r
314                   };\r
315 \r
316                   $scope.dateOptions = {\r
317                     dateDisabled: disabled,\r
318                     formatYear: 'yy',\r
319                     minDate: new Date(),\r
320                     startingDay: 1\r
321                   };\r
322 \r
323                   // Disable weekend selection\r
324                   function disabled(data) {\r
325                     var date = data.date,\r
326                       mode = data.mode;\r
327                     return mode === 'day' && (date.getDay() === 0 || date.getDay() === 6);\r
328                   }\r
329 \r
330                   $scope.toggleMin = function() {\r
331                     $scope.inlineOptions.minDate = $scope.inlineOptions.minDate ? null : new Date();\r
332                     $scope.dateOptions.minDate = $scope.inlineOptions.minDate;\r
333                   };\r
334 \r
335                   $scope.toggleMin();\r
336 \r
337                   $scope.open1 = function() {\r
338                         // console.log('In open1');\r
339                     $scope.popup1.opened = true;\r
340                   };\r
341 \r
342                   $scope.open2 = function() {\r
343                         // console.log('In open2');\r
344                         $scope.popup2.opened = true;\r
345                   };\r
346 \r
347                   \r
348                   $scope.setDate = function(year, month, day) {\r
349                     $scope.dt = new Date(year, month, day);\r
350                   };\r
351 \r
352                   $scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];\r
353                   $scope.format = $scope.formats[3];\r
354                   $scope.altInputFormats = ['M!/d!/yyyy'];\r
355 \r
356                   $scope.popup1 = {\r
357                     opened: false\r
358                   };\r
359 \r
360                   $scope.popup2 = {\r
361                     opened: false\r
362                   };\r
363 \r
364                   var tomorrow = new Date();\r
365                   tomorrow.setDate(tomorrow.getDate() + 1);\r
366                   var afterTomorrow = new Date();\r
367                   afterTomorrow.setDate(tomorrow.getDate() + 1);\r
368                   $scope.events = [\r
369                     {\r
370                       date: tomorrow,\r
371                       status: 'full'\r
372                     },\r
373                     {\r
374                       date: afterTomorrow,\r
375                       status: 'partially'\r
376                     }\r
377                   ];\r
378 \r
379                   function getDayClass(data) {\r
380                     var date = data.date,\r
381                       mode = data.mode;\r
382                     if (mode === 'day') {\r
383                       var dayToCheck = new Date(date).setHours(0,0,0,0);\r
384 \r
385                       for (var i = 0; i < $scope.events.length; i++) {\r
386                         var currentDay = new Date($scope.events[i].date).setHours(0,0,0,0);\r
387 \r
388                         if (dayToCheck === currentDay) {\r
389                           return $scope.events[i].status;\r
390                         }\r
391                       }\r
392                     }\r
393 \r
394                     return '';\r
395                   }\r
396 });\r
397 \r
398 \r
399 \r
400 function toggleCollapsible(id, clickedIconId, subtitutingIconId){\r
401         $("#"+id).toggle();\r
402         $("#"+clickedIconId).toggle();\r
403         $("#"+subtitutingIconId).toggle();\r
404         setTimeout(function(){focusFirstEle(id);}, 1000);\r
405 }\r
406 \r
407 function focusFirstEle(id){\r
408         var focusItems = $("#"+id).find(":focusable");\r
409         for(var i=0; i<focusItems.length; i++){\r
410                 if(!isHidden(focusItems[i])){\r
411                         var targetClassName = focusItems[i].className;\r
412                         if(targetClassName!='collapsibleArrow'){\r
413                                 focusItems[i].focus();\r
414                                 return;\r
415                         }\r
416                 }\r
417         }\r
418 }     \r
419 \r
420 function validateUrl(value){\r
421     return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);\r
422   }\r