@@ -6,25 +6,41 @@ let utl = new Svg()
6
6
let g = null ;
7
7
let svg = null ;
8
8
9
+ function set_filter_neighbors ( vertex , filterName ) {
10
+ if ( filterName != "" ) {
11
+ for ( let [ vid , v ] of Object . entries ( vertex . neighbors ) ) {
12
+ v . svg . setAttribute ( "filter" , `url(#${ filterName } )` )
13
+ }
14
+ }
15
+ }
16
+
9
17
function onVertexHover ( e ) {
10
18
const vertex = g . vertices [ e . detail . id ]
11
19
if ( e . detail . type == "enter" ) {
12
- for ( let [ vid , v ] of Object . entries ( vertex . neighbors ) ) {
13
- v . svg . setAttribute ( "filter" , "url(#f_light_shadow)" )
14
- }
20
+ vertex . svg . setAttribute ( "filter" , `url(#f_light_shadow)` )
21
+ set_filter_neighbors ( vertex , "f_light_shadow" )
15
22
console . log ( `hover enter: ${ vertex . label } ` )
16
23
} else if ( e . detail . type == "exit" ) {
17
- for ( let [ vid , v ] of Object . entries ( vertex . neighbors ) ) {
18
- v . svg . setAttribute ( "filter" , "" )
19
- }
24
+ vertex . svg . setAttribute ( "filter" , `url(#f_light)` )
25
+ set_filter_neighbors ( vertex , "f_light" )
20
26
console . log ( `hover exit: ${ vertex . label } ` )
21
27
}
22
28
}
23
29
30
+ function onVertexDrag ( e ) {
31
+ const vertex = g . vertices [ e . detail . id ]
32
+ if ( e . detail . type == "start" ) {
33
+ vertex . svg . setAttribute ( "filter" , `url(#f_light_shadow_h)` )
34
+ } else if ( e . detail . type == "end" ) {
35
+ vertex . svg . setAttribute ( "filter" , `url(#f_light_shadow)` )
36
+ }
37
+ }
38
+
24
39
class Render {
25
40
constructor ( graph_data ) {
26
41
g = graph_data
27
42
window . addEventListener ( 'vertex_hover' , onVertexHover , false ) ;
43
+ window . addEventListener ( 'vertex_drag' , onVertexDrag , false ) ;
28
44
}
29
45
30
46
create ( parent_div ) {
@@ -48,7 +64,11 @@ class Render{
48
64
49
65
draw ( ) {
50
66
clear ( svg )
51
- utl . filter_light_shadow ( svg , { id :"f_light_shadow" } )
67
+ utl . filter_light ( svg , { id :"f_light" , lx :- 30 , ly :- 10 , lz :20 } )
68
+ utl . filter_light ( svg , { id :"f_high_light" , lx :- 30 , ly :- 10 , lz :100 } )
69
+ utl . filter_light_shadow ( svg , { id :"f_light_shadow_h" , lx :- 30 , ly :- 10 , lz :20 , dx :15 , dy :8 } )
70
+ utl . filter_light_shadow ( svg , { id :"f_light_shadow" , lx :- 30 , ly :- 10 , lz :20 , dx :5 , dy :2 } )
71
+ const defaultFilter = "f_light"
52
72
let g_edges = html ( svg , /*html*/ `<g ig="edges">` )
53
73
for ( let [ eid , e ] of Object . entries ( g . edges ) ) {
54
74
let [ x1 , y1 , x2 , y2 ] = [ e . outV . viewBox . x , e . outV . viewBox . y , e . inV . viewBox . x , e . inV . viewBox . y ]
@@ -59,7 +79,7 @@ class Render{
59
79
for ( let [ vid , v ] of Object . entries ( g . vertices ) ) {
60
80
let [ x , y , w , h ] = [ - v . viewBox . width / 2 , - v . viewBox . height / 2 , v . viewBox . width , v . viewBox . height ]
61
81
v . svg = html ( g_vertices , /*html*/ `<g id="vert_${ v . name } "/>` )
62
- html ( v . svg , /*html*/ `<rect class="vertex" id="${ v . id } " x="${ x } " y="${ y } " rx="3" width="${ w } " height="${ h } " fill="rgb(100,205,100)" />` )
82
+ html ( v . svg , /*html*/ `<rect class="vertex" id="${ v . id } " x="${ x } " y="${ y } " rx="3" width="${ w } " height="${ h } " fill="rgb(100,205,100)" filter="url(# ${ defaultFilter } )" />` )
63
83
html ( v . svg , /*html*/ `<text x="0" y="0" dominant-baseline="middle" text-anchor="middle" style="pointer-events:none">${ v . label } </text>` )
64
84
v . svg . setAttribute ( "transform" , `translate(${ v . viewBox . x } ,${ v . viewBox . y } ) rotate(${ 0 } )` ) ;
65
85
}
0 commit comments