Skip to content
Snippets Groups Projects
Select Git revision
  • 6ce09ca7f303c5210887e909e310bc59359d1393
  • master default protected
  • Work_Gijs protected
3 results

spi_switch_Unb2c.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    angular-gantt-contextmenu-plugin.js 6.06 KiB
    (function(){
        'use strict';
        angular.module('gantt.contextmenu', ['gantt', 'gantt.contextmenu.templates']).directive('ganttContextmenu', ['$compile', '$document', '$window', function($compile, $document, $window) {
            return {
                restrict: 'E',
                require: '^gantt',
                scope: {
                    enabled: '=?'
                },
                link: function(scope, element, attrs, ganttCtrl) {
                    var api = ganttCtrl.gantt.api;
    
                    // Load options from global options attribute.
                    if (scope.options && typeof(scope.options.contextmenu) === 'object') {
                        for (var option in scope.options.contextmenu) {
                            scope[option] = scope.options[option];
                        }
                    }
    
                    if (scope.enabled === undefined) {
                        scope.enabled = true;
                    }
    
                    api.directives.on.new(scope, function(dName, dScope, dElement, dAttrs, dController) {
                        //for each new ganttTask
                        if (dName === 'ganttTask') {
                            dElement.bind('contextmenu', function(event) {
                                //TODO: remove link to dataService in this generic plugin
                                var dataService = dScope.scope.dataService;
                                var cleanupCtrl = dScope.scope.$parent.cleanupCtrl;
                                var docElement = angular.element($document);
    
                                var task = dScope.task.model.raTask;
    
                                if(!task)
                                    return;
    
                                dataService.selected_task_id = task.id;
    
                                //search for already existing contextmenu element
                                while($document.find('#gantt-context-menu').length) {
                                    //found, remove it, so we can create a fresh one
                                    $document.find('#gantt-context-menu')[0].remove();
    
                                    //unbind document close event handlers
                                    docElement.unbind('click', closeContextMenu);
                                    docElement.unbind('contextmenu', closeContextMenu);
                                }
    
                                //create contextmenu element
                                //with list of menu items,
                                //each with it's own action
                                var contextmenuElement = angular.element('<div id="gantt-context-menu"></div>');
                                var ulElement = angular.element('<ul  class="dropdown-menu" role="menu" style="left:' + event.clientX + 'px; top:' + event.clientY + 'px; z-index: 100000; display:block;"></ul>');
                                contextmenuElement.append(ulElement);
    
    //                             var liElement = angular.element('<li><a href="#">Copy Task</a></li>');
    //                             ulElement.append(liElement);
    //                             liElement.on('click', function() {
    //                                 closeContextMenu();
    //                                 //TODO: remove link to dataService in this generic plugin
    //                                 dataService.copyTask(dScope.task.model.raTask);
    //                             });
    
                                if(task.type == 'observation' && dataService.config.inspection_plots_base_url) {
                                    var liElement = angular.element('<li><a href="#">Inspection Plots</a></li>');
                                    ulElement.append(liElement);
                                    liElement.on('click', function() {
                                        closeContextMenu();
                                        var url = dataService.config.inspection_plots_base_url + '/' + task.otdb_id;
                                        $window.open(url, '_blank');
                                    });
                                }
    
                                var liElement = angular.element('<li><a href="#">Show disk usage</a></li>');
                                ulElement.append(liElement);
                                liElement.on('click', function() {
                                    closeContextMenu();
                                    cleanupCtrl.showTaskDiskUsage(dScope.task.model.raTask);
                                });
    
                                var liElement = angular.element('<li><a href="#">Delete data</a></li>');
                                ulElement.append(liElement);
                                liElement.on('click', function() {
                                    closeContextMenu();
                                    cleanupCtrl.deleteTaskDataWithConfirmation(dScope.task.model.raTask);
                                });
    
                                var closeContextMenu = function() {
                                    contextmenuElement.remove();
    
                                    //unbind document close event handlers
                                    docElement.unbind('click', closeContextMenu);
                                    docElement.unbind('contextmenu', closeContextMenu);
                                };
    
                                //click anywhere to remove the contextmenu
                                docElement.bind('click', closeContextMenu);
                                docElement.bind('contextmenu', closeContextMenu);
    
                                //add contextmenu to body
                                var body = $document.find('body');
                                body.append(contextmenuElement);
    
                                //prevent bubbling event upwards
                                return false;
                            });
                        }
                    });
    
                    api.directives.on.destroy(scope, function(dName, dScope, dElement, dAttrs, dController) {
                        //for each destroyed ganttTask
                        if (dName === 'ganttTask') {
                            dElement.unbind('contextmenu');
                        }
                    });
                }
            };
        }]);
    }());
    
    angular.module('gantt.contextmenu.templates', []).run(['$templateCache', function($templateCache) {
    
    }]);