// Pandora FMS - http://pandorafms.com // ================================================== // Copyright (c) 2005-2010 Artica Soluciones Tecnologicas // Please see http://pandorafms.org for full contribution list // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public License // as published by the Free Software Foundation; version 2 // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. TreeController = { controllers: [], getController: function () { var controller = { index: -1, recipient: '', tree: [], emptyMessage: "Empty", errorMessage: "Error", ajaxURL: "ajax.php", ajaxPage: "include/ajax/tree.ajax.php", reload: function () { if (typeof this.recipient == 'undefined' || this.recipient.length == 0) { return; } function _processGroup (container, elements) { var $group = $(""); $group .addClass("tree-group") .hide(); container.append($group); var last; elements.forEach(function(element, index) { last = index == elements.length - 1 ? true : false; element.jqObject = _processNode($group, element, last); }, $group); return $group; } function _processNode (container, element, last) { var $node = $("
  • "); var $leafIcon = $("
    "); var $content = $("
    "); // Leaf icon $leafIcon.addClass("leaf-icon"); // Content $content.addClass("node-content"); switch (element.type) { case 'group': $content.append(element.name); break; case 'agent': $content.append(element.name); break; } $node .addClass("tree-node") .append($leafIcon) .append($content); if (typeof last != 'undefinded' && last == true) { $node.addClass("tree-last"); } container.append($node); if (typeof element.children != 'undefined' && element.children.length > 0) { $node.addClass("leaf-closed"); // Add children var $children = _processGroup($node, element.children); $node.data('children', $children); $leafIcon.click(function () { if ($node.hasClass("leaf-open")) { $node .removeClass("leaf-open") .addClass("leaf-closed") .data('children') .slideUp(); } else { $node .removeClass("leaf-closed") .addClass("leaf-open") .data('children') .slideDown(); } }); } else if (typeof element.searchChildren != 'undefined' && element.searchChildren) { $node.addClass("leaf-closed"); $leafIcon.click(function () { if (! $node.hasClass("children-loaded")) { $node .removeClass("leaf-closed") .removeClass("leaf-error") .addClass("leaf-loading"); $.ajax({ url: this.ajaxURL, type: 'POST', dataType: 'json', data: { page: this.ajaxPage, getChildren: 1, id: element.id, type: element.type }, complete: function(xhr, textStatus) { $node.removeClass("leaf-loading"); }, success: function(data, textStatus, xhr) { if (data.success) { $node.addClass("leaf-open"); var $children = _processGroup($node, data.elements); $children.slideDown(); $node.data('children', $children); } else { $node.addClass("leaf-error"); } }, error: function(xhr, textStatus, errorThrown) { $node.addClass("leaf-error"); } }); } else { if ($node.hasClass("leaf-open")) { $node .removeClass("leaf-open") .addClass("leaf-closed") .data('children') .slideUp(); } else { $node .removeClass("leaf-closed") .addClass("leaf-open") .data('children') .slideDown(); } } }); } else { $node.addClass("leaf-empty"); } return $node; } if (this.recipient.length == 0) { return; } else if (this.tree.length == 0) { this.recipient.html("
    " + this.emptyMessage + "
    "); return; } this.recipient.empty(); var $loadingImage = $(''); var $children = _processGroup(this.recipient, this.tree); $children.show(); this.recipient.data('children', $children); // $.ajax({ // url: this.ajaxURL, // type: 'POST', // dataType: 'json', // data: { // page: this.ajaxPage, // getChildren: 1, // type: element.type // }, // complete: function(xhr, textStatus) { // $loadingImage.remove(); // }, // success: function(data, textStatus, xhr) { // if (data.success) { // var $children = _processGroup(this.recipient, data.elements); // $children.show(); // this.recipient.data('children', $children); // } // else { // $loadingImage.remove(); // this.recipient.html("
    " + this.errorMessage + "
    "); // } // }, // error: function(xhr, textStatus, errorThrown) { // this.recipient.html("
    " + this.errorMessage + "
    "); // } // }); }, load: function () { this.reload(); }, changeTree: function (tree) { this.tree = tree; this.reload(); }, addLeaf: function (leaf) { // this.tree.unshift(leaf); // this.reload(); }, removeLeaf: function (leafID) { if (leafID != 0 && this.tree.length > 0) { this.tree.splice(leafID, 1); this.reload(); } }, init: function (data) { if (typeof data.recipient != 'undefined' && data.recipient.length > 0) { this.recipient = data.recipient; } if (typeof data.tree != 'undefined' && data.tree.length > 0) { this.tree = data.tree; } if (typeof data.emptyMessage != 'undefined' && data.emptyMessage.length > 0) { this.emptyMessage = data.emptyMessage; } if (typeof data.errorMessage != 'undefined' && data.errorMessage.length > 0) { this.errorMessage = data.errorMessage; } if (typeof data.ajaxURL != 'undefined' && data.ajaxURL.length > 0) { this.ajaxURL = data.ajaxURL; } if (typeof data.ajaxPage != 'undefined' && data.ajaxPage.length > 0) { this.ajaxPage = data.ajaxPage; } this.index = TreeController.controllers.push(this) - 1; this.load(); }, remove: function () { if (typeof this.recipient == 'undefined' || this.recipient.length > 0) { return; } this.recipient.empty(); if (this.index > -1) { TreeController.controllers.splice(this.index, 1); } } } return controller; } }