UNPKG

visjs-network

Version:

A dynamic, browser-based network visualization library.

122 lines (113 loc) 3.38 kB
let util = require('../util') /** * Utility Class */ class NetworkUtil { /** * @ignore */ constructor() {} /** * Find the center position of the network considering the bounding boxes * * @param {Array.<Node>} allNodes * @param {Array.<Node>} [specificNodes=[]] * @returns {{minX: number, maxX: number, minY: number, maxY: number}} * @static */ static getRange(allNodes, specificNodes = []) { var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node if (specificNodes.length > 0) { for (var i = 0; i < specificNodes.length; i++) { node = allNodes[specificNodes[i]] if (minX > node.shape.boundingBox.left) { minX = node.shape.boundingBox.left } if (maxX < node.shape.boundingBox.right) { maxX = node.shape.boundingBox.right } if (minY > node.shape.boundingBox.top) { minY = node.shape.boundingBox.top } // top is negative, bottom is positive if (maxY < node.shape.boundingBox.bottom) { maxY = node.shape.boundingBox.bottom } // top is negative, bottom is positive } } if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) { ;(minY = 0), (maxY = 0), (minX = 0), (maxX = 0) } return { minX: minX, maxX: maxX, minY: minY, maxY: maxY } } /** * Find the center position of the network * * @param {Array.<Node>} allNodes * @param {Array.<Node>} [specificNodes=[]] * @returns {{minX: number, maxX: number, minY: number, maxY: number}} * @static */ static getRangeCore(allNodes, specificNodes = []) { var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node if (specificNodes.length > 0) { for (var i = 0; i < specificNodes.length; i++) { node = allNodes[specificNodes[i]] if (minX > node.x) { minX = node.x } if (maxX < node.x) { maxX = node.x } if (minY > node.y) { minY = node.y } // top is negative, bottom is positive if (maxY < node.y) { maxY = node.y } // top is negative, bottom is positive } } if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) { ;(minY = 0), (maxY = 0), (minX = 0), (maxX = 0) } return { minX: minX, maxX: maxX, minY: minY, maxY: maxY } } /** * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY}; * @returns {{x: number, y: number}} * @static */ static findCenter(range) { return { x: 0.5 * (range.maxX + range.minX), y: 0.5 * (range.maxY + range.minY) } } /** * This returns a clone of the options or options of the edge or node to be used for construction of new edges or check functions for new nodes. * @param {vis.Item} item * @param {'node'|undefined} type * @returns {{}} * @static */ static cloneOptions(item, type) { let clonedOptions = {} if (type === undefined || type === 'node') { util.deepExtend(clonedOptions, item.options, true) clonedOptions.x = item.x clonedOptions.y = item.y clonedOptions.amountOfConnections = item.edges.length } else { util.deepExtend(clonedOptions, item.options, true) } return clonedOptions } } export default NetworkUtil