11import {
22 addIcon ,
33 Component ,
4+ editorLivePreviewField ,
5+ livePreviewState ,
46 MarkdownPostProcessor ,
57 MarkdownPostProcessorContext ,
68 MarkdownPreviewRenderer ,
@@ -71,6 +73,14 @@ declare module "obsidian" {
7173 namespace MarkdownPreviewRenderer {
7274 function unregisterCodeBlockPostProcessor ( lang : string ) : void ;
7375 }
76+ interface Editor {
77+ cm : {
78+ state : EditorState ;
79+ focus : ( ) => void ;
80+ posAtDOM : ( el : HTMLElement ) => number ;
81+ dispatch : ( tr : TransactionSpec ) => void ;
82+ } ;
83+ }
7484}
7585
7686import AdmonitionSetting from "./settings" ;
@@ -79,6 +89,7 @@ import { InsertAdmonitionModal } from "./modal";
7989import { IconName } from "@fortawesome/fontawesome-svg-core" ;
8090import CalloutManager from "./callout/manager" ;
8191import { AdmonitionSuggest } from "./suggest/suggest" ;
92+ import { EditorState , TransactionSpec } from "@codemirror/state" ;
8293
8394const DEFAULT_APP_SETTINGS : AdmonitionSettings = {
8495 userAdmonitions : { } ,
@@ -354,6 +365,28 @@ ${editor.getDoc().getSelection()}
354365 ) ;
355366 }
356367 el . replaceWith ( admonitionElement ) ;
368+
369+ const view = app . workspace . getActiveViewOfType ( MarkdownView ) ;
370+ //hack
371+ //@ts -ignore
372+ if ( view ?. editor ?. cm ?. state ?. field ( editorLivePreviewField ) ) {
373+ const editor = view . editor . cm ;
374+ admonitionElement . onClickEvent ( ( ev ) => {
375+ if ( ev . defaultPrevented || ev . detail > 1 || ev . shiftKey )
376+ return ;
377+ try {
378+ const pos = editor . posAtDOM ( admonitionElement ) ;
379+ editor . focus ( ) ;
380+ editor . dispatch ( {
381+ selection : {
382+ head : pos ,
383+ anchor : pos
384+ }
385+ } ) ;
386+ } catch ( e ) { }
387+ } ) ;
388+ }
389+
357390 return admonitionElement ;
358391 } catch ( e ) {
359392 console . error ( e ) ;
0 commit comments