@@ -78,6 +78,8 @@ function GraphD3(_selector: HTMLDivElement, _options: any) {
78
78
let svgTranslate : number [ ] ;
79
79
let node : any ;
80
80
let justLoaded = false ;
81
+ var nominalTextSize = 10 ;
82
+ var maxTextSize = 24 ;
81
83
const VERSION = '2.0.0' ;
82
84
83
85
let zoomFuncs = { }
@@ -98,27 +100,36 @@ function GraphD3(_selector: HTMLDivElement, _options: any) {
98
100
99
101
function appendGraph ( container : d3 . Selection < any , unknown , null , undefined > ) {
100
102
var mainSvg = container . append ( 'svg' )
101
- . attr ( 'width' , '100%' )
102
- . attr ( 'height' , '100%' )
103
- . attr ( 'class' , 'graphd3-graph' )
104
- . call ( options . graphZoom . on ( 'zoom' , ( event ) => {
105
- let scale = event . transform . k ;
106
- const translate = [ event . transform . x , event . transform . y ] ;
107
-
108
- if ( svgTranslate ) {
109
- translate [ 0 ] += svgTranslate [ 0 ] ;
110
- translate [ 1 ] += svgTranslate [ 1 ] ;
111
- }
112
-
113
- if ( svgScale ) {
114
- scale *= svgScale ;
103
+ . attr ( 'width' , '100%' )
104
+ . attr ( 'height' , '100%' )
105
+ . attr ( 'class' , 'graphd3-graph' )
106
+ . call ( options . graphZoom . on ( 'zoom' , ( event ) => {
107
+ let scale = event . transform . k ;
108
+ const translate = [ event . transform . x , event . transform . y ] ;
109
+ if ( svgTranslate ) {
110
+ translate [ 0 ] += svgTranslate [ 0 ] ;
111
+ translate [ 1 ] += svgTranslate [ 1 ] ;
112
+ }
113
+ if ( svgScale ) {
114
+ scale *= svgScale ;
115
+ }
116
+ var text = svg . selectAll ( '.node .text' ) ;
117
+ var textSize = nominalTextSize ;
118
+ if ( nominalTextSize * scale > maxTextSize ) textSize = maxTextSize / scale ;
119
+ text . attr ( "font-size" , ( textSize - 3 ) + "px" ) ;
120
+ text . text ( ( d ) => {
121
+ let label : string ;
122
+ if ( typeof options . onLabelNode === 'function' ) {
123
+ label = options . onLabelNode ( d ) ;
124
+ } else {
125
+ label = d . properties ?. name || ( d . labels ? d . labels [ 0 ] : '' ) ;
115
126
}
116
-
117
- svg . attr ( 'transform' , `translate(${ translate [ 0 ] } , ${ translate [ 1 ] } ) scale(${ scale } )` ) ;
118
- } ) )
127
+ let maxLength = ( maxTextSize - textSize ) + 3 ;
128
+ return label . length > maxLength ? Utils . truncateText ( label , maxLength ) : label ;
129
+ } )
130
+ svg . attr ( 'transform' , `translate(${ translate [ 0 ] } , ${ translate [ 1 ] } ) scale(${ scale } )` ) ;
131
+ } ) )
119
132
. on ( 'dblclick.zoom' , null )
120
-
121
-
122
133
svg = mainSvg . append ( 'g' )
123
134
. attr ( 'width' , '100%' )
124
135
. attr ( 'height' , '100%' ) ;
@@ -341,10 +352,11 @@ function GraphD3(_selector: HTMLDivElement, _options: any) {
341
352
label = d . properties ?. name || ( d . labels ? d . labels [ 0 ] : '' ) ;
342
353
}
343
354
344
- return label . length > 10 ? Utils . truncateText ( label , 10 ) : label ;
355
+ let maxLength = maxTextSize - nominalTextSize - 5 ;
356
+ return label . length > maxLength ? Utils . truncateText ( label , maxLength ) : label ;
345
357
} )
346
358
. attr ( 'class' , 'text' )
347
- . attr ( 'font-size' , '10px' )
359
+ . attr ( 'font-size' , ( d ) => nominalTextSize + "px" )
348
360
. attr ( 'fill' , ( d ) => labelColors ( d . labels [ 0 ] ) . textColor )
349
361
. attr ( 'pointer-events' , 'none' )
350
362
. attr ( 'text-anchor' , 'middle' )
0 commit comments