Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/21/16 16:48:34 (9 years ago)
Author:
jlodewyc
Message:

#2582 Resource calendar and client group creation, control implemented

Location:
branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/wwwroot
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/wwwroot/css/site.min.css

    r13758 r13782  
    1 @import url(http://fonts.googleapis.com/css?family=Roboto:400);.wrapper,h4{text-align:center}.label,sub,sup{vertical-align:baseline}[role=button],div[data-tree-model] li i,div[data-tree-model] li span{cursor:pointer}.fc table,table{border-spacing:0}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}.fa,.glyphicon{-moz-osx-font-smoothing:grayscale}body{-webkit-font-smoothing:antialiased;font:400 14px Roboto,arial,sans-serif}.container{padding:25px;position:fixed}.form-login{background-color:#EDEDED;border-radius:15px;border-color:#d2d2d2;border-width:5px;box-shadow:0 1px 0 #cfcfcf;padding:10px 20px 20px;padding:10px 20px 20px}h4{border:0 solid #fff;border-bottom-width:1px;padding-bottom:10px}.panel-warning>.panel-heading{background-image:linear-gradient(to bottom,#eb9114 0,#f1b25b 100%)!important;color:#fff!important}.panel-danger>.panel-heading{background-image:linear-gradient(to bottom,#c12e2a 0,#d9534f 100%)!important;color:#fff!important}.label-as-badge{border-radius:1em}.bar-off{fill:#c2c2d6}.bar-off:hover{fill:#e0e0eb}.bar-wait{fill:#f0a742}.bar-wait:hover{fill:#f4bd71}.bar-trans{fill:#80d4ff}.bar-trans:hover{fill:#9df}.bar-calc{fill:#2f6fa6}.bar-calc:hover{fill:#3884c7}.bar-paus{fill:#47476b}.bar-paus:hover{fill:#5c5c8a}.bar-fin{fill:#5cb85c}.bar-fin:hover{fill:#71c171}.bar-abo{fill:#c2302c}.bar-abo:hover{fill:#d54944}.bar-fail{fill:#c2302c}.bar-fail:hover{fill:#d54944}rect.selection{stroke:gray;stroke-dasharray:4px;stroke-opacity:.5;fill:transparent}svg ::selection{background:0 0}svg ::-moz-selection{background:0 0}svg ::-webkit-selection{background:0 0}.btn-danger:focus,.btn-danger:hover,.btn-default:focus,.btn-default:hover,.btn-info:focus,.btn-info:hover,.btn-primary:focus,.btn-primary:hover,.btn-success:focus,.btn-success:hover,.btn-warning:focus,.btn-warning:hover{background-position:0 -15px}div[data-tree-model] li .changed{background-color:#ff0;font-weight:700;padding:1px 5px}div[data-tree-model] li .loaded{text-decoration:underline;font-style:oblique}div[data-angular-treeview]{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;font-family:Tahoma;font-size:13px;color:#555;text-decoration:none}div[data-tree-model] ul{margin:0;padding:0;list-style:none;border:none;overflow:hidden}div[data-tree-model] li{position:relative;padding:0 0 0 20px;line-height:20px}div[data-tree-model] li .expanded{padding:1px 10px;background-image:url(../img/folder.png);background-repeat:no-repeat}div[data-tree-model] li .collapsed{padding:1px 10px;background-image:url(../img/folder-closed.png);background-repeat:no-repeat}div[data-tree-model] li .normal{padding:1px 10px;background-image:url(../img/file.png);background-repeat:no-repeat}div[data-tree-model] li .selected{background-color:#adf;font-weight:700;padding:1px 5px}/*!
     1@import url(http://fonts.googleapis.com/css?family=Roboto:400);.wrapper,h4{text-align:center}.label,sub,sup{vertical-align:baseline}[role=button],div[data-tree-model] li i,div[data-tree-model] li span{cursor:pointer}.fc table,table{border-spacing:0}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}.fa,.glyphicon{-moz-osx-font-smoothing:grayscale}body{-webkit-font-smoothing:antialiased;font:400 14px Roboto,arial,sans-serif}.container{padding:25px;position:fixed}.form-login{background-color:#EDEDED;border-radius:15px;border-color:#d2d2d2;border-width:5px;box-shadow:0 1px 0 #cfcfcf;padding:10px 20px 20px;padding:10px 20px 20px}h4{border:0 solid #fff;border-bottom-width:1px;padding-bottom:10px}.panel-warning>.panel-heading{background-image:linear-gradient(to bottom,#eb9114 0,#f1b25b 100%)!important;color:#fff!important}.panel-danger>.panel-heading{background-image:linear-gradient(to bottom,#c12e2a 0,#d9534f 100%)!important;color:#fff!important}.label-as-badge{border-radius:1em}.bar-off{fill:#c2c2d6}.bar-off:hover{fill:#e0e0eb}.bar-wait{fill:#f0a742}.bar-wait:hover{fill:#f4bd71}.bar-trans{fill:#80d4ff}.bar-trans:hover{fill:#9df}.bar-calc{fill:#2f6fa6}.bar-calc:hover{fill:#3884c7}.bar-paus{fill:#47476b}.bar-paus:hover{fill:#5c5c8a}.bar-fin{fill:#5cb85c}.bar-fin:hover{fill:#71c171}.bar-abo{fill:#c2302c}.bar-abo:hover{fill:#d54944}.bar-fail{fill:#c2302c}.bar-fail:hover{fill:#d54944}rect.selection{stroke:gray;stroke-dasharray:4px;stroke-opacity:.5;fill:transparent}svg ::selection{background:0 0}svg ::-moz-selection{background:0 0}svg ::-webkit-selection{background:0 0}.btn-danger:focus,.btn-danger:hover,.btn-default:focus,.btn-default:hover,.btn-info:focus,.btn-info:hover,.btn-primary:focus,.btn-primary:hover,.btn-success:focus,.btn-success:hover,.btn-warning:focus,.btn-warning:hover{background-position:0 -15px}div[data-tree-model] li .changed{background-color:#ff0;font-weight:700;padding:1px 5px}div[data-tree-model] li .loaded{text-decoration:underline;font-style:oblique}[animate-on-change]{transition:all 1s;-webkit-transition:all 1s}[animate-on-change].changed{background-color:#add8e6;transition:none;-webkit-transition:none}[animate-on-change].changedshut{background-color:#ffa07a;transition:none;-webkit-transition:none}div[data-angular-treeview]{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;font-family:Tahoma;font-size:13px;color:#555;text-decoration:none}div[data-tree-model] ul{margin:0;padding:0;list-style:none;border:none;overflow:hidden}div[data-tree-model] li{position:relative;padding:0 0 0 20px;line-height:20px}div[data-tree-model] li .expanded{padding:1px 10px;background-image:url(../img/folder.png);background-repeat:no-repeat}div[data-tree-model] li .collapsed{padding:1px 10px;background-image:url(../img/folder-closed.png);background-repeat:no-repeat}div[data-tree-model] li .normal{padding:1px 10px;background-image:url(../img/file.png);background-repeat:no-repeat}div[data-tree-model] li .selected{background-color:#adf;font-weight:700;padding:1px 5px}/*!
    22 * Bootstrap v3.3.6 (http://getbootstrap.com)
    33 * Copyright 2011-2015 Twitter, Inc.
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/wwwroot/js/hubs/calendarhubber.js

    r13775 r13782  
    1515               vm.currentcal = [];
    1616               vm.selectedEventId = -1;
    17 
     17               vm.groups = [];
     18               vm.clients = [];
    1819               vm.init = function () {
    1920
     
    3334                   };
    3435                   hubber.client.savingCurrentDone = function () {
     36                       vm.calendarSaver = false;
    3537                       $scope.clearCurrentCalendar();
    3638                       $scope.$apply();
    3739                   };
    3840                   hubber.client.savingAllDone = function () {
     41                       vm.calendarSaver = false;
    3942                       clearAllCalendarsFunc();
    4043                       $scope.$apply();
    4144                   };
     45                   hubber.client.processDispose = function (disp) {
     46                       vm.treeview.currentNode.IsDisposable = disp;
     47                       $scope.calendarDispose = false;
     48                       $scope.$apply();
     49                   }
    4250                   hubber.client.processDowntime = function (id, down) {
    4351                       var json = JSON.parse(down);
     
    8391                       $(".selected.ng-binding").addClass('loaded');
    8492                       $scope.selectedEventId = -1;
    85                        if ($scope.treeview.currentNode != null) {
     93                       if ($scope.treeview.currentNode != null && $scope.treeview.currentNode.Id != undefined) {
    8694                           if ($scope.treeview.currentNode.calendar.length === 0) {
    8795                               hubber.server.requestDownTime(vm.treeview.currentNode.Id);
     
    98106
    99107                   });
     108               }
     109               $scope.clearTreeSelect = function () {
     110                   if (vm.treeview.currentNode != undefined) {
     111                       vm.treeview.currentNode.selected = undefined;
     112                       vm.treeview.currentNode = undefined;
     113                       vm.selectedEventId = -1;
     114                   }
    100115               }
    101116               $scope.buildTree = function () {
     
    103118                   vm.temptree = [];
    104119                   vm.top = false;
     120                   var ungrouped = {
     121                       children: [],
     122                       Name: 'Ungrouped'
     123                   }
    105124                   for (; vm.data.length > 0;) {
    106125
    107                        if (vm.data[0].ParentResourceId == null) {
     126                       if (vm.data[0].ParentResourceId == null && vm.data[0].IsDisposable !== undefined) {
    108127                           var curr = $scope.seekChildren(vm.data.splice(0, 1)[0]);
     128                           vm.clients.push(curr);
     129                           ungrouped.children.push(curr);
     130                       }
     131                       else if (vm.data[0].ParentResourceId == null) {
     132                           var curr = $scope.seekChildren(vm.data.splice(0, 1)[0]);
     133                           vm.groups.push(curr);
    109134                           vm.tree.push(curr);
    110135                       }
    111136                       else {
    112137                           var curr = $scope.seekChildren(vm.data.splice(0, 1)[0]);
     138                           if (curr.IsDisposable !== undefined)
     139                               vm.clients.push(curr);
     140                           else
     141                               vm.groups.push(curr);
    113142                           vm.temptree.push(curr);
    114143                       }
    115144                   }
     145                   vm.tree.push(ungrouped);
    116146
    117147               };
     
    134164                   for (var t = 0; t < vm.data.length;) {
    135165                       if (current.Id == vm.data[t].ParentResourceId) {
     166                           if (vm.data[t].IsDisposable !== undefined)
     167                               vm.clients.push(vm.data[t]);
     168                           else
     169                               vm.groups.push(vm.data[t]);
    136170                           current.children.push(vm.data.splice(t, 1)[0]);
    137171                       }
     
    145179                   return current;
    146180               }
     181
     182               $scope.toggleDisposable = function () {
     183                   $scope.calendarDispose = true;
     184                   hubber.server.toggleDisposable(vm.treeview.currentNode.Id);
     185               }
     186
    147187               function collectInfoToSave(node, refresh, last) {
    148188                   var arr = node.calendar.down[0];
     
    164204                               "" + Date.parse(arr[i].rec.end),
    165205                               arr[i].rec.days.join(",")
    166                                
     206
    167207
    168208                           ]);
     
    181221                               "" + Date.parse(arr[i].rec.end),
    182222                               arr[i].rec.days.join(",")
    183                                
     223
    184224                           ]);
    185225                       }
     
    189229               }
    190230               $scope.saveCurrentCalendar = function () {
     231                   vm.calendarSaver = true;
    191232                   collectInfoToSave(vm.treeview.currentNode, true, false);
    192233                   //true for refresh, false for showing it's only one calendar saved.
    193234               }
    194235               $scope.saveAllCalendars = function () {
     236
    195237                   $scope.allSave = [];
    196238                   for (var i = 0; i < $scope.tree.length; i++)
     
    205247                       plain: true
    206248                   }).then(function (success) {
     249                       vm.calendarSaver = true;
    207250                       for (var i = 0; i < $scope.allSave.length; i++) {
    208251                           if (i >= $scope.allSave.length - 1)
     
    255298                   $scope.currentcal = [];
    256299                   for (var i = 0; i < $scope.tree.length; i++)
    257                        removeCalendarsRecurse($scope.tree[i]);
     300                       clearCalendarsRecurse($scope.tree[i]);
    258301                   hubber.server.requestDownTime(vm.treeview.currentNode.Id);
    259302                   $(".selected.ng-binding").addClass('loaded');
    260303               }
    261                function removeCalendarsRecurse(node) {
     304               function clearCalendarsRecurse(node) {
    262305
    263306                   node.calendar = [];
     
    265308                   node.changes = false;
    266309                   for (var i = 0; i < node.children.length; i++) {
    267                        removeCalendarsRecurse(node.children[i]);
    268                    }
    269                }
    270 
     310                       clearCalendarsRecurse(node.children[i]);
     311                   }
     312               }
     313               $scope.deleteAllEvents = function () {
     314                   vm.calendarDeleter = true;
     315                   vm.selectedEventId = -1;
     316                   var node = vm.treeview.currentNode.calendar.down[0];
     317                   for (var i = 0; i < node.length;) {
     318                       if (node[i].id != '00000000-0000-0000-0000-000000000000')
     319                           vm.treeview.currentNode.todelete.push(node[i].id);
     320                       $scope.setChanged(vm.selectedEventId);
     321                       node.splice(i, 1);
     322                   }
     323                   vm.calendarDeleter = false;
     324                   ngDialog.open({
     325                       template:
     326                        '<p>All events have been deleted. Save the changes to confirm deletion, clearing will restore all the events from the server</p>',
     327                       plain: true
     328                   });
     329               }
    271330               $scope.deleteAllPreviousEvents = function () {
     331                   vm.calendarDeleter = true;
    272332                   vm.selectedEventId = -1;
    273333                   var node = vm.treeview.currentNode.calendar.down[0];
     
    282342                           i++;
    283343                   }
     344                   vm.calendarDeleter = false;
    284345                   ngDialog.open({
    285346                       template:
     
    329390                   vm.selectedEventId = vm.treeview.currentNode.calendar.down[0].length - 1;
    330391                   vm.setChanged(vm.selectedEventId);
    331                    //  $("#resourcecalendar").fullCalendar('refetchEvents');
     392                   $scope.currentcal = [];
     393                   $scope.currentcal = vm.treeview.currentNode.calendar;
     394
    332395
    333396               }
     
    342405               $scope.eventClick = function (date, jsEvent, view) {
    343406                   vm.selectedEventId = checkId(date._id);
     407               };
     408               $scope.eventClickBtn = function (id) {
     409                   vm.selectedEventId = checkId(id);
     410                   vm.goToDate();
    344411               };
    345412               /* alert on Drop */
     
    381448
    382449               };
     450               $scope.removeList = function (id) {
     451                   var index = checkId(id);
     452                   vm.selectedEventId = -1;
     453                   vm.setChanged(vm.selectedEventId);
     454                   if (vm.treeview.currentNode.calendar.down[0][index].id != "00000000-0000-0000-0000-000000000000") {
     455                       vm.treeview.currentNode.todelete.push(vm.treeview.currentNode.calendar.down[0][index].id);
     456                   }
     457                   vm.treeview.currentNode.calendar.down[0].splice(index, 1);
     458
     459
     460               };
    383461
    384462               $scope.checkDateStartEnd = function () {
    385463                   if ($scope.currentcal.down[0][vm.selectedEventId].rec.start > $scope.currentcal.down[0][vm.selectedEventId].rec.end ||
    386464                       $scope.currentcal.down[0][vm.selectedEventId].rec.end === undefined) {
    387                        
     465
    388466                       $scope.currentcal.down[0][vm.selectedEventId].rec.end = new Date($scope.currentcal.down[0][vm.selectedEventId].rec.start);
    389                        
     467
    390468                   }
    391469                   if ($scope.currentcal.down[0][vm.selectedEventId].rec.start < Date.now())
    392470                       $scope.currentcal.down[0][vm.selectedEventId].rec.start = new Date();
    393                   }
     471               }
    394472               //pushes all changes to other recurs
    395473               $scope.pushRecurChanges = function (recid) {
     
    415493                               }
    416494                               else {
    417                                    
     495
    418496                                   arr[i].start.setHours(ob.start.getHours(), ob.start.getMinutes());
    419497                                   arr[i].end.setHours(ob.end.getHours(), ob.end.getMinutes());
     
    439517                                   loop2:
    440518                                       for (var i = 0; i < arr.length; i++) {
    441                                            
     519
    442520                                           if (arr[i].rec.recid === recid) {
    443                                                var dend = (d+1000 * 3600 * 24);
     521                                               var dend = (d + 1000 * 3600 * 24);
    444522                                               if (arr[i].start.getTime() >= d &&
    445523                                                   arr[i].end.getTime() <= dend) {
     
    449527                                           }
    450528                                       }
    451  
     529
    452530                                   var ts = new Date(d);
    453531                                   ts.setHours(new Date(ob.start).getHours(), new Date(ob.start).getMinutes());
     
    465543
    466544                               }
    467                                
     545
    468546                               d += (1000 * 3600 * 24);// 1 day
    469                              
     547
    470548                           }
    471549                   });
     
    491569               }
    492570
     571               $scope.goToDate = function () {
     572                   $("#resourcecalendar").fullCalendar('gotoDate', vm.currentcal.down[0][vm.selectedEventId].start);
     573               }
    493574               /* Render Tooltip */
    494575               $scope.eventRender = function (event, element, view) {
     
    508589                       header: {
    509590                           left: 'title',
    510                            center: '',
     591                           center: 'agendaWeek, agendaDay',
    511592                           right: 'today prev,next'
    512593                       },
     
    520601
    521602
    522                    }
    523                };
    524 
    525 
    526 
     603
     604                   }
     605               };
     606
     607
     608
     609           }).filter('disp', function () {
     610               return function (input) {
     611                   return input ? 'Disposable' : 'Not disposable';
     612               }
     613           }).directive('animateOnChange', function ($timeout) {
     614               return function (scope, element, attr) {
     615                   scope.$watch(attr.animateOnChange, function (nv, ov) {
     616
     617                       if (nv != ov) {
     618                           if (scope.currentcal.down[0][scope.selectedEventId].title === "Unavailable") {
     619                               element.addClass('changed');
     620                               $timeout(function () {
     621                                   element.removeClass('changed');
     622                               }, 250); // Could be enhanced to take duration as a parameter
     623                           }
     624                           else {
     625                               element.addClass('changedshut');
     626                               $timeout(function () {
     627                                   element.removeClass('changedshut');
     628                               }, 250); // Could be enhanced to take duration as a parameter
     629                           }
     630                       }
     631                   });
     632               };
    527633           });
    528634
Note: See TracChangeset for help on using the changeset viewer.