mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-11-03 20:54:27 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			108 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
/*global define:false */
 | 
						|
/* bpapp.js */
 | 
						|
// TODO: Will be moved to module, loader instead of Apache Match voodo is
 | 
						|
//       still missing right now
 | 
						|
 | 
						|
define(['jquery', 'icinga/icinga'], function ($, Icinga) {
 | 
						|
    'use strict';
 | 
						|
 | 
						|
    return {
 | 
						|
        /**
 | 
						|
         * Tell Icinga about our event handlers
 | 
						|
         */
 | 
						|
        eventHandlers: {
 | 
						|
            'table.businessprocess th.bptitle': {
 | 
						|
                'mouseover': 'titleMouseOver',
 | 
						|
                'mouseout' : 'titleMouseOut'
 | 
						|
            },
 | 
						|
            'table.businessprocess th': {
 | 
						|
                'click': 'titleClicked'
 | 
						|
            }
 | 
						|
        },
 | 
						|
        /**
 | 
						|
         * Add 'hovered' class to hovered title elements
 | 
						|
         *
 | 
						|
         * TODO: Skip on tablets
 | 
						|
         */
 | 
						|
        titleMouseOver: function (event) {
 | 
						|
            event.stopPropagation();
 | 
						|
            var el = $(event.delegateTarget);
 | 
						|
            el.addClass('hovered');
 | 
						|
        },
 | 
						|
        /**
 | 
						|
         * Remove 'hovered' class from hovered title elements
 | 
						|
         *
 | 
						|
         * TODO: Skip on tablets
 | 
						|
         */
 | 
						|
        titleMouseOut: function (event) {
 | 
						|
            event.stopPropagation();
 | 
						|
            var el = $(event.delegateTarget);
 | 
						|
            el.removeClass('hovered');
 | 
						|
        },
 | 
						|
        /**
 | 
						|
         * Handle clicks on operator or title element
 | 
						|
         *
 | 
						|
         * Title shows subelement, operator unfolds all subelements
 | 
						|
         */
 | 
						|
        titleClicked: function (event) {
 | 
						|
            event.stopPropagation();
 | 
						|
            var el       = $(event.delegateTarget),
 | 
						|
                affected = [];
 | 
						|
            if (el.hasClass('operator')) {
 | 
						|
                affected = el.closest('table').children('tbody')
 | 
						|
                    .children('tr.children').children('td').children('table');
 | 
						|
 | 
						|
                // Only if there are child BPs
 | 
						|
                if (affected.find('th.operator').length < 1) {
 | 
						|
                    affected = el.closest('table');
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                affected = el.closest('table');
 | 
						|
            }
 | 
						|
            affected.each(function (key, el) {
 | 
						|
                var bptable = $(el).closest('table');
 | 
						|
                bptable.toggleClass('collapsed');
 | 
						|
                if (bptable.hasClass('collapsed')) {
 | 
						|
                    bptable.find('table').addClass('collapsed');
 | 
						|
                }
 | 
						|
            });
 | 
						|
            el.closest('.icinga-container').data('icingaparams', {
 | 
						|
                // TODO: remove namespace
 | 
						|
                opened: Icinga.module('bpapp').listOpenedBps()
 | 
						|
            });
 | 
						|
        },
 | 
						|
        /**
 | 
						|
         * Get a list of all currently opened BPs.
 | 
						|
         *
 | 
						|
         * Only get the deepest nodes to keep requests as small as possible
 | 
						|
         */
 | 
						|
        listOpenedBps: function () {
 | 
						|
            var ids = [];
 | 
						|
            $('.bpapp').find('table').not('.collapsed').each(function (key, el) {
 | 
						|
                if ($(el).find('table').not('.collapsed').length === 0) {
 | 
						|
                    var search  = true,
 | 
						|
                        this_id = $(el)[0].id,
 | 
						|
                        cnt     = 0,
 | 
						|
                        current = el,
 | 
						|
                        parent;
 | 
						|
                    while (search && cnt < 40) {
 | 
						|
                        cnt++;
 | 
						|
                        parent = $(current).parent().closest('table')[0];
 | 
						|
                        if (!parent || $(parent).hasClass('bpapp')) {
 | 
						|
                            search = false;
 | 
						|
                        } else {
 | 
						|
                            current = parent;
 | 
						|
                            this_id = parent.id + '_' + this_id;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    if (this_id) {
 | 
						|
                        ids.push(this_id);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            });
 | 
						|
            return ids;
 | 
						|
        }
 | 
						|
    };
 | 
						|
});
 | 
						|
 |