1+ function neighbourhoodHighlight ( params ) {
2+ // console.log("in nieghbourhoodhighlight");
3+ allNodes = nodes . get ( { returnType : "Object" } ) ;
4+ // originalNodes = JSON.parse(JSON.stringify(allNodes));
5+ // if something is selected:
6+ if ( params . nodes . length > 0 ) {
7+ highlightActive = true ;
8+ var i , j ;
9+ var selectedNode = params . nodes [ 0 ] ;
10+ var degrees = 2 ;
11+
12+ // mark all nodes as hard to read.
13+ for ( let nodeId in allNodes ) {
14+ // nodeColors[nodeId] = allNodes[nodeId].color;
15+ allNodes [ nodeId ] . color = "rgba(200,200,200,0.5)" ;
16+ if ( allNodes [ nodeId ] . hiddenLabel === undefined ) {
17+ allNodes [ nodeId ] . hiddenLabel = allNodes [ nodeId ] . label ;
18+ allNodes [ nodeId ] . label = undefined ;
19+ }
20+ }
21+ var connectedNodes = network . getConnectedNodes ( selectedNode ) ;
22+ var allConnectedNodes = [ ] ;
23+
24+ // get the second degree nodes
25+ for ( i = 1 ; i < degrees ; i ++ ) {
26+ for ( j = 0 ; j < connectedNodes . length ; j ++ ) {
27+ allConnectedNodes = allConnectedNodes . concat (
28+ network . getConnectedNodes ( connectedNodes [ j ] )
29+ ) ;
30+ }
31+ }
32+
33+ // all second degree nodes get a different color and their label back
34+ for ( i = 0 ; i < allConnectedNodes . length ; i ++ ) {
35+ // allNodes[allConnectedNodes[i]].color = "pink";
36+ allNodes [ allConnectedNodes [ i ] ] . color = "rgba(150,150,150,0.75)" ;
37+ if ( allNodes [ allConnectedNodes [ i ] ] . hiddenLabel !== undefined ) {
38+ allNodes [ allConnectedNodes [ i ] ] . label =
39+ allNodes [ allConnectedNodes [ i ] ] . hiddenLabel ;
40+ allNodes [ allConnectedNodes [ i ] ] . hiddenLabel = undefined ;
41+ }
42+ }
43+
44+ // all first degree nodes get their own color and their label back
45+ for ( i = 0 ; i < connectedNodes . length ; i ++ ) {
46+ // allNodes[connectedNodes[i]].color = undefined;
47+ allNodes [ connectedNodes [ i ] ] . color = nodeColors [ connectedNodes [ i ] ] ;
48+ if ( allNodes [ connectedNodes [ i ] ] . hiddenLabel !== undefined ) {
49+ allNodes [ connectedNodes [ i ] ] . label =
50+ allNodes [ connectedNodes [ i ] ] . hiddenLabel ;
51+ allNodes [ connectedNodes [ i ] ] . hiddenLabel = undefined ;
52+ }
53+ }
54+
55+ // the main node gets its own color and its label back.
56+ // allNodes[selectedNode].color = undefined;
57+ allNodes [ selectedNode ] . color = nodeColors [ selectedNode ] ;
58+ if ( allNodes [ selectedNode ] . hiddenLabel !== undefined ) {
59+ allNodes [ selectedNode ] . label = allNodes [ selectedNode ] . hiddenLabel ;
60+ allNodes [ selectedNode ] . hiddenLabel = undefined ;
61+ }
62+ } else if ( highlightActive === true ) {
63+ // console.log("highlightActive was true");
64+ // reset all nodes
65+ for ( let nodeId in allNodes ) {
66+ // allNodes[nodeId].color = "purple";
67+ allNodes [ nodeId ] . color = nodeColors [ nodeId ] ;
68+ // delete allNodes[nodeId].color;
69+ if ( allNodes [ nodeId ] . hiddenLabel !== undefined ) {
70+ allNodes [ nodeId ] . label = allNodes [ nodeId ] . hiddenLabel ;
71+ allNodes [ nodeId ] . hiddenLabel = undefined ;
72+ }
73+ }
74+ highlightActive = false ;
75+ }
76+
77+ // transform the object into an array
78+ var updateArray = [ ] ;
79+ if ( params . nodes . length > 0 ) {
80+ for ( let nodeId in allNodes ) {
81+ if ( allNodes . hasOwnProperty ( nodeId ) ) {
82+ // console.log(allNodes[nodeId]);
83+ updateArray . push ( allNodes [ nodeId ] ) ;
84+ }
85+ }
86+ nodes . update ( updateArray ) ;
87+ } else {
88+ // console.log("Nothing was selected");
89+ for ( let nodeId in allNodes ) {
90+ if ( allNodes . hasOwnProperty ( nodeId ) ) {
91+ // console.log(allNodes[nodeId]);
92+ // allNodes[nodeId].color = {};
93+ updateArray . push ( allNodes [ nodeId ] ) ;
94+ }
95+ }
96+ nodes . update ( updateArray ) ;
97+ }
98+ }
99+
100+ function filterHighlight ( params ) {
101+ allNodes = nodes . get ( { returnType : "Object" } ) ;
102+ // if something is selected:
103+ if ( params . nodes . length > 0 ) {
104+ filterActive = true ;
105+ let selectedNodes = params . nodes ;
106+
107+ // hiding all nodes and saving the label
108+ for ( let nodeId in allNodes ) {
109+ allNodes [ nodeId ] . hidden = true ;
110+ if ( allNodes [ nodeId ] . savedLabel === undefined ) {
111+ allNodes [ nodeId ] . savedLabel = allNodes [ nodeId ] . label ;
112+ allNodes [ nodeId ] . label = undefined ;
113+ }
114+ }
115+
116+ for ( let i = 0 ; i < selectedNodes . length ; i ++ ) {
117+ allNodes [ selectedNodes [ i ] ] . hidden = false ;
118+ if ( allNodes [ selectedNodes [ i ] ] . savedLabel !== undefined ) {
119+ allNodes [ selectedNodes [ i ] ] . label = allNodes [ selectedNodes [ i ] ] . savedLabel ;
120+ allNodes [ selectedNodes [ i ] ] . savedLabel = undefined ;
121+ }
122+ }
123+
124+ } else if ( filterActive === true ) {
125+ // reset all nodes
126+ for ( let nodeId in allNodes ) {
127+ allNodes [ nodeId ] . hidden = false ;
128+ if ( allNodes [ nodeId ] . savedLabel !== undefined ) {
129+ allNodes [ nodeId ] . label = allNodes [ nodeId ] . savedLabel ;
130+ allNodes [ nodeId ] . savedLabel = undefined ;
131+ }
132+ }
133+ filterActive = false ;
134+ }
135+
136+ // transform the object into an array
137+ var updateArray = [ ] ;
138+ if ( params . nodes . length > 0 ) {
139+ for ( let nodeId in allNodes ) {
140+ if ( allNodes . hasOwnProperty ( nodeId ) ) {
141+ updateArray . push ( allNodes [ nodeId ] ) ;
142+ }
143+ }
144+ nodes . update ( updateArray ) ;
145+ } else {
146+ for ( let nodeId in allNodes ) {
147+ if ( allNodes . hasOwnProperty ( nodeId ) ) {
148+ updateArray . push ( allNodes [ nodeId ] ) ;
149+ }
150+ }
151+ nodes . update ( updateArray ) ;
152+ }
153+ }
154+
155+ function selectNode ( nodes ) {
156+ network . selectNodes ( nodes ) ;
157+ neighbourhoodHighlight ( { nodes : nodes } ) ;
158+ return nodes ;
159+ }
160+
161+ function selectNodes ( nodes ) {
162+ network . selectNodes ( nodes ) ;
163+ filterHighlight ( { nodes : nodes } ) ;
164+ return nodes ;
165+ }
166+
167+ function highlightFilter ( filter ) {
168+ let selectedNodes = [ ]
169+ let selectedProp = filter [ 'property' ]
170+ if ( filter [ 'item' ] === 'node' ) {
171+ let allNodes = nodes . get ( { returnType : "Object" } ) ;
172+ for ( let nodeId in allNodes ) {
173+ if ( allNodes [ nodeId ] [ selectedProp ] && filter [ 'value' ] . includes ( ( allNodes [ nodeId ] [ selectedProp ] ) . toString ( ) ) ) {
174+ selectedNodes . push ( nodeId )
175+ }
176+ }
177+ }
178+ else if ( filter [ 'item' ] === 'edge' ) {
179+ let allEdges = edges . get ( { returnType : 'object' } ) ;
180+ // check if the selected property exists for selected edge and select the nodes connected to the edge
181+ for ( let edge in allEdges ) {
182+ if ( allEdges [ edge ] [ selectedProp ] && filter [ 'value' ] . includes ( ( allEdges [ edge ] [ selectedProp ] ) . toString ( ) ) ) {
183+ selectedNodes . push ( allEdges [ edge ] [ 'from' ] )
184+ selectedNodes . push ( allEdges [ edge ] [ 'to' ] )
185+ }
186+ }
187+ }
188+ selectNodes ( selectedNodes )
189+ }
0 commit comments