2 'common/sigmatopology/sigmatopology.module',
10 define(modules, function(topologyModule) {
11 topologyModule.register.directive('sigmaTopology', function() {
16 topologyData: '=topologyData',
17 topologyOptions: '=topologyOptions',
18 topologyCustfunc: '=topologyCustfunc',
20 customShapes: '=customShapes',
21 dragNodes: '=dragNodes',
22 settings: '=settingsSigma',
23 settingsAtlas: '=settingsAtlas',
24 triggerResizeSigma: '=triggerResizeSigma'
26 templateUrl: 'src/common/sigmatopology/sigma.tpl.html',
27 link: function($scope, iElm, iAttrs, controller) {
29 var sigmaIstance = null,
30 getSlowDownNum = function(numOfNodes){
31 // return 1/numOfNodes;
34 case (numOfNodes < 20):
37 case (numOfNodes < 50):
40 case (numOfNodes < 100):
43 case (numOfNodes < 250):
46 case (numOfNodes < 500):
49 case (numOfNodes < 1000):
52 case (numOfNodes < 2000):
55 // case (numOfNodes < 5000):
58 case (numOfNodes < 10000):
68 defaultLabelColor: '#fff',
69 doubleClickEnabled: false,
73 $scope.$watch('topologyData', function (ntdata) {
77 if ( sigmaIstance !== null ) {
83 sigma.renderers.def = sigma.renderers.canvas;
85 // console.info('sigma topology data', ntdata, $scope.topologyData);
86 sigmaIstance = new Sigma({
88 nodes: $scope.topologyData.nodes ? $scope.topologyData.nodes : [],
89 edges: $scope.topologyData.links
91 container: 'graph-container',
92 settings: $scope.settings ? $scope.settings : defaulSettings
95 if ( $scope.settingsAtlas ) {
96 $scope.settingsAtlas.slowDown = getSlowDownNum($scope.topologyData.nodes.length);
99 var defaultConfigAtlas = {
103 slowDown: getSlowDownNum($scope.topologyData.nodes.length)
105 configAtlas = $scope.settingsAtlas ? $scope.settingsAtlas : defaultConfigAtlas;
107 if ( $scope.customShapes ) {
108 CustomShapes.init(sigmaIstance);
109 sigmaIstance.refresh();
112 var dragListener = null;
114 if ( $scope.dragNodes ) {
115 dragListener = Sigma.plugins.dragNodes(sigmaIstance, sigmaIstance.renderers[0]);
118 sigmaIstance.startForceAtlas2(configAtlas);
120 if ( $scope.topologyCustfunc && angular.isFunction($scope.topologyCustfunc) ) {
121 $scope.topologyCustfunc(sigmaIstance, getSlowDownNum, dragListener);
127 $scope.$watch('triggerResizeSigma', function () {
134 if ( sigmaIstance !== null ) {
135 topoData.nodes = sigmaIstance.graph.nodes();
136 topoData.links = sigmaIstance.graph.edges();
140 // Instantiate sigma:
141 sigma.renderers.def = sigma.renderers.canvas;
143 sigmaIstance = new Sigma({
145 nodes: topoData ? topoData.nodes : [],
146 edges: topoData ? topoData.links : []
148 container: 'graph-container',
149 settings: $scope.settings ? $scope.settings : defaulSettings
152 if ( $scope.customShapes ) {
153 CustomShapes.init(sigmaIstance);
154 sigmaIstance.refresh();
157 var dragListener = null;
159 if ( $scope.dragNodes ) {
160 dragListener = Sigma.plugins.dragNodes(sigmaIstance, sigmaIstance.renderers[0]);
163 if ( $scope.topologyCustfunc && angular.isFunction($scope.topologyCustfunc) ) {
165 $scope.topologyCustfunc(sigmaIstance, getSlowDownNum, dragListener, resize);