@@ -16,13 +16,14 @@ async function render({ model, el }) {
16
16
// CRITICAL: We must ensure the div exists before proceeding
17
17
// This prevents the "__graphviz__" error that occurs when trying to
18
18
// initialize d3-graphviz on a non-existent element
19
- await new Promise ( ( resolve , reject ) => {
19
+ const widgetElem = await new Promise ( ( resolve , reject ) => {
20
20
let attempts = 0 ;
21
21
const checkElement = ( ) => {
22
- const div = document . getElementById ( widgetId ) ;
22
+ // document.queryElementById() and friends don't work with shadowRoot, so we use element reference
23
+ const div = document . getElementById ( widgetId ) || el . querySelector ( `#${ widgetId } ` ) ;
23
24
if ( div ) {
24
25
Logger . debug ( `Widget ${ widgetId } : DOM element initialized` ) ;
25
- resolve ( ) ;
26
+ resolve ( div ) ;
26
27
} else if ( attempts < 10 ) {
27
28
Logger . debug ( `Widget ${ widgetId } : DOM element not found, attempt ${ attempts + 1 } /10` ) ;
28
29
attempts ++ ;
@@ -36,7 +37,7 @@ async function render({ model, el }) {
36
37
} ) ;
37
38
38
39
// Initialize d3-graphviz and wait for it to be ready
39
- const d3graphvizInstance = d3graphviz ( `# ${ widgetId } ` , { useWorker : false } ) ;
40
+ const d3graphvizInstance = d3graphviz ( widgetElem , { useWorker : false } ) ;
40
41
41
42
// Wait for initialization
42
43
await new Promise ( ( resolve ) => {
@@ -61,7 +62,7 @@ async function render({ model, el }) {
61
62
// Initialize the jquery-graphviz plugin and wait for it to be ready
62
63
// This sets up the interactive features like highlighting
63
64
await new Promise ( ( resolve ) => {
64
- $ ( `# ${ widgetId } ` ) . graphviz ( {
65
+ $ ( widgetElem ) . graphviz ( {
65
66
shrink : null ,
66
67
zoom : false ,
67
68
ready : function ( ) {
@@ -95,13 +96,13 @@ async function render({ model, el }) {
95
96
. zoom ( zoomEnabled )
96
97
. on ( "end" , ( ) => {
97
98
Logger . debug ( `Widget ${ widgetId } : Render complete` ) ;
98
- const svg = $ ( `# ${ widgetId } ` ) . data ( "graphviz.svg" ) ;
99
+ const svg = $ ( widgetElem ) . data ( "graphviz.svg" ) ;
99
100
if ( svg ) {
100
101
svg . setup ( ) ;
101
102
// If zoom is disabled, remove zoom behavior completely
102
103
if ( ! zoomEnabled ) {
103
104
// Remove zoom behavior from the SVG
104
- d3 . select ( `# ${ widgetId } svg` ) . on ( ".zoom" , null ) ;
105
+ d3 . select ( widgetElem . querySelector ( ' svg' ) ) . on ( ".zoom" , null ) ;
105
106
}
106
107
Logger . info ( `Widget ${ widgetId } : Setup successful` ) ;
107
108
} else {
@@ -161,7 +162,7 @@ async function render({ model, el }) {
161
162
162
163
model . on ( "change:freeze_scroll" , async ( ) => {
163
164
const freezeScroll = model . get ( "freeze_scroll" ) ;
164
- const svg = d3 . select ( `# ${ widgetId } svg` ) ;
165
+ const svg = d3 . select ( widgetElem . querySelector ( ' svg' ) ) ;
165
166
const zoomEnabled = model . get ( "enable_zoom" ) ;
166
167
167
168
if ( freezeScroll ) {
0 commit comments