@@ -3,16 +3,12 @@ import {
3
3
} from "obsidian" ;
4
4
5
5
interface Listener {
6
- ( this : HTMLElement , ev : Event , delegateTarget : HTMLElement ) : any ;
7
- }
8
- interface HTMLElement {
9
- on ( this : HTMLElement , type : string , selector : string , listener : Listener , options ?: { capture ?: boolean ; } ) : void ;
10
- off ( this : HTMLElement , type : string , selector : string , listener : Listener , options ?: { capture ?: boolean ; } ) : void ;
6
+ ( this : Document , ev : Event ) : any ;
11
7
}
12
8
13
9
function onElement (
14
- el : HTMLElement ,
15
- event : string ,
10
+ el : Document ,
11
+ event : keyof HTMLElementEventMap ,
16
12
selector : string ,
17
13
listener : Listener ,
18
14
options ?: { capture ?: boolean ; }
@@ -26,10 +22,9 @@ export default class CopyUrlInPreview extends Plugin {
26
22
this . register (
27
23
onElement (
28
24
document ,
29
- "contextmenu" ,
30
- ".external-link" ,
31
- this . onClick . bind ( this ) ,
32
- { capture : true }
25
+ "contextmenu" as keyof HTMLElementEventMap ,
26
+ "a.external-link" ,
27
+ this . onClick . bind ( this )
33
28
)
34
29
) ;
35
30
}
@@ -38,29 +33,33 @@ export default class CopyUrlInPreview extends Plugin {
38
33
// Positions are not accurate from PointerEvent.
39
34
// There's also TouchEvent
40
35
// The event has target, path, toEvent (null on Android) for finding the link
41
- onClick ( event : ( MouseEvent ) & { target : { href : string } , contextMenu : Menu } ) {
36
+ onClick ( event : MouseEvent ) {
37
+ if ( ! ( event . target instanceof HTMLAnchorElement ) ) {
38
+ return ;
39
+ }
40
+ let link = event . target . href ;
41
+
42
42
const menu = new Menu ( this . app ) ;
43
43
menu . addItem ( ( item : MenuItem ) =>
44
44
item . setIcon ( "link" )
45
45
. setTitle ( "Copy url" )
46
46
. onClick ( ( ) => {
47
- navigator . clipboard . writeText ( event . target . href ) ;
47
+ navigator . clipboard . writeText ( link ) ;
48
48
new Notice ( "Url copied to your clipboard" ) ;
49
49
} )
50
50
) ;
51
51
menu . register (
52
52
onElement (
53
53
document ,
54
- "keydown" ,
54
+ "keydown" as keyof HTMLElementEventMap ,
55
55
"*" ,
56
56
( e : KeyboardEvent ) => {
57
57
if ( e . key === "Escape" ) {
58
58
e . preventDefault ( ) ;
59
59
e . stopPropagation ( ) ;
60
60
menu . hide ( ) ;
61
61
}
62
- } ,
63
- { capture : true }
62
+ }
64
63
)
65
64
) ;
66
65
menu . showAtPosition ( { x : event . pageX , y : event . pageY } ) ;
0 commit comments