@@ -300,7 +300,8 @@ export async function drawPathway(
300300 outerSelector = '#_ideogramOuterWrap' ,
301301 dimensions = { height : 440 , width : 900 } ,
302302 showClose = true ,
303- nodeHoverFn ,
303+ geneNodeHoverFn ,
304+ pathwayNodeClickFn ,
304305 retryAttempt = 0
305306) {
306307 const pvjsScript = document . querySelector ( `script[src="${ PVJS_URL } "]` ) ;
@@ -321,7 +322,8 @@ export async function drawPathway(
321322 setTimeout ( ( ) => {
322323 drawPathway (
323324 pwId , sourceGene , destGene ,
324- outerSelector , dimensions , showClose , nodeHoverFn ,
325+ outerSelector , dimensions , showClose ,
326+ geneNodeHoverFn , pathwayNodeClickFn ,
325327 retryAttempt ++
326328 ) ;
327329 } , 250 ) ;
@@ -401,20 +403,41 @@ export async function drawPathway(
401403 const ideogramPathwayEvent = new CustomEvent ( 'ideogramDrawPathway' , { detail} ) ;
402404 document . dispatchEvent ( ideogramPathwayEvent ) ;
403405
404- pathwayContainer . querySelectorAll ( 'g.GeneProduct' ) . forEach ( g => {
405- const geneName = g . getAttribute ( 'name' ) ;
406+ // Add mouseover handler to gene nodes in this pathway diagram
407+ pathwayContainer . querySelectorAll ( 'g.GeneProduct' ) . forEach ( geneNode => {
408+ const geneName = geneNode . getAttribute ( 'name' ) ;
406409 let tooltipContent = geneName ;
407- g . addEventListener ( 'mouseover' , ( event ) => {
408- if ( nodeHoverFn ) {
409- tooltipContent = nodeHoverFn ( event , geneName ) ;
410- g . setAttribute ( 'data-tippy-content' , tooltipContent ) ;
411- tippy ( 'g.GeneProduct[data-tippy-content]' , tippyConfig ) ;
410+ geneNode . addEventListener ( 'mouseover' , ( event ) => {
411+ if ( geneNodeHoverFn ) {
412+ tooltipContent = geneNodeHoverFn ( event , geneName ) ;
413+ geneNode . setAttribute ( 'data-tippy-content' , tooltipContent ) ;
412414 }
413415 } ) ;
414416
415- g . setAttribute ( `data-tippy-content` , tooltipContent ) ;
417+ geneNode . setAttribute ( `data-tippy-content` , tooltipContent ) ;
416418 } ) ;
417-
418419 const tippyConfig = getTippyConfig ( ) ;
419420 tippy ( 'g.GeneProduct[data-tippy-content]' , tippyConfig ) ;
421+
422+ // Add click handler to pathway nodes in this pathway diagram
423+ if ( pathwayNodeClickFn ) {
424+ pathwayContainer . querySelectorAll ( 'g.Pathway' ) . forEach ( pathwayNode => {
425+
426+ // Add customizable click handler
427+ pathwayNode . addEventListener ( 'click' , ( event ) => {
428+ const domClasses = Array . from ( pathwayNode . classList ) ;
429+ const pathwayId = domClasses
430+ . find ( c => c . startsWith ( 'WikiPathways_' ) )
431+ . split ( 'WikiPathways_' ) [ 1 ] ; // e.g. WikiPathways_WP2815 -> WP2815
432+
433+ pathwayNodeClickFn ( event , pathwayId ) ;
434+ } ) ;
435+
436+ // Indicate this new pathway can be rendered on click
437+ const tooltipContent = 'Click to show pathway' ;
438+ pathwayNode . setAttribute ( 'data-tippy-content' , tooltipContent ) ;
439+ } ) ;
440+
441+ tippy ( 'g.Pathway[data-tippy-content]' , tippyConfig ) ;
442+ }
420443}
0 commit comments