@@ -221,12 +221,7 @@ export default class TagWrangler extends Plugin {
221221 }
222222
223223 onMenu ( e , tagEl ) {
224- let menu = e . obsidian_contextmenu ;
225- if ( ! menu ) {
226- menu = e . obsidian_contextmenu = new Menu ( ) ;
227- setTimeout ( ( ) => menu . showAtPosition ( { x : e . pageX , y : e . pageY } ) , 0 ) ;
228- }
229-
224+ let menu = menuForEvent ( e ) ;
230225 const
231226 tagName = tagEl . find ( ".tag-pane-tag-text, .tag-pane-tag .tree-item-inner-text" ) . textContent ,
232227 isHierarchy = tagEl . parentElement . parentElement . find ( ".collapse-icon" )
@@ -351,15 +346,22 @@ class TagPageUIHandler extends Component {
351346 }
352347 }
353348 } ) ;
349+ if ( Menu . forEvent ) {
350+ const remove2 = around ( Menu , { forEvent ( old ) { return function ( ev ) {
351+ const m = old . call ( this , e ) ;
352+ if ( ev === e ) {
353+ self . plugin . setupMenu ( m , toTag ( targetEl ) ) ;
354+ remove ( ) ;
355+ }
356+ remove2 ( )
357+ return m ;
358+ } } } )
359+ setTimeout ( remove2 , 0 ) ;
360+ }
354361 setTimeout ( remove , 0 ) ;
355362 return
356363 }
357- let menu = e . obsidian_contextmenu ;
358- if ( ! menu ) {
359- menu = e . obsidian_contextmenu = new Menu ( ) ;
360- setTimeout ( ( ) => menu . showAtPosition ( { x : e . pageX , y : e . pageY } ) , 0 ) ;
361- }
362- this . plugin . setupMenu ( menu , toTag ( targetEl ) ) ;
364+ this . plugin . setupMenu ( menuForEvent ( e ) , toTag ( targetEl ) ) ;
363365 } , { capture : ! ! mergeMenu } )
364366 ) ;
365367 this . register (
@@ -404,3 +406,15 @@ class TagPageUIHandler extends Component {
404406 ) ;
405407 }
406408}
409+
410+ function menuForEvent ( e ) {
411+ if ( Menu . forEvent ) {
412+ return e . obsidian_contextmenu ||= Menu . forEvent ( e )
413+ }
414+ let menu = e . obsidian_contextmenu ;
415+ if ( ! menu ) {
416+ menu = e . obsidian_contextmenu = new Menu ( ) ;
417+ setTimeout ( ( ) => menu . showAtPosition ( { x : e . pageX , y : e . pageY } ) , 0 ) ;
418+ }
419+ return menu
420+ }
0 commit comments