12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import H from '../parts/Globals.js';
- H.NodesMixin = {
- // Create a single node that holds information on incoming and outgoing
- // links.
- createNode: function (id) {
- function findById(nodes, id) {
- return H.find(nodes, function (node) {
- return node.id === id;
- });
- }
- var node = findById(this.nodes, id),
- PointClass = this.pointClass,
- options;
- if (!node) {
- options = this.options.nodes && findById(this.options.nodes, id);
- node = (new PointClass()).init(
- this,
- H.extend({
- className: 'highcharts-node',
- isNode: true,
- id: id,
- y: 1 // Pass isNull test
- }, options)
- );
- node.linksTo = [];
- node.linksFrom = [];
- node.formatPrefix = 'node';
- node.name = node.name || node.options.id; // for use in formats
- // Return the largest sum of either the incoming or outgoing links.
- node.getSum = function () {
- var sumTo = 0,
- sumFrom = 0;
- node.linksTo.forEach(function (link) {
- sumTo += link.weight;
- });
- node.linksFrom.forEach(function (link) {
- sumFrom += link.weight;
- });
- return Math.max(sumTo, sumFrom);
- };
- // Get the offset in weight values of a point/link.
- node.offset = function (point, coll) {
- var offset = 0;
- for (var i = 0; i < node[coll].length; i++) {
- if (node[coll][i] === point) {
- return offset;
- }
- offset += node[coll][i].weight;
- }
- };
- // Return true if the node has a shape, otherwise all links are
- // outgoing.
- node.hasShape = function () {
- var outgoing = 0;
- node.linksTo.forEach(function (link) {
- if (link.outgoing) {
- outgoing++;
- }
- });
- return !node.linksTo.length || outgoing !== node.linksTo.length;
- };
- this.nodes.push(node);
- }
- return node;
- }
- };
|