1
- import { PluginContext } from 'Molstar/mol-plugin/context' ;
2
- import { lociDetails , EventDetail } from './loci-details' ;
3
1
import { InteractivityManager } from 'Molstar/mol-plugin-state/manager/interactivity' ;
2
+ import { PluginContext } from 'Molstar/mol-plugin/context' ;
4
3
import { debounceTime } from 'rxjs/operators' ;
4
+ import { EventDetail , lociDetails } from './loci-details' ;
5
5
6
- export namespace CustomEvents {
7
6
8
- function create ( eventTypeArr : string [ ] ) {
9
- const eventObj = { } as any ;
10
- for ( let ei = 0 , el = eventTypeArr . length ; ei < el ; ei ++ ) {
11
- const eventType = eventTypeArr [ ei ] ;
12
- let event ;
13
- if ( typeof MouseEvent == 'function' ) {
14
- // current standard
15
- event = new MouseEvent ( eventType , { 'view' : window , 'bubbles' : true , 'cancelable' : true } ) ;
16
- } else if ( typeof document . createEvent == 'function' ) {
17
- // older standard
18
- event = document . createEvent ( 'MouseEvents' ) ;
19
- event . initEvent ( eventType , true /* bubbles */ , true /* cancelable */ ) ;
20
-
21
- }
22
- eventObj [ eventType ] = event ;
23
- } ;
24
- return eventObj ;
7
+ export namespace CustomEvents {
8
+ function createEvent ( eventType : string ) : MouseEvent {
9
+ if ( typeof MouseEvent == 'function' ) {
10
+ // current standard
11
+ return new MouseEvent ( eventType , { 'view' : window , 'bubbles' : true , 'cancelable' : true } ) ;
12
+ } else if ( typeof document . createEvent == 'function' ) {
13
+ // older standard
14
+ const event = document . createEvent ( 'MouseEvents' ) ;
15
+ event . initEvent ( eventType , true /* bubbles */ , true /* cancelable */ ) ;
16
+ return event ;
17
+ } else {
18
+ throw new Error ( 'Cannot create event' ) ;
19
+ }
25
20
}
26
21
27
- function dispatchCustomEvent ( event : any , eventData : EventDetail , targetElement : HTMLElement ) {
28
- if ( typeof eventData !== 'undefined' ) {
29
- ( eventData as any ) [ 'residueNumber' ] = eventData . seq_id ;
30
- event [ 'eventData' ] = eventData ;
31
- event . eventData . residueNumber = eventData . seq_id ;
22
+ function dispatchCustomEvent ( event : UIEvent , eventData : EventDetail , targetElement : HTMLElement ) {
23
+ if ( eventData !== undefined ) {
24
+ if ( eventData . seq_id !== undefined ) {
25
+ ( eventData as any ) . residueNumber = eventData . seq_id ;
26
+ }
27
+ ( event as any ) . eventData = eventData ;
32
28
targetElement . dispatchEvent ( event ) ;
33
29
}
34
30
}
35
31
36
32
export function add ( plugin : PluginContext , targetElement : HTMLElement ) {
37
- const pdbevents = create ( [ 'PDB.molstar.click' , 'PDB.molstar.mouseover' , 'PDB.molstar.mouseout' ] ) ;
33
+ const PDB_molstar_click = createEvent ( 'PDB.molstar.click' ) ;
34
+ const PDB_molstar_mouseover = createEvent ( 'PDB.molstar.mouseover' ) ;
35
+ const PDB_molstar_mouseout = createEvent ( 'PDB.molstar.mouseout' ) ;
36
+
38
37
plugin . behaviors . interaction . click . subscribe ( ( e : InteractivityManager . ClickEvent ) => {
39
38
if ( e . button === 1 && e . current && e . current . loci . kind !== 'empty-loci' ) {
40
39
const evData = lociDetails ( e . current . loci ) ;
41
- if ( evData ) dispatchCustomEvent ( pdbevents [ 'PDB.molstar.click' ] , evData , targetElement ) ;
40
+ if ( evData ) dispatchCustomEvent ( PDB_molstar_click , evData , targetElement ) ;
42
41
}
43
42
} ) ;
44
43
plugin . behaviors . interaction . hover . pipe ( debounceTime ( 100 ) ) . subscribe ( ( e : InteractivityManager . HoverEvent ) => {
45
44
if ( e . current && e . current . loci && e . current . loci . kind !== 'empty-loci' ) {
46
45
const evData = lociDetails ( e . current . loci ) ;
47
- if ( evData ) dispatchCustomEvent ( pdbevents [ 'PDB.molstar.mouseover' ] , evData , targetElement ) ;
46
+ if ( evData ) dispatchCustomEvent ( PDB_molstar_mouseover , evData , targetElement ) ;
48
47
}
49
48
50
49
if ( e . current && e . current . loci && e . current . loci . kind === 'empty-loci' ) {
51
- dispatchCustomEvent ( pdbevents [ 'PDB.molstar.mouseout' ] , { } , targetElement ) ;
50
+ dispatchCustomEvent ( PDB_molstar_mouseout , { } , targetElement ) ;
52
51
}
53
52
} ) ;
54
53
}
55
-
56
- }
54
+ }
0 commit comments