UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

208 lines (180 loc) 5.29 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2007 Derrell Lipman License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Derrell Lipman (derrell) ************************************************************************ */ /** * A set of methods which may be used to retrieve various siblings of nodes. */ qx.Mixin.define("qx.ui.treevirtual.MFamily", { members : { /** * Get the first child of the specified node. * * @param nodeReference {Object | Integer} * The node for which the first child is desired. The node can be * represented either by the node object, or the node id (as would have * been returned by addBranch(), addLeaf(), etc.) * * @return {Integer} * The node id of the first child. */ familyGetFirstChild : function(nodeReference) { var node; if (typeof(nodeReference) == "object") { node = nodeReference; } else if (typeof(nodeReference) == "number") { node = this.getTableModel().getData()[nodeReference]; } else { throw new Error("Expected node object or node id"); } if (node.children.length > 0) { return node.children[0]; } return null; }, /** * Get the last child of the specified node. * * @param nodeReference {Object | Integer} * The node for which the last child is desired. The node can be * represented either by the node object, or the node id (as would have * been returned by addBranch(), addLeaf(), etc.) * * @return {Integer} * The node id of the last child. */ familyGetLastChild : function(nodeReference) { var node; if (typeof(nodeReference) == "object") { node = nodeReference; } else if (typeof(nodeReference) == "number") { node = this.getTableModel().getData()[nodeReference]; } else { throw new Error("Expected node object or node id"); } if (node.children.length > 0) { return node.children[node.children.length - 1]; } return null; }, /** * Get the next sibling of the specified node. * * @param nodeReference {Object | Integer} * The node for which the next sibling is desired. The node can be * represented either by the node object, or the node id (as would have * been returned by addBranch(), addLeaf(), etc.) * * @return {Integer} * The node id of the next sibling. */ familyGetNextSibling : function(nodeReference) { var node; var nodeId; var nodes = this.getTableModel().getData(); if (typeof(nodeReference) == "object") { node = nodeReference; } else if (typeof(nodeReference) == "number") { nodeId = nodeReference; node = nodes[nodeId]; } else { throw new Error("Expected node object or node id"); } var myNodeId = node.nodeId; var parentChildren = nodes[node.parentNodeId].children; // Find this node id in our parent's children array for (var i=0; i<parentChildren.length; i++) { // Is this our id? if (parentChildren[i] == myNodeId) { // Yup. Ensure there is a next sibling. if (i < parentChildren.length - 1) { // There is. Return the next sibling. return parentChildren[i + 1]; } // There's no next sibling return null; } } }, /** * Get the previous sibling of the specified node. * * @param nodeReference {Object | Integer} * The node for which the previous sibling is desired. The node can be * represented either by the node object, or the node id (as would have * been returned by addBranch(), addLeaf(), etc.) * * @return {Integer} * The node id of the previous sibling. */ familyGetPrevSibling : function(nodeReference) { var node; var nodeId; var nodes = this.getTableModel().getData(); if (typeof(nodeReference) == "object") { node = nodeReference; } else if (typeof(nodeReference) == "number") { nodeId = nodeReference; node = nodes[nodeId]; } else { throw new Error("Expected node object or node id"); } var myNodeId = node.nodeId; var parentChildren = nodes[node.parentNodeId].children; // Find this node id in our parent's children array for (var i=0; i<parentChildren.length; i++) { // Is this our id? if (parentChildren[i] == myNodeId) { // Yup. Ensure there is a previous sibling. if (i > 0) { // There is. Return the previous sibling. return parentChildren[i - 1]; } // There's no previous sibling return null; } } } } });