Free cookie consent management tool by TermsFeed Policy Generator

source: branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/wwwroot/js/hubs/calendarhubber.js @ 13795

Last change on this file since 13795 was 13795, checked in by jlodewyc, 8 years ago

#2582 Resource Permissions added

File size: 33.0 KB
Line 
1
2angular.module('wjm', ['ui.bootstrap', 'ui.calendar', 'angularTreeview', 'ngDialog']).
3
4           controller('resourceCtrl', function ($rootScope, $scope, uiCalendarConfig, $compile, ngDialog, $timeout) {
5               var vm = $scope;
6
7               var date = new Date();
8
9               var d = date.getDate();
10               var m = date.getMonth();
11               var y = date.getFullYear();
12               var hubber = $.connection.calendarHub;
13
14               vm.alertMessage = "No alerts";
15               vm.currentcal = [];
16               $scope.permission = false;
17               vm.selectedEventId = -1;
18               vm.groups = [];
19               vm.clients = [];
20               vm.init = function () {
21
22                   //  $.connection.hub.logging = true;
23
24
25                   var v = document.getElementById("userId").innerHTML;
26                   $.connection.hub.qs = { 'userid': v };
27                   $.connection.hub.start().done(function () {
28                       hubber.server.requestInfo();
29                   });
30                   hubber.client.processData = function (data, users, groups) {
31                       vm.data = JSON.parse(data);
32                       vm.permUsers = JSON.parse(users);
33                       vm.permGroups = JSON.parse(groups);
34                       $scope.buildTree();
35                     
36                       $scope.$apply();
37                   };
38                   hubber.client.savingCurrentDone = function () {
39                       vm.calendarSaver = false;
40                       $scope.clearCurrentCalendar();
41                       $scope.$apply();
42                   };
43                   hubber.client.savingAllDone = function () {
44                       vm.calendarSaver = false;
45                       clearAllCalendarsFunc();
46                       $scope.$apply();
47                   };
48                   hubber.client.processDispose = function (disp) {
49                       vm.treeview.currentNode.IsDisposable = disp;
50                       $scope.calendarDispose = false;
51                       $scope.$apply();
52                   }
53                   hubber.client.processPermissions = function (id, perm) {
54                       var json = JSON.parse(perm);
55                     
56                       $scope.treeview.currentNode.permissions = json;
57                       refreshPermissions();
58                       $scope.permissionLoader = false;
59                       $scope.$apply();
60                   }
61                   hubber.client.processDowntime = function (id, down) {
62                       var json = JSON.parse(down);
63                       var arrdown = [];
64                       var str = "";
65                       for (var i = 0; i < json.length; i++) {
66                           if (json[i].DowntimeType === 0) {
67                               str = "Unavailable";
68                               col = "#006080";
69                           }
70                           else {
71                               str = "Shutdown";
72                               col = "#993300";
73                           }
74                           arrdown.push({
75                               id: json[i].Id,
76                               title: str,
77                               start: new Date(json[i].StartDate),
78                               end: new Date(json[i].EndDate),
79                               allDay: json[i].AllDayEvent,
80                               color: col,
81                               rec: {
82                                   recurrence: json[i].Recurring,
83                                   recid: json[i].RecurringId,
84                                   days: [false, false, false, false, false, false, false],
85                                   start: new Date(json[i].StartDate),
86                                   end: new Date(json[i].EndDate)
87
88                               },
89                               changed: false
90                           });
91                       }
92                       var dat = { 'id': id, 'down': [arrdown] };
93                       $scope.treeview.currentNode.calendar = dat;
94
95                       $scope.currentcal = $scope.treeview.currentNode.calendar;
96                       $("#resourcecalendar").fullCalendar('refresh');
97                       $scope.$apply();
98                   }
99
100                   $scope.$watch("treeview.currentNode", function (newValue, oldValue) {
101                       $scope.currentcal = [];
102                       $(".selected.ng-binding").addClass('loaded');
103                       $scope.selectedEventId = -1;
104                       
105                       if ($scope.treeview.currentNode != null && $scope.treeview.currentNode.Id != undefined) {
106                           if ($scope.treeview.currentNode.calendar.length === 0) {
107                               hubber.server.requestPermissions(vm.treeview.currentNode.Id);
108                               hubber.server.requestDownTime(vm.treeview.currentNode.Id);
109                               vm.permissionLoader = true;
110                           }
111                           else {
112                               $timeout(function () {
113                                   refreshPermissions();
114                                   $scope.currentcal = $scope.treeview.currentNode.calendar;
115                               }, 0);
116
117                           }
118                       }
119
120                   });
121               }
122               function refreshPermissions() {
123                   for (var i = 0; i < $scope.permUsers.length; i++){
124                       $scope.permUsers[i].state = false;
125                       for (var j = 0; j < $scope.treeview.currentNode.permissions.length; j++) {
126                           if($scope.permUsers[i].Id === $scope.treeview.currentNode.permissions[j].GrantedUserId)
127                               $scope.permUsers[i].state = true;
128                       }
129                   }
130                   for (var i = 0; i < $scope.permGroups.length; i++) {
131                       $scope.permGroups[i].state = false;
132                       for (var j = 0; j < $scope.treeview.currentNode.permissions.length; j++) {
133                           if ($scope.permGroups[i].Id === $scope.treeview.currentNode.permissions[j].GrantedUserId)
134                               $scope.permGroups[i].state = true;
135                       }
136                   }
137               }
138               $scope.clearTreeSelect = function () {
139                   if (vm.treeview.currentNode != undefined) {
140                       vm.treeview.currentNode.selected = undefined;
141                       vm.treeview.currentNode = undefined;
142                       vm.selectedEventId = -1;
143                   }
144               }
145               $scope.buildTree = function () {
146                   vm.tree = [];
147                   vm.temptree = [];
148                   vm.top = false;
149                   var ungrouped = {
150                       children: [],
151                       Name: 'Ungrouped'
152                   }
153                   for (; vm.data.length > 0;) {
154
155                       if (vm.data[0].ParentResourceId == null && vm.data[0].IsDisposable !== undefined) {
156                           var curr = $scope.seekChildren(vm.data.splice(0, 1)[0]);
157                           vm.clients.push(curr);
158                           ungrouped.children.push(curr);
159                       }
160                       else if (vm.data[0].ParentResourceId == null) {
161                           var curr = $scope.seekChildren(vm.data.splice(0, 1)[0]);
162                           vm.groups.push(curr);
163                           vm.tree.push(curr);
164                       }
165                       else {
166                           var curr = $scope.seekChildren(vm.data.splice(0, 1)[0]);
167                           if (curr.IsDisposable !== undefined)
168                               vm.clients.push(curr);
169                           else
170                               vm.groups.push(curr);
171                           vm.temptree.push(curr);
172                       }
173                   }
174                   vm.tree.push(ungrouped);
175
176               };
177
178               $scope.seekChildren = function (current) {
179                   current.calendar = [];
180                   current.children = [];
181                   current.todelete = [];
182                   current.changes = false;
183                   current.collapsed = true;
184                   for (var t = 0; t < vm.temptree.length;) {
185                       if (current.Id == vm.temptree[t].ParentResourceId) {
186                           current.children.push(vm.temptree.splice(t, 1)[0]);
187                       }
188                       else {
189                           t++;
190                       }
191                   }
192                   var childc = current.children.length;//Remembers count of children received from temp tree;
193                   for (var t = 0; t < vm.data.length;) {
194                       if (current.Id == vm.data[t].ParentResourceId) {
195                           if (vm.data[t].IsDisposable !== undefined)
196                               vm.clients.push(vm.data[t]);
197                           else
198                               vm.groups.push(vm.data[t]);
199                           current.children.push(vm.data.splice(t, 1)[0]);
200                       }
201                       else {
202                           t++;
203                       }
204                   }
205                   for (var t = childc; t < current.children.length; t++) {
206                       current.children[t] = $scope.seekChildren(current.children[t]);
207                   }
208                   return current;
209               }
210               $scope.toggleDisposable = function () {
211                   $scope.calendarDispose = true;
212                   hubber.server.toggleDisposable(vm.treeview.currentNode.Id);
213               }
214               $scope.pushPermissions = function () {
215                   var perms = [];
216                   $scope.permissionLoader = true;
217                   var node = $scope.treeview.currentNode;
218                   for (var i = 0; i < $scope.permGroups.length; i++) {
219                       if ($scope.permGroups[i].state === true)
220                           perms.push($scope.permGroups[i].Id);
221                   }
222                   for (var i = 0; i < $scope.permUsers.length; i++) {
223                       if ($scope.permUsers[i].state === true)
224                           perms.push($scope.permUsers[i].Id);
225                   }
226                   hubber.server.changePermissions(perms, node.Id);
227               }
228               function collectInfoToSave(node, refresh, last) {
229                   var arr = node.calendar.down[0];
230                   var toadd = [];
231                   var todel = node.todelete;
232                   var toupd = [];
233                   for (var i = 0; i < arr.length; i++) {
234                       if (arr[i].id === '00000000-0000-0000-0000-000000000000') {
235                           var t = arr[i].allDay.toString();
236                           toadd.push([
237                               arr[i].title,//status
238                               "" + Date.parse(arr[i].start),//start
239                               "" + Date.parse(arr[i].end),//end
240                               t,// allday
241                               node.Id, //resource id
242                               arr[i].rec.recurrence.toString(),//true on recur
243                               arr[i].rec.recid,//recur id
244                               "" + Date.parse(arr[i].rec.start),
245                               "" + Date.parse(arr[i].rec.end),
246                               arr[i].rec.days.join(",")
247
248
249                           ]);
250                       }
251                       else if (arr[i].changed === true) {
252                           var t = arr[i].allDay.toString();
253                           toupd.push([
254                               arr[i].id,//id to update
255                               arr[i].title,//status
256                               "" + Date.parse(arr[i].start),//start
257                               "" + Date.parse(arr[i].end),//end
258                               t,//allday
259                               arr[i].rec.recurrence.toString(),//true on recur
260                               arr[i].rec.recid,//recur id
261                               "" + Date.parse(arr[i].rec.start),
262                               "" + Date.parse(arr[i].rec.end),
263                               arr[i].rec.days.join(",")
264
265                           ]);
266                       }
267                   }
268                   vm.sendtoserv = [todel, toadd, toupd];
269                   hubber.server.saveCalendar(node.Id, todel, toadd, toupd, refresh, last);
270               }
271               $scope.saveCurrentCalendar = function () {
272                   vm.calendarSaver = true;
273                   collectInfoToSave(vm.treeview.currentNode, true, false);
274                   //true for refresh, false for showing it's only one calendar saved.
275               }
276               $scope.saveAllCalendars = function () {
277
278                   $scope.allSave = [];
279                   for (var i = 0; i < $scope.tree.length; i++)
280                       createSaveRequests($scope.tree[i]);
281                   ngDialog.openConfirm({
282                       template:
283                        '<p>Are you sure you want to save all changes made to ' + $scope.allSave.length + ' calendars?</p>' +
284                        '<div>' +
285                        '<button type="button" class="btn btn-primary" ng-click="confirm(1)">Yes' +
286                        '<button type="button" class="btn btn-default" ng-click="closeThisDialog(0)">No </button> ' +
287                        '</button></div>',
288                       plain: true
289                   }).then(function (success) {
290                       vm.calendarSaver = true;
291                       for (var i = 0; i < $scope.allSave.length; i++) {
292                           if (i >= $scope.allSave.length - 1)
293                               collectInfoToSave($scope.allSave[i], false, true);
294                           else
295                               collectInfoToSave($scope.allSave[i], false, false);
296                       }
297                   });
298
299
300               }
301               function createSaveRequests(node) {
302                   if (node.changes === true)
303                       $scope.allSave.push(node);
304                   for (var i = 0; i < node.children.length; i++) {
305                       createSaveRequests(node.children[i]);
306                   }
307               }
308               $scope.clearCurrentCalendar = function () {
309
310                   $scope.selectedEventId = -1;
311                   $scope.treeview.currentNode.calendar = null;
312                   $scope.treeview.currentNode.todelete = [];
313                   $scope.treeview.currentNode.changes = false;
314                   $scope.currentcal = [];
315                   hubber.server.requestDownTime(vm.treeview.currentNode.Id);
316                   $(".selected.ng-scope").removeClass('changed');
317                   $(".selected.ng-binding").removeClass('changed');
318
319
320               }
321               $scope.clearAllCalendars = function () {
322                   ngDialog.openConfirm({
323                       template:
324                        '<p>Are you sure you want to delete all calendar changes?</p>' +
325                        '<div>' +
326                          '<button type="button" class="btn btn-default" ng-click="closeThisDialog(0)">No </button> ' +
327                          '<button type="button" class="btn btn-primary" ng-click="confirm(1)">Yes' +
328                        '</button></div>',
329                       plain: true
330                   }).then(function (success) {
331                       clearAllCalendarsFunc();
332                   });
333
334               }
335               function clearAllCalendarsFunc() {
336                   $(".ng-binding.changed").removeClass('changed');
337                   $(".ng-scope.changed").removeClass('changed');
338                   $(".ng-binding.loaded").removeClass('loaded');
339                   $(".ng-scope.loaded").removeClass('loaded');
340                   $scope.selectedEventId = -1;
341                   $scope.treeview.currentNode.calendar = null;
342                   $scope.currentcal = [];
343                   for (var i = 0; i < $scope.tree.length; i++)
344                       clearCalendarsRecurse($scope.tree[i]);
345                   hubber.server.requestDownTime(vm.treeview.currentNode.Id);
346                   $(".selected.ng-binding").addClass('loaded');
347                   $(".selected.ng-scope").addClass('loaded');
348               }
349               function clearCalendarsRecurse(node) {
350
351                   node.calendar = [];
352                   node.todelete = [];
353                   node.changes = false;
354                   for (var i = 0; i < node.children.length; i++) {
355                       clearCalendarsRecurse(node.children[i]);
356                   }
357               }
358               $scope.deleteAllEvents = function () {
359                   vm.calendarDeleter = true;
360                   vm.selectedEventId = -1;
361                   var node = vm.treeview.currentNode.calendar.down[0];
362                   for (var i = 0; i < node.length;) {
363                       if (node[i].id != '00000000-0000-0000-0000-000000000000')
364                           vm.treeview.currentNode.todelete.push(node[i].id);
365                       $scope.setChanged(vm.selectedEventId);
366                       node.splice(i, 1);
367                   }
368                   vm.calendarDeleter = false;
369                   ngDialog.open({
370                       template:
371                        '<p>All events have been deleted. Save the changes to confirm deletion, clearing will restore all the events from the server</p>',
372                       plain: true
373                   });
374               }
375               $scope.deleteAllPreviousEvents = function () {
376                   vm.calendarDeleter = true;
377                   vm.selectedEventId = -1;
378                   var node = vm.treeview.currentNode.calendar.down[0];
379                   for (var i = 0; i < node.length;) {
380                       if (node[i].end < Date.now()) {
381                           if (node[i].id != '00000000-0000-0000-0000-000000000000')
382                               vm.treeview.currentNode.todelete.push(node[i].id);
383                           $scope.setChanged(vm.selectedEventId);
384                           node.splice(i, 1);
385                       }
386                       else
387                           i++;
388                   }
389                   vm.calendarDeleter = false;
390                   ngDialog.open({
391                       template:
392                        '<p>All previous events have been deleted. Save the changes to confirm deletion</p>',
393                       plain: true
394                   });
395               }
396
397
398               $scope.setChanged = function (id) {
399                   if (id != -1) {
400                       if (vm.treeview.currentNode.calendar.down[0][id].title === "Unavailable")
401                           vm.treeview.currentNode.calendar.down[0][id].color = '#0099cc';
402                       else
403                           vm.treeview.currentNode.calendar.down[0][id].color = '#ff5500';
404
405                       vm.treeview.currentNode.calendar.down[0][id].changed = true;
406                   }
407                   vm.treeview.currentNode.changes = true;
408                   $(".selected").addClass('changed');
409               }
410               //*Add event by click
411               $scope.calendarClick = function (date, jsEvent, view) {
412
413                   var newid = 0;
414                   if (vm.treeview.currentNode.calendar.down[0].length != 0)
415                       newid = vm.treeview.currentNode.calendar.down[0][(vm.treeview.currentNode.calendar.down[0].length - 1)]._id + 1;
416                   var dat = date.toDate();
417                   var end = new Date(dat);
418                   end.setHours(dat.getHours() + 2);
419                   vm.treeview.currentNode.calendar.down[0].push({
420                       id: '00000000-0000-0000-0000-000000000000',
421                       title: 'Unavailable',
422                       start: dat,
423                       end: end,
424                       allDay: date._ambigTime,
425                       rec: {
426                           recurrence: false,
427                           recid: '0',
428                           days: [false, false, false, false, false, false, false],
429                           start: dat,
430                           end: end
431
432                       },
433                       _id: (newid)
434                   });
435                   vm.selectedEventId = vm.treeview.currentNode.calendar.down[0].length - 1;
436                   vm.setChanged(vm.selectedEventId);
437                   $scope.currentcal = [];
438                   $scope.currentcal = vm.treeview.currentNode.calendar;
439
440
441               }
442               function checkId(id) {
443                   for (var i = 0; i < vm.treeview.currentNode.calendar.down[0].length ; i++) {
444                       if (vm.treeview.currentNode.calendar.down[0][i]._id === id)
445                           return i;
446                   }
447                   return -1;
448               }
449               /* alert on eventClick */
450               $scope.eventClick = function (date, jsEvent, view) {
451                   vm.selectedEventId = checkId(date._id);
452               };
453               $scope.eventClickBtn = function (id) {
454                   vm.selectedEventId = checkId(id);
455                   vm.goToDate();
456               };
457               /* alert on Drop */
458               $scope.dragandDrop = function (event, delta, revertFunc, jsEvent, ui, view) {
459                   vm.selectedEventId = checkId(event._id);
460                   vm.setChanged(vm.selectedEventId);
461                   if (event.end == null) {
462                       event.end = moment(event.start).add(2, 'hours');
463                   }
464                   if (vm.treeview.currentNode.calendar.down[0][vm.selectedEventId].allDay && event.start._ambigTime == false) {
465                       event.allDay = false;
466                       vm.treeview.currentNode.calendar.down[0][vm.selectedEventId].allDay = false;
467                   }
468                   else if (!vm.treeview.currentNode.calendar.down[0][vm.selectedEventId].allDay && event.start._ambigTime == true) {
469                       event.allDay = true;
470                       vm.treeview.currentNode.calendar.down[0][vm.selectedEventId].allDay = true;
471                       //vm.treeview.currentNode.calendar.down[0][vm.selectedEventId].end = null;
472                   }
473                   vm.treeview.currentNode.calendar.down[0][vm.selectedEventId].start = new Date(event.start);
474                   vm.treeview.currentNode.calendar.down[0][vm.selectedEventId].end = new Date(event.end);
475               };
476               /* alert on Resize */
477               $scope.resizeEvent = function (event, delta, revertFunc, jsEvent, ui, view) {
478                   vm.selectedEventId = checkId(event._id);
479                   vm.setChanged(vm.selectedEventId);
480                   vm.treeview.currentNode.calendar.down[0][vm.selectedEventId].start = new Date(event.start);
481                   vm.treeview.currentNode.calendar.down[0][vm.selectedEventId].end = new Date(event.end);
482               };
483
484               /* remove event */
485               $scope.remove = function (index) {
486                   vm.selectedEventId = -1;
487                   vm.setChanged(vm.selectedEventId);
488                   if (vm.treeview.currentNode.calendar.down[0][index].id != "00000000-0000-0000-0000-000000000000") {
489                       vm.treeview.currentNode.todelete.push(vm.treeview.currentNode.calendar.down[0][index].id);
490                   }
491                   vm.treeview.currentNode.calendar.down[0].splice(index, 1);
492
493
494               };
495               $scope.removeList = function (id) {
496                   var index = checkId(id);
497                   vm.selectedEventId = -1;
498                   vm.setChanged(vm.selectedEventId);
499                   if (vm.treeview.currentNode.calendar.down[0][index].id != "00000000-0000-0000-0000-000000000000") {
500                       vm.treeview.currentNode.todelete.push(vm.treeview.currentNode.calendar.down[0][index].id);
501                   }
502                   vm.treeview.currentNode.calendar.down[0].splice(index, 1);
503
504
505               };
506
507               $scope.checkDateStartEnd = function () {
508                   if ($scope.currentcal.down[0][vm.selectedEventId].rec.start > $scope.currentcal.down[0][vm.selectedEventId].rec.end ||
509                       $scope.currentcal.down[0][vm.selectedEventId].rec.end === undefined) {
510
511                       $scope.currentcal.down[0][vm.selectedEventId].rec.end = new Date($scope.currentcal.down[0][vm.selectedEventId].rec.start);
512
513                   }
514                   if ($scope.currentcal.down[0][vm.selectedEventId].rec.start < Date.now())
515                       $scope.currentcal.down[0][vm.selectedEventId].rec.start = new Date();
516               }
517               //pushes all changes to other recurs
518               $scope.pushRecurChanges = function (recid) {
519                   ngDialog.openConfirm({
520                       template:
521                        '<p>This will change all existing recurrences and create new recurrences where needed. Are you sure?</p>' +
522                        '<div>' +
523                          '<button type="button" class="btn btn-default" ng-click="closeThisDialog(0)">No </button> ' +
524                          '<button type="button" class="btn btn-primary" ng-click="confirm(1)">Yes' +
525                        '</button></div>',
526                       plain: true
527                   }).then(function (success) {
528                       var arr = vm.treeview.currentNode.calendar.down[0];
529                       var ob = $.extend(true, {}, arr[vm.selectedEventId]);
530                       for (var i = 0; i < arr.length;) {
531                           if (arr[i].rec.recid === recid) {
532                               if (new Date(arr[i].start) < new Date(ob.rec.start) ||
533                                        new Date(arr[i].end) > new Date(ob.rec.end) ||
534                                        !ob.rec.days[new Date(arr[i].start).getDay()]) {
535                                   vm.remove(i);
536                                   vm.selectedEventId = -1;
537
538                               }
539                               else {
540
541                                   arr[i].start.setHours(ob.start.getHours(), ob.start.getMinutes());
542                                   arr[i].end.setHours(ob.end.getHours(), ob.end.getMinutes());
543                                   arr[i].title = ob.title;
544                                   arr[i].rec = ob.rec;
545                                   arr[i].allDay = ob.allDay;
546                                   vm.setChanged(i);
547                                   i++;
548                               }
549                           }
550                           else
551                               i++;
552                       }
553                       var start = new Date(ob.rec.start);
554                       start.setHours(2, 0, 0, 0);
555                       var end = new Date(ob.rec.end);
556                       end = new Date(end.setHours(24, 0, 0, 0) + 1000 * 3600 * 2);
557
558                       loop1:
559                           for (var d = (start.getTime()) ; d < (end.getTime()) ;) {
560                               var tog = ob.rec.days[new Date(d).getDay()];
561                               if (tog) {
562                                   loop2:
563                                       for (var i = 0; i < arr.length; i++) {
564
565                                           if (arr[i].rec.recid === recid) {
566                                               var dend = (d + 1000 * 3600 * 24);
567                                               if (arr[i].start.getTime() >= d &&
568                                                   arr[i].end.getTime() <= dend) {
569                                                   d += (1000 * 3600 * 24);
570                                                   continue loop1;
571                                               }
572                                           }
573                                       }
574
575                                   var ts = new Date(d);
576                                   ts.setHours(new Date(ob.start).getHours(), new Date(ob.start).getMinutes());
577                                   var te = new Date(d);
578                                   te.setHours(new Date(ob.end).getHours(), new Date(ob.end).getMinutes());
579                                   arr.push({
580                                       id: '00000000-0000-0000-0000-000000000000',
581                                       title: ob.title,
582                                       start: ts,
583                                       end: te,
584                                       allDay: ob.allDay,
585                                       rec: ob.rec
586                                   });
587                                   vm.setChanged(arr.length - 1);
588
589                               }
590
591                               d += (1000 * 3600 * 24);// 1 day
592
593                           }
594                   });
595               }
596               $scope.deleteAllRecurrences = function (recid) {
597                   ngDialog.openConfirm({
598                       template:
599                        '<p>This will delete every found recurrence. Are you sure?</p>' +
600                        '<div>' +
601                          '<button type="button" class="btn btn-default" ng-click="closeThisDialog(0)">No </button> ' +
602                          '<button type="button" class="btn btn-primary" ng-click="confirm(1)">Yes' +
603                        '</button></div>',
604                       plain: true
605                   }).then(function (success) {
606                       var arr = vm.treeview.currentNode.calendar.down[0];
607                       for (var i = 0; i < arr.length;) {
608                           if (arr[i].rec.recid === recid)
609                               vm.remove(i);
610                           else
611                               i++;
612                       }
613                   });
614               }
615
616               $scope.goToDate = function () {
617                   $("#resourcecalendar").fullCalendar('gotoDate', vm.currentcal.down[0][vm.selectedEventId].start);
618               }
619               /* Render Tooltip */
620               $scope.eventRender = function (event, element, view) {
621                   element.attr({
622                       'tooltip': event.title,
623                       'tooltip-append-to-body': true
624                   });
625                   //$compile(element)($scope);
626               };
627               /* config object */
628               $scope.uiConfig = {
629                   calendar: {
630                       height: 500,
631                       editable: true,
632                       defaultView: 'agendaWeek',
633                       firstDay: 1,
634                       header: {
635                           left: 'title',
636                           center: 'agendaWeek, agendaDay',
637                           right: 'today prev,next'
638                       },
639                       timezone: 'UTC',
640                       timeFormat: 'HH:mm',
641                       eventClick: $scope.eventClick,
642                       eventDrop: $scope.dragandDrop,
643                       eventResize: $scope.resizeEvent,
644                       eventRender: $scope.eventRender,
645                       dayClick: $scope.calendarClick
646
647
648
649                   }
650               };
651
652
653
654           }).filter('disp', function () {
655               return function (input) {
656                   return input ? 'Disposable' : 'Not disposable';
657               }
658           }).directive('animateOnChange', function ($timeout) {
659               return function (scope, element, attr) {
660                   scope.$watch(attr.animateOnChange, function (nv, ov) {
661
662                       if (nv != ov) {
663                           if (scope.currentcal.down[0][scope.selectedEventId].title === "Unavailable") {
664                               element.addClass('changed');
665                               $timeout(function () {
666                                   element.removeClass('changed');
667                               }, 250); // Could be enhanced to take duration as a parameter
668                           }
669                           else {
670                               element.addClass('changedshut');
671                               $timeout(function () {
672                                   element.removeClass('changedshut');
673                               }, 250); // Could be enhanced to take duration as a parameter
674                           }
675                       }
676                   });
677               };
678           });
679
680
Note: See TracBrowser for help on using the repository browser.