@@ -245,24 +245,37 @@ export class CustomPortLabel extends React.Component<CustomPortLabelProps> {
245
245
{ symbolLabel }
246
246
</ S . Symbol >
247
247
</ S . SymbolContainer > ) ;
248
-
248
+
249
249
const nodeType = this . props . node . getOptions ( ) . name
250
250
251
+ function escapeSelector ( selector : string ) : string {
252
+ return selector . replace ( / ( [ ! " # $ % & ' ( ) * + , . \/ : ; < = > ? @ [ \\ \] ^ ` { | } ~ ] ) / g, '\\$1' ) ;
253
+ }
254
+
251
255
function addHover ( port : DefaultPortModel ) {
252
256
return ( ( ) => {
253
257
for ( let linksKey in port . getLinks ( ) ) {
254
258
document . querySelector ( `g[data-linkid='${ linksKey } ']` ) ?. classList . add ( "hover" ) ;
255
259
const model = port . getLinks ( ) [ linksKey ]
256
- if ( model . getSourcePort ( ) != null )
257
- document . querySelector ( `div.port[data-nodeid="${ model . getSourcePort ( ) . getNode ( ) . getID ( ) } "][data-name='${ model . getSourcePort ( ) . getName ( ) } ']>div>div` ) ?. classList . add ( "hover" ) ;
258
- if ( model . getTargetPort ( ) != null )
259
- document . querySelector ( `div.port[data-nodeid="${ model . getTargetPort ( ) . getNode ( ) . getID ( ) } "][data-name='${ model . getTargetPort ( ) . getName ( ) } ']>div>div` ) ?. classList . add ( "hover" ) ;
260
+ if ( model . getSourcePort ( ) != null ) {
261
+ const sourceNodeId = model . getSourcePort ( ) . getNode ( ) . getID ( ) ;
262
+ const sourcePortName = escapeSelector ( model . getSourcePort ( ) . getName ( ) ) ;
263
+ document . querySelector ( `div.port[data-nodeid="${ sourceNodeId } "][data-name='${ sourcePortName } ']>div>div` ) ?. classList . add ( "hover" ) ;
264
+ }
265
+ if ( model . getTargetPort ( ) != null ) {
266
+ const targetNodeId = model . getTargetPort ( ) . getNode ( ) . getID ( ) ;
267
+ const targetPortName = escapeSelector ( model . getTargetPort ( ) . getName ( ) ) ;
268
+ document . querySelector ( `div.port[data-nodeid="${ targetNodeId } "][data-name='${ targetPortName } ']>div>div` ) ?. classList . add ( "hover" ) ;
269
+ }
260
270
if ( attachedColor != null ) {
261
271
if ( model . getSourcePort ( ) != null ) {
262
272
Object . values ( model . getSourcePort ( ) . getNode ( ) . getPorts ( ) ) . forEach ( p => {
263
273
Object . values ( p . getLinks ( ) ) . forEach ( l => {
264
- if ( model . getTargetPort ( ) != null )
265
- document . querySelector ( `div.port[data-nodeid="${ l . getTargetPort ( ) . getNode ( ) . getID ( ) } "][data-name='${ l . getTargetPort ( ) . getName ( ) } ']>div>div` ) ?. classList . add ( "hover" ) ;
274
+ if ( model . getTargetPort ( ) != null ) {
275
+ const linkedTargetNodeId = l . getTargetPort ( ) . getNode ( ) . getID ( ) ;
276
+ const linkedTargetPortName = escapeSelector ( l . getTargetPort ( ) . getName ( ) ) ;
277
+ document . querySelector ( `div.port[data-nodeid="${ linkedTargetNodeId } "][data-name='${ linkedTargetPortName } ']>div>div` ) ?. classList . add ( "hover" ) ;
278
+ }
266
279
} )
267
280
} )
268
281
}
@@ -276,16 +289,25 @@ export class CustomPortLabel extends React.Component<CustomPortLabelProps> {
276
289
for ( let linksKey in port . getLinks ( ) ) {
277
290
document . querySelector ( `g[data-linkid='${ linksKey } ']` ) ?. classList . remove ( "hover" ) ;
278
291
const model = port . getLinks ( ) [ linksKey ]
279
- if ( model . getSourcePort ( ) != null )
280
- document . querySelector ( `div.port[data-nodeid="${ model . getSourcePort ( ) . getNode ( ) . getID ( ) } "][data-name='${ model . getSourcePort ( ) . getName ( ) } ']>div>div` ) ?. classList . remove ( "hover" ) ;
281
- if ( model . getTargetPort ( ) != null )
282
- document . querySelector ( `div.port[data-nodeid="${ model . getTargetPort ( ) . getNode ( ) . getID ( ) } "][data-name='${ model . getTargetPort ( ) . getName ( ) } ']>div>div` ) ?. classList . remove ( "hover" ) ;
292
+ if ( model . getSourcePort ( ) != null ) {
293
+ const sourceNodeId = model . getSourcePort ( ) . getNode ( ) . getID ( ) ;
294
+ const sourcePortName = escapeSelector ( model . getSourcePort ( ) . getName ( ) ) ;
295
+ document . querySelector ( `div.port[data-nodeid="${ sourceNodeId } "][data-name='${ sourcePortName } ']>div>div` ) ?. classList . remove ( "hover" ) ;
296
+ }
297
+ if ( model . getTargetPort ( ) != null ) {
298
+ const targetNodeId = model . getTargetPort ( ) . getNode ( ) . getID ( ) ;
299
+ const targetPortName = escapeSelector ( model . getTargetPort ( ) . getName ( ) ) ;
300
+ document . querySelector ( `div.port[data-nodeid="${ targetNodeId } "][data-name='${ targetPortName } ']>div>div` ) ?. classList . remove ( "hover" ) ;
301
+ }
283
302
if ( attachedColor != null ) {
284
303
if ( model . getSourcePort ( ) != null ) {
285
304
Object . values ( model . getSourcePort ( ) . getNode ( ) . getPorts ( ) ) . forEach ( p => {
286
305
Object . values ( p . getLinks ( ) ) . forEach ( l => {
287
- if ( model . getTargetPort ( ) != null )
288
- document . querySelector ( `div.port[data-nodeid="${ l . getTargetPort ( ) . getNode ( ) . getID ( ) } "][data-name='${ l . getTargetPort ( ) . getName ( ) } ']>div>div` ) ?. classList . remove ( "hover" ) ;
306
+ if ( model . getTargetPort ( ) != null ) {
307
+ const linkedTargetNodeId = l . getTargetPort ( ) . getNode ( ) . getID ( ) ;
308
+ const linkedTargetPortName = escapeSelector ( l . getTargetPort ( ) . getName ( ) ) ;
309
+ document . querySelector ( `div.port[data-nodeid="${ linkedTargetNodeId } "][data-name='${ linkedTargetPortName } ']>div>div` ) ?. classList . remove ( "hover" ) ;
310
+ }
289
311
} )
290
312
} )
291
313
}
0 commit comments