Bump versions by x.(y+1).z for next dev cycle
[dlux.git] / modules / common-sigmatopology-resources / src / main / resources / sigmatopology / sigma.directive.js
1 var modules = [\r
2   'common/sigmatopology/sigmatopology.module',\r
3   'sigma',\r
4   'sigma-parsers-gexf',\r
5   'sigma-forceAtlas2',\r
6   'sigma-dragNodes',\r
7   'sigma-customShapes'\r
8 ];\r
9 \r
10 define(modules, function(topologyModule) {\r
11   topologyModule.directive('sigmaTopology', ['$timeout',function($timeout) {\r
12     // constants\r
13     return {\r
14       restrict: 'E',\r
15       scope: {\r
16           topologyData: '=topologyData',\r
17           topologyOptions: '=topologyOptions',\r
18           topologyCustfunc: '=topologyCustfunc',\r
19           panel: '=panel',\r
20           customShapes: '=customShapes',\r
21           dragNodes: '=dragNodes',\r
22           settings: '=settingsSigma',\r
23           settingsAtlas: '=settingsAtlas',\r
24           triggerResizeSigma: '=triggerResizeSigma'\r
25       },\r
26       templateUrl: 'src/common/sigmatopology/sigma.tpl.html',\r
27       link: function($scope, iElm, iAttrs, controller) {\r
28 \r
29           var sigmaIstance = null,\r
30               getSlowDownNum = function(numOfNodes){\r
31                   // return 1/numOfNodes;\r
32                   x = 10;\r
33               switch(true){\r
34                 case (numOfNodes < 20):\r
35                   x = 15;\r
36                   break;\r
37                 case (numOfNodes < 50):\r
38                   x = 5;\r
39                   break;\r
40                 case (numOfNodes < 100):\r
41                   x = 2;\r
42                   break;\r
43                 case (numOfNodes < 250):\r
44                   x = 1;\r
45                   break;\r
46                 case (numOfNodes < 500):\r
47                   x = 0.8;\r
48                   break;\r
49                 case (numOfNodes < 1000):\r
50                   x = 0.4;\r
51                   break;\r
52                 case (numOfNodes < 2000):\r
53                   x = 0.3;\r
54                   break;\r
55                 // case (numOfNodes < 5000):\r
56                 //   x = 0.1;\r
57                 //   break;\r
58                 case (numOfNodes < 10000):\r
59                   x = 0.1;\r
60                   break;\r
61               }\r
62 \r
63 \r
64               return x;\r
65             },\r
66             Sigma = sigma,\r
67             defaulSettings = {\r
68               defaultLabelColor: '#fff',\r
69               doubleClickEnabled: false,\r
70               labelThreshold: 8\r
71             };\r
72 \r
73           $scope.$watch('topologyData', function (ntdata) {\r
74 \r
75             if(ntdata){\r
76 \r
77               $timeout(function(){\r
78 \r
79                   if ( sigmaIstance !== null ) {\r
80                       sigmaIstance.kill();\r
81                   }\r
82                   var timeToStopAtlas;\r
83 \r
84                   // Instantiate sigma:\r
85                   Sigma.renderers.def = Sigma.renderers.canvas;\r
86 \r
87                   Sigma.prototype.resetZoom = function(camera){\r
88                       if(typeof camera == "undefined"){\r
89                           camera = this.cameras[0];\r
90                       }\r
91                       camera.ratio = 1;\r
92                       camera.x = 0;\r
93                       camera.y = 0;\r
94                       this.refresh();\r
95                   };\r
96 \r
97                   // console.info('sigma topology data', ntdata, $scope.topologyData);\r
98                   sigmaIstance = new Sigma({\r
99                       graph: {\r
100                           nodes: $scope.topologyData.nodes ? $scope.topologyData.nodes : [],\r
101                           edges: $scope.topologyData.links\r
102                       },\r
103                       container: 'graph-container',\r
104                       settings: $scope.settings ? $scope.settings : defaulSettings\r
105                   });\r
106 \r
107                   if ( $scope.settingsAtlas ) {\r
108                       $scope.settingsAtlas.slowDown = getSlowDownNum($scope.topologyData.nodes.length);\r
109                   }\r
110 \r
111                   var defaultConfigAtlas = {\r
112                           adjustSizes: true,\r
113                           // scalingRatio: 10,\r
114                           gravity: 1,\r
115                           slowDown: getSlowDownNum($scope.topologyData.nodes.length)\r
116                       },\r
117                       configAtlas = $scope.settingsAtlas ? $scope.settingsAtlas : defaultConfigAtlas;\r
118 \r
119                   if ( $scope.customShapes ) {\r
120                       CustomShapes.init(sigmaIstance);\r
121                       sigmaIstance.refresh();\r
122                   }\r
123 \r
124                   var dragListener = null;\r
125 \r
126                   if ( $scope.dragNodes ) {\r
127                       dragListener = Sigma.plugins.dragNodes(sigmaIstance, sigmaIstance.renderers[0]);\r
128                   }\r
129 \r
130                   if ( !$scope.topologyData.disabledAtlas ) {\r
131                       console.log('atlas');\r
132                       sigmaIstance.startForceAtlas2(configAtlas);\r
133                   }\r
134 \r
135                   if ( $scope.topologyCustfunc && angular.isFunction($scope.topologyCustfunc) ) {\r
136                       $scope.topologyCustfunc(sigmaIstance, getSlowDownNum, dragListener);\r
137                   }\r
138 \r
139               }, ntdata.delay ? ntdata.delay : 0);\r
140 \r
141             }\r
142           });\r
143 \r
144           $scope.$watch('triggerResizeSigma', function () {\r
145               var topoData = {\r
146                     nodes: [],\r
147                     links: []\r
148                   };\r
149 \r
150               if ( sigmaIstance !== null ) {\r
151                 topoData.nodes = sigmaIstance.graph.nodes();\r
152                 topoData.links = sigmaIstance.graph.edges();\r
153                 sigmaIstance.kill();\r
154               }\r
155 \r
156               // Instantiate sigma:\r
157               Sigma.renderers.def = Sigma.renderers.canvas;\r
158 \r
159               sigmaIstance = new Sigma({\r
160                 graph: {\r
161                   nodes: topoData ? topoData.nodes : [],\r
162                   edges: topoData ? topoData.links : []\r
163                 },\r
164                 container: 'graph-container',\r
165                 settings: $scope.settings ? $scope.settings : defaulSettings\r
166               });\r
167 \r
168 \r
169 \r
170               if ( $scope.customShapes ) {\r
171                 CustomShapes.init(sigmaIstance);\r
172                 sigmaIstance.refresh();\r
173               }\r
174 \r
175               var dragListener = null;\r
176 \r
177               if ( $scope.dragNodes ) {\r
178                 dragListener = Sigma.plugins.dragNodes(sigmaIstance, sigmaIstance.renderers[0]);\r
179               }\r
180 \r
181               if ( $scope.topologyCustfunc && angular.isFunction($scope.topologyCustfunc) ) {\r
182                 var resize = true;\r
183                 $scope.topologyCustfunc(sigmaIstance, getSlowDownNum, dragListener, resize);\r
184               }\r
185 \r
186           });\r
187       }\r
188     };\r
189   }]);\r
190 });\r