Initial OpenECOMP Portal commit
[portal.git] / ecomp-portal-FE / client / app / views / dashboard / dashboard-widget.controller.js
diff --git a/ecomp-portal-FE/client/app/views/dashboard/dashboard-widget.controller.js b/ecomp-portal-FE/client/app/views/dashboard/dashboard-widget.controller.js
new file mode 100644 (file)
index 0000000..d489ac4
--- /dev/null
@@ -0,0 +1,422 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+'use strict';
+
+(function () {
+    class CommonWidgetController {
+        constructor(dashboardService, $scope, message, $q, $http, conf, $filter,confirmBoxService,$log) {
+               $scope.widgetType = message.type;
+               $scope.widgetTypeDisplay = message.type;
+               $scope.modflag = false;
+               
+               switch (message.type) {
+            case 'EVENTS':
+               $scope.widgetTypeDisplay = 'Events'
+                break;
+            case 'NEWS':
+               $scope.widgetTypeDisplay = 'News'
+                break;
+            case 'IMPORTANTRESOURCES':
+               $scope.widgetTypeDisplay = 'Resources'
+                break;
+               }
+               $scope.widgetData = [];
+               dashboardService.getCommonWidgetData(message.type)
+               .then(function (res) {
+                        // console.log('CommonWidgetController: result is ' + res);
+                        $scope.widgetData = res.response.items;
+                });
+                 
+                
+                
+               $scope.setEdit = function(index) {
+                       
+                       //for(var i=0; i<$scope.widgetData )
+                       
+                       if($scope.modflag === false){
+                               $scope.widgetData[index].showEdit = true;
+                               $scope.modflag = true;
+                       }
+                }               
+               
+                $scope.modify = function(index) {
+                       
+                       $scope.widgetObject = {};
+                       $scope.widgetObject.id = $scope.widgetData[parseInt(index)].id;
+                       $scope.widgetObject.category = $scope.widgetData[parseInt(index)].category;
+                       $scope.widgetObject.title = $scope.widgetData[parseInt(index)].title;
+                       $scope.widgetObject.href = $scope.widgetData[parseInt(index)].href;
+                       $scope.widgetObject.eventDate = $scope.widgetData[parseInt(index)].eventDate;
+                       $scope.widgetObject.content = $scope.widgetData[parseInt(index)].content;
+                       $scope.widgetObject.sortOrder = $scope.widgetData[parseInt(index)].sortOrder;
+                       
+                       var validateMsg = $scope.validateWidgetObject($scope.widgetObject);
+                       if (validateMsg) {
+                               confirmBoxService.showInformation(validateMsg).then(isConfirmed => {return;});
+                               return;
+                       }
+                       
+                       dashboardService.saveCommonWidgetData($scope.widgetObject)
+                       .then(function(res){
+                               if (res.status == 'OK') {
+                               dashboardService.getCommonWidgetData(message.type)
+                               .then(function(res){
+                                       $scope.widgetData = res.response.items;
+                               $scope.modflag = false;
+                                       $scope.cancelEdit(index);
+                                       });
+                               }
+                               else {
+                                       // Save failed
+                                       confirmBoxService.showInformation("Save failed").then(isConfirmed => {return;});
+                                       return;
+                               }
+                       });   
+
+               };      
+               
+               $scope.newWidgetObject = {};
+               
+               // Answers string error if validation fails; 
+               // answers null if all is well.
+               $scope.validateWidgetObject = function(wo) {
+                       if (wo.title == null || wo.title == '')
+                               return "Please enter a title.";
+                       if (wo.href == null || wo.href == '' || !validateUrl(wo.href))
+                               return "Please enter a valid URL that starts with http.";
+                       if (wo.sortOrder == null || wo.sortOrder == '' || isNaN(parseInt(wo.sortOrder)))
+                               return "Please enter a number for the sort order.";
+                       if (wo.category=='EVENTS') {
+                               if (wo.eventDate == null || wo.eventDate == '')
+                                       return "Please enter a date for the event.";
+                               // Parses and normalizes the date with rollover.
+                               var filteredDate = $filter('date')(wo.eventDate, "yyyy-MM-dd");
+                               // $log.debug('dashboard-widget-controller: date filter yields ' + filteredDate);
+                               // The date picker shows mm/dd/yy.
+                               if (filteredDate == null || filteredDate.length != 10)
+                                       return "Please enter a valid date as YYYY-MM-DD";
+                               if (wo.content==null || wo.content=='')
+                                       return "Please enter content for the event.";
+                       }
+                       return null;
+               };
+               
+               $scope.saveNew = function() {
+                       $scope.newWidgetObject.category = message.type;
+                       // $log.info($scope.newWidgetObject);
+                       var validateMsg = $scope.validateWidgetObject($scope.newWidgetObject);
+                       if (validateMsg) {
+                               confirmBoxService.showInformation(validateMsg).then(isConfirmed => {return;});
+                               return;
+                       }
+                       // Transform date into expected storage format
+                       $scope.newWidgetObject.eventDate = $filter('date')($scope.newWidgetObject.eventDate, "yyyy-MM-dd");
+
+                       dashboardService.saveCommonWidgetData($scope.newWidgetObject)
+                       .then(function(res){
+                               if (res.status == 'OK') {
+                                       $scope.widgetForm.$setPristine();  
+                                       confirmBoxService.showInformation('You have added a new item').then(isConfirmed => {
+                                       });
+                                       dashboardService.getCommonWidgetData(message.type)
+                                       .then(function(res){
+                                               $scope.widgetData = res.response.items;
+                                               $scope.newWidgetObject = {};
+                               });  
+                               }
+                               else {
+                                       confirmBoxService.showInformation("Save failed").then(isConfirmed => {return;});
+                                       return;
+                               }                               
+                       });                     
+               };
+               
+               $scope.remove = function(index) {
+                       var confirmMsg = 'Are you sure you want to delete this item from the list?' + ' Press OK to delete.';
+                       confirmBoxService.confirm(confirmMsg).then(function (confirmed) {
+                    if (confirmed == true) { 
+                       $scope.widgetObject = {};
+                               $scope.widgetObject.id = $scope.widgetData[parseInt(index)].id;
+                               $scope.widgetObject.category = $scope.widgetData[parseInt(index)].category;
+                               $scope.widgetObject.title = $scope.widgetData[parseInt(index)].title;
+                               $scope.widgetObject.href = $scope.widgetData[parseInt(index)].href;
+                               $scope.widgetObject.sortOrder = $scope.widgetData[parseInt(index)].sortOrder;
+                               
+                               
+                               dashboardService.removeCommonWidgetData($scope.widgetObject)
+                               .then(function(res){
+                                       dashboardService.getCommonWidgetData(message.type)
+                                       .then(function(res){
+                                               $scope.widgetData = res.response.items;
+                                               $scope.cancelEdit(index);
+                                       });                             
+                               });                             
+                    }
+                });
+                                       
+               };      
+               $scope.closeDialog = function(){
+                       $scope.closeThisDialog( $scope.widgetData);
+               }
+               $scope.deleteSpeedDial = function(widget){
+                       
+                }
+                
+                $scope.manage = function(index) {
+                               $scope.modflag = true;
+                               
+                               var thisdata = $scope.widgetData[index];
+                       $scope.editMode=true;
+                       var category = "#category"+index;
+                       var categoryEdit = "#categoryEdit"+index;
+                       
+                       var title = "#title"+index;
+                       var titleEdit = "#titleEdit"+index;
+
+                       var url = "#href"+index;
+                       var urlEdit = "#hrefEdit"+index;
+                       
+                       var order = "#order"+index;
+                       var orderEdit = "#orderEdit"+index;
+                 
+                       var eventDate = "#eventDate"+index;
+                       var eventDateEdit = "#eventDateEdit"+index;
+                 
+                       
+                       var dsavebutton  ="#savebutton"+index;
+                       var dremovebutton="#removebutton"+index;
+                       var dmanagebutton="#managebutton"+index;
+                       var deditRbutton="#editRbutton"+index;
+                       
+                       $(title).css('display', 'none');
+                       $(titleEdit).css('display', 'inherit'); 
+                       $(url).css('display', 'none');
+                       $(urlEdit).css('display', 'inherit'); 
+                       $(order).css('display', 'none');
+                       $(orderEdit).css('display', 'inherit');
+                       $(eventDate).css('display', 'none');
+                       $(eventDateEdit).css('display', 'inherit');
+                       
+                       $(dsavebutton).css('display', 'inherit');
+                       $(dremovebutton).css('display', 'inherit');
+                       $(dmanagebutton).css('display', 'none');
+                       $(deditRbutton).css('display', 'inherit');
+                       
+                     };
+                     
+                  $scope.cancelEdit = function(index) {
+                       
+                       $scope.editMode=false;
+                       var category = "#category"+index;
+                       var categoryEdit = "#categoryEdit"+index;
+                       
+                       var title = "#title"+index;
+                       var titleEdit = "#titleEdit"+index;
+       
+                       var url = "#href"+index;
+                       var urlEdit = "#hrefEdit"+index;
+                       
+                       var order = "#order"+index;
+                       var orderEdit = "#orderEdit"+index;
+
+                       var eventDate = "#eventDate"+index;
+                       var eventDateEdit = "#eventDateEdit"+index;
+
+                       var dsavebutton  ="#savebutton"+index;
+                       var dremovebutton  ="#removebutton"+index;
+                       var dmanagebutton="#managebutton"+index;
+                       var deditRbutton="#editRbutton"+index;
+               
+                       $(title).css('display', 'inherit');
+                       $(titleEdit).css('display', 'none'); 
+                       
+                       $(url).css('display', 'inherit');
+                       $(urlEdit).css('display', 'none'); 
+                       
+                       $(order).css('display', 'inherit');
+                       $(orderEdit).css('display', 'none');
+
+                       $(eventDate).css('display', 'inherit');
+                       $(eventDateEdit).css('display', 'none');
+
+                       $(dsavebutton).css('display', 'none');
+                       $(dremovebutton).css('display', 'none');
+                       $(dmanagebutton).css('display', 'inherit');
+                       $(deditRbutton).css('display', 'none');
+                       
+                    };
+               
+               $scope.popupConfirmWin = function(title, msgBody, callback){
+               modalService.popupConfirmWin.apply(null, arguments);
+            };
+        }           
+    }
+    CommonWidgetController.$inject = ['dashboardService', '$scope', 'message', '$q', '$http', 'conf', '$filter','confirmBoxService','$log'];
+    angular.module('ecompApp').controller('CommonWidgetController', CommonWidgetController); 
+})();
+
+angular.module('ecompApp').filter('cut', function () {
+    return function (value, wordwise, max, tail) {
+        if (!value) return '';
+
+        max = parseInt(max, 10);
+        if (!max) return value;
+        if (value.length <= max) return value;
+
+        value = value.substr(0, max);
+        if (wordwise) {
+            var lastspace = value.lastIndexOf(' ');
+            if (lastspace != -1) {
+              //Also remove . and , so its gives a cleaner result.
+              if (value.charAt(lastspace-1) == '.' || value.charAt(lastspace-1) == ',') {
+                lastspace = lastspace - 1;
+              }
+              value = value.substr(0, lastspace);
+            }
+        }
+
+        return value + (tail || ' …');
+    };
+});
+
+angular.module('ecompApp').controller('DatePickerController', function ($scope, uibDateParser) {
+                 $scope.today = function() {
+                   $scope.dt = new Date();
+                 };
+                 $scope.today();
+
+                 $scope.clear = function() {
+                   $scope.dt = null;
+                 };
+
+                 $scope.inlineOptions = {
+                   customClass: getDayClass,
+                   minDate: new Date(),
+                   showWeeks: true
+                 };
+
+                 $scope.dateOptions = {
+                   dateDisabled: disabled,
+                   formatYear: 'yy',
+                   minDate: new Date(),
+                   startingDay: 1
+                 };
+
+                 // Disable weekend selection
+                 function disabled(data) {
+                   var date = data.date,
+                     mode = data.mode;
+                   return mode === 'day' && (date.getDay() === 0 || date.getDay() === 6);
+                 }
+
+                 $scope.toggleMin = function() {
+                   $scope.inlineOptions.minDate = $scope.inlineOptions.minDate ? null : new Date();
+                   $scope.dateOptions.minDate = $scope.inlineOptions.minDate;
+                 };
+
+                 $scope.toggleMin();
+
+                 $scope.open1 = function() {
+                       // console.log('In open1');
+                   $scope.popup1.opened = true;
+                 };
+
+                 $scope.open2 = function() {
+                       // console.log('In open2');
+                       $scope.popup2.opened = true;
+                 };
+
+                 
+                 $scope.setDate = function(year, month, day) {
+                   $scope.dt = new Date(year, month, day);
+                 };
+
+                 $scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
+                 $scope.format = $scope.formats[3];
+                 $scope.altInputFormats = ['M!/d!/yyyy'];
+
+                 $scope.popup1 = {
+                   opened: false
+                 };
+
+                 $scope.popup2 = {
+                   opened: false
+                 };
+
+                 var tomorrow = new Date();
+                 tomorrow.setDate(tomorrow.getDate() + 1);
+                 var afterTomorrow = new Date();
+                 afterTomorrow.setDate(tomorrow.getDate() + 1);
+                 $scope.events = [
+                   {
+                     date: tomorrow,
+                     status: 'full'
+                   },
+                   {
+                     date: afterTomorrow,
+                     status: 'partially'
+                   }
+                 ];
+
+                 function getDayClass(data) {
+                   var date = data.date,
+                     mode = data.mode;
+                   if (mode === 'day') {
+                     var dayToCheck = new Date(date).setHours(0,0,0,0);
+
+                     for (var i = 0; i < $scope.events.length; i++) {
+                       var currentDay = new Date($scope.events[i].date).setHours(0,0,0,0);
+
+                       if (dayToCheck === currentDay) {
+                         return $scope.events[i].status;
+                       }
+                     }
+                   }
+
+                   return '';
+                 }
+});
+
+
+
+function toggleCollapsible(id, clickedIconId, subtitutingIconId){
+       $("#"+id).toggle();
+       $("#"+clickedIconId).toggle();
+       $("#"+subtitutingIconId).toggle();
+       setTimeout(function(){focusFirstEle(id);}, 1000);
+}
+
+function focusFirstEle(id){
+       var focusItems = $("#"+id).find(":focusable");
+       for(var i=0; i<focusItems.length; i++){
+               if(!isHidden(focusItems[i])){
+                       var targetClassName = focusItems[i].className;
+                       if(targetClassName!='collapsibleArrow'){
+                               focusItems[i].focus();
+                               return;
+                       }
+               }
+       }
+}     
+
+function validateUrl(value){
+    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);
+  }