UNPKG

highcharts

Version:
59 lines (56 loc) 25.3 kB
/* Highcharts JS v10.2.0 (2022-07-05) Force directed graph module (c) 2010-2021 Torstein Honsi License: www.highcharts.com/license */ (function(f){"object"===typeof module&&module.exports?(f["default"]=f,module.exports=f):"function"===typeof define&&define.amd?define("highcharts/modules/networkgraph",["highcharts"],function(l){f(l);f.Highcharts=l;return f}):f("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(f){function l(f,a,d,c){f.hasOwnProperty(a)||(f[a]=c.apply(null,d),"function"===typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:a,module:f[a]}})))}f=f?f._modules:{}; l(f,"Series/NodesComposition.js",[f["Core/Series/SeriesRegistry.js"],f["Core/Utilities.js"]],function(f,a){f=f.series;var d=f.prototype,c=f.prototype.pointClass.prototype,e=a.defined,h=a.extend,r=a.find,m=a.merge,u=a.pick,k;(function(b){function a(){this.data=[].concat(this.points||[],this.nodes);return d.destroy.apply(this,arguments)}function y(){this.nodes&&(this.nodes.forEach(function(b){b.destroy()}),this.nodes.length=0);d.setData.apply(this,arguments)}function p(b){var a=arguments,e=this.isNode? this.linksTo.concat(this.linksFrom):[this.fromNode,this.toNode];"select"!==b&&e.forEach(function(b){b&&b.series&&(c.setState.apply(b,a),b.isNode||(b.fromNode.graphic&&c.setState.apply(b.fromNode,a),b.toNode&&b.toNode.graphic&&c.setState.apply(b.toNode,a)))});c.setState.apply(this,a)}function f(b,a,e,g){var w=this,d=this.series.options.nodes,n=this.series.options.data,v=n&&n.length||0,x=n&&n[this.index];c.update.call(this,b,this.isNode?!1:a,e,g);this.isNode&&(b=(d||[]).reduce(function(b,a,e){return w.id=== a.id?e:b},-1),g=m(d&&d[b]||{},n&&n[this.index]||{}),n&&(x?n[this.index]=x:n.length=v),d?0<=b?d[b]=g:d.push(g):this.series.options.nodes=[g],u(a,!0)&&this.series.chart.redraw(e))}var g=[];b.compose=function(b,e){-1===g.indexOf(b)&&(g.push(b),b=b.prototype,b.setNodeState=p,b.setState=p,b.update=f);-1===g.indexOf(e)&&(g.push(e),b=e.prototype,b.destroy=a,b.setData=y);return e};b.createNode=function(b){var a=this.pointClass,e=function(b,a){return r(b,function(b){return b.id===a})},g=e(this.nodes,b);if(!g){e= this.options.nodes&&e(this.options.nodes,b);var c=(new a).init(this,h({className:"highcharts-node",isNode:!0,id:b,y:1},e));c.linksTo=[];c.linksFrom=[];c.getSum=function(){var b=0,a=0;c.linksTo.forEach(function(a){b+=a.weight||0});c.linksFrom.forEach(function(b){a+=b.weight||0});return Math.max(b,a)};c.offset=function(b,a){for(var e=0,g=0;g<c[a].length;g++){if(c[a][g]===b)return e;e+=c[a][g].weight}};c.hasShape=function(){var b=0;c.linksTo.forEach(function(a){a.outgoing&&b++});return!c.linksTo.length|| b!==c.linksTo.length};c.index=this.nodes.push(c)-1;g=c}g.formatPrefix="node";g.name=g.name||g.options.id||"";g.mass=u(g.options.mass,g.options.marker&&g.options.marker.radius,this.options.marker&&this.options.marker.radius,4);return g};b.destroy=a;b.generatePoints=function(){var b=this,a=this.chart,g={};d.generatePoints.call(this);this.nodes||(this.nodes=[]);this.colorCounter=0;this.nodes.forEach(function(b){b.linksFrom.length=0;b.linksTo.length=0;b.level=b.options.level});this.points.forEach(function(c){e(c.from)&& (g[c.from]||(g[c.from]=b.createNode(c.from)),g[c.from].linksFrom.push(c),c.fromNode=g[c.from],a.styledMode?c.colorIndex=u(c.options.colorIndex,g[c.from].colorIndex):c.color=c.options.color||g[c.from].color);e(c.to)&&(g[c.to]||(g[c.to]=b.createNode(c.to)),g[c.to].linksTo.push(c),c.toNode=g[c.to]);c.name=c.name||c.id},this);this.nodeLookup=g};b.setNodeState=p;b.updateNode=f})(k||(k={}));return k});l(f,"Series/Networkgraph/Integrations.js",[f["Core/Globals.js"]],function(f){f.networkgraphIntegrations= {verlet:{attractiveForceFunction:function(a,d){return(d-a)/a},repulsiveForceFunction:function(a,d){return(d-a)/a*(d>a?1:0)},barycenter:function(){var a=this.options.gravitationalConstant,d=this.barycenter.xFactor,c=this.barycenter.yFactor;d=(d-(this.box.left+this.box.width)/2)*a;c=(c-(this.box.top+this.box.height)/2)*a;this.nodes.forEach(function(a){a.fixedPosition||(a.plotX-=d/a.mass/a.degree,a.plotY-=c/a.mass/a.degree)})},repulsive:function(a,d,c){d=d*this.diffTemperature/a.mass/a.degree;a.fixedPosition|| (a.plotX+=c.x*d,a.plotY+=c.y*d)},attractive:function(a,d,c){var e=a.getMass(),h=-c.x*d*this.diffTemperature;d=-c.y*d*this.diffTemperature;a.fromNode.fixedPosition||(a.fromNode.plotX-=h*e.fromNode/a.fromNode.degree,a.fromNode.plotY-=d*e.fromNode/a.fromNode.degree);a.toNode.fixedPosition||(a.toNode.plotX+=h*e.toNode/a.toNode.degree,a.toNode.plotY+=d*e.toNode/a.toNode.degree)},integrate:function(a,d){var c=-a.options.friction,e=a.options.maxSpeed,h=(d.plotX+d.dispX-d.prevX)*c;c*=d.plotY+d.dispY-d.prevY; var f=Math.abs,m=f(h)/(h||1);f=f(c)/(c||1);h=m*Math.min(e,Math.abs(h));c=f*Math.min(e,Math.abs(c));d.prevX=d.plotX+d.dispX;d.prevY=d.plotY+d.dispY;d.plotX+=h;d.plotY+=c;d.temperature=a.vectorLength({x:h,y:c})},getK:function(a){return Math.pow(a.box.width*a.box.height/a.nodes.length,.5)}},euler:{attractiveForceFunction:function(a,d){return a*a/d},repulsiveForceFunction:function(a,d){return d*d/a},barycenter:function(){var a=this.options.gravitationalConstant,d=this.barycenter.xFactor,c=this.barycenter.yFactor; this.nodes.forEach(function(e){if(!e.fixedPosition){var h=e.getDegree();h*=1+h/2;e.dispX+=(d-e.plotX)*a*h/e.degree;e.dispY+=(c-e.plotY)*a*h/e.degree}})},repulsive:function(a,d,c,e){a.dispX+=c.x/e*d/a.degree;a.dispY+=c.y/e*d/a.degree},attractive:function(a,d,c,e){var h=a.getMass(),f=c.x/e*d;d*=c.y/e;a.fromNode.fixedPosition||(a.fromNode.dispX-=f*h.fromNode/a.fromNode.degree,a.fromNode.dispY-=d*h.fromNode/a.fromNode.degree);a.toNode.fixedPosition||(a.toNode.dispX+=f*h.toNode/a.toNode.degree,a.toNode.dispY+= d*h.toNode/a.toNode.degree)},integrate:function(a,d){d.dispX+=d.dispX*a.options.friction;d.dispY+=d.dispY*a.options.friction;var c=d.temperature=a.vectorLength({x:d.dispX,y:d.dispY});0!==c&&(d.plotX+=d.dispX/c*Math.min(Math.abs(d.dispX),a.temperature),d.plotY+=d.dispY/c*Math.min(Math.abs(d.dispY),a.temperature))},getK:function(a){return Math.pow(a.box.width*a.box.height/a.nodes.length,.3)}}}});l(f,"Series/Networkgraph/QuadTree.js",[f["Core/Globals.js"],f["Core/Utilities.js"]],function(f,a){a=a.extend; var d=f.QuadTreeNode=function(a){this.box=a;this.boxSize=Math.min(a.width,a.height);this.nodes=[];this.body=this.isInternal=!1;this.isEmpty=!0};a(d.prototype,{insert:function(a,e){this.isInternal?this.nodes[this.getBoxPosition(a)].insert(a,e-1):(this.isEmpty=!1,this.body?e?(this.isInternal=!0,this.divideBox(),!0!==this.body&&(this.nodes[this.getBoxPosition(this.body)].insert(this.body,e-1),this.body=!0),this.nodes[this.getBoxPosition(a)].insert(a,e-1)):(e=new d({top:a.plotX,left:a.plotY,width:.1, height:.1}),e.body=a,e.isInternal=!1,this.nodes.push(e)):(this.isInternal=!1,this.body=a))},updateMassAndCenter:function(){var a=0,e=0,d=0;this.isInternal?(this.nodes.forEach(function(c){c.isEmpty||(a+=c.mass,e+=c.plotX*c.mass,d+=c.plotY*c.mass)}),e/=a,d/=a):this.body&&(a=this.body.mass,e=this.body.plotX,d=this.body.plotY);this.mass=a;this.plotX=e;this.plotY=d},divideBox:function(){var a=this.box.width/2,e=this.box.height/2;this.nodes[0]=new d({left:this.box.left,top:this.box.top,width:a,height:e}); this.nodes[1]=new d({left:this.box.left+a,top:this.box.top,width:a,height:e});this.nodes[2]=new d({left:this.box.left+a,top:this.box.top+e,width:a,height:e});this.nodes[3]=new d({left:this.box.left,top:this.box.top+e,width:a,height:e})},getBoxPosition:function(a){var c=a.plotY<this.box.top+this.box.height/2;return a.plotX<this.box.left+this.box.width/2?c?0:3:c?1:2}});f=f.QuadTree=function(a,e,f,r){this.box={left:a,top:e,width:f,height:r};this.maxDepth=25;this.root=new d(this.box,"0");this.root.isInternal= !0;this.root.isRoot=!0;this.root.divideBox()};a(f.prototype,{insertNodes:function(a){a.forEach(function(a){this.root.insert(a,this.maxDepth)},this)},visitNodeRecursive:function(a,e,d){var c;a||(a=this.root);a===this.root&&e&&(c=e(a));!1!==c&&(a.nodes.forEach(function(a){if(a.isInternal){e&&(c=e(a));if(!1===c)return;this.visitNodeRecursive(a,e,d)}else a.body&&e&&e(a.body);d&&d(a)},this),a===this.root&&d&&d(a))},calculateMassAndCenter:function(){this.visitNodeRecursive(null,null,function(a){a.updateMassAndCenter()})}})}); l(f,"Series/Networkgraph/Layouts.js",[f["Core/Chart/Chart.js"],f["Core/Animation/AnimationUtilities.js"],f["Core/Globals.js"],f["Core/Utilities.js"]],function(f,a,d,c){var e=a.setAnimation;a=c.addEvent;var h=c.clamp,r=c.defined,m=c.extend,t=c.isFunction,k=c.pick;d.layouts={"reingold-fruchterman":function(){}};m(d.layouts["reingold-fruchterman"].prototype,{init:function(b){this.options=b;this.nodes=[];this.links=[];this.series=[];this.box={x:0,y:0,width:0,height:0};this.setInitialRendering(!0);this.integration= d.networkgraphIntegrations[b.integration];this.enableSimulation=b.enableSimulation;this.attractiveForce=k(b.attractiveForce,this.integration.attractiveForceFunction);this.repulsiveForce=k(b.repulsiveForce,this.integration.repulsiveForceFunction);this.approximation=b.approximation},updateSimulation:function(b){this.enableSimulation=k(b,this.options.enableSimulation)},start:function(){var b=this.series,a=this.options;this.currentStep=0;this.forces=b[0]&&b[0].forces||[];this.chart=b[0]&&b[0].chart;this.initialRendering&& (this.initPositions(),b.forEach(function(b){b.finishedAnimating=!0;b.render()}));this.setK();this.resetSimulation(a);this.enableSimulation&&this.step()},step:function(){var b=this,a=this.series;b.currentStep++;"barnes-hut"===b.approximation&&(b.createQuadTree(),b.quadTree.calculateMassAndCenter());b.forces.forEach(function(a){b[a+"Forces"](b.temperature)});b.applyLimits(b.temperature);b.temperature=b.coolDown(b.startTemperature,b.diffTemperature,b.currentStep);b.prevSystemTemperature=b.systemTemperature; b.systemTemperature=b.getSystemTemperature();b.enableSimulation&&(a.forEach(function(b){b.chart&&b.render()}),b.maxIterations--&&isFinite(b.temperature)&&!b.isStable()?(b.simulation&&d.win.cancelAnimationFrame(b.simulation),b.simulation=d.win.requestAnimationFrame(function(){b.step()})):b.simulation=!1)},stop:function(){this.simulation&&d.win.cancelAnimationFrame(this.simulation)},setArea:function(b,a,c,d){this.box={left:b,top:a,width:c,height:d}},setK:function(){this.k=this.options.linkLength||this.integration.getK(this)}, addElementsToCollection:function(b,a){b.forEach(function(b){-1===a.indexOf(b)&&a.push(b)})},removeElementFromCollection:function(b,a){b=a.indexOf(b);-1!==b&&a.splice(b,1)},clear:function(){this.nodes.length=0;this.links.length=0;this.series.length=0;this.resetSimulation()},resetSimulation:function(){this.forcedStop=!1;this.systemTemperature=0;this.setMaxIterations();this.setTemperature();this.setDiffTemperature()},restartSimulation:function(){this.simulation?this.resetSimulation():(this.setInitialRendering(!1), this.enableSimulation?this.start():this.setMaxIterations(1),this.chart&&this.chart.redraw(),this.setInitialRendering(!0))},setMaxIterations:function(b){this.maxIterations=k(b,this.options.maxIterations)},setTemperature:function(){this.temperature=this.startTemperature=Math.sqrt(this.nodes.length)},setDiffTemperature:function(){this.diffTemperature=this.startTemperature/(this.options.maxIterations+1)},setInitialRendering:function(b){this.initialRendering=b},createQuadTree:function(){this.quadTree= new d.QuadTree(this.box.left,this.box.top,this.box.width,this.box.height);this.quadTree.insertNodes(this.nodes)},initPositions:function(){var b=this.options.initialPositions;t(b)?(b.call(this),this.nodes.forEach(function(b){r(b.prevX)||(b.prevX=b.plotX);r(b.prevY)||(b.prevY=b.plotY);b.dispX=0;b.dispY=0})):"circle"===b?this.setCircularPositions():this.setRandomPositions()},setCircularPositions:function(){function b(a){a.linksFrom.forEach(function(a){w[a.toNode.id]||(w[a.toNode.id]=!0,g.push(a.toNode), b(a.toNode))})}var a=this.box,c=this.nodes,d=2*Math.PI/(c.length+1),e=c.filter(function(a){return 0===a.linksTo.length}),g=[],w={},f=this.options.initialPositionRadius;e.forEach(function(a){g.push(a);b(a)});g.length?c.forEach(function(a){-1===g.indexOf(a)&&g.push(a)}):g=c;g.forEach(function(b,g){b.plotX=b.prevX=k(b.plotX,a.width/2+f*Math.cos(g*d));b.plotY=b.prevY=k(b.plotY,a.height/2+f*Math.sin(g*d));b.dispX=0;b.dispY=0})},setRandomPositions:function(){function b(a){a=a*a/Math.PI;return a-=Math.floor(a)} var a=this.box,c=this.nodes,d=c.length+1;c.forEach(function(c,g){c.plotX=c.prevX=k(c.plotX,a.width*b(g));c.plotY=c.prevY=k(c.plotY,a.height*b(d+g));c.dispX=0;c.dispY=0})},force:function(a){this.integration[a].apply(this,Array.prototype.slice.call(arguments,1))},barycenterForces:function(){this.getBarycenter();this.force("barycenter")},getBarycenter:function(){var a=0,c=0,d=0;this.nodes.forEach(function(b){c+=b.plotX*b.mass;d+=b.plotY*b.mass;a+=b.mass});return this.barycenter={x:c,y:d,xFactor:c/a, yFactor:d/a}},barnesHutApproximation:function(a,c){var b=this.getDistXY(a,c),d=this.vectorLength(b);if(a!==c&&0!==d)if(c.isInternal)if(c.boxSize/d<this.options.theta&&0!==d){var e=this.repulsiveForce(d,this.k);this.force("repulsive",a,e*c.mass,b,d);var g=!1}else g=!0;else e=this.repulsiveForce(d,this.k),this.force("repulsive",a,e*c.mass,b,d);return g},repulsiveForces:function(){var a=this;"barnes-hut"===a.approximation?a.nodes.forEach(function(b){a.quadTree.visitNodeRecursive(null,function(c){return a.barnesHutApproximation(b, c)})}):a.nodes.forEach(function(b){a.nodes.forEach(function(c){if(b!==c&&!b.fixedPosition){var d=a.getDistXY(b,c);var e=a.vectorLength(d);if(0!==e){var g=a.repulsiveForce(e,a.k);a.force("repulsive",b,g*c.mass,d,e)}}})})},attractiveForces:function(){var a=this,c,d,e;a.links.forEach(function(b){b.fromNode&&b.toNode&&(c=a.getDistXY(b.fromNode,b.toNode),d=a.vectorLength(c),0!==d&&(e=a.attractiveForce(d,a.k),a.force("attractive",b,e,c,d)))})},applyLimits:function(){var a=this;a.nodes.forEach(function(b){b.fixedPosition|| (a.integration.integrate(a,b),a.applyLimitBox(b,a.box),b.dispX=0,b.dispY=0)})},applyLimitBox:function(a,c){var b=a.radius;a.plotX=h(a.plotX,c.left+b,c.width-b);a.plotY=h(a.plotY,c.top+b,c.height-b)},coolDown:function(a,c,d){return a-c*d},isStable:function(){return.00001>Math.abs(this.systemTemperature-this.prevSystemTemperature)||0>=this.temperature},getSystemTemperature:function(){return this.nodes.reduce(function(a,c){return a+c.temperature},0)},vectorLength:function(a){return Math.sqrt(a.x*a.x+ a.y*a.y)},getDistR:function(a,c){a=this.getDistXY(a,c);return this.vectorLength(a)},getDistXY:function(a,c){var b=a.plotX-c.plotX;a=a.plotY-c.plotY;return{x:b,y:a,absX:Math.abs(b),absY:Math.abs(a)}}});a(f,"predraw",function(){this.graphLayoutsLookup&&this.graphLayoutsLookup.forEach(function(a){a.stop()})});a(f,"render",function(){function a(a){a.maxIterations--&&isFinite(a.temperature)&&!a.isStable()&&!a.enableSimulation&&(a.beforeStep&&a.beforeStep(),a.step(),d=!1,c=!0)}var c=!1;if(this.graphLayoutsLookup){e(!1, this);for(this.graphLayoutsLookup.forEach(function(a){a.start()});!d;){var d=!0;this.graphLayoutsLookup.forEach(a)}c&&this.series.forEach(function(a){a&&a.layout&&a.render()})}});a(f,"beforePrint",function(){this.graphLayoutsLookup&&(this.graphLayoutsLookup.forEach(function(a){a.updateSimulation(!1)}),this.redraw())});a(f,"afterPrint",function(){this.graphLayoutsLookup&&this.graphLayoutsLookup.forEach(function(a){a.updateSimulation()});this.redraw()})});l(f,"Series/Networkgraph/DraggableNodes.js", [f["Core/Chart/Chart.js"],f["Core/Globals.js"],f["Core/Utilities.js"]],function(f,a,d){var c=d.addEvent;a.dragNodesMixin={onMouseDown:function(a,c){c=this.chart.pointer.normalize(c);a.fixedPosition={chartX:c.chartX,chartY:c.chartY,plotX:a.plotX,plotY:a.plotY};a.inDragMode=!0},onMouseMove:function(a,c){if(a.fixedPosition&&a.inDragMode){var d=this.chart,e=d.pointer.normalize(c);c=a.fixedPosition.chartX-e.chartX;e=a.fixedPosition.chartY-e.chartY;var f=void 0,h=void 0,b=d.graphLayoutsLookup;if(5<Math.abs(c)|| 5<Math.abs(e))f=a.fixedPosition.plotX-c,h=a.fixedPosition.plotY-e,d.isInsidePlot(f,h)&&(a.plotX=f,a.plotY=h,a.hasDragged=!0,this.redrawHalo(a),b.forEach(function(a){a.restartSimulation()}))}},onMouseUp:function(a,c){a.fixedPosition&&(a.hasDragged&&(this.layout.enableSimulation?this.layout.start():this.chart.redraw()),a.inDragMode=a.hasDragged=!1,this.options.fixedDraggable||delete a.fixedPosition)},redrawHalo:function(a){a&&this.halo&&this.halo.attr({d:a.haloPath(this.options.states.hover.halo.size)})}}; c(f,"load",function(){var a=this,d,f,m;a.container&&(d=c(a.container,"mousedown",function(d){var e=a.hoverPoint;e&&e.series&&e.series.hasDraggableNodes&&e.series.options.draggable&&(e.series.onMouseDown(e,d),f=c(a.container,"mousemove",function(a){return e&&e.series&&e.series.onMouseMove(e,a)}),m=c(a.container.ownerDocument,"mouseup",function(a){f();m();return e&&e.series&&e.series.onMouseUp(e,a)}))}));c(a,"destroy",function(){d()})})});l(f,"Series/Networkgraph/Networkgraph.js",[f["Core/Globals.js"], f["Series/NodesComposition.js"],f["Core/Series/Point.js"],f["Core/Series/Series.js"],f["Core/Series/SeriesRegistry.js"],f["Core/Utilities.js"]],function(f,a,d,c,e,h){var l=this&&this.__extends||function(){var a=function(b,c){a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])};return a(b,c)};return function(b,c){function d(){this.constructor=b}a(b,c);b.prototype=null===c?Object.create(c):(d.prototype= c.prototype,new d)}}(),m=e.seriesTypes,t=h.addEvent,k=h.css,b=h.defined,v=h.extend,u=h.merge,p=h.pick,q=f.dragNodesMixin;"";h=function(a){function b(){var b=null!==a&&a.apply(this,arguments)||this;b.data=void 0;b.nodes=void 0;b.options=void 0;b.points=void 0;return b}l(b,a);b.defaultOptions=u(c.defaultOptions,{stickyTracking:!1,inactiveOtherPoints:!0,marker:{enabled:!0,states:{inactive:{opacity:.3,animation:{duration:50}}}},states:{inactive:{linkOpacity:.3,animation:{duration:50}}},dataLabels:{formatter:function(){return this.key}, linkFormatter:function(){return this.point.fromNode.name+"<br>"+this.point.toNode.name},linkTextPath:{enabled:!0},textPath:{enabled:!1},style:{transition:"opacity 2000ms"}},link:{color:"rgba(100, 100, 100, 0.5)",width:1},draggable:!0,layoutAlgorithm:{initialPositions:"circle",initialPositionRadius:1,enableSimulation:!1,theta:.5,maxSpeed:10,approximation:"none",type:"reingold-fruchterman",integration:"euler",maxIterations:1E3,gravitationalConstant:.0625,friction:-.981},showInLegend:!1});return b}(c); v(h.prototype,{forces:["barycenter","repulsive","attractive"],hasDraggableNodes:!0,drawGraph:void 0,isCartesian:!1,requireSorting:!1,directTouch:!0,noSharedTooltip:!0,pointArrayMap:["from","to"],trackerGroups:["group","markerGroup","dataLabelsGroup"],drawTracker:m.column.prototype.drawTracker,animate:void 0,buildKDTree:f.noop,createNode:a.createNode,destroy:function(){this.layout&&this.layout.removeElementFromCollection(this,this.layout.series);a.destroy.call(this)},init:function(){var a=this;c.prototype.init.apply(this, arguments);t(this,"updatedData",function(){a.layout&&a.layout.stop()});t(this,"afterUpdate",function(){a.nodes.forEach(function(a){a&&a.series&&a.resolveColor()})});return this},generatePoints:function(){var b;a.generatePoints.apply(this,arguments);this.options.nodes&&this.options.nodes.forEach(function(a){this.nodeLookup[a.id]||(this.nodeLookup[a.id]=this.createNode(a.id))},this);for(b=this.nodes.length-1;0<=b;b--){var c=this.nodes[b];c.degree=c.getDegree();c.radius=p(c.marker&&c.marker.radius,this.options.marker&& this.options.marker.radius,0);this.nodeLookup[c.id]||c.remove()}this.data.forEach(function(a){a.formatPrefix="link"});this.indexateNodes()},getPointsCollection:function(){return this.nodes||[]},indexateNodes:function(){this.nodes.forEach(function(a,b){a.index=b})},markerAttribs:function(a,d){d=c.prototype.markerAttribs.call(this,a,d);b(a.plotY)||(d.y=0);d.x=(a.plotX||0)-(d.width||0)/2;return d},translate:function(){this.processedXData||this.processData();this.generatePoints();this.deferLayout();this.nodes.forEach(function(a){a.isInside= !0;a.linksFrom.forEach(function(a){a.shapeType="path";a.y=1})})},deferLayout:function(){var a=this.options.layoutAlgorithm,c=this.chart.graphLayoutsStorage,d=this.chart.graphLayoutsLookup,e=this.chart.options.chart;if(this.visible){c||(this.chart.graphLayoutsStorage=c={},this.chart.graphLayoutsLookup=d=[]);var h=c[a.type];h||(a.enableSimulation=b(e.forExport)?!e.forExport:a.enableSimulation,c[a.type]=h=new f.layouts[a.type],h.init(a),d.splice(h.index,0,h));this.layout=h;h.setArea(0,0,this.chart.plotWidth, this.chart.plotHeight);h.addElementsToCollection([this],h.series);h.addElementsToCollection(this.nodes,h.nodes);h.addElementsToCollection(this.points,h.links)}},render:function(){var a=this.points,b=this.chart.hoverPoint,c=[];this.points=this.nodes;m.line.prototype.render.call(this);this.points=a;a.forEach(function(a){a.fromNode&&a.toNode&&(a.renderLink(),a.redrawLink())});b&&b.series===this&&this.redrawHalo(b);this.chart.hasRendered&&!this.options.dataLabels.allowOverlap&&(this.nodes.concat(this.points).forEach(function(a){a.dataLabel&& c.push(a.dataLabel)}),this.chart.hideOverlappingLabels(c))},drawDataLabels:function(){var a=this.options.dataLabels.textPath;c.prototype.drawDataLabels.apply(this,arguments);this.points=this.data;this.options.dataLabels.textPath=this.options.dataLabels.linkTextPath;c.prototype.drawDataLabels.apply(this,arguments);this.points=this.nodes;this.options.dataLabels.textPath=a},pointAttribs:function(a,b){var d=b||a&&a.state||"normal";b=c.prototype.pointAttribs.call(this,a,d);d=this.options.states[d];a&& !a.isNode&&(b=a.getLinkAttributes(),d&&(b={stroke:d.linkColor||b.stroke,dashstyle:d.linkDashStyle||b.dashstyle,opacity:p(d.linkOpacity,b.opacity),"stroke-width":d.linkColor||b["stroke-width"]}));return b},redrawHalo:q.redrawHalo,onMouseDown:q.onMouseDown,onMouseMove:q.onMouseMove,onMouseUp:q.onMouseUp,setState:function(a,b){b?(this.points=this.nodes.concat(this.data),c.prototype.setState.apply(this,arguments),this.points=this.data):c.prototype.setState.apply(this,arguments);this.layout.simulation|| a||this.render()}});q=function(a){function b(){var b=null!==a&&a.apply(this,arguments)||this;b.degree=void 0;b.linksFrom=void 0;b.linksTo=void 0;b.options=void 0;b.radius=void 0;b.series=void 0;b.toNode=void 0;return b}l(b,a);return b}(c.prototype.pointClass);v(q.prototype,{setState:a.setNodeState,init:function(){d.prototype.init.apply(this,arguments);this.series.options.draggable&&!this.series.chart.styledMode&&(t(this,"mouseOver",function(){k(this.series.chart.container,{cursor:"move"})}),t(this, "mouseOut",function(){k(this.series.chart.container,{cursor:"default"})}));return this},getDegree:function(){var a=this.isNode?this.linksFrom.length+this.linksTo.length:0;return 0===a?1:a},getLinkAttributes:function(){var a=this.series.options.link,b=this.options;return{"stroke-width":p(b.width,a.width),stroke:b.color||a.color,dashstyle:b.dashStyle||a.dashStyle,opacity:p(b.opacity,a.opacity,1)}},renderLink:function(){if(!this.graphic&&(this.graphic=this.series.chart.renderer.path(this.getLinkPath()).addClass(this.getClassName(), !0).add(this.series.group),!this.series.chart.styledMode)){var a=this.series.pointAttribs(this);this.graphic.attr(a);(this.dataLabels||[]).forEach(function(b){b&&b.attr({opacity:a.opacity})})}},redrawLink:function(){var a=this.getLinkPath();if(this.graphic){this.shapeArgs={d:a};if(!this.series.chart.styledMode){var b=this.series.pointAttribs(this);this.graphic.attr(b);(this.dataLabels||[]).forEach(function(a){a&&a.attr({opacity:b.opacity})})}this.graphic.animate(this.shapeArgs);var c=a[0];a=a[1]; "M"===c[0]&&"L"===a[0]&&(this.plotX=(c[1]+a[1])/2,this.plotY=(c[2]+a[2])/2)}},getMass:function(){var a=this.fromNode.mass,b=this.toNode.mass,c=a+b;return{fromNode:1-a/c,toNode:1-b/c}},getLinkPath:function(){var a=this.fromNode,b=this.toNode;a.plotX>b.plotX&&(a=this.toNode,b=this.fromNode);return[["M",a.plotX||0,a.plotY||0],["L",b.plotX||0,b.plotY||0]]},isValid:function(){return!this.isNode||b(this.id)},remove:function(a,b){var d=this.series,e=d.options.nodes||[],f,g=e.length;if(this.isNode){d.points= [];[].concat(this.linksFrom).concat(this.linksTo).forEach(function(a){f=a.fromNode.linksFrom.indexOf(a);-1<f&&a.fromNode.linksFrom.splice(f,1);f=a.toNode.linksTo.indexOf(a);-1<f&&a.toNode.linksTo.splice(f,1);c.prototype.removePoint.call(d,d.data.indexOf(a),!1,!1)});d.points=d.data.slice();for(d.nodes.splice(d.nodes.indexOf(this),1);g--;)if(e[g].id===this.options.id){d.options.nodes.splice(g,1);break}this&&this.destroy();d.isDirty=!0;d.isDirtyData=!0;a&&d.chart.redraw(a)}else d.removePoint(d.data.indexOf(this), a,b)},destroy:function(){this.isNode&&this.linksFrom.concat(this.linksTo).forEach(function(a){a.destroyElements&&a.destroyElements()});this.series.layout.removeElementFromCollection(this,this.series.layout[this.isNode?"nodes":"links"]);return d.prototype.destroy.apply(this,arguments)}});h.prototype.pointClass=q;e.registerSeriesType("networkgraph",h);"";return h});l(f,"masters/modules/networkgraph.src.js",[],function(){})}); //# sourceMappingURL=networkgraph.js.map