@@ -457,6 +457,28 @@ export class NodeView<
457
457
return { e, x, y, view, node, cell } as NodeView . PositionEventArgs < E >
458
458
}
459
459
460
+ protected getPortEventArgs < E > (
461
+ e : E ,
462
+ port : string ,
463
+ pos ?: { x : number ; y : number } ,
464
+ ) {
465
+ const view = this // eslint-disable-line
466
+ const node = view . cell
467
+ const cell = node
468
+ if ( pos ) {
469
+ return {
470
+ e,
471
+ x : pos . x ,
472
+ y : pos . y ,
473
+ view,
474
+ node,
475
+ cell,
476
+ port,
477
+ } as NodeView . PositionEventArgs < E >
478
+ }
479
+ return { e, view, node, cell, port } as NodeView . MouseEventArgs < E >
480
+ }
481
+
460
482
notifyMouseDown ( e : Dom . MouseDownEvent , x : number , y : number ) {
461
483
super . onMouseDown ( e , x , y )
462
484
this . notify ( 'node:mousedown' , this . getEventArgs ( e , x , y ) )
@@ -472,26 +494,41 @@ export class NodeView<
472
494
this . notify ( 'node:mouseup' , this . getEventArgs ( e , x , y ) )
473
495
}
474
496
497
+ notifyPortEvent (
498
+ name : string ,
499
+ e : Dom . EventObject ,
500
+ pos ?: { x : number ; y : number } ,
501
+ ) {
502
+ const port = this . findAttr ( 'port' , e . target )
503
+ if ( port ) {
504
+ this . notify ( name , this . getPortEventArgs ( e , port , pos ) )
505
+ }
506
+ }
507
+
475
508
onClick ( e : Dom . ClickEvent , x : number , y : number ) {
476
509
super . onClick ( e , x , y )
477
510
this . notify ( 'node:click' , this . getEventArgs ( e , x , y ) )
511
+ this . notifyPortEvent ( 'node:port:click' , e , { x, y } )
478
512
}
479
513
480
514
onDblClick ( e : Dom . DoubleClickEvent , x : number , y : number ) {
481
515
super . onDblClick ( e , x , y )
482
516
this . notify ( 'node:dblclick' , this . getEventArgs ( e , x , y ) )
517
+ this . notifyPortEvent ( 'node:port:dblclick' , e , { x, y } )
483
518
}
484
519
485
520
onContextMenu ( e : Dom . ContextMenuEvent , x : number , y : number ) {
486
521
super . onContextMenu ( e , x , y )
487
522
this . notify ( 'node:contextmenu' , this . getEventArgs ( e , x , y ) )
523
+ this . notifyPortEvent ( 'node:port:contextmenu' , e , { x, y } )
488
524
}
489
525
490
526
onMouseDown ( e : Dom . MouseDownEvent , x : number , y : number ) {
491
527
if ( this . isPropagationStopped ( e ) ) {
492
528
return
493
529
}
494
530
this . notifyMouseDown ( e , x , y )
531
+ this . notifyPortEvent ( 'node:port:mousedown' , e , { x, y } )
495
532
this . startNodeDragging ( e , x , y )
496
533
}
497
534
@@ -515,6 +552,7 @@ export class NodeView<
515
552
} )
516
553
}
517
554
this . notifyMouseMove ( e , x , y )
555
+ this . notifyPortEvent ( 'node:port:mousemove' , e , { x, y } )
518
556
}
519
557
520
558
this . setEventData < EventData . Mousemove > ( e , data )
@@ -527,6 +565,7 @@ export class NodeView<
527
565
this . stopMagnetDragging ( e , x , y )
528
566
} else {
529
567
this . notifyMouseUp ( e , x , y )
568
+ this . notifyPortEvent ( 'node:port:mouseup' , e , { x, y } )
530
569
if ( action === 'move' ) {
531
570
const meta = data as EventData . Moving
532
571
const view = meta . targetView || this
@@ -545,22 +584,26 @@ export class NodeView<
545
584
onMouseOver ( e : Dom . MouseOverEvent ) {
546
585
super . onMouseOver ( e )
547
586
this . notify ( 'node:mouseover' , this . getEventArgs ( e ) )
587
+ this . notifyPortEvent ( 'node:port:mouseover' , e )
548
588
}
549
589
550
590
onMouseOut ( e : Dom . MouseOutEvent ) {
551
591
super . onMouseOut ( e )
552
592
this . notify ( 'node:mouseout' , this . getEventArgs ( e ) )
593
+ this . notifyPortEvent ( 'node:port:mouseout' , e )
553
594
}
554
595
555
596
onMouseEnter ( e : Dom . MouseEnterEvent ) {
556
597
this . updateClassName ( e )
557
598
super . onMouseEnter ( e )
558
599
this . notify ( 'node:mouseenter' , this . getEventArgs ( e ) )
600
+ this . notifyPortEvent ( 'node:port:mouseenter' , e )
559
601
}
560
602
561
603
onMouseLeave ( e : Dom . MouseLeaveEvent ) {
562
604
super . onMouseLeave ( e )
563
605
this . notify ( 'node:mouseleave' , this . getEventArgs ( e ) )
606
+ this . notifyPortEvent ( 'node:port:mouseleave' , e )
564
607
}
565
608
566
609
onMouseWheel ( e : Dom . EventObject , x : number , y : number , delta : number ) {
@@ -1092,14 +1135,13 @@ export namespace NodeView {
1092
1135
interface MagnetEventArgs {
1093
1136
magnet : Element
1094
1137
}
1095
-
1096
1138
export interface MouseEventArgs < E > {
1097
1139
e : E
1098
1140
node : Node
1099
1141
cell : Node
1100
1142
view : NodeView
1143
+ port ?: string
1101
1144
}
1102
-
1103
1145
export interface PositionEventArgs < E >
1104
1146
extends MouseEventArgs < E > ,
1105
1147
CellView . PositionEventArgs { }
@@ -1124,6 +1166,17 @@ export namespace NodeView {
1124
1166
'node:mousewheel' : PositionEventArgs < Dom . EventObject > &
1125
1167
CellView . MouseDeltaEventArgs
1126
1168
1169
+ 'node:port:click' : PositionEventArgs < Dom . ClickEvent >
1170
+ 'node:port:dblclick' : PositionEventArgs < Dom . DoubleClickEvent >
1171
+ 'node:port:contextmenu' : PositionEventArgs < Dom . ContextMenuEvent >
1172
+ 'node:port:mousedown' : PositionEventArgs < Dom . MouseDownEvent >
1173
+ 'node:port:mousemove' : PositionEventArgs < Dom . MouseMoveEvent >
1174
+ 'node:port:mouseup' : PositionEventArgs < Dom . MouseUpEvent >
1175
+ 'node:port:mouseover' : MouseEventArgs < Dom . MouseOverEvent >
1176
+ 'node:port:mouseout' : MouseEventArgs < Dom . MouseOutEvent >
1177
+ 'node:port:mouseenter' : MouseEventArgs < Dom . MouseEnterEvent >
1178
+ 'node:port:mouseleave' : MouseEventArgs < Dom . MouseLeaveEvent >
1179
+
1127
1180
'node:customevent' : PositionEventArgs < Dom . MouseDownEvent > & {
1128
1181
name : string
1129
1182
}
0 commit comments