2 * ================================================================================
\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
11 * http://www.apache.org/licenses/LICENSE-2.0
\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
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
29 switch (message.type) {
\r
31 $scope.widgetTypeDisplay = 'Events'
\r
34 $scope.widgetTypeDisplay = 'News'
\r
36 case 'IMPORTANTRESOURCES':
\r
37 $scope.widgetTypeDisplay = 'Resources'
\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
50 $scope.setEdit = function(index) {
\r
52 //for(var i=0; i<$scope.widgetData )
\r
54 if($scope.modflag === false){
\r
55 $scope.widgetData[index].showEdit = true;
\r
56 $scope.modflag = true;
\r
60 $scope.modify = function(index) {
\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
71 var validateMsg = $scope.validateWidgetObject($scope.widgetObject);
\r
73 confirmBoxService.showInformation(validateMsg).then(isConfirmed => {return;});
\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
89 confirmBoxService.showInformation("Save failed").then(isConfirmed => {return;});
\r
96 $scope.newWidgetObject = {};
\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
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
127 confirmBoxService.showInformation(validateMsg).then(isConfirmed => {return;});
\r
130 // Transform date into expected storage format
\r
131 $scope.newWidgetObject.eventDate = $filter('date')($scope.newWidgetObject.eventDate, "yyyy-MM-dd");
\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
139 dashboardService.getCommonWidgetData(message.type)
\r
140 .then(function(res){
\r
141 $scope.widgetData = res.response.items;
\r
142 $scope.newWidgetObject = {};
\r
146 confirmBoxService.showInformation("Save failed").then(isConfirmed => {return;});
\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
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
176 $scope.closeDialog = function(){
\r
177 $scope.closeThisDialog( $scope.widgetData);
\r
179 $scope.deleteSpeedDial = function(widget){
\r
183 $scope.manage = function(index) {
\r
184 $scope.modflag = true;
\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
191 var title = "#title"+index;
\r
192 var titleEdit = "#titleEdit"+index;
\r
194 var url = "#href"+index;
\r
195 var urlEdit = "#hrefEdit"+index;
\r
197 var order = "#order"+index;
\r
198 var orderEdit = "#orderEdit"+index;
\r
200 var eventDate = "#eventDate"+index;
\r
201 var eventDateEdit = "#eventDateEdit"+index;
\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
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
218 $(dsavebutton).css('display', 'inherit');
\r
219 $(dremovebutton).css('display', 'inherit');
\r
220 $(dmanagebutton).css('display', 'none');
\r
221 $(deditRbutton).css('display', 'inherit');
\r
225 $scope.cancelEdit = function(index) {
\r
227 $scope.editMode=false;
\r
228 var category = "#category"+index;
\r
229 var categoryEdit = "#categoryEdit"+index;
\r
231 var title = "#title"+index;
\r
232 var titleEdit = "#titleEdit"+index;
\r
234 var url = "#href"+index;
\r
235 var urlEdit = "#hrefEdit"+index;
\r
237 var order = "#order"+index;
\r
238 var orderEdit = "#orderEdit"+index;
\r
240 var eventDate = "#eventDate"+index;
\r
241 var eventDateEdit = "#eventDateEdit"+index;
\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
248 $(title).css('display', 'inherit');
\r
249 $(titleEdit).css('display', 'none');
\r
251 $(url).css('display', 'inherit');
\r
252 $(urlEdit).css('display', 'none');
\r
254 $(order).css('display', 'inherit');
\r
255 $(orderEdit).css('display', 'none');
\r
257 $(eventDate).css('display', 'inherit');
\r
258 $(eventDateEdit).css('display', 'none');
\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
267 $scope.popupConfirmWin = function(title, msgBody, callback){
\r
268 modalService.popupConfirmWin.apply(null, arguments);
\r
272 CommonWidgetController.$inject = ['dashboardService', '$scope', 'message', '$q', '$http', 'conf', '$filter','confirmBoxService','$log'];
\r
273 angular.module('ecompApp').controller('CommonWidgetController', CommonWidgetController);
\r
276 angular.module('ecompApp').filter('cut', function () {
\r
277 return function (value, wordwise, max, tail) {
\r
278 if (!value) return '';
\r
280 max = parseInt(max, 10);
\r
281 if (!max) return value;
\r
282 if (value.length <= max) return value;
\r
284 value = value.substr(0, max);
\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
292 value = value.substr(0, lastspace);
\r
296 return value + (tail || ' …');
\r
300 angular.module('ecompApp').controller('DatePickerController', function ($scope, uibDateParser) {
\r
301 $scope.today = function() {
\r
302 $scope.dt = new Date();
\r
306 $scope.clear = function() {
\r
310 $scope.inlineOptions = {
\r
311 customClass: getDayClass,
\r
312 minDate: new Date(),
\r
316 $scope.dateOptions = {
\r
317 dateDisabled: disabled,
\r
319 minDate: new Date(),
\r
323 // Disable weekend selection
\r
324 function disabled(data) {
\r
325 var date = data.date,
\r
327 return mode === 'day' && (date.getDay() === 0 || date.getDay() === 6);
\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
335 $scope.toggleMin();
\r
337 $scope.open1 = function() {
\r
338 // console.log('In open1');
\r
339 $scope.popup1.opened = true;
\r
342 $scope.open2 = function() {
\r
343 // console.log('In open2');
\r
344 $scope.popup2.opened = true;
\r
348 $scope.setDate = function(year, month, day) {
\r
349 $scope.dt = new Date(year, month, day);
\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
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
374 date: afterTomorrow,
\r
375 status: 'partially'
\r
379 function getDayClass(data) {
\r
380 var date = data.date,
\r
382 if (mode === 'day') {
\r
383 var dayToCheck = new Date(date).setHours(0,0,0,0);
\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
388 if (dayToCheck === currentDay) {
\r
389 return $scope.events[i].status;
\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
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
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